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

2.2 KiB

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 历史审批补发。