8.7 KiB
06 · 开发计划
按「先跑通核心闭环,再做沉淀与增长」的顺序。每阶段可独立验收。
✅ 进度总览(截至 2026-06-25)
V1 开发主体(阶段 0 → 4)全部完成并部署。
环境:cloud1-d0gmb6bjde8af3266 · AppId wx6cfaffb865048e83 · 部署方式 CloudBase CLI(tcb,配置见根目录 cloudbaserc.json)。
已部署云函数(7):login、dogManage、walkSave、walkManual、getDogDetail、getHistory、sendReminder(+ 每日 19:00 定时触发器 dailyReminder)。
数据库集合(4,已建):users、dogs、walks、dog_achievements。
页面(9,全部真实功能):login / dog-edit / home / walking / summary / dog-detail / history / records / achievements;组件:custom-tab-bar、manual-add-sheet。
| 阶段 | 状态 |
|---|---|
| 0 工程搭建 | ✅ 完成 |
| 1 账号与建档闭环 | ✅ 完成 |
| 2 遛狗核心闭环 | ✅ 完成 |
| 2.5 定位与狗步 | ✅ 完成 |
| 3 沉淀与激励 | ✅ 完成 |
| 4 增长 | ✅ 完成(订阅消息待填模板 ID) |
| 5 Pending | ⏸ 未启动(不在 V1) |
🐛 逻辑漏洞修正(2026-06-25 代码审查)
对照 05-业务规则 审查现网代码,发现并修正以下逻辑漏洞:
1. 补记无法维持连续打卡(违反 R8 / R10)⭐
- 问题:
walkSave/walkManual的连续天数只依据lastWalkDate + currentStreak做增量推算。当用户「先实时遛了今天 → 再补记昨天」时,补记日期早于lastWalkDate,算法走diff<=0分支原样返回,连续天数不会向前补全,直接违背 R8「补记可维持连续打卡不断签」。 - 修正:新增
computeStreak(openid, dogId),落库后从该狗全部walkDate历史重算连续天数(Set去重同日多次、以最新日期为锚向前数连续日、遇断签停止)。补记以任意顺序插入都能正确续签/断签。walkSave与walkManual均改用此函数,lastWalkDate也取自重算结果。
2. 「早起鸟」成就永不可解锁(违反 R11)
- 问题:
utils/achievements.js定义了 6 个成就且getDogDetail也按 6 统计,但「早起鸟」(早遛 10 次) 在任何云函数中都没有解锁逻辑、也无计数字段,导致用户永远停在 5/6,成就墙存在一个不可达成项。 - 修正:
walkSave(仅实时遛狗,场景类不计补记)按开始时间本地小时<7累加stats.earlyWalks,达 10 次解锁;STAT_ACHIEVEMENTS增加early_bird判定。前端achievements.js进度与「还差 X 次」文案改为基于earlyWalks真实计算。
3. 成果卡选填字段「先分享后补填」会丢失(违反 R7)
- 问题:
summary.js的ensureAttached在字段为空时即把_attached置true。若用户先点「分享」(此时未填)再补填天气/备注/照片后点「完成」,回写被提前锁定跳过,选填字段与「雨天战士」成就一并丢失。 - 修正:空内容时仅
return不置位,只有真正成功回写后才锁定_attached,保证后续补填仍能写入。
数据兼容:旧狗档无
earlyWalks字段,云函数与前端均以|| 0兜底;连续天数在下一次遛狗/补记时按历史自动重算修正,无需迁移。
待你手动处理:
- 订阅消息模板 ID — 公众平台创建后填入
utils/config.js与sendReminder/index.js,重新部署。 - (可选)数据库索引与权限收紧 — 见 02-数据模型 §5/§6;当前客户端不直读库,默认管理端权限不影响功能。
- (可选)存量旧狗数据迁移 — 阶段1建的狗无
sizeLevel/stride,进编辑页重存即可补齐(walkSave 已兜底 0.35m 不报错)。
阶段 0 · 工程搭建(地基)
目标:能在微信开发者工具里跑起空壳,云开发环境就绪。
- 创建小程序 + 开通云开发,建环境(实际 env
cloud1-d0gmb6bjde8af3266)。 - 初始化目录结构(见 01-架构设计)。
app.js初始化wx.cloud,app.wxss落地设计 token。- 纯手写基础 UI,不引第三方库(全局
.btn/.card等 + 组件custom-tab-bar/manual-add-sheet;dog-card/stat-grid等暂内联在页面,未抽独立组件)。 - 建 4 个数据库集合(CLI 建好)。 ⚠️ 索引未建、权限为默认管理端(客户端不直读,暂不影响)—— 见 02-数据模型 §5/§6。
utils/cloud.js封装 callFunction(统一错误/loading)。
验收:✅ 工程可在开发者工具导入运行;云函数经 tcb fn deploy 部署可调通。
阶段 1 · 账号与建档闭环
对应屏:0a 登录 → 0b 建档 → 1 我的
login云函数 + 登录页(R1 分流)。dogManage云函数(create/update/list,R2)。- 建档/编辑页(复用表单,犬种 picker,chip 单选)。
- 首页:用户卡 + 狗狗卡 + 功能入口列表。
- 自定义 tabBar(中央状态化 FAB:idle/walking/paused 三态变色)。
验收:✅ 新用户登录→建档→进首页看到自己的狗;编辑能预填回写。
阶段 2 · 遛狗核心闭环(V1 重点)⭐
对应屏:2/2b 遛狗中 → 3 成果卡 → 4 狗狗主页
- 遛狗会话状态机(walking/paused,时间戳计时,后台恢复,R5)。
- 多狗选择弹层(R4)。
- 便便打卡、暂停/继续、结束二次确认(R5)。
- 定位增强 + 降级处理(R6):授权时累计 GPS 距离并换算狗步;未授权时距离/狗步存 null 且界面隐藏。
- 狗步模型按 R3 落地:体型档位→步幅→体重±15%校准(
utils/dogStep.js+dogManage);未知犬种建档强制选体型档位。 walkSave改action:'finish'、收distanceMeters、按每只狗 stride 算狗步;walk 增source字段。
- 狗步模型按 R3 落地:体型档位→步幅→体重±15%校准(
walkSave云函数:落库 + stats 更新 + 连续天数(R10)+ 成就判定(R11);含finish/attach动作回写选填字段 + 雨天战士。- 成果卡页(全选填 R7,新成就提示,三宫格统计)。
getDogDetail+ 狗狗主页(累计 R9、成就墙、近期记录)。
验收:完整走通「点遛狗→计时/距离/狗步(定位授权时)→结束→成果卡→记录沉淀进狗狗主页」;未授权定位时只保留时长,连续天数与统计正确累加。
阶段 3 · 沉淀与激励
对应屏:5 历史 → 6/6b 记录 → 7 成就
- 遛狗历史页(按周分组,补记标识)。
walkManual补记云函数 + 补记弹层组件(R8)。- 新增
getHistory云函数(跨全部狗狗的历史列表,附狗名)。 - 记录 Tab(成就概览 + 历史;空状态 6b 引导)。
- 完整成就页(已解锁/未解锁含进度,两入口共用)。
- 成就定义表
utils/achievements.js全量落地。
验收:补记不计排行但维持连续;成就解锁与进度展示正确;新用户空状态引导生效。
阶段 4 · 增长
- 成果卡 Canvas 生成分享图(
canvas type=2d→showShareImageMenu)+onShareAppMessage/onShareTimeline转发。 - 头像/照片云存储上传与压缩(
utils/media.js:chooseMedia 压缩 → cloud.uploadFile);头像在首页/狗狗主页/成果卡显示。 - 连续打卡订阅消息:
sendReminder云函数 + 每日 19:00 定时触发器;成果卡「完成」时requestSubscribeMessage。- ⚠️ 需手动:公众平台创建订阅消息模板 → 把模板 ID 填入
miniprogram/utils/config.js与cloudfunctions/sendReminder/index.js,并按模板字段改data。未配置时该功能静默跳过。
- ⚠️ 需手动:公众平台创建订阅消息模板 → 把模板 ID 填入
验收:成果卡能生成带数据的分享图并分享;头像/照片可上传并展示;模板配置后定时提醒可发。
阶段 5 · 后置 / Pending(不在 V1)
- 地图轨迹回放、GPS 去噪与更精细的轨迹纠偏。
- 广场、附近、排行榜、信息站。
- 排行榜需新增定时聚合云函数,按
countsForRanking=true统计。
里程碑建议
| 里程碑 | 含阶段 | 可交付 | 状态 |
|---|---|---|---|
| M1 可建档 | 0 + 1 | 登录建档跑通 | ✅ 达成 |
| M2 可遛狗 ⭐ | 2 + 2.5 | 核心闭环可用(含 GPS/狗步),可内测 | ✅ 达成 |
| M3 可沉淀 | 3 | 完整 V1 体验 | ✅ 达成 |
| M4 可传播 | 4 | 上线 + 拉新 | ✅ 达成(订阅消息待填模板 ID) |
下一步建议:真机全流程联调 → 处理上方「待你手动」三项 → 提审上线。阶段 5(排行榜/广场等)需先做产品设计再排期。