diff --git a/docs/task/242-主列表支持可选每页条数.md b/docs/task/242-主列表支持可选每页条数.md new file mode 100644 index 0000000..d5a6803 --- /dev/null +++ b/docs/task/242-主列表支持可选每页条数.md @@ -0,0 +1,76 @@ +# 242 Admin:主列表支持每页 20、50、100 条 + +- 类型:需求 +- 父级大工单:#14 +- 所属 MVP / 版本:#15 Admin 四模块可用闭环 +- 状态:已完成,待用户验收 +- 日期:2026-08-15 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/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 构建、测试、静态检查通过 | 通过 | + +## 测试 + +- 执行的命令: + +```powershell +$env:GOTOOLCHAIN="go1.23.0" +go test ./... -count=1 +go build ./... +go vet ./... +Remove-Item Env:GOTOOLCHAIN +``` + +- 结果:全部通过;`git diff --check` 通过。 +- **没验证到的部分**:未在登录后的真实浏览器中执行 1366×768 人工视觉验收; + 未连接生产 MySQL 做页面查询,因为本任务没有数据库结构和生产数据变更。 + +## 相关提交 + +- `b455853` feat: 支持主列表选择每页条数 (#242)