# 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 部署
[![GitHub stars](https://img.shields.io/github/stars/YangShengzhou03/LeafSMS?style=for-the-badge)](https://github.com/YangShengzhou03/LeafSMS/stargazers) [![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)](https://github.com/YangShengzhou03/LeafSMS) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.1.0-6DB33F?style=for-the-badge&logo=spring-boot)](https://spring.io/projects/spring-boot) [![Vue.js](https://img.shields.io/badge/Vue-3-4FC08D?style=for-the-badge&logo=vue.js)](https://vuejs.org/) [![Element Plus](https://img.shields.io/badge/Element%20Plus-2.10.4-409EFF?style=for-the-badge&logo=element)](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。整个系统完全免费开源,适用于毕业设计、商业应用及教育管理场景,为学校、培训机构等教育机构提供灵活高效的解决方案。 ## 系统预览 ### 首页 ![首页](https://gitee.com/Yangshengzhou/leaf-sms/raw/master/preview/index.png) ### 登录页面 ![登录页面](https://gitee.com/Yangshengzhou/leaf-sms/raw/master/preview/login.png) ### 注册页面 ![注册页面](https://gitee.com/Yangshengzhou/leaf-sms/raw/master/preview/register.png) ### 学生首页 ![学生首页](https://gitee.com/Yangshengzhou/leaf-sms/raw/master/preview/stu-library.png.png) ### 教师首页 ![教师首页](https://gitee.com/Yangshengzhou/leaf-sms/raw/master/preview/tea-index.png) ## 核心特性 - **完善的三端权限控制**:系统分为管理员、教师、学生三个角色,每个角色都有独立的功能模块和权限控制。 - **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