import Link from 'next/link' import { useRouter } from 'next/router' /** * 数字翻页插件 * @param page 当前页码 * @param showNext 是否有下一页 * @returns {JSX.Element} * @constructor */ const PaginationNumber = ({ page, totalPage }) => { const router = useRouter() const currentPage = +page const showNext = currentPage !== totalPage const pagePrefix = router.asPath.split('?')[0].replace(/\/page\/[1-9]\d*/, '').replace(/\/$/, '') const pages = generatePages(pagePrefix, page, currentPage, totalPage) return (
{/* 上一页 */} {pages} {/* 下一页 */}
) } function getPageElement(pagePrefix, page, currentPage) { return ( ( {page} ) ) } function generatePages(pagePrefix, page, currentPage, totalPage) { const pages = [] const groupCount = 7 // 最多显示页签数 if (totalPage <= groupCount) { for (let i = 1; i <= totalPage; i++) { pages.push(getPageElement(pagePrefix, i, page)) } } else { pages.push(getPageElement(pagePrefix, 1, page)) const dynamicGroupCount = groupCount - 2 let startPage = currentPage - 2 if (startPage <= 1) { startPage = 2 } if (startPage + dynamicGroupCount > totalPage) { startPage = totalPage - dynamicGroupCount } if (startPage > 2) { pages.push(
...
) } for (let i = 0; i < dynamicGroupCount; i++) { if (startPage + i < totalPage) { pages.push(getPageElement(pagePrefix, startPage + i, page)) } } if (startPage + dynamicGroupCount < totalPage) { pages.push(
...
) } pages.push(getPageElement(pagePrefix, totalPage, page)) } return pages } export default PaginationNumber