import { defineStore } from "pinia";
|
import { ref } from "vue";
|
import cache from "../utils/cache";
|
import { EventSourcePolyfill } from "event-source-polyfill";
|
import type { DeviceData } from './type/bedsideAuxiliaryScreen.type';
|
import { defaultDeviceData, defaultconsumablesCollection } from './type/bedsideAuxiliaryScreen.type';
|
|
|
export const useBedsideAuxiliaryScreenStore = defineStore(
|
"bedsideAuxiliaryScreen",
|
() => {
|
/** 设备编号 */
|
const deviceCode = ref<string>(cache.get("devcieCode") || "");
|
|
/** 床旁血压计数据 */
|
const bedsideBloodPressureMonitorData = ref({
|
date_time: '',
|
sbp: '',
|
pulseRate: '',
|
dbp: '',
|
zuihouTime: '',
|
});
|
|
/** s设备信息数据 */
|
const deviceData = ref<DeviceData>(defaultDeviceData());
|
|
/**
|
* 设置设备编号
|
* @param code
|
*/
|
const setDeviceCode = (code: string) => {
|
deviceCode.value = code;
|
cache.set("devcieCode", code);
|
};
|
|
// SSE 相关状态
|
const source = ref<EventSource | null>(null);
|
const message = ref<string | null>(null);
|
const isConnected = ref(false);
|
|
/**
|
* 连接 SSE 服务
|
* @param url SSE 地址
|
*/
|
const connect = (url: string) => {
|
if (source.value) return; // 已连接,避免重复连接
|
|
source.value = new EventSourcePolyfill(url, {
|
heartbeatTimeout: 60000,
|
});
|
|
source.value.onopen = () => {
|
console.log("[SSE] 连接成功");
|
isConnected.value = true;
|
};
|
|
source.value.onerror = (e) => {
|
console.warn("[SSE] 错误,等待重连中", e);
|
isConnected.value = false;
|
};
|
|
source.value.onmessage = (e) => {
|
console.log("[SSE] 消息:", e.data);
|
const msg = e.data;
|
let dif = msg.indexOf("event:message");
|
let beng = msg.indexOf("{");
|
let end = msg.length - 1;
|
if (beng !== -1 && end !== -1 && dif !== -1) {
|
const datax = msg.slice(beng, end + 1);
|
const dataBody = JSON.parse(datax);
|
console.log('dataBody: ', dataBody)
|
// 倒计时提示文本
|
if (dataBody.倒计时?.提示文本) {}
|
|
// 床旁血压计
|
if (dataBody.推送类型 === '床旁血压计') {}
|
// 中央监控大屏信息
|
else if (dataBody.推送类型 === '中央监控大屏信息') {
|
// 存在透析状态,表示当前设备今天存在排班
|
if (dataBody?.透析状态) {}
|
// 不存在就是没有排班
|
else {
|
deviceData.value.devicdeNo = dataBody.IOT信息?.床号;
|
deviceData.value.patientName = '';
|
deviceData.value.consumablesCollection = dataBody?.使用耗材字典 || defaultconsumablesCollection();
|
}
|
}
|
}
|
};
|
};
|
|
/**
|
* 关闭 SSE 连接
|
*/
|
const close = () => {
|
if (source.value) {
|
source.value.close();
|
source.value = null;
|
isConnected.value = false;
|
console.log("[SSE] 连接已关闭");
|
}
|
};
|
return {
|
deviceCode,
|
deviceData,
|
setDeviceCode,
|
source,
|
message,
|
isConnected,
|
connect,
|
close,
|
};
|
}
|
);
|