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(/\/$/, '') .replace('.html', '') const pages = generatePages(pagePrefix, page, currentPage, totalPage) return (
{/* 上一页 */} {pages} {/* 下一页 */}
) } /** * 生成分页按钮组 * @param {*} pagePrefix * @param {*} page * @param {*} currentPage * @param {*} totalPage * @returns */ 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 } /** * 生成分页按钮对象 * @param {*} pagePrefix * @param {*} page * @param {*} currentPage * @returns */ function getPageElement(pagePrefix, page, currentPage) { return ( {page} ) } export default PaginationNumber