---
url: /docs/guide/uniapp/pages.md
---
# pages/index — 首页（今日健康）

> `src/pages/index/index.vue` · 212 行 · Vue3 setup · 调用：内联 request（[stats](../api/stats.md) / [device](../api/device.md)）· 私有组件 ×8（`src/pages/index/components/`）

## 职责

健康数据总览首页：三环目标（步数 8000/热量 400 千卡/中高强度 30 分钟）+ AI 体检卡 + 睡眠/运动记录卡 + 健康档案卡。全部数据卡为独立子组件（`*-view.vue` / `*-card-view.vue`）。

## 数据与依赖

| 项 | 值 |
|---|---|
| API（**内联 request** — 按手册口径归「[页面直调](../api/page-direct.md)」，**不是**"等收敛的缺口"） | `getTodayOverview`（热量预算）+ `myTodayHealth`（步数/距离/心率/血氧/睡眠实际值） |
| 组件 | health-summary-view / sleep-card-view / heart-rate-view / oxygen-record-view / stress-record-view / weight-card-view / sport-record-card-view / health-records-view |
| 加载时机 | `onShow(loadToday)` — 每次回前台刷新 |

## 关键逻辑

* `Promise.all` 双请求；⚠️ **一损俱损**：任一失败即整体 reject，同一 `catch` 里 UI 保默认值 ——
  「首页不崩」成立，但**另一路已拿到的数据也会被丢弃**（若要各自降级需改 `Promise.allSettled`）。
  详见 [api/stats](../api/stats.md) 的防回归块
* 字段消费：`h.steps?.value` / `h.todayActivity?.totalCalories` / `h.hr?.value` / `h.spo2?.value` / `(h.sleepXiaomi ?? h.sleep).durationHours` — 无设备数据时全为默认 0/undefined（正常态）

## 变更记录（git）

| 日期 | 作者 | 说明 |
|---|---|---|
| 2026-09-17 | inkforge-deploy | merge main into api（首页子组件体系合入） |

> 生成：`scripts/gen_uniapp_docs.py`（重跑刷新）
