From f2aadae922b9829a3cbc6b465dc220c11a2e5b8a Mon Sep 17 00:00:00 2001
From: zhangchen <1652267879@qq.com>
Date: 星期二, 16 九月 2025 13:35:46 +0800
Subject: [PATCH] ID1766-x
---
src/views/mobile/bedsideAuxiliaryScreen/pages/UnderTreatment.vue | 1109 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 1,069 insertions(+), 40 deletions(-)
diff --git a/src/views/mobile/bedsideAuxiliaryScreen/pages/UnderTreatment.vue b/src/views/mobile/bedsideAuxiliaryScreen/pages/UnderTreatment.vue
index 44678c7..ab2a2e0 100644
--- a/src/views/mobile/bedsideAuxiliaryScreen/pages/UnderTreatment.vue
+++ b/src/views/mobile/bedsideAuxiliaryScreen/pages/UnderTreatment.vue
@@ -1,32 +1,388 @@
<template>
- <div class="under-treatment-container" :style="{ '--height': height + 'px' }">
- <div class="left-box">
- <div class="left-row1">
- <div class="left-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="under-treatment-container"
+ :style="{ '--height': height + 'px' }"
+ >
+ <div class="left-box">
+ <div class="left-row1">
+ <div class="left-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="left-row1-col2">
+ <Card
+ title="治疗模式"
+ :icon="zlmsImg"
+ background-color="#ffffff"
+ class="mini-card left-row1-col2-row1"
+ header-class-name="mini-header"
+ >
+ <div class="item-box dialysis-mode-content">
+ <div class="dialysis-mode-content-box">
+ <span class="mini-text">{{
+ formatSubstituteMode(pageData.substituteMode)
+ }}</span>
+ <span class="text">{{ pageData.dialysisPlan }}</span>
+ </div>
+ </div>
+ </Card>
+ <Card
+ title="处方备注"
+ :icon="zlmsImg"
+ background-color="#ffffff"
+ class="mini-card left-row1-col2-item-row2"
+ header-class-name="mini-header"
+ >
+ <div class="prescription-remarks">
+ {{ pageData.prescriptionRemarks }}
+ </div>
+ </Card>
+ </div>
+ <div class="left-row1-col3">
+ <Card
+ title="透析器"
+ :icon="txqImg"
+ background-color="#ffffff"
+ class="mini-card left-row1-col3-row1"
+ header-class-name="mini-header"
+ >
+ <div class="item-box prescription-ehydration-olume">
+ <span class="text">{{ pageData.dialyzer }}</span>
+ </div>
+ </Card>
+ <Card
+ title="异常指标"
+ :icon="xinlvImg"
+ background-color="#ffffff"
+ class="mini-card left-row1-col3-row2"
+ 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>
</div>
- <div class="left-row1-col2"></div>
- <div class="left-row1-col3"></div>
+ <div class="left-row2">
+ <Card
+ title="血温监测"
+ :icon="xinLv2Img"
+ background-color="#ffffff"
+ class="mini-card left-row2-col1"
+ header-class-name="mini-header"
+ >
+ <div class="item-box current-lood0emperature">
+ <span class="text">{{ pageData.currentBloodTemperature }}</span>
+ </div>
+ </Card>
+ <Card
+ title="血压监测"
+ :icon="xinLv2Img"
+ background-color="#ffffff"
+ class="mini-card left-row2-col2"
+ header-class-name="mini-header"
+ >
+ <div class="item-box venous-pressure">
+ <span class="text"
+ >{{ pageData.venousPressure }}/{{
+ pageData.transmembranePressure
+ }}</span
+ >
+ </div>
+ </Card>
+ <Card
+ title="血压脉搏趋势图"
+ :icon="xinLv2Img"
+ background-color="#ffffff"
+ class="mini-card ktv-card left-row2-col3"
+ header-class-name="mini-header"
+ >
+ <div style="height: 100%">
+ <div
+ ref="bloodPressureAndPulseEchartRef"
+ style="width: 100%; height: 100%"
+ ></div>
+ </div>
+ </Card>
+ </div>
+ <div class="left-row3">
+ <Card
+ title="血容量监测"
+ :icon="xinLv2Img"
+ background-color="#ffffff"
+ class="mini-card left-row3-col1"
+ header-class-name="mini-header"
+ >
+ <div class="item-box current-lood0emperature">
+ <span class="text">{{ pageData.bloodVolumeMonitoring }}</span>
+ </div>
+ </Card>
+ <Card
+ title="Kt/V监测"
+ :icon="xinLv2Img"
+ background-color="#ffffff"
+ class="mini-card left-row3-col2"
+ header-class-name="mini-header"
+ >
+ <div class="item-box venous-pressure">
+ <span class="text">{{ pageData.ktv }}</span>
+ </div>
+ </Card>
+ <Card
+ title="Kt/V趋势图"
+ :icon="xinLv2Img"
+ background-color="#ffffff"
+ class="mini-card ktv-card left-row3-col3"
+ header-class-name="mini-header"
+ >
+ <div style="height: 100%">
+ <div
+ ref="ktvListEchartRef"
+ style="width: 100%; height: 100%"
+ ></div>
+ </div>
+ </Card>
+ </div>
+ <div class="left-row4">
+ <Card
+ title="静脉压/跨膜压"
+ :icon="txqImg"
+ background-color="#ffffff"
+ class="mini-card left-row4-col"
+ header-class-name="mini-header"
+ >
+ <div class="item-box current-lood0emperature">
+ <span class="text">{{ pageData.venousPressure2 }}/{{ pageData.transmembranePressure2 }}</span>
+ </div>
+ </Card>
+ <Card
+ title="血流量/透析液流量"
+ :icon="txqImg"
+ background-color="#ffffff"
+ class="mini-card left-row4-col"
+ header-class-name="mini-header"
+ >
+ <div class="item-box current-lood0emperature">
+ <span class="text">{{ pageData.bloodFlow }}/{{ pageData.dialysisFluidFlowRate }}</span>
+ </div>
+ </Card>
+ </div>
</div>
- <div class="left-row2"></div>
- <div class="left-row3"></div>
- <div class="left-row4"></div>
+ <div class="right-box">
+ <div class="right-box-row1">
+ <Card
+ title="治疗状态"
+ :icon="txztImg"
+ background-color="#ffffff"
+ class="mini-card right-box-row1-col1"
+ header-class-name="mini-header"
+ >
+ <div class="item-box treatment-status">
+ <span class="text">{{ treatmentStatusText }}</span>
+ </div>
+ </Card>
+ <Card
+ title="脱水量详情"
+ :icon="cljdImg"
+ background-color="#ffffff"
+ class="mini-card right-box-row1-col2"
+ header-class-name="mini-header"
+ >
+ <div class="dehydrated-level">
+ <div class="dehydrated-level-item">
+ <span class="item-left"
+ >平均脱水量:{{ pageData.averageDehydrationRate }} L</span
+ >
+ <span class="item-right">(最近9次)</span>
+ </div>
+ <div class="dehydrated-level-item">
+ <div class="item-left">
+ <span
+ >最大脱水量:{{
+ pageData.maximumDehydrationCapacity
+ }}
+ L</span
+ >
+ <template v-if="pageData.maximumDehydrationDuration"
+ >/
+ <span class="level-dete">{{
+ pageData.maximumDehydrationDuration
+ }}</span>
+ </template>
+ </div>
+ <span class="item-right"
+ >({{ pageData.maximumDehydrationCapacityDate }})</span
+ >
+ </div>
+ </div>
+ </Card>
+ </div>
+ <div class="right-box-row2">
+ <Card
+ title="时间进度"
+ :icon="sjjdImg"
+ background-color="#ffffff"
+ class="mini-card right-box-row2-item"
+ header-class-name="mini-header"
+ >
+ <div class="progress-box">
+ <div class="item-num">
+ {{ jgTime4(pageData.dialysisDuration) }}/{{
+ pageData.prescriptionDialysisDurationHour
+ }}:{{ pageData.prescriptionDialysisDurationMin }}
+ </div>
+ <ProgressBar
+ :percent="
+ (Number(pageData.dialysisDuration) /
+ (Number(pageData.prescriptionDialysisDuration) * 60)) *
+ 100
+ "
+ color="#70A3DD"
+ backgroundColor="#D6DEF1"
+ borderRadius="50%"
+ />
+ </div>
+ </Card>
+ <Card
+ title="超滤进度"
+ :icon="cljdImg"
+ background-color="#ffffff"
+ class="mini-card right-box-row2-item"
+ header-class-name="mini-header"
+ >
+ <div class="progress-box">
+ <div class="item-num">
+ {{ pageData.currentDehydrationVolume }}/{{
+ pageData.prescriptionDehydrationVolume
+ }}({{ pageData.currentUltrafiltrationRate }})
+ </div>
+ <ProgressBar
+ :percent="
+ (pageData.currentDehydrationVolume /
+ pageData.prescriptionDehydrationVolume) *
+ 100
+ "
+ color="#70CAAE"
+ backgroundColor="#D6DEF1"
+ borderRadius="50%"
+ />
+ </div>
+ </Card>
+ </div>
+ <div class="right-box-row3">
+ <Card
+ title="临时医嘱"
+ :icon="yizhuImg"
+ background-color="#ffffff"
+ class="mini-card right-box-row2-item"
+ header-class-name="mini-header"
+ >
+ <DoctorAdvice :list="pageData.doctorAdvice" />
+ </Card>
+ </div>
+ <div class="right-box-row4">
+ <BlockBotttom
+ :icon="dingShiImg"
+ text="定时任务"
+ backgroundColor="#20C6B6"
+ @click="() => onScheduledTasksClick()"
+ class="btn"
+ />
+ <!-- <BlockBotttom
+ :icon="jiaoHaoImg"
+ text="叫号"
+ backgroundColor="#20C6B6"
+ @click="() => onCallBumberClick()"
+ class="btn"
+ /> -->
+ <!-- <BlockBotttom
+ :icon="addImg"
+ text="添加记录"
+ backgroundColor="#409EFF"
+ @click="() => onAddRecordClick()"
+ class="btn"
+ /> -->
+ <BlockBotttom
+ v-if="!whetherDialysisHasBeenEnded"
+ :icon="kaiShiImg"
+ text="结束透析"
+ backgroundColor="#E6A23C"
+ @click="() => onEndClick()"
+ class="btn"
+ />
+ </div>
+ </div>
</div>
- <div class="right-box"></div>
+ <!-- 定时任务 -->
+ <ScheduledTaskDialog ref="scheduledTaskDialogRef" />
+ <!-- 结束透析组件 -->
+ <EndDialysis ref="endDialysisRef" />
</div>
</template>
<script lang="ts" setup name="UnderTreatment">
-import { computed } from "vue";
+import {
+ computed,
+ ref,
+ onMounted,
+ onBeforeUnmount,
+ watch,
+ defineAsyncComponent,
+} from "vue";
+import * as echarts from "echarts";
+import dayjs from "dayjs";
+
// @ts-ignore
import Card from "../components/Card.vue";
+// @ts-ignore
+import ProgressBar from "../components/ProgressBar.vue";
+import DoctorAdvice from "../components/DoctorAdvice/index.vue";
+// @ts-ignore
+import BlockBotttom from "../components/BlockBotttom.vue";
+const ScheduledTaskDialog = defineAsyncComponent(
+ () => import("../components/ScheduledTask.vue")
+);
+const EndDialysis = defineAsyncComponent(() => import("../components/EndDialysis/index.vue"));
import { useBedsideAuxiliaryScreenStore } from "@/store/bedsideAuxiliaryScreen";
+import {
+ formatSubstituteMode,
+ formatTestColr,
+ getItemName,
+ formatTestFlag,
+ EMedStatus,
+} from "@/store/type/bedsideAuxiliaryScreen.type";
+import type {
+ KtvItem,
+ MonitoringRecord,
+} from "@/store/type/bedsideAuxiliaryScreen.type";
+import { formatDate, jgTime4, jgTime5 } from "@/utils/formatTime";
+import zlmsImg from "@/img/zlms.png";
+import dingShiImg from "@/img/dingshi2.png";
+import jiaoHaoImg from "@/img/jiaoHao.png";
+import kaiShiImg from "@/img/kaiShi.png";
+import addImg from "@/img/add.png";
+import txqImg from "@/img/txq.png";
+import xinlvImg from "@/img/xinlv.png";
+import xinLv2Img from "@/img/xinlv2.png";
+import txztImg from "@/img/txzt.png";
+import cljdImg from "@/img/cljd.png";
+import sjjdImg from "@/img/sjjd.png";
+import yizhuImg from "@/img/yizhu.png";
+import { ElMessage } from "element-plus";
interface Props {
height: number;
@@ -35,10 +391,437 @@
const bedsideAuxiliaryScreenStore = useBedsideAuxiliaryScreenStore();
+const scheduledTaskDialogRef = ref<any>(null);
+const endDialysisRef = ref<any>(null);
+
+// ktv趋势图的
+const ktvListEchartRef = ref<HTMLElement | null>(null);
+// 血压脉搏趋势图的
+const bloodPressureAndPulseEchartRef = ref<HTMLElement | null>(null);
+
const pageData = computed(() => {
return Object.assign(bedsideAuxiliaryScreenStore.deviceData.underTreatment, {
patientPhone: bedsideAuxiliaryScreenStore.deviceData.patientPhone,
});
+});
+
+const treatmentStatusText = computed(() => {
+ const status = +bedsideAuxiliaryScreenStore.deviceData.treatmentStatus;
+ if (status === EMedStatus.NOT_CHECKED_IN) return "未签到";
+ if (status === EMedStatus.SIGNED_IN) return "已签到";
+ if (status === EMedStatus.DURING_DIALYSIS) return "透析中";
+ if (status === EMedStatus.END) return "已结束";
+ if (status === EMedStatus.CHECKED) return "已检查";
+ if (status === EMedStatus.ARCHIVED) return "已归档";
+ return "未知状态";
+});
+
+/** 是否已结束透析 */
+const whetherDialysisHasBeenEnded = computed(() => {
+ return (
+ +bedsideAuxiliaryScreenStore.deviceData.treatmentStatus >= EMedStatus.END
+ );
+});
+
+
+
+watch(
+ () => pageData.value.ktvList,
+ (newVal) => {
+ generateKtvListEchart(newVal);
+ },
+ { deep: true }
+);
+
+watch(
+ () => pageData.value.monitoringRecord,
+ (newVal) => {
+ generatBloodPressureAndPulseEchart(newVal);
+ },
+ { deep: true }
+);
+
+watch(
+ () => props.height,
+ () => {
+ generateKtvListEchart(pageData.value.ktvList);
+ generatBloodPressureAndPulseEchart(pageData.value.monitoringRecord);
+ }
+);
+
+/** 生成ktv趋势图 */
+const generateKtvListEchart = (ktvList: KtvItem[]) => {
+ if (!ktvListEchartRef.value) return;
+ // if (!ktvList || ktvList.length === 0) return;
+
+ // 检查是否已经有实例
+ let chart = echarts.getInstanceByDom(ktvListEchartRef.value);
+ if (!chart) {
+ chart = echarts.init(ktvListEchartRef.value);
+ }
+
+ const option = {
+ grid: {
+ top: 6,
+ bottom: 20,
+ right: 20,
+ },
+ xAxis: {
+ type: "category",
+ data: ktvList.map((item) => dayjs(item.时间).format("HH:mm")),
+ axisLine: { show: true },
+ axisTick: { show: true },
+ splitLine: { show: false },
+ },
+ yAxis: {
+ type: "value",
+ axisLine: { show: true },
+ axisTick: { show: true },
+ splitLine: { show: false },
+
+ splitNumber: 4,
+ },
+ series: [
+ {
+ data: ktvList.map((item) => item.ktv),
+ type: "line",
+ smooth: false,
+ symbol: "circle",
+ symbolSize: 6,
+ lineStyle: {
+ width: 2,
+ color: "#70CAAE",
+ },
+ itemStyle: {
+ color: (params: any) => getColor(params.value),
+ },
+ },
+ ],
+ tooltip: {
+ trigger: "axis",
+ },
+ };
+
+ chart.setOption(option, true); // 第二个参数为 true 表示全量更新
+};
+
+const getColor = (val: number) => {
+ if (val < 1.2) return "#FE0201"; // 红色
+ if (val <= 1.6) return "#70CAAE"; // 绿色
+ return "#FE6500"; // 橙色
+};
+
+const formatMarkPoint = (
+ name: string,
+ value: number,
+ yAxis: number,
+ xAxis: number,
+ symbolSize: number,
+ symbolOffset: number[],
+ color: string
+) => {
+ return {
+ name,
+ value,
+ yAxis,
+ xAxis,
+ symbolSize,
+ symbolOffset,
+ label: { fontSize: 8, color },
+ };
+};
+
+/** 生成血压脉搏趋势图 */
+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: number[] = []; // 横坐标
+
+ const markPointTelescopicPressureDatas: any[] = []; // 伸缩压的markPoint
+ const markPointDiastolicPressureDatas: any[] = []; // 舒张压的markPoint
+ const markPointPulseDatas: any[] = []; // 脉搏的markPoint
+
+ bloodPressureAndPulses.forEach((item, index) => {
+ telescopicPressureDatas.push(+item.伸缩压);
+ diastolicPressureDatas.push(+item.舒张压);
+ pulseDatas.push(+item.脉搏);
+ xAxisData.push(index);
+ if (index === 0) {
+ markPointTelescopicPressureDatas.push(
+ formatMarkPoint(
+ "伸缩压",
+ +item.伸缩压,
+ +item.伸缩压,
+ 0,
+ 0,
+ [0, 10],
+ "red"
+ )
+ );
+ markPointDiastolicPressureDatas.push(
+ formatMarkPoint(
+ "舒张压",
+ +item.舒张压,
+ +item.舒张压,
+ 0,
+ 0,
+ [15, 5],
+ "#409EFF"
+ )
+ );
+ markPointPulseDatas.push(
+ formatMarkPoint(
+ "脉搏",
+ +item.脉搏,
+ +item.脉搏,
+ 0,
+ 0,
+ [10, -15],
+ "#D940FF"
+ )
+ );
+ } else if (
+ bloodPressureAndPulses.length > 1 &&
+ index === bloodPressureAndPulses.length - 1
+ ) {
+ markPointTelescopicPressureDatas.push(
+ formatMarkPoint(
+ "伸缩压",
+ +item.伸缩压,
+ +item.伸缩压,
+ index,
+ 0,
+ [-15, -20],
+ "red"
+ )
+ );
+ markPointDiastolicPressureDatas.push(
+ formatMarkPoint(
+ "舒张压",
+ +item.舒张压,
+ +item.舒张压,
+ index,
+ 0,
+ [-15, 0],
+ "#409EFF"
+ )
+ );
+ markPointPulseDatas.push(
+ formatMarkPoint(
+ "脉搏",
+ +item.脉搏,
+ +item.脉搏,
+ index,
+ 0,
+ [0, 0],
+ "#D940FF"
+ )
+ );
+ }
+ });
+
+ if (bloodPressureAndPulses.length === 1) {
+ xAxisData.push(1);
+ }
+
+ const option = {
+ backgroundColor: "#ffffff",
+ tooltip: {
+ trigger: "axis",
+ },
+ toolbox: {
+ show: false,
+ },
+ grid: {
+ left: 20,
+ top: 0,
+ bottom: 0,
+ },
+ xAxis: {
+ type: "category",
+ // 标记做右往左排列
+ boundaryGap: false,
+ data: xAxisData,
+ axisTick: {
+ show: true, // 显示 X 轴刻度
+ },
+ },
+ yAxis: {
+ show: false,
+ name: "",
+ type: "value",
+ min: 40,
+ max: 220,
+ interval: 10, // 指定刻度间隔,
+ splitLine: {
+ show: false,
+ },
+ },
+ series: [
+ {
+ name: "伸缩压",
+ type: "line",
+ symbol: "triangle",
+ symbolSize: 6,
+ symbolRotate: 180,
+ data: telescopicPressureDatas,
+ lineStyle: {
+ width: 2, // 设置线条宽度为5
+ color: "red",
+ },
+ itemStyle: {
+ borderWidth: 2,
+ borderColor: "red",
+ color: "red",
+ },
+ markPoint: {
+ data: markPointTelescopicPressureDatas,
+ },
+ markLine: {
+ symbol: "none",
+ lineStyle: { color: "#409EFF", width: 2 },
+ data: [
+ { name: "y90", yAxis: 90, label: { show: false }, symbol: "none" },
+ ],
+ },
+ },
+ {
+ name: "舒张压",
+ type: "line",
+ symbol: "triangle",
+ symbolSize: 6,
+ data: diastolicPressureDatas,
+ lineStyle: {
+ color: "#409EFF",
+ width: 2, // 设置线条宽度为5
+ },
+ itemStyle: {
+ borderWidth: 2,
+ borderColor: "#409EFF",
+ color: "#409EFF",
+ },
+ markPoint: {
+ data: markPointDiastolicPressureDatas,
+ },
+ markLine: {
+ symbol: "none",
+ lineStyle: { color: "#F56C6C", width: 2 },
+ data: [
+ {
+ name: "y140",
+ yAxis: 140,
+ label: { show: false },
+ symbol: "none",
+ },
+ ],
+ },
+ },
+ {
+ name: "脉搏",
+ type: "line",
+ symbolSize: 6,
+ data: pulseDatas,
+ lineStyle: {
+ color: "#D940FF",
+ width: 2, // 设置线条宽度为5
+ },
+ itemStyle: {
+ borderWidth: 2,
+ borderColor: "#D940FF",
+ color: "#D940FF",
+ },
+ markPoint: {
+ data: markPointPulseDatas,
+ },
+ },
+ ],
+ };
+
+ 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,
+ },
+ }));
+};
+
+/** 定时任务 */
+const onScheduledTasksClick = () => {
+ if (
+ !bedsideAuxiliaryScreenStore.deviceCode ||
+ !bedsideAuxiliaryScreenStore.deviceData.deviceCode
+ )
+ return ElMessage.warning("未初始化或正在进行初始化操作中");
+ scheduledTaskDialogRef.value?.openDialog();
+};
+
+/** 叫号 */
+const onCallBumberClick = () => {
+ ElMessage({
+ message: "功能开发中,敬请期待!",
+ type: "warning",
+ });
+};
+
+/** 添加记录 */
+const onAddRecordClick = () => {
+ ElMessage({
+ message: "功能开发中,敬请期待!",
+ type: "warning",
+ });
+};
+
+/** 结束透析 */
+const onEndClick = () => {
+ if (
+ !bedsideAuxiliaryScreenStore.deviceCode ||
+ !bedsideAuxiliaryScreenStore.deviceData.deviceCode
+ )
+ return ElMessage.warning("未初始化或正在进行初始化操作中");
+ if (!bedsideAuxiliaryScreenStore.userInfo?.token)
+ return ElMessage.warning("请登录");
+ endDialysisRef.value?.openDialog();
+};
+
+onMounted(() => {
+ // 生成ktv趋势图
+ generateKtvListEchart(pageData.value.ktvList);
+ generatBloodPressureAndPulseEchart(pageData.value.monitoringRecord);
+});
+
+onBeforeUnmount(() => {
+ // 销毁图表实例
+ if (ktvListEchartRef.value) {
+ const chart = echarts.getInstanceByDom(ktvListEchartRef.value);
+ if (chart) {
+ chart.dispose();
+ }
+ }
+ if (bloodPressureAndPulseEchartRef.value) {
+ const chart = echarts.getInstanceByDom(
+ bloodPressureAndPulseEchartRef.value
+ );
+ if (chart) {
+ chart.dispose();
+ }
+ }
});
</script>
@@ -55,48 +838,294 @@
padding-bottom: 2px;
overflow: hidden;
.left-box {
- flex: 0 0 58.25%;
- height: calc(100% - 12px);
+ width: 58.25%;
+ height: 100%;
display: flex;
- align-items: flex-start;
flex-direction: column;
gap: 4px;
- div {
- width: 100%;
- }
+
.left-row1 {
- flex: 0 0 41.99%;
- // width: calc(100% - 8px);
- gap: 4px;
+ width: 100%;
+ height: 38.97%;
display: flex;
- background: blue;
+ gap: 4px;
+
+ .left-row1-col1,
+ .left-row1-col2,
+ .left-row1-col3 {
+ height: 100%;
+ }
+
.left-row1-col1 {
- flex: 0 0 26.94%;
+ width: 26.94%;
+ border-radius: 2px;
+ overflow: hidden;
}
.left-row1-col2 {
- flex: 0 0 26.42%;
+ width: 26.43%;
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+ .left-row1-col2-row1 {
+ height: 36.62%;
+ }
+
+ .left-row1-col2-item-row2 {
+ height: 63.38%;
+ }
}
.left-row1-col3 {
- flex: 0 0 46.63%;
+ width: 46.63%;
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+ .left-row1-col3-row1 {
+ height: 36.62%;
+ }
+ .left-row1-col3-row2 {
+ height: 63.38%;
+ .dialysis-mode-content {
+ height: 100%;
+ .abnormal-indicator {
+ display: inline-block;
+ margin-right: 6px;
+ margin-bottom: 4px;
+ font-family: PingFangSC, PingFang SC;
+ font-weight: 600;
+ font-size: 5px;
+ line-height: 6px;
+ text-align: left;
+ font-style: normal;
+ }
+ }
+ }
}
}
.left-row2 {
- flex: 0 0 22.65%;
- background: yellow;
+ width: 100%;
+ height: 21.03%;
+ display: flex;
+ gap: 4px;
+ .left-row2-col1 {
+ width: 26.94%;
+ }
+ .left-row2-col2 {
+ width: 26.43%;
+ }
+ .left-row2-col3 {
+ width: 46.62%;
+ }
}
.left-row3 {
- flex: 0 0 22.65%;
- background: orange;
+ width: 100%;
+ height: 21.03%;
+ display: flex;
+ gap: 4px;
+ .left-row3-col1 {
+ width: 26.94%;
+ }
+ .left-row3-col2 {
+ width: 26.43%;
+ }
+ .left-row3-col3 {
+ width: 46.62%;
+ }
}
.left-row4 {
- flex: 0 0 12.71%;
- background: purple;
+ width: 100%;
+ height: 11.79%;
+ display: flex;
+ gap: 4px;
+ .left-row4-col {
+ width: 50%;
+ }
}
}
.right-box {
- flex: 0 0 41.75%;
+ width: 41.75%;
height: 100%;
- background: green;
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+ .right-box-row1,
+ .right-box-row2,
+ .right-box-row3 .right-box-row4 {
+ width: 100%;
+ }
+ .right-box-row1 {
+ height: 14.44%;
+ display: flex;
+ gap: 4px;
+ .right-box-row1-col1 {
+ width: 36.17%;
+ }
+ .right-box-row1-col2 {
+ width: 63.83%;
+ }
+ }
+ .right-box-row2 {
+ height: 25%;
+ display: flex;
+ gap: 4px;
+ .right-box-row2-item {
+ width: 50%;
+ }
+ }
+ .right-box-row3 {
+ height: 47.78%;
+ }
+
+ .right-box-row4 {
+ height: 12.78%;
+ background: #ffffff;
+ border-radius: 2px;
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ padding-right: 13px;
+ .btn {
+ margin-left: 9px;
+ }
+ }
+ }
+
+ .progress-box {
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+ .item-num {
+ margin-bottom: 4px;
+ font-family: PingFangSC, PingFang SC;
+ font-weight: 600;
+ font-size: 8px;
+ color: #333333;
+ text-align: left;
+ font-style: normal;
+ }
+ }
+
+ .item-box {
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-family: PingFangSC, PingFang SC;
+ font-weight: 600;
+ font-size: 8px;
+ color: #70a3dd;
+ text-align: center;
+ font-style: normal;
+ &.dialysis-mode-content {
+ color: #d58e56;
+ display: flex;
+ align-items: center;
+ // align-items: baseline;
+ .dialysis-mode-content-box {
+ display: flex;
+ align-items: flex-end;
+ line-height: 1;
+ .mini-text {
+ margin-right: 1px;
+ font-size: 5px;
+ color: #c9a589;
+ }
+ }
+ }
+ &.treatment-status {
+ color: #70a3dd;
+ }
+ &.prescription-ehydration-olume {
+ color: #8079cb;
+ }
+ &.current-lood0emperature {
+ color: #70a3dd;
+ font-size: 9px;
+ }
+ &.venous-pressure {
+ color: #70a3dd;
+ font-size: 9px;
+ }
+ }
+ .prescription-remarks {
+ font-family: PingFangSC, PingFang SC;
+ font-weight: 500;
+ font-size: 5px;
+ color: #d58e56;
+ line-height: 7px;
+ text-align: left;
+ font-style: normal;
+ }
+ .dehydrated-level {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ .dehydrated-level-item {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ .item-left {
+ flex: 1;
+ font-family: PingFangSC, PingFang SC;
+ font-weight: 600;
+ font-size: 4px;
+ color: #333333;
+ line-height: 6px;
+ font-style: normal;
+ .level-dete {
+ font-family: PingFangSC, PingFang SC;
+ font-weight: 600;
+ font-size: 4px;
+ color: #d58e56;
+ text-align: left;
+ font-style: normal;
+ }
+ }
+ .item-right {
+ font-family: PingFangSC, PingFang SC;
+ font-weight: 600;
+ font-size: 4px;
+ color: #777777;
+ line-height: 6px;
+ font-style: normal;
+ }
+ }
+ }
+ // card header class
+ .mini-card {
+ padding: 2px;
+ }
+ .ktv-card {
+ overflow: visible;
+ .card-header {
+ margin-bottom: 0px;
+ }
+ ::v-deep(.card-main) {
+ overflow: visible !important;
+ div {
+ overflow: visible;
+ }
+ }
+ }
+ :deep(.mini-header) {
+ flex: 0 0 4px;
+ .card-icon {
+ width: 4px;
+ height: 4px;
+ }
+ .card-title {
+ font-size: 4px;
+ }
+ }
+ :deep(.big-header) {
+ flex: 0 0 9px;
+ .card-icon {
+ width: 9px;
+ height: 9px;
+ }
+ .card-title {
+ font-size: 5px;
+ }
}
}
</style>
--
Gitblit v1.8.0