生产管理系统前端 - 地块档案管理页面开发

This commit is contained in:
2025-10-29 14:13:51 +08:00
parent 5d34bc3643
commit df8e6bf515
11 changed files with 2633 additions and 44 deletions

View File

@@ -0,0 +1,78 @@
import { useState, useMemo } from 'react';
export interface PaginationConfig {
currentPage: number;
pageSize: number;
total: number;
}
export interface UsePaginationReturn<T> {
currentPage: number;
pageSize: number;
totalPages: number;
paginatedData: T[];
goToPage: (page: number) => void;
nextPage: () => void;
previousPage: () => void;
setPageSize: (size: number) => void;
canPreviousPage: boolean;
canNextPage: boolean;
startIndex: number;
endIndex: number;
}
export function usePagination<T>(
data: T[],
initialPageSize: number = 10
): UsePaginationReturn<T> {
const [currentPage, setCurrentPage] = useState(1);
const [pageSize, setPageSize] = useState(initialPageSize);
const totalPages = Math.ceil(data.length / pageSize);
const paginatedData = useMemo(() => {
const startIndex = (currentPage - 1) * pageSize;
const endIndex = startIndex + pageSize;
return data.slice(startIndex, endIndex);
}, [data, currentPage, pageSize]);
const goToPage = (page: number) => {
const pageNumber = Math.max(1, Math.min(page, totalPages));
setCurrentPage(pageNumber);
};
const nextPage = () => {
if (currentPage < totalPages) {
setCurrentPage(currentPage + 1);
}
};
const previousPage = () => {
if (currentPage > 1) {
setCurrentPage(currentPage - 1);
}
};
const handleSetPageSize = (size: number) => {
setPageSize(size);
setCurrentPage(1); // 重置到第一页
};
const startIndex = (currentPage - 1) * pageSize + 1;
const endIndex = Math.min(currentPage * pageSize, data.length);
return {
currentPage,
pageSize,
totalPages,
paginatedData,
goToPage,
nextPage,
previousPage,
setPageSize: handleSetPageSize,
canPreviousPage: currentPage > 1,
canNextPage: currentPage < totalPages,
startIndex,
endIndex,
};
}