Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

🏫 小鹏自习室预约系统

现代化智能学习空间管理平台

JavaSpring BootVueElement UIMySQLLicense

功能特性 · 技术栈 · 快速开始 · 项目结构 · 接口文档 · 部署指南 · 📖 开发文档


功能特性

用户端

功能说明
账号注册/登录含数学题验证码防刷,BCrypt 密码加密
自习室浏览查看自习室详情、封面、介绍
可视化选座日期选择 + 上午/下午/夜晚三个时段,座位状态实时展示
预约确认填写姓名手机号后提交预约,防重复提交
预约记录查看历史预约,支持取消、完成后评价评分
积分系统每日签到获积分,逾期扣分,可用积分兑换清零逾期次数
个人中心修改头像、个人信息、密码

管理端

功能说明
数据大屏用户总数、预约总数、自习室数量、积分总量统计
用户管理增删改查用户,支持 Excel 导出
自习室管理维护自习室信息、封面、富文本介绍
座位管理按行列批量生成座位,支持维修状态标记
预约记录管理全量预约记录查询,支持多维度筛选
轮播图管理首页轮播图增删改
积分管理查看全量积分流水
数据统计预约状态饼图、积分收支折线图、实时在场人数

技术栈

后端

技术版本用途
Spring Boot3.3.1核心框架
MyBatis-Plus3.5.7ORM 框架
MySQL8.0+数据库
JWT (jjwt)0.12.x接口鉴权
BCryptSpring Security Crypto密码加密
EasyPoiExcel 导入导出
Lombok简化实体代码
Spring Devtools热重载

前端

技术版本用途
Vue2.6.14核心框架
Element UI2.15.xUI 组件库
Vue Router3.x路由管理
Vuex3.x状态管理
Axios0.18.xHTTP 请求
ECharts5.x数据图表
vue-quill-editor富文本编辑器

快速开始

环境要求

  • JDK 17+
  • Node.js 16+
  • MySQL 8.0+
  • Maven 3.6+

1. 克隆项目

git clone https://github.com/wdf4/studyroom.git
cd studyroom

2. 初始化数据库

-- 创建数据库CREATEDATABASEstudyroom DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 导入表结构和初始数据
mysql -u root -p studyroom < StudyRoom/studyroom.sql

3. 配置后端

编辑 StudyRoom/StudyRoom.springboot/src/main/resources/application.yml

spring:
datasource:
username: ${DB_USERNAME:root} # 数据库账号(可用环境变量覆盖)password: ${DB_PASSWORD:123456} # 数据库密码(可用环境变量覆盖)url: jdbc:mysql://localhost:3306/studyroom?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghaistudyroom:
jwt:
secret: ${JWT_SECRET:StudyRoom@Dev2024} # JWT 密钥(生产环境务必修改)expiry-days: 7

4. 启动后端

cd StudyRoom/StudyRoom.springboot
mvn spring-boot:run
# 或使用 Maven Wrapper
./mvnw spring-boot:run

启动成功:Started StudyRoomApplication ... Tomcat started on port 8088

5. 启动前端

cd StudyRoom/StudyRoom.elementui
npm install
npm run serve

启动成功:App running at: http://localhost:8080

6. 测试账号

角色账号密码入口
管理员adminadminhttp://localhost:8080/#/Login
普通用户test0001test0001http://localhost:8080/#/Login

登录时角色选择对应选项(管理员 / 普通用户)。


项目结构

studyroom/
├── StudyRoom/
│ ├── StudyRoom.elementui/ # 前端项目(Vue 2 + Element UI)
│ │ ├── public/
│ │ └── src/
│ │ ├── assets/ # 静态资源(图片、字体)
│ │ ├── components/ # 全局公共组件
│ │ │ ├── Tables/ # PaginationTable 分页表格
│ │ │ ├── Upload/ # 图片/文件上传
│ │ │ ├── Select/ # 远程下拉选择
│ │ │ └── RichText/ # 富文本编辑器
│ │ ├── css/
│ │ │ └── modern-theme.css # 全局 CSS 设计系统(变量/工具类)
│ │ ├── router/ # 路由配置
│ │ ├── store/ # Vuex 状态管理
│ │ ├── utils/ # 工具函数(request、cache、comm)
│ │ └── views/
│ │ ├── Admin/ # 管理后台页面(9个页面)
│ │ ├── Front/ # 用户前台页面(7个页面)
│ │ ├── Login.vue
│ │ └── Register.vue
│ │
│ ├── StudyRoom.springboot/ # 后端项目(Spring Boot 3)
│ │ └── src/main/java/com/studyroom/
│ │ ├── controller/ # REST 控制器(8个)
│ │ ├── service/ # 业务逻辑接口 + 实现
│ │ ├── mapper/ # MyBatis-Plus Mapper
│ │ ├── entity/ # 数据库实体(继承 BaseEntity)
│ │ ├── dto/ # 数据传输对象
│ │ │ └── query/ # 分页查询输入参数
│ │ ├── enums/ # 枚举(角色/预约状态/时间段)
│ │ ├── job/ # 定时任务(自动逾期/完成/积分)
│ │ └── tools/ # 工具(JWT、拦截器、全局异常)
│ │
│ └── studyroom.sql # 数据库建表脚本 + 初始数据
│
└── README.md

接口说明

后端基础路径:http://localhost:8088

所有需要鉴权的接口请在请求头携带:

Authorization: Bearer <token>

核心接口列表

模块方法路径说明
用户POST/User/SignIn登录,返回 JWT Token
用户POST/User/Register注册新用户
用户POST/User/GetByToken通过 Token 获取用户信息
用户POST/User/ChangePassword修改密码
验证码POST/Captcha/Generate生成数学题验证码
验证码POST/Captcha/Verify验证答案
自习室POST/Room/List分页查询自习室
座位POST/Seat/GetArrange获取指定日期座位排布及占用状态
座位POST/Seat/GetSevenDays获取最近可预约的 7 天日期
预约POST/AppointRecord/CheckIsAbleAppoint检查是否可预约
预约POST/AppointRecord/ToOrder提交预约
预约POST/AppointRecord/CancelAppoint取消预约
预约POST/AppointRecord/Comment评价预约记录
积分POST/Integral/GetMyIntegralData获取我的积分汇总
积分POST/Integral/OverdueTimesClear积分兑换清零逾期次数
文件POST/File/Upload上传图片/文件,返回 URL

部署指南

前端打包

cd StudyRoom/StudyRoom.elementui
npm run build
# 产物在 dist/ 目录,部署到 Nginx 的 root 即可

Nginx 配置示例(处理 Vue Router history 模式):

server{listen80;root /var/www/studyroom/dist;indexindex.html;location / {try_files$uri$uri/ /index.html;}location /api/ {proxy_passhttp://localhost:8088/;}}

后端打包

cd StudyRoom/StudyRoom.springboot
mvn clean package -DskipTests
java -jar target/StudyRoom-*.jar

使用环境变量覆盖配置(生产环境推荐):

export DB_USERNAME=prod_user
export DB_PASSWORD=strong_password
export JWT_SECRET=your-secret-key-at-least-32-chars
java -jar target/StudyRoom-*.jar

Docker 一键启动(可选)

# 启动 MySQL
docker run -d --name studyroom-mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=studyroom \
-p 3306:3306 mysql:8.0
# 导入数据
docker exec -i studyroom-mysql mysql -uroot -p123456 studyroom < StudyRoom/studyroom.sql

定时任务

系统内置两个定时任务,随后端启动自动运行:

任务类周期作用
AppointRecordJob每10秒检查逾期预约 → 累加逾期次数;检查已完成预约 → 更新状态
IntegralMockJob每10秒模拟积分数据(演示用)

注意事项

  1. 密码安全:初始数据库中密码为明文,系统使用 BCrypt 加密。生产环境请通过注册或修改密码接口更新为加密密码
  2. JWT 密钥:生产环境务必通过环境变量 JWT_SECRET 设置强密钥(建议32位以上随机字符串)
  3. 文件上传:上传的图片默认存储在服务器本地,生产环境建议改为对象存储(OSS/MinIO)
  4. 首次运行:建议先在管理后台添加自习室、座位和轮播图,再体验前台功能

License

MIT © 2026 小鹏自习室预约系统

About

🏫 小鹏自习室预约系统 — SpringBoot 3 + Vue 2 + Element UI | 支持座位预约、积分系统、验证码、JWT鉴权、BCrypt加密

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages