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