尚医通-医院详情-科室接口-显示科室前端整合(二十四)

news2024/9/28 1:14:51

目录:

(1)医院详情-功能 实现

(2)医院排班-需求分析

(3)医院排班-科室接口开发 

(4)医院排班-显示科室前端整合


(1)医院详情-功能 实现

在HospitalController:中添加方法:

//医院的详情信息
    @ApiOperation(value = "获取医院详情")
    @GetMapping("showHospDetail/{id}")
    public Result showHospDetail(
            @ApiParam(name = "id", value = "医院id", required = true)
            @PathVariable String id) {
        Map<String,Object> map = hospitalService.getHospById(id);
        return Result.ok(map);
    }

 HospitalService接口:

 

package com.atguigu.yygh.hosp.service;

import com.atguigu.yygh.model.hosp.Hospital;
import com.atguigu.yygh.vo.hosp.HospitalQueryVo;
import org.springframework.data.domain.Page;

import java.util.Map;

public interface HospitalService {
    //上传医院接口的方法
    void save(Map<String, Object> paramMap);

    //根据医院编号进行查询
    Hospital getByHoscode(String hoscode);

    //医院列表(条件查询分页)
    Page<Hospital> selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo);

    //更新医院的上线状态
    void updateStatus(String id, Integer status);

    //医院的详情信息
    Map<String, Object> getHospById(String id);

}

实现类:

 //封装医院等级方法
    private Hospital setHospitalHosType(Hospital hospital){
        //获取到医院等级的名称
        String hostypeString= dictFeignClient.getName("Hostype", hospital.getHostype());
        //给hospital里面的Map属性赋值
        hospital.getParam().put("hostypeString", hostypeString);

       //查询省市区
        String provinceString = dictFeignClient.getName(hospital.getProvinceCode());
        String cityString = dictFeignClient.getName(hospital.getCityCode());
        String districtString = dictFeignClient.getName(hospital.getDistrictCode());
        hospital.getParam().put("fullAddress", provinceString + cityString + districtString);
        return hospital;
    }





 //医院详情信息
    @Override
    public Map<String, Object> getHospById(String id) {
        Map<String, Object> result = new HashMap<>();

        //调用上面的方法封装医院等级
        Hospital hospital = this.setHospitalHosType(hospitalRepository.findById(id).get());
        result.put("hospital", hospital);

        //单独处理更直观
        result.put("bookingRule", hospital.getBookingRule());//医院的预约信息
        //不需要重复返回
        hospital.setBookingRule(null);
        return result;

    }

 在前端:

list.vue医院列表页面中添加查看按钮:

在router下添加路由:添加隐藏路由:

在api下的hosp.js中继续添加接口:

 创建新的页面show.vue:

<template>
  <div class="app-container">
    <h4>基本信息</h4>
    <table
      class="table table-striped table-condenseda table-bordered"
      width="100%"
    >
      <tbody>
        <tr>
          <th width="15%">医院名称</th>
          <td width="35%">
            <b style="font-size: 14px">{{ hospital.hosname }}</b> |
            {{ hospital.param.hostypeString }}
          </td>
          <th width="15%">医院logo</th>
          <td width="35%">
            <img
              :src="'data:image/jpeg;base64,' + hospital.logoData"
              width="80"
            />
          </td>
        </tr>
        <tr>
          <th>医院编码</th>
          <td>{{ hospital.hoscode }}</td>
          <th>地址</th>
          <td>{{ hospital.param.fullAddress }}</td>
        </tr>
        <tr>
          <th>坐车路线</th>
          <td colspan="3">{{ hospital.route }}</td>
        </tr>
        <tr>
          <th>医院简介</th>
          <td colspan="3">{{ hospital.intro }}</td>
        </tr>
      </tbody>
    </table>

    <h4>预约规则信息</h4>
    <table
      class="table table-striped table-condenseda table-bordered"
      width="100%"
    >
      <tbody>
        <tr>
          <th width="15%">预约周期</th>
          <td width="35%">{{ bookingRule.cycle }}天</td>
          <th width="15%">放号时间</th>
          <td width="35%">{{ bookingRule.releaseTime }}</td>
        </tr>
        <tr>
          <th>停挂时间</th>
          <td>{{ bookingRule.stopTime }}</td>
          <th>退号时间</th>
          <td>
            {{ bookingRule.quitDay == -1 ? "就诊前一工作日" : "就诊当日"
            }}{{ bookingRule.quitTime }} 前取消
          </td>
        </tr>
        <tr>
          <th>预约规则</th>
          <td colspan="3">
            <ol>
              <li v-for="item in bookingRule.rule" :key="item">{{ item }}</li>
            </ol>
          </td>
        </tr>
        <br />
        <el-row>
          <el-button @click="back">返回</el-button>
        </el-row>
      </tbody>
    </table>
  </div>
</template>
<script>
//引入接口定义的js文件
import hospApi from "@/api/hosp";

export default {
  data() {
    return {
      //定义一些变量和初始值
      hospital: null, //医院信息
      bookingRule: null, //预约信息
    };
  },
  created() {
    //在页面渲染之前执行
    //获取传过来的路由id
    const id = this.$route.params.id;
    //调用方法,根据id查询医院详情
    this.fetachHospDetail(id);
  },
  methods: {
    //根据id查询医院详情
    fetachHospDetail(id) {
      hospApi.getHospById(id).then((response) => {
        //把返回的数据医院信息进行赋值上面定义的数据
        this.hospital = response.data.hospital;
        this.bookingRule = response.data.bookingRule;
      });
    },
    //返回医院列表
    back() {
      this.$router.push({ path: "/hospSet/hosp/list" });
    },
  }
}
</script>  
    

点击查看:

 

 点击返回:跳转到医院列表页面

 这个详情页面的样式不怎么好看,可以更改一下:

把提前准备好的css复制到style目录下:

 然后再mian.js中引入:

引入加了新的内容,需要重启服务:npm run dev 

 

 重新访问:发现多了一个表格

(2)医院排班-需求分析

排班分成三部分显示:

1、科室信息(大科室与小科室树形展示)

2、排班日期,分页显示,根据上传排班数据聚合统计产生

3、排班日期对应的就诊医生信息

接口分析

  1. 科室数据使用Element-ui el-tree组件渲染展示,需要将医院上传的科室数据封装成两层父子级数据;
  2. 聚合所有排班数据,按日期分页展示,并统计号源数据展示;
  3. 根据排班日期获取排班详情数据

实现分析

虽然是一个页面展示所有内容,但是页面相对复杂,我们分步骤实现

  1. 先实现左侧科室树形展示;
  2. 其次排班日期分页展示
  3. 最后根据排班日期获取排班详情数据

(3)医院排班-显示科室接口开发 

创建:DepartmentController:

 创建方法:

package com.atguigu.yygh.hosp.controller;

import com.atguigu.yygh.common.result.Result;
import com.atguigu.yygh.hosp.service.DepartmentService;
import com.atguigu.yygh.vo.hosp.DepartmentVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
@Api(tags = "科室管理")  //swagger中的提示注解
@RestController
@RequestMapping("/admin/hosp/department")
@CrossOrigin   //跨域注解
public class DepartmentController {

    //注入
    @Autowired
    private DepartmentService departmentService;

    //根据医院编号,查询医院所有科室列表
    @ApiOperation(value = "查询医院所有科室列表")
    @GetMapping("getDeptList/{hoscode}")
    public Result getDeptList(@PathVariable String hoscode) {
        List<DepartmentVo> list = departmentService.findDeptTree(hoscode);
        return Result.ok(list);
    }


}

DepartmentService :接口

package com.atguigu.yygh.hosp.service;

import com.atguigu.yygh.model.hosp.Department;
import com.atguigu.yygh.vo.hosp.DepartmentQueryVo;
import com.atguigu.yygh.vo.hosp.DepartmentVo;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Map;

public interface DepartmentService {
    //上传科室的接口
    void save(Map<String, Object> paramMap);

    //查询科室的方法
    Page<Department> findPageDepartment(int page, int limit, DepartmentQueryVo departmentQueryVo);

    //删除科室的接口方法
    void remove(String hoscode, String depcode);

    //根据医院编号,查询医院所有科室列表
    List<DepartmentVo> findDeptTree(String hoscode);
}

 DepartmentServiceImpl:实现类:

//根据医院编号,查询医院所有科室列表
    @Override
    public List<DepartmentVo> findDeptTree(String hoscode) {
        //创建list集合,用于最终的数据封装
        List<DepartmentVo> result = new ArrayList<>();

        //根据医院编号,查询医院所有科室信息
        Department departmentQuery = new Department();
        departmentQuery.setHoscode(hoscode);
        Example example = Example.of(departmentQuery);
        //所有科室列表 departmentList
        List<Department> departmentList = departmentRepository.findAll(example);

        //根据大科室编号  bigcode 分组,获取每个大科室里面下级子科室
        Map<String, List<Department>> deparmentMap =
                departmentList.stream().collect(Collectors.groupingBy(Department::getBigcode));
        //遍历map集合 deparmentMap
        for(Map.Entry<String,List<Department>> entry : deparmentMap.entrySet()) {
            //大科室编号
            String bigcode = entry.getKey();
            //大科室编号对应的全局数据
            List<Department> deparment1List = entry.getValue();
            //封装大科室
            DepartmentVo departmentVo1 = new DepartmentVo();
            departmentVo1.setDepcode(bigcode);
            departmentVo1.setDepname(deparment1List.get(0).getBigname());

            //封装小科室
            List<DepartmentVo> children = new ArrayList<>();
            for(Department department: deparment1List) {
                DepartmentVo departmentVo2 =  new DepartmentVo();
                departmentVo2.setDepcode(department.getDepcode());
                departmentVo2.setDepname(department.getDepname());
                //封装到list集合
                children.add(departmentVo2);
            }
            //把小科室list集合放到大科室children里面
            departmentVo1.setChildren(children);
            //放到最终result里面
            result.add(departmentVo1);
        }
        //返回
        return result;

    }

输入数据:

 

成功查询出来:

 

 (4)医院排班-显示科室前端整合

添加路由

在 src/router/index.js 文件添加排班隐藏路由

在医院列表页面,添加排班按钮

 

封装api请求:在hosp.js创建访问接口:

 schedule.vue组件页面:

 

 

<template>
  <div class="app-container">
    <div style="margin-bottom: 10px; font-size: 10px">选择:</div>
    <el-container style="height: 100%">
      <el-aside width="200px" style="border: 1px silver solid">
        <!-- 科室 -->
        <el-tree
          :data="data"
          :props="defaultProps"
          :default-expand-all="true"
          @node-click="handleNodeClick"
        >
        </el-tree>
      </el-aside>

      <el-main style="padding: 0 0 0 20px">
        <el-row style="width: 100%">
          <!-- 排班日期 分页 -->
        </el-row>
        <el-row style="margin-top: 20px">
          <!-- 排班日期对应的排班医生 -->
        </el-row>
      </el-main>
    </el-container>
  </div>
</template>
<script>
//引入接口定义的js文件
import hospApi from "@/api/hosp";
export default {
  data() {
    return {
      //定义变量和初始值
      data: [],
      defaultProps: {
        //树形的显示
        children: "children",
        label: "depname",
      },
      hoscode: null,
    };
  },
  created() {
    //页面加载前执行 获取路由的hoscode
    this.hoscode = this.$route.params.hoscode;
    //调用方法
    this.fetchData();
  },
  methods: {
    //定义方法进行请求接口的调用
    fetchData() {
      hospApi.getDeptByHoscode(this.hoscode).then((response) => {
        //赋值,把返回的数据,赋值给上面定义的data
        this.data = response.data;
      });
    },
  },
};
</script>
<style>
.el-tree-node.is-current > .el-tree-node__content {
  background-color: #409eff !important;
  color: white;
}

.el-checkbox__input.is-checked + .el-checkbox__label {
  color: black;
}
</style>

 

 

点击排班:查询出所有的科室列表

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/139712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于KT6368A芯片开发SOP8蓝牙自拍杆方案记录总结

一、简介给客户开发一款蓝牙自拍杆的方案芯片&#xff0c;使用KT6368A单芯片解决。两种实现逻辑1、由客户的遥控MCU来控制蓝牙芯片的开启和关闭 2、由KT6368A蓝牙芯片自己完成所有的事情&#xff0c;分两个按键&#xff0c;一个按键短按开机&#xff0c;短按关机。第二个按键实…

【SPI实验--数码管】

SPI实验--数码管一、SPI概念二、SPI硬件连接三、SPI总线通信协议四、SPI四种通信模式五、代码实现数码管一、SPI概念 1.SPI总线是Motorola首先提出的全双工三线制/四线制同步串行总线 2.采用主从模式&#xff08;Master Slave&#xff09;架构&#xff0c;支持多slave模式应用…

预测2023年Web3的9大发展趋势

Crypto 和 DeFi 在 2022 年深陷熊市&#xff0c;但 Web3 方面的需求刚刚才开始获得关注。在过去的 12 个月里&#xff0c;Web3 相关的搜索与 2021 年底的峰值相比&#xff0c;一直保持在 30% 以内&#xff0c;下一个上升趋势可能正在到来。下面我列出了目前势头正旺的 9 个 Web…

PIPE接口基本描述

信号名方向描述TxDataIN并行数据输入总线TxDataValidIN1&#xff1a;表示cycle数据有效&#xff1b;0&#xff1a;表示cycle数据无效RxDataOUT并行数据输出总线RxValidOUT1&#xff1a;表示符号锁及当RxDataValid有效时&#xff0c;数据有效 PHY MODEINPHY STATUSOUT SerDesA…

java swing电子商务系统

一、项目简介 本项目是一套基于java swing的电子商务系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;ec…

opencv案例实战——银行卡模式匹配识别

系列文章目录 1.图像读取及其通道与灰度 2.图像填充与图像融合 3.图像滤波 4.图像阈值 5.腐蚀与膨胀 6.图像梯度 7.边缘检测 8.轮廓与轮廓特征 银行卡模式匹配识别系列文章目录前言案例介绍划分模板1.思路2.获取边缘3.获取外接矩形图像预处理切割礼帽操作分割数字块sobel算子膨…

LeetCode题解 二叉树(十):654 最大二叉树;617合并二叉树

654 最大二叉树 medium 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构…

RHCEansible 编写playbook---yaml

YAML 语言特性 YAML的可读性好 YAML和脚本语言的交互性好 YAML使用实现语言的数据类型 YAML有一个一致的信息模型 YAML易于实现 YAML可以基于流来处理 YAML表达能力强&#xff0c;扩展性好YAML的三种数据结构 对象&#xff1a; 键值对的集合&#xff0c;又称为映射、哈希、字典…

Map数据结构详解

Map Object本质上是键值对的集合&#xff08;Hash结构&#xff09;&#xff0c;但Object只能将字符串当做键&#xff0c;这就给Object带来了很大的限制。 let data {} let s {name : 东方不败} data[s] 西方求败// 如果键传入非字符串的值&#xff0c;会自动为字符串 cons…

思科路由器DHCPv6服务配置

配置如下 Router>ena Router#conf t Router(config)#host R1 R1(config)#ipv6 unicast-routing R1(config)#int g0/0 R1(config-if)#ipv6 add 2001:1::1/64 R1(config-if)#no sh R1(config-if)#exit R1(config)#service dhcp R1(config)#ipv6 local pool v6pool …

CTF中的PHP特性函数(中)

前言 上篇文章给大家带来了PHP中最基本的特性&#xff0c;不知道大家学习的怎样了&#xff0c;回顾上文&#xff0c;我们讲了MD5强弱碰撞以及正则匹配的绕过&#xff0c;总体来看还是很简单的&#xff0c;下面给大家带来新的PHP特性讲解&#xff0c;会稍微比上一篇难一些。 i…

开源工作流引擎如何支撑企业级 Serverless 架构?

作者&#xff1a;董天欣&#xff08;雾雾&#xff09; Serverless 应用引擎&#xff08;SAE&#xff09;是一款底层基于 Kubernetes&#xff0c;实现了 Serverless 架构与微服务架构结合的云产品。作为一款不断迭代的云产品&#xff0c;在快速发展的过程中也遇到了许多挑战。如…

2022年统一大市场研究报告

第一章 行业概况 国内统一大市场指的是在全国范围内&#xff0c;在充分竞争以及由此形成的社会分工基础上&#xff0c;各地区市场间、各专业市场间形成了相互依存、相互补充、相互开放、相互协调的有机的市场体系。在这种市场体系下&#xff0c;商品和要素能够按照价格体系的调…

干货 | 在Docker 上搭建持续集成平台 Jenkins

Docker是一个开源的应用容器引擎&#xff0c;基于 Go 语言开发&#xff0c;Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的系统。Docker 是世界领先的软件容器平台&#xff0c;Docker 官方的口号是”调试你的应用&…

Three.js学习(二)three.js的一些基本操作

文章目录1.鼠标操作三维场景旋转、移动和缩放2.场景中添加新的三维图形3.设置材质效果4.光源效果1.鼠标操作三维场景旋转、移动和缩放 使用THREE的OrbitControls控件&#xff0c;可以实现鼠标控制三维图形的操作。主要是通过监听鼠标操作&#xff0c;控制相机的三维参数。 imp…

python数据分析-matplotlib、numpy、pandas

数据分析概述数据分析就是用适当的方法对收集来的大量数据进行分析&#xff0c;帮助人们在一处判断&#xff0c;以便采取适当行动数据分析流程jupyter notebook说明matplotlib&#xff1a;Matplotlib — Visualization with Python基本要点能将数据进行可视化&#xff0c;更直观…

docker基本命令演示

docker拉取redis镜像演示首先前往&#xff1a;https://hub.docker.com找到需要的redis镜像然后 点击之后使用命令 docker pull redis 拉取redis 成功之后使用命令 docker images 查看本地的镜像使用命令导出镜像到指定文件 docker save -o redis.tar redis:latestdocker save…

Android13适配

遇到的一些问题 1.WebChromeClient的 API onReachedMaxAppCacheSize 没了 onReachedMaxAppCacheSize overrides nothing // 扩充缓存的容量override fun onReachedMaxAppCacheSize(spaceNeeded: Long, totalUsedQuota: Long, quotaUpdater: QuotaUpdater) {quotaUpdater.upda…

QT学习笔记(下)

项目实践 前言 本项目的实践主要是以翻金币的项目为例&#xff0c;进行QT项目的实践。游戏分为3个场景&#xff0c;分别是mainscene主场景、chooselevelscene选择关卡场景、playscene游戏场景&#xff0c;以上的三个场景是按顺序实现的。并且定义了两个自定义的QPushButton按…

数据库,计算机网络、操作系统刷题笔记24

数据库&#xff0c;计算机网络、操作系统刷题笔记24 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle…