3.7 KiB
3.7 KiB
242 Admin:主列表支持每页 20、50、100 条
- 类型:需求
- 父级大工单:#14
- 所属 MVP / 版本:#15 Admin 四模块可用闭环
- 状态:已完成,待用户验收
- 日期:2026-08-15
- Gitea 工单:#242
背景与目标
Admin 主列表原来固定每页 20 条。数据增多后,采购员批量查看和勾选时需要频繁翻页。 本任务在保留默认 20 条的前提下,统一增加 50、100 条选项,并确保筛选、翻页、 写操作跳转和模块状态恢复不会丢失选择。
最终方案
- 公共分页使用
page_size查询参数,后端只接受 20、50、100,非法值回退为 20。 - 公共底栏使用带可见标签的原生 GET 表单;提交时不携带
page,因此切换容量自动 回到第 1 页,同时保留当前有效筛选。 - 八个使用公共分页的列表都把归一化页容量传入 Service 和 Repository 的
LIMIT/OFFSET:蝦皮、PDD、顺运宝、采集采购、客户端、用户、商品目录导入记录、 档口入库码。 - 搜索表单、详情弹窗和写操作跳转携带
page_size;URL 可用于 F5、书签、浏览器 前进后退和既有模块状态恢复。 - 顺运宝同步记录弹窗继续固定每页 10 条;顺运宝上游接口抓取页容量不变。
- 档口入库码把本地删除和顺运宝远程操作上限从页面容量中拆开:本地删除最多 100 条, 远程匹配和回写仍单次最多 20 条。
- UI 评审后保留原生控件和可见标签,并让窄窗口分页组换行;现有蝦皮和顺运宝缩略图 已使用懒加载,无需增加额外前端框架或脚本。
改了哪些
admin/service/pagination.go:增加页容量白名单、总页数计算和公共分页表单视图。admin/service/{shopee_list,pdd,syb,task,service,user,catalog_history,inner_code_page}.go: 各列表按选定容量执行服务端分页。admin/handler/web/:解析、归一化并在筛选、详情和写操作跳转中保留page_size。admin/templates/partials/footer.html、八个列表及相关详情模板:增加公共选择器和状态字段。admin/static/css/app.css:增加紧凑分页表单和窄窗口换行样式。admin/service/inner_code_apply.go、inner_code_delete.go:使用独立批量安全上限。admin/service/*test.go、admin/handler/web/*test.go及模板测试:补充分页容量、 URL 状态和远程上限回归。docs/admin/05-ui-specification.md:把固定 20 条规则更新为默认 20、可选 50/100。
验收结果
| 验收标准 | 结果 |
|---|---|
| 公共分页显示 20、50、100,默认及非法值使用 20 | 通过 |
50/100 条使用对应 LIMIT/OFFSET,总页数和越界正确 |
通过 |
| 切换容量回到第 1 页,翻页和筛选保留容量 | 通过 |
| URL、F5、前进后退、模块状态恢复及写操作跳转保留容量 | 通过(URL 与既有状态机制) |
| 同步记录仍为每页 10 条,上游抓取分页不变 | 通过 |
| 档口入库码远程匹配和回写仍最多 20 条 | 通过 |
| 窄窗口底栏可换行且不引入横向溢出 | 通过(模板与 CSS 检查) |
| 固定 Go 1.23.0 构建、测试、静态检查通过 | 通过 |
测试
- 执行的命令:
$env:GOTOOLCHAIN="go1.23.0"
go test ./... -count=1
go build ./...
go vet ./...
Remove-Item Env:GOTOOLCHAIN
- 结果:全部通过;
git diff --check通过。 - 没验证到的部分:未在登录后的真实浏览器中执行 1366×768 人工视觉验收; 未连接生产 MySQL 做页面查询,因为本任务没有数据库结构和生产数据变更。
相关提交
b455853feat: 支持主列表选择每页条数 (#242)