This commit is contained in:
2026-06-25 18:24:29 +08:00
commit a1190d7d9a
90 changed files with 5459 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
# 04 · 页面与路由
## 1. 页面清单(对应原型 12 屏)
| 原型 Frame | 页面/组件 | 路径 | 类型 | 说明 |
|-----------|----------|------|------|------|
| 0a 登录 | login | `pages/login/login` | 普通页 | 微信授权登录 |
| 0b 建档/编辑 | dog-edit | `pages/dog-edit/dog-edit` | 普通页 | 建档与编辑复用,`?id=` 区分 |
| 0c 多狗选择 | multi-dog-sheet | `components/multi-dog-sheet` | 组件(弹层) | 点遛狗时多狗才弹 |
| 1 我的 | home | `pages/home/home` | **Tab** | 启动默认页 |
| 2/2b 遛狗中 | walking | `pages/walking/walking` | 普通页 | 进行/暂停同页切状态 |
| 3 成果卡 | summary | `pages/summary/summary` | 普通页 | 遛完总结 |
| 4 狗狗主页 | dog-detail | `pages/dog-detail/dog-detail` | 普通页 | `?id=` |
| 5 遛狗历史 | history | `pages/history/history` | 普通页 | 含补记弹层 |
| 6/6b 记录 | records | `pages/records/records` | **Tab** | 含空状态 |
| 7 完整成就 | achievements | `pages/achievements/achievements` | 普通页 | `?dogId=`,两入口共用 |
## 2. tabBar 配置app.json
底部三 Tab中央「遛狗」为凸起按钮。微信原生 tabBar 不支持凸起 FAB因此采用 **自定义 tabBar**`custom: true` + `components/custom-tab-bar/`)实现原型的橙色凸起按钮和状态变色。
```jsonc
{
"tabBar": {
"custom": true, // 自定义,实现中央凸起 FAB
"list": [
{ "pagePath": "pages/records/records", "text": "记录" },
{ "pagePath": "pages/home/home", "text": "我的" }
// 中央“遛狗”由自定义 tabBar 渲染,非真实 tab 页
]
}
}
```
中央「遛狗」按钮行为:
- 点击 → 单狗直接进 `walking`;多狗弹 `multi-dog-sheet` 选择后再进。
- 遛狗中时按钮变绿显示「遛狗中」,点击回到 `walking`;暂停态变黄「已暂停」。
## 3. 路由跳转表
```
login ──(新用户)──► dog-edit ──完成──► home(tab)
login ──(老用户)──────────────────► home(tab)
home ──点狗卡片──► dog-detail
home ──点「成就」──► achievements
home ──中央按钮──┬─(单狗)─► walking
└─(多狗)─► multi-dog-sheet ─选定─► walking
walking ⇄ (暂停态同页切换)
walking ──结束+二次确认──► summary ──完成──► dog-detail / home
walking ──定位/数据降级──► (未授权时隐藏距离·狗步;授权时累计 GPS 距离并换算狗步)
dog-detail ──右上编辑──► dog-edit?id=xxx预填
dog-detail ──近期记录──► summary只读回看占位后续替换为 record-detail
records(tab) ──成就概览/全部──► achievements
records(tab) ──+补记──► manual-add-sheet
records(tab) ──历史项──► summary只读回看占位后续替换为 record-detail
history ──右上+──► manual-add-sheet ──保存──► 刷新历史
```
## 4. 公共组件拆分
| 组件 | 用于页面 | 职责 |
|------|---------|------|
| `custom-tab-bar` | 全局 | 三 Tab + 中央状态化 FAB |
| `dog-card` | home | 狗狗卡片(连续天数、犬种) |
| `stat-grid` | summary, dog-detail | 三宫格统计 |
| `walk-row` | history, records, dog-detail | 一条遛狗记录(含补记标识) |
| `achievement-medal` | dog-detail, records, achievements | 勋章(解锁/锁定/进度) |
| `multi-dog-sheet` | tabBar 触发 | 多狗选择弹层 |
| `manual-add-sheet` | history, records | 补记表单弹层 |
| `chip-group` | dog-edit, summary | 单选标签组(性别/年龄/天气/状态) |
## 5. 关键交互细节(迁移自原型注释)
- **遛狗中计时**:基于 `startAt` 实时差值计算,扣除累计暂停时长;切后台不丢(见架构文档 §4
- **定位增强**:不在首次打开强制索权;开始遛狗后可请求定位。授权时累计 GPS 距离并按狗狗 `stride` 换算狗步,未授权时隐藏距离/狗步,只保留时长。
- **便便打卡**:行内 toggle遛狗中即时写入会话状态结束时随 walk 落库。
- **暂停态**:停止计时、数据置灰,主按钮变「继续」——防止等狗/捡便便污染数据。
- **结束**:必须二次确认弹窗,再进成果卡。
- **成果卡视角**:文案「豆豆今天走了 3,480 狗步」,非「你遛了」。
- **空状态6b**新用户「记录」Tab 显俏皮引导 +「带豆豆出门」按钮,成就墙全灰待解锁;遛完第一次切正常态。
- **分享**:成果卡「生成图片分享朋友圈」用 Canvas 2D 绘制成果图,是拉新主入口。
- **历史回看**V1 可复用 `summary` 做只读态,但不得显示「完成」这类结束流程按钮;正式形态后续补 `record-detail`