| | |
| | | <div class="bedside-auxiliary-screen-header"> |
| | | <div class="header-left"> |
| | | <!-- 没有设备编号 --> |
| | | <span v-if="pageType === 0" class="info-text">未绑定设备</span> |
| | | <span v-if="pageType === pageTypeEnum.NOT_INIT" class="info-text">未绑定设备</span> |
| | | <template v-else> |
| | | <!-- 设备号 --> |
| | | <span class="info-text">{{ |
| | | bedsideAuxiliaryScreenStore.deviceData.devicdeNo |
| | | }}</span> |
| | | <!-- 加载中 --> |
| | | <span v-if="pageType === 1" class="info-text" |
| | | <span v-if="pageType === pageTypeEnum.LOADING" class="info-text" |
| | | >页面初始化中,请耐心等待!</span |
| | | > |
| | | <!-- 未排班 --> |
| | | <span v-else-if="pageType === 2" class="info-text">当前尚未排班</span> |
| | | <span v-else-if="pageType === pageTypeEnum.UNPLANNED_SCHEDULE" class="info-text">当前尚未排班</span> |
| | | <!-- 有排班 --> |
| | | <template v-else> |
| | | <span class="info-text">{{ patientInfo.patientName }}</span> |
| | | <span class="info-text">{{ patientInfo.age }}岁</span> |
| | | <span class="info-text">{{ patientInfo.gender }}</span> |
| | | <span v-if="patientInfo.patFormNumber" class="info-text"> |
| | | {{ patientInfo.patForm }}:{{ patientInfo.patFormNumber }}</span |
| | | {{ patientInfo.patForm }}:{{ patientInfo.patFormNumber }}</span |
| | | > |
| | | <span v-if="pageType === pageTypeEnum.DURING_DIALYSIS && patientInfo.dialysisAge" class="info-text"> |
| | | 透析龄: {{ patientInfo.dialysisAge?.years }}年{{ patientInfo.dialysisAge?.months }}月 |
| | | </span> |
| | | </template> |
| | | {{ taskCountdown }} |
| | | </template> |
| | | </div> |
| | | <div class="header-right"> |
| | | <img :src="atRegularTimeImg" class="btn-img" alt="" /> |
| | | <img |
| | | :src="atRegularTimeImg" |
| | | class="btn-img" |
| | | alt="" |
| | | @click="openScheduledTaskDialog" |
| | | /> |
| | | <img |
| | | :src="setUpImg" |
| | | class="btn-img" |
| | | alt="" |
| | | @click="openSettingDeviceDialog" |
| | | /> |
| | | <img :src="userImg" class="btn-img" alt="" /> |
| | | <img :src="userImg" class="btn-img" alt="" @click="openLoginDialog" /> |
| | | </div> |
| | | </div> |
| | | <!-- 设置设备编号组件 --> |
| | | <SettingDeviceDialog ref="settingDeviceDialogRef" /> |
| | | <!-- 定时任务组件 --> |
| | | <ScheduledTaskDialog ref="scheduledTaskDialogRef" /> |
| | | </template> |
| | | |
| | | <script lang="ts" setup name="Header"> |
| | | import { ref, computed, defineAsyncComponent } from "vue"; |
| | | import { |
| | | ref, |
| | | computed, |
| | | defineAsyncComponent, |
| | | onMounted, |
| | | onUnmounted, |
| | | watch, |
| | | } from "vue"; |
| | | import dayjs from "dayjs"; |
| | | import type { Task } from "@/store/type/task.type"; |
| | | const SettingDeviceDialog = defineAsyncComponent( |
| | | () => import("./SettingDeviceDialog.vue") |
| | | ); |
| | | const ScheduledTaskDialog = defineAsyncComponent( |
| | | () => import("./ScheduledTask.vue") |
| | | ); |
| | | import atRegularTimeImg from "../../../../img/dingshi.png"; |
| | | import setUpImg from "../../../../img/shezhi.png"; |
| | | import userImg from "../../../../img/user.png"; |
| | | |
| | | import { useBedsideAuxiliaryScreenStore } from "@/store/bedsideAuxiliaryScreen"; |
| | | import { EPatForm } from "@/store/type/bedsideAuxiliaryScreen.type"; |
| | | import { EPatForm, EPageType } from "@/store/type/bedsideAuxiliaryScreen.type"; |
| | | import { ElMessage } from "element-plus"; |
| | | |
| | | const bedsideAuxiliaryScreenStore = useBedsideAuxiliaryScreenStore(); |
| | | |
| | | let timer: number; |
| | | |
| | | const pageTypeEnum = ref(EPageType); |
| | | const settingDeviceDialogRef = ref<any>(null); |
| | | const scheduledTaskDialogRef = ref<any>(null); |
| | | const taskCountdown = ref(""); // 定时任务倒计时文本 |
| | | |
| | | const pageType = computed(() => { |
| | | return bedsideAuxiliaryScreenStore.deviceData.pageType; |
| | |
| | | ? "门诊号" |
| | | : "住院号", |
| | | patFormNumber: bedsideAuxiliaryScreenStore.deviceData.patFormNumber, |
| | | dialysisAge: bedsideAuxiliaryScreenStore.deviceData.underTreatment.dialysisAge ? convertMonths(bedsideAuxiliaryScreenStore.deviceData.underTreatment.dialysisAge) : null , |
| | | }; |
| | | }); |
| | | |
| | | // watch( |
| | | // () => bedsideAuxiliaryScreenStore.taskData, |
| | | // (newData: Task[]) => { |
| | | // console.log('定时任务更新了') |
| | | // if ( |
| | | // bedsideAuxiliaryScreenStore.deviceData.deviceCode && |
| | | // newData.length > 0 |
| | | // ) { |
| | | // console.log('newData: ', newData) |
| | | // updateCountdown(newData[0].taskDate); |
| | | // } else { |
| | | // taskCountdown.value = ""; |
| | | // } |
| | | // }, |
| | | // { deep: true } |
| | | // ); |
| | | |
| | | const convertMonths = (months: number): { years: number; months: number } => { |
| | | const years = Math.floor(months / 12); |
| | | const remainingMonths = months % 12; |
| | | return { years, months: remainingMonths }; |
| | | } |
| | | |
| | | const openSettingDeviceDialog = () => { |
| | | settingDeviceDialogRef.value?.openDialog(); |
| | | }; |
| | | |
| | | const openScheduledTaskDialog = () => { |
| | | if (!bedsideAuxiliaryScreenStore.deviceCode || !bedsideAuxiliaryScreenStore.deviceData.deviceCode) return ElMessage.warning('未初始化或正在进行初始化操作中'); |
| | | scheduledTaskDialogRef.value?.openDialog(); |
| | | }; |
| | | |
| | | const openLoginDialog = () => { |
| | | ElMessage({ |
| | | message: "功能开发中,敬请期待!", |
| | | type: "warning", |
| | | }); |
| | | }; |
| | | |
| | | const getCountdown = (taskDate: string) => { |
| | | const now = dayjs(); |
| | | const target = dayjs(taskDate).second(0).millisecond(0); |
| | | |
| | | const diff = target.diff(now, "second"); |
| | | |
| | | if (diff <= 0) return ""; |
| | | |
| | | const minutes = Math.floor(diff / 60); |
| | | const seconds = diff % 60; |
| | | |
| | | return `${minutes}m${seconds}s`; |
| | | }; |
| | | |
| | | const updateCountdown = (taskDate: string) => { |
| | | taskCountdown.value = getCountdown(taskDate); |
| | | timer = window.setInterval(updateCountdown, 1000); |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | if ( |
| | | bedsideAuxiliaryScreenStore.deviceData.deviceCode && |
| | | bedsideAuxiliaryScreenStore.taskData.length > 0 |
| | | ) { |
| | | getCountdown(bedsideAuxiliaryScreenStore.taskData[0].taskDate); |
| | | } |
| | | }); |
| | | |
| | | onUnmounted(() => { |
| | | timer && clearInterval(timer); |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="less" scoped> |
| | |
| | | .info-text { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 600; |
| | | font-size: 11px; |
| | | font-size: 9px; |
| | | color: #ffffff; |
| | | text-align: left; |
| | | font-style: normal; |
| | | &:not(:first-child) { |
| | | margin-left: 6px; |
| | | margin-left: 4px; |
| | | } |
| | | } |
| | | } |