Browse Source

电子病历通知优化

DESKTOP-0GD05B0\Administrator 2 years ago
parent
commit
58385f4fcb

+ 2 - 2
src/api/zhu-yuan-yi-sheng/emr-socket.js

@@ -8,11 +8,11 @@ export function getRoomPeople(sid) {
     })
 }
 
-export function sendAMessage(sid, message) {
+export function sendAMessage(sid, key, message) {
     return request({
         url: '/emrSocket/sendAMessage',
         method: 'get',
-        params: {sid, message}
+        params: {sid, key, message}
     })
 }
 

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

@@ -103,7 +103,7 @@ const clickSend = async () => {
   if (stringIsBlank(messageStr.value)) {
     return xcMessage.error('不能发送空白消息。')
   }
-  await sendAMessage(props.sid, messageStr.value)
+  await sendAMessage(props.sid, 'message', messageStr.value)
   messageStr.value = ''
   await queryJump()
 }
@@ -115,7 +115,7 @@ const modifyTheCurrentMedicalRecord = async () => {
   if (stringIsBlank(props.currentEditorUser.name)) {
     return xcMessage.error('当前没有人正在编辑');
   }
-  await sendAMessage(props.sid, '@' + props.currentEditorUser.name + '    申请修改病历,请尽快保存,后离开当前病历【系统自动发送】');
+  await sendAMessage(props.sid, 'message', '@' + props.currentEditorUser.name + '    申请修改病历,请尽快保存,后离开当前病历【系统自动发送】');
   messageStr.value = ''
   await queryJump()
 }

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

@@ -32,7 +32,7 @@ import store from "@/store";
 import {ref, defineProps, onMounted, nextTick, computed} from 'vue'
 import {useDraggable} from '@vueuse/core'
 import {xcMessage} from '@/utils/xiaochan-element-plus'
-import {getRoomPeople} from '@/api/zhu-yuan-yi-sheng/emr-socket'
+import {getRoomPeople, sendAMessage} from '@/api/zhu-yuan-yi-sheng/emr-socket'
 import {ElNotification} from "element-plus";
 import EmrChatBox from "@/components/zhu-yuan-yi-sheng/emr/web-socket/EmrChatBox.vue";
 import {$ref} from "vue/macros";
@@ -100,7 +100,14 @@ const onmessageFunc = {
       dialogRef.value.queryJump();
     }
     dialog.value = true
-    console.log("接受消息 %s", val)
+    console.log("接受消息 %o", val)
+  },
+  "notice": (val) => {
+    ElNotification({
+      type: 'success',
+      title: '查看或切换',
+      message: val
+    })
   }
 }
 
@@ -150,11 +157,20 @@ function initWebSocket(patNo, times) {
 
 }
 
+const medicalRecordSwitching = async (name) => {
+  console.log(name)
+  await sendAMessage(sid, "notice", name)
+}
+
 onMounted(async () => {
   await nextTick()
   initWebSocket(props.patInfo.inpatientNo, props.patInfo.admissTimes)
 })
 
+defineExpose({
+  medicalRecordSwitching
+})
+
 </script>
 
 <style scoped lang="scss">

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

@@ -398,7 +398,6 @@ const emrSnippetRef = ref(null)
 let loaded = $ref(false)
 // 是否 改变了数据
 let isEditorChange = $ref(false)
-
 // 是否开启审阅模式
 let reviewMode = $ref(0)
 // 跳转定位
@@ -476,7 +475,7 @@ const emrEvent = {
     // 判断是否只读
     readonlyPattern()
     // 每一个病历只能一个人编辑
-    editJudgment()
+    await editJudgment()
   },
 
   'contentchange': (event) => {
@@ -554,30 +553,35 @@ const editJudgment = async () => {
   if (stringIsBlank(documentId)) {
     return
   }
-  if (categoryCode.includes('shoucibingchengjilu')) {
-    currentEditorUser = await lockMedicalRecords(documentId)
-    if (currentEditorUser === null) {
-      xcMessage.success('可以编辑')
-    } else {
-      ElMessageBox.alert(`【${currentEditorUser.name}】正在编辑当前病历,请医生先退出病历后才能编辑。`, '提示', {
-        type: 'error',
-        dangerouslyUseHTMLString: true,
-      })
-      editor.setEditorMode('readonly')
-    }
-  } else {
-    if (readonlyPattern()) {
-      return;
-    }
-    currentEditorUser = await lockMedicalRecords(documentId)
-    if (currentEditorUser === null) {
-      xcMessage.success('可以编辑')
+  await emrSocket.value.medicalRecordSwitching(userData.name + '正在编辑或查看【' + templateName + '】病历')
+  // 判断当前是否可以编辑病历
+  if (emrConfig.value.editor) {
+    // 因为病程记录谁都可以编写所以。
+    if (categoryCode.includes('shoucibingchengjilu')) {
+      currentEditorUser = await lockMedicalRecords(documentId)
+      if (currentEditorUser === null || currentEditorUser.code === userData.code) {
+        xcMessage.success('可以编辑')
+      } else {
+        await ElMessageBox.alert(`【${currentEditorUser.name}】正在编辑当前病历,请医生先退出病历后才能编辑。`, '提示', {
+          type: 'error',
+          dangerouslyUseHTMLString: true,
+        })
+        editor.setEditorMode('readonly')
+      }
     } else {
-      ElMessageBox.alert(`【${currentEditorUser.name}】正在编辑当前病历,请医生先退出病历后才能编辑。`, '提示', {
-        type: 'error',
-        dangerouslyUseHTMLString: true,
-      })
-      editor.setEditorMode('readonly')
+      if (readonlyPattern()) {
+        return;
+      }
+      currentEditorUser = await lockMedicalRecords(documentId)
+      if (currentEditorUser === null) {
+        xcMessage.success('可以编辑')
+      } else {
+        await ElMessageBox.alert(`【${currentEditorUser.name}】正在编辑当前病历,请医生先退出病历后才能编辑。`, '提示', {
+          type: 'error',
+          dangerouslyUseHTMLString: true,
+        })
+        editor.setEditorMode('readonly')
+      }
     }
   }
   readonlyPattern()
@@ -821,14 +825,6 @@ const positioningTime = (val, code) => {
 }
 
 
-const monitorPageRefresh = (event) => {
-  if (isEditorChange) {
-    event.preventDefault();
-    clearMedicalRecordEditorUser(documentId)
-    event.returnValue = "是否确实要退出?还有未保存的数据!";
-  }
-}
-
 /**
  * 点击插入片段
  * @param content
@@ -1360,6 +1356,27 @@ const autoSaveFunc = () => {
   }
 }
 
+/**
+ * 拦截
+ * @param event
+ */
+const monitorPageRefresh = (event) => {
+  if (readonlyPattern()) {
+    isEditorChange = false;
+  }
+  if (isEditorChange) {
+    event.preventDefault();
+    event.returnValue = "是否确实要退出?还有未保存的数据!";
+  }
+}
+
+/**
+ * 用户刷新且点击了,确定后把锁释放
+ */
+const unload = () => {
+  clearMedicalRecordEditorUser(documentId)
+}
+
 
 onMounted(async () => {
   autoSave = store.state.app.emrAutosave;
@@ -1375,7 +1392,9 @@ onMounted(async () => {
   }
   doctorLevelFunc()
   emrRef.value.parentElement.emr = currentEmr.value
+
   window.addEventListener('beforeunload', monitorPageRefresh, {capture: true})
+  window.addEventListener('unload', unload, {capture: true})
 
   getWardsApi().then((res) => {
     if (res.length > 0) {
@@ -1390,9 +1409,10 @@ onMounted(async () => {
 onDeactivated(() => {
   clearInterval(interval)
   window.removeEventListener('beforeunload', monitorPageRefresh, {capture: true})
+  window.removeEventListener('unload', unload, {capture: true})
+  unload()
 })
 
-
 onBeforeRouteLeave((to, from, next) => {
   checkEmrChange(() => {
     next();