import {defineStore} from "pinia"; import {Session} from "@/utils/storage"; import {ElMessage, ElMessageBox} from "element-plus"; // // 本地调试版本: // const vitalUrl = "ws://" + window.location.host + "/socket.io/admin/rax/vitalSignsMedicine?token=" + Session.getToken() // // const medicineUrl = "ws://" + window.location.host + "/socket.io/admin/rax/addMedicine?token=" + Session.getToken() // const chatUrl = "ws://" + window.location.host + "/socket.io/admin/rax/chatRoom?token=" + Session.getToken() // 服务器部署版本 // const vitalUrl = "ws://" + window.location.host + "/socket.io/admin/rax/vitalSignsMedicine?token=" + Session.getToken() // const medicineUrl = "ws://" + window.location.host + "/socket.io/admin/rax/addMedicine?token=" + Session.getToken() // const chatUrl = "ws://" + window.location.host + "/socket.io/admin/rax/chatRoom?token=" + Session.getToken() // 服务器部署版本 const vitalUrl = "/socket.io/admin/rax/vitalSignsMedicine?token=" + Session.getToken() const medicineUrl = "/socket.io/admin/rax/addMedicine?token=" + Session.getToken() const chatUrl = "/socket.io/admin/rax/chatRoom?token=" + Session.getToken() export const useRemoteWsStore = defineStore("remoteWs", { state: () => { return { patient: {} as any, remoteTasks: [] as any, remoteTasksCap: 10, currentTaskIndex: -1, // varMedicine: ["丙泊酚", "舒芬太尼", "瑞芬太尼", "顺阿曲库铵", "罗库溴铵"], varMedicine: ["丙泊酚", "舒芬太尼", "瑞芬太尼", "顺阿曲库铵"], fixedMedicine: ["尼卡地平", "艾司洛尔", "麻黄碱", "阿托品"], exceptionType: ["BIS_except", "TOF_except", "HR_except", "SBP_except", "DBP_except", "MAP_except"], exceptionMsg: { "BIS_except": "脑电双频指数异常", "TOF_except": "TOF异常", "HR_except": "心率异常", "SBP_except": "收缩压异常", "DBP_except": "舒张压异常", "MAP_except": "平均动脉压异常", // "EtCO2_except": "呼气末二氧化碳异常", // "ST_except": "ST异常", } as any, closeStatus: {} as any } }, actions: { setCurrentTaskIndex(i: number) { this.currentTaskIndex = i Session.set("currentTaskIndex", i) }, getCurrentTaskIndex() { if (Session.get("currentTaskIndex") > -1) { this.currentTaskIndex = Session.get("currentTaskIndex") } return this.currentTaskIndex }, setRemoteTask() { Session.set("remoteTasks", this.remoteTasks) }, getRemoteTask() { if (Session.get("remoteTasks")) { this.remoteTasks = Session.get("remoteTasks") } return this.remoteTasks }, initRemoteTask() { if (Session.get("remoteTasks")) { this.remoteTasks = Session.get("remoteTasks") } if (this.remoteTasks.length <= 0) { for (let i = 0; i < 10; i++) { this.remoteTasks.push({ isRemote: false, isException: false, taskName: "", server: "", serverun: "", serverps: "", patient: "", patientId: "", date: "", log: [], index: i }) } } return this.remoteTasks }, resetRemoteTask(i: number) { this.remoteTasks[i] = Object.assign(this.remoteTasks[i], { isRemote: false, isException: false, taskName: "", server: "", serverun: "", serverps: "", patient: "", patientId: "", date: "", log: [], index: i, message: [] }) Session.set("remoteTasks", this.remoteTasks) }, getActiveRemoteTask() { let index = 0 for (let i = 0; i < this.remoteTasks.length; i++) { if (this.remoteTasks[i].isRemote) index = i } return index }, setRemoteLog(log: any, i: number) { this.remoteTasks[i].log.push(log) }, getRemoteLog(i: number) { return this.remoteTasks[i].log }, getCloseStatus() { return this.closeStatus }, /*createConnect(name: string, id: string, date: string, index: number) { if (!this.patient[name + id + date + index]) { const vitalWS = new WebSocket(vitalUrl) // const medicineWS = new WebSocket(medicineUrl) const chatWS = new WebSocket(chatUrl) vitalWS.onopen = function () { vitalWS.send(JSON.stringify({ patientName: name, idNum: id, date: date, msgType: "msg" })) } vitalWS.onerror = () => { ElMessage.error("远程管理" + (index + 1) + "出错") } vitalWS.onmessage = (e: any) => { if (e && e.data) { const data = JSON.parse(e.data); if (data.msgType == "heartbeat") { vitalWS.send(JSON.stringify({msgType: "heartbeat"})) } } } /!* medicineWS.onopen = function () { medicineWS.send(JSON.stringify({ patientName: name, idNum: id, date: date })) } medicineWS.onclose = () => { ElMessage.info("远程管理" + (index + 1) + "给药已断开") } medicineWS.onerror = () => { ElMessage.error("远程管理" + (index + 1) + "给药出错") }*!/ chatWS.onopen = function () { chatWS.send(JSON.stringify({ patientName: name, idNum: id, date: date, msgType: "msg" })) } chatWS.onerror = () => { ElMessage.error("远程管理" + (index + 1) + "通讯出错") } chatWS.onmessage = (e: any) => { if (e && e.data) { const data = JSON.parse(e.data); if (data.msgType == "heartbeat") { chatWS.send(JSON.stringify({msgType: "heartbeat"})) } } } this.patient[name + id + date + index] = { vitalWS, // medicineWS, chatWS } } },*/ disconnect(name: string, id: string, date: string, index: number) { this.disconnectChat(name, id, date, index) this.disconnectVital(name, id, date, index) this.disconnectMedicine(name, id, date, index) delete this.patient[name + id + date + index] }, createVital(name: string, id: string, date: string, index: number) { const patient = this.patient[name + id + date + index] ? this.patient[name + id + date + index] : this.patient[name + id + date + index] = {} if (patient && !patient['vitalWS']) { patient['vitalWS'] = new WebSocket(vitalUrl) patient['vitalWS'].onopen = function () { ElMessage.info("远程查看" + (index + 1) + ",生命体征数据连接成功") patient['vitalWS'].send(JSON.stringify({ patientName: name, idNum: id, date: date, msgType: "msg" })) } patient['vitalWS'].onerror = () => { ElMessage.error("远程管理" + (index + 1) + "生命体征数据出错") } delete this.closeStatus[name + id + date + index + 'vitalWS'] } }, subscribeVital(name: string, id: string, date: string, index: number, cb: any) { const patient: any = this.patient[name + id + date + index] patient.vitalWS.onmessage = (e: any) => { if (e && e.data) { const data = JSON.parse(e.data); if (data.msgType == "msg") { cb(e) } else { patient.vitalWS.send(JSON.stringify({msgType: "heartbeat"})) } } } }, vitalOnclose(name: string, id: string, date: string, index: number, cb: any) { const patient: any = this.patient[name + id + date + index] const status = this.getCloseStatus() patient.vitalWS.onclose = () => { if (!status[name + id + date + index + 'vitalWS']) { delete patient.vitalWS cb() } } }, unsubscribeVital(name: string, id: string, date: string, index: number) { const patient: any = this.patient[name + id + date + index] if (patient && patient.vitalWS) { patient.vitalWS.onmessage = undefined; } }, createChatConnect(name: string, id: string, date: string, index: number) { if (!this.patient[name + id + date + index]) this.patient[name + id + date + index] = {} const patient = this.patient[name + id + date + index] if (!patient['chatWS']) { patient['chatWS'] = new WebSocket(chatUrl) patient.chatWS.onopen = function () { patient.chatWS.send(JSON.stringify({ patientName: name, idNum: id, date: date, msgType: "init" })) } } }, sendMsg(name: string, id: string, date: string, msg: string, index: number, cb: any) { const patient: any = this.patient[name + id + date + index] if (patient) { const params = { patientName: name, idNum: id, date: date, msg: msg, msgType: "msg" } patient.chatWS.send(JSON.stringify(params)) cb({ status: 0 }) } else { cb({ status: 1, msg: "已断开连接" }) } }, sendAudio(name: string, id: string, date: string, audio: any, index: number, cb: any) { const patient: any = this.patient[name + id + date + index] if (patient) { const params = { patientName: name, idNum: id, date: date, content: audio, msgType: "audio" } patient.chatWS.send(JSON.stringify(params)) cb({ status: 0 }) } else { cb({ status: 1, msg: "已断开连接" }) } }, disconnectVital(name: string, id: string, date: string, index: number) { const patient: any = this.patient[name + id + date + index] if (patient && patient.vitalWS) { this.closeStatus[name + id + date + index + 'vitalWS'] = true patient.vitalWS.close() delete patient['vitalWS'] } }, createChat(name: string, id: string, date: string, index: number) { const patient = this.patient[name + id + date + index] ? this.patient[name + id + date + index] : this.patient[name + id + date + index] = {} if (patient && !patient['chatWS']) { patient['chatWS'] = new WebSocket(chatUrl) patient['chatWS'].onopen = function () { ElMessage.info("远程查看" + (index + 1) + ",通讯连接成功") patient['chatWS'].send(JSON.stringify({ patientName: name, idNum: id, date: date, msgType: "init" })) patient['chatWS'].send(JSON.stringify({ patientName: name, idNum: id, date: date, msgType: "historyChat" })) } patient['chatWS'].onerror = () => { ElMessage.error("远程查看" + (index + 1) + "通讯出错") } delete this.closeStatus[name + id + date + index + 'chatWS'] } }, subscribeChat(name: string, id: string, date: string, index: number, cb: any) { const patient: any = this.patient[name + id + date + index] patient.chatWS.onmessage = (e: any) => { if (e && e.data) { const data = JSON.parse(e.data); if (data.msgType == "msg" || data.msgType == "audio" || data.msgType == "historyChat" || data.msgType == "destroy") { cb(e) } else { patient.chatWS.send(JSON.stringify({msgType: "heartbeat"})) } } } }, getHistoryChat(name: string, id: string, date: string, index: number) { const patient: any = this.patient[name + id + date + index] patient.chatWS.send(JSON.stringify({ patientName: name, idNum: id, date: date, msgType: "historyChat" })) }, chatOnclose(name: string, id: string, date: string, index: number, cb: any) { const patient: any = this.patient[name + id + date + index] patient.chatWS.onclose = () => { const status = this.getCloseStatus() if (!status[name + id + date + index + 'chatWS']) { delete patient.chatWS cb() } } }, unsubscribeChat(name: string, id: string, date: string, index: number) { const patient: any = this.patient[name + id + date + index] patient.chatWS.onmessage = undefined; }, disconnectChat(name: string, id: string, date: string, index: number) { const patient: any = this.patient[name + id + date + index] if (patient && patient.chatWS) { this.closeStatus[name + id + date + index + 'chatWS'] = true patient.chatWS.close() delete patient['chatWS'] } }, sendMedicine(args: { name: string, id: string, date: string, flag: string, medicine: string, value: string }, index: number, cb: any) { const patient: any = this.patient[args.name + args.id + args.date + index] if (patient) { const params = { patientName: args.name, idNum: args.id, date: args.date, flag: args.flag, medicine: args.medicine, value: args.value, msgType: "msg" } patient.medicineWS.send(JSON.stringify(params)) cb({ status: 0 }) } else { cb({ status: 1, msg: "已断开连接" }) } }, medicineOnclose(name: string, id: string, date: string, index: number, cb: any) { const patient: any = this.patient[name + id + date + index] patient.medicineWS.onclose = cb }, unsubscribeMedicine(name: string, id: string, date: string, index: number) { const patient: any = this.patient[name + id + date + index] patient.medicineCB = undefined; patient.medicineWS.onmessage = undefined; }, /** * 远程控制 */ // 初始化 createMedicineConnect(name: string, id: string, index: number) { if (!this.patient[name + id + index]) this.patient[name + id + index] = {} const patient = this.patient[name + id + index] if (!patient['medicineWS']) { patient['medicineWS'] = new WebSocket(medicineUrl) patient.medicineWS.onopen = function () { patient.medicineWS.send(JSON.stringify({ patientName: name, idNum: id, // date: date, msgType: "init" })) if (this.loopSendMedicinePing) { this.loopSendMedicinePing(name,id,index,()=>{}) } } } }, subscribeMedicine(name: string, id: string, date: string, index: number, cb: any) { const patient = this.patient[name + id + date + index] if (patient) { patient.medicineCB = cb patient.medicineWS.onmessage = (e: any) => { if (e && e.data) { const data = JSON.parse(e.data); if (data.msgType == "msg") { cb(e) } else { patient.medicineWS.send(JSON.stringify({msgType: "heartbeat"})) } } } } else { cb({ status: 1, msg: "已断开连接" }) } }, disconnectMedicine(name: string, id: string, date: string, index: number) { const patient: any = this.patient[name + id + date + index] if (patient && patient.vitalWS) { this.closeStatus[name + id + date + index + 'vitalWS'] = true patient.medicineWS.close() delete patient['medicineWS'] } }, // 请求连接远程控制 reqMedicineConnect(params:{name: string, id: string,index: number, msgType: string, flag: string},cb:any){ const {name, id, index,msgType,flag} = params; const patient = this.patient[name + id +index] const sendData={ patientName: name, idNum: id, // date: date, msgType: msgType, webConnectionFlag: flag } if (patient) { patient.medicineWS.send(JSON.stringify(sendData)) } if (flag==='0') { setTimeout(() => { cb(flag) }, 100); } }, } })