import { ChevronLeft, ChevronRight } from 'lucide-react';
import { useTranslation } from 'react-i18next';
interface PaginationProps {
currentPage: number;
totalPages: number;
onPageChange: (page: number) => void;
totalItems: number;
itemsPerPage: number;
onPageSizeChange?: (pageSize: number) => void; // 新增:分页大小变更回调
pageSizeOptions?: number[]; // 新增:可选的分页大小选项
}
function Pagination({
currentPage,
totalPages,
onPageChange,
totalItems,
itemsPerPage,
onPageSizeChange,
pageSizeOptions = [10, 20, 50, 100]
}: PaginationProps) {
const { t } = useTranslation();
if (totalPages <= 1 && !onPageSizeChange) return null;
// 计算显示的页码范围 (最多显示 5 个页码)
let startPage = Math.max(1, currentPage - 2);
let endPage = Math.min(totalPages, startPage + 4);
if (endPage - startPage < 4) {
startPage = Math.max(1, endPage - 4);
}
const pages = [];
for (let i = startPage; i <= endPage; i++) {
pages.push(i);
}
const startIndex = (currentPage - 1) * itemsPerPage + 1;
const endIndex = Math.min(currentPage * itemsPerPage, totalItems);
return (
{/* Mobile View */}
{/* Desktop View */}
{t('common.pagination_info', { start: startIndex, end: endIndex, total: totalItems })}
{/* 分页大小选择器 */}
{onPageSizeChange && (
{t('common.per_page')}
)}
);
}
export default Pagination;