医院挂号预约系统(开源 Fastapi+vue2)

「27-医院挂号预约系统」源码下载
链接:https://pan.quark.cn/s/c6503912fdc7

医院挂号预约系统

一个完整的医院挂号预约系统,支持患者预约、医生接诊、管理员管理等功能。

功能特性

患者端

  • 用户注册/登录

  • 浏览科室和医生

  • 预约挂号

  • 在线支付

  • 查看预约记录

  • 评价医生

  • 个人资料管理

  • 消息通知

医生端

  • 查看排班

  • 查看今日患者

  • 接诊叫号

  • 写病历

  • 开处方

  • 开检查单

管理员端

  • 科室管理

  • 医生管理

  • 排班管理

  • 号源管理

  • 预约管理

  • 现场取号

  • 用户管理

  • 数据统计

技术栈

后端

  • Python 3.9+

  • FastAPI 0.104+

  • SQLAlchemy 2.0+

  • SQLite / MySQL

  • Pydantic 2.5+

  • JWT 认证

前端

  • Vue.js 2.7+

  • Element UI 2.15+

  • Axios

  • ECharts 5.x

项目结构

复制代码
hospital_system/
├── backend/                    # 后端目录
│   ├── main.py                # FastAPI 入口
│   ├── database.py            # 数据库配置
│   ├── models.py              # SQLAlchemy 模型(13张表)
│   ├── schemas.py             # Pydantic 验证模型
│   ├── auth.py                # JWT 认证
│   ├── config.py              # 配置文件
│   ├── utils.py               # 工具函数
│   ├── seed_data.py           # 初始化测试数据
│   └── routers/
│       ├── __init__.py
│       ├── auth.py            # 认证路由
│       ├── admin.py           # 管理员路由
│       ├── doctor.py          # 医生路由
│       └── patient.py         # 患者路由
├── frontend/                   # 前端目录
│   ├── index.html             # 登录页
│   ├── admin.html             # 管理员端
│   ├── doctor.html            # 医生端
│   ├── patient.html           # 患者端
│   └── asset/                 # 静态资源
│       ├── vue.js
│       ├── element-ui.js
│       ├── element-ui.css
│       ├── axios.min.js
│       ├── echarts.min.js
│       └── fonts/
├── uploads/                    # 文件上传目录
├── hospital.db                 # SQLite 数据库文件
├── requirements.txt            # Python 依赖
└── README.md                   # 项目说明

快速开始

1. 安装依赖

复制代码
pip install -r requirements.txt

2. 初始化数据库

复制代码
cd backend
python seed_data.py

3. 启动服务器

复制代码
cd backend
python main.py

服务器将在 http://127.0.0.1:8000 启动

4. 访问系统

测试账号

角色 用户名 密码 说明
管理员 admin admin123 系统管理员
医生 doctor001 doctor123 内科主任
医生 doctor002 doctor123 内科副主任
医生 doctor003 doctor123 外科主治
医生 doctor004 doctor123 儿科主任
... ... ... 共10个测试医生
患者 patient001 patient123 测试患者1
患者 patient002 patient123 测试患者2
... ... ... 共5个测试患者

数据库设计

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

表名 说明
users 用户表(基础表)
patients 患者表
doctors 医生表
departments 科室表
schedules 排班表
appointments 预约表
registrations 挂号记录表
medical_records 病历表
prescriptions 处方表
examinations 检查单表
reviews 评价表
announcements 公告表
notifications 消息通知表

业务流程

患者预约流程

复制代码
注册/登录 → 选择科室 → 选择医生 → 选择时间 → 确认预约 → 在线支付 → 就诊提醒 → 现场取号 → 就诊 → 评价

医生接诊流程

复制代码
登录 → 查看排班 → 查看今日患者 → 接诊叫号 → 开始就诊 → 写病历 → 开处方/检查单 → 完成就诊

管理员管理流程

复制代码
登录 → 科室管理 → 医生管理 → 排班管理 → 数据统计 → 系统维护

API 接口

认证接口

复制代码
POST /api/auth/login          # 登录
POST /api/auth/register       # 注册(患者)
GET  /api/auth/me             # 获取当前用户信息
PUT  /api/auth/me             # 更新个人信息
POST /api/auth/change-password # 修改密码

患者接口

复制代码
GET  /api/patient/departments        # 获取科室列表
GET  /api/patient/doctors            # 获取医生列表
GET  /api/patient/schedules/available # 获取可用时段
POST /api/patient/appointments       # 创建预约
GET  /api/patient/appointments       # 获取我的预约
POST /api/patient/appointments/{id}/pay # 支付预约
PUT  /api/patient/appointments/{id}/cancel # 取消预约
POST /api/patient/reviews            # 评价医生

医生接口

复制代码
GET  /api/doctor/dashboard           # 仪表盘统计
GET  /api/doctor/registrations       # 获取今日患者
PUT  /api/doctor/registrations/{id}/call # 叫号
PUT  /api/doctor/registrations/{id}/start-treatment # 开始就诊
POST /api/doctor/medical-records     # 写病历
POST /api/doctor/prescriptions       # 开处方
POST /api/doctor/examinations        # 开检查单

管理员接口

复制代码
GET  /api/admin/dashboard            # 仪表盘统计
GET/POST/PUT/DELETE /api/admin/departments # 科室管理
GET/POST/PUT/DELETE /api/admin/doctors     # 医生管理
GET/POST/PUT/DELETE /api/admin/schedules   # 排班管理
GET  /api/admin/appointments         # 预约管理
POST /api/admin/registrations/on-site # 现场挂号
GET/POST/PUT/DELETE /api/admin/announcements # 公告管理

配置说明

修改配置(config.py

复制代码
# JWT 密钥(生产环境请修改)
SECRET_KEY = "your-secret-key-here"
​
# Token 有效期
ACCESS_TOKEN_EXPIRE_MINUTES = 60 * 24 * 7  # 7天
​
# 文件上传配置
MAX_FILE_SIZE = 50 * 1024 * 1024  # 50MB
​
# 挂号配置
REGISTRATION_FEE = 10  # 挂号费(元)
APPOINTMENT_ADVANCE_DAYS = 7  # 可提前预约天数

切换到 MySQL

修改 database.py

复制代码
# SQLite(默认)
DATABASE_URL = f"sqlite:///{os.path.join(BASE_DIR, 'hospital.db')}"
​
# MySQL
DATABASE_URL = "mysql+pymysql://user:password@localhost/hospital_db"

开发说明

添加新的 API

  1. backend/models.py 添加数据模型

  2. backend/schemas.py 添加验证模型

  3. backend/routers/ 对应文件添加路由

  4. 在前端添加调用逻辑

添加新的前端页面

  1. 创建 HTML 文件在 frontend/ 目录

  2. backend/main.py 添加路由

常见问题

Q: 如何修改端口?

A: 修改 backend/main.py 最后一行的 port=8000

Q: 如何重置数据库?

A: 删除 hospital.db 文件,重新运行 python seed_data.py

Q: 如何添加新的医生?

A: 使用管理员账号登录,进入"医生管理"页面添加

Q: 预约后如何支付?

A: 使用测试患者账号登录,进入"我的预约",点击"去支付"(使用余额支付)

部署说明

使用 Docker 部署

复制代码
FROM python:3.9-slim
​
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
​
COPY backend ./backend
COPY frontend ./frontend
​
EXPOSE 8000
​
CMD ["python", "backend/main.py"]

使用 Nginx 反向代理

复制代码
server {
    listen 80;
    server_name your-domain.com;
​
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

许可证

MIT License

贡献

欢迎提交 Issue 和 Pull Request!

联系方式

如有问题,请联系开发者。


注意: 本系统仅用于学习和演示目的,生产环境使用请进行安全加固和性能优化。

相关推荐
0思必得02 小时前
[Web自动化] Selenium处理iframe和frame
前端·爬虫·python·selenium·自动化·web自动化
计算机毕设VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue蛋糕店管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
行走的陀螺仪4 小时前
uni-app + Vue3编辑页/新增页面给列表页传参
前端·vue.js·uni-app
摘星编程4 小时前
OpenHarmony + RN:Calendar日期选择功能
python
Yvonne爱编码4 小时前
JAVA数据结构 DAY3-List接口
java·开发语言·windows·python
一方_self4 小时前
了解和使用python的click命令行cli工具
开发语言·python
小芳矶4 小时前
Dify本地docker部署踩坑记录
python·docker·容器
We་ct5 小时前
LeetCode 205. 同构字符串:解题思路+代码优化全解析
前端·算法·leetcode·typescript
2301_822366355 小时前
使用Scikit-learn构建你的第一个机器学习模型
jvm·数据库·python