<template>
|
<div class="bedside-auxiliary-screen-header">
|
<div class="header-left">
|
<!-- 没有设备编号 -->
|
<span v-if="pageType === 0" class="info-text">未绑定设备</span>
|
<template v-else>
|
<!-- 设备号 -->
|
<span class="info-text">{{
|
bedsideAuxiliaryScreenStore.deviceData.devicdeNo
|
}}</span>
|
<!-- 加载中 -->
|
<span v-if="pageType === 1" class="info-text"
|
>页面初始化中,请耐心等待!</span
|
>
|
<!-- 未排班 -->
|
<span v-else-if="pageType === 2" 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
|
>
|
</template>
|
{{ taskCountdown }}
|
</template>
|
</div>
|
<div class="header-right">
|
<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="" @click="openLoginDialog" />
|
</div>
|
</div>
|
<!-- 设置设备编号组件 -->
|
<SettingDeviceDialog ref="settingDeviceDialogRef" />
|
<!-- 定时任务组件 -->
|
<ScheduledTaskDialog ref="scheduledTaskDialogRef" />
|
</template>
|
|
<script lang="ts" setup name="Header">
|
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 { ElMessage } from "element-plus";
|
|
const bedsideAuxiliaryScreenStore = useBedsideAuxiliaryScreenStore();
|
|
let timer: number;
|
|
const settingDeviceDialogRef = ref<any>(null);
|
const scheduledTaskDialogRef = ref<any>(null);
|
const taskCountdown = ref(""); // 定时任务倒计时文本
|
|
const pageType = computed(() => {
|
return bedsideAuxiliaryScreenStore.deviceData.pageType;
|
});
|
|
const patientInfo = computed(() => {
|
return {
|
patientName: bedsideAuxiliaryScreenStore.deviceData.patientName,
|
patientPhone: bedsideAuxiliaryScreenStore.deviceData.patientPhone,
|
age: bedsideAuxiliaryScreenStore.deviceData.age,
|
gender: bedsideAuxiliaryScreenStore.deviceData.gender,
|
patForm:
|
bedsideAuxiliaryScreenStore.deviceData.patForm ===
|
EPatForm.OUTPATIENT_SERVICE
|
? "门诊号"
|
: "住院号",
|
patFormNumber: bedsideAuxiliaryScreenStore.deviceData.patFormNumber,
|
};
|
});
|
|
// 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 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>
|
.bedside-auxiliary-screen-header {
|
height: 25px;
|
padding: 0 15px 0 12px;
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
background: #70a3dd;
|
border-radius: 1px 0px 5px 5px;
|
.header-left {
|
display: flex;
|
align-items: center;
|
.info-text {
|
font-family: PingFangSC, PingFang SC;
|
font-weight: 600;
|
font-size: 11px;
|
color: #ffffff;
|
text-align: left;
|
font-style: normal;
|
&:not(:first-child) {
|
margin-left: 6px;
|
}
|
}
|
}
|
.header-right {
|
display: flex;
|
align-items: center;
|
.btn-img {
|
height: 10px;
|
object-fit: contain;
|
cursor: pointer;
|
&:not(:first-child) {
|
margin-left: 9px;
|
}
|
&:active {
|
opacity: 0.6;
|
transform: scale(0.95);
|
}
|
|
transition: all 0.2s;
|
}
|
}
|
}
|
</style>
|