From fae1803c21d1e5ca9757b18f830d916b5232d2b7 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Mon, 23 Mar 2026 16:00:34 +0800 Subject: [PATCH] update --- src/app/api/stockTake/actions.ts | 1 + .../FGPickOrderTicketReleaseTable.tsx | 2 +- .../ApproverAllCardList.tsx | 39 ++++++++++++------- .../StockTakeManagement/StockTakeTab.tsx | 2 +- src/i18n/zh/common.json | 1 + 5 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/app/api/stockTake/actions.ts b/src/app/api/stockTake/actions.ts index c135dcf..e0c156a 100644 --- a/src/app/api/stockTake/actions.ts +++ b/src/app/api/stockTake/actions.ts @@ -91,6 +91,7 @@ export interface AllPickedStockTakeListReponse { currentStockTakeItemNumber: number; totalInventoryLotNumber: number; stockTakeId: number; + stockTakeRoundId: number | null; stockTakerName: string | null; totalItemNumber: number; startTime: string | null; diff --git a/src/components/FinishedGoodSearch/FGPickOrderTicketReleaseTable.tsx b/src/components/FinishedGoodSearch/FGPickOrderTicketReleaseTable.tsx index 041851b..0f0aa4e 100644 --- a/src/components/FinishedGoodSearch/FGPickOrderTicketReleaseTable.tsx +++ b/src/components/FinishedGoodSearch/FGPickOrderTicketReleaseTable.tsx @@ -4,7 +4,7 @@ * 權限說明(與全站一致): * - 登入後 JWT / session 帶有 `abilities: string[]`(見 config/authConfig、authorities.ts)。 * - 導航「Finished Good Order」等使用 `requiredAbility: [AUTH.STOCK_FG, AUTH.ADMIN]`。 - * - 本表「撤銷領取 / 強制完成」僅允許具 **ADMIN** 能力者操作(專案內以 ADMIN 作為管理員層級權限)。 + * - 本表「撤銷領取 / 強制完成」僅允許具 **ADMIN** 能力者操作(對應 DB `authority.authority = 'ADMIN'`,例如 `user_authority` 對應 id=8 之權限列)。 * - 一般使用者可進入本頁與檢視列表;按鈕會 disabled 並以 Tooltip 提示。 */ diff --git a/src/components/StockTakeManagement/ApproverAllCardList.tsx b/src/components/StockTakeManagement/ApproverAllCardList.tsx index 4af4874..ac8ca62 100644 --- a/src/components/StockTakeManagement/ApproverAllCardList.tsx +++ b/src/components/StockTakeManagement/ApproverAllCardList.tsx @@ -41,33 +41,45 @@ const ApproverAllCardList: React.FC = ({ const data = await getApproverStockTakeRecords(); const list = Array.isArray(data) ? data : []; - // 找出最新一轮的 planStartDate - const withPlanStart = list.filter((s) => s.planStartDate); - if (withPlanStart.length === 0) { + // 用 stockTakeRoundId 聚合輪次;舊資料 roundId 可能為 null,fallback 到 stockTakeId + const roundGroups = new Map(); + list.forEach((s) => { + const roundKey = s.stockTakeRoundId ?? s.stockTakeId; + const existing = roundGroups.get(roundKey) ?? []; + existing.push(s); + roundGroups.set(roundKey, existing); + }); + + if (roundGroups.size === 0) { setSessions([]); setPage(0); return; } - const latestPlanStart = withPlanStart - .map((s) => s.planStartDate as string) - .sort((a, b) => dayjs(b).valueOf() - dayjs(a).valueOf())[0]; - - // 这一轮下所有 section 的卡片 - const roundSessions = list.filter((s) => s.planStartDate === latestPlanStart); + const allRounds = Array.from(roundGroups.values()); + const latestRoundSessions = allRounds + .sort((a, b) => { + const aLatest = Math.max( + ...a.map((s) => dayjs(s.planStartDate ?? s.startTime ?? 0).valueOf()) + ); + const bLatest = Math.max( + ...b.map((s) => dayjs(s.planStartDate ?? s.startTime ?? 0).valueOf()) + ); + return bLatest - aLatest; + })[0]; // 汇总这一轮的总 item / lot 数 - const totalItems = roundSessions.reduce( + const totalItems = latestRoundSessions.reduce( (sum, s) => sum + (s.totalItemNumber || 0), 0 ); - const totalLots = roundSessions.reduce( + const totalLots = latestRoundSessions.reduce( (sum, s) => sum + (s.totalInventoryLotNumber || 0), 0 ); // 用这一轮里的第一条作为代表,覆盖汇总数字 - const representative = roundSessions[0]; + const representative = latestRoundSessions[0]; const mergedRound: AllPickedStockTakeListReponse = { ...representative, totalItemNumber: totalItems, @@ -120,6 +132,7 @@ const ApproverAllCardList: React.FC = ({ const planStart = session.planStartDate ? dayjs(session.planStartDate).format(OUTPUT_DATE_FORMAT) : "-"; + const roundLabel = session.stockTakeRoundId ?? session.stockTakeId; return ( @@ -140,7 +153,7 @@ const ApproverAllCardList: React.FC = ({ > - {t("Stock Take Round")}: {planStart} + {t("Stock Take Round")}: #{roundLabel} {t("Plan Start Date")}: {planStart} diff --git a/src/components/StockTakeManagement/StockTakeTab.tsx b/src/components/StockTakeManagement/StockTakeTab.tsx index ef23228..459b0b2 100644 --- a/src/components/StockTakeManagement/StockTakeTab.tsx +++ b/src/components/StockTakeManagement/StockTakeTab.tsx @@ -88,7 +88,7 @@ const StockTakeTab: React.FC = () => { onSnackbar={handleSnackbar} /> )} */} - {viewScope === "approver-all" && tabValue === 2 && ( + {viewScope === "approver-all" && tabValue === 1 && (