feat(wallet): 补齐钱包提现与卖家资金页面

This commit is contained in:
yml2213
2026-10-30 16:41:34 +08:00
parent a39a504b81
commit c0c9f161ae
23 changed files with 3348 additions and 0 deletions
+103
View File
@@ -0,0 +1,103 @@
# Phase 2 验收报告(B1 资金闭环)
> 日期:2026-10-30
> 项目:解忧商行(hfb_jysh)
> 范围:C 端钱包、收款账户、提现、移动端提现、卖家收益/待办/线下提号、后台支付流水/资金明细/钱包流水
> 结论:**页面与路由全部落地,tsc/build 通过,只读接口回归 200;写操作未在验收中执行**
---
## 1. C 端钱包
- 页面:`frontend/src/features/wallet/WalletPage.tsx`
- 路由:`/wallet`
- 接口:`GET /api/wallet/balance`、`GET /api/wallet/ledger`
- 能力:可用/冻结余额、账户状态、资金流水(业务、方向、金额、余额类型、变化后余额、备注、时间)与分页。
- 金额全部按分入参,展示统一 `formatMoney(cents)`;入账/出账用颜色与符号区分。
## 2. 收款账户
- 页面:`frontend/src/features/wallet/PaymentAccountsPage.tsx`
- 路由:`/wallet/payment-accounts`
- 接口:`GET/POST /api/payment-accounts`、`PUT/DELETE /api/payment-accounts/:id`、`POST /api/payment-accounts/:id/set-default`
- 能力:
- 卡片式列表,展示收款方式、脱敏账号、开户行、默认标记、凭证数量。
- 新增:收款方式(支付宝/微信/银行卡)、收款人、账号;银行卡额外填开户行与支行。
- 编辑仅允许修改支行、凭证与默认标记(后端 `UpdatePaymentAccountRequest` 不含账号字段)。
- 收款二维码凭证通过 `POST /api/files/upload`(scene `payment-cert`)上传,最多 5 张。
## 3. 提现申请
- 页面:`frontend/src/features/wallet/WithdrawalPage.tsx`
- 路由:`/wallet/withdrawal`
- 接口:`POST /api/withdrawals`、`GET /api/withdrawals`、`POST /api/withdrawals/:id/cancel`
- 能力:
- 默认账户自动选中;金额按元录入、`Math.round(yuan * 100)` 转分提交。
- 校验金额 > 0 且不超过可用余额;当前手续费 0%,页面明确「到账金额以审核结果为准」。
- 提现记录展示金额、手续费/到账、收款方式、状态、备注、申请时间;仅 `pending` 可取消。
## 4. 移动端提现
- 页面:`frontend/src/features/mobile/MobileWithdrawalPage.tsx`
- 路由:`/m/wallet/withdrawal`
- 组件:antd-mobile(NavBar / Card / Selector / Form / List / Dialog / Toast)
- 能力:余额展示、账户选择、金额录入、提交、记录列表与取消;无收款账户时引导到电脑端添加。
## 5. 卖家三页
| 页面 | 路由 | 接口 | 说明 |
|---|---|---|---|
| 号主待办 | `/seller/handoffs` | `GET /api/orders/handoffs` | 待交接/待确认结账/异常三项统计 + 订单列表(复用 `UserOrderListItem`) |
| 收益流水 | `/seller/earnings` | `GET /api/wallet/balance`、`/api/wallet/ledger` | 可用/冻结汇总 + 流水 + 提现入口 |
| 线下提号记录 | `/seller/pickups` | `GET /api/seller/pickups` | 提号编号、账号、操作人/平台、订单金额、应结算、状态与结算状态 |
文件:`frontend/src/features/seller/SellerHandoffsPage.tsx`、`SellerEarningsPage.tsx`、`SellerPickupsPage.tsx`,接口与类型扩展在 `frontend/src/features/seller/api.ts`。
## 6. 后台三页
| 页面 | 路由 | 接口 | 权限 |
|---|---|---|---|
| 支付流水 | `/console-jy8k3m/payments` | `GET /api/admin/payments` | `wallet:view` |
| 资金明细 | `/console-jy8k3m/finance/details` | `GET /api/admin/finance/details` | `wallet:view` |
| 钱包流水 | `/console-jy8k3m/wallet-ledger` | `GET /api/admin/wallet/ledger` | `wallet:view` |
- 支付流水支持订单号、业务类型、状态、渠道筛选,展示金额、支付时间与失败原因。
- 资金明细支持订单号、日期口径(下单/结算/线下结算)、日期区间与结算状态筛选,展示实付/退款、号主结算、平台净额、结算时间。
- 钱包流水支持用户 ID、订单 ID、业务类型筛选,展示方向、金额、变化后余额。
- 三者均为只读页面,未提供任何写操作入口。
## 7. 导航接入
- `frontend/src/layouts/StorefrontLayout.tsx`:账号下拉新增「我的钱包 / 卖家收益 / 号主待办 / 线下提号」。
- `frontend/src/layouts/AdminLayout.tsx`:财务组新增「资金明细、支付流水、钱包流水」,并补 `sectionMeta`。
- 新增样式 `frontend/src/styles/wallet.css`(已接入 `styles/global.css`)。
## 8. 回归结果
```text
前端 http://localhost:5289
后端 http://127.0.0.1:18089
```
| 检查项 | 状态 |
|---|---|
| `/wallet`、`/wallet/payment-accounts`、`/wallet/withdrawal` | 200 |
| `/seller/handoffs`、`/seller/earnings`、`/seller/pickups` | 200 |
| `/m/wallet/withdrawal` | 200 |
| `/console-jy8k3m/payments`、`/finance/details`、`/wallet-ledger` | 200 |
| `GET /api/admin/payments` | 200 |
| `GET /api/admin/finance/details` | 200 |
| `GET /api/admin/wallet/ledger` | 200 |
| `GET /api/wallet/balance`(无 token) | 401(符合鉴权预期) |
`npx tsc --noEmit` 通过;`npm run build` 通过,主入口 `497.95 kB` / gzip `156.88 kB`,无超大包告警。
## 9. 未覆盖
- 提现申请、取消、收款账户增删改、凭证上传均未做端到端写操作验证;开发库当前无真实用户余额与支付数据。
- 移动端提现页未在真机/移动视口做交互回归。
- 真实外部支付、短信与实名服务仍为空配置,不在本轮范围。
## 10. 下一步(B2)
线下提号(`/pickup`、`/pickup/:id`,命名统一「线下提号」并修正 `labels.ts` 现有「捡漏」译法)、客服会话工作台(`/chats`)、主站二维码池(`/qrcode-pool`)、通知/推送/邀请管理。
+3
View File
@@ -409,6 +409,9 @@ hfb_jysh/
### Phase 5:后台长尾 + 分销后台轻改(2–2.5 周)
- 财务看板、资金明细、运营支出。
- 已落地:财务看板、资金明细 `/finance/details`、资金出款、运营开支、支付流水 `/payments`、钱包流水 `/wallet-ledger`。
- 用户端资金闭环。
- 已落地:`/wallet`(余额 + 流水)、`/wallet/payment-accounts`、`/wallet/withdrawal`、移动端 `/m/wallet/withdrawal`、卖家 `/seller/earnings`、`/seller/handoffs`、`/seller/pickups`。
- 申诉仲裁、手工订单、提号、客服群、快捷回复。
- 已落地:客服群组(`/chat-support-groups`,权限 `chat:manage`),角色权限矩阵(`/roles`,权限 `role:manage`),手工录单(`/manual-entries`,权限 `cs_manual_entry:*`),快捷回复(`/chat-quick-replies`,权限 `chat:view` / `chat:send`)。
- 待落地:无(手工录单与快捷回复已迁移完毕)。