1. 项目背景与需求分析
中小型医院在日常运营中面临着诸多管理难题:患者信息记录混乱、挂号排队时间长、药品库存管理效率低下等问题长期困扰着医护人员。传统的手工登记方式不仅耗时耗力,还容易出现信息错漏。我曾参与过三家社区医院的信息化改造项目,亲眼目睹过护士站堆积如山的纸质档案和患者漫长的等待队伍。
这个基于SpringBoot+Vue的医院管理平台,正是为解决这些痛点而设计的。系统采用前后端分离架构,后端使用SpringBoot提供RESTful API,前端通过Vue.js构建响应式界面,实现了患者管理、在线挂号、医生排班、药品库存等核心功能模块。在最近一次实际部署中,某社区医院使用本系统后,挂号效率提升了60%,药品盘点时间从原来的3小时缩短到30分钟。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 后端技术选型
SpringBoot 2.7.x作为后端框架是经过多方面考虑的:
- 自动配置特性大幅减少了XML配置,比如数据库连接池默认使用HikariCP,只需在application.yml中简单配置即可
- 内嵌Tomcat服务器使得部署异常简单,打包成jar后直接java -jar就能运行
- 与MyBatis-Plus的完美整合,让数据库操作效率倍增。例如患者信息的CRUD操作,通过继承BaseMapper就能获得全套方法
java复制@Mapper
public interface PatientMapper extends BaseMapper<Patient> {
// 自定义复杂查询
@Select("SELECT * FROM patient WHERE patient_name LIKE CONCAT('%',#{name},'%')")
List<Patient> selectByName(@Param("name") String name);
}
2.2 前端技术方案
Vue 3的组合式API相比Options API更适合这种中型管理系统开发:
- 使用Pinia替代Vuex进行状态管理,代码更简洁。例如挂号状态管理:
javascript复制export const useAppointmentStore = defineStore('appointment', {
state: () => ({
currentAppointment: null,
historyList: []
}),
actions: {
async fetchAppointments() {
const res = await api.get('/appointments')
this.historyList = res.data
}
}
})
- Element Plus组件库提供了丰富的UI组件,特别是表格和表单组件,极大加快了开发速度
3. 数据库设计与实现
3.1 核心表结构优化
患者信息表的设计考虑了实际就诊场景:
sql复制CREATE TABLE `patient` (
`patient_id` varchar(20) NOT NULL COMMENT '患者编号',
`patient_name` varchar(50) NOT NULL COMMENT '患者姓名',
`gender` char(1) NOT NULL COMMENT '性别',
`birth_date` date NOT NULL COMMENT '出生日期',
`id_card` varchar(18) UNIQUE COMMENT '身份证号',
`contact_phone` varchar(15) NOT NULL COMMENT '联系电话',
`emergency_contact` varchar(50) COMMENT '紧急联系人',
`emergency_phone` varchar(15
