docs: 更新任务 #112 归档
This commit is contained in:
+26
-26
@@ -1,60 +1,60 @@
|
||||
# 112 Admin:采购任务固定真实下单并简化创建弹窗
|
||||
|
||||
- 类型:需求
|
||||
- 类型:需求变更
|
||||
- 父级大工单:#96
|
||||
- 所属 MVP / 版本:#97
|
||||
- 状态:已完成
|
||||
- 状态:已完成,待用户验收
|
||||
- 日期:2026-08-10
|
||||
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/112
|
||||
|
||||
## 背景与目标
|
||||
|
||||
客户确认后续 Admin 新建采购任务固定为真实下单(只创建未付款订单),不再让采购员选择演练模式。同时必须保留操作确认、Client live 能力、在线状态、设备绑定、价格保护、不可逆标记、单次提交、禁止付款和不可逆后只核单等安全门禁。
|
||||
Admin 新建采购任务已经固定为真实下单,但首次实现仍重复要求风险复选框和确认短语,并只显示在线 live Client,导致操作过重且离线 Client 无法提前接收任务。复验后确认:Admin 提交创建表单即表示创建真实采购任务;Client 一次性 live 授权和设备、价格、不可逆安全门禁继续保留。
|
||||
|
||||
## 最终方案
|
||||
|
||||
- 修改根规则和 Admin/Client 基线:Admin 新建采购任务固定为 live,历史 dry_run 和接口缺省兼容值继续保留。
|
||||
- 顺运宝采购弹窗删除执行模式单选,真实下单风险说明、复选框和确认短语始终显示。
|
||||
- Web handler 不读取浏览器提交的 execution_mode,固定向服务层传入 live;篡改为 dry_run 也不能改变结果。
|
||||
- 页面只列出当前用户可见、在线且声明 live 能力的 Client,选项只显示名称和 Client ID。
|
||||
- 创建事务再次检查 Client 在线时间、可见范围和 live 能力,避免页面打开后状态变化造成误分配。
|
||||
- 提交按钮明确为“确认创建真实采购任务”,提交后禁用并显示“创建中…”。
|
||||
- 没有改写已发布的 v5 migration,也没有修改历史任务。
|
||||
- 根规则和 Admin 基线改为:Admin 不再额外要求风险复选框、确认短语或浏览器二次确认,Web 创建入口仍固定 `execution_mode=live`。
|
||||
- 删除弹窗安全确认区和相应 JavaScript;保留明确的“创建真实采购任务”按钮以及提交禁用、“创建中…”反馈。
|
||||
- 弹窗展示当前用户可见的全部 Client:live Client 可选,暂时离线也可提前指派;非 live Client 显示“未启用真实采购”并禁用;只有一个 live Client 时自动选中。
|
||||
- 服务端不再按瞬时在线状态拒绝指派,也不再读取 Admin 确认字段;事务仍复核用户可见范围和 Client live 能力。
|
||||
- 数据库历史字段名保持兼容;live 任务继续记录创建操作用户和时间。
|
||||
- Client 本地 live 授权、设备绑定、最终规格/数量/价格复核、不可逆标记、单次提交和禁止付款均未改变。
|
||||
|
||||
## 改了哪些
|
||||
|
||||
- `AGENTS.md`、`client/AGENTS.md`:调整默认采购策略并保留 Client 本地安全授权。
|
||||
- `admin/handler/web/others.go`:固定 live,传递在线截止时间。
|
||||
- `admin/repository/client.go`:增加事务内在线状态查询。
|
||||
- `admin/service/service.go`、`purchase_workflow.go`:筛选 live 在线候选并在创建时复核。
|
||||
- `admin/templates/syb/list.html`、`admin/static/js/app.js`:简化弹窗、保留确认和提交反馈。
|
||||
- Admin 测试:覆盖候选过滤、离线拒绝、表单篡改和模板文案。
|
||||
- `docs/admin/`、`docs/client/`:同步需求、界面、架构、安全和接口契约。
|
||||
- `AGENTS.md`:同步 Admin 创建真实采购任务的最新红线。
|
||||
- `admin/templates/syb/list.html`、`admin/static/js/app.js`:删除重复安全确认,完善候选禁用原因、唯一候选默认选择和提交反馈。
|
||||
- `admin/handler/web/others.go`:固定 live,不再读取确认字段或在线截止时间。
|
||||
- `admin/service/service.go`:返回全部可见候选和 live 可选数量。
|
||||
- `admin/service/purchase_workflow.go`、`admin/repository/client.go`:移除 Admin 确认及在线门禁,保留 Client live 能力复核和审计。
|
||||
- Admin 测试:覆盖表单篡改、候选状态、离线 live 指派、非 live 拒绝及模板文案。
|
||||
- `docs/admin/`:同步需求、数据字段语义和界面规范。
|
||||
|
||||
## 验收结果
|
||||
|
||||
| 验收标准 | 结果 |
|
||||
|---|---|
|
||||
| 项目规则明确 Admin 新采购任务固定 live | 通过 |
|
||||
| 弹窗不再显示执行模式,风险确认始终显示 | 通过 |
|
||||
| 服务端忽略被篡改的 dry_run 字段 | 通过 |
|
||||
| 只列出可见、在线且声明 live 的 Client | 通过 |
|
||||
| 创建事务再次复核在线与 live 能力 | 通过 |
|
||||
| 历史 dry_run、execution_mode 字段和 API 兼容保留 | 通过 |
|
||||
| 不付款、不绕过安全机制、不可逆后不重下单 | 通过 |
|
||||
| 弹窗没有模式选择、风险复选框、确认短语和重复浏览器确认 | 通过 |
|
||||
| Web 服务端固定创建 live,篡改模式不能创建 dry_run | 通过 |
|
||||
| 当前用户可见的 live Client 在线或离线均可指派 | 通过 |
|
||||
| 非 live Client 显示禁用原因,唯一 live 候选自动选中 | 通过 |
|
||||
| 创建事务仍复核可见范围和 Client live 能力 | 通过 |
|
||||
| 创建用户、时间、Client 和模式审计完整 | 通过 |
|
||||
| Client 设备、价格、不可逆、单次提交和禁止付款门禁未改变 | 通过 |
|
||||
| Go 1.23.0 全量验证 | 通过 |
|
||||
|
||||
## 测试
|
||||
|
||||
- 执行的命令:
|
||||
- `GOTOOLCHAIN=go1.23.0 go test ./service ./handler/web ./repository -count=1`
|
||||
- `GOTOOLCHAIN=go1.23.0 go test . -count=1`
|
||||
- `GOTOOLCHAIN=go1.23.0 go vet ./...`
|
||||
- `GOTOOLCHAIN=go1.23.0 go build ./...`
|
||||
- `GOTOOLCHAIN=go1.23.0 go test ./... -count=1`
|
||||
- `git diff --check`
|
||||
- 结果:Admin 全部包测试、构建、vet 和格式检查通过。
|
||||
- **没验证到的部分**:未连接 Android 真机,未创建真实未付款订单;真机 live 由 #101 单独验收。未在浏览器中人工点击弹窗,模板结构和文案由 Go 页面测试覆盖。
|
||||
- **没验证到的部分**:未在浏览器人工点击客户端下拉和提交;未连接 Android 真机,未创建真实未付款订单。模板候选、禁用和默认选择由 Go 路由测试覆盖。
|
||||
|
||||
## 相关提交
|
||||
|
||||
- `e1b32ea024f6c5b69a76efb827f90abf88ba4682` feat: 固定创建真实采购任务 (#112)
|
||||
- `a262190` fix: 简化真实采购创建并恢复客户端选择 (#112)
|
||||
|
||||
Reference in New Issue
Block a user