diff --git a/src/app/api/pickOrder/actions.ts b/src/app/api/pickOrder/actions.ts index f32018c..01ebdcc 100644 --- a/src/app/api/pickOrder/actions.ts +++ b/src/app/api/pickOrder/actions.ts @@ -1103,6 +1103,7 @@ export const fetchPickOrderDetails = cache(async (ids: string) => { }); export interface PickOrderLotDetailResponse { lotId: number | null; // ✅ 改为可空 + stockInLineId?: number | null; lotNo: string | null; // ✅ 改为可空 expiryDate: string | null; // ✅ 改为可空 location: string | null; // ✅ 改为可空 diff --git a/src/components/DoWorkbench/WorkbenchLotLabelPrintModal.tsx b/src/components/DoWorkbench/WorkbenchLotLabelPrintModal.tsx index 04d1a30..2eb038f 100644 --- a/src/components/DoWorkbench/WorkbenchLotLabelPrintModal.tsx +++ b/src/components/DoWorkbench/WorkbenchLotLabelPrintModal.tsx @@ -694,7 +694,7 @@ const WorkbenchLotLabelPrintModal: React.FC = sx={{ fontWeight: lot._scanned ? 800 : 600 }} > Lot:{lot.lotNo} - {lot._scanned ? "(已掃)" : ""} + {lot._scanned ? "(當前批次)" : ""} 位置:{loc || "—"} diff --git a/src/components/PickOrderSearch/WorkbenchPickExecution.tsx b/src/components/PickOrderSearch/WorkbenchPickExecution.tsx index 26ac505..fa9c0a4 100644 --- a/src/components/PickOrderSearch/WorkbenchPickExecution.tsx +++ b/src/components/PickOrderSearch/WorkbenchPickExecution.tsx @@ -70,6 +70,7 @@ type LotRow = { uomDesc: string; requiredQty: number; availableQty: number; + itemTotalAvailableQty?: number | null; stockOutLineId: number; status: string; pickedQty: number; @@ -247,11 +248,19 @@ function lineHasStockOutOrSuggestion(details: PickOrderLotDetailResponse[]): boo function mapLotDetailsToRows( details: PickOrderLotDetailResponse[], - ctx: { pickOrderId: number; pickOrderLineId: number; pickOrderCode: string; itemCode: string; itemName: string }, + ctx: { + pickOrderId: number; + pickOrderLineId: number; + pickOrderCode: string; + itemCode: string; + itemName: string; + totalAvailableQty?: number | null; + }, ): LotRow[] { return details.map((d, i) => { const solId = toNum(d.stockOutLineId); const lotId = toNum(d.lotId, i); + const stockInLineId = toNum(d.stockInLineId); return { key: solId > 0 ? `sol:${solId}` : `lot:${lotId}:${i}`, pickOrderId: ctx.pickOrderId, @@ -262,13 +271,14 @@ function mapLotDetailsToRows( uomDesc: toStr(d.stockUnit), requiredQty: toNum(d.requiredQty), availableQty: toNum(d.remainingAfterAllPickOrders ?? d.availableQty), + itemTotalAvailableQty: toNum(ctx.totalAvailableQty), stockOutLineId: solId, status: toStr(d.stockOutLineStatus ?? "pending"), pickedQty: toNum(d.actualPickQty ?? d.stockOutLineQty), lotNo: toStr(d.lotNo), location: toStr(d.location), itemId: toNum(d.itemId) || undefined, - stockInLineId: lotId > 0 ? lotId : undefined, + stockInLineId: stockInLineId > 0 ? stockInLineId : undefined, suggestedPickLotId: toNum(d.suggestedPickLotId) || undefined, lotAvailability: toStr((d as any).lotAvailability), lotStatus: toStr((d as any).lotStatus), @@ -295,6 +305,7 @@ const WorkbenchPickExecution: React.FC = ({ filterArgs }) => { pickOrderCode: string; itemCode: string; itemName: string; + totalAvailableQty?: number; } | null>(null); const [lotRows, setLotRows] = useState([]); @@ -499,7 +510,12 @@ const WorkbenchPickExecution: React.FC = ({ filterArgs }) => { async ( pickOrderId: number, pickOrderLineId: number, - meta: { pickOrderCode: string; itemCode: string; itemName: string }, + meta: { + pickOrderCode: string; + itemCode: string; + itemName: string; + totalAvailableQty?: number; + }, ) => { if (!userId || pickOrderLineId <= 0) return; setLoading(true); @@ -526,6 +542,7 @@ const WorkbenchPickExecution: React.FC = ({ filterArgs }) => { pickOrderCode: meta.pickOrderCode, itemCode: meta.itemCode, itemName: meta.itemName, + totalAvailableQty: meta.totalAvailableQty, }), ); setQtyEditableBySolId({}); @@ -704,7 +721,12 @@ const WorkbenchPickExecution: React.FC = ({ filterArgs }) => { } setSelectedPickOrderLineId(row.pickOrderLineId); setSelectedPickOrderId(row.pickOrderId); - setSelectedTopMeta({ pickOrderCode: row.pickOrderCode, itemCode: row.itemCode, itemName: row.itemName }); + setSelectedTopMeta({ + pickOrderCode: row.pickOrderCode, + itemCode: row.itemCode, + itemName: row.itemName, + totalAvailableQty: row.currentStock, + }); setLotRows([]); setQtyBySolId({}); setQtyEditableBySolId({}); @@ -714,6 +736,7 @@ const WorkbenchPickExecution: React.FC = ({ filterArgs }) => { pickOrderCode: row.pickOrderCode, itemCode: row.itemCode, itemName: row.itemName, + totalAvailableQty: row.currentStock, }); }, [loadLineDetailV2, selectedPickOrderLineId], @@ -1383,7 +1406,7 @@ const WorkbenchPickExecution: React.FC = ({ filterArgs }) => { {row.pickedQty.toLocaleString()} {row.stockUnit || "-"} {safeDisplayTargetDate(row.targetDate)} - {row.status || "-"} + {t(row.status || "-")} )) )} @@ -1476,7 +1499,11 @@ const WorkbenchPickExecution: React.FC = ({ filterArgs }) => { {`${r.requiredQty.toLocaleString()}(${r.uomDesc || ""})`} - {`${r.availableQty.toLocaleString()}(${r.uomDesc || ""})`} + + {`${Number( + r.itemTotalAvailableQty ?? r.availableQty ?? 0, + ).toLocaleString()}(${r.uomDesc || ""})`} +