240 lines
6.0 KiB
Markdown
240 lines
6.0 KiB
Markdown
# 学生课程批量退选工具
|
||
|
||
## 🚀 功能概述
|
||
|
||
本工具提供用户友好的 Web 界面来帮助管理员批量退选学生的课程,支持文件上传、数据预览和可视化操作,让批量退课更加直观便捷。
|
||
|
||
## 🏗️ 项目架构
|
||
|
||
```
|
||
deleclass_副本2/
|
||
├── src/ # 后端 API 服务
|
||
│ └── main.py # Flask API 服务器
|
||
├── toolbox-app/ # 前端 Web 应用
|
||
│ ├── src/ # Vue.js 源代码
|
||
│ ├── public/ # 静态资源
|
||
│ └── package.json # 前端依赖配置
|
||
├── requirements.txt # Python 依赖
|
||
├── generate_template.py # Excel 模板生成工具
|
||
├── .env.example # 环境变量模板
|
||
└── README.md # 项目文档
|
||
```
|
||
|
||
## 🛠️ 技术栈
|
||
|
||
### 后端
|
||
- **Python 3.x** - 主要编程语言
|
||
- **Flask** - Web 框架,提供 API 服务
|
||
- **openpyxl** - Excel 文件处理
|
||
- **requests** - HTTP 请求库
|
||
- **python-dotenv** - 环境变量管理
|
||
|
||
### 前端
|
||
- **Vue.js 3** - 现代化前端框架
|
||
- **Vite** - 快速构建工具
|
||
- **Element Plus** - UI 组件库
|
||
- **Axios** - HTTP 客户端
|
||
|
||
## 🎯 核心功能
|
||
|
||
系统会处理 Excel 文件中的学生 ID 和课程班 ID 列表,执行以下操作:
|
||
|
||
1. **获取学生课程**:通过 `GET` 请求获取每个学生当前已选的课程班列表
|
||
2. **匹配与退课**:在学生的已选课程中匹配需要退选的课程班 ID,并通过 `DELETE` 请求发起退课操作
|
||
3. **结果反馈**:提供详细的处理结果和统计报告
|
||
|
||
> **🛡️ 安全第一**:为了防止误操作,本工具采用 **先预览,后确认** 的安全执行模式。
|
||
|
||
---
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 1. 启动后端服务
|
||
|
||
```bash
|
||
# 安装 Python 依赖
|
||
pip3 install -r requirements.txt
|
||
|
||
# 配置环境变量(创建 .env 文件)
|
||
cp .env.example .env
|
||
# 编辑 .env 文件,填入您的 API 配置
|
||
|
||
# 启动 Flask 后端服务
|
||
python3 src/main.py
|
||
```
|
||
|
||
### 2. 启动前端应用
|
||
|
||
```bash
|
||
# 进入前端目录
|
||
cd toolbox-app
|
||
|
||
# 安装 Node.js 依赖
|
||
npm install
|
||
|
||
# 启动开发服务器
|
||
npm run dev
|
||
```
|
||
|
||
### 3. 使用 Web 界面
|
||
|
||
1. 打开浏览器访问 `http://localhost:5173`
|
||
2. 上传包含学生 ID 和课程班 ID 的 Excel 文件
|
||
3. 预览退课数据,确认无误后执行批量退课
|
||
4. 查看详细的操作结果和统计信息
|
||
|
||
## 📋 数据格式要求
|
||
|
||
Excel 文件应包含以下列:
|
||
|
||
| 学生ID | 课程班ID |
|
||
| --- | --- |
|
||
| 3831629 | 1820221, 1820210 |
|
||
| 3831630 | 1820456 |
|
||
|
||
- **学生ID**: 学生的唯一标识符
|
||
- **课程班ID**: 需要退选的一个或多个课程班 ID,多个 ID 之间用英文逗号 `,` 分隔
|
||
|
||
## ⚙️ 环境配置
|
||
|
||
创建 `.env` 文件并配置以下参数:
|
||
|
||
```dotenv
|
||
# --- API 配置 ---
|
||
BASE_URL=https://api.seiue.com
|
||
|
||
# --- 身份认证 ---
|
||
# ⚠️ 请将 <你的Token> 替换为有效的 Bearer Token
|
||
AUTHORIZATION="Bearer <你的Token>"
|
||
X_ROLE="shadow"
|
||
X_SCHOOL_ID="665"
|
||
X_REFLECTION_ID="969269"
|
||
SEMESTER_ID=61626
|
||
```
|
||
|
||
> **⚠️ 重要提醒:**
|
||
> - 必须将 `AUTHORIZATION` 中的 `<你的Token>` 替换为您的有效令牌
|
||
> - `.env` 文件包含敏感信息,请勿提交到公共代码仓库
|
||
|
||
---
|
||
|
||
## 🔧 开发指南
|
||
|
||
### 本地开发环境搭建
|
||
|
||
1. **克隆项目**
|
||
```bash
|
||
git clone https://git.vcck.cn/nvex/toolbox.git
|
||
cd toolbox
|
||
```
|
||
|
||
2. **后端开发**
|
||
```bash
|
||
# 安装 Python 依赖
|
||
pip3 install -r requirements.txt
|
||
|
||
# 配置环境变量
|
||
cp .env.example .env
|
||
# 编辑 .env 文件
|
||
|
||
# 启动后端服务(开发模式)
|
||
python3 src/main.py
|
||
```
|
||
|
||
3. **前端开发**
|
||
```bash
|
||
cd toolbox-app
|
||
|
||
# 安装依赖
|
||
npm install
|
||
|
||
# 启动开发服务器
|
||
npm run dev
|
||
|
||
# 构建生产版本
|
||
npm run build
|
||
```
|
||
|
||
### 项目结构说明
|
||
|
||
```
|
||
├── src/main.py # Flask API 服务器
|
||
├── toolbox-app/
|
||
│ ├── src/
|
||
│ │ ├── components/ # Vue 组件
|
||
│ │ ├── views/ # 页面视图
|
||
│ │ ├── router/ # 路由配置
|
||
│ │ └── store/ # 状态管理
|
||
│ ├── public/ # 静态资源
|
||
│ └── vite.config.js # Vite 配置
|
||
├── requirements.txt # Python 依赖
|
||
├── generate_template.py # Excel 模板生成工具
|
||
└── .env.example # 环境变量模板
|
||
```
|
||
|
||
## 📦 部署指南
|
||
|
||
### 生产环境部署
|
||
|
||
1. **后端部署**
|
||
```bash
|
||
# 使用 gunicorn 部署 Flask 应用
|
||
pip install gunicorn
|
||
gunicorn -w 4 -b 0.0.0.0:5000 src.main:app
|
||
```
|
||
|
||
2. **前端部署**
|
||
```bash
|
||
cd toolbox-app
|
||
npm run build
|
||
# 将 dist/ 目录部署到 Web 服务器
|
||
```
|
||
|
||
3. **使用 Docker(可选)**
|
||
```dockerfile
|
||
# 示例 Dockerfile
|
||
FROM python:3.9-slim
|
||
WORKDIR /app
|
||
COPY requirements.txt .
|
||
RUN pip install -r requirements.txt
|
||
COPY . .
|
||
EXPOSE 5000
|
||
CMD ["python", "src/main.py"]
|
||
```
|
||
|
||
## 🤝 贡献指南
|
||
|
||
1. Fork 本项目
|
||
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
|
||
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
|
||
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
||
5. 开启 Pull Request
|
||
|
||
## 📄 许可证
|
||
|
||
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
|
||
|
||
## 🆘 常见问题
|
||
|
||
### Q: 如何生成 Excel 模板?
|
||
A: 运行 `python3 generate_template.py` 生成标准格式的 Excel 模板文件。
|
||
|
||
### Q: API 认证失败怎么办?
|
||
A: 请检查 `.env` 文件中的 `AUTHORIZATION` 配置,确保 Token 有效且格式正确。
|
||
|
||
### Q: 前端无法连接后端?
|
||
A: 确保后端服务已启动(默认端口 5000),检查前端配置中的 API 基础 URL。
|
||
|
||
### Q: Excel 文件格式错误?
|
||
A: 确保 Excel 文件包含 "学生ID" 和 "课程班ID" 列,且数据格式符合要求。
|
||
|
||
---
|
||
|
||
## 📞 技术支持
|
||
|
||
如有问题或建议,请通过以下方式联系:
|
||
|
||
- 📧 提交 Issue: [项目 Issues](https://git.vcck.cn/nvex/toolbox/issues)
|
||
- 💬 项目讨论: [项目讨论区](https://git.vcck.cn/nvex/toolbox/discussions)
|
||
|
||
--- |