diff --git a/src/components/locales/lang/zh-CN.js b/src/components/locales/lang/zh-CN.js index 63f39d5..679e6e7 100644 --- a/src/components/locales/lang/zh-CN.js +++ b/src/components/locales/lang/zh-CN.js @@ -667,7 +667,7 @@ export default { consumptionTimes: "消费次数", onlyStatisticsDataAfter20250101: "仅统计2025-01-01后的数据", store: "所属门店", - maxReductionAmount: "红包最大抵扣金额", + // maxReductionAmount: "红包最大抵扣金额", //金豆 currentPayableBean: "当前付费金豆", currentFreeBean: "当前免费金豆", diff --git a/src/views/consume/bean/articleVideo.vue b/src/views/consume/bean/articleVideo.vue index c3fc12e..9966096 100644 --- a/src/views/consume/bean/articleVideo.vue +++ b/src/views/consume/bean/articleVideo.vue @@ -581,8 +581,8 @@ const getTagText = (state) => { diff --git a/src/views/consume/gold/addCoinConsume.vue b/src/views/consume/gold/addCoinConsume.vue index 8b63524..f43bb3b 100644 --- a/src/views/consume/gold/addCoinConsume.vue +++ b/src/views/consume/gold/addCoinConsume.vue @@ -64,8 +64,7 @@ const addConsume = ref({ taskGold: null, // 任务金币 remark: "",//备注 adminId: null,// 当前管理员id - adminName: adminData.value.adminName, - redMoney: 1 // 是否使用红包:1-使用,0-不使用 + adminName: adminData.value.adminName }) const Ref = ref(null) const rules = reactive({ @@ -162,47 +161,23 @@ function validateInput() { } - // 验证金币总和 - const totalAvailableGold = (user.value.nowSumGold) - // 如果未勾选使用红包,则只校验消耗金币数是否超过可用金币数 + // 验证金币总和(不考虑红包) + const totalAvailableGold = user.value.nowSumGold; if (user.value.jwcode && sumGold > totalAvailableGold) { - // 如果未勾选使用红包,直接提示金币不足 - if (addConsume.value.redMoney == 0) { - ElMessage.error(t('elmessage.limitExceeded')); - // 将sumGold设置为null - addConsume.value.sumGold = null; - return false; - } - // 如果勾选使用红包,且不满足原价条件,则会在validateRedLimit中提示 + ElMessage.error(t('elmessage.limitExceeded')); + addConsume.value.sumGold = null; + return false; } return true; } -// 仅在鼠标离开(blur)时校验:消耗金币数 + 红包抵扣金额 ≥ 原价 +// 仅在鼠标离开(blur)时校验:sumGold 是否为有效值(无红包逻辑) function validateRedLimit() { const sumGold = parseFloat(addConsume.value.sumGold); - const price = Number(addConsume.value.price || 0); - // 优先使用选中的红包总额,如果没有选中(可能是旧逻辑),则使用user.red - const redAmount = (addConsume.value.redMoney == 1 && selectedReds.value.length > 0) - ? totalRedAmount.value - : (addConsume.value.redMoney == 1 ? Number(user.value.red || 0) : 0); - - if (!isNaN(price) && price > 0) { - // 如果红包足额,允许sumGold为0 - const isCovered = redAmount >= price; - - if (isNaN(sumGold) || (sumGold <= 0 && !isCovered)) { - ElMessage.error(t('elmessage.noEmptySumGold')); - return false; - } - // 如果勾选使用红包,才需要校验消耗金币数 + 红包抵扣金额 ≥ 原价 - if (addConsume.value.redMoney == 1) { - if (sumGold + redAmount < price) { - ElMessage.error(t('elmessage.limitRedAmount')); - return false; - } - } + if (isNaN(sumGold) || sumGold <= 0) { + ElMessage.error(t('elmessage.noEmptySumGold')); + return false; } return true; } @@ -219,21 +194,22 @@ function calculateCoins(sumGold) { let remaining = parsedSumGold; let freeUsed = 0, permanentUsed = 0, taskUsed = 0; - // 优先消耗免费金币 - if (nowFreeGold > 0) { + // 1. 优先消耗免费金币 + if (remaining > 0 && nowFreeGold > 0) { freeUsed = Math.min(parseFloat(nowFreeGold.toFixed(4)), remaining); remaining = parseFloat((remaining - freeUsed).toFixed(4)); } - // 其次消耗永久金币 + // 2. 其次消耗永久金币 if (remaining > 0 && nowPermanentGold > 0) { permanentUsed = Math.min(parseFloat(nowPermanentGold.toFixed(4)), remaining); remaining = parseFloat((remaining - permanentUsed).toFixed(4)); } - // 最后消耗任务金币 + // 3. 最后消耗任务金币 if (remaining > 0 && nowTaskGold > 0) { - taskUsed = parseFloat(remaining.toFixed(4)); + taskUsed = Math.min(parseFloat(nowTaskGold.toFixed(4)), remaining); + remaining = parseFloat((remaining - taskUsed).toFixed(4)); } // 更新金币值 @@ -283,9 +259,7 @@ const add = async function () { permanentGold: addConsume.value.permanentGold * 100, goodsName: addConsume.value.goodsName.value, remark: addConsume.value.remark, - adminName: adminData.value.adminName, - redMoney: Number(addConsume.value.redMoney), // 1-使用红包,0-不使用红包 - redIds: addConsume.value.redMoney === 1 ? selectedReds.value.map(item => item.id) : [] // 选中的红包ID数组 + adminName: adminData.value.adminName } }) addDisabled.value = false @@ -336,13 +310,8 @@ function resetForm() { taskGold: null, remark: "", adminId: adminData.value.id, - adminName: adminData.value.adminName, - redMoney: 1 // 默认使用红包 + adminName: adminData.value.adminName } - - // 清空红包相关数据 - selectedReds.value = [] - redList.value = [] console.log("重置表单") @@ -364,6 +333,9 @@ function resetForm() { nowFreeGold: null, nowSumGold: null } + + // 重置后不再触发校验提示 + Ref.value.clearValidate() } // 充值对话框显示状态 @@ -436,7 +408,7 @@ const addBefore = () => { }); return; } - if (!validateInput() || !validateRedLimit()) { + if (!validateInput()) { return; } ReadCookies.value = `coinConsume:${addConsume.value.jwcode}:${addConsume.value.goodsName.value}` @@ -506,13 +478,6 @@ const getUser = async function (jwcode) { addConsume.value.taskGold = task; } } - // 验证输入 - validateInput() - - // 如果当前开启了红包模式,获取红包列表 - if (addConsume.value.redMoney === 1) { - getRedList() - } } else if (!result.data) { @@ -561,7 +526,7 @@ watch( () => addConsume.value.sumGold, (newValue) => { const parsedNewValue = parseFloat(newValue); - if (!isNaN(parsedNewValue) && parsedNewValue > 0) { + if (!isNaN(parsedNewValue) && parsedNewValue > 0 && user.value.jwcode) { const { free, permanent, task } = calculateCoins(parsedNewValue); addConsume.value.freeGold = free; addConsume.value.permanentGold = permanent; @@ -586,109 +551,7 @@ watch( } ); -/* -====================红包逻辑================================= -*/ -// 红包列表 -const redList = ref([]) -// 选中的红包 -const selectedReds = ref([]) - -// 获取红包列表 -const getRedList = async () => { - // 必须先有查询到的用户信息 - if (!user.value.jwcode) return - try { - const result = await request({ - url: "/Temporary/RedList", - data: { jwcode: user.value.jwcode } - }) - console.log("红包列表", result) - if (result.code === 200) { - redList.value = result.data || [] - } - } catch (error) { - console.error("获取红包列表失败", error) - } -} - -// 监听是否使用红包 -watch(() => addConsume.value.redMoney, (val) => { - // 切换模式时,清除sumGold的验证状态,防止之前的错误提示残留 - if (Ref.value) { - Ref.value.clearValidate('sumGold') - } - - if (val === 1) { - // 切换到使用红包 - if (!user.value.jwcode) { - ElMessage.warning(t('elmessage.checkUserInfo')) - // 清空列表 - redList.value = [] - selectedReds.value = [] - addConsume.value.sumGold = null - return - } - - selectedReds.value = [] - getRedList() - // 初始消耗金币等于原价(未选红包时) - if (addConsume.value.price) { - addConsume.value.sumGold = addConsume.value.price - } else { - addConsume.value.sumGold = null - } - } else { - // 不使用红包,清空选中 - selectedReds.value = [] - // 切换回普通模式,清空消耗金币数 - addConsume.value.sumGold = null - } -}) - -// 计算已选红包总额 -const totalRedAmount = computed(() => { - return selectedReds.value.reduce((sum, item) => { - // 根据实际接口返回,使用 discount 字段 - const amount = Number(item.discount || 0) - return sum + amount - }, 0) -}) - -// 监听选中红包变化,计算剩余金币 -watch(selectedReds, () => { - if (addConsume.value.redMoney === 1) { - const price = Number(addConsume.value.price || 0) - const redTotal = totalRedAmount.value - // 剩余需要消耗的金币 - let remaining = price - redTotal - if (remaining < 0) remaining = 0 - - addConsume.value.sumGold = remaining - } -}, { deep: true }) - -// 判断红包选项是否禁用 -const isRedOptionDisabled = (item) => { - // 如果已经选中,不禁用(允许取消) - if (selectedReds.value.some(r => r.id === item.id)) return false - - const price = Number(addConsume.value.price || 0) - // 如果当前总额已经大于等于原价,则不能再选新的 - if (totalRedAmount.value >= price) return true - - return false -} - -// 监听原价变化(比如换了商品),如果在红包模式下,需要重新计算 -watch(() => addConsume.value.price, (newPrice) => { - if (addConsume.value.redMoney === 1) { - const redTotal = totalRedAmount.value - let remaining = (newPrice || 0) - redTotal - if (remaining < 0) remaining = 0 - addConsume.value.sumGold = remaining - } -}) +/* 红包逻辑已在当前分支移除 */ /* ====================挂载================================= @@ -724,36 +587,8 @@ onMounted(async function () { - - - 使用红包 - 不使用红包 - - - - - - - - 已抵扣: {{ totalRedAmount }} - + @@ -858,11 +693,11 @@ onMounted(async function () {

{{ user.market }}

- + @@ -1077,4 +912,4 @@ p { } } } - \ No newline at end of file +