فهرست منبع

Merge branch 'master' into 'master'

传染病基本信息上传优化以及新增门诊病历上传

See merge request lighter/vue-intergration-platform!176
huangshuhua 1 ماه پیش
والد
کامیت
7e9e3f7ba4

+ 38 - 0
src/api/crb-manage/crb-mz-bl-record.js

@@ -0,0 +1,38 @@
+import request from '../../utils/request'
+
+
+// 根据条件查询患者诊疗活动信息
+export function selectOutpatientRecord(data) {
+    return request({
+        url: '/emrBlRecord/selectOutpatientRecord',
+        method: 'post',
+        data
+    })
+}
+
+// 上传患者诊疗活动信息
+export function uploadEmrOutpatientRecord(data) {
+    return request({
+        url: '/emrBlRecord/uploadEmrOutpatientRecord',
+        method: 'post',
+        data
+    })
+}
+
+// 根据条件查询患者诊疗活动信息
+export function selectOutpatientObs(data) {
+    return request({
+        url: '/emrBlRecord/selectOutpatientObs',
+        method: 'post',
+        data
+    })
+}
+
+// 上传患者诊疗活动信息
+export function uploadEmrOutpatientObs(data) {
+    return request({
+        url: '/emrBlRecord/uploadEmrOutpatientObs',
+        method: 'post',
+        data
+    })
+}

+ 18 - 9
src/views/crb-manage/CrbActivityInfo.vue

@@ -47,10 +47,9 @@
                 <el-table-column prop="idCardTypeName" label="身份证件类别名称" width="140" />
                 <el-table-column prop="idCard" label="身份证件号码" width="140" >
                   <template #default="scope">
-                    {{scope.row.idCard.replace(reg, '\$1******\$2')}}
+                    {{!scope.row.idCard ? '' : scope.row.idCard.replace(reg, '\$1******\$2')}}
                   </template>
                 </el-table-column>
-
                 <el-table-column prop="chiefComplaint" label="主诉" width="180" show-overflow-tooltip/>
                 <el-table-column prop="presentIllnessHis" label="现病史/入院情况" width="160" show-overflow-tooltip/>
                 <el-table-column prop="physicalExamination" label="体格检查" width="160" show-overflow-tooltip/>
@@ -58,7 +57,7 @@
                 <el-table-column prop="diagnoseTime" label="疾病诊断日期" width="130"/>
                 <el-table-column prop="diseaseCode" label="传染病诊断代码" width="140"/>
                 <el-table-column prop="diseaseName" label="传染病诊断名称" width="120" show-overflow-tooltip/>
-                <el-table-column prop="wmDiseaseCode" label="西医疾病诊断编码" width="140"/>
+                <el-table-column prop="wmDiseaseCode" label="西医疾病诊断编码" width="140" show-overflow-tooltip/>
                 <el-table-column prop="wmDiseaseName" label="西医疾病诊断名称" width="120" show-overflow-tooltip/>
                 <el-table-column prop="tcmDiseaseCode" label="中医病名代码" width="140"/>
                 <el-table-column prop="tcmDiseaseName" label="中医病名名称" width="120" show-overflow-tooltip/>
@@ -180,12 +179,22 @@ const uploadActivityInfo = (row) => {
     dangerouslyUseHTMLString: true
   }).then(() => {
     uploadEmrActivityInfo(row).then((res) => {
-      ElMessage({
-        type: "success",
-        message: "患者诊疗活动信息上传成功!",
-        duration: 2500,
-        showClose: true,
-      });
+      if(res.result){
+        ElMessage({
+          type: "success",
+          message: res.desc,
+          duration: 2500,
+          showClose: true,
+        });
+      } else {
+        ElMessage({
+          type: "error",
+          message: res.desc,
+          duration: 2500,
+          showClose: true,
+        });
+      }
+      queryActivityInfo()
     })
   }).catch((action) => {
     if (action === 'cancel') {

+ 2 - 2
src/views/crb-manage/CrbBaseInfo.vue

@@ -32,12 +32,12 @@
                 <el-table-column prop="idCardTypeCode" label="身份证件类别" width="120"/>
                 <el-table-column prop="idCard" label="身份证件号码" width="180" >
                   <template #default="scope">
-                    {{scope.row.idCard.replace(reg, '\$1******\$2')}}
+                    {{!scope.row.idCard ? '' : scope.row.idCard.replace(reg, '\$1******\$2')}}
                   </template>
                 </el-table-column>
                 <el-table-column prop="tel" label="联系电话" width="180">
                   <template #default="scope">
-                    {{scope.row.tel.replace(reg1, '\$1****\$2')}}
+                    {{!scope.row.tel ? '' : scope.row.tel.replace(reg, '\$1******\$2')}}
                   </template>
                 </el-table-column>
                 <el-table-column prop="physicianNo" label="医师执业资格证号" width="180"/>

+ 264 - 0
src/views/crb-manage/CrbMzBlRecord.vue

@@ -0,0 +1,264 @@
+<template>
+  <div class="layout_container">
+    <header>
+      <el-input v-model.trim="patNo" class="w-50 m-2" style="width: 280px" placeholder="请输入门诊号/住院号" clearable>
+        <template #prepend>门诊号/住院号</template>
+      </el-input>
+      <el-input v-model.trim="xm" class="w-50 m-2" style="width: 280px; margin-left: 3px" placeholder="请输入姓名" clearable>
+        <template #prepend>姓名</template>
+      </el-input>
+      <el-input v-model.trim="idCard" class="w-50 m-2" style="width: 280px; margin-left: 3px" placeholder="请输入身份证号码" clearable>
+        <template #prepend>身份证号码</template>
+      </el-input>
+      <el-select  v-model="tjType" placeholder="请选择类型" style="width: 120px; margin-left: 3px">
+        <el-option v-for="item in typeList" :key="item.value" :label="item.label" :value="item.value">
+        </el-option>
+      </el-select>
+      <el-date-picker v-model="dateRange" type="daterange" range-separator="至" start-placeholder="开始日期" :clearable="false"
+                      end-placeholder="结束日期" :shortcuts="shortcuts" style="width: 300px; margin-left: 3px">
+      </el-date-picker>
+      <el-divider direction="vertical" />
+      <el-button type="primary" icon="Search" @click="queryEmrBaseInfo" style="margin-left: 5px">查询</el-button>
+    </header>
+    <div class="layout_main">
+      <el-tabs class="el-tabs__fill" v-model="editableTabsValue" type="border-card" @tab-click="handleClick">
+        <el-tab-pane key="mzBlRecord" label="门(急)诊病历记录上传" name="mzBlRecord">
+          <div class="layout_display_flex_y">
+            <div class="layout_flex_1-y">
+              <el-table :data="mzBlRecordData.slice(pageSize * (currentPage - 1), pageSize * currentPage)" border
+                        stripe highlight-current-row height="100%">
+                <el-table-column type="index" label="序号" width="50" fixed/>
+                <el-table-column prop="uploadFlag" label="上传状态" width="100" fixed>
+                  <template #default="scope">
+                    <el-button v-if="scope.row.uploadFlag === 0 " type="danger" size="small" class="cancel-btn">上传失败</el-button>
+                    <el-button v-else-if="scope.row.uploadFlag === 1 " type="primary" size="small" class="cancel-btn">上传成功</el-button>
+                    <el-button v-else type="warning" size="small" class="cancel-btn">未上传</el-button>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="uploadMsg" label="上传结果信息" width="180" show-overflow-tooltip fixed/>
+                <el-table-column prop="id" label="ID" width="145" fixed/>
+                <el-table-column prop="patientId" label="患者ID" width="80" fixed/>
+                <el-table-column prop="serialNumber" label="就诊流水号" width="80" />
+                <el-table-column prop="patientName" label="患者姓名" width="100"/>
+                <el-table-column prop="idCardTypeCode" label="身份证件类别代码" width="120" />
+                <el-table-column prop="idCardTypeName" label="身份证件类别名称" width="140" />
+                <el-table-column prop="idCard" label="身份证件号码" width="140" >
+                  <template #default="scope">
+                    {{!scope.row.idCard ? '' : scope.row.idCard.replace(reg, '\$1******\$2')}}
+                  </template>
+                </el-table-column>
+                <el-table-column prop="allergyHisFlag" label="过敏史标志" width="180" show-overflow-tooltip/>
+                <el-table-column prop="allergyHis" label="过敏史" width="180" show-overflow-tooltip/>
+                <el-table-column prop="outpatientDate" label="就诊日期时间" width="130"/>
+                <el-table-column prop="initalDiagnosisCode" label="初诊标志代码" width="140"/>
+                <el-table-column prop="chiefComplaint" label="主诉" width="180" show-overflow-tooltip/>
+                <el-table-column prop="presentIllnessHis" label="现病史" width="160" show-overflow-tooltip/>
+                <el-table-column prop="pastIllnessHis" label="既往史" width="160" show-overflow-tooltip/>
+                <el-table-column prop="infectionHis" label="传染病史" width="160" show-overflow-tooltip/>
+                <el-table-column prop="vaccinationHis" label="预防接种史" width="160" show-overflow-tooltip/>
+                <el-table-column prop="operationHis" label="手术史" width="160" show-overflow-tooltip/>
+                <el-table-column prop="bloodTransfusion" label="输血史" width="160" show-overflow-tooltip/>
+                <el-table-column prop="personalHis" label="个人史" width="160" show-overflow-tooltip/>
+                <el-table-column prop="maritalHis" label="婚育史" width="160" show-overflow-tooltip/>
+                <el-table-column prop="menstrualHis" label="月经史" width="160" show-overflow-tooltip/>
+                <el-table-column prop="familyHis" label="家族史" width="160" show-overflow-tooltip/>
+                <el-table-column prop="physicalExamination" label="体格检查" width="160" show-overflow-tooltip/>
+                <el-table-column prop="observationResult" label='中医“四诊”观察结果' width="160" show-overflow-tooltip/>
+                <el-table-column prop="studiesSummaryResult" label="辅助检查" width="160" show-overflow-tooltip/>
+                <el-table-column prop="wmDiagnosisCode" label="西医疾病诊断编码" width="140" show-overflow-tooltip/>
+                <el-table-column prop="wmDiagnosisName" label="西医疾病诊断名称" width="120" show-overflow-tooltip/>
+                <el-table-column prop="tcmInitalDiagnosisCode" label="中医病名代码" width="140"/>
+                <el-table-column prop="tcmInitalDiagnosisName" label="中医病名名称" width="120" show-overflow-tooltip/>
+                <el-table-column prop="tcmInitalSyndromeCode" label="中医证候编码" width="140"/>
+                <el-table-column prop="tcmInitalSyndromeName" label="中医证候名称" width="120" show-overflow-tooltip/>
+                <el-table-column prop="differentiationBasis" label="辨证依据" width="120" show-overflow-tooltip/>
+                <el-table-column prop="treatment" label="治则治法" width="120" show-overflow-tooltip/>
+                <el-table-column prop="course" label="急诊留观病程记录" v-if="tjType === '2'" width="140" show-overflow-tooltip/>
+                <el-table-column prop="observationDate" label="收入观察室日期时间" v-if="tjType === '2'" width="130"/>
+                <el-table-column prop="notes" label="注意事项" width="140" v-if="tjType === '2'" show-overflow-tooltip/>
+                <el-table-column prop="deptCode" label="科室代码" width="180" show-overflow-tooltip/>
+                <el-table-column prop="deptName" label="科室名称" width="180"/>
+                <el-table-column prop="orgCode" label="医疗机构代码" width="120"/>
+                <el-table-column prop="orgName" label="医疗机构名称" width="120"/>
+                <el-table-column prop="operatorId" label="操作人ID" width="80"/>
+                <el-table-column prop="operationTime" label="操作时间" width="140"/>
+                <el-table-column fixed="right" label="操作" min-width="80" width="80" center>
+                  <template #default="scope">
+                    <el-button type="primary" size="small" @click="uploadMzBlRecord(scope.row)">上传</el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+            </div>
+            <div>
+              <el-pagination :current-page="currentPage" :page-size="pageSize" :page-sizes="[10, 15, 20, 25]"
+                             :total="mzBlRecordData.length" layout="total, sizes, prev, pager, next, jumper"
+                             style="margin-top: 5px" @size-change="handleSizeChange"
+                             @current-change="handleCurrentChange">
+              </el-pagination>
+            </div>
+          </div>
+        </el-tab-pane>
+      </el-tabs>
+    </div>
+  </div>
+</template>
+<script setup name="CrbMzBlRecord">
+import {nextTick, onMounted, ref} from "vue";
+import {
+  selectOutpatientObs, selectOutpatientRecord,
+  uploadEmrOutpatientObs, uploadEmrOutpatientRecord
+} from "@/api/crb-manage/crb-mz-bl-record.js";
+import {ElMessage, ElMessageBox} from "element-plus";
+import {shortcuts} from "@/data/shortcuts.js";
+import {formatDatetime, getDateRangeFormatDate} from "@/utils/date.js";
+
+const patNo = ref('')
+const xm = ref('')
+const idCard = ref('')
+const tjType = ref('1')
+const typeList = [{ value: "1", label: "普通记录" }, { value: "2", label: "留观记录" }]
+const editableTabsValue = ref("mzBlRecord")
+const mzBlRecordData = ref([])
+const dateRange = ref([])
+const start = formatDatetime(shortcuts[0].value[0])
+const end = formatDatetime(shortcuts[0].value[0])
+
+const pageSize = ref(20)
+const currentPage = ref(1)
+const handleSizeChange = (val) => {
+  pageSize.value = val
+}
+const handleCurrentChange = (val) => {
+  currentPage.value = val
+}
+
+const paramInfo = ref({
+  startTime: '',
+  endTime: '',
+  patNo: '', // 门诊号
+  patName: '', // 姓名
+  idCard: '', // 身份证号码
+  tjType: '', // 1:普通记录; 2:留观记录
+})
+
+const reg = /^(.{6})\d+(.{4})$/
+
+onMounted(() => {
+  nextTick(() => {
+    paramInfo.value.startTime = start;
+    paramInfo.value.endTime = end + " 23:59:59";
+    dateRange.value = [start, end];
+    queryMzBlRecord()
+  })
+})
+
+const handleClick = (tab, event) => {
+  // 查询哪个tab页面
+  editableTabsValue.value = tab.props.name;
+  if (editableTabsValue.value === "mzBlRecord") {
+    queryMzBlRecord()
+  }
+}
+
+const queryEmrBaseInfo = () => {
+  if (editableTabsValue.value === "mzBlRecord") {
+    queryMzBlRecord()
+  }
+}
+
+// 查询门(急)诊病历记录
+const queryMzBlRecord = () => {
+  if (dateRange.value) {
+    let dateS = getDateRangeFormatDate(dateRange.value)
+    paramInfo.value.startTime = dateS.startTime
+    paramInfo.value.endTime = dateS.endTime
+  }
+  paramInfo.value.patNo = patNo.value
+  paramInfo.value.patName = xm.value
+  paramInfo.value.idCard = idCard.value
+  paramInfo.value.tjType = tjType.value
+
+  if("1" === tjType.value){
+    selectOutpatientRecord(paramInfo.value).then((res) => {
+      mzBlRecordData.value = res
+    })
+  } else {
+    selectOutpatientObs(paramInfo.value).then((res) => {
+      mzBlRecordData.value = res
+    })
+  }
+
+}
+const uploadMzBlRecord = (row) => {
+  // 上传门(急)诊病历
+  if("1" === tjType.value){
+    ElMessageBox.confirm('确定上传门(急)诊病历?', {
+      cancelButtonText: '取消',
+      confirmButtonText: '确定',
+      type: 'warning',
+      distinguishCancelAndClose: true,
+      dangerouslyUseHTMLString: true
+    }).then(() => {
+      uploadEmrOutpatientRecord(row).then((res) => {
+        if(res.result){
+          ElMessage({
+            type: "success",
+            message: res.desc,
+            duration: 2500,
+            showClose: true,
+          });
+        } else {
+          ElMessage({
+            type: "error",
+            message: res.desc,
+            duration: 2500,
+            showClose: true,
+          });
+        }
+        queryMzBlRecord()
+      })
+    }).catch((action) => {
+      if (action === 'cancel') {
+        console.log("已取消。。。")
+      }
+    })
+  } else {
+    // 上传门(急)诊留观记录
+    ElMessageBox.confirm('确定上传门(急)诊留观记录?', {
+      cancelButtonText: '取消',
+      confirmButtonText: '确定',
+      type: 'warning',
+      distinguishCancelAndClose: true,
+      dangerouslyUseHTMLString: true
+    }).then(() => {
+      uploadEmrOutpatientObs(row).then((res) => {
+        if(res.result){
+          ElMessage({
+            type: "success",
+            message: res.desc,
+            duration: 2500,
+            showClose: true,
+          });
+        } else {
+          ElMessage({
+            type: "error",
+            message: res.desc,
+            duration: 2500,
+            showClose: true,
+          });
+        }
+        queryMzBlRecord()
+      })
+    }).catch((action) => {
+      if (action === 'cancel') {
+        console.log("已取消。。。")
+      }
+    })
+  }
+}
+</script>
+<style scoped>
+.cancel-btn:hover {
+  cursor: default !important;
+}
+</style>

+ 18 - 8
src/views/crb-manage/CrbPatientInfo.vue

@@ -42,7 +42,7 @@
                 <el-table-column prop="idCardTypeName" label="身份证件类别名称" width="120" />
                 <el-table-column prop="idCard" label="身份证件号码" width="140" >
                   <template #default="scope">
-                    {{scope.row.idCard.replace(reg, '\$1******\$2')}}
+                    {{!scope.row.idCard ? '' : scope.row.idCard.replace(reg, '\$1******\$2')}}
                   </template>
                 </el-table-column>
                 <el-table-column prop="genderCode" label="性别代码" width="100"/>
@@ -68,7 +68,7 @@
                 <el-table-column prop="nultitudeTypeOther" label="人群分类其他" width="100"/>
                 <el-table-column prop="tel" label="患者电话号码" width="140">
                   <template #default="scope">
-                    {{scope.row.tel.replace(reg1, '\$1****\$2')}}
+                    {{!scope.row.tel ? '' : scope.row.tel.replace(reg, '\$1******\$2')}}
                   </template>
                 </el-table-column>
                 <el-table-column prop="contacts" label="联系人/监护人姓名" width="120"/>
@@ -187,12 +187,22 @@ const uploadPatientInfo = (row) => {
     dangerouslyUseHTMLString: true
   }).then(() => {
     uploadEmrPatientInfo(row).then((res) => {
-      ElMessage({
-        type: "success",
-        message: "患者基本信息上传成功!",
-        duration: 2500,
-        showClose: true,
-      });
+      if(res.result){
+        ElMessage({
+          type: "success",
+          message: res.desc,
+          duration: 2500,
+          showClose: true,
+        });
+      } else {
+        ElMessage({
+          type: "error",
+          message: res.desc,
+          duration: 2500,
+          showClose: true,
+        });
+      }
+      queryPatientInfo()
     })
   }).catch((action) => {
     if (action === 'cancel') {