🔥 A teaching management system based on Spring Boot + Vue3 + MySQL.
🚀 Built for course management, member administration, enrollment workflows, and approval processes.
⭐ Supports multi-role login, member/course CRUD, course enrollment, application/examination flow, and score management.
面向教务场景的课程与成员管理系统,包含前后端完整工程:后端负责鉴权与业务流程,前端提供管理员/教师/学生三类角色工作台。
EduFlow 用于教学管理业务的完整支撑:
- 后端代码位于
teaching-manager-bk - 前端代码位于
teaching-manager-ui/Pc/teaching-manager-pc-ui
后端能力:
- 登录与登录校验(JWT)
- 用户密码修改
- 教师/学生/院系信息管理
- 课程管理(新增、更新、删除、状态切换)
- 学生选课、退课、已选课程查询
- 课程申请与课程审核流程
- CORS 与登录拦截器
前端能力:
- 管理员端:教师管理、学生管理、课程管理、课程审核
- 教师端:我的课程、课程申请、申请记录
- 学生端:选课中心、已选课程、退课
- 公共能力:登录鉴权、角色路由守卫、密码修改、统一请求封装
- Java 17
- Spring Boot 3.1.5
- MyBatis 3.x
- MySQL 8.x
- JWT(
io.jsonwebtoken) - Lombok / Fastjson
- Vue3 + Vite
- Element Plus + Pinia + Vue Router
EduFlow
├── teaching-manager-bk/ # Spring Boot 后端
│ ├── src/main/java/group/teachingmanagerbk
│ │ ├── controller/ # Login/Course/Member/... 控制器
│ │ ├── service/ # 业务服务层
│ │ ├── mapper/ # MyBatis Mapper
│ │ ├── interceptor/ # 登录拦截器
│ │ └── utils/ # JWT 与统一返回结构
│ └── src/main/resources/application.properties
└── teaching-manager-ui/Pc/teaching-manager-pc-ui # Vue3 前端
├── src/views/ # 管理员/教师/学生页面
├── src/api/ # 接口封装
├── src/router/ # 角色路由与守卫
└── src/stores/ # 登录态管理
- JDK 17
- Maven 3.8+
- Docker(用于启动 MySQL)
cp .env.example .env
# 修改 .env 中 DB_PASSWORD / DB_ROOT_PASSWORD,不能保留 change_me_*
./scripts/dev.sh check-env
./scripts/dev.sh allall 会执行:
- 校验
.env是否存在且不含占位口令; - 通过
docker-compose.dev.yml启动 MySQL; - 启动后端
teaching-manager-bk。
./scripts/dev.sh infra-up
./scripts/dev.sh backend
./scripts/dev.sh infra-down- 后端从环境变量读取数据库配置,映射在 application.properties:
DB_URLDB_USERNAMEDB_PASSWORD
- 默认数据库名为
teaching_manager。 db/init.sql已包含完整建表与演示数据,可直接用于本地联调。
cd teaching-manager-ui/Pc/teaching-manager-pc-ui
cp .env.example .env
npm install
npm run dev- 默认开发端口:
5174 - 已配置代理:
/api -> http://127.0.0.1:8080
/login、/check/login默认放行- 其他接口走登录拦截,需在
Authorization头中携带 JWT - JWT 密钥通过环境变量
TM_JWT_SECRET注入(建议长度 ≥ 32) - 支持可选的
TM_JWT_PREVIOUS_SECRET用于密钥轮换过渡期验签
- 登录:
POST /login - 成员管理:
/teachers、/students、/departments - 课程管理:
/insert/course、/update/course、/delete/course - 选课流程:
/student/select/course、/exit/course - 课程申请:
/apply/add/course、/all/application - 审核流程:
/wait/examination、/course/examination
- 后端与前端均可运行,支持完整教务流程演示
- 数据库初始化脚本已内置演示数据,适合本地快速联调
- 使用环境变量管理数据库与 JWT 配置
- 增加 Flyway/Liquibase 管理数据库迁移
- 增加统一异常处理与接口文档(OpenAPI)
EduFlow 的实现遵循“先公共能力、后业务流程、再前后端闭环”的推进顺序:
- 先完成登录、JWT 鉴权和拦截器,明确接口访问边界;
- 再完成教师、学生、院系、课程等基础数据模块;
- 完成选课、退课、课程申请、审批与成绩录入等流程型接口;
- 补齐 Vue3 前端工作台,形成管理员/教师/学生角色闭环。
这种分阶段方式有两个直接好处:
- 公共能力先稳定,后续业务扩展时改动范围更可控;
- 前后端职责清晰,联调时能快速定位问题归属并迭代。
项目的难点主要不在单个 CRUD 接口,而在于多个流程之间的一致性:
- 登录态、接口权限和业务角色要保持统一;
- 课程管理、选课和审核流程之间要有清晰边界;
- 后端接口与前端页面要保持字段契约一致,减少联调摩擦。
为此,当前实现采用了几项明确的约束:
- 使用 JWT 和拦截器统一处理登录态,而不是把鉴权逻辑分散到每个接口中;
- 按
controller -> service -> mapper分层拆分课程、成员、申请、审核等逻辑,降低模块耦合; - 将课程相关操作按“新增 / 修改 / 删除 / 申请 / 审核 / 选课”进行职责划分,避免流程膨胀后难以维护;
- 提前处理跨域与基础拦截逻辑,减少后续联调阶段的环境类问题。
如果继续演进,优先级较高的方向包括:
- 增加数据库初始化脚本与迁移工具,降低部署和接手成本;
- 增加更细粒度的角色权限控制,而不是只依赖“已登录”判断;
- 补统一异常处理、接口文档和测试用例,提升工程完整度;
- 增强前端 E2E 测试与页面级错误边界处理能力。
欢迎通过 Issue / PR 提交:
- SQL 初始化脚本与演示数据
- 前端页面体验与联调说明优化
- 鉴权与权限粒度优化
- 自动化测试与 CI 配置
本仓库采用 MIT License,详见 LICENSE。
- 改造追踪见 docs/resume-upgrade-checklist.md
- 2D 架构升级说明见 docs/architecture-upgrade-guide.md
- 开发环境模板见 .env.example
- 本地数据库快速启动见 docker-compose.dev.yml
- RBAC 架构演进 SQL 草案见 db/rbac-upgrade-schema.sql
- CI 配置见 .github/workflows/ci.yml
本轮已落地:
- 选课状态限制(仅可选/待选)
- 选课时间冲突校验
- 两条核心规则的单元测试
- Vue3 前端工作台(管理员/教师/学生)
- 课程审核与成绩录入前端页面
- 数据库初始化脚本与演示数据
- 全局异常处理(ControllerAdvice)与业务异常体系
- RBAC 权限注解(@RequirePermission)与切面校验
- SpringDoc OpenAPI 文档接入(
/swagger-ui.html) - Flyway 迁移脚本与迁移配置
- 选课并发策略(悲观锁/乐观锁)可配置切换