From b217ffcdca908839736fc088c41c61f155094b3e Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Wed, 14 Oct 2026 11:51:11 +0800 Subject: [PATCH] docs: design presign save auto-submit finance confirmation Document frontend orchestration so saving a presign order submits all dfj earnest transfers on web and mobile. Co-authored-by: Cursor --- ...presign-save-auto-submit-finance-design.md | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 docs/superpowers/specs/2026-10-14-presign-save-auto-submit-finance-design.md diff --git a/docs/superpowers/specs/2026-10-14-presign-save-auto-submit-finance-design.md b/docs/superpowers/specs/2026-10-14-presign-save-auto-submit-finance-design.md new file mode 100644 index 00000000..6e563b51 --- /dev/null +++ b/docs/superpowers/specs/2026-10-14-presign-save-auto-submit-finance-design.md @@ -0,0 +1,78 @@ +# 预签约订单:保存时自动提交已付款意向金财务确认 — 设计说明 + +**日期:** 2026-10-14 +**状态:** 已确认(方案 1:前端保存后编排) +**范围:** `web-admin` 预签约新增/编辑弹窗;`mobile-oa-h5` 预签约新增/编辑(`mobile-h5` 经 WebView 复用同一套,无独立业务改动) +**前置:** 意向金转账须先落库拿到服务端 `id` 才能提交财务确认 + +## 1. 目标 + +保存预签约订单时,对当前表单中**所有仍为「已付款」`dfj`** 的意向金转账笔,在落库成功后自动调用「提交财务确认」(`dfj` → `jfqrz`),避免「新增转账 → 保存 → 再打开 → 再点提交」的两步操作。 + +覆盖范围包括:本次新创建的转账、以前已保存但未提交的 `dfj` 笔、撤回后又回到 `dfj` 的笔。 + +## 2. 决策摘要 + +| 项 | 决策 | +|----|------| +| 自动提交对象 | 表单内全部 `payStatus === 'dfj'` 且已有服务端 `id` 的转账笔 | +| 实现方式 | 前端编排:先保存订单/转账,再逐笔调用现有提交 API | +| 后端 | 不改保存语义;不新增专用「保存并提交」接口 | +| 端覆盖 | Web + 移动端一起改 | +| 部分失败 | 订单/转账仍算保存成功;提示失败笔数与原因;Web 关弹窗、移动回列表 | +| 手动按钮 | 保留「提交财务确认」,供自动提交失败后补提 | + +## 3. 保存后流程 + +1. 按现有逻辑完成订单校验与保存,以及 `dfj` 转账的创建/更新落库。 +2. 收集待提交列表:`payStatus === 'dfj'` 且存在非空服务端 `id`。 +3. 对列表逐笔调用现有「提交财务确认」接口;单笔失败不中断后续笔,也不回滚已保存数据。 +4. 提示: + - 无需提交或全部成功:沿用现有「保存成功」。 + - 有失败:`订单已保存,但有 N 笔提交财务确认失败:原因1;原因2…`(原因优先用接口错误信息)。 +5. 导航不变:Web 关闭弹窗并 `saved`;移动端回列表。 + +### 3.1 新增 vs 编辑 + +| 场景 | 落库 | 取 `id` | 自动提交 | +|------|------|---------|----------| +| 编辑 | 更新订单;无 `id` 的 `dfj` 创建转账;有 `id` 的 `dfj` 更新 | 创建接口返回值写回对应行;已有行沿用 `id` | 对所有仍为 `dfj` 且有 `id` 的笔提交 | +| 新增 | 创建订单时附带 `transfers`(或等价) | 从创建订单响应的 `transfers` 取 `id` | 对响应中 `dfj` 笔提交 | + +编辑路径须修复当前「创建转账不写回 `id`」的缺口,否则新笔无法进入自动提交。 + +### 3.2 边界 + +- 已转正式 / 作废等不可操作状态:仍由现有保存校验拦截,不进入自动提交。 +- 非 `dfj`(确认中 / 已完成 / 退费等):不参与。 +- 空转账列表:保存行为与现网一致。 +- 自动提交阶段关闭接口成功 toast,避免「保存成功」后又连弹多次「已提交」。 +- 不在保存前强制要求每笔都能提交成功;缺转账方式/金额等由提交接口返回,计入部分失败提示。 + +## 4. 实现落点 + +### 4.1 Web(`web-admin`) + +- 主改:`PresignOrderFormDialog.vue` 的 `handleSave`。 +- API:`fetchCreatePresignTransfer` / `fetchCreatePresignOrder` 须拿到返回数据;自动提交调用 `fetchSubmitPresignTransferFinance`,且成功 toast 关闭(如 `showSuccessMessage: false` 或调用侧等价控制)。 +- 手动 `submitTransfer` 行为保持不变。 + +### 4.2 移动(`mobile-oa-h5`) + +- 主改:`PresignOrderForm.vue` 的 `save`:在转账落库(`persistTransfers` / 创建响应)之后、`goList` 之前执行自动提交。 +- 复用:`mergePersistedTransfer`、`createPresignTransfer`、`submitPresignTransfer`、`marketErrorMessage`。 +- 建议抽纯函数(如收集待提交 id、汇总失败文案),便于单测;`mobile-h5` 无独立业务逻辑则不改。 + +## 5. 测试 + +- 保存后对所有 `dfj` 调用提交;非 `dfj` 不调用。 +- 新创建转账:先落库拿到 `id` 再提交。 +- 部分失败:提示含 N 与原因;仍关弹窗 / 回列表。 +- 手动「提交财务确认」仍可用(契约/现有测试不回归)。 + +## 6. 非目标 + +- 不改财务确认列表、财务审核侧接口与页面。 +- 不把自动提交下沉到后端 create/update 事务。 +- 不自动提交非意向金业务(协议样本缴费等)的转账笔。 +- 不改 `mobile-h5` 壳工程(仅 WebView 承载)。