From b3bb1114bafde1f8707e4934c017280436fb7216 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Fri, 15 May 2026 19:48:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(wms):=20=E5=AE=8C=E5=96=84=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E7=8A=B6=E6=80=81=E4=BF=9D=E6=8A=A4=E4=B8=8E=E9=87=91?= =?UTF-8?q?=E9=A2=9D=E7=B2=BE=E5=BA=A6=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 后端补充商品、往来企业唯一性校验 - 单据更新改为按草稿状态条件更新,避免覆盖已完成单据 - 补充 WMS 金额、规格精度迁移 SQL 与测试表结构 - 前端统一明细金额兜底计算,优化完成/作废取消处理 --- src/views/wms/order/check/CheckOrderForm.vue | 4 ++++ src/views/wms/order/movement/MovementOrderDetail.vue | 9 +++------ src/views/wms/order/movement/MovementOrderForm.vue | 4 ++++ src/views/wms/order/movement/index.vue | 6 ++---- src/views/wms/order/receipt/ReceiptOrderDetail.vue | 9 +++------ src/views/wms/order/receipt/ReceiptOrderPrint.vue | 9 +++------ src/views/wms/order/receipt/index.vue | 6 ++---- src/views/wms/order/shipment/ShipmentOrderDetail.vue | 9 +++------ src/views/wms/order/shipment/ShipmentOrderPrint.vue | 9 +++------ src/views/wms/order/shipment/index.vue | 6 ++---- 10 files changed, 29 insertions(+), 42 deletions(-) diff --git a/src/views/wms/order/check/CheckOrderForm.vue b/src/views/wms/order/check/CheckOrderForm.vue index 2e3fa6bb7..fbc184c48 100644 --- a/src/views/wms/order/check/CheckOrderForm.vue +++ b/src/views/wms/order/check/CheckOrderForm.vue @@ -628,6 +628,8 @@ const handleComplete = async () => { message.success('盘库成功') dialogVisible.value = false emit('success') + } catch { + // 用户点击确认框取消按钮、或网络异常时跳过 } finally { formLoading.value = false } @@ -642,6 +644,8 @@ const handleCancel = async () => { message.success('作废成功') dialogVisible.value = false emit('success') + } catch { + // 用户点击确认框取消按钮、或网络异常时跳过 } finally { formLoading.value = false } diff --git a/src/views/wms/order/movement/MovementOrderDetail.vue b/src/views/wms/order/movement/MovementOrderDetail.vue index 82a1a94f9..c8905eb5a 100644 --- a/src/views/wms/order/movement/MovementOrderDetail.vue +++ b/src/views/wms/order/movement/MovementOrderDetail.vue @@ -86,7 +86,8 @@ import { formatPrice, formatQuantity, formatSumPrice, - formatSumQuantity + formatSumQuantity, + multiplyPrice } from '@/views/wms/utils/format' /** WMS 移库单详情 */ @@ -103,11 +104,7 @@ interface DetailRow extends MovementOrderDetailVO { const detailRows = computed(() => (detailData.value.details || []).map((detail) => ({ ...detail, - totalPrice: - detail.totalPrice ?? - (detail.price != null && detail.quantity - ? Number(detail.price) * Number(detail.quantity) - : undefined) + totalPrice: detail.totalPrice ?? multiplyPrice(detail.quantity, detail.price) })) ) diff --git a/src/views/wms/order/movement/MovementOrderForm.vue b/src/views/wms/order/movement/MovementOrderForm.vue index c3031f94b..3695f7a45 100644 --- a/src/views/wms/order/movement/MovementOrderForm.vue +++ b/src/views/wms/order/movement/MovementOrderForm.vue @@ -466,6 +466,8 @@ const handleComplete = async () => { message.success('移库成功') dialogVisible.value = false emit('success') + } catch { + // 用户点击确认框取消按钮、或网络异常时跳过 } finally { formLoading.value = false } @@ -480,6 +482,8 @@ const handleCancel = async () => { message.success('作废成功') dialogVisible.value = false emit('success') + } catch { + // 用户点击确认框取消按钮、或网络异常时跳过 } finally { formLoading.value = false } diff --git a/src/views/wms/order/movement/index.vue b/src/views/wms/order/movement/index.vue index c26a2f2f5..9aad7c83f 100644 --- a/src/views/wms/order/movement/index.vue +++ b/src/views/wms/order/movement/index.vue @@ -367,6 +367,7 @@ import { import { formatPrice, formatQuantity, + multiplyPrice, PRICE_PRECISION, QUANTITY_PRECISION } from '@/views/wms/utils/format' @@ -502,10 +503,7 @@ const getDetailTotalPrice = (detail: MovementOrderDetailVO) => { if (detail.totalPrice !== undefined && detail.totalPrice !== null) { return detail.totalPrice } - if (!detail.quantity || detail.price === undefined || detail.price === null) { - return undefined - } - return Number(detail.quantity) * Number(detail.price) + return multiplyPrice(detail.quantity, detail.price) } /** 展开明细 */ diff --git a/src/views/wms/order/receipt/ReceiptOrderDetail.vue b/src/views/wms/order/receipt/ReceiptOrderDetail.vue index af9cd4b0d..e668f32f7 100644 --- a/src/views/wms/order/receipt/ReceiptOrderDetail.vue +++ b/src/views/wms/order/receipt/ReceiptOrderDetail.vue @@ -104,7 +104,8 @@ import { formatPrice, formatQuantity, formatSumPrice, - formatSumQuantity + formatSumQuantity, + multiplyPrice } from '@/views/wms/utils/format' /** WMS 入库单详情 */ @@ -120,11 +121,7 @@ const detailData = ref({}) // 详情数据 const detailRows = computed(() => (detailData.value.details || []).map((detail) => ({ ...detail, - totalPrice: - detail.totalPrice ?? - (detail.price != null && detail.quantity - ? Number(detail.price) * Number(detail.quantity) - : undefined) + totalPrice: detail.totalPrice ?? multiplyPrice(detail.quantity, detail.price) })) ) diff --git a/src/views/wms/order/receipt/ReceiptOrderPrint.vue b/src/views/wms/order/receipt/ReceiptOrderPrint.vue index f2fd41ebd..d4c7d96f2 100644 --- a/src/views/wms/order/receipt/ReceiptOrderPrint.vue +++ b/src/views/wms/order/receipt/ReceiptOrderPrint.vue @@ -103,7 +103,8 @@ import { formatPrice, formatQuantity, formatSumPrice, - formatSumQuantity + formatSumQuantity, + multiplyPrice } from '@/views/wms/utils/format' import Barcode from '@/views/mes/wm/barcode/components/Barcode.vue' import { BarcodeFormatEnum } from '@/views/mes/utils/constants' @@ -129,11 +130,7 @@ interface PrintRow extends ReceiptOrderDetailVO { const printRows = computed(() => (printData.value.details || []).map((detail) => ({ ...detail, - totalPrice: - detail.totalPrice ?? - (detail.price != null && detail.quantity - ? Number((Number(detail.price) * Number(detail.quantity)).toFixed(2)) - : undefined) + totalPrice: detail.totalPrice ?? multiplyPrice(detail.quantity, detail.price) })) ) diff --git a/src/views/wms/order/receipt/index.vue b/src/views/wms/order/receipt/index.vue index 346248850..657fe4dbd 100644 --- a/src/views/wms/order/receipt/index.vue +++ b/src/views/wms/order/receipt/index.vue @@ -414,6 +414,7 @@ import { import { formatPrice, formatQuantity, + multiplyPrice, PRICE_PRECISION, QUANTITY_PRECISION } from '@/views/wms/utils/format' @@ -559,10 +560,7 @@ const getDetailTotalPrice = (detail: ReceiptOrderDetailVO) => { if (detail.totalPrice !== undefined && detail.totalPrice !== null) { return detail.totalPrice } - if (!detail.quantity || detail.price === undefined || detail.price === null) { - return undefined - } - return Number(detail.quantity) * Number(detail.price) + return multiplyPrice(detail.quantity, detail.price) } /** 展开明细 */ diff --git a/src/views/wms/order/shipment/ShipmentOrderDetail.vue b/src/views/wms/order/shipment/ShipmentOrderDetail.vue index 7c2c81cdb..dc490a355 100644 --- a/src/views/wms/order/shipment/ShipmentOrderDetail.vue +++ b/src/views/wms/order/shipment/ShipmentOrderDetail.vue @@ -104,7 +104,8 @@ import { formatPrice, formatQuantity, formatSumPrice, - formatSumQuantity + formatSumQuantity, + multiplyPrice } from '@/views/wms/utils/format' /** WMS 出库单详情 */ @@ -120,11 +121,7 @@ const detailData = ref({}) // 详情数据 const detailRows = computed(() => (detailData.value.details || []).map((detail) => ({ ...detail, - totalPrice: - detail.totalPrice ?? - (detail.price != null && detail.quantity - ? Number(detail.price) * Number(detail.quantity) - : undefined) + totalPrice: detail.totalPrice ?? multiplyPrice(detail.quantity, detail.price) })) ) diff --git a/src/views/wms/order/shipment/ShipmentOrderPrint.vue b/src/views/wms/order/shipment/ShipmentOrderPrint.vue index 9db1d0f17..dd9c06c03 100644 --- a/src/views/wms/order/shipment/ShipmentOrderPrint.vue +++ b/src/views/wms/order/shipment/ShipmentOrderPrint.vue @@ -103,7 +103,8 @@ import { formatPrice, formatQuantity, formatSumPrice, - formatSumQuantity + formatSumQuantity, + multiplyPrice } from '@/views/wms/utils/format' import Barcode from '@/views/mes/wm/barcode/components/Barcode.vue' import { BarcodeFormatEnum } from '@/views/mes/utils/constants' @@ -129,11 +130,7 @@ interface PrintRow extends ShipmentOrderDetailVO { const printRows = computed(() => (printData.value.details || []).map((detail) => ({ ...detail, - totalPrice: - detail.totalPrice ?? - (detail.price != null && detail.quantity - ? Number((Number(detail.price) * Number(detail.quantity)).toFixed(2)) - : undefined) + totalPrice: detail.totalPrice ?? multiplyPrice(detail.quantity, detail.price) })) ) diff --git a/src/views/wms/order/shipment/index.vue b/src/views/wms/order/shipment/index.vue index d92605d82..99be459bd 100644 --- a/src/views/wms/order/shipment/index.vue +++ b/src/views/wms/order/shipment/index.vue @@ -414,6 +414,7 @@ import { import { formatPrice, formatQuantity, + multiplyPrice, PRICE_PRECISION, QUANTITY_PRECISION } from '@/views/wms/utils/format' @@ -559,10 +560,7 @@ const getDetailTotalPrice = (detail: ShipmentOrderDetailVO) => { if (detail.totalPrice !== undefined && detail.totalPrice !== null) { return detail.totalPrice } - if (!detail.quantity || detail.price === undefined || detail.price === null) { - return undefined - } - return Number(detail.quantity) * Number(detail.price) + return multiplyPrice(detail.quantity, detail.price) } /** 展开明细 */