diff --git a/src/views/consume/gold/addCoinConsume.vue b/src/views/consume/gold/addCoinConsume.vue index 8b63524..09f897f 100644 --- a/src/views/consume/gold/addCoinConsume.vue +++ b/src/views/consume/gold/addCoinConsume.vue @@ -77,6 +77,19 @@ const rules = reactive({ { required: true, message: t('elmessage.noEmptySumGold'), trigger: "blur" }, { 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 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) - // 如果未勾选使用红包,则只校验消耗金币数是否超过可用金币数 + // 校验消耗金币数是否超过可用金币数 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')); - // 将sumGold设置为null - addConsume.value.sumGold = null; - return false; } - // 如果勾选使用红包,且不满足原价条件,则会在validateRedLimit中提示 + // 将sumGold设置为null + addConsume.value.sumGold = null; + return false; } return true; @@ -479,6 +494,11 @@ const getUser = async function (jwcode) { console.log("请求成功", result); if (result.code === 200 && result.data) { + // 查询成功后,重置表单(保留精网号),防止上一个用户的数据干扰 + const currentJwcode = addConsume.value.jwcode; + resetForm(); + addConsume.value.jwcode = currentJwcode; + // 处理用户数据 user.value = { ...result.data, @@ -496,25 +516,15 @@ const getUser = async function (jwcode) { }; 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) { getRedList() } - + // 验证输入 + validateInput() + } else if (!result.data) { ElMessage.warning(t('elmessage.noUser')); user.value.jwcode = null @@ -561,7 +571,7 @@ watch( () => addConsume.value.sumGold, (newValue) => { const parsedNewValue = parseFloat(newValue); - if (!isNaN(parsedNewValue) && parsedNewValue > 0) { + if (!isNaN(parsedNewValue) && parsedNewValue >= 0) { const { free, permanent, task } = calculateCoins(parsedNewValue); addConsume.value.freeGold = free; addConsume.value.permanentGold = permanent;