原创

基于SpringBoot2+vue2的社区医院管理系统

温馨提示:
本文最后更新于 2026年05月28日,已超过 13 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

1. 提示

浏览全文获取资源

2. 项目简介

本项目为社区医院管理系统(项目名:shequyiyuan),基于 Spring Boot + MyBatis-Plus + Vue 框架开发。系统面向社区医疗机构,提供多角色(管理员、用户、医生、前台)协同工作平台,实现病例管理、健康档案管理、就诊挂号、药品管理、家庭医生管理等功能,旨在提升社区卫生服务的信息化水平。

3. 技术栈

层级 技术选型
后端框架 Spring Boot 2.2.2.RELEASE
ORM MyBatis-Plus 2.3
安全控制 Apache Shiro 1.3.2 + Token 拦截器
数据库 MySQL 5.7.32
前端框架 Vue 2.x + Element UI
HTTP 请求 Axios
图表 ECharts
工具库 Hutool、FastJson、POI(Excel导入导出)、百度AI(人脸比对)
构建工具 Maven

4. 详细介绍

系统共包含 四种角色:管理员、用户、医生、前台。各角色拥有不同的功能权限。

4.1 核心功能模块

模块 功能说明 对应数据库表
用户管理 用户注册、登录、个人信息维护、假删除 yonghu
医生管理 医生信息维护(工号、姓名、科室、联系方式等)、密码重置 yisheng
前台管理 前台工作人员账号管理 qiantai
家庭医生管理 家庭医生负责人信息维护 jiatingyisheng
病例信息管理 记录病例编号、名称、病情、检查项目/结果、药单、附件、主治医生等 bingli
健康档案管理 按档案单位(家庭/个人/特殊人群)记录用户健康状况、其他成员 jiuankangdangan
就诊信息管理 用户挂号(选择科室、填写备注、费用)、生成就诊号 jiuzhen
药品管理 药品编号、名称、价格、库存、药效、副作用、详情维护 yaopin
字典表管理 维护系统下拉选项(科室、性别、档案单位等) dictionary
管理员管理 后台管理员账号管理 users
Token认证 基于 JWT 风格 Token 的登录鉴权,支持自动过期 token

4.2 数据库设计

数据库名为 shequyiyuan,包含以下主要数据表:

  • bingli:病例信息
  • jiatingyisheng:家庭医生
  • jiuankangdangan:健康档案
  • jiuzhen:就诊信息
  • qiantai:前台
  • yaopin:药品
  • yisheng:医生
  • yonghu:用户
  • dictionary:字典表
  • token:登录令牌
  • users:管理员
  • config:系统配置

所有表均采用 UTF-8 编码,主键自增,并包含 create_time 等审计字段。

4.3 角色权限(基于 menu.js 配置)

角色 可访问模块
管理员 管理员管理、病例信息、基础数据(档案单位/科室)、家庭医生、健康档案、就诊信息、前台、药品、医生、用户(完整增删改查)
用户 病例信息(只读)、家庭医生(只读)、健康档案(增删改查)、就诊信息(只读)、药品(只读)
医生 病例信息(增删改查)、健康档案(只读)、就诊信息(只读)、药品(只读)
前台 病例信息(只读)、健康档案(只读)、就诊信息(增删改查)、药品(只读)

4.4 系统接口风格

  • 采用 RESTful 风格,统一返回 R 对象(code/msg/data)。
  • 支持分页查询(/page 接口),支持多条件模糊搜索、排序。
  • 支持 Excel 批量导入(通过 /batchInsert 接口)。
  • 文件上传下载统一由 /file/upload/file/download 处理。
  • 使用 @IgnoreAuth 注解标记无需登录验证的接口(如登录、注册)。

5. 部分代码

5.1 后端 Controller 示例(病例信息)

// BingliController.java
@RestController
@RequestMapping("/bingli")
public class BingliController {
    @Autowired
    private BingliService bingliService;
    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        // 角色权限控制:用户/医生只能看到自己的数据
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if("用户".equals(role))
            params.put("yonghuId", request.getSession().getAttribute("userId"));
        else if("医生".equals(role))
            params.put("yishengId", request.getSession().getAttribute("userId"));
        PageUtils page = bingliService.queryPage(params);
        // 字典值转换
        List<BingliView> list = (List<BingliView>)page.getList();
        for(BingliView c: list){
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    @RequestMapping("/save")
    public R save(@RequestBody BingliEntity bingli, HttpServletRequest request){
        // 自动填充用户/医生id
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if("用户".equals(role)) bingli.setYonghuId(...);
        else if("医生".equals(role)) bingli.setYishengId(...);
        // 防重校验
        Wrapper<BingliEntity> queryWrapper = new EntityWrapper<BingliEntity>()
            .eq("bingli_uuid_number", bingli.getBingliUuidNumber())
            .eq("bingli_name", bingli.getBingliName());
        if(bingliService.selectOne(queryWrapper) == null){
            bingli.setCreateTime(new Date());
            bingliService.insert(bingli);
            return R.ok();
        }
        return R.error(511, "表中有相同数据");
    }
}

5.2 MyBatis-Plus Mapper XML 示例(就诊信息联表查询)

<!-- JiuzhenDao.xml -->
<select id="selectListView" parameterType="map" resultType="com.entity.view.JiuzhenView">
    SELECT
        a.id, a.yonghu_id, a.jiuzhen_jiuzhen, a.jiuzhen_feiyong,
        a.keshi_types, a.insert_time, a.jiuzhen_text, a.jiuzhen_content,
        yonghu.yonghu_name, yonghu.yonghu_photo, yonghu.yonghu_phone
    FROM jiuzhen a
    LEFT JOIN yonghu ON a.yonghu_id = yonghu.id
    <where>
        <if test="params.yonghuId != null">
            and a.yonghu_id = #{params.yonghuId}
        </if>
        <if test="params.jiuzhenJiuzhen != null and params.jiuzhenJiuzhen != ''">
            and a.jiuzhen_jiuzhen like CONCAT('%',#{params.jiuzhenJiuzhen},'%')
        </if>
    </where>
    order by a.${params.orderBy} desc
</select>

5.3 配置文件 application.yml

server:
  port: 8080
  servlet:
    context-path: /shequyiyuan

spring:
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/shequyiyuan?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    username: root
    password: 123456

mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  typeAliasesPackage: com.entity
  global-config:
    id-type: 1
    field-strategy: 2
    db-column-underline: true
    logic-delete-value: -1
    logic-not-delete-value: 0

5.4 前端路由配置片段(router-static.js

const routes = [{
  path: '/index',
  component: Index,
  children: [
    { path: '/bingli', name: '病例信息', component: bingli },
    { path: '/jiuzhen', name: '就诊信息', component: jiuzhen },
    { path: '/yaopin', name: '药品', component: yaopin }
  ]
}, {
  path: '/login',
  component: Login
}];

6. 部分截图

img1
img2
img3
img4
img5
img6
img7
img8
img9
img10
img11
img12
img13
img14
img15
img16
img17
img18
img19
img20
img21
img22

7. 项目总结

本社区医院管理系统是一个功能完备、角色清晰的医疗信息化平台,具有以下特点:

  • 多角色协同:管理员、医生、用户、前台各司其职,权限分离明确。
  • 数据完整性:通过字典表统一管理下拉选项,支持假删除(逻辑删除)保护数据。
  • 高效查询:MyBatis-Plus 结合自定义 XML 实现复杂联表分页查询。
  • 安全机制:Token 拦截器统一鉴权,支持忽略验证注解,密码默认加密(示例中为明文,可扩展)。
  • 扩展性强:预留了 Excel 批量导入、百度 AI 人脸比对、地图定位等接口。
  • 前端现代化:基于 Vue + Element UI,提供响应式后台管理界面,支持图表统计(ECharts)。

系统可满足社区卫生服务中心的日常业务需求,并具备良好的可维护性和二次开发基础。

正文到此结束