From af7be6a0512745b24afe93dfcdeb46cb74a3860d Mon Sep 17 00:00:00 2001 From: yueli Date: Fri, 11 Sep 2026 15:21:45 +0800 Subject: [PATCH] =?UTF-8?q?fix(stocktake):=20=E6=98=8E=E7=BB=86=E9=87=8C?= =?UTF-8?q?=E6=94=B9=E5=AE=9E=E7=9B=98=E6=95=B0=E6=97=B6=E3=80=8C=E5=B7=AE?= =?UTF-8?q?=E5=BC=82=E3=80=8D=E5=88=97=E5=AE=9E=E6=97=B6=E8=81=94=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原 handleQuantityChange 只发请求,不回写 diff_qty,差异列要重新打开抽屉 才会刷新。 现改为在发请求的同时本地计算: row.diff_qty = val - row.stock_qty (保留 4 位小数,与后端 round 一致, 避免浮点尾差显示成 4.999999999) ★ 盲盘保护:后端在 blind 模式下把 stock_qty 置为 null(绝不下发账面数), 此时**完全跳过**减法,保持 diff_qty 原状(null → 渲染为「—」)。 若不判断,null 参与运算会算出错误差异,等于从 UI 侧绕过了盲盘限制。 请求失败时原有的 fetchInventoryList() 会拉回服务端数据,本地算出的差异 随之被覆盖,不会留下错误值。 --- inventory-web/src/views/stock/stocktake/index.vue | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/inventory-web/src/views/stock/stocktake/index.vue b/inventory-web/src/views/stock/stocktake/index.vue index 3b98987..dddd2dc 100644 --- a/inventory-web/src/views/stock/stocktake/index.vue +++ b/inventory-web/src/views/stock/stocktake/index.vue @@ -1651,6 +1651,18 @@ const handleListLimitChange = (limit: number) => { // ★ 新增: 更新实盘数量(手动修改) const handleQuantityChange = async (row: any, val: number) => { + row.quantity = val + + // ★ 本地实时联动「差异」列。 + // 盲盘保护:后端在 blind 模式下把 stock_qty 置为 null(绝不下发账面数), + // 此时**不做任何减法**,保持 diff_qty 原状(null → 渲染为「—」), + // 否则用 null 参与运算会算出错误的差异,等于绕过了盲盘限制。 + if (row.stock_qty !== null && row.stock_qty !== undefined) { + // 与后端一致保留 4 位小数,避免浮点尾差显示成 4.999999999 + const diff = Number(val || 0) - Number(row.stock_qty || 0) + row.diff_qty = Math.round(diff * 10000) / 10000 + } + try { await updateStocktakeQuantity({ stock_id: row.stock_id,