From 6d0531a412dc62d7cedd9d1b9418789e7e1c057f Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Thu, 6 Aug 2026 22:56:15 +0800 Subject: [PATCH] =?UTF-8?q?List=20=E5=8D=A1=E7=89=87=E7=9A=84=E3=80=8C?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=B7=A5=E5=96=AE=E3=80=8D=E7=8F=BE=E5=9C=A8?= =?UTF-8?q?=E5=8F=AA=E6=9C=89=20ADMIN=20=E6=89=8D=E6=9C=83=E9=A1=AF?= =?UTF-8?q?=E7=A4=BA=EF=BC=8C=E9=9D=9E=20ADMIN=20=E5=AE=8C=E5=85=A8?= =?UTF-8?q?=E7=9C=8B=E4=B8=8D=E5=88=B0=E6=8C=89=E9=88=95=E3=80=82=20?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=B7=A5=E5=96=AE=EF=BC=8F=E5=AE=8C=E6=88=90?= =?UTF-8?q?=20API=20=E6=94=B9=E7=82=BA=E5=83=85=20ADMIN=EF=BC=9B=E3=80=8C?= =?UTF-8?q?=E5=B7=A5=E5=96=AE=E7=94=9F=E7=94=A2=E6=B5=81=E7=A8=8B=E3=80=8D?= =?UTF-8?q?tab=20=E5=83=85=20ADMIN=20=E5=8F=AF=E8=A6=8B=EF=BC=9B=E3=80=8C?= =?UTF-8?q?=E5=B7=B2=E6=8F=90=E6=96=99=E3=80=8D=E6=94=B9=E7=82=BA=E5=85=A8?= =?UTF-8?q?=E9=83=A8=20POL=20completed=EF=BC=9B=E6=96=87=E6=A1=88=E3=80=8C?= =?UTF-8?q?=E6=9C=AA=E6=8F=90=E6=96=99=E3=80=8D=E2=86=92=E3=80=8C=E6=9C=AA?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=8F=90=E6=96=99=E3=80=8D=EF=BC=8FPick=20in?= =?UTF-8?q?complete=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/api/jo/actions.ts | 2 +- src/authorities.ts | 4 +- .../ProductionProcess/JobOrderOpsTable.tsx | 7 +-- .../ProductionProcessJobOrderDetail.tsx | 2 +- .../ProductionProcessList.tsx | 23 ++++---- .../ProductionProcessPage.tsx | 57 ++++++++++++------- src/i18n/en/productionProcess.json | 10 ++-- src/i18n/zh/productionProcess.json | 10 ++-- 8 files changed, 65 insertions(+), 50 deletions(-) diff --git a/src/app/api/jo/actions.ts b/src/app/api/jo/actions.ts index 477bf4cc..5f380266 100644 --- a/src/app/api/jo/actions.ts +++ b/src/app/api/jo/actions.ts @@ -905,7 +905,7 @@ export const fetchAllJoborderProductProcessInfo = cache(async (type?: string | n ); }); -/** FP-MTMS Version Checklist | Functions Ref. No. 40 | v1.0.5 | 2026-08-06 */ +/** FP-MTMS Version Checklist | Functions Ref. No. 40 | v1.0.7 | 2026-08-06 */ export const fetchJoborderProductProcessesPage = cache(async (params: { /** Job order / process date(YYYY-MM-DD) */ date?: string | null; diff --git a/src/authorities.ts b/src/authorities.ts index 08e222ed..0ce7f019 100644 --- a/src/authorities.ts +++ b/src/authorities.ts @@ -20,7 +20,7 @@ export const AUTH = { JOB_MAT: "JOB_MAT", JOB_PROD: "JOB_PROD", /** - * FP-MTMS Version Checklist | Functions Ref. No. 51 | v1.0.0 | 2026-08-05 + * FP-MTMS Version Checklist | Functions Ref. No. 51 | v1.0.1 | 2026-08-06 * 工單 生產流程 完成工單 */ PRODUCT_PROCESS: "PRODUCT_PROCESS", @@ -28,7 +28,7 @@ export const AUTH = { } as const; /** - * FP-MTMS Version Checklist | Functions Ref. No. 51 | v1.0.0 | 2026-08-05 + * FP-MTMS Version Checklist | Functions Ref. No. 51 | v1.0.1 | 2026-08-06 * Match session ability codes (exact, trimmed). */ export function hasAbility( diff --git a/src/components/ProductionProcess/JobOrderOpsTable.tsx b/src/components/ProductionProcess/JobOrderOpsTable.tsx index 2dc17177..90a555a9 100644 --- a/src/components/ProductionProcess/JobOrderOpsTable.tsx +++ b/src/components/ProductionProcess/JobOrderOpsTable.tsx @@ -223,7 +223,7 @@ interface JobOrderOpsTableProps { printerCombo?: PrinterCombo[]; } -/** FP-MTMS Version Checklist | Functions Ref. No. 47 | v1.0.4 | 2026-08-06 */ +/** FP-MTMS Version Checklist | Functions Ref. No. 47 | v1.0.5 | 2026-08-06 */ const JobOrderOpsTable: React.FC = ({ onSelectProcess, printerCombo = [], @@ -232,10 +232,9 @@ const JobOrderOpsTable: React.FC = ({ const { data: session } = useSession() as { data: SessionWithTokens | null }; const sessionToken = session as SessionWithTokens | null; const abilities = session?.abilities ?? session?.user?.abilities ?? []; - /** 取消工單:僅 ADMIN */ + /** 取消工單 / 完成工單:僅 ADMIN */ const canCancel = hasAbility(abilities, AUTH.ADMIN); - /** 完成工單:僅 PRODUCT_PROCESS(工單 生產流程 完成工單) */ - const canComplete = hasAbility(abilities, AUTH.PRODUCT_PROCESS); + const canComplete = hasAbility(abilities, AUTH.ADMIN); const labelPrinterCombo = useMemo( () => (printerCombo || []).filter((p) => p.type === "Label"), diff --git a/src/components/ProductionProcess/ProductionProcessJobOrderDetail.tsx b/src/components/ProductionProcess/ProductionProcessJobOrderDetail.tsx index c735421b..dbb73b76 100644 --- a/src/components/ProductionProcess/ProductionProcessJobOrderDetail.tsx +++ b/src/components/ProductionProcess/ProductionProcessJobOrderDetail.tsx @@ -53,7 +53,7 @@ interface ProductProcessJobOrderDetailProps { initialTabIndex?: number; } -/** FP-MTMS Version Checklist | Functions Ref. No. 40 | v1.0.5 | 2026-08-06 */ +/** FP-MTMS Version Checklist | Functions Ref. No. 40 | v1.0.7 | 2026-08-06 */ const ProductionProcessJobOrderDetail: React.FC = ({ jobOrderId, onBack, diff --git a/src/components/ProductionProcess/ProductionProcessList.tsx b/src/components/ProductionProcess/ProductionProcessList.tsx index eeb5ff79..81593055 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.5 | 2026-08-06 */ +/** FP-MTMS Version Checklist | Functions Ref. No. 40 | v1.0.7 | 2026-08-06 */ const ProductProcessList: React.FC = ({ onSelectProcess, printerCombo, @@ -209,8 +209,8 @@ const ProductProcessList: React.FC = ({ const [modalInfo, setModalInfo] = useState(); const currentUserId = session?.id ? parseInt(session.id) : undefined; const abilities = session?.abilities ?? session?.user?.abilities ?? []; - /** 完成工單:僅 PRODUCT_PROCESS(工單 生產流程 完成工單);不含 ADMIN 以免群組 ADMIN 繞過勾選 */ - const canManageUpdateJo = hasAbility(abilities, AUTH.PRODUCT_PROCESS); + /** 完成工單:僅 ADMIN */ + const canManageUpdateJo = hasAbility(abilities, AUTH.ADMIN); type ProcessFilter = "all" | "drink" | "Powder_Mixture" | "other"; const listTab = normalizeListTab(listPersistedState.pickBucket); @@ -1230,20 +1230,17 @@ const ProductProcessList: React.FC = ({ {t("Matching Stock")} - {statusLower !== "completed" && ( + {canManageUpdateJo && statusLower !== "completed" && (