Browse Source

Merge branch 'master' of https://gitlab.taihe.com/lighter/vue-intergration-platform

xiaochan 3 years ago
parent
commit
f7695f13f1

+ 11 - 3
src/api/medical-insurance/si-psn-rcd.js

@@ -12,7 +12,7 @@ export function getAllSpcChrRcdsByPsnNo(psnNo) {
   return request({
     url: '/siPsnRcd/getAllSpcChrRcdsByPsnNo',
     method: 'get',
-    params: { psnNo }
+    params: { psnNo },
   })
 }
 
@@ -36,7 +36,7 @@ export function getAllTrsHospRcdByPsnNo(psnNo) {
   return request({
     url: '/siPsnRcd/getAllTrsHospRcdByPsnNo',
     method: 'get',
-    params: { psnNo }
+    params: { psnNo },
   })
 }
 
@@ -60,7 +60,7 @@ export function getAllPsnAsgnmtRcdByPsnNo(psnNo) {
   return request({
     url: '/siPsnRcd/getAllPsnAsgnmtRcdByPsnNo',
     method: 'get',
-    params: { psnNo }
+    params: { psnNo },
   })
 }
 
@@ -71,3 +71,11 @@ export function revokePersonnelAssignmentRecord(data) {
     data,
   })
 }
+
+export function selectAllSpcSlwRcds(begntime, endtime) {
+  return request({
+    url: '/siPsnRcd/selectAllSpcSlwRcds',
+    method: 'get',
+    params: { begntime, endtime },
+  })
+}

+ 9 - 0
src/api/messages/index.js

@@ -0,0 +1,9 @@
+import request from '../../utils/request'
+
+export function onPageRefresh(data) {
+  return request({
+    url: '/socketMessage/onPageRefresh',
+    method: 'post',
+    data,
+  })
+}

+ 314 - 0
src/components/inpatient/frontsheet-printpage/HeadPage.vue

@@ -0,0 +1,314 @@
+<template>
+  <div id="page0">
+    <h3 style="width: 100%; font-size: 17px; text-align: center">住 院 病 案 首 页</h3>
+    <div style="margin-right: 8px; width: 100%; height: 32px; line-height: 32px; font-size: 15px; text-align: center">
+      医疗机构:
+      <span style="font-weight: 700">湖南泰和医院</span>
+      (组织机构代码:
+      <span style="font-weight: 700">43010150145</span>
+      )
+    </div>
+    <div style="margin-right: 8px; height: 25px; line-height: 25px; display: flex">
+      <div>
+        医疗付费方式:
+        <span style="display: inline-block; width: 180px">{{ filterNameInDic(patient.payMethod, 'getPayMethod') }}</span>
+      </div>
+      <div style="margin-right: 8px; width: 120px; margin-left: 12px">健康卡号: {{ patient.healthCardNo }}</div>
+      <div style="margin-right: 8px; width: 100px">第&nbsp;{{ patient.admissTimes }}&nbsp;次住院</div>
+      <div style="margin-right: 8px; width: 130px">病案号: {{ patient.bah }}</div>
+    </div>
+  </div>
+  <div id="page1" style="border: 1px solid black; padding: 5px">
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      姓名:
+      <div style="padding: 0 4px; margin-right: 8px; width: 70px; border-bottom: 1px solid black">{{ patient.name }}</div>
+      性别:
+      <div style="padding: 0 4px; margin-right: 8px; border-bottom: 1px solid black">{{ filterNameInDic(patient.sex, 'getSexCode') }}</div>
+      出生日期:
+      <div style="padding: 0 4px; margin-right: 8px; width: 130px; border-bottom: 1px solid black">{{ patient.birthDate }}</div>
+      年龄:
+      <div style="padding: 0 4px; margin-right: 8px; width: 30px; border-bottom: 1px solid black">{{ patient.age }}</div>
+      国籍:
+      <div style="padding: 0 4px; margin-right: 8px; border-bottom: 1px solid black">{{ filterNameInDic(patient.country, 'getCountry') }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      (年龄不足 1 周岁的)年龄:
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 50px">{{ patient.ageDays }}</div>
+      天<span style="margin-left: 8px">新生儿出生体重:</span>
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.newBornWeight }}</div>
+      克<span style="margin-left: 8px">新生儿入院体重:</span>
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.newBornAdmissWeight }}</div>
+      克
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      出生地:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 230px">{{ patient.birthPlaceName }}</div>
+      籍贯:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 230px">{{ patient.nativePlaceName }}</div>
+      民族:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.nation, 'getNation') }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      身份证号:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 160px">{{ patient.socialNo }}</div>
+      职业:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.occupation, 'getOccupation') }}</div>
+      婚姻:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.marriage, 'getMarriageCode') }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      现住址:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 300px">{{ patient.livePlace }}</div>
+      电话:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ patient.phone }}</div>
+      邮编:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.addrZipCode }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      户口地址:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 300px">{{ patient.hkPlaceName }}</div>
+      邮编:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.hkZipCode }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      工作单位及地址:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; margin-right: 0; width: 290px">{{ patient.unitName }}/{{ patient.unitPlace }}</div>
+      单位电话:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 80px">{{ patient.unitPhone }}</div>
+      邮编:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 50px">{{ patient.unitZipCode }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      联系人姓名:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 90px">{{ patient.contactName }}</div>
+      联系人关系:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.contactRelation, 'getRelations') }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      联系人地址:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 300px">{{ patient.contactAddrName }}</div>
+      联系人电话:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 90px">{{ patient.contactPhone }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      入院途径:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.zyAdmissWay, 'getAdmissWay') }}</div>
+      是否手术:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.hasSurgery, 'getOperations') }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      入院时间:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 135px">{{ patient.admissDate }}</div>
+      入院科别:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 120px">{{ patient.admissDept }}</div>
+      病房:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 80px">{{ patient.admissWard }}</div>
+      转科科别:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 120px">{{ patient.transDept }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      出院时间:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 135px">{{ patient.dismissDate }}</div>
+      出院科别:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 120px">{{ patient.dismissDept }}</div>
+      病房:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 80px">{{ patient.dismissWard }}</div>
+      住院天数:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.admissDays }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      门(急)诊诊断:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 350px">{{ patient.clinicDiagStr }}</div>
+      疾病编码:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 110px">{{ patient.clinicDiagCode }}</div>
+    </div>
+    <div style="margin-right: 8px; height: max-content; display: flex; width: 720px">
+      <div style="margin-right: 8px; width: 360px">
+        <table style="width: 360px; border: 1px solid black; border-collapse: collapse">
+          <tr>
+            <th>主要诊断</th>
+            <th>疾病编码</th>
+            <th>入院病情</th>
+            <th>出院病情</th>
+          </tr>
+          <tr>
+            <td style="width: 170px">
+              {{ patient.disdiagList[0].name }}
+            </td>
+            <td style="width: 100px; text-align: center">
+              {{ patient.disdiagList[0].code }}
+            </td>
+            <td style="width: 30px">
+              {{ patient.disdiagList[0].admissStatus }}
+            </td>
+            <td style="width: 30px">
+              {{ patient.disdiagList[0].dismissStatus }}
+            </td>
+          </tr>
+          <tr>
+            <th colspan="4">其他诊断</th>
+          </tr>
+          <tr v-for="n in 11" :key="n">
+            <td style="text-align: left; padding-left: 5px">
+              {{ patient.disdiagList[n].name }}
+            </td>
+            <td style="width: 90px">
+              {{ patient.disdiagList[n].code }}
+            </td>
+            <td style="width: 30px">
+              {{ patient.disdiagList[n].admissStatus }}
+            </td>
+            <td style="width: 30px">
+              {{ patient.disdiagList[n].dismissStatus }}
+            </td>
+          </tr>
+        </table>
+      </div>
+      <div style="margin-right: 8px; width: 360px">
+        <table style="width: 360px; border: 1px solid black; border-collapse: collapse">
+          <tr v-for="n in 14" :key="n">
+            <td>
+              <div style="margin-right: 8px; width: 170px">{{ patient.disdiagList[n + 11].name }}</div>
+            </td>
+            <td>
+              <div style="margin-right: 8px; width: 100px">{{ patient.disdiagList[n + 11].code }}</div>
+            </td>
+            <td>
+              <div style="margin-right: 8px; width: 30px">{{ patient.disdiagList[n + 11].admissStatus }}</div>
+            </td>
+            <td>
+              <div style="margin-right: 8px; width: 30px">{{ patient.disdiagList[n + 11].dismissStatus }}</div>
+            </td>
+          </tr>
+        </table>
+      </div>
+    </div>
+    <div style="margin: 4px 0 2px 0; padding: 0 4px; border-bottom: 1px solid black; font-size: 12px; display: flex">
+      备注:
+      <div>入院病情:</div>
+      1.有,2.临床未确定,3.情况不明,4.无
+      <div style="margin-right: 8px; margin-left: 10px">出院病情:</div>
+      1.治愈,2.好转,3.未愈,4.死亡,9.其他
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      损伤、中毒的外部原因:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 300px">{{ patient.hurtReasonName }}</div>
+      疾病编码:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 110px">{{ patient.hurtReasonCode }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      病理诊断:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 300px">{{ patient.pathologicDiagStr }}</div>
+      病理编码:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 90px">{{ patient.pathologicDiagCode }}</div>
+      病理号:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.blh }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      药物过敏:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.allergy, 'getHaveOrNot') }}</div>
+      ,过敏药物:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 110px">{{ patient.allergicMedicine }}</div>
+      死亡患者尸检:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.autopsy, 'getAutopsies') }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      输血前四项: HbsAg
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.hbsAg, 'getHbsag') }}</div>
+      HCV-Ab
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; margin-left: 8px">{{ filterNameInDic(patient.hcvAb, 'getHbsag') }}</div>
+      HIV-Ab
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; margin-left: 8px">{{ filterNameInDic(patient.hivAb, 'getHbsag') }}</div>
+      TP-Ab
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; margin-left: 8px">{{ filterNameInDic(patient.tpAb, 'getHbsag') }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      血型:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.bloodType, 'getBloodType') }}</div>
+      Rh:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.rh, 'getHbsag') }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      科室主任:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.deptLeaderName }}</div>
+      主任(副主任)医师:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.leaderDoctorName }}</div>
+      主治医师:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.mainDoctorName }}</div>
+      住院医师:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.admissDoctorName }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      责任护士:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.dutyNurseName }}</div>
+      进修医师:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.studyDoctorName }}</div>
+      实习医师:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.internshipDoctorName }}</div>
+      编码员:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.coderName }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      病案质量:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.qualityControlLevel, 'getQualityLevel') }}</div>
+      质控医师:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.qualityControlDoctorName }}</div>
+      质控护士:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.qualityControlNurseName }}</div>
+      质控日期:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 170px">{{ patient.qualityControlDate }}</div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { filterDismissStatus } from '@/views/hospitalization/case-front-sheet/common'
+export default {
+  props: {
+    patient: {
+      type: Object,
+      required: true,
+    },
+    dics: {
+      type: Object,
+      required: true,
+    },
+  },
+  setup(props) {
+    const filterNameInDic = (val, dic) => {
+      if (!val) {
+        return ''
+      }
+      const dicValue = props.dics[dic]
+      if (!dicValue) {
+        console.log(dic, 'no value')
+      }
+      for (let i = 0; i < dicValue.length; i++) {
+        const dicItem = dicValue[i]
+        if (dicItem.code == val) {
+          return dicItem.name
+        }
+      }
+      return '-'
+    }
+
+    return {
+      filterNameInDic,
+    }
+  },
+}
+</script>
+
+<style scoped>
+table,
+th,
+td {
+  border: 1px solid black;
+  border-collapse: collapse;
+}
+td,
+th {
+  height: 24px;
+  padding-left: 4px;
+}
+</style>

+ 308 - 0
src/components/inpatient/frontsheet-printpage/TailPage.vue

@@ -0,0 +1,308 @@
+<template>
+  <div id="page2" style="border: 1px solid black; padding: 5px">
+    <table id="surgeryTable" style="border: 1px solid black; border-collapse: collapse; width: 100%">
+      <tr>
+        <th rowspan="2">手术及操作名称</th>
+        <th rowspan="2" style="width: 70px">手术及操作日期</th>
+        <th rowspan="2" style="width: 10px">手术级别</th>
+        <th rowspan="2">手术及操作编码</th>
+        <th colspan="3">手术及操作医师</th>
+        <th rowspan="2" style="width: 30px">切口愈合等级</th>
+        <th rowspan="2">麻醉方式</th>
+        <th rowspan="2">麻醉医师</th>
+      </tr>
+      <tr>
+        <th>术者</th>
+        <th>I助</th>
+        <th>II助</th>
+      </tr>
+      <tr v-for="n in 5" :key="n">
+        <td style="padding: 3px">
+          {{ patient.surgeryList[n - 1].name }}
+        </td>
+        <td style="padding: 3px; width: 70px">
+          {{ patient.surgeryList[n - 1].date }}
+        </td>
+        <td style="text-align-last: center; width: 30px">
+          {{ filterNameInDic(patient.surgeryList[n - 1].level, 'getOperateScale') }}
+        </td>
+        <td style="width: 70px">
+          {{ patient.surgeryList[n - 1].code }}
+        </td>
+        <td style="width: 40px">
+          {{ patient.surgeryList[n - 1].operatorName }}
+        </td>
+        <td style="width: 50px">
+          {{ patient.surgeryList[n - 1].assistantOneName }}
+        </td>
+        <td style="width: 50px">
+          {{ patient.surgeryList[n - 1].assistantTwoName }}
+        </td>
+        <td style="text-align-last: center">
+          {{ filterNameInDic(patient.surgeryList[n - 1].cutHeal, 'getCutHealGrade') }}
+        </td>
+        <td>
+          {{ filterNameInDic(patient.surgeryList[n - 1].anaesthesia, 'getAnaesthesia') }}
+        </td>
+        <td style="width: 40px">
+          {{ patient.surgeryList[n - 1].anaesthesiaorName }}
+        </td>
+      </tr>
+    </table>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      离院方式:
+      <div style="padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.zyDismissWay, 'getZyDismissWay') }}</div>
+      ,拟接收医疗机构名称:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 210px">{{ patient.dismissDestination }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      是否有出院31天内再住院计划:
+      <div style="padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.admissAgainInOneMonth, 'getHaveOrNot') }}</div>
+      ,目的:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 300px">{{ patient.admissAgainPurpose }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      颅脑损伤患者昏迷时间: 入院前
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 30px">{{ patient.comaDaysBeforeAdmiss }}</div>
+      天
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 30px">{{ patient.comaHoursBeforeAdmiss }}</div>
+      小时
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 30px">{{ patient.comaMinutesBeforeAdmiss }}</div>
+      分钟 <span style="margin-left: 8px">入院后</span>
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 30px">{{ patient.comaDaysAfterAdmiss }}</div>
+      天
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 30px">{{ patient.comaHoursAfterAdmiss }}</div>
+      小时
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 30px">{{ patient.comaMinutesAfterAdmiss }}</div>
+      分钟
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      住院费用(元): 总费用
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 110px">{{ patient.totalCost }}</div>
+      (自付金额:
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 110px">{{ patient.selfPay }}</div>
+      )
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      1.综合医疗服务类: (1)一般医疗服务费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.generalMedicalServiceFee }}</div>
+      (2)一般治疗操作费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.generalTreatmentOperatingFee }}</div>
+      (3)护理费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 50px">{{ patient.careFee }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      (4)其他费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.elseFee }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      2.诊断类: (5)病理诊断费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.pathologicDiagFee }}</div>
+      (6)实验室诊断费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.experimentDiagFee }}</div>
+      (7)影像学诊断费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.ctDiagFee }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      (8)临床诊断项目费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.clinicalDiagFee }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      3.治疗类: (9)非手术治疗项目费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.notSurgicalFee }}</div>
+      (临床物理治疗费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.clinicalPhysicalFee }}</div>
+      )
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      (10)手术治疗费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.surgicalFee }}</div>
+      (麻醉费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.anesthetizeFee }}</div>
+      &nbsp;&nbsp;手术费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.surgeryFee }}</div>
+      )
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      4.康复类: (11)康复费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.recoverFee }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      5.中医类: (12)中医治疗费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.tcmTreatmentFee }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      6.西药类: (13)西药费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.westMedicineFee }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      7.中药类: (14)中成药费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.chinesePatentMedicineFee }}</div>
+      (15)中草药费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.chineseHerbalMedicineFee }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      8.血液和血液制品类: (16)血费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 50px">{{ patient.bloodFee }}</div>
+      (17)白蛋白类制品费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 50px">{{ patient.albuminProductsFee }}</div>
+      (18)球蛋白类制品费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 50px">{{ patient.globulinProductsFee }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      (19)凝血因子类制品费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.coagulationFactorProductsFee }}</div>
+      (20)细胞因子类制品费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.cytokineProductsFee }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      9.耗材类: (21)检查用一次性医用材料费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.costOfDisposableMedicalMaterialsForExamination }}</div>
+      (22)治疗用一次性医用材料费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.costOfDisposableMedicalMaterialsForTreatment }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      (23)手术用一次性医用材料费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.costOfDisposableMedicalMaterialsForOperation }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      10.其他类: (24)其他费:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; width: 70px">{{ patient.otherFees }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      主要诊断治愈好转情况:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black; padding: 0 5px">
+        {{ dismissStatusText(patient.disdiagList[0].dismissStatus) }}
+      </div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      诊断符合情况: 门诊与出院
+      <div style="padding: 0 4px; border-bottom: 1px solid black; margin-right: 12px">{{ filterNameInDic(patient.diagConform1, 'getDiagConform') }}</div>
+      入院与出院
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.diagConform2, 'getDiagConform') }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      术前与术后
+      <div style="padding: 0 4px; border-bottom: 1px solid black; margin-right: 12px">{{ filterNameInDic(patient.diagConform3, 'getDiagConform') }}</div>
+      临床与病理
+      <div style="padding: 0 4px; border-bottom: 1px solid black; margin-right: 12px">{{ filterNameInDic(patient.diagConform4, 'getDiagConform') }}</div>
+      放射与病理
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.diagConform5, 'getDiagConform') }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      抢救情况: 抢救
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 90px">{{ patient.rescueTimes }}</div>
+      次, 成功
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 90px">{{ patient.rescueSuccessTimes }}</div>
+      次
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      病例分型:
+      <div style="padding: 0 4px; border-bottom: 1px solid black; margin-right: 12px">{{ filterNameInDic(patient.caseClassification, 'getCaseClassification') }}</div>
+      实施重症监护:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.hasIcu, 'getHaveOrNot') }}</div>
+      ,监护总时间:
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 30px">{{ patient.icuDays }}</div>
+      天
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 30px">{{ patient.icuHours }}</div>
+      小时
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      单病种管理:
+      <div style="padding: 0 4px; border-bottom: 1px solid black; margin-right: 12px">{{ filterNameInDic(patient.monopathyManagement, 'getYesOrNo') }}</div>
+      实施临床路径管理:
+      <div style="padding: 0 4px; border-bottom: 1px solid black; margin-right: 12px">{{ filterNameInDic(patient.clinicalPathwayManagement, 'getClinicalPathwayManagement') }}</div>
+      实施DRGs管理:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.drgsManagement, 'getDrgsManagement') }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      抗生素使用:
+      <div style="padding: 0 4px; border-bottom: 1px solid black; margin-right: 12px">{{ filterNameInDic(patient.useAntibiotic, 'getYesOrNo') }}</div>
+      细菌培养标本送检:
+      <div style="padding: 0 4px; border-bottom: 1px solid black; margin-right: 12px">{{ filterNameInDic(patient.bacilliculture, 'getYesOrNo') }}</div>
+      法定传染病:
+      <div style="margin-right: 8px; padding: 0 4px; border-bottom: 1px solid black">{{ filterNameInDic(patient.statutoryEpidemic, 'getStatutoryEpidemic') }}</div>
+    </div>
+    <div style="display: flex; margin: 10px 8px 10px 0">
+      肿瘤分期: T
+      <div style="width: 30px; padding: 0 4px; border-bottom: 1px solid black; margin-right: 12px">{{ filterNameInDic(patient.tumorLevelT, 'getTumorLevelT') }}</div>
+      N
+      <div style="width: 30px; padding: 0 4px; border-bottom: 1px solid black; margin-right: 12px">{{ filterNameInDic(patient.tumorLevelN, 'getTumorLevelN') }}</div>
+      M
+      <div style="width: 30px; padding: 0 4px; border-bottom: 1px solid black; margin-right: 12px">{{ filterNameInDic(patient.tumorLevelM, 'getTumorLevelM') }}</div>
+      分期
+      <div style="width: 30px; padding: 0 4px; border-bottom: 1px solid black; margin-right: 18px">{{ filterNameInDic(patient.tumorLevel, 'getTumorLevel') }}</div>
+      新生儿Apgar评分:
+      <div style="padding: 0 4px; border-bottom: 1px solid black; width: 50px">{{ patient.xxeApgar }}</div>
+      分
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    patient: {
+      type: Object,
+      required: true,
+    },
+    dics: {
+      type: Object,
+      required: true,
+    },
+  },
+  setup(props) {
+    const dismissStatusText = (val) => {
+      switch (val) {
+        case '1':
+          return '治愈'
+        case '2':
+          return '好转'
+        case '3':
+          return '未愈'
+        case '4':
+          return '死亡'
+        case '9':
+          return '其他'
+        default:
+          return ''
+      }
+    }
+
+    const filterNameInDic = (val, dic) => {
+      if (!val) {
+        return ''
+      }
+      const dicValue = props.dics[dic]
+      if (!dicValue) {
+        console.log(dic, 'no value')
+      }
+      for (let i = 0; i < dicValue.length; i++) {
+        const dicItem = dicValue[i]
+        if (dicItem.code == val) {
+          return dicItem.name
+        }
+      }
+      return '-'
+    }
+    return {
+      dismissStatusText,
+      filterNameInDic,
+    }
+  },
+}
+</script>
+
+<style scoped>
+table,
+th,
+td {
+  border: 1px solid black;
+  border-collapse: collapse;
+}
+td,
+th {
+  height: 24px;
+  padding-left: 4px;
+}
+</style>

+ 29 - 22
src/layout/Header/functionList/message.vue

@@ -1,6 +1,6 @@
 <template>
   <div title="消息" @click="showMessageLayer">
-    <el-badge :value="122" :max="99" type="danger">
+    <el-badge :hidden="unreadCount === 0" :value="unreadCount" :max="99" type="danger">
       <i class="sfont el-icon-message"></i>
     </el-badge>
   </div>
@@ -14,7 +14,7 @@
       </div>
     </div>
     <div class="content">
-      <p>{{ currentSender.deptName }} - {{ currentSender.name }}</p>
+      <p v-show="currentSender.name">{{ currentSender.deptName }} - {{ currentSender.name }}</p>
       <div v-for="(itm, index) in contents" :key="index">
         <div class="content-title-box">
           <div class="content-title">{{ itm.title }}</div>
@@ -24,15 +24,24 @@
       </div>
     </div>
   </div>
+  <el-dialog title="重要系统通知" v-model="systemMessages.show" :append-to-body="true" :destroy-on-close="true" center> sdfs </el-dialog>
 </template>
 
 <script>
-import { defineComponent, ref } from 'vue'
+import { ElMessageBox } from 'element-plus'
+import { defineComponent, onMounted, reactive, ref } from 'vue'
+import { onPageRefresh } from '../../../api/messages/index'
 
 export default defineComponent({
   name: 'message',
   setup() {
     const messageLayerVisible = ref(false)
+    const unreadCount = ref(0)
+    const systemMessages = reactive({
+      show: false,
+      list: [],
+      current: 1,
+    })
     const currentSender = ref({})
     const activated = (sender) => {
       return {
@@ -41,25 +50,8 @@ export default defineComponent({
         fontWeight: currentSender.value.sender === sender ? 'bold' : '',
       }
     }
-    const senders = ref([
-      { deptName: '普外科', name: '张三', sender: '01897', count: 12 },
-      { deptName: '普外科', name: '李四', sender: '32322', count: 0 },
-      { deptName: '很长的科室名字', name: '喝水塞牙', sender: '02010', count: 100 },
-    ])
-    const contents = ref([
-      {
-        title: '标题一',
-        content:
-          '内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一内容一',
-        date: '2022-03-08 14:23:12',
-      },
-      {
-        title: '标题二标题二标题二标题二标题二标题二标题二标题二标题二标题二标题二标题二标题二标题二标题二标题二标题二标题二标题二标题二',
-        content: '内容二内容二内容二内容二内容二内容二内容二内容二内容二内容二内容二内容二',
-        date: '2022-03-08 14:43:06',
-      },
-      { title: '标题三', content: '内容三', date: '2022-03-08 15:13:02' },
-    ])
+    const senders = ref([])
+    const contents = ref([])
     const showMessageLayer = () => {
       messageLayerVisible.value = !messageLayerVisible.value
     }
@@ -68,11 +60,26 @@ export default defineComponent({
       currentSender.value = sender
     }
 
+    onMounted(() => {
+      onPageRefresh([]).then((res) => {
+        console.log(res)
+        unreadCount.value = res.unreadCount
+        if (res.systemMessage.length > 0) {
+          systemMessages.list = res.systemMessage
+          systemMessages.current = 1
+          systemMessages.show = true
+          console.log(systemMessages)
+        }
+      })
+    })
+
     return {
       senders,
+      unreadCount,
       currentSender,
       contents,
       messageLayerVisible,
+      systemMessages,
       activated,
       showMessageLayer,
       handleClickSender,

+ 45 - 46
src/utils/excel.js

@@ -1,61 +1,60 @@
 import axios from 'axios'
 import XLSX from 'xlsx'
 import store from '@/store'
-import {startLoading, endLoading} from "./loading";
-import {ElMessage} from "element-plus";
+import { startLoading, endLoading } from './loading'
+import { ElMessage } from 'element-plus'
 
 const apiUrl = import.meta.env.VITE_BASE_URL
 
 export function writeExcelFile(workSheet, fileName) {
-    const workBook = XLSX.utils.book_new()
-    XLSX.utils.book_append_sheet(workBook, workSheet, 'sheet1')
-    XLSX.writeFile(workBook, fileName)
-    store.commit('app/setLoading', false)
-    endLoading()
-
+  const workBook = XLSX.utils.book_new()
+  XLSX.utils.book_append_sheet(workBook, workSheet, 'sheet1')
+  XLSX.writeFile(workBook, fileName)
+  store.commit('app/setLoading', false)
+  endLoading()
 }
 
 export function createWorkSheet(data, fields, titles) {
-    const workSheet = XLSX.utils.json_to_sheet(data, {header: fields})
-    const range = XLSX.utils.decode_range(workSheet['!ref'])
-    for (let c = range.s.c; c <= range.e.c; c++) {
-        const header = XLSX.utils.encode_col(c) + '1'
-        workSheet[header].v = titles[workSheet[header].v]
-    }
-    return workSheet
+  const workSheet = XLSX.utils.json_to_sheet(data, { header: fields })
+  const range = XLSX.utils.decode_range(workSheet['!ref'])
+  for (let c = range.s.c; c <= range.e.c; c++) {
+    const header = XLSX.utils.encode_col(c) + '1'
+    workSheet[header].v = titles[workSheet[header].v]
+  }
+  return workSheet
 }
 
 export function downloadExcel(data) {
-    if (data.jdt) {
-        store.commit('app/setJdt', {title: '正在导出 Excel', isOpen: true, closeButton: false})
-    } else {
-        startLoading()
-    }
-    axios({
-        method: 'post',
-        url: apiUrl + data.url,
-        data: data.param,
-        responseType: 'blob',
-        headers: {
-            token: store.state.user.token,
-        },
+  if (data.jdt) {
+    store.commit('app/setJdt', { title: '正在导出 Excel', isOpen: true, closeButton: false })
+  } else {
+    startLoading()
+  }
+  axios({
+    method: 'post',
+    url: apiUrl + data.url,
+    data: data.param,
+    responseType: 'blob',
+    headers: {
+      token: store.state.user.token,
+    },
+  })
+    .then((res) => {
+      const link = document.createElement('a')
+      let blob = new Blob([res.data], { type: 'application/vnd.ms-excel' })
+      link.style.display = 'none'
+      link.href = URL.createObjectURL(blob)
+      link.download = data.fileName //下载的文件名
+      document.body.appendChild(link)
+      link.click()
+      document.body.removeChild(link)
+      endLoading()
+      store.commit('app/closeJdt')
+    })
+    .catch((error) => {
+      ElMessage.error('网络连接错误', '错误')
+      console.error(error)
+      endLoading()
+      store.commit('app/closeJdt')
     })
-        .then((res) => {
-            const link = document.createElement('a')
-            let blob = new Blob([res.data], {type: 'application/vnd.ms-excel'})
-            link.style.display = 'none'
-            link.href = URL.createObjectURL(blob)
-            link.download = data.fileName //下载的文件名
-            document.body.appendChild(link)
-            link.click()
-            document.body.removeChild(link)
-            endLoading()
-            store.commit('app/closeJdt')
-        })
-        .catch((error) => {
-            ElMessage.error('网络连接错误', '错误')
-            console.error(error)
-            endLoading()
-            store.commit('app/closeJdt')
-        })
 }

+ 3 - 1
src/utils/request.js

@@ -19,7 +19,9 @@ service.interceptors.request.use(
     if (typeof config.jdtTitle !== 'undefined') {
       store.commit('app/setJdt', { title: config.jdtTitle, isOpen: true, closeButton: false })
     } else {
-      startLoading()
+      if (config.url !== '/caseFrontSheet/printVerify') {
+        startLoading()
+      }
     }
     if (store.getters['user/token']) {
       config.headers['token'] = store.state.user.token

+ 19 - 35
src/views/hospitalization/case-front-sheet/AllCaseFrontSheet.vue

@@ -668,6 +668,12 @@
             </div>
           </div>
         </div>
+        <div id="headpage" style="opacity: 0; position: fixed">
+          <HeadPage :patient="sheet" :dics="dics" />
+        </div>
+        <div id="tailpage" style="opacity: 0; position: fixed">
+          <TailPage :patient="sheet" :dics="dics" />
+        </div>
       </el-main>
     </el-container>
 
@@ -764,7 +770,13 @@ import router from '@/router'
 import { initLodop, getLodop } from '@/utils/c-lodop'
 import { formatMonth } from '@/utils/date'
 import { createWorkSheet, writeExcelFile } from '@/utils/excel'
+import HeadPage from '../../../components/inpatient/frontsheet-printpage/HeadPage.vue'
+import TailPage from '../../../components/inpatient/frontsheet-printpage/TailPage.vue'
 export default {
+  components: {
+    HeadPage,
+    TailPage,
+  },
   setup() {
     const isCollapse = computed(() => store.state.app.isCollapse)
     const cdStyle = computed(() => {
@@ -1276,42 +1288,10 @@ export default {
         })
     }
     const execPrint = (flag) => {
-      if (!beforePrintSet.value) {
-        const allInput = document.body.getElementsByTagName('input')
-        const allTextArea = document.body.getElementsByTagName('textarea')
-        const allSelect = document.body.getElementsByTagName('select')
-        for (let i = 0; i < allInput.length; i++) allInput[i].setAttribute('value', allInput[i].value)
-        for (let i = 0; i < allTextArea.length; i++) allTextArea[i].innerText = allTextArea[i].value
-        for (let i = 0; i < allSelect.length; i++) {
-          let select = allSelect[i]
-          if (select.value === '') {
-            if (select.options[select.options.length - 1].value !== '') select.options[select.options.length] = new Option('', '')
-            select.options[select.options.length - 1].setAttribute('selected', true)
-          } else {
-            for (let j = 0; j < select.options.length; j++) {
-              if (select.options[j].value === select.value) {
-                select.options[j].setAttribute('selected', true)
-              } else {
-                select.options[j].removeAttribute('selected')
-              }
-            }
-          }
-        }
-        beforePrintSet.value = true
-      }
-
-      const prntStyle =
-        "<style>select,input {outline: none;border: none;height: 20px;line-height: 20px;border-radius: 0;background: transparent;border-bottom: 1px solid #333333;-webkit-appearance: none!important;-moz-appearance: none!important;appearance: none!important;} select::-ms-expand {display: none!important;}textarea {outline: none;border: none;background-color: transparent;overflow-y:hidden}input[type='number'] {-moz-appearance: textfield;}table th {border: 1px solid black;text-align: center;}table td {border: 1px solid black;}</style>"
-      let pagePrint
-      if (flag === 1) {
-        const page0 = '<div>' + document.getElementById('page0').innerHTML + '</div>'
-        const page1 = '<div>' + document.getElementById('page1').innerHTML + '</div>'
-        pagePrint = prntStyle + '<body>' + page0 + page1 + '</body>'
-      } else {
-        const page2 = '<div>' + document.getElementById('page2').innerHTML + '</div>'
-        pagePrint = prntStyle + '<body>' + page2 + '</body>'
-      }
       LODOP = getLodop()
+      const prntStyle = `<style>*{font-size:10pt} table,th,td {border: 1px solid black;border-collapse: collapse;} td,th {height: 24px;padding-left: 4px;}</style>`
+      const prntContent = flag === 1 ? document.getElementById('headpage').innerHTML : document.getElementById('tailpage').innerHTML
+      let pagePrint = prntStyle + '<body>' + prntContent + '</body>'
       LODOP.PRINT_INIT('casefrontsheet')
       LODOP.SET_PRINT_PAGESIZE(1, '210mm', '297mm', '')
       LODOP.SET_PRINT_MODE('FULL_WIDTH_FOR_OVERFLOW', true) // 整宽不变形
@@ -1465,6 +1445,10 @@ export default {
     onMounted(() => {
       document.addEventListener('keydown', handleEvent)
       getAllDictionary().then((res) => {
+        res.getOperations = operations
+        res.getYesOrNo = yesOrNo
+        res.getHaveOrNot = haveOrNot
+        res.getAutopsies = autopsies
         dics.value = res
         getAllWards().then((res1) => {
           userWards.value = res1

File diff suppressed because it is too large
+ 200 - 438
src/views/hospitalization/case-front-sheet/FillCaseFrontSheet.vue


+ 3 - 5
src/views/medical-insurance/inpatient/InHospFeeUpload.vue

@@ -14,16 +14,14 @@
         <el-divider direction="vertical"></el-divider>
         <el-button type="warning" @click="clearErrorMessages">清除内容</el-button>
         <el-table width="700" max-height="300" class="errTable" :data="errorMessages">
-          <el-table-column width="80" property="inpatientNo" label="住院号"></el-table-column>
-          <el-table-column width="80" property="patientName" label="姓名"></el-table-column>
-          <el-table-column width="80" property="detailSn" label="流水号"></el-table-column>
-          <el-table-column width="450" property="msg" label="错误详情"></el-table-column>
+          <el-table-column width="80" property="patNo" label="住院号"></el-table-column>
+          <el-table-column width="80" property="patName" label="姓名"></el-table-column>
+          <el-table-column width="450" property="message" label="错误详情"></el-table-column>
         </el-table>
       </el-popover>
       &nbsp;&nbsp;
       <el-tag type="info" size="medium">
         <span style="color: black">¥ {{ patient.totalCharge }}</span>
-        |
         <span style="color: orangered">¥ {{ patient.chargeYb }}</span>
       </el-tag>
     </el-header>

+ 92 - 9
src/views/medical-insurance/outpatient/SpcChrRcd.vue

@@ -6,11 +6,12 @@
           <template #prepend>门诊ID/身份证</template>
         </el-input>
         <el-divider direction="vertical"></el-divider>
-        <el-button type="success" @click="qryPsnBscInfo">参保信息查询</el-button>
-        <el-button type="success" @click="qrySpcChrRcd"> 慢特病备案查询 </el-button>
-        <el-button type="success" @click="beforeQryMedUseRcd"> 用药记录查询 </el-button>
+        <el-button type="success" @click="qryPsnBscInfo">参保信息</el-button>
+        <el-button type="success" @click="qrySpcChrRcd"> 备案查询 </el-button>
+        <el-button type="success" @click="beforeQryMedUseRcd"> 用药记录 </el-button>
         <el-button type="primary" @click="beforeSlwSpcChrRcd"> 慢特病备案 </el-button>
         <el-button type="primary" @click="beforeRvkSlwSpcChrRcd"> 撤销备案 </el-button>
+        <el-button type="warning" @click="beforeFetchAllRcds"> 备案统计 </el-button>
       </el-header>
       <el-main>
         <el-tag type="success">人员基本信息</el-tag>
@@ -86,7 +87,6 @@
             <el-button type="primary" @click="qryMedUseRcd" icon="el-icon-check">确定</el-button>
           </div>
         </el-dialog>
-
         <el-dialog v-model="showSpcChrRcds" title="慢特病备案信息">
           <el-table :data="spcChrRcds" stripe>
             <el-table-column property="begndate" label="开始日期"></el-table-column>
@@ -96,7 +96,6 @@
             <el-table-column prop="ideFixmedinsName" label="备案机构"></el-table-column>
           </el-table>
         </el-dialog>
-
         <el-dialog v-model="showMedUseRcds" title="慢特病用药记录">
           <el-table :data="medUseRcds" stripe height="360">
             <el-table-column prop="fixmedinsCode" label="定点医药机构编号"></el-table-column>
@@ -113,7 +112,6 @@
             <el-table-column prop="dosformName" label="剂型"></el-table-column>
           </el-table>
         </el-dialog>
-
         <el-dialog v-model="showSlwSpcChrRcd" width="70%" title="人员慢特病备案申请">
           <i style="color: red">* </i>人员类别:&nbsp;&nbsp;<el-radio v-model="perstype" :label="1">职工</el-radio>
           <el-radio v-model="perstype" :label="2">居民</el-radio>
@@ -219,7 +217,6 @@
           </div>
           <div style="height: 12px"></div>
         </el-dialog>
-
         <el-dialog v-model="showAllSlwSpcChrRcds" title="请选择要撤销的备案" width="70%">
           <div style="height: 12px"></div>
           <el-table :data="allSlwSpcChrRcds" stripe highlight-current-row @row-click="handleSelctSlwSpcChrRcd">
@@ -236,6 +233,34 @@
           </div>
           <div style="height: 12px"></div>
         </el-dialog>
+        <el-dialog v-model="showFetchAllRcds" title="门特备案记录" width="70%">
+          <el-date-picker
+            v-model="fetchAllRcdsDateRange"
+            type="daterange"
+            :shortcuts="maxHalfYear"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            size="mini"
+            style="width: 240px"
+          ></el-date-picker>
+          <el-divider direction="vertical"></el-divider>
+          <el-button type="primary" icon="el-icon-check" @click="fetchAllRcds">查询</el-button>
+          <el-button type="primary" icon="el-icon-download" @click="exportExcel">导出Excel</el-button>
+          <el-table :data="allSpcSlwRcds" height="400" stripe highlight-current-row>
+            <el-table-column prop="psnName" label="人员姓名"></el-table-column>
+            <el-table-column prop="psnNo" label="人员编码"></el-table-column>
+            <el-table-column prop="socialNo" label="身份证号"></el-table-column>
+            <el-table-column prop="opspDiseCode" label="病种编码"></el-table-column>
+            <el-table-column prop="opspDiseName" label="病种名称"></el-table-column>
+            <el-table-column prop="ideFixmedinsName" label="鉴定机构"></el-table-column>
+            <el-table-column prop="hospIdeDate" label="鉴定日期"></el-table-column>
+            <el-table-column prop="diagDrName" label="诊断医师"></el-table-column>
+            <el-table-column prop="begndate" label="开始日期"></el-table-column>
+            <el-table-column prop="enddate" label="结束日期"></el-table-column>
+            <el-table-column prop="trtDclaDetlSn" label="备案流水号"></el-table-column>
+          </el-table>
+        </el-dialog>
       </el-main>
     </el-container>
   </div>
@@ -246,9 +271,10 @@ import { ref } from 'vue'
 import { maxHalfYear } from '@/data/shortcuts'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { obtainBasicPersonInfo, querySpecialChronicDiseasesAccreditation, querySpecialChronicDiseasesMedicalRecord } from '@/api/medical-insurance/si-query'
-import { getAllSpcChrRcdsByPsnNo, revokeSpecialChronicDiseasesRecord, specialChronicDiseasesRecord } from '@/api/medical-insurance/si-psn-rcd'
-import { formatDatetime } from '@/utils/date'
+import { getAllSpcChrRcdsByPsnNo, revokeSpecialChronicDiseasesRecord, specialChronicDiseasesRecord, selectAllSpcSlwRcds } from '@/api/medical-insurance/si-psn-rcd'
+import { formatDatetime, formatDate } from '@/utils/date'
 import { searchData } from '@/api/yibao/dictionary'
+import { Export } from '../../../utils/ExportExcel'
 export default {
   setup() {
     const patNo = ref('')
@@ -392,6 +418,8 @@ export default {
         return
       }
       slwSpcChrRcd.value.psnNo = baseinfo.value.psnNo
+      slwSpcChrRcd.value.psnName = baseinfo.value.psnName
+      slwSpcChrRcd.value.socialNo = baseinfo.value.certno
       slwSpcChrRcd.value.insutype = currentInsuinfo.value.insutype
       slwSpcChrRcd.value.insutypeName = currentInsuinfo.value.insutypeName
       slwSpcChrRcd.value.insuOptins = currentInsuinfo.value.insuplcAdmdvs
@@ -506,6 +534,55 @@ export default {
       slwSpcChrRcd.value.diagDrName = item.name
     }
 
+    const showFetchAllRcds = ref(false)
+    const fetchAllRcdsDateRange = ref(null)
+    const allSpcSlwRcds = ref([])
+    const beforeFetchAllRcds = () => {
+      showFetchAllRcds.value = true
+    }
+    const fetchAllRcds = () => {
+      if (!fetchAllRcdsDateRange.value) {
+        ElMessage({
+          message: '请选择日期范围!',
+          type: 'warning',
+          duration: 2000,
+          showClose: true,
+        })
+        return true
+      }
+      const begntime = formatDate(fetchAllRcdsDateRange.value[0])
+      const endtime = formatDate(fetchAllRcdsDateRange.value[1])
+      selectAllSpcSlwRcds(begntime, endtime).then((res) => {
+        allSpcSlwRcds.value = res
+      })
+    }
+
+    const exportExcel = () => {
+      if (allSpcSlwRcds.value.length === 0) {
+        ElMessage({
+          message: '没有可以导出的数据。',
+          type: 'warning',
+          duration: 2000,
+          showClose: true,
+        })
+        return true
+      }
+      const title = {
+        psnName: '人员姓名',
+        psnNo: '人员编码',
+        socialNo: '身份证号',
+        opspDiseCode: '病种编码',
+        opspDiseName: '病种名称',
+        ideFixmedinsName: '鉴定机构',
+        hospIdeDate: '鉴定日期',
+        diagDrName: '诊断医师',
+        begndate: '开始日期',
+        enddate: '结束日期',
+        trtDclaDetlSn: '备案流水号',
+      }
+      Export(allSpcSlwRcds.value, title, '门特备案详情')
+    }
+
     return {
       patNo,
       dateRange,
@@ -537,6 +614,12 @@ export default {
       handleSelectDiag,
       searchPhysician,
       handleSelectPhysician,
+      showFetchAllRcds,
+      fetchAllRcdsDateRange,
+      allSpcSlwRcds,
+      beforeFetchAllRcds,
+      fetchAllRcds,
+      exportExcel,
     }
   },
 }

Some files were not shown because too many files changed in this diff