|
|
@ -77,6 +77,19 @@ const rules = reactive({ |
|
|
{ required: true, message: t('elmessage.noEmptySumGold'), trigger: "blur" }, |
|
|
{ required: true, message: t('elmessage.noEmptySumGold'), trigger: "blur" }, |
|
|
{ |
|
|
{ |
|
|
validator: (rule, value, callback) => { |
|
|
validator: (rule, value, callback) => { |
|
|
|
|
|
// 如果使用了红包,且红包总额抵扣完了原价,允许为0 |
|
|
|
|
|
if (addConsume.value.redMoney === 1) { |
|
|
|
|
|
const price = Number(addConsume.value.price || 0) |
|
|
|
|
|
const redAmount = totalRedAmount.value |
|
|
|
|
|
if (redAmount >= price) { |
|
|
|
|
|
// 如果红包抵扣完了,允许0 |
|
|
|
|
|
if (parseFloat(value) === 0 || value === 0) { |
|
|
|
|
|
callback(); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 允许0开头的小数(如0.1)但不允许单独的0 |
|
|
// 允许0开头的小数(如0.1)但不允许单独的0 |
|
|
const isValid = /^(0\.\d{1,2})|([1-9]\d*(\.\d{1,2})?)$/.test(value); |
|
|
const isValid = /^(0\.\d{1,2})|([1-9]\d*(\.\d{1,2})?)$/.test(value); |
|
|
|
|
|
|
|
|
@ -164,16 +177,18 @@ function validateInput() { |
|
|
|
|
|
|
|
|
// 验证金币总和 |
|
|
// 验证金币总和 |
|
|
const totalAvailableGold = (user.value.nowSumGold) |
|
|
const totalAvailableGold = (user.value.nowSumGold) |
|
|
// 如果未勾选使用红包,则只校验消耗金币数是否超过可用金币数 |
|
|
|
|
|
|
|
|
// 校验消耗金币数是否超过可用金币数 |
|
|
if (user.value.jwcode && sumGold > totalAvailableGold) { |
|
|
if (user.value.jwcode && sumGold > totalAvailableGold) { |
|
|
// 如果未勾选使用红包,直接提示金币不足 |
|
|
|
|
|
if (addConsume.value.redMoney == 0) { |
|
|
|
|
|
|
|
|
if (addConsume.value.redMoney === 1) { |
|
|
|
|
|
ElMessage.error('红包抵扣额不足'); |
|
|
|
|
|
// 如果红包额不足,清空已选红包 |
|
|
|
|
|
selectedReds.value = [] |
|
|
|
|
|
} else { |
|
|
ElMessage.error(t('elmessage.limitExceeded')); |
|
|
ElMessage.error(t('elmessage.limitExceeded')); |
|
|
// 将sumGold设置为null |
|
|
|
|
|
addConsume.value.sumGold = null; |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
} |
|
|
// 如果勾选使用红包,且不满足原价条件,则会在validateRedLimit中提示 |
|
|
|
|
|
|
|
|
// 将sumGold设置为null |
|
|
|
|
|
addConsume.value.sumGold = null; |
|
|
|
|
|
return false; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return true; |
|
|
return true; |
|
|
@ -479,6 +494,11 @@ const getUser = async function (jwcode) { |
|
|
console.log("请求成功", result); |
|
|
console.log("请求成功", result); |
|
|
|
|
|
|
|
|
if (result.code === 200 && result.data) { |
|
|
if (result.code === 200 && result.data) { |
|
|
|
|
|
// 查询成功后,重置表单(保留精网号),防止上一个用户的数据干扰 |
|
|
|
|
|
const currentJwcode = addConsume.value.jwcode; |
|
|
|
|
|
resetForm(); |
|
|
|
|
|
addConsume.value.jwcode = currentJwcode; |
|
|
|
|
|
|
|
|
// 处理用户数据 |
|
|
// 处理用户数据 |
|
|
user.value = { |
|
|
user.value = { |
|
|
...result.data, |
|
|
...result.data, |
|
|
@ -496,25 +516,15 @@ const getUser = async function (jwcode) { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
ElMessage.success(t('elmessage.searchSuccess')); |
|
|
ElMessage.success(t('elmessage.searchSuccess')); |
|
|
// 检查sumGold是否有值,如果有则重新计算金币分配 |
|
|
|
|
|
if (addConsume.value.sumGold) { |
|
|
|
|
|
const parsedSumGold = parseFloat(addConsume.value.sumGold); |
|
|
|
|
|
if (!isNaN(parsedSumGold) && parsedSumGold > 0) { |
|
|
|
|
|
const { free, permanent, task } = calculateCoins(parsedSumGold); |
|
|
|
|
|
addConsume.value.freeGold = free; |
|
|
|
|
|
addConsume.value.permanentGold = permanent; |
|
|
|
|
|
addConsume.value.taskGold = task; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
// 验证输入 |
|
|
|
|
|
validateInput() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果当前开启了红包模式,获取红包列表 |
|
|
// 如果当前开启了红包模式,获取红包列表 |
|
|
if (addConsume.value.redMoney === 1) { |
|
|
if (addConsume.value.redMoney === 1) { |
|
|
getRedList() |
|
|
getRedList() |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 验证输入 |
|
|
|
|
|
validateInput() |
|
|
|
|
|
|
|
|
} else if (!result.data) { |
|
|
} else if (!result.data) { |
|
|
ElMessage.warning(t('elmessage.noUser')); |
|
|
ElMessage.warning(t('elmessage.noUser')); |
|
|
user.value.jwcode = null |
|
|
user.value.jwcode = null |
|
|
@ -561,7 +571,7 @@ watch( |
|
|
() => addConsume.value.sumGold, |
|
|
() => addConsume.value.sumGold, |
|
|
(newValue) => { |
|
|
(newValue) => { |
|
|
const parsedNewValue = parseFloat(newValue); |
|
|
const parsedNewValue = parseFloat(newValue); |
|
|
if (!isNaN(parsedNewValue) && parsedNewValue > 0) { |
|
|
|
|
|
|
|
|
if (!isNaN(parsedNewValue) && parsedNewValue >= 0) { |
|
|
const { free, permanent, task } = calculateCoins(parsedNewValue); |
|
|
const { free, permanent, task } = calculateCoins(parsedNewValue); |
|
|
addConsume.value.freeGold = free; |
|
|
addConsume.value.freeGold = free; |
|
|
addConsume.value.permanentGold = permanent; |
|
|
addConsume.value.permanentGold = permanent; |
|
|
|