3.9 KiB
3.9 KiB
Change: 商户池详情与商户凭证契约
Why
docs/产品迭代8月份/支付商户优化.md 记录了支付商户与商户池管理页的三个问题,加上运营补充的凭证契约与权限要求,本次处理三件事:
- 商户池详情与支付商户详情的入口不一致:支付商户是点击名称进入独立详情页,商户池却是行操作里的详情抽屉,且详情没有展示接口已返回的全部字段(例如
time_period_started_at),成员只给出数量。 - 点击“新增商户池”时页面抛出
Maximum recursive updates exceeded in component <PaymentMerchantPoolManagement>,新增和编辑商户池流程完全不可用。 - 商户凭证的字段契约此前只存在于接口文档:必填键由
payment_method与provider_type组合决定,前端提交前没有字段枚举与类型校验,容易出现漏填必填键、ali_production/ali_pay_expire_minutes以字符串提交、merchant_identity与凭证字段不一致等会被后端拒绝的请求。
“更换凭证”表单的交互(手工逐行填写字段名与字段值、值不回显)按反馈保持原有行为,本次只在其上叠加字段契约校验。
What Changes
- 新增商户池详情页,并改为点击列表中商户池名称进入,与支付商户详情保持一致;移除列表行操作中的“详情”入口。
- 商户池详情页展示详情接口返回的业务字段:商户池名称、支付方式、启停状态、成员数量、成员商户、轮询策略、统计周期、金额/笔数/时间阈值、时间起点、路由世代、备注,以及接口返回时的创建时间和更新时间。
- 成员商户按支付商户名称展示,不展示
member_ids原始 ID;名称无法解析时展示“未知商户”占位文案。 - 合并商户池表单中
form.member_ids与orderedMemberIds的双向watch为单一数据源,消除递归更新错误,同时保持拖拽排序结果按顺序提交。 - 将商户凭证字段枚举(各
payment_method+provider_type组合的必填键与可选键)固化到前端类型模块,并在提交前校验字段枚举、必填键、值类型(布尔/整数/字符串)与merchant_identity一致性。 - 凭证写入表单展示当前服务商组合的必填/可选字段提示,降低漏填必填键的概率。
- 明确凭证访问控制:仅超级管理员(
user_type=1)与平台用户(user_type=2)可读写商户凭证,凭证内容不进入日志、审计与支付快照。
Impact
- Affected specs:
payment-merchant-pool-management - Affected code:
src/views/settings/payment-merchant-pools/pool-detail.vue(新增)src/views/settings/payment-merchant-pools/components/PoolManagement.vuesrc/views/settings/payment-merchant-pools/components/MerchantManagement.vuesrc/types/api/paymentMerchantPools.tssrc/router/routes/asyncRoutes.tssrc/router/routesAlias.tssrc/locales/langs/zh.json、src/locales/langs/en.json
- Dependencies:
- 后端
GET /api/admin/payment-merchant-pools/{id}返回member_ids、routing_epoch、time_period_started_at等字段。 - 后端按
payment_method与provider_type组合校验凭证必填键与值类型。 - 成员商户名称由前端使用同
payment_method的支付商户列表解析,不要求后端在商户池详情返回名称。
- 后端
- Compatibility:
- 不改变“更换凭证”表单的交互方式与凭证值不回显约束。
- 不影响支付商户列表与支付商户详情页的信息结构。
- 不改变商户池创建、更新、启用、停用的请求结构。
Non-Goals
- 不按服务商渲染带中文标签的固定凭证表单,仍保留“字段名 + 字段值”的通用编辑方式。
- 不新增商户池详情、凭证校验之外的后端接口。
- 不在商户池详情页展示
id、member_ids等内部标识。 - 不改动商户池轮询策略、成员排序规则和阈值换算规则。