diff --git a/src/views/modules/label-split-merge/labelSplitMerge.vue b/src/views/modules/label-split-merge/labelSplitMerge.vue index 1442943..ec2c56a 100644 --- a/src/views/modules/label-split-merge/labelSplitMerge.vue +++ b/src/views/modules/label-split-merge/labelSplitMerge.vue @@ -89,7 +89,7 @@
- 拆分后:原标签剩余 {{ calculateRemainingQty }} 个,新增 {{ splitCount }} 张标签,每张 {{ splitQuantity }} 个 + 拆分后:原标签剩余 {{ calculateRemainingQty }} 个,新增 {{ splitCount }} 张标签,每张 {{ formatDisplayQty(splitQuantity) }} 个
@@ -215,10 +215,7 @@ export default { confirmSplit() { if (this.isSplitting) return; - const splitCnt = parseInt(this.splitCount); - const splitQty = parseFloat(this.splitQuantity); - const currentQty = parseFloat(this.currentLabel.qtyOnHand); - const totalSplitQty = splitCnt * splitQty; + const { splitCnt, splitQty, currentQty, remainingQty } = this.getSplitCalculation(); if (!splitCnt || splitCnt <= 0) { this.$message.warning('请输入有效的拆分张数'); @@ -228,7 +225,7 @@ export default { this.$message.warning('请输入有效的每张数量'); return; } - if (totalSplitQty >= currentQty) { + if (remainingQty <= 0) { this.$message.warning('拆分总数量必须小于当前数量'); return; } @@ -505,25 +502,41 @@ export default { // 执行打印 LODOP.PRINT(); } + }, + formatDisplayQty(value) { + const num = Number(value); + if (!Number.isFinite(num)) { + return '0'; + } + // 保留最多6位小数并去除末尾0,避免展示浮点尾差 + return Number(num.toFixed(6)).toString(); + }, + getSplitCalculation() { + const splitCnt = parseInt(this.splitCount, 10) || 0; + const splitQty = parseFloat(this.splitQuantity) || 0; + const currentQty = parseFloat(this.currentLabel.qtyOnHand) || 0; + const totalSplitQty = this.decimalUtil.mul(splitCnt, splitQty); + const remainingQty = this.decimalUtil.sub(currentQty, totalSplitQty); + return { + splitCnt, + splitQty, + currentQty, + totalSplitQty, + remainingQty + }; } }, computed: { // 计算拆分后剩余数量 calculateRemainingQty() { - const currentQty = parseFloat(this.currentLabel.qtyOnHand) || 0; - const splitCnt = parseInt(this.splitCount) || 0; - const splitQty = parseFloat(this.splitQuantity) || 0; - const totalSplitQty = splitCnt * splitQty; - return currentQty - totalSplitQty; + const { remainingQty } = this.getSplitCalculation(); + return this.formatDisplayQty(remainingQty); }, // 判断是否可以拆分 canSplit() { - const splitCnt = parseInt(this.splitCount) || 0; - const splitQty = parseFloat(this.splitQuantity) || 0; - const currentQty = parseFloat(this.currentLabel.qtyOnHand) || 0; - const totalSplitQty = splitCnt * splitQty; - return splitCnt > 0 && splitQty > 0 && totalSplitQty < currentQty; + const { splitCnt, splitQty, remainingQty } = this.getSplitCalculation(); + return splitCnt > 0 && splitQty > 0 && remainingQty > 0; } },