Explorar el Código

优化以及传入病问题

xiaochan hace 1 año
padre
commit
f345451e9b

+ 7 - 0
src/api/base-data/report-center.ts

@@ -89,3 +89,10 @@ export function reportQueryCenterApi(url: string, data: any = {}) {
     })
 }
 
+export function getEmrPatientData(patNo: string, times: number) {
+    return request({
+        url: "/thyy/api/dataEmr/patInfo",
+        method: 'get',
+        params: {patNo, times}
+    })
+}

+ 25 - 5
src/api/zhu-yuan-yi-sheng/infectious-diseases.js → src/api/zhu-yuan-yi-sheng/infectious-diseasest.ts

@@ -1,7 +1,7 @@
-import request from "@/utils/request";
+import requestV2 from "../../utils/request-v2";
 
 export function getContagiousDiseaseByPatNo(patNo) {
-    return request({
+    return requestV2({
         url: '/contagiousDisease/getContagiousDiseaseByPatNo',
         method: 'get',
         params: {patNo}
@@ -9,7 +9,7 @@ export function getContagiousDiseaseByPatNo(patNo) {
 }
 
 export function confirmCrb(data) {
-    return request({
+    return requestV2({
         url: '/contagiousDisease/confirmCrb',
         method: 'post',
         data
@@ -17,7 +17,7 @@ export function confirmCrb(data) {
 }
 
 export function updateCrb(data) {
-    return request({
+    return requestV2({
         url: '/contagiousDisease/updateCrb',
         method: 'post',
         data
@@ -25,9 +25,29 @@ export function updateCrb(data) {
 }
 
 export function delCrb(patNo, times, cardNo) {
-    return request({
+    return requestV2({
         url: '/contagiousDisease/delCrb',
         method: 'get',
         params: {patNo, times, cardNo}
     })
 }
+
+export interface PatientDiagnosisIsCrb {
+    patNo: string,
+    times: number,
+    diagList: string[]
+}
+
+interface infectiousDiseasesAreRequiredRes {
+    fillOut: boolean,
+    list: string[]
+}
+
+export function infectiousDiseasesAreRequired(data: PatientDiagnosisIsCrb) {
+    return requestV2<infectiousDiseasesAreRequiredRes>({
+        url: '/contagiousDisease/infectiousDiseasesAreRequired',
+        method: 'post',
+        data
+    })
+}
+

+ 5 - 2
src/components/js-dialog-comp/useDialogToJs.ts

@@ -1,6 +1,7 @@
-import {ref, DefineComponent, h, ExtractPropTypes, ComponentCustomProps} from 'vue';
+import {ref, h, Component} from 'vue';
 
 import {generateRandomString} from "../../utils/getUuid";
+import {ComponentPropsOptions} from "@vue/runtime-core";
 
 
 export const compList = ref<{
@@ -8,7 +9,7 @@ export const compList = ref<{
 }>({})
 
 
-export function setDialogToJs<T extends DefineComponent>(comp: T, data: ExtractPropTypes<T> & ComponentCustomProps) {
+function setDialogToJ<T extends Component>(comp: T, data: ComponentPropsOptions<T>) {
     return new Promise<any[]>(resolve => {
         const id = "cy_" + generateRandomString(5)
 
@@ -22,3 +23,5 @@ export function setDialogToJs<T extends DefineComponent>(comp: T, data: ExtractP
         compList.value[id] = h(comp, props)
     })
 }
+
+export default setDialogToJ

+ 1 - 1
src/components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/report-of-infectious-diseases/DialogDiseases.vue

@@ -543,7 +543,7 @@ import {
   confirmCrb, delCrb,
   getContagiousDiseaseByPatNo,
   updateCrb
-} from "@/api/zhu-yuan-yi-sheng/infectious-diseases";
+} from "@/api/zhu-yuan-yi-sheng/infectious-diseasest";
 import {xcMessage} from "@/utils/xiaochan-element-plus";
 import {ElMessageBox} from "element-plus";
 

+ 5 - 1
src/components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/report-of-infectious-diseases/ReportOfInfectiousDiseases.vue

@@ -3,6 +3,9 @@
              title="传染病上报"
              fullscreen
              @closed="emits('closed')">
+    <div v-if="props.prompt">
+      <el-alert :title="`诊断:${props.prompt}为传染病填写后才能保存病历`" type="error" effect="dark"/>
+    </div>
     <dialog-diseases :pat-no="props.patNo"
                      :times="props.times"
                      ref="dialogRef"/>
@@ -20,7 +23,8 @@ import {ref} from 'vue'
 
 export declare type  PropsType = {
   patNo: string,
-  times: number
+  times: number,
+  prompt?: string
 }
 
 const props = defineProps<PropsType>()

+ 6 - 9
src/components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/yz-header/YzQueryCondition.vue

@@ -227,12 +227,6 @@
 
     </div>
   </div>
-  <!-- 传染病上报 -->
-  <report-of-infectious-diseases
-      v-if="crb"
-      @closed="crb = false"
-      :pat-no="huanZheXinXi.inpatientNo"
-      :times="huanZheXinXi.admissTimes"/>
 
   <!--  门诊预约 -->
   <outpatient-appointments v-if="outPatientDialog"
@@ -245,7 +239,7 @@
                       v-if="copyTableDialog"/>
 </template>
 
-<script setup name='YzQueryCondition'>
+<script setup>
 import {
   associateOrdersApi,
   confirmTheDoctorSOrderWithMedicine,
@@ -282,6 +276,7 @@ import OneClickStop from "@/views/hospitalization/zhu-yuan-yi-sheng/yi-zhu-lu-ru
 import {getPatientInfo, receiveAndRecalculateCost} from "@/api/inpatient/patient";
 import CopyTableDataOrder
   from "@/views/hospitalization/zhu-yuan-yi-sheng/yi-zhu-lu-ru/components/table/CopyTableDataOrder.vue";
+import setDialogToJs from "@/components/js-dialog-comp/useDialogToJs";
 
 const props = defineProps({
   patientInfo: {
@@ -475,10 +470,12 @@ const confirmAssociationClick = () => {
   })
 }
 
-const crb = ref(false)
 const crbOpen = () => {
   if (youWuXuanZheHuanZhe()) return
-  crb.value = true
+  setDialogToJs(ReportOfInfectiousDiseases, {
+    patNo: huanZheXinXi.value.inpatientNo,
+    times: huanZheXinXi.value.admissTimes,
+  })
 }
 
 const outPatientDialog = ref(false)

+ 4 - 0
src/utils/emr/edit.ts

@@ -80,6 +80,10 @@ export declare type EditType = {
 
     highlight: (comp: HTMLElement, time: number) => void;
 
+    getElementsData: () => {
+        [key: string]: any;
+    }
+
     getElementByValue: (id: string, value?: any) => ElementByValue;
 
     view: HTMLElement;

+ 51 - 6
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/EmrMain.vue

@@ -296,7 +296,6 @@
 </template>
 
 <script setup lang="ts">
-import {getEmrInpatientData} from "@/api/dictionary/emr-data-maintenance-api";
 import EmrSidebar from "@/components/zhu-yuan-yi-sheng/emr/emr-template/EmrSidebar.vue";
 import {
   copyEnum,
@@ -369,7 +368,6 @@ import EmrRecycleBin
   from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/components/EmrRecycleBin.vue";
 import {deletePatientEmrByDocumentId, insertEmrData} from "@/api/zhu-yuan-yi-sheng/emr-patient";
 import {
-  LoadParams,
   useEmrInit,
   UseEmrInitReturn
 } from "@/utils/emr/emr-init-v2";
@@ -377,6 +375,16 @@ import moment from "moment";
 import {formatDateToStr} from "@/utils/moment-utils";
 import EmrOutline
   from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/components/EmrOutline.vue";
+import {getEmrPatientData} from "@/api/base-data/report-center";
+import {
+  infectiousDiseasesAreRequired,
+} from "@/api/zhu-yuan-yi-sheng/infectious-diseasest";
+import type {
+  PatientDiagnosisIsCrb
+} from "@/api/zhu-yuan-yi-sheng/infectious-diseasest";
+import setDialogToJs from "@/components/js-dialog-comp/useDialogToJs";
+import ReportOfInfectiousDiseases
+  from "@/components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/report-of-infectious-diseases/ReportOfInfectiousDiseases.vue";
 
 const props = defineProps({
   maxHeight: {
@@ -827,6 +835,8 @@ const clickSaveData = async () => {
   } catch {
   }
 
+  await handleCrb()
+
   // 解析 id
   let id = await analysisIframeSrcSearch()
   let data: saveType = {
@@ -1296,10 +1306,7 @@ const clickToSubmitTheMedicalRecord = async () => {
  * @returns {Promise<void>}
  */
 const queryingBasicPatientInformation = async () => {
-  patientData.value = await getEmrInpatientData({
-    patNo: patientInfo.value.inpatientNo,
-    times: patientInfo.value.admissTimes
-  })
+  patientData.value = await getEmrPatientData(patientInfo.value.inpatientNo, patientInfo.value.admissTimes)
   getCurrentPersonnelInformation()
 }
 
@@ -1922,6 +1929,44 @@ function changeFragmentOrOutline(val) {
   fragmentOrOutline.value = val
 }
 
+/**
+ * 处理传染病
+ */
+async function handleCrb() {
+  if (categoryCode.value !== 入院病历) {
+    return
+  }
+  const data = editor.getElementsData()
+  let diagList: any[] = []
+  if (XEUtils.has(data['入院诊断'], 'value')) {
+    (data['入院诊断'].value as { code: string }[]).forEach(item => {
+      diagList.push(item.code)
+    })
+  }
+  const temp: PatientDiagnosisIsCrb = {
+    patNo: patientInfo.value.inpatientNo,
+    times: patientInfo.value.admissTimes,
+    diagList
+  }
+  const res = await infectiousDiseasesAreRequired(temp).catch(() => {
+    return {
+      fillOut: false,
+      list: []
+    }
+  })
+
+  if (res.fillOut) {
+    setDialogToJs(ReportOfInfectiousDiseases, {
+      patNo: temp.patNo,
+      times: temp.times,
+      prompt: res.list.join(",")
+    }).then(_r => {
+
+    })
+    BizException(ExceptionEnum.MESSAGE_ERROR, "诊断包含传染病,请填写后保存数据。");
+  }
+}
+
 defineExpose({
   closeBothSides,
   closeWebSocket,

+ 4 - 5
src/views/hospitalization/zhu-yuan-yi-sheng/yi-zhu-lu-ru/components/FeeTable.vue

@@ -9,10 +9,7 @@ const feeList = ref([])
 const tableRef = ref(null)
 
 
-const orderData = ref()
-
 const queryFeeByOrderNo = (data: YzType) => {
-  orderData.value = data
   queryFeeByOrderNoApi(data.actOrderNo).then(res => {
     dialog.value = true
     feeList.value = res
@@ -46,6 +43,8 @@ const tableCheckboxConfig = ref({
   }
 })
 
+const filters = [{label: '未退', value: 1}, {label: '退费', value: 2}, {label: '被退', value: 3}]
+
 
 onMounted(() => {
   yzMitt.on('queryFeeByOrderNo', queryFeeByOrderNo)
@@ -54,11 +53,11 @@ onMounted(() => {
 </script>
 
 <template>
+  <!--               :checkbox-config="tableCheckboxConfig"-->
   <el-dialog v-model="dialog" title="费用详情" width="80%" top="3%">
     <vxe-table :data="feeList"
                border
                ref="tableRef"
-               :checkbox-config="tableCheckboxConfig"
                :row-config="{isHover : true, isCurrent: true,height: 24,useKey :  'rowId'}"
                :height="getWindowSize.h / 1.2">
       <vxe-column type="seq" width="50"/>
@@ -71,7 +70,7 @@ onMounted(() => {
       <vxe-column field="execDept" title="执行" min-width="60"/>
       <vxe-column field="chargeAmount" title="数量" min-width="40" sortable/>
       <vxe-column title="退费"
-                  :filters="[{ label: '未退', value: 1 }, { label: '退费', value: 2 },{ label: '被退', value: 3 }]"
+                  :filters="filters"
                   :filter-method="filterRoleMethod">
         <template #default="{row}">
           <component :is="refundStatus(row.oriDetailSn)"/>