每个板块一段:前半段是后台操作,后半段是手机视口(390×844)的小程序端。含主流程与关键分支。
后台配置拼团活动并上架;小程序开团、参团、支付、团长免单、成团名次;后台整团发货;含满员/解散等分支。
P0 拼团主链路 · 证明视频
券模板与「券中心公开领取」规则;小程序领取、重复领取限领、结算用券、券包已使用;后台发券记录。
P1 券与营销 — 录屏说明
后台公告;小程序弹窗、已读不再弹、重新通知再次弹;系列榜单与我的名次;站内消息;福利到账弹窗。
P2 榜单与触达 · 证明视频
前置(不录屏,脚本自动完成)
1. 后台 API 登录,`GET /api/admin/notices` 后把现有 `active` 公告全部 `POST /:id/status {status:'paused'}`;本轮开始时已无 active 公告需新暂停(`演示·福利公告` 在前一次尝试中已置 paused);预清理后 `active` 公告数为 0。
2. 清理上一轮 P2 演示公告/人工券;把专用用户遗留的 `welfare/pending` 全部 `POST /welfare/seen` 标记已读。
3. 幂等夹具:临时把专用用户加入「萌宠乐园」已有成功团(rankNo=2)让榜单出现「我的名次」;临时写一条 `groupSucceeded` 消息供消息中心展示。录制结束后两条夹具均已删除(复查 `groupMember=0`、夹具消息=0)。
4. 校验:预清理后 `GET /notices/pending -> null`、`GET /welfare/pending -> []`,新公告是唯一弹窗。
分步流程(片内时间轴)
| 时间 | 步骤 | 可见结果 / 断言 |
|---|---|---|
| 0:00–0:20 | 后台「普通公告」→ 新建公告 | 标题 `P2演示-福利公告-1921`、正文、按钮 `知道了`、跳转 `不跳转`、人群 `所有用户`、频率 `每次打开一次`、优先级 60、`立即启用` 打开;保存后列表显示「生效中」,API 回查字段一致 |
| 0:20–0:30 | 小程序首页 | 弹出同一标题公告 + 正文 + `知道了`;点击 `知道了` 关闭,服务端已读(`/notices/pending -> null`) |
| 0:30–0:40 | 小程序重载首页(分支) | 公告**不再出现**;服务端已读跨设备生效,不是仅前端隐藏 |
| 0:40–0:52 | 系列榜单 → 萌宠乐园 | 列表显示「萌宠乐园 / 已产生 N 个名次 / 榜首:王小明」;进入详情显示前 100 名与「我的名次 第 2 名」「已上榜」 |
| 0:52–1:02 | 消息中心 | 显示「消息中心 / 1 条未读」与真实消息「拼团成功」+「名次第 2 名」正文 |
| 1:02–1:09 | 后台「重新通知」 | 表格行操作 → 确认,toast「已重新通知(第 1 次),已读状态按频率重算」;API 回查 `renotifyVersion=1` |
| 1:09–1:18 | 小程序重载首页(分支) | 同一条公告**再次弹出**(版本失效重算),截图后点 `知道了` 关闭 |
| 1:18–1:31 | 后台「发券记录」→ 人工发券 | 选择规则 `演示·满100减20`,输入用户 ID → 查找并核对显示「P2录制用户」→ 确定;toast「发券成功」,记录列表出现该用户与券模板 |
| 1:31–1:42 | 小程序重载首页(分支) | 福利到账弹窗「福利已到账」显示 `演示·满100减20`、`满 ¥100.00 减 ¥20.00`、`包邮`、有效期;点 `稍后看` 关闭,服务端福利待办清空 |
分支证据
截图清单
`01-admin-notice-form.png`、`02-admin-notice-created.png`、`03-mini-notice-popup.png`、`04-mini-no-repopup.png`、`05-mini-ranking-list.png`、`06-mini-ranking-detail.png`、`07-mini-messages.png`、`08-admin-renotify.png`、`09-mini-notice-renotified.png`、`10-admin-manual-grant.png`、`11-admin-grant-record.png`、`12-mini-welfare.png`、`13-mini-welfare-closed.png`
收尾与遗留
复现
```bash
cd /home/yams/proof-artifacts/v3/p2
PLAYWRIGHT_BROWSERS_PATH=/home/yams/.local/share/playwright-browsers node record.mjs
```
售后受理、审核退款、完成;驳回分支;风控记录与人工解除;小程序售后列表/详情状态。
P3 售后与风控 · 证明视频
夹具(录前由脚本创建,`P3REC-` 前缀,全部唯一)
| 用途 | 订单 | 商品行 | 实付 | 售后单 | 状态 |
|---|---|---|---|---|---|
| 审核通过 → 退款 → 完成 | `P3REC-20261031112735-A`(shipped,1 天前发货,收货人 林小满 / 深圳南山) | 亚麻托特包 ¥198 + 陶瓷马克杯 ¥89 | ¥287.00 | `AS20261031495408` | refundOnly / quality / 凭证 `/static/images/bag.jpg` |
| 驳回(不退款) | `P3REC-20261031112735-B`(shipped) | 香薰蜡烛 ¥128 | ¥128.00 | `AS20261031863428` | refundOnly / quality / 同一凭证 |
分步流程(片内时间轴)
| 时间 | 步骤 | 可见结果 / 断言 |
|---|---|---|
| 0:00–0:15 | 后台登录 → 售后管理队列 | 按 `P3REC` 关键字过滤出 2 条待受理单;用户 `P3REC 演示用户`、类型 `仅退款` |
| 0:15–0:30 | 打开第一张 → **受理** → 打开「审核通过」 | 详情显示 `待受理`、`仅退款`、现金退款上限 `¥287.00`、商品行快照;受理后状态 `审核中`;审核弹窗显示处理方式 `仅退款`、退款金额 `¥287.00`、原因必填 |
| 0:30–0:45 | 填原因 → **确认通过** → **完成** | 状态 `处理中`、退款 `已退款` ¥287.00;完成弹窗「处理方式:仅退款,退款 ¥287.00」→ 状态 `已完成`,订单退款维度 `已退款`、已退 ¥287.00 |
| 0:45–1:08 | 回队列 → 打开第二张 → **驳回** → 填原因 → 确认驳回 | 队列里第一张显示 `已完成`;第二张 `待受理` → 驳回后状态 `已驳回`,原因「凭证无法证明是商品质量问题,且已超出售后期协商范围」回显,退款 `未退款`(分支:驳回不退款) |
| 1:08–1:16 | 风控管理:列表/汇总 → 筛选 | 汇总 `限制中 1 / 已解除 0`;行显示命中原因、`3 / 3 件(30 天)`、限制 `新开团、新参团`、状态 `限制中` |
| 1:16–1:35 | **解除风险** → 确认解除 | 填「人工复核:质量问题已协商解决,误伤,恢复新开团/新参团」;解除后状态 `已解除`、汇总 `限制中 0 / 已解除 1`,解除人/时间/原因回显 |
| 1:35–2:16 | 小程序:我的 → 我的售后 → 已完成详情 → 已驳回详情 | 「我的」页显示 `P3REC 演示用户` 与 `我的售后` 入口;列表两张单 `已完成 / ¥287.00`、`已驳回`;已完成详情 `已完成` + `退款金额 ¥287.00` + `已退款` + `退款单号` + 问题凭证;已驳回详情 `已驳回` + `驳回原因:凭证无法证明是商品质量问题…` + `未退款` + `¥0.00` |
分支证据
截图清单
`01-after-sale-queue.png`、`02-after-sale-submitted.png`、`03-accepted.png`、`04-approve-modal.png`、`05-processing-refunded.png`、`06-complete-modal.png`、`07-completed.png`、`08-queue-after-complete.png`、`09-second-submitted.png`、`10-reject-modal.png`、`11-rejected.png`、`12-risk-list.png`、`13-risk-release-modal.png`、`14-risk-released.png`、`20-mini-mine.png`、`21-mini-after-sale-list.png`、`22-mini-completed.png`、`23-mini-rejected.png`
复现
```bash
1) 夹具(根 .env 提供 DATABASE_URL;脚本从 packages/db 解析 @shelf/db)
cd /home/yams/shelf-miniapp-integration/packages/db
set -a; source ../../.env; set +a
pnpm exec tsx /home/yams/proof-artifacts/v3/p3/fixture.mjs
2) 录制 + 断言 + 拼接
cd /home/yams/proof-artifacts/v3/p3
PLAYWRIGHT_BROWSERS_PATH=/home/yams/.local/share/playwright-browsers node record.mjs
```
已知问题(本轮发现,未改仓库)
今日日更快照与指标;重算;商品标准成本录入后不再「待补」;异常清单与恢复。
P4 · 数据概览 / 成本录入 / 异常清单(后台)
流程与实测结果(2026-10-31)
| 步骤 | 实测 |
|---|---|
| 数据概览默认昨天 | 统计日期 `2026-10-30`,付费成交订单 0、实收 ¥0.00(全零) |
| 改范围为今天 → 查询 | `2026-10-31`:新增付费用户 5、付费成交订单 199、实收-商品款 ¥2,944.85、开团数 8、券到账 5 |
| 成本录入前 | 区间汇总「商品标准成本 = 待补」(详情表同) |
| 点「重算」 | 最后更新 `2026-10-31 18:20 → 19:20`,Toast「已重算 1 天」 |
| 商品标准成本 | `演示·拼团毛绒`(DEMO-GROUP-PLUSH)录 **200.00 元** → 状态「已设置」 |
| 额外消耗(免单/补发) | `免单/赠出` **10 元** + 备注,落表 ¥10.00 |
| 回概览再「重算」 | 商品标准成本 **待补 → ¥2,201.00**(成本已回填,不再按 0/缺失) |
| 异常清单 | 实时扫描显示 **待处理 29 条 / 筛选结果 32 条**,均为 `paidStateNotUpdated` |
| 异常处理(分支) | 首行订单 `S1793393904422780659`(paid 但 status=cancelled)填说明点「确认恢复」→ 被拒:**「异常事实仍存在,请先完成原业务处理后再确认恢复」** |
| 修复后恢复 | Prisma 将订单 status `cancelled → paid`,同一弹窗再次确认 → Toast「已确认恢复(后端已重查事实,写审计)」,行变 **已恢复**,处理记录可见备注 |
| 导出 CSV | 点「导出 CSV」→ Toast「已导出(写入导出审计)」 |
演示前夹具 / 数据说明(透明记录)
备注