Browse Source

fix: 移除红包逻辑并优化金币校验逻辑

milestone-20251215-多语言二期2
zhangrenyuan 6 days ago
parent
commit
be9bd9e922
  1. 2
      src/components/locales/lang/zh-CN.js
  2. 4
      src/views/consume/bean/articleVideo.vue
  3. 219
      src/views/consume/gold/addCoinConsume.vue

2
src/components/locales/lang/zh-CN.js

@ -667,7 +667,7 @@ export default {
consumptionTimes: "消费次数", consumptionTimes: "消费次数",
onlyStatisticsDataAfter20250101: "仅统计2025-01-01后的数据", onlyStatisticsDataAfter20250101: "仅统计2025-01-01后的数据",
store: "所属门店", store: "所属门店",
maxReductionAmount: "红包最大抵扣金额",
// maxReductionAmount: "红包最大抵扣金额",
//金豆 //金豆
currentPayableBean: "当前付费金豆", currentPayableBean: "当前付费金豆",
currentFreeBean: "当前免费金豆", currentFreeBean: "当前免费金豆",

4
src/views/consume/bean/articleVideo.vue

@ -581,8 +581,8 @@ const getTagText = (state) => {
<template #default="scope"> <template #default="scope">
{{ {{
Array.isArray(consumeTypes) 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')
}} }}
</template> </template>
</el-table-column> </el-table-column>

219
src/views/consume/gold/addCoinConsume.vue

@ -64,8 +64,7 @@ const addConsume = ref({
taskGold: null, // taskGold: null, //
remark: "",// remark: "",//
adminId: null,// id adminId: null,// id
adminName: adminData.value.adminName,
redMoney: 1 // 使1-使0-使
adminName: adminData.value.adminName
}) })
const Ref = ref(null) const Ref = ref(null)
const rules = reactive({ 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 (user.value.jwcode && sumGold > totalAvailableGold) {
// 使
if (addConsume.value.redMoney == 0) {
ElMessage.error(t('elmessage.limitExceeded'));
// sumGoldnull
addConsume.value.sumGold = null;
return false;
}
// 使validateRedLimit
ElMessage.error(t('elmessage.limitExceeded'));
addConsume.value.sumGold = null;
return false;
} }
return true; return true;
} }
// blur +
// blursumGold
function validateRedLimit() { function validateRedLimit() {
const sumGold = parseFloat(addConsume.value.sumGold); 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) {
// sumGold0
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; return true;
} }
@ -219,21 +194,22 @@ function calculateCoins(sumGold) {
let remaining = parsedSumGold; let remaining = parsedSumGold;
let freeUsed = 0, permanentUsed = 0, taskUsed = 0; let freeUsed = 0, permanentUsed = 0, taskUsed = 0;
//
if (nowFreeGold > 0) {
// 1.
if (remaining > 0 && nowFreeGold > 0) {
freeUsed = Math.min(parseFloat(nowFreeGold.toFixed(4)), remaining); freeUsed = Math.min(parseFloat(nowFreeGold.toFixed(4)), remaining);
remaining = parseFloat((remaining - freeUsed).toFixed(4)); remaining = parseFloat((remaining - freeUsed).toFixed(4));
} }
//
// 2.
if (remaining > 0 && nowPermanentGold > 0) { if (remaining > 0 && nowPermanentGold > 0) {
permanentUsed = Math.min(parseFloat(nowPermanentGold.toFixed(4)), remaining); permanentUsed = Math.min(parseFloat(nowPermanentGold.toFixed(4)), remaining);
remaining = parseFloat((remaining - permanentUsed).toFixed(4)); remaining = parseFloat((remaining - permanentUsed).toFixed(4));
} }
//
// 3.
if (remaining > 0 && nowTaskGold > 0) { 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, permanentGold: addConsume.value.permanentGold * 100,
goodsName: addConsume.value.goodsName.value, goodsName: addConsume.value.goodsName.value,
remark: addConsume.value.remark, 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 addDisabled.value = false
@ -336,14 +310,9 @@ function resetForm() {
taskGold: null, taskGold: null,
remark: "", remark: "",
adminId: adminData.value.id, adminId: adminData.value.id,
adminName: adminData.value.adminName,
redMoney: 1 // 使
adminName: adminData.value.adminName
} }
//
selectedReds.value = []
redList.value = []
console.log("重置表单") console.log("重置表单")
user.value = { user.value = {
@ -364,6 +333,9 @@ function resetForm() {
nowFreeGold: null, nowFreeGold: null,
nowSumGold: null nowSumGold: null
} }
//
Ref.value.clearValidate()
} }
// //
@ -436,7 +408,7 @@ const addBefore = () => {
}); });
return; return;
} }
if (!validateInput() || !validateRedLimit()) {
if (!validateInput()) {
return; return;
} }
ReadCookies.value = `coinConsume:${addConsume.value.jwcode}:${addConsume.value.goodsName.value}` ReadCookies.value = `coinConsume:${addConsume.value.jwcode}:${addConsume.value.goodsName.value}`
@ -506,13 +478,6 @@ const getUser = async function (jwcode) {
addConsume.value.taskGold = task; addConsume.value.taskGold = task;
} }
} }
//
validateInput()
//
if (addConsume.value.redMoney === 1) {
getRedList()
}
} else if (!result.data) { } else if (!result.data) {
@ -561,7 +526,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 && user.value.jwcode) {
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;
@ -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 () {
<el-input v-model="addConsume.price" style="width: 120px" disabled /> <el-input v-model="addConsume.price" style="width: 120px" disabled />
</el-form-item> </el-form-item>
<!-- <el-form-item prop="sumGold" :label="t('common_add.consumeTotalGold')">
<el-input v-model="addConsume.sumGold" style="width: 120px"
@blur="validateRedLimit()" />
</el-form-item> -->
<el-form-item prop="sumGold" :label="t('common_add.consumeTotalGold')"> <el-form-item prop="sumGold" :label="t('common_add.consumeTotalGold')">
<el-input v-model="addConsume.sumGold" style="width: 120px" @blur="validateRedLimit()" :disabled="addConsume.redMoney === 1" />
<el-radio v-model="addConsume.redMoney" :label="1" style="margin-left: 10px;">使用红包</el-radio>
<el-radio v-model="addConsume.redMoney" :label="0">不使用红包</el-radio>
</el-form-item>
<el-form-item v-if="addConsume.redMoney === 1" label="选择红包">
<el-select
v-model="selectedReds"
multiple
placeholder="请选择红包"
style="width: 200px"
value-key="id"
collapse-tags
>
<el-option
v-for="item in redList"
:key="item.id"
:label="`${item.title} (${item.discount})`"
:value="item"
:disabled="isRedOptionDisabled(item)"
/>
</el-select>
<span style="margin-left: 10px; color: #666;">
已抵扣: {{ totalRedAmount }}
</span>
<el-input v-model="addConsume.sumGold" style="width: 120px" @blur="validateRedLimit()" />
</el-form-item> </el-form-item>
@ -858,11 +693,11 @@ onMounted(async function () {
<p>{{ user.market }}</p> <p>{{ user.market }}</p>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="14">
<!-- <el-col :span="14">
<el-form-item :label="$t('common_add_user.maxReductionAmount')"> <el-form-item :label="$t('common_add_user.maxReductionAmount')">
<p style="color: #2fa1ff">{{ user.red }} </p> <p style="color: #2fa1ff">{{ user.red }} </p>
</el-form-item> </el-form-item>
</el-col>
</el-col> -->
</el-row> </el-row>
</el-form> </el-form>
</el-card> </el-card>

Loading…
Cancel
Save