## 1. Contract And Types - [x] 1.1 在 `Refund` 列表/详情类型中增加 `submission_status`、`submission_status_name`、`approval_recoverable`、`approval_failure_summary`、`approval_last_recovery_at`。 - [x] 1.2 在 `RefundService` 增加 `recoverApproval(id)`,调用无请求体的 `POST /api/admin/refunds/{id}/recover-approval` 并返回完整 `Refund`。 - [x] 1.3 补充 API 注释和统一错误响应处理,明确不传审批实例 ID、材料或企业微信单号。 ## 2. Refund List And Detail - [x] 2.1 列表展示提交状态名称、脱敏失败摘要和最近恢复时间(按页面现有字段展示约定接入)。 - [x] 2.2 仅在 `approval_recoverable === true` 且通过现有退款管理权限/数据范围校验时显示“恢复审批”操作。 - [x] 2.3 恢复操作增加确认和请求中 loading,成功后刷新列表并展示最新响应数据。 - [x] 2.4 详情页展示上述字段和“恢复审批”操作;成功后刷新详情。 - [x] 2.5 处理状态冲突:提示“当前退款审批状态不允许恢复”,并刷新当前数据;其他后端错误沿用统一错误提示。 ## 3. Verification - [x] 3.1 核对已有 `sp_no`、提交结果未知、明确提交失败和不可恢复记录的入口展示与刷新行为。 - [x] 3.2 核对无退款权限、越权数据和 `approval_recoverable = false` 时不显示按钮。 - [x] 3.3 核对重复点击被 loading 阻止,且请求体为空、不携带审批材料或实例 ID。 - [x] 3.4 运行相关类型检查、lint、编码检查和构建。 - [x] 3.5 运行 `openspec.cmd validate add-refund-approval-recovery --strict`。