基于springboot2+vue3的医院挂号就诊系统
1. 获取地址
https://fifteen.xiaobias.com/source/210
2. 项目简介
本项目为一款医院挂号就诊系统,旨在为患者提供便捷的在线挂号服务,并为医院管理人员、医生提供后台管理功能。系统支持用户注册登录、浏览医生信息、在线挂号、支付挂号费用、查询挂号记录,以及查看健康教育和公告信息。后台管理端支持对用户、医生、挂号订单、健康教育内容、公告等进行管理和审核,并通过字典表实现数据动态配置。
项目名称(数据库):yiyuanguanhaojiuzhen
中文名称:医院挂号就诊系统
3. 技术栈
| 层次 | 技术选型 |
|---|---|
| 后端框架 | Spring Boot 2.2.2.RELEASE + MyBatis-Plus + Apache Shiro |
| 数据库 | MySQL 5.7.32-log |
| 前端(后台) | Vue.js + Element UI + ECharts + Axios |
| 前端(前台) | Layui + jQuery + Vue.js + Element UI(部分) |
| 其他 | Fastjson、Hutool、Apache Commons Lang3 |
4. 详细介绍
4.1 系统角色
系统包含三种角色:
- 管理员(
users表) - 医生(
yisheng表) - 用户(患者,
yonghu表)
4.2 功能模块
4.2.1 前台(面向普通用户)
- 医生浏览与预约:用户可查看医生列表(按科室、职位筛选),查看医生详情(履历、价格、挂号须知),点击“预约挂号”填写挂号日期、时间段(上午/下午)并提交。
- 在线支付:挂号时自动从用户余额中扣除挂号费用,余额不足时可充值(模拟充值页面)。
- 挂号记录:用户可在个人中心查看自己的挂号记录及审核状态(审核中/通过/拒绝)。
- 健康教育:浏览医院发布的健康科普文章(支持富文本)。
- 公告信息:查看医院公告。
- 在线咨询:用户可以向管理员发送问题,管理员后台回复,支持实时刷新显示。
- 个人中心:修改个人信息(姓名、手机号、身份证、邮箱、头像、性别)、充值余额、修改密码。
4.2.2 后台(管理员端 - Vue + Element UI)
- 管理员管理:对系统管理员账号进行增删改查。
- 用户管理:查看、修改、删除用户信息(软删除)。
- 医生管理:增删改查医生信息(工号、账户、科室、职位、职称、头像、联系方式、挂号须知、邮箱、挂号价格、履历介绍)。
- 挂号管理:查看所有用户的挂号订单,审核(通过/拒绝)并填写审核结果。
- 健康教育管理:发布/编辑/删除健康教育文章(支持富文本)。
- 公告信息管理:发布/编辑/删除公告。
- 在线咨询管理:查看用户提问并回复,状态标记(未回复/已回复)。
- 基础数据管理(字典表):动态配置科室、职位、健康教育类型、公告类型、挂号状态、时间类型(上午/下午)、审核状态等。
- 轮播图管理:配置前台页面轮播图片。
4.2.3 医生端
- 查看自己的挂号记录(待审核、已就诊等)。
- 查看健康教育和公告信息。
4.3 数据库表结构(核心表)
| 表名 | 说明 | 主要字段 |
|---|---|---|
yonghu | 用户表 | 账户、密码、姓名、手机号、身份证、邮箱、性别、余额、逻辑删除 |
yisheng | 医生表 | 工号、账户、密码、姓名、科室、职位、职称、头像、电话、邮箱、挂号价格、履历 |
guahao | 挂号记录表 | 医生ID、用户ID、就诊识别码、挂号日期、时间类型、挂号状态、审核状态、审核结果 |
jiankangjiaoyu | 健康教育表 | 标题、类型、图片、发布时间、内容、逻辑删除 |
news | 公告表 | 名称、图片、类型、发布时间、内容 |
chat | 在线咨询表 | 用户ID、问题、问题时间、回复、回复时间、状态、数据类型 |
dictionary | 字典表 | 字段编码、字段名、编码索引、编码名称、父级ID |
config | 配置表(轮播图等) | 配置参数名、值 |
users | 管理员表 | 用户名、密码、角色 |
token | Token表(登录认证) | 用户ID、用户名、表名、角色、token、过期时间 |
5. 部分代码
5.1 后端 - 挂号订单保存(含余额扣减)
// 文件:GuahaoController.java@RequestMapping("/add")publicRadd(@RequestBodyGuahaoEntityguahao,HttpServletRequestrequest){// ... 查重、校验 ...YonghuEntityuserId=yonghuService.selectById((Integer)request.getSession().getAttribute("userId"));YishengEntityyishengEntity=yishengService.selectById(guahao.getYishengId());if(userId.getNewMoney()<yishengEntity.getYishengNewMoney()){returnR.error("余额不足请充值");}userId.setNewMoney(userId.getNewMoney()-yishengEntity.getYishengNewMoney());yonghuService.updateById(userId);guahaoService.insert(guahao);returnR.ok();}5.2 前端 - 医生列表展示(Vue)
<!-- 文件:src/main/resources/admin/admin/src/views/modules/yisheng/list.vue 风格示例 --> <template> <div class="app-container"> <el-form :model="queryParams" ref="queryForm" ...> <el-form-item label="医生名称"> <el-input v-model="queryParams.yishengName" placeholder="请输入医生名称" /> </el-form-item> <el-form-item label="科室"> <el-select v-model="queryParams.yishengTypes" placeholder="请选择科室"> <el-option label="全部" value="" /> <el-option v-for="item in yishengTypesList" :key="item.codeIndex" :label="item.indexName" :value="item.codeIndex" /> </el-select> </el-form-item> <el-button type="primary" @click="handleQuery">搜索</el-button> </el-form> <el-table :data="yishengList" ...> <el-table-column prop="yishengName" label="医生名称" /> <el-table-column prop="yishengNewMoney" label="挂号价格" /> <!-- ... 其他列 ... --> </el-table> </div> </template>5.3 字典表初始化监听器(项目启动时加载字典到ServletContext)
// 文件:DictionaryServletContextListener.java@WebListenerpublicclassDictionaryServletContextListenerimplementsServletContextListener{@OverridepublicvoidcontextInitialized(ServletContextEventsce){ApplicationContextappContext=WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());DictionaryServicedictionaryService=appContext.getBean(DictionaryService.class);List<DictionaryEntity>dictionaryEntities=dictionaryService.selectList(newEntityWrapper<DictionaryEntity>());Map<String,Map<Integer,String>>map=newHashMap<>();for(DictionaryEntityd:dictionaryEntities){Map<Integer,String>m=map.getOrDefault(d.getDicCode(),newHashMap<>());m.put(d.getCodeIndex(),d.getIndexName());map.put(d.getDicCode(),m);}sce.getServletContext().setAttribute("dictionaryMap",map);}}6. 部分截图
7. 项目总结
本系统基于Spring Boot + MyBatis-Plus构建后端,采用Shiro进行权限控制和Token认证,前后端分离架构。后台管理界面使用Vue + Element UI实现现代化管理体验,前台面向患者使用Layui + jQuery保证轻量级和兼容性。
系统实现了医院挂号就诊的核心业务流程:用户注册登录 → 浏览医生 → 选择时间段挂号 → 扣费 → 管理员审核 → 用户查看挂号结果。同时拓展了健康教育、公告、在线咨询等功能,丰富了医患互动场景。
字典表动态管理机制使得科室、职位、类型等基础数据无需硬编码,具备良好的可维护性。项目结构清晰,分层合理,适合作为中小型医院信息化管理的参考实现。
