From fbb37cbba51cf4fff14cafad214935516434ac92 Mon Sep 17 00:00:00 2001
From: zhangchen <1652267879@qq.com>
Date: 星期五, 25 七月 2025 01:43:50 +0800
Subject: [PATCH] ID1625-暂存

---
 src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue |   73 +++++++++++++++++++++++++++++++++++-
 1 files changed, 70 insertions(+), 3 deletions(-)

diff --git a/src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue b/src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue
index f8d9a68..6efe7bc 100644
--- a/src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue
+++ b/src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue
@@ -23,10 +23,16 @@
             {{ patientInfo.patForm }}:{{ patientInfo.patFormNumber }}</span
           >
         </template>
+        {{ taskCountdown }}
       </template>
     </div>
     <div class="header-right">
-      <img :src="atRegularTimeImg" class="btn-img" alt="" @click="openScheduledTaskDialog" />
+      <img
+        :src="atRegularTimeImg"
+        class="btn-img"
+        alt=""
+        @click="openScheduledTaskDialog"
+      />
       <img
         :src="setUpImg"
         class="btn-img"
@@ -43,13 +49,22 @@
 </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";
@@ -60,8 +75,11 @@
 
 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;
@@ -82,6 +100,23 @@
   };
 });
 
+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();
 };
@@ -96,6 +131,38 @@
     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>

--
Gitblit v1.8.0