|
@@ -0,0 +1,95 @@
|
|
|
+import { useUserStore } from "@/pinia/user-store";
|
|
|
+import { useWebSocket } from "@vueuse/core";
|
|
|
+import { ElNotification } from "element-plus";
|
|
|
+
|
|
|
+const us = useUserStore().userInfo;
|
|
|
+const URL = import.meta.env.VITE_EMR_SOCKET;
|
|
|
+
|
|
|
+enum MessageType {
|
|
|
+ USER_INFO = "USER_INFO",
|
|
|
+ OPEN = "open",
|
|
|
+ exitEmrEditor = "exitEmrEditor",
|
|
|
+ notice = "notice",
|
|
|
+}
|
|
|
+
|
|
|
+function showRoom(data, type: string) {
|
|
|
+ ElNotification({
|
|
|
+ type,
|
|
|
+ // @ts-ignore
|
|
|
+ title: type === "success" ? "有新的连接加入" : "有连接退出",
|
|
|
+ dangerouslyUseHTMLString: true,
|
|
|
+ message: `<span>姓名:${data.name}</span>
|
|
|
+ <br>
|
|
|
+ <span>科室:${data.deptName}</span>`,
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+const socketMsg = {
|
|
|
+ [MessageType.OPEN]: data => {
|
|
|
+ showRoom(data, "success");
|
|
|
+ },
|
|
|
+ [MessageType.exitEmrEditor]: data => {
|
|
|
+ showRoom(data, "error");
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+export function useEmrSocket(
|
|
|
+ patInfo: string,
|
|
|
+ cb?: {
|
|
|
+ [key: string]: (value: any) => void;
|
|
|
+ }
|
|
|
+) {
|
|
|
+ Object.assign(socketMsg, cb);
|
|
|
+
|
|
|
+ const sid = patInfo + "_" + us.code;
|
|
|
+
|
|
|
+ const { data, status, send } = useWebSocket(URL + "/emrEditor/" + sid, {
|
|
|
+ autoReconnect: true,
|
|
|
+ onError: (ws, event) => {
|
|
|
+ console.error(ws, event);
|
|
|
+ },
|
|
|
+ onConnected: () => {
|
|
|
+ send(
|
|
|
+ JSON.stringify({
|
|
|
+ code: MessageType.USER_INFO,
|
|
|
+ data: {
|
|
|
+ deptName: us.deptName,
|
|
|
+ name: us.name,
|
|
|
+ },
|
|
|
+ })
|
|
|
+ );
|
|
|
+ },
|
|
|
+ });
|
|
|
+
|
|
|
+ watch(
|
|
|
+ () => data.value,
|
|
|
+ () => {
|
|
|
+ try {
|
|
|
+ const val = JSON.parse(data.value);
|
|
|
+ const key = val.code;
|
|
|
+ socketMsg?.[key]?.(val.data);
|
|
|
+ } catch (e) {
|
|
|
+ console.error("socket接受消息错误", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ send(
|
|
|
+ JSON.stringify({
|
|
|
+ code: MessageType.OPEN,
|
|
|
+ data: {
|
|
|
+ deptName: us.deptName,
|
|
|
+ name: us.name,
|
|
|
+ },
|
|
|
+ })
|
|
|
+ );
|
|
|
+
|
|
|
+ return {
|
|
|
+ sendMsg(message: string) {
|
|
|
+ send(message);
|
|
|
+ },
|
|
|
+ status,
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+export function documentSocket() {}
|