实验室预约管理系统(开源 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


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

相关推荐
迪巴拉15254 分钟前
基于Springboot+Vue的制造业采购管理系统
vue.js·spring boot·后端
开源能源管理系统7 分钟前
MyEMS开源能源管理系统结合零碳工厂
系统架构·开源·能源·制造·能源管理系统
qq_124987075322 分钟前
基于springboot+vue的热门文创内容推荐平台(源码+论文+部署+安装)
vue.js·spring boot·后端·spring·毕业设计·计算机毕设
a11177635 分钟前
星球浏览 漫游(纯html 开源)
前端·开源·html
郝学胜-神的一滴41 分钟前
FastAPI:Python 高性能 Web 框架的优雅之选
开发语言·前端·数据结构·python·算法·fastapi
悟空码字2 小时前
一款免费开源的支付系统,支持支付宝、微信、海科、乐刷等通道,功能强大
开源·支付系统
parade岁月2 小时前
DOM 里有 Tailwind class,为什么样式还是不生效?v4 闭环修复实战
前端·vue.js
ashuicoder2 小时前
vue文件自动生成路由会成为主流
前端·vue.js
白中白121382 小时前
Vue系列-4
前端·javascript·vue.js
2301_816997882 小时前
虚拟DOM与Diff算法
前端·vue.js·算法