From 86d9b0511e4730ca19633b6c3be605e5d61533aa Mon Sep 17 00:00:00 2001
From: zhangchen <1652267879@qq.com>
Date: 星期五, 25 七月 2025 14:55:23 +0800
Subject: [PATCH] ID1625-血压计页面修改

---
 src/utils/utils.ts                                                 |   22 +
 src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue      |   32 +-
 src/views/mobile/bedsideAuxiliaryScreen/pages/Sphygmomanometer.vue |  451 +++++++++++++++++++++++++++++++++++++
 src/store/type/bedsideAuxiliaryScreen.type.ts                      |   31 ++
 src/store/type/task.type.ts                                        |    2 
 src/store/bedsideAuxiliaryScreen.ts                                |    4 
 src/views/mobile/bedsideAuxiliaryScreen/index.vue                  |   98 ++++++--
 src/views/mobile/bedsideAuxiliaryScreen/pages/UnderTreatment.vue   |   24 +
 8 files changed, 609 insertions(+), 55 deletions(-)

diff --git a/src/store/bedsideAuxiliaryScreen.ts b/src/store/bedsideAuxiliaryScreen.ts
index 11ff7fa..b93d6cc 100644
--- a/src/store/bedsideAuxiliaryScreen.ts
+++ b/src/store/bedsideAuxiliaryScreen.ts
@@ -110,7 +110,7 @@
         if (retryCount < maxRetryCount) {
           const delay = baseRetryDelay * Math.pow(2, retryCount); // 指数退避
           retryCount++;
-          console.log(`[SSE] 第${retryCount}次重连,延迟${delay}ms`);
+          console.log(`[SSE] 第${retryCount}次重连,延迟${baseRetryDelay}ms`);
           ElMessage.warning(
             `链接服务失败, 第${retryCount}次重连,请耐心等待重连。。`
           );
@@ -148,7 +148,7 @@
             clearTask();
           }
 
-          deviceData.value = formatDeviceData(dataBody);
+          deviceData.value = formatDeviceData(deviceData.value, dataBody);
         }
       };
     };
diff --git a/src/store/type/bedsideAuxiliaryScreen.type.ts b/src/store/type/bedsideAuxiliaryScreen.type.ts
index a5526ef..846ae1b 100644
--- a/src/store/type/bedsideAuxiliaryScreen.type.ts
+++ b/src/store/type/bedsideAuxiliaryScreen.type.ts
@@ -1,4 +1,4 @@
-import { tryConvertToInt } from "@/utils/utils";
+import { tryConvertToInt, deepClone } from "@/utils/utils";
 import cache from "@/utils/cache";
 export interface IotInfo {
   属性历史列表: any[];
@@ -172,6 +172,13 @@
   倒计时: Countdown | null;
   推送类型: PushType;
   透析状态: DialysisStatus | null;
+  床旁血压结果?: any;
+}
+
+export interface Sphygmomanometer {
+  sbp: number | null; // 高压
+  dbp: number | null; // 低压
+  pulseRate: number | null; // 心率
 }
 
 export interface BedsideAuxiliaryScreen {
@@ -191,7 +198,16 @@
   notSignedIn: NotSignedIn;
   signedIn: SignedIn;
   underTreatment: UnderTreatment;
+  sphygmomanometer: Sphygmomanometer;
 }
+
+export const defaultSphygmomanometer = () :Sphygmomanometer => {
+  return {
+    sbp: null,
+    dbp: null,
+    pulseRate: null,
+  }
+} 
 
 export enum EPageType {
   NOT_INIT = 0, // 未初始化(没有设备编号)
@@ -402,14 +418,17 @@
     notSignedIn: defalutNotSignedIn(), // 未签到时需要的数据
     signedIn: defaultSignedIn(), // 已签到时需要的数据
     underTreatment: defaultUnderTreatment(), // 治疗中需要的数据
+    sphygmomanometer: defaultSphygmomanometer(), // 血压计传过来的数据
   };
 };
 
 export const formatDeviceData = (
+  data: BedsideAuxiliaryScreen,
   seeMsg: SseMsgData
 ): BedsideAuxiliaryScreen => {
 
-  const result = defaultDeviceData();
+  const result = deepClone(data);
+
 
   // 默认床号(设备号)
   result.devicdeNo = seeMsg.IOT信息?.床号;
@@ -417,6 +436,14 @@
 
   if (seeMsg.推送类型 === EPushType.SPHYGMOMANOMETR) {
     result.pageType = EPageType.SPHYGMOMANOMETER;
+
+    const sphygmomanometer = defaultSphygmomanometer();
+    sphygmomanometer.sbp = seeMsg?.床旁血压结果?.sbp;
+    sphygmomanometer.pulseRate = seeMsg?.床旁血压结果?.pulseRate;
+    sphygmomanometer.dbp = seeMsg?.床旁血压结果?.dbp;
+
+    result.sphygmomanometer = sphygmomanometer;
+
   } else if (seeMsg.推送类型 === EPushType.CENTRAL_MONITORING) {
     // 判断是否存在透析状态,如果不存在就是没有排班
     if (seeMsg.透析状态 === null || !seeMsg.透析状态) {
diff --git a/src/store/type/task.type.ts b/src/store/type/task.type.ts
index 75b2189..fe6fc3c 100644
--- a/src/store/type/task.type.ts
+++ b/src/store/type/task.type.ts
@@ -9,4 +9,6 @@
   taskName: string;
   /** 是否过期 */
   overdue: boolean;
+  /** 倒计时,如果存在该字段则表明是远程传过来的 */
+  countdown?: number;
 }
diff --git a/src/utils/utils.ts b/src/utils/utils.ts
index 4081f1e..deeee91 100644
--- a/src/utils/utils.ts
+++ b/src/utils/utils.ts
@@ -28,4 +28,24 @@
   }
 
   return value;
-}
\ No newline at end of file
+}
+/**
+ * 深拷贝
+ * @param obj 
+ * @returns 
+ */
+export function deepClone<T>(obj: T): T {
+  if (obj === null || typeof obj !== "object") return obj;
+
+  if (Array.isArray(obj)) {
+    return obj.map(item => deepClone(item)) as unknown as T;
+  }
+
+  const result: any = {};
+  for (const key in obj) {
+    if (Object.prototype.hasOwnProperty.call(obj, key)) {
+      result[key] = deepClone(obj[key]);
+    }
+  }
+  return result;
+}
diff --git a/src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue b/src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue
index 6efe7bc..6241118 100644
--- a/src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue
+++ b/src/views/mobile/bedsideAuxiliaryScreen/components/Header.vue
@@ -100,22 +100,22 @@
   };
 });
 
-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 }
-);
+// 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();
diff --git a/src/views/mobile/bedsideAuxiliaryScreen/index.vue b/src/views/mobile/bedsideAuxiliaryScreen/index.vue
index ab6c350..3154799 100644
--- a/src/views/mobile/bedsideAuxiliaryScreen/index.vue
+++ b/src/views/mobile/bedsideAuxiliaryScreen/index.vue
@@ -1,10 +1,18 @@
 <template>
-  <div class="bedside-auxiliary-screen-container" :style="{ backgroundColor: backgroundColor }">
+  <div
+    class="bedside-auxiliary-screen-container"
+    :style="{ backgroundColor: backgroundColor }"
+  >
     <Header />
     <div class="bedside-auxiliary-screen-content">
-        <div class="content-position"></div>
-        <!-- <UnplannedSchedule v-if="cotentHeight > 0" :height="cotentHeight"  /> -->
-        <component v-if="cotentHeight > 0" :is="currentComponent" :height="cotentHeight" />
+      <div class="content-position"></div>
+      <transition name="fade" mode="out-in">
+        <component
+          v-if="cotentHeight > 0"
+          :is="currentComponent"
+          :height="cotentHeight"
+        />
+      </transition>
     </div>
   </div>
 </template>
@@ -14,47 +22,78 @@
 // @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 { useWindowSize } from '@/composables/useWindowSize';
+import { EPageType } from "@/store/type/bedsideAuxiliaryScreen.type";
+import { getAvailableHeightByClass } from "@/utils/utils";
+import { useWindowSize } from "@/composables/useWindowSize";
 // 未排班时的组件
-const UnplannedSchedule = defineAsyncComponent(() => import('./pages/UnplannedSchedule.vue'));
+const UnplannedSchedule = defineAsyncComponent(
+  () => import("./pages/UnplannedSchedule.vue")
+);
 // 未签到时的组件
-const NotSignedIn = defineAsyncComponent(() => import('./pages/NotSignedIn.vue'));
+const NotSignedIn = defineAsyncComponent(
+  () => import("./pages/NotSignedIn.vue")
+);
 // 已签到时的组件
-const SignedIn = defineAsyncComponent(() => import('./pages/SignedIn.vue'));
+const SignedIn = defineAsyncComponent(() => import("./pages/SignedIn.vue"));
 // 治疗中的组件
-const UnderTreatment = defineAsyncComponent(() => import('./pages/UnderTreatment.vue'));
+const UnderTreatment = defineAsyncComponent(
+  () => import("./pages/UnderTreatment.vue")
+);
+// 血压计的组件
+const Sphygmomanometer = defineAsyncComponent(
+  () => import("./pages/Sphygmomanometer.vue")
+);
 
 const bedsideAuxiliaryScreenStore = useBedsideAuxiliaryScreenStore();
 const cotentHeight = ref(0);
 const { width, height } = useWindowSize();
 
-
 const backgroundColor = computed(() => {
-  let color = '#DAE5EC';
+  let color = "#DAE5EC";
   // 如果是未排班、加载中或未签到页面,背景色为白色
-  if ([EPageType.NOT_INIT, EPageType.LOADING, EPageType.UNPLANNED_SCHEDULE].includes(bedsideAuxiliaryScreenStore.deviceData.pageType)) {
-    color = '#fff';
+  if (
+    [
+      EPageType.NOT_INIT,
+      EPageType.LOADING,
+      EPageType.UNPLANNED_SCHEDULE,
+    ].includes(bedsideAuxiliaryScreenStore.deviceData.pageType)
+  ) {
+    color = "#fff";
   }
   return color;
 });
 
 const currentComponent = computed(() => {
   let name: any = UnplannedSchedule;
-  // 未排班
-  if ([EPageType.NOT_INIT, EPageType.LOADING, EPageType.UNPLANNED_SCHEDULE].includes(bedsideAuxiliaryScreenStore.deviceData.pageType)) {
+
+  // 血压计
+  if (
+    bedsideAuxiliaryScreenStore.deviceData.pageType ===
+    EPageType.SPHYGMOMANOMETER
+  ) {
+    name = Sphygmomanometer;
+  } else if (
+    [
+      EPageType.NOT_INIT,
+      EPageType.LOADING,
+      EPageType.UNPLANNED_SCHEDULE,
+    ].includes(bedsideAuxiliaryScreenStore.deviceData.pageType)
+  ) {
     name = UnplannedSchedule;
   }
   // 未签到
-  else if (bedsideAuxiliaryScreenStore.deviceData.pageType === EPageType.NOT_SIGNED_IN) {
-    name = NotSignedIn
-  } 
+  else if (
+    bedsideAuxiliaryScreenStore.deviceData.pageType === EPageType.NOT_SIGNED_IN
+  ) {
+    name = NotSignedIn;
+  }
   // 已签到
-  else if (bedsideAuxiliaryScreenStore.deviceData.pageType === EPageType.SIGNED_IN) {
+  else if (
+    bedsideAuxiliaryScreenStore.deviceData.pageType === EPageType.SIGNED_IN
+  ) {
     name = SignedIn;
   }
-  // 透析中 
+  // 透析中
   else {
     name = UnderTreatment;
   }
@@ -62,9 +101,8 @@
 });
 
 watch([width, height], () => {
-  cotentHeight.value = getAvailableHeightByClass('content-position')
+  cotentHeight.value = getAvailableHeightByClass("content-position");
 });
-
 
 onMounted(() => {
   if (bedsideAuxiliaryScreenStore.deviceCode) {
@@ -74,7 +112,7 @@
       }`
     );
   }
-  cotentHeight.value = getAvailableHeightByClass('content-position')
+  cotentHeight.value = getAvailableHeightByClass("content-position");
 });
 </script>
 
@@ -90,4 +128,14 @@
     padding: 6px 12px 0;
   }
 }
+</style>
+<style scoped>
+.fade-enter-active,
+.fade-leave-active {
+  transition: opacity 0.3s ease;
+}
+.fade-enter-from,
+.fade-leave-to {
+  opacity: 0;
+}
 </style>
\ No newline at end of file
diff --git a/src/views/mobile/bedsideAuxiliaryScreen/pages/Sphygmomanometer.vue b/src/views/mobile/bedsideAuxiliaryScreen/pages/Sphygmomanometer.vue
new file mode 100644
index 0000000..271335e
--- /dev/null
+++ b/src/views/mobile/bedsideAuxiliaryScreen/pages/Sphygmomanometer.vue
@@ -0,0 +1,451 @@
+<template>
+  <div
+    class="sphygmomanometer-container"
+    :style="{ '--height': height + 'px' }"
+  >
+    <div class="row1">
+      <div class="row1-col1">
+        <el-image
+          :src="pageData.patientPhone"
+          style="width: 100%; height: 100%"
+        >
+          <template #placeholder>
+            <div class="image-slot">加载中<span class="dot">...</span></div>
+          </template>
+        </el-image>
+      </div>
+      <div class="row1-col2">
+        <Card
+          title="血压"
+          :icon="txqImg"
+          background-color="#ffffff"
+          class="row1-col2-item"
+          header-class-name="mini-header"
+        >
+          <div class="item-box">
+            <span class="text">{{ pageData.sbp }} / {{ pageData.dbp }}</span>
+          </div>
+        </Card>
+        <Card
+          title="心率"
+          :icon="txqImg"
+          background-color="#ffffff"
+          class="row1-col2-item"
+          header-class-name="mini-header"
+        >
+          <div class="item-box">
+            <span class="text">{{ pageData.pulseRate }}</span>
+          </div>
+        </Card>
+      </div>
+    </div>
+    <div class="row2">
+      <Card
+        title="平均脱水量"
+        :icon="txqImg"
+        background-color="#ffffff"
+        class="row2-item"
+      >
+        <div class="item-box">
+          <span
+            class="text"
+            v-if="
+              pageData.averageDehydrationRate ||
+              [0, '0'].includes(pageData.averageDehydrationRate)
+            "
+            >{{ pageData.averageDehydrationRate }} L</span
+          >
+        </div>
+      </Card>
+      <Card
+        title="最大脱水量"
+        :icon="txqImg"
+        background-color="#ffffff"
+        class="row2-item"
+      >
+        <div class="item-box">
+          <div class="text">
+            <span
+              v-if="
+                pageData.maximumDehydrationCapacity ||
+                [0, '0'].includes(pageData.maximumDehydrationCapacity)
+              "
+              >{{ pageData.maximumDehydrationCapacity }}L</span
+            >
+            <span
+              v-if="pageData.maximumDehydrationCapacityDate"
+              style="color: #999"
+              >({{ pageData.maximumDehydrationCapacityDate }})</span
+            >
+          </div>
+        </div>
+      </Card>
+    </div>
+    <div class="row3">
+      <Card
+        title="异常指标"
+        :icon="xinlvImg"
+        background-color="#ffffff"
+        class="row3-col1"
+        header-class-name="mini-header"
+      >
+        <div class="dialysis-mode-content">
+          <span
+            v-for="(item, index) in pageData.abnormalItems"
+            :key="index"
+            class="abnormal-indicator"
+            :style="{ color: formatTestColr(item.结果标记) }"
+          >
+            {{ getItemName(item.项目名称) }}
+            {{ formatTestFlag(item.结果标记) }}
+          </span>
+        </div>
+      </Card>
+
+      <div class="blood-ressure-and-pulse-echart-card">
+        <div class="blood-pressure-and0pulse-echart">
+          <div
+            ref="bloodPressureAndPulseEchartRef"
+            style="width: 100%; height: 90%"
+          ></div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { computed, ref, onMounted, onBeforeUnmount, watch } from "vue";
+import * as echarts from "echarts";
+
+import { useBedsideAuxiliaryScreenStore } from "@/store/bedsideAuxiliaryScreen";
+import {
+  formatSubstituteMode,
+  formatTestColr,
+  getItemName,
+  formatTestFlag,
+  EMedStatus,
+  MonitoringRecord,
+} from "@/store/type/bedsideAuxiliaryScreen.type";
+// @ts-ignore
+import Card from "../components/Card.vue";
+import txqImg from "@/img/txq.png";
+import xinlvImg from "@/img/xinlv.png";
+import xinLv2Img from "@/img/xinlv2.png";
+
+interface Props {
+  height: number;
+}
+const props = defineProps<Props>();
+
+const bedsideAuxiliaryScreenStore = useBedsideAuxiliaryScreenStore();
+
+// 血压脉搏趋势图的
+const bloodPressureAndPulseEchartRef = ref<HTMLElement | null>(null);
+
+const pageData = computed(() => {
+  return Object.assign(
+    bedsideAuxiliaryScreenStore.deviceData.sphygmomanometer,
+    {
+      patientPhone: bedsideAuxiliaryScreenStore.deviceData.patientPhone,
+      averageDehydrationRate:
+        bedsideAuxiliaryScreenStore.deviceData.underTreatment
+          .averageDehydrationRate, // 平均脱水量
+      maximumDehydrationCapacity:
+        bedsideAuxiliaryScreenStore.deviceData.underTreatment
+          .maximumDehydrationCapacity, // 最大脱水
+      maximumDehydrationCapacityDate:
+        bedsideAuxiliaryScreenStore.deviceData.underTreatment
+          .maximumDehydrationCapacityDate, // 最大脱水量的日期
+      abnormalItems:
+        bedsideAuxiliaryScreenStore.deviceData.underTreatment.abnormalItems, // 异常指标
+      monitoringRecord:
+        bedsideAuxiliaryScreenStore.deviceData.underTreatment.monitoringRecord, // 血压脉搏数据
+    }
+  );
+});
+
+watch(
+  () => pageData.value.monitoringRecord,
+  (newVal) => {
+    generatBloodPressureAndPulseEchart(newVal);
+  },
+  { deep: true }
+);
+
+/** 生成血压脉搏趋势图 */
+const generatBloodPressureAndPulseEchart = (
+  bloodPressureAndPulses: MonitoringRecord[]
+) => {
+  if (!bloodPressureAndPulseEchartRef.value) return;
+
+  let chart = echarts.getInstanceByDom(bloodPressureAndPulseEchartRef.value);
+  if (!chart) {
+    chart = echarts.init(bloodPressureAndPulseEchartRef.value);
+  }
+
+  const telescopicPressureDatas: number[] = []; // 伸缩压
+  const diastolicPressureDatas: number[] = []; // 舒张压
+  const pulseDatas: number[] = []; // 脉搏
+  const xAxisData: string[] = []; // 横坐标
+
+  bloodPressureAndPulses.forEach((item, index) => {
+    telescopicPressureDatas.push(+item.伸缩压);
+    diastolicPressureDatas.push(+item.舒张压);
+    pulseDatas.push(+item.脉搏);
+    xAxisData.push(String(index + 1));
+  });
+
+  const option = {
+    grid: [
+      { top: "15%", height: "28%", left: 40, right: 20, containLabel: true },
+      { top: "35%", height: "28%", left: 40, right: 20, containLabel: true },
+      { top: "67%", height: "28%", left: 40, right: 20, containLabel: true },
+    ],
+    tooltip: {
+      trigger: "axis",
+    },
+    xAxis: [
+      {
+        type: "category",
+        data: xAxisData,
+        boundaryGap: false,
+        axisLine: { show: false },
+        axisTick: { show: false },
+        axisLabel: { show: false },
+        splitLine: { show: false },
+        gridIndex: 0,
+        show: false,
+      },
+      {
+        type: "category",
+        data: xAxisData,
+        boundaryGap: false,
+        axisLine: { show: false },
+        axisTick: { show: false },
+        axisLabel: { show: false },
+        splitLine: { show: false },
+        gridIndex: 1,
+        show: false,
+      },
+      {
+        type: "category",
+        data: xAxisData,
+        boundaryGap: false,
+        axisLine: { show: false },
+        axisTick: { show: false },
+        axisLabel: { show: true }, // 最下面一层显示时间轴
+        splitLine: { show: false },
+        gridIndex: 2,
+        show: false,
+      },
+    ],
+    yAxis: [
+      {
+        type: "value",
+        show: false,
+        axisLine: { show: false },
+        axisTick: { show: false },
+        axisLabel: { show: false },
+        splitLine: { show: false },
+        gridIndex: 0,
+        min: 0,
+        max: 300,
+        interval: 2,
+      },
+      {
+        type: "value",
+        show: false,
+        axisLine: { show: false },
+        axisTick: { show: false },
+        axisLabel: { show: false },
+        splitLine: { show: false },
+        min: 0,
+        max: 300,
+        interval: 2,
+        gridIndex: 1,
+      },
+      {
+        type: "value",
+        show: false,
+        axisLine: { show: false },
+        axisTick: { show: false },
+        axisLabel: { show: false },
+        splitLine: { show: false },
+        min: 0,
+        max: 300,
+        interval: 2,
+        gridIndex: 2,
+      },
+    ],
+    series: [
+      {
+        name: "伸缩压",
+        xAxisIndex: 0,
+        yAxisIndex: 0,
+        data: wrapData(telescopicPressureDatas),
+        type: "line",
+        smooth: false,
+        symbol: "circle",
+        symbolSize: 6,
+        lineStyle: { width: 2, color: "#FE0201" },
+        itemStyle: { color: "#FE0201" },
+        label: { color: "#FE0201" },
+      },
+      {
+        name: "舒张压",
+        xAxisIndex: 1,
+        yAxisIndex: 1,
+        data: wrapData(diastolicPressureDatas),
+        type: "line",
+        smooth: false,
+        symbol: "circle",
+        symbolSize: 6,
+        lineStyle: { width: 2, color: "#70A3DD" },
+        itemStyle: { color: "#70A3DD" },
+        label: { color: "#70A3DD" },
+      },
+      {
+        name: "脉搏",
+        xAxisIndex: 2,
+        yAxisIndex: 2,
+        data: wrapData(pulseDatas),
+        type: "line",
+        smooth: false,
+        symbol: "circle",
+        symbolSize: 6,
+        lineStyle: { width: 2, color: "#8079CB" },
+        itemStyle: { color: "#8079CB" },
+        label: { color: "#8079CB" },
+      },
+    ],
+  };
+  chart.setOption(option);
+};
+
+// 给首尾点加上 label
+const wrapData = (arr: number[]) => {
+  return arr.map((v, i) => ({
+    value: v,
+    label: {
+      show: i === 0 || i === arr.length - 1,
+      position: "top",
+      fontSize: 12,
+    },
+  }));
+};
+
+onMounted(() => {
+  generatBloodPressureAndPulseEchart(pageData.value.monitoringRecord);
+});
+
+onBeforeUnmount(() => {
+  if (bloodPressureAndPulseEchartRef.value) {
+    const chart = echarts.getInstanceByDom(
+      bloodPressureAndPulseEchartRef.value
+    );
+    if (chart) {
+      chart.dispose();
+    }
+  }
+});
+</script>
+
+<style lang="less" scoped>
+* {
+  box-sizing: border-box;
+}
+
+.sphygmomanometer-container {
+  display: flex;
+  flex-direction: column;
+  height: var(--height);
+  padding-bottom: 2px;
+  gap: 4px;
+  .row1 {
+    height: 45%;
+    display: flex;
+    gap: 4px;
+    .row1-col1 {
+      width: 20%;
+      border-radius: 2px;
+      overflow: hidden;
+    }
+    .row1-col2 {
+      width: 80%;
+      display: flex;
+      gap: 4px;
+      .row1-col2-item {
+        width: 50%;
+      }
+    }
+  }
+  .row2 {
+    height: 25%;
+    display: flex;
+    gap: 4px;
+    .row2-item {
+      width: 50%;
+    }
+  }
+  .row3 {
+    height: 35%;
+    display: flex;
+    gap: 4px;
+    .row3-col1 {
+      width: 20%;
+      .dialysis-mode-content {
+        display: flex;
+        flex-wrap: wrap;
+        gap: 4px;
+        font-size: 6px;
+        font-weight: bold;
+        span {
+          white-space: nowrap;
+        }
+      }
+    }
+    .blood-ressure-and-pulse-echart-card {
+      position: relative;
+      width: 80%;
+      background-color: #ffffff;
+      border-radius: 2px;
+      .blood-pressure-and0pulse-echart {
+        position: absolute;
+        left: 50%;
+        top: 50%;
+        transform: translateX(-50%) translateY(-50%);
+        width: 98%;
+        height: 96%;
+      }
+    }
+  }
+
+  .item-box {
+    height: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: bold;
+    font-size: 12px;
+    color: #70a3dd;
+    text-align: center;
+    font-style: normal;
+    &.treatment-status {
+      color: #70a3dd;
+    }
+    &.prescription-ehydration-olume {
+      color: #8079cb;
+    }
+    &.current-lood0emperature {
+      color: #70a3dd;
+      font-size: 9px;
+    }
+    &.venous-pressure {
+      color: #70a3dd;
+      font-size: 9px;
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/mobile/bedsideAuxiliaryScreen/pages/UnderTreatment.vue b/src/views/mobile/bedsideAuxiliaryScreen/pages/UnderTreatment.vue
index b05d642..ee65919 100644
--- a/src/views/mobile/bedsideAuxiliaryScreen/pages/UnderTreatment.vue
+++ b/src/views/mobile/bedsideAuxiliaryScreen/pages/UnderTreatment.vue
@@ -491,9 +491,9 @@
 
   const option = {
     grid: [
-      { top: "10%", height: "25%", left: 30, right: 20 },
-      { top: "38%", height: "25%", left: 30, right: 20 },
-      { top: "66%", height: "25%", left: 30, right: 20 },
+  { top: "5%", height: "28%", left: 40, right: 20, containLabel: true },
+  { top: "35%", height: "28%", left: 40, right: 20, containLabel: true },
+  { top: "65%", height: "28%", left: 40, right: 20, containLabel: true },
     ],
     tooltip: {
       trigger: "axis",
@@ -508,6 +508,7 @@
         axisLabel: { show: false },
         splitLine: { show: false },
         gridIndex: 0,
+        show: false,
       },
       {
         type: "category",
@@ -518,6 +519,7 @@
         axisLabel: { show: false },
         splitLine: { show: false },
         gridIndex: 1,
+        show: false,
       },
       {
         type: "category",
@@ -528,6 +530,7 @@
         axisLabel: { show: true }, // 最下面一层显示时间轴
         splitLine: { show: false },
         gridIndex: 2,
+        show: false,
       },
     ],
     yAxis: [
@@ -538,8 +541,9 @@
         axisTick: { show: false },
         axisLabel: { show: false },
         splitLine: { show: false },
-        min: "dataMin", // 自动以数据最小值为最小值
-        max: "dataMax",
+        min: 0,
+        max: 300,
+        interval: 2,
         gridIndex: 0,
       },
       {
@@ -549,8 +553,9 @@
         axisTick: { show: false },
         axisLabel: { show: false },
         splitLine: { show: false },
-        min: "dataMin", // 自动以数据最小值为最小值
-        max: "dataMax",
+        min: 0,
+        max: 300,
+        interval: 2,
         gridIndex: 1,
       },
       {
@@ -560,8 +565,9 @@
         axisTick: { show: false },
         axisLabel: { show: false },
         splitLine: { show: false },
-        min: "dataMin", // 自动以数据最小值为最小值
-        max: "dataMax",
+        min: 0,
+        max: 300,
+        interval: 2,
         gridIndex: 2,
       },
     ],

--
Gitblit v1.8.0