|
|
|
@@ -2740,33 +2740,46 @@ const handleSubmitAllScanned = useCallback(async () => { |
|
|
|
try { |
|
|
|
// 转换为 batchSubmitList 所需的格式(与后端 QrPickBatchSubmitRequest 匹配) |
|
|
|
const lines: batchSubmitListLineRequest[] = scannedLots.map((lot) => { |
|
|
|
// 1. 需求数量:优先用 lot.requiredQty,没有就用 pickOrderLineRequiredQty |
|
|
|
// 1. 需求数量 |
|
|
|
const requiredQty = |
|
|
|
Number(lot.requiredQty || lot.pickOrderLineRequiredQty || 0); |
|
|
|
|
|
|
|
// 2. 当前已经拣到的数量(数据库里对应的是 stock_out_line.qty) |
|
|
|
|
|
|
|
// 2. 当前已经拣到的数量(数据库里的 qty) |
|
|
|
const currentActualPickQty = Number(lot.actualPickQty || 0); |
|
|
|
|
|
|
|
// 3. 还需要拣多少:不能为负数 |
|
|
|
const remainingQty = Math.max(0, requiredQty - currentActualPickQty); |
|
|
|
|
|
|
|
// 4. 本次批量提交后的目标累计值 = 当前 + 剩余 |
|
|
|
const cumulativeQty = currentActualPickQty + remainingQty; |
|
|
|
|
|
|
|
// 5. 根据“目标累计值是否达到需求”决定状态 |
|
|
|
let newStatus = "partially_completed"; |
|
|
|
if (requiredQty > 0 && cumulativeQty >= requiredQty) { |
|
|
|
|
|
|
|
// 🔹 判断是否走“只改状态模式” |
|
|
|
// 这里先给一个简单条件示例:如果你不想再补拣,只想把当前数量标记完成, |
|
|
|
// 就让这个条件为 true(后面你可以根据业务加 UI 开关或别的 flag)。 |
|
|
|
const onlyComplete = lot.stockOutLineStatus === "partially_completed"; |
|
|
|
// lot.stockOutLineStatus === "partially_completed" && false === true; |
|
|
|
|
|
|
|
let targetActual: number; |
|
|
|
let newStatus: string; |
|
|
|
|
|
|
|
if (onlyComplete) { |
|
|
|
// ✅ 只改状态:目标数量 = 当前数量,不再补拣 |
|
|
|
targetActual = currentActualPickQty; |
|
|
|
newStatus = "completed"; |
|
|
|
} else { |
|
|
|
// ✅ 补拣模式:把剩余全部拣完 |
|
|
|
const remainingQty = Math.max(0, requiredQty - currentActualPickQty); |
|
|
|
const cumulativeQty = currentActualPickQty + remainingQty; |
|
|
|
|
|
|
|
targetActual = cumulativeQty; |
|
|
|
|
|
|
|
newStatus = "partially_completed"; |
|
|
|
if (requiredQty > 0 && cumulativeQty >= requiredQty) { |
|
|
|
newStatus = "completed"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
|
stockOutLineId: Number(lot.stockOutLineId) || 0, |
|
|
|
pickOrderLineId: Number(lot.pickOrderLineId), |
|
|
|
// ⚠️ 这里按你现在的写法是用 lot.lotId,当心是否真的是 inventoryLotLineId |
|
|
|
inventoryLotLineId: lot.lotId ? Number(lot.lotId) : null, |
|
|
|
requiredQty, |
|
|
|
// 传“目标累计值”,后端会用它减去当前数据库里的 qty 得到增量 |
|
|
|
actualPickQty: cumulativeQty, |
|
|
|
// 后端用 targetActual - 当前 qty 算增量,onlyComplete 时就是 0 |
|
|
|
actualPickQty: targetActual, |
|
|
|
stockOutLineStatus: newStatus, |
|
|
|
pickOrderConsoCode: String(lot.pickOrderConsoCode || ""), |
|
|
|
noLot: Boolean(lot.noLot === true), |
|
|
|
|