还没有同步到徽章。
- ) : ( - years.map((year) => ( -还没有同步到个人纪录。
- ) : ( -| 活动 | -类型 | -数值 | -日期 | -
|---|---|---|---|
| {r.activity_name || '—'} | -{label(r.activity_type)} | -- {r.value != null ? r.value.toLocaleString(undefined, { - maximumFractionDigits: 2, - }) : '—'} - | -{date(r.achieved_at)} | -
所选区间内没有运动记录。
- ) : ( -| 时间 | -类型 | -时长 | -距离 | -消耗 | -平均心率 | -
|---|---|---|---|---|---|
| {a.start_time?.slice(0, 16).replace('T', ' ')} | -{label(a.activity_type)} | -- {a.duration != null ? `${Math.round(a.duration / 60)} 分` : '—'} - | -- {a.distance ? `${(a.distance / 1000).toFixed(2)} km` : '—'} - | -{a.calories != null ? `${Math.round(a.calories)}` : '—'} | -{a.heart_rate_average ?? '—'} | -
还没有运动记录。
+ 去同步 +还没有同步到个人纪录。
+ ) : ( +| 活动 | 类型 | +数值 | 日期 | +
|---|---|---|---|
| {r.activity_name || '—'} | +{label(r.activity_type)} | ++ {r.value != null + ? r.value.toLocaleString(undefined, { maximumFractionDigits: 2 }) + : '—'} + | +{day(r.achieved_at)} | +
还没有同步到徽章。
+ ) : ( + badgesByYear.map(([year, list]) => ( +还没有任何健康数据。
@@ -153,7 +153,7 @@ function HealthPage() { }; return ( -从 Garmin Connect 拉取健康数据,或重新绑定账号。
+ + 前往数据同步 + +从 Garmin Connect 拉取最近 7 天的健康数据
diff --git a/client/src/pages/TrendsPage.tsx b/client/src/pages/TrendsPage.tsx index 71c593b..4a810d4 100644 --- a/client/src/pages/TrendsPage.tsx +++ b/client/src/pages/TrendsPage.tsx @@ -1,4 +1,5 @@ import { useEffect, useMemo, useState } from 'react'; +import { Link } from 'framework7-react'; import { apiClient, errorMessage, HealthDay } from '../services/api'; import Chart, { Series } from '../components/charts/Chart'; import Skeleton from '../components/Skeleton'; @@ -220,7 +221,7 @@ function TrendsPage() { GRANULARITIES.find((g) => g.id === effective)?.label.replace('每', '') ?? ''; return ( -