From 50cfbfe58bd0cbfa6912c3f40f80e49b5a067c89 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Fri, 15 May 2026 18:52:37 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E7=BB=9F=E4=B8=80=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E9=87=91=E9=A2=9D=E7=B2=BE=E5=BA=A6=E5=B9=B6=E6=B8=85?= =?UTF-8?q?=E7=90=86=20schema=20=E8=84=B1=E9=92=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后端: - 新增 sql/mysql/wms/20260515_wms_amount_precision.sql 11 张表金额字段统一升到 decimal(16,2),覆盖 SKU 单价、单据主表/明细 总金额/行金额、盘库实际金额、库存流水单价/行金额 - 新增 sql/mysql/wms/20260515_wms_sku_dimension_precision.sql SKU 长宽高对齐 lite 改为 decimal(10,1)、毛/净重改为 decimal(10,3) - 测试 SQL create_tables.sql 全量同步生产 MySQL:数量 (20,2)、 金额 (16,2)、长度 (10,1)、重量 (10,3),修复"测试 schema 与生产 脱钩"导致单测假阳性的隐患 - WmsWarehouseServiceImpl.validateWarehouseCodeUnique 去掉 StrUtil.isBlank 提前 return,因 code 已由 VO 层 @NotBlank 强制非空 - WmsWarehouseServiceImplTest 同步调整 前端: - ReceiptOrderForm / ReceiptOrderDetail 合计行去掉"单价合计"派生展示, 单价不能跨行相加;保留数量合计与行金额合计 文档: - review-opus.md 收口至仅剩 F10 (SQL 导出,用户认领) - 新增 fix-plan.md 与 精度调整-codex讨论.md,沉淀本轮决策依据 --- src/views/wms/order/check/CheckOrderPrint.vue | 1 - src/views/wms/order/movement/MovementOrderDetail.vue | 3 --- src/views/wms/order/movement/MovementOrderForm.vue | 10 +--------- src/views/wms/order/movement/MovementOrderPrint.vue | 1 - src/views/wms/order/receipt/ReceiptOrderDetail.vue | 3 --- src/views/wms/order/receipt/ReceiptOrderForm.vue | 10 +--------- src/views/wms/order/receipt/ReceiptOrderPrint.vue | 1 - src/views/wms/order/shipment/ShipmentOrderDetail.vue | 3 --- src/views/wms/order/shipment/ShipmentOrderForm.vue | 10 +--------- src/views/wms/order/shipment/ShipmentOrderPrint.vue | 1 - 10 files changed, 3 insertions(+), 40 deletions(-) diff --git a/src/views/wms/order/check/CheckOrderPrint.vue b/src/views/wms/order/check/CheckOrderPrint.vue index 0cc70a71a..de0effcf7 100644 --- a/src/views/wms/order/check/CheckOrderPrint.vue +++ b/src/views/wms/order/check/CheckOrderPrint.vue @@ -100,7 +100,6 @@ {{ formatSumQuantity(printRows, (detail) => detail.quantity) }} - {{ formatSumPrice(printRows, (detail) => detail.price) }} {{ formatSumQuantity(printRows, (detail) => detail.checkQuantity) }} diff --git a/src/views/wms/order/movement/MovementOrderDetail.vue b/src/views/wms/order/movement/MovementOrderDetail.vue index 156cd7970..82a1a94f9 100644 --- a/src/views/wms/order/movement/MovementOrderDetail.vue +++ b/src/views/wms/order/movement/MovementOrderDetail.vue @@ -120,9 +120,6 @@ function getSummaries({ columns, data }: { columns: any[]; data: DetailRow[] }) if (column.property === 'quantity') { return formatSumQuantity(data, (detail) => detail.quantity) } - if (column.property === 'price') { - return formatSumPrice(data, (detail) => detail.price) - } if (column.property === 'totalPrice') { return formatSumPrice(data, (detail) => detail.totalPrice) } diff --git a/src/views/wms/order/movement/MovementOrderForm.vue b/src/views/wms/order/movement/MovementOrderForm.vue index 605998fe1..c3031f94b 100644 --- a/src/views/wms/order/movement/MovementOrderForm.vue +++ b/src/views/wms/order/movement/MovementOrderForm.vue @@ -200,14 +200,12 @@ import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect import { OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants' import { dividePrice, - formatPrice, formatQuantity, formatSumPrice, formatSumQuantity, multiplyPrice, PRICE_PRECISION, - QUANTITY_PRECISION, - sumPrice + QUANTITY_PRECISION } from '@/views/wms/utils/format' import { generateOrderNo } from '@/views/wms/utils/order' @@ -241,9 +239,6 @@ const formRules = reactive({ const formRef = ref() const inventorySelectRef = ref() -const detailPriceSum = computed(() => - sumPrice(formData.value.details || [], (detail) => detail.price) -) const isPrepareOrder = computed( () => !formData.value.id || @@ -383,9 +378,6 @@ function getDetailSummaries({ if (column.property === 'quantity') { return formatSumQuantity(data, (detail) => detail.quantity) } - if (column.property === 'price') { - return formatPrice(detailPriceSum.value) - } if (column.property === 'totalPrice') { return formatSumPrice(data, (detail) => detail.totalPrice) } diff --git a/src/views/wms/order/movement/MovementOrderPrint.vue b/src/views/wms/order/movement/MovementOrderPrint.vue index 048a2224a..37428260f 100644 --- a/src/views/wms/order/movement/MovementOrderPrint.vue +++ b/src/views/wms/order/movement/MovementOrderPrint.vue @@ -71,7 +71,6 @@ {{ formatSumQuantity(printRows, (detail) => detail.quantity) }} - {{ formatSumPrice(printRows, (detail) => detail.price) }} {{ formatSumPrice(printRows, (detail) => detail.totalPrice) }} diff --git a/src/views/wms/order/receipt/ReceiptOrderDetail.vue b/src/views/wms/order/receipt/ReceiptOrderDetail.vue index 28e63e49b..af9cd4b0d 100644 --- a/src/views/wms/order/receipt/ReceiptOrderDetail.vue +++ b/src/views/wms/order/receipt/ReceiptOrderDetail.vue @@ -137,9 +137,6 @@ function getSummaries({ columns, data }: { columns: any[]; data: DetailRow[] }) if (column.property === 'quantity') { return formatSumQuantity(data, (detail) => detail.quantity) } - if (column.property === 'price') { - return formatSumPrice(data, (detail) => detail.price) - } if (column.property === 'totalPrice') { return formatSumPrice(data, (detail) => detail.totalPrice) } diff --git a/src/views/wms/order/receipt/ReceiptOrderForm.vue b/src/views/wms/order/receipt/ReceiptOrderForm.vue index 746c320a8..27b205a7b 100644 --- a/src/views/wms/order/receipt/ReceiptOrderForm.vue +++ b/src/views/wms/order/receipt/ReceiptOrderForm.vue @@ -201,13 +201,11 @@ import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect import { OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants' import { dividePrice, - formatPrice, formatSumPrice, formatSumQuantity, multiplyPrice, PRICE_PRECISION, - QUANTITY_PRECISION, - sumPrice + QUANTITY_PRECISION } from '@/views/wms/utils/format' import { generateOrderNo } from '@/views/wms/utils/order' @@ -243,9 +241,6 @@ const formRules = reactive({ const formRef = ref() // 表单 Ref const skuSelectRef = ref() // 商品 SKU 选择弹窗 Ref -const detailPriceSum = computed(() => - sumPrice(formData.value.details || [], (detail) => detail.price) -) const isPrepareOrder = computed( () => !formData.value.id || @@ -366,9 +361,6 @@ function getDetailSummaries({ columns, data }: { columns: any[]; data: ReceiptOr if (column.property === 'quantity') { return formatSumQuantity(data, (detail) => detail.quantity) } - if (column.property === 'price') { - return formatPrice(detailPriceSum.value) - } if (column.property === 'totalPrice') { return formatSumPrice(data, (detail) => detail.totalPrice) } diff --git a/src/views/wms/order/receipt/ReceiptOrderPrint.vue b/src/views/wms/order/receipt/ReceiptOrderPrint.vue index af12d4414..f2fd41ebd 100644 --- a/src/views/wms/order/receipt/ReceiptOrderPrint.vue +++ b/src/views/wms/order/receipt/ReceiptOrderPrint.vue @@ -75,7 +75,6 @@ {{ formatSumQuantity(printRows, (detail) => detail.quantity) }} - {{ formatSumPrice(printRows, (detail) => detail.price) }} {{ formatSumPrice(printRows, (detail) => detail.totalPrice) }} diff --git a/src/views/wms/order/shipment/ShipmentOrderDetail.vue b/src/views/wms/order/shipment/ShipmentOrderDetail.vue index 59d1d5b7a..7c2c81cdb 100644 --- a/src/views/wms/order/shipment/ShipmentOrderDetail.vue +++ b/src/views/wms/order/shipment/ShipmentOrderDetail.vue @@ -137,9 +137,6 @@ function getSummaries({ columns, data }: { columns: any[]; data: DetailRow[] }) if (column.property === 'quantity') { return formatSumQuantity(data, (detail) => detail.quantity) } - if (column.property === 'price') { - return formatSumPrice(data, (detail) => detail.price) - } if (column.property === 'totalPrice') { return formatSumPrice(data, (detail) => detail.totalPrice) } diff --git a/src/views/wms/order/shipment/ShipmentOrderForm.vue b/src/views/wms/order/shipment/ShipmentOrderForm.vue index caff9950d..af60c618c 100644 --- a/src/views/wms/order/shipment/ShipmentOrderForm.vue +++ b/src/views/wms/order/shipment/ShipmentOrderForm.vue @@ -211,14 +211,12 @@ import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect import { OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants' import { dividePrice, - formatPrice, formatQuantity, formatSumPrice, formatSumQuantity, multiplyPrice, PRICE_PRECISION, - QUANTITY_PRECISION, - sumPrice + QUANTITY_PRECISION } from '@/views/wms/utils/format' import { generateOrderNo } from '@/views/wms/utils/order' @@ -254,9 +252,6 @@ const formRules = reactive({ const formRef = ref() // 表单 Ref const inventorySelectRef = ref() // 库存选择弹窗 Ref -const detailPriceSum = computed(() => - sumPrice(formData.value.details || [], (detail) => detail.price) -) const isPrepareOrder = computed( () => !formData.value.id || @@ -383,9 +378,6 @@ function getDetailSummaries({ columns, data }: { columns: any[]; data: ShipmentO if (column.property === 'quantity') { return formatSumQuantity(data, (detail) => detail.quantity) } - if (column.property === 'price') { - return formatPrice(detailPriceSum.value) - } if (column.property === 'totalPrice') { return formatSumPrice(data, (detail) => detail.totalPrice) } diff --git a/src/views/wms/order/shipment/ShipmentOrderPrint.vue b/src/views/wms/order/shipment/ShipmentOrderPrint.vue index 7f2b43fca..9db1d0f17 100644 --- a/src/views/wms/order/shipment/ShipmentOrderPrint.vue +++ b/src/views/wms/order/shipment/ShipmentOrderPrint.vue @@ -75,7 +75,6 @@ {{ formatSumQuantity(printRows, (detail) => detail.quantity) }} - {{ formatSumPrice(printRows, (detail) => detail.price) }} {{ formatSumPrice(printRows, (detail) => detail.totalPrice) }}