Kaynağa Gözat

update

MergeProblem1
CANCERYS\kw093 23 saat önce
ebeveyn
işleme
484d96203f
2 değiştirilmiş dosya ile 14 ekleme ve 64 silme
  1. +2
    -0
      src/app/api/stockTake/actions.ts
  2. +12
    -64
      src/components/StockRecord/SearchPage.tsx

+ 2
- 0
src/app/api/stockTake/actions.ts Dosyayı Görüntüle

@@ -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;


+ 12
- 64
src/components/StockRecord/SearchPage.tsx Dosyayı Görüntüle

@@ -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<Props> = ({ dataList: initialDataList }) => {
const [filterArgs, setFilterArgs] = useState<Record<string, any>>({});
const isInitialMount = useRef(true);
const [searchTrigger, setSearchTrigger] = useState(0);
// 添加分页状态
const [page, setPage] = useState(0);
const [pageSize, setPageSize] = useState<number | string>(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<Props> = ({ dataList: initialDataList }) => {
return processed;
}, [dataList]);
// 修复:使用 processedData 初始化 filteredList
const [filteredList, setFilteredList] = useState<ExtendedStockTransaction[]>(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<Props> = ({ 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<Props> = ({ 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<HTMLInputElement | HTMLTextAreaElement>) => {
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<string>[] = useMemo(
() => [
{
@@ -313,6 +278,12 @@ const SearchPage: React.FC<Props> = ({ dataList: initialDataList }) => {
</Box>
),
},
{
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<Props> = ({ dataList: initialDataList }) => {
});
setSearchTrigger(prev => prev + 1);
// 重置分页
setPage(0);
setPagingController(prev => ({ ...prev, pageNum: 1 }));
}, []);

@@ -395,31 +365,9 @@ const SearchPage: React.FC<Props> = ({ 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 (
<>
<SearchBox
@@ -429,9 +377,9 @@ const SearchPage: React.FC<Props> = ({ dataList: initialDataList }) => {
/>
{loading && <Box sx={{ p: 2 }}>{t("Loading...")}</Box>}
<SearchResults<ExtendedStockTransaction>
items={paginatedItems}
items={filteredList}
columns={columns}
pagingController={{ ...pagingController, pageSize: actualPageSizeForTable }}
pagingController={pagingController}
setPagingController={setPagingController}
totalCount={totalCount}
isAutoPaging={false}


Yükleniyor…
İptal
Kaydet