Vitals
本地优先的综合健康管理应用,整合运动、饮食、睡眠、体重和阅读数据。
功能特性
健康数据追踪
- 运动记录 - 跑步、游泳、骑行、力量训练等,支持时长、距离、心率记录
- 饮食记录 - 三餐及加餐,支持卡路里、蛋白质、碳水、脂肪追踪,AI 智能识别食物图片和文字
- 睡眠记录 - 入睡/起床时间、睡眠时长、睡眠质量评分
- 体重记录 - 体重、体脂率、肌肉量追踪
阅读习惯追踪
- 阅读记录 - 时长、书名、作者、封面(自动获取)、读后感
- 心情记录 - 5 种表情选择(😄😊😐😔😢)
- 我的书库 - 书籍封面网格展示,按书名归类
- 统计图表 - 阅读时长趋势、心情分布饼图
多用户与认证
- 用户档案 - 姓名、性别、身高、体重、年龄
- BMI 计算 - 自动计算并显示健康状态(偏瘦/正常/偏胖/肥胖)
- 用户切换 - 支持多用户数据隔离
- 用户配置隔离 - 每个用户独立的配置数据
- 数据管理 - 按日期范围或数据类型清除数据
- JWT 认证 - HTTPOnly Cookie + Authorization Header 混合认证
- 记住我 - 可选 1 天或 30 天登录有效期
- 邀请码注册 - 通过邀请码控制用户注册
- 管理员面板 - 用户管理、邀请码管理、API Key 管理
数据管理
- 数据导出 - 支持 JSON/CSV 格式导出
- 数据导入 - 从 JSON 文件导入数据
- 自动备份 - 数据写入后自动备份
- 备份恢复 - 支持从备份文件恢复数据
提醒功能
- 定时提醒 - 体重、睡眠、运动、饮食提醒
- 系统通知 - 支持 macOS/Linux/Windows 系统通知
数据可视化
- 今日概览 - 运动、饮食、睡眠、体重、阅读汇总,深色科技风格仪表盘
- 本周报告 - 趋势分析和统计图表
- 详细报告 - 各项数据的深度分析
Apple Health 集成
- 步数同步 - 自动同步 Apple Health 步数数据到首页仪表盘
快速开始
Docker 部署(推荐)
本地开发
访问 http://localhost:8080 即可使用 Web 界面。
注意: 默认管理员账号为 admin / admin123,请在首次登录后及时修改密码。
页面导航
/ - 首页(今日概览)
/login - 登录页面
/register - 注册页面(需邀请码)
/admin - 管理员面板
/exercise - 运动记录
/meal - 饮食记录
/sleep - 睡眠记录
/weight - 体重记录
/reading - 阅读记录
/report - 健康报告
/settings - 设置页面
API 接口
认证
| 端点 |
方法 |
说明 |
/api/auth/login |
POST |
用户登录,返回 JWT Token + 设置 Cookie |
/api/auth/register |
POST |
用户注册(需邀请码) |
/api/auth/logout |
POST |
用户登出,清除 Cookie |
/api/auth/me |
GET |
获取当前用户信息 |
管理员
| 端点 |
方法 |
说明 |
/api/admin/users |
GET |
获取所有用户列表 |
/api/admin/users/{id}/disable |
POST |
禁用用户 |
/api/admin/users/{id}/enable |
POST |
启用用户 |
/api/admin/users/{id} |
DELETE |
删除用户 |
/api/admin/invites |
GET |
获取邀请码列表 |
/api/admin/invites |
POST |
创建邀请码 |
/api/admin/invites/{id} |
DELETE |
删除邀请码 |
/api/admin/api-keys |
GET |
获取所有 API Key 状态 |
/api/admin/api-keys/{provider} |
GET |
获取指定 API Key(明文) |
/api/admin/api-keys/{provider} |
PUT |
设置 API Key |
/api/admin/api-keys/{provider} |
DELETE |
删除 API Key |
用户管理
| 端点 |
方法 |
说明 |
/api/users |
GET |
获取所有用户 |
/api/users |
POST |
创建新用户 |
/api/users/active |
GET |
获取当前活跃用户 |
/api/users/{id} |
GET |
获取指定用户 |
/api/users/{id} |
PUT |
更新用户信息 |
/api/users/{id} |
DELETE |
删除用户 |
/api/users/{id}/activate |
POST |
设置活跃用户 |
数据管理
| 端点 |
方法 |
说明 |
/api/data/preview-delete |
POST |
预览删除数量 |
/api/data/clear |
POST |
执行数据删除 |
运动
| 端点 |
方法 |
说明 |
/api/exercises |
GET |
获取运动记录 |
/api/exercise |
POST |
添加运动记录 |
/api/exercise/{id} |
DELETE |
删除单条运动记录 |
/api/exercises/stats |
GET |
运动统计 |
/api/bmi/analysis |
GET |
BMI 分析(当前/目标体重、达成预估) |
饮食
| 端点 |
方法 |
说明 |
/api/meals |
GET |
获取饮食记录 |
/api/meal |
POST |
添加饮食记录 |
/api/meal/{id} |
DELETE |
删除单条饮食记录 |
/api/meals/nutrition |
GET |
营养统计 |
/api/food/recognize |
POST |
AI 识别食物 |
/api/nutrition/recommendations |
GET |
营养建议(TDEE目标、缺口分析、配餐建议) |
睡眠
| 端点 |
方法 |
说明 |
/api/sleep |
GET |
获取睡眠记录 |
/api/sleep |
POST |
添加睡眠记录 |
/api/sleep/{id} |
DELETE |
删除单条睡眠记录 |
/api/sleep/assessment |
GET |
睡眠评估(状态分析、健康影响、建议) |
体重
| 端点 |
方法 |
说明 |
/api/weight |
GET |
获取体重记录 |
/api/weight |
POST |
添加体重记录 |
/api/weight/{id} |
DELETE |
删除单条体重记录 |
阅读
| 端点 |
方法 |
说明 |
/api/reading |
GET |
获取阅读记录(支持 ?days=N) |
/api/reading |
POST |
添加阅读记录 |
/api/reading/{id} |
DELETE |
删除阅读记录 |
/api/reading/today |
GET |
今日阅读摘要 |
/api/reading/stats |
GET |
阅读统计 |
/api/books/search |
GET |
搜索书籍封面(OpenLibrary) |
汇总
| 端点 |
方法 |
说明 |
/api/today |
GET |
今日概览 |
/api/week |
GET |
本周汇总 |
命令行使用
数据记录
数据查看
数据导出与导入
数据库备份
定时提醒
安装
环境变量
| 变量 |
必填 |
说明 |
MYSQL_HOST |
是 |
MySQL 服务器地址(默认 localhost) |
MYSQL_PORT |
否 |
MySQL 端口(默认 3306) |
MYSQL_USER |
是 |
MySQL 用户名 |
MYSQL_PASSWORD |
是 |
MySQL 密码 |
MYSQL_DATABASE |
是 |
MySQL 数据库名(默认 vitals) |
MYSQL_ROOT_PASSWORD |
是 |
MySQL root 密码(Docker 部署时需要) |
JWT_SECRET |
是 |
JWT 签名密钥(建议用 openssl rand -hex 32 生成) |
DASHSCOPE_API_KEY |
否 |
阿里云通义千问 API Key(可通过 Web 管理界面配置) |
DEEPSEEK_API_KEY |
否 |
DeepSeek API Key(可通过 Web 管理界面配置) |
ANTHROPIC_API_KEY |
否 |
Anthropic API Key(可通过 Web 管理界面配置) |
API Key 管理: AI 相关的 API Key 支持通过 Web 管理界面配置(管理员设置页),数据库配置优先于环境变量。
默认管理员账号: admin / admin123(请在首次登录后修改)
技术栈
- 后端: Python, FastAPI, MySQL 8.0
- 前端: HTML, CSS, JavaScript, Chart.js
- 认证: JWT (PyJWT), bcrypt
- 部署: Docker, Docker Compose
- AI: 阿里云通义千问 / DeepSeek (食物识别)
- 外部 API: OpenLibrary (书籍封面搜索)
设计系统
首页仪表盘(深色科技风格)
| 元素 |
值 |
| Background |
#0a0a0f (深空黑) |
| Card Background |
rgba(255,255,255,0.03) (玻璃态) |
| Primary Accent |
#00d4ff (科技青) |
| Secondary Accent |
#7c3aed (霓虹紫) |
| Text Primary |
#ffffff |
| Text Secondary |
rgba(255,255,255,0.6) |
| Border |
rgba(255,255,255,0.1) |
| Glow Effect |
0 0 20px rgba(0,212,255,0.3) |
其他页面
| 元素 |
值 |
| Primary |
#3B82F6 |
| Secondary |
#60A5FA |
| CTA |
#F97316 |
| Background |
#F8FAFC |
| Text |
#1E293B |
| Headings |
Lora |
| Body |
Raleway |
| Style |
Vibrant & Block-based |
项目结构
文档
部署文档
设计文档
开发进度
已完成功能 ✅
核心数据追踪
用户认证与管理
Web 应用
数据管理
AI 集成
数据导入器
报告与分析
CLI 工具
部署
移动端 H5 适配
待完善功能 🚧
高优先级
中优先级
低优先级
已知问题 🐛
数据迁移
从 SQLite 迁移到 MySQL
如果你有旧版本的 SQLite 数据需要迁移,可以使用迁移脚本:
迁移脚本会自动处理:
- 用户数据(users)
- 运动记录(exercise)
- 饮食记录(meal)
- 睡眠记录(sleep)
- 体重记录(weight)
- 阅读记录(reading)
- 邀请码(invites)
- 配置数据(config)
更新日志
2026-01-27
📊 健康模块智能分析增强
- BMI 健康分析 - 运动页面新增 BMI 分析卡片
- BMI 状态刻度条(偏瘦/正常/偏重/肥胖)
- 目标体重设定与达成预估
- 基于 TDEE-摄入+运动 的智能计算
- 营养建议系统 - 饮食页面新增营养状况卡片
- 每日营养进度条(热量/蛋白质/碳水/脂肪)
- 基于 TDEE 的个性化目标计算
- 营养缺口分析与配餐建议
- 7 天趋势图增加建议摄入参考线
- 睡眠健康评估 - 睡眠页面新增健康评估卡片
- 睡眠状态刻度条(偏少/不足/理想/过多)
- 睡眠不足警告卡片(认知/身体/情绪/运动影响)
- 睡眠充足益处卡片(健康益处提示)
- 趋势图动态着色(理想区间绿色标记)
2026-01-26
🎨 首页仪表盘深色科技风格改造
- 全新视觉风格 - 深空黑背景 + 玻璃态卡片 + 霓虹光效
- 科技感配色 - 科技青(#00d4ff) + 霓虹紫(#7c3aed) 双色调
- 动态效果 - 卡片悬停光晕、数据呼吸动画、渐变边框
- 信息密度优化 - 紧凑布局,一屏展示更多健康数据
🍎 Apple Health 步数同步
- 步数数据集成 - 首页仪表盘展示 Apple Health 同步的步数
- 自动同步 - 支持从 Apple Health 导入每日步数数据
2026-01-24
🔑 API Key 数据库管理
- 集中存储 - AI API Key(通义千问、DeepSeek、Anthropic)存储在数据库
- Web 管理界面 - 管理员可在设置页面配置 API Key
- 优先级机制 - 数据库配置优先于环境变量
- 安全显示 - API Key 列表仅显示掩码,支持查看/编辑/删除
👤 用户配置隔离
- Config 表迁移 - 添加 user_id 字段,复合主键 (user_id, key)
- 数据归属 - 现有配置数据归属 ID=1 用户
- 完全隔离 - 每个用户独立的配置数据,新用户不再看到其他用户信息
🍽️ 食物文字智能识别
- 本地优先 - 使用内置食物数据库快速匹配(~100 种常见食物)
- AI 增强 - 本地无法识别时自动调用通义千问 AI 标准化食物描述
- 智能回退 - 无 API Key 时仅使用本地估算,不影响基本功能
2026-01-23
🗄️ MySQL 数据库迁移
- 数据库切换 - 从 SQLite 迁移到 MySQL 8.0
- 连接池支持 - 使用 MySQL 连接池管理,提升性能
- Docker 集成 - docker-compose 自动配置 MySQL 服务
- 数据迁移脚本 - 提供 SQLite 到 MySQL 的数据迁移工具
- 类型兼容性修复 - 添加
_parse_datetime、_parse_date、_parse_time 辅助函数,处理 MySQL 返回原生类型
🔒 用户权限增强
- API 权限控制 -
/api/users 非管理员仅返回自己,/api/users/{id} 非管理员只能查询自己(否则 403)
- 导航栏隐藏 - 非管理员用户隐藏「管理」入口
📱 移动端 H5 全页面适配
- 登录/注册页面 - 移动端布局优化,触摸目标符合标准
- 首页 Dashboard - 卡片布局适配,底部导航栏
- 运动/饮食页面 - 表格转卡片列表,表单输入增大
- 睡眠/体重/阅读页面 - 响应式布局,48px 输入框
- 报告页面 - 按钮触摸目标优化(48px),底部导航
- 设置页面 - 响应式布局,支持手机浏览
- 管理页面 - 表格改为卡片列表(data-label)
- 底部 Tab 导航 - 固定底部导航栏 + "更多"菜单
- iOS 安全区域 - 支持刘海屏和底部横条
🌐 网络访问
- 绑定地址优化 - 默认绑定
0.0.0.0,支持局域网访问和移动端真机测试
2026-01-22
🔐 混合认证方案优化
- 修改 login/register API 使用 JSONResponse 正确设置 Cookie
- 添加
path="/" 确保 Cookie 在所有路径可用
- 前端同时使用 localStorage token 进行 API 认证
- 修复登录后闪屏返回登录页的问题
✨ 登录功能全面升级
- 服务端认证中间件 - 未登录用户自动重定向到登录页
- HTTPOnly Cookie - 使用 HTTPOnly Cookie 存储 token(比 localStorage 更安全)
- "记住我"功能 - 勾选:30 天有效期,不勾选:1 天有效期
- 登出 API - 新增
/api/auth/logout 接口
- 登录后重定向 - 支持登录后返回原访问页面
🎨 登录/注册页面 UI 升级
- 采用 Neumorphism(新拟态) 设计风格
- 健康主题配色(青色 + 绿色渐变)
- Lora + Raleway 字体组合
- 柔和阴影效果,提升视觉体验
历史版本
- 2026-01-20 - 阅读模块上线(书库、心情追踪、统计图表)
- 2026-01-19 - 设置页面重构(用户档案、数据管理)
- 2026-01-17 - 公网部署支持(JWT 认证、邀请码、管理员面板)
- 2026-01-15 - 第一版发布(核心健康追踪功能)
License
MIT