必须放弃type: 'numbers',改用自定义列+templet手动计算全局序号,因lay-num仅基于当前页内索引(d.lay_table_index)加1,不感知分页上下文;正确公式为(curr - 1) * limit + d.lay_table_index + 1,需确保reload时显式传入page.curr且后端返回count。

必须放弃 type: 'numbers',改用自定义列 + templet 手动算全局序号。layui 的 lay-num 列本质是当前页内索引加 1,不是全局序号——这不是 bug,是设计如此。
为什么 type: 'numbers' 分页后总从 1 开始?
因为 type: 'numbers' 对应的 lay-num 列只读取 data.LAY_TABLE_INDEX(当前页内行索引,从 0 开始),然后 +1。它完全不感知分页上下文,也不访问 page 或 limit。
- 你翻到第 3 页、每页 10 条,
lay-num显示的仍是 1–10,而非 21–30 - 哪怕后端返回了正确的
count,这个行为也不会变 - 这是 layui 2.2.0+ 的固定逻辑,无法通过配置关闭或绕过
用 templet 算全局序号的正确写法
核心是:拿到当前页码 page、每页条数 limit、当前行在本页的索引 d.LAY_TABLE_INDEX,组合出全局序号:(page - 1) * limit + d.LAY_TABLE_INDEX + 1。
- 别直接读
layui.table.cache['yourTableId'].page—— 它可能滞后;优先用layui.table.config['yourTableId']?.page?.curr - 如果用了自定义
request(比如pageName: 'pageNum'),前端仍要按 layui 内部字段名取值,不是后端字段名 - 示例代码中
'yourTableId'必须和table.render({ id: 'yourTableId' })一致,否则读不到配置
col: [{
field: 'seq',
title: '序号',
width: 60,
templet: function(d) {
var curr = layui.table.config['yourTableId']?.page?.curr || 1;
var limit = layui.table.config['yourTableId']?.limit || 10;
return (curr - 1) * limit + d.LAY_TABLE_INDEX + 1;
}
}]
reload 时序号错乱?检查这三点
表格重载后序号突然全变成 1,大概率不是 templet 写错了,而是上下文没传对。
-
table.reload()默认不继承page.curr,必须显式传page: { curr: n },否则layui.table.config里curr变成undefined,计算结果全为0 * limit + ... = 1 - 前端分页模式下,
layui.table.config的page可能为空,此时 fallback 到table.get('yourTableId').config.page.curr更稳 - 后端接口没返回
count字段,Layui 就算不出总页数,page.curr在某些场景下会失效,导致templet里取到NaN或undefined
全局序号不是开关,是计算链:少一个环节(count、page、limit、LAY_TABLE_INDEX),序号就断一次。最常被忽略的是 reload 时不传 page,或者后端漏了 count。











