# 提现审核 — 前端技术方案

> **依据：** 《提现审核功能需求.md》v1.0、《提现审核技术方案.md》v1.0  
> **前端规范：** `doc/前端设计/前端设计.md`  
> **范围：** 仅 **ruoyi-ui 平台端** **全平台提现申请列表**、**高级检索**、**审核通过/驳回**；**不含** 商家提交、账户维护、自动打款、批量审核。  
> **实现状态：** `index.vue`、`api/agri/finance/withdrawAudit.js` **已按 v1.0 落地**；待菜单配置及 `/agri/finance/withdrawAudit` 联调。

---

## 1. 技术栈与写法约定

| 项 | 说明 |
|----|------|
| 框架 | Vue 2 + Element UI |
| 请求 | `@/utils/request`（**无** `X-Shop-Id`；全平台） |
| 参考页面 | `agri/goods/audit/index.vue`（Tab+待审角标）、`agri/seller/finance/withdraw/index.vue`（列表字段） |
| 布局 | 检索 `el-card` + `<br/>` + 列表 `el-card` + `border` 表格 |
| 审核 | `el-dialog` width=560px；通过/驳回 + 处理说明 |
| 默认 Tab | **待审核**（与商品审核工作台一致） |

---

## 2. 业务要点（前端需体现）

| 项 | 说明 |
|----|------|
| 唯一审核入口 | 平台 **PUT approve/reject** |
| 可审状态 | **仅** `withdrawStatus=1`（待审核）显示「审核」 |
| 通过 | **直接** 置「提现完成」；无中间态 |
| 处理说明 | 通过/驳回 **均必填**；≤200 字 |
| 终态 | 审核不通过 / 提现完成 **不可再审** |
| 账户展示 | `accountSummary`（申请时快照） |
| 待审角标 | `GET /pendingCount` |

---

## 3. 文件清单

| 类型 | 路径 | 说明 |
|------|------|------|
| 页面 | `ruoyi-ui/src/views/agri/finance/withdrawAudit/index.vue` | 列表 + 检索 + 审核弹窗 |
| API | `ruoyi-ui/src/api/agri/finance/withdrawAudit.js` | list、pendingCount、approve、reject |

**组件 name（keep-alive）：** `AgriFinanceWithdrawAudit`

**不提供：** 批量审核、独立详情页、导出、编号/店名关键词检索。

---

## 4. 菜单与路由

| 菜单名称 | 组件路径 | 路由 path（建议） | 权限标识 |
|----------|----------|-------------------|----------|
| 提现审核 | `agri/finance/withdrawAudit/index` | `finance/withdrawAudit` | 见下表 |

**上级菜单：** 平台管理端 → **财务管理**

| 按钮权限 | 标识 | 页面落点 |
|----------|------|----------|
| 列表 + 待审数 | `agri:finance:withdrawAudit:list` | 进入页面、Tab 角标 |
| 审核 | `agri:finance:withdrawAudit:audit` | 「审核」、PUT 提交 |

---

## 5. 页面结构（与代码一致）

```text
提现审核 index.vue
├── 检索区 search-card
│   ├── 申请时间 daterange → beginApplyTime / endApplyTime
│   ├── 提现状态 withdrawStatus
│   └── 搜索 / 重置
├── <br/>
├── 列表区 table-card
│   ├── el-tabs：全部 / 待审核(角标) / 审核不通过 / 提现完成
│   ├── el-table border
│   │   ├── 提现编号、申请时间、店铺名称
│   │   ├── 提现账号 accountSummary
│   │   ├── 提现金额、备注
│   │   ├── 提现状态、提现处理说明
│   │   └── 操作：审核（仅待审核）
│   └── pagination
└── 审核弹窗 el-dialog
    ├── 单据摘要 descriptions
    ├── 审核结果 approve / reject
    └── 提现处理说明 processRemark（必填）
```

---

## 6. 列表与检索

**GET** `/list`

| Query | 说明 |
|-------|------|
| pageNum / pageSize | 分页 |
| beginApplyTime / endApplyTime | `yyyy-MM-dd` |
| withdrawStatus | 空=全部；`1`/`2`/`3` |

**GET** `/pendingCount` → `{ pendingCount }`

Tab 与 `withdrawStatus` 联动；**默认 Tab=待审核**。

---

## 7. 审核提交

### 7.1 审核通过

**PUT** `/approve/{withdrawId}`

```json
{ "processRemark": "已向商家打款" }
```

### 7.2 审核驳回

**PUT** `/reject`

```json
{
  "withdrawId": 1,
  "processRemark": "账户信息有误"
}
```

### 7.3 前端校验

| 规则 | 说明 |
|------|------|
| 未选结果 | 「请选择审核结果」 |
| 说明为空 | 「请填写提现处理说明」 |
| 说明超长 | maxlength 200 |
| 成功 | 「操作成功」→ 刷新列表与待审数 |

后端另校验：非待审、并发状态变更、说明必填等。

---

## 8. 状态展示

| withdrawStatus | 文案 | Tag | 操作 |
|----------------|------|-----|------|
| `1` | 待审核 | warning | 审核 |
| `2` | 审核不通过 | danger | — |
| `3` | 提现完成 | success | — |

处理说明：待审核展示 **—**。

---

## 9. API 封装

**模块：** `@/api/agri/finance/withdrawAudit.js`

| 方法 | HTTP | 路径 | 权限 |
|------|------|------|------|
| `listPlatformWithdrawAudits` | GET | `/list` | withdrawAudit:list |
| `getPlatformWithdrawAuditPendingCount` | GET | `/pendingCount` | withdrawAudit:list |
| `approvePlatformWithdrawAudit` | PUT | `/approve/{withdrawId}` | withdrawAudit:audit |
| `rejectPlatformWithdrawAudit` | PUT | `/reject` | withdrawAudit:audit |

---

## 10. 空状态与错误提示

| 场景 | 文案 |
|------|------|
| 列表无数据 | 「暂无提现申请」 |
| 检索无结果 | 「未找到符合条件的提现申请」 |
| 后端状态已变 | 「提现状态已变更，请刷新后重试」 |

---

## 11. 与兄弟模块边界（前端）

| 模块 | 关系 |
|------|------|
| **商家 · 提现管理** | 商家提交；本页审核回写状态与处理说明 |
| **商家/平台 · 资金概览** | 审核写流水；本页不展示流水 |
| **账户管理** | 列表只读账户快照 |

---

## 12. 联调检查清单

- [ ] 菜单挂载 `agri/finance/withdrawAudit/index`
- [ ] 默认进入待审核 Tab
- [ ] 待审角标与 pendingCount 一致
- [ ] 仅待审核行显示「审核」
- [ ] 通过/驳回均须填处理说明
- [ ] 审核成功后列表与角标刷新
- [ ] 商家端提现列表同步终态

---

## 13. 版本记录

| 版本 | 说明 |
|------|------|
| **v1.0** | 首版：列表/检索/审核弹窗/API 封装；对齐需求 v1.0 |

---

*文档版本：v1.0 · 依据《提现审核功能需求.md》v1.0、《提现审核技术方案.md》v1.0*
