Admin:主列表支持每页 20、50、100 条 #242

Open
opened 2026-08-15 14:56:10 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 Admin 四模块可用闭环
  • 阶段:公共列表分页与交互一致性

要解决什么

Admin 主列表当前统一固定每页 20 条。蝦皮、PDD、顺运宝、采集采购、客户端、用户、商品目录导入记录和档口入库码等页面数据增多后,采购员无法按工作量选择更大的单页容量,批量查看时需要频繁翻页。

做什么 / 不做什么

  • 做:
    • 公共分页增加“每页 20 / 50 / 100 条”单选控件,默认 20 条。
    • 主列表通过统一 page_size 查询参数执行服务端 SQL 分页;非法值回退为 20。
    • 切换每页条数时回到第 1 页;翻页、筛选、F5、浏览器前进后退和模块状态恢复时保留 page_size。
    • 统一改造已使用公共分页的主列表,并更新公共测试和 Admin 界面规范。
    • 将档口入库码的删除、匹配、回写上限从 UI 分页常量中解耦,现有远程批量安全上���保持 20。
  • 不做:
    • 不提供“全部”、200 条或任意自定义数量。
    • 不增加跨页勾选。
    • 不改变顺运宝同步记录弹窗固定每页 10 条。
    • 不调整顺运宝上游接口抓取的 config.syb.page_size。
    • 不新增数据库结构,不修改 Client 接口,不把远程匹配/回写改成长事务或异步任务。

怎么做

  • 在 admin/service/pagination.go 增加默认值、白名单解析和携带页容量的分页视图;总页数按实际页容量计算。
  • 在 admin/templates/partials/footer.html 的公共分页区域增加普通 GET 表单,下拉选择后提交;表单保留当前筛选参数并强制从第 1 页开始。
  • 在 admin/static/css/app.css 补充紧凑样式和窄窗口布局。
  • 各 Web handler 统一解析 page_size、写回筛选查询参数并传给 service;各列表 service 使用该值计算 LIMIT/OFFSET。
  • 为批量写操作建立独立常量,避免每页改为 100 后自动放宽顺运宝远程写入规模。
  • 更新 docs/admin/05-ui-specification.md,删除“固定 20 条”的旧约束并明确 20/50/100、默认值和状态保留规则。
  • 预计修改 admin/service/pagination.go、公共分页测试与模板/CSS、相关列表 handler/service 及必要测试;不改数据库迁移。

验收标准

  • 所有使用公共分页的主列表显示 20、50、100 三个选项,首次访问和非法参数均使用 20。
  • 选择 50 或 100 后,列表 SQL 使用对应 LIMIT/OFFSET,总页数和越界回退正确。
  • 修改每页数量回到第 1 页;首页、上一页、下一页、末页以及当前筛选均保留选定数量。
  • F5、可复制 URL、浏览器前进后退和模块状态恢复均能恢复选定数量;翻页后不保留勾选。
  • 顺运宝同步记录弹窗仍固定每页 10 条,上游同步抓取分页配置不受影响。
  • 档口入库码远程批量操作仍单次最多 20 条,不因页面展示 100 条而放宽。
  • 1366×768 下底栏不遮挡表格和分页控件,窄窗口可正常换行。
  • 固定 Go 1.23.0 下 go build ./...、go test ./... -count=1 和 go vet ./... 通过。

怎么验证

从 admin/ 执行:

$env:GOTOOLCHAIN="go1.23.0"
go test ./... -count=1
go build ./...
go vet ./...
Remove-Item Env:GOTOOLCHAIN

浏览器分别访问各主列表,组合验证 ?page_size=20/50/100、筛选、翻页、越界参数、F5、前进后退和模块切换;在 1366×768 检查底栏和表格滚动。顺运宝同步记录弹窗验证仍为每页 10 条。档口入库码选择超过 20 条执行远程回写时应继续得到明确的上限提示。

风险和回退

  • 风险:100 行会增加 HTML、图片和数据库读取量;通过白名单把最大值限制为 100,并继续使用服务端 LIMIT/OFFSET。
  • 风险:分页大小若误用为批量写上限,会放大顺运宝远程写入的超时和部分成功风险;因此使用独立批量上限。
  • 回退:回退本工单提交即可恢复固定每页 20 条;无数据库迁移和数据回滚。
## 基本信息 - 类型:需求 - 父级大工单:#14 - 所属 MVP / 版本:#15 Admin 四模块可用闭环 - 阶段:公共列表分页与交互一致性 ## 要解决什么 Admin 主列表当前统一固定每页 20 条。蝦皮、PDD、顺运宝、采集采购、客户端、用户、商品目录导入记录和档口入库码等页面数据增多后,采购员无法按工作量选择更大的单页容量,批量查看时需要频繁翻页。 ## 做什么 / 不做什么 - 做: - 公共分页增加“每页 20 / 50 / 100 条”单选控件,默认 20 条。 - 主列表通过统一 `page_size` 查询参数执行服务端 SQL 分页;非法值回退为 20。 - 切换每页条数时回到第 1 页;翻页、筛选、F5、浏览器前进后退和模块状态恢复时保留 `page_size`。 - 统一改造已使用公共分页的主列表,并更新公共测试和 Admin 界面规范。 - 将档口入库码的删除、匹配、回写上限从 UI 分页常量中解耦,现有远程批量安全上���保持 20。 - 不做: - 不提供“全部”、200 条或任意自定义数量。 - 不增加跨页勾选。 - 不改变顺运宝同步记录弹窗固定每页 10 条。 - 不调整顺运宝上游接口抓取的 `config.syb.page_size`。 - 不新增数据库结构,不修改 Client 接口,不把远程匹配/回写改成长事务或异步任务。 ## 怎么做 - 在 `admin/service/pagination.go` 增加默认值、白名单解析和携带页容量的分页视图;总页数按实际页容量计算。 - 在 `admin/templates/partials/footer.html` 的公共分页区域增加普通 GET 表单,下拉选择后提交;表单保留当前筛选参数并强制从第 1 页开始。 - 在 `admin/static/css/app.css` 补充紧凑样式和窄窗口布局。 - 各 Web handler 统一解析 `page_size`、写回筛选查询参数并传给 service;各列表 service 使用该值计算 `LIMIT/OFFSET`。 - 为批量写操作建立独立常量,避免每页改为 100 后自动放宽顺运宝远程写入规模。 - 更新 `docs/admin/05-ui-specification.md`,删除“固定 20 条”的旧约束并明确 20/50/100、默认值和状态保留规则。 - 预计修改 `admin/service/pagination.go`、公共分页测试与模板/CSS、相关列表 handler/service 及必要测试;不改数据库迁移。 ## 验收标准 - [ ] 所有使用公共分页的主列表显示 20、50、100 三个选项,首次访问和非法参数均使用 20。 - [ ] 选择 50 或 100 后,列表 SQL 使用对应 `LIMIT/OFFSET`,总页数和越界回退正确。 - [ ] 修改每页数量回到第 1 页;首页、上一页、下一页、末页以及当前筛选均保留选定数量。 - [ ] F5、可复制 URL、浏览器前进后退和模块状态恢复均能恢复选定数量;翻页后不保留勾选。 - [ ] 顺运宝同步记录弹窗仍固定每页 10 条,上游同步抓取分页配置不受影响。 - [ ] 档口入库码远程批量操作仍单次最多 20 条,不因页面展示 100 条而放宽。 - [ ] 1366×768 下底栏不遮挡表格和分页控件,窄窗口可正常换行。 - [ ] 固定 Go 1.23.0 下 `go build ./...`、`go test ./... -count=1` 和 `go vet ./...` 通过。 ## 怎么验证 从 `admin/` 执行: ```powershell $env:GOTOOLCHAIN="go1.23.0" go test ./... -count=1 go build ./... go vet ./... Remove-Item Env:GOTOOLCHAIN ``` 浏览器分别访问各主列表,组合验证 `?page_size=20/50/100`、筛选、翻页、越界参数、F5、前进后退和模块切换;在 1366×768 检查底栏和表格滚动。顺运宝同步记录弹窗验证仍为每页 10 条。档口入库码选择超过 20 条执行远程回写时应继续得到明确的上限提示。 ## 风险和回退 - 风险:100 行会增加 HTML、图片和数据库读取量;通过白名单把最大值限制为 100,并继续使用服务端 `LIMIT/OFFSET`。 - 风险:分页大小若误用为批量写上限,会放大顺运宝远程写入的超时和部分成功风险;因此使用独立批量上限。 - 回退:回退本工单提交即可恢复固定每页 20 条;无数据库迁移和数据回滚。
Author
Owner

状态:进行中。已核对公共分页实现和八个使用页面,开始按确认方案实施。工作区已有无关 Client/部署改动,本任务仅修改 Admin 分页相关文件。

状态:进行中。已核对公共分页实现和八个使用页面,开始按确认方案实施。工作区已有无关 Client/部署改动,本任务仅修改 Admin 分页相关文件。
Author
Owner

状态:待验收。

实施结果

  • 公共分页新增 page_size 白名单:20 / 50 / 100,默认和非法值均归一化为 20。
  • 蝦皮、PDD、顺运宝、采集采购、客户端、用户、商品目录导入记录、档口入库码八个列表已接入对应 SQL LIMIT/OFFSET。
  • 公共底栏新增原生 GET 下拉表单;切换容量从第 1 页开始,翻页、搜索、详情和写操作跳转保留选择。
  • 顺运宝同步记录仍固定每页 10 条,上游抓取 config.syb.page_size 未改。
  • 档口入库码本地删除上限独立为 100;顺运宝远程匹配、回写上限独立并保持 20。
  • UI 评审后使用可见标签和原生控件,窄窗口允许分页组换行;没有引入 JS、框架或构建流程。
  • 没有数据库迁移,没有 Client 接口变更。

验证

固定 GOTOOLCHAIN=go1.23.0:

  • go test ./... -count=1:通过
  • go build ./...:通过
  • go vet ./...:通过
  • git diff --check:通过

未验证:未在登录后的真实浏览器执行 1366×768 人工视觉验收;未连接生产 MySQL(本任务无数据库结构或生产数据变更)。

提交与归档

  • 实现提交:b455853 feat: 支持主列表选择每页条数 (#242)
  • 归档提交:af1c056 docs: 归档任务 #242
  • 归档:docs/task/242-主列表支持可选每页条数.md

工作区原有 Client、.gitignore、运行脚本和本机文件均未纳入本任务提交。

状态:待验收。 ## 实施结果 - 公共分页新增 `page_size` 白名单:20 / 50 / 100,默认和非法值均归一化为 20。 - 蝦皮、PDD、顺运宝、采集采购、客户端、用户、商品目录导入记录、档口入库码八个列表已接入对应 SQL `LIMIT/OFFSET`。 - 公共底栏新增原生 GET 下拉表单;切换容量从第 1 页开始,翻页、搜索、详情和写操作跳转保留选择。 - 顺运宝同步记录仍固定每页 10 条,上游抓取 `config.syb.page_size` 未改。 - 档口入库码本地删除上限独立为 100;顺运宝远程匹配、回写上限独立并保持 20。 - UI 评审后使用可见标签和原生控件,窄窗口允许分页组换行;没有引入 JS、框架或构建流程。 - 没有数据库迁移,没有 Client 接口变更。 ## 验证 固定 `GOTOOLCHAIN=go1.23.0`: - `go test ./... -count=1`:通过 - `go build ./...`:通过 - `go vet ./...`:通过 - `git diff --check`:通过 未验证:未在登录后的真实浏览器执行 1366×768 人工视觉验收;未连接生产 MySQL(本任务无数据库结构或生产数据变更)。 ## 提交与归档 - 实现提交:`b455853` `feat: 支持主列表选择每页条数 (#242)` - 归档提交:`af1c056` `docs: 归档任务 #242` - 归档:`docs/task/242-主列表支持可选每页条数.md` 工作区原有 Client、`.gitignore`、运行脚本和本机文件均未纳入本任务提交。
Author
Owner

验收发现:容量下拉框只修改控件值,未自动提交;同时 static/js/app.js 的模块状态白名单遗漏 page_size。用户已确认按自动刷新 + 无 JS 备用按钮方案修复,跟踪工单 #243。#242 继续保持待验收,待 #243 完成后一起复验。

验收发现:容量下拉框只修改控件值,未自动提交;同时 `static/js/app.js` 的模块状态白名单遗漏 `page_size`。用户已确认按自动刷新 + 无 JS 备用按钮方案修复,跟踪工单 #243。#242 继续保持待验收,待 #243 完成后一起复验。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#242