docs(changelog): 资金账户新建/编辑表单字段对接说明(管理后台 v2)
changelog-filename-gate / validate (push) Failing after 2s

非接口改动:资金账户接口字段早已齐全,前端补 5 字段(bankName/shortName/nature/feeRate/refundReserve)+ scopeCompanies 改多选。
这个提交包含在:
yaosutu
2026-09-13 10:05:19 +08:00
父节点 4b351d1c1c
当前提交 48d36a1c84
@@ -0,0 +1,174 @@
---
schema: "hl-changelog/v2"
ticket: "7520"
title: "资金账户新建/编辑表单字段对接说明——后端字段早已齐全,前端补 5 字段 + 所属公司改多选(非接口改动)"
consumer: "admin"
author: "yst"
change_type: "修改接口"
backend_status: "deployed"
gateway_status: "not_required"
frontend_status: "not_required"
frontend_owner: ""
frontend_ref: ""
target_release: ""
verified_at: ""
status_note: "📘 字段对接说明(非接口改动):资金账户新建/编辑接口出入参字段早已齐全,后端零改动。前端表单缺 5 字段(bankName/shortName/nature/feeRate/refundReserve)+ scopeCompanies 误作单选(后端实为多选)。前端按本文补做即可,无需后端配合。"
updated_at: "2026-09-13"
base: "dev-v3"
---
# 资金账户 新建/编辑表单 —— 字段对接说明
> **服务**: hl-order-service-v3(hl-finance 财务模块)
> **端**: 管理后台
> **类型**: 📘 字段对接说明(**非接口改动**,字段早已在出入参里,本文只讲"前端该补哪些")
> **日期**: 2026-09-13
> **关联**: Epic #7520(员工借款域全链路)配套梳理
---
## 一句话结论
资金账户新建/编辑弹窗,后端接口字段**早已齐全、零改动**。前端当前少做了 **5 个字段**,并把 **所属公司误作单选**(后端是多选)。按下表补做即可,**无需后端配合**。
**涉及接口**:
- 新建 `POST /admin/finance/fund-accounts`
- 编辑 `PUT /admin/finance/fund-accounts/{id}`
- 详情 `GET /admin/finance/fund-accounts/{id}`
---
## ⚠️ 前端需补的 5 个字段(后端入参现有)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `bankName` | String(≤100) | 选填 | 开户行(如 工商银行海拉尔支行) |
| `shortName` | String(≤50) | 选填 | 账户简称(列表展示用,如 工行对公户) |
| `nature` | String | **仅 BANK 必填** | 账户性质:`BASIC` 基本户 / `GENERAL` 一般户 |
| `feeRate` | BigDecimal | 选填 | 默认手续费率(‰),≥0 |
| `refundReserve` | BigDecimal | 选填 | 退款预留额度(**仅 THIRD_PARTY 第三方支付**,默认 0) |
## ⚠️ 所属公司:单选 → 多选
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `scopeCompanies` | **List\<String\>** | ✅ | 所属公司**多选**(公司主体名列表);`["ALL"]`=全公司通用,与指定公司**互斥** |
> 前端当前做成了单选下拉,应改为**多选**。传 `["ALL"]` 表示全公司通用(此时不能再传具体公司)。
---
## 完整入参(FundAccountCreateReqVO)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `accountName` | String(≤100) | ✅ | 账户名称(全称化口径,如 呼伦贝尔XX公司基本户) |
| `accountNo` | String(≤64) | ✅ | 账号(原值入库,展示层脱敏) |
| `accountType` | String | ✅ | `BANK` 银行 / `CASH` 现金 / `THIRD_PARTY` 第三方支付 / `INTERNAL_VIRTUAL` |
| `openingBalance` | BigDecimal | ✅ | 期初结存(起步余额,可 0) |
| `scopeCompanies` | List\<String\> | ✅ | 所属公司多选;`["ALL"]`=全公司通用 |
| `bankName` | String(≤100) | ❌ | 开户行 |
| `nature` | String | 仅 BANK 必填 | `BASIC` 基本户 / `GENERAL` 一般户 |
| `channel` | String | 仅 THIRD_PARTY 必填 | `WXPAY` 微信 / `ALIPAY` 支付宝 |
| `settleAccountNo` | String(≤64) | 仅 THIRD_PARTY | 绑定结算卡(展示层脱敏) |
| `refundReserve` | BigDecimal | ❌ | 退款预留额度(仅 THIRD_PARTY,默认 0) |
| `shortName` | String(≤50) | ❌ | 账户简称 |
| `displayName` | String(≤64) | ❌ | 对外展示名(对客/对单展示,空则展示账户名称) |
| `sortOrder` | Integer | ❌ | 排序(越小越靠前,缺省 0) |
| `feeRate` | BigDecimal | ❌ | 默认手续费率(‰) |
| `overdraftAllowed` | Integer | ❌ | 可否透支:1 允许 / 0 不允许(默认) |
| `payQrUrl` | String(≤500) | ❌ | 收款码图片 URL |
| `remark` | String(≤200) | ❌ | 备注 |
> **编辑** `PUT` 入参与新建基本一致,差异:`openingBalance` / `accountType` **不可改**;`nature` 对已是 BASIC 的账户**锁死**不可改。
---
## 出参(FundAccountDetailRespVO,详情)
入参字段全回显 + 额外:
| 字段 | 说明 |
|---|---|
| `id` | 账户 ID(Long 已转 String 防 JS 精度丢失) |
| `accountTypeName` / `natureName` / `channelName` | 类型/性质/渠道**中文名**(字典标签,展示直接用) |
| `balance` | 当前结存(只读,流水重算) |
| `currency` | 币种(CNY) |
| `status` | `ACTIVE` / `DISABLED` |
| `openingBalance` | 期初结存(读时派生:balance − ΣIN + ΣOUT + Σfee) |
| `flows` | 本账户资金流水分页(逐笔含 balanceAfter) |
> 出参 `accountNo` / `settleAccountNo` 为**脱敏后**值。
---
## 字典枚举(前端展示用中文名走后端字典标签字段)
| 字段 | 枚举值 | 中文字段 |
|---|---|---|
| `accountType` | `BANK` / `CASH` / `THIRD_PARTY` / `INTERNAL_VIRTUAL` | `accountTypeName` |
| `nature` | `BASIC` / `GENERAL` | `natureName` |
| `channel` | `WXPAY` / `ALIPAY` | `channelName` |
| `status` | `ACTIVE` / `DISABLED` | — |
| `overdraftAllowed` | `1` 允许 / `0` 不允许 | — |
---
## 示例
### 新建请求(银行-基本户-多公司)
```json
{
"accountName": "呼伦贝尔呼籁国际旅行社有限公司基本户",
"accountNo": "6222020200112233445",
"accountType": "BANK",
"bankName": "工商银行海拉尔支行",
"nature": "BASIC",
"shortName": "工行对公户",
"displayName": "呼籁国际-基本户",
"openingBalance": 100000.00,
"feeRate": 0,
"overdraftAllowed": 0,
"scopeCompanies": ["内蒙古呼籁国际旅行社有限公司", "呼伦贝尔呼籁旅行社有限公司"],
"remark": "主收单账户"
}
```
### 新建请求(第三方支付-全公司通用)
```json
{
"accountName": "呼籁微信商户号",
"accountNo": "1630001234",
"accountType": "THIRD_PARTY",
"channel": "WXPAY",
"settleAccountNo": "6222020200998877665",
"refundReserve": 5000.00,
"openingBalance": 0,
"scopeCompanies": ["ALL"]
}
```
### 成功响应
```json
{ "code": 200, "message": "success", "data": { "id": "2095340438490583041" }, "success": true }
```
---
## 注意事项
1. **后端零改动**:本文是字段对接说明,接口出入参早已就绪,前端按上表补做即可。
2. **基本户唯一口径**:后端当前是**全系统仅一个基本户**(`BASIC` 唯一约束),非"每公司一个"。若产品要求按公司各一个基本户,需另提需求改后端(本期按全系统一个)。
3. **退款预留**仅对 `THIRD_PARTY` 有业务含义,银行/现金户填了不生效,前端可按类型联动显隐。
4. **收款码** `payQrUrl` 存图片 URL,尺寸 200*200 / ≤2M 由前端 + 文件上传服务控制,后端不校验尺寸/大小。
5. HTTP 恒 200,判 `code`;业务失败按 `message` 原样提示即可(不二次包装)。
---
## 关联
- 服务:hl-order-service-v3(hl-finance 财务模块)
- 联系人:yst(腰苏图)