Bladeren bron

feat:患者就诊信息

lmx 9 maanden geleden
bovenliggende
commit
31de6ae84a
2 gewijzigde bestanden met toevoegingen van 360 en 0 verwijderingen
  1. 136 0
      admin-ui/src/views/work/patient/index.vue
  2. 224 0
      admin-ui/src/views/work/patient/search.vue

+ 136 - 0
admin-ui/src/views/work/patient/index.vue

@@ -0,0 +1,136 @@
+<template>
+  <div class="app-container">
+    <!-- 行容器 -->
+    <el-row :gutter="20">
+      <!-- 列容器 -->
+      <!-- 左边的列表,显示各个科室 -->
+      <el-col :span="4">
+        <el-menu v-for="(item,index) in deptOptions">
+          <el-menu-item @click="handleNodeClick(item.department)" :key="index">
+            <span slot="title">{{item.department}}</span>
+          </el-menu-item>
+        </el-menu>
+      </el-col>
+      <!-- 患者诊断记录列表 -->
+      <el-col :span="20">
+        <el-form :model="queryParams" ref="queryForm" :inline="true" >
+          <el-form-item prop="physician">
+            <el-input v-model="queryParams.physician" placeholder="请输入主治医生" clearable @keyup.enter.native="handleQuery" class="se" />
+          </el-form-item>
+          <el-form-item prop="patientName">
+            <el-input v-model="queryParams.patientName" placeholder="请输入患者姓名" clearable @keyup.enter.native="handleQuery" class="se" />
+          </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 - 270px)">
+          <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>
+          <el-table-column label="出院时间" align="center" prop="dischargeTime" />
+          <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-search" @click="op('search',scope.row)" v-hasPermi="['work:dg:edit']">查看</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination v-if="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import search from "@/views/work/patient/search.vue";
+export default {
+  dicts:['discharge_method'],
+  name: 'User',
+  data() {
+    return {
+      total:0,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      //科室名称
+      deptName:undefined,
+      // 部门树选项
+      deptOptions: null,
+      //患者表
+      patientList:null,
+      //查询参数
+      queryParams: {
+        pageNum:1,
+        pageSize:10,
+        physician: undefined,
+        patientName:undefined,
+        departmentName:undefined,
+      }
+    };
+  },
+  watch: {
+  },
+  created() {
+    this.getDepartment();
+  },
+  methods: {
+    // 表单重置
+    reset() {
+      this.form = {
+        physician:undefined,
+        name:undefined
+      };
+      this.resetForm('form');
+    },
+    /** 查询患者列表*/
+    getList(){
+      this.get({
+        url:'/work/pv1/patientCard',
+        data:this.queryParams
+      }).then((response)=>{
+        this.patientList = response.rows;
+        this.total = response.total;
+      })
+    },
+    /** 查询部门 */
+    getDepartment() {
+      this.get({
+        url:'/work/pv1/department'
+      }).then((response) => {
+        this.deptOptions = response.rows;
+      });
+    },
+    handleNodeClick(department){
+      this.queryParams.departmentName = department;
+      this.getList();
+    },
+    selects(rows) {
+      this.ids = rows.map(item => item.id)
+    },
+    op(tag, row) {
+      if (tag == 'search') {
+        this.iframe({ obj: search, param: {id:row.patientId,cardId:row.cardId, name:row.name, department:row.department}, title:'查看患者信息',width: '95%', height: '95%'});
+      }
+    },
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm('queryForm');
+      this.handleQuery();
+    },
+  }
+};
+</script>

+ 224 - 0
admin-ui/src/views/work/patient/search.vue

@@ -0,0 +1,224 @@
+<template>
+  <el-row :gutter="20">
+    <el-col :span="6">
+      <el-tabs type="card" @tab-click="handleTabClick" v-model="activeNames">
+        <el-tab-pane label="基本信息" name="info" style="width: 24vw">
+          <div style="height: 80vh; overflow-y: auto">
+            <el-descriptions  style="width: 100%" title="患者信息" :column="1" border>
+              <el-descriptions-item label="患者标识符">{{patientInfo.patientCode}}</el-descriptions-item>
+              <el-descriptions-item label="就诊卡号">{{patientInfo.cardNumber}}</el-descriptions-item>
+              <el-descriptions-item label="姓名">{{patientInfo.name}}</el-descriptions-item>
+              <el-descriptions-item label="性别">
+                <dict-tag :options="dict.type.patient_sex" :value="patientInfo.sex"/>
+              </el-descriptions-item>
+              <el-descriptions-item label="身份证号" prop="sfzh">{{patientInfo.sfzh}}</el-descriptions-item>
+              <el-descriptions-item label="出生时间" prop="birthDate">{{patientInfo.birthDate}}</el-descriptions-item>
+              <el-descriptions-item label="居住地址" prop="address">{{patientInfo.address}}</el-descriptions-item>
+              <el-descriptions-item label="联系电话" prop="phone">{{patientInfo.phone}}</el-descriptions-item>
+              <el-descriptions-item label="婚姻状况" prop="marital">
+                <dict-tag :options="dict.type.patient_marital" :value="patientInfo.marital" />
+              </el-descriptions-item>
+              <el-descriptions-item label="民族" prop="nation">{{patientInfo.nation}}</el-descriptions-item>
+              <el-descriptions-item label="职业" prop="career">{{patientInfo.career}}</el-descriptions-item>
+              <el-descriptions-item label="国籍" prop="nationality">{{patientInfo.nationality}}</el-descriptions-item>
+              <el-descriptions-item label="病历号" prop="blh">{{patientInfo.blh}}</el-descriptions-item>
+              <el-descriptions-item label="病人卡号" prop="brkh">{{patientInfo.brkh}}</el-descriptions-item>
+              <el-descriptions-item label="婴儿序号" prop="yexh">{{patientInfo.yexh}}</el-descriptions-item>
+            </el-descriptions>
+          </div>
+        </el-tab-pane>
+
+        <el-tab-pane label="就诊记录" @tab-click="handleTabClick" name="time" style="width: 24vw">
+          <el-timeline>
+            <el-timeline-item v-for="(item,index) in timeList" :timestamp="item.dischargeTime" :key="index">
+              <span @click="getCard(item.id)">{{item.department}}</span>
+            </el-timeline-item>
+          </el-timeline>
+        </el-tab-pane>
+      </el-tabs>
+    </el-col>
+
+    <el-col :span="18">
+      <el-tabs type="card" @tab-click="handleTabClick" v-model="activeName">
+        <el-tab-pane label="就诊信息" style="width: 70vw;" name="pv">
+          <el-descriptions :column="3" border height="calc(90vh - 273px)">
+            <el-descriptions-item label="患者类别">{{pvList.patientCategory}}</el-descriptions-item>
+            <el-descriptions-item label="所在病区">{{pvList.wardName}}</el-descriptions-item>
+            <el-descriptions-item label="主治医生">{{pvList.physician}}</el-descriptions-item>
+            <el-descriptions-item label="主管护士">{{pvList.nurseCode}}</el-descriptions-item>
+            <el-descriptions-item label="在院状态">
+              <dict-tag :options="dict.type.hospital_status" :value="pvList.hospitalStatus"/>
+            </el-descriptions-item>
+            <el-descriptions-item label="入院次数">{{pvList.hospitalizedNumber}}</el-descriptions-item>
+            <el-descriptions-item label="就诊号码">{{pvList.cardId}}</el-descriptions-item>
+            <el-descriptions-item label="出院方式">
+              <dict-tag :options="dict.type.discharge_method" :value="pvList.dischargeMothod"/>
+            </el-descriptions-item>
+            <el-descriptions-item label="入院时间">{{pvList.admissionTime}}</el-descriptions-item>
+            <el-descriptions-item label="出院时间">{{pvList.dischargeTime}}</el-descriptions-item>
+            <el-descriptions-item label="危重级别">{{pvList.level}}</el-descriptions-item>
+            <el-descriptions-item label="入区时间">{{pvList.entryTime}}</el-descriptions-item>
+            <el-descriptions-item label="出区时间">{{pvList.exitTime}}</el-descriptions-item>
+            <el-descriptions-item label="出区原因">{{pvList.reasonArea}}</el-descriptions-item>
+          </el-descriptions>
+        </el-tab-pane>
+
+        <el-tab-pane label="相关当事人/近亲段信息" style="width: 70vw;" name="nk">
+          <!-- 表格展示多个亲属的信息-->
+          <el-table height="calc(90vh - 273px)" width="69vw" :data="nkList">
+            <el-table-column label="姓名" align="center" prop="name"></el-table-column>
+            <el-table-column label="所属关系" align="center" prop="kinship"></el-table-column>
+            <el-table-column label="近亲地址" align="center" prop="address"></el-table-column>
+            <el-table-column label="联系电话" align="center" prop="phone"></el-table-column>
+            <el-table-column label="工作名称" align="center" prop="workName"></el-table-column>
+            <el-table-column label="工作类别" align="center" prop="workCode"></el-table-column>
+          </el-table>
+          <pagination v-show="totalNk > 0" :total="totalNk" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getNkList" />
+        </el-tab-pane>
+
+        <el-tab-pane label="诊断结果" style="width: 70vw" name="dg">
+          <el-table width="69vw" height="calc(90vh - 165px)" :data="dgList">
+            <el-table-column label="诊断名称" align="center" prop="diagnosticCode"></el-table-column>
+            <el-table-column label="诊断时间" align="center" prop="diagnosisTime"></el-table-column>
+            <el-table-column label="诊断类型" align="center" prop="diagnosticType">
+              <template slot-scope="scope">
+                <dict-tag :options="dict.type.diagnostic_type" :value="scope.row.diagnosticType"/>
+              </template>
+            </el-table-column>
+            <el-table-column label="诊断类别" align="center" prop="diagnosticCategoryCode">
+              <template slot-scope="scope">
+                <dict-tag :options="dict.type.diagnostic_category_code" :value="scope.row.diagnosticCategoryCode"/>
+              </template>
+            </el-table-column>
+          </el-table>
+          <pagination v-show="totalDg > 0" :total="totalDg" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getDgList" />
+        </el-tab-pane>
+      </el-tabs>
+    </el-col>
+  </el-row>
+
+</template>
+
+<script>
+export default {
+  dicts: ['diagnostic_type', 'diagnostic_category_code','hospital_status','discharge_method','patient_sex','patient_marital'],
+  data(){
+    return{
+      activeName:'pv',
+      activeNames:'info',
+      timeList:null,
+      //表数据总条数
+      totalNk:0,
+      totalDg:0,
+      dgList:null,
+      //pv表数据
+      pvList:null,
+      //nk表数据
+      nkList:null,
+      //obx表数据
+      obxList:null,
+      obrList:null,
+      //患者信息
+      patientInfo:null,
+      //就诊信息
+      pvInfo:null,
+      queryParams:{
+        pageNum:1,
+        pageSize:10
+      }
+    }
+  },
+  watch:{
+  },
+  created() {
+    this.getPatient();
+    this.getPvList();
+    this.handleTabClick('pv');
+  },
+  methods:{
+    getCard(id){
+      this.ajax({
+        url:'/work/pv1/list',
+        data:{
+          id:id
+        }
+      }).then((response)=>{
+        this.pvList = response.rows[0];
+        console.log(this.pvList)
+      })
+    },
+    handleTabClick(tab){
+      if(tab.name === 'time'){
+        this.getTime();
+      }
+      if(tab.name === 'nk'){
+        this.getNkList();
+      }
+      if(tab.name === 'dg'){
+        this.getDgList();
+      }
+      if(tab.name === 'pv'){
+        this.getPvList();
+      }
+    },
+    getTime(){
+      this.ajax({
+        url:'/work/pv1/list',
+        data:{
+          patientId:this.param.id,
+          department:this.param.department
+        }
+      }).then((response)=>{
+        console.log(this.param.name)
+        this.timeList = response.rows;
+        console.log(this.timeList);
+      })
+    },
+    /** 查询患者信息 */
+    getPatient(){
+      this.get({
+        url:'/work/patient/detail/'+this.param.id,
+      }).then((response)=>{
+        this.patientInfo = response.data;
+      })
+    },
+    getPvList(){
+      this.get({
+        url:'/work/pv1/list',
+        data:{
+          cardId:this.param.cardId
+        }
+      }).then((response)=>{
+        this.pvList = response.rows[0];
+      })
+    },
+    /** 查询亲属表 */
+    getNkList() {
+        this.ajax({
+          url:'/work/nk/list',
+          data:{
+            patientId:this.param.id,
+              ...this.queryParams
+          }
+        }).then((response)=>{
+          this.nkList = response.rows;
+          this.totalNk = response.total;
+        })
+    },
+    getDgList(){
+      this.ajax({
+        url:'/work/dg/list',
+        data:{
+          patientId:this.patientInfo.id,
+            ...this.queryParams
+        }
+      }).then((response)=>{
+        this.dgList = response.rows;
+        this.totalDg = response.total;
+      })
+    }
+  }
+}
+</script>
+<style scoped lang="scss">
+</style>