[阶段10.1] Tab 改为 今日/健康/趋势/运动/设置

按指定结构调整导航:每日归入趋势、睡眠归入健康、同步归入设置,
它们是各自 Tab 的详情视图而非独立目的地。新增「运动」Tab。

运动页(新):
- 近 30 天运动时长/距离/消耗,以及今日强度分钟
- 项目分布:按累计时长排序,横条表示占比。只用一个色相 —— 每个项目
  一种颜色会让人以为分类另有含义
- 强度分钟趋势图,附 WHO 每周 150 分钟的参考
- 记录 / 个人纪录 / 奖励三个分页,运动记录 174 条

fix(nav): 五个 Tab 全部加载了同一个页面
- browserHistory 开在每个 View 上,导致它们都去读浏览器地址栏(当时是
  "/")而不是各自的 url,五个 Tab 渲染出五份「今日」
- 浏览器历史只绑定主 View,其余 Tab 用自己的 url 独立加载

fix(nav): 导航栏右侧对所有页面塞同一组图标
- 睡眠/同步/设置三个图标出现在每个页面上,其中两个在多数页面无意义。
  改为按页面声明:趋势 → 每日,健康 → 睡眠,设置 → 同步

fix(viz): 图表标题在窄栏里竖排
- 标题与「看数据」按钮争抢宽度,短标题被压成竖排字符。
  标题允许收缩省略,按钮不收缩

fix: 未映射的运动类型直接暴露 snake_case
- 补充登山/划船/椭圆机等映射;仍未覆盖的转为空格分词并首字母大写,
  而不是把 Garmin 的原始 key 摆给用户看

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
ericwyuan
2026-08-23 23:52:18 +08:00
parent 7ab150537d
commit fd9b610810
13 changed files with 436 additions and 236 deletions

View File

@@ -114,7 +114,7 @@ function HealthPage() {
if (loading) {
return (
<Screen title="健康" subtitle="每项指标的最新值与参考区间">
<Screen title="健康" subtitle="每项指标的最新值与参考区间" right={<Link href="/sleep/" iconIos="f7:moon_stars" tooltip="睡眠" />}>
<h2></h2>
<Skeleton count={8} />
</Screen>
@@ -123,7 +123,7 @@ function HealthPage() {
if (error) {
return (
<Screen title="健康" subtitle="每项指标的最新值与参考区间">
<Screen title="健康" subtitle="每项指标的最新值与参考区间" right={<Link href="/sleep/" iconIos="f7:moon_stars" tooltip="睡眠" />}>
<h2></h2>
<div className="screen-error">{error}</div>
</Screen>
@@ -132,7 +132,7 @@ function HealthPage() {
if (days.length === 0) {
return (
<Screen title="健康" subtitle="每项指标的最新值与参考区间">
<Screen title="健康" subtitle="每项指标的最新值与参考区间" right={<Link href="/sleep/" iconIos="f7:moon_stars" tooltip="睡眠" />}>
<h2></h2>
<div className="screen-empty">
<p></p>
@@ -153,7 +153,7 @@ function HealthPage() {
};
return (
<Screen title="健康" subtitle="每项指标的最新值与参考区间">
<Screen title="健康" subtitle="每项指标的最新值与参考区间" right={<Link href="/sleep/" iconIos="f7:moon_stars" tooltip="睡眠" />}>
{SECTIONS.map((section) => (
<section className="sec" key={section.title}>