Files
wx_service/docs/smoke/UI.md
T
nepiedg b67dc32369 Enhance smoking tracking API and documentation
- Updated the main.go file to set the local time zone to Asia/Shanghai.
- Changed API endpoints from `PUT` to `POST` for user profile and logs management in multiple documentation files to reflect the correct usage.
- Added new fields in the API response for home summary, including `last_smoke_at`, `today_count`, `resisted_count`, and `reduced_from_yesterday`.
- Enhanced documentation across various files to accurately describe the updated API endpoints and their expected behaviors.
2026-01-25 07:55:32 +00:00

201 lines
6.6 KiB
Markdown
Raw 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.
# 戒烟/抽烟记录小程序:UI/UX 设计说明
本文档面向前端实现,包含信息架构、页面结构、组件与交互细节,以及与后端 API 的映射。
## 1. 信息架构(IA
推荐 4 个 Tab
1) 首页
2) 记录
3) 看板
4) 我的
页面路由(建议):
- 首页:NextTimeCard + QuickActions + TodaySummary + RecentList
- 记录:新增抽烟、忍住、历史列表入口
- 看板:周视图/区间视图
- 我的:基础信息、AI/解锁入口、帮助与隐私
## 2. 视觉与组件规范(简版)
### 2.1 视觉风格
- 主色:清爽、偏健康(绿色/蓝绿)+ 强对比强调色(橙/红用于“抽烟”风险提示,但避免羞辱语气)。
- 卡片化布局:关键指标卡片(下次时间/今日累计/间隔)。
### 2.2 通用组件
- `AppHeader`:标题 + 日期切换(today/tomorrow
- `MetricCard`:标题/主数值/辅助说明/状态标识(AI/默认)
- `PrimaryButton` / `SecondaryButton`
- `Tag`:抽烟/忍住/动机标签
- `Timeline`:时间节点列表(AI time_nodes
- `EmptyState` / `ErrorState` / `Skeleton`
- `ModalPaywall`:广告解锁提示(403
### 2.3 文案口径
- 避免指责:使用“建议/可以尝试/你已经在进步”。
- 忍住记录:用“忍住了”/“成功延后”作为正反馈。
## 3. 页面详设
## 3.1 首页(核心)
### 目标
- 让用户一眼看到:下一次建议时间、今天累计、距离上次实际抽烟的间隔、快速记录入口。
### 布局(从上到下)
1) 顶部:日期选择(默认 today,可切 tomorrow
2) `NextTimeCard`
3) `QuickActions`(两按钮:抽烟/忍住)
4) `TodaySummary`(今日累计、minutes_since_last
5) `AITipsCard`(可选:每日 AI 建议入口)
6) `RecentList`(最近记录 10~20 条)
### NextTimeCard(关键)
数据来源:
- `GET /api/v1/smoke/next_smoke_time?date=today|tomorrow&mode=auto`
展示字段:
- `source`
- `ai`:展示 `not_before_at``suggested_at``time_nodes`Timeline),并展示一句 `advice`
- `default`:展示 `default.next_smoke_at`(同时映射为 `not_before_at/suggested_at`
交互:
- “生成AI计划”按钮:调用同接口但 `mode=ai`
- 403:弹 `ModalPaywall`,引导先看广告解锁
- 503:提示 AI 暂不可用,仍保留默认卡片
解锁流程(按天):
1) 前端看广告完成
2) `POST /api/v1/smoke/ai/advice_unlocks {date: 计划日期}`
3) 再调 `GET /api/v1/smoke/next_smoke_time?date=...&mode=ai`
### QuickActions(抽烟/忍住)
- 抽烟:进入“新增抽烟”轻表单(默认 `num=1, level=2`
- 忍住:一键记录(可选弹小输入框写 remark),调用 `POST /api/v1/smoke/logs/resisted`
### TodaySummary
数据来源:
- `GET /api/v1/smoke/dashboard`(默认本周)+ 也可在首页只展示 `today_count``minutes_since_last`
展示:
- 今日支数(sum num
- 距上次实际抽烟分钟(后端已忽略忍住记录)
### RecentList
数据来源:
- `GET /api/v1/smoke/logs/latest?limit=20`
展示规则:
- `num==0 && level==0`:标记为“忍住了”,颜色更积极(如绿色),不展示“支数”
- 其它:展示 `num` + `level` + `remark` + `smoke_at`(优先)/创建时间
交互:
- 点击进入详情(编辑/删除)
## 3.2 记录页(新增/补录)
### 页面目标
- 让记录成本极低(3 秒内完成一条)。
### 模块
1) 快速新增抽烟(表单)
2) 快速忍住(按钮 + 可选 remark)
3) 历史记录入口(跳列表)
### 新增抽烟表单
字段:
- `smoke_at`:默认当前时间,可手动改
- `num`Stepper1~10
- `level`:1~5(或 0~5,但 0 仅用于忍住)
- `remark`:常用标签(压力/无聊/社交/提神)+ 自定义输入
API
- `POST /api/v1/smoke/logs`
## 3.3 历史列表页
### 目标
- 可回溯、可筛选、可编辑。
UI
- 顶部筛选:日期范围(start/end)、分页加载
- 列表项:时间、类型(抽烟/忍住)、num/level、remark
API
- `GET /api/v1/smoke/logs?page=&page_size=&start=&end=`
空态:
- “还没有记录,先从右下角按钮开始”
## 3.4 记录详情页(编辑/删除)
展示:
- smoke_time、smoke_at、remark、level、num
编辑:
- `POST /api/v1/smoke/logs/:id`(支持清空 smoke_at/smoke_time 传空字符串)
删除:
- `DELETE /api/v1/smoke/logs/:id`
## 3.5 看板页
### 目标
- 展示趋势:周视图/区间视图,给用户反馈与成就感。
UI
- 顶部:日期范围选择(默认本周)
- 柱状图:weekly.count
- 指标:today_count、minutes_since_last
API
- `GET /api/v1/smoke/dashboard?start=&end=`
## 3.6 AI 建议页(每日)
入口:
- 首页卡片/我的页面
展示:
- Markdown 渲染(建议内容可能包含列表)
API
- `GET /api/v1/smoke/ai/advice?date=YYYY-MM-DD`(默认昨天)
解锁:
- 若 403,弹引导看广告 -> `POST /api/v1/smoke/ai/advice_unlocks {date}`
## 3.7 基础信息(Profile)页
目标:
- 获取默认策略与 AI 个性化所需信息;尽量简短可跳过但提示价值。
字段建议(分组)
1) 基础烟量:日均支数 `baseline_cigs_per_day`
2) 烟龄/价格:`smoking_years``pack_price_cent`
3) 抽烟动机(多选):压力/无聊/社交/提神 + 自定义
4) 戒烟动力(多选):健康/家人/省钱 + 自定义
5) 作息:起床/入睡(HH:MM
API
- `GET /api/v1/smoke/profile`
- `POST /api/v1/smoke/profile`
## 4. 关键交互与状态
### 4.1 AI 生成(按天一次)
推荐状态机:
- `idle` -> `generating` -> `success`/`locked(403)`/`failed(5xx)`
403(未解锁):
- 弹窗:说明“观看一次广告解锁当天生成”
- 按钮:`去观看`(前端完成广告后调用 unlock 接口)
### 4.2 日期选择(today/tomorrow
- 首页切 tomorrow 时:
- `GET /api/v1/smoke/next_smoke_time?date=tomorrow&mode=auto`
- 仅在用户主动点“生成AI计划”时才 `mode=ai`(且 unlock date=tomorrow
### 4.3 忍住记录的视觉反馈
- 提交成功 toast`已记录:忍住了`
- 列表项显示“忍住”Tag,并用绿色/正向文案。
## 5. API 映射速查表
- 登录:`POST /api/v1/auth/login`(返回 session_key
- Profile`GET/POST /api/v1/smoke/profile`
- 新增抽烟:`POST /api/v1/smoke/logs`
- 忍住:`POST /api/v1/smoke/logs/resisted`
- 列表:`GET /api/v1/smoke/logs``GET /api/v1/smoke/logs/latest`
- 看板:`GET /api/v1/smoke/dashboard`
- 下次时间:`GET /api/v1/smoke/next_smoke_time?date=&mode=`
- 每日 AI 建议:`GET /api/v1/smoke/ai/advice?date=`
- 广告解锁:`POST /api/v1/smoke/ai/advice_unlocks {date}`