Browse Source

优化电子病历代码

DESKTOP-0GD05B0\Administrator 2 years ago
parent
commit
d9f51613ad

+ 43 - 0
src/components/zhu-yuan-yi-sheng/emr/EmrSavedMedicalRecord.vue

@@ -0,0 +1,43 @@
+<template>
+  <el-button @click="openDialog(documentId)">已保存病历</el-button>
+
+  <el-dialog v-model="dialog" fullscreen>
+    <iframe
+        width="100%"
+        :height="getWindowSize.h / 1.1 + 'px'"
+        :src="src"/>
+  </el-dialog>
+</template>
+
+<script setup name='EmrSavedMedicalRecord'>
+
+import {getWindowSize} from "@/utils/window-size";
+import {xcMessage} from "@/utils/xiaochan-element-plus";
+
+const props = defineProps({
+  saveDocumentId: String
+})
+
+
+const dialog = ref(false)
+const src = ref('')
+const documentId = ref('')
+
+const openDialog = (id) => {
+  if (!id) {
+    return xcMessage.error('请先选择病历')
+  }
+  dialog.value = true
+  src.value = `/emr/runtime/?documentId=${id}&categoryCode=&categoryId=&patientId=#/`
+  documentId.value = id
+}
+
+defineExpose({
+  openDialog
+})
+
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 12 - 1
src/components/zhu-yuan-yi-sheng/emr/EmrSidebar.vue

@@ -74,7 +74,7 @@ const props = defineProps({
 
 let editor = emrConfig.value.editor
 
-const emit = defineEmits(['nodeClick', 'typeChange', 'patientMedicalRecord'])
+const emit = defineEmits(['nodeClick', 'typeChange', 'patientMedicalRecord', 'openAndSaveTheMedicalRecord'])
 
 let returnData = $ref({
   emrTree: [],
@@ -254,6 +254,17 @@ const opt = [
       }
       dialog = true
     }
+  },
+  {
+    name: '打开已保存的病历', click: (data) => {
+      console.log(data)
+      if (!data.unlock.id) {
+        xcMessage.error('请选中保存的病历。')
+        return
+      }
+      emit('openAndSaveTheMedicalRecord', data.unlock.id)
+
+    }
   }
 ]
 const contextmenuItem = (event, data) => {

+ 24 - 2
src/components/zhu-yuan-yi-sheng/emr/web-socket/EmrWebSocket.vue

@@ -30,7 +30,7 @@
 <script setup name='EmrWebSocket' lang="ts">
 import {stringIsBlank} from "@/utils/blank-utils";
 import store from "@/store";
-import {ref, defineProps, onMounted, nextTick, computed} from 'vue'
+import {ref, defineProps, onMounted, nextTick, computed, onDeactivated, onBeforeUnmount, onUnmounted} from 'vue'
 import {xcMessage} from '@/utils/xiaochan-element-plus'
 import {getRoomPeople, sendAMessage} from '@/api/zhu-yuan-yi-sheng/emr-socket'
 import {ElNotification} from "element-plus";
@@ -55,7 +55,6 @@ const userMap = ref<any>({})
 const dialogRef = ref(null)
 
 const SOCKET_URL = import.meta.env.VITE_SOCKET_URL
-const EMR_SOCKET_URL = import.meta.env.VITE_EMR_SOCKET_URL
 
 let webSocket = null
 let userData = store.state.user.info
@@ -198,11 +197,34 @@ const clearDocument = () => {
   }
 }
 
+const clearSocket = () => {
+  if (webSocket != null) {
+    webSocket.close()
+    webSocket = null
+  }
+}
+
 onMounted(async () => {
   await nextTick()
   initWebSocket(props.patInfo.inpatientNo, props.patInfo.admissTimes)
 })
 
+onDeactivated(() => {
+  clearDocument()
+  clearSocket()
+})
+
+onUnmounted(() => {
+  clearDocument()
+  clearSocket()
+})
+
+onBeforeUnmount(() => {
+  clearDocument()
+  clearSocket()
+})
+
+
 defineExpose({
   medicalRecordSwitching,
   documentChange,

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

@@ -109,10 +109,13 @@
       </el-button-group>
       <el-divider direction="vertical"/>
       <el-checkbox v-model="autoSave" label="自动保存" @change="autoSaveChange"/>
+      <el-divider direction="vertical"/>
+      <emr-saved-medical-record ref="saveMedicalRef"/>
     </el-header>
     <el-container>
       <div :class="foldBothSides.isLeft ? 'emr-template-open' : 'emr-template-put-away' ">
         <emr-sidebar @nodeClick="nodeClick"
+                     @open-and-save-the-medical-record="openAndSaveTheMedicalRecord"
                      @patient-medical-record="foldBothSides.isLeft = true"
                      v-show="foldBothSides.isLeft"
                      ref="emrSidebarRef"
@@ -364,7 +367,7 @@ import {stringIsBlank, stringNotBlank} from "@/utils/blank-utils";
 import {createRestrictions} from "@/api/zhu-yuan-yi-sheng/emr-control-rule";
 import {needRule} from "@/utils/public";
 import {isThereADoctorEditing} from "@/api/zhu-yuan-yi-sheng/emr-socket";
-import * as net from "net";
+import EmrSavedMedicalRecord from "@/components/zhu-yuan-yi-sheng/emr/EmrSavedMedicalRecord.vue";
 
 const props = defineProps({
   huanZheXinXi: {
@@ -1431,6 +1434,10 @@ const medicalRecordQualityControl = async () => {
   }
 }
 
+const saveMedicalRef = ref(null)
+const openAndSaveTheMedicalRecord = (id) => {
+  saveMedicalRef.value.openDialog(id)
+}
 
 onMounted(async () => {
   autoSave = store.state.app.emrAutosave;

+ 1 - 1
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/Home.vue

@@ -1,7 +1,7 @@
 <template>
   <div ref="headerRef">
     <div v-show="!isDualScreen">
-      <emr-select-pat :pat-info="patientInfo" @selected="selected"/>
+      <emr-select-pat :pat-info="patientInfo" v-if="emrConfig.editor" @selected="selected"/>
       住院号:
       <el-input v-model="query.patNo" style="width: 120px"/>
       次数 ({{ query.times }}) :