# LeafSMS
**Repository Path**: Yangshengzhou/leaf-sms
## Basic Information
- **Project Name**: LeafSMS
- **Description**: LeafSMS 是一款基于 Vue 3 和 Spring Boot 的开源学生信息管理系统,具备完善的多角色权限控制。该系统完全免费,适用于毕业设计、商业应用及教育管理场景,提供灵活高效的解决方案。
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: https://gitee.com/Yangshengzhou/leaf-sms/
- **GVP Project**: No
## Statistics
- **Stars**: 42
- **Forks**: 6
- **Created**: 2025-05-05
- **Last Updated**: 2026-02-26
## Categories & Tags
**Categories**: education
**Tags**: Java, JavaScript, SpringBoot, Spring, Element-UI
## README
# Leaf SMS 学生管理系统:Spring Boot3+Vue3 前后端分离开发与 Docker 部署
[](https://github.com/YangShengzhou03/LeafSMS/stargazers) [](https://github.com/YangShengzhou03/LeafSMS) [](https://spring.io/projects/spring-boot) [](https://vuejs.org/) [](https://element-plus.org/)
如果这个项目对您有帮助,请给个 Star 支持一下!⭐
[GitHub 仓库](https://github.com/YangShengzhou03/LeafSMS) • [Fork 本项目](https://github.com/YangShengzhou03/LeafSMS/fork)
## 项目简介
Leaf SMS 是一款基于 Spring Boot 3 和 Vue 3 的开源学生信息管理系统,具备完善的多角色权限控制。这个项目最初是为了本科毕业设计而开发的,但随着功能的不断完善,现在已经成长为一个功能完整、架构清晰、易于扩展的学生管理系统。
系统采用了前后端分离的架构设计,后端使用 Spring Boot 3 框架,前端使用 Vue.js 3 配合 Element Plus 组件库,数据库采用 MySQL 8.0。整个系统完全免费开源,适用于毕业设计、商业应用及教育管理场景,为学校、培训机构等教育机构提供灵活高效的解决方案。
## 系统预览
### 首页

### 登录页面

### 注册页面

### 学生首页

### 教师首页

## 核心特性
- **完善的三端权限控制**:系统分为管理员、教师、学生三个角色,每个角色都有独立的功能模块和权限控制。
- **JWT Token认证机制**:采用 JSON Web Token 进行用户身份认证,无状态设计,支持分布式部署。
- **统一的异常处理和响应格式**:后端采用统一的异常处理机制和响应格式,前端可以统一处理各种异常情况。
- **MyBatis Plus简化CRUD操作**:使用 MyBatis Plus 框架,大大简化了数据库操作,支持分页查询、条件查询等高级功能。
- **分页查询支持**:所有列表页面都支持分页查询,提高大数据量下的查询性能。
- **选课时间控制功能**:管理员可以灵活控制选课功能的启用和禁用状态,以及设置选课的开始和结束时间。
- **密码加密存储**:用户密码采用加密存储,确保用户信息安全。
- **CORS跨域支持**:支持跨域访问,方便前后端分离部署。
- **全局请求拦截器**:前端采用全局请求拦截器,统一处理Token添加、错误处理等逻辑。
## 技术栈
### 后端技术
后端采用 Spring Boot 3.1.0 作为核心框架,配合 MyBatis Plus 3.5.4.1 进行数据库操作。Spring Boot 3 是目前最新的稳定版本,提供了更好的性能和更多的特性。MyBatis Plus 是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
数据库采用 MySQL 8.0,这是目前最流行的开源关系型数据库之一,性能稳定,功能强大。认证方面使用 JWT (jjwt 0.11.5),这是一种基于 Token 的认证方式,相比传统的 Session 认证方式更加灵活和安全。
### 前端技术
前端采用 Vue.js 3 作为核心框架,这是目前最流行的前端框架之一,采用组合式 API,代码组织更加清晰。UI 组件库使用 Element Plus 2.10.4,这是基于 Vue 3 的企业级 UI 组件库,提供了丰富的组件和完善的文档。
前端采用模块化开发,将 API 接口、组件、页面、路由等分离管理,代码结构清晰,易于维护和扩展。
## 环境要求
在开始使用 Leaf SMS 之前,请确保您的开发环境满足以下要求:
- **JDK 17+**:Spring Boot 3 要求 JDK 版本至少为 17,推荐使用 JDK 17 或 JDK 21
- **Node.js 16+**:Vue 3 要求 Node.js 版本至少为 16,推荐使用 Node.js 18 或 Node.js 20
- **MySQL 8.0+**:数据库采用 MySQL 8.0 或更高版本
- **Maven 3.6+**:后端项目使用 Maven 进行依赖管理和构建
## 快速开始
### 数据库配置
项目根目录下有 `init.sql` 文件,包含数据库表结构和初始数据。
#### 1. 创建数据库
```bash
mysql -u root -p < init.sql
```
#### 2. 修改数据库配置
编辑 `backend-java/src/main/resources/application-dev.yml` 文件:
```yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/leaf_sms?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&characterEncoding=utf8
username: root
password: your_password
```
请将 `your_password` 替换为您实际的 MySQL 数据库密码。
### 后端启动
#### 1. 进入后端目录
```bash
cd backend-java
```
#### 2. 编译运行
```bash
mvn clean install
mvn spring-boot:run
```
后端服务将在 `http://localhost:8081/api` 启动。
### 前端启动
#### 1. 进入前端目录
```bash
cd frontend
```
#### 2. 安装依赖
```bash
npm install
```
#### 3. 启动开发服务器
```bash
npm run serve
```
前端服务将在 `http://localhost:8080` 启动。
## Docker 部署
本节介绍如何使用 Docker 快速部署 Leaf SMS 系统。
### 前置要求
- **Docker 20.10+**:确保已安装 Docker
- **init.sql 文件**:确保项目根目录下有 `init.sql` 数据库初始化脚本
### 部署步骤
#### 1. 创建 Docker 网络
```bash
docker network create leaf-sms-network
```
#### 2. 启动 MySQL 容器
```bash
docker run -d \
--name=leaf-sms-mysql \
--restart=always \
--network=leaf-sms-network \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0
```
#### 3. 初始化数据库
```bash
docker exec -i leaf-sms-mysql mysql -uroot -p123456 < init.sql
```
#### 4. 启动后端容器
```bash
docker run -d \
--name=leaf-sms-backend \
--restart=always \
--network=leaf-sms-network \
-p 8081:8081 \
yangshengzhou/leafsms:backend-v1
```
#### 5. 启动前端容器
```bash
docker run -d \
--name=leaf-sms-frontend \
--restart=always \
--network=leaf-sms-network \
-p 80:80 \
yangshengzhou/leafsms:frontend-v1
```
#### 6. 验证部署
```bash
docker ps
```
应该看到三个容器都在运行:
```bash
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
.. yangshengzhou/leafsms:frontend-v1 "/docker-entrypoint.…" .. Up .. 0.0.0.0:80->80/tcp, [::]:80->80/tcp leaf-sms-frontend
.. yangshengzhou/leafsms:backend-v1 "java -jar /app/app.…" .. Up .. 0.0.0.0:8081->8081/tcp, [::]:8081->8081/tcp leaf-sms-backend
.. mysql:8.0 "docker-entrypoint.s…" .. Up .. 0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp leaf-sms-mysql
```
在浏览器中访问 `http://服务器IP` 即可使用系统(例如:`http://192.168.1.100`)。
### 常用命令
#### 查看容器日志
```bash
docker logs leaf-sms-mysql
docker logs leaf-sms-backend
docker logs leaf-sms-frontend
```
#### 停止容器
```bash
docker stop leaf-sms-frontend leaf-sms-backend leaf-sms-mysql
```
#### 启动容器
```bash
docker start leaf-sms-mysql leaf-sms-backend leaf-sms-frontend
```
#### 删除容器
```bash
docker rm -f leaf-sms-frontend leaf-sms-backend leaf-sms-mysql
```
#### 删除网络
```bash
docker network rm leaf-sms-network
```
### 镜像信息
- **后端镜像**:`yangshengzhou/leafsms:backend-v1`
- **前端镜像**:`yangshengzhou/leafsms:frontend-v1`
- **数据库镜像**:`mysql:8.0`
### 注意事项
1. **MySQL 密码**:默认 root 密码为 `123456`,生产环境建议修改为强密码
2. **端口占用**:确保 80、8081、3306 端口没有被其他程序占用
3. **数据持久化**:当前配置未挂载数据卷,容器删除后数据会丢失,如需持久化请添加 `-v` 参数挂载数据卷
4. **防火墙设置**:确保服务器防火墙已开放相应端口
### 数据持久化配置(可选)
```bash
docker run -d \
--name=leaf-sms-mysql \
--restart=always \
--network=leaf-sms-network \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v mysql-data:/var/lib/mysql \
mysql:8.0
```
## 默认账号
系统初始化时会创建三个默认用户,分别对应管理员、教师和学生角色。您可以使用这些账号登录系统进行测试。
### 管理员账号
- 邮箱: `admin@qq.com`
- 密码: `123456`
管理员拥有系统的最高权限,可以管理所有用户、课程、部门、公告等数据,还可以配置系统参数,如选课时间控制等。
### 教师账号
- 邮箱: `teacher@qq.com`
- 密码: `123456`
教师可以管理自己的课程,查看学生信息,录入和修改学生成绩,查看教学计划等。
### 学生账号
- 邮箱: `student@qq.com`
- 密码: `123456`
学生可以查看个人信息,进行选课和退课操作,查询成绩和课表,查看公告等。
## 功能模块
### 管理员功能
管理员是系统的最高权限用户,负责整个系统的管理和维护工作。管理员功能模块包括:
- **用户管理**:管理员可以对系统中的所有用户进行增删改查操作,包括学生、教师和管理员账号的创建、修改和删除。
- **课程管理**:管理员可以管理所有课程信息,包括课程的基本信息、学分、学时、所属部门等,支持课程的增删改查操作。
- **成绩管理**:管理员可以查看和管理所有学生的成绩信息,支持成绩的增删改查操作。
- **部门管理**:管理员可以管理学校的部门信息,包括部门的创建、修改和删除,部门信息用于组织和管理课程和人员。
- **公告管理**:管理员可以发布和管理系统公告,公告可以针对全体用户、学生或教师,支持公告的增删改查操作。
- **系统配置**:管理员可以配置系统参数,特别是选课时间控制功能,可以设置选课的开始和结束时间,以及启用或禁用选课功能。管理员还可以管理学期信息,包括添加和删除学期,学期数据会从教学任务中自动提取。
- **个人资料管理**:管理员可以查看和修改自己的个人信息,包括用户名、邮箱、手机号、地址等。
### 教师功能
教师是教学活动的主要执行者,负责课程教学和学生成绩管理。教师功能模块包括:
- **个人信息管理**:教师可以查看和修改自己的个人信息,包括用户名、邮箱、手机号、地址等。
- **学生管理**:教师可以查看选修自己课程的学生信息,了解学生的基本情况。
- **课程管理**:教师可以管理自己负责的课程,包括课程的基本信息、教学安排、教室分配等,支持课程的增删改查操作。
- **成绩录入与管理**:教师可以录入和修改选修自己课程的学生成绩,包括平时成绩、期中成绩、期末成绩等,系统会自动计算总成绩和等级。
- **教学计划查看**:教师可以查看自己的教学计划,了解课程安排和时间表。
### 学生功能
学生是系统的主要使用者,通过系统进行选课、查询成绩和课表等操作。学生功能模块包括:
- **个人信息管理**:学生可以查看和修改自己的个人信息,包括用户名、邮箱、手机号、地址等。
- **选课/退课**:学生可以在选课时间内选择或退选课程,系统会实时显示可选课程和已选课程,以及已选学分等信息。
- **成绩查询**:学生可以查询自己的所有课程成绩,包括平时成绩、期中成绩、期末成绩、总成绩和等级等信息。
- **课表查询**:学生可以查看自己的课程表,了解课程的时间、地点等信息。
- **公告查看**:学生可以查看系统发布的公告,了解学校的最新通知和安排。
## API接口说明
系统采用 RESTful API 设计,所有接口都返回统一的 JSON 格式数据。以下是主要的 API 接口说明。
### 登录接口
登录接口用于用户身份认证,支持密码登录和邮箱登录两种方式。
- `POST /login/password` - 密码登录,邮箱和密码作为请求参数
- `POST /login/email` - 邮箱登录,邮箱和验证码作为请求参数
- `POST /login/resetPassword` - 重置密码,需要提供邮箱和验证码
- `POST /login/sendCode` - 发送验证码,用于邮箱登录和密码重置
- `GET /login/profile` - 获取个人信息,需要携带 JWT Token
- `PUT /login/profile` - 更新个人信息,需要携带 JWT Token
### 管理员接口
管理员接口用于管理系统的各项数据,包括用户、课程、部门、公告、成绩等。
- `GET /admin/home` - 获取首页统计数据,包括用户数、课程数、部门数等
- `GET /admin/users` - 获取用户列表,支持分页和条件查询
- `POST /admin/users` - 添加新用户,包括学生、教师和管理员
- `PUT /admin/users` - 更新用户信息
- `DELETE /admin/users/{userId}` - 删除指定用户
- `GET /admin/courses` - 获取课程列表,支持分页和条件查询
- `POST /admin/courses` - 添加新课程
- `PUT /admin/courses` - 更新课程信息
- `DELETE /admin/courses/{courseId}` - 删除指定课程
- `GET /admin/departments` - 获取部门列表,支持分页和条件查询
- `POST /admin/departments` - 添加新部门
- `PUT /admin/departments` - 更新部门信息
- `DELETE /admin/departments/{departmentId}` - 删除指定部门
- `GET /admin/announcements` - 获取公告列表,支持分页和条件查询
- `GET /admin/announcements/{announcementId}` - 获取公告详情
- `POST /admin/announcements` - 创建新公告
- `PUT /admin/announcements` - 更新公告信息
- `DELETE /admin/announcements/{announcementId}` - 删除指定公告
- `GET /admin/grades` - 获取成绩列表,支持分页和条件查询
- `PUT /admin/grades` - 更新成绩信息
- `DELETE /admin/grades/{gradeId}` - 删除指定成绩
### 系统配置接口
系统配置接口用于管理系统参数,包括选课时间控制、学期管理和系统配置项。
- `GET /admin/config/course-selection` - 获取选课配置,包括选课开始时间、结束时间、是否启用等
- `POST /admin/config/course-selection/update` - 更新选课配置
- `GET /admin/config` - 获取系统配置列表,支持分页和条件查询
- `GET /admin/config/{configId}` - 获取指定配置详情
- `POST /admin/config` - 创建新系统配置
- `PUT /admin/config` - 更新系统配置信息
- `DELETE /admin/config/{configId}` - 删除指定系统配置
- `GET /admin/semesters` - 获取学期列表
- `POST /admin/semesters` - 添加新学期
- `DELETE /admin/semesters/{semester}` - 删除指定学期
### 学生接口
学生接口用于学生进行选课、查询成绩和课表等操作。
- `GET /student/home` - 获取首页统计数据,包括已选课程数、已完成课程数、平均成绩等
- `GET /student/grades/pagination` - 分页获取成绩列表
- `GET /student/schedule` - 获取课表信息
- `GET /student/announcements` - 获取公告列表
- `GET /student/courses/available/pagination` - 分页获取可选课程列表
- `GET /student/courses/selected/pagination` - 分页获取已选课程列表
- `POST /student/courses/select` - 选择课程
- `POST /student/courses/drop` - 退选课程
### 教师接口
教师接口用于教师管理课程和学生成绩。
- `GET /teacher/home` - 获取首页统计数据,包括课程数、学生数等
- `GET /teacher/students` - 获取学生列表,支持分页和条件查询
- `GET /teacher/students/stats` - 获取学生统计数据,包括总学生数、正常在校人数、特殊状态人数、专业数量
- `GET /teacher/courses` - 获取课程列表,支持分页和条件查询
- `GET /teacher/departments` - 获取部门列表,支持分页和条件查询
- `POST /teacher/courses` - 创建新课程
- `PUT /teacher/courses/{assignmentId}` - 更新课程信息
- `DELETE /teacher/courses/{assignmentId}` - 删除指定课程
- `GET /teacher/courses/{courseId}/grades` - 获取课程成绩列表
- `PUT /teacher/course-grades/{selectionId}` - 更新成绩信息
- `DELETE /teacher/course-grades/{selectionId}` - 删除指定成绩
## 注意事项
1. **确保MySQL服务已启动**:启动后端服务前,确保 MySQL 服务已启动,数据库已创建并初始化。
2. **确保数据库配置正确**:确保 `application-dev.yml` 中的数据库连接信息正确。
3. **端口不要冲突**:前端默认使用 8080 端口,后端默认使用 8081 端口,请确保端口未被占用。
4. **首次运行需要执行init.sql**:首次运行项目时,需要执行 `init.sql` 文件创建数据库表结构和初始数据。
5. **默认密码为123456**:系统默认用户的密码都是 `123456`,正式使用时建议修改默认密码。
6. **JWT Token认证**:需要认证的接口需在请求头中携带 JWT Token,格式为 `Authorization: Bearer {token}`。
7. **选课时间控制**:管理员可以控制选课功能的启用/禁用状态,设置选课的开始和结束时间。
## 项目结构
Leaf SMS 采用前后端分离的架构,项目结构清晰,便于理解和扩展。
```
leaf-sms/
├── backend-java/ # 后端项目
│ ├── src/
│ │ ├── java/ # Java源码
│ │ │ └── com/leafsms/
│ │ │ ├── common/ # 通用类,包括Result、PageResult等
│ │ │ ├── config/ # 配置类,包括MyBatisPlusConfig、WebMvcConfig等
│ │ │ ├── controller/ # 控制器,处理HTTP请求
│ │ │ ├── entity/ # 实体类,对应数据库表
│ │ │ ├── interceptor/ # 拦截器,包括JWT拦截器
│ │ │ ├── mapper/ # 数据访问层,MyBatis Mapper接口
│ │ │ ├── service/ # 业务逻辑层,包括Service接口和实现类
│ │ │ └── util/ # 工具类,包括JWT工具类、Excel工具类等
│ │ └── resources/ # 配置文件,包括application.yml、application-dev.yml等
│ └── pom.xml # Maven配置文件
├── frontend/ # 前端项目
│ ├── src/
│ │ ├── api/ # API接口,封装所有后端接口调用
│ │ ├── assets/ # 静态资源,包括图片、样式等
│ │ ├── components/ # 组件,包括布局组件等
│ │ ├── views/ # 页面,包括所有业务页面
│ │ ├── router/ # 路由配置
│ │ └── utils/ # 工具函数,包括请求封装等
│ └── package.json # npm配置文件
└── init.sql # 数据库初始化脚本
```
## 常见问题
在使用 Leaf SMS 的过程中,可能会遇到一些常见问题,这里提供一些解决方案。
### 1. 后端启动失败
如果后端启动失败,请检查以下几个方面:
- 检查 JDK 版本是否为 17+,Spring Boot 3 要求 JDK 版本至少为 17
- 检查 MySQL 连接配置是否正确,包括数据库名称、用户名和密码
- 检查端口 8081 是否被其他程序占用
- 确保数据库已经创建并初始化,执行了 `init.sql` 文件
### 2. 前端启动失败
如果前端启动失败,请检查以下几个方面:
- 检查 Node.js 版本是否为 16+,Vue 3 要求 Node.js 版本至少为 16
- 删除 `node_modules` 文件夹,重新执行 `npm install` 安装依赖
- 检查端口 8080 是否被其他程序占用
### 3. 登录失败
如果登录失败,请检查以下几个方面:
- 检查数据库是否已经初始化,执行了 `init.sql` 文件
- 检查邮箱和密码是否正确,默认密码都是 `123456`
- 查看后端日志,排查具体的错误信息
### 4. 接口401错误
如果接口返回 401 错误,表示未授权访问,请检查以下几个方面:
- 检查 JWT Token 是否过期,Token 有效期一般为 24 小时
- 检查请求头是否正确携带 Token,格式为 `Authorization: Bearer {token}`
- 重新登录获取新的 Token
## 开发说明
本项目为本科毕业设计,代码结构清晰,功能完整。如果您想基于本项目进行二次开发,建议按照以下步骤进行:
1. **先熟悉数据库表结构**:了解各个表之间的关系和字段含义,这是理解系统功能的基础。
2. **了解前后端接口对应关系**:查看前端 API 文件和后端 Controller,了解前后端是如何交互的。
3. **参考现有功能模块进行扩展**:在添加新功能时,参考现有功能的实现方式,保持代码风格一致。
4. **遵循现有的代码规范和命名规则**:保持代码风格一致,便于维护和协作。
## 许可证
本项目采用 MIT 许可证,您可以自由使用、修改和分发本项目,但需要保留原作者的版权声明。
---
如果这个项目对您有帮助,请给个 Star 支持一下!⭐
[GitHub 仓库](https://github.com/YangShengzhou03/LeafSMS) • [Fork 本项目](https://github.com/YangShengzhou03/LeafSMS/fork)
Made with ❤️ by YangShengzhou