Merge branch 'master' of http://60.204.229.151:20080/chenkangxu/merchant-web
This commit is contained in:
commit
09972d39c4
|
@ -57,7 +57,8 @@
|
|||
"mockjs": "^1.1.0",
|
||||
"nprogress": "0.2.0",
|
||||
"obj-modal": "^1.2.2",
|
||||
"obj-table-plus": "^2.4.0",
|
||||
"obj-table-plus": "^2.5.0",
|
||||
"qrcodejs2": "^0.0.2",
|
||||
"qs": "^6.13.0",
|
||||
"quill": "1.3.7",
|
||||
"screenfull": "5.0.2",
|
||||
|
|
|
@ -16,6 +16,31 @@ export const marketing = {
|
|||
data: data,
|
||||
});
|
||||
},
|
||||
//会员开通情况
|
||||
getEffective: (data) => {
|
||||
return $http.request({
|
||||
url: `/merchant-api/memberPackageUnitStatus/getEffective`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
},
|
||||
//有效套餐
|
||||
memberPackageList: (data) => {
|
||||
return $http.request({
|
||||
url: `/merchant-api/memberPackage/list`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
},
|
||||
//下单
|
||||
placeOrder: (data) => {
|
||||
return $http.request({
|
||||
url: `/merchant-api/memberPackageUnitOrder/placeOrder`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
},
|
||||
//会员用户
|
||||
marketingUserPage: (data) => {
|
||||
return $http.request({
|
||||
url: `/merchant-api/memberUnitUser/page`,
|
||||
|
@ -23,6 +48,27 @@ export const marketing = {
|
|||
params: data,
|
||||
});
|
||||
},
|
||||
memberUnitUserDetail: (data) => {
|
||||
return $http.request({
|
||||
url: `/merchant-api/memberUnitUser/detail`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
},
|
||||
changeMemberPoints: (data) => {
|
||||
return $http.request({
|
||||
url: `/merchant-api/memberUnitUser/changeMemberPoints`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
},
|
||||
changeGrowthValue: (data) => {
|
||||
return $http.request({
|
||||
url: `/merchant-api/memberUnitUser/changeGrowthValue`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
},
|
||||
//积分列表
|
||||
integralList: (data) => {
|
||||
return $http.request({
|
||||
|
@ -31,4 +77,33 @@ export const marketing = {
|
|||
data,
|
||||
});
|
||||
},
|
||||
reverseEnable: (data) => {
|
||||
return $http.request({
|
||||
url: `/merchant-api/memberUnitMemberTask/reverseEnable`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
},
|
||||
integralTop: (data) => {
|
||||
return $http.request({
|
||||
url: `/merchant-api/memberUnitMemberTask/top`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
},
|
||||
settingTaskDetail: (data) => {
|
||||
return $http.request({
|
||||
url: `/merchant-api/memberUnitMemberTask/settingTaskDetail`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
},
|
||||
// 会员积分商品
|
||||
PointsProductPage: (data) => {
|
||||
return $http.request({
|
||||
url: `/merchant-api/memberUnitPointsProduct/page`,
|
||||
method: "get",
|
||||
params: data,
|
||||
});
|
||||
},
|
||||
};
|
||||
|
|
|
@ -204,4 +204,60 @@ export const mer_admin = {
|
|||
params: data,
|
||||
});
|
||||
},
|
||||
//订单管理
|
||||
orderPage: (data) => {
|
||||
return $http.request({
|
||||
method: "get",
|
||||
url: `/merchant-api/order/page`,
|
||||
params: data,
|
||||
});
|
||||
},
|
||||
// 轮播图分页
|
||||
bannerPage: (data) => {
|
||||
return $http.request({
|
||||
method: "get",
|
||||
url: `/admin-api/banner/page`,
|
||||
params: data,
|
||||
});
|
||||
},
|
||||
// 轮播图添加
|
||||
bannerAdd: (data) => {
|
||||
return $http.post(`/admin-api/banner/add`, data);
|
||||
},
|
||||
//编辑轮播图
|
||||
bannerUpdate: (data) => {
|
||||
return $http.post(`/admin-api/banner/update`, data);
|
||||
},
|
||||
//删除轮播图
|
||||
bannerDelete: (data) => {
|
||||
return $http.post(`/admin-api/banner/delete`, data);
|
||||
},
|
||||
//排序轮播图
|
||||
sortBanner: (data) => {
|
||||
return $http.post(`/admin-api/banner/update/sort`, data);
|
||||
},
|
||||
// 公告分页
|
||||
noticePage: (data) => {
|
||||
return $http.request({
|
||||
method: "get",
|
||||
url: `/admin-api/notice/page`,
|
||||
params: data,
|
||||
});
|
||||
},
|
||||
// 公告添加
|
||||
noticeAdd: (data) => {
|
||||
return $http.post(`/admin-api/notice/add`, data);
|
||||
},
|
||||
//编辑公告
|
||||
noticeUpdate: (data) => {
|
||||
return $http.post(`/admin-api/notice/update`, data);
|
||||
},
|
||||
//删除公告
|
||||
noticeDelete: (data) => {
|
||||
return $http.post(`/admin-api/notice/delete`, data);
|
||||
},
|
||||
//排序公告
|
||||
sortnotice: (data) => {
|
||||
return $http.post(`/admin-api/notice/update/sort`, data);
|
||||
},
|
||||
};
|
||||
|
|
|
@ -43,7 +43,46 @@ export default {
|
|||
parentId: 0,
|
||||
parentName: null,
|
||||
name: "商品管理",
|
||||
url: "product/index",
|
||||
url: "product/commodity/index",
|
||||
perms: "",
|
||||
type: 1,
|
||||
elIcon: "el-icon-menu",
|
||||
orderNum: 0,
|
||||
open: null,
|
||||
list: [],
|
||||
},
|
||||
{
|
||||
menuId: getUUID(),
|
||||
parentId: 0,
|
||||
parentName: null,
|
||||
name: "订单管理",
|
||||
url: "product/order/index",
|
||||
perms: "",
|
||||
type: 1,
|
||||
elIcon: "el-icon-menu",
|
||||
orderNum: 0,
|
||||
open: null,
|
||||
list: [],
|
||||
},
|
||||
{
|
||||
menuId: getUUID(),
|
||||
parentId: 0,
|
||||
parentName: null,
|
||||
name: "轮播图管理",
|
||||
url: "product/banner/index",
|
||||
perms: "",
|
||||
type: 1,
|
||||
elIcon: "el-icon-menu",
|
||||
orderNum: 0,
|
||||
open: null,
|
||||
list: [],
|
||||
},
|
||||
{
|
||||
menuId: getUUID(),
|
||||
parentId: 0,
|
||||
parentName: null,
|
||||
name: "公告管理",
|
||||
url: "product/notice/index",
|
||||
perms: "",
|
||||
type: 1,
|
||||
elIcon: "el-icon-menu",
|
||||
|
|
|
@ -156,7 +156,7 @@ http.interceptors.response.use(
|
|||
router.push({ name: "login" });
|
||||
return Promise.resolve(response);
|
||||
} else if (response.data && response.data.code !=200 ) {
|
||||
Message.closeAll();
|
||||
// Message.closeAll();
|
||||
Message({
|
||||
message: response.data.msg||response.data.message,
|
||||
type: "error"
|
||||
|
@ -166,7 +166,7 @@ http.interceptors.response.use(
|
|||
//请求成功的情况
|
||||
//如果是开发模式下,都要弹出
|
||||
if (process.env.NODE_ENV !== "production") {
|
||||
Message.closeAll();
|
||||
// Message.closeAll();
|
||||
Message({
|
||||
message: response.data.msg||response.data.message,
|
||||
type: "success"
|
||||
|
@ -175,9 +175,9 @@ http.interceptors.response.use(
|
|||
// 生产环境下限制性弹出
|
||||
else {
|
||||
if (response.data.msg != "success" && response.data.msg != "查询成功" && Object.prototype.toString.call(response.data) === '[object Object]') {
|
||||
Message.closeAll();
|
||||
// Message.closeAll();
|
||||
Message({
|
||||
message: response.data.msg,
|
||||
message: response.data.msg||response.data.message,
|
||||
type: "success"
|
||||
});
|
||||
}
|
||||
|
|
|
@ -12,39 +12,36 @@
|
|||
24年3月,本商铺修改VIP2所需成长值为700,并新增会员生日优惠卷2;修改提交后,该用户会员等级保持VIP2不变且享有会员优惠卷1和会员优惠卷2;
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<!-- <el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||
<el-form-item label="单位类型:">
|
||||
<el-select
|
||||
v-model="formInline.unitType"
|
||||
placeholder="请选择单位类型:"
|
||||
>
|
||||
<div v-if="storeList.length > 1">
|
||||
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||
<el-form-item label="摊铺:">
|
||||
<el-select v-model="formInline.shopId" placeholder="请选择摊铺::">
|
||||
<el-option
|
||||
v-for="item in [
|
||||
{ label: '市场', value: '1' },
|
||||
{ label: '摊主', value: '2' },
|
||||
{ label: '云店', value: '3' },
|
||||
]"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
v-for="item in storeList"
|
||||
:key="item.shopId"
|
||||
:label="item.shopName"
|
||||
:value="item.shopId"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="getData" type="primary">查询</el-button>
|
||||
<el-button @click="getData" type="primary">导出</el-button>
|
||||
<el-button @click="getList" type="primary">查询</el-button>
|
||||
</el-form-item>
|
||||
</el-form> -->
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="tipsLevel">
|
||||
<div>
|
||||
<span style="margin-right: 30px">全部等级({{list.length}})</span
|
||||
><el-button @click="add(null)" type="primary">+新增套餐</el-button>
|
||||
<span style="margin-right: 30px">全部等级({{ list.length }})</span
|
||||
><el-button @click="add" type="primary">+新增套餐</el-button>
|
||||
</div>
|
||||
<div>
|
||||
<!-- <span style="margin-right: 30px">会员快要到期了</span>
|
||||
<el-button @click="add(null)" type="primary">购买工具</el-button> -->
|
||||
<span v-if="!form.effective" style="margin-right: 30px"
|
||||
>未开通会员</span
|
||||
>
|
||||
<span v-if="form.effective" style="margin-right: 30px"
|
||||
>会员到期时间 {{ form.effectiveEndTime }}</span
|
||||
>
|
||||
<el-button @click="addSetMenu" type="primary">购买工具</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<el-table :data="list" :border="true" style="width: 100%">
|
||||
|
@ -74,10 +71,16 @@
|
|||
>
|
||||
<template slot-scope="scope">
|
||||
<div>
|
||||
<span>{{scope.row.enableMemberDiscount ? '会员折扣,' :''}}</span>
|
||||
<span>{{scope.row.enablePointsRedemption ? '积分兑换,' : ''}}</span>
|
||||
<span>{{scope.row.enableBirthdayCoupons ? '生日优惠卷,' : ''}}</span>
|
||||
<span>{{scope.row.enableBirthdayReward ? '生日双倍积分' : ''}}</span>
|
||||
<span>{{ scope.row.enableMemberDiscount ? "会员折扣," : "" }}</span>
|
||||
<span>{{
|
||||
scope.row.enablePointsRedemption ? "积分兑换," : ""
|
||||
}}</span>
|
||||
<span>{{
|
||||
scope.row.enableBirthdayCoupons ? "生日优惠卷," : ""
|
||||
}}</span>
|
||||
<span>{{
|
||||
scope.row.enableBirthdayReward ? "生日双倍积分" : ""
|
||||
}}</span>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
@ -102,32 +105,37 @@
|
|||
<!-- </el-table-column> -->
|
||||
</el-table>
|
||||
<!-- 添加 -->
|
||||
<addOrUpdate ref="addOrUpdate"></addOrUpdate>
|
||||
<addOrUpdate @getList="getList" ref="addOrUpdate"></addOrUpdate>
|
||||
<!-- 添加套餐 -->
|
||||
<set-menu @getList="getList" ref="setMenu"></set-menu>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import setMenu from "./popup/set-menu.vue";
|
||||
import addOrUpdate from "./popup/add-or-update.vue";
|
||||
import { mapState } from "vuex";
|
||||
export default {
|
||||
components: {
|
||||
addOrUpdate,
|
||||
setMenu,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
list: [],
|
||||
formInline: {
|
||||
unitType: "1",
|
||||
unitType: "",
|
||||
marketId: "",
|
||||
shopId: "",
|
||||
},
|
||||
form: {},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.formInline = {
|
||||
unitType: JSON.parse(sessionStorage.getItem("userInfo")).unitType,
|
||||
marketId: this.marketId,
|
||||
shopId: "",
|
||||
shopId: this.shopId,
|
||||
};
|
||||
this.getList();
|
||||
},
|
||||
|
@ -145,59 +153,18 @@ export default {
|
|||
// },
|
||||
getList() {
|
||||
this.$api.marketing.marketingLevelPage(this.formInline).then((res) => {
|
||||
this.list = res.data.data;
|
||||
this.list = res.data.data ? res.data.data : [];
|
||||
});
|
||||
this.$api.marketing.getEffective(this.formInline).then((res) => {
|
||||
console.log(res);
|
||||
this.form = res.data.data;
|
||||
});
|
||||
},
|
||||
add() {
|
||||
// this.$api.marketing
|
||||
// .addMarketingLevel({
|
||||
// marketId: this.marketId,
|
||||
// unitType: this.formInline.unitType,
|
||||
// levelList: [
|
||||
// {
|
||||
// levelName: "青铜级",
|
||||
// requiredGrowthValue: 0,
|
||||
// growthValueUpperLimit: 99,
|
||||
// enableMemberDiscount: true,
|
||||
// enablePointsRedemption: true,
|
||||
// enableBirthdayCoupons: true,
|
||||
// enableBirthdayReward: true,
|
||||
// discountRate: "9",
|
||||
// rewardEffectiveTimeType: 1,
|
||||
// memberLevelCouponsList: [
|
||||
// {
|
||||
// couponsName: "生日优惠券",
|
||||
// couponsThreshold: "10",
|
||||
// couponsMinus: 8,
|
||||
// couponsEffectiveTimeType: 2,
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// {
|
||||
// levelName: "白银",
|
||||
// requiredGrowthValue: 100,
|
||||
// growthValueUpperLimit: 999999999,
|
||||
// enableMemberDiscount: true,
|
||||
// enablePointsRedemption: true,
|
||||
// enableBirthdayCoupons: true,
|
||||
// enableBirthdayReward: true,
|
||||
// discountRate: "8",
|
||||
// rewardEffectiveTimeType: 1,
|
||||
// memberLevelCouponsList: [
|
||||
// {
|
||||
// couponsName: "生日优惠券",
|
||||
// couponsThreshold: "20",
|
||||
// couponsMinus: 10,
|
||||
// couponsEffectiveTimeType: 2,
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// ],
|
||||
// })
|
||||
// .then((res) => {
|
||||
// console.log(res);
|
||||
// });
|
||||
this.$refs.addOrUpdate.toggle().add();
|
||||
this.$refs.addOrUpdate.toggle().add(this.formInline);
|
||||
},
|
||||
addSetMenu() {
|
||||
this.$refs.setMenu.toggle().add(this.formInline);
|
||||
},
|
||||
confirmEvent() {},
|
||||
cancelEvent() {},
|
||||
|
|
|
@ -26,10 +26,24 @@ export default {
|
|||
show: false,
|
||||
width: "60%",
|
||||
},
|
||||
modalData: {},
|
||||
value1: [],
|
||||
modalData: {
|
||||
couponsName: "",
|
||||
couponsThreshold: 0,
|
||||
couponsMinus: 0,
|
||||
couponsEffectiveTimeType: "1",
|
||||
},
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
"modalConfig.show"(newVal) {
|
||||
if (newVal) {
|
||||
//关闭弹窗清空校验
|
||||
setTimeout(() => {
|
||||
this.$refs.modal.resetFields();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
queryTableData(pageNo, pageSize) {},
|
||||
toggle(e) {
|
||||
|
@ -37,43 +51,33 @@ export default {
|
|||
this.modalConfig.show = true;
|
||||
} else {
|
||||
this.modalConfig.show = false;
|
||||
this.$refs.modal.resetFields();
|
||||
}
|
||||
if (e) {
|
||||
this.init(cloneDeep(e));
|
||||
}
|
||||
return {
|
||||
add: (row) => {
|
||||
this.modalConfig.title = "添加优惠卷";
|
||||
this.$nextTick(() => {
|
||||
this.$refs.modal?.resetFields();
|
||||
});
|
||||
this.isAdd = true;
|
||||
if (row) {
|
||||
console.log(row);
|
||||
if (row.length > 0) {
|
||||
this.modalData = row[0];
|
||||
} else {
|
||||
console.log("111");
|
||||
return;
|
||||
this.modalData = {
|
||||
couponsName: "生日优惠卷",
|
||||
couponsThreshold: 0,
|
||||
couponsMinus: 0,
|
||||
couponsEffectiveTimeType: "1",
|
||||
};
|
||||
}
|
||||
this.modalData = {
|
||||
couponsName: "",
|
||||
couponsThreshold: 0,
|
||||
couponsMinus: 0,
|
||||
couponsEffectiveTimeType: "1",
|
||||
};
|
||||
console.log("qqw");
|
||||
this.modalConfig.title = "添加优惠卷";
|
||||
this.isAdd = true;
|
||||
},
|
||||
update: () => {
|
||||
this.isAdd = false;
|
||||
},
|
||||
};
|
||||
},
|
||||
init(row) {
|
||||
if (row) {
|
||||
this.modalData = row;
|
||||
return;
|
||||
}
|
||||
console.log("123");
|
||||
},
|
||||
init(row) {},
|
||||
},
|
||||
computed: {
|
||||
modalCols() {
|
||||
|
@ -146,7 +150,7 @@ export default {
|
|||
},
|
||||
{
|
||||
label: "当月",
|
||||
value: "2",
|
||||
value: "3",
|
||||
},
|
||||
].map((item) => {
|
||||
return (
|
||||
|
@ -176,8 +180,11 @@ export default {
|
|||
loading: this.isLoading,
|
||||
submit: true,
|
||||
handle: () => {
|
||||
console.log(this.modalData);
|
||||
this.$emit("addCouponData", this.modalData);
|
||||
console.log(JSON.parse(JSON.stringify(this.modalData)));
|
||||
this.$emit(
|
||||
"addCouponData",
|
||||
JSON.parse(JSON.stringify(this.modalData))
|
||||
);
|
||||
this.toggle();
|
||||
},
|
||||
},
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<obj-table-plus
|
||||
style="height: 70vh"
|
||||
ref="oTableThree"
|
||||
v-model="modalData.tableData"
|
||||
v-model="modalData.levelList"
|
||||
:tableCols="tableCols"
|
||||
:tableProp="tableProp"
|
||||
:toolbarProp="toolbarProp"
|
||||
|
@ -41,6 +41,7 @@ export default {
|
|||
tableProp: {
|
||||
height: "auto",
|
||||
border: true,
|
||||
"show-overflow": false,
|
||||
"auto-resize": false,
|
||||
"print-config": {},
|
||||
},
|
||||
|
@ -58,7 +59,7 @@ export default {
|
|||
marketId: "",
|
||||
shopId: "",
|
||||
unitType: "",
|
||||
tableData: [
|
||||
levelList: [
|
||||
{
|
||||
levelName: "",
|
||||
requiredGrowthValue: 0,
|
||||
|
@ -90,7 +91,7 @@ export default {
|
|||
enableBirthdayReward: false,
|
||||
discountRate: "",
|
||||
rewardEffectiveTimeType: "",
|
||||
memberLevelCouponsList: "",
|
||||
memberLevelCouponsList: [],
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
@ -109,8 +110,14 @@ export default {
|
|||
this.init(cloneDeep(e.row));
|
||||
}
|
||||
return {
|
||||
add: () => {
|
||||
this.modalData = {};
|
||||
add: (row) => {
|
||||
console.log(row);
|
||||
|
||||
this.modalData = {
|
||||
marketId: row.marketId,
|
||||
shopId: row.shopId,
|
||||
unitType: row.unitType,
|
||||
};
|
||||
this.queryTableData();
|
||||
this.isAdd = true;
|
||||
},
|
||||
|
@ -125,7 +132,8 @@ export default {
|
|||
addCouponData(data) {
|
||||
console.log(data);
|
||||
let row = JSON.parse(JSON.stringify(data));
|
||||
this.modalData.tableData[this.couponIndex].memberLevelCouponsList = [row];
|
||||
this.modalData.levelList[this.couponIndex].memberLevelCouponsList = [row];
|
||||
this.$refs.modalForm.validate();
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
|
@ -147,7 +155,7 @@ export default {
|
|||
let row = e.row;
|
||||
return (
|
||||
<el-form-item
|
||||
prop={`tableData.${e.$rowIndex}.levelName`}
|
||||
prop={`levelList.${e.$rowIndex}.levelName`}
|
||||
rules={{
|
||||
required: true,
|
||||
message: "请输入等级名称",
|
||||
|
@ -168,15 +176,26 @@ export default {
|
|||
width: "170px",
|
||||
type: "jsx",
|
||||
render: (e) => {
|
||||
let changUpperLimit = () => {
|
||||
console.log(
|
||||
e.$rowIndex,
|
||||
e,
|
||||
e.data[e.$rowIndex - 1].growthValueUpperLimit,
|
||||
e.data[e.$rowIndex].requiredGrowthValue
|
||||
);
|
||||
e.data[e.$rowIndex - 1].growthValueUpperLimit =
|
||||
e.data[e.$rowIndex].requiredGrowthValue - 1;
|
||||
};
|
||||
return (
|
||||
<el-form-item
|
||||
prop={`tableData.${e.$rowIndex}.requiredGrowthValue`}
|
||||
prop={`levelList.${e.$rowIndex}.requiredGrowthValue`}
|
||||
rules={{
|
||||
required: true,
|
||||
message: "请输入所需成长值",
|
||||
}}
|
||||
>
|
||||
<el-input-number
|
||||
onChange={changUpperLimit}
|
||||
disabled={e.$rowIndex == 0}
|
||||
style="width:150px"
|
||||
controls-position="right"
|
||||
|
@ -199,14 +218,14 @@ export default {
|
|||
render: (e) => {
|
||||
return (
|
||||
<el-form-item
|
||||
prop={`tableData.${e.$rowIndex}.requiredGrowthValue`}
|
||||
prop={`levelList.${e.$rowIndex}.requiredGrowthValue`}
|
||||
rules={{
|
||||
required: true,
|
||||
message: "请输入所需成长值",
|
||||
}}
|
||||
>
|
||||
<el-input-number
|
||||
disabled={this.modalData.tableData.length == e.$rowIndex + 1}
|
||||
disabled={this.modalData.levelList.length == e.$rowIndex + 1}
|
||||
style="width:150px"
|
||||
controls-position="right"
|
||||
precision={0}
|
||||
|
@ -232,10 +251,12 @@ export default {
|
|||
}
|
||||
};
|
||||
return (
|
||||
<el-switch
|
||||
onchange={changeDiscountRate}
|
||||
v-model={row.enableMemberDiscount}
|
||||
></el-switch>
|
||||
<el-form-item>
|
||||
<el-switch
|
||||
onchange={changeDiscountRate}
|
||||
v-model={row.enableMemberDiscount}
|
||||
></el-switch>
|
||||
</el-form-item>
|
||||
);
|
||||
},
|
||||
},
|
||||
|
@ -249,7 +270,7 @@ export default {
|
|||
if (e.row.enableMemberDiscount) {
|
||||
return (
|
||||
<el-form-item
|
||||
prop={`tableData.${e.$rowIndex}.discountRate`}
|
||||
prop={`levelList.${e.$rowIndex}.discountRate`}
|
||||
rules={{
|
||||
required: true,
|
||||
message: "请输入所需成长值",
|
||||
|
@ -278,7 +299,14 @@ export default {
|
|||
width: "120px",
|
||||
type: "jsx",
|
||||
render: ({ row }) => {
|
||||
return <el-switch v-model={row.enablePointsRedemption}></el-switch>;
|
||||
return (
|
||||
<el-form-item>
|
||||
{" "}
|
||||
<el-switch
|
||||
v-model={row.enablePointsRedemption}
|
||||
></el-switch>{" "}
|
||||
</el-form-item>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -290,14 +318,16 @@ export default {
|
|||
render: ({ row }) => {
|
||||
let changeCouponsList = () => {
|
||||
if (!row.enableBirthdayCoupons) {
|
||||
row.memberLevelCouponsList = "";
|
||||
row.memberLevelCouponsList = [];
|
||||
}
|
||||
};
|
||||
return (
|
||||
<el-switch
|
||||
onchange={changeCouponsList}
|
||||
v-model={row.enableBirthdayCoupons}
|
||||
></el-switch>
|
||||
<el-form-item>
|
||||
<el-switch
|
||||
onchange={changeCouponsList}
|
||||
v-model={row.enableBirthdayCoupons}
|
||||
></el-switch>
|
||||
</el-form-item>
|
||||
);
|
||||
},
|
||||
},
|
||||
|
@ -316,7 +346,7 @@ export default {
|
|||
if (e.row.enableBirthdayCoupons) {
|
||||
return (
|
||||
<el-form-item
|
||||
prop={`tableData.${e.$rowIndex}.memberLevelCouponsList`}
|
||||
prop={`levelList.${e.$rowIndex}.memberLevelCouponsList`}
|
||||
rules={{
|
||||
required: true,
|
||||
message: "请添加优惠卷",
|
||||
|
@ -349,10 +379,12 @@ export default {
|
|||
}
|
||||
};
|
||||
return (
|
||||
<el-switch
|
||||
onchange={changeReward}
|
||||
v-model={row.enableBirthdayReward}
|
||||
></el-switch>
|
||||
<el-form-item>
|
||||
<el-switch
|
||||
onchange={changeReward}
|
||||
v-model={row.enableBirthdayReward}
|
||||
></el-switch>
|
||||
</el-form-item>
|
||||
);
|
||||
},
|
||||
},
|
||||
|
@ -366,7 +398,7 @@ export default {
|
|||
if (e.row.enableBirthdayReward) {
|
||||
return (
|
||||
<el-form-item
|
||||
prop={`tableData.${e.$rowIndex}.rewardEffectiveTimeType`}
|
||||
prop={`levelList.${e.$rowIndex}.rewardEffectiveTimeType`}
|
||||
rules={{
|
||||
required: true,
|
||||
message: "请输入所需成长值",
|
||||
|
@ -408,7 +440,7 @@ export default {
|
|||
render: (e) => {
|
||||
let add = () => {
|
||||
console.log(e);
|
||||
this.modalData.tableData.splice(e.$rowIndex + 1, 0, {
|
||||
this.modalData.levelList.splice(e.$rowIndex + 1, 0, {
|
||||
levelName: "",
|
||||
requiredGrowthValue: "0",
|
||||
growthValueUpperLimit: "999999999",
|
||||
|
@ -418,16 +450,16 @@ export default {
|
|||
enableBirthdayReward: false,
|
||||
discountRate: "",
|
||||
rewardEffectiveTimeType: "",
|
||||
memberLevelCouponsList: "",
|
||||
memberLevelCouponsList: [],
|
||||
});
|
||||
};
|
||||
let remove = () => {
|
||||
this.modalData.tableData.splice(e.$rowIndex, 1);
|
||||
this.modalData.levelList.splice(e.$rowIndex, 1);
|
||||
};
|
||||
return (
|
||||
<div>
|
||||
<el-button
|
||||
v-show={this.modalData.tableData.length == e.$rowIndex + 1}
|
||||
v-show={this.modalData.levelList.length == e.$rowIndex + 1}
|
||||
style="margin-right: 10px"
|
||||
type="primary"
|
||||
size="mini"
|
||||
|
@ -436,7 +468,7 @@ export default {
|
|||
>
|
||||
添加
|
||||
</el-button>
|
||||
{this.modalData.tableData.length > 1 && e.$rowIndex != 0 ? (
|
||||
{this.modalData.levelList.length > 1 && e.$rowIndex != 0 ? (
|
||||
<el-popconfirm title="确认要删除吗?" onConfirm={remove}>
|
||||
<el-button
|
||||
class="ml-1"
|
||||
|
@ -466,14 +498,15 @@ export default {
|
|||
label: this.isAdd ? "确认添加" : "确认修改",
|
||||
type: "primary",
|
||||
handle: debounce(() => {
|
||||
this.modalData.marketId = this.marketId;
|
||||
this.modalData.shopId = this.shopId;
|
||||
this.modalData.unitType = JSON.parse(
|
||||
sessionStorage.getItem("userInfo")
|
||||
).unitType;
|
||||
console.log(this.modalData);
|
||||
this.$refs.modalForm.validate((valid) => {
|
||||
console.log(valid);
|
||||
if (valid) {
|
||||
this.$api.marketing
|
||||
.addMarketingLevel(this.modalData)
|
||||
.then((res) => {
|
||||
this.$emit("getList");
|
||||
this.toggle();
|
||||
});
|
||||
}
|
||||
});
|
||||
}, 300),
|
||||
},
|
||||
|
|
|
@ -0,0 +1,245 @@
|
|||
<template>
|
||||
<div>
|
||||
<obj-modal
|
||||
ref="modal"
|
||||
labelWidth="150px"
|
||||
:modalCols="modalCols"
|
||||
:modalConfig="modalConfig"
|
||||
:modalData="modalData"
|
||||
:modalHandles="modalHandles"
|
||||
>
|
||||
<template slot="dialog__after">
|
||||
<el-form
|
||||
label-width="150px"
|
||||
:rules="rules"
|
||||
:model="modalData"
|
||||
ref="modalForm"
|
||||
>
|
||||
<el-form-item prop="packageId" label="选择套餐:">
|
||||
<div class="card">
|
||||
<div v-for="item in PackageList" :key="item.id">
|
||||
<el-card class="box-card">
|
||||
<div style="font-size: 20px; font-weight: 600">
|
||||
{{ item.packageName }}
|
||||
</div>
|
||||
<div style="margin-top: 20px; font-size: 16px">
|
||||
¥<span style="font-size: 20px; font-weight: 600">{{
|
||||
item.packagePrice
|
||||
}}</span
|
||||
>/{{ item.packageEffectiveTimeQuantity
|
||||
}}{{ item.packageEffectiveTimeUnit == 1 ? "年" : "月" }}
|
||||
</div>
|
||||
</el-card>
|
||||
<el-radio
|
||||
@change="changePackage"
|
||||
style="margin-bottom: 20px"
|
||||
v-model="modalData.packageId"
|
||||
:label="item.id"
|
||||
border
|
||||
>请选择</el-radio
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item prop="packageQuantity" label="购买数量:">
|
||||
<el-input-number
|
||||
style="width: 200px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.packageQuantity"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-dialog
|
||||
title="请扫描二维码"
|
||||
:visible.sync="dialogVisible"
|
||||
width="500px"
|
||||
append-to-body
|
||||
:before-close="handleClose"
|
||||
>
|
||||
<div v-if="isShow" class="qrcodeName">
|
||||
<div class="qrcode" ref="qrCodeUrl"></div>
|
||||
<div style="margin-top: 20px">请使用支付宝扫一扫,完成支付</div>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
</obj-modal>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import QRCode from "qrcodejs2";
|
||||
import { debounce, cloneDeep } from "lodash";
|
||||
import { Divider } from "element-ui";
|
||||
export default {
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
isAdd: true,
|
||||
dialogVisible: false,
|
||||
isShow: false,
|
||||
//表格属性
|
||||
modalConfig: {
|
||||
title: "添加优惠卷",
|
||||
show: false,
|
||||
width: "60%",
|
||||
fullscreen: true,
|
||||
},
|
||||
modalData: {},
|
||||
PackageList: [],
|
||||
rules: {
|
||||
packageId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择套餐",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
packageQuantity: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入购买数量",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
},
|
||||
userData: {},
|
||||
qrcode: "",
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
"modalConfig.show"(newVal) {
|
||||
if (!newVal) {
|
||||
//关闭弹窗清空校验
|
||||
setTimeout(() => {
|
||||
this.$refs.modalForm.resetFields();
|
||||
this.$emit("getList");
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
queryTableData(pageNo, pageSize) {},
|
||||
toggle(e) {
|
||||
if (this.modalConfig.show == false) {
|
||||
this.modalConfig.show = true;
|
||||
this.$api.marketing
|
||||
.memberPackageList({ packageEnable: true })
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
this.PackageList = res.data.data;
|
||||
// this.modalData = res.data.data;
|
||||
});
|
||||
} else {
|
||||
this.modalConfig.show = false;
|
||||
}
|
||||
if (e) {
|
||||
this.init(cloneDeep(e));
|
||||
}
|
||||
return {
|
||||
add: (row) => {
|
||||
this.userData = {
|
||||
marketId: row.marketId,
|
||||
shopId: row.shopId,
|
||||
unitType: row.unitType,
|
||||
userId: JSON.parse(sessionStorage.getItem("userInfo")).userId,
|
||||
};
|
||||
this.modalData = {
|
||||
packageId: "",
|
||||
packageQuantity: "1",
|
||||
};
|
||||
this.modalConfig.title = "会员营销工具套餐";
|
||||
this.isAdd = true;
|
||||
},
|
||||
update: () => {
|
||||
this.isAdd = false;
|
||||
},
|
||||
};
|
||||
},
|
||||
init(row) {},
|
||||
changePackage() {
|
||||
this.$refs.modalForm.validate();
|
||||
// console.log(this.modalData.packageId);
|
||||
},
|
||||
creatQrCode(data) {
|
||||
this.$nextTick(() => {
|
||||
this.qrcode = new QRCode(this.$refs.qrCodeUrl, {
|
||||
text: data.qr_pay_url, // 转换为二维码的内容
|
||||
width: 300,
|
||||
height: 300,
|
||||
colorDark: "#000000",
|
||||
colorLight: "#ffffff",
|
||||
correctLevel: QRCode.CorrectLevel.H,
|
||||
});
|
||||
});
|
||||
},
|
||||
handleClose(done) {
|
||||
done();
|
||||
this.isShow = false;
|
||||
this.qrcode.clear();
|
||||
console.log("123");
|
||||
},
|
||||
},
|
||||
|
||||
computed: {
|
||||
modalCols() {
|
||||
return [];
|
||||
},
|
||||
modalHandles() {
|
||||
return [
|
||||
{
|
||||
label: "取消",
|
||||
handle: () => {
|
||||
this.toggle();
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "确定购买",
|
||||
type: "primary",
|
||||
loading: this.isLoading,
|
||||
submit: true,
|
||||
handle: () => {
|
||||
console.log(this.modalData, this.userData);
|
||||
this.$refs.modalForm.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$api.marketing
|
||||
.placeOrder({ ...this.userData, ...this.modalData })
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
this.dialogVisible = true;
|
||||
this.isShow = true;
|
||||
this.creatQrCode(res.data.data);
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
asyncComputed: {},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.card {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
text-align: center;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.box-card {
|
||||
margin-bottom: 20px;
|
||||
width: 300px;
|
||||
text-align: center;
|
||||
}
|
||||
.qrcodeName {
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
|
@ -12,38 +12,65 @@
|
|||
>
|
||||
<template slot="tableTop">
|
||||
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||
<el-form-item v-if="storeList.length > 1" label="商铺">
|
||||
<el-select v-model="formInline.shopId" placeholder="请选择">
|
||||
<el-option
|
||||
v-for="item in storeList"
|
||||
:key="item.shopId"
|
||||
:label="item.shopName"
|
||||
:value="item.shopId"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="商品ID">
|
||||
<el-input
|
||||
placeholder="请输入商品ID"
|
||||
v-model="formInline.name"
|
||||
v-model="formInline.productId"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="商品名称">
|
||||
<el-input
|
||||
placeholder="请输入商品名称"
|
||||
v-model="formInline.name"
|
||||
v-model="formInline.productName"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="商品状态">
|
||||
<el-select
|
||||
@change="getData"
|
||||
v-model="formInline.marketId"
|
||||
placeholder="请选择"
|
||||
>
|
||||
<el-form-item label="兑换状态">
|
||||
<el-select v-model="formInline.redeemEnable" placeholder="请选择">
|
||||
<el-option
|
||||
v-for="item in marketList"
|
||||
v-for="item in [
|
||||
{ value: true, label: '启用' },
|
||||
{ value: false, label: '禁用' },
|
||||
]"
|
||||
:key="item.marketId"
|
||||
:label="item.marketName"
|
||||
:value="item.marketId"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="积分数量">
|
||||
<el-input
|
||||
placeholder="请输入手机号"
|
||||
v-model="formInline.name"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="积分数量">
|
||||
<el-col :span="11">
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="formInline.oneGoodsViewPoints"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
</el-col>
|
||||
<el-col class="line" :span="2">-</el-col>
|
||||
<el-col :span="11">
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="formInline.oneGoodsViewPoints"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
</el-col>
|
||||
</el-form-item> -->
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="$refs.oTable.reload()"
|
||||
>查询</el-button
|
||||
|
@ -54,26 +81,26 @@
|
|||
</el-form-item>
|
||||
</el-form>
|
||||
<div class="mb-2">
|
||||
<el-button type="primary" size="small">+添加</el-button>
|
||||
<el-button @click="add" type="primary" size="small">+添加</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</obj-table-plus>
|
||||
<!-- 添加或编辑 -->
|
||||
<!-- <add-or-update
|
||||
<add-or-update
|
||||
@queryList="$refs.oTable.reload()"
|
||||
ref="addOrUpdate"
|
||||
></add-or-update> -->
|
||||
></add-or-update>
|
||||
<!-- 查看详情 -->
|
||||
<!-- <viewDetails ref="viewDetails"></viewDetails> -->
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// import AddOrUpdate from "./popup/add-or-update.vue";
|
||||
import AddOrUpdate from "./popup/add-or-update.vue";
|
||||
// import viewDetails from "./popup/view-details.vue";
|
||||
import { mapState } from "vuex";
|
||||
export default {
|
||||
// components: { AddOrUpdate },
|
||||
components: { AddOrUpdate },
|
||||
data() {
|
||||
return {
|
||||
dataList: [],
|
||||
|
@ -98,7 +125,7 @@ export default {
|
|||
this.formInline = {
|
||||
unitType: JSON.parse(sessionStorage.getItem("userInfo")).unitType,
|
||||
marketId: this.marketId,
|
||||
shopId: "",
|
||||
shopId: this.shopId,
|
||||
};
|
||||
this.$nextTick(() => {
|
||||
this.$refs.oTable.reload();
|
||||
|
@ -106,19 +133,17 @@ export default {
|
|||
},
|
||||
methods: {
|
||||
getData() {
|
||||
this.$api.mer_admin
|
||||
.storeList({ marketId: this.formInline.marketId })
|
||||
.then((res) => {
|
||||
this.storeList = res.data.data;
|
||||
// this.formInline.shopId = res.data.data[0].shopId;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.oTable.reload();
|
||||
});
|
||||
this.$api.marketing.PointsProductPage(this.formInline).then((res) => {
|
||||
this.storeList = res.data.data;
|
||||
// this.formInline.shopId = res.data.data[0].shopId;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.oTable.reload();
|
||||
});
|
||||
});
|
||||
},
|
||||
queryList(pageNo, pageSize) {
|
||||
this.$api.marketing
|
||||
.marketingUserPage({
|
||||
.PointsProductPage({
|
||||
pageNumber: pageNo,
|
||||
pageSize: pageSize,
|
||||
...this.formInline,
|
||||
|
@ -134,6 +159,9 @@ export default {
|
|||
this.$refs.oTable.complete(false);
|
||||
});
|
||||
},
|
||||
add() {
|
||||
this.$refs.addOrUpdate.toggle().add();
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
tableCols() {
|
||||
|
@ -143,7 +171,7 @@ export default {
|
|||
{
|
||||
title: "商品ID",
|
||||
align: "center",
|
||||
field: "name",
|
||||
field: "productId",
|
||||
},
|
||||
{
|
||||
title: "商品名称",
|
||||
|
|
|
@ -0,0 +1,593 @@
|
|||
<template>
|
||||
<div>
|
||||
<obj-modal
|
||||
ref="modal"
|
||||
labelWidth="150px"
|
||||
:modalConfig="modalConfig"
|
||||
:modalData="modalData"
|
||||
:modalHandles="modalHandles"
|
||||
>
|
||||
<div slot="dialog__content">
|
||||
<el-form
|
||||
:model="ruleForm"
|
||||
:rules="rules"
|
||||
ref="ruleForm"
|
||||
label-width="150px"
|
||||
class="demo-ruleForm"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="订金支付时间:" prop="startTime">
|
||||
<el-date-picker
|
||||
@change="getOrderTime"
|
||||
format="yyyy-MM-dd HH:mm"
|
||||
data-format="yyyy-MM-dd HH:mm"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
v-model="orderTime"
|
||||
type="datetimerange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:editable="false"
|
||||
>
|
||||
</el-date-picker> </el-form-item
|
||||
></el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item
|
||||
label="尾款支付时间:"
|
||||
prop="balancePaymentStartTime"
|
||||
>
|
||||
<el-date-picker
|
||||
@change="getArrearsTime"
|
||||
format="yyyy-MM-dd"
|
||||
data-format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
v-model="arrears"
|
||||
type="datetimerange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:picker-options="pickerOptions"
|
||||
>
|
||||
</el-date-picker> </el-form-item
|
||||
></el-col>
|
||||
</el-row>
|
||||
<el-form-item
|
||||
label="预计发货时间:"
|
||||
prop="estimatedStartDeliveryTime"
|
||||
>
|
||||
<el-date-picker
|
||||
format="yyyy-MM-dd HH:mm"
|
||||
data-format="yyyy-MM-dd HH:mm"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
@change="deliveryTime"
|
||||
v-model="delivery"
|
||||
type="datetimerange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:picker-options="pickerOptions"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="定金可退:" prop="isRefundEarnestMoney">
|
||||
<el-radio v-model="ruleForm.isRefundEarnestMoney" :label="1"
|
||||
>是</el-radio
|
||||
>
|
||||
<el-radio v-model="ruleForm.isRefundEarnestMoney" :label="2"
|
||||
>否</el-radio
|
||||
>
|
||||
<span>
|
||||
选择是,用户可在付尾款前申请退定金(申请后自动退,无需审核),或付尾款时间结束后系统自动退定金
|
||||
</span>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="isAdd" label="选择商品:">
|
||||
<el-button type="primary" @click="selectProduct"
|
||||
>点击请选择商品</el-button
|
||||
>
|
||||
<span> 备注:一次最多添加五个商品 </span>
|
||||
</el-form-item>
|
||||
|
||||
<div style="padding: 0 0 0 20px; font-size: 16px; font-weight: 600">
|
||||
已选择商品
|
||||
</div>
|
||||
<div v-if="isAdd" style="padding: 20px">
|
||||
<div
|
||||
v-for="item in ruleForm.productList"
|
||||
:key="item.id"
|
||||
style="border-top: 1px solid #ccc; padding: 10px 0 0 0"
|
||||
>
|
||||
<div style="font-size: 16px; margin-bottom: 20px">
|
||||
<span>商品ID:{{ item.productId }}</span>
|
||||
<span style="margin-left: 20px">商品名称:{{ item.name }}</span>
|
||||
</div>
|
||||
<el-table
|
||||
border
|
||||
ref="multipleTable"
|
||||
:data="item.productSpecificationList"
|
||||
tooltip-effect="dark"
|
||||
style="width: 100%"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column align="center" label="是否预售" width="80">
|
||||
<template slot-scope="scope">
|
||||
<el-checkbox
|
||||
:true-label="1"
|
||||
:false-label="0"
|
||||
v-model="scope.row.isAdvanceSell"
|
||||
></el-checkbox>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="SKU-ID" prop="id" />
|
||||
<el-table-column
|
||||
align="center"
|
||||
label="规格"
|
||||
prop="attributeList"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.attributeValue }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="属性" prop="address">
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
scope.row.attributeList
|
||||
? scope.row.attributeList[0].attributeName
|
||||
: "无"
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
label="销售价"
|
||||
prop="marketPrice"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column align="center" label="*是否预售" width="200">
|
||||
<template slot="header">
|
||||
<span style="color: red">*预售价</span>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-input-number
|
||||
v-if="scope.row.isAdvanceSell"
|
||||
@change="
|
||||
scope.row.balancePayment =
|
||||
scope.row.presalePrice - scope.row.earnestMoney
|
||||
"
|
||||
v-model="scope.row.presalePrice"
|
||||
:min="0"
|
||||
:max="scope.row.marketPrice"
|
||||
label="请输入销售价"
|
||||
></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="*定金" width="200">
|
||||
<template slot="header">
|
||||
<span style="color: red">*定金</span>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-input-number
|
||||
@change="
|
||||
scope.row.balancePayment =
|
||||
scope.row.presalePrice - scope.row.earnestMoney
|
||||
"
|
||||
v-if="scope.row.isAdvanceSell"
|
||||
v-model="scope.row.earnestMoney"
|
||||
:min="0"
|
||||
:max="scope.row.presalePrice"
|
||||
label="请输入订金"
|
||||
></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="尾款" width="200">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.isAdvanceSell">{{
|
||||
scope.row.presalePrice
|
||||
? scope.row.presalePrice - scope.row.earnestMoney
|
||||
: ""
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="*预售库存" width="200">
|
||||
<template slot="header">
|
||||
<span style="color: red">*预售库存</span>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-input-number
|
||||
v-if="scope.row.isAdvanceSell"
|
||||
v-model="scope.row.advanceSellStockNum"
|
||||
:min="0"
|
||||
:max="999999"
|
||||
:step="10"
|
||||
:precision="0"
|
||||
label="请输入预售库存"
|
||||
></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<el-empty
|
||||
v-show="ruleForm.productList.length == 0"
|
||||
description="请选择商品"
|
||||
></el-empty>
|
||||
</div>
|
||||
<div v-else style="padding: 20px">
|
||||
<div style="border-top: 1px solid #ccc; padding: 10px 0 0 0">
|
||||
<div style="font-size: 16px; margin-bottom: 20px">
|
||||
<span>商品ID:{{ ruleForm.productId }}</span>
|
||||
<span style="margin-left: 20px"
|
||||
>商品名称:{{ ruleForm.name }}</span
|
||||
>
|
||||
</div>
|
||||
<el-table
|
||||
border
|
||||
ref="multipleTable"
|
||||
:data="ruleForm.productSpecificationList"
|
||||
tooltip-effect="dark"
|
||||
style="width: 100%"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column align="center" label="是否预售" width="80">
|
||||
<template slot-scope="scope">
|
||||
<el-checkbox
|
||||
:true-label="1"
|
||||
:false-label="0"
|
||||
v-model="scope.row.isAdvanceSell"
|
||||
></el-checkbox>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="SKU-ID" prop="id" />
|
||||
<el-table-column
|
||||
align="center"
|
||||
label="规格"
|
||||
prop="attributeList"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.attributeValue }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="属性" prop="address">
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
scope.row.attributeList
|
||||
? scope.row.attributeList[0].attributeName
|
||||
: "无"
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
label="销售价"
|
||||
prop="marketPrice"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column align="center" label="*是否预售" width="200">
|
||||
<template slot="header">
|
||||
<span style="color: red">*预售价</span>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-input-number
|
||||
v-if="scope.row.isAdvanceSell"
|
||||
@change="
|
||||
scope.row.balancePayment =
|
||||
scope.row.presalePrice - scope.row.earnestMoney
|
||||
"
|
||||
v-model="scope.row.presalePrice"
|
||||
:min="0"
|
||||
:max="scope.row.marketPrice"
|
||||
label="请输入销售价"
|
||||
></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="*定金" width="200">
|
||||
<template slot="header">
|
||||
<span style="color: red">*定金</span>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-input-number
|
||||
@change="
|
||||
scope.row.balancePayment =
|
||||
scope.row.presalePrice - scope.row.earnestMoney
|
||||
"
|
||||
v-if="scope.row.isAdvanceSell"
|
||||
v-model="scope.row.earnestMoney"
|
||||
:min="0"
|
||||
:max="scope.row.presalePrice"
|
||||
label="请输入订金"
|
||||
></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="尾款" width="200">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.isAdvanceSell">{{
|
||||
scope.row.presalePrice
|
||||
? scope.row.presalePrice - scope.row.earnestMoney
|
||||
: ""
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="*预售库存" width="200">
|
||||
<template slot="header">
|
||||
<span style="color: red">*预售库存</span>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-input-number
|
||||
v-if="scope.row.isAdvanceSell"
|
||||
v-model="scope.row.advanceSellStockNum"
|
||||
:min="0"
|
||||
:max="999999"
|
||||
:step="10"
|
||||
:precision="0"
|
||||
label="请输入预售库存"
|
||||
></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<el-empty
|
||||
v-show="ruleForm.productList?.length == 0"
|
||||
description="请选择商品"
|
||||
></el-empty>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
<!-- 选择商品 -->
|
||||
</obj-modal>
|
||||
<commodity @getProduct="getProduct" ref="commodity"></commodity>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import commodity from "./commodity.vue";
|
||||
import { debounce, cloneDeep } from "lodash";
|
||||
export default {
|
||||
components: { commodity },
|
||||
props: {
|
||||
marketId: {
|
||||
type: String,
|
||||
default: "",
|
||||
},
|
||||
shopId: {
|
||||
type: String,
|
||||
default: "",
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isAdd: true,
|
||||
//表格属性
|
||||
modalConfig: {
|
||||
title: "库存预警设置",
|
||||
show: false,
|
||||
width: "1200px",
|
||||
fullscreen: true,
|
||||
},
|
||||
modalData: {},
|
||||
ruleForm: {
|
||||
productList: [],
|
||||
isRefundEarnestMoney: 1, //定金可退 1是 2否
|
||||
},
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return time.getTime() < Date.now();
|
||||
},
|
||||
},
|
||||
orderTime: [], //订单支付时间
|
||||
arrears: [], //尾款时间
|
||||
delivery: [], //发货时间
|
||||
tableData: [],
|
||||
rules: {
|
||||
startTime: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择支付时间",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
balancePaymentStartTime: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择尾款支付时间",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
estimatedStartDeliveryTime: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择预计发货时间",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
isRefundEarnestMoney: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择定金可退",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
presalePrice: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入预售价格",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
"modalConfig.show"(newVal) {
|
||||
if (newVal) {
|
||||
//关闭弹窗清空校验
|
||||
setTimeout(() => {
|
||||
this.$refs.ruleForm.resetFields();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
queryTableData(pageNo, pageSize) {},
|
||||
toggle(e) {
|
||||
if (this.modalConfig.show == false) {
|
||||
this.modalConfig.show = true;
|
||||
} else {
|
||||
this.modalConfig.show = false;
|
||||
}
|
||||
if (e) {
|
||||
this.init(cloneDeep(e));
|
||||
}
|
||||
return {
|
||||
add: () => {
|
||||
this.orderTime = [];
|
||||
this.arrears = [];
|
||||
this.delivery = [];
|
||||
this.ruleForm = {
|
||||
startTime: "",
|
||||
endTime: "",
|
||||
balancePaymentStartTime: "",
|
||||
balancePaymentEndTime: "",
|
||||
estimatedStartDeliveryTime: "",
|
||||
estimatedEndDeliveryTime: "",
|
||||
productList: [],
|
||||
isRefundEarnestMoney: 1, //定金可退 1是 2否
|
||||
};
|
||||
this.modalConfig.title = "新增预售";
|
||||
this.isAdd = true;
|
||||
},
|
||||
update: () => {
|
||||
this.modalConfig.title = "编辑预售";
|
||||
this.isAdd = false;
|
||||
},
|
||||
};
|
||||
},
|
||||
init(row) {
|
||||
console.log(row.startTime, row.endTime);
|
||||
this.orderTime = [row.startTime, row.endTime];
|
||||
this.arrears = [row.balancePaymentStartTime, row.balancePaymentEndTime];
|
||||
this.delivery = [
|
||||
row.estimatedStartDeliveryTime,
|
||||
row.estimatedEndDeliveryTime,
|
||||
];
|
||||
(this.ruleForm = {
|
||||
productId: row.id,
|
||||
advanceSellId: row.advanceSellId,
|
||||
startTime: row.startTime,
|
||||
name: row.name,
|
||||
endTime: row.endTime,
|
||||
balancePaymentStartTime: row.balancePaymentStartTime,
|
||||
balancePaymentEndTime: row.balancePaymentEndTime,
|
||||
estimatedStartDeliveryTime: row.estimatedStartDeliveryTime,
|
||||
estimatedEndDeliveryTime: row.estimatedEndDeliveryTime,
|
||||
isRefundEarnestMoney: row.isRefundEarnestMoney,
|
||||
productSpecificationList: row.productSpecificationList,
|
||||
}),
|
||||
console.log(this.orderTime, this.arrears, this.delivery);
|
||||
|
||||
// this.ruleForm = row;
|
||||
},
|
||||
//订单支付时间
|
||||
getOrderTime(e) {
|
||||
if (e) {
|
||||
console.log(e);
|
||||
this.ruleForm.startTime = e[0];
|
||||
this.ruleForm.endTime = e[1];
|
||||
} else {
|
||||
this.ruleForm.startTime = "";
|
||||
this.ruleForm.endTime = "";
|
||||
}
|
||||
},
|
||||
//尾款支付时间
|
||||
getArrearsTime(e) {
|
||||
if (e) {
|
||||
console.log(e);
|
||||
this.ruleForm.balancePaymentStartTime = e[0];
|
||||
this.ruleForm.balancePaymentEndTime = e[1];
|
||||
} else {
|
||||
this.ruleForm.balancePaymentStartTime = "";
|
||||
this.ruleForm.balancePaymentEndTime = "";
|
||||
}
|
||||
},
|
||||
//发货时间
|
||||
deliveryTime(e) {
|
||||
if (e) {
|
||||
console.log(e);
|
||||
this.ruleForm.estimatedStartDeliveryTime = e[0];
|
||||
this.ruleForm.estimatedEndDeliveryTime = e[1];
|
||||
} else {
|
||||
this.ruleForm.estimatedStartDeliveryTime = "";
|
||||
this.ruleForm.estimatedEndDeliveryTime = "";
|
||||
}
|
||||
},
|
||||
selectProduct() {
|
||||
console.log("选择商品", this.marketId, this.shopId);
|
||||
this.$nextTick(() => {
|
||||
this.$refs.commodity.toggle().add({
|
||||
marketId: this.marketId,
|
||||
shopId: this.shopId,
|
||||
});
|
||||
});
|
||||
},
|
||||
handleSelectionChange(e) {
|
||||
console.log(e);
|
||||
},
|
||||
getProduct(row) {
|
||||
this.ruleForm.productList = row.map((item) => {
|
||||
return {
|
||||
productId: item.id,
|
||||
name: item.name,
|
||||
productSpecificationList: item.productSpecificationList,
|
||||
};
|
||||
});
|
||||
console.log(this.ruleForm.productList, this.ruleForm.productList.length);
|
||||
|
||||
console.log("获取商品");
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalHandles() {
|
||||
return [
|
||||
{
|
||||
label: "取消",
|
||||
handle: () => {
|
||||
this.toggle();
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "确认",
|
||||
type: "primary",
|
||||
// submit: true,
|
||||
handle: () => {
|
||||
if (this.isAdd) {
|
||||
this.$refs.ruleForm.validate((valid) => {
|
||||
if (valid) {
|
||||
console.log(valid);
|
||||
this.$api.preSale
|
||||
.addPreSaleProducts(this.ruleForm)
|
||||
.then((res) => {
|
||||
this.$emit("queryList");
|
||||
this.toggle();
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this.$refs.ruleForm.validate((valid) => {
|
||||
if (valid) {
|
||||
console.log(valid);
|
||||
this.$api.preSale
|
||||
.updatePreSaleProducts(this.ruleForm)
|
||||
.then((res) => {
|
||||
this.$emit("queryList");
|
||||
this.toggle();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
asyncComputed: {},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
|
@ -0,0 +1,230 @@
|
|||
<template>
|
||||
<obj-modal
|
||||
ref="modal"
|
||||
labelWidth="150px"
|
||||
:modalConfig="modalConfig"
|
||||
:modalData="modalData"
|
||||
:modalHandles="modalHandles"
|
||||
>
|
||||
<template slot="dialog__content">
|
||||
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||
<el-form-item label="商品搜索">
|
||||
<el-input v-model="formList.name" placeholder="商品搜索"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="queryList">查询</el-button>
|
||||
<el-button type="primary" @click="Reset">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table
|
||||
border
|
||||
ref="multipleTable"
|
||||
:data="dataList"
|
||||
tooltip-effect="dark"
|
||||
style="width: 100%"
|
||||
@select="select"
|
||||
@select-all="selectAll"
|
||||
>
|
||||
<el-table-column type="selection" width="55"> </el-table-column>
|
||||
<el-table-column label="商品图" width="100">
|
||||
<template slot-scope="scope">
|
||||
<el-image
|
||||
:preview-src-list="[scope.row.productPhotoList[0].url]"
|
||||
:src="scope.row.productPhotoList[0].url"
|
||||
></el-image
|
||||
></template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="商品名称" />
|
||||
<el-table-column prop="name" label="商品售价">
|
||||
<template slot-scope="scope">
|
||||
<span>¥{{ getSalePrice(scope.row) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="address" label="折扣">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.discountActivity?.ruleObject.discount }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="saleNum" label="销量" />
|
||||
<el-table-column prop="stockNum" label="库存" />
|
||||
</el-table>
|
||||
<div class="pagination-container">
|
||||
<el-pagination
|
||||
:current-page="query.pageNumber"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:page-size="query.pageSize"
|
||||
:total="total"
|
||||
background
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</obj-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { debounce, cloneDeep } from "lodash";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
isAdd: true,
|
||||
//表格属性
|
||||
modalConfig: {
|
||||
title: "请点击选择商品 (提示:最多选择5个商品)",
|
||||
show: false,
|
||||
width: "1000px",
|
||||
},
|
||||
query: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
},
|
||||
total: 0,
|
||||
modalData: {},
|
||||
dataList: [], //表格数据
|
||||
selectList: [],
|
||||
formInline: {},
|
||||
formList: {
|
||||
name: "",
|
||||
},
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
queryList() {
|
||||
this.$api.mer_admin
|
||||
.getProductPage({
|
||||
p: {
|
||||
pageNumber: this.query.pageNumber,
|
||||
pageSize: this.query.pageSize,
|
||||
},
|
||||
...this.formInline,
|
||||
...this.formList,
|
||||
productFilterType: "SALE",
|
||||
merchantId: JSON.parse(sessionStorage.getItem("userInfo")).merchantId,
|
||||
productQuerySortParam: [],
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
this.dataList = res.data.data.data;
|
||||
this.total = Number(res.data.data.total);
|
||||
})
|
||||
.catch((err) => {
|
||||
this.dataList = [];
|
||||
});
|
||||
},
|
||||
toggle(e) {
|
||||
if (this.modalConfig.show == false) {
|
||||
this.modalConfig.show = true;
|
||||
} else {
|
||||
this.modalConfig.show = false;
|
||||
}
|
||||
if (e) {
|
||||
this.init(cloneDeep(e));
|
||||
}
|
||||
return {
|
||||
add: (row) => {
|
||||
console.log(row);
|
||||
this.formInline = row;
|
||||
this.isAdd = true;
|
||||
this.$nextTick(() => {
|
||||
this.queryList();
|
||||
});
|
||||
},
|
||||
update: () => {
|
||||
this.isAdd = false;
|
||||
},
|
||||
};
|
||||
},
|
||||
init(row) {},
|
||||
toggleSelection(rows) {
|
||||
if (rows) {
|
||||
rows.forEach((row) => {
|
||||
this.$refs.multipleTable.toggleRowSelection(row);
|
||||
});
|
||||
} else {
|
||||
this.$refs.multipleTable.clearSelection();
|
||||
}
|
||||
},
|
||||
select(selection, row) {
|
||||
if (selection.length > 5) {
|
||||
this.$message.error("最多选择5个商品");
|
||||
this.$refs.multipleTable.toggleRowSelection(row, false);
|
||||
} else {
|
||||
this.selectList = selection;
|
||||
}
|
||||
},
|
||||
selectAll(selection) {
|
||||
if (selection.length > 5) {
|
||||
this.$message.error("最多选择5个商品");
|
||||
selection.length = 5;
|
||||
this.selectList = selection;
|
||||
console.log(selection);
|
||||
} else {
|
||||
this.selectList = selection;
|
||||
}
|
||||
},
|
||||
getSalePrice(row) {
|
||||
if (row.minSalePrice == row.maxSalePrice) {
|
||||
return row.minSalePrice;
|
||||
} else {
|
||||
return `${row.minSalePrice}~${row.maxSalePrice}`;
|
||||
}
|
||||
},
|
||||
handleSizeChange(val) {
|
||||
this.query.pageSize = val;
|
||||
this.getList();
|
||||
},
|
||||
handleCurrentChange(val) {
|
||||
this.query.pageNumber = val;
|
||||
this.getList();
|
||||
},
|
||||
Reset() {
|
||||
this.formList = {};
|
||||
this.queryList();
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalHandles() {
|
||||
return [
|
||||
{
|
||||
label: "取消",
|
||||
handle: () => {
|
||||
this.toggle();
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "确认",
|
||||
type: "primary",
|
||||
handle: () => {
|
||||
this.$emit("getProduct", this.selectList);
|
||||
this.toggle();
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
tableEvent() {
|
||||
return {
|
||||
"checkbox-all": ({ records, reserves }) => {
|
||||
console.log(records, reserves);
|
||||
this.selectList = [...records, ...reserves];
|
||||
},
|
||||
"checkbox-change": ({ records, reserves }) => {
|
||||
console.log(records, reserves);
|
||||
if (records.length > 5) {
|
||||
this.$message.error("最多选择5个商品");
|
||||
return;
|
||||
}
|
||||
this.selectList = [...records, ...reserves];
|
||||
},
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
::v-deep .selectAllbtnDis .cell .el-checkbox__inner {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
|
@ -4,7 +4,7 @@
|
|||
此页面数据在每日0点提交并生效;请勿频繁操作,以免影响用户体验。
|
||||
</div>
|
||||
<div class="tipsLevel">积分/成长值任务(9)</div>
|
||||
<div class="tipsLevel" v-if="storeList.length > 0">
|
||||
<div class="tipsLevel" v-if="storeList.length > 1">
|
||||
<el-select v-model="formInline.shopId" placeholder="请选择">
|
||||
<el-option
|
||||
v-for="item in storeList"
|
||||
|
@ -19,49 +19,80 @@
|
|||
>
|
||||
</div>
|
||||
<el-table :data="list" :border="true" style="width: 100%">
|
||||
<el-table-column width="100" align="center" label="类型" prop="unitType">
|
||||
<template v-slot="scope">
|
||||
<span>{{ getUnitType(scope.row.unitType) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="任务名称" prop="taskName" />
|
||||
<el-table-column align="center" label="任务描述" prop="taskConfigDetail" />
|
||||
<el-table-column
|
||||
align="center"
|
||||
label="任务描述"
|
||||
prop="taskConfigDetail"
|
||||
/>
|
||||
<el-table-column
|
||||
width="100"
|
||||
align="center"
|
||||
label="排序"
|
||||
prop="taskSort"
|
||||
/>
|
||||
<el-table-column
|
||||
width="140"
|
||||
align="center"
|
||||
label="状态"
|
||||
prop="packageEffectiveTimeUnit"
|
||||
prop="taskEnable"
|
||||
>
|
||||
<template v-slot="scope">
|
||||
<span>{{
|
||||
scope.row.packageEffectiveTimeUnit == 1 ? "年" : "月"
|
||||
}}</span>
|
||||
<el-switch
|
||||
@change="changeState(scope.row)"
|
||||
v-model="scope.row.taskEnable"
|
||||
>
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="操作" fixed="right" width="240">
|
||||
<template v-slot="scope">
|
||||
<el-button @click="add(scope.row)" type="primary">编辑</el-button>
|
||||
<el-button @click="add(scope.row)" type="primary">转移</el-button>
|
||||
<el-popconfirm
|
||||
confirm-button-text="确定"
|
||||
cancel-button-text="取消"
|
||||
icon-color="#626AEF"
|
||||
title="确定删除吗?"
|
||||
@confirm="confirmEvent(scope.row)"
|
||||
@cancel="cancelEvent"
|
||||
<el-button
|
||||
v-show="scope.$index != 0"
|
||||
size="mini"
|
||||
@click="addTop(scope.row)"
|
||||
type="primary"
|
||||
>置顶</el-button
|
||||
>
|
||||
<el-button size="mini" @click="addConfig(scope.row)" type="primary"
|
||||
>配置积分</el-button
|
||||
>
|
||||
<template #reference>
|
||||
<el-button type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-popconfirm>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 配置积分 -->
|
||||
<addOrUpdate @getList="getList" ref="addOrUpdate"></addOrUpdate>
|
||||
<!-- 购买商品积分 -->
|
||||
<productPoints ref="productPoints" @getList="getList"></productPoints>
|
||||
<!-- 分享积分 -->
|
||||
<sharePoints ref="sharePoints" @getList="getList"></sharePoints>
|
||||
<!-- 评价 -->
|
||||
<evaluate ref="evaluate" @getList="getList"></evaluate>
|
||||
<!-- 浏览 -->
|
||||
<browse ref="browse" @getList="getList"></browse>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import browse from "./popup/browse";
|
||||
import evaluate from "./popup/evaluate.vue";
|
||||
import sharePoints from "./popup/share-points.vue";
|
||||
import productPoints from "./popup/product-points.vue";
|
||||
import addOrUpdate from "./popup/add-or-update.vue";
|
||||
import { mapState } from "vuex";
|
||||
export default {
|
||||
components: {
|
||||
addOrUpdate,
|
||||
productPoints,
|
||||
sharePoints,
|
||||
evaluate,
|
||||
browse,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
list: [],
|
||||
|
@ -100,6 +131,96 @@ export default {
|
|||
add() {},
|
||||
confirmEvent() {},
|
||||
cancelEvent() {},
|
||||
getUnitType(type) {
|
||||
if (type == 1) {
|
||||
return "市场";
|
||||
} else if (type == 2) {
|
||||
return "摊主";
|
||||
} else if (type == 3) {
|
||||
return "云店";
|
||||
}
|
||||
},
|
||||
changeState(e) {
|
||||
if (e.taskEnable) {
|
||||
this.$confirm("是否要开启此任务, 是否继续?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(() => {
|
||||
this.$api.marketing
|
||||
.reverseEnable({
|
||||
id: e.id,
|
||||
})
|
||||
.then((res) => {
|
||||
this.getList();
|
||||
})
|
||||
.catch(() => {
|
||||
this.getList();
|
||||
});
|
||||
})
|
||||
.catch(() => {
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
this.$confirm("是否要关闭此任务, 是否继续?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(() => {
|
||||
this.$api.marketing
|
||||
.reverseEnable({
|
||||
id: e.id,
|
||||
})
|
||||
.then((res) => {
|
||||
this.getList();
|
||||
})
|
||||
.catch((err) => {
|
||||
this.getList();
|
||||
});
|
||||
})
|
||||
.catch(() => {
|
||||
this.getList();
|
||||
});
|
||||
}
|
||||
},
|
||||
addTop(e) {
|
||||
this.$confirm("是否要置顶, 是否继续?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(() => {
|
||||
this.$api.marketing
|
||||
.integralTop({
|
||||
id: e.id,
|
||||
})
|
||||
.then((res) => {
|
||||
this.getList();
|
||||
})
|
||||
.catch(() => {
|
||||
this.getList();
|
||||
});
|
||||
})
|
||||
.catch(() => {
|
||||
this.getList();
|
||||
});
|
||||
},
|
||||
addConfig(e) {
|
||||
console.log(e);
|
||||
if (e.taskName === "每日签到") {
|
||||
this.$refs.addOrUpdate.toggle(e).add();
|
||||
} else if (e.taskName === "购买商品") {
|
||||
this.$refs.productPoints.toggle(e).add();
|
||||
} else if (e.taskName === "分享商品") {
|
||||
this.$refs.sharePoints.toggle(e).add();
|
||||
} else if (e.taskName === "评价商品") {
|
||||
this.$refs.evaluate.toggle(e).add();
|
||||
} else if (e.taskName === "浏览商品") {
|
||||
this.$refs.browse.toggle(e).add();
|
||||
}
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
...mapState("userData", [
|
||||
|
|
|
@ -0,0 +1,255 @@
|
|||
<template>
|
||||
<div>
|
||||
<obj-modal
|
||||
ref="modal"
|
||||
labelWidth="150px"
|
||||
:modalCols="modalCols"
|
||||
:modalConfig="modalConfig"
|
||||
:modalData="modalData"
|
||||
:modalHandles="modalHandles"
|
||||
>
|
||||
<template slot="dialog__after">
|
||||
<el-form
|
||||
label-width="150px"
|
||||
:rules="rules"
|
||||
:model="modalData"
|
||||
ref="modalForm"
|
||||
>
|
||||
<el-form-item label="连续签到1天" prop="oneDay">
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.oneDay"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="连续签到2天" prop="twoDay">
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.twoDay"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="连续签到3天" prop="threeDay">
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.threeDay"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="连续签到4天" prop="fourDay">
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.fourDay"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="连续签到5天" prop="fiveDay">
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.fiveDay"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="连续签到6天" prop="sixDay">
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.sixDay"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="连续签到7天" prop="sevenDay">
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.sevenDay"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
</obj-modal>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { debounce, cloneDeep } from "lodash";
|
||||
import { Divider } from "element-ui";
|
||||
export default {
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
isAdd: true,
|
||||
//表格属性
|
||||
modalConfig: {
|
||||
title: "",
|
||||
show: false,
|
||||
width: "700px",
|
||||
},
|
||||
modalData: {},
|
||||
settingId: "",
|
||||
form: {},
|
||||
rules: {
|
||||
oneDay: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入签到积分",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
twoDay: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入签到积分",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
threeDay: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入签到积分",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
fourDay: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入签到积分",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
fiveDay: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入签到积分",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
sixDay: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入签到积分",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
sevenDay: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入签到积分",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
"modalConfig.show"(newVal) {
|
||||
if (!newVal) {
|
||||
//关闭弹窗清空校验
|
||||
setTimeout(() => {
|
||||
this.$refs.modalForm.resetFields();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
queryTableData(pageNo, pageSize) {},
|
||||
toggle(e) {
|
||||
if (this.modalConfig.show == false) {
|
||||
this.modalConfig.show = true;
|
||||
} else {
|
||||
this.modalConfig.show = false;
|
||||
}
|
||||
if (e) {
|
||||
this.init(cloneDeep(e));
|
||||
}
|
||||
return {
|
||||
add: (row) => {
|
||||
this.modalData = {
|
||||
oneDay: 0,
|
||||
twoDay: 0,
|
||||
threeDay: 0,
|
||||
fourDay: 0,
|
||||
fiveDay: 0,
|
||||
sixDay: 0,
|
||||
sevenDay: 0,
|
||||
};
|
||||
this.modalConfig.title = "每日积分设置";
|
||||
this.isAdd = true;
|
||||
},
|
||||
update: () => {
|
||||
this.modalConfig.title = "修改成长值";
|
||||
this.isAdd = false;
|
||||
},
|
||||
};
|
||||
},
|
||||
init(row) {
|
||||
this.settingId = row.id;
|
||||
console.log(row);
|
||||
// this.modalData = row;
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalCols() {
|
||||
return [];
|
||||
},
|
||||
modalHandles() {
|
||||
return [
|
||||
{
|
||||
label: "取消",
|
||||
handle: () => {
|
||||
this.toggle();
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "确认",
|
||||
type: "primary",
|
||||
handle: () => {
|
||||
console.log(this.modalData);
|
||||
let data = {
|
||||
id: this.settingId,
|
||||
dailySignSettings: this.modalData,
|
||||
};
|
||||
this.$refs.modalForm.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$api.marketing.settingTaskDetail(data).then((res) => {
|
||||
console.log(res);
|
||||
this.toggle();
|
||||
this.$emit("getList")
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
asyncComputed: {},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
|
@ -0,0 +1,172 @@
|
|||
<template>
|
||||
<div>
|
||||
<obj-modal
|
||||
ref="modal"
|
||||
labelWidth="150px"
|
||||
:modalCols="modalCols"
|
||||
:modalConfig="modalConfig"
|
||||
:modalData="modalData"
|
||||
:modalHandles="modalHandles"
|
||||
>
|
||||
<template slot="dialog__after">
|
||||
<el-form
|
||||
label-width="150px"
|
||||
:rules="rules"
|
||||
:model="modalData"
|
||||
ref="modalForm"
|
||||
>
|
||||
<el-form-item
|
||||
label="每浏览1个商品达15秒可获积分/成长值:"
|
||||
prop="oneGoodsViewPoints"
|
||||
>
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.oneGoodsViewPoints"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item
|
||||
label="该任务每日最高可获积分/成长值:"
|
||||
prop="dailyPointsLimit"
|
||||
>
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.dailyPointsLimit"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
<div>
|
||||
<el-checkbox
|
||||
v-model="modalData.enableDailyPointsLimit"
|
||||
></el-checkbox>
|
||||
<span style="margin-left: 10px">不勾选则无上限</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
</obj-modal>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { debounce, cloneDeep } from "lodash";
|
||||
import { Divider } from "element-ui";
|
||||
export default {
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
isAdd: true,
|
||||
//表格属性
|
||||
modalConfig: {
|
||||
title: "",
|
||||
show: false,
|
||||
width: "700px",
|
||||
},
|
||||
modalData: {},
|
||||
settingId: "",
|
||||
form: {},
|
||||
rules: {
|
||||
oneGoodsViewPoints: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入浏览商品积分",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
dailyPointsLimit: [
|
||||
{
|
||||
required: true,
|
||||
message: "该任务每日最高可获积分/成长值",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
"modalConfig.show"(newVal) {
|
||||
if (!newVal) {
|
||||
//关闭弹窗清空校验
|
||||
setTimeout(() => {
|
||||
this.$refs.modalForm.resetFields();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
queryTableData(pageNo, pageSize) {},
|
||||
toggle(e) {
|
||||
if (this.modalConfig.show == false) {
|
||||
this.modalConfig.show = true;
|
||||
} else {
|
||||
this.modalConfig.show = false;
|
||||
}
|
||||
if (e) {
|
||||
this.init(cloneDeep(e));
|
||||
}
|
||||
return {
|
||||
add: (row) => {
|
||||
this.modalData = {
|
||||
oneGoodsViewPoints: 0,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 0,
|
||||
};
|
||||
this.modalConfig.title = "浏览商品积分/成长值配置";
|
||||
this.isAdd = true;
|
||||
},
|
||||
update: () => {
|
||||
this.modalConfig.title = "修改成长值";
|
||||
this.isAdd = false;
|
||||
},
|
||||
};
|
||||
},
|
||||
init(row) {
|
||||
this.settingId = row.id;
|
||||
console.log(row);
|
||||
// this.modalData = row;
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalCols() {
|
||||
return [];
|
||||
},
|
||||
modalHandles() {
|
||||
return [
|
||||
{
|
||||
label: "取消",
|
||||
handle: () => {
|
||||
this.toggle();
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "确认",
|
||||
type: "primary",
|
||||
handle: () => {
|
||||
console.log(this.modalData);
|
||||
let data = {
|
||||
id: this.settingId,
|
||||
viewGoodsSettings: this.modalData,
|
||||
};
|
||||
this.$refs.modalForm.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$api.marketing.settingTaskDetail(data).then((res) => {
|
||||
this.toggle();
|
||||
this.$emit("getList");
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
asyncComputed: {},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
|
@ -0,0 +1,192 @@
|
|||
<template>
|
||||
<div>
|
||||
<obj-modal
|
||||
ref="modal"
|
||||
labelWidth="150px"
|
||||
:modalCols="modalCols"
|
||||
:modalConfig="modalConfig"
|
||||
:modalData="modalData"
|
||||
:modalHandles="modalHandles"
|
||||
>
|
||||
<template slot="dialog__after">
|
||||
<el-form
|
||||
label-width="150px"
|
||||
:rules="rules"
|
||||
:model="modalData"
|
||||
ref="modalForm"
|
||||
>
|
||||
<el-form-item
|
||||
label="文字评价1个商品可获积分/成长值"
|
||||
prop="textCommentPoints"
|
||||
>
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.textCommentPoints"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="视频图文评价1个商品可获积分/成长值"
|
||||
prop="imageTextCommentPoints"
|
||||
>
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.imageTextCommentPoints"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="该任务每日最高可获积分/成长值:"
|
||||
prop="dailyPointsLimit"
|
||||
>
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.dailyPointsLimit"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
<div>
|
||||
<el-checkbox
|
||||
v-model="modalData.enableDailyPointsLimit"
|
||||
></el-checkbox>
|
||||
<span style="margin-left: 10px">不勾选则无上限</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
</obj-modal>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { debounce, cloneDeep } from "lodash";
|
||||
import { Divider } from "element-ui";
|
||||
export default {
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
isAdd: true,
|
||||
//表格属性
|
||||
modalConfig: {
|
||||
title: "",
|
||||
show: false,
|
||||
width: "700px",
|
||||
},
|
||||
modalData: {},
|
||||
settingId: "",
|
||||
form: {},
|
||||
rules: {
|
||||
textCommentPoints: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入文字评价积分",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
imageTextCommentPoints: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入视频图文评价积分",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
dailyPointsLimit: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入签到积分",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
"modalConfig.show"(newVal) {
|
||||
if (!newVal) {
|
||||
//关闭弹窗清空校验
|
||||
setTimeout(() => {
|
||||
this.$refs.modalForm.resetFields();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
queryTableData(pageNo, pageSize) {},
|
||||
toggle(e) {
|
||||
if (this.modalConfig.show == false) {
|
||||
this.modalConfig.show = true;
|
||||
} else {
|
||||
this.modalConfig.show = false;
|
||||
}
|
||||
if (e) {
|
||||
this.init(cloneDeep(e));
|
||||
}
|
||||
return {
|
||||
add: (row) => {
|
||||
this.modalData = {
|
||||
textCommentPoints: 0,
|
||||
imageTextCommentPoints: 0,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 0,
|
||||
};
|
||||
this.modalConfig.title = "评价商品积分/成长值配置";
|
||||
this.isAdd = true;
|
||||
},
|
||||
update: () => {
|
||||
this.modalConfig.title = "修改成长值";
|
||||
this.isAdd = false;
|
||||
},
|
||||
};
|
||||
},
|
||||
init(row) {
|
||||
this.settingId = row.id;
|
||||
console.log(row);
|
||||
// this.modalData = row;
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalCols() {
|
||||
return [];
|
||||
},
|
||||
modalHandles() {
|
||||
return [
|
||||
{
|
||||
label: "取消",
|
||||
handle: () => {
|
||||
this.toggle();
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "确认",
|
||||
type: "primary",
|
||||
handle: () => {
|
||||
console.log(this.modalData);
|
||||
let data = {
|
||||
id: this.settingId,
|
||||
commentGoodsSettings: this.modalData,
|
||||
};
|
||||
this.$refs.modalForm.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$api.marketing.settingTaskDetail(data).then((res) => {
|
||||
this.toggle();
|
||||
this.$emit("getList");
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
asyncComputed: {},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
|
@ -0,0 +1,171 @@
|
|||
<template>
|
||||
<div>
|
||||
<obj-modal
|
||||
ref="modal"
|
||||
labelWidth="150px"
|
||||
:modalCols="modalCols"
|
||||
:modalConfig="modalConfig"
|
||||
:modalData="modalData"
|
||||
:modalHandles="modalHandles"
|
||||
>
|
||||
<template slot="dialog__after">
|
||||
<el-form
|
||||
label-width="150px"
|
||||
:rules="rules"
|
||||
:model="modalData"
|
||||
ref="modalForm"
|
||||
>
|
||||
<el-form-item label="购买商品实付" prop="pointsRatioAmount">
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.pointsRatioAmount"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
<span style="margin-left: 10px">元,可获得1积分/成长值</span>
|
||||
<div>(订单完成时,根据实际实付款发放)</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item
|
||||
label="该任务每日最高可获积分/成长值:"
|
||||
prop="dailyPointsLimit"
|
||||
>
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.dailyPointsLimit"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
<div>
|
||||
<el-checkbox
|
||||
v-model="modalData.enableDailyPointsLimit"
|
||||
></el-checkbox>
|
||||
<span style="margin-left: 10px">不勾选则无上限</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
</obj-modal>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { debounce, cloneDeep } from "lodash";
|
||||
import { Divider } from "element-ui";
|
||||
export default {
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
isAdd: true,
|
||||
//表格属性
|
||||
modalConfig: {
|
||||
title: "",
|
||||
show: false,
|
||||
width: "700px",
|
||||
},
|
||||
modalData: {},
|
||||
settingId: "",
|
||||
form: {},
|
||||
rules: {
|
||||
pointsRatioAmount: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入签到积分",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
dailyPointsLimit: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入签到积分",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
"modalConfig.show"(newVal) {
|
||||
if (!newVal) {
|
||||
//关闭弹窗清空校验
|
||||
setTimeout(() => {
|
||||
this.$refs.modalForm.resetFields();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
queryTableData(pageNo, pageSize) {},
|
||||
toggle(e) {
|
||||
if (this.modalConfig.show == false) {
|
||||
this.modalConfig.show = true;
|
||||
} else {
|
||||
this.modalConfig.show = false;
|
||||
}
|
||||
if (e) {
|
||||
this.init(cloneDeep(e));
|
||||
}
|
||||
return {
|
||||
add: (row) => {
|
||||
this.modalData = {
|
||||
pointsRatioAmount: 0,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 0,
|
||||
};
|
||||
this.modalConfig.title = "购买商品积分/成长值配置";
|
||||
this.isAdd = true;
|
||||
},
|
||||
update: () => {
|
||||
this.modalConfig.title = "修改成长值";
|
||||
this.isAdd = false;
|
||||
},
|
||||
};
|
||||
},
|
||||
init(row) {
|
||||
this.settingId = row.id;
|
||||
console.log(row);
|
||||
// this.modalData = row;
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalCols() {
|
||||
return [];
|
||||
},
|
||||
modalHandles() {
|
||||
return [
|
||||
{
|
||||
label: "取消",
|
||||
handle: () => {
|
||||
this.toggle();
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "确认",
|
||||
type: "primary",
|
||||
handle: () => {
|
||||
console.log(this.modalData);
|
||||
let data = {
|
||||
id: this.settingId,
|
||||
buyGoodsSettings: this.modalData,
|
||||
};
|
||||
this.$refs.modalForm.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$api.marketing.settingTaskDetail(data).then((res) => {
|
||||
this.toggle();
|
||||
this.$emit("getList");
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
asyncComputed: {},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
|
@ -0,0 +1,175 @@
|
|||
<template>
|
||||
<div>
|
||||
<obj-modal
|
||||
ref="modal"
|
||||
labelWidth="150px"
|
||||
:modalCols="modalCols"
|
||||
:modalConfig="modalConfig"
|
||||
:modalData="modalData"
|
||||
:modalHandles="modalHandles"
|
||||
>
|
||||
<template slot="dialog__after">
|
||||
<el-form
|
||||
label-width="150px"
|
||||
:rules="rules"
|
||||
:model="modalData"
|
||||
ref="modalForm"
|
||||
>
|
||||
<el-form-item
|
||||
label="每分享1个商品1次可获得积分/成长值:"
|
||||
prop="oneSharePoints"
|
||||
>
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.oneSharePoints"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
<div style="color: red">
|
||||
(此任务为评价商品,1订单可能包含多商品)
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item
|
||||
label="该任务每日最高可获积分/成长值:"
|
||||
prop="dailyPointsLimit"
|
||||
>
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.dailyPointsLimit"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
<div>
|
||||
<el-checkbox
|
||||
v-model="modalData.enableDailyPointsLimit"
|
||||
></el-checkbox>
|
||||
<span style="margin-left: 10px">不勾选则无上限</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
</obj-modal>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { debounce, cloneDeep } from "lodash";
|
||||
import { Divider } from "element-ui";
|
||||
export default {
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
isAdd: true,
|
||||
//表格属性
|
||||
modalConfig: {
|
||||
title: "",
|
||||
show: false,
|
||||
width: "700px",
|
||||
},
|
||||
modalData: {},
|
||||
settingId: "",
|
||||
form: {},
|
||||
rules: {
|
||||
oneSharePoints: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入分享签到积分",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
dailyPointsLimit: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入签到积分",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
"modalConfig.show"(newVal) {
|
||||
if (!newVal) {
|
||||
//关闭弹窗清空校验
|
||||
setTimeout(() => {
|
||||
this.$refs.modalForm.resetFields();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
queryTableData(pageNo, pageSize) {},
|
||||
toggle(e) {
|
||||
if (this.modalConfig.show == false) {
|
||||
this.modalConfig.show = true;
|
||||
} else {
|
||||
this.modalConfig.show = false;
|
||||
}
|
||||
if (e) {
|
||||
this.init(cloneDeep(e));
|
||||
}
|
||||
return {
|
||||
add: (row) => {
|
||||
this.modalData = {
|
||||
oneSharePoints: 0,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 0,
|
||||
};
|
||||
this.modalConfig.title = "分享商品积分/成长值配置";
|
||||
this.isAdd = true;
|
||||
},
|
||||
update: () => {
|
||||
this.modalConfig.title = "修改成长值";
|
||||
this.isAdd = false;
|
||||
},
|
||||
};
|
||||
},
|
||||
init(row) {
|
||||
this.settingId = row.id;
|
||||
console.log(row);
|
||||
// this.modalData = row;
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalCols() {
|
||||
return [];
|
||||
},
|
||||
modalHandles() {
|
||||
return [
|
||||
{
|
||||
label: "取消",
|
||||
handle: () => {
|
||||
this.toggle();
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "确认",
|
||||
type: "primary",
|
||||
handle: () => {
|
||||
console.log(this.modalData);
|
||||
let data = {
|
||||
id: this.settingId,
|
||||
shareGoodsSettings: this.modalData,
|
||||
};
|
||||
this.$refs.modalForm.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$api.marketing.settingTaskDetail(data).then((res) => {
|
||||
this.toggle();
|
||||
this.$emit("getList");
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
asyncComputed: {},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
|
@ -11,100 +11,8 @@
|
|||
:enableAutoQuery="false"
|
||||
>
|
||||
<template slot="tableTop">
|
||||
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||
<el-form-item label="用户ID">
|
||||
<el-input
|
||||
placeholder="请输入用户ID"
|
||||
v-model="formInline.name"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户昵称">
|
||||
<el-input
|
||||
placeholder="请输入用户昵称"
|
||||
v-model="formInline.name"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="会员等级">
|
||||
<el-select
|
||||
@change="getData"
|
||||
v-model="formInline.marketId"
|
||||
placeholder="请选择会员等级"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in marketList"
|
||||
:key="item.marketId"
|
||||
:label="item.marketName"
|
||||
:value="item.marketId"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号">
|
||||
<el-input
|
||||
placeholder="请输入手机号"
|
||||
v-model="formInline.name"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="会员状态">
|
||||
<el-select
|
||||
@change="getData"
|
||||
v-model="formInline.marketId"
|
||||
placeholder="请选择会员状态"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in marketList"
|
||||
:key="item.marketId"
|
||||
:label="item.marketName"
|
||||
:value="item.marketId"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="注册时间">
|
||||
<el-date-picker
|
||||
v-model="value1"
|
||||
type="datetimerange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="生日">
|
||||
<el-date-picker
|
||||
v-model="value1"
|
||||
type="datetimerange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="会员性别">
|
||||
<el-select
|
||||
@change="getData"
|
||||
v-model="formInline.marketId"
|
||||
placeholder="全部"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in marketList"
|
||||
:key="item.marketId"
|
||||
:label="item.marketName"
|
||||
:value="item.marketId"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item v-if="marketList.length > 0" label="菜市场">
|
||||
<el-select
|
||||
@change="getData"
|
||||
v-model="formInline.marketId"
|
||||
placeholder="请选择菜市场"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in marketList"
|
||||
:key="item.marketId"
|
||||
:label="item.marketName"
|
||||
:value="item.marketId"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="marketList.length > 0" label="店铺">
|
||||
<el-form :inline="true" :model="form" class="demo-form-inline">
|
||||
<el-form-item v-if="storeList.length > 1" label="店铺">
|
||||
<el-select v-model="formInline.shopId" placeholder="请选择店铺">
|
||||
<el-option
|
||||
v-for="item in storeList"
|
||||
|
@ -113,34 +21,89 @@
|
|||
:value="item.shopId"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户ID">
|
||||
<el-input
|
||||
placeholder="请输入用户ID"
|
||||
v-model="form.userId"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户昵称">
|
||||
<el-input
|
||||
placeholder="请输入用户昵称"
|
||||
v-model="form.username"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="会员等级id">
|
||||
<el-input
|
||||
placeholder="请输入会员等级id"
|
||||
v-model="form.levelId"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号">
|
||||
<el-input
|
||||
placeholder="请输入手机号"
|
||||
v-model="form.mobile"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="会员状态">
|
||||
<el-select v-model="form.isMemberUser" placeholder="请选择会员状态">
|
||||
<el-option
|
||||
v-for="item in [
|
||||
{ label: '是', value: 1 },
|
||||
{ label: '否', value: 0 },
|
||||
]"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="注册时间">
|
||||
<el-date-picker
|
||||
@change="changeTime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
v-model="value1"
|
||||
type="datetimerange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="生日">
|
||||
<el-date-picker
|
||||
v-model="value1"
|
||||
type="datetimerange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item> -->
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="$refs.oTable.reload()"
|
||||
>查询</el-button
|
||||
>
|
||||
<el-button type="primary" @click="$refs.oTable.reload()"
|
||||
>重置</el-button
|
||||
>
|
||||
<el-button type="primary" @click="Reset">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
</obj-table-plus>
|
||||
<!-- 添加或编辑 -->
|
||||
<!-- <add-or-update
|
||||
<!-- 修改积分或成长值 -->
|
||||
<modifyPoints
|
||||
@queryList="$refs.oTable.reload()"
|
||||
ref="addOrUpdate"
|
||||
></add-or-update> -->
|
||||
ref="modifyPoints"
|
||||
></modifyPoints>
|
||||
<!-- 查看详情 -->
|
||||
<!-- <viewDetails ref="viewDetails"></viewDetails> -->
|
||||
<viewDetails ref="viewDetails"></viewDetails>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// import AddOrUpdate from "./popup/add-or-update.vue";
|
||||
// import viewDetails from "./popup/view-details.vue";
|
||||
import modifyPoints from "./popup/modify-points.vue";
|
||||
import viewDetails from "./popup/view-details.vue";
|
||||
import { mapState } from "vuex";
|
||||
export default {
|
||||
// components: { AddOrUpdate },
|
||||
components: { viewDetails, modifyPoints },
|
||||
data() {
|
||||
return {
|
||||
dataList: [],
|
||||
|
@ -149,6 +112,7 @@ export default {
|
|||
shopId: "",
|
||||
unitType: "",
|
||||
},
|
||||
form: {},
|
||||
tableProp: {
|
||||
"auto-resize": true,
|
||||
border: true,
|
||||
|
@ -165,30 +129,31 @@ export default {
|
|||
this.formInline = {
|
||||
unitType: JSON.parse(sessionStorage.getItem("userInfo")).unitType,
|
||||
marketId: this.marketId,
|
||||
shopId: "",
|
||||
shopId: this.shopId,
|
||||
};
|
||||
this.$nextTick(() => {
|
||||
this.$refs.oTable.reload();
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
getData() {
|
||||
this.$api.mer_admin
|
||||
.storeList({ marketId: this.formInline.marketId })
|
||||
.then((res) => {
|
||||
this.storeList = res.data.data;
|
||||
// this.formInline.shopId = res.data.data[0].shopId;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.oTable.reload();
|
||||
});
|
||||
});
|
||||
},
|
||||
// getData() {
|
||||
// this.$api.mer_admin
|
||||
// .storeList({ marketId: this.formInline.marketId })
|
||||
// .then((res) => {
|
||||
// this.storeList = res.data.data;
|
||||
// this.formInline.shopId = res.data.data[0].shopId;
|
||||
// this.$nextTick(() => {
|
||||
// this.$refs.oTable.reload();
|
||||
// });
|
||||
// });
|
||||
// },
|
||||
queryList(pageNo, pageSize) {
|
||||
this.$api.marketing
|
||||
.marketingUserPage({
|
||||
pageNumber: pageNo,
|
||||
pageSize: pageSize,
|
||||
...this.formInline,
|
||||
...this.form,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
|
@ -201,6 +166,21 @@ export default {
|
|||
this.$refs.oTable.complete(false);
|
||||
});
|
||||
},
|
||||
Reset() {
|
||||
this.form = {};
|
||||
this.$nextTick(() => {
|
||||
this.$refs.oTable.reload();
|
||||
});
|
||||
},
|
||||
changeTime(val) {
|
||||
if (val) {
|
||||
this.form.startRegistrationTime = val[0];
|
||||
this.form.endRegistrationTime = val[1];
|
||||
} else {
|
||||
this.form.startRegistrationTime = "";
|
||||
this.form.endRegistrationTime = "";
|
||||
}
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
tableCols() {
|
||||
|
@ -210,81 +190,134 @@ export default {
|
|||
{
|
||||
title: "用戶ID",
|
||||
align: "center",
|
||||
field: "name",
|
||||
field: "userId",
|
||||
},
|
||||
{
|
||||
title: "用戶头像",
|
||||
align: "center",
|
||||
field: "publisher",
|
||||
field: "headUrl",
|
||||
type: "jsx",
|
||||
render: ({ row }) => {
|
||||
if (row.publisher === "MERCHANT") {
|
||||
return <span>店铺</span>;
|
||||
} else if (row.publisher == "PLATFORM") {
|
||||
return <span>平台</span>;
|
||||
}
|
||||
return (
|
||||
<el-image
|
||||
style="width: 60px; height: 60px"
|
||||
src={row.headUrl}
|
||||
preview-src-list={[row.headUrl]}
|
||||
></el-image>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "用戶昵称",
|
||||
align: "center",
|
||||
field: "name",
|
||||
field: "username",
|
||||
},
|
||||
{
|
||||
title: "手机号",
|
||||
align: "center",
|
||||
field: "name",
|
||||
field: "mobile",
|
||||
},
|
||||
// {
|
||||
// title: "进行中订单数",
|
||||
// align: "center",
|
||||
// field: "name",
|
||||
// },
|
||||
// {
|
||||
// title: "完成订单数",
|
||||
// align: "center",
|
||||
// field: "name",
|
||||
// },
|
||||
// {
|
||||
// title: "消费金额(元)",
|
||||
// align: "center",
|
||||
// field: "name",
|
||||
// },
|
||||
{
|
||||
title: "会员等级id",
|
||||
align: "center",
|
||||
field: "levelId",
|
||||
},
|
||||
{
|
||||
title: "进行中订单数",
|
||||
title: "会员等级名称",
|
||||
align: "center",
|
||||
field: "name",
|
||||
},
|
||||
{
|
||||
title: "完成订单数",
|
||||
align: "center",
|
||||
field: "name",
|
||||
},
|
||||
{
|
||||
title: "消费金额(元)",
|
||||
align: "center",
|
||||
field: "name",
|
||||
},
|
||||
{
|
||||
title: "会员等级",
|
||||
align: "center",
|
||||
field: "money",
|
||||
field: "levelName",
|
||||
},
|
||||
{
|
||||
title: "生日",
|
||||
align: "center",
|
||||
field: "discount",
|
||||
field: "birthday",
|
||||
},
|
||||
{
|
||||
title: "注册时间",
|
||||
align: "center",
|
||||
field: "minPrice",
|
||||
},
|
||||
{
|
||||
title: "限量",
|
||||
align: "center",
|
||||
field: "limitedNum",
|
||||
field: "registrationTime",
|
||||
},
|
||||
// {
|
||||
// title: "限量",
|
||||
// align: "center",
|
||||
// field: "limitedNum",
|
||||
// },
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
type: "jsx",
|
||||
align: "center",
|
||||
width: "140px",
|
||||
render: (row) => {
|
||||
let edit = () => {
|
||||
// this.$refs.viewDetails.toggle(row).update();
|
||||
width: "280px",
|
||||
render: ({ row }) => {
|
||||
let viewDetails = () => {
|
||||
this.$api.marketing
|
||||
.memberUnitUserDetail({
|
||||
...this.formInline,
|
||||
userId: row.userId,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
this.$refs.viewDetails.toggle(res.data.data).add();
|
||||
});
|
||||
};
|
||||
let points = () => {
|
||||
this.$api.marketing
|
||||
.memberUnitUserDetail({
|
||||
...this.formInline,
|
||||
userId: row.userId,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
this.$refs.modifyPoints.toggle(res.data.data).add();
|
||||
});
|
||||
};
|
||||
let growthValue = () => {
|
||||
this.$api.marketing
|
||||
.memberUnitUserDetail({
|
||||
...this.formInline,
|
||||
userId: row.userId,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
this.$refs.modifyPoints.toggle(res.data.data).update();
|
||||
});
|
||||
};
|
||||
return (
|
||||
<div>
|
||||
<el-button size="mini" type="primary" onClick={edit}>
|
||||
<el-button size="mini" type="primary" onClick={viewDetails}>
|
||||
详情
|
||||
</el-button>
|
||||
<el-button
|
||||
v-show={!row.id}
|
||||
size="mini"
|
||||
type="primary"
|
||||
onClick={points}
|
||||
>
|
||||
修改积分
|
||||
</el-button>
|
||||
<el-button
|
||||
v-show={!row.id}
|
||||
size="mini"
|
||||
type="primary"
|
||||
onClick={growthValue}
|
||||
>
|
||||
修改成长值
|
||||
</el-button>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
|
|
|
@ -0,0 +1,219 @@
|
|||
<template>
|
||||
<div>
|
||||
<obj-modal
|
||||
ref="modal"
|
||||
labelWidth="150px"
|
||||
:modalCols="modalCols"
|
||||
:modalConfig="modalConfig"
|
||||
:modalData="modalData"
|
||||
:modalHandles="modalHandles"
|
||||
>
|
||||
<template slot="dialog__after">
|
||||
<el-form
|
||||
label-width="210px"
|
||||
:rules="rules"
|
||||
:model="modalData"
|
||||
ref="modalForm"
|
||||
>
|
||||
<el-form-item
|
||||
v-if="isAdd"
|
||||
:label="`当前用户剩余积分${form.memberPoints},修改为`"
|
||||
prop="memberPoints"
|
||||
>
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.memberPoints"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
<el-alert
|
||||
v-if="isAdd"
|
||||
title="该操作无法撤回,请输入”确定“并提交,提交后会发送系统通知,通知该用户积分发生变化 "
|
||||
:closable="false"
|
||||
type="error"
|
||||
>
|
||||
</el-alert>
|
||||
<el-form-item
|
||||
v-if="!isAdd"
|
||||
:label="`当前用户成长值为${form.growthValue},修改为`"
|
||||
prop="growthValue"
|
||||
>
|
||||
<el-input-number
|
||||
style="width: 150px"
|
||||
controls-position="right"
|
||||
:precision="0"
|
||||
v-model="modalData.growthValue"
|
||||
:min="0"
|
||||
label="请输入"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
<el-alert
|
||||
v-if="!isAdd"
|
||||
title="该操作无法撤回,请输入”确定“并提交,提交后会发送系统通知,通知该用户成长值发生变化 "
|
||||
:closable="false"
|
||||
type="error"
|
||||
>
|
||||
</el-alert>
|
||||
<el-form-item
|
||||
style="margin-top: 20px"
|
||||
label="请输入确定"
|
||||
prop="determine"
|
||||
>
|
||||
<el-input
|
||||
style="width: 150px"
|
||||
v-model="modalData.determine"
|
||||
label="请输入"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
</obj-modal>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { debounce, cloneDeep } from "lodash";
|
||||
import { Divider } from "element-ui";
|
||||
export default {
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
isAdd: true,
|
||||
//表格属性
|
||||
modalConfig: {
|
||||
title: "",
|
||||
show: false,
|
||||
width: "700px",
|
||||
},
|
||||
modalData: {},
|
||||
form: {},
|
||||
rules: {
|
||||
memberPoints: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入积分",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
growthValue: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入成长值",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
determine: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入确定",
|
||||
trigger: "blur",
|
||||
},
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (value !== "确定") {
|
||||
callback(new Error("请输入确定"));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
"modalConfig.show"(newVal) {
|
||||
if (!newVal) {
|
||||
//关闭弹窗清空校验
|
||||
setTimeout(() => {
|
||||
this.$refs.modalForm.resetFields();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
queryTableData(pageNo, pageSize) {},
|
||||
toggle(e) {
|
||||
if (this.modalConfig.show == false) {
|
||||
this.modalConfig.show = true;
|
||||
} else {
|
||||
this.modalConfig.show = false;
|
||||
}
|
||||
if (e) {
|
||||
this.init(cloneDeep(e));
|
||||
}
|
||||
return {
|
||||
add: (row) => {
|
||||
this.modalConfig.title = "修改积分";
|
||||
this.isAdd = true;
|
||||
},
|
||||
update: () => {
|
||||
this.modalConfig.title = "修改成长值";
|
||||
this.isAdd = false;
|
||||
},
|
||||
};
|
||||
},
|
||||
init(row) {
|
||||
console.log(row);
|
||||
this.modalData = row;
|
||||
this.form = {
|
||||
memberPoints: row.memberPoints,
|
||||
growthValue: row.growthValue,
|
||||
};
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalCols() {
|
||||
return [];
|
||||
},
|
||||
modalHandles() {
|
||||
return [
|
||||
{
|
||||
label: "取消",
|
||||
handle: () => {
|
||||
this.toggle();
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "确认",
|
||||
type: "primary",
|
||||
handle: () => {
|
||||
console.log(this.modalData);
|
||||
this.$refs.modalForm.validate((valid) => {
|
||||
console.log(valid);
|
||||
if (valid) {
|
||||
if (this.isAdd) {
|
||||
this.$api.marketing
|
||||
.changeMemberPoints({
|
||||
id: this.modalData.id,
|
||||
memberPoints: this.modalData.memberPoints,
|
||||
})
|
||||
.then((res) => {
|
||||
this.$emit("queryList");
|
||||
this.toggle();
|
||||
});
|
||||
}
|
||||
} else {
|
||||
this.$api.marketing
|
||||
.changeGrowthValue({
|
||||
id: this.modalData.id,
|
||||
growthValue: this.modalData.growthValue,
|
||||
})
|
||||
.then((res) => {
|
||||
this.$emit("queryList");
|
||||
this.toggle();
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
asyncComputed: {},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
|
@ -0,0 +1,141 @@
|
|||
<template>
|
||||
<div>
|
||||
<obj-modal
|
||||
ref="modal"
|
||||
labelWidth="150px"
|
||||
:modalCols="modalCols"
|
||||
:modalConfig="modalConfig"
|
||||
:modalData="modalData"
|
||||
:modalHandles="modalHandles"
|
||||
>
|
||||
<template slot="dialog__after">
|
||||
<div style="padding: 20px">
|
||||
<el-descriptions title="用户信息">
|
||||
<el-descriptions-item label="头像">
|
||||
<el-image
|
||||
style="width: 60px; height: 60px"
|
||||
:src="modalData.headUrl"
|
||||
:preview-src-list="[modalData.headUrl]"
|
||||
>
|
||||
</el-image>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="用户名">{{
|
||||
modalData.username
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="ID">{{
|
||||
modalData.userId
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="手机号">{{
|
||||
modalData.mobile
|
||||
}}</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label=""
|
||||
>江苏省苏州市吴中区吴中大道 1188 号</el-descriptions-item
|
||||
> -->
|
||||
</el-descriptions>
|
||||
</div>
|
||||
<div
|
||||
v-if="modalData.id"
|
||||
style="margin-top: 20px; border-top: 1px solid #ccc; padding: 20px"
|
||||
>
|
||||
<el-descriptions title="会员信息">
|
||||
<el-descriptions-item label="会员名称">{{
|
||||
modalData.levelName
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="生日">{{
|
||||
modalData.birthday
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="加入会员时间">{{
|
||||
modalData.joinTime
|
||||
}}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
</obj-modal>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { debounce, cloneDeep } from "lodash";
|
||||
import { Divider } from "element-ui";
|
||||
export default {
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
isAdd: true,
|
||||
//表格属性
|
||||
modalConfig: {
|
||||
title: "用户详情",
|
||||
show: false,
|
||||
width: "60%",
|
||||
},
|
||||
modalData: {},
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
"modalConfig.show"(newVal) {
|
||||
if (newVal) {
|
||||
//关闭弹窗清空校验
|
||||
setTimeout(() => {
|
||||
this.$refs.modal.resetFields();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
queryTableData(pageNo, pageSize) {},
|
||||
toggle(e) {
|
||||
if (this.modalConfig.show == false) {
|
||||
this.modalConfig.show = true;
|
||||
} else {
|
||||
this.modalConfig.show = false;
|
||||
}
|
||||
if (e) {
|
||||
this.init(cloneDeep(e));
|
||||
}
|
||||
return {
|
||||
add: () => {
|
||||
this.modalConfig.title = "用户详情";
|
||||
this.isAdd = true;
|
||||
},
|
||||
update: () => {
|
||||
this.isAdd = false;
|
||||
},
|
||||
};
|
||||
},
|
||||
init(row) {
|
||||
this.modalData = row;
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalCols() {
|
||||
return [];
|
||||
},
|
||||
modalHandles() {
|
||||
return [
|
||||
{
|
||||
label: "取消",
|
||||
handle: () => {
|
||||
this.toggle();
|
||||
},
|
||||
},
|
||||
{
|
||||
label: this.isAdd ? "确认添加" : "确认",
|
||||
type: "primary",
|
||||
loading: this.isLoading,
|
||||
submit: true,
|
||||
handle: () => {
|
||||
console.log(JSON.parse(JSON.stringify(this.modalData)));
|
||||
this.$emit(
|
||||
"addCouponData",
|
||||
JSON.parse(JSON.stringify(this.modalData))
|
||||
);
|
||||
this.toggle();
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
asyncComputed: {},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
|
@ -0,0 +1,320 @@
|
|||
<template>
|
||||
<div>
|
||||
<div style="height: calc(100vh - 200px)">
|
||||
<obj-table-plus
|
||||
ref="oTable"
|
||||
style="height: 100%"
|
||||
:tableCols="tableCols"
|
||||
:tableProp="tableProp"
|
||||
@query="queryList"
|
||||
v-model="dataList"
|
||||
:tableEvent="tableEvent"
|
||||
>
|
||||
<template slot="tableTop">
|
||||
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||
<el-form-item label="模块">
|
||||
<el-select
|
||||
@change="changeModule"
|
||||
class="filter-item"
|
||||
style="width: 200px"
|
||||
v-model="formInline.module"
|
||||
placeholder="请选择模块"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in [
|
||||
{
|
||||
label: '菜市场',
|
||||
value: 'market',
|
||||
},
|
||||
{
|
||||
label: '摊铺',
|
||||
value: 'shop',
|
||||
},
|
||||
]"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="storeList.length > 1 && formInline.module === 'shop'"
|
||||
label="摊铺"
|
||||
>
|
||||
<el-select
|
||||
class="filter-item"
|
||||
style="width: 200px"
|
||||
v-model="formInline.ownerId"
|
||||
placeholder="请选择摊铺"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in storeList"
|
||||
:key="item.shopId"
|
||||
:label="item.shopName"
|
||||
:value="item.shopId"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型">
|
||||
<el-select
|
||||
class="filter-item"
|
||||
style="width: 200px"
|
||||
v-model="formInline.type"
|
||||
placeholder="请选择分类类型"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="$refs.oTable.reload()"
|
||||
>查询</el-button
|
||||
>
|
||||
<el-button type="primary" @click="Reset">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- <el-tabs v-model="activeName" @tab-click="handleClick">
|
||||
<el-tab-pane
|
||||
v-for="item in statusList"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:name="item.value"
|
||||
></el-tab-pane>
|
||||
</el-tabs> -->
|
||||
<div class="mb-2">
|
||||
<el-button type="primary" size="small" @click="addBanner"
|
||||
>新增轮播图</el-button
|
||||
>
|
||||
<el-button type="primary" size="small" @click="setSort"
|
||||
>排序</el-button
|
||||
>
|
||||
</div>
|
||||
</template>
|
||||
</obj-table-plus>
|
||||
</div>
|
||||
<!-- 轮播图 -->
|
||||
<addOrUpdate
|
||||
ref="addOrUpdate"
|
||||
@queryList="$refs.oTable.reload()"
|
||||
></addOrUpdate>
|
||||
<!-- 排序 -->
|
||||
<setSorting
|
||||
@queryList="$refs.oTable.reload()"
|
||||
ref="setSorting"
|
||||
></setSorting>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import setSorting from "./popup/set-sorting.vue";
|
||||
import addOrUpdate from "./popup/add-or-update.vue";
|
||||
import { mapState } from "vuex";
|
||||
export default {
|
||||
components: { addOrUpdate, setSorting },
|
||||
data() {
|
||||
return {
|
||||
activeName: "5",
|
||||
advanceSellStatus: "",
|
||||
dataList: [],
|
||||
formInline: {
|
||||
type: 0,
|
||||
ownerId: "",
|
||||
module: "shop",
|
||||
},
|
||||
tableProp: {
|
||||
"auto-resize": true,
|
||||
border: true,
|
||||
height: "auto",
|
||||
"row-id": "id",
|
||||
"show-overflow": false,
|
||||
},
|
||||
selectList: [],
|
||||
type: [
|
||||
{
|
||||
value: 0,
|
||||
label: "菜市场分类",
|
||||
},
|
||||
{
|
||||
value: 1,
|
||||
label: "云店分类",
|
||||
},
|
||||
],
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.formInline = {
|
||||
type: 0,
|
||||
ownerId: this.shopId,
|
||||
module: "shop",
|
||||
};
|
||||
this.$nextTick(() => {
|
||||
this.$refs.oTable.reload();
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
// getData() {
|
||||
// this.$api.mer_admin
|
||||
// .storeList({ marketId: this.formInline.marketId })
|
||||
// .then((res) => {
|
||||
// this.storeList = res.data.data;
|
||||
// this.formInline.shopId = res.data.data[0].shopId;
|
||||
// this.$nextTick(() => {
|
||||
// this.$refs.oTable.reload();
|
||||
// });
|
||||
// });
|
||||
// },
|
||||
addBanner() {
|
||||
this.$refs.addOrUpdate.toggle().add(this.formInline);
|
||||
},
|
||||
changeModule(e) {
|
||||
if (e === "shop") {
|
||||
this.formInline.ownerId = this.shopId;
|
||||
} else {
|
||||
this.formInline.ownerId = this.marketId;
|
||||
}
|
||||
console.log(e);
|
||||
},
|
||||
queryList(pageNo, pageSize) {
|
||||
this.$api.mer_admin
|
||||
.bannerPage({
|
||||
pageNumber: pageNo,
|
||||
pageSize: pageSize,
|
||||
...this.formInline,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
this.$refs.oTable.complete(
|
||||
res.data.data.data,
|
||||
Number(res.data.data.total)
|
||||
);
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$refs.oTable.complete(false);
|
||||
});
|
||||
},
|
||||
Reset() {
|
||||
this.formInline = {
|
||||
type: 0,
|
||||
ownerId: this.shopId,
|
||||
};
|
||||
this.$refs.oTable.reload();
|
||||
},
|
||||
//排序
|
||||
setSort() {
|
||||
this.$refs.setSorting.init(this.dataList);
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
tableCols() {
|
||||
return [
|
||||
// { type: "checkbox", width: "60px", fixed: "left" },
|
||||
{ type: "seq", width: "60px", align: "center", title: "序号" },
|
||||
{
|
||||
title: "名称",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "title",
|
||||
},
|
||||
{
|
||||
title: "轮播图",
|
||||
align: "center",
|
||||
field: "startTime",
|
||||
type: "jsx",
|
||||
render: ({ row }) => {
|
||||
return (
|
||||
<el-image
|
||||
style="width: 60px; height: 60px"
|
||||
src={row.img}
|
||||
preview-src-list={[row.img]}
|
||||
></el-image>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "状态",
|
||||
align: "center",
|
||||
field: "status",
|
||||
type: "jsx",
|
||||
render: ({ row }) => {
|
||||
return <span>{row.status ? "已启用" : "已禁用"}</span>;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
type: "jsx",
|
||||
align: "center",
|
||||
width: "220px",
|
||||
render: ({ row }) => {
|
||||
let updateBanner = () => {
|
||||
this.$refs.addOrUpdate.toggle(row).update();
|
||||
};
|
||||
let deleteBanner = () => {
|
||||
this.$api.mer_admin
|
||||
.bannerDelete({ id: row.id })
|
||||
.then((res) => {
|
||||
this.$refs.oTable.reload();
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$refs.oTable.reload();
|
||||
});
|
||||
};
|
||||
let onCancel = () => {};
|
||||
return (
|
||||
<div>
|
||||
<el-button
|
||||
style="margin-right:10px"
|
||||
size="mini"
|
||||
type="primary"
|
||||
onClick={updateBanner}
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-popconfirm
|
||||
onConfirm={deleteBanner}
|
||||
onCancel={onCancel}
|
||||
confirm-button-text="确定"
|
||||
cancel-button-text="取消"
|
||||
icon="el-icon-info"
|
||||
icon-color="red"
|
||||
title="确定删除吗?"
|
||||
>
|
||||
<el-button size="mini" type="danger" slot="reference">
|
||||
删除
|
||||
</el-button>
|
||||
</el-popconfirm>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
tableEvent() {
|
||||
return {
|
||||
"checkbox-all": ({ records, reserves }) => {
|
||||
this.selectList = [...records, ...reserves];
|
||||
},
|
||||
"checkbox-change": ({ records, reserves }) => {
|
||||
this.selectList = [...records, ...reserves];
|
||||
},
|
||||
};
|
||||
},
|
||||
...mapState("userData", [
|
||||
"isMerchant",
|
||||
"marketList",
|
||||
"storeList",
|
||||
"marketId",
|
||||
"shopId",
|
||||
]),
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
|
@ -0,0 +1,276 @@
|
|||
<template>
|
||||
<div>
|
||||
<obj-modal
|
||||
ref="modal"
|
||||
labelWidth="150px"
|
||||
:modalCols="modalCols"
|
||||
:modalConfig="modalConfig"
|
||||
:modalData="modalData"
|
||||
:modalHandles="modalHandles"
|
||||
>
|
||||
<template slot="dialog__after"> </template>
|
||||
</obj-modal>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { debounce, cloneDeep } from "lodash";
|
||||
import { Divider } from "element-ui";
|
||||
export default {
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
isAdd: true,
|
||||
//表格属性
|
||||
modalConfig: {
|
||||
title: "",
|
||||
show: false,
|
||||
width: "700px",
|
||||
},
|
||||
modalData: {},
|
||||
settingId: "",
|
||||
form: {},
|
||||
fileList: [],
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
"modalConfig.show"(newVal) {
|
||||
if (!newVal) {
|
||||
//关闭弹窗清空校验
|
||||
setTimeout(() => {
|
||||
this.$refs.modal.resetFields();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
queryTableData(pageNo, pageSize) {},
|
||||
toggle(e) {
|
||||
if (this.modalConfig.show == false) {
|
||||
this.modalConfig.show = true;
|
||||
} else {
|
||||
this.modalConfig.show = false;
|
||||
}
|
||||
if (e) {
|
||||
this.init(cloneDeep(e));
|
||||
}
|
||||
return {
|
||||
add: (row) => {
|
||||
console.log(row);
|
||||
this.modalData = {
|
||||
ownerId: row.ownerId,
|
||||
title: "",
|
||||
module: row.module,
|
||||
type: 0,
|
||||
status: true,
|
||||
app: 1,
|
||||
img: "",
|
||||
};
|
||||
this.fileList = [];
|
||||
this.modalConfig.title = "添加轮播图";
|
||||
this.isAdd = true;
|
||||
},
|
||||
update: () => {
|
||||
this.modalConfig.title = "编辑轮播图";
|
||||
this.isAdd = false;
|
||||
},
|
||||
};
|
||||
},
|
||||
init(row) {
|
||||
this.modalData = row;
|
||||
this.fileList = [
|
||||
{
|
||||
name: "轮播图",
|
||||
url: this.modalData.img,
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalCols() {
|
||||
return [
|
||||
{
|
||||
label: "轮播图名称",
|
||||
prop: "title",
|
||||
type: "Input",
|
||||
required: true,
|
||||
maxlength: "30",
|
||||
rules: {
|
||||
required: true,
|
||||
message: "请输入轮播图名称",
|
||||
trigger: "blur",
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "分类",
|
||||
prop: "type",
|
||||
maxlength: "30",
|
||||
rules: {
|
||||
required: true,
|
||||
message: "请输入轮播图名称",
|
||||
trigger: "blur",
|
||||
},
|
||||
type: "jsx",
|
||||
render: () => {
|
||||
return (
|
||||
<el-select
|
||||
v-model={this.modalData.type}
|
||||
placeholder="请选择销售单位"
|
||||
>
|
||||
{[
|
||||
{ label: "菜市场", value: 0 },
|
||||
{
|
||||
label: "云店",
|
||||
value: 1,
|
||||
},
|
||||
].map((item) => {
|
||||
return (
|
||||
<el-option
|
||||
label={item.label}
|
||||
value={item.value}
|
||||
></el-option>
|
||||
);
|
||||
})}
|
||||
</el-select>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "状态",
|
||||
prop: "status",
|
||||
maxlength: "30",
|
||||
type: "jsx",
|
||||
render: () => {
|
||||
return (
|
||||
<el-switch
|
||||
v-model={this.modalData.status}
|
||||
active-text="启用"
|
||||
inactive-text="禁用"
|
||||
/>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "应用",
|
||||
prop: "app",
|
||||
maxlength: "30",
|
||||
rules: {
|
||||
required: true,
|
||||
message: "请输入轮播图名称",
|
||||
trigger: "blur",
|
||||
},
|
||||
type: "jsx",
|
||||
render: () => {
|
||||
return (
|
||||
<el-select
|
||||
v-model={this.modalData.app}
|
||||
placeholder="请选择销售单位"
|
||||
>
|
||||
{[
|
||||
{ label: "用户", value: 1 },
|
||||
{
|
||||
label: "商家",
|
||||
value: 2,
|
||||
},
|
||||
{
|
||||
label: "专员",
|
||||
value: 3,
|
||||
},
|
||||
].map((item) => {
|
||||
return (
|
||||
<el-option
|
||||
label={item.label}
|
||||
value={item.value}
|
||||
></el-option>
|
||||
);
|
||||
})}
|
||||
</el-select>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "轮播图",
|
||||
prop: "img",
|
||||
required: true,
|
||||
rules: {
|
||||
required: true,
|
||||
message: "请上传商品图片",
|
||||
trigger: "blur",
|
||||
},
|
||||
type: "jsx",
|
||||
render: () => {
|
||||
const handleAvatarSuccess = (res, file, fileList) => {
|
||||
console.log(res, fileList);
|
||||
this.modalData.img = res.data;
|
||||
this.$refs.modal.validate();
|
||||
};
|
||||
const handleRemove = (file, fileList) => {
|
||||
console.log(file, fileList);
|
||||
this.fileList = [];
|
||||
this.modalData.img = "";
|
||||
};
|
||||
return (
|
||||
<el-upload
|
||||
class="upload-demo"
|
||||
drag
|
||||
action={this.$api.mer_admin.uploadFile()}
|
||||
{...{
|
||||
props: {
|
||||
"on-success": handleAvatarSuccess,
|
||||
"on-remove": handleRemove,
|
||||
},
|
||||
}}
|
||||
headers={{
|
||||
token: "Bearer " + this.$cookie.get("token"),
|
||||
}}
|
||||
multiple={true}
|
||||
file-list={this.fileList}
|
||||
list-type="picture"
|
||||
>
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">
|
||||
将文件拖到此处,或<em>点击上传</em>
|
||||
</div>
|
||||
<div class="el-upload__tip" slot="tip">
|
||||
只能上传jpg/png文件,且不超过500kb
|
||||
</div>
|
||||
</el-upload>
|
||||
);
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
modalHandles() {
|
||||
return [
|
||||
{
|
||||
label: "取消",
|
||||
handle: () => {
|
||||
this.toggle();
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "确认",
|
||||
type: "primary",
|
||||
submit: true,
|
||||
handle: () => {
|
||||
console.log(this.modalData);
|
||||
if (this.isAdd) {
|
||||
this.$api.mer_admin.bannerAdd(this.modalData).then((res) => {
|
||||
this.toggle();
|
||||
this.$emit("queryList");
|
||||
});
|
||||
} else {
|
||||
this.$api.mer_admin.bannerUpdate(this.modalData).then((res) => {
|
||||
this.toggle();
|
||||
this.$emit("queryList");
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
asyncComputed: {},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
|
@ -0,0 +1,122 @@
|
|||
<template>
|
||||
<el-dialog
|
||||
:visible.sync="visible"
|
||||
title="拖拽排序"
|
||||
:close-on-click-modal="false"
|
||||
width="600"
|
||||
draggable
|
||||
>
|
||||
<div
|
||||
class="item"
|
||||
v-for="(item, i) in drag.list"
|
||||
:key="item.id"
|
||||
draggable="true"
|
||||
@dragstart="dragstart($event, i)"
|
||||
@dragenter="dragenter($event, i)"
|
||||
@dragend="dragend"
|
||||
@dragover="dragover"
|
||||
>
|
||||
{{ item.title }}
|
||||
</div>
|
||||
<template #footer>
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
<el-button type="primary" @click="dataFormSubmitHandle()">确定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script>
|
||||
// import { sortCarouselImage } from "@/api/cloudStore.js";
|
||||
import debounce from "lodash/debounce";
|
||||
// import { provinceAndCityData, regionData } from "element-china-area-data";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
dataForm: {},
|
||||
drag: {
|
||||
list: [],
|
||||
},
|
||||
|
||||
dragIndex: 0,
|
||||
};
|
||||
},
|
||||
computed: {},
|
||||
watch: {
|
||||
visible(newVal, oldVal) {
|
||||
if (newVal == false) {
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
init(row) {
|
||||
this.drag.list = JSON.parse(JSON.stringify(row));
|
||||
this.visible = true;
|
||||
},
|
||||
dragstart(e, index) {
|
||||
e.stopPropagation();
|
||||
this.dragIndex = index;
|
||||
setTimeout(() => {
|
||||
e.target.classList.add("moveing");
|
||||
}, 0);
|
||||
},
|
||||
dragenter(e, index) {
|
||||
e.preventDefault();
|
||||
// 拖拽到原位置时不触发
|
||||
if (this.dragIndex !== index) {
|
||||
const source = this.drag.list[this.dragIndex];
|
||||
this.drag.list.splice(this.dragIndex, 1);
|
||||
this.drag.list.splice(index, 0, source);
|
||||
|
||||
// 更新节点位置
|
||||
this.dragIndex = index;
|
||||
}
|
||||
},
|
||||
dragover(e) {
|
||||
e.preventDefault();
|
||||
e.dataTransfer.dropEffect = "move";
|
||||
},
|
||||
dragend(e) {
|
||||
e.target.classList.remove("moveing");
|
||||
},
|
||||
// 表单提交
|
||||
dataFormSubmitHandle: debounce(
|
||||
function () {
|
||||
console.log(this.drag.list);
|
||||
let id = this.drag.list.map((item) => {
|
||||
return item.id;
|
||||
});
|
||||
console.log(id);
|
||||
this.$api.mer_admin.sortBanner({ ids: id }).then((res) => {
|
||||
console.log(res);
|
||||
this.$emit("queryList");
|
||||
this.visible = false;
|
||||
});
|
||||
},
|
||||
1000,
|
||||
{ leading: true, trailing: false }
|
||||
),
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
.item {
|
||||
width: 500px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
/* // background-color: #f5f6f8; */
|
||||
background-color: skyblue;
|
||||
text-align: center;
|
||||
margin: 10px;
|
||||
color: #fff;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.container {
|
||||
position: relative;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.moveing {
|
||||
opacity: 0;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,324 @@
|
|||
<template>
|
||||
<div>
|
||||
<div style="height: calc(100vh - 200px)">
|
||||
<obj-table-plus
|
||||
ref="oTable"
|
||||
style="height: 100%"
|
||||
:tableCols="tableCols"
|
||||
:tableProp="tableProp"
|
||||
@query="queryList"
|
||||
v-model="dataList"
|
||||
:tableEvent="tableEvent"
|
||||
>
|
||||
<template slot="tableTop">
|
||||
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||
<el-form-item label="模块">
|
||||
<el-select
|
||||
@change="changePosition"
|
||||
class="filter-item"
|
||||
style="width: 200px"
|
||||
v-model="formInline.position"
|
||||
placeholder="请选择模块"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in [
|
||||
{
|
||||
label: '菜市场详情页',
|
||||
value: '2',
|
||||
},
|
||||
{
|
||||
label: '摊位详情',
|
||||
value: '3',
|
||||
},
|
||||
]"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="storeList.length > 1 && formInline.position === '1'"
|
||||
label="摊铺"
|
||||
>
|
||||
<el-select
|
||||
class="filter-item"
|
||||
style="width: 200px"
|
||||
v-model="formInline.targetId"
|
||||
placeholder="请选择摊铺"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in storeList"
|
||||
:key="item.shopId"
|
||||
:label="item.shopName"
|
||||
:value="item.shopId"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型">
|
||||
<el-select
|
||||
class="filter-item"
|
||||
style="width: 200px"
|
||||
v-model="formInline.type"
|
||||
placeholder="请选择分类类型"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="$refs.oTable.reload()"
|
||||
>查询</el-button
|
||||
>
|
||||
<el-button type="primary" @click="Reset">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- <el-tabs v-model="activeName" @tab-click="handleClick">
|
||||
<el-tab-pane
|
||||
v-for="item in statusList"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:name="item.value"
|
||||
></el-tab-pane>
|
||||
</el-tabs> -->
|
||||
<div class="mb-2">
|
||||
<el-button type="primary" size="small" @click="addBanner"
|
||||
>新增公告</el-button
|
||||
>
|
||||
<el-button type="primary" size="small" @click="setSort"
|
||||
>排序</el-button
|
||||
>
|
||||
</div>
|
||||
</template>
|
||||
</obj-table-plus>
|
||||
</div>
|
||||
<!-- 轮播图 -->
|
||||
<addOrUpdate
|
||||
ref="addOrUpdate"
|
||||
@queryList="$refs.oTable.reload()"
|
||||
></addOrUpdate>
|
||||
<!-- 排序 -->
|
||||
<setSorting
|
||||
@queryList="$refs.oTable.reload()"
|
||||
ref="setSorting"
|
||||
></setSorting>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import setSorting from "./popup/set-sorting.vue";
|
||||
import addOrUpdate from "./popup/add-or-update.vue";
|
||||
import { mapState } from "vuex";
|
||||
export default {
|
||||
components: { addOrUpdate, setSorting },
|
||||
data() {
|
||||
return {
|
||||
activeName: "5",
|
||||
advanceSellStatus: "",
|
||||
dataList: [],
|
||||
formInline: {
|
||||
type: 0,
|
||||
targetId: "",
|
||||
position: "3",
|
||||
},
|
||||
tableProp: {
|
||||
"auto-resize": true,
|
||||
border: true,
|
||||
height: "auto",
|
||||
"row-id": "id",
|
||||
"show-overflow": false,
|
||||
},
|
||||
selectList: [],
|
||||
type: [
|
||||
{
|
||||
value: 0,
|
||||
label: "菜市场分类",
|
||||
},
|
||||
{
|
||||
value: 1,
|
||||
label: "云店分类",
|
||||
},
|
||||
],
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.formInline = {
|
||||
type: 0,
|
||||
targetId: this.shopId,
|
||||
position: "3",
|
||||
};
|
||||
this.$nextTick(() => {
|
||||
this.$refs.oTable.reload();
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
// getData() {
|
||||
// this.$api.mer_admin
|
||||
// .storeList({ marketId: this.formInline.marketId })
|
||||
// .then((res) => {
|
||||
// this.storeList = res.data.data;
|
||||
// this.formInline.shopId = res.data.data[0].shopId;
|
||||
// this.$nextTick(() => {
|
||||
// this.$refs.oTable.reload();
|
||||
// });
|
||||
// });
|
||||
// },
|
||||
addBanner() {
|
||||
this.$refs.addOrUpdate.toggle().add(this.formInline);
|
||||
},
|
||||
changePosition(e) {
|
||||
if (e === "shop") {
|
||||
this.formInline.targetId = this.shopId;
|
||||
} else {
|
||||
this.formInline.targetId = this.marketId;
|
||||
}
|
||||
console.log(e);
|
||||
},
|
||||
queryList(pageNo, pageSize) {
|
||||
this.$api.mer_admin
|
||||
.noticePage({
|
||||
pageNumber: pageNo,
|
||||
pageSize: pageSize,
|
||||
...this.formInline,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
this.$refs.oTable.complete(
|
||||
res.data.data.data,
|
||||
Number(res.data.data.total)
|
||||
);
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$refs.oTable.complete(false);
|
||||
});
|
||||
},
|
||||
Reset() {
|
||||
this.formInline = {
|
||||
type: 0,
|
||||
targetId: this.shopId,
|
||||
};
|
||||
this.$refs.oTable.reload();
|
||||
},
|
||||
//排序
|
||||
setSort() {
|
||||
this.$refs.setSorting.init(this.dataList);
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
tableCols() {
|
||||
return [
|
||||
// { type: "checkbox", width: "60px", fixed: "left" },
|
||||
{ type: "seq", width: "60px", align: "center", title: "序号" },
|
||||
{
|
||||
title: "公告通知",
|
||||
align: "center",
|
||||
field: "title",
|
||||
},
|
||||
{
|
||||
title: "位置",
|
||||
align: "center",
|
||||
field: "startTime",
|
||||
type: "jsx",
|
||||
width: "120px",
|
||||
render: ({ row }) => {
|
||||
let getPosition = (row) => {
|
||||
if (row == "1") {
|
||||
return "首页";
|
||||
} else if (row == "2") {
|
||||
return "菜市场详情页";
|
||||
} else if (row == "3") {
|
||||
return "摊位详情";
|
||||
}
|
||||
};
|
||||
return <span>{getPosition(row.position)}</span>;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "状态",
|
||||
align: "center",
|
||||
field: "status",
|
||||
type: "jsx",
|
||||
width: "120px",
|
||||
render: ({ row }) => {
|
||||
return <span>{row.status ? "已启用" : "已禁用"}</span>;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
type: "jsx",
|
||||
align: "center",
|
||||
width: "220px",
|
||||
render: ({ row }) => {
|
||||
let updateBanner = () => {
|
||||
this.$refs.addOrUpdate.toggle(row).update();
|
||||
};
|
||||
let deleteBanner = () => {
|
||||
this.$api.mer_admin
|
||||
.noticeDelete({ id: row.id })
|
||||
.then((res) => {
|
||||
this.$refs.oTable.reload();
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$refs.oTable.reload();
|
||||
});
|
||||
};
|
||||
let onCancel = () => {};
|
||||
return (
|
||||
<div>
|
||||
<el-button
|
||||
style="margin-right:10px"
|
||||
size="mini"
|
||||
type="primary"
|
||||
onClick={updateBanner}
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-popconfirm
|
||||
onConfirm={deleteBanner}
|
||||
onCancel={onCancel}
|
||||
confirm-button-text="确定"
|
||||
cancel-button-text="取消"
|
||||
icon="el-icon-info"
|
||||
icon-color="red"
|
||||
title="确定删除吗?"
|
||||
>
|
||||
<el-button size="mini" type="danger" slot="reference">
|
||||
删除
|
||||
</el-button>
|
||||
</el-popconfirm>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
tableEvent() {
|
||||
return {
|
||||
"checkbox-all": ({ records, reserves }) => {
|
||||
this.selectList = [...records, ...reserves];
|
||||
},
|
||||
"checkbox-change": ({ records, reserves }) => {
|
||||
this.selectList = [...records, ...reserves];
|
||||
},
|
||||
};
|
||||
},
|
||||
...mapState("userData", [
|
||||
"isMerchant",
|
||||
"marketList",
|
||||
"storeList",
|
||||
"marketId",
|
||||
"shopId",
|
||||
]),
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
|
@ -0,0 +1,219 @@
|
|||
<template>
|
||||
<div>
|
||||
<obj-modal
|
||||
ref="modal"
|
||||
labelWidth="150px"
|
||||
:modalCols="modalCols"
|
||||
:modalConfig="modalConfig"
|
||||
:modalData="modalData"
|
||||
:modalHandles="modalHandles"
|
||||
>
|
||||
<template slot="dialog__after"> </template>
|
||||
</obj-modal>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { debounce, cloneDeep } from "lodash";
|
||||
import { Divider } from "element-ui";
|
||||
export default {
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
isAdd: true,
|
||||
//表格属性
|
||||
modalConfig: {
|
||||
title: "",
|
||||
show: false,
|
||||
width: "700px",
|
||||
},
|
||||
modalData: {},
|
||||
settingId: "",
|
||||
form: {},
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
"modalConfig.show"(newVal) {
|
||||
if (!newVal) {
|
||||
//关闭弹窗清空校验
|
||||
setTimeout(() => {
|
||||
this.$refs.modal.resetFields();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
queryTableData(pageNo, pageSize) {},
|
||||
toggle(e) {
|
||||
if (this.modalConfig.show == false) {
|
||||
this.modalConfig.show = true;
|
||||
} else {
|
||||
this.modalConfig.show = false;
|
||||
}
|
||||
if (e) {
|
||||
this.init(cloneDeep(e));
|
||||
}
|
||||
return {
|
||||
add: (row) => {
|
||||
console.log(row);
|
||||
this.modalData = {
|
||||
targetId: row.targetId,
|
||||
title: "",
|
||||
module: row.position,
|
||||
type: 0,
|
||||
status: true,
|
||||
app: 1,
|
||||
};
|
||||
this.fileList = [];
|
||||
this.modalConfig.title = "添加公告";
|
||||
this.isAdd = true;
|
||||
},
|
||||
update: () => {
|
||||
this.modalConfig.title = "编辑公告";
|
||||
this.isAdd = false;
|
||||
},
|
||||
};
|
||||
},
|
||||
init(row) {
|
||||
this.modalData = row;
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalCols() {
|
||||
return [
|
||||
{
|
||||
label: "公告内容",
|
||||
prop: "title",
|
||||
type: "Textarea",
|
||||
required: true,
|
||||
maxlength: "120",
|
||||
rows: "5",
|
||||
rules: {
|
||||
required: true,
|
||||
message: "请输入公告内容",
|
||||
trigger: "blur",
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "分类",
|
||||
prop: "type",
|
||||
maxlength: "30",
|
||||
rules: {
|
||||
required: true,
|
||||
message: "请输入分类",
|
||||
trigger: "blur",
|
||||
},
|
||||
type: "jsx",
|
||||
render: () => {
|
||||
return (
|
||||
<el-select
|
||||
v-model={this.modalData.type}
|
||||
placeholder="请选择销售单位"
|
||||
>
|
||||
{[
|
||||
{ label: "菜市场", value: 0 },
|
||||
{
|
||||
label: "云店",
|
||||
value: 1,
|
||||
},
|
||||
].map((item) => {
|
||||
return (
|
||||
<el-option
|
||||
label={item.label}
|
||||
value={item.value}
|
||||
></el-option>
|
||||
);
|
||||
})}
|
||||
</el-select>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "状态",
|
||||
prop: "status",
|
||||
maxlength: "30",
|
||||
type: "jsx",
|
||||
render: () => {
|
||||
return (
|
||||
<el-switch
|
||||
v-model={this.modalData.status}
|
||||
active-text="启用"
|
||||
inactive-text="禁用"
|
||||
/>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "应用",
|
||||
prop: "app",
|
||||
maxlength: "30",
|
||||
rules: {
|
||||
required: true,
|
||||
message: "请输入轮播图名称",
|
||||
trigger: "blur",
|
||||
},
|
||||
type: "jsx",
|
||||
render: () => {
|
||||
return (
|
||||
<el-select
|
||||
v-model={this.modalData.app}
|
||||
placeholder="请选择销售单位"
|
||||
>
|
||||
{[
|
||||
{ label: "用户", value: 1 },
|
||||
{
|
||||
label: "商家",
|
||||
value: 2,
|
||||
},
|
||||
{
|
||||
label: "专员",
|
||||
value: 3,
|
||||
},
|
||||
].map((item) => {
|
||||
return (
|
||||
<el-option
|
||||
label={item.label}
|
||||
value={item.value}
|
||||
></el-option>
|
||||
);
|
||||
})}
|
||||
</el-select>
|
||||
);
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
modalHandles() {
|
||||
return [
|
||||
{
|
||||
label: "取消",
|
||||
handle: () => {
|
||||
this.toggle();
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "确认",
|
||||
type: "primary",
|
||||
submit: true,
|
||||
handle: () => {
|
||||
console.log(this.modalData);
|
||||
if (this.isAdd) {
|
||||
this.$api.mer_admin.noticeAdd(this.modalData).then((res) => {
|
||||
this.toggle();
|
||||
this.$emit("queryList");
|
||||
});
|
||||
} else {
|
||||
this.$api.mer_admin.noticeUpdate(this.modalData).then((res) => {
|
||||
this.toggle();
|
||||
this.$emit("queryList");
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
asyncComputed: {},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
|
@ -0,0 +1,122 @@
|
|||
<template>
|
||||
<el-dialog
|
||||
:visible.sync="visible"
|
||||
title="拖拽排序"
|
||||
:close-on-click-modal="false"
|
||||
width="600"
|
||||
draggable
|
||||
>
|
||||
<div
|
||||
class="item"
|
||||
v-for="(item, i) in drag.list"
|
||||
:key="item.id"
|
||||
draggable="true"
|
||||
@dragstart="dragstart($event, i)"
|
||||
@dragenter="dragenter($event, i)"
|
||||
@dragend="dragend"
|
||||
@dragover="dragover"
|
||||
>
|
||||
{{ item.title }}
|
||||
</div>
|
||||
<template #footer>
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
<el-button type="primary" @click="dataFormSubmitHandle()">确定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script>
|
||||
// import { sortCarouselImage } from "@/api/cloudStore.js";
|
||||
import debounce from "lodash/debounce";
|
||||
// import { provinceAndCityData, regionData } from "element-china-area-data";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
dataForm: {},
|
||||
drag: {
|
||||
list: [],
|
||||
},
|
||||
|
||||
dragIndex: 0,
|
||||
};
|
||||
},
|
||||
computed: {},
|
||||
watch: {
|
||||
visible(newVal, oldVal) {
|
||||
if (newVal == false) {
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
init(row) {
|
||||
this.drag.list = JSON.parse(JSON.stringify(row));
|
||||
this.visible = true;
|
||||
},
|
||||
dragstart(e, index) {
|
||||
e.stopPropagation();
|
||||
this.dragIndex = index;
|
||||
setTimeout(() => {
|
||||
e.target.classList.add("moveing");
|
||||
}, 0);
|
||||
},
|
||||
dragenter(e, index) {
|
||||
e.preventDefault();
|
||||
// 拖拽到原位置时不触发
|
||||
if (this.dragIndex !== index) {
|
||||
const source = this.drag.list[this.dragIndex];
|
||||
this.drag.list.splice(this.dragIndex, 1);
|
||||
this.drag.list.splice(index, 0, source);
|
||||
|
||||
// 更新节点位置
|
||||
this.dragIndex = index;
|
||||
}
|
||||
},
|
||||
dragover(e) {
|
||||
e.preventDefault();
|
||||
e.dataTransfer.dropEffect = "move";
|
||||
},
|
||||
dragend(e) {
|
||||
e.target.classList.remove("moveing");
|
||||
},
|
||||
// 表单提交
|
||||
dataFormSubmitHandle: debounce(
|
||||
function () {
|
||||
console.log(this.drag.list);
|
||||
let id = this.drag.list.map((item) => {
|
||||
return item.id;
|
||||
});
|
||||
console.log(id);
|
||||
this.$api.mer_admin.sortnotice({ ids: id }).then((res) => {
|
||||
console.log(res);
|
||||
this.$emit("queryList");
|
||||
this.visible = false;
|
||||
});
|
||||
},
|
||||
1000,
|
||||
{ leading: true, trailing: false }
|
||||
),
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
.item {
|
||||
width: 500px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
/* // background-color: #f5f6f8; */
|
||||
background-color: skyblue;
|
||||
text-align: center;
|
||||
margin: 10px;
|
||||
color: #fff;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.container {
|
||||
position: relative;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.moveing {
|
||||
opacity: 0;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,47 @@
|
|||
<template>
|
||||
<vxe-column type="expand" width="60">
|
||||
<template #content="{ row }">
|
||||
<div class="expand-wrapper">
|
||||
<vxe-table border :data="row.productOrders" height="200">
|
||||
<vxe-column field="productOrderNo" title="商品订单号"></vxe-column>
|
||||
<vxe-column field="productName" title="商品名称"></vxe-column>
|
||||
<vxe-column
|
||||
field="productImg"
|
||||
title="商品图片"
|
||||
:cell-render="imgUrlCellRender"
|
||||
width="80"
|
||||
></vxe-column>
|
||||
<vxe-column field="productSpecName" title="商品规格名称"></vxe-column>
|
||||
<vxe-column field="originPrice" title="商品原价"></vxe-column>
|
||||
<vxe-column field="finalPrice" title="商品终价"></vxe-column>
|
||||
<vxe-column
|
||||
field="productOrderMoney"
|
||||
title="商品订单金额"
|
||||
></vxe-column>
|
||||
<vxe-column field="productCount" title="商品数量"></vxe-column>
|
||||
<vxe-column field="productLimit" title="商品限购数量"></vxe-column>
|
||||
<vxe-column field="shopName" title="店铺名称"></vxe-column>
|
||||
</vxe-table>
|
||||
</div>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
imgUrlCellRender: {
|
||||
name: "VxeImage",
|
||||
props: {
|
||||
width: 36,
|
||||
height: 36,
|
||||
},
|
||||
},
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
|
@ -0,0 +1,400 @@
|
|||
<template>
|
||||
<div>
|
||||
<div style="height: calc(100vh - 200px)">
|
||||
<obj-table-plus
|
||||
ref="oTable"
|
||||
style="height: 100%"
|
||||
:tableCols="tableCols"
|
||||
:tableProp="tableProp"
|
||||
@query="queryList"
|
||||
v-model="dataList"
|
||||
:tableEvent="tableEvent"
|
||||
>
|
||||
<template slot="tableTop">
|
||||
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||
<el-form-item label="订单号">
|
||||
<el-input
|
||||
v-model="formInline.name"
|
||||
placeholder="订单号搜索"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="商品名称">
|
||||
<el-input
|
||||
v-model="formInline.name"
|
||||
placeholder="商品名称或id"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="下单时间">
|
||||
<el-date-picker
|
||||
v-model="value1"
|
||||
type="datetimerange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="$refs.oTable.reload()"
|
||||
>查询</el-button
|
||||
>
|
||||
<el-button type="primary" @click="Reset">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- <el-tabs v-model="activeName" @tab-click="handleClick">
|
||||
<el-tab-pane
|
||||
v-for="item in statusList"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:name="item.value"
|
||||
></el-tab-pane>
|
||||
</el-tabs> -->
|
||||
<!-- <div class="mb-2">
|
||||
<el-button type="primary" size="small" @click="addProduct"
|
||||
>批量导出</el-button
|
||||
>
|
||||
</div> -->
|
||||
</template>
|
||||
</obj-table-plus>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import content from './content.vue'
|
||||
import { mapState } from "vuex";
|
||||
export default {
|
||||
components: {content},
|
||||
data() {
|
||||
return {
|
||||
activeName: "5",
|
||||
value1: "1",
|
||||
advanceSellStatus: "",
|
||||
dataList: [],
|
||||
formInline: {
|
||||
name: "",
|
||||
marketId: "",
|
||||
shopId: "",
|
||||
},
|
||||
tableProp: {
|
||||
"auto-resize": true,
|
||||
border: true,
|
||||
height: "auto",
|
||||
"row-id": "id",
|
||||
"show-overflow": false,
|
||||
},
|
||||
statusList: [
|
||||
{
|
||||
label: "全部",
|
||||
value: "5",
|
||||
},
|
||||
{
|
||||
label: "代发货",
|
||||
value: "0",
|
||||
},
|
||||
{
|
||||
label: "带收货",
|
||||
value: "1",
|
||||
},
|
||||
{
|
||||
label: "待评价",
|
||||
value: "2",
|
||||
},
|
||||
{
|
||||
label: "已取消",
|
||||
value: "3",
|
||||
},
|
||||
{
|
||||
label: "交易关闭",
|
||||
value: "3",
|
||||
},
|
||||
{
|
||||
label: "已完成",
|
||||
value: "3",
|
||||
},
|
||||
],
|
||||
productFilterType: "SALE",
|
||||
selectList: [],
|
||||
};
|
||||
},
|
||||
created() {},
|
||||
methods: {
|
||||
// getData() {
|
||||
// this.$api.mer_admin
|
||||
// .storeList({ marketId: this.formInline.marketId })
|
||||
// .then((res) => {
|
||||
// this.storeList = res.data.data;
|
||||
// this.formInline.shopId = res.data.data[0].shopId;
|
||||
// this.$nextTick(() => {
|
||||
// this.$refs.oTable.reload();
|
||||
// });
|
||||
// });
|
||||
// },
|
||||
addProduct() {
|
||||
this.$refs.addOrUpdate.toggle().add();
|
||||
},
|
||||
deleteProduct() {
|
||||
console.log(this.selectList);
|
||||
let integers = this.selectList.map((item) => {
|
||||
return item.id;
|
||||
});
|
||||
this.$confirm("此操作将删除该商品, 是否继续?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(() => {
|
||||
console.log("111");
|
||||
this.$api.mer_admin.BatchDeleteProducts(integers).then((res) => {
|
||||
this.$refs.oTable.reload();
|
||||
});
|
||||
})
|
||||
.catch(() => {
|
||||
this.$message({
|
||||
type: "info",
|
||||
message: "已取消删除",
|
||||
});
|
||||
});
|
||||
},
|
||||
queryList(pageNo, pageSize) {
|
||||
this.$api.mer_admin
|
||||
.orderPage({
|
||||
pageNumber: pageNo,
|
||||
pageSize: pageSize,
|
||||
group: 0,
|
||||
shopId: this.shopId,
|
||||
// ...this.formInline,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
this.$refs.oTable.complete(
|
||||
res.data.data.data,
|
||||
Number(res.data.data.total)
|
||||
);
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$refs.oTable.complete(false);
|
||||
});
|
||||
},
|
||||
Reset() {
|
||||
this.formInline = {
|
||||
name: "",
|
||||
marketId: JSON.parse(sessionStorage.getItem("userInfo")).markets[0]
|
||||
.marketId,
|
||||
};
|
||||
this.$refs.oTable.reload();
|
||||
},
|
||||
handleClick(e) {
|
||||
console.log(e.name);
|
||||
if (e.name == "5") {
|
||||
this.advanceSellStatus = "";
|
||||
} else {
|
||||
this.advanceSellStatus = e.name;
|
||||
}
|
||||
this.$refs.oTable.reload();
|
||||
},
|
||||
addEarlyWarning() {
|
||||
this.$refs.earlyWarning.toggle().add();
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
tableCols() {
|
||||
return [
|
||||
// { type: "checkbox", width: "60px", fixed: "left" },
|
||||
{ type: "seq", width: "60px", align: "center", title: "序号" },
|
||||
{
|
||||
title: "总订单号",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "orderNo",
|
||||
},
|
||||
{
|
||||
title: "结算单位订单号",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "unitOrderNo",
|
||||
},
|
||||
{
|
||||
// title: "结算单位订单状态",
|
||||
// align: "center",
|
||||
// width: "120px",
|
||||
// field: "unitOrderStatus",
|
||||
type: "jsx-out",
|
||||
render: (col) => {
|
||||
console.log(col);
|
||||
return (
|
||||
<content />
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "总商品数量",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "productCount",
|
||||
},
|
||||
{
|
||||
title: "顾客支付",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "totalMoney",
|
||||
},
|
||||
{
|
||||
title: "配送费",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "deliveryMoney",
|
||||
},
|
||||
{
|
||||
title: "优惠券减免",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "couponMoney",
|
||||
},
|
||||
{
|
||||
title: "下单时间",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "payTime",
|
||||
},
|
||||
{
|
||||
title: "预计送达时间",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "predictDeliveryTime",
|
||||
},
|
||||
{
|
||||
title: "预计收入",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "predictIncome",
|
||||
},
|
||||
{
|
||||
title: "距离",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "distance",
|
||||
},
|
||||
{
|
||||
title: "预计自动取消时间",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "predictAutoCancelTime",
|
||||
},
|
||||
{
|
||||
title: "备注",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "remark",
|
||||
},
|
||||
{
|
||||
title: "包装费",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "packageMoney",
|
||||
},
|
||||
{
|
||||
title: "平台服务费",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "platformMoney",
|
||||
},
|
||||
{
|
||||
title: "备餐完成时间",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "completePrepareTime",
|
||||
},
|
||||
{
|
||||
title: "开始配送时间",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "startDeliveryTime",
|
||||
},
|
||||
{
|
||||
title: "配送完成时间",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "startDeliveryTime",
|
||||
},
|
||||
{
|
||||
title: "开始配送时间",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "startDeliveryTime",
|
||||
},
|
||||
{
|
||||
title: "订单退款状态",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "refundStatus",
|
||||
},
|
||||
{
|
||||
title: "申请退款原因",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "refundReason",
|
||||
},
|
||||
{
|
||||
title: "订单商品",
|
||||
field: "productPhotoList",
|
||||
align: "center",
|
||||
width: "80px",
|
||||
type: "jsx",
|
||||
render: ({ row }) => {
|
||||
return (
|
||||
<el-image
|
||||
preview-src-list={[row.refundImg]}
|
||||
src={row.refundImg}
|
||||
></el-image>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "申请退款时间",
|
||||
align: "center",
|
||||
width: "120px",
|
||||
field: "applyRefundTime",
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
fixed: "right",
|
||||
type: "jsx",
|
||||
align: "center",
|
||||
width: "100px",
|
||||
render: ({ row }) => {
|
||||
let changeInventory = () => {
|
||||
this.$refs.addStock.toggle(row).update();
|
||||
};
|
||||
return (
|
||||
<div>
|
||||
<el-button size="mini" type="primary" onClick={changeInventory}>
|
||||
查看
|
||||
</el-button>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
tableEvent() {
|
||||
return {
|
||||
"checkbox-all": ({ records, reserves }) => {
|
||||
this.selectList = [...records, ...reserves];
|
||||
},
|
||||
"checkbox-change": ({ records, reserves }) => {
|
||||
this.selectList = [...records, ...reserves];
|
||||
},
|
||||
};
|
||||
},
|
||||
...mapState("userData", [
|
||||
"isMerchant",
|
||||
"marketList",
|
||||
"storeList",
|
||||
"marketId",
|
||||
"shopId",
|
||||
]),
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
|
@ -246,7 +246,7 @@
|
|||
<div>订单状态:{{ getBillStatus(item.billStatus) }}</div>
|
||||
</div>
|
||||
<div class="wallet-item">
|
||||
<div>{{ item.billTypeName }}</div>
|
||||
<div>{{ item.billTypeName }}:{{item.billAmount}}</div>
|
||||
<div>余额:{{ item.amountAfterChange }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue