Files
Pet3/docs/04-页面与路由.md
2026-06-25 18:24:29 +08:00

90 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`