From 484d96203fddaf57106c5d001d799a28566ba022 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Tue, 24 Mar 2026 02:28:10 +0800 Subject: [PATCH] update --- src/app/api/stockTake/actions.ts | 2 + src/components/StockRecord/SearchPage.tsx | 76 ++++------------------- 2 files changed, 14 insertions(+), 64 deletions(-) diff --git a/src/app/api/stockTake/actions.ts b/src/app/api/stockTake/actions.ts index 64154e0..2cee98e 100644 --- a/src/app/api/stockTake/actions.ts +++ b/src/app/api/stockTake/actions.ts @@ -427,6 +427,8 @@ export interface StockTransactionResponse { itemId: number; itemCode: string | null; itemName: string | null; + uomId?: number | null; + uomDesc?: string | null; balanceQty: number | null; qty: number; type: string | null; diff --git a/src/components/StockRecord/SearchPage.tsx b/src/components/StockRecord/SearchPage.tsx index fe23530..975c1b4 100644 --- a/src/components/StockRecord/SearchPage.tsx +++ b/src/components/StockRecord/SearchPage.tsx @@ -1,7 +1,7 @@ "use client"; import SearchBox, { Criterion } from "../SearchBox"; -import { useCallback, useMemo, useState, useEffect, useRef } from "react"; +import { useCallback, useMemo, useState, useRef, useEffect } from "react"; import { useTranslation } from "react-i18next"; import SearchResults, { Column } from "../SearchResults/index"; import { StockTransactionResponse, SearchStockTransactionRequest } from "@/app/api/stockTake/actions"; @@ -38,10 +38,7 @@ const SearchPage: React.FC = ({ dataList: initialDataList }) => { const [filterArgs, setFilterArgs] = useState>({}); const isInitialMount = useRef(true); const [searchTrigger, setSearchTrigger] = useState(0); - // 添加分页状态 - const [page, setPage] = useState(0); - const [pageSize, setPageSize] = useState(10); - const [pagingController, setPagingController] = useState({ pageNum: 1, pageSize: 100 }); + const [pagingController, setPagingController] = useState({ pageNum: 1, pageSize: 10 }); const [hasSearchQuery, setHasSearchQuery] = useState(false); const [totalCount, setTotalCount] = useState(initialDataList.length); @@ -128,21 +125,7 @@ const SearchPage: React.FC = ({ dataList: initialDataList }) => { return processed; }, [dataList]); - // 修复:使用 processedData 初始化 filteredList - const [filteredList, setFilteredList] = useState(processedData); - - // 当 processedData 变化时更新 filteredList(不更新 pagingController,避免循环) - useEffect(() => { - setFilteredList(processedData); - - // 只在初始加载时设置 pageSize - if (isInitialMount.current && processedData.length > 0) { - setPageSize("all"); - setPagingController(prev => ({ ...prev, pageSize: processedData.length })); - setPage(0); - isInitialMount.current = false; - } - }, [processedData]); + const filteredList = processedData; // API 调用函数(参考 PoSearch 的实现) // API 调用函数(参考 PoSearch 的实现) @@ -172,7 +155,7 @@ const SearchPage: React.FC = ({ dataList: initialDataList }) => { startDate: filterArgs.startDate || null, endDate: filterArgs.endDate || null, pageNum: pagingController.pageNum - 1 || 0, - pageSize: pagingController.pageSize || 100, + pageSize: pagingController.pageSize || 10, }; const res = await searchStockTransactions(params); @@ -230,24 +213,6 @@ const SearchPage: React.FC = ({ dataList: initialDataList }) => { } }, [newPageFetch, pagingController, filterArgs, searchTrigger]); - // 分页处理函数 - const handleChangePage = useCallback((event: unknown, newPage: number) => { - setPage(newPage); - setPagingController(prev => ({ ...prev, pageNum: newPage + 1 })); - }, []); - - const handleChangeRowsPerPage = useCallback((event: React.ChangeEvent) => { - const newSize = parseInt(event.target.value, 10); - if (newSize === -1) { - setPageSize("all"); - setPagingController(prev => ({ ...prev, pageSize: 100, pageNum: 1 })); // 用 100 觸發後端回傳全部 - } else if (!isNaN(newSize)) { - setPageSize(newSize); - setPagingController(prev => ({ ...prev, pageSize: newSize, pageNum: 1 })); - } - setPage(0); - }, []); - const searchCriteria: Criterion[] = useMemo( () => [ { @@ -313,6 +278,12 @@ const SearchPage: React.FC = ({ dataList: initialDataList }) => { ), }, + { + name: "uomDesc" as keyof ExtendedStockTransaction, + label: t("UOM"), + align: "left", + renderCell: (item) => <>{item.uomDesc || "-"}, + }, { name: "inQty" as keyof ExtendedStockTransaction, label: t("In Qty"), @@ -387,7 +358,6 @@ const SearchPage: React.FC = ({ dataList: initialDataList }) => { }); setSearchTrigger(prev => prev + 1); // 重置分页 - setPage(0); setPagingController(prev => ({ ...prev, pageNum: 1 })); }, []); @@ -395,31 +365,9 @@ const SearchPage: React.FC = ({ dataList: initialDataList }) => { setHasSearchQuery(false); // 重置 filterArgs,触发 useEffect 调用 API setFilterArgs({}); - setPage(0); setPagingController(prev => ({ ...prev, pageNum: 1 })); }, []); - const paginatedItems = useMemo(() => { - if (pageSize === "all") { - return filteredList; - } - const size = typeof pageSize === 'number' ? pageSize : 10; - const start = page * size; - return filteredList.slice(start, start + size); - }, [filteredList, pageSize, page]); - - // 计算传递给 SearchResults 的 pageSize(确保在选项中) - const actualPageSizeForTable = useMemo(() => { - if (pageSize === "all") { - return totalCount > 0 ? totalCount : filteredList.length; - } - const size = typeof pageSize === 'number' ? pageSize : 10; - if (![10, 25, 100].includes(size)) { - return size; - } - return size; - }, [pageSize, filteredList.length, totalCount]); - return ( <> = ({ dataList: initialDataList }) => { /> {loading && {t("Loading...")}} - items={paginatedItems} + items={filteredList} columns={columns} - pagingController={{ ...pagingController, pageSize: actualPageSizeForTable }} + pagingController={pagingController} setPagingController={setPagingController} totalCount={totalCount} isAutoPaging={false}