收件人:阿仁(后端)、小齐(C端 v2)、小冈(C端 v1+BFF)
背景:WIP-303~308 分销域。用户令「推完整分销系统」。本轮把 B端 MyDistribution 补接落地;后端 / A端 经核均已齐备;C端 v2 接线已通,仅 v1 legacy 残留幽灵端点。
波波不擅改 C端代码,故 C端只给核对结论 + 修复清单,改动由小齐/小冈执行。
main.py,cron 已启动。check_api_url_wiring 无幽灵端点。唯一仍卡的不是代码,是数据:prod 真实分销员/绑定/分佣单/提现几乎为零,三端列表都会空。先让 1~2 个真实商户在 B端绑定分销员、走一单归因,才有内容可联调验收。
| 文件 | 前缀 | 关键端点 |
|---|---|---|
backend/app/routers/miniapp_distribution.py | /api/miniapp/distribution | /profile /guests /commissions /share-code /commissions/{id}/settle-confirm /subscription(get/apply) /register /activate /withdrawals(get/post) /withdrawals/available /joint-payment/generate |
backend/app/routers/workbench_distributors.py | /api/miniapp/workbench/distributors | GET '' 列表 / POST ''{phone} 绑定 / POST '/{id}/status' 暂停恢复 |
backend/app/routers/promoters.py | (mounted) | 推广员域 |
backend/app/routers/admin_distribution.py | /api/admin/distribution | /overview /distributors(list/approve/freeze/unfreeze) /records(list/void/settle) /withdrawals(list/approve/reject/paid) /settings(get/put) /guest-bindings/{id}/release /risk /protection-pay /config(get/put) /bills/generate /subscription/{id}/confirm |
backend/app/main.py:43-45,151,153,154,177-178 | — | distribution_cron 启动 + 四 router 全 include_router |
五表(distributors / distribution_bindings / distribution_orders / commission_ledger / withdrawal_requests)由阿仁 DDL 落地,后端各端点引用真实表,py_compile 通过。
| 改动 | 文件:行 | 说明 |
|---|---|---|
| 页组件 | b-workbench/src/pages/MyDistribution.tsx / .css | 新建,调 /workbench/distributors(商户前缀,对齐 mb_router) |
| 路由 | b-workbench/src/App.tsx:33,171 | import + <Route path="/my-distribution"> |
| 九宫格 | b-workbench/src/pages/Workbench.tsx:72 | 「🤝 我的分销」 |
| 门禁 | b-workbench/src/utils/business-pack.ts:93 | BASE_ROUTES 恒开(跨业态营销) |
| 网格 | Workbench.css | 已 5 列(接 key-tasks 时改过,本轮不动) |
契约核对:页读 res.data?.data?.items(Network 原样返回 {code:0,data:{items}}),后端 workbench_distributors list 返 {"code":0,"data":{"items":[...]}} ✅ 一致。暂停/恢复发 paused|active,后端白名单一致 ✅。
admin-console/src/pages/DistributionOps.tsx(6 tab:总览/分销员审核/分佣单/提现/争议/配置)admin-console/src/App.tsx:92 <Route path="distribution">admin-console/src/components/Layout.tsx:105 /distribution 在只读组(L2 经营数据只读,自动渲染只读条幅)env?.data 为数组(distributors/records/withdrawals 后端均返 data:[...])✅;overview/config 读 env.data 为对象 ✅miniprogram-v2/services/api/distribution.ts 调 4 端点,全部命中后端 miniapp_distribution:GET /api/miniapp/distribution/commissions(→ 后端 :249)GET /api/miniapp/distribution/profile(→ 后端 :117)POST /api/miniapp/distribution/register(→ 后端 :486)POST /api/miniapp/distribution/activate(→ 后端 :524)share-code/share-code.ts、pages-sub/my-guests/my-guests.ts、pages-sub/guest-archive/guest-archive.ts。check_api_url_wiring 对 miniprogram-v2 分销域 零幽灵端点。/api/miniapp/distribution,未误用 B端 /workbench/distributors 前缀(无前缀泄漏)。✅check_api_url_wiring 抓到 miniprogram/miniprogram/services/distribution.ts 调用后端不存在的路由:
| 幽灵端点 | 文件:行 | 后端现状 |
|---|---|---|
/api/miniapp/distribution/asset-counts | services/distribution.ts:315 | 无 |
/api/miniapp/distribution/primary-guide | services/distribution.ts:292 | 无 |
/api/miniapp/distribution/who-recorded-me | services/distribution.ts:237 | 无 |
/api/miniapp/distribution/who-recorded-me/{}/remove | services/distribution.ts:245 | 无 |
处置建议(二选一,由小齐/小冈定):
miniprogram/miniprogram/services/distribution.ts 中这 4 处调用(及其调用方),不再维护 v1 分销。miniapp_distribution.py 补这 4 端点(语义需对齐 v2:who-recorded-me≈/guests;asset-counts/primary-guide 需确认产品定义)。优先级:低。v2 是活跃目标,v1 仅存量兼容。若 v1 不停服,游客走 v1 分销相关页会 404,但不影响 v2 用户。
curl /api/miniapp/workbench/distributors 返 {code:0,data:{items}}(需商户登录态)/api/admin/distribution/overview 随 destination_id 过滤(A端切换器)git push main 自动 staging。