75 lines
2.6 KiB
Markdown
75 lines
2.6 KiB
Markdown
# 学校订餐菜单生成器
|
||
|
||
自动生成周一至周五的营养菜单,支持导出 Excel,含后台菜品管理。
|
||
|
||
- 后端:Django + Django REST Framework + openpyxl
|
||
- 前端:React 18 + Vite
|
||
|
||
## 功能
|
||
|
||
- **两种生成模式**
|
||
- 全部自动生成:荤菜、素菜、汤、主食全部自动分配,一周内尽量不重复
|
||
- 自选两个荤菜:每天使用所选 2 个荤菜,素菜等其余自动生成
|
||
- 每天固定 2 荤 2 素,一次随机生成营养 A / B 两套菜单,可逐道替换菜品
|
||
- 菜品带**菜系**分类(本帮/家常/川/粤/鲁/湘/江浙/西北/面点小吃),替换时按菜系分组选择
|
||
- 一键导出带样式的 Excel(左右并排 A/B 两套,各自带配料明细与营养成分分析)
|
||
- 后台管理添加/编辑/停用菜品,支持批量导入
|
||
|
||
## 快速启动
|
||
|
||
双击 `start.bat`(首次会自动安装依赖并写入示例菜品数据)。
|
||
|
||
- 前端页面:http://localhost:5173
|
||
- 后台管理:http://127.0.0.1:8000/admin (账号 `admin` / 密码 `admin123`)
|
||
|
||
## 手动启动
|
||
|
||
```bash
|
||
# 后端
|
||
python -m venv .venv
|
||
.venv\Scripts\pip install -r backend\requirements.txt
|
||
.venv\Scripts\python backend\manage.py migrate
|
||
.venv\Scripts\python backend\manage.py seed_dishes # 写入示例菜品
|
||
.venv\Scripts\python backend\manage.py runserver 0.0.0.0:8000
|
||
|
||
# 前端(另开终端)
|
||
cd frontend
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
backend/
|
||
config/ # Django 项目配置
|
||
meals/ # 主应用:菜品模型、生成逻辑、Excel 导出
|
||
management/commands/seed_dishes.py # 示例菜品
|
||
requirements.txt
|
||
frontend/
|
||
src/App.jsx # 菜单生成页面
|
||
src/index.css # 页面样式
|
||
start.bat # 一键启动脚本
|
||
```
|
||
|
||
## API 说明
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|---|---|---|
|
||
| GET/POST/PUT/DELETE | `/api/dishes/` | 菜品增删改查(`?type=meat/veg/soup/staple` 过滤) |
|
||
| POST | `/api/dishes/bulk/` | 批量导入菜品(需管理员登录),支持中文类型名与菜系 |
|
||
| POST | `/api/menu/generate/` | 生成 A/B 两套周菜单 |
|
||
| POST | `/api/menu/export/` | 将生成的菜单导出为 xlsx(A/B 左右并排,含营养成分) |
|
||
|
||
## 批量导入示例
|
||
|
||
```bash
|
||
# 管理命令,每行:类型|菜名|配料|蛋白质|脂肪|热量|菜系
|
||
.venv\Scripts\python backend\manage.py import_dishes dishes.txt
|
||
|
||
# 或调用 API(需先登录 admin)
|
||
curl -u admin:admin123 -H "Content-Type: application/json" \
|
||
-d '{"dishes":[{"name":"清蒸鲈鱼","dish_type":"荤菜","cuisine":"粤菜","protein":16,"fat":5,"calorie":140}]}' \
|
||
http://127.0.0.1:8000/api/dishes/bulk/
|
||
```
|