laypage 不处理权限,仅渲染分页栏;权限控制需通过 count(≤0 时完全不渲染)、limits(按角色动态生成)和 jump 回调(拦截越权页码)实现,且后端返回的 count 必须真实反映用户可见数据总量。

laypage 本身不处理权限,它只渲染分页栏;所谓“根据后台权限显示分页”,本质是控制是否渲染、渲染多少页、是否允许跳页——这些都得靠你传给 laypage.render() 的参数来决定。
count 为 0 或负数时,laypage 自动隐藏分页栏
laypage 的行为很明确:只要 count ≤ 0,它就不会渲染任何分页控件(包括页码、下拉、跳转框),DOM 里连容器都不生成。
- 后端返回权限校验失败时,可统一设
count: 0,前端直接跳过渲染 - 不要靠 CSS
display: none隐藏,那只是视觉掩盖,DOM 还在,容易被绕过或误触发 - 示例:
laypage.render({ elem: 'demo', count: res.permission ? res.total : 0, // 权限通过才传真实总数 limit: 10 });
limits 数组需按权限动态生成,不能写死
表格分页的 limits(每页条数选项)和 laypage 无关,但如果你用的是 table 组件,它的 page.limits 也要权限控制:
- 管理员看到
[10, 25, 50, 100] - 普通用户只允许
[10, 20] - 必须在
table.render()前就确定好数组,不能渲染后再改 - 错误做法:
table.reload()传新limits—— 它完全无效 - 正确做法:销毁后重 render,且
limits必须是数字数组,不能是字符串或null
jump 回调里拦截无权限的页码请求
laypage 的 jump 函数会在每次翻页时触发,这里可以做权限拦截:
- 比如用户手动输入页码跳转到第 999 页,但后端实际只允许查前 50 页
- 在
jump里判断obj.curr > maxAllowedPage,然后return或弹提示 - 注意:这个拦截只作用于前端交互,后端仍需做最终校验
jump: function(obj) {
if (obj.curr > window.MAX_PAGE_ALLOWED) {
layer.msg('超出可访问页数范围');
return;
}
getRemoteData(obj.curr);
}权限不是加个开关就能生效的事。最易被忽略的是:后端返回的 count 必须真实反映当前用户可见数据总量,否则 laypage 算出的总页数就是错的,用户点到最后一页可能空白,或者翻页请求发出去却没响应——问题不在前端渲染逻辑,而在权限边界没对齐。


















