一、设计目的
- 可以方便地进入
第一页
、最后页
- 可以方便地进入 当前活动页 的
前两页
、后两页
- 可以根据
总页数
及当前活动页
自动地排版页码
二、设计方案
- 总页数小于8时,显示全部页
- 总页数大于等于8时,继续判断当前活动页
- 当前活动页小于5时,显示左侧6页,再加最后页
- 当前活动页大于等于5,且小于等于倒数第5页时,显示第1页,中间连续5页,最后页;(中间5页中,最中间是当前活动页,两侧分别是前2页、后2页)
- 当前活动页大于倒数第5页时,显示第1页,最后连接6页
三、效果展示
1、基本样式
2、pages < 8
显示全部页
3、pages >= 8
3.1、current < 5
3.2、5 <= current <= 倒数第5页
3.3、current > 倒数第5页
四、thymeleaf 模块引用
1、分页菜单模块
需要接收5个参数:
- baseUrl:菜单链接的基础路径
- pages:总页数
- current:当前页
- pageSize:页面最大记录数
- rows:总记录数
链接样式:
/ baseUrl / current / pageSize
<!DOCTYPE html>
<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>公共页面</title>
</head>
<body>
<!--分页菜单:需要传递5个参数-->
<div class="row d-inline-flex" th:fragment="page(baseUrl,pages,current,pageSize,rows)">
<!--没有数据:总页数小于1-->
<th:block th:if="${pages < 1}">
<div class="col mx-2 text-secondary text-nowrap">
暂无数据
</div>
</th:block>
<!--有数据:只有1页-->
<th:block th:if="${pages == 1}">
<div class="col mx-2 text-secondary text-nowrap">
共有 <span th:text="${rows}"/> 条数据
</div>
</th:block>
<!--有数据:总页数大于1-->
<th:block th:if="${pages > 1}">
<ul class="col pagination mt-3 ms-4">
<!--总页数小于8-->
<th:block th:if="${pages < 8}" th:each="page:${#numbers.sequence(1,pages)}">
<li th:class="${page == current ? 'page-item active':'page-item'}