From 6daea70c2172b2edc4557aedf5a49134d2792436 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Tue, 13 Jan 2026 16:27:47 +0800 Subject: [PATCH] update joborderstatus --- src/app/api/jo/actions.ts | 3 ++ .../ProductionProcess/JobProcessStatus.tsx | 33 ++++++++--------- .../ProductionProcessList.tsx | 2 +- src/components/StockIn/FgStockInForm.tsx | 36 ++++++++++--------- src/config/authConfig.ts | 9 +++-- src/i18n/zh/common.json | 7 +++- src/i18n/zh/jo.json | 3 ++ 7 files changed, 53 insertions(+), 40 deletions(-) diff --git a/src/app/api/jo/actions.ts b/src/app/api/jo/actions.ts index aa3eb2d..4d268d5 100644 --- a/src/app/api/jo/actions.ts +++ b/src/app/api/jo/actions.ts @@ -1208,6 +1208,9 @@ export interface JobProcessStatusResponse { jobOrderCode: string; itemCode: string; itemName: string; + processingTime: number | null; + setupTime: number | null; + changeoverTime: number | null; planEndTime?: string | null; processes: ProcessStatusInfo[]; } diff --git a/src/components/ProductionProcess/JobProcessStatus.tsx b/src/components/ProductionProcess/JobProcessStatus.tsx index 085174b..e0fc43b 100644 --- a/src/components/ProductionProcess/JobProcessStatus.tsx +++ b/src/components/ProductionProcess/JobProcessStatus.tsx @@ -99,18 +99,16 @@ const JobProcessStatus: React.FC = () => { return '-'; }; - const calculateRemainingTime = (planEndTime: any): string => { + const calculateRemainingTime = (planEndTime: any, processingTime: number | null, setupTime: number | null, changeoverTime: number | null): string => { if (!planEndTime) return '-'; let endTime: dayjs.Dayjs; // Handle array format [year, month, day, hour, minute, second] - // 使用与 OverallTimeRemainingCard 相同的方式处理 + // Use arrayToDayjs for consistency with other parts of the codebase if (Array.isArray(planEndTime)) { try { - const [year, month, day, hour = 0, minute = 0, second = 0] = planEndTime; - // 注意:JavaScript Date 构造函数中月份是 0-based,所以需要 month - 1 - endTime = dayjs(new Date(year, month - 1, day, hour, minute, second)); + endTime = arrayToDayjs(planEndTime, true); console.log('Parsed planEndTime array:', { array: planEndTime, parsed: endTime.format('YYYY-MM-DD HH:mm:ss'), @@ -143,6 +141,7 @@ const JobProcessStatus: React.FC = () => { diffMinutes: diff }); + // If the planned end time is in the past, show 0 (or you could show negative time) if (diff < 0) return '0'; const hours = Math.floor(diff / 60); @@ -186,7 +185,7 @@ const JobProcessStatus: React.FC = () => { - {t("Job Process Status", { ns: "jobProcessStatus" })} + {t("Job Process Status", )} @@ -203,30 +202,26 @@ const JobProcessStatus: React.FC = () => { - {t("Job Order No.", { ns: "jobProcessStatus" })} + {t("Job Order No.")} - {t("FG / WIP Item", { ns: "jobProcessStatus" })} + {t("FG / WIP Item")} - {t("Production Time Remaining", { ns: "jobProcessStatus" })} - - - - - {t("Process Status / Time [hh:mm]", { ns: "jobProcessStatus" })} + {t("Production Time Remaining")} + {[1, 2, 3, 4, 5, 6].map((num) => ( - {t("Process", { ns: "jobProcessStatus" })} {num} + {t("Process")} {num} ))} @@ -236,13 +231,13 @@ const JobProcessStatus: React.FC = () => { - {t("Start", { ns: "jobProcessStatus" })} + {t("Start")} - {t("Finish", { ns: "jobProcessStatus" })} + {t("Finish")} - {t("Wait Time [minutes]", { ns: "jobProcessStatus" })} + {t("Wait Time [minutes]")} @@ -268,7 +263,7 @@ const JobProcessStatus: React.FC = () => { - {calculateRemainingTime(row.planEndTime)} + {calculateRemainingTime(row.planEndTime, row.processingTime, row.setupTime, row.changeoverTime)} {row.processes.map((process, index) => { const isLastProcess = index === row.processes.length - 1 || diff --git a/src/components/ProductionProcess/ProductionProcessList.tsx b/src/components/ProductionProcess/ProductionProcessList.tsx index aed2342..9a724d7 100644 --- a/src/components/ProductionProcess/ProductionProcessList.tsx +++ b/src/components/ProductionProcess/ProductionProcessList.tsx @@ -142,7 +142,7 @@ const ProductProcessList: React.FC = ({ onSelectProcess } // 3) 更新 JO 状态 - await updateJo({ id: process.jobOrderId, status: "completed" }); + // await updateJo({ id: process.jobOrderId, status: "completed" }); // 4) 刷新列表 await fetchProcesses(); diff --git a/src/components/StockIn/FgStockInForm.tsx b/src/components/StockIn/FgStockInForm.tsx index bad913f..3b07efa 100644 --- a/src/components/StockIn/FgStockInForm.tsx +++ b/src/components/StockIn/FgStockInForm.tsx @@ -365,26 +365,28 @@ return ( )} */} - { - return ( - + { + const expiryDateValue = watch("expiryDate"); + return ( + { - if (!date) return; - console.log(date.format(INPUT_DATE_FORMAT)); + if (!date) { + setValue("expiryDate", ""); + return; + } setValue("expiryDate", date.format(INPUT_DATE_FORMAT)); }} inputRef={field.ref} @@ -416,10 +418,10 @@ return ( }, }} /> - - ); - }} - /> + + ); + }} +/> {/* {putawayMode ? ( diff --git a/src/config/authConfig.ts b/src/config/authConfig.ts index f06c5f9..69a41d2 100644 --- a/src/config/authConfig.ts +++ b/src/config/authConfig.ts @@ -2,7 +2,7 @@ import { AuthOptions } from "next-auth"; import CredentialsProvider from "next-auth/providers/credentials"; import { LOGIN_API_PATH } from "./api"; - +import { Session } from "next-auth"; // Extend the built-in types declare module "next-auth" { interface Session { @@ -98,5 +98,10 @@ export const authOptions: AuthOptions = { }, }, }; - +export type SessionWithTokens = Session & { + accessToken: string | null; + refreshToken?: string; + abilities: string[]; + id?: string; +}; export default authOptions; \ No newline at end of file diff --git a/src/i18n/zh/common.json b/src/i18n/zh/common.json index 7354605..dd0134c 100644 --- a/src/i18n/zh/common.json +++ b/src/i18n/zh/common.json @@ -49,7 +49,12 @@ "Assignment failed: ": "分配失敗: ", "Unknown error": "未知錯誤", "Job Process Status": "工單流程狀態", - "FG / WIP Item": "成品/半成品", + + "Total Time": "總時間", + "Remaining Time": "剩餘時間", + "Wait Time": "等待時間", + "Wait Time [minutes]": "等待時間(分鐘)", + "End Time": "完成時間", "WIP": "半成品", "R&D": "研發", "STF": "樣品", diff --git a/src/i18n/zh/jo.json b/src/i18n/zh/jo.json index 721fee0..30e8c52 100644 --- a/src/i18n/zh/jo.json +++ b/src/i18n/zh/jo.json @@ -4,11 +4,14 @@ "Edit Job Order Detail": "工單詳情", "Details": "細節", "Actions": "操作", + "Process": "工序", "Create Job Order": "建立工單", "Code": "工單編號", "Name": "成品/半成品名稱", "Picked Qty": "已提料數量", "Confirm All": "確認所有提料", + "Wait Time [minutes]": "等待時間(分鐘)", + "Job Process Status": "工單流程狀態", "Search Job Order/ Create Job Order":"搜尋工單/建立工單", "UoM": "銷售單位", "Select Another Bag Lot":"選擇另一個包裝袋",