# SeatReserve **Repository Path**: tree10086/seat-reserve ## Basic Information - **Project Name**: SeatReserve - **Description**: 图书馆座位预约系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2026-04-28 - **Last Updated**: 2026-04-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 图书馆座位预约系统 一个基于 Spring Boot 3 + Vue 3 的图书馆座位预约管理系统,支持座位可视化、预约、签到、暂离、退座、信用分机制等功能。 ## 技术栈 ### 后端 - Spring Boot 3 - Spring Security + JWT - MyBatis-Plus - MySQL 8.0+ - Maven 3.8+ ### 前端 - Vue 3 (Composition API) - Pinia (状态管理) - Vue Router (路由) - Element Plus (UI 组件库) - Axios (HTTP 客户端) - Vite (构建工具) ## 功能特性 ### 用户功能 - 用户注册/登录 - 阅览室浏览 - 座位可视化选择 - 座位预约/取消 - 签到/暂离/退座 - 个人中心 - 信用分查看 - 违规记录查看 ### 管理员功能 - 用户管理 - 阅览室管理 - 座位管理 - 预约管理 - 违规记录管理 - 数据统计 ### 系统机制 - 信用分制度(默认100分,违规扣分,低于60禁止预约) - 自动超时处理(签到超时15分钟、暂离超时30分钟) - 定时任务清理超时预约 ## 快速开始 ### 环境准备 - JDK 17+ - MySQL 8.0+ - Node.js 16+ - Maven 3.8+ ### 后端启动 1. 创建数据库: ```sql CREATE DATABASE seat_reserve CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 2. 执行初始化脚本: ```bash # 执行 seatReserve-backend/sql/init.sql ``` 3. 修改数据库配置: ```yaml # seatReserve-backend/src/main/resources/application.yml spring: datasource: url: jdbc:mysql://localhost:3306/seat_reserve?... username: your_username password: your_password ``` 4. 启动应用: ```bash cd seatReserve-backend mvn spring-boot:run ``` ### 前端启动 1. 安装依赖: ```bash cd seatReserve-frontend npm install ``` 2. 启动开发服务器: ```bash npm run dev ``` 3. 访问地址:http://localhost:5173 ## 测试账号 - 管理员:admin / admin123 - 普通用户:zhangsan / 123456 ## 项目结构 ``` . ├── seatReserve-backend/ # 后端项目 │ ├── sql/ # 数据库脚本 │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── com.library.seat/ │ │ ├── common/ # 公共类 │ │ ├── config/ # 配置类 │ │ ├── controller/ # 控制器 │ │ ├── dto/ # 数据传输对象 │ │ ├── entity/ # 实体类 │ │ ├── exception/ # 异常处理 │ │ ├── mapper/ # Mapper接口 │ │ ├── scheduler/ # 定时任务 │ │ ├── security/ # 安全相关 │ │ ├── service/ # 服务层 │ │ └── vo/ # 视图对象 │ └── resources/ │ ├── mapper/ # MyBatis映射文件 │ └── application.yml ├── seatReserve-frontend/ # 前端项目 │ ├── src/ │ │ ├── api/ # API接口 │ │ ├── components/ # 公共组件 │ │ ├── layouts/ # 页面布局 │ │ ├── router/ # 路由配置 │ │ ├── stores/ # 状态管理 │ │ ├── styles/ # 样式文件 │ │ ├── utils/ # 工具函数 │ │ ├── views/ # 页面视图 │ │ │ ├── admin/ # 管理员页面 │ │ │ └── ... # 用户页面 │ │ ├── App.vue │ │ └── main.js │ ├── index.html │ └── vite.config.js └── README.md ``` ## 核心业务流程 ### 预约流程 1. 用户选择阅览室 → 查看座位图 2. 点击空闲座位 → 确认预约 3. 系统检查信用分(≥60)→ 创建预约记录 4. 用户需在15分钟内签到,否则自动取消 ### 使用流程 1. 预约成功后 → 状态:已预约 2. 用户签到 → 状态:使用中 3. 用户暂离 → 状态:暂离(30分钟倒计时) 4. 用户返回签到 → 状态:使用中 5. 用户退座 → 状态:已完成 ### 信用分机制 - 初始分数:100分 - 违规行为扣分: - 未按时签到:-10分 - 未按时返回座位:-10分 - 未正常退座:-20分 - 分数低于60分:禁止预约座位 - 每月1日重置为100分(自动定时任务) ## API 文档 ### 认证接口 - POST `/api/auth/login` - 用户登录 - POST `/api/auth/register` - 用户注册 ### 用户接口 - GET `/api/user/info` - 获取用户信息 - PUT `/api/user/info` - 更新用户信息 - GET `/api/user/violations` - 获取违规记录 ### 阅览室接口 - GET `/api/rooms` - 获取所有阅览室列表 - GET `/api/rooms/{id}` - 获取指定阅览室详情 ### 座位接口 - GET `/api/seats/room/{roomId}` - 获取指定阅览室的所有座位 ### 预约接口 - GET `/api/reservations/current` - 获取当前预约 - GET `/api/reservations/history` - 获取历史预约 - POST `/api/reservations` - 创建预约 - POST `/api/reservations/sign-in` - 签到 - POST `/api/reservations/leave` - 暂离 - POST `/api/reservations/return` - 返回座位 - POST `/api/reservations/end` - 结束使用 - DELETE `/api/reservations/{id}` - 取消预约 ### 管理员接口 - GET `/api/admin/users` - 获取用户列表 - PUT `/api/admin/users/{id}/credit` - 更新用户信用分 - GET `/api/admin/rooms` - 获取阅览室列表 - POST `/api/admin/rooms` - 创建阅览室 - PUT `/api/admin/rooms/{id}` - 更新阅览室 - DELETE `/api/admin/rooms/{id}` - 删除阅览室 - GET `/api/admin/seats/room/{roomId}` - 获取座位列表 - POST `/api/admin/seats` - 创建座位 - PUT `/api/admin/seats/{id}` - 更新座位 - DELETE `/api/admin/seats/{id}` - 删除座位 - GET `/api/admin/reservations` - 获取预约列表 - GET `/api/admin/violations` - 获取违规记录列表 ## 定时任务 - 每分钟检查超时预约(签到超时、暂离超时) - 每月1日重置用户信用分 - 每天凌晨清理过期预约记录 ## 注意事项 1. 系统时间以服务器时间为准 2. 所有时间字段均为北京时间 3. 密码采用BCrypt加密存储 4. JWT Token有效期为24小时 5. 建议生产环境修改JWT密钥 ## 开发规范 ### 后端规范 - 统一使用Result封装返回结果 - 全局异常处理BusinessException - 使用DTO进行参数校验 - VO对象用于返回给前端的数据 ### 前端规范 - 使用Pinia管理全局状态 - 统一Axios请求封装 - 路由守卫进行权限控制 - SCSS变量统一管理样式 ## 部署说明 ### 后端部署 ```bash # 打包 mvn clean package # 运行 java -jar target/seat-reserve-1.0.0.jar ``` ### 前端部署 ```bash # 构建生产版本 npm run build # 部署dist目录到Nginx/Apache ``` ### Nginx配置示例 ```nginx server { listen 80; server_name your-domain.com; location / { root /path/to/dist; try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://localhost:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ```