Merge branch 'master' of http://dh.leon056.com:7499/r/data2/Single_application into ID1956-已签到页面改版
| | |
| | | import { ref } from "vue"; |
| | | import dayjs from "dayjs"; |
| | | import { EventSourcePolyfill } from "event-source-polyfill"; |
| | | import type { BedsideAuxiliaryScreen, SseMsgData } from "./type/bedsideAuxiliaryScreen.type"; |
| | | import type { |
| | | BedsideAuxiliaryScreen, |
| | | SseMsgData, |
| | | } from "./type/bedsideAuxiliaryScreen.type"; |
| | | import type { Task } from "./type/task.type"; |
| | | import { |
| | | defaultDeviceData, |
| | |
| | | /** 设备编号 */ |
| | | const deviceCode = ref<string>(Local.get("devcieCode") || ""); |
| | | |
| | | /** 副屏版本号 */ |
| | | const version = ref<string>(Local.get("version") || "0.0.0"); |
| | | |
| | | /** 设备信息数据 */ |
| | | const deviceData = ref<BedsideAuxiliaryScreen>(defaultDeviceData()); |
| | | |
| | | /** 任务列表 */ |
| | | const taskData = ref<Task[]>([]); |
| | | |
| | | /** 设置副屏版本号 */ |
| | | const setVersion = (val: string) => { |
| | | version.value = val; |
| | | Local.set("version", val); |
| | | }; |
| | | |
| | | /** |
| | | * 设置设备编号 |
| | |
| | | const pushTask = (taskItem: Task) => { |
| | | taskData.value.push(taskItem); |
| | | }; |
| | | |
| | | /** |
| | | * 是否将当前任务设置为已过期 |
| | | * @param i |
| | | */ |
| | | // const deleteTask = (i: number) => { |
| | | // const task = taskData.value[i]; |
| | | // if (task) { |
| | | // // 二次判断,判断任务时间是否早于或等于当前时间 |
| | | // const taskTime = dayjs(task.taskDate).second(0).millisecond(0); |
| | | // const now = dayjs().second(0).millisecond(0); // 秒和毫秒都去掉 |
| | | // if (!taskTime.isAfter(now)) { |
| | | // taskData.value[i].overdue = true |
| | | // } |
| | | // } |
| | | // }; |
| | | |
| | | /** 设置当前定时任务 */ |
| | | const setSyncTask = (taskItem: Task) => { |
| | |
| | | const dataBody = JSON.parse(datax) as SseMsgData; |
| | | console.log("dataBody: ", dataBody); |
| | | // 倒计时提示文本 |
| | | if (dataBody.倒计时?.提醒文本 && Number(dataBody.倒计时?.设定提醒倒计时 > 0)) { |
| | | if ( |
| | | dataBody.倒计时?.提醒文本 && |
| | | Number(dataBody.倒计时?.设定提醒倒计时 > 0) |
| | | ) { |
| | | const serverTimeRaw = dataBody.倒计时?.当前服务器时间; |
| | | const reminderMinutes = Number(dataBody.倒计时?.设定提醒倒计时 ?? 0); |
| | | const serverTimeFormatted = serverTimeRaw.replace(' ', 'T'); |
| | | const reminderMinutes = Number( |
| | | dataBody.倒计时?.设定提醒倒计时 ?? 0 |
| | | ); |
| | | const serverTimeFormatted = serverTimeRaw.replace(" ", "T"); |
| | | |
| | | const taskTime = dayjs(serverTimeFormatted).add(reminderMinutes, 'second'); |
| | | const taskTime = dayjs(serverTimeFormatted).add( |
| | | reminderMinutes, |
| | | "second" |
| | | ); |
| | | setSyncTask({ |
| | | deviceCode: dataBody.IOT信息.设备唯一编号, |
| | | recordCode: dataBody.透析状态?.透析单编号, |
| | | taskDate: taskTime.format('YYYY-MM-DD HH:mm'), |
| | | taskDate: taskTime.format("YYYY-MM-DD HH:mm"), |
| | | taskName: dataBody.倒计时?.提醒文本, |
| | | overdue: false, |
| | | sync: true, |
| | | countdown: dataBody.倒计时?.设定提醒倒计时 |
| | | }) |
| | | countdown: dataBody.倒计时?.设定提醒倒计时, |
| | | }); |
| | | } else { |
| | | clearTask(); |
| | | } |
| | | |
| | | deviceData.value = formatDeviceData(deviceData.value, dataBody); |
| | | // 判断本地的版本号与远程的版本号是否一致,如果不一致则执行刷新操作 |
| | | if (dataBody.服务端版本号 !== version.value) { |
| | | refreshVersion(dataBody.服务端版本号); |
| | | } else if (dataBody.是否需要立即刷新 === 1) { |
| | | refreshVersion(dataBody.服务端版本号); |
| | | } |
| | | } |
| | | }; |
| | | }; |
| | | |
| | | /** 刷新副屏 */ |
| | | const refreshVersion = (val?: string) => { |
| | | if (val) { |
| | | setVersion(val); |
| | | } |
| | | ElMessage({ |
| | | type: "success", |
| | | duration: 1000 * 3, |
| | | message: "系统更新···", |
| | | onClose: function () { |
| | | window.location.reload(); |
| | | }, |
| | | }); |
| | | }; |
| | | |
| | | /** |
| | |
| | | }; |
| | | |
| | | return { |
| | | version, |
| | | deviceCode, |
| | | deviceData, |
| | | setDeviceCode, |
| | |
| | | pushTask, |
| | | setSyncTask, |
| | | clearTask, |
| | | setVersion, |
| | | refreshVersion, |
| | | }; |
| | | } |
| | | ); |
| | |
| | | 透析状态: DialysisStatus | null; |
| | | 床旁血压结果?: any; |
| | | 自定义配置项: Customconfiguration; |
| | | 服务端版本号: string; |
| | | 是否需要立即刷新: 0 | 1; |
| | | } |
| | | |
| | | interface Customconfiguration { |
| | |
| | | export interface BedsideAuxiliaryScreen { |
| | | deviceCode: string; |
| | | devicdeNo: string | number; |
| | | version: string; |
| | | isRefresh: number; |
| | | recordCode: string; |
| | | patientCode: string; |
| | | patientName: string; |
| | |
| | | return { |
| | | deviceCode: "", // 设备code |
| | | devicdeNo: "", // 设备号 |
| | | version: "0.0.0", // 版本号 |
| | | isRefresh: 0, // 是否立即刷新 |
| | | recordCode: "", // 透析单code |
| | | patientCode: "", // 患者code |
| | | patientName: "", // 患者姓名 |
| | |
| | | |
| | | const result = deepClone(data); |
| | | |
| | | // 版本号/是否立即刷新 |
| | | result.version = seeMsg.服务端版本号; |
| | | result.isRefresh = seeMsg.是否需要立即刷新; |
| | | |
| | | |
| | | // 默认床号(设备号) |
| | | result.devicdeNo = seeMsg.IOT信息?.床号; |
| | |
| | | throw error; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取副屏最新的版本号Api |
| | | * @returns |
| | | */ |
| | | export const getServiceVersionApi = async(version: string) => { |
| | | try { |
| | | const response = await axios.post(`${apiBaseUrl}/system/version/subscreen/showVersionDiff`, { version }, { |
| | | headers: { |
| | | 'Content-Type': 'application/x-www-form-urlencoded' |
| | | } |
| | | }); |
| | | return response.data; |
| | | } catch (error) { |
| | | throw error; |
| | | } |
| | | } |
| | |
| | | chars[1] = masked |
| | | return chars.join('') |
| | | } |
| | | |
| | | /** |
| | | * 延时函数 |
| | | * @param {number} ms - 延时时间,单位毫秒 |
| | | */ |
| | | export function delay(ms: number) { |
| | | return new Promise((resolve) => setTimeout(resolve, ms)); |
| | | } |
| New file |
| | |
| | | <template> |
| | | <div class="version-container"> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts"> |
| | | export default { |
| | | name: 'Version', |
| | | setup() { |
| | | return {} |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | import { ref, watch, computed, onMounted, defineAsyncComponent } from "vue"; |
| | | import { |
| | | ref, |
| | | watch, |
| | | computed, |
| | | onMounted, |
| | | defineAsyncComponent, |
| | | onBeforeUnmount, |
| | | } from "vue"; |
| | | // @ts-ignore |
| | | import Header from "./components/Header.vue"; |
| | | import { useBedsideAuxiliaryScreenStore } from "@/store/bedsideAuxiliaryScreen"; |
| | | import { EPageType } from "@/store/type/bedsideAuxiliaryScreen.type"; |
| | | import { getAvailableHeightByClass } from "@/utils/utils"; |
| | | import { getAvailableHeightByClass, delay } from "@/utils/utils"; |
| | | import { useWindowSize } from "@/composables/useWindowSize"; |
| | | import { getServiceVersionApi } from "@/utils/httpApi"; |
| | | import { ElMessage } from "element-plus"; |
| | | // 未排班时的组件 |
| | | const UnplannedSchedule = defineAsyncComponent( |
| | | () => import("./pages/UnplannedSchedule.vue") |
| | |
| | | const bedsideAuxiliaryScreenStore = useBedsideAuxiliaryScreenStore(); |
| | | const cotentHeight = ref(0); |
| | | const { width, height } = useWindowSize(); |
| | | |
| | | const versionTimer = 1000 * 60 * 5; // 五分钟请求一次 getServiceVersionApi 接口,防止副屏关屏的时候收不到推送的消息 |
| | | let timer: ReturnType<typeof setInterval> | null = null; |
| | | |
| | | const backgroundColor = computed(() => { |
| | | let color = "#DAE5EC"; |
| | |
| | | cotentHeight.value = getAvailableHeightByClass("content-position"); |
| | | }); |
| | | |
| | | // 版本更新/手动刷新场景 |
| | | // watch( |
| | | // [ |
| | | // bedsideAuxiliaryScreenStore.version, |
| | | // bedsideAuxiliaryScreenStore.deviceData.isRefresh, |
| | | // ], |
| | | // ([newVersion, newIsRefresh], [oldVersion, oldIsRefresh]) => { |
| | | // // 如果远程版本号存在更新/设备列表页面进行了手动刷新 |
| | | // console.log('bedsideAuxiliaryScreenStore.version :', bedsideAuxiliaryScreenStore.version) |
| | | // if ( |
| | | // newVersion !== oldVersion|| |
| | | // newIsRefresh === 1 |
| | | // ) { |
| | | // refreshFun(); |
| | | // } |
| | | // } |
| | | // ); |
| | | |
| | | const getServiceVersionFun = async () => { |
| | | try { |
| | | const { data } = await getServiceVersionApi(bedsideAuxiliaryScreenStore.version); |
| | | if (data?.version && data?.version !== bedsideAuxiliaryScreenStore.version) { |
| | | bedsideAuxiliaryScreenStore.refreshVersion(data.version); |
| | | } else if (!data?.version) { |
| | | ElMessage.error("获取版本号失败,请联系管理员!"); |
| | | } |
| | | } catch (error) { |
| | | ElMessage.error("获取版本号失败,请联系管理员!"); |
| | | } |
| | | }; |
| | | |
| | | |
| | | onMounted(() => { |
| | | if (bedsideAuxiliaryScreenStore.deviceCode) { |
| | | bedsideAuxiliaryScreenStore.connect( |
| | |
| | | }` |
| | | ); |
| | | } |
| | | // 先立即执行一次 |
| | | getServiceVersionFun(); |
| | | |
| | | // 再每 5 分钟执行一次 |
| | | timer = setInterval(() => { |
| | | getServiceVersionFun(); |
| | | }, versionTimer); |
| | | cotentHeight.value = getAvailableHeightByClass("content-position"); |
| | | }); |
| | | |
| | | onBeforeUnmount(() => { |
| | | // 把定时器清除掉 |
| | | if (timer) { |
| | | clearInterval(timer); |
| | | } |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="less" scoped> |