"use client" import { useState, useEffect } from "react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { ChevronLeft, ChevronRight } from "lucide-react" interface PaginationControlsProps { currentPage: number totalPages: number pageSize: number totalItems: number onPageChange: (page: number) => void onPageSizeChange: (size: number) => void } export function PaginationControls({ currentPage, totalPages, pageSize, totalItems, onPageChange, onPageSizeChange, }: PaginationControlsProps) { const [jumpToPage, setJumpToPage] = useState("") useEffect(() => { // Reset jump input when page changes externally setJumpToPage(currentPage.toString()); }, [currentPage]); const handleJumpToPage = () => { const page = parseInt(jumpToPage) if (!isNaN(page) && page >= 1 && page <= totalPages) { onPageChange(page) } } const handleJumpInputChange = (e: React.ChangeEvent) => { setJumpToPage(e.target.value); }; const handleJumpInputKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { handleJumpToPage(); } }; const handleInternalPageSizeChange = (size: string) => { const newSize = parseInt(size) onPageSizeChange(newSize) } // --- Page Number Logic --- (Same as customer pool) const MAX_VISIBLE_PAGES = 5; let startPage = 1; let endPage = totalPages; if (totalPages > MAX_VISIBLE_PAGES) { const halfVisible = Math.floor(MAX_VISIBLE_PAGES / 2); if (currentPage <= halfVisible + 1) { endPage = MAX_VISIBLE_PAGES; } else if (currentPage >= totalPages - halfVisible) { startPage = totalPages - MAX_VISIBLE_PAGES + 1; } else { startPage = currentPage - halfVisible; endPage = currentPage + halfVisible; } } const pageNumbers = Array.from({ length: endPage - startPage + 1 }, (_, i) => startPage + i); // --- End Page Number Logic --- if (totalPages <= 0) { return null; // Don't render pagination if there are no pages } return (
共 {totalItems} 条记录
{/* Page Numbers */} {startPage > 1 && ( )} {startPage > 2 && ( ... )} {pageNumbers.map((page) => ( ))} {endPage < totalPages -1 && ( ... )} {endPage < totalPages && ( )} {/* End Page Numbers */}
) }