ソースを参照

小小的优化

xiaochan 9 ヶ月 前
コミット
c07a41b961

+ 21 - 5
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/socket/useEmrSocket.ts

@@ -1,9 +1,11 @@
 import { useUserStore } from "@/pinia/user-store";
 import { useWebSocket, UseWebSocketReturn } from "@vueuse/core";
-import { ElNotification } from "element-plus";
+import { ElMessageBox, ElNotification } from "element-plus";
 import { EmrStore } from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-func/useEmrStore";
 import { EditType } from "@/utils/emr/edit";
 import { stringIsBlank } from "@/utils/blank-utils";
+import { xcMessage } from "@/utils/xiaochan-element-plus";
+import XEUtils from "xe-utils";
 
 const us = useUserStore().userInfo;
 
@@ -16,6 +18,7 @@ export enum MessageType {
   notice = "notice",
   VIEW_DOCUMENT = "VIEW_DOCUMENT",
   CURRENT_DOCUMENT = "CURRENT_DOCUMENT",
+  ID = "ID",
 }
 
 export enum KickedType {
@@ -61,10 +64,15 @@ export function useEmrSocket(
 ) {
   const sid = patInfo + "_" + us.code;
 
+  const socketId = ref("");
+
   Object.assign(socketMsg, {
     [MessageType.CURRENT_DOCUMENT]: data => {
       store.currentDocumentData = JSON.parse(data);
     },
+    [MessageType.ID]: data => {
+      socketId.value = data;
+    },
   });
 
   const setInfo = () => {
@@ -85,6 +93,7 @@ export function useEmrSocket(
     heartbeat: {
       message: setInfo(),
       interval: 1000 * 60 * 3,
+      pongTimeout: 1000,
     },
     onConnected: ws => {
       ws.send(setInfo());
@@ -138,12 +147,15 @@ export function useEmrSocket(
     sendMsg,
     status,
     sendCurrentDocument,
+    socketId,
   };
 }
 
-export function documentSocket(kicked: EmrStore["kicked"]) {
-  // @ts-ignore
-  let socketFun: UseWebSocketReturn<any> = {
+export function documentSocket(
+  kicked: EmrStore["kicked"],
+  editor: () => EditType
+) {
+  let socketFun: UseWebSocketReturn<any> | any = {
     send: () => {},
     close: () => {},
     status: ref(),
@@ -155,8 +167,12 @@ export function documentSocket(kicked: EmrStore["kicked"]) {
       autoReconnect: true,
       immediate: true,
       onDisconnected(ws, event) {
-        if (event.code === 3004) {
+        if (event.code > 3000) {
           socketFun.close();
+          editor().setEditorMode("readonly");
+          ElMessageBox.alert(event.reason, "出错了", {
+            type: "error",
+          }).catch(XEUtils.noop);
         }
       },
       onConnected(ws) {

+ 1 - 1
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-func/useEmrStore.ts

@@ -249,7 +249,7 @@ export const useEmrStore = (patId: string) => {
   };
 
   const emrSocket = socket.useEmrSocket(patId, store, () => editor);
-  const documentSocket = socket.documentSocket(kicked);
+  const documentSocket = socket.documentSocket(kicked, () => editor);
 
   return {
     patInfo,