docs: 更新任务 #113 归档

This commit is contained in:
chengma
2026-08-10 18:18:10 +08:00
parent 13458038e0
commit 3b659eba0a
@@ -1,54 +1,57 @@
# 113 Admin:采购任务价格仅展示选定颜色规格
# 113 Admin:采购价格区仅展示已选明细和映射规格
- 类型:需求
- 类型:缺陷
- 父级大工单:#96
- 所属 MVP / 版本:#97
- 状态:已完成
- 状态:已完成,待用户验收
- 日期:2026-08-10
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/113
## 背景与目标
顺运宝页面创建采购任务时,价格输入区域原来可能展示同一 PDD 商品的多个规格,采购员容易把其他颜色或尺码的价格误当成当前货运单规格。此次只展示规格匹配结果中已选定的 PDD 颜色、尺码和该规格的价格上限,并防止弹窗打开后规格映射发生变化时按旧结果创建任务。
首次实现已经让服务端只返回当前 `mapping_option_key` 对应的唯一 PDD 规格和价格,但浏览器仍显示未勾选货运单的商品、颜色、尺码和价格行。目标是让单选、批量选择和重复打开弹窗都只显示本次选中的确认行,未选数据不可见也不可提交。
## 最终方案
- 服务层只把当前顺运宝规格已映射的一个 PDD 规格传给创建弹窗,不再返回其他候选颜色和尺码。
- 弹窗同时展示顺运宝原规格和已选 PDD 规格,价格字段明确标注为“选定颜色的人民币价格上限(元)”。
- 表单携带当前映射的唯一键和上下文版本;创建事务重新读取映射并比对,映射已变化时拒绝创建并提示刷新页面后重试。
- 服务端仍负责价格格式、数量、客户端权限与真实下单安全门禁校验;没有修改数据库结构或 Client 接口。
- 保留既有服务端实现:每条可采购明细只通过当前 `mapping_option_key` 查找唯一 PDD 组合,并携带 `context_version` 防止旧映射提交。
- 修复确认行的 CSS:增加 `.purchase-confirm-row[hidden] { display: none; }`,防止默认 `display: grid` 覆盖 `hidden`。
- 保留 JavaScript 每次打开弹窗时按 `syb_id` 重算选择集,同步更新每行 `hidden` 和全部 input 的 `disabled`。
- 增加跨 CSS、模板和 JavaScript 的回归测试,确保未选行初始隐藏、输入禁用且打开时状态同步。
- 使用 Microsoft Edge headless 验证最终计算样式为 `display: none`。
## 改了哪些
- `admin/service/syb.go`:采购候选行只保留当前映射规格,并生成映射确认信息。
- `admin/service/purchase_workflow.go`:创建任务时校验映射唯一键和上下文版本,拒绝过期弹窗。
- `admin/handler/web/others.go`:解析并传递映射确认字段。
- `admin/templates/syb/list.html`:只展示选定 PDD 规格及对应价格输入。
- `admin/service/purchase_workflow_test.go`:覆盖单一选定规格展示和映射变化拒绝创建。
- `docs/admin/05-ui-specification.md`:同步采购弹窗界面规范。
- `admin/static/css/app.css`:增加采购确认行的强制隐藏规则。
- `admin/main_test.go`:覆盖隐藏 CSS、模板初始 disabled 和 JavaScript 状态同步约束。
- `docs/admin/05-ui-specification.md`:明确 grid 不得覆盖 hidden,重复打开不能残留旧选择。
- 首次实现继续生效的文件:`admin/service/syb.go`、`admin/service/purchase_workflow.go`、`admin/handler/web/others.go`、`admin/templates/syb/list.html`。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| 创建弹窗只展示当前映射的 PDD 颜色、尺码和价格 | 通过 |
| 不展示同一商品的其他颜色或规格候选 | 通过 |
| 价格字段文案明确对应选定颜色 | 通过 |
| 弹窗打开后映射变化时服务端拒绝旧数据创建 | 通过 |
| 不修改数据库结构和 Client 接口 | 通过 |
| 单选时只有当前明细及一个价格输入可见 | 通过(结构、状态和浏览器样式验证) |
| 未选货运单、其他颜色和其他 SKU 不可见 | 通过 |
| 当前已映射颜色尺码只作为一个只读结果展示 | 通过 |
| 未选行保持 hidden,全部 input 保持 disabled | 通过 |
| CSS 不再由 grid 覆盖 hidden | 通过 |
| JavaScript 每次打开按当前选择重算,不沿用旧状态 | 通过(代码回归约束) |
| 映射变化时服务端拒绝旧弹窗 | 通过 |
| Go 1.23.0 全量验证 | 通过 |
## 测试
- 执行的命令:
- `GOTOOLCHAIN=go1.23.0 go test ./service ./handler/web -count=1`
- `GOTOOLCHAIN=go1.23.0 go test . ./service ./handler/web -count=1`
- `GOTOOLCHAIN=go1.23.0 go vet ./...`
- `GOTOOLCHAIN=go1.23.0 go build ./...`
- `GOTOOLCHAIN=go1.23.0 go test ./... -count=1`
- Microsoft Edge headless:同一元素同时具有 `.purchase-confirm-row { display:grid }` 和 `hidden` 时,计算样式为 `display:none`。
- `git diff --check`
- 结果:Admin 全部包测试、构建、vet 和格式检查通过;新增测试确认只显示当前选定规格,并拒绝使用已过期的规格映射创建任务。
- **没验证到的部分**:未在浏览器中人工操作弹窗,界面结构和业务数据由 Go 模板及服务测试覆盖;未连接 Android 真机,也未创建真实未付款订单。
- 结果:Admin 全部包测试、构建、vet 和格式检查通过;Edge 浏览器计算样式验证通过。
- **没验证到的部分**:未使用生产顺运宝数据在浏览器中人工执行单选、批量和重复打开;未连接 Android 真机,未创建真实未付款订单。
## 相关提交
- `66565d50ccfc3682860280613c6f70d2b3efde8b` feat: 采购价格仅展示选定规格 (#113)
- `66565d5` feat: 采购价格仅展示选定规格 (#113)
- `1345803` fix: 隐藏未选采购规格行 (#113)