完善配送订单创建联动
This commit is contained in:
48
docs/操作日志_配送点订单创建联动_20260823.md
Normal file
48
docs/操作日志_配送点订单创建联动_20260823.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# 操作日志:配送点订单创建联动
|
||||
|
||||
操作时间:2026-08-23
|
||||
操作类型:扩展、修改
|
||||
影响模块:5176 创建订单页、配送合同候选、用户地址候选、合同气瓶候选
|
||||
|
||||
## 操作前状态
|
||||
|
||||
- 页面挂载时并行加载所有关系,地址和气瓶不依赖所选合同。
|
||||
- 配送后端忽略订单合同、合同用户地址和合同气瓶筛选参数。
|
||||
- 地址候选退化显示唯一标识;合同气瓶无法区分当前名称、编码和类型。
|
||||
- 切换合同不会清空旧地址和气瓶,可能填到最后才被服务端拒绝。
|
||||
- 优惠金额没有非负前端约束,页面不展示金额预估。
|
||||
|
||||
## 具体操作
|
||||
|
||||
1. 合同候选增加当前配送点范围和可履约状态过滤。
|
||||
2. 地址候选增加合同归属校验,并限定合同签约用户。
|
||||
3. 合同气瓶候选增加合同归属、未解绑过滤和名称/编码/类型搜索。
|
||||
4. 新增前端父子联动、默认地址选择、防抖搜索和请求版本守卫。
|
||||
5. 切换合同时原子清空旧地址和气瓶,加载期间禁用控件及保存。
|
||||
6. 联系人和联系电话继续独立手填;请求流水号继续按 5173 人工必填。
|
||||
7. 优惠金额默认 0、禁止负数,并展示服务端最终计算声明的金额预估。
|
||||
8. 保存增加显式防重入、候选空态阻断和金额正数校验。
|
||||
|
||||
## 行为变化
|
||||
|
||||
- 变更前:候选看似可选,但服务端最终可能因跨合同或失效记录拒绝。
|
||||
- 变更后:页面只展示当前合同有效候选,后端仍执行最终授权与一致性校验。
|
||||
- 兼容性:不修改数据库和创建订单请求结构;三个列表接口仅新增可选筛选参数。
|
||||
|
||||
## 验证结果
|
||||
|
||||
- `go test ./api/internal/logic/delivery ./api/internal/logic/platform/gasorder`:通过;覆盖当前点范围、有效合同、合同用户地址和未解绑气瓶。
|
||||
- `npm.cmd run type:check`:通过。
|
||||
- `npm.cmd run resource-pages:check`:通过,详情 17、新建 9、编辑 5;覆盖联动参数、可读候选、版本守卫、保存阻断和金额公式。
|
||||
- `npm.cmd run contract:check`:通过,18 个资源。
|
||||
- `npm.cmd run profile:check`:通过。
|
||||
- `npm.cmd run build`:通过,2648 个模块完成生产构建。
|
||||
- 后端已重新构建并恢复监听 12426;旧程序保存在 `platform-api.before-order-linkage.exe`。
|
||||
- 应用内浏览器访问创建订单页被登录页拦截,未在未授权状态下填写或提交账号信息;页面交互需由现有已登录会话刷新后复核。
|
||||
|
||||
## 风险评估
|
||||
|
||||
- 快速切换合同:通过逐资源版本号丢弃旧响应。
|
||||
- 伪造筛选参数:后端先校验合同属于当前配送点,并在创建时再次校验。
|
||||
- 前端金额与服务端不同:页面明确标为预估,写入金额完全由服务端计算。
|
||||
- 地址无联系人字段:保持独立必填快照,不生成虚假联系人数据。
|
||||
@@ -56,6 +56,8 @@ frontend/delivery_admin/
|
||||
|
||||
配送人员和用户账户列表同样参考 5173:联系电话后显示 32px 圆形头像,最多并发 6 个鉴权请求,接近可视区域才加载;当前页缓存结果,刷新或离页时取消请求并释放 Blob URL。404、网络错误和图片解码失败均回退本地默认头像。全部标准资源列表隐藏数据库自增 ID,只展示可复制的系统唯一标识。
|
||||
|
||||
创建配送订单时以配送合同为父级,收货地址只加载合同签约用户地址,合同气瓶只加载当前未解绑绑定;切换合同清空旧值并丢弃过期响应。候选为空或仍在加载时禁止保存,金额区只提供预估,最终金额继续由服务端计算。详细规则见《项目文档_配送点订单创建联动_v1.0.md》。
|
||||
|
||||
配送人员资质列表必须由配送人员列表进入。页面先通过受保护人员详情接口回查姓名,再以当前气站、配送点、`delivery` 角色和人员 ID 四重条件加载资质;缺少、无效或越权人员上下文时停止加载,绝不回退为全部资质。标题和上下文区域显示人员姓名及可复制唯一标识,表格隐藏重复人员列。新建页自动预填所属人员,创建和编辑均锁定该关系,返回地址只接受安全站内路径。
|
||||
|
||||
资源搜索由后端 `searchFields` 契约驱动。没有有效字段的配送点资料、用户地址和银行卡页面不渲染搜索区域;其他页面显示“可搜索:具体字段”提示。枚举字段同时接受中文展示名称和内部稳定编码,查询、分页和重置始终保留人员上下文及安全来源参数。
|
||||
|
||||
62
docs/项目文档_配送点订单创建联动_v1.0.md
Normal file
62
docs/项目文档_配送点订单创建联动_v1.0.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# 项目文档:配送点订单创建联动 v1.0
|
||||
|
||||
## 1. 项目概述
|
||||
|
||||
5176 配送点管理端创建订单页按 5173 的安全联动规则展示候选。配送合同是地址和合同气瓶的父级;前端只负责筛选交互和金额预估,后端始终在当前配送点范围内重新校验并计算最终金额。
|
||||
|
||||
技术栈:Vue 3、TypeScript、Arco Design、Go、Gin、GORM。
|
||||
|
||||
## 2. 目录结构
|
||||
|
||||
```text
|
||||
frontend/delivery_admin/src/
|
||||
├── api/order-creation.ts # 金额预估与前端金额校验
|
||||
├── api/resources.ts # 订单字段和关系联动契约
|
||||
└── views/resource/
|
||||
├── OrderAmountPreview.vue # 只读金额预估
|
||||
├── ResourceFieldForm.vue # 关系空态、禁用和可读候选
|
||||
├── ResourceRecordPage.vue # 保存保护和页面编排
|
||||
└── use-resource-relations.ts # 父子联动、搜索和版本守卫
|
||||
backend/api/internal/logic/delivery/
|
||||
├── order.go # 可履约合同与未解绑合同气瓶候选
|
||||
├── user.go # 合同签约用户地址候选
|
||||
└── order_candidate_test.go # 候选 SQL 范围测试
|
||||
```
|
||||
|
||||
## 3. 业务规则
|
||||
|
||||
- 请求流水号按 5173 保持人工必填,用作唯一幂等追踪字段。
|
||||
- 合同候选仅包含当前配送点范围内、生效中、已到生效时间、尚未过期且签约用户服务关系仍有效的合同。
|
||||
- 未选择合同时,收货地址和合同气瓶禁用并提示先选合同。
|
||||
- 收货地址仅来自合同签约用户,显示完整地址;存在默认地址时自动选择。
|
||||
- 合同气瓶仅包含所选合同尚未解绑的绑定,显示“智能气阀名称 / 气瓶编码 / 气瓶类型”。
|
||||
- 切换合同立即清空旧地址和旧气瓶;同一资源仅最新请求可以回写候选。
|
||||
- 联系人和联系电话继续作为独立、必填、可编辑的订单快照字段,不从地址伪造回填。
|
||||
- 优惠金额默认 0,不得为负,且必须小于气瓶金额与配送费之和。
|
||||
- 金额预估公式为:气瓶金额 + 默认配送费 - 优惠金额。最终金额由服务端重新计算。
|
||||
|
||||
## 4. 接口兼容与安全
|
||||
|
||||
- `/gasorder_contract` 新增可选 `candidate=order` 筛选;不传参数时合同管理列表保持原行为。
|
||||
- `/user_address` 新增可选 `gasorder_contract_identity` 筛选;后端先确认合同属于当前配送点,再限定合同用户。
|
||||
- `/gasorder_contract_product` 新增可选 `contract_identity` 筛选;后端先确认合同属于当前配送点,再限定未解绑绑定。
|
||||
- 原路径、原响应字段和创建订单请求协议保持兼容;候选接口只新增可选参数和只读展示名称。
|
||||
- 前端候选不可作为授权依据,创建接口继续校验合同、地址、气瓶、创建方和金额。
|
||||
|
||||
## 5. 维护与验证
|
||||
|
||||
新增联动字段时必须声明父字段、服务端筛选键、空态文案和切换提示。禁止仅在浏览器中过滤全量候选。关系请求必须保留版本守卫,保存期间冻结表单并显式防重入。
|
||||
|
||||
验证命令:
|
||||
|
||||
```text
|
||||
go test ./api/internal/logic/delivery ./api/internal/logic/platform/gasorder
|
||||
npm.cmd run type:check
|
||||
npm.cmd run resource-pages:check
|
||||
npm.cmd run contract:check
|
||||
npm.cmd run build
|
||||
```
|
||||
|
||||
## 6. 变更记录
|
||||
|
||||
- v1.0(2026-08-23):新增配送合同到地址、合同气瓶的安全联动,加入金额预估、空态提示、过期响应保护和提交保护。
|
||||
Reference in New Issue
Block a user