import { Button } from '@nice/ui/components/button'; import { IconChevronLeft, IconChevronRight } from '@tabler/icons-react'; import { useArticlesContext } from './context'; export function ArticlePagination() { const { pagination, setCurrentPage } = useArticlesContext(); const { currentPage, pageSize, totalPages, totalCount } = pagination; if (totalPages <= 1) { return null; } const startItem = (currentPage - 1) * pageSize + 1; const endItem = Math.min(currentPage * pageSize, totalCount || 0); // 生成页码数组 const getPageNumbers = (): number[] => { const pages: number[] = []; const maxVisible = 5; // 最多显示5个页码 if (totalPages <= maxVisible) { // 总页数不超过最大显示数,显示全部 for (let i = 1; i <= totalPages; i++) { pages.push(i); } } else { // 总页数超过最大显示数,需要智能显示 if (currentPage <= 3) { // 当前页在前面,显示前4页和最后一页 for (let i = 1; i <= 4; i++) { pages.push(i); } pages.push(-1); // 省略号 pages.push(totalPages); } else if (currentPage >= totalPages - 2) { // 当前页在后面,显示第一页和后4页 pages.push(1); pages.push(-1); // 省略号 for (let i = totalPages - 3; i <= totalPages; i++) { pages.push(i); } } else { // 当前页在中间,显示第一页、当前页前后各一页、最后一页 pages.push(1); pages.push(-1); // 省略号 for (let i = currentPage - 1; i <= currentPage + 1; i++) { pages.push(i); } pages.push(-2); // 省略号 pages.push(totalPages); } } return pages; }; return (