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:
@ -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,
|
||||
|
||||
Reference in New Issue
Block a user