From 5e83e2c8e6e17aecbda816df35ac9c4edd4040cc Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Sun, 15 Mar 2026 14:29:18 +0800 Subject: [PATCH] update --- src/components/StockIssue/SearchPage.tsx | 65 ++++++++++++++----- .../StockTakeManagement/StockTakeTab.tsx | 9 ++- 2 files changed, 55 insertions(+), 19 deletions(-) diff --git a/src/components/StockIssue/SearchPage.tsx b/src/components/StockIssue/SearchPage.tsx index d7a9a18..b900f80 100644 --- a/src/components/StockIssue/SearchPage.tsx +++ b/src/components/StockIssue/SearchPage.tsx @@ -1,5 +1,6 @@ "use client"; - +import dayjs from "dayjs"; +import { OUTPUT_DATE_FORMAT } from "@/app/utils/formatUtil"; import SearchBox, { Criterion } from "../SearchBox"; import { useCallback, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; @@ -52,7 +53,7 @@ const SearchPage: React.FC = ({ dataList }) => { const [selectedIds, setSelectedIds] = useState<(string | number)[]>([]); const [submittingIds, setSubmittingIds] = useState>(new Set()); const [batchSubmitting, setBatchSubmitting] = useState(false); - + const [paging, setPaging] = useState({ pageNum: 1, pageSize: 10 }); const searchCriteria: Criterion[] = useMemo( () => [ { @@ -251,7 +252,33 @@ const SearchPage: React.FC = ({ dataList }) => { { name: "itemDescription", label: t("Item") }, { name: "lotNo", label: t("Lot No.") }, { name: "storeLocation", label: t("Location") }, - { name: "expiryDate", label: t("Expiry Date") }, + { + name: "expiryDate", + label: t("Expiry Date"), + renderCell: (item) => { + const raw = String(item.expiryDate ?? "").trim(); + if (!raw) return "—"; + let d; + if (raw.includes(",")) { + const parts = raw.split(",").map((s) => parseInt(s.trim(), 10)); + const [y, m, d_] = parts; + if (parts.length >= 3 && y != null && m != null && d_ != null && !Number.isNaN(y) && !Number.isNaN(m) && !Number.isNaN(d_)) { + d = dayjs(new Date(y, m - 1, d_)); + } else { + d = dayjs(""); + } + } else { + let normalized = raw; + if (raw.length === 7) { + normalized = raw.slice(0, 4) + "0" + raw.slice(4, 5) + raw.slice(5, 7); + } else if (raw.length === 6) { + normalized = raw.slice(0, 4) + "0" + raw.slice(4, 5) + "0" + raw.slice(5, 6); + } + d = dayjs(normalized, "YYYYMMDD", true); + } + return d.isValid() ? d.format(OUTPUT_DATE_FORMAT) : raw; + }, + }, { name: "remainingQty", label: t("Remaining Qty") }, { name: "id", @@ -280,6 +307,7 @@ const SearchPage: React.FC = ({ dataList }) => { (_: React.SyntheticEvent, value: string) => { setTab(value as "miss" | "bad" | "expiry"); setSelectedIds([]); + setPaging((prev) => ({ ...prev, pageNum: 1 })); // 新增:切 Tab 时回到第 1 页 }, [], ); @@ -291,8 +319,9 @@ const SearchPage: React.FC = ({ dataList }) => { items={items} columns={missColumns} - pagingController={{ pageNum: 1, pageSize: 10 }} + pagingController={paging} checkboxIds={selectedIds} + setPagingController={setPaging} setCheckboxIds={setSelectedIds} /> ); @@ -304,7 +333,8 @@ const SearchPage: React.FC = ({ dataList }) => { items={items} columns={badColumns} - pagingController={{ pageNum: 1, pageSize: 10 }} + pagingController={paging} + setPagingController={setPaging} checkboxIds={selectedIds} setCheckboxIds={setSelectedIds} /> @@ -316,7 +346,8 @@ const SearchPage: React.FC = ({ dataList }) => { items={items} columns={expiryColumns} - pagingController={{ pageNum: 1, pageSize: 10 }} + pagingController={paging} + setPagingController={setPaging} checkboxIds={selectedIds} setCheckboxIds={setSelectedIds} /> @@ -336,16 +367,18 @@ const SearchPage: React.FC = ({ dataList }) => { onSearch={handleSearch} /> - - - +{tab === "expiry" && ( + + + +)} {renderCurrentTab()} { ) ) : null )} + {/* {viewScope === "approver-by-section" && tabValue === 1 && ( - )} + )} */} {viewScope === "approver-all" && tabValue === 2 && ( { sx={{ mb: 2 }} > - + {/* */} @@ -137,6 +138,7 @@ const StockTakeTab: React.FC = () => { onReStockTakeClick={handleReStockTakeClick} /> )} + {/* {tabValue === 1 && ( { @@ -145,7 +147,8 @@ const StockTakeTab: React.FC = () => { }} /> )} - {tabValue === 2 && ( + */} + {tabValue === 1 && (