最近有个需求是 设置会员等级与折扣
要求是:更低的金额(等级 )不能有更高的折扣
如 :普通会员 要求达到1000元 折扣0.8折
黄金会员 要求达到2000元 折扣0.9折 这个就是有问题的在用户确定时要提醒用户了
下面方法判断出正在设置的金额的 折扣区间
isCorrect(num) {
let isCorrect = {
min: 0.01,//最小折扣
max: 1//最大折扣
}
//当前已经存在的会员列表 拷贝一份
let memberGradeList = JSON.parse(JSON.stringify(this.data.memberGradeList));
for (let i = memberGradeList.length - 1; i >= 0; i--) {
//status == 0 表示该会员已删除 i == this.datanowIndex 时表示正在修改这个等级
if (memberGradeList[i].status == 0 || i == this.data.nowIndex) {
memberGradeList.splice(i, 1);
}
}
//根据金额排序
memberGradeList.sort((a, b) => {
a.number = Number.parseFloat(a.number);
b.number = Number.parseFloat(b.number);
return a.number - b.number;
})
// 当正在设置的金额 大于等于当前列表中最大值时
if (num >= memberGradeList[memberGradeList.length - 1].number) {
isCorrect.max = memberGradeList[memberGradeList.length - 1].discount;
//当正在设置的金额 小于当前列表中最小值时
} else if (num < memberGradeList[0].number) {
isCorrect.min = memberGradeList[0].discount;
} else {
for (let j = 0; j < memberGradeList.length - 1; j++) {
//memberGradeList[j].number 当前循环的金额 num 正在设置的金额
if (memberGradeList[j].number >= num) {
isCorrect.max = memberGradeList[j - 1].discount;
isCorrect.min = memberGradeList[j].discount;
break;
} else {
if (j == memberGradeList.length - 2) {
isCorrect.max = memberGradeList[memberGradeList.length - 2].discount;
isCorrect.min = memberGradeList[memberGradeList.length - 1].discount;
}
}
}
}
isCorrect.max = Number.parseFloat(isCorrect.max);
isCorrect.min = Number.parseFloat(isCorrect.min);
return isCorrect;
}
//dataValue.number 正在设置的金额
let isCorrect = that.isCorrect(dataValue.number);
if (isCorrect.min > dataValue.discount || isCorrect.max <= dataValue.discount) {
//util.alert 自己封装的弹窗
util.alert(`当前等级的优惠应在${isCorrect.min}~${isCorrect.max}之间`, "none", 2000);
return false;
}
当然如果 当前的会员列表内没有 就不用比较 直接添加
会员名称与条件的唯一性 这个就很简单了就不贴代码了