宠小它 — P0 研发落地清单
用途:发给研发拆任务与验收;仅含 P0(本期质量与主线闭环必需,不含 P1/P2 增强)。
依据:《产品全方位优化说明 v1》《本期主线》《宠主端预约体验优化》《产品设计文档》及当前仓库实现粗对齐。
更新:2026-04-19
关联: 产品全方位优化说明-v1 · 本期主线-下一步产品优化点 · 宠主端预约体验优化-产品说明
优先级说明
- P0:本迭代必须交付;阻塞对外口碑、数据脏读、合规提示缺失、或主线(传播/成片/留资)不可用。
- 已部分实现的项:仍保留,以下方「验收标准」为准做 gap 关闭。
A. 后端(Spring Boot)
| ID |
需求 |
验收标准 |
备注 |
| A1 |
预约状态机校验:PUT /appointment/status(及任意改状态入口)禁止非法迁移 |
仅允许:new→doing、new→cancel、doing→done(若报告提交会改 done 则接口侧与之一致)、doing→cancel(若产品允许,需与前端一致;若产品规定仅 new 可取消则 doing→cancel 返回 CANCEL_NOT_ALLOWED) |
当前 AppointmentService.updateStatus / startService 偏「直接赋值」,需按《产品设计文档》矩阵校验;非法迁移返回 4xx + 明确业务码(如 INVALID_STATUS) |
| A2 |
开始服务仅当 status=new |
startService 非 new 时拒绝,勿静默改库 |
与「谁点谁服务」一致 |
| A3 |
取消预约(若独立接口)校验:仅允许目标状态为 cancel 且前置状态符合产品规则 |
与 A1 同一套状态机;前端取消按钮仅 new 时展示则后端仍要防篡改 |
防恶意请求 |
| A4 |
(可选 P0,若本期上留资)留资去重:同一 report_token + 同一手机号 |
二次提交返回成功态或「已提交」语义,不重复插库 |
口径见《本期主线》C |
B. 小程序 — 门店端(老板/员工)
| ID |
需求 |
验收标准 |
备注 |
| B1 |
「已完成」Tab 列表默认不含已取消 |
Tab「已完成」下默认仅展示 status===done;cancel 通过 次级筛选(如「包含已取消」开关)或 单独子 Tab「已取消」 二选一实现 |
当前 Home.vue 约 currentStatus==='done' 时含 cancel,需改 |
| B2 |
发送报告成功页:同屏 报告链接 + 二维码 + 两条可复制话术 |
话术支持变量:{宠物名}{服务类型}{门店名}{链接};一键复制单条话术;二维码与链接不拆多页 |
对齐《本期主线》A「员工动作成本」 |
| B3 |
报告提交锁死提示 |
填写报告页底部或提交前弹窗固定文案:「提交后不可修改,请确认照片与备注无误」(与产品 v1 锁死策略一致) |
若已有则核对文案 |
| B4 |
「我的」老板端分组标题 |
至少两组:店铺与经营 / 团队与账号(或等价命名),高频在上;使用现有 .module-title |
降低入口迷失,见《产品全方位优化说明》§2.2 |
C. 小程序 — 宠主端(customer)
| ID |
需求 |
验收标准 |
备注 |
| C1 |
单一主预约路径 |
首屏仅保留 一个主级「预约服务」入口;不再同屏强并存「大按钮 + 空态大按钮 + FAB +」等效重复(保留 FAB 则须显著弱于主按钮或仅老用户) |
见《宠主端预约体验优化》§9;需对照当前 Home.vue 是否仍重复 |
| C2 |
扫码 / 分享落地 storeId |
CustAppointmentCreate 支持 onLoad 读 storeId(已有则做 全入口 回归:普通二维码、小程序码 scene、分享 path/query) |
预填门店且可「更换门店」 |
| C3 |
登录时机与草稿 |
业务规则二选一落地并写 README:(1) 未登录可填单,提交时再登录,返回后 草稿恢复;(2) 进入预约页即要求登录。推荐 (1) |
uni.storage 或状态恢复;避免白填 |
| C4 |
异常可理解 |
无可用时段、网络失败、未登录:均有 toast / 空态 / 重试,禁止静默失败 |
专文 §7 |
D. H5 报告页(report-view / 独立 H5)
| ID |
需求 |
验收标准 |
备注 |
| D1 |
隐私提示(短期策略) |
首屏或固定条:「本页含宠物服务影像,请勿公开转发或发群」(文案可微调,须合规友好) |
对齐《本期主线》A token 风险 |
| D2 |
短片三态与文案对齐小程序 |
processing / failed / success 与 ReportHighlightBlock 一致;失败展示 归类中文,不暴露堆栈;成功展示可变时长说明 |
H5 与小程序报告页行为一致 |
| D3 |
弱网 / 失败重试 |
报告主接口失败:按钮「重新加载」;超时阈值产品建议 8~10s 后出失败态 |
与《产品全方位优化说明》§3.3 |
E. 传播与埋点(P0 最小集)
| ID |
需求 |
验收标准 |
备注 |
| E1 |
分享卡片元信息规则 |
小程序 onShareAppMessage:标题 宠物名 + 服务 + 门店;封面优先级 成片封面 > 服务后首图 > Logo(与 reportShare.js 逻辑对齐) |
见 frontend/src/utils/reportShare.js |
| E2 |
埋点:报告打开 |
至少上报:report_token 或匿名 hash、首次/再次(可用本地 storage 记首次)、时间戳;落地页 H5 亦要能报(像素/接口二选一,研发定方案) |
不要求看板,要求 可统计《本期主线》 |
F. 视觉与规范(工程债)
| ID |
需求 |
验收标准 |
备注 |
| F1 |
禁止业务页硬编码主色 |
主色/品牌浅底统一 var(--c-brand)、var(--c-brand-light) 等;全局 grep #16a34a、#2db96d(除 global.css / 极少量渐变定义)业务 vue 内为 0 |
《前端 UI 规范》已对齐 --c-* |
| F2 |
空态禁用 emoji 作主视觉(若违反现有 UI 禁止项) |
宠主空态等用 AppIcon 或插图占位,不用 📋 等作为主视觉 |
见 Home.vue 空态 slot |
G. 文案与对外承诺(配置级)
| ID |
需求 |
验收标准 |
备注 |
| G1 |
无容量模型不写「排队」 |
全局检索「排队」「不排队」;宠主副标题等改为不承诺排队能力的表述(如「在线选时段」) |
与《产品全方位优化说明》D2 一致 |
| G2 |
对内录单表述(可选) |
门店端新建预约入口文案是否改为「代客预约」由产品拍板;若改则全局统一 |
降低「预约」歧义 |
建议排期顺序(供研发参考)
- A1~A3(后端状态机)— 防脏数据,优先合。
- B1(已完成 Tab)— 前端小改、用户感知强。
- B2、D1、D2、E1(传播与报告体验)— 主线门面。
- C1~C4(宠主)— 与登录/路由并行可排。
- E2、F1、F2、G1 — 可并行或插空。
不在 P0(勿与本清单混排)
- 会员卡 / 储值 / 次卡
- 报告 token 作废重发(中期,见 D3 决策)
- 多技师分成、排班深度联动
- 复杂数据看板、漏斗大屏
- 分包优化(可 P1)
评审后可将本页 ID 勾进看板;与专文冲突以迭代评审为准。