From d30918146237b6de755403dd9c177f0de3ea5cc4 Mon Sep 17 00:00:00 2001 From: lihui Date: Mon, 7 Jul 2025 18:02:09 +0800 Subject: [PATCH 01/19] =?UTF-8?q?style(rechargeAudit):=20=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E6=94=AF=E4=BB=98=E6=96=B9=E5=BC=8F=E9=80=89=E9=A1=B9?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E5=85=A8=E8=A7=92=E6=8B=AC=E5=8F=B7=20-=20?= =?UTF-8?q?=E5=B0=86"=E5=85=B6=E4=BB=96=EF=BC=88=E5=90=84=E5=9C=B0?= =?UTF-8?q?=E5=8C=BA=E7=94=B5=E5=AD=90=E6=94=AF=E4=BB=98=EF=BC=89"?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E5=85=A8=E8=A7=92=E6=8B=AC=E5=8F=B7=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2=E4=B8=BA=E5=8D=8A=E8=A7=92=E6=8B=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/audit/rechargeAudit.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/audit/rechargeAudit.vue b/src/views/audit/rechargeAudit.vue index 45c7332..d170d21 100644 --- a/src/views/audit/rechargeAudit.vue +++ b/src/views/audit/rechargeAudit.vue @@ -234,8 +234,8 @@ const payModel = [ label: '刷卡' }, { - value: '其他(各地区电子支付)', - label: '其他(各地区电子支付)' + value: '其他(各地区电子支付)', + label: '其他(各地区电子支付)' }, ] // 表单验证ref From 3dcb81e715c8f47f7ba33542a93aac148d90f993 Mon Sep 17 00:00:00 2001 From: zry <18990852002@163.com> Date: Mon, 7 Jul 2025 18:22:12 +0800 Subject: [PATCH 02/19] add absolute value to the refund gold coins --- src/views/refund/addCoinRefund.vue | 12 ++++++------ src/views/usergold/clientCountDetail.vue | 7 ++++--- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/views/refund/addCoinRefund.vue b/src/views/refund/addCoinRefund.vue index 586c8bc..51aebbc 100644 --- a/src/views/refund/addCoinRefund.vue +++ b/src/views/refund/addCoinRefund.vue @@ -271,9 +271,9 @@ const getGoods = async function (jwcode) { label: item.goodsName, key: item.goodsName, // 保留其他字段 - permanentGold: (Number(item.permanentGold) || 0) / 100, - freeGold: (Number(item.freeGold) || 0) / 100, - taskGold: (Number(item.taskGold) || 0) / 100 + permanentGold: Math.abs(Number(item.permanentGold) || 0) / 100, + freeGold: Math.abs(Number(item.freeGold) || 0) / 100, + taskGold: Math.abs(Number(item.taskGold) || 0) / 100 })); } else { console.error('退款类型数据格式错误', result) @@ -468,7 +468,7 @@ onMounted(async function () { style="width: 100px" :disabled="addRe.typeR === '0' ? true : false" @input="handlePermanentGoldInput($event)" - + type="number" >

@@ -483,7 +483,7 @@ onMounted(async function () { style="float: left; width: 100px" :disabled="addRe.typeR === '0' ? true : false" @input="handleFreeGoldInput($event)" - + type="number" />

@@ -493,7 +493,7 @@ onMounted(async function () { style="float: left; width: 100px" :disabled="addRe.typeR === '0' ? true : false" @input="handleTaskGoldInput($event)" - + type="number" />

diff --git a/src/views/usergold/clientCountDetail.vue b/src/views/usergold/clientCountDetail.vue index 163f6b7..0fa8427 100644 --- a/src/views/usergold/clientCountDetail.vue +++ b/src/views/usergold/clientCountDetail.vue @@ -191,7 +191,7 @@ const get = async function (val) { //由于免费金币的计算方式是6月免费+12月免费,所以需要单独处理,以及计算总的免费金币和总的金币数放在一块 - const totalResult = await API({ + const totalResult = await API({ url: '/goldDetail/getTotal', method: 'post', data: { @@ -426,13 +426,14 @@ onMounted(async function () { From 653c6a7467a4aba0c692ece279ddc83f795e33f4 Mon Sep 17 00:00:00 2001 From: lihuilin Date: Tue, 8 Jul 2025 09:42:45 +0800 Subject: [PATCH 03/19] =?UTF-8?q?=E9=80=80=E6=AC=BE=E5=AE=A1=E6=A0=B8?= =?UTF-8?q?=E5=85=8D=E8=B4=B9=E9=87=91=E5=B8=81=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/audit/refundAudit.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/audit/refundAudit.vue b/src/views/audit/refundAudit.vue index fd74557..a353b98 100644 --- a/src/views/audit/refundAudit.vue +++ b/src/views/audit/refundAudit.vue @@ -236,7 +236,7 @@ const handleSortChange = (column) => { } else if (column.prop === 'permanentGold') { sortField.value = 'permanent_gold' } else if (column.prop === 'freeGold') { - sortField.value = 'free_gold' + sortField.value = 'freeGold' }else if (column.prop === 'taskGold') { sortField.value = 'task_gold' }else if (column.prop === 'createTime') { From 46873632f706e99c76151165149db6acb3b32d18 Mon Sep 17 00:00:00 2001 From: lihui Date: Tue, 8 Jul 2025 10:59:13 +0800 Subject: [PATCH 04/19] =?UTF-8?q?refactor(usergold):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E9=87=91=E5=B8=81=E6=95=B0=E9=87=8F=E6=98=BE=E7=A4=BA=E7=9A=84?= =?UTF-8?q?=E7=BB=9D=E5=AF=B9=E5=80=BC=E5=A4=84=E7=90=86=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E4=BA=86=E5=AE=A2=E6=88=B7=E7=AB=AF=E8=AE=A1=E6=95=B0=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5=E9=9D=A2=E4=B8=AD=E5=AF=B9=E9=87=91=E5=B8=81?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E7=9A=84=20Math.abs()=E5=A4=84=E7=90=86?= =?UTF-8?q?=EF=BC=8C=E4=BF=9D=E7=95=99=E5=8E=9F=E5=A7=8B=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E3=80=82=E4=BF=AE=E6=94=B9=E6=B6=89=E5=8F=8A?= =?UTF-8?q?=E4=BB=A5=E4=B8=8B=E5=86=85=E5=AE=B9=EF=BC=9A=20-=20=E9=87=91?= =?UTF-8?q?=E5=B8=81=E6=80=BB=E6=95=B0=20-=20=E6=B0=B8=E4=B9=85=E9=87=91?= =?UTF-8?q?=E5=B8=81=20-=20=E5=85=8D=E8=B4=B9=E9=87=91=E5=B8=81=20-=20?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E9=87=91=E5=B8=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/usergold/clientCountDetail.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/views/usergold/clientCountDetail.vue b/src/views/usergold/clientCountDetail.vue index 0fa8427..268fb6e 100644 --- a/src/views/usergold/clientCountDetail.vue +++ b/src/views/usergold/clientCountDetail.vue @@ -394,10 +394,10 @@ onMounted(async function () {
- 金币总数:{{ Math.abs(totalGoldTotal) / 100 }} - 永久金币:{{ Math.abs(totalPermanentGold) / 100 }} - 免费金币:{{ Math.abs(totalFreeGold) / 100 }} - 任务金币:{{ Math.abs(totalTaskGold) / 100 }} + 金币总数:{{ (totalGoldTotal) / 100 }} + 永久金币:{{ (totalPermanentGold) / 100 }} + 免费金币:{{ (totalFreeGold) / 100 }} + 任务金币:{{(totalTaskGold) / 100 }}
From eff7079a810e0d5884d7eb4c95b9ea0645f962b4 Mon Sep 17 00:00:00 2001 From: lihui Date: Tue, 8 Jul 2025 11:40:50 +0800 Subject: [PATCH 05/19] =?UTF-8?q?fix=EF=BC=9A=E4=BC=98=E5=8C=96=E6=A0=A1?= =?UTF-8?q?=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/views/consume/addCoinConsume.vue | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/views/consume/addCoinConsume.vue b/src/views/consume/addCoinConsume.vue index cbe4bdc..2d64ecf 100644 --- a/src/views/consume/addCoinConsume.vue +++ b/src/views/consume/addCoinConsume.vue @@ -64,8 +64,11 @@ const addConsume = ref({ const Ref = ref(null); // 表单验证规则 const rules = reactive({ - jwcode: [{required: true, message: "请输入精网号", trigger: "blur"}], - goodsName: [{required: true, message: "请选择消费商品", trigger: "change"}], // 修改为 change + jwcode: [ + {required: true, message: "请输入精网号", trigger: "blur"}, + // { type: 'number', message: "精网号必须为数字", trigger: "blur" } + ], + goodsName: [{required: true, message: "请选择消费商品", trigger: "change"}], sumGold: [ {required: true, message: "消费金币总数不能为空", trigger: "blur"}, { @@ -107,7 +110,7 @@ function validateInput() { if (user.value.jwcode == null) { ElMessage.warning("请先查询用户信息"); addConsume.value.sumGold = null; - user.value = {}; + user.value = {}; return false; } @@ -310,12 +313,11 @@ const getUser = async function (jwcode) { user.value.historyPermanentGold = (result.data.historyPermanentGold) / 100; user.value.historyFreeGold = (result.data.historyFreeGold) / 100; user.value.historyTaskGold = (result.data.historyTaskGold) / 100; - } else if (result.data == null){ + } else if (result.data == null) { ElMessage.warning("用户不存在"); // 重置表单 resetForm(); - } - else if (result.code === 0 ) { + } else if (result.code === 0) { ElMessage.warning("请检查查询参数") } else { console.log("用户信息", user.value); @@ -324,6 +326,8 @@ const getUser = async function (jwcode) { } catch (error) { console.log("请求失败", error); ElMessage.error("查询失败,请检查精网号是否正确"); + // 重置表单 + resetForm(); // 在这里可以处理错误逻辑,比如显示错误提示等 } }; @@ -404,6 +408,7 @@ onMounted(async function () { Date: Tue, 8 Jul 2025 11:41:01 +0800 Subject: [PATCH 06/19] recharge and refund verify OK --- src/views/recharge/addCoinRecharge.vue | 81 ++++++++++++++++++---------------- src/views/refund/addCoinRefund.vue | 49 ++++++++++---------- src/views/refund/coinRefundDetail.vue | 45 ++++++++++--------- 3 files changed, 93 insertions(+), 82 deletions(-) diff --git a/src/views/recharge/addCoinRecharge.vue b/src/views/recharge/addCoinRecharge.vue index a25a5a7..f4c0ea7 100644 --- a/src/views/recharge/addCoinRecharge.vue +++ b/src/views/recharge/addCoinRecharge.vue @@ -225,22 +225,27 @@ const rules = reactive({ trigger: 'blur' }], - money: [{ - required: true, - message: '请输入充值金额', - trigger: 'blur' - }, { - validator: (rule, value, callback) => { - if (!value) { - callback(new Error('请输入充值金额')); - } else if (value < 0) { - callback(new Error('金额不能小于0')); - } else { - callback(); - } - }, - trigger: 'blur' - }], + money: [ + { required: true, message: '请输入充值金额', trigger: 'blur' }, + { + validator: (rule, value, callback) => { + // 检查是否包含特殊符号 + if (/[^0-9.]/.test(value)) { + callback(new Error('不能包含特殊符号或负数')); + return; + } + const numValue = Number(value); + if (isNaN(numValue)) { + callback(new Error('请输入有效的数字')); + } else if (numValue < 0) { + callback(new Error('输入金额不能小于0')); + } else { + callback(); + } + }, + trigger: 'blur' + } + ], payModel: [{ required: true, message: '请选择付款方式', trigger: 'blur' }], payTime: [{ required: true, message: '请选择交款时间', trigger: 'blur' }] }); @@ -260,10 +265,12 @@ const getUser = async function (jwcode) { }) console.log('请求成功', result) + if (result.code === 0) { ElMessage.error(result.msg); } else if (result.data === null) { ElMessage.error("用户不存在"); + recharge.value.jwcode = '' } else { user.value = result.data; console.log("用户信息", user.value); @@ -272,32 +279,32 @@ const getUser = async function (jwcode) { } catch (error) { console.log("请求失败", error); ElMessage.error("查询失败,请检查精网号是否正确"); - // 在这里可以处理错误逻辑,比如显示错误提示等 + recharge.value.jwcode = '' } } // 这是查询活动的接口,一期没有调用这个接口 const activity = ref([]) -const getActivity = async function () { - try { - // 发送POST请求 - const result = await API({ - url: '/general/activity', - data: { +// const getActivity = async function () { +// try { +// // 发送POST请求 +// const result = await API({ +// url: '/general/activity', +// data: { - } - }) - - // 将响应结果存储到响应式数据中 - console.log('请求成功', result) - // 存储表格数据 - activity.value = result.data - console.log('活动信息', activity.value) - } catch (error) { - console.log('activity请求失败', error) - // 在这里可以处理错误逻辑,比如显示错误提示等 - } -} +// } +// }) + +// // 将响应结果存储到响应式数据中 +// console.log('请求成功', result) +// // 存储表格数据 +// activity.value = result.data +// console.log('活动信息', activity.value) +// } catch (error) { +// console.log('activity请求失败', error) +// // 在这里可以处理错误逻辑,比如显示错误提示等 +// } +// } @@ -467,7 +474,7 @@ onMounted(() => { class="add-form" > - + ({ value: item, label: item })); - } else { - console.error('退款类型数据格式错误', result) - ElMessage.error('退款类型数据格式错误,请联系管理员') - } - console.log('退款类型', refundType.value) - } catch (error) { - console.log('退款类型请求失败', error) - } -} +// const getRefundTypes = async function () { +// try { +// // 发送请求获取退款类型 +// const result = await API({ +// url: '/refund/refundType', //这里应该写上一个退款类型的接口 +// data: {} }) +// console.log('退款类型请求成功', result) +// // 检查返回的数据是否为数组 +// if (Array.isArray(result.data)) { +// // 将字符串数组转换为 { value, label } 格式 +// refundType.value = result.data.map(item => ({ value: item, label: item })); +// } else { +// console.error('退款类型数据格式错误', result) +// ElMessage.error('退款类型数据格式错误,请联系管理员') +// } +// console.log('退款类型', refundType.value) +// } catch (error) { +// console.log('退款类型请求失败', error) +// } +// } @@ -395,7 +397,7 @@ watch(calculatedRechargeGoods, (newVal) => { // 挂载 onMounted(async function () { await getAdminData() - await getRefundTypes() + // await getRefundTypes() // await getGoods() }) @@ -416,6 +418,7 @@ onMounted(async function () { v-model="addRefund.jwcode" style="width: 220px" @change="getGoods(addRefund.jwcode)" + @blur="getUser(addRefund.jwcode)" />
+
- 退款类型: - - - - -
-
- -
- 退款商品: + 商品名称:
+ +
+ 退款类型: + + + + +
+
From a4ed18d5611e09fd7e3390c307f2db5ac7ef00d3 Mon Sep 17 00:00:00 2001 From: lihui Date: Tue, 8 Jul 2025 13:48:07 +0800 Subject: [PATCH 07/19] =?UTF-8?q?=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 3 ++- .env.production | 2 +- .env.test | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.env.development b/.env.development index 4938f73..e3b7059 100644 --- a/.env.development +++ b/.env.development @@ -1,4 +1,5 @@ -VITE_API_BASE='https://hwjb.homilychart.com/admin' +#VITE_API_BASE='https://hwjb.homilychart.com/admin' +VITE_API_BASE='https://hwjb.homilychart.com/dev/admin' # VITE_API_BASE='https://hwjb.homilychart.com/gold_htms_dev' # VITE_API_BASE='http://192.168.8.242:8081/' # VITE_API_BASE='http://18.143.76.3:10704/' diff --git a/.env.production b/.env.production index a66fadb..013adca 100644 --- a/.env.production +++ b/.env.production @@ -1,5 +1,5 @@ # VITE_API_BASE='http://54.251.137.151:10702/' -VITE_API_BASE='https://hwjb.homilychart.com/admin' +VITE_API_BASE='https://hwjb.homilychart.com/prod' # VITE_API_BASE='https://hwjb.homilychart.com/gold_htms_dev' # VITE_API_BASE='http://192.168.8.232:8080/' VITE_UPLOAD_URL=https://api.homilychart.com/hljw/api/aws/upload diff --git a/.env.test b/.env.test index 1879950..995e851 100644 --- a/.env.test +++ b/.env.test @@ -1,4 +1,4 @@ # VITE_API_BASE='https://hwjb.homilychart.com/gold_htms_prod' -VITE_API_BASE='https://hwjb.homilychart.com/admin/' +VITE_API_BASE='https://hwjb.homilychart.com/dev/admin/' # VITE_API_BASE='http://18.143.76.3:10704/' VITE_UPLOAD_URL=https://api.homilychart.com/hljw/api/aws/upload \ No newline at end of file From df8761e94dcff1fd98a8b443f0971c588580d73b Mon Sep 17 00:00:00 2001 From: zry <18990852002@163.com> Date: Tue, 8 Jul 2025 14:11:54 +0800 Subject: [PATCH 08/19] Only retain two decimal places --- .env.development | 3 ++- src/views/recharge/addCoinRecharge.vue | 30 ++++++++++++++++++++++++++++++ src/views/refund/addCoinRefund.vue | 2 +- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/.env.development b/.env.development index 4938f73..f522d71 100644 --- a/.env.development +++ b/.env.development @@ -1,4 +1,5 @@ -VITE_API_BASE='https://hwjb.homilychart.com/admin' +# VITE_API_BASE='https://hwjb.homilychart.com/admin' +VITE_API_BASE='https://hwjb.homilychart.com/dev/admin' # VITE_API_BASE='https://hwjb.homilychart.com/gold_htms_dev' # VITE_API_BASE='http://192.168.8.242:8081/' # VITE_API_BASE='http://18.143.76.3:10704/' diff --git a/src/views/recharge/addCoinRecharge.vue b/src/views/recharge/addCoinRecharge.vue index f4c0ea7..2c4e0ce 100644 --- a/src/views/recharge/addCoinRecharge.vue +++ b/src/views/recharge/addCoinRecharge.vue @@ -186,6 +186,16 @@ const rules = reactive({ callback(new Error('不能包含特殊符号或负数')); return; } + + // 检查小数位数 + if (value.includes('.')) { + const decimalPart = value.split('.')[1]; + if (decimalPart.length > 2) { + callback(new Error('小数位数不能超过两位')); + return; + } + } + const numValue = Number(value); if (isNaN(numValue)) { callback(new Error('请输入有效的数字')); @@ -207,6 +217,16 @@ const rules = reactive({ callback(new Error('不能包含特殊符号或负数')); return; } + + // 检查小数位数 + if (value.includes('.')) { + const decimalPart = value.split('.')[1]; + if (decimalPart.length > 2) { + callback(new Error('小数位数不能超过两位')); + return; + } + } + const numValue = Number(value); if (isNaN(numValue)) { callback(new Error('请输入有效的数字')); @@ -234,6 +254,16 @@ const rules = reactive({ callback(new Error('不能包含特殊符号或负数')); return; } + + // 检查小数位数 + if (value.includes('.')) { + const decimalPart = value.split('.')[1]; + if (decimalPart.length > 2) { + callback(new Error('小数位数不能超过两位')); + return; + } + } + const numValue = Number(value); if (isNaN(numValue)) { callback(new Error('请输入有效的数字')); diff --git a/src/views/refund/addCoinRefund.vue b/src/views/refund/addCoinRefund.vue index 8eb44eb..6573a03 100644 --- a/src/views/refund/addCoinRefund.vue +++ b/src/views/refund/addCoinRefund.vue @@ -385,7 +385,7 @@ const calculatedRechargeGoods = computed(() => { const permanentGold = addRefund.value.permanentGold === '' ? 0 : +addRefund.value.permanentGold; const freeGold = addRefund.value.freeGold === '' ? 0 : +addRefund.value.freeGold; const taskGold = addRefund.value.taskGold === '' ? 0 : +addRefund.value.taskGold; - return Number((permanentGold + freeGold + taskGold).toFixed(8)); + return Number((permanentGold + freeGold + taskGold).toFixed(2)); }) watch(calculatedRechargeGoods, (newVal) => { From 7d3158e2df2568b2d341e95c923f0fbb18fb87ff Mon Sep 17 00:00:00 2001 From: lihui Date: Tue, 8 Jul 2025 14:57:28 +0800 Subject: [PATCH 09/19] =?UTF-8?q?feat(consume):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=B6=88=E8=B4=B9=E9=87=91=E5=B8=81=E9=AA=8C=E8=AF=81=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E5=AF=B9=E6=95=B0=E5=AD=97=200=E7=9A=84=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改消费金币总数的验证规则,增加对负数和数字格式的校验 - 限制小数位数为最多两位- 在 managerecharge/rate.vue 中添加表单验证逻辑 --- src/views/consume/addCoinConsume.vue | 46 ++++++++++++++++++++++++++++++++---- src/views/managerecharge/rate.vue | 33 +++++++++++++++++--------- 2 files changed, 63 insertions(+), 16 deletions(-) diff --git a/src/views/consume/addCoinConsume.vue b/src/views/consume/addCoinConsume.vue index 2d64ecf..458c54b 100644 --- a/src/views/consume/addCoinConsume.vue +++ b/src/views/consume/addCoinConsume.vue @@ -68,15 +68,23 @@ const rules = reactive({ {required: true, message: "请输入精网号", trigger: "blur"}, // { type: 'number', message: "精网号必须为数字", trigger: "blur" } ], - goodsName: [{required: true, message: "请选择消费商品", trigger: "change"}], + goodsName: [{required: true, message: "请选择消费商品", trigger: "blur"}], sumGold: [ - {required: true, message: "消费金币总数不能为空", trigger: "blur"}, + { required: true, message: "消费金币总数不能为空", trigger: "blur" }, { - pattern: /^\d+(\.\d+)?$/, - message: "存在负数或数字格式不正确,请输入正数", + validator: (rule, value, callback) => { + // 允许0开头的小数(如0.1)但不允许单独的0 + const isValid = /^(0\.\d{1,2})|([1-9]\d*(\.\d{1,2})?)$/.test(value); + + if (!isValid) { + callback(new Error("请输入大于0的正数(可包含最多两位小数)")); + } else { + callback(); + } + }, trigger: "blur" } - ], + ] }); // 查询商品的表单 const goods = ref([]); @@ -102,6 +110,7 @@ const getAdminData = async function () { } }; + // 输入验证函数 function validateInput() { const sumGold = parseFloat(addConsume.value.sumGold); @@ -123,6 +132,33 @@ function validateInput() { return false; } */ + // sumGold 补充0(比如.1 为0.1) + if (addConsume.value.sumGold && addConsume.value.sumGold.toString().startsWith('.')) { + addConsume.value.sumGold = '0' + addConsume.value.sumGold; + // ElMessage.info('已自动补充前导0'); + } + // 验证金币不能为负数 + if (sumGold < 0) { + ElMessage.warning("消费金币总数不能为负数"); + addConsume.value.sumGold = null; + return false; + } + + // 小数位数限制 2位 + if (addConsume.value.sumGold) { + const sumGoldStr = addConsume.value.sumGold.toString(); + if (sumGoldStr.includes('.')) { + const decimalPart = sumGoldStr.split('.')[1]; + if (decimalPart.length > 2) { + // 截断到两位小数并提示 + const truncatedValue = parseFloat(sumGoldStr.slice(0, sumGoldStr.indexOf('.') + 3)); + addConsume.value.sumGold = truncatedValue; + ElMessage.info('最多允许输入两位小数'); + } + } + } + + // 验证金币总和 diff --git a/src/views/managerecharge/rate.vue b/src/views/managerecharge/rate.vue index 355f77b..9f59687 100644 --- a/src/views/managerecharge/rate.vue +++ b/src/views/managerecharge/rate.vue @@ -208,17 +208,28 @@ const editRate = async function () { } } -// 编辑确认 + +// 添加前验证 const edit = () => { - ElMessageBox.confirm('确认修改?') - .then(() => { - editRate() - regeEdit.value = false - }) - .catch(() => { - regeEdit.value = false - }) -} + editFormRef.value.validate(async (valid) => { + if (valid) { + try { + await ElMessageBox.confirm("确认修改?"); + await editRate(); + console.log("修改成功"); + regeEdit.value = false; + } catch (error) { + console.log("取消修改", error); + regeEdit.value = false; + } + } else { + ElMessage({ + type: "error", + message: "请检查输入内容", + }); + } + }); +}; // 关闭编辑弹窗时重置表单 const cancelEdit = () => { @@ -284,7 +295,6 @@ function handleInput(value) { // 需求没有,注释,先不显示 // ElMessage.info('已自动补充前导0'); } - // 更新表单值 rateEdit.value.num = value; @@ -393,6 +403,7 @@ onMounted(async function () { ref="editFormRef" style="max-width: 600px" :model="rateEdit" + :rules="rules" label-width="auto" class="demo-ruleForm" From 1fc5e347ea28410aad10cecc1e2b74578d352acf Mon Sep 17 00:00:00 2001 From: zry <18990852002@163.com> Date: Tue, 8 Jul 2025 15:01:40 +0800 Subject: [PATCH 10/19] The number of integer digits can't exceed 6 --- src/views/recharge/addCoinRecharge.vue | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/views/recharge/addCoinRecharge.vue b/src/views/recharge/addCoinRecharge.vue index 2c4e0ce..4829d3a 100644 --- a/src/views/recharge/addCoinRecharge.vue +++ b/src/views/recharge/addCoinRecharge.vue @@ -187,6 +187,13 @@ const rules = reactive({ return; } + // 检查整数位数 + const integerPart = value.split('.')[0]; + if (integerPart.length > 6) { + callback(new Error('整数位数不能超过6位')); + return; + } + // 检查小数位数 if (value.includes('.')) { const decimalPart = value.split('.')[1]; @@ -218,6 +225,13 @@ const rules = reactive({ return; } + // 检查整数位数 + const integerPart = value.split('.')[0]; + if (integerPart.length > 6) { + callback(new Error('整数位数不能超过6位')); + return; + } + // 检查小数位数 if (value.includes('.')) { const decimalPart = value.split('.')[1]; @@ -255,6 +269,13 @@ const rules = reactive({ return; } + // 检查整数位数 + const integerPart = value.split('.')[0]; + if (integerPart.length > 6) { + callback(new Error('整数位数不能超过6位')); + return; + } + // 检查小数位数 if (value.includes('.')) { const decimalPart = value.split('.')[1]; From 2ca5bf6f98e8fcf97e06208a407fbc359c6965e0 Mon Sep 17 00:00:00 2001 From: lihui Date: Tue, 8 Jul 2025 16:19:22 +0800 Subject: [PATCH 11/19] =?UTF-8?q?feat:=20=E9=99=90=E5=88=B6=E9=87=91?= =?UTF-8?q?=E5=B8=81=E6=B6=88=E8=80=97=E3=80=81=E6=B1=87=E7=8E=87=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E4=B8=BA6=E4=BD=8D=E6=95=B4=E6=95=B0=E5=92=8C2?= =?UTF-8?q?=E4=BD=8D=E5=B0=8F=E6=95=B0=EF=BC=8C=E6=B6=88=E8=80=97=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BC=98=E5=8C=96=20refactor=EF=BC=9A=E6=B1=87?= =?UTF-8?q?=E7=8E=87=E6=A0=B7=E5=BC=8F=20fix=EF=BC=9A=E5=AE=A1=E6=A0=B8?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B9=9F=E8=A2=AB=E9=87=8D=E7=BD=AE=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/audit/rechargeAudit.vue | 2 +- src/views/consume/addCoinConsume.vue | 99 ++++++++++++++++++++++++------------ src/views/managerecharge/rate.vue | 29 ++++++++--- 3 files changed, 89 insertions(+), 41 deletions(-) diff --git a/src/views/audit/rechargeAudit.vue b/src/views/audit/rechargeAudit.vue index d170d21..2c46ff6 100644 --- a/src/views/audit/rechargeAudit.vue +++ b/src/views/audit/rechargeAudit.vue @@ -349,7 +349,7 @@ const resetSearch = function () { startTime: "", endTime: "", market: "", - auditStatus: "0" + // auditStatus: "0" } getTime.value = [] getRecharge() diff --git a/src/views/consume/addCoinConsume.vue b/src/views/consume/addCoinConsume.vue index 458c54b..5c0ad41 100644 --- a/src/views/consume/addCoinConsume.vue +++ b/src/views/consume/addCoinConsume.vue @@ -144,9 +144,30 @@ function validateInput() { return false; } - // 小数位数限制 2位 +// 小数位数限制 2位,整数位数限制 6位 if (addConsume.value.sumGold) { const sumGoldStr = addConsume.value.sumGold.toString(); + + // 检查整数部分长度 + if (sumGoldStr.includes('.')) { + const integerPart = sumGoldStr.split('.')[0]; + if (integerPart.length > 6) { + // 截断整数部分到6位并提示 + const truncatedInteger = integerPart.slice(0, 6); + addConsume.value.sumGold = parseFloat(truncatedInteger); + ElMessage.info('整数部分最多允许6位'); + return; // 直接返回,不再处理小数部分 + } + } else { + // 纯整数情况 + if (sumGoldStr.length > 6) { + addConsume.value.sumGold = parseFloat(sumGoldStr.slice(0, 6)); + ElMessage.info('整数部分最多允许6位'); + return; + } + } + + // 处理小数部分 if (sumGoldStr.includes('.')) { const decimalPart = sumGoldStr.split('.')[1]; if (decimalPart.length > 2) { @@ -160,7 +181,6 @@ function validateInput() { - // 验证金币总和 const totalAvailableGold = (user.value.nowSumGold) if (user.value.jwcode && sumGold > totalAvailableGold) { @@ -323,48 +343,61 @@ const addBefore = () => { }; // 查询客户信息(通过精网号) const getUser = async function (jwcode) { - trimJwCode(); try { + // 验证精网号 + if (!jwcode) { + ElMessage.warning('精网号不能为空'); + return; + } + + // 验证精网号是否为数字 + if (!/^\d+$/.test(jwcode)) { + ElMessage.warning('精网号必须为数字'); + resetForm() + return; + } + // 发送POST请求 const result = await request({ - // url: "user/selectUser", url: "/user/selectUser", - data: { - // 只需要传精网号 - jwcode: addConsume.value.jwcode, - }, + data: { jwcode } }); + console.log("请求成功", result); - if (result.code === 200 && result.data !== null) { - user.value = result.data; - user.value.nowPermanentGold = result.data.nowPermanentGold / 100; - user.value.nowFreeGold = result.data.nowFreeGold / 100; - user.value.nowSumGold = result.data.nowSumGold / 100; - user.value.nowTaskGold = result.data.nowTaskGold / 100; - user.value.nowFreeJune = (result.data.nowFreeJune) / 100; - user.value.nowFreeDecember = (result.data.nowFreeDecember) / 100; - - user.value.historySumGold = (result.data.historySumGold) / 100; - user.value.historyPermanentGold = (result.data.historyPermanentGold) / 100; - user.value.historyFreeGold = (result.data.historyFreeGold) / 100; - user.value.historyTaskGold = (result.data.historyTaskGold) / 100; - } else if (result.data == null) { + if (result.code === 200 && result.data) { + // 处理用户数据 + user.value = { + ...result.data, + // 统一处理所有黄金数值,除以100 + nowPermanentGold: result.data.nowPermanentGold / 100, + nowFreeGold: result.data.nowFreeGold / 100, + nowSumGold: result.data.nowSumGold / 100, + nowTaskGold: result.data.nowTaskGold / 100, + nowFreeJune: result.data.nowFreeJune / 100, + nowFreeDecember: result.data.nowFreeDecember / 100, + historySumGold: result.data.historySumGold / 100, + historyPermanentGold: result.data.historyPermanentGold / 100, + historyFreeGold: result.data.historyFreeGold / 100, + historyTaskGold: result.data.historyTaskGold / 100 + }; + + ElMessage.success("查询成功"); + // 检查,sumGold + validateInput() + + } else if (!result.data) { ElMessage.warning("用户不存在"); - // 重置表单 - resetForm(); - } else if (result.code === 0) { - ElMessage.warning("请检查查询参数") + user.value.jwcode = null + addConsume.value.jwcode = null + // resetForm(); // 重置表单 } else { - console.log("用户信息", user.value); - ElMessage.success(result.msg); + ElMessage.warning(result.msg || "请检查查询参数"); } } catch (error) { - console.log("请求失败", error); - ElMessage.error("查询失败,请检查精网号是否正确"); - // 重置表单 - resetForm(); - // 在这里可以处理错误逻辑,比如显示错误提示等 + console.error("请求失败", error); + ElMessage.error("查询失败,请检查网络连接或精网号是否正确"); + resetForm(); // 重置表单 } }; // 获取商品信息(三楼接口) diff --git a/src/views/managerecharge/rate.vue b/src/views/managerecharge/rate.vue index 9f59687..c995ecc 100644 --- a/src/views/managerecharge/rate.vue +++ b/src/views/managerecharge/rate.vue @@ -280,12 +280,27 @@ function handleInput(value) { value = value.substring(1); } - // 最多两位小数,超过时才显示提示 +// 最多两位小数,超过时才显示提示 if (value.includes('.')) { const parts = value.split('.') + // 限制整数部分最多六位 + if (parts[0].length > 6) { + parts[0] = parts[0].slice(0, 6) + ElMessage.info('整数部分最多允许六位') + } + // 限制小数部分最多两位 if (parts[1].length > 2) { - value = parts[0] + '.' + parts[1].slice(0, 2) + parts[1] = parts[1].slice(0, 2) + value = parts[0] + '.' + parts[1] ElMessage.info('最多允许两位小数') + } else { + value = parts[0] + '.' + parts[1] + } + } else { + // 纯整数时限制最多六位 + if (value.length > 6) { + value = value.slice(0, 6) + ElMessage.info('整数部分最多允许六位') } } @@ -424,19 +439,19 @@ onMounted(async function () { /> + -

:1

-

+ :1 + (提示:当前规则每 {{ rateEdit.num }} - {{ rateEdit.rateName }} - 可兑换 1 新币) -

+ {{ rateEdit.rateName }}可兑换 1 新币) +
From ddc29ddb8a62fd0d9d296fd3b22597c1247a6c71 Mon Sep 17 00:00:00 2001 From: lihui Date: Tue, 8 Jul 2025 16:21:49 +0800 Subject: [PATCH 12/19] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.env.development b/.env.development index 0783298..3b5ebee 100644 --- a/.env.development +++ b/.env.development @@ -1,10 +1,3 @@ -<<<<<<< HEAD -# VITE_API_BASE='https://hwjb.homilychart.com/admin' VITE_API_BASE='https://hwjb.homilychart.com/dev/admin' -# VITE_API_BASE='https://hwjb.homilychart.com/gold_htms_dev' -======= -VITE_API_BASE='https://hwjb.homilychart.com/admin' ->>>>>>> 3f86315c763df2cadd42226e5bbc74ea2917bf86 -# VITE_API_BASE='http://192.168.8.242:8081/' VITE_UPLOAD_URL=http://39.101.133.168:8828/hljw/api/aws/upload From 6a63fab816cc0dfc73e0c62debb86f8cc0df2ea9 Mon Sep 17 00:00:00 2001 From: zry <18990852002@163.com> Date: Tue, 8 Jul 2025 17:16:33 +0800 Subject: [PATCH 13/19] new modified --- .env.development | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.env.development b/.env.development index 0783298..8c353a3 100644 --- a/.env.development +++ b/.env.development @@ -1,10 +1,5 @@ -<<<<<<< HEAD # VITE_API_BASE='https://hwjb.homilychart.com/admin' VITE_API_BASE='https://hwjb.homilychart.com/dev/admin' -# VITE_API_BASE='https://hwjb.homilychart.com/gold_htms_dev' -======= -VITE_API_BASE='https://hwjb.homilychart.com/admin' ->>>>>>> 3f86315c763df2cadd42226e5bbc74ea2917bf86 # VITE_API_BASE='http://192.168.8.242:8081/' VITE_UPLOAD_URL=http://39.101.133.168:8828/hljw/api/aws/upload From d70820d42090062e3c894e8bd1977cbd53b67394 Mon Sep 17 00:00:00 2001 From: lihui Date: Tue, 8 Jul 2025 17:22:04 +0800 Subject: [PATCH 14/19] =?UTF-8?q?feat(home):=20=20=E4=BD=BF=E7=94=A8=20Bad?= =?UTF-8?q?ge=20=E5=BE=BD=E7=AB=A0=20=E6=9F=A5=E7=9C=8B=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/home.vue | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/views/home.vue b/src/views/home.vue index a450408..cd4a36a 100644 --- a/src/views/home.vue +++ b/src/views/home.vue @@ -120,6 +120,7 @@ const openExportList = () => { - +