Files
one-pipe-system/openspec/changes/add-refund-approval-recovery/proposal.md
luo c5d7a260d0
All checks were successful
构建并部署前端到测试环境 / deploy (push) Successful in 55s
fix: 恢复退款原审批提交
2026-09-20 18:13:14 +08:00

38 lines
2.2 KiB
Markdown

# Change: 增加退款原审批恢复
## Why
退款审批提交可能出现企业微信单号已生成但本地结果未知、原提交事件明确失败,或需要重新同步已有审批单的情况。当前退款页面只有历史记录的“补发审批”能力,无法安全地恢复同一审批尝试;运营人员也缺少提交状态、失败摘要和最近恢复时间,难以判断是否可以处理。
## What Changes
- 新增 `POST /api/admin/refunds/{id}/recover-approval`,无请求体,调用后恢复原审批提交事件或确认未知结果。
- 新增 `RefundService.recoverApproval(id)`,成功响应解析为更新后的退款详情。
- 扩展退款列表和详情模型,支持 `submission_status`、`submission_status_name`、`approval_recoverable`、`approval_failure_summary`、`approval_last_recovery_at`。
- 在退款列表和详情中,仅当后端返回 `approval_recoverable = true` 且当前账号具备退款管理权限及数据范围时显示“恢复审批”。
- 恢复成功后刷新当前列表/详情;遇到状态冲突时提示“当前退款审批状态不允许恢复”并重新加载后端状态。
- 恢复动作沿用退款管理权限和数据范围,不新增审批实例、审批尝试、审批材料、审批实例 ID 或企业微信单号输入,也不替代现有历史审批“补发”能力。
## Impact
- Affected specs:
- `refund-management`
- Affected code:
- `src/api/modules/refund.ts`
- `src/types/api/refund.ts`
- `src/views/finance/refund/index.vue`
- `src/views/finance/refund/detail.vue`
- API contract:
- `POST /api/admin/refunds/{id}/recover-approval`
- `GET /api/admin/refunds`
- `GET /api/admin/refunds/{id}`
- Dependencies:
- 后端返回 `approval_recoverable` 的最终资格判断,并在服务端保证幂等、并发状态校验和数据范围校验。
- 后端成功响应包含完整退款详情,失败响应遵循现有统一错误结构。
- Out of scope:
- 创建新的审批尝试或审批实例。
- 前端直接调用企业微信、传入审批实例 ID、审批材料或 `sp_no`。
- 修改退款金额、退款方式、审批结果或渠道退款流程。
- 批量恢复、自动轮询恢复或替代 `trigger-approval` 历史审批补发。