import { ChevronDoubleRight } from '@/components/HeroIcons' import { useGlobal } from '@/lib/global' import Link from 'next/link' import { useRouter } from 'next/router' import { useState } from 'react' /** * 数字翻页插件 * @param page 当前页码 * @param showNext 是否有下一页 * @returns {JSX.Element} * @constructor */ const PaginationNumber = ({ page, totalPage }) => { const router = useRouter() const { locale } = useGlobal() const currentPage = +page const showNext = page < totalPage const showPrev = currentPage !== 1 const pagePrefix = router.asPath.split('?')[0].replace(/\/page\/[1-9]\d*/, '').replace(/\/$/, '') const pages = generatePages(pagePrefix, page, currentPage, totalPage) const [value, setValue] = useState('') const handleInputChange = (event) => { const newValue = event.target.value.replace(/[^0-9]/g, '') setValue(newValue) } /** * 调到指定页 */ const jumpToPage = () => { if (value) { router.push(value === 1 ? `${pagePrefix}/` : `${pagePrefix}/page/${value}`) } } return (<> {/* pc端分页按钮 */}
{/* 上一页 */}
{locale.PAGINATION.PREV}
{/* 分页 */}
{pages} {/* 跳转页码 */}
{/* 下一页 */}
{locale.PAGINATION.NEXT}
{/* 移动端分页 */}
{/* 上一页 */} {locale.PAGINATION.PREV} {showPrev && showNext &&
} {/* 下一页 */} {locale.PAGINATION.NEXT}
) } /** * 页码按钮 * @param {*} page * @param {*} currentPage * @param {*} pagePrefix * @returns */ function getPageElement(page, currentPage, pagePrefix) { const selected = page + '' === currentPage + '' return ( ( {page} ) ) } /** * 获取所有页码 * @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(i, page, pagePrefix)) } } else { pages.push(getPageElement(1, page, pagePrefix)) 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(startPage + i, page, pagePrefix)) } } if (startPage + dynamicGroupCount < totalPage) { pages.push(
...
) } pages.push(getPageElement(totalPage, page, pagePrefix)) } return pages } export default PaginationNumber