From 7d3158e2df2568b2d341e95c923f0fbb18fb87ff Mon Sep 17 00:00:00 2001 From: lihui Date: Tue, 8 Jul 2025 14:57:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(consume):=20=E4=BC=98=E5=8C=96=E6=B6=88?= =?UTF-8?q?=E8=B4=B9=E9=87=91=E5=B8=81=E9=AA=8C=E8=AF=81=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E5=AF=B9=E6=95=B0=E5=AD=97=200=E7=9A=84=20=E4=BC=98?= =?UTF-8?q?=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"