interface PaginationBarProps {
page: number;
totalPages: number;
total: number;
pageSize: number;
pageSizeOptions?: number[];
isDark?: boolean;
loading?: boolean;
onPageChange: (newPage: number) => void;
onPageSizeChange?: (newSize: number) => void;
}
export default function PaginationBar({
page,
totalPages,
total,
pageSize,
pageSizeOptions = [20, 50, 100],
isDark = false,
loading = false,
onPageChange,
onPageSizeChange,
}: PaginationBarProps) {
const navBtnClass = (disabled: boolean) =>
[
'rounded border px-2.5 py-1 text-xs transition-colors',
disabled || loading ? 'opacity-40 cursor-not-allowed' : 'cursor-pointer',
isDark
? 'border-slate-600 text-slate-300 hover:bg-slate-800'
: 'border-slate-300 text-slate-600 hover:bg-slate-100',
].join(' ');
return (
{/* 左侧:统计 + 每页大小 */}
共 {total} 条{totalPages > 1 && `,第 ${page} / ${totalPages} 页`}
{onPageSizeChange && (
<>
每页
{pageSizeOptions.map((s) => (
))}
>
)}
{/* 右侧:分页导航 */}
{totalPages > 1 && (
)}
);
}