feat: 会员明细设置接口对接
This commit is contained in:
parent
54da2cb353
commit
7e8cbdb6dd
|
@ -334,5 +334,14 @@ export const mer_admin = {
|
|||
},
|
||||
membershipEnableList: data => {
|
||||
return $http.post(`/merchant-api/membershipEnable/list`, data);
|
||||
},
|
||||
membershipEnableChange: data => {
|
||||
return $http.post(`/merchant-api/membershipEnable/changeEnable`, data);
|
||||
},
|
||||
membershipEnableGetSettings: data => {
|
||||
return $http.post(`/merchant-api/membershipEnable/getSettings`, data);
|
||||
},
|
||||
membershipEnableSaveSettings: data => {
|
||||
return $http.post(`/merchant-api/membershipEnable/saveSettings`, data);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -86,7 +86,7 @@
|
|||
align="center"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span :style="{ color: getLevelColor(scope.row.levelName) }">
|
||||
<span :style="{ color: getLevelColor(scope.row.level) }">
|
||||
{{ scope.row.levelName }}
|
||||
</span>
|
||||
</template>
|
||||
|
@ -94,21 +94,21 @@
|
|||
<el-table-column label="所需成长值" width="200" align="center">
|
||||
<template slot-scope="scope">
|
||||
<span style="color: #1890ff; font-weight: 500;">
|
||||
{{ scope.row.requiredGrowthValue }}
|
||||
{{ scope.row.startGrowthValue }}-{{ scope.row.endGrowthValue }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="会员人数" width="200" align="center">
|
||||
<template slot-scope="scope">
|
||||
<span style="color: #52c41a; font-weight: 500;">
|
||||
{{ scope.row.memberCount }}
|
||||
{{ scope.row.membershipCount }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="会员权益" align="left">
|
||||
<template slot-scope="scope">
|
||||
<span style="color: #666; line-height: 1.5;">
|
||||
{{ scope.row.memberBenefits }}
|
||||
{{ generateMemberBenefits(scope.row) }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
@ -129,32 +129,29 @@
|
|||
align="center"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span :style="{ color: getLevelColor(scope.row.levelName) }">
|
||||
{{ scope.row.levelName }}
|
||||
<span :style="{ color: getLevelColor(scope.row.level) }">
|
||||
{{ scope.row.level }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="等级名称" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-input
|
||||
v-model="scope.row.levelDisplayName"
|
||||
size="mini"
|
||||
></el-input>
|
||||
<el-input v-model="scope.row.levelName" size="mini"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="成长值范围" width="280" align="center">
|
||||
<template slot-scope="scope">
|
||||
<div class="growth-range">
|
||||
<el-input-number
|
||||
v-model="scope.row.minGrowthValue"
|
||||
v-model="scope.row.startGrowthValue"
|
||||
:min="0"
|
||||
size="mini"
|
||||
style="width: 120px;"
|
||||
></el-input-number>
|
||||
<span style="margin: 0 5px;">-</span>
|
||||
<el-input-number
|
||||
v-model="scope.row.maxGrowthValue"
|
||||
:min="scope.row.minGrowthValue"
|
||||
v-model="scope.row.endGrowthValue"
|
||||
:min="scope.row.startGrowthValue"
|
||||
size="mini"
|
||||
style="width: 120px;"
|
||||
></el-input-number>
|
||||
|
@ -177,20 +174,20 @@
|
|||
></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开启会员兑换" width="120" align="center">
|
||||
<el-table-column label="开启积分兑换" width="120" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-switch v-model="scope.row.enableExchange"></el-switch>
|
||||
<el-switch v-model="scope.row.enablePointsRedemption"></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开启生日优惠券" width="130" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-switch v-model="scope.row.enableBirthdayCoupon"></el-switch>
|
||||
<el-switch v-model="scope.row.enableBirthdayCoupons"></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="生日优惠券操作" width="130" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
v-if="scope.row.enableBirthdayCoupon"
|
||||
v-if="scope.row.enableBirthdayCoupons"
|
||||
type="primary"
|
||||
size="mini"
|
||||
@click="handleAddCoupon(scope.row)"
|
||||
|
@ -199,9 +196,29 @@
|
|||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开启生日双倍积分" width="140" align="center">
|
||||
<el-table-column label="开启生日双倍积分" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-switch v-model="scope.row.enableBirthdayPoints"></el-switch>
|
||||
<el-switch v-model="scope.row.enableBirthdayReward"></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="primary"
|
||||
size="mini"
|
||||
@click="handleAddLevel(scope.$index)"
|
||||
style="margin-right: 5px;"
|
||||
>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
size="mini"
|
||||
@click="handleDeleteLevel(scope.$index)"
|
||||
:disabled="editLevelData.length <= 1"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
@ -310,10 +327,70 @@
|
|||
:close-on-click-modal="false"
|
||||
>
|
||||
<div class="sign-in-form">
|
||||
<div class="form-item" v-for="day in 7" :key="day">
|
||||
<span class="label">连续签到{{ day }}天</span>
|
||||
<div class="form-item">
|
||||
<span class="label">连续签到1天</span>
|
||||
<el-input-number
|
||||
v-model="signInForm[`day${day}`]"
|
||||
v-model="dailySignSettings.taskConfigDetail.oneDay"
|
||||
:min="0"
|
||||
:max="100"
|
||||
size="small"
|
||||
controls-position="right"
|
||||
></el-input-number>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="label">连续签到2天</span>
|
||||
<el-input-number
|
||||
v-model="dailySignSettings.taskConfigDetail.twoDay"
|
||||
:min="0"
|
||||
:max="100"
|
||||
size="small"
|
||||
controls-position="right"
|
||||
></el-input-number>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="label">连续签到3天</span>
|
||||
<el-input-number
|
||||
v-model="dailySignSettings.taskConfigDetail.threeDay"
|
||||
:min="0"
|
||||
:max="100"
|
||||
size="small"
|
||||
controls-position="right"
|
||||
></el-input-number>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="label">连续签到4天</span>
|
||||
<el-input-number
|
||||
v-model="dailySignSettings.taskConfigDetail.fourDay"
|
||||
:min="0"
|
||||
:max="100"
|
||||
size="small"
|
||||
controls-position="right"
|
||||
></el-input-number>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="label">连续签到5天</span>
|
||||
<el-input-number
|
||||
v-model="dailySignSettings.taskConfigDetail.fiveDay"
|
||||
:min="0"
|
||||
:max="100"
|
||||
size="small"
|
||||
controls-position="right"
|
||||
></el-input-number>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="label">连续签到6天</span>
|
||||
<el-input-number
|
||||
v-model="dailySignSettings.taskConfigDetail.sixDay"
|
||||
:min="0"
|
||||
:max="100"
|
||||
size="small"
|
||||
controls-position="right"
|
||||
></el-input-number>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="label">连续签到7天</span>
|
||||
<el-input-number
|
||||
v-model="dailySignSettings.taskConfigDetail.sevenDay"
|
||||
:min="0"
|
||||
:max="100"
|
||||
size="small"
|
||||
|
@ -338,7 +415,7 @@
|
|||
<div class="form-item">
|
||||
<span class="label">每浏览1个商品积分增加</span>
|
||||
<el-input-number
|
||||
v-model="browseForm.pointsPerProduct"
|
||||
v-model="viewGoodsSettings.taskConfigDetail.oneGoodsViewPoints"
|
||||
:min="0"
|
||||
:max="100"
|
||||
size="small"
|
||||
|
@ -348,7 +425,7 @@
|
|||
<div class="form-item">
|
||||
<span class="label">该任务每日最高可获积分</span>
|
||||
<el-input-number
|
||||
v-model="browseForm.maxPointsPerDay"
|
||||
v-model="viewGoodsSettings.taskConfigDetail.dailyPointsLimit"
|
||||
:min="0"
|
||||
:max="1000"
|
||||
size="small"
|
||||
|
@ -373,7 +450,7 @@
|
|||
<div class="form-item">
|
||||
<span class="label">购买商品实付</span>
|
||||
<el-input-number
|
||||
v-model="purchaseForm.pointsPerYuan"
|
||||
v-model="buyGoodsSettings.taskConfigDetail.pointsRatioAmount"
|
||||
:min="0"
|
||||
:max="100"
|
||||
size="small"
|
||||
|
@ -384,7 +461,7 @@
|
|||
<div class="form-item">
|
||||
<span class="label">该任务每日最高获得</span>
|
||||
<el-input-number
|
||||
v-model="purchaseForm.maxPointsPerDay"
|
||||
v-model="buyGoodsSettings.taskConfigDetail.dailyPointsLimit"
|
||||
:min="0"
|
||||
:max="10000"
|
||||
size="small"
|
||||
|
@ -410,7 +487,7 @@
|
|||
<div class="form-item">
|
||||
<span class="label">每分享1个商品1次获得</span>
|
||||
<el-input-number
|
||||
v-model="shareForm.pointsPerShare"
|
||||
v-model="shareGoodsSettings.taskConfigDetail.oneSharePoints"
|
||||
:min="0"
|
||||
:max="100"
|
||||
size="small"
|
||||
|
@ -421,7 +498,7 @@
|
|||
<div class="form-item">
|
||||
<span class="label">该任务每日最高获得</span>
|
||||
<el-input-number
|
||||
v-model="shareForm.maxPointsPerDay"
|
||||
v-model="shareGoodsSettings.taskConfigDetail.dailyPointsLimit"
|
||||
:min="0"
|
||||
:max="1000"
|
||||
size="small"
|
||||
|
@ -445,9 +522,22 @@
|
|||
>
|
||||
<div class="review-form">
|
||||
<div class="form-item">
|
||||
<span class="label">评价1个商品获得</span>
|
||||
<span class="label">文字评价1个商品获得</span>
|
||||
<el-input-number
|
||||
v-model="reviewForm.pointsPerReview"
|
||||
v-model="commentGoodsSettings.taskConfigDetail.textCommentPoints"
|
||||
:min="0"
|
||||
:max="100"
|
||||
size="small"
|
||||
controls-position="right"
|
||||
></el-input-number>
|
||||
<span class="unit">积分</span>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="label">图文评价1个商品获得</span>
|
||||
<el-input-number
|
||||
v-model="
|
||||
commentGoodsSettings.taskConfigDetail.imageTextCommentPoints
|
||||
"
|
||||
:min="0"
|
||||
:max="100"
|
||||
size="small"
|
||||
|
@ -458,7 +548,7 @@
|
|||
<div class="form-item">
|
||||
<span class="label">该任务每日最高获得</span>
|
||||
<el-input-number
|
||||
v-model="reviewForm.maxPointsPerDay"
|
||||
v-model="commentGoodsSettings.taskConfigDetail.dailyPointsLimit"
|
||||
:min="0"
|
||||
:max="1000"
|
||||
size="small"
|
||||
|
@ -485,6 +575,7 @@ export default {
|
|||
isEditMode: false,
|
||||
shopId: "", // 店铺ID
|
||||
shopName: "", // 店铺名称
|
||||
recordId: null, // 记录ID,用于调用接口获取设置数据
|
||||
isBatchMode: false, // 是否为批量编辑模式
|
||||
selectedShopIds: [], // 选中的店铺ID列表
|
||||
availableShops: [], // 可选择的店铺列表
|
||||
|
@ -504,30 +595,56 @@ export default {
|
|||
minAmount: "",
|
||||
validityPeriod: ""
|
||||
},
|
||||
signInForm: {
|
||||
day1: 0,
|
||||
day2: 0,
|
||||
day3: 0,
|
||||
day4: 0,
|
||||
day5: 0,
|
||||
day6: 0,
|
||||
day7: 0
|
||||
// 积分任务设置数据(按接口格式)
|
||||
dailySignSettings: {
|
||||
taskEnable: false,
|
||||
taskConfigDetail: {
|
||||
oneDay: 0,
|
||||
twoDay: 0,
|
||||
threeDay: 0,
|
||||
fourDay: 0,
|
||||
fiveDay: 0,
|
||||
sixDay: 0,
|
||||
sevenDay: 0
|
||||
},
|
||||
taskDesc: ""
|
||||
},
|
||||
browseForm: {
|
||||
pointsPerProduct: 0,
|
||||
maxPointsPerDay: 0
|
||||
viewGoodsSettings: {
|
||||
taskEnable: false,
|
||||
taskConfigDetail: {
|
||||
oneGoodsViewPoints: 0,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 0
|
||||
},
|
||||
taskDesc: ""
|
||||
},
|
||||
purchaseForm: {
|
||||
pointsPerYuan: 0,
|
||||
maxPointsPerDay: 0
|
||||
buyGoodsSettings: {
|
||||
taskEnable: false,
|
||||
taskConfigDetail: {
|
||||
pointsRatioAmount: 0,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 0
|
||||
},
|
||||
taskDesc: ""
|
||||
},
|
||||
shareForm: {
|
||||
pointsPerShare: 0,
|
||||
maxPointsPerDay: 0
|
||||
shareGoodsSettings: {
|
||||
taskEnable: false,
|
||||
taskConfigDetail: {
|
||||
oneSharePoints: 0,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 0
|
||||
},
|
||||
taskDesc: ""
|
||||
},
|
||||
reviewForm: {
|
||||
pointsPerReview: 0,
|
||||
maxPointsPerDay: 0
|
||||
commentGoodsSettings: {
|
||||
taskEnable: false,
|
||||
taskConfigDetail: {
|
||||
textCommentPoints: 0,
|
||||
imageTextCommentPoints: 0,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 0
|
||||
},
|
||||
taskDesc: ""
|
||||
},
|
||||
editPointsValidityDays: 365,
|
||||
levelDetailData: [
|
||||
|
@ -589,38 +706,6 @@ export default {
|
|||
}
|
||||
],
|
||||
editLevelData: [],
|
||||
pointsTaskData: [
|
||||
{
|
||||
taskName: "每日签到",
|
||||
taskDescription: "第一天签到1分,第二天2分,第三天3分,连续7天1折",
|
||||
isEnabled: true
|
||||
},
|
||||
{
|
||||
taskName: "浏览商品",
|
||||
taskDescription: "浏览一个商品获得1分,每天最多获得2分",
|
||||
isEnabled: true
|
||||
},
|
||||
{
|
||||
taskName: "购买商品",
|
||||
taskDescription: "购买1元=1分,每天最多获得500分",
|
||||
isEnabled: true
|
||||
},
|
||||
{
|
||||
taskName: "分享商品",
|
||||
taskDescription: "分享一个商品获得5分,每天最多获得3次",
|
||||
isEnabled: false
|
||||
},
|
||||
{
|
||||
taskName: "评价商品",
|
||||
taskDescription: "评价一个商品获得3分,每天最多获得5次",
|
||||
isEnabled: true
|
||||
},
|
||||
{
|
||||
taskName: "评价商品",
|
||||
taskDescription: "评价一个商品获得10分,文字评价+4图可获得20分",
|
||||
isEnabled: false
|
||||
}
|
||||
],
|
||||
editPointsTaskData: []
|
||||
};
|
||||
},
|
||||
|
@ -631,6 +716,7 @@ export default {
|
|||
// 从路由参数获取店铺信息
|
||||
this.shopId = this.$route.query.shopId;
|
||||
this.shopName = this.$route.query.shopName;
|
||||
this.recordId = this.$route.query.id;
|
||||
|
||||
// 检查是否为批量编辑模式
|
||||
this.isBatchMode = this.$route.query.mode === "batch";
|
||||
|
@ -648,9 +734,36 @@ export default {
|
|||
} else if (this.shopId && this.shopName) {
|
||||
// 单独店铺模式:默认进入查看模式
|
||||
this.isEditMode = false;
|
||||
|
||||
// 如果有记录ID,获取设置数据进行回显
|
||||
if (this.recordId) {
|
||||
this.loadSettingsData();
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 获取默认的等级数据
|
||||
getDefaultLevelData() {
|
||||
return [
|
||||
{
|
||||
level: "LV1",
|
||||
levelName: "等级1",
|
||||
startGrowthValue: 0,
|
||||
endGrowthValue: 100,
|
||||
enableDiscount: false,
|
||||
discountRate: 0,
|
||||
enablePointsRedemption: false,
|
||||
enableBirthdayCoupons: false,
|
||||
birthdayCouponsName: "",
|
||||
birthdayCouponsThreshold: 0,
|
||||
birthdayCouponsMinus: 0,
|
||||
couponsEffectiveTimeType: 1,
|
||||
enableBirthdayReward: false,
|
||||
membershipCount: 0
|
||||
}
|
||||
];
|
||||
},
|
||||
|
||||
// 重置页面状态
|
||||
resetPageState() {
|
||||
// 重置编辑状态
|
||||
|
@ -660,11 +773,13 @@ export default {
|
|||
// 重置店铺相关数据
|
||||
this.shopId = "";
|
||||
this.shopName = "";
|
||||
this.recordId = null;
|
||||
this.selectedShopIds = [];
|
||||
this.availableShops = [];
|
||||
this.isAllSelected = false;
|
||||
|
||||
// 重置编辑数据
|
||||
this.levelDetailData = [];
|
||||
this.editLevelData = [];
|
||||
this.editPointsTaskData = [];
|
||||
this.editPointsValidityDays = 365;
|
||||
|
@ -684,33 +799,239 @@ export default {
|
|||
minAmount: "",
|
||||
validityPeriod: ""
|
||||
};
|
||||
this.signInForm = {
|
||||
day1: 0,
|
||||
day2: 0,
|
||||
day3: 0,
|
||||
day4: 0,
|
||||
day5: 0,
|
||||
day6: 0,
|
||||
day7: 0
|
||||
|
||||
// 重置积分任务设置数据
|
||||
this.dailySignSettings = {
|
||||
taskEnable: false,
|
||||
taskConfigDetail: {
|
||||
oneDay: 0,
|
||||
twoDay: 0,
|
||||
threeDay: 0,
|
||||
fourDay: 0,
|
||||
fiveDay: 0,
|
||||
sixDay: 0,
|
||||
sevenDay: 0
|
||||
},
|
||||
taskDesc: ""
|
||||
};
|
||||
this.browseForm = {
|
||||
pointsPerProduct: 0,
|
||||
maxPointsPerDay: 0
|
||||
this.viewGoodsSettings = {
|
||||
taskEnable: false,
|
||||
taskConfigDetail: {
|
||||
oneGoodsViewPoints: 0,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 0
|
||||
},
|
||||
taskDesc: ""
|
||||
};
|
||||
this.purchaseForm = {
|
||||
pointsPerYuan: 0,
|
||||
maxPointsPerDay: 0
|
||||
this.buyGoodsSettings = {
|
||||
taskEnable: false,
|
||||
taskConfigDetail: {
|
||||
pointsRatioAmount: 0,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 0
|
||||
},
|
||||
taskDesc: ""
|
||||
};
|
||||
this.shareForm = {
|
||||
pointsPerShare: 0,
|
||||
maxPointsPerDay: 0
|
||||
this.shareGoodsSettings = {
|
||||
taskEnable: false,
|
||||
taskConfigDetail: {
|
||||
oneSharePoints: 0,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 0
|
||||
},
|
||||
taskDesc: ""
|
||||
};
|
||||
this.reviewForm = {
|
||||
pointsPerReview: 0,
|
||||
maxPointsPerDay: 0
|
||||
this.commentGoodsSettings = {
|
||||
taskEnable: false,
|
||||
taskConfigDetail: {
|
||||
textCommentPoints: 0,
|
||||
imageTextCommentPoints: 0,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 0
|
||||
},
|
||||
taskDesc: ""
|
||||
};
|
||||
},
|
||||
|
||||
// 加载设置数据并进行回显
|
||||
loadSettingsData() {
|
||||
if (!this.recordId) {
|
||||
// 没有记录ID时,查看模式下不显示数据,编辑模式下使用默认数据
|
||||
this.levelDetailData = [];
|
||||
return;
|
||||
}
|
||||
|
||||
this.$api.mer_admin
|
||||
.membershipEnableGetSettings({
|
||||
id: this.recordId
|
||||
})
|
||||
.then(res => {
|
||||
console.log("获取会员设置数据:", res);
|
||||
if (res.data && res.data.code == 200) {
|
||||
const settingsData = res.data.data;
|
||||
this.applySettingsData(settingsData);
|
||||
} else {
|
||||
console.error("获取设置数据失败:", res.data?.message);
|
||||
// 获取失败时,查看模式下不显示数据
|
||||
this.levelDetailData = [];
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.error("获取会员设置失败:", err);
|
||||
// 接口调用失败时,查看模式下不显示数据
|
||||
this.levelDetailData = [];
|
||||
});
|
||||
},
|
||||
|
||||
// 应用设置数据到表单
|
||||
applySettingsData(settingsData) {
|
||||
if (!settingsData) {
|
||||
// 如果获取不到设置,查看模式下不显示数据
|
||||
this.levelDetailData = [];
|
||||
return;
|
||||
}
|
||||
|
||||
// 回显积分有效天数
|
||||
if (settingsData.pointsValidDays) {
|
||||
this.pointsValidityDays = settingsData.pointsValidDays;
|
||||
}
|
||||
|
||||
// 回显会员等级设置列表
|
||||
if (
|
||||
settingsData.levelSettingsList &&
|
||||
settingsData.levelSettingsList.length > 0
|
||||
) {
|
||||
this.levelDetailData = settingsData.levelSettingsList.map(level => ({
|
||||
level: level.level,
|
||||
levelName: level.levelName,
|
||||
startGrowthValue: level.startGrowthValue,
|
||||
endGrowthValue: level.endGrowthValue,
|
||||
enableDiscount: level.enableDiscount,
|
||||
discountRate: level.discountRate,
|
||||
enablePointsRedemption: level.enablePointsRedemption,
|
||||
enableBirthdayCoupons: level.enableBirthdayCoupons,
|
||||
birthdayCouponsName: level.birthdayCouponsName || "",
|
||||
birthdayCouponsThreshold: level.birthdayCouponsThreshold || 0,
|
||||
birthdayCouponsMinus: level.birthdayCouponsMinus || 0,
|
||||
couponsEffectiveTimeType: level.couponsEffectiveTimeType || 1,
|
||||
enableBirthdayReward: level.enableBirthdayReward,
|
||||
membershipCount: level.membershipCount || 0
|
||||
}));
|
||||
} else {
|
||||
// 如果没有等级设置列表,查看模式下不显示数据
|
||||
this.levelDetailData = [];
|
||||
}
|
||||
|
||||
// 直接使用接口数据,不做映射
|
||||
if (settingsData.dailySignSettings) {
|
||||
this.dailySignSettings = { ...settingsData.dailySignSettings };
|
||||
}
|
||||
|
||||
if (settingsData.viewGoodsSettings) {
|
||||
this.viewGoodsSettings = { ...settingsData.viewGoodsSettings };
|
||||
}
|
||||
|
||||
if (settingsData.buyGoodsSettings) {
|
||||
this.buyGoodsSettings = { ...settingsData.buyGoodsSettings };
|
||||
}
|
||||
|
||||
if (settingsData.shareGoodsSettings) {
|
||||
this.shareGoodsSettings = { ...settingsData.shareGoodsSettings };
|
||||
}
|
||||
|
||||
if (settingsData.commentGoodsSettings) {
|
||||
this.commentGoodsSettings = { ...settingsData.commentGoodsSettings };
|
||||
}
|
||||
|
||||
console.log("数据回显完成");
|
||||
},
|
||||
|
||||
// 生成会员权益描述
|
||||
generateMemberBenefits(level) {
|
||||
const benefits = [];
|
||||
|
||||
if (level.enableDiscount && level.discountRate) {
|
||||
const discount = (100 - level.discountRate) / 10;
|
||||
benefits.push(`享受${discount}折优惠`);
|
||||
}
|
||||
|
||||
if (level.enablePointsRedemption) {
|
||||
benefits.push("积分兑换商品");
|
||||
}
|
||||
|
||||
if (level.enableBirthdayCoupons) {
|
||||
benefits.push("生日专属优惠券");
|
||||
}
|
||||
|
||||
if (level.enableBirthdayReward) {
|
||||
benefits.push("生日双倍积分");
|
||||
}
|
||||
|
||||
return benefits.length > 0 ? benefits.join(",") : "暂无特殊权益";
|
||||
},
|
||||
|
||||
// 保存设置数据
|
||||
saveSettingsData() {
|
||||
const saveData = {
|
||||
shopIdList: this.isBatchMode ? this.selectedShopIds : [this.shopId],
|
||||
pointsValidDays: this.pointsValidityDays,
|
||||
enable: true,
|
||||
levelSettingsList: this.levelDetailData.map(level => ({
|
||||
level: level.level,
|
||||
levelName: level.levelName,
|
||||
startGrowthValue: level.startGrowthValue,
|
||||
endGrowthValue: level.endGrowthValue,
|
||||
enableDiscount: level.enableDiscount,
|
||||
discountRate: level.discountRate,
|
||||
enablePointsRedemption: level.enablePointsRedemption,
|
||||
enableBirthdayCoupons: level.enableBirthdayCoupons,
|
||||
birthdayCouponsName: level.birthdayCouponsName,
|
||||
birthdayCouponsThreshold: level.birthdayCouponsThreshold,
|
||||
birthdayCouponsMinus: level.birthdayCouponsMinus,
|
||||
couponsEffectiveTimeType: level.couponsEffectiveTimeType,
|
||||
enableBirthdayReward: level.enableBirthdayReward,
|
||||
membershipCount: level.membershipCount
|
||||
})),
|
||||
dailySignSettings: {
|
||||
...this.dailySignSettings,
|
||||
taskDesc: "第一天签到1分,第二天2分,第三天3分,连续7天10分"
|
||||
},
|
||||
buyGoodsSettings: {
|
||||
...this.buyGoodsSettings,
|
||||
taskDesc: "购买1元=1分,每天最多获得500分"
|
||||
},
|
||||
shareGoodsSettings: {
|
||||
...this.shareGoodsSettings,
|
||||
taskDesc: "分享一个商品获得5分,每天最多获得3次"
|
||||
},
|
||||
commentGoodsSettings: {
|
||||
...this.commentGoodsSettings,
|
||||
taskDesc: "评价一个商品获得3分,每天最多获得5次"
|
||||
},
|
||||
viewGoodsSettings: {
|
||||
...this.viewGoodsSettings,
|
||||
taskDesc: "浏览一个商品获得1分,每天最多获得2分"
|
||||
}
|
||||
};
|
||||
|
||||
console.log("保存数据:", saveData);
|
||||
|
||||
this.$api.mer_admin
|
||||
.membershipEnableSaveSettings(saveData)
|
||||
.then(res => {
|
||||
console.log("保存设置数据:", res);
|
||||
if (res.data && res.data.code == 200) {
|
||||
this.$message.success("设置保存成功");
|
||||
} else {
|
||||
this.$message.error(res.data?.message || "保存失败");
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.error("保存设置失败:", err);
|
||||
this.$message.error("保存失败");
|
||||
});
|
||||
},
|
||||
|
||||
goBack() {
|
||||
// 获取当前路由名称
|
||||
const currentRouteName = this.$route.name;
|
||||
|
@ -792,9 +1113,14 @@ export default {
|
|||
|
||||
handleEditLevel() {
|
||||
this.isEditMode = true;
|
||||
// 如果没有等级数据,使用默认数据
|
||||
if (this.levelDetailData.length === 0) {
|
||||
this.levelDetailData = this.getDefaultLevelData();
|
||||
}
|
||||
// 深拷贝数据用于编辑
|
||||
this.editLevelData = JSON.parse(JSON.stringify(this.levelDetailData));
|
||||
this.editPointsTaskData = JSON.parse(JSON.stringify(this.pointsTaskData));
|
||||
console.log(this.editPointsTaskData);
|
||||
this.editPointsValidityDays = this.pointsValidityDays;
|
||||
},
|
||||
|
||||
|
@ -812,11 +1138,58 @@ export default {
|
|||
handleSaveEdit() {
|
||||
// 保存编辑的数据
|
||||
this.levelDetailData = JSON.parse(JSON.stringify(this.editLevelData));
|
||||
this.pointsTaskData = JSON.parse(JSON.stringify(this.editPointsTaskData));
|
||||
this.pointsValidityDays = this.editPointsValidityDays;
|
||||
|
||||
this.isEditMode = false;
|
||||
this.$message.success("保存成功");
|
||||
|
||||
// 调用保存接口
|
||||
this.saveSettingsData();
|
||||
},
|
||||
|
||||
// 新增会员等级
|
||||
handleAddLevel(index) {
|
||||
// 创建新的等级数据
|
||||
const newLevel = {
|
||||
level: `LV${this.editLevelData.length + 1}`,
|
||||
levelName: `等级${this.editLevelData.length + 1}`,
|
||||
startGrowthValue: 0,
|
||||
endGrowthValue: 0,
|
||||
enableDiscount: false,
|
||||
discountRate: 0,
|
||||
enablePointsRedemption: false,
|
||||
enableBirthdayCoupons: false,
|
||||
birthdayCouponsName: "",
|
||||
birthdayCouponsThreshold: 0,
|
||||
birthdayCouponsMinus: 0,
|
||||
couponsEffectiveTimeType: 1,
|
||||
enableBirthdayReward: false,
|
||||
membershipCount: 0
|
||||
};
|
||||
|
||||
// 在指定位置后插入新等级
|
||||
this.editLevelData.splice(index + 1, 0, newLevel);
|
||||
this.$message.success("新增等级成功");
|
||||
},
|
||||
|
||||
// 删除会员等级
|
||||
handleDeleteLevel(index) {
|
||||
if (this.editLevelData.length <= 1) {
|
||||
this.$message.warning("至少需要保留一个等级");
|
||||
return;
|
||||
}
|
||||
|
||||
this.$confirm("确定要删除这个等级吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
})
|
||||
.then(() => {
|
||||
this.editLevelData.splice(index, 1);
|
||||
this.$message.success("删除等级成功");
|
||||
})
|
||||
.catch(() => {
|
||||
// 用户取消删除
|
||||
});
|
||||
},
|
||||
|
||||
handleAddCoupon() {
|
||||
|
@ -832,78 +1205,98 @@ export default {
|
|||
// 弹框相关方法
|
||||
handleEditSignIn() {
|
||||
this.showSignInDialog = true;
|
||||
this.signInForm = {
|
||||
day1: 1,
|
||||
day2: 2,
|
||||
day3: 3,
|
||||
day4: 4,
|
||||
day5: 5,
|
||||
day6: 6,
|
||||
day7: 10
|
||||
};
|
||||
// 如果没有记录ID,设置默认值
|
||||
if (!this.recordId) {
|
||||
this.dailySignSettings.taskConfigDetail = {
|
||||
oneDay: 1,
|
||||
twoDay: 2,
|
||||
threeDay: 3,
|
||||
fourDay: 4,
|
||||
fiveDay: 5,
|
||||
sixDay: 6,
|
||||
sevenDay: 10
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
handleEditBrowse() {
|
||||
this.showBrowseDialog = true;
|
||||
this.browseForm = {
|
||||
pointsPerProduct: 1,
|
||||
maxPointsPerDay: 2
|
||||
};
|
||||
// 如果没有记录ID,设置默认值
|
||||
if (!this.recordId) {
|
||||
this.viewGoodsSettings.taskConfigDetail = {
|
||||
oneGoodsViewPoints: 1,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 2
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
handleEditPurchase() {
|
||||
this.showPurchaseDialog = true;
|
||||
this.purchaseForm = {
|
||||
pointsPerYuan: 1,
|
||||
maxPointsPerDay: 500
|
||||
};
|
||||
// 如果没有记录ID,设置默认值
|
||||
if (!this.recordId) {
|
||||
this.buyGoodsSettings.taskConfigDetail = {
|
||||
pointsRatioAmount: 1,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 500
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
handleEditShare() {
|
||||
this.showShareDialog = true;
|
||||
this.shareForm = {
|
||||
pointsPerShare: 5,
|
||||
maxPointsPerDay: 15
|
||||
};
|
||||
// 如果没有记录ID,设置默认值
|
||||
if (!this.recordId) {
|
||||
this.shareGoodsSettings.taskConfigDetail = {
|
||||
oneSharePoints: 5,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 15
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
handleEditReview() {
|
||||
this.showReviewDialog = true;
|
||||
this.reviewForm = {
|
||||
pointsPerReview: 3,
|
||||
maxPointsPerDay: 15
|
||||
};
|
||||
// 如果没有记录ID,设置默认值
|
||||
if (!this.recordId) {
|
||||
this.commentGoodsSettings.taskConfigDetail = {
|
||||
textCommentPoints: 3,
|
||||
imageTextCommentPoints: 5,
|
||||
enableDailyPointsLimit: true,
|
||||
dailyPointsLimit: 15
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
// 保存弹框数据
|
||||
saveCouponForm() {
|
||||
this.$message.success("优惠券添加成功");
|
||||
// this.$message.success("优惠券添加成功");
|
||||
this.showCouponDialog = false;
|
||||
},
|
||||
|
||||
saveSignInForm() {
|
||||
this.$message.success("每日签到设置保存成功");
|
||||
this.showSignInDialog = false;
|
||||
// this.$message.success("每日签到设置已更新");
|
||||
},
|
||||
|
||||
saveBrowseForm() {
|
||||
this.$message.success("浏览商品设置保存成功");
|
||||
this.showBrowseDialog = false;
|
||||
// this.$message.success("浏览商品设置已更新");
|
||||
},
|
||||
|
||||
savePurchaseForm() {
|
||||
this.$message.success("购买商品设置保存成功");
|
||||
this.showPurchaseDialog = false;
|
||||
// this.$message.success("购买商品设置已更新");
|
||||
},
|
||||
|
||||
saveShareForm() {
|
||||
this.$message.success("分享商品设置保存成功");
|
||||
this.showShareDialog = false;
|
||||
// this.$message.success("分享商品设置已更新");
|
||||
},
|
||||
|
||||
saveReviewForm() {
|
||||
this.$message.success("评价商品设置保存成功");
|
||||
this.showReviewDialog = false;
|
||||
// this.$message.success("评价商品设置已更新");
|
||||
},
|
||||
|
||||
handleEditTask(row) {
|
||||
|
@ -944,7 +1337,38 @@ export default {
|
|||
"marketList",
|
||||
"storeList",
|
||||
"marketId"
|
||||
])
|
||||
]),
|
||||
|
||||
// 积分任务数据,固定任务描述,开启状态从设置对象中获取
|
||||
pointsTaskData() {
|
||||
return [
|
||||
{
|
||||
taskName: "每日签到",
|
||||
taskDescription: "第一天签到1分,第二天2分,第三天3分,连续7天10分",
|
||||
isEnabled: this.dailySignSettings.taskEnable
|
||||
},
|
||||
{
|
||||
taskName: "浏览商品",
|
||||
taskDescription: "浏览一个商品获得1分,每天最多获得2分",
|
||||
isEnabled: this.viewGoodsSettings.taskEnable
|
||||
},
|
||||
{
|
||||
taskName: "购买商品",
|
||||
taskDescription: "购买1元=1分,每天最多获得500分",
|
||||
isEnabled: this.buyGoodsSettings.taskEnable
|
||||
},
|
||||
{
|
||||
taskName: "分享商品",
|
||||
taskDescription: "分享一个商品获得5分,每天最多获得3次",
|
||||
isEnabled: this.shareGoodsSettings.taskEnable
|
||||
},
|
||||
{
|
||||
taskName: "评价商品",
|
||||
taskDescription: "评价一个商品获得3分,每天最多获得5次",
|
||||
isEnabled: this.commentGoodsSettings.taskEnable
|
||||
}
|
||||
];
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -92,6 +92,10 @@ export default {
|
|||
created() {
|
||||
this.initData();
|
||||
},
|
||||
activated() {
|
||||
// 每次进入页面都刷新数据,确保数据是最新的
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
initData() {
|
||||
// 默认选择所有摊铺
|
||||
|
@ -132,18 +136,40 @@ export default {
|
|||
},
|
||||
|
||||
handleMemberToggle(row) {
|
||||
// 处理会员启用/禁用
|
||||
console.log(
|
||||
"Toggle member for shop:",
|
||||
row.shopName,
|
||||
"Enable:",
|
||||
row.enable
|
||||
);
|
||||
// 这里应该调用API更新状态
|
||||
// 可以根据需要添加更新接口调用
|
||||
this.$message.success(
|
||||
`${row.shopName} 会员功能已${row.enable ? "启用" : "禁用"}`
|
||||
);
|
||||
// 检查是否有ID字段,没有则提示先设置会员等级明细
|
||||
if (!row.id) {
|
||||
// 恢复开关状态
|
||||
row.enable = !row.enable;
|
||||
this.$message.warning("请先设置会员等级明细");
|
||||
return;
|
||||
}
|
||||
|
||||
// 调用API更新状态
|
||||
this.$api.mer_admin
|
||||
.membershipEnableChange({
|
||||
id: row.id,
|
||||
enable: row.enable
|
||||
})
|
||||
.then(res => {
|
||||
console.log("修改会员状态响应:", res);
|
||||
if (res.data && res.data.code == 200) {
|
||||
this.$message.success(
|
||||
`${row.shopName} 会员功能已${row.enable ? "启用" : "禁用"}`
|
||||
);
|
||||
// 修改成功后刷新列表
|
||||
this.getList();
|
||||
} else {
|
||||
// 修改失败,恢复开关状态
|
||||
row.enable = !row.enable;
|
||||
this.$message.error(res.data?.message || "修改会员状态失败");
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.error("修改会员状态失败:", err);
|
||||
// 修改失败,恢复开关状态
|
||||
row.enable = !row.enable;
|
||||
this.$message.error("修改会员状态失败");
|
||||
});
|
||||
},
|
||||
|
||||
// 关闭已打开的等级明细页面
|
||||
|
@ -159,14 +185,15 @@ export default {
|
|||
// 先关闭已打开的等级明细页面
|
||||
this.closeLevelDetailTab();
|
||||
|
||||
// 直接跳转到等级明细页面
|
||||
setTimeout(() => {
|
||||
// 跳转到等级明细页面,添加时间戳确保页面刷新
|
||||
this.$router.push({
|
||||
name: "marketing-level-detail",
|
||||
query: {
|
||||
shopId: row.shopId,
|
||||
shopName: row.shopName,
|
||||
timestamp: Date.now() // 添加时间戳确保每次跳转都是新的
|
||||
id: row.id || null,
|
||||
timestamp: Date.now()
|
||||
}
|
||||
});
|
||||
}, 200);
|
||||
|
|
Loading…
Reference in New Issue