# 营养健康评估系统 运动员食物摄入记录与营养报告生成系统。前端使用 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. 后端 ```bash 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. 前端 ```bash 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) 的每日能量标准 ## 构建 ```bash npm run build # 前端生产构建,输出到 dist/ npm run preview # 预览构建结果 ``` ## 常见问题 **报告里某些食物没有计入营养?** 检查 API 返回的食物名称是否在 `food_db.json` 中存在对应条目。 **手动评价看不到摄入量?** 确保后端已启动,`/api/preview-intake` 可正常访问。 **PDF 中文或饼图乱码?** Windows 环境需安装 SimHei 字体(`C:/Windows/Fonts/simhei.ttf`)。