From be9bd9e9222e0588b583e9a903ba350edc369a0a Mon Sep 17 00:00:00 2001
From: zhangrenyuan <18990852002@163.com>
Date: Wed, 7 Jan 2026 11:33:40 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=E7=BA=A2=E5=8C=85?=
=?UTF-8?q?=E9=80=BB=E8=BE=91=E5=B9=B6=E4=BC=98=E5=8C=96=E9=87=91=E5=B8=81?=
=?UTF-8?q?=E6=A0=A1=E9=AA=8C=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/components/locales/lang/zh-CN.js | 2 +-
src/views/consume/bean/articleVideo.vue | 4 +-
src/views/consume/gold/addCoinConsume.vue | 221 ++++--------------------------
3 files changed, 31 insertions(+), 196 deletions(-)
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) => {
{{
Array.isArray(consumeTypes)
- ? consumeTypes.find(item => item.value === Number(scope.row.type))?.label || t('common_list.unknownType')
- : t('common_list.unknownType')
+ ? consumeTypes.find(item => item.value === Number(scope.row.type))?.label || t('common_list.other')
+ : t('common_list.other')
}}
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 () {
{{ user.market }}
-