master
xiaoning 3 weeks ago
parent b42e546ad5
commit db8ca18e1a

@ -5,9 +5,9 @@ VUE_APP_TITLE = 若依商城管理系统,开源免费,软件开发,微信小程
ENV = 'development'
# 若依管理系统/开发环境
VUE_APP_BASE_API = 'https://mall.ichengle.top/api'
#VUE_APP_BASE_API = 'https://mall.ichengle.top/api'
#VUE_APP_BASE_API = '/dev-api'
VUE_APP_BASE_API = 'http://localhost:8080'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true
VUE_APP_JUDGE_STAR = 0

@ -71,3 +71,5 @@ http://mall.ichengle.top
|:------------------------------------------:|
| <img src="doc/datacall.jpg" width="200px"> |
扫公众号二维码,关注后回复:“支持”或者“加群”
admin
123

@ -11,9 +11,6 @@
<right-panel>
<settings />
</right-panel>
<div id="footer-global" :style="{left: !sidebar.opened ? '54px' : '200px'}">
<p class="bolder-font large-tip">技术支持关注程序员诚哥微信公众号回复支持</p>
</div>
</div>
</div>
</template>

@ -31,6 +31,7 @@ router.beforeEach((to, from, next) => {
store.dispatch('GetInfo').then(() => {
isRelogin.show = false
store.dispatch('GenerateRoutes').then(accessRoutes => {
// 根据roles权限生成可访问的路由表
router.addRoutes(accessRoutes) // 动态添加可访问路由表
next({ ...to, replace: true }) // hack方法 确保addRoutes已完成

@ -162,48 +162,48 @@ export const dynamicRoutes = [
}
]
},
{
path: '/product',
component: Layout,
hidden: true,
permissions: ['pms:product:list'],
children: [
{
path: 'edit',
component: () => import('@/views/pms/product/AddProduct'),
name: 'addProduct',
meta: { title: '编辑商品' }
}
]
},
{
path: '/order',
component: Layout,
hidden: true,
permissions: ['oms:order:query'],
children: [
{
path: 'detail',
component: () => import('@/views/oms/order/detail'),
name: 'orderDetail',
meta: { title: '订单详情' }
}
]
},
{
path: '/aftersale',
component: Layout,
hidden: true,
permissions: ['oms:aftersale:query'],
children: [
{
path: 'detail',
component: () => import('@/views/oms/aftersale/detail'),
name: 'aftersaleOrderDetail',
meta: { title: '售后订单详情' }
}
]
},
// {
// path: '/product',
// component: Layout,
// hidden: true,
// permissions: ['pms:product:list'],
// children: [
// {
// path: 'edit',
// component: () => import('@/views/pms/product/AddProduct'),
// name: 'addProduct',
// meta: { title: '编辑商品' }
// }
// ]
// },
// {
// path: '/order',
// component: Layout,
// hidden: true,
// permissions: ['oms:order:query'],
// children: [
// {
// path: 'detail',
// component: () => import('@/views/oms/order/detail'),
// name: 'orderDetail',
// meta: { title: '订单详情' }
// }
// ]
// },
// {
// path: '/aftersale',
// component: Layout,
// hidden: true,
// permissions: ['oms:aftersale:query'],
// children: [
// {
// path: 'detail',
// component: () => import('@/views/oms/aftersale/detail'),
// name: 'aftersaleOrderDetail',
// meta: { title: '售后订单详情' }
// }
// ]
// }
]
// 防止连续点击多次路由报错

@ -1,387 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="100px" size="medium" class="ry_form">
<el-form-item label="活动名称" prop="title">
<el-input
v-model="queryParams.title"
placeholder="请输入活动名称"
clearable
size="small"
/>
</el-form-item>
<el-form-item label="使用范围" prop="useScope">
<DictRadio v-model="queryParams.useScope" @change="handleQuery" size="small"
:radioData="dict.type.coupon_use_scope" :showAll="'all'"/>
</el-form-item>
<el-form-item label="兑换类型" prop="couponType">
<DictRadio v-model="queryParams.couponType" @change="handleQuery" size="small"
:radioData="dict.type.coupon_exchange_type" :showAll="'all'"/>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['act:couponActivity:opt']"
>新增
</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="CouponActivityList" border>
<el-table-column label="活动名称" prop="title"/>
<el-table-column label="使用范围" prop="useScope">
<template slot-scope="scope">
<dict-tag :value="scope.row.useScope" prop-name="coupon_use_scope"/>
</template>
</el-table-column>
<el-table-column label="优惠内容">
<template slot-scope="scope">
<span v-if="scope.row.minAmount">{{ scope.row.minAmount }}{{ scope.row.couponAmount }}</span>
<span v-else>{{ scope.row.couponAmount }}</span>
</template>
</el-table-column>
<el-table-column label="发行总数" prop="totalCount"/>
<el-table-column label="剩余总数" prop="leftCount"/>
<el-table-column label="已使用" prop="useCount"/>
<el-table-column label="每人限领" prop="userLimit"/>
<el-table-column label="兑换类型" prop="couponType">
<template slot-scope="scope">
<dict-tag :value="scope.row.couponType" prop-name="coupon_exchange_type"/>
</template>
</el-table-column>
<el-table-column label="要兑换的积分" prop="useIntegral"/>
<el-table-column label="活动时间" prop="beginTime" width="180">
<template slot-scope="scope">
<p>{{ scope.row.beginTime }}</p>
<p> ~ </p>
<p>{{ scope.row.endTime }}</p>
</template>
</el-table-column>
<el-table-column label="操作" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
@click="seeCouponList(scope.row)"
>领取记录
</el-button>
<el-button
size="mini"
type="text"
@click="handleUpdate(scope.row)"
v-hasPermi="['act:couponActivity:opt']"
>修改
</el-button>
<el-button
size="mini"
type="text"
@click="handleDelete(scope.row)"
v-if="scope.row.leftCount === scope.row.totalCount"
v-hasPermi="['act:couponActivity:opt']"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<InBody v-show="total>0">
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</InBody>
<!-- 添加或修改优惠券活动表对话框 -->
<el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="108px">
<el-form-item label="活动名称" prop="title">
<el-input v-model="form.title" placeholder="请输入活动名称"/>
</el-form-item>
<el-form-item label="发放数量" prop="totalCount">
<el-input-number v-model="form.totalCount" placeholder="请输入发放数量" style="width:220px" :min="1"
:disabled="form.id"/>
</el-form-item>
<el-form-item label="每人限领" prop="userLimit">
<el-input v-model="form.userLimit" style="width:220px">
<template slot="append"></template>
</el-input>
</el-form-item>
<el-form-item label="最低消费金额" prop="minAmount">
<el-input v-model="form.minAmount" style="width:220px">
<template slot="append"></template>
</el-input>
</el-form-item>
<el-form-item label="优惠券金额" prop="couponAmount">
<el-input v-model="form.couponAmount" style="width:220px">
<template slot="append"></template>
</el-input>
</el-form-item>
<el-form-item label="兑换类型" prop="couponType">
<el-radio-group v-model="form.couponType" :disabled="form.id">
<el-radio :label="1">免费兑换</el-radio>
<el-radio :label="2">积分兑换</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="要兑换的积分" prop="useIntegral" v-if="form.couponType === 2">
<el-input-number v-model="form.useIntegral" placeholder="请输入要兑换的积分" style="width:220px"
:disabled="form.id"/>
</el-form-item>
<el-form-item label="活动开始时间" prop="beginTime">
<el-date-picker clearable size="small"
v-model="form.beginTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择活动开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="活动结束时间" prop="endTime">
<el-date-picker clearable size="small"
v-model="form.endTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择活动结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="使用范围" prop="useScope">
<el-radio-group v-model="form.useScope" :disabled="form.id">
<el-radio :label="1">全场通用</el-radio>
<el-radio :label="2">指定商品可用</el-radio>
<el-radio :label="3">指定商品不可用</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="商品列表" prop="productIds" v-if="[2,3].includes(form.useScope)">
<el-button @click="chooseSku" size="small">选择商品</el-button>
<el-table :data="productList" class="mt10" max-height="300px" border>
<el-table-column label="菜品信息">
<template v-slot="{row}">
<div class="flex-center">
<el-image v-if="row.pic" :src="row.pic" :preview-src-list="[row.pic]" class="small-img circle-img"/>
<span class="ml5">{{ row.name }}</span>
</div>
</template>
</el-table-column>
<el-table-column label="操作">
<template v-slot="{row}">
<span class="red ml5 pointer" @click="delProduct(row)"></span>
</template>
</el-table-column>
</el-table>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<product-select ref="productSelect" @onComplete="completeProductIds"/>
<receive-list ref="receiveListRef"/>
</div>
</template>
<script>
import {
addCouponActivity,
delCouponActivity,
exportCouponActivity,
listCouponActivity,
updateCouponActivity
} from "@/api/act/couponActivity";
import ProductSelect from "@/views/pms/product/productSelect.vue";
import receiveList from "@/views/act/couponActivity/receiveList.vue";
export default {
name: "CouponActivity",
components: {ProductSelect, receiveList},
dicts: ['coupon_use_scope', 'coupon_exchange_type'],
data() {
return {
//
loading: true,
productList: [],
//
exportLoading: false,
//
ids: [],
//
total: 0,
//
CouponActivityList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
title: null,
useScope: null,
couponType: null,
},
//
form: {},
//
rules: {
title: [
{required: true, message: "活动名称不能为空", trigger: "blur"}
],
useScope: [
{required: true, message: "使用范围不能为空", trigger: "change"}
],
totalCount: [
{required: true, message: "发行总数不能为空", trigger: "blur"}
],
userLimit: [
{required: true, message: "每人限领不能为空", trigger: "blur"}
],
couponAmount: [
{required: true, message: "优惠券金额不能为空", trigger: "blur"}
],
couponType: [
{required: true, message: "兑换类型不能为空", trigger: "change"}
],
beginTime: [
{required: true, message: "活动开始时间不能为空", trigger: "change"}
],
endTime: [
{required: true, message: "活动结束时间不能为空", trigger: "change"}
],
},
showMoreCondition: false
};
},
created() {
this.getList();
},
methods: {
delProduct(item) {
this.productList = this.productList.filter(it => it.id !== item.id)
this.completeProductIds([])
},
completeProductIds(products) {
this.productList = this.productList.concat(products)
if (!this.productList.length) {
this.form.productIds = null
return
}
this.form.productIds = this.productList.map(it => it.id).join()
},
chooseSku() {
this.$refs.productSelect.init(this.productList.map(it => it.id))
},
/** 查询优惠券活动表列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
listCouponActivity(query, pageReq).then(response => {
const {content, totalElements} = response
this.CouponActivityList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
title: null,
useScope: 1,
productIds: null,
totalCount: null,
userLimit: 1,
couponAmount: null,
minAmount: null,
useIntegral: null,
couponType: 1,
beginTime: null,
endTime: null,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 新增按钮操作 */
handleAdd() {
this.productList = []
this.reset();
this.open = true;
this.title = "添加优惠券活动";
},
seeCouponList(row) {
this.$refs.receiveListRef.init(row.id)
},
/** 修改按钮操作 */
handleUpdate(row) {
this.productList = row.productList
this.form = row;
this.open = true;
this.title = "修改优惠券活动";
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
delete this.form.createTime
updateCouponActivity(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addCouponActivity(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除优惠券活动【' + row.title + '】?').then(function () {
return delCouponActivity(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有优惠券活动表数据项?').then(() => {
this.exportLoading = true;
return exportCouponActivity(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {
});
}
}
};
</script>

@ -1,95 +0,0 @@
<template>
<el-dialog title="领取记录" :visible.sync="open" width="80%" append-to-body>
<el-form :model="queryParams" :inline="true" label-width="100px" size="medium" class="ry_form">
<el-form-item label="使用状态" prop="useStatus">
<DictRadio v-model="queryParams.useStatus" @change="handleQuery" size="small"
:radioData="dict.type.activity_coupon_status" :showAll="'all'"/>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="tableList" border>
<el-table-column label="券ID" prop="id" />
<el-table-column label="用户信息 " >
<template slot-scope="scope">
<div class="flex-center">
<el-avatar :src="scope.row.avatar"></el-avatar>
<div class="tl ml5">
<p>{{scope.row.nickname}}</p>
<p>{{scope.row.phone}}</p>
</div>
</div>
</template>
</el-table-column>
<el-table-column label="领取时间" prop="createTime" width="180" />
<el-table-column label="使用状态" >
<template slot-scope="scope">
<dict-tag :value="scope.row.useStatus" prop-name="activity_coupon_status"/>
</template>
</el-table-column>
<el-table-column label="有效期" width="180" >
<template slot-scope="scope">
<p>{{ scope.row.beginTime}}</p>
<p> ~ </p>
<p>{{ scope.row.endTime}}</p>
</template>
</el-table-column>
<el-table-column label="订单号" prop="orderId" />
<el-table-column label="使用时间" prop="useTime" width="180" />
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</el-dialog>
</template>
<script>
import {listMemberCoupon} from "@/api/act/memberCoupon";
export default {
dicts: ['activity_coupon_status'],
data(){
return{
open:false,
loading: false,
tableList: [],
queryParams: {
pageNum: 1,
pageSize: 10,
useStatus: null,
couponActivityId: null,
},
total: 0,
}
},
methods:{
async init(activityId){
if (!activityId) {
return
}
this.queryParams.couponActivityId = activityId
await this.handleQuery()
this.open = true
},
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
return listMemberCoupon(query, pageReq).then(response => {
const { content, totalElements } = response
this.tableList = content;
this.total = totalElements;
this.loading = false;
});
},
}
}
</script>

@ -1,484 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="活动id" prop="couponActivityId">
<el-input
v-model="queryParams.couponActivityId"
placeholder="请输入活动id"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="用户id" prop="memberId">
<el-input
v-model="queryParams.memberId"
placeholder="请输入用户id"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="活动名称" prop="title">
<el-input
v-model="queryParams.title"
placeholder="请输入活动名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="使用范围 1全场通用 2指定商品可用 3指定商品不可用" prop="useScope">
<el-input
v-model="queryParams.useScope"
placeholder="请输入使用范围 1全场通用 2指定商品可用 3指定商品不可用"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="商品id集合逗号分隔" prop="productIds">
<el-input
v-model="queryParams.productIds"
placeholder="请输入商品id集合逗号分隔"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="优惠券金额" prop="couponAmount">
<el-input
v-model="queryParams.couponAmount"
placeholder="请输入优惠券金额"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="最低消费金额" prop="minAmount">
<el-input
v-model="queryParams.minAmount"
placeholder="请输入最低消费金额"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<template v-if="showMoreCondition">
<el-form-item label="要兑换的积分" prop="useIntegral">
<el-input
v-model="queryParams.useIntegral"
placeholder="请输入要兑换的积分"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="1免费兑换 2积分兑换" prop="couponType">
<el-select v-model="queryParams.couponType" placeholder="请选择1免费兑换 2积分兑换" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="券开始时间" prop="beginTime">
<el-date-picker
clearable
size="small"
v-model="queryParams.beginTime"
type="datetime"
value-format="yyyy-MM-ddTHH:mm:ss"
placeholder="选择券开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="券结束时间" prop="endTime">
<el-date-picker
clearable
size="small"
v-model="queryParams.endTime"
type="datetime"
value-format="yyyy-MM-ddTHH:mm:ss"
placeholder="选择券结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="0未使用 1已使用" prop="useStatus">
<el-select v-model="queryParams.useStatus" placeholder="请选择0未使用 1已使用" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="订单id" prop="orderId">
<el-input
v-model="queryParams.orderId"
placeholder="请输入订单id"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="使用时间" prop="useTime">
<el-date-picker
clearable
size="small"
v-model="queryParams.useTime"
type="datetime"
value-format="yyyy-MM-ddTHH:mm:ss"
placeholder="选择使用时间">
</el-date-picker>
</el-form-item>
</template>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
<el-button :icon="showMoreCondition ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" size="mini" @click="showMoreCondition = !showMoreCondition">{{showMoreCondition ? '收起条件' : '展开条件'}}</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['act:memberCoupon:add']"
>新增</el-button>
</el-col>
</el-col>
</el-row>
<el-table v-loading="loading" :data="MemberCouponList" @selection-change="handleSelectionChange" border>
<el-table-column type="selection" width="55" align="center"/>
<el-table-column label="活动id" prop="couponActivityId"/>
<el-table-column label="用户id" prop="memberId"/>
<el-table-column label="活动名称" prop="title"/>
<el-table-column label="使用范围 1全场通用 2指定商品可用 3指定商品不可用" prop="useScope"/>
<el-table-column label="商品id集合逗号分隔" prop="productIds"/>
<el-table-column label="优惠券金额" prop="couponAmount"/>
<el-table-column label="最低消费金额" prop="minAmount"/>
<el-table-column label="要兑换的积分" prop="useIntegral"/>
<el-table-column label="1免费兑换 2积分兑换" prop="couponType"/>
<el-table-column label="券开始时间" prop="beginTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.beginTime, '') }}</span>
</template>
</el-table-column>
<el-table-column label="券结束时间" prop="endTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.endTime, '') }}</span>
</template>
</el-table-column>
<el-table-column label="0未使用 1已使用" prop="useStatus"/>
<el-table-column label="订单id" prop="orderId"/>
<el-table-column label="使用时间" prop="useTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.useTime, '') }}</span>
</template>
</el-table-column>
<el-table-column label="操作" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['act:memberCoupon:edit']"
>修改
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['act:memberCoupon:remove']"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<InBody v-show="total>0">
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</InBody>
<!-- 添加或修改用户领券记录对话框 -->
<el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="108px" inline class="dialog-form-two">
<el-form-item label="活动id" prop="couponActivityId">
<el-input v-model="form.couponActivityId" placeholder="请输入活动id" />
</el-form-item>
<el-form-item label="用户id" prop="memberId">
<el-input v-model="form.memberId" placeholder="请输入用户id" />
</el-form-item>
<el-form-item label="活动名称" prop="title">
<el-input v-model="form.title" placeholder="请输入活动名称" />
</el-form-item>
<el-form-item label="使用范围 1全场通用 2指定商品可用 3指定商品不可用" prop="useScope">
<el-input v-model="form.useScope" placeholder="请输入使用范围 1全场通用 2指定商品可用 3指定商品不可用" />
</el-form-item>
<el-form-item label="商品id集合逗号分隔" prop="productIds">
<el-input v-model="form.productIds" placeholder="请输入商品id集合逗号分隔" />
</el-form-item>
<el-form-item label="优惠券金额" prop="couponAmount">
<el-input v-model="form.couponAmount" placeholder="请输入优惠券金额" />
</el-form-item>
<el-form-item label="最低消费金额" prop="minAmount">
<el-input v-model="form.minAmount" placeholder="请输入最低消费金额" />
</el-form-item>
<el-form-item label="要兑换的积分" prop="useIntegral">
<el-input v-model="form.useIntegral" placeholder="请输入要兑换的积分" />
</el-form-item>
<el-form-item label="1免费兑换 2积分兑换" prop="couponType">
<el-select v-model="form.couponType" placeholder="请选择1免费兑换 2积分兑换">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="券开始时间" prop="beginTime">
<el-date-picker clearable size="small"
v-model="form.beginTime"
type="datetime"
value-format="yyyy-MM-ddTHH:mm:ss"
placeholder="选择券开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="券结束时间" prop="endTime">
<el-date-picker clearable size="small"
v-model="form.endTime"
type="datetime"
value-format="yyyy-MM-ddTHH:mm:ss"
placeholder="选择券结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="0未使用 1已使用">
<el-radio-group v-model="form.useStatus">
<el-radio label="1">请选择字典生成</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="订单id" prop="orderId">
<el-input v-model="form.orderId" placeholder="请输入订单id" />
</el-form-item>
<el-form-item label="使用时间" prop="useTime">
<el-date-picker clearable size="small"
v-model="form.useTime"
type="datetime"
value-format="yyyy-MM-ddTHH:mm:ss"
placeholder="选择使用时间">
</el-date-picker>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
addMemberCoupon,
delMemberCoupon,
exportMemberCoupon,
getMemberCoupon,
listMemberCoupon,
updateMemberCoupon
} from "@/api/act/memberCoupon";
export default {
name: "MemberCoupon",
data() {
return {
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
MemberCouponList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
couponActivityId: null,
memberId: null,
title: null,
useScope: null,
productIds: null,
couponAmount: null,
minAmount: null,
useIntegral: null,
couponType: null,
beginTime: null,
endTime: null,
useStatus: null,
orderId: null,
useTime: null,
},
//
form: {},
//
rules: {
couponActivityId: [
{ required: true, message: "活动id不能为空", trigger: "blur" }
],
title: [
{ required: true, message: "活动名称不能为空", trigger: "blur" }
],
useScope: [
{ required: true, message: "使用范围 1全场通用 2指定商品可用 3指定商品不可用不能为空", trigger: "blur" }
],
couponAmount: [
{ required: true, message: "优惠券金额不能为空", trigger: "blur" }
],
couponType: [
{ required: true, message: "1免费兑换 2积分兑换不能为空", trigger: "change" }
],
beginTime: [
{ required: true, message: "券开始时间不能为空", trigger: "blur" }
],
endTime: [
{ required: true, message: "券结束时间不能为空", trigger: "blur" }
],
useStatus: [
{ required: true, message: "0未使用 1已使用不能为空", trigger: "blur" }
],
},
showMoreCondition: false
};
},
created() {
this.getList();
},
methods: {
/** 查询用户领券记录列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
listMemberCoupon(query, pageReq).then(response => {
const { content, totalElements } = response
this.MemberCouponList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
couponActivityId: null,
memberId: null,
title: null,
useScope: null,
productIds: null,
couponAmount: null,
minAmount: null,
useIntegral: null,
couponType: null,
beginTime: null,
endTime: null,
useStatus: 0,
orderId: null,
useTime: null,
createTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加用户领券记录";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getMemberCoupon(id).then(response => {
this.form = response;
this.open = true;
this.title = "修改用户领券记录";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateMemberCoupon(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addMemberCoupon(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除用户领券记录编号为"' + ids + '"的数据项?').then(function() {
return delMemberCoupon(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有用户领券记录数据项?').then(() => {
this.exportLoading = true;
return exportMemberCoupon(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

@ -1,50 +1,18 @@
<template>
<div class="home-wrapper">
<el-card style="margin: 20px 20px; font-size: 14px">
<div slot="header"><span>讲解视频</span><a href="https://www.bilibili.com/video/BV16N4y1d7MM/" target="_blank">https://www.bilibili.com/video/BV16N4y1d7MM/</a></div>
<div class="first"><img alt="" :src="avatar" style="width: 50px; height: 50px; float:left; margin-right:10px;border-radius:50%" />
<p style="font-size:16px;margin-bottom:8px">{{name}}{{hello}}</p>
<p style="font-size:12px;color:rgb(185, 181, 189)">今天是{{nowTime}}</p>
</div>
<div class="first">
<ul>
<li class="li" style="width: 33%">会员数
</li>
<li class="li" style="width: 33%">加购数
</li>
<li class="li" style="width: 33%">
分销商数
<el-popover class="ml5" content="功能暂未开发" placement="top" trigger="hover"><i class="el-icon-warning-outline" slot="reference"></i></el-popover>
</li>
</ul>
<ul>
<li class="da" style="width: 33%">
<router-link to="/member/member">{{ memberAndCartStatisticsObj.memberCount }}</router-link>
</li>
<li class="da" style="width: 33%">
<router-link to="/member/shoppingCart">{{ memberAndCartStatisticsObj.cartCount }}</router-link>
</li>
<li class="da" style="width: 33%">
10
</li>
</ul>
</div>
</el-card>
<el-row class="pl20 pr20" :gutter="10">
<el-col :span="3">
<el-image
style="height: 150px"
:src="require('@/assets/QRCode/h5.png')"
fit="fill"
></el-image>
</el-col>
<el-col :span="3">
<el-image
style="height: 150px"
:src="require('@/assets/QRCode/wechat_mini.jpg')"
fit="fill"
></el-image>
</el-col>
<el-col :span="6">
@ -105,43 +73,6 @@
<top-product></top-product>
</div>
</el-col>
<el-col :span="8">
<el-card style="margin: 20px 20px; font-size: 14px">
<div slot="header"><span>发展历程</span></div>
<el-timeline>
<el-timeline-item placement="top" timestamp="2018年">
<el-card>
<h4>参与京东服务市场商品分析应用开发参与京东服务市场会员积分应用开发</h4>
</el-card>
</el-timeline-item>
<el-timeline-item placement="top" timestamp="2019年">
<el-card>
<h4>参与京东服务市场商品搬家应用开发参与拼多多服务市场订单应用开发</h4>
</el-card>
</el-timeline-item>
<el-timeline-item placement="top" timestamp="2020年">
<el-card>
<h4>所参与开发的拼多多订单应用排名服务市场类目第一开始快手服务市场订单应用开发</h4>
</el-card>
</el-timeline-item>
<el-timeline-item placement="top" timestamp="2021年">
<el-card>
<h4>日处理拼多多订单200万条开始美团饿了么应用市场应用开发</h4>
</el-card>
</el-timeline-item>
<el-timeline-item placement="top" timestamp="2022年">
<el-card>
<h4>累计服务10万+电商平台店铺5+外卖店铺开始抖音淘宝服务市场订单应用开发开源ruoyi-wms</h4>
</el-card>
</el-timeline-item>
<el-timeline-item placement="top" timestamp="2023年">
<el-card>
<h4>B站播放量破万开源ruoyi-mall公众号粉丝破万wms-saas火热研发中</h4>
</el-card>
</el-timeline-item>
</el-timeline>
</el-card>
</el-col>
</el-row>
</div>
</template>

@ -1,7 +1,7 @@
<template>
<div class="login">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
<h3 class="title">ruoyi-mall后台登录</h3>
<h3 class="title">yoga-manager登录</h3>
<el-form-item prop="username">
<el-input
v-model="loginForm.username"
@ -43,45 +43,15 @@
:loading="loading"
size="medium"
type="primary"
style="width:45%;"
style="width:100%;"
@click.native.prevent="handleLogin"
>
<span v-if="!loading"> </span>
<span v-else> ...</span>
</el-button>
<el-button
:loading="loading"
size="medium"
type="primary"
style="width:45%;"
@click.native.prevent="handleTry"
>
<span>获取体验账号</span>
</el-button>
<div style="float: right;" v-if="register">
<router-link class="link-type" :to="'/register'">立即注册</router-link>
</div>
</el-form-item>
</el-form>
<el-dialog
title="公众号二维码"
:visible.sync="dialogVisible"
:show-close="false"
:center="true"
width="30%">
<div style="text-align: center">
<span class="font-title-large"><span class="color-main font-extra-large">关注公众号</span>回复<span class="color-main font-extra-large">mall</span>获取体验账号</span>
<br>
<img src="@/assets/logo/gzh.jpg" width="160" height="160" style="margin-top: 10px">
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="dialogConfirm"></el-button>
</span>
</el-dialog>
<!-- 底部 -->
<div class="el-login-footer">
<span>Copyright © 2017-2023 ichengle.top 技术支持关注程序员诚哥微信公众号回复支持</span>
</div>
</div>
</template>
@ -97,8 +67,8 @@ export default {
dialogVisible:false,
codeUrl: "",
loginForm: {
username: "",
password: "",
username: "admin",
password: "123",
rememberMe: false,
code: "",
uuid: ""

@ -1,275 +0,0 @@
<template>
<div class="order_detail_wrapper">
<el-main v-loading="loading">
<el-card>
<el-descriptions title="订单信息" :column="2" border label-class-name="my-label" contentClassName="my-content">
<template slot="extra">
<el-button size="small" @click="$router.back()"></el-button>
</template>
<el-descriptions-item label="订单号">{{ orderDetail.orderSn }}</el-descriptions-item>
<el-descriptions-item label="用户昵称">{{ orderDetail.nickName }}</el-descriptions-item>
<el-descriptions-item label="用户手机号">{{ orderDetail.phone }}</el-descriptions-item>
<el-descriptions-item label="下单时间">{{ parseTime(orderDetail.createTime, '')
}}</el-descriptions-item>
<el-descriptions-item label="支付方式">{{ getPayType(orderDetail) }}</el-descriptions-item>
<el-descriptions-item label="支付时间">{{ parseTime(orderDetail.payTime, '')
}}</el-descriptions-item>
<el-descriptions-item label="订单状态">{{ getOrderStatus(orderDetail) }}</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card>
<div slot="header" style="font-size: 16px;font-weight: bold;">售后信息</div>
<el-table :data="refundInfoList">
<el-table-column label="售后单号" prop="id" width="150"></el-table-column>
<el-table-column label="售后类型" prop="applyRefundType" width="80">
<template slot-scope="{row}">
<span>{{ getAftersaleType(row) }}</span>
</template>
</el-table-column>
<el-table-column label="申请售后时间" prop="applyRefundTime" width="180">
<template slot-scope="{row}">
<span>
{{ parseTime(row.applyRefundTime, '') }}
</span>
</template>
</el-table-column>
<el-table-column label="退款金额" prop="refundAmount">
<template v-slot="scope">
<span>{{ scope.row.refundAmount }}</span>
</template>
</el-table-column>
<el-table-column label="申请原因" prop="reason"></el-table-column>
<el-table-column label="凭证" prop="proofPics">
<template slot-scope="{row}">
<el-image class="small-img circle-img" :src="row.proofPics"
:preview-src-list="[row.proofPics]" />
</template>
</el-table-column>
<el-table-column label="申请状态" prop="refundStatus" width="110">
<template slot-scope="{row}">
<span>{{ getAftersaleStatus(row) }}</span>
</template>
</el-table-column>
<el-table-column label="平台拒绝理由" prop="remark"></el-table-column>
<el-table-column label="退货快递号" prop="refundWaybillCode"></el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit"
@click="handleWatch(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<el-card>
<el-descriptions title="收货信息" :column="2" border label-class-name="my-label" contentClassName="my-content">
<el-descriptions-item label="收货人姓名">{{ addressInfo.name }}</el-descriptions-item>
<el-descriptions-item label="收货人手机号">{{ addressInfo.userPhone }}</el-descriptions-item>
<el-descriptions-item label="收货区域">{{ addressInfo.area }}</el-descriptions-item>
<el-descriptions-item label="详细地址">{{ getHiddenDetailAddress(addressInfo.address) }}</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card>
<div slot="header" style="font-size: 16px;font-weight: bold;">商品信息</div>
<el-table :data="products">
<el-table-column label="商品图片" prop="pic">
<template slot-scope="{row}"><el-image class="small-img circle-img" :src="row.pic"
:preview-src-list="[row.pic]" /></template>
</el-table-column>
<el-table-column label="商品ID" prop="productId"></el-table-column>
<el-table-column label="商品名称" prop="productName"></el-table-column>
<el-table-column label="商品规格" align="center" prop="spData" width="180">
<template slot-scope="scope">
<div v-for="(item,key) in JSON.parse(scope.row.spData)">{{ key }}{{ item }}</div>
</template>
</el-table-column>
<el-table-column label="价格" prop="salePrice"></el-table-column>
<el-table-column label="购买数量" prop="buyNum"></el-table-column>
</el-table>
</el-card>
<el-card>
<el-descriptions title="物流信息" :column="3" border label-class-name="my-label" contentClassName="my-content">
<el-descriptions-item label="发货时间">{{ parseTime(orderDetail.deliveryTime, '')
}}</el-descriptions-item>
<el-descriptions-item label="快递单号">{{ orderDetail.expressNo }}</el-descriptions-item>
<el-descriptions-item label="物流公司">{{ orderDetail.expressNo ? '顺丰速运' : '' }}</el-descriptions-item>
<!-- <el-descriptions-item label="物流公司">{{ orderDetail.expressName }}</el-descriptions-item>-->
</el-descriptions>
</el-card>
<!-- 售后详细信息 -->
<el-dialog title="售后详细信息" :visible.sync="open" width="1100px" append-to-body>
<el-descriptions :column="2" border label-class-name="my-label" contentClassName="my-content">
<el-descriptions-item label="售后单号">{{ refundInfoDetail.id }}</el-descriptions-item>
<el-descriptions-item label="售后类型">{{ getAftersaleType(refundInfoDetail) }}</el-descriptions-item>
<el-descriptions-item label="申请售后时间">{{ parseTime(refundInfoDetail.applyRefundTime,'') }}</el-descriptions-item>
<el-descriptions-item label="退款金额">{{ refundInfoDetail.refundAmount }}</el-descriptions-item>
<el-descriptions-item label="申请原因">{{ refundInfoDetail.reason }}</el-descriptions-item>
<el-descriptions-item label="具体描述">{{ refundInfoDetail.description }}</el-descriptions-item>
<el-descriptions-item label="凭证">
<el-image class="small-img circle-img" :src="refundInfoDetail.proofPics"
:preview-src-list="[refundInfoDetail.proofPics]" />
</el-descriptions-item>
<el-descriptions-item label="申请状态">{{ getAftersaleStatus(refundInfoDetail) }}</el-descriptions-item>
<el-descriptions-item label="平台拒绝理由">{{ refundInfoDetail.remark }}</el-descriptions-item>
<el-descriptions-item label="退货快递号">{{ refundInfoDetail.refundWaybillCode }}</el-descriptions-item>
<el-descriptions-item label="物流公司">{{ getExpressName(refundInfoDetail.refundWpCode) }}</el-descriptions-item>
<el-descriptions-item label="物流进度">
<el-popover placement="left" width="300" trigger="hover" popper-class="popperOptions">
<el-timeline-item v-for="(activity, index) in aliLogisticsInfoList" :key="index"
:timestamp="activity.time">
{{ activity.context }}
</el-timeline-item>
<span slot="reference">{{ refundInfoDetail.logistics }}</span>
</el-popover>
</el-descriptions-item>
</el-descriptions>
</el-dialog>
</el-main>
</div>
</template>
<script>
import { getOmsAftersale } from "@/api/oms/aftersale";
import {getConfigKey2} from "@/api/system/config";
export default {
name: "OmsAftersaleDetail",
dicts: ['oms_order_status', 'oms_pay_type', "oms_aftersale_type", "oms_aftersale_status"],
data() {
return {
products: [],
orderDetail: {},
addressInfo: {},
// aliLogisticsInfoList: [],
refundInfoList: [],
loading: false,
experssList: [],
open: false,
refundInfoDetail: {},
aliLogisticsInfoList: []
}
},
created() {
this.getExpressData()
const { id } = this.$route.query
this.queryDetail(id).then((expressNo) => {
// this.getLogistic(expressNo)
})
},
computed: {
orderStatusMap() {
let obj = this.dict.type.oms_order_status.map(item => [item.value, item.label])
let map = new Map(obj)
return map;
},
payTypeMap() {
let obj = this.dict.type.oms_pay_type.map(item => [item.value, item.label])
let map = new Map(obj)
return map
},
aftersaleTypeMap() {
let obj = this.dict.type.oms_aftersale_type.map(item => [item.value, item.label])
let map = new Map(obj)
return map;
},
aftersaleStatusMap() {
let obj = this.dict.type.oms_aftersale_status.map(item => [item.value, item.label])
let map = new Map(obj)
return map;
},
expressMap() {
let obj = this.experssList.map(item => [item.expressCode, item.expressName])
return new Map(obj)
}
},
methods: {
getExpressData() {
getConfigKey2('express-set-key').then(res => {
if (res.data && res.data.configValue) {
this.experssList = JSON.parse(res.data.configValue)
} else {
this.experssList = []
}
})
},
queryDetail(id) {
this.loading = true
return new Promise(resolve =>
getOmsAftersale(id).then(res => {
const { productList, addressInfo, refundInfoList } = res;
this.orderDetail = res;
this.products = productList
this.refundInfoList = refundInfoList
this.addressInfo = addressInfo || {}
this.loading = false
})
)
},
getOrderStatus(row) {
return this.orderStatusMap.get(row.status + '')
},
getPayType(row) {
return this.payTypeMap.get(row.payType + '')
},
getAftersaleType(row) {
return this.aftersaleTypeMap.get(row.applyRefundType + '')
},
getAftersaleStatus(row) {
return this.aftersaleStatusMap.get(row.refundStatus + '')
},
getExpressName(name) {
return this.expressMap.get(name)
},
handleWatch(row) {
this.refundInfoDetail = row
if(this.refundInfoDetail.allLogistics){
this.aliLogisticsInfoList = JSON.parse(refundInfoDetail.allLogistics)
}
this.open = true
},
cancel() {
this.open = false;
this.refundInfoDetail = {};
}
}
}
</script>
<style lang="stylus">
.order_detail_wrapper
> .el-card + .el-card
margin-top 1rem
.el-form-item
margin-bottom 0
.el-form-item__content, .el-form-item__label
line-height 2
.my-label
width 100px
.my-content
width 400px
.popperOptions[x-placement^=left] .popper__arrow::after{
border-left-color: #565D6B;
}
.popperOptions[x-placement^=right] .popper__arrow::after{
border-right-color: #565D6B;
}
.popperOptions[x-placement^=bottom] .popper__arrow::after{
border-bottom-color: #565D6B;
}
.popperOptions[x-placement^=top] .popper__arrow::after{
border-top-color: #565D6B;
}
.popperOptions{
background-color: #565D6B;
color: #FFFFFF;
border: #565D6B;
}
.el-timeline-item__content {
color: #fff;
}
.el-timeline-item__timestamp {
color: #fff;
}
</style>

@ -1,492 +0,0 @@
<template>
<div class="app-container">
<div v-show="show">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="申请状态" prop="status">
<DictRadio v-model="queryParams.status" :radioData="dict.type.oms_aftersale_status" size="small" :show-all="'all'" @change="handleQuery"></DictRadio>
</el-form-item>
<el-form-item label="售后类型" prop="type">
<DictRadio v-model="queryParams.type" :radioData="dict.type.oms_aftersale_type" size="small" :show-all="'all'" @change="handleQuery"></DictRadio>
</el-form-item>
<el-form-item label="订单号" prop="orderSn">
<el-input v-model.trim="queryParams.orderSn" placeholder="请输入订单号" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="售后单号" prop="id">
<el-input v-model.trim="queryParams.id" placeholder="请输入售后单号" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="会员手机号" prop="userPhone">
<el-input v-model.trim="queryParams.userPhone" placeholder="请输入会员手机号" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="创建时间" prop="Time">
<el-date-picker v-model="queryParams.Time" type="datetimerange" :picker-options="pickerOptions"
range-separator="至" size="small" format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']"
align="right"
@change="handleChange">
</el-date-picker>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="omsAftersaleList" @selection-change="handleSelectionChange" border>
<!-- <el-table-column type="selection" width="55" align="center" />-->
<el-table-column label="售后单号" prop="id" width="160"/>
<el-table-column label="申请状态" prop="aftersaleStatus" width="80">
<template v-slot="scope">
<el-tag effect="plain" size="medium" :type="getAftersaleStatusTag(scope.row)">{{
getAftersaleStatusText(scope.row)
}}
</el-tag>
</template>
</el-table-column>
<el-table-column label="用户信息" prop="nickName" width="120">
<template v-slot="scope">
<div>{{ scope.row.nickName }}</div>
<div>{{ scope.row.phone }}</div>
<div>{{ scope.row.mark }}</div>
</template>
</el-table-column>
<el-table-column label="退款金额" prop="applyReturnAmount" width="120"/>
<el-table-column label="售后类型" prop="applyRefundType" width="80">
<template v-slot="scope">
<el-tag effect="plain" size="medium" :type="getAftersaleTypeTag(scope.row)">{{
getAftersaleTypeText(scope.row)
}}
</el-tag>
</template>
</el-table-column>
<el-table-column label="申请时间" prop="applyRefundTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.applyRefundTime, '') }}</span>
</template>
</el-table-column>
<el-table-column label="处理时间" prop="handleTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.handleTime, '') }}</span>
</template>
</el-table-column>
<el-table-column label="原因" prop="reason" width="220"/>
<el-table-column label="处理备注" prop="note" width="150"/>
<el-table-column label="处理人员" prop="handleMan" width="100"/>
<el-table-column label="订单编号/操作" class-name="small-padding fixed-width" width="220" fixed="right">
<template slot-scope="scope">
<div>
{{ scope.row.orderSn }}
<el-link @click="copy(scope.row.orderSn)" :underline="false"><i
class="el-icon-document-copy el-icon--right"></i></el-link>
</div>
<el-button size="mini" type="text" @click="handleDetail(scope.row.orderId)"
v-hasPermi="['oms:aftersale:query']">详情
</el-button>
<el-button size="mini" type="text" @click="showLog(scope.row.orderId)"
v-hasPermi="['oms:aftersale:log']">日志
</el-button>
<el-button size="mini" type="text" @click="approve(scope.row, 1)"
v-if="scope.row.aftersaleStatus == 0" v-hasPermi="['manager:oms:aftersale:update']">同意
</el-button>
<el-button size="mini" type="text" @click="handleOpen(scope.row, 2)" class="red"
v-if="scope.row.aftersaleStatus == 0" v-hasPermi="['manager:oms:aftersale:update']">拒绝
</el-button>
<el-button size="mini" type="text" @click="confirmReceive(scope.row, 3)"
v-if="scope.row.aftersaleStatus == 1 && scope.row.applyRefundType == 2"
v-hasPermi="['manager:oms:aftersale:update']">确认收货
</el-button>
</template>
</el-table-column>
</el-table>
<InBody v-show="total>0">
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</InBody>
</div>
<!-- <SeeAdsComponent ref="seeAdsComponentRef" v-if="!show" @confirmOk="confirmOk"/>-->
<!-- 拒绝对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="updateForm" :model="updateOrderForm" label-width="100px" :rules="rules">
<el-form-item label="拒绝理由" prop="remark">
<el-input v-model="updateOrderForm.remark" placeholder="请输入拒绝理由" controls-position="right" :min="0" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitUpdate('updateForm')"></el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 日志 -->
<el-dialog :title="logObj.title" :visible.sync="logObj.open" width="500px" append-to-body>
<el-timeline>
<el-timeline-item v-for="item in logObj.logList" placement="top" :timestamp="parseTime(item.createTime, '')">
<el-card>
<h4>{{ getLogEvent(item.orderStatus) }}</h4>
<br>
<h4>操作人{{ item.operateMan }}</h4>
<br v-if="item.note">
<h4 v-if="item.note">{{ item.note }}</h4>
</el-card>
</el-timeline-item>
</el-timeline>
</el-dialog>
</div>
</template>
<script>
import {
addOmsAftersale,
dealWithAftersale,
delOmsAftersale,
exportOmsAftersale,
getOmsAftersale,
listOmsAftersale,
updateOmsAftersale,
viewLog
} from "@/api/oms/aftersale";
import dateUtil from '@/utils/DateUtil';
import SeeAdsComponent from "@/components/SeeAdsComponent.vue";
export default {
name: "OmsAftersale",
components: {SeeAdsComponent},
dicts: ["oms_aftersale_type", "oms_aftersale_status"],
data() {
return {
show: true,
pickerOptions: {
shortcuts: dateUtil.getTimeShort2()
},
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
omsAftersaleList: [],
//
title: "拒绝售后",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
orderSn: null,
type: null,
status: null,
userPhone: null,
Time: [],
startTime: null,
endTime: null
},
//
form: {},
showMoreCondition: false,
updateOrderForm: {
orderId: null,
optType: null,
remark: null,
id: null,
},
rules: {
remark: [
{required: true, message: '请输入拒绝理由', trigger: 'blur'}
]
},
logObj: {
title: '日志',
logList: null,
open: false,
loading: false
}
};
},
created() {
const { status } = this.$route.query
if (status){
this.queryParams.status = status
}
this.getList();
},
methods: {
confirmOk(success) {
if (success) {
this.show = true
this.getList();
}
},
copy(data) {
let url = data;
let oInput = document.createElement('input');
oInput.value = url;
document.body.appendChild(oInput);
oInput.select(); // ;
console.log(oInput.value)
document.execCommand("Copy"); //
this.$modal.msgSuccess('复制成功');
oInput.remove()
},
/** 查询订单售后列表 */
getList() {
if (this.queryParams.Time) {
this.queryParams.startTime = this.queryParams.Time[0]
this.queryParams.endTime = this.queryParams.Time[1]
}
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
listOmsAftersale(query, pageReq).then(response => {
const { content, totalElements } = response
this.omsAftersaleList = content;
this.total = totalElements;
this.loading = false;
});
},
//
reset() {
this.form = {
id: null,
memberId: null,
orderId: null,
returnAmount: null,
type: null,
status: 0,
handleTime: null,
quantity: null,
reason: null,
description: null,
proofPics: null,
handleNote: null,
handleMan: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加订单售后";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getOmsAftersale(id).then(response => {
this.form = response;
this.open = true;
this.title = "修改订单售后";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateOmsAftersale(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addOmsAftersale(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除订单售后编号为"' + ids + '"的数据项?').then(function() {
return delOmsAftersale(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有订单售后数据项?').then(() => {
this.exportLoading = true;
return exportOmsAftersale(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {});
},
/** 售后详情 */
handleDetail(orderId){
const id = orderId
this.$router.push({ path: '/aftersale/detail', query: { id } })
},
/** 同意售后 */
approve(order, type) {
this.$confirm(`您确定要同意售后单号为【${order.id}】的售后申请吗?`, '温馨提示', {type: 'warning'}).then(
() => {
this.updateOrderForm.orderId = order.orderId
this.updateOrderForm.optType = type
dealWithAftersale(this.updateOrderForm).then((response) => {
this.cancel()
this.$message.success('操作成功')
this.getList()
})
}
)
},
/** 拒绝 */
handleOpen(order, type) {
this.updateOrderForm.orderId = order.orderId
this.updateOrderForm.optType = type
this.updateOrderForm.id = order.id
this.open = true
},
confirmReceive(orderId, type) {
this.$confirm(`您确认收到售后单号为【${order.id}】的货物了吗?`, '温馨提示', {type: 'warning'}).then(
() => {
this.updateOrderForm.orderId = orderId
this.updateOrderForm.optType = type
dealWithAftersale(this.updateOrderForm).then((response) => {
this.cancel()
this.$message.success('操作成功')
this.getList()
})
})
},
getAftersaleStatusTag(row) {
switch (row.aftersaleStatus) {
case 0:
return 'info'
case 1:
return 'primary'
case 2:
return 'success'
case 3:
return 'danger'
case 4:
return 'warning'
}
},
getAftersaleStatusText(row) {
switch (row.aftersaleStatus) {
case 0:
return '待处理'
case 1:
return '退货中'
case 2:
return '已完成'
case 3:
return '已拒绝'
case 4:
return '已关闭'
}
},
getAftersaleTypeTag(row) {
switch (row.applyRefundType) {
case 1:
return 'primary'
case 2:
return 'warning'
}
},
getAftersaleTypeText(row) {
switch (row.applyRefundType) {
case 1:
return '退款'
case 2:
return '退货退款'
}
},
cancel() {
this.open = false;
this.updateOrderForm = {
orderId: null,
optType: null,
remark: null,
id: null,
}
},
submitUpdate(formName){
this.$refs[formName].validate(valid => {
if (valid) {
this.$confirm(`您确定要拒绝售后单号为【${this.updateOrderForm.id}】的售后申请了吗?`, '温馨提示', {type: 'warning'}).then(
() => {
dealWithAftersale(this.updateOrderForm).then((response) => {
this.cancel()
this.$message.success('操作成功')
this.getList()
})
})
}
})
},
handleChange(value) {
if (!value) {
this.queryParams.startTime = null;
this.queryParams.endTime = null;
}
},
showLog(orderId){
this.logObj.loading = true
viewLog(orderId).then((response) => {
this.logObj.logList = response
this.logObj.open = true
this.logObj.loading = false
})
},
getLogEvent(status){
switch (status){
case 11:
return '用户申请售后';
case 12:
return '平台同意售后申请';
case 13:
return '售后完成';
case 14:
return '平台拒绝售后';
}
},
}
};
</script>

@ -1,291 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="MEMBER_ID" prop="memberId">
<el-input
v-model="queryParams.memberId"
placeholder="请输入MEMBER_ID"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="订单id" prop="orderId">
<el-input
v-model="queryParams.orderId"
placeholder="请输入订单id"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="子订单id" prop="orderItemId">
<el-input
v-model="queryParams.orderItemId"
placeholder="请输入子订单id"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="退款金额" prop="returnAmount">
<el-input
v-model="queryParams.returnAmount"
placeholder="请输入退款金额"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="退货数量" prop="quantity">
<el-input
v-model="queryParams.quantity"
placeholder="请输入退货数量"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['oms:aftersaleItem:add']"
>新增</el-button>
</el-col>
</el-col>
</el-row>
<el-table v-loading="loading" :data="omsAftersaleItemList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="MEMBER_ID" align="center" prop="memberId" />
<el-table-column label="订单id" align="center" prop="orderId" />
<el-table-column label="子订单id" align="center" prop="orderItemId" />
<el-table-column label="退款金额" align="center" prop="returnAmount" />
<el-table-column label="退货数量" align="center" prop="quantity" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['oms:aftersaleItem:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['oms:aftersaleItem:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改订单售后对话框 -->
<el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="108px" inline class="dialog-form-two">
<el-form-item label="MEMBER_ID" prop="memberId">
<el-input v-model="form.memberId" placeholder="请输入MEMBER_ID" />
</el-form-item>
<el-form-item label="订单id" prop="orderId">
<el-input v-model="form.orderId" placeholder="请输入订单id" />
</el-form-item>
<el-form-item label="子订单id" prop="orderItemId">
<el-input v-model="form.orderItemId" placeholder="请输入子订单id" />
</el-form-item>
<el-form-item label="退款金额" prop="returnAmount">
<el-input v-model="form.returnAmount" placeholder="请输入退款金额" />
</el-form-item>
<el-form-item label="退货数量" prop="quantity">
<el-input v-model="form.quantity" placeholder="请输入退货数量" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listOmsAftersaleItem, getOmsAftersaleItem, delOmsAftersaleItem, addOmsAftersaleItem, updateOmsAftersaleItem, exportOmsAftersaleItem } from "@/api/oms/aftersaleItem";
export default {
name: "OmsAftersaleItem",
data() {
return {
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
omsAftersaleItemList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
memberId: null,
orderId: null,
orderItemId: null,
returnAmount: null,
quantity: null,
},
//
form: {},
//
rules: {
memberId: [
{ required: true, message: "MEMBER_ID不能为空", trigger: "blur" }
],
},
};
},
created() {
this.getList();
},
methods: {
/** 查询订单售后列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
listOmsAftersaleItem(query, pageReq).then(response => {
const { content, totalElements } = response
this.omsAftersaleItemList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
memberId: null,
orderId: null,
orderItemId: null,
returnAmount: null,
quantity: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加订单售后";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getOmsAftersaleItem(id).then(response => {
this.form = response;
this.open = true;
this.title = "修改订单售后";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateOmsAftersaleItem(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addOmsAftersaleItem(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除订单售后编号为"' + ids + '"的数据项?').then(function() {
return delOmsAftersaleItem(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有订单售后数据项?').then(() => {
this.exportLoading = true;
return exportOmsAftersaleItem(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

@ -1,206 +0,0 @@
<template>
<div class="order_detail_wrapper">
<el-main v-loading="loading">
<el-card class="mt10">
<div slot="header" class="clearfix">
<span style="font-size: 16px;font-weight: bold">订单进程</span>
<el-button style="float: right;" size="small" @click="$router.back()"></el-button>
</div>
<el-steps :active="active" align-center>
<el-step title="买家下单" :description="parseTime(orderDetail.createTime, '')"></el-step>
<el-step title="买家付款" :description="parseTime(orderDetail.payTime, '')"></el-step>
<el-step title="商家发货" :description="parseTime(orderDetail.deliveryTime, '')"></el-step>
<el-step title="买家收货" :description="parseTime(orderDetail.receiveTime, '')"></el-step>
</el-steps>
</el-card>
<el-card class="mt10">
<el-descriptions title="订单信息" :column="2" border label-class-name="my-label" contentClassName="my-content">
<!-- <template slot="extra">-->
<!-- <el-button size="small" @click="$router.back()"></el-button>-->
<!-- </template>-->
<el-descriptions-item label="订单编号">{{ orderDetail.orderSn }}</el-descriptions-item>
<el-descriptions-item label="用户名称">{{ orderDetail.userName }}</el-descriptions-item>
<el-descriptions-item label="用户手机号">{{ orderDetail.userPhone }}</el-descriptions-item>
<el-descriptions-item label="下单时间">{{ parseTime(orderDetail.createTime, '') }}</el-descriptions-item>
<el-descriptions-item label="支付方式">{{ getPayType(orderDetail) }}</el-descriptions-item>
<el-descriptions-item label="支付时间">{{ parseTime(orderDetail.payTime, '')
}}</el-descriptions-item>
<el-descriptions-item label="订单状态">{{ getOrderStatus(orderDetail) }}</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card class="mt10">
<el-descriptions title="收货信息" :column="2" border label-class-name="my-label" contentClassName="my-content">
<el-descriptions-item label="收货人姓名">{{ getHiddenName(addressInfo.name) }}</el-descriptions-item>
<el-descriptions-item label="收货人手机号">{{ addressInfo.userPhone }}</el-descriptions-item>
<el-descriptions-item label="收货区域">{{ addressInfo.area }}</el-descriptions-item>
<el-descriptions-item label="详细地址">{{ getHiddenDetailAddress(addressInfo.address) }}</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card class="mt10">
<div slot="header" style="font-size: 16px;font-weight: bold;">商品信息</div>
<el-table :data="products">
<el-table-column label="商品图片" prop="pic">
<template slot-scope="{row}"><el-image class="small-img circle-img" :src="row.pic"
:preview-src-list="[row.pic]" /></template>
</el-table-column>
<el-table-column label="商品ID" prop="productId"></el-table-column>
<el-table-column label="商品名称" prop="productName"></el-table-column>
<el-table-column label="商品规格" align="center" prop="spData" width="180">
<template slot-scope="scope">
<div v-for="(item,key) in JSON.parse(scope.row.spData)">{{ key }}{{ item }}</div>
</template>
</el-table-column>
<el-table-column label="购买数量" prop="buyNum"></el-table-column>
<el-table-column label="实付金额" prop="payAmount">
<template slot-scope="scope">
<span>{{ orderDetail.payAmount }}</span>
</template>
</el-table-column>
</el-table>
</el-card>
<el-card class="mt10">
<el-descriptions title="物流信息" :column="3" border label-class-name="my-label" contentClassName="my-content">
<el-descriptions-item label="发货时间">{{ parseTime(orderDetail.deliveryTime, '')
}}</el-descriptions-item>
<el-descriptions-item label="快递单号">{{ orderDetail.expressNo }}</el-descriptions-item>
<el-descriptions-item label="物流公司">{{ orderDetail.expressName }}</el-descriptions-item>
<!-- <el-descriptions-item label="物流进度">-->
<!-- <el-popover placement="top" width="300" trigger="hover" popper-class="popperOptions">-->
<!-- <el-timeline-item v-for="(activity, index) in aliLogisticsInfoList" :key="index"-->
<!-- :timestamp="activity.time">-->
<!-- {{ activity.context }}-->
<!-- </el-timeline-item>-->
<!-- <span slot="reference">{{ orderDetail.logistics }}</span>-->
<!-- </el-popover>-->
<!-- </el-descriptions-item>-->
</el-descriptions>
</el-card>
</el-main>
</div>
</template>
<script>
import { getOmsOrder } from "@/api/oms/order";
import { getConfigKey } from "@/api/system/config";
const key = "express-set-key"
export default {
name: "OrderDetail",
dicts: ['oms_order_status', 'oms_pay_type'],
data() {
return {
products: [],
orderDetail: {},
addressInfo: {},
aliLogisticsInfoList: [],
loading: false,
experssList: [],
active: 1
}
},
created() {
// this.getExpressData()
const { id } = this.$route.query
this.queryDetail(id).then((expressNo) => {
})
},
computed: {
orderStatusMap() {
let obj = this.dict.type.oms_order_status.map(item => [item.value, item.label])
let map = new Map(obj)
return map;
},
payTypeMap() {
let obj = this.dict.type.oms_pay_type.map(item => [item.value, item.label])
let map = new Map(obj)
return map
},
// expressMap() {
// let obj = this.experssList.map(item => [item.expressCode, item.expressName])
// let map = new Map(obj)
// return map
// }
},
methods: {
queryDetail(id) {
this.loading = true
return new Promise(resolve =>
getOmsOrder(id).then(res => {
const { productInfo, addressInfo } = res;
this.orderDetail = res;
// if (allLogistics) {
// this.aliLogisticsInfoList = JSON.parse(allLogistics)
// }
this.products = productInfo
this.addressInfo = addressInfo
if (this.orderDetail.orderStatus <= 3){
this.active = this.orderDetail.orderStatus + 1
}else {
this.active = 1
}
this.loading = false
})
)
},
getOrderStatus(row) {
return this.orderStatusMap.get(row.orderStatus + '')
},
getPayType(row) {
return this.payTypeMap.get(row.payType + '')
},
// getExpressName(row) {
// return this.expressMap.get(row.expressName + '')
// },
// getExpressData() {
// getConfigKey(key).then(res => {
// if (res.msg) {
// this.experssList = JSON.parse(res.msg)
// } else {
// // this.list = [...defaultList]
// }
// })
// }
}
}
</script>
<style lang="stylus">
.order_detail_wrapper
> .el-card + .el-card
margin-top 1rem
.el-form-item
margin-bottom 0
.el-form-item__content, .el-form-item__label
line-height 2
.my-label
width 100px
.my-content
width 400px
.popperOptions[x-placement^=left] .popper__arrow::after{
border-left-color: #565D6B;
}
.popperOptions[x-placement^=right] .popper__arrow::after{
border-right-color: #565D6B;
}
.popperOptions[x-placement^=bottom] .popper__arrow::after{
border-bottom-color: #565D6B;
}
.popperOptions[x-placement^=top] .popper__arrow::after{
border-top-color: #565D6B;
}
.popperOptions{
background-color: #565D6B;
color: #FFFFFF;
border: #565D6B;
}
.el-timeline-item__content {
color: #fff;
}
.el-timeline-item__timestamp {
color: #fff;
}
</style>

@ -1,791 +0,0 @@
<template>
<div class="app-container" v-if="show">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium"
class="ry_form">
<el-form-item label="订单状态" prop="status">
<DictRadio v-model="queryParams.status" :radioData="dict.type.oms_order_status" size="small" :show-all="'all'"
:filter="['11', '12', '13', '14']" @change="handleQuery"></DictRadio>
</el-form-item>
<el-form-item label="订单编号" prop="orderSn">
<el-input v-model.trim="queryParams.orderSn" placeholder="请输入订单编号" clearable size="small"
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="会员手机号" prop="userPhone">
<el-input v-model.trim="queryParams.userPhone" placeholder="请输入会员手机号" clearable size="small"
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="省市区" prop="provinces">
<address-selector v-model="queryParams.provinces" size="small"></address-selector>
</el-form-item>
<el-form-item label="下单时间" prop="Time">
<el-date-picker v-model="queryParams.Time" type="datetimerange" :picker-options="pickerOptions"
range-separator="至" size="small" format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']"
align="right"
@change="handleChange">
</el-date-picker>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="omsOrderList" border @selection-change="handleSelectionChange"
cell-class-name="my-cell">
<el-table-column type="selection" width="55" align="center"/>
<el-table-column label="收件信息" prop="receiverName" width="280">
<template v-slot="scope">
<div>
<span>{{ scope.row.decrypt?scope.row.receiverName:getHiddenName(scope.row.receiverName) }} {{ scope.row.receiverPhone }}</span>
<el-button
size="mini"
type="text"
@click="handleWatch(scope.row)"
style="margin-left: 10px"
>查看
</el-button>
<el-button
size="mini"
type="text"
@click="handleUpdate(scope.row)"
>修改
</el-button>
</div>
<div>
<span>{{ scope.row.receiverProvince }}{{ scope.row.receiverCity }}{{ scope.row.receiverDistrict }}</span>
<span>{{ scope.row.decrypt?scope.row.receiverDetailAddress:getHiddenDetailAddress(scope.row.receiverDetailAddress) }}</span>
</div>
</template>
</el-table-column>
<el-table-column label="客户信息" prop="receiverName" width="160">
<template v-slot="scope">
<p>{{ scope.row.nickName }}</p>
<p>{{ scope.row.mark }}</p>
</template>
</el-table-column>
<el-table-column label="备注留言" prop="note" width="160">
<template v-slot="scope">
<div>
<span v-if="scope.row.merchantNote" class="note-title" style="margin-right: 10px"></span>
<el-button
size="mini"
type="text"
@click="handleSaveNote(scope.row)"
>{{ scope.row.merchantNote ? '修改' : '添加平台备注' }}
</el-button>
</div>
<div v-if="scope.row.merchantNote">{{ scope.row.merchantNote }}</div>
<div v-if="scope.row.note" class="note-title"></div>
<div v-if="scope.row.note">{{ scope.row.note }}</div>
</template>
</el-table-column>
<el-table-column label="下单时间/支付时间" prop="payTime" width="140">
<template slot-scope="scope">
<div v-if="scope.row.createTime">{{ parseTime(scope.row.createTime, '{mm}-{dd} {hh}:{ii}') }} </div>
<div v-if="scope.row.payTime">{{ parseTime(scope.row.payTime, '{mm}-{dd} {hh}:{ii}') }} </div>
</template>
</el-table-column>
<el-table-column label="优惠券" prop="couponAmount" width="80">
<template v-slot="scope">
<div v-if="scope.row.couponAmount">{{ scope.row.couponAmount }}</div>
<div v-else></div>
</template>
</el-table-column>
<el-table-column label="合计" prop="totalAmount" width="140">
<template v-slot="scope">
<div>
<span>总数 </span>
<span style="color: red;">{{ scope.row.buyNum }}</span>
</div>
<div>实付 {{ scope.row.payAmount }}</div>
</template>
</el-table-column>
<el-table-column label="商品规格" prop="productList" width="280">
<template v-slot="scope">
<div v-for="item in scope.row.productList" class="product-container">
<el-popover
placement="right"
trigger="hover">
<el-image :src="item.pic" style="width: 350px;height: 350px"/>
<el-image slot="reference" class="small-img product-item" :src="item.pic"
style="width: 40px;height: 40px"/>
</el-popover>
<div class="product-item" style="margin-left: 5px">
<div class="sp-data">
<span v-for="(value, key) in JSON.parse(item.spData)">{{ key }}{{ value }}&nbsp;</span>
</div>
<div class="product-item quantity">
<span style="margin-right: 10px">{{ item.salePrice }}</span>
<span>x{{ item.buyNum }}</span>
</div>
</div>
</div>
</template>
</el-table-column>
<el-table-column label="订单状态" prop="status" width="160">
<template v-slot="scope">
<div>
<el-tag :type="getOrderStatusTag(scope.row.status)" style="margin-right: 10px">
{{ getOrderStatusText(scope.row.status) }}
</el-tag>
</div>
<div v-if="scope.row.deliverySn">{{ scope.row.deliverySn }}
<el-link @click="copy(scope.row.deliverySn)" :underline="false"><i
class="el-icon-document-copy el-icon--right"></i></el-link>
</div>
<div v-if="scope.row.deliveryTime">{{ parseTime(scope.row.deliveryTime, '') }}</div>
</template>
</el-table-column>
<el-table-column label="订单编号/操作" class-name="small-padding fixed-width" width="220" fixed="right" >
<template slot-scope="scope" >
<div style="float: right">
{{ scope.row.orderSn }}
<!-- <el-link-->
<!-- size="mini"-->
<!-- icon="el-icon-document-copy"-->
<!-- @click="copyOrderSn(scope.row.orderSn)"-->
<!-- ></el-link>-->
<el-link @click="copy(scope.row.orderSn)" :underline="false"><i
class="el-icon-document-copy el-icon--right"></i></el-link>
</div>
<div style="float: right">
<el-button
size="mini"
type="text"
@click="goDetail(scope.row)"
v-hasPermi="['oms:order:query']"
>详情
</el-button>
<el-button
size="mini"
type="text"
@click="showLog(scope.row.id)"
v-hasPermi="['oms:order:log']"
>日志
</el-button>
<el-button
size="mini"
type="text"
@click="handleDelivery(scope.row)"
:disabled="scope.row.status !== 1 && scope.row.status !== 2 && scope.row.status !== 3"
>发货
</el-button>
</div>
</template>
</el-table-column>
</el-table>
<InBody v-show="total>0">
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</InBody>
<!-- 发货对话框 -->
<el-dialog :title="deliveryObj.title" :visible.sync="deliveryObj.open" width="500px" append-to-body>
<el-form ref="deliveryForm" :model="deliveryObj.form" :rules="deliveryObj.rules" label-width="100px">
<el-form-item label="快递公司" prop="expressName">
<el-select v-model="deliveryObj.form.expressName" placeholder="请选择快递公司" clearable size="small"
filterable>
<!-- <el-option v-for="(item, index) in experssList" :label="item.expressName" :value="item.expressCode"/>-->
<el-option label="顺丰速运" value="1"/>
<el-option label="申通快递" value="2"/>
<el-option label="圆通快递" value="2"/>
</el-select>
</el-form-item>
<el-form-item label="快递单号" prop="expressSn">
<el-input v-model="deliveryObj.form.expressSn" placeholder="请输入快递单号" controls-position="right"
:min="0"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitDelivery('deliveryForm')">
</el-button>
<el-button @click="cancelDelivery"> </el-button>
</div>
</el-dialog>
<!-- 保存商家备注对话框 -->
<el-dialog :title="noteObj.title" :visible.sync="noteObj.open" width="500px" append-to-body>
<el-form ref="noteForm" :model="noteObj.form" label-width="100px">
<el-form-item label="备注" prop="merchantNote">
<el-input type="textarea" v-model="noteObj.form.merchantNote" controls-position="right" :min="0" :rows="3"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" size="small" @click="submitNoteForm()">
确认修改
</el-button>
<el-button size="small" @click="cancelNote"> </el-button>
</div>
</el-dialog>
<!-- 日志 -->
<el-dialog :title="logObj.title" :visible.sync="logObj.open" width="500px" append-to-body>
<el-timeline>
<el-timeline-item v-for="item in logObj.logList" placement="top" :timestamp="parseTime(item.createTime, '')">
<el-card>
<h4>{{ getLogEvent(item.orderStatus) }}</h4>
<br>
<h4>操作人{{ item.operateMan }}</h4>
<br v-if="item.note">
<h4 v-if="item.note">{{ item.note }}</h4>
</el-card>
</el-timeline-item>
</el-timeline>
</el-dialog>
<el-dialog title="修改收件信息" :visible.sync="modifyReceiverInfo.open" width="500px" append-to-body
:close-on-click-modal="false">
<el-form ref="modifyReceiverInfoForm" :model="modifyReceiverInfo.form" label-width="100px"
:rules="modifyReceiverInfo.rules">
<el-form-item label="收件人姓名" prop="receiverName">
<el-input v-model="modifyReceiverInfo.form.receiverName"/>
</el-form-item>
<el-form-item label="收件人电话" prop="receiverPhone">
<el-input v-model="modifyReceiverInfo.form.receiverPhone"/>
</el-form-item>
<el-form-item label="省市区" prop="fullArea">
<AddressSelector v-model="modifyReceiverInfo.form.fullArea" style="width: 100%"/>
</el-form-item>
<el-form-item label="详细地址" prop="receiverDetailAddress">
<el-input v-model="modifyReceiverInfo.form.receiverDetailAddress"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" size="small" @click="asyncOk">
确认修改
</el-button>
<el-button size="small" @click="modifyReceiverInfo.open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
addOmsOrder,
deliverProduct,
delOmsOrder,
exportOmsOrder,
getDecryptPhone,
listOmsOrder,
saveMerchantNote,
updateOmsOrder,
updateReceiverAddress,
viewLog
} from '@/api/oms/order'
import AddressSelector from "@/views/components/AddressSelector/index.vue";
import dateUtil, {dateFormat} from '@/utils/DateUtil';
import {isStarRepo} from "@/utils/is-star-plugin"
import {mapGetters} from "vuex";
export default {
computed:{
...mapGetters(['userId']),
},
name: "OmsOrder",
dicts: ["oms_order_status", "oms_pay_type"],
components: {
AddressSelector
},
data() {
const validArea = (rule, value, callback) => {
const fullArea = this.modifyReceiverInfo.form.fullArea
if (fullArea.length < 3) {
callback(new Error("请选择省市区"));
} else {
callback();
}
};
return {
show: false,
//
loading: true,
pickerOptions: {
shortcuts: dateUtil.getTimeShort2()
},
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
omsOrderList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
payType: null,
status: null,
Time: [],
provinces: [],
receiverProvince: null,
receiverCity: null,
receiverDistrict: null,
orderSn: null,
productName: null,
userPhone: null,
startTime: null,
endTime: null
},
//
form: {},
//
rules: {
memberId: [
{required: true, message: "MEMBER_ID不能为空", trigger: "blur"}
],
receiverName: [
{required: true, message: "收货人姓名不能为空", trigger: "blur"}
],
receiverPhone: [
{required: true, message: "收货人电话不能为空", trigger: "blur"}
],
},
showMoreCondition: false,
deliveryObj: {
title: '订单发货',
form: {
orderId: null,
expressName: null,
expressSn: null
},
open: false,
rules: {
expressName: [
{required: true, message: "快递公司不能为空", trigger: "change"}
],
expressSn: [
{required: true, message: "快递单号不能为空", trigger: "blur"}
]
}
},
noteObj: {
title: null,
form: {
id: null,
merchantNote: null
},
open: false
},
logObj: {
title: '日志',
logList: null,
open: false,
loading: false
},
modifyReceiverInfo: {
open: false,
form: {},
rules: {
receiverName: [
{required: true, message: "收件人姓名不能为空", trigger: "blur"}
],
receiverPhone: [
{required: true, message: "收件人电话不能为空", trigger: "blur"}
], fullArea: [
{required: true, validator: validArea, trigger: "change"}
], receiverDetailAddress: [
{required: true, message: "详细地址不能为空", trigger: "blur"}
],
}
}
};
},
async created() {
const res = await isStarRepo('zccbbg', 'RuoYi-Mall', this.userId, 'https://mall.ichengle.top/order/order', 'ruoyi-mall-商城', 'https://gitee.com/zccbbg/RuoYi-Mall')
this.show = res;
if (res) {
const {phone, status, today} = this.$route.query
if (phone) {
this.queryParams.userPhone = phone
}
if (status) {
this.queryParams.status = status
}
if (today) {
this.setToday()
}
this.getList();
}
},
methods: {
/** 日期组件设置为今天 */
setToday() {
const temp = new Date();
this.queryParams.Time[0] = dateFormat(new Date(temp.setHours(0, 0, 0, 0)), "yyyy-MM-dd hh:mm:ss")
this.queryParams.Time[1] = dateFormat(new Date(temp.setHours(23, 59, 59, 0)), "yyyy-MM-dd hh:mm:ss")
},
/** 查询订单表列表 */
getList() {
if (this.queryParams.Time) {
this.queryParams.startTime = this.queryParams.Time[0]
this.queryParams.endTime = this.queryParams.Time[1]
}
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
if (query.provinces) {
const [receiverProvince, receiverCity, receiverDistrict] = query.provinces
query.receiverProvince = receiverProvince
query.receiverCity = receiverCity
query.receiverDistrict = receiverDistrict
} else {
query.receiverProvince = null
query.receiverCity = null
query.receiverDistrict = null
}
const pageReq = {page: pageNum - 1, size: pageSize};
listOmsOrder(query, pageReq).then(response => {
const {content, totalElements} = response
this.omsOrderList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
memberId: null,
memberUsername: null,
totalAmount: null,
purchasePrice: null,
payAmount: null,
freightAmount: null,
payType: null,
status: 0,
aftersaleStatus: 0,
deliveryCompany: null,
deliverySn: null,
autoConfirmDay: null,
receiverName: null,
receiverPhone: null,
receiverPostCode: null,
receiverProvince: null,
receiverCity: null,
receiverDistrict: null,
receiverDetailAddress: null,
note: null,
confirmStatus: 0,
deleteStatus: 0,
paymentTime: null,
deliveryTime: null,
receiveTime: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加订单表";
},
/** 修改按钮操作 */
async handleUpdate(row) {
await this.handleWatch(row)
const {receiverCity, receiverDistrict, receiverProvince} = row
row.fullArea = [receiverProvince, receiverCity, receiverDistrict]
this.modifyReceiverInfo.form = row
this.modifyReceiverInfo.open = true
},
handleWatch(row) {
getDecryptPhone(row.id).then(response =>{
row.receiverPhone=response;
row.decrypt=true;
})
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateOmsOrder(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addOmsOrder(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除订单表编号为"' + ids + '"的数据项?').then(function () {
return delOmsOrder(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有订单表数据项?').then(() => {
this.exportLoading = true;
return exportOmsOrder(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {
});
},
//change
handleChange(value) {
if (!value) {
this.queryParams.startTime = null;
this.queryParams.endTime = null;
}
},
getOrderStatusTag(status) {
switch (status) {
case 0:
case 1:
return 'info';
case 2:
return 'primary';
case 3:
return 'success';
case 4:
return 'warning';
case 5:
return 'danger';
}
},
getOrderStatusText(status) {
switch (status) {
case 0:
return '待付款';
case 1:
return '待发货';
case 2:
return '已发货';
case 3:
return '已完成';
case 4:
return '已关闭';
case 5:
return '无效订单';
}
},
getLogEvent(status) {
switch (status) {
case 0:
return '用户下单';
case 1:
return '用户支付成功';
case 2:
return '平台发货';
case 3:
return '用户确认收货';
case 4:
return '取消订单';
case 5:
return '无效订单';
}
},
getPayTypeTag(type) {
switch (type) {
case 0:
return 'info';
case 1:
return 'primary';
case 2:
return 'success';
}
},
getPayTypeText(type) {
switch (type) {
case 0:
return '未支付';
case 1:
return '支付宝';
case 2:
return '微信';
}
},
goDetail(row) {
const id = row.id
this.$router.push({path: '/order/detail', query: {id}})
},
copy(data) {
let url = data;
let oInput = document.createElement('input');
oInput.value = url;
document.body.appendChild(oInput);
oInput.select(); // ;
console.log(oInput.value)
document.execCommand("Copy"); //
this.$modal.msgSuccess('复制成功');
oInput.remove()
},
handleDelivery(row) {
this.deliveryObj.form.orderId = row.id
this.deliveryObj.open = true
},
submitDelivery() {
this.$refs['deliveryForm'].validate((valid) => {
if (valid) {
deliverProduct(this.deliveryObj.form).then(resp => {
this.$modal.msgSuccess('发货成功')
this.cancelDelivery()
this.getList()
})
}
})
},
cancelDelivery() {
this.deliveryObj.open = false
this.deliveryObj.form.orderId = null
this.deliveryObj.form.expressName = null
this.deliveryObj.form.expressSn = null
},
handleSaveNote(row) {
const merchantNote = row.merchantNote
if (merchantNote) {
this.noteObj.title = '修改平台备注'
} else {
this.noteObj.title = '添加平台备注'
}
this.noteObj.form.id = row.id
this.noteObj.form.merchantNote = row.merchantNote
this.noteObj.open = true
},
//
submitNoteForm() {
saveMerchantNote(this.noteObj.form).then(resp => {
if (resp > 0) {
this.$modal.msgSuccess('修改成功')
this.cancelNote()
this.getList()
}
})
},
cancelNote() {
this.noteObj.open = false
this.noteObj.form.id = null
this.noteObj.form.merchantNote = null
},
showLog(orderId) {
this.logObj.loading = true
viewLog(orderId).then((response) => {
this.logObj.logList = response
this.logObj.open = true
this.logObj.loading = false
})
},
asyncOk() {
this.$refs['modifyReceiverInfoForm'].validate((valid) => {
if (valid) {
const {id, receiverName, fullArea, receiverPhone, receiverDetailAddress} = this.modifyReceiverInfo.form
const [receiverProvince, receiverCity, receiverDistrict] = fullArea
updateReceiverAddress({
id,
receiverCity,
receiverDetailAddress,
receiverDistrict,
receiverName,
receiverPhone,
receiverProvince
}).then(resp => {
this.$modal.msgSuccess('修改成功')
this.getList()
this.modifyReceiverInfo.open = false
})
}
})
}
},
};
</script>
<style lang="scss">
.product-container {
display: flex;
flex-direction: row;
align-items: center;
width: 340px;
.product-item {
margin: auto;
width: 290px;
.sp-data {
font-size: 13px;
}
.quantity {
font-weight: bold;
font-size: 13px;
}
}
}
.note-title {
font-weight: bold;
}
.el-table .my-cell {
vertical-align: top
}
.el-link.el-link--default {
color: #409eff;
}
.el-select {
width: 100%;
}
</style>

@ -1,258 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="订单id" prop="orderId">
<el-input
v-model="queryParams.orderId"
placeholder="请输入订单id"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="物流公司(配送方式)" prop="deliveryCompany">
<el-input
v-model="queryParams.deliveryCompany"
placeholder="请输入物流公司(配送方式)"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="物流单号" prop="deliverySn">
<el-input
v-model="queryParams.deliverySn"
placeholder="请输入物流单号"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['oms:orderDeliveryHistory:add']"
>新增</el-button>
</el-col>
</el-col>
</el-row>
<el-table v-loading="loading" :data="omsOrderDeliveryHistoryList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="订单id" align="center" prop="orderId" />
<el-table-column label="物流公司(配送方式)" align="center" prop="deliveryCompany" />
<el-table-column label="物流单号" align="center" prop="deliverySn" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['oms:orderDeliveryHistory:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['oms:orderDeliveryHistory:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改订单发货记录对话框 -->
<el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="108px" inline class="dialog-form-two">
<el-form-item label="订单id" prop="orderId">
<el-input v-model="form.orderId" placeholder="请输入订单id" />
</el-form-item>
<el-form-item label="物流公司(配送方式)" prop="deliveryCompany">
<el-input v-model="form.deliveryCompany" placeholder="请输入物流公司(配送方式)" />
</el-form-item>
<el-form-item label="物流单号" prop="deliverySn">
<el-input v-model="form.deliverySn" placeholder="请输入物流单号" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listOmsOrderDeliveryHistory, getOmsOrderDeliveryHistory, delOmsOrderDeliveryHistory, addOmsOrderDeliveryHistory, updateOmsOrderDeliveryHistory, exportOmsOrderDeliveryHistory } from "@/api/oms/orderDeliveryHistory";
export default {
name: "OmsOrderDeliveryHistory",
data() {
return {
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
omsOrderDeliveryHistoryList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
orderId: null,
deliveryCompany: null,
deliverySn: null,
},
//
form: {},
//
rules: {
},
};
},
created() {
this.getList();
},
methods: {
/** 查询订单发货记录列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
listOmsOrderDeliveryHistory(query, pageReq).then(response => {
const { content, totalElements } = response
this.omsOrderDeliveryHistoryList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
orderId: null,
deliveryCompany: null,
deliverySn: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加订单发货记录";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getOmsOrderDeliveryHistory(id).then(response => {
this.form = response;
this.open = true;
this.title = "修改订单发货记录";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateOmsOrderDeliveryHistory(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addOmsOrderDeliveryHistory(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除订单发货记录编号为"' + ids + '"的数据项?').then(function() {
return delOmsOrderDeliveryHistory(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有订单发货记录数据项?').then(() => {
this.exportLoading = true;
return exportOmsOrderDeliveryHistory(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

@ -1,424 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="订单id" prop="orderId">
<el-input
v-model="queryParams.orderId"
placeholder="请输入订单id"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="PRODUCT_ID" prop="productId">
<el-input
v-model="queryParams.productId"
placeholder="请输入PRODUCT_ID"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="商品编码" prop="outProductId">
<el-input
v-model="queryParams.outProductId"
placeholder="请输入商品编码"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="商品sku id" prop="skuId">
<el-input
v-model="queryParams.skuId"
placeholder="请输入商品sku id"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="sku编码" prop="outSkuId">
<el-input
v-model="queryParams.outSkuId"
placeholder="请输入sku编码"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="商品快照id" prop="productSnapshotId">
<el-input
v-model="queryParams.productSnapshotId"
placeholder="请输入商品快照id"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="sku快照id" prop="skuSnapshotId">
<el-input
v-model="queryParams.skuSnapshotId"
placeholder="请输入sku快照id"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<template v-if="showMoreCondition">
<el-form-item label="展示图片" prop="pic">
<el-input
v-model="queryParams.pic"
placeholder="请输入展示图片"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="PRODUCT_NAME" prop="productName">
<el-input
v-model="queryParams.productName"
placeholder="请输入PRODUCT_NAME"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="销售价格" prop="salePrice">
<el-input
v-model="queryParams.salePrice"
placeholder="请输入销售价格"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="采购价" prop="purchasePrice">
<el-input
v-model="queryParams.purchasePrice"
placeholder="请输入采购价"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="购买数量" prop="quantity">
<el-input
v-model="queryParams.quantity"
placeholder="请输入购买数量"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="商品分类id" prop="productCategoryId">
<el-input
v-model="queryParams.productCategoryId"
placeholder="请输入商品分类id"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</template>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
<el-button :icon="showMoreCondition ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" size="mini" @click="showMoreCondition = !showMoreCondition">{{showMoreCondition ? '收起条件' : '展开条件'}}</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['oms:orderItem:add']"
>新增</el-button>
</el-col>
</el-col>
</el-row>
<el-table v-loading="loading" :data="omsOrderItemList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="订单id" align="center" prop="orderId" />
<el-table-column label="PRODUCT_ID" align="center" prop="productId" />
<el-table-column label="商品编码" align="center" prop="outProductId" />
<el-table-column label="商品sku id" align="center" prop="skuId" />
<el-table-column label="sku编码" align="center" prop="outSkuId" />
<el-table-column label="商品快照id" align="center" prop="productSnapshotId" />
<el-table-column label="sku快照id" align="center" prop="skuSnapshotId" />
<el-table-column label="展示图片" align="center" prop="pic" />
<el-table-column label="PRODUCT_NAME" align="center" prop="productName" />
<el-table-column label="销售价格" align="center" prop="salePrice" />
<el-table-column label="采购价" align="center" prop="purchasePrice" />
<el-table-column label="购买数量" align="center" prop="quantity" />
<el-table-column label="商品分类id" align="center" prop="productCategoryId" />
<el-table-column label="商品sku属性:[{"key":"","value":""},{"key":"","value":"4G"}]" align="center" prop="spData" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['oms:orderItem:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['oms:orderItem:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改订单中所包含的商品对话框 -->
<el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="108px" inline class="dialog-form-two">
<el-form-item label="订单id" prop="orderId">
<el-input v-model="form.orderId" placeholder="请输入订单id" />
</el-form-item>
<el-form-item label="PRODUCT_ID" prop="productId">
<el-input v-model="form.productId" placeholder="请输入PRODUCT_ID" />
</el-form-item>
<el-form-item label="商品编码" prop="outProductId">
<el-input v-model="form.outProductId" placeholder="请输入商品编码" />
</el-form-item>
<el-form-item label="商品sku id" prop="skuId">
<el-input v-model="form.skuId" placeholder="请输入商品sku id" />
</el-form-item>
<el-form-item label="sku编码" prop="outSkuId">
<el-input v-model="form.outSkuId" placeholder="请输入sku编码" />
</el-form-item>
<el-form-item label="商品快照id" prop="productSnapshotId">
<el-input v-model="form.productSnapshotId" placeholder="请输入商品快照id" />
</el-form-item>
<el-form-item label="sku快照id" prop="skuSnapshotId">
<el-input v-model="form.skuSnapshotId" placeholder="请输入sku快照id" />
</el-form-item>
<el-form-item label="展示图片" prop="pic">
<el-input v-model="form.pic" placeholder="请输入展示图片" />
</el-form-item>
<el-form-item label="PRODUCT_NAME" prop="productName">
<el-input v-model="form.productName" placeholder="请输入PRODUCT_NAME" />
</el-form-item>
<el-form-item label="销售价格" prop="salePrice">
<el-input v-model="form.salePrice" placeholder="请输入销售价格" />
</el-form-item>
<el-form-item label="采购价" prop="purchasePrice">
<el-input v-model="form.purchasePrice" placeholder="请输入采购价" />
</el-form-item>
<el-form-item label="购买数量" prop="quantity">
<el-input v-model="form.quantity" placeholder="请输入购买数量" />
</el-form-item>
<el-form-item label="商品分类id" prop="productCategoryId">
<el-input v-model="form.productCategoryId" placeholder="请输入商品分类id" />
</el-form-item>
<el-form-item label="商品sku属性:[{"key":"","value":""},{"key":"","value":"4G"}]" prop="spData">
<el-input v-model="form.spData" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listOmsOrderItem, getOmsOrderItem, delOmsOrderItem, addOmsOrderItem, updateOmsOrderItem, exportOmsOrderItem } from "@/api/oms/orderItem";
export default {
name: "OmsOrderItem",
data() {
return {
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
omsOrderItemList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
orderId: null,
productId: null,
outProductId: null,
skuId: null,
outSkuId: null,
productSnapshotId: null,
skuSnapshotId: null,
pic: null,
productName: null,
salePrice: null,
purchasePrice: null,
quantity: null,
productCategoryId: null,
spData: null,
},
//
form: {},
//
rules: {
outProductId: [
{ required: true, message: "商品编码不能为空", trigger: "blur" }
],
outSkuId: [
{ required: true, message: "sku编码不能为空", trigger: "blur" }
],
},
showMoreCondition: false
};
},
created() {
this.getList();
},
methods: {
/** 查询订单中所包含的商品列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
listOmsOrderItem(query, pageReq).then(response => {
const { content, totalElements } = response
this.omsOrderItemList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
orderId: null,
productId: null,
outProductId: null,
skuId: null,
outSkuId: null,
productSnapshotId: null,
skuSnapshotId: null,
pic: null,
productName: null,
salePrice: null,
purchasePrice: null,
quantity: null,
productCategoryId: null,
spData: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加订单中所包含的商品";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getOmsOrderItem(id).then(response => {
this.form = response;
this.open = true;
this.title = "修改订单中所包含的商品";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateOmsOrderItem(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addOmsOrderItem(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除订单中所包含的商品编号为"' + ids + '"的数据项?').then(function() {
return delOmsOrderItem(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有订单中所包含的商品数据项?').then(() => {
this.exportLoading = true;
return exportOmsOrderItem(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

@ -1,287 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="订单号" prop="orderId">
<el-input
v-model="queryParams.orderSn"
placeholder="请输入订单号"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="订单状态" prop="status">
<DictRadio v-model="queryParams.status" :radioData="dict.type.oms_order_status" size="small" :show-all="'all'"></DictRadio>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="omsOrderOperateHistoryList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" />-->
<el-table-column label="订单号" align="center" prop="orderSn" />
<el-table-column label="订单状态" align="center" prop="orderStatus">
<template v-slot="scope">
<el-tag :type="getOrderTypeTag(scope.row.orderStatus)" style="margin-right: 10px">
{{ getOrderTypeText(scope.row.orderStatus) }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="note" />
<el-table-column label="操作时间" align="center" prop="createTime">
<template v-slot="scope">
<div>{{ parseTime(scope.row.createTime, '')}}</div>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-edit"-->
<!-- @click="handleUpdate(scope.row)"-->
<!-- v-hasPermi="['oms:orderOperateHistory:edit']"-->
<!-- >修改</el-button>-->
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['oms:orderOperateHistory:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改订单操作历史记录对话框 -->
<el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="108px" inline class="dialog-form-two">
<el-form-item label="订单id" prop="orderId">
<el-input v-model="form.orderId" placeholder="请输入订单id" />
</el-form-item>
<el-form-item label="操作人:用户;系统;后台管理员" prop="operateMan">
<el-input v-model="form.operateMan" placeholder="请输入操作人:用户;系统;后台管理员" />
</el-form-item>
<el-form-item label="订单状态0->待付款1->待发货2->已发货3->已完成4->已关闭5->无效订单">
<el-radio-group v-model="form.orderStatus">
<el-radio label="1">请选择字典生成</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="note">
<el-input v-model="form.note" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listOmsOrderOperateHistory, getOmsOrderOperateHistory, delOmsOrderOperateHistory, addOmsOrderOperateHistory, updateOmsOrderOperateHistory, exportOmsOrderOperateHistory } from "@/api/oms/orderOperateHistory";
export default {
name: "OmsOrderOperateHistory",
dicts: ["oms_order_status"],
data() {
return {
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
omsOrderOperateHistoryList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
orderSn: null,
operateMan: null,
orderStatus: null,
note: null,
},
//
form: {},
//
rules: {
},
};
},
created() {
this.getList();
},
methods: {
/** 查询订单操作历史记录列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
listOmsOrderOperateHistory(query, pageReq).then(response => {
const { content, totalElements } = response
this.omsOrderOperateHistoryList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
orderId: null,
operateMan: null,
orderStatus: 0,
note: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加订单操作历史记录";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getOmsOrderOperateHistory(id).then(response => {
this.form = response;
this.open = true;
this.title = "修改订单操作历史记录";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateOmsOrderOperateHistory(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addOmsOrderOperateHistory(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除订单操作历史记录编号为"' + ids + '"的数据项?').then(function() {
return delOmsOrderOperateHistory(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有订单操作历史记录数据项?').then(() => {
this.exportLoading = true;
return exportOmsOrderOperateHistory(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {});
},
getOrderTypeTag(status){
switch (status){
case 0:
case 1:
return 'info';
case 2:
return 'primary';
case 3:
return 'success';
case 4:
return 'warning';
case 5:
return 'danger';
}
},
getOrderTypeText(status){
switch (status){
case 0:
return '待付款';
case 1:
return '待发货';
case 2:
return '已发货';
case 3:
return '已完成';
case 4:
return '已关闭';
case 5:
return '无效订单';
case 11:
return '售后待处理';
case 12:
return '退货中';
case 13:
return '售后已完成';
case 14:
return '售后已拒绝';
}
}
}
};
</script>

@ -1,395 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="payment_id" prop="paymentId">
<el-input
v-model="queryParams.paymentId"
placeholder="请输入payment_id"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="用户 ID" prop="memberId">
<el-input
v-model="queryParams.memberId"
placeholder="请输入用户 ID"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="OPENID" prop="openid">
<el-input
v-model="queryParams.openid"
placeholder="请输入OPENID"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="真实姓名,提现需要" prop="realName">
<el-input
v-model="queryParams.realName"
placeholder="请输入真实姓名,提现需要"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="标题|商品名称" prop="title">
<el-input
v-model="queryParams.title"
placeholder="请输入标题|商品名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="订单号 支付时是payId 其他为orderId" prop="orderId">
<el-input
v-model="queryParams.orderId"
placeholder="请输入订单号 支付时是payId 其他为orderId"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="金额,单位分" prop="money">
<el-input
v-model="queryParams.money"
placeholder="请输入金额,单位分"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<template v-if="showMoreCondition">
<el-form-item label="交易类型" prop="opType">
<el-select v-model="queryParams.opType" placeholder="请选择交易类型" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="状态" prop="paymentStatus">
<el-select v-model="queryParams.paymentStatus" placeholder="请选择状态" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="附加数据" prop="attach">
<el-input
v-model="queryParams.attach"
placeholder="请输入附加数据"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</template>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
<el-button :icon="showMoreCondition ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" size="mini" @click="showMoreCondition = !showMoreCondition">{{showMoreCondition ? '收起条件' : '展开条件'}}</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['pms:wechatPaymentHistory:add']"
>新增</el-button>
</el-col>
</el-col>
</el-row>
<el-table v-loading="loading" :data="omsWechatPaymentHistoryList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="payment_id" align="center" prop="paymentId" />
<el-table-column label="用户 ID" align="center" prop="memberId" />
<el-table-column label="OPENID" align="center" prop="openid" />
<el-table-column label="真实姓名,提现需要" align="center" prop="realName" />
<el-table-column label="标题|商品名称" align="center" prop="title" />
<el-table-column label="订单号 支付时是payId 其他为orderId" align="center" prop="orderId" />
<el-table-column label="金额,单位分" align="center" prop="money" />
<el-table-column label="交易类型" align="center" prop="opType" />
<el-table-column label="状态" align="center" prop="paymentStatus" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="附加数据" align="center" prop="attach" />
<el-table-column label="响应内容" align="center" prop="responseBody" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['pms:wechatPaymentHistory:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['pms:wechatPaymentHistory:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改微信订单表对话框 -->
<el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="108px" inline class="dialog-form-two">
<el-form-item label="payment_id" prop="paymentId">
<el-input v-model="form.paymentId" placeholder="请输入payment_id" />
</el-form-item>
<el-form-item label="用户 ID" prop="memberId">
<el-input v-model="form.memberId" placeholder="请输入用户 ID" />
</el-form-item>
<el-form-item label="OPENID" prop="openid">
<el-input v-model="form.openid" placeholder="请输入OPENID" />
</el-form-item>
<el-form-item label="真实姓名,提现需要" prop="realName">
<el-input v-model="form.realName" placeholder="请输入真实姓名,提现需要" />
</el-form-item>
<el-form-item label="标题|商品名称" prop="title">
<el-input v-model="form.title" placeholder="请输入标题|商品名称" />
</el-form-item>
<el-form-item label="订单号 支付时是payId 其他为orderId" prop="orderId">
<el-input v-model="form.orderId" placeholder="请输入订单号 支付时是payId 其他为orderId" />
</el-form-item>
<el-form-item label="金额,单位分" prop="money">
<el-input v-model="form.money" placeholder="请输入金额,单位分" />
</el-form-item>
<el-form-item label="交易类型" prop="opType">
<el-select v-model="form.opType" placeholder="请选择交易类型">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="状态">
<el-radio-group v-model="form.paymentStatus">
<el-radio label="1">请选择字典生成</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="附加数据" prop="attach">
<el-input v-model="form.attach" placeholder="请输入附加数据" />
</el-form-item>
<el-form-item label="响应内容" prop="responseBody">
<el-input v-model="form.responseBody" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listOmsWechatPaymentHistory, getOmsWechatPaymentHistory, delOmsWechatPaymentHistory, addOmsWechatPaymentHistory, updateOmsWechatPaymentHistory, exportOmsWechatPaymentHistory } from "@/api/oms/wechatPaymentHistory";
export default {
name: "OmsWechatPaymentHistory",
data() {
return {
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
omsWechatPaymentHistoryList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
paymentId: null,
memberId: null,
openid: null,
realName: null,
title: null,
orderId: null,
money: null,
opType: null,
paymentStatus: null,
attach: null,
responseBody: null,
},
//
form: {},
//
rules: {
memberId: [
{ required: true, message: "用户 ID不能为空", trigger: "blur" }
],
openid: [
{ required: true, message: "OPENID不能为空", trigger: "blur" }
],
title: [
{ required: true, message: "标题|商品名称不能为空", trigger: "blur" }
],
orderId: [
{ required: true, message: "订单号 支付时是payId 其他为orderId不能为空", trigger: "blur" }
],
money: [
{ required: true, message: "金额,单位分不能为空", trigger: "blur" }
],
opType: [
{ required: true, message: "交易类型不能为空", trigger: "change" }
],
paymentStatus: [
{ required: true, message: "状态不能为空", trigger: "blur" }
],
},
showMoreCondition: false
};
},
created() {
this.getList();
},
methods: {
/** 查询微信订单表列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
listOmsWechatPaymentHistory(query, pageReq).then(response => {
const { content, totalElements } = response
this.omsWechatPaymentHistoryList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
paymentId: null,
memberId: null,
openid: null,
realName: null,
title: null,
orderId: null,
money: null,
opType: null,
paymentStatus: 0,
remark: null,
attach: null,
responseBody: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加微信订单表";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getOmsWechatPaymentHistory(id).then(response => {
this.form = response;
this.open = true;
this.title = "修改微信订单表";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateOmsWechatPaymentHistory(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addOmsWechatPaymentHistory(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除微信订单表编号为"' + ids + '"的数据项?').then(function() {
return delOmsWechatPaymentHistory(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有微信订单表数据项?').then(() => {
this.exportLoading = true;
return exportOmsWechatPaymentHistory(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

@ -1,257 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="状态" prop="showStatus">
<DictRadio v-model="queryParams.showStatus" @change="handleQuery" size="small"
:radioData="dict.type.sys_normal_disable" :showAll="'all'"/>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input
v-model="queryParams.nameLike"
placeholder="名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="pmsBrandList" @selection-change="handleSelectionChange" border>
<el-table-column type="selection" width="55" align="center"/>
<el-table-column label="品牌logo" prop="logo">
<template slot-scope="{ row }">
<el-image v-if="row.logo" :src="row.logo" :preview-src-list="[row.logo]" class="small-img circle-img"/>
</template>
</el-table-column>
<el-table-column label="名称" prop="name"/>
<el-table-column label="排序" prop="sort"/>
<el-table-column label="状态" prop="showStatus">
<template slot-scope="{ row }">
<dict-tag :value="row.showStatus" prop-name="sys_normal_disable"/>
</template>
</el-table-column>
<el-table-column label="操作" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<InBody v-show="total>0">
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</InBody>
<!-- 添加或修改品牌管理对话框 -->
<el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="108px" inline class="dialog-form-one">
<el-form-item label="状态">
<DictRadio v-model="form.showStatus" size="small"
:radioData="dict.type.sys_normal_disable"/>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" placeholder="名称" />
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="form.sort" placeholder="请输入排序" />
</el-form-item>
<el-form-item label="logo" prop="logo">
<oss-image-upload v-model="form.logo" :limit="1" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addPmsBrand, delPmsBrand, exportPmsBrand, getPmsBrand, listPmsBrand, updatePmsBrand} from "@/api/pms/brand";
export default {
name: "PmsBrand",
dicts: ['sys_normal_disable'],
data() {
return {
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
pmsBrandList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
nameLike: null,
sort: null,
showStatus: null,
},
//
form: {},
//
rules: {
},
};
},
created() {
this.getList();
},
methods: {
/** 查询品牌管理列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
listPmsBrand(query, pageReq).then(response => {
const { content, totalElements } = response
this.pmsBrandList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
name: null,
sort: null,
showStatus: 0,
logo: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加品牌管理";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getPmsBrand(id).then(response => {
this.form = response;
this.open = true;
this.title = "修改品牌管理";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updatePmsBrand(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addPmsBrand(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除品牌管理编号为"' + ids + '"的数据项?').then(function() {
return delPmsBrand(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有品牌管理数据项?').then(() => {
this.exportLoading = true;
return exportPmsBrand(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

@ -1,363 +0,0 @@
<template>
<div class="add-product-wrapper">
<el-form label-width="108px" :model="form" ref="form" :rules="rules">
<el-card style="margin: 20px 20px; font-size: 14px">
<div slot="header">
<span>基本信息</span>
</div>
<el-row>
<el-col :span="12">
<el-form-item label="商品名称" prop="name">
<el-input v-model="form.name" placeholder="请输入商品名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="商品编码" prop="outProductId">
<el-input v-model="form.outProductId" placeholder="请输入商品编码"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="品牌" prop="brandId">
<brand-select v-model="form.brandId" @change="onBrandChange"></brand-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="分类" prop="categoryId">
<product-category-select v-model="form.categoryId" @change="categoryChange"></product-category-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="排序" prop="sort">
<el-input v-model="form.sort" placeholder="请输入排序"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="价格" prop="price">
<el-input v-model="form.price" placeholder="请输入PRICE"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="单位" prop="unit">
<el-input v-model="form.unit" placeholder="请输入单位"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="商品重量" prop="weight">
<el-input v-model="form.weight" placeholder="商品重量,默认为克"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="上架状态">
<DictRadio v-model="form.publishStatus" size="small"
:radioData="dict.type.pms_publish_status"/>
</el-form-item>
</el-col>
</el-row>
</el-card>
<el-card style="margin: 20px 20px; font-size: 14px">
<div slot="header">
<span>产品图片</span>
</div>
<el-form-item label="主图" prop="pic">
<oss-image-upload v-model="form.pic" :limit="1"></oss-image-upload>
</el-form-item>
<el-form-item label="轮播图" prop="albumPics">
<oss-image-upload v-model="albumPics" :limit="5"></oss-image-upload>
</el-form-item>
</el-card>
<el-card style="margin: 20px 20px; font-size: 14px">
<div slot="header">
<span>产品规格</span>
</div>
<el-form-item label="规格类型">
<div class="sku-wrapper">
<div class="sku_sorts">
<div class="sku_sort" v-for="(s, idx0) in productAttr" :key="s.name">
<div class="label flex-center">
<div class="flex-one">
<dict-select v-model="s.name" prop-name="sku_sort_list" value-prop="label"></dict-select>
</div><a class="red" @click="deleteSkuSort(idx0)"></a>
</div>
<div class="values" v-if="s.name">
<div class="value" v-for="(it2, idx1) in s.options" :key="idx1">
<el-input :value="it2.name" @input="changeName(s, idx1, $event)" placeholder="请输入规格名称"></el-input><a class="red no-break ml8" v-if="idx1 < s.options.length - 1 || (s.options.length === maxOptionNum &amp;&amp; idx1 === 3)" @click="deleteOption(s, idx1)"></a>
</div>
</div>
</div>
</div>
<el-button v-if="productAttr.length < 2" @click="addSkuSort">+</el-button>
</div>
</el-form-item>
<el-form-item label="规格信息">
<el-button @click="refreshSku()" class="mb20">刷新列表</el-button>
<el-table :data="form.skuList" :max-height="400">
<el-table-column v-for="s in skuAttr" :label="s.name" :key="s.name" :prop="s.name"></el-table-column>
<el-table-column label="展示图片">
<template v-slot="{ row }">
<oss-image-upload class="img-upload-mini" v-model="row.pic" :limit="1" :is-show-tip="false"></oss-image-upload>
</template>
</el-table-column>
<el-table-column label="销售价格" >
<template v-slot="{ row,$index }">
<el-form-item
:rules="{ required: true, message: '请填写价格', trigger: 'blur' }"
:prop="'skuList['+$index+'].price'">
<el-input v-model="row.price"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="库存">
<template v-slot="{ row, $index }">
<el-input v-model="row.stock" type="number"></el-input>
</template>
</el-table-column>
<el-table-column label="编码">
<template v-slot="{ row }">
<el-form-item>
<el-input v-model="row.outSkuId"></el-input>
<el-input v-model="row.spData" v-show="false"></el-input>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form-item>
</el-card>
<el-card style="margin: 20px 20px; font-size: 14px">
<div slot="header">
<span>详情页</span>
</div>
<el-form-item label="移动端" prop="detailMobileHtml">
<Editor v-model="form.detailMobileHtml" placeholder="请输入内容" type="url"></Editor>
</el-form-item>
<el-form-item label="PC端" prop="detailHtml">
<Editor v-model="form.detailHtml" placeholder="请输入内容" type="url"></Editor>
</el-form-item>
</el-card>
<div class="tc">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-form>
</div>
</template>
<script>
import {addPmsProduct, getPmsProduct, updatePmsProduct} from "@/api/pms/product";
import ProductCategorySelect from "@/views/components/ProductCategorySelect";
import BrandSelect from "@/views/components/BrandSelect";
export default {
name: "AddProduct",
dicts: ['pms_publish_status'],
components: {BrandSelect, ProductCategorySelect},
data() {
return {
rules: {
name: [
{ required: true, message: '请输入商品名称', trigger: 'blur' },
],
},
form: {
publishStatus: 0,
sort: 1000
},
skuAttr:[],
albumPics:null,
productAttr: [
{
name: '颜色',
options: [
{name: '红'},
{name: null}
]
}
],
maxOptionNum: 44
}
},
created() {
const {id} = this.$route.query
if (id) {
this.getInfo(id);
}
},
methods: {
refreshSku(){
let skus = [];
let skuMap = new Map()
this.skuAttr=[...this.productAttr]
if(this.form.skuList){
this.form.skuList.forEach(sku=>{
skuMap.set(sku.spData,sku)
})
}
this.productAttr.forEach((attr, index) => {
const attrSku = [];
attr.options.forEach((option) => {
if (!option.name) {
return
}
if (index === 0) {
attrSku.push({[attr.name]: option.name});
} else {
skus.forEach(it3 => {
attrSku.push({...it3, [attr.name]: option.name })
})
}
})
skus = attrSku;
})
skus.forEach(it => {
if(it){
it.spData=JSON.stringify(it)
}
})
skus.forEach(it => {
let sku = skuMap.get(it.spData);
if(sku){
it.outSkuId = sku.outSkuId;
it.price = sku.price;
it.pic = sku.pic;
it.stock = sku.stock;
it.id = sku.id
}else{
it.outSkuId = null;
it.price = null;
it.pic = null;
it.stock = null;
it.id = null
}
})
this.form.productAttr = JSON.stringify(this.productAttr)
this.form.skuList= skus
},
categoryChange(value){
if(Array.isArray(value)){
console.log(value.toString())
this.form.productCategoryName=value.toString()
}else{
this.form.productCategoryName=null
}
},
onBrandChange(value){
this.form.brandName = value
},
getInfo(id) {
getPmsProduct(id).then(response => {
const {albumPics } = response
if (albumPics) {
this.albumPics = albumPics.split(',')
}
this.form = response;
if(this.form.productAttr){
this.productAttr =JSON.parse(this.form.productAttr)
}
this.refreshSku()
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if(this.albumPics){
this.form.albumPics = this.albumPics.toString()
}
if(this.form.categoryId && Array.isArray(this.form.categoryId)){
this.form.categoryId = this.form.categoryId.pop()
}
//sku
if (!this.form.price){
this.form.price = Math.min.apply(Math, this.form.skuList.map(it => it.price))
}
if (this.form.id != null) {
updatePmsProduct(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
});
} else {
addPmsProduct(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
});
}
this.cancel();
}else{
if(this.form.name){
this.$alert('请填写规格价格', '提示', {
confirmButtonText: '确定',
});
}else{
this.$alert('请填写商品名称', '提示', {
confirmButtonText: '确定',
});
}
}
});
},
cancel() {
this.$tab.closeOpenPage({ path: '/pms/product' })
},
changeName(s, idx, val) {
s.options[idx].name = val;
if (s.options.length - 1 !== idx || s.options.length >= this.maxOptionNum) {
return
}
s.options.push({name: null})
},
addSkuSort() {
this.productAttr.push({
name: null,
options: [{name: null}]
})
},
deleteSkuSort(idx) {
this.productAttr.splice(idx);
},
deleteOption(s, idx) {
s.options.splice(idx, 1);
}
}
}
</script>
<style lang="stylus">
.add-product-wrapper
padding 12px
.content
margin 0 auto
width 75%
min-width 800px
.sku-wrapper
background-color #f7f8fa
padding 12px
.sku_sorts
.sku_sort
background-color white
margin-bottom 12px
.label
padding 8px
.values
padding 8px 0 0 8px
border-top 1px solid $border-color
display flex
flex-wrap wrap
.value
padding 0 32px 8px 0
width 200px!important
display flex
align-items center
.img-upload-mini .el-upload--picture-card
width: 48px;
height: 48px;
line-height: 57px;
</style>

@ -1,243 +0,0 @@
<template>
<div class="app-container">
<div v-show="show">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="上架状态" prop="publishStatus">
<DictRadio v-model="queryParams.publishStatus" @change="handleQuery" size="small"
:radioData="dict.type.pms_publish_status" :showAll="'all'"/>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input
v-model="queryParams.nameLike"
placeholder="请输入商品名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="品牌" prop="brandName">
<el-input
v-model="queryParams.brandNameLike"
placeholder="请输入品牌名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="分类" prop="productCategoryName">
<el-input
v-model="queryParams.productCategoryNameLike"
placeholder="请输入分类名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="编码" prop="outProductId">
<el-input
v-model="queryParams.outProductId"
placeholder="请输入商品编码"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="pmsProductList" @selection-change="handleSelectionChange" border>
<el-table-column type="selection" width="55" align="center"/>
<el-table-column label="主图" prop="pic">
<template slot-scope="{ row }">
<el-image v-if="row.pic" :src="row.pic" :preview-src-list="[row.pic]" class="small-img"/>
</template>
</el-table-column>
<el-table-column label="名称/编码" min-width="200" prop="outProductId">
<template slot-scope="{ row }">
<div>名称{{ row.name }}</div>
<div v-if="row.outProductId">{{ row.outProductId }}</div>
</template>
</el-table-column>
<el-table-column label="品牌/分类" prop="brandName">
<template slot-scope="{ row }">
<div v-if="row.brandName">{{ row.brandName }}</div>
<div v-if="row.productCategoryName">{{ row.productCategoryName }}</div>
</template>
</el-table-column>
<el-table-column label="价格/排序" prop="price">
<template slot-scope="{ row }">
<div v-if="row.price">{{ row.price }}</div>
<div v-if="row.sort">{{ row.sort }}</div>
</template>
</el-table-column>
<el-table-column label="上架状态" prop="publishStatus">
<template slot-scope="{ row }">
<dict-tag :value="row.publishStatus" prop-name="pms_publish_status"/>
</template>
</el-table-column>
<el-table-column label="操作" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<InBody v-show="total>0">
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</InBody>
</div>
<!-- <SeeAdsComponent ref="seeAdsComponentRef" v-if="!show" @confirmOk="confirmOk"/>-->
</div>
</template>
<script>
import {delPmsProduct, listPmsProduct} from "@/api/pms/product";
import {isStarRepo} from "@/utils/is-star-plugin";
import {mapGetters} from "vuex";
import SeeAdsComponent from "@/components/SeeAdsComponent.vue";
export default {
name: "PmsProduct",
components: {SeeAdsComponent},
dicts: ['pms_publish_status'],
data() {
return {
show: true,
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
pmsProductList: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
brandId: null,
categoryId: null,
outProductId: null,
name: null,
pic: null,
albumPics: null,
publishStatus: null,
sort: null,
price: null,
unit: null,
weight: null,
detailHtml: null,
detailMobileHtml: null,
brandName: null,
productCategoryName: null,
},
};
},
created() {
this.getList();
},
computed:{
...mapGetters(['userId']),
},
methods: {
async confirmOk(success) {
if (success) {
const res = await isStarRepo('zccbbg', 'RuoYi-Mall', this.userId, 'https://mall.ichengle.top/pms/product', 'ruoyi-mall-商城', 'https://gitee.com/zccbbg/RuoYi-Mall')
this.show = res;
if (res) {
this.getList();
}
}
},
/** 查询商品信息列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
listPmsProduct(query, pageReq).then(response => {
const { content, totalElements } = response
this.pmsProductList = content;
this.total = totalElements;
this.loading = false;
});
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.$router.push({ path: '/product/edit' });
},
/** 修改按钮操作 */
handleUpdate(row) {
this.$router.push({ path: '/product/edit', query: { id: row.id } });
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除商品信息编号为"' + ids + '"的数据项?').then(function() {
return delPmsProduct(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
}
};
</script>

@ -1,131 +0,0 @@
<template>
<el-dialog :title="chooseSkuObj.title" :visible.sync="chooseSkuObj.open" :width="chooseSkuObj.width" append-to-body>
<el-form ref="auditForm" inline :model="chooseSkuObj.queryParams" label-width="80px">
<el-form-item label="菜品名称" prop="nameLike">
<el-input
size="small"
placeholder="请输入菜品名称"
v-model="chooseSkuObj.queryParams.nameLike"
clearable
/>
</el-form-item>
<el-form-item label="菜品分类" prop="productCategoryName">
<product-category-select v-model="chooseSkuObj.queryParams.categoryId"></product-category-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="getSkuList"></el-button>
</el-form-item>
</el-form>
<el-table class="mt20" :data="chooseSkuObj.list" ref="table" v-loading="chooseSkuObj.loading" max-height="500" border
row-key="id" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"/>
<el-table-column label="菜品名称" prop="name">
<template v-slot="{row}">
<div class="flex-center">
<el-image v-if="row.pic" :src="row.pic" :preview-src-list="[row.pic]" class="small-img circle-img"/>
<span class="ml5">{{ row.name }}</span>
</div>
</template>
</el-table-column>
<el-table-column label="销量" prop="sales"/>
<el-table-column label="创建时间" prop="createTime"/>
</el-table>
<pagination
v-show="chooseSkuObj.total>0"
:total="chooseSkuObj.total"
:page.sync="chooseSkuObj.queryParams.pageNum"
:limit.sync="chooseSkuObj.queryParams.pageSize"
@pagination="getSkuList"
/>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="chooseSkuObj.open=false"> </el-button>
</div>
</el-dialog>
</template>
<script>
import {listPmsProduct} from "@/api/pms/product";
import ProductCategorySelect from "@/views/components/ProductCategorySelect.vue";
export default {
components: {ProductCategorySelect},
data() {
return {
selectSkuIds: [],
selectProducts: [],
chooseSkuObj: {
loading: false,
open: false,
title: "选择菜品",
list: [],
width: '60%',
queryParams: {
pageNum: 1,
categoryId: null,
pageSize: 10,
nameLike: null,
publishStatus: 1,
excludeProductIds: []
},
total: 0
}
}
},
methods: {
submitForm() {
this.$emit('onComplete', this.selectProducts)
this.chooseSkuObj.open = false
},
async init(chooseProductId) {
this.chooseSkuObj.queryParams.excludeProductIds = chooseProductId;
this.chooseSkuObj.queryParams.pageNum = 1;
await this.getSkuList();
this.chooseSkuObj.open = true
this.$nextTick(()=>{
this.$refs.table.clearSelection()
})
},
judge() {
this.$nextTick(()=>{
this.chooseSkuObj.list.forEach(ele => {
if (this.selectProducts.some(item => item.id === ele.id)) {
this.$refs.table.toggleRowSelection(ele, true)
} else {
this.$refs.table.toggleRowSelection(ele, false)
}
});
})
},
handleSelectionChange(selection) {
this.selectProducts = selection
},
async getSkuList() {
this.chooseSkuObj.loading = true;
const query = {...this.chooseSkuObj.queryParams, pageNum: undefined, pageSize: undefined};
if (query.categoryId && Array.isArray(query.categoryId)) {
query.categoryId = query.categoryId.pop()
}
const {pageNum, pageSize} = this.chooseSkuObj.queryParams;
const pageReq = {page: pageNum - 1, size: pageSize};
await listPmsProduct(query, pageReq).then(response => {
const {content, totalElements} = response
this.chooseSkuObj.list = [...content];
this.chooseSkuObj.total = totalElements;
this.chooseSkuObj.loading = false;
});
},
}
}
</script>
<style lang="stylus">
.line
display flex
align-items center
margin-bottom: 5px;
border-bottom 1px dashed #ccc
.line:last-child
border-bottom 0 !important
margin-bottom 0 !important
</style>

@ -1,320 +0,0 @@
<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryForm"
:inline="true"
v-show="showSearch"
label-width="100px"
size="medium"
class="ry_form"
>
<el-form-item label="状态" prop="showStatus">
<DictRadio
v-model="queryParams.showStatus"
@change="handleQuery"
size="small"
:radioData="dict.type.sys_show_status"
:showAll="'all'"
/>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input
v-model="queryParams.nameLike"
placeholder="名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增
</el-button>
</el-col>
</el-row>
<el-table
v-loading="loading"
:data="pmsProductCategoryList"
border
:tree-props="{ hasChildren: 'hasChildren', children: 'children' }"
@selection-change="handleSelectionChange"
row-key="id"
>
<el-table-column label="名称" prop="name" />
<el-table-column label="图片" prop="icon">
<template slot-scope="{ row }">
<el-image
v-if="row.icon"
:src="row.icon"
:preview-src-list="[row.icon]"
class="small-img circle-img"
/>
</template>
</el-table-column>
<el-table-column label="排序" prop="sort" />
<el-table-column label="状态" prop="showStatus">
<template v-slot="{ row }">
<dict-tag
:value="row.showStatus"
prop-name="sys_show_status"
></dict-tag>
</template>
</el-table-column>
<el-table-column
label="操作"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 添加或修改商品分类对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px">
<el-form ref="form" :model="form" :rules="rules" label-width="108px">
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" placeholder="名称" />
</el-form-item>
<el-form-item label="图片" prop="icon">
<oss-image-upload v-model="form.icon" :limit="1" />
</el-form-item>
<el-form-item label="状态">
<DictRadio
v-model="form.showStatus"
size="small"
:radioData="dict.type.sys_show_status"
/>
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input v-model="form.sort" placeholder="排序" />
</el-form-item>
<!-- <el-form-item label="层级" prop="level">
<el-input v-model="form.level" placeholder="层级" />
</el-form-item> -->
<!-- <el-form-item label="上级分类" prop="parentId">
<product-category-select class="w200" v-model="form.parentId" :props="{ checkStrictly: true }"/>
</el-form-item> -->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
listPmsProductCategory,
getPmsProductCategory,
delPmsProductCategory,
addPmsProductCategory,
updatePmsProductCategory,
exportPmsProductCategory,
} from "@/api/pms/productCategory";
import ProductCategorySelect from "@/views/components/ProductCategorySelect";
export default {
name: "PmsProductCategory",
dicts: ["sys_show_status"],
components: { ProductCategorySelect },
data() {
return {
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
pmsProductCategoryList: [],
//
title: "",
//
open: false,
//
queryParams: {
parentId: null,
nameLike: null,
level: null,
showStatus: null,
sort: null,
},
//
form: {},
//
rules: {},
};
},
created() {
this.getList();
},
methods: {
/** 查询商品分类列表 */
getList() {
this.loading = true;
const query = { ...this.queryParams };
listPmsProductCategory(query).then((rows) => {
this.pmsProductCategoryList = rows;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
parentId: null,
name: null,
level: null,
showStatus: 0,
sort: null,
icon: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加商品分类";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids;
getPmsProductCategory(id).then((response) => {
this.form = response;
this.open = true;
this.title = "修改商品分类";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
let p;
if (this.form.parentId) {
this.form.parentId = this.form.parentId.pop();
}
if (this.form.id != null) {
p = updatePmsProductCategory(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
p = addPmsProductCategory(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
p.then(() => {
this.$store.dispatch("mall/loadProductCategories", true);
});
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
if (row.children && row.children.length > 0) {
this.$message.error("请先删除子目录");
return;
}
const ids = row.id;
this.$modal
.confirm('是否确认删除商品分类编号为"' + ids + '"的数据项?')
.then(function () {
return delPmsProductCategory(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal
.confirm("是否确认导出所有商品分类数据项?")
.then(() => {
this.exportLoading = true;
return exportPmsProductCategory(queryParams);
})
.then((response) => {
this.$download.download(response);
this.exportLoading = false;
})
.catch(() => {});
},
},
};
</script>

@ -1,282 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="PRODUCT_ID" prop="productId">
<el-input
v-model="queryParams.productId"
placeholder="请输入PRODUCT_ID"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="sku编码" prop="outSkuId">
<el-input
v-model="queryParams.outSkuId"
placeholder="请输入sku编码"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="PRICE" prop="price">
<el-input
v-model="queryParams.price"
placeholder="请输入PRICE"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="展示图片" prop="pic">
<el-input
v-model="queryParams.pic"
placeholder="请输入展示图片"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['pms:sku:add']"
>新增</el-button>
</el-col>
</el-col>
</el-row>
<el-table v-loading="loading" :data="pmsSkuList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="PRODUCT_ID" align="center" prop="productId" />
<el-table-column label="sku编码" align="center" prop="outSkuId" />
<el-table-column label="PRICE" align="center" prop="price" />
<el-table-column label="展示图片" align="center" prop="pic" />
<el-table-column label="商品销售属性json格式" align="center" prop="spData" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['pms:sku:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['pms:sku:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改sku信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="108px" inline class="dialog-form-two">
<el-form-item label="PRODUCT_ID" prop="productId">
<el-input v-model="form.productId" placeholder="请输入PRODUCT_ID" />
</el-form-item>
<el-form-item label="sku编码" prop="outSkuId">
<el-input v-model="form.outSkuId" placeholder="请输入sku编码" />
</el-form-item>
<el-form-item label="PRICE" prop="price">
<el-input v-model="form.price" placeholder="请输入PRICE" />
</el-form-item>
<el-form-item label="展示图片" prop="pic">
<el-input v-model="form.pic" placeholder="请输入展示图片" />
</el-form-item>
<el-form-item label="商品销售属性json格式" prop="spData">
<el-input v-model="form.spData" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listPmsSku, getPmsSku, delPmsSku, addPmsSku, updatePmsSku, exportPmsSku } from "@/api/pms/sku";
export default {
name: "PmsSku",
data() {
return {
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
// sku
pmsSkuList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
productId: null,
outSkuId: null,
price: null,
pic: null,
spData: null,
},
//
form: {},
//
rules: {
outSkuId: [
{ required: true, message: "sku编码不能为空", trigger: "blur" }
],
},
};
},
created() {
this.getList();
},
methods: {
/** 查询sku信息列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
listPmsSku(query, pageReq).then(response => {
const { content, totalElements } = response
this.pmsSkuList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
productId: null,
outSkuId: null,
price: null,
pic: null,
spData: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加sku信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getPmsSku(id).then(response => {
this.form = response;
this.open = true;
this.title = "修改sku信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updatePmsSku(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addPmsSku(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除sku信息编号为"' + ids + '"的数据项?').then(function() {
return delPmsSku(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有sku信息数据项').then(() => {
this.exportLoading = true;
return exportPmsSku(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

@ -60,9 +60,6 @@
</el-form-item>
</el-form>
<!-- 底部 -->
<div class="el-register-footer">
<span>Copyright © 2017-2023 ichengle.top 技术支持关注程序员诚哥微信公众号回复支持</span>
</div>
</div>
</template>

@ -1,218 +0,0 @@
<template>
<div class="app-container" >
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="创建时间">
<el-date-picker
size="small"
v-model="dateRange"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
:clearable="true"
:picker-options='pickerOptions'
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item label="处理状态">
<el-select v-model="queryParams.status" clearable size="small">
<el-option value="0" label="未处理" />
<el-option value="1" label="已处理" />
</el-select>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="feedbackList" border>
<el-table-column label="反馈人" align="left" prop="nickname" width="150">
<template v-slot="scope">
<p>用户ID{{ scope.row.createBy }}</p>
<p>{{ scope.row.phone }}</p>
</template>
</el-table-column>
<el-table-column label="反馈时间" prop="createTime" width="180">
<template v-slot="scope">
<div>{{ parseTime(scope.row.createTime) }}</div>
</template>
</el-table-column>
<el-table-column label="反馈类型" prop="type"/>
<el-table-column label="具体内容" prop="content" show-overflow-tooltip/>
<el-table-column label="图片">
<template v-slot="scope">
<el-image
v-if="scope.row.imageList.length"
style="width: 60px; height: 60px"
v-for="it in scope.row.imageList" :key="it"
:src="it"
:preview-src-list="[it]">
</el-image>
</template>
</el-table-column>
<el-table-column label="处理状态/时间">
<template v-slot="scope">
<div v-if="scope.row.handleStatus === 1"></div>
<el-switch v-else v-model="scope.row.handleStatus" active-value="1" inactive-value="0"
@change="changeStatus(scope.row)"/>
<div>{{ scope.row.handleTime ? parseTime(scope.row.handleTime) : '' }}</div>
</template>
</el-table-column>
<el-table-column label="备注">
<template v-slot="scope">
<span class="mr10">{{scope.row.remark}}</span>
<i class="el-icon-edit pointer" @click="showUpdateMark(scope.row)"></i>
</template>
</el-table-column>
</el-table>
<InBody v-show="total>0">
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</InBody>
<el-dialog title="修改备注" :visible.sync="remarkModal.visible" width="30%" append-to-body>
<el-input type='textarea' :rows='3' placeholder='请输入内容' v-model='remarkModal.remark'/>
<span class="dialog-footer" slot="footer">
<el-button @click="remarkModal.visible = false"> </el-button>
<el-button type='primary' @click='updateRemark'> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import {changeHandleStatus, listFeedbacks, updateMark} from "@/api/ums/feedback";
import dateUtil from '@/utils/DateUtil';
import {mapGetters} from "vuex";
export default {
name: "UmsMember",
data() {
return {
show: false,
pickerOptions: {
shortcuts: dateUtil.getTimeShort()
},
remarkModal: {
visible: false,
mark: null,
memberId: null,
},
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
feedbackList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
status: null,
},
dateRange:[],
//
form: {},
};
},
async created() {
this.getList();
},
computed:{
...mapGetters(['userId']),
},
methods: {
showUpdateMark(record){
this.remarkModal = {
visible: true,
remark: record.remark,
id: record.id
}
},
updateRemark(){
updateMark({id:this.remarkModal.id,remark:this.remarkModal.remark})
.then(res=>{
if (res > 0) {
this.$message.success('修改成功');
this.remarkModal.visible = false;
const obj = this.feedbackList.filter(it=>it.id === this.remarkModal.id)[0]
console.log(111,obj,this.remarkModal.remark)
obj.remark = this.remarkModal.remark;
} else {
this.$message.error('修改失败');
}
})
},
/** 查询会员信息列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
let query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
if (!this.dateRange || this.dateRange.length > 0){
query = { ...this.addDateRange2(query, this.dateRange) }
}
listFeedbacks(query, pageReq).then(response => {
const { content, totalElements } = response
content.forEach(it=>{
if (it.images) {
it.imageList = it.images.split(',')
} else {
it.imageList = []
}
})
this.feedbackList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
//
changeStatus(row){
const data = {
id: row.id,
handleStatus: row.handleStatus
}
changeHandleStatus(data).then(response => {
if (response){
this.$message.success('操作成功')
this.getList()
}
})
},
}
};
</script>

@ -1,427 +0,0 @@
<template>
<div class="app-container">
<div v-show="show">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="创建时间">
<el-date-picker
size="small"
v-model="dateRange"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
:clearable="true"
:picker-options='pickerOptions'
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<!-- <el-form-item label="账号启用状态">-->
<!-- <el-select v-model="queryParams.status" placeholder="请选择" :clearable="true" size="small">-->
<!-- <el-option label="禁用" value="0">-->
<!-- </el-option>-->
<!-- <el-option label="启用" value="1">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="昵称" prop="nickname">
<el-input
v-model.trim="queryParams.nickname"
placeholder="请输入昵称"
clearable
size="small"
/>
</el-form-item>
<el-form-item label="手机号码" prop="phone">
<el-input
v-model.trim="queryParams.phone"
placeholder="请输入手机号码"
clearable
size="small"
/>
</el-form-item>
<el-form-item label="备注" prop="mark">
<el-select v-model="queryParams.hasMark" clearable size="small">
<el-option value="1" label="有备注" />
<el-option value="0" label="无备注"/>
</el-select>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
<!-- <el-button :icon="showMoreCondition ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" size="mini" @click="showMoreCondition = !showMoreCondition">{{showMoreCondition ? '收起条件' : '展开条件'}}</el-button>-->
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="umsMemberList" border>
<el-table-column label="昵称" prop="nickname" width="150"/>
<el-table-column label="手机号码" prop="phoneHidden" width="150"/>
<el-table-column label="佣金" width="120">
<template v-slot="scope">
<div>0.00</div>
</template>
</el-table-column>
<el-table-column label="积分" width="120">
<template v-slot="scope">
<div>0.00</div>
</template>
</el-table-column>
<el-table-column label="余额" width="120">
<template v-slot="scope">
<div>0.00</div>
</template>
</el-table-column>
<el-table-column label="注册时间" prop="createTime" width="180">
<template v-slot="scope">
<div>{{ parseTime(scope.row.createTime) }}</div>
</template>
</el-table-column>
<el-table-column label="上次登录" prop="createTime">
<template v-slot="scope">
<div>{{ parseTime(scope.row.createTime) }}</div>
</template>
</el-table-column>
<el-table-column label="备注">
<template v-slot="scope">
<span class="mr10">{{scope.row.mark}}</span>
<i class="el-icon-edit pointer" @click="showUpdateMark(scope.row)"></i>
</template>
</el-table-column>
<el-table-column label="操作" class-name="small-padding fixed-width" fix="right" width="200">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
@click="showStatistics(scope.row.id)"
v-hasPermi="['ums:member:statistics']"
>查看数据
</el-button>
<el-button
size="mini"
type="text"
@click="goOrder(scope.row.phoneEncrypted)"
>查看下单</el-button>
<el-button
size="mini"
type="text"
@click="goCart(scope.row.phoneEncrypted)"
>查看购物车</el-button>
</template>
</el-table-column>
</el-table>
<InBody v-show="total>0">
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</InBody>
</div>
<SeeAdsComponent ref="seeAdsComponentRef" v-if="!show" @confirmOk="confirmOk"/>
<!-- 统计 -->
<el-dialog :title="statisticsObj.title" :visible.sync="statisticsObj.open" width="500px" append-to-body>
<el-descriptions direction="vertical" :column="2" border>
<el-descriptions-item label="购物车数">{{ statisticsObj.data.cartCount }}</el-descriptions-item>
<el-descriptions-item label="订单数">{{ statisticsObj.data.orderCount }}</el-descriptions-item>
<el-descriptions-item label="下单金额">{{ statisticsObj.data.orderAmount.toFixed(2) }}</el-descriptions-item>
<el-descriptions-item label="售后数">{{ statisticsObj.data.aftersaleCount }}</el-descriptions-item>
</el-descriptions>
</el-dialog>
<el-dialog title="修改备注" :visible.sync="remarkModal.visible" width="30%" append-to-body>
<el-input type='textarea' :rows='3' placeholder='请输入内容' v-model='remarkModal.mark'/>
<span class="dialog-footer" slot="footer">
<el-button @click="remarkModal.visible = false"> </el-button>
<el-button type='primary' @click='updateRemark'> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import {
addUmsMember,
changeAccountStatus,
decryptedPhone,
delUmsMember,
exportUmsMember,
getUmsMember,
listUmsMember,
updateUmsMember,
updateUmsMemberMark,
viewStatistics
} from "@/api/ums/member";
import dateUtil from '@/utils/DateUtil';
import {isStarRepo} from "@/utils/is-star-plugin";
import {mapGetters} from "vuex";
import SeeAdsComponent from "@/components/SeeAdsComponent.vue";
export default {
name: "UmsMember",
components: {SeeAdsComponent},
data() {
return {
show: false,
pickerOptions: {
shortcuts: dateUtil.getTimeShort()
},
remarkModal: {
visible: false,
mark: null,
memberId: null,
},
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
umsMemberList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
nickname: null,
phone: null,
status: undefined,
hasMark: undefined
},
dateRange:[],
//
form: {},
//
rules: {
level: [
{ required: true, message: "等级不能为空", trigger: "blur" }
],
integral: [
{ required: true, message: "用户剩余积分不能为空", trigger: "blur" }
],
},
showMoreCondition: false,
statisticsObj: {
open: false,
data: {
cartCount: 0,
orderCount: 0,
orderAmount: 0.00,
aftersaleCount: 0
},
title: '用户数据统计'
}
};
},
async created() {
this.$nextTick(()=>{
this.$refs.seeAdsComponentRef.show()
})
},
computed:{
...mapGetters(['userId']),
},
methods: {
async confirmOk(success) {
if (success) {
const res = await isStarRepo('zccbbg', 'RuoYi-Mall', this.userId, 'https://mall.ichengle.top/member/member', 'ruoyi-mall-商城', 'https://gitee.com/zccbbg/RuoYi-Mall')
this.show = res;
if (res) {
this.getList();
}
}
},
showUpdateMark(record){
this.remarkModal = {
visible: true,
mark: record.mark,
memberId: record.id
}
},
updateRemark(){
updateUmsMemberMark({id:this.remarkModal.memberId,mark:this.remarkModal.mark})
.then(res=>{
if (res > 0) {
this.$message.success('修改成功');
this.remarkModal.visible = false;
const obj = this.umsMemberList.filter(it=>it.id === this.remarkModal.memberId)[0]
obj.mark = this.remarkModal.mark;
} else {
this.$message.success('修改失败');
}
})
},
/** 查询会员信息列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
let query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
if (!this.dateRange || this.dateRange.length > 0){
query = { ...this.addDateRange2(query, this.dateRange) }
}
listUmsMember(query, pageReq).then(response => {
const { content, totalElements } = response
this.umsMemberList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
nickname: null,
password: null,
phone: null,
mark: null,
status: 0,
avatar: null,
gender: null,
city: null,
province: null,
country: null,
remark: null,
birthday: null,
spreadUid: null,
spreadTime: null,
level: null,
integral: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加会员信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getUmsMember(id).then(response => {
this.form = response;
this.open = true;
this.title = "修改会员信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateUmsMember(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addUmsMember(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除会员信息编号为"' + ids + '"的数据项?').then(function() {
return delUmsMember(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有会员信息数据项?').then(() => {
this.exportLoading = true;
return exportUmsMember(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {});
},
//
changeStatus(row){
const data = {
memberId: row.id,
status: row.status
}
changeAccountStatus(data).then(response => {
if (response < 1){
this.$modal.msgError('操作失败')
this.getList()
}
})
},
goOrder(phone){
decryptedPhone(phone).then(res => {
this.$router.push({
path: '/order/order',
query: {
phone: res
}
})
})
},
goCart(phone){
decryptedPhone(phone).then(res => {
this.$router.push({
path: '/member/shoppingCart',
query: {
phone: res
}
})
})
},
showStatistics(memberId){
viewStatistics(memberId).then((response) => {
this.statisticsObj.data = response
this.statisticsObj.open = true
})
}
}
};
</script>

@ -1,350 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="收货人姓名" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入收货人姓名"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="手机号" prop="phone">
<el-input
v-model="queryParams.phone"
placeholder="请输入手机号"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="邮政编码" prop="postCode">
<el-input
v-model="queryParams.postCode"
placeholder="请输入邮政编码"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="省份/直辖市" prop="province">
<el-input
v-model="queryParams.province"
placeholder="请输入省份/直辖市"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="城市" prop="city">
<el-input
v-model="queryParams.city"
placeholder="请输入城市"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<template v-if="showMoreCondition">
<el-form-item label="区" prop="district">
<el-input
v-model="queryParams.district"
placeholder="请输入区"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="详细地址" prop="detailAddress">
<el-input
v-model="queryParams.detailAddress"
placeholder="请输入详细地址"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</template>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
<el-button :icon="showMoreCondition ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" size="mini" @click="showMoreCondition = !showMoreCondition">{{showMoreCondition ? '收起条件' : '展开条件'}}</el-button>
</el-form-item>
</el-form>
<!-- <el-row :gutter="10" class="mb8">-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- plain-->
<!-- icon="el-icon-plus"-->
<!-- size="mini"-->
<!-- @click="handleAdd"-->
<!-- v-hasPermi="['ums:memberAddress:add']"-->
<!-- >新增</el-button>-->
<!-- </el-col>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-table v-loading="loading" :data="umsMemberAddressList">
<!-- <el-table-column type="selection" width="55" align="center" />-->
<el-table-column label="收货人姓名" align="center" prop="name" >
<template v-slot="scope">
<div>{{ getHiddenName(scope.row.name) }}</div>
</template>
</el-table-column>
<el-table-column label="手机号" align="center" prop="phoneHidden" />
<el-table-column label="邮政编码" align="center" prop="postCode" />
<el-table-column label="省份/直辖市" align="center" prop="province" />
<el-table-column label="城市" align="center" prop="city" />
<el-table-column label="区" align="center" prop="district" />
<el-table-column label="详细地址" align="center" prop="detailAddress" width="250">
<template v-slot="scope">
<div>{{ getHiddenDetailAddress(scope.row.detailAddress) }}</div>
</template>
</el-table-column>
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
<!-- <template slot-scope="scope">-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-edit"-->
<!-- @click="handleUpdate(scope.row)"-->
<!-- v-hasPermi="['ums:memberAddress:edit']"-->
<!-- >修改</el-button>-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-delete"-->
<!-- @click="handleDelete(scope.row)"-->
<!-- v-hasPermi="['ums:memberAddress:remove']"-->
<!-- >删除</el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改会员收货地址对话框 -->
<el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="108px" inline class="dialog-form-two">
<el-form-item label="MEMBER_ID" prop="memberId">
<el-input v-model="form.memberId" placeholder="请输入MEMBER_ID" />
</el-form-item>
<el-form-item label="收货人名称" prop="name">
<el-input v-model="form.name" placeholder="请输入收货人名称" />
</el-form-item>
<el-form-item label="PHONE" prop="phone">
<el-input v-model="form.phone" placeholder="请输入PHONE" />
</el-form-item>
<el-form-item label="是否为默认">
<el-radio-group v-model="form.defaultStatus">
<el-radio label="1">请选择字典生成</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="邮政编码" prop="postCode">
<el-input v-model="form.postCode" placeholder="请输入邮政编码" />
</el-form-item>
<el-form-item label="省份/直辖市" prop="province">
<el-input v-model="form.province" placeholder="请输入省份/直辖市" />
</el-form-item>
<el-form-item label="城市" prop="city">
<el-input v-model="form.city" placeholder="请输入城市" />
</el-form-item>
<el-form-item label="区" prop="district">
<el-input v-model="form.district" placeholder="请输入区" />
</el-form-item>
<el-form-item label="详细地址(街道)" prop="detailAddress">
<el-input v-model="form.detailAddress" placeholder="请输入详细地址(街道)" />
</el-form-item>
<el-form-item label="是否默认" prop="isDefault">
<el-input v-model="form.isDefault" placeholder="请输入是否默认" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listUmsMemberAddress, getUmsMemberAddress, delUmsMemberAddress, addUmsMemberAddress, updateUmsMemberAddress, exportUmsMemberAddress } from "@/api/ums/memberAddress";
export default {
name: "UmsMemberAddress",
data() {
return {
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
umsMemberAddressList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
memberId: null,
name: null,
phone: null,
defaultStatus: null,
postCode: null,
province: null,
city: null,
district: null,
detailAddress: null,
isDefault: null,
},
//
form: {},
//
rules: {
isDefault: [
{ required: true, message: "是否默认不能为空", trigger: "blur" }
],
},
showMoreCondition: false,
chineseNumbers: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
};
},
created() {
this.getList();
},
methods: {
/** 查询会员收货地址列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
listUmsMemberAddress(query, pageReq).then(response => {
const { content, totalElements } = response
this.umsMemberAddressList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
memberId: null,
name: null,
phone: null,
defaultStatus: 0,
postCode: null,
province: null,
city: null,
district: null,
detailAddress: null,
isDefault: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加会员收货地址";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getUmsMemberAddress(id).then(response => {
this.form = response;
this.open = true;
this.title = "修改会员收货地址";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateUmsMemberAddress(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addUmsMemberAddress(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除会员收货地址编号为"' + ids + '"的数据项?').then(function() {
return delUmsMemberAddress(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有会员收货地址数据项?').then(() => {
this.exportLoading = true;
return exportUmsMemberAddress(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

@ -1,295 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="用户手机号" prop="phone">
<el-input
v-model="queryParams.phone"
placeholder="用户手机号"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="商品名称" prop="productName">
<el-input
v-model="queryParams.productName"
placeholder="商品名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="umsMemberCartList" @selection-change="handleSelectionChange" border cell-class-name="my-cell">
<!-- <el-table-column type="selection" width="55" />-->
<el-table-column label="用户信息" prop="phoneHidden">
<template v-slot="scope">
<p>{{scope.row.phoneHidden}}</p>
<p>{{scope.row.nickname}}</p>
</template>
</el-table-column>
<el-table-column label="用户备注" prop="mark" />
<el-table-column label="商品名称" prop="productName" />
<el-table-column label="商品规格" prop="spData">
<template v-slot="scope">
<div class="product-container">
<el-popover
placement="right"
trigger="hover">
<el-image :src="scope.row.pic" style="width: 350px;height: 350px"/>
<el-image slot="reference" class="small-img product-item" :src="scope.row.pic" style="width: 40px;height: 40px"/>
</el-popover>
<div class="product-item" style="margin-left: 5px">
<div class="sp-data">
<span v-for="(value, key) in JSON.parse(scope.row.spData)">{{ key }}{{ value }}&nbsp;</span>
</div>
<div class="product-item quantity">
<span style="margin-right: 10px">{{ scope.row.price }}</span>
<span>x{{ scope.row.quantity }}</span>
</div>
</div>
</div>
</template>
</el-table-column>
<!-- <el-table-column label="价格" prop="price">-->
<!-- <template v-slot="scope">-->
<!-- <div>{{ scope.row.price.toFixed(2) }}</div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="状态" prop="skuIfExist">
<template v-slot="scope">
<el-tag effect="plain" size="medium" :type="scope.row.skuIfExist === 1 ? 'success' : 'error'">
{{ scope.row.skuIfExist === 1 ? '有效' : '失效' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="加入时间" prop="createTime">
<template v-slot="scope">
<div>{{ parseTime(scope.row.createTime, '')}}</div>
</template>
</el-table-column>
<!-- <el-table-column label="操作" class-name="small-padding fixed-width">-->
<!-- <template slot-scope="scope">-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-edit"-->
<!-- @click="handleUpdate(scope.row)"-->
<!-- v-hasPermi="['ums:memberCart:edit']"-->
<!-- >修改</el-button>-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-delete"-->
<!-- @click="handleDelete(scope.row)"-->
<!-- v-hasPermi="['ums:memberCart:remove']"-->
<!-- >删除</el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<InBody v-show="total>0">
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</InBody>
</div>
</template>
<script>
import {
addUmsMemberCart,
delUmsMemberCart,
exportUmsMemberCart,
getUmsMemberCart,
listUmsMemberCart,
updateUmsMemberCart
} from "@/api/ums/memberCart";
export default {
name: "UmsMemberCart",
data() {
return {
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
umsMemberCartList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
productName: null,
phone: null
},
//
form: {}
};
},
created() {
const { phone } = this.$route.query
if (phone){
this.queryParams.phone = phone
}
this.getList();
},
methods: {
/** 查询购物车列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
listUmsMemberCart(query, pageReq).then(response => {
const { content, totalElements } = response
this.umsMemberCartList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
status: 0,
memberId: null,
productId: null,
pic: null,
skuId: null,
productName: null,
spData: null,
quantity: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
// this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加购物车";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getUmsMemberCart(id).then(response => {
this.form = response;
this.open = true;
this.title = "修改购物车";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateUmsMemberCart(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addUmsMemberCart(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除购物车编号为"' + ids + '"的数据项?').then(function() {
return delUmsMemberCart(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有购物车数据项?').then(() => {
this.exportLoading = true;
return exportUmsMemberCart(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>
<style lang="scss">
.product-container{
display: flex;
flex-direction: row;
align-items: center;
width: 180px;
.product-item{
margin: auto;
width: 180px;
.sp-data{
font-size: 13px;
}
.quantity{
font-weight: bold;
font-size: 13px;
}
}
}
.el-table .my-cell {
vertical-align: top
}
</style>

@ -1,274 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="会员手机号" prop="phone">
<el-input
v-model="queryParams.phone"
placeholder="请输入会员手机号"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="登录IP地址" prop="ipaddr">
<el-input
v-model="queryParams.ipaddr"
placeholder="请输入登录IP地址"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="登录地点" prop="loginLocation">
<el-input
v-model="queryParams.loginLocation"
placeholder="请输入登录地点"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="浏览器类型" prop="browser">
<el-input
v-model="queryParams.browser"
placeholder="请输入浏览器类型"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="操作系统" prop="os">
<el-input
v-model="queryParams.os"
placeholder="请输入操作系统"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="登录时间">
<el-date-picker
v-model="dateRange"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
:clearable="false"
:picker-options='pickerOptions'
range-separator="-"
start-placeholder="开始时间"
end-placeholder="结束时间"
></el-date-picker>
</el-form-item>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="umsMemberLogininforList" @selection-change="handleSelectionChange" border>
<el-table-column type="selection" width="55" align="center"/>
<el-table-column label="会员手机号" prop="phone"/>
<el-table-column label="会员id" prop="memberId"/>
<el-table-column label="登录IP地址" prop="ipaddr"/>
<el-table-column label="登录地点" prop="loginLocation"/>
<el-table-column label="浏览器类型" prop="browser"/>
<el-table-column label="操作系统" prop="os"/>
<el-table-column label="登陆时间" prop="loginTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.loginTime, '') }}</span>
</template>
</el-table-column>
<el-table-column label="操作" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['ums:memberLogininfor:remove']"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<InBody v-show="total>0">
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</InBody>
</div>
</template>
<script>
import {
addUmsMemberLogininfor,
delUmsMemberLogininfor,
exportUmsMemberLogininfor,
getUmsMemberLogininfor,
listUmsMemberLogininfor,
updateUmsMemberLogininfor
} from "@/api/ums/memberLogininfor";
import dateUtil from '@/utils/DateUtil';
export default {
name: "UmsMemberLogininfor",
data() {
return {
dateRange: [],
pickerOptions: {
shortcuts: dateUtil.getTimeShort()
},
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
umsMemberLogininforList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
phone: null,
ipaddr: null,
loginLocation: null,
browser: null,
os: null,
loginTime: null
},
//
form: {},
//
rules: {
},
};
},
created() {
this.getList();
},
methods: {
/** 查询会员登录记录列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
listUmsMemberLogininfor({...this.addDateRange2(query, this.dateRange)}, pageReq).then(response => {
const { content, totalElements } = response
this.umsMemberLogininforList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
phone: null,
memberId: null,
ipaddr: null,
loginLocation: null,
browser: null,
os: null,
loginTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加会员登录记录";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getUmsMemberLogininfor(id).then(response => {
this.form = response;
this.open = true;
this.title = "修改会员登录记录";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateUmsMemberLogininfor(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addUmsMemberLogininfor(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除会员登录记录编号为"' + ids + '"的数据项?').then(function() {
return delUmsMemberLogininfor(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有会员登录记录数据项?').then(() => {
this.exportLoading = true;
return exportUmsMemberLogininfor(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

@ -1,404 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<el-form-item label="MEMBER_ID" prop="memberId">
<el-input
v-model="queryParams.memberId"
placeholder="请输入MEMBER_ID"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段" prop="unionid">
<el-input
v-model="queryParams.unionid"
placeholder="请输入只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="用户的标识,对当前公众号唯一" prop="openid">
<el-input
v-model="queryParams.openid"
placeholder="请输入用户的标识,对当前公众号唯一"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="小程序唯一身份ID" prop="routineOpenid">
<el-input
v-model="queryParams.routineOpenid"
placeholder="请输入小程序唯一身份ID"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="用户所在的分组ID" prop="groupid">
<el-input
v-model="queryParams.groupid"
placeholder="请输入用户所在的分组ID"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="用户被打上的标签ID列表" prop="tagidList">
<el-input
v-model="queryParams.tagidList"
placeholder="请输入用户被打上的标签ID列表"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="用户是否订阅该公众号标识" prop="subscribe">
<el-input
v-model="queryParams.subscribe"
placeholder="请输入用户是否订阅该公众号标识"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<template v-if="showMoreCondition">
<el-form-item label="关注公众号时间" prop="subscribeTime">
<el-input
v-model="queryParams.subscribeTime"
placeholder="请输入关注公众号时间"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="小程序用户会话密匙" prop="sessionKey">
<el-input
v-model="queryParams.sessionKey"
placeholder="请输入小程序用户会话密匙"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="过期时间" prop="expiresIn">
<el-input
v-model="queryParams.expiresIn"
placeholder="请输入过期时间"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="过期时间" prop="expireTime">
<el-date-picker
clearable
size="small"
v-model="queryParams.expireTime"
type="datetime"
value-format="yyyy-MM-ddTHH:mm:ss"
placeholder="选择过期时间">
</el-date-picker>
</el-form-item>
</template>
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
<el-button :icon="showMoreCondition ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" size="mini" @click="showMoreCondition = !showMoreCondition">{{showMoreCondition ? '收起条件' : '展开条件'}}</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['ums:memberWechat:add']"
>新增</el-button>
</el-col>
</el-col>
</el-row>
<el-table v-loading="loading" :data="umsMemberWechatList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="MEMBER_ID" align="center" prop="memberId" />
<el-table-column label="只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段" align="center" prop="unionid" />
<el-table-column label="用户的标识,对当前公众号唯一" align="center" prop="openid" />
<el-table-column label="小程序唯一身份ID" align="center" prop="routineOpenid" />
<el-table-column label="用户所在的分组ID" align="center" prop="groupid" />
<el-table-column label="用户被打上的标签ID列表" align="center" prop="tagidList" />
<el-table-column label="用户是否订阅该公众号标识" align="center" prop="subscribe" />
<el-table-column label="关注公众号时间" align="center" prop="subscribeTime" />
<el-table-column label="小程序用户会话密匙" align="center" prop="sessionKey" />
<el-table-column label="token" align="center" prop="accessToken" />
<el-table-column label="过期时间" align="center" prop="expiresIn" />
<el-table-column label="刷新token" align="center" prop="refreshToken" />
<el-table-column label="过期时间" align="center" prop="expireTime" width="180" >
<template slot-scope="scope">
<span>{{ parseTime(scope.row.expireTime, '')}}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['ums:memberWechat:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['ums:memberWechat:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改用户微信信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="108px" inline class="dialog-form-two">
<el-form-item label="MEMBER_ID" prop="memberId">
<el-input v-model="form.memberId" placeholder="请输入MEMBER_ID" />
</el-form-item>
<el-form-item label="只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段" prop="unionid">
<el-input v-model="form.unionid" placeholder="请输入只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段" />
</el-form-item>
<el-form-item label="用户的标识,对当前公众号唯一" prop="openid">
<el-input v-model="form.openid" placeholder="请输入用户的标识,对当前公众号唯一" />
</el-form-item>
<el-form-item label="小程序唯一身份ID" prop="routineOpenid">
<el-input v-model="form.routineOpenid" placeholder="请输入小程序唯一身份ID" />
</el-form-item>
<el-form-item label="用户所在的分组ID" prop="groupid">
<el-input v-model="form.groupid" placeholder="请输入用户所在的分组ID" />
</el-form-item>
<el-form-item label="用户被打上的标签ID列表" prop="tagidList">
<el-input v-model="form.tagidList" placeholder="请输入用户被打上的标签ID列表" />
</el-form-item>
<el-form-item label="用户是否订阅该公众号标识" prop="subscribe">
<el-input v-model="form.subscribe" placeholder="请输入用户是否订阅该公众号标识" />
</el-form-item>
<el-form-item label="关注公众号时间" prop="subscribeTime">
<el-input v-model="form.subscribeTime" placeholder="请输入关注公众号时间" />
</el-form-item>
<el-form-item label="小程序用户会话密匙" prop="sessionKey">
<el-input v-model="form.sessionKey" placeholder="请输入小程序用户会话密匙" />
</el-form-item>
<el-form-item label="token" prop="accessToken">
<el-input v-model="form.accessToken" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="过期时间" prop="expiresIn">
<el-input v-model="form.expiresIn" placeholder="请输入过期时间" />
</el-form-item>
<el-form-item label="刷新token" prop="refreshToken">
<el-input v-model="form.refreshToken" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="过期时间" prop="expireTime">
<el-date-picker clearable size="small"
v-model="form.expireTime"
type="datetime"
value-format="yyyy-MM-ddTHH:mm:ss"
placeholder="选择过期时间">
</el-date-picker>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listUmsMemberWechat, getUmsMemberWechat, delUmsMemberWechat, addUmsMemberWechat, updateUmsMemberWechat, exportUmsMemberWechat } from "@/api/ums/memberWechat";
export default {
name: "UmsMemberWechat",
data() {
return {
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
umsMemberWechatList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
memberId: null,
unionid: null,
openid: null,
routineOpenid: null,
groupid: null,
tagidList: null,
subscribe: null,
subscribeTime: null,
sessionKey: null,
accessToken: null,
expiresIn: null,
refreshToken: null,
expireTime: null,
},
//
form: {},
//
rules: {
},
showMoreCondition: false
};
},
created() {
this.getList();
},
methods: {
/** 查询用户微信信息列表 */
getList() {
this.loading = true;
const {pageNum, pageSize} = this.queryParams;
const query = {...this.queryParams, pageNum: undefined, pageSize: undefined};
const pageReq = {page: pageNum - 1, size: pageSize};
listUmsMemberWechat(query, pageReq).then(response => {
const { content, totalElements } = response
this.umsMemberWechatList = content;
this.total = totalElements;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
memberId: null,
unionid: null,
openid: null,
routineOpenid: null,
groupid: null,
tagidList: null,
subscribe: null,
subscribeTime: null,
sessionKey: null,
accessToken: null,
expiresIn: null,
refreshToken: null,
expireTime: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加用户微信信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getUmsMemberWechat(id).then(response => {
this.form = response;
this.open = true;
this.title = "修改用户微信信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateUmsMemberWechat(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addUmsMemberWechat(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除用户微信信息编号为"' + ids + '"的数据项?').then(function() {
return delUmsMemberWechat(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有用户微信信息数据项?').then(() => {
this.exportLoading = true;
return exportUmsMemberWechat(queryParams);
}).then(response => {
this.$download.download(response);
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>
Loading…
Cancel
Save