v4.0.18版本提交

This commit is contained in:
2026-09-08 10:07:34 +08:00
parent 4bdb09068c
commit 23ba639e9b
46 changed files with 1922 additions and 162 deletions
+2 -2
View File
@@ -146,8 +146,8 @@ HQ 页也会展示 Base URL 与 Header 名(不含密钥)。
| partnersTotal / partnersIncrement | Integer | 合伙人 |
| storesTotal / storesIncrement | Integer | 门店存量/增量 |
| **newStores** | Integer | **新增门店数**(与 storesIncrement 相同) |
| ordersTotal / ordersIncrement | Integer | 订单笔数 |
| orderAmountTotal / orderAmountIncrement | Number | 订单金额(已付 payAmount |
| ordersTotal / ordersIncrement | Integer | 订单笔数(排除待支付 / 已取消 / 退款中) |
| orderAmountTotal / orderAmountIncrement | Number | 订单金额(已付 payAmount,排除待支付 / 已取消 / 退款中 |
| redeemsTotal / redeemsIncrement | Integer | 核销笔数 |
| redeemAmountTotal / redeemAmountIncrement | Number | 核销金额 |
+2 -1
View File
@@ -32,7 +32,7 @@
| **mini-user** | 购酒/权益/核销/门店/物流/版本门控 | 规则弹窗、发票、四类型工单、问卷 |
| **h5-shop** | 扫码核销、记录、营业、iOS 扫码 OAuth | 手机号核销、提现、子账号、弱网兜底 |
| **h5-partner** | 子账号、拓店、订单/账单、套餐 | 试核销100、负责人复核、代下单 |
| **admin-web** | 商品/开城/门店/订单(含 Excel/PDF 导出)/权益/核销/结算/推广码 metrics/开发计划/技术支持/企微报告 | 完整 SOP 审核 UI、发票、热力图 |
| **admin-web** | 商品/开城/门店/门店账号含子账号 CRUD/订单(含 Excel/PDF 导出)/权益/核销/结算/推广码 metrics/开发计划/技术支持/企微报告 | 完整 SOP 审核 UI、发票、热力图 |
| **后端** | 主模块、支付、权益、核销、payout、Courier 适配 | 30min 取消 job、部分 Wave3 |
## 3. 场景 SC-01~09
@@ -73,6 +73,7 @@
| 日期 | 说明 |
|------|------|
| 2026-09-08 | HQ「门店账户」主账号详情可 CRUD 店员子账号(`/admin/store-accounts/:id/staff` |
| 2026-09-06 | v3.5.17:企微 API 插件迁入 HQ「企微机器人 → API 插件」;多实例 Key + 工具权限;不再依赖 `WECOM_PLUGIN_*` env |
| 2026-09-03 | v3.5.16:企微 API 插件只读数据面 `GET /api/v1/wecom/plugin/*`X-Api-Key);与长连接 Bot 独立 |
| 2026-08-30 | HQ 门店账单确认打款支持上传凭证照片(`payment_proof_urls` |
+2 -2
View File
@@ -28,8 +28,8 @@
| 用户数量 | `status=1` 且未合并,`createdAt` < 期末 | 区间内创建 |
| 合伙人数量 | 主账号 `is_primary=1` | 区间内创建 |
| 门店数量 | 全部门店 | 区间内创建 |
| 订单数量 | 按下单 `createdAt` | 区间内下单 |
| 订单金额 | 已付 `payAmount``paidAt` | 区间内支付 |
| 订单数量 | 按下单 `createdAt`,排除待支付 / 已取消 / 退款中 | 区间内下单 |
| 订单金额 | 已付 `payAmount``paidAt`,排除待支付 / 已取消 / 退款中 | 区间内支付 |
| 核销单数量 / 金额 | `RedeemRecord` | 区间内核销 |
- **日报**:发送日前一自然日(截账至发送日 0 点 / 前一天 24 点);默认 20:00 发送;新增文案「当日新增」。
+1 -1
View File
@@ -56,7 +56,7 @@ WECOM_PLUGIN_API_KEY=<随机长密钥>
| GET | `/promo-codes/:code/stats` | 推广码统计 |
| GET | `/metrics?kind=` | `today` \| `daily` \| `weekly` \| `monthly` |
经营指标口径与 v3.5.15 报告一致:用户=有效未合并;订单金额=已付 `payAmount``paidAt`);核销=`RedeemRecord``today` 期末为当前时刻。
经营指标口径与 v3.5.15 报告一致:用户=有效未合并;订单笔数与金额均排除待支付 / 已取消 / 退款中;订单金额=已付 `payAmount``paidAt`);核销=`RedeemRecord``today` 期末为当前时刻。
审计:`log_wecom_bot.botKey=plugin`
+3 -1
View File
@@ -46,12 +46,14 @@ C 端购酒核销 · 门店扫码核销+打款 · 合伙人拓店履约 · WebAd
**HQ 概览(v4.0.14 / v4.0.15**`GET /admin/dashboard/analytics` 支持日/周/月/季/年分桶;默认窗口为上一档起点~今天。全局筛城市+时间;日期快捷上周/上月/上季度;总量/增量单选分开展示。改粒度不改日期。查询右侧可下载当前折线图 PDF(不含 KPI/待办)。v4.0.15 起为多张全宽折线图:总量=桶末日存量,增量=桶内新增;用户线=推广码/关联合伙人/活动,门店线=关联合伙人,订单线=用户/关联合伙人/商品,核销线=门店/关联合伙人,合伙人单线。订单与核销同时出笔数和金额。关联合伙人=`assoc_partner_account_id`;活动=关联合伙人当前活动图。「查看」只带全局城市与日期。无权限模块后端不算不返回。时间按北京日历。
**HQ 企微报告(v3.5.15**:企微机器人下「报告」与「消息推送」分开。日报/周报/月报各配 Webhook 与发送时刻;走群机器人 markdown。账期截在发送日北京 0 点(前一天 24 点),不含发送当天:日报=昨日存量+当日新增;周报/月报=上一自然周/月期末存量+本期新增。用户=有效未合并;合伙人=主账号;订单金额=已付 `payAmount``paidAt`);核销=`RedeemRecord`
**HQ 企微报告(v3.5.15**:企微机器人下「报告」与「消息推送」分开。日报/周报/月报各配 Webhook 与发送时刻;走群机器人 markdown。账期截在发送日北京 0 点(前一天 24 点),不含发送当天:日报=昨日存量+当日新增;周报/月报=上一自然周/月期末存量+本期新增。用户=有效未合并;合伙人=主账号;订单笔数与金额均排除待支付 / 已取消 / 退款中;订单金额=已付 `payAmount``paidAt`);核销=`RedeemRecord`
**企微 API 插件(v3.5.17**:实例在 HQ「企微机器人 → API 插件」维护;共用 `GET /api/v1/wecom/plugin/*`Header `X-Api-Key` 区分实例并按权限放行。经营指标含新增门店(`newStores`);门店搜索含经营数据;支持门店/信息/套餐审核对照只读查询;支持按合伙人查关联用户/门店/订单(`from`/`to` 时间筛选)。
**HQ 列表(v3.5.9**:主表不省略号、可横滑;最左序号;列设置(显隐/顺序)与列宽(拖表头)存 `hq_account.list_column_prefs`。主展示列下划线,点击进编辑或详情。门店列表「累计核销好客权益」= 该店 `RedeemRecord.amount` 合计。用户列表昵称只读(点击进详情);双击「备注」离开即保存(`hq_remark`);列表手机号不脱敏。
**HQ 门店账号子账号**`GET /admin/store-accounts/:id` 详情含 `staff``POST /admin/store-accounts/:id/staff` · `PUT /admin/store-accounts/:id/staff/:staffId` · `DELETE /admin/store-accounts/:id/staff/:staffId`。仅主账号可挂子账号(不可多级);`storeIds` 必须是主账号已绑定门店;创建默认 `ACTIVE`、角色默认收银员、权限默认核销+记录;改登录手机解绑微信。门店端自管仍走 `GET/POST/PUT/DELETE /shop/staff`
**C 端(v3.5.10**:门店详情无顶栏分享按钮。同城送提示取开城仓库绑定承运商的 `delivery_hint_html``GET /catalog/local-deliveries`,按收货市是否开城);空则回退「同城配送,预计24小时内送到」。在线客服优先 `wx.openCustomerServiceChat``CUSTOMER_SERVICE_WECOM_URL` + `WECOM_CORP_ID`);未配 CorpID 回退小程序原生客服。
**起购(v3.5.11**:现场提货 / 同城 / 跨城阈值在城市 `pickup_min_qty` / `local_min_qty` / `cross_min_qty`(瓶当量)。承运商「起送瓶数」只用于物流计价,不拦下单。
+21 -4
View File
@@ -1,7 +1,7 @@
# 杜康好客 · V4 PRD
> **v4.0**2026-08-29)· 关联码与分佣事实源;**v4.0.6** 酒厂对账;**v4.0.7** HQ 活动图快链与勾选导出;**v4.0.9** 合伙人 H5 周结算与用户管理;**v4.0.14** HQ 概览粒度;**v4.0.15** HQ 概览折线图;**v4.0.18** 门店多收款账户子账号继承码
> 未改规则仍见 [`杜康好客-v3-PRD.md`](./杜康好客-v3-PRD.md)。**冲突时 V4 > V3**(本主题:订单佣金归属、关联码、合伙人账单明细、活动图、酒厂对账、合伙人周结算、HQ 概览)。
> **v4.0**2026-08-29)· 关联码与分佣事实源;**v4.0.6** 酒厂对账;**v4.0.7** HQ 活动图快链与勾选导出;**v4.0.9** 合伙人 H5 周结算与用户管理;**v4.0.14** HQ 概览粒度;**v4.0.15** HQ 概览折线图;**v4.0.18** 门店多收款账户子账号继承码、财务银行账户总目录
> 未改规则仍见 [`杜康好客-v3-PRD.md`](./杜康好客-v3-PRD.md)。**冲突时 V4 > V3**(本主题:订单佣金归属、关联码、合伙人账单明细、活动图、酒厂对账、合伙人周结算、HQ 概览、财务银行账户)。
> 实现:[`v4.0.1 开发文档`](./杜康好客-v4.0.1-开发文档.md) · [`v4.0.2 开发文档`](./杜康好客-v4.0.2-开发文档.md) · [`v4.0.6 开发文档`](./杜康好客-v4.0.6-开发文档.md) · [`v4.0.7 开发文档`](./杜康好客-v4.0.7-开发文档.md) · [`v4.0.9 开发文档`](./杜康好客-v4.0.9-开发文档.md) · [`v4.0.14 开发文档`](./杜康好客-v4.0.14-开发文档.md) · [`v4.0.15 开发文档`](./杜康好客-v4.0.15-开发文档.md) · [`v4.0.18 开发文档`](./杜康好客-v4.0.18-开发文档.md) · 审计:[`v4-现状对照`](./杜康好客-v4-现状对照.md)
## 0. 版本
@@ -15,7 +15,7 @@
| 4.0.9 | 09-02 | 子账号默认启用;关联码已扫码计数;零元账单不同步;主账号自填银行账号;周账周一 08:00 出账;预付款预估;子账号用户管理(无活动图) | [`v4.0.9`](./杜康好客-v4.0.9-开发文档.md) |
| 4.0.14 | 09-02 | HQ 概览:日/周/月/季/年、环比、全局城市/时间 + 五板块筛;订单/核销笔数与金额 | [`v4.0.14`](./杜康好客-v4.0.14-开发文档.md) |
| 4.0.15 | 09-02 | HQ 概览改为全宽折线图:粒度分桶、总量/增量、维度线条;查看快链只带全局筛选 | [`v4.0.15`](./杜康好客-v4.0.15-开发文档.md) |
| 4.0.18 | 09-07 | C 端门店列表省市区县地址;门店多收款账户(默认账户打款,切换无需重启);子账号独立继承二维码 + 子账号维度统计 | [`v4.0.18`](./杜康好客-v4.0.18-开发文档.md) |
| 4.0.18 | 09-07 / 09-08 | C 端门店列表省+市+区+详细地址(原样拼接、不去重);门店多收款账户(默认账户打款,切换无需重启);子账号独立继承二维码 + 子账号维度统计HQ 财务银行账户总目录 | [`v4.0.18`](./杜康好客-v4.0.18-开发文档.md) |
## 1. 锚点(沿用 V3,佣金归属改写)
@@ -106,6 +106,23 @@ HQ 财务详情与合伙人确认页均展示两段列表。不再「无快照
- **切换/新增/删除账户无需重启服务器**:银行字段均实时查库,无进程内缓存。
- 权限:门店主账号维护本店账户(子账号只读);总部可维护任意门店账户。
## 9. 不做
## 9. 财务银行账户总目录(v4.0.18
HQ「财务 → 银行账户」聚合**有效**收款账户,供财务查阅、筛选、导出;**不替代**各业务源的维护入口,也不作为打款主数据。
| 类型 | 来源 | 有效 | 本页可写 |
|------|------|------|----------|
| 门店 | `store_bank_account` | ACTIVE 且户名+账号非空;含非默认 | 仅备注 |
| 酒厂 | `WINERY_BANK_*` | 户名+账号已填 | 仅备注 |
| 合伙人 | 主账号 `bank_account_*` | ACTIVE 且户名+账号非空 | 仅备注 |
| 物流 | 承运商 `common_fulfillment_provider` | ACTIVE 且户名+账号非空 | 仅备注 |
| 其他 | `finance_bank_account` | ACTIVE | 增删改(不挂门店,不进入打款) |
- 列表字段:类型、归属、城市、户名、银行账号、开户行、备注;门店显示是否默认。
- 筛选:类型、城市、关键字(户名/账号/开户行/归属/备注)。可导出 Excel 与 PDF。
- 「其他」账户仅登记备查,不进入门店提现、账单打款、酒厂/物流对账。
- 权限:`finance`
## 10. 不做
改推广码体系;改核销归属;回刷已打款账单;区县佣金双轨;AI 出图/出文案;C 端/门店端活动图;预生成每人缓存图。
+4 -2
View File
@@ -7,7 +7,7 @@
| 维度 | 结论 |
|------|------|
| 版本线 | **v4.0.18** 门店多收款账户 + 子账号继承二维码(含 v4.0.15 HQ 概览折线图) |
| 版本线 | **v4.0.18** 门店多收款账户 + 子账号继承二维码 + HQ 财务银行账户总目录(含 v4.0.15 HQ 概览折线图) |
| 订单佣金 | 区县归属已删除;只认关联 / 代下单选择 |
| 账单 | 酒订单 / 核销订单分列;合伙人改为周账(周一 08:00);零元不同步合伙人;酒厂含现场提货,零应付仍出账(无需打款) |
| 活动图 | HQ 上传底图/码栏/文案;**v4.0.15 上传超限自动压缩并提示尺寸**;合伙人选择写入库;HQ 可指定一张图为勾选主合伙人合成下载;子账号不可看活动图 |
@@ -24,7 +24,7 @@
| 4.0.13 | [`收货地址把关与拒单可感知`](./杜康好客-v4.0.13-开发文档.md) | ✅ 已实现 |
| 4.0.14 | [`HQ 概览粒度与环比`](./杜康好客-v4.0.14-开发文档.md) | ✅ 已实现 |
| 4.0.15 | [`HQ 概览折线图`](./杜康好客-v4.0.15-开发文档.md) | ✅ 已实现 |
| 4.0.18 | [`门店多收款账户 + 子账号继承二维码`](./杜康好客-v4.0.18-开发文档.md) | ✅ 已实现 |
| 4.0.18 | [`门店多收款账户 + 子账号继承二维码 + 财务银行账户总目录`](./杜康好客-v4.0.18-开发文档.md) | ✅ 已实现 |
| 日期 | 说明 |
|------|------|
@@ -39,3 +39,5 @@
| 2026-09-02 | v4.0.14HQ 概览日/周/月/季/年、环比;全局城市/时间 + 五板块筛;订单/核销笔数与金额 |
| 2026-09-02 | v4.0.15HQ 概览改为全宽折线图;去掉板块筛;查看快链只带全局城市与日期;活动图上传超限自动压缩并提示尺寸 |
| 2026-09-07 | v4.0.18C 端门店列表省市区县地址;门店多收款账户(默认账户打款、切换无需重启);子账号独立继承码 + 子账号维度统计 |
| 2026-09-08 | v4.0.18 修订:C 端门店地址「省+市+区+详细地址」原样拼接,详细地址已含省市区时不去重 |
| 2026-09-08 | v4.0.18 追加:HQ 财务银行账户总目录(聚合门店/酒厂/合伙人/物流有效账户;可新增不挂门店账户;筛选与 Excel/PDF 导出) |
+67 -13
View File
@@ -1,7 +1,9 @@
# 杜康好客 · v4.0.18 开发文档
> **2026-09-07** · mini-user / store / settlement / iam / h5-shop / admin-web / h5-partner / shared-types
> **主题**:C 端门店列表省市区县地址;门店多收款账户;子账号独立继承二维码
> **2026-09-07** · mini-user / store / settlement / iam / h5-shop / admin-web / h5-partner / shared-types / domain
> **主题**:C 端门店列表省市区县地址;门店多收款账户;子账号独立继承二维码HQ 财务银行账户总目录
> **2026-09-08 修订**:门店列表地址按「省+市+区+详细地址」原样拼接,详细地址已含省市区时**不去重**
> **2026-09-08 追加**:HQ 财务「银行账户」总目录(聚合门店/酒厂/合伙人/物流 + 不挂门店的「其他」账户)
---
@@ -9,11 +11,12 @@
| # | 任务 | 类型 | 交付 |
|---|------|------|------|
| 1 | C 端门店列表地址 | 需求 | 「省市区县 + 详细地址」拼接展示,搜索同步匹配完整地址 |
| 1 | C 端门店列表地址 | 需求 | 「省 + 市 + 区 + 详细地址」原样拼接展示(不去重);搜索匹配完整地址 |
| 2 | 门店多银行账号 | 需求 | 门店级收款账户列表;设「默认」账户用于打款;**切换无需重启** |
| 3 | 子账号二维码 | 需求 | 子账号独立继承码 `sa_{subId}`;新增一级子账号维度统计 |
| 4 | HQ 财务银行账户总目录 | 需求 | 财务菜单下列出有效账户;可新增不挂门店的「其他」账户;类型/备注/筛选/Excel+PDF 导出 |
**不做**:银行账号历史打款回刷;子账号佣金独立归属(佣金仍归主账号);按承运商维度的收款账户。
**不做**:银行账号历史打款回刷;子账号佣金独立归属(佣金仍归主账号);按承运商维度的收款账户;「其他」账户接入打款;本页改写门店/合伙人/酒厂/物流源字段
---
@@ -21,7 +24,23 @@
### 2.1 门店列表地址
接口已返回 `province` / `cityName` / `district` / `address`,纯前端拼接。复用助手 `fullStoreAddress(store)``province + (cityName ?? city) + district + address` trim,空回退「地址待完善」),与门店详情页逻辑一致
C 端门店列表卡片「地址」一栏(门店详情页同规则)= **下拉省 + 下拉市 + 下拉区 + 详细地址 input 原文**,四段按字段原样拼接,中间不加分隔符
| 字段 | 来源 | 存库 |
|------|------|------|
| 省 | 录店/改店省市区下拉 | `store.province` |
| 市 | 同上 | `store.cityName` |
| 区 | 同上 | `store.district` |
| 详细地址 | 用户自由输入(地图选点若回填也写入此字段) | `store.address` |
**禁止去重**:不得因详细地址已包含省/市/区而省略前缀。助手 `formatStoreDisplayAddress``packages/domain`/ `fullStoreAddress`mini-user)只做 trim 后拼接;空则回退「地址待完善」。
| 下拉省市区 | 详细地址 | 列表展示 |
|------------|----------|----------|
| 河南省 / 郑州市 / 金水区 | 金水东路333号 | `河南省郑州市金水区金水东路333号` |
| 河南省 / 郑州市 / 金水区 | 河南省郑州市金水区金水东路333号 | `河南省郑州市金水区河南省郑州市金水区金水东路333号` |
搜索关键字同时匹配 `address` / `district` / 完整拼接结果。规则实现:`formatStoreDisplayAddress`(domain,后端地理编码同用)与 mini-user `fullStoreAddress`(列表/详情展示)。
### 2.2 门店多银行账号
@@ -49,6 +68,26 @@ flowchart LR
- `getSummary`/`getStats`/`listUsers`/`listAssocOrders`:子账号调用时返回**自己维度**数据(`assocSubAccountId=子账号`);`activityPosterId` 恒为空;主账号保持聚合行为不变。
- 佣金仍归主账号,不因扫码来源为子账号而改变归属。
### 2.4 HQ 财务银行账户总目录
财务查阅与手工登记目录,**不改打款主数据**。打款仍读各业务源表(门店默认账户、合伙人主账号字段、承运商字段、酒厂 `WINERY_BANK_*`)。
**有效账户**(同时满足才入列):户名、银行账号均非空;来源状态为有效。
| 类型 | 数据源 | 有效条件 | 本页可写 |
|------|--------|----------|----------|
| 门店 | `store_bank_account` | `status=ACTIVE`;所有门店的全部有效账户(含非默认) | 仅备注 |
| 酒厂 | `system_config` `WINERY_BANK_*` | 户名+账号已填 | 仅备注 |
| 合伙人 | `partner_account` | `status=ACTIVE`、主账号、户名+账号已填 | 仅备注 |
| 物流 | `common_fulfillment_provider` | `status=ACTIVE`、户名+账号已填(仓无银行字段) | 仅备注 |
| 其他 | `finance_bank_account` | `status=ACTIVE` | 增删改 |
- 列表:类型、归属、城市、户名、银行账号、开户行、备注;门店另显示是否默认。
- **新增不关联门店** = 类型「其他」,不进入提现/账单打款/酒厂/物流对账。
- 来源账户户名/账号/开户行仍在原处改;本页只读这些字段。备注:其他写本表;来源写 overlay 表 `finance_bank_account_note`
- 筛选:类型、城市、关键字(户名/账号/开户行/归属名/备注)。导出按当前筛选全量 Excel / PDF。
- 权限:HQ `finance`
---
## 3. API
@@ -75,32 +114,47 @@ flowchart LR
- `GET /partner/assoc/stats``GET /partner/assoc/users``GET /partner/assoc/orders`:子账号返回自己维度。
- `GET /partner/assoc/qrcode`:子账号下载自己的码。
### 3.3 财务银行账户总目录(settlement 模块)
| 方法 | 路径 | Guard | 说明 |
|------|------|-------|------|
| GET | `/admin/finance/bank-accounts` | HQ `finance` | 聚合列表;`type` / `cityId` / `keyword` / `page` / `pageSize` |
| GET | `/admin/finance/bank-accounts/export` | HQ `finance` | `format=xlsx\|pdf`,同筛选全量 |
| POST | `/admin/finance/bank-accounts` | HQ `finance` | 新增「其他」 |
| PUT | `/admin/finance/bank-accounts/other/:id` | HQ `finance` | 编辑「其他」 |
| DELETE | `/admin/finance/bank-accounts/other/:id` | HQ `finance` | 删除「其他」 |
| PUT | `/admin/finance/bank-accounts/:id/remark` | HQ `finance` | 任意类型写备注;`id` 为复合键 |
`id``STORE:{storeBankAccountId}` / `PARTNER:{partnerId}` / `LOGISTICS:{providerId}` / `WINERY:winery` / `OTHER:{id}``bankAccountNo` 校验 `^\d{8,32}$`
---
## 4. 变更面
| 层 | 路径 |
|----|------|
| Prisma | `schema.prisma`(新增 `StoreBankAccount``User.assocSubAccountId` |
| 迁移 | `migrate-store-bank-account-v4018.sql``migrate-user-assoc-sub-account-v4018.sql` |
| shared-types | `settlement.ts``StoreBankAccountDto`);`partner-assoc.ts`summary/touch/bind 增 `subAccountId`/`isSubAccount` |
| API store | `store-bank.service.ts``store-bank.controller.ts`(新增);`store.module.ts``store-bank.util.ts``loadStoreBankAccounts`/`loadStoreDefaultBank`);`partner-assoc.service.ts``sa_` 解析/生成/touch/bind/统计 |
| API settlement | `settlement.service.ts`summary/withdraw/admin-withdrawal/export 改读默认账户 |
| Prisma | `schema.prisma`(新增 `StoreBankAccount``FinanceBankAccount``FinanceBankAccountNote``User.assocSubAccountId` |
| 迁移 | `migrate-store-bank-account-v4018.sql``migrate-user-assoc-sub-account-v4018.sql``migrate-finance-bank-account-v4018.sql` |
| domain | `store-address.ts``formatStoreDisplayAddress`:省+市+区+详细地址原样拼接,不去重 |
| shared-types | `settlement.ts``StoreBankAccountDto``FinanceBankAccountDto``hq-list-columns.ts``finance-bank-accounts`);`partner-assoc.ts`summary/touch/bind 增 `subAccountId`/`isSubAccount` |
| API store | `store-bank.service.ts``store-bank.controller.ts`(新增);`store.module.ts``store-bank.util.ts``loadStoreBankAccounts`/`loadStoreDefaultBank`);`partner-assoc.service.ts``sa_` 解析/生成/touch/bind/统计);`store.service.ts`(地理编码地址与 C 端同规则拼接 |
| API settlement | `settlement.service.ts`summary/withdraw/admin-withdrawal/export 改读默认账户);`finance-bank-account.service.ts``finance-bank-export.util.ts`(财务银行账户总目录) |
| API ops | `admin-redeem.service.ts`(默认账户) |
| mini-user | `stores/index.tsx``lib/store-display.ts``fullStoreAddress`)、`lib/promo.ts`(放行 `sa_` |
| mini-user | `stores/index.tsx``store-detail/index.tsx``lib/store-display.ts``fullStoreAddress`)、`lib/promo.ts`(放行 `sa_` |
| h5-shop | `BankAccountsPage.tsx`(新增)、`App.tsx``MinePage.tsx``styles.css` |
| admin-web | `StoreBankAccountsPanel.tsx`(新增)、`StoresPage.tsx`(收款账户页签) |
| admin-web | `StoreBankAccountsPanel.tsx`(新增)、`StoresPage.tsx`(收款账户页签)`BankAccountsPage.tsx`(财务银行账户总目录) |
| h5-partner | `AssocQrcodePage.tsx``UsersManagePage.tsx`(子账号提示) |
---
## 5. 验收
- [ ] C 端门店列表地址显示「省市区县 + 详细地址」;空值回退「地址待完善」;搜索「省/市/区县」关键词可命中
- [ ] C 端门店列表地址 = 省+市+区+详细地址原文;详细地址已含省市区时仍重复拼接(例:金水东路333号 → `河南省郑州市金水区金水东路333号`;详细地址写全称 → `河南省郑州市金水区河南省郑州市金水区金水东路333号`;空值回退「地址待完善」;搜索「省/市/区县」关键词可命中
- [ ] 门店可新增/编辑/删除/设默认收款账户;默认账户用于提现打款与账单导出
- [ ] 切换默认账户后(无需重启)提现 summary 与打款信息即时生效
- [ ] 子账号可生成并下载自己的二维码(scene `sa_{subId}`),与主账号 `pa_{id}` 不冲突
- [ ] 扫子账号码:用户仍锁定主账号(佣金归主账号),并写入 `assoc_sub_account_id`
- [ ] 子账号用户管理/关联码页展示自己维度的已扫码/已关联/订单统计;主账号聚合 own+children 不变
- [ ] 主账号码扫码:`assoc_sub_account_id` 为空,行为与 v4.0.9 一致
- [ ] HQ 财务菜单「银行账户」:列出全部有效门店账户(含非默认)+ 有效酒厂/主合伙人/承运商账户;可新增不挂门店账户;类型/城市/关键字筛选;Excel 与 PDF 导出与筛选一致;备注可写;来源账户改后刷新即更新
- [ ] shared-types 构建通过;相关 lint/单测过