import { defineStore } from "pinia";
|
import { ref } from "vue";
|
import cache from "../utils/cache";
|
import { EventSourcePolyfill } from "event-source-polyfill";
|
import type { BedsideAuxiliaryScreen } from './type/bedsideAuxiliaryScreen.type';
|
import { defaultDeviceData, defaultconsumablesCollection, formatDeviceData } 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: '',
|
});
|
|
/** 设备信息数据 */
|
const deviceData = ref<BedsideAuxiliaryScreen>(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.倒计时?.提示文本) {}
|
|
deviceData.value = formatDeviceData(dataBody)
|
}
|
};
|
};
|
|
/**
|
* 关闭 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,
|
};
|
}
|
);
|