fix: 修改订单计算逻辑
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<el-switch v-model="isOpen" v-if="props.showSwitch" />
|
||||
<el-switch v-model="isOpen" active-value="1" inactive-value="0" v-if="props.showSwitch" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<el-form-item label="周期价格" required>
|
||||
<el-input v-model="form.price" placeholder="周期价格" type="number" />
|
||||
</el-form-item>
|
||||
<el-form-item label="赠送成长值" required>
|
||||
<el-form-item label="赠送成长值">
|
||||
<el-input v-model="form.reward" placeholder="开通后立刻获得经验" type="number" />
|
||||
</el-form-item>
|
||||
<el-form-item label="赠送优惠券">
|
||||
@@ -117,6 +117,9 @@ function submit() {
|
||||
ElMessage.error("请选择会员周期");
|
||||
return;
|
||||
}
|
||||
if (!form.value.circleUnit) {
|
||||
ElMessage.error("请选择会员周期单位");
|
||||
}
|
||||
const ispass = form.value.couponList.every((item) => item.num && item.coupon.id);
|
||||
if (!ispass) {
|
||||
ElMessage.error("请选择优惠券并输入数量");
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
intro="用户会员管理设置"
|
||||
icon="super_vip"
|
||||
showSwitch
|
||||
v-model:isOpen="isOpenSuperVip"
|
||||
v-model:isOpen="basicForm.isOpen"
|
||||
></HeaderCard>
|
||||
<el-tabs class="mt-4" v-model="activeTab" type="border-card">
|
||||
<el-tab-pane :label="item.label" v-for="item in configs" :key="item.name" :name="item.name">
|
||||
@@ -68,6 +68,10 @@
|
||||
style="margin-left: 20px"
|
||||
v-if="item.label != '绑定手机号' && item.checked"
|
||||
v-model="item.value"
|
||||
:step="item.step"
|
||||
:precision="item.precision || 0"
|
||||
:step-strictly="item.stepStrictly || false"
|
||||
:min="item.min || 0"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -96,8 +100,8 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="享受会员价">
|
||||
<el-radio-group v-model="basicForm.isMemberPrice">
|
||||
<el-radio :value="1">所有支付方式</el-radio>
|
||||
<el-radio :value="0">仅余额支付</el-radio>
|
||||
<el-radio :value="1">是</el-radio>
|
||||
<el-radio :value="0">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="规则说明">
|
||||
@@ -113,23 +117,31 @@
|
||||
<h3>升级规则</h3>
|
||||
<el-form-item label="获取成长值升级">
|
||||
<div class="color-666">
|
||||
<div class="m-b-4">
|
||||
<span>每消费1元获得</span>
|
||||
<el-input-number
|
||||
class="m-x-2"
|
||||
v-model="basicForm.costReward"
|
||||
placeholder="请输入内容"
|
||||
/>
|
||||
<span>成长值</span>
|
||||
</div>
|
||||
<div>
|
||||
<span>每充值1元获得</span>
|
||||
<el-input-number
|
||||
class="m-x-2"
|
||||
v-model="basicForm.rechargeReward"
|
||||
placeholder="请输入内容"
|
||||
/>
|
||||
<span>成长值</span>
|
||||
<div class="flex">
|
||||
<div>
|
||||
<div class="m-b-4">
|
||||
<span>每消费1元获得</span>
|
||||
<el-input-number
|
||||
class="m-x-2"
|
||||
v-model="basicForm.costReward"
|
||||
placeholder="请输入内容"
|
||||
/>
|
||||
<span>成长值</span>
|
||||
</div>
|
||||
<div>
|
||||
<span>每充值1元获得</span>
|
||||
<el-input-number
|
||||
class="m-x-2"
|
||||
v-model="basicForm.rechargeReward"
|
||||
placeholder="请输入内容"
|
||||
/>
|
||||
<span>成长值</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<span class="ml-4" style="color: red; font-size: 12px">
|
||||
*两个条件必选有一条是大于0的数值
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
@@ -152,6 +164,7 @@
|
||||
style="margin-top: 20px"
|
||||
@tab-remove="removeLevel"
|
||||
@tab-add="addLevel"
|
||||
@tab-change="levelTabChange"
|
||||
editable
|
||||
>
|
||||
<el-tab-pane
|
||||
@@ -162,7 +175,7 @@
|
||||
>
|
||||
<!-- 编辑会员等级参数 -->
|
||||
<el-form :model="level" label-width="150px">
|
||||
<el-form-item label="会员标题">
|
||||
<el-form-item label="会员标题" required>
|
||||
<el-input
|
||||
v-model="level.name"
|
||||
:style="inputStyle"
|
||||
@@ -170,18 +183,24 @@
|
||||
placeholder="请输入会员标题"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="所需成长值">
|
||||
<el-input
|
||||
<el-form-item label="所需成长值" required>
|
||||
<el-input-number
|
||||
:disabled="index == 0"
|
||||
v-model="level.experienceValue"
|
||||
type="number"
|
||||
placeholder="请输入所需成长值"
|
||||
:style="inputStyle"
|
||||
:min="levelExperienceValueMin(index, level)"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="会员折扣">
|
||||
<el-input
|
||||
<el-form-item label="会员折扣" required>
|
||||
<el-input-number
|
||||
v-model="level.discount"
|
||||
:style="inputStyle"
|
||||
:step="1"
|
||||
step-strictly
|
||||
:min="1"
|
||||
:max="100"
|
||||
type="number"
|
||||
placeholder="请输入会员折扣"
|
||||
/>
|
||||
@@ -210,8 +229,11 @@
|
||||
style="margin-top: 10px"
|
||||
class="color-666 flex"
|
||||
>
|
||||
<span class="no-wrap">每消耗</span>
|
||||
<el-input
|
||||
<span class="no-wrap">每消费</span>
|
||||
<el-input-number
|
||||
:min="0.01"
|
||||
:precision="2"
|
||||
:controls="false"
|
||||
class="m-x-2"
|
||||
v-model="level.costRewardPoints"
|
||||
type="number"
|
||||
@@ -221,16 +243,17 @@
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="等级说明">
|
||||
<el-form-item label="等级说明" required>
|
||||
<el-input
|
||||
v-model="level.remark"
|
||||
style="width: 400px"
|
||||
:maxlength="250"
|
||||
:autosize="{ minRows: 4, maxRows: 5 }"
|
||||
type="textarea"
|
||||
placeholder="请输入等级说明,最多 250 字"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="周期时间">
|
||||
<!-- <el-form-item label="周期时间">
|
||||
<div class="flex w-full gap-2">
|
||||
<el-input
|
||||
style="width: 140px"
|
||||
@@ -244,7 +267,7 @@
|
||||
<el-option label="年" value="年" />
|
||||
</el-select>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="自动发放">
|
||||
<div>
|
||||
<el-switch
|
||||
@@ -257,7 +280,7 @@
|
||||
<el-radio :value="false">已禁用</el-radio>
|
||||
</el-radio-group> -->
|
||||
<div v-if="level.isCycleReward" style="margin-top: 10px">
|
||||
<!-- <div class="flex">
|
||||
<div class="flex">
|
||||
<span class="color-666 no-wrap mr-4">周期时间</span>
|
||||
<el-input
|
||||
v-model="level.cycleTime"
|
||||
@@ -269,10 +292,13 @@
|
||||
<el-option label="月" value="月" />
|
||||
<el-option label="年" value="年" />
|
||||
</el-select>
|
||||
</div> -->
|
||||
</div>
|
||||
<div class="flex mt-4">
|
||||
<span class="color-666 no-wrap mr-4">赠送积分</span>
|
||||
<el-input
|
||||
<el-input-number
|
||||
:step="1"
|
||||
step-strictly
|
||||
:min="1"
|
||||
v-model="level.cycleRewardPoints"
|
||||
type="number"
|
||||
placeholder="赠送积分"
|
||||
@@ -332,9 +358,6 @@ const inputStyle = {
|
||||
|
||||
const router = useRouter();
|
||||
|
||||
//是否开启超级会员
|
||||
const isOpenSuperVip = ref(false);
|
||||
|
||||
const refDialogPlans = ref();
|
||||
const configs = [
|
||||
{ name: "basic", label: "会员基础设置" },
|
||||
@@ -344,9 +367,31 @@ const configs = [
|
||||
const activeTab = ref("basic");
|
||||
const conditionLists = ref([
|
||||
{ label: "绑定手机号", checked: false, code: "BIND_PHONE" },
|
||||
{ label: "订单达成指定次数", checked: false, value: "", code: "ORDER" },
|
||||
{ label: "消费达到指定金额", checked: false, value: "", code: "COST_AMOUNT" },
|
||||
{ label: "充值达到指定金额", checked: false, value: "", code: "RECHARGE_AMOUNT" },
|
||||
{
|
||||
label: "订单达成指定次数",
|
||||
checked: false,
|
||||
value: "",
|
||||
code: "ORDER",
|
||||
step: 1,
|
||||
stepStrictly: true,
|
||||
min: 1,
|
||||
},
|
||||
{
|
||||
label: "消费达到指定金额",
|
||||
checked: false,
|
||||
value: "",
|
||||
code: "COST_AMOUNT",
|
||||
precision: 2,
|
||||
min: 0.01,
|
||||
},
|
||||
{
|
||||
label: "充值达到指定金额",
|
||||
checked: false,
|
||||
value: "",
|
||||
code: "RECHARGE_AMOUNT",
|
||||
precision: 2,
|
||||
min: 0.01,
|
||||
},
|
||||
]);
|
||||
const basicForm = reactive({
|
||||
isSubmitInfo: 1,
|
||||
@@ -358,6 +403,7 @@ const basicForm = reactive({
|
||||
rechargeReward: 0,
|
||||
memberPriceShopIdList: [],
|
||||
isMemberPrice: 1,
|
||||
isOpen: 0,
|
||||
});
|
||||
function deletePlan(row) {
|
||||
const index = basicForm.configList.indexOf(row);
|
||||
@@ -384,6 +430,27 @@ function basicSubmit() {
|
||||
// if (data.openType == "CONDITION") {
|
||||
// data.configList = null;
|
||||
// }
|
||||
console.log(data);
|
||||
if (basicForm.openType == "PAY" && (!basicForm.configList || basicForm.configList.length <= 0)) {
|
||||
return ElMessage.error("请添加会员方案");
|
||||
}
|
||||
data.conditionList = conditionLists.value
|
||||
.filter((v) => v.checked)
|
||||
.map((v) => {
|
||||
return {
|
||||
code: v.code,
|
||||
value: v.value,
|
||||
};
|
||||
});
|
||||
if (
|
||||
basicForm.openType == "CONDITION" &&
|
||||
(!data.conditionList || data.conditionList.length <= 0)
|
||||
) {
|
||||
return ElMessage.error("请选择成为会员条件");
|
||||
}
|
||||
if (basicForm.costReward <= 0 && basicForm.rechargeReward <= 0) {
|
||||
return ElMessage.error("获取成长值升级规则两个条件必选有一条是大于0的数值");
|
||||
}
|
||||
data.conditionList = conditionLists.value
|
||||
.filter((v) => v.checked)
|
||||
.map((v) => {
|
||||
@@ -404,11 +471,6 @@ const levels = ref([]);
|
||||
// 当前选中的会员等级
|
||||
const selectedLevel = ref(null);
|
||||
|
||||
// 优惠券列表
|
||||
const couponList = ref([
|
||||
{ id: 1, name: "满100减10" },
|
||||
{ id: 2, name: "满200减30" },
|
||||
]);
|
||||
let activeLevelId = ref(null);
|
||||
// 添加会员等级
|
||||
function addLevel() {
|
||||
@@ -425,15 +487,16 @@ function addLevel() {
|
||||
const newLevel = {
|
||||
name,
|
||||
experienceValue: 0,
|
||||
discount: 1,
|
||||
discount: 100,
|
||||
logo: "",
|
||||
costRewardPoints: 1,
|
||||
isCostRewardPoints: 1,
|
||||
isCostRewardPoints: 0,
|
||||
isCycleReward: 0,
|
||||
cycleTime: 1,
|
||||
cycleUnit: "月",
|
||||
cycleRewardPoints: 1,
|
||||
cycleRewardCouponList: [],
|
||||
remark: "",
|
||||
};
|
||||
console.log(newLevel);
|
||||
levels.value.push(newLevel);
|
||||
@@ -476,10 +539,36 @@ async function removeLevel(index) {
|
||||
}
|
||||
// 保存会员等级
|
||||
async function saveLevel(level) {
|
||||
const isPass = level.cycleRewardCouponList.every((item) => item.num && item.coupon.id);
|
||||
if (!isPass) {
|
||||
ElMessage.error("请选择优惠券并输入数量");
|
||||
return;
|
||||
if (level.isCycleReward) {
|
||||
if (level.cycleRewardCouponList && level.cycleRewardCouponList.length) {
|
||||
const isPass = (level.cycleRewardCouponList || []).every(
|
||||
(item) => item.num && item.coupon.id
|
||||
);
|
||||
if (!isPass) {
|
||||
ElMessage.error("请选择优惠券并输入数量");
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (
|
||||
(!level.cycleRewardCouponList || level.cycleRewardCouponList.length <= 0) &&
|
||||
level.cycleRewardPoints <= 0
|
||||
) {
|
||||
ElMessage.error("赠送积分和送优惠券必须填充一项");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (level.name.trim() === "") {
|
||||
return ElMessage.error("请输入会员标题");
|
||||
}
|
||||
if (level.experienceValue === "") {
|
||||
return ElMessage.error("请输入所需成长值");
|
||||
}
|
||||
if (level.discount === "") {
|
||||
return ElMessage.error("请输入会员折扣");
|
||||
}
|
||||
if (level.remark.trim() === "") {
|
||||
return ElMessage.error("请输入等级说明");
|
||||
}
|
||||
const res = level.id ? await memberApi.levelEdit(level) : await memberApi.levelAdd(level);
|
||||
if (res) {
|
||||
@@ -509,6 +598,8 @@ async function init() {
|
||||
});
|
||||
memberApi.getConfig().then((res) => {
|
||||
Object.assign(basicForm, res);
|
||||
res.conditionList = res.conditionList || [];
|
||||
res.configList = res.configList || [];
|
||||
conditionLists.value = conditionLists.value.map((v) => {
|
||||
const findItem = res.conditionList.find((cond) => cond.code == v.code);
|
||||
if (findItem) {
|
||||
@@ -538,10 +629,19 @@ function totalCount(arr) {
|
||||
return total + item.num * 1;
|
||||
}, 0);
|
||||
}
|
||||
//
|
||||
function levelExperienceValueMin(index, level) {
|
||||
if (index == 0) {
|
||||
return 0;
|
||||
}
|
||||
return levels.value[index - 1].experienceValue + 1;
|
||||
}
|
||||
//返回
|
||||
function close() {
|
||||
router.back();
|
||||
}
|
||||
//
|
||||
function levelTabChange(index) {}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
Reference in New Issue
Block a user