Skip to content

分页协议

Forge Admin 前后端统一分页协议,确保分页请求与响应格式一致。

请求格式

分页查询接口统一接收以下参数:

GET /system/user/list?pageNum=1&pageSize=10&username=admin

或 POST 请求体:

json
{
  "pageNum": 1,
  "pageSize": 10,
  "username": "admin"
}
参数类型必填说明
pageNumnumber当前页码,从 1 开始
pageSizenumber每页条数
...queryobject业务查询条件,与实体字段对应

响应格式

json
{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "total": 100,
    "rows": [
      { "id": 1, "username": "admin", "nickname": "管理员" },
      { "id": 2, "username": "user01", "nickname": "用户一" }
    ],
    "code": 200,
    "msg": "查询成功"
  }
}
字段类型说明
totalnumber总记录数
rowsarray当前页数据列表

后端实现

后端使用 MyBatis-Plus 的 Page 对象进行分页:

java
@GetMapping("/list")
public RespInfo<Map<String, Object>> list(UserQueryDTO query) {
    Page<User> page = userService.page(
        new Page<>(query.getPageNum(), query.getPageSize()),
        query.toQueryWrapper()
    );
    return RespInfo.success(TableDataInfo.build(page));
}

前端组件对应

前端使用 Naive UI 的 n-data-table 配合自定义分页组件:

vue
<n-data-table
  :columns="columns"
  :data="tableData"
  :pagination="pagination"
  :loading="loading"
  remote
  @update:page="handlePageChange"
  @update:page-size="handlePageSizeChange"
/>
typescript
const pagination = reactive({
  page: 1,        // 对应 pageNum
  pageSize: 10,   // 对应 pageSize
  itemCount: 0,   // 对应 total
  showSizePicker: true,
  pageSizes: [10, 20, 50, 100]
})

字段映射对照

前端 (Naive UI)后端 (MyBatis-Plus)说明
pagepageNum当前页码
pageSizepageSize每页条数
itemCounttotal总记录数
datarows数据列表

💡 前端使用 remote 模式时,分页变更需要手动触发请求。

Forge Admin — 基于 Vue3 + Spring Boot 的企业级后台管理框架