营养健康评估系统

运动员食物摄入记录与营养报告生成系统。前端使用 Vue 3 + Vite,后端使用 Flask,支持 PDF / Excel 报告导出。

功能

  • 运动员信息录入(姓名、性别、年龄、身高、体重、运动量 PAL)
  • BMI 自动计算与展示
  • 从 API 动态加载食物分类与食物列表
  • 食物摄入记录与清单管理
  • 自动评价 / 手动评价两种模式
    • 自动评价:根据 config/nutrition_template.json 及女性 EER 表自动生成评价
    • 手动评价:后端先计算各类摄入量,用户对照填写评价后生成报告
  • PDF / Excel 营养健康评估报告

技术栈

层级 技术
前端 Vue 3、Vite、xlsx
后端 Flask、ReportLab、Matplotlib、OpenPyXL
数据 food_db.json、配置文件 JSON

项目结构

vue-project/
├── app.py                      # Flask 后端入口
├── requirements.txt            # Python 依赖
├── food_db.json                # 本地食物营养数据库
├── config/
│   ├── nutrition_template.json # 分类评价规则与建议模板
│   └── female_energy_eer.json  # 中国女性膳食能量需要量 (EER)
├── services/
│   ├── nutrition_service.py    # 营养计算与评价逻辑
│   └── report_service.py       # 报告生成调度
├── builder/
│   ├── pdf_builder.py          # PDF 报告构建
│   └── excel_builder.py        # Excel 报告构建
├── static/images/              # 报告分类图片
├── src/
│   ├── components/             # Vue 组件
│   ├── services/               # API 调用(食物 API、报告 API)
│   └── utils/                  # BMI、手动评价等工具
└── output/reports/             # 生成的报告输出目录(运行时自动创建)

环境要求

  • Node.js 16+
  • Python 3.9+

安装与启动

1. 后端

cd vue-project/vue-project

# 创建虚拟环境(推荐)
python -m venv .venv
.venv\Scripts\activate        # Windows
# source .venv/bin/activate   # macOS / Linux

pip install -r requirements.txt
python app.py

后端默认运行在 http://localhost:5000

2. 前端

cd vue-project/vue-project
npm install
npm run dev

前端默认运行在 http://localhost:5173

食物列表 API 通过 Vite 代理转发到 https://survey.femalesportshealth.cn,配置见 vite.config.js。

API 接口

方法 路径 说明
POST /api/preview-intake 预览各类摄入量与营养素合计(手动评价参考)
POST /api/generate-pdf 生成 PDF 报告
POST /api/generate-excel 生成 Excel 报告

请求体为前端组装的 JSON,包含 user、meals,以及可选的 autoEvaluation、manualEvaluations。

配置说明

  • food_db.json:食物名称 → 营养数据映射,报告计算依赖此文件,API 返回的食物名称需与之匹配
  • config/nutrition_template.json:食物分类摄入量评价区间、建议模板、钙/能量默认评价规则
  • config/female_energy_eer.json:女性按年龄段与运动量 (PAL I/II/III) 的每日能量标准

构建

npm run build      # 前端生产构建,输出到 dist/
npm run preview    # 预览构建结果

常见问题

报告里某些食物没有计入营养? 检查 API 返回的食物名称是否在 food_db.json 中存在对应条目。

手动评价看不到摄入量? 确保后端已启动,/api/preview-intake 可正常访问。

PDF 中文或饼图乱码? Windows 环境需安装 SimHei 字体(C:/Windows/Fonts/simhei.ttf)。

S
Description
No description provided
Readme
12 MiB
0 Stars 1 Watchers 0 Forks
Languages
Vue 62.4%
Python 29.2%
JavaScript 5.8%
CSS 2.3%
HTML 0.3%