From 5bda3eae63dcd7f56ea08d2218d52e4408b88984 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Sun, 9 Aug 2026 22:11:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=85=E8=A3=9D=20Complete/Pass=20=E2=86=92?= =?UTF-8?q?=20=E5=90=8C=20JO=20=E5=85=B6=E4=BB=96=E5=8C=85=E8=A3=9D=20auto?= =?UTF-8?q?=20Pass=20QC=20ready=20=E6=94=B9=E6=88=90=E3=80=8C=E5=85=A8?= =?UTF-8?q?=E9=83=A8=20line=20done=E3=80=8D=EF=BC=88=E6=8B=BF=E6=8E=89?= =?UTF-8?q?=E3=80=8C=E4=BB=BB=E4=B8=80=E5=8C=85=E8=A3=9D=E5=8D=B3=E5=8F=AF?= =?UTF-8?q?=E3=80=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProductionProcessList.tsx | 32 ++++--------------- 1 file changed, 6 insertions(+), 26 deletions(-) diff --git a/src/components/ProductionProcess/ProductionProcessList.tsx b/src/components/ProductionProcess/ProductionProcessList.tsx index 81593055..e8a85f9a 100644 --- a/src/components/ProductionProcess/ProductionProcessList.tsx +++ b/src/components/ProductionProcess/ProductionProcessList.tsx @@ -178,7 +178,7 @@ function isWaitingQcPutAway( return s !== "completed" && s !== "rejected"; } -/** FP-MTMS Version Checklist | Functions Ref. No. 40 | v1.0.7 | 2026-08-06 */ +/** FP-MTMS Version Checklist | Functions Ref. No. 40 | v1.0.8 | 2026-08-09 */ const ProductProcessList: React.FC = ({ onSelectProcess, printerCombo, @@ -447,7 +447,7 @@ const ProductProcessList: React.FC = ({ return productionCache; }, [listTab, productionCache, pendingQcCache, putawayedCache, offPlanRows]); - // QC 的业务判定:同一个 jobOrder 下,所有 productProcess 的所有 lines 都必须是 Completed/Pass + // QC ready: same JO — all lines Completed/Pass (sibling 包裝 auto-Pass on backend) + has SIL const jobOrderQcReadyById = useMemo(() => { const byJobOrder = new Map(); for (const p of tabProcesses) { @@ -465,31 +465,11 @@ const ProductProcessList: React.FC = ({ byJobOrder.forEach((jobOrderProcesses, jobOrderId) => { const hasStockInLine = jobOrderProcesses.some((p) => p.stockInLineId != null); + const allLines = jobOrderProcesses.flatMap((p) => p.lines ?? []); + const allLinesDone = + allLines.length > 0 && allLines.every((l) => isDone(l.status)); - const packingProcesses = jobOrderProcesses.filter( - (p) => String((p as any).code ?? "").trim() === "包裝", - ); - const nonPackingProcesses = jobOrderProcesses.filter( - (p) => String((p as any).code ?? "").trim() !== "包裝", - ); - - const allNonPackingDone = - nonPackingProcesses.length === 0 || - nonPackingProcesses.every((p) => { - const lines = p.lines ?? []; - return lines.length > 0 && lines.every((l) => isDone(l.status)); - }); - - const hasOnePackingDone = - packingProcesses.length > 0 && - packingProcesses.some((p) => { - const lines = p.lines ?? []; - return lines.some((l) => isDone(l.status)); - }); - - const packingOk = packingProcesses.length === 0 ? true : hasOnePackingDone; - - result.set(jobOrderId, hasStockInLine && allNonPackingDone && packingOk); + result.set(jobOrderId, hasStockInLine && allLinesDone); }); return result;