实验室预约管理系统(开源 FastAPI + Vue )

源码下载:

「28-实验室预约系统」
链接:https://pan.quark.cn/s/46e6d24d4ff6

实验室预约管理系统

一个基于 FastAPI + SQLite + HTML/JS 的实验室预约管理系统,支持学生预约、教师审核、管理员管理的完整流程。

项目简介

本系统旨在解决学校实验室预约管理难题,提供便捷的在线预约服务。学生可以随时随地查看实验室空闲情况并提交预约申请,教师可以审核预约请求,管理员可以管理用户和实验室资源。

功能特性

学生端

  • 浏览实验室列表及详细信息(位置、容量、设备等)

  • 选择日期和标准时间段进行预约

  • 查看个人预约记录和状态

  • 实验室使用签到/签退功能

  • 取消预约功能

  • 个人信息管理

教师端

  • 查看管理的实验室概览

  • 审核学生预约申请(通过/拒绝)

  • 查看实验室使用统计

  • 查看今日预约、本周预约统计

  • 个人信息管理

管理员端

  • 系统数据仪表盘(用户数、实验室数、预约数等统计)

  • 用户管理(添加、编辑、删除用户,重置密码)

  • 实验室管理(创建、编辑、删除实验室)

  • 预约记录查看(支持筛选、分页)

  • 个人信息管理

技术栈

后端

  • FastAPI - 现代化的 Python Web 框架

  • SQLAlchemy - Python ORM 工具

  • Pydantic - 数据验证和序列化

  • SQLite - 轻量级数据库

  • JWT - 用户认证

  • bcrypt - 密码加密

前端

  • 纯 JavaScript - 无框架依赖

  • Element UI CSS - UI 样式框架

  • 原生 HTML5/CSS3 - 页面结构和样式

项目结构

复制代码
E:\aaa-lab\
├── backend\                    # 后端代码
│   ├── main.py                 # FastAPI 应用入口
│   ├── database.py             # 数据库连接配置
│   ├── models.py               # SQLAlchemy ORM 模型
│   ├── schemas.py              # Pydantic 验证模型
│   ├── auth.py                 # JWT 认证中间件
│   ├── config.py               # 配置文件
│   ├── utils.py                # 工具函数
│   ├── seed_data.py            # 初始化测试数据
│   └── routers\                # 路由模块
│       ├── auth.py             # 认证接口
│       ├── admin.py            # 管理员接口
│       ├── teacher.py          # 教师接口
│       ├── student.py          # 学生接口
│       ├── laboratory.py       # 实验室接口
│       └── booking.py          # 预约接口
├── frontend\                   # 前端代码
│   ├── index.html              # 登录页面
│   ├── admin.html              # 管理员端
│   ├── teacher.html            # 教师端
│   └── student.html            # 学生端
├── uploads\                    # 文件上传目录
├── lab.db                      # SQLite 数据库文件
├── requirements.txt            # Python 依赖
└── README.md                   # 项目说明文档

安装部署

环境要求

  • Python 3.9+

  • pip 包管理器

安装步骤

  1. 克隆或下载项目
复制代码
cd E:\aaa-lab
  1. 安装 Python 依赖
复制代码
cd backend
pip install -r requirements.txt
  1. 初始化数据库
复制代码
python seed_data.py

这会创建 SQLite 数据库并插入测试数据。

  1. 启动后端服务
复制代码
python -m uvicorn main:app --host 0.0.0.0 --port 8888 --reload

服务将在 http://localhost:8888 启动

  1. 访问前端

默认测试账号

角色 用户名 密码 说明
管理员 admin admin123 系统管理员
教师 teacher001 teacher123 计算机学院教授
学生 student001 student123 计科2101班学生

API 接口文档

启动服务后访问以下地址查看完整 API 文档:

主要接口

认证接口
复制代码
POST   /api/auth/login           # 用户登录
GET    /api/auth/me              # 获取当前用户信息
PUT    /api/auth/me              # 更新个人信息
POST   /api/auth/change-password # 修改密码
实验室接口
复制代码
GET    /api/laboratories           # 获取实验室列表
GET    /api/laboratories/{id}      # 获取实验室详情
POST   /api/laboratories           # 创建实验室(管理员)
PUT    /api/laboratories/{id}      # 更新实验室(管理员)
DELETE /api/laboratories/{id}      # 删除实验室(管理员)
GET    /api/laboratories/{id}/slots # 获取可用时间段
预约接口
复制代码
POST   /api/bookings                # 创建预约
GET    /api/bookings                # 获取预约列表
GET    /api/bookings/{id}           # 获取预约详情
PUT    /api/bookings/{id}/cancel    # 取消预约
PUT    /api/bookings/{id}/approve   # 审核通过(教师)
PUT    /api/bookings/{id}/reject    # 审核拒绝(教师)
POST   /api/bookings/{id}/check-in  # 签到
POST   /api/bookings/{id}/check-out # 签退
管理员接口
复制代码
GET    /api/admin/dashboard        # 仪表盘统计数据
GET    /api/admin/users            # 用户列表(支持分页)
POST   /api/admin/users            # 添加用户
PUT    /api/admin/users/{id}       # 更新用户
DELETE /api/admin/users/{id}       # 删除用户
POST   /api/admin/users/{id}/reset-password # 重置密码

核心功能说明

1. 标准时间段

系统提供5个标准时间段,学生可直接选择预约:

  • 上午:08:00-10:00、10:00-12:00

  • 下午:14:00-16:00、16:00-18:00

  • 晚上:19:00-21:00

无需管理员预先配置时间段,简化预约流程。

2. 预约状态流转

复制代码
pending(待审核)→ approved(已通过)→ completed(已完成)
                      ↓
                  rejected(已拒绝)
                  cancelled(已取消)

3. 权限控制

  • 学生:只能查看和管理自己的预约

  • 教师:只能审核所管理实验室的预约

  • 管理员:拥有所有权限

4. 签到签退

  • 学生在预约开始后可签到

  • 签退后会自动标记预约为"已完成"状态

  • 已签到的预约无法取消

数据库设计

系统包含6张核心数据表:

users(用户表)

存储所有用户的基本信息和认证凭据。

teachers(教师扩展表)

存储教师的扩展信息(职称、所属院系)。

students(学生扩展表)

存储学生的扩展信息(学号、班级、专业)。

laboratories(实验室表)

存储实验室的基本信息(名称、位置、容量、设备、管理员等)。

time_slots(时间段表)

存储实验室的时间段配置(当前未使用,保留用于扩展)。

bookings(预约表)

存储所有的预约记录,包含预约状态、签到签退时间等。

开发说明

添加新的 API 接口

  1. backend/routers/ 对应模块中添加路由函数

  2. backend/schemas.py 中定义请求/响应模型

  3. 更新前端页面调用新接口

修改前端样式

  • 所有页面使用 Element UI CSS 框架

  • 图标使用 Element UI 图标类名(如 el-icon-user

  • 自定义样式在各页面的 <style> 标签中

数据库迁移

如果修改了数据模型:

复制代码
# 删除旧数据库
rm lab.db
​
# 重新初始化
python seed_data.py

常见问题

Q: 忘记管理员密码怎么办?

A: 运行 python seed_data.py 会重置所有测试账号密码。

Q: 如何修改端口?

A: 修改启动命令中的 --port 参数,如:--port 8000

Q: 前端页面无法加载?

A: 检查后端服务是否正常启动,访问 http://localhost:8888/api/docs 验证

Q: 预约时间段为什么不显示?

A: 确保后端服务已重启,新版本API返回标准时间段

技术支持

如有问题,请查看:

  1. 后端日志:控制台输出

  2. 浏览器控制台:F12 查看前端错误

  3. API 文档:http://localhost:8888/api/docs

更新日志

v1.0.0 (2026-02-02)

  • 初始版本发布

  • 实现用户认证和权限管理

  • 实现学生预约功能

  • 实现教师审核功能

  • 实现管理员管理功能

  • 实现签到签退功能

  • 实现标准时间段预约

  • 实现分页功能

  • 修复按钮显示问题

许可证

MIT License

作者

AAA Lab Team


感谢使用实验室预约管理系统!

相关推荐
玄同7652 小时前
OpenClaw 完全指南:部署你的 7×24 小时开源 AI 助手
人工智能·开源·智能体·agentic rag·openclaw·clawd·molt
我是伪码农2 小时前
Vue 2.2
前端·javascript·vue.js
时光追逐者2 小时前
一个基于 .NET + Vue 实现的通用权限管理平台(RBAC模式),前后端分离模式,开箱即用!
前端·vue.js·c#·.net·.net core
Aotman_2 小时前
Vue el-table 表尾合计行
前端·javascript·vue.js·elementui·前端框架·ecmascript
编程猪猪侠2 小时前
Vue3 + Ant Design Vue 实现 Table 表格嵌套 Radio 单选框
javascript·vue.js·anti-design-vue
phltxy2 小时前
Vue3 + Vite:从入门到实战——核心指令全解析
vue.js·vue
静小谢2 小时前
vue3实现语言切换vue-i18n
前端·javascript·vue.js
东东5162 小时前
资产管理信息系统ssm+vue
前端·javascript·vue.js
独自归家的兔2 小时前
mycat报错:63529
数据库·开源·mycat