1
0
lsw 2 месяцев назад
Родитель
Сommit
7d108777e7

+ 2 - 7
admin-ui/src/api/system/dict/data.js

@@ -1,5 +1,4 @@
 import request from '@/utils/request'
-
 // 查询字典数据列表
 export function listData(query) {
   return request({
@@ -8,7 +7,6 @@ export function listData(query) {
     params: query
   })
 }
-
 // 查询字典数据详细
 export function getData(dictCode) {
   return request({
@@ -16,15 +14,14 @@ export function getData(dictCode) {
     method: 'get'
   })
 }
-
 // 根据字典类型查询字典数据信息
 export function getDicts(dictType) {
   return request({
     url: '/system/dict/data/type/' + dictType,
-    method: 'get'
+    method: 'get',
+    loading: "false"
   })
 }
-
 // 新增字典数据
 export function addData(data) {
   return request({
@@ -33,7 +30,6 @@ export function addData(data) {
     data: data
   })
 }
-
 // 修改字典数据
 export function updateData(data) {
   return request({
@@ -42,7 +38,6 @@ export function updateData(data) {
     data: data
   })
 }
-
 // 删除字典数据
 export function delData(dictCode) {
   return request({

+ 14 - 1
admin-ui/src/assets/styles/extend.scss

@@ -23,7 +23,7 @@
 .lab {
   font-size: 17px;
   position: relative;
-  margin-bottom: 20px;
+  margin-bottom: 10px;
   .bsg {
     position: absolute;
     width: 4px;
@@ -93,6 +93,9 @@
 .se {
   width: 125px !important;
 }
+.inp{
+  width: 170px;
+}
 .el-input-group__append {
   cursor: pointer !important;
 }
@@ -484,3 +487,13 @@
 	box-shadow: inset 0 0 0px rgba(240, 240, 240, 0.5);
 	background-color: #8590b3;
 }
+.pro{
+  .pp{
+    float: left;
+    width: 70%;
+  }
+  .num{
+    float: left;
+    padding-left: 5px;
+  }
+}

+ 2 - 2
admin-ui/src/components/dtree.vue

@@ -1,8 +1,8 @@
 <template>
   <div>
     <div v-if="tree">
-      <div class="head-container" style="margin-top: -7px"><el-input v-model="deptName" placeholder="请输入科室名称" clearable prefix-icon="el-icon-search" style="margin-bottom: 10px" /></div>
-      <div class="head-container" style="height: calc(100vh - 203px); overflow-y: auto">
+      <div class="head-container" style="margin-top: -7px;margin-right: 15px"><el-input v-model="deptName" placeholder="请输入科室名称" clearable prefix-icon="el-icon-search" style="margin-bottom: 10px" /></div>
+      <div class="head-container" style="height: calc(100vh - 240px); overflow-y: auto">
         <el-tree :data="deptOptions" :props="defaultProps" :current-node-key="value" :expand-on-click-node="false" :default-expanded-keys="idArr" :filter-node-method="filterNode" ref="tree" node-key="id" highlight-current @node-click="handleNodeClick" />
       </div>
     </div>

+ 1 - 1
admin-ui/src/components/dtreeDoctor.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <div class="head-container" style="margin-top: -7px; margin-right: 15px"><el-input v-model="deptName" placeholder="请输入医生名称" clearable prefix-icon="el-icon-search" style="margin-bottom: 10px" /></div>
-    <div class="head-container" style="height: calc(100vh - 203px); overflow-y: auto">
+    <div class="head-container" style="height: calc(100vh - 240px); overflow-y: auto">
       <el-tree :data="deptOptions" :props="defaultProps" :current-node-key="value" :expand-on-click-node="false" default-expand-all :filter-node-method="filterNode" ref="tree" node-key="id" highlight-current @node-click="handleNodeClick" />
     </div>
   </div>

+ 26 - 25
admin-ui/src/views/dashboard/PieChart.vue

@@ -3,24 +3,24 @@
 </template>
 
 <script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "./mixins/resize";
+import echarts from 'echarts';
+require('echarts/theme/macarons'); // echarts theme
+import resize from './mixins/resize';
 
 export default {
   mixins: [resize],
   props: {
     className: {
       type: String,
-      default: "chart"
+      default: 'chart'
     },
     width: {
       type: String,
-      default: "100%"
+      default: '100%'
     },
     height: {
       type: String,
-      default: "270px"
+      default: '270px'
     },
     chartData: {
       type: Array,
@@ -28,11 +28,11 @@ export default {
     },
     title: {
       type: String,
-      default: "饼图"
+      default: '饼图'
     },
     tag: {
       type: String,
-      default: "人"
+      default: '人'
     }
   },
   data() {
@@ -62,42 +62,43 @@ export default {
   },
   methods: {
     initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
+      this.chart = echarts.init(this.$el, 'macarons');
       this.setOptions(this.chartData);
     },
     setOptions(chartData) {
       let data = chartData;
       this.chart.setOption({
         tooltip: {
-          trigger: "item",
-          formatter: "{b} : {d}%"
+          trigger: 'item',
+          formatter: '{b} : {d}%'
         },
         legend: {
-          left: 'center',
-          bottom: '15%',
-          textStyle: {
-            fontSize: "14"
-          }
+          left: '0%', // 图例显示在左侧
+          top: 'center', // 垂直居中
+          orient: 'vertical' // 垂直布局
         },
         series: [
           {
-            type: "pie",
-            radius: ["30%", "50%"],
-            center: ["45%", "30%"],
+            type: 'pie',
+            radius: ['30%', '80%'],
+            center: ['60%', '50%'],
             data: data,
             emphasis: {
               itemStyle: {
                 shadowBlur: 10,
                 shadowOffsetX: 0,
-                shadowColor: "rgba(0, 0, 0, 0.5)"
+                shadowColor: 'rgba(0, 0, 0, 0.5)'
               }
             },
             label: {
-              normal: {
-                show: true,
-                formatter: "{d}%",
-                fontSize: "13"
-              }
+              show: true, // 显示标签
+              position: 'inside', // 标签位置在饼图内部
+              formatter: '{d}%', // 显示占比百分比
+              color: 'rgba(255,255,255,.6)', // 标签文字颜色
+              fontSize: '12' // 标签文字大小
+            },
+            labelLine: {
+              show: true
             }
           }
         ]

+ 46 - 13
admin-ui/src/views/index.vue

@@ -2,7 +2,6 @@
   <div class="dashboard-editor-container">
     <div class="mtitle">
       <span style="font-size: 19px">欢迎使用岑溪人民医院随访系统</span>
-      <iframe allowtransparency="true" frameborder="0" width="180" height="36" scrolling="no" style="padding-top: 10px" src="//tianqi.2345.com/plugin/widget/index.htm?s=3&z=2&t=0&v=0&d=2&bd=0&k=&f=#545555&ltf=#545555&htf=ffffff&q=1&e=1&a=1&c=72036&w=180&h=36&align=center"></iframe>
     </div>
     <div class="chart-wrapper" v-if="user.roleName == '医生' || user.roleName == '科室主任'">
       <!--个人形象-->
@@ -42,7 +41,7 @@
                   <div class="rint" style="background-color: rgb(242 232 255)">
                     <div class="icon" style="color: #8642df">&#xe6b6;</div>
                     <div class="rcon">
-                      <div class="rtt">患者数据</div>
+                      <div class="rtt">患者数据(出院)</div>
                       <div class="rdesc">{{ data.count.visit || 0 }}</div>
                     </div>
                   </div>
@@ -81,6 +80,26 @@
                   </div>
                 </div>
               </div>
+              <el-row>
+                <el-col :span="12">
+                  <div class="bos mt10">
+                    <div class="lab">
+                      <div class="bsg"></div>
+                      <div class="tit">复诊提醒统计</div>
+                    </div>
+                    <PieChart :chartData="chartData1" height="170px"></PieChart>
+                  </div>
+                </el-col>
+                <el-col :span="12">
+                  <div class="bos mt10">
+                    <div class="lab">
+                      <div class="bsg"></div>
+                      <div class="tit">出院随访统计</div>
+                    </div>
+                    <PieChart :chartData="chartData2" height="170px"></PieChart>
+                  </div>
+                </el-col>
+              </el-row>
             </div>
           </div>
         </div>
@@ -145,7 +164,7 @@
                       <div class="head"><img :src="user.avatar" /></div>
                       <div class="name">{{ user.nickName }}</div>
                       <div class="introduce" v-html="user.introduce" v-if="user.introduce"></div>
-                      <el-empty v-else description="暂无个人介绍" :image-size="80" v-else></el-empty>
+                      <el-empty v-else description="暂无个人介绍" :image-size="80"></el-empty>
                     </div>
                     <img src="../assets/images/phone.jpg" style="width: 100%" v-else />
                   </div>
@@ -274,18 +293,24 @@
 </template>
 
 <script>
-import Vue from 'vue';
-const phone = require('@/assets/images/phone.jpg');
 import detail from '@/views/work/notice/detail';
+import PieChart from './dashboard/PieChart';
 export default {
   name: 'Index',
-  components: {},
+  components: { PieChart },
   data() {
     return {
       current: 0,
       user: this.$store.state.user,
-      phone: phone,
       data: { count: {} },
+      chartData1: [
+        { name: '提醒空置率', value: 0 },
+        { name: '提醒达成率', value: 0 }
+      ],
+      chartData2: [
+        { name: '回访空置率', value: 0 },
+        { name: '回访达成率', value: 0 }
+      ],
       noticeList: [],
       menu: [
         {
@@ -326,11 +351,6 @@ export default {
       ]
     };
   },
-  computed: {
-    user() {
-      return this.$store.state.user;
-    }
-  },
   created() {
     this.getData();
   },
@@ -338,6 +358,20 @@ export default {
     getData() {
       this.ajax({ url: '/home/index' }).then((response) => {
         this.data = response.data;
+        response.data.followList.forEach((item) => {
+          if (item.type == 0 && item.state == 0) {
+            this.chartData1[0].value = item.count;
+          }
+          if (item.type == 0 && item.state == 1) {
+            this.chartData1[1].value = item.count;
+          }
+          if (item.type == 1 && item.state == 0) {
+            this.chartData2[0].value = item.count;
+          }
+          if (item.type == 1 && item.state == 1) {
+            this.chartData2[1].value = item.count;
+          }
+        });
       });
       this.ajax({ url: '/work/notice/list', data: { pageNum: 1, pageSize: 10, state: 0, orderByColumn: 'id', isAsc: 'desc' } }).then((response) => {
         this.noticeList = response.rows;
@@ -357,7 +391,6 @@ export default {
   padding: 15px 20px 0px 20px;
   .mtitle {
     margin-bottom: 20px;
-    margin-top: -15px;
   }
   .chart-wrapper {
     margin-top: -15px;

+ 6 - 2
admin-ui/src/views/work/follow/record/edit.vue

@@ -12,7 +12,7 @@
             </el-select>
           </el-form-item>
           <el-form-item label="发送患者" :prop="form.id ? '' : 'patientList'">
-            <div v-if="form.id">
+            <div v-if="form.id || param.patientId">
               <el-tag size="medium" class="patient">{{ param.patientName }}</el-tag>
             </div>
             <div class="patients" v-else>
@@ -95,6 +95,10 @@ export default {
         this.op = JSON.parse(response.data.op);
       });
     }
+    //对单个患者发送提醒或者随访
+    if (this.param.patientId) {
+      this.form.patientList.push({ id: this.param.patientId, name: this.param.patientName });
+    }
     this.$forceUpdate();
   },
   methods: {
@@ -106,7 +110,7 @@ export default {
     change(e) {
       let item = this.templateList.filter((item) => item.title == e)[0];
       this.form.op = item.op;
-      this.op = JSON.parse(item.op);
+      this.op = this.param.type == 1 ? JSON.parse(item.op) : item.op;
     },
     selectPatient() {
       this.iframe({ obj: selectPatient, param: {}, title: '选择推送患者', width: '60%', height: '75%' });

+ 1 - 1
admin-ui/src/views/work/follow/record/index.vue

@@ -24,7 +24,7 @@
 
     <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 270px)">
       <el-table-column type="selection" width="55" align="center" v-if="user.roleName == '超级管理员' || user.roleName == '管理员'" />
-      <el-table-column label="模板名称" align="left" prop="templateName" />
+      <el-table-column label="模板名称" align="center" prop="templateName" />
       <el-table-column label="患者姓名" align="center" prop="patientName" width="100" />
       <el-table-column label="住院号" align="center" prop="blh" width="120" />
       <el-table-column :label="queryParams.type == 0 ? '提醒状态' : '随访状态'" align="center" prop="state" width="100">

+ 3 - 3
admin-ui/src/views/work/follow/record/listByUser.vue

@@ -9,10 +9,10 @@
         <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
       </el-form-item>
       <el-button style="float: right" type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:record:add', 'work:up:add']">{{ queryParams.type == 0 ? '新增提醒' : '新增回访' }}</el-button>
-      <el-button style="float: right" type="primary" icon="el-icon-download" @click="handleExport" v-hasPermi="['work:record:export', 'work:up:add']" v-if="queryParams.type == 1">导出</el-button>
+      <el-button style="float: right;margin-right: 15px;" type="primary" icon="el-icon-download" @click="handleExport" v-hasPermi="['work:record:export', 'work:up:add']" v-if="queryParams.type == 1">导出</el-button>
     </el-form>
     <el-table :data="response.rows" border>
-      <el-table-column label="模板名称" align="left" prop="templateName" />
+      <el-table-column label="模板名称" align="center" prop="templateName" />
       <el-table-column label="患者姓名" align="center" prop="patientName" width="100" />
       <el-table-column label="住院号" align="center" prop="blh" width="120" />
       <el-table-column :label="queryParams.type == 0 ? '提醒状态' : '随访状态'" align="center" prop="state" width="100">
@@ -91,7 +91,7 @@ export default {
     },
     op(tag, row) {
       if (tag == 'add') {
-        this.iframe({ obj: edit, param: { type: this.queryParams.type }, title: this.queryParams.type == 0 ? '新增提醒' : '新增访', width: '57%', height: '85%' });
+        this.iframe({ obj: edit, param: { type: this.queryParams.type, patientId: this.param.patientId, patientName: this.param.patientName }, title: this.queryParams.type == 0 ? '新增提醒' : '新增访', width: '57%', height: '85%' });
       }
       if (tag == 'edit') {
         this.iframe({ obj: edit, param: { id: row.id, type: this.queryParams.type, patientName: row.patientName }, title: '编辑', width: '57%', height: '85%' });

+ 0 - 190
admin-ui/src/views/work/pv1/edit.vue

@@ -1,190 +0,0 @@
-<style scoped>
-  .splited-form {
-    width: 100%;
-    display: flex;
-    justify-content: space-between;
-  }
-
-
-  .splited-form .left-col {
-    margin-right: 30px;
-  }
-
-
-</style>
-
-<template>
-  <div class="cmain">
-    <el-form
-      ref="form"
-      label-position="right"
-      :model="form" :rules="rules"
-      label-width="100px"
-      size="medium"
-      style="width: 100%"
-    >
-      <!-- 将表单分为两列 -->
-      <div class="splited-form">
-        <!-- 左边的一列 -->
-        <div class="left-col">
-          <el-form-item label="患者ID" prop="patientId">
-            <el-input v-model="form.patientId" placeholder="请输入患者ID" clearable/>
-          </el-form-item>
-
-          <el-form-item label="就诊卡号" prop="cardId">
-            <el-input v-model="form.cardId" placeholder="请输入就诊卡号" clearable/>
-          </el-form-item>
-
-          <el-form-item label="患者类别" prop="patClass">
-            <el-select v-model="form.patClass" placeholder="请选择患者类别" clearable>
-              <el-option
-                v-for="dict in dict.type.pat_class"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="患者位置" prop="bed">
-            <el-input v-model="form.bed" placeholder="请输入患者位置" clearable/>
-          </el-form-item>
-          <el-form-item label="主治医师" prop="physician">
-            <el-input v-model="form.physician" placeholder="请输入主治医师" clearable/>
-          </el-form-item>
-          <el-form-item label="主管护士代码" prop="nurseCode">
-            <el-input v-model="form.nurseCode" placeholder="请输入主管护士代码" clearable/>
-          </el-form-item>
-          <el-form-item label="入院次数" prop="hospitalizedNumber">
-            <el-input v-model="form.hospitalizedNumber" placeholder="请输入入院次数" clearable/>
-          </el-form-item>
-          <el-form-item label="收费类别" prop="feeCategory">
-            <el-input v-model="form.feeCategory" type="textarea" placeholder="请输入内容" />
-          </el-form-item>
-          <el-form-item label="出院方式" prop="dischargeMethod">
-            <el-select v-model="form.dischargeMethod" placeholder="请选择出院方式" clearable>
-              <el-option
-                v-for="dict in dict.type.discharge_method"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="患者信息ID" prop="msgId">
-            <el-input v-model="form.msgId" placeholder="请输入患者信息ID" clearable/>
-          </el-form-item>
-        </div>
-
-        <!-- 右边的一列 -->
-        <div class="right-col">
-
-          <el-form-item label="医疗机构代码" prop="medicalCode">
-            <el-input v-model="form.medicalCode" placeholder="请输入医疗机构代码" clearable/>
-          </el-form-item>
-          <el-form-item label=" 在院状态" prop="hospitalStatus">
-            <el-select v-model="form.hospitalStatus" placeholder="请选择 在院状态" clearable>
-              <el-option
-                v-for="dict in dict.type.hospital_status"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="门诊挂号状态">
-            <el-radio-group v-model="form.registrationStatus">
-              <el-radio
-                v-for="dict in dict.type.registration_status"
-                :key="dict.value"
-                :label="dict.value"
-              >{{dict.label}}</el-radio>
-            </el-radio-group>
-          </el-form-item>
-          <el-form-item label="入院时间" prop="admissionTime">
-            <el-input v-model="form.admissionTime" placeholder="请输入入院时间" clearable/>
-          </el-form-item>
-          <el-form-item label="出院时间" prop="dischargeTime">
-            <el-input v-model="form.dischargeTime" placeholder="请输入出院时间" clearable/>
-          </el-form-item>
-          <el-form-item label="创建时间" prop="createTime">
-            <el-date-picker clearable
-                            v-model="form.createTime"
-                            type="date"
-                            value-format="yyyy-MM-dd"
-                            placeholder="请选择创建时间">
-            </el-date-picker>
-          </el-form-item>
-          <el-form-item label="创建人" prop="createBy">
-            <el-input v-model="form.createBy" placeholder="请输入创建人" clearable/>
-          </el-form-item>
-          <el-form-item label="更新时间" prop="updateTime">
-            <el-date-picker clearable
-                            v-model="form.updateTime"
-                            type="date"
-                            value-format="yyyy-MM-dd"
-                            placeholder="请选择更新时间">
-            </el-date-picker>
-          </el-form-item>
-          <el-form-item label="更新人" prop="updateBy">
-            <el-input v-model="form.updateBy" placeholder="请输入更新人" clearable/>
-          </el-form-item>
-
-          <el-form-item label="科室" prop="department">
-            <el-input v-model="form.department" placeholder="请输入科室" clearable/>
-          </el-form-item>
-        </div>
-
-
-      </div>
-
-
-
-
-    </el-form>
-    <div class="mfooter">
-      <el-button type="primary" @click="submitForm">确 定</el-button>
-      <el-button @click="$layer.close(layerid)">取 消</el-button>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  dicts: ['hospital_status', 'discharge_method', 'pat_class', 'registration_status'],
-  data() {
-    return {
-      form: {},
-      rules: {
-      }
-    };
-  },
-  mounted() {
-    if (this.param.id) {
-      this.ajax({ url: '/work/pv1/detail/' + this.param.id }).then(response => {
-        this.form = response.data;
-      });
-    }
-  },
-  methods: {
-    submitForm() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id) {
-            this.ajax({method: 'post',url: '/work/pv1/edit', data: this.form }).then(response => {
-              this.$modal.msgSuccess("修改成功");
-              this.$layer.close(this.layerid);
-              this.$parent.getList();
-            });
-          } else {
-            this.ajax({method: 'post',url: '/work/pv1/add', data: this.form }).then(response => {
-              this.$modal.msgSuccess("新增成功");
-              this.$layer.close(this.layerid);
-              this.$parent.getList();
-            });
-          }
-        }
-      });
-    }
-  }
-};
-</script>

+ 0 - 270
admin-ui/src/views/work/pv1/index.vue

@@ -1,270 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent label-position="right">
-      <el-row type="flex" justify="space-between" :gutter="20">
-        <el-col span="8">
-          <el-form-item label="患者ID" prop="patientId">
-            <el-input v-model="queryParams.patientId" placeholder="请输入患者ID" @keyup.enter.native="handleQuery" clearable
-                      class="inp"/>
-          </el-form-item>
-        </el-col>
-        <el-col span="8">
-          <el-form-item label="就诊卡号" prop="cardId">
-            <el-input v-model="queryParams.cardId" placeholder="请输入就诊卡号" @keyup.enter.native="handleQuery" clearable
-                      class="inp"/>
-          </el-form-item>
-        </el-col>
-        <el-col span="8">
-          <el-form-item label="患者类别" prop="patClass">
-            <el-select v-model="queryParams.patClass" placeholder="请选择患者类别" clearable class="se">
-              <el-option v-for="dict in dict.type.pat_class" :key="dict.value" :label="dict.label"
-                         :value="dict.value"/>
-            </el-select>
-          </el-form-item>
-        </el-col>
-      </el-row>
-
-      <el-row :gutter="20">
-        <el-col span="8">
-          <el-form-item label="患者位置" prop="bed">
-            <el-input v-model="queryParams.bed" placeholder="请输入患者位置" @keyup.enter.native="handleQuery" clearable
-                      class="inp"/>
-          </el-form-item>
-        </el-col>
-        <el-col span="8">
-          <el-form-item label="主治医师" prop="physician">
-            <el-input v-model="queryParams.physician" placeholder="请输入主治医师" @keyup.enter.native="handleQuery"
-                      clearable class="inp"/>
-          </el-form-item>
-        </el-col>
-        <el-col span="8">
-          <el-form-item label="主管护士代码" prop="nurseCode">
-            <el-input v-model="queryParams.nurseCode" placeholder="请输入主管护士代码" @keyup.enter.native="handleQuery"
-                      clearable class="inp"/>
-          </el-form-item>
-        </el-col>
-      </el-row>
-
-      <el-row :gutter="20">
-        <el-col span="8">
-          <el-form-item label="入院次数" prop="hospitalizedNumber">
-          <el-input v-model="queryParams.hospitalizedNumber" placeholder="请输入入院次数"
-                    @keyup.enter.native="handleQuery" clearable class="inp"/>
-        </el-form-item>
-        </el-col>
-        <el-col span="8">
-          <el-form-item label="出院方式" prop="dischargeMethod">
-            <el-select v-model="queryParams.dischargeMethod" placeholder="请选择出院方式" clearable class="se">
-              <el-option v-for="dict in dict.type.discharge_method" :key="dict.value" :label="dict.label"
-                         :value="dict.value"/>
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col span="8">
-          <el-form-item label="医疗机构代码" prop="medicalCode">
-            <el-input v-model="queryParams.medicalCode" placeholder="请输入医疗机构代码" @keyup.enter.native="handleQuery"
-                      clearable class="inp"/>
-          </el-form-item>
-        </el-col>
-      </el-row>
-
-
-      <el-row :gutter="20">
-        <el-col span="8">
-          <el-form-item label=" 在院状态" prop="hospitalStatus">
-            <el-select v-model="queryParams.hospitalStatus" placeholder="请选择 在院状态" clearable class="se">
-              <el-option v-for="dict in dict.type.hospital_status" :key="dict.value" :label="dict.label"
-                         :value="dict.value"/>
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col span="8">
-          <el-form-item label="门诊挂号状态" prop="registrationStatus">
-            <el-select v-model="queryParams.registrationStatus" placeholder="请选择门诊挂号状态" clearable class="se">
-              <el-option v-for="dict in dict.type.registration_status" :key="dict.value" :label="dict.label"
-                         :value="dict.value"/>
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col span="8">
-          <el-form-item label="入院时间" prop="admissionTime">
-            <el-input v-model="queryParams.admissionTime" placeholder="请输入入院时间" @keyup.enter.native="handleQuery"
-                      clearable class="inp"/>
-          </el-form-item>
-        </el-col>
-      </el-row>
-
-      <el-row :gutter="20">
-        <el-col span="8">
-          <el-form-item label="出院时间" prop="dischargeTime">
-            <el-input v-model="queryParams.dischargeTime" placeholder="请输入出院时间" @keyup.enter.native="handleQuery"
-                      clearable class="inp"/>
-          </el-form-item>
-        </el-col>
-
-
-        <el-col span="8">
-          <el-form-item label="患者(信息)ID" prop="msgId">
-            <el-input v-model="queryParams.msgId" placeholder="请输入患者(信息)ID" @keyup.enter.native="handleQuery" clearable
-                      class="inp"/>
-          </el-form-item>
-        </el-col>
-
-
-        <el-col span="8">
-          <el-form-item label="科室" prop="department">
-            <el-input v-model="queryParams.department" placeholder="请输入科室" @keyup.enter.native="handleQuery" clearable
-                      class="inp"/>
-          </el-form-item>
-        </el-col>
-      </el-row>
-
-      <el-row :gutter="20">
-        <el-col span="24" >
-          <el-form-item>
-            <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
-            <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
-          </el-form-item>
-        </el-col>
-      </el-row>
-
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-button type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')"
-                 v-hasPermi="['work:pv1:add']">新增
-      </el-button>
-      <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit',ids)"
-                 v-hasPermi="['work:pv1:edit']">修改
-      </el-button>
-      <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del"
-                 v-hasPermi="['work:pv1:remove']">删除{{ ids.length > 0 ? '(' + ids.length + ')' : '' }}
-      </el-button>
-    </el-row>
-
-    <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 270px)">
-      <el-table-column type="selection" width="55" align="center"/>
-      <el-table-column label="访问ID" align="center" prop="id"/>
-      <el-table-column label="患者ID" align="center" prop="patientId"/>
-      <el-table-column label="就诊卡号" align="center" prop="cardId"/>
-      <el-table-column label="患者类别" align="center" prop="patClass">
-        <template slot-scope="scope">
-          <dict-tag :options="dict.type.pat_class" :value="scope.row.patClass"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="患者位置" align="center" prop="bed"/>
-      <el-table-column label="主治医师" align="center" prop="physician"/>
-      <el-table-column label="主管护士代码" align="center" prop="nurseCode"/>
-      <el-table-column label="入院次数" align="center" prop="hospitalizedNumber"/>
-      <el-table-column label="收费类别" align="center" prop="feeCategory"/>
-      <el-table-column label="出院方式" align="center" prop="dischargeMethod">
-        <template slot-scope="scope">
-          <dict-tag :options="dict.type.discharge_method" :value="scope.row.dischargeMethod"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="医疗机构代码" align="center" prop="medicalCode"/>
-      <el-table-column label=" 在院状态" align="center" prop="hospitalStatus">
-        <template slot-scope="scope">
-          <dict-tag :options="dict.type.hospital_status" :value="scope.row.hospitalStatus"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="门诊挂号状态" align="center" prop="registrationStatus">
-        <template slot-scope="scope">
-          <dict-tag :options="dict.type.registration_status" :value="scope.row.registrationStatus"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="入院时间" align="center" prop="admissionTime"/>
-      <el-table-column label="出院时间" align="center" prop="dischargeTime"/>
-      <el-table-column label="患者ID" align="center" prop="msgId"/>
-      <el-table-column label="科室" align="center" prop="department"/>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
-        <template slot-scope="scope">
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit',scope.row)"
-                     v-hasPermi="['work:pv1:edit']">修改
-          </el-button>
-          <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)"
-                     v-hasPermi="['work:pv1:remove']">删除
-          </el-button>
-        </template>
-      </el-table-column>
-      <template slot="empty">
-        <el-empty></el-empty>
-      </template>
-    </el-table>
-    <pagination v-if="response.total>0" :total="response.total" :page.sync="queryParams.pageNum"
-                :limit.sync="queryParams.pageSize" @pagination="getList"/>
-  </div>
-</template>
-
-<script>
-import edit from './edit'
-
-export default {
-  name: "Pv1",
-  dicts: ['hospital_status', 'discharge_method', 'pat_class', 'registration_status'],
-  data() {
-    return {
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        patientId: null,
-        cardId: null,
-        patientCategory: null,
-        bed: null,
-        physician: null,
-        nurseCode: null,
-        hospitalizedNumber: null,
-        feeCategory: null,
-        dischargeMethod: null,
-        medicalCode: null,
-        hospitalStatus: null,
-        registrationStatus: null,
-        admissionTime: null,
-        dischargeTime: null,
-        msgId: null,
-        department: null,
-        orderByColumn: 'id', //排序字段
-        isAsc: 'desc' //排序方式
-      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    getList() {
-      this.ajax({url: '/work/pv1/list', data: this.queryParams}).then(response => {
-        this.response = response;
-      });
-    },
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    selects(rows) {
-      this.ids = rows.map(item => item.id)
-    },
-    op(tag, row) {
-      if (tag == 'add') {
-        this.iframe({obj: edit, param: {}, title: '新增', width: '45%', height: '55%'});
-      }
-      if (tag == 'edit') {
-        const id = row.id || this.ids[0];
-        this.iframe({obj: edit, param: {id: id}, title: '编辑', width: '50%', height: '50%'});
-      }
-    },
-    del(row) {
-      this.$confirm('是否确认删除选中数据?', '警告', {type: 'warning'}).then(() => {
-        this.get({url: '/work/pv1/remove/' + (row.id || this.ids)}).then(response => {
-          this.$modal.msgSuccess('删除成功');
-          this.getList();
-        });
-      });
-    }
-  }
-};
-</script>

+ 0 - 148
admin-ui/src/views/work/pv2/edit.vue

@@ -1,148 +0,0 @@
-<style scoped>
-.splited-form {
-  width: 100%;
-  display: flex;
-  justify-content: space-between;
-}
-
-
-.splited-form .left-col {
-  margin-right: 30px;
-}
-</style>
-
-<template>
-  <div class="cmain">
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px" label-position="left">
-        <div class="splited-form">
-          <div class="left-col">
-            <el-form-item label="患者ID" prop="patientId">
-              <el-input v-model="form.patientId" placeholder="请输入患者ID" clearable/>
-            </el-form-item>
-            <el-form-item label="入区时间" prop="entryTime">
-              <el-date-picker clearable
-                              v-model="form.entryTime"
-                              type="date"
-                              value-format="yyyy-MM-dd"
-                              placeholder="请选择入区时间">
-              </el-date-picker>
-            </el-form-item>
-            <el-form-item label="出区原因" prop="reasonArea">
-              <el-select v-model="form.reasonArea" placeholder="请选择出区原因" clearable>
-                <el-option
-                  v-for="dict in dict.type.reason_area"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="创建人" prop="createBy">
-              <el-input v-model="form.createBy" placeholder="请输入创建人" clearable/>
-            </el-form-item>
-            <el-form-item label="创建时间" prop="createTime">
-              <el-date-picker clearable
-                              v-model="form.createTime"
-                              type="date"
-                              value-format="yyyy-MM-dd"
-                              placeholder="请选择创建时间">
-              </el-date-picker>
-
-            </el-form-item>
-            <el-form-item label="更新时间" prop="updateTime">
-              <el-date-picker clearable
-                              v-model="form.updateTime"
-                              type="date"
-                              value-format="yyyy-MM-dd"
-                              placeholder="请选择更新时间">
-              </el-date-picker>
-            </el-form-item>
-          </div>
-          <div class="right-col">
-            <el-form-item label="危重级别">
-              <el-radio-group v-model="form.level">
-                <el-radio
-                  v-for="dict in dict.type.pv2_level"
-                  :key="dict.value"
-                  :label="dict.value"
-                >{{dict.label}}</el-radio>
-              </el-radio-group>
-            </el-form-item>
-            <el-form-item label="出区时间" prop="exitTime">
-              <el-date-picker clearable
-                              v-model="form.exitTime"
-                              type="date"
-                              value-format="yyyy-MM-dd"
-                              placeholder="请选择出区时间">
-              </el-date-picker>
-            </el-form-item>
-            <el-form-item label="婴儿信息标识">
-              <el-radio-group v-model="form.babyCode">
-                <el-radio
-                  v-for="dict in dict.type.baby_code"
-                  :key="dict.value"
-                  :label="dict.value"
-                >{{dict.label}}</el-radio>
-              </el-radio-group>
-            </el-form-item>
-            <el-form-item label="更新人" prop="updateBy">
-              <el-input v-model="form.updateBy" placeholder="请输入更新人" clearable/>
-            </el-form-item>
-            <el-form-item label="患者ID" prop="msgId">
-              <el-input v-model="form.msgId" type="textarea" placeholder="请输入内容" />
-            </el-form-item>
-          </div>
-        </div>
-
-
-
-
-      </el-form>
-
-    <div class="mfooter">
-      <el-button type="primary" @click="submitForm">确 定</el-button>
-      <el-button @click="$layer.close(layerid)">取 消</el-button>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  dicts: ['reason_area', 'baby_code', 'pv2_level'],
-  data() {
-    return {
-      form: {},
-      rules: {
-      }
-    };
-  },
-  mounted() {
-    if (this.param.id) {
-      this.ajax({ url: '/work/pv2/detail/' + this.param.id }).then(response => {
-        this.form = response.data;
-      });
-    }
-  },
-  methods: {
-    submitForm() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id) {
-              this.ajax({method: 'post',url: '/work/pv2/edit', data: this.form }).then(response => {
-                  this.$modal.msgSuccess("修改成功");
-                  this.$layer.close(this.layerid);
-                  this.$parent.getList();
-              });
-          } else {
-              this.ajax({method: 'post',url: '/work/pv2/add', data: this.form }).then(response => {
-                  this.$modal.msgSuccess("新增成功");
-                  this.$layer.close(this.layerid);
-                  this.$parent.getList();
-               });
-          }
-        }
-      });
-    }
-  }
-};
-</script>

+ 0 - 165
admin-ui/src/views/work/pv2/index.vue

@@ -1,165 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent>
-      <el-row>
-        <el-col span="8">
-          <el-form-item label="患者ID" prop="patientId">
-            <el-input v-model="queryParams.patientId" placeholder="请输入患者ID"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-          </el-form-item>
-        </el-col>
-        <el-col span="8">
-          <el-form-item label="危重级别" prop="level">
-            <el-select v-model="queryParams.level" placeholder="请选择危重级别" clearable class="se">
-              <el-option v-for="dict in dict.type.pv2_level" :key="dict.value" :label="dict.label" :value="dict.value"/>
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col span="8">
-          <el-form-item label="入区时间" prop="entryTime">
-          <el-date-picker clearable v-model="queryParams.entryTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择入区时间"></el-date-picker>
-        </el-form-item>
-        </el-col>
-      </el-row>
-
-      <el-row>
-        <el-col span="8">
-          <el-form-item label="出区时间" prop="exitTime">
-            <el-date-picker clearable v-model="queryParams.exitTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择出区时间"></el-date-picker>
-          </el-form-item>
-        </el-col>
-        <el-col span="8">
-          <el-form-item label="出区原因" prop="reasonArea">
-            <el-select v-model="queryParams.reasonArea" placeholder="请选择出区原因" clearable class="se">
-              <el-option v-for="dict in dict.type.reason_area" :key="dict.value" :label="dict.label" :value="dict.value"/>
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col span="8">
-          <el-form-item label="婴儿信息标识" prop="babyCode">
-            <el-select v-model="queryParams.babyCode" placeholder="请选择婴儿信息标识" clearable class="se">
-              <el-option v-for="dict in dict.type.baby_code" :key="dict.value" :label="dict.label" :value="dict.value"/>
-            </el-select>
-          </el-form-item>
-        </el-col>
-      </el-row>
-
-
-
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-        <el-button type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:pv2:add']">新增</el-button>
-        <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit',ids)" v-hasPermi="['work:pv2:edit']">修改</el-button>
-        <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:pv2:remove']">删除{{ids.length>0?'('+ids.length+')':''}}</el-button>
-    </el-row>
-
-    <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 270px)">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="主键ID" align="center" prop="id" />
-      <el-table-column label="患者ID" align="center" prop="patientId" />
-      <el-table-column label="危重级别" align="center" prop="level">
-        <template slot-scope="scope">
-          <dict-tag :options="dict.type.pv2_level" :value="scope.row.level"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="入区时间" align="center" prop="entryTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.entryTime, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="出区时间" align="center" prop="exitTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.exitTime, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="出区原因" align="center" prop="reasonArea">
-        <template slot-scope="scope">
-          <dict-tag :options="dict.type.reason_area" :value="scope.row.reasonArea"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="婴儿信息标识" align="center" prop="babyCode">
-        <template slot-scope="scope">
-          <dict-tag :options="dict.type.baby_code" :value="scope.row.babyCode"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="患者ID" align="center" prop="msgId" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit',scope.row)" v-hasPermi="['work:pv2:edit']">修改</el-button>
-          <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:pv2:remove']">删除</el-button>
-        </template>
-      </el-table-column>
-      <template slot="empty">
-          <el-empty></el-empty>
-      </template>
-    </el-table>
-    <pagination v-if="response.total>0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/>
-  </div>
-</template>
-
-<script>
-import edit from './edit'
-export default {
-  name: "Pv2",
-  dicts: ['reason_area', 'baby_code', 'pv2_level'],
-  data() {
-    return {
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-                      patientId: null,
-                      level: null,
-                      entryTime: null,
-                      exitTime: null,
-                      reasonArea: null,
-                      babyCode: null,
-                      msgId: null,
-                orderByColumn:'id', //排序字段
-                isAsc: 'desc' //排序方式
-      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    getList() {
-      this.ajax({ url: '/work/pv2/list', data: this.queryParams }).then(response => {
-            this.response = response;
-      });
-    },
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    selects(rows) {
-      this.ids = rows.map(item => item.id)
-    },
-    op(tag, row) {
-          if (tag == 'add') {
-            this.iframe({ obj: edit, param: {}, title:'新增',width: '45%', height: '55%'});
-          }
-          if (tag == 'edit') {
-              const id = row.id || this.ids[0];
-              this.iframe({ obj: edit, param: {id: id}, title:'编辑',width: '50%', height: '50%'});
-          }
-    },
-    del(row) {
-        this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
-        this.get({ url: '/work/pv2/remove/' + (row.id || this.ids) }).then(response => {
-                this.$modal.msgSuccess('删除成功');
-                this.getList();
-            });
-        });
-    }
-  }
-};
-</script>

+ 14 - 13
admin-ui/src/views/work/visit/detail.vue

@@ -105,20 +105,20 @@
     </div>
     <!--检查项目-->
     <div v-if="activeName == '检查项目'">
-      <div class="bos">
+      <div class="bos" v-if="obrList.length > 0">
         <div class="lab">
           <div class="bsg"></div>
           <div class="tit">详细检测报告</div>
         </div>
-        <el-descriptions title="详细检测报告" :column="3" border>
-          <el-descriptions-item label="医技项目名称">{{ obrList[]}}</el-descriptions-item>
-          <el-descriptions-item label="报告完成时间">{{ visit.wardName }}</el-descriptions-item>
-          <el-descriptions-item label="危机标志">{{ visit.wardName }}</el-descriptions-item>
-          <el-descriptions-item label="样本收到日期">{{ visit.wardName }}</el-descriptions-item>
-          <el-descriptions-item label="检查部位或样本">{{ visit.wardName }}</el-descriptions-item>
-          <el-descriptions-item label="执行科室名称">{{ visit.wardName }}</el-descriptions-item>
-          <el-descriptions-item label="审核医生">{{ visit.wardName }}</el-descriptions-item>
-          <el-descriptions-item label="报告单日期">{{ visit.wardName }}</el-descriptions-item>
+        <el-descriptions :column="3" border>
+          <el-descriptions-item label="医技项目名称">{{ obrList[current].medTechProName }}</el-descriptions-item>
+          <el-descriptions-item label="报告完成时间">{{ obrList[current].reportCompleteTime }}</el-descriptions-item>
+          <el-descriptions-item label="危机标志">{{ obrList[current].signs }}</el-descriptions-item>
+          <el-descriptions-item label="样本收到日期">{{ obrList[current].sampleReceivedDate }}</el-descriptions-item>
+          <el-descriptions-item label="检查部位或样本">{{ obrList[current].checkpoint }}</el-descriptions-item>
+          <el-descriptions-item label="执行科室名称">{{ obrList[current].executeDepartmentName }}</el-descriptions-item>
+          <el-descriptions-item label="审核医生">{{ obrList[current].reviewDoctorName }}</el-descriptions-item>
+          <el-descriptions-item label="报告单日期">{{ obrList[current].reportDate }}</el-descriptions-item>
         </el-descriptions>
       </div>
       <div class="bos">
@@ -148,12 +148,12 @@ export default {
   dicts: ['pat_class', 'diagnostic_type', 'diagnostic_category_code', 'hospital_status', 'discharge_method', 'patient_sex', 'patient_marital'],
   data() {
     return {
+      current: 0,
       activeName: '患者信息',
       patient: {}, //患者详细信息
       visit: {}, //住院信息
       nkList: [], //亲属列表
       dgList: [], //诊断记录
-      current:0,
       obrList: [], //检测结果列表
       obxList: [], //检测结果列表
       queryParams: {
@@ -173,6 +173,7 @@ export default {
         this.getDgList();
       }
       if (tab.name == '检查项目') {
+        this.getObrList();
         this.getObxList();
       }
     },
@@ -203,9 +204,9 @@ export default {
     /** 查询诊断记录表 */
     getObrList() {
       this.get({ url: '/work/request/patid/' + this.param.patId }).then((response) => {
-        this.Obr = response.data;
+        this.obrList = response.data;
       });
-    }
+    },
     /** 查询诊断记录表 */
     getObxList() {
       this.get({ url: '/work/result/patid/' + this.param.patId }).then((response) => {

+ 66 - 118
admin-ui/src/views/work/visit/index.vue

@@ -1,176 +1,124 @@
 <template>
   <div class="app-container">
-    <el-row style="margin-top: 0">
-      <el-col :span="4" v-if="user.roleName != '医生'">
-        <el-input placeholder="输入部门关键字" :clearable="true" v-model="filterText"></el-input>
-        <div style="height: calc(-203px + 100vh); overflow-y: auto; margin-top: 3px">
-          <el-tree :highlight-current="true" class="filter-tree" :data="deptOptions" node-key="id" :default-expanded-keys="[100]" :filter-node-method="filterNode" @node-click="handleNodeClick" ref="tree"></el-tree>
-        </div>
+    <el-row>
+      <el-col :span="4" v-if="user.roleName == '科室主任'">
+        <dtreeDoctor v-model="queryParams.userId" @handleQuery="handleQuery"></dtreeDoctor>
       </el-col>
-      <el-col :span="user.roleName != '医生' ? 20 : 24" style="height: 100%">
-        <el-form :model="queryParams" ref="queryForm" :inline="true" style="margin-top: 0">
-          <el-form-item prop="physician">
-            <el-input v-model="queryParams.physician" placeholder="请输入主治医生" clearable @keyup.enter.native="handleQuery" />
+      <el-col :span="4" v-if="user.roleName == '超级管理员' || user.roleName == '管理员'">
+        <dtree v-model="queryParams.deptId" @handleQuery="handleQuery"></dtree>
+      </el-col>
+      <el-col :span="user.roleName != '医生' ? 20 : 24">
+        <el-form :model="queryParams" ref="queryForm" :inline="true">
+          <el-form-item prop="physician" v-if="user.roleName == '超级管理员' || user.roleName == '管理员'">
+            <el-input v-model="queryParams.physician" placeholder="请输入主治医生" clearable @keyup.enter.native="handleQuery" class="inp" />
           </el-form-item>
           <el-form-item prop="name">
-            <el-input v-model="queryParams.name" placeholder="请输入患者姓名" clearable @keyup.enter.native="handleQuery" />
+            <el-input v-model="queryParams.name" placeholder="请输入患者姓名" clearable @keyup.enter.native="handleQuery" class="inp" />
           </el-form-item>
           <el-form-item>
-            <el-date-picker v-model="dischargeTime" type="daterange" start-placeholder="开始时间" end-placeholder="结束时间" value-format="yyyy-MM-dd" />
+            <el-date-picker v-model="dateRange" type="daterange" start-placeholder="开始时间" end-placeholder="结束时间" value-format="yyyy-MM-dd" />
           </el-form-item>
           <el-form-item>
             <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
             <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
           </el-form-item>
         </el-form>
-        <el-table :data="patientList" border @selection-change="selects" height="calc(100vh - 240px)">
+        <el-table :data="response.rows" border height="calc(100vh - 240px)">
           <el-table-column type="selection" width="55" align="center" />
-          <el-table-column label="科室" align="center" prop="department" />
-          <el-table-column label="患者姓名" align="center" prop="name" />
-          <el-table-column label="管床医生" align="center" prop="physician" />
-          <el-table-column label="出院方式" align="center" prop="dischargeMethod">
-            <template slot-scope="scope">
-              <dict-tag :options="dict.type.discharge_method" :value="scope.row.dischargeMethod"></dict-tag>
-            </template>
+          <el-table-column label="患者姓名" align="center" prop="name" width="110" />
+          <el-table-column label="性别" align="center" prop="state" width="70">
+            <template slot-scope="scope">{{ scope.row.sex == 'F' ? '女' : '男' }}</template>
           </el-table-column>
-          <el-table-column label="出院时间" align="center" prop="dischargeTime" />
-          <el-table-column label="是否关注小程序" align="center" prop="state" width="140">
+          <el-table-column label="病历号" align="center" prop="blh" width="110" />
+          <el-table-column label="入院时间" align="center" prop="admissionTime" width="160" />
+          <el-table-column label="出院时间" align="center" prop="dischargeTime" width="160" />
+          <el-table-column label="关注小程序" align="center" prop="state" width="100">
             <template slot-scope="scope">
               <el-tag type="danger" v-if="scope.row.isBindWx == 0">未关注</el-tag>
               <el-tag type="success" v-if="scope.row.isBindWx >= 1">已关注</el-tag>
             </template>
           </el-table-column>
-          <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+          <el-table-column label="出院随访(达成率)" align="center" prop="state" width="140">
+            <template slot-scope="scope">
+              <div class="pro">
+                <el-progress class="pp" :text-inside="true" :stroke-width="22" :percentage="scope.row.record > 0 ? parseInt(((scope.row.recordRead / scope.row.record) * 100).toFixed(0)) : 0"></el-progress>
+                <div class="num">{{ scope.row.record }}次</div>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column label="复诊提醒(达成率)" align="center" prop="state" width="140">
             <template slot-scope="scope">
-              <el-button size="mini" type="text" icon="el-icon-search" @click="op('search', scope.row)">查看</el-button>
+              <div class="pro">
+                <el-progress class="pp" :text-inside="true" :stroke-width="22" :percentage="scope.row.up > 0 ? parseInt(((scope.row.upRead / scope.row.up) * 100).toFixed(0)) : 0"></el-progress>
+                <div class="num">{{ scope.row.up }}次</div>
+              </div>
             </template>
           </el-table-column>
+          <el-table-column label="管床医生" align="center" prop="physician" width="110" />
+          <el-table-column label="所属科室" align="center" prop="department" width="160" />
+          <el-table-column label="操作" align="center" width="250" fixed="right">
+            <template slot-scope="scope">
+              <el-button size="mini" type="text" icon="el-icon-search" @click="op('detail', scope.row)">患者信息</el-button>
+              <el-button size="mini" type="text" icon="el-icon-document" @click="op('listByUser', scope.row, 0)">复诊提醒</el-button>
+              <el-button size="mini" type="text" icon="el-icon-document" @click="op('listByUser', scope.row, 1)">出院随访</el-button>
+            </template>
+          </el-table-column>
+          <template slot="empty">
+            <el-empty></el-empty>
+          </template>
         </el-table>
-        <pagination v-if="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
+        <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
       </el-col>
     </el-row>
   </div>
 </template>
 
 <script>
-import search from '@/views/work/visit/search.vue';
+import detail from '@/views/work/visit/detail';
+import listByUser from '@/views/work/follow/record/listByUser';
 export default {
-  dicts: ['discharge_method'],
-  name: 'User',
+  name: 'Visit',
   data() {
     return {
       user: this.$store.state.user,
-      dischargeTime: [],
-      filterText: '',
-      total: 0,
-      // 选中数组
-      ids: [],
-      SearchShow: false,
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
-      //科室名称
-      deptName: undefined,
-      // 部门树选项
-      deptOptions: null,
-      //患者表
-      patientList: null,
-      //查询参数
+      dateRange: [],
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        physician: undefined,
-        name: undefined,
-        department: undefined,
-        deptId: undefined,
-        startTime: undefined,
-        endTime: undefined
+        physician: null,
+        name: null,
+        department: null,
+        deptId: null
       }
     };
   },
-  watch: {
-    dischargeTime(newVal) {
-      if (newVal && newVal.length === 2) {
-        this.queryParams.startTime = newVal[0]; // 开始日期
-        this.queryParams.endTime = newVal[1]; // 结束日期
-      }
-      if (!newVal) {
-        this.queryParams.startTime = ''; // 开始日期
-        this.queryParams.endTime = ''; // 结束日期
-        this.handleQuery();
-      }
-    },
-    filterText(val) {
-      this.$refs.tree.filter(val);
-    }
-  },
   created() {
-    this.getDepartment();
+    if (this.user.roleName == '科室主任') {
+      this.queryParams.userId = this.user.id;
+    }
+    this.getList();
   },
   methods: {
-    filterNode(value, data) {
-      if (!value) return true;
-      return data.label.indexOf(value) !== -1;
-    },
-    // 表单重置
-    reset() {
-      this.form = {
-        physician: undefined,
-        name: undefined
-      };
-      this.resetForm('form');
-    },
-    /** 查询患者列表*/
     getList() {
-      this.get({
-        url: '/work/visit/patientCard',
-        data: {
-          ...this.queryParams
-        }
-      }).then((response) => {
-        this.patientList = response.rows;
-        this.total = response.total;
+      this.get({ url: '/work/visit/patientCard', data: this.queryParams }).then((response) => {
+        this.response = response;
       });
     },
-    /** 查询部门 */
-    getDepartment() {
-      this.get({
-        url: '/system/user/deptTree'
-      }).then((response) => {
-        this.deptOptions = response.data;
-        if (response.data.id != null) {
-          this.queryParams.deptId = response.data[0].id;
-        }
-        this.getList();
-      });
-    },
-    handleNodeClick(data) {
-      if (this.queryParams.deptId === data.id) {
-        return;
+    op(tag, row, type) {
+      if (tag === 'detail') {
+        this.iframe({ obj: detail, param: { id: row.id, patId: row.patId }, title: '查看患者信息', width: '75%', height: '93%' });
       }
-      this.queryParams.deptId = data.id;
-      this.getList();
-    },
-    selects(rows) {
-      this.ids = rows.map((item) => item.id);
-    },
-    op(tag, row) {
-      if (tag === 'search') {
-        this.iframe({ obj: search, param: { id: row.patId, cardId: row.cardId, name: row.name, department: row.department }, title: '查看患者信息', width: '85%', height: '85%' });
+      if (tag === 'listByUser') {
+        this.iframe({ obj: listByUser, param: { patientId: row.patId, patientName: row.name, type: type }, title: row.name + '的' + (type == 0 ? '复诊提醒记录' : '出院随访记录'), width: '80%', height: '80%' });
       }
     },
     handleQuery() {
-      console.log(this.dischargeTime);
       this.queryParams.pageNum = 1;
       this.getList();
     },
-    /** 重置按钮操作 */
     resetQuery() {
-      this.dischargeTime = [];
-      this.queryParams.startTime = '';
-      this.queryParams.endTime = '';
       this.resetForm('queryForm');
+      this.dateRange = [];
       this.handleQuery();
     }
   }