fix(stocktake): 明细里改实盘数时「差异」列实时联动

原 handleQuantityChange 只发请求,不回写 diff_qty,差异列要重新打开抽屉
才会刷新。

现改为在发请求的同时本地计算:
  row.diff_qty = val - row.stock_qty   (保留 4 位小数,与后端 round 一致,
                                        避免浮点尾差显示成 4.999999999)

★ 盲盘保护:后端在 blind 模式下把 stock_qty 置为 null(绝不下发账面数),
此时**完全跳过**减法,保持 diff_qty 原状(null → 渲染为「—」)。
若不判断,null 参与运算会算出错误差异,等于从 UI 侧绕过了盲盘限制。

请求失败时原有的 fetchInventoryList() 会拉回服务端数据,本地算出的差异
随之被覆盖,不会留下错误值。
This commit is contained in:
yueli
2026-09-11 15:21:45 +08:00
parent 0e9941a2aa
commit af7be6a051

View File

@ -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,