单应用项目,可以创建很多独立工具类页面 ,不用登录 初始化的页面
zhangchen
2025-08-27 267560778112315d0a6e5a7626a342ed65fba456
src/views/mobile/bedsideAuxiliaryScreen/pages/SignedIn.vue
@@ -1,7 +1,7 @@
<template>
  <div class="signed-in-container" :style="{ '--height': height + 'px' }">
    <div class="row1">
      <div class="row1-col1">
      <div class="col row1-col1">
        <el-image
          :src="pageData.patientPhone"
          style="width: 100%; height: 100%"
@@ -11,174 +11,278 @@
          </template>
        </el-image>
      </div>
      <div class="row1-col2">
      <div class="col row1-col2">
        <Card
          title="异常指标"
          :icon="xinlvImg"
          title="治疗模式"
          :icon="tslImg"
          background-color="#ffffff"
          class="mini-card row1-col2-row1"
          header-class-name="mihi-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 class="item-box dialysis-mode-content">
            <span class="text-1">{{
              formatSubstituteMode(pageData.置换方式)
            }}</span>
            <span class="text-2">{{ pageData.治疗模式 }}</span>
          </div>
        </Card>
      </div>
      <div class="row1-col3">
        <div class="row1-col3-row1">
          <Card
            title="治疗模式"
            :icon="zlmsImg"
            background-color="#ffffff"
            class="row1-col3-row1-item"
            header-class-name="mihi-header"
          >
            <div class="item-box dialysis-mode-content">
              {{ pageData.dialysisPlan }}
            </div>
          </Card>
          <Card
            title="治疗状态"
            :icon="zlztImg"
            background-color="#ffffff"
            class="row1-col3-row1-item"
            header-class-name="mihi-header"
          >
            <div class="item-box treatment-status">已签到</div>
          </Card>
        </div>
        <Card
          title="处方脱水量"
          :icon="cljdImg"
          background-color="#ffffff"
          class="row1-col3-row2"
          class="mini-card row1-col2-row2"
          header-class-name="mihi-header"
        >
          <div class="item-box prescription-ehydration-olume">
            {{ pageData.prescriptionDehydrationVolume }} L
            <span
              >{{ pageData.处方脱水量 }}
              <template v-if="pageData.处方脱水量">L</template></span
            >
          </div>
        </Card>
      </div>
      <div class="row1-col4">
      <div class="col row1-col3">
        <Card
          title="透析器(显示规格)"
          title="置换总量"
          :icon="zlztImg"
          background-color="#ffffff"
          class="mini-card row1-col3-row1"
          header-class-name="mihi-header"
        >
          <div class="item-box total-amount-replacement">
            <span>{{ pageData.置换总量 }}</span>
          </div>
        </Card>
        <Card
          title="透析时长"
          :icon="cljdImg"
          background-color="#ffffff"
          class="mini-card row1-col3-row2"
          header-class-name="mihi-header"
        >
          <div class="item-box dialysis-duration">
            <span>{{ pageData.透析时长2 }}</span>
          </div>
        </Card>
      </div>
      <div class="col row1-col4">
        <Card
          title="透析器"
          :icon="txqImg"
          background-color="#ffffff"
          class="row1-col4-row"
          class="mini-card row1-col4-row1"
          header-class-name="mihi-header"
        >
          <div class="item-box dialyzer">
            {{ pageData.dialyzer }}
            <span>{{ pageData.透析器 }}</span>
          </div>
        </Card>
        <Card
          title="抗凝剂"
          :icon="tslImg"
          background-color="#ffffff"
          class="mini-card row1-col4-row2"
          header-class-name="mihi-header"
        >
          <div class="item-box anticoagulant">
            <div
              v-for="(item, index) in pageData.抗凝剂"
              :key="index"
              class="list-item"
            >
              <div class="list-item-name">
                {{ item.name }}
              </div>
              <div class="list-item-num">
                <span>首剂:{{ item.首剂 }}{{ item.单位 }}</span>
                <span
                  >追加/维持:{{
                    item.是否为追加 ? item.追加剂量 : item.维持剂量
                  }}{{ item.单位 }}</span
                >
                <span>总量:{{ item.总量 }}{{ item.单位 }}</span>
              </div>
            </div>
          </div>
        </Card>
      </div>
      <div class="col row1-col5">
        <Card
          title="脱水量详情"
          :icon="cljdImg"
          background-color="#ffffff"
          class="row1-col4-row"
          header-class-name="mihi-header"
          class="mini-card row1-col5-row1"
          header-class-name="mini-header"
        >
          <div class="dehydrated-level left-0">
          <div class="dehydrated-level">
            <div class="dehydrated-level-item">
              <span class="item-left"
                >平均脱水量:{{ pageData.averageDehydrationRate }} L</span
                >平均脱水量:{{ pageData.最近平均脱水量 }} L</span
              >
              <span class="item-right">(最近9次)</span>
            </div>
            <div class="dehydrated-level-item">
              <span class="item-left"
                ><span
                  >最大脱水量:{{ pageData.maximumDehydrationCapacity }} L</span
                >
                <template v-if="pageData.maximumDehydrationDuration"
              <div class="item-left">
                <span>最大脱水量:{{ pageData.最近最大脱水量 }} L</span>
                <template v-if="pageData.最近最大脱水量透析时长"
                  >/
                  <span class="level-dete">{{
                    pageData.maximumDehydrationDuration
                    pageData.最近最大脱水量透析时长
                  }}</span>
                </template>
              </span>
              </div>
              <span class="item-right"
                >({{ pageData.maximumDehydrationCapacityDate }})</span
                >({{ pageData.最近最大脱水量透析日期 }})</span
              >
            </div>
          </div>
        </Card>
        <Card
          title="处方备注"
          :icon="maibo2Img"
          background-color="#ffffff"
          class="mini-card row1-col5-row2"
          header-class-name="mihi-header"
        >
          <div class="item-box prescription-remarks">
            <span>{{ pageData.处方备注 }}</span>
          </div>
        </Card>
      </div>
    </div>
    <div class="row2">
      <Card
        title="干体重"
        :icon="tizhongImg"
        background-color="#ffffff"
        class="row2-item"
        header-class-name="big-header"
      >
        <div class="weight-box">
          <span class="weight-text">{{ pageData.dryWeight }}</span>
          <span class="unit-text">kg</span>
        </div>
      </Card>
      <Card
        title="透前体重"
        :icon="tizhongImg"
        background-color="#ffffff"
        class="row2-item"
        header-class-name="big-header"
      >
        <div class="weight-box">
          <span class="weight-text">{{ pageData.preDialysisWeight }}</span>
          <span class="unit-text">kg</span>
        </div>
      </Card>
      <Card
        title="上次透后体重"
        :icon="tizhongImg"
        background-color="#ffffff"
        class="row2-item"
        header-class-name="big-header"
      >
        <div class="weight-box">
          <span class="weight-text">{{
            pageData.weightAfterLastDialysis
          }}</span>
          <span class="unit-text">kg</span>
        </div>
      </Card>
      <Card
        title="体重增长"
        :icon="tizhongImg"
        background-color="#ffffff"
        class="row2-item"
        header-class-name="big-header"
      >
        <div class="weight-box">
          <span v-if="pageData.weightIncreaseRate > 0" class="weight-text"
            >+</span
      <div class="col row2-col1">
        <div class="row2-col1-row1">
          <Card
            title="处方血流量"
            :icon="cljdImg"
            background-color="#ffffff"
            class="mini-card row2-col1-row1-col1"
            header-class-name="mihi-header"
          >
          <span class="weight-text">{{ pageData.weightIncrease }}</span>
          <span class="unit-text">kg</span>
            <div class="item-box blood-flow">
              <span>{{ pageData.处方血流量 }}</span>
            </div>
          </Card>
          <Card
            title="处方钠"
            :icon="cljdImg"
            background-color="#ffffff"
            class="mini-card row2-col1-row1-col2"
            header-class-name="mihi-header"
          >
            <div class="item-box prescription-sodium">
              <span>{{ pageData.处方钠 }}</span>
            </div>
          </Card>
        </div>
      </Card>
      <Card
        title="增长率"
        :icon="tizhongImg"
        background-color="#ffffff"
        class="row2-item"
        header-class-name="big-header"
      >
        <div class="weight-box">
          <span class="weight-text">{{ pageData.weightIncreaseRate }}</span>
          <span class="unit-text">%</span>
        <div class="row2-col1-row2">
          <Card
            title="透析液流量"
            :icon="cljdImg"
            background-color="#ffffff"
            class="mini-card row2-col1-row2-col1"
            header-class-name="mihi-header"
          >
            <div class="item-box dialysis-fluid-flow-rate">
              <span>{{ pageData.透析液流量 }}</span>
            </div>
          </Card>
          <Card
            title="透析液种类"
            :icon="cljdImg"
            background-color="#ffffff"
            class="mini-card row2-col1-row2-col2"
            header-class-name="mihi-header"
          >
            <div class="item-box types-dialysis-fluid">
              <div>葡萄糖:{{ pageData.葡萄糖 }}</div>
              <div>钙:{{ pageData.钙 }}</div>
            </div>
          </Card>
        </div>
      </Card>
        <Card
          title="治疗状态"
          :icon="zlztImg"
          background-color="#ffffff"
          class="mini-card row2-col1-row3"
          header-class-name="mihi-header"
        >
          <div class="item-box treatment-status">
            <span>已签到</span>
          </div>
        </Card>
      </div>
      <div class="col row2-col2">
        <Card
          title="参考指标"
          :icon="tizhongImg"
          background-color="#ffffff"
          class="reference-indicators"
          header-class-name="mihi-header"
        >
          <template #right>
            {{ nowDateText }}
          </template>
          <table class="item-box reference-indicators-content">
            <tbody>
              <tr>
                <td>血压<br />超滤量<br /></td>
                <td
                  ref="bloodPressureRectangularChart"
                  style="overflow: hidden"
                >
                  <canvas width="1px" height="1px" />
                </td>
              </tr>
              <tr>
                <td>干体重</td>
                <td>{{ fourPointBloodPressureMap.干体重 }}kg</td>
              </tr>
              <tr>
                <td>体重增长</td>
                <td class="flex-td">
                  <span class="sub-text">(透前-上次透后)</span
                  ><span class="right-text">{{ weightGain1 }}kg</span>
                </td>
              </tr>
              <tr>
                <td>体重增长</td>
                <td class="flex-td">
                  <span class="sub-text">(透前-干体重)</span><span class="text-right">{{ weightGain2 }}kg</span>
                </td>
              </tr>
              <!-- <tr>
                <td>脱水量</td>
                <td>{{ pageData.脱水量 }}%</td>
              </tr> -->
              <tr>
                <td>透前体重</td>
                <td>{{ fourPointBloodPressureMap?.透前体重 }}kg</td>
              </tr>
              <tr>
                <td>透后体重</td>
                <td>{{ fourPointBloodPressureMap?.透后体重 }}kg</td>
              </tr>
              <tr>
                <td>透析时间</td>
                <td>{{ fourPointBloodPressureMap?.透析时间 }}</td>
              </tr>
            </tbody>
          </table>
        </Card>
      </div>
      <div class="col row2-col3">
        <Card
          title="临时医嘱"
          :icon="yizhuImg"
          background-color="#ffffff"
          class="mini-card"
          header-class-name="mini-header"
        >
          <DoctorAdvice :list="pageData.临时医嘱列表" />
        </Card>
      </div>
    </div>
    <div class="row3">
      <BlockBotttom
@@ -203,13 +307,20 @@
        class="btn"
      />
    </div>
    <!-- 定时任务 -->
    <ScheduledTaskDialog ref="scheduledTaskDialogRef" />
  </div>
</template>
<script lang="ts" setup name="SignedIn">
import { computed } from "vue";
import { computed, defineAsyncComponent, onMounted, ref } from "vue";
import dayjs from "dayjs";
import "dayjs/locale/zh-cn";
dayjs.locale("zh-cn");
// @ts-ignore
import Card from "../components/Card.vue";
import DoctorAdvice from "../components/DoctorAdvice/index.vue";
import { useBedsideAuxiliaryScreenStore } from "@/store/bedsideAuxiliaryScreen";
import type { 四点血压图数据 } from "@/store/type/bedsideAuxiliaryScreen.type";
import tslImg from "@/img/tsl.png";
import dingShiImg from "@/img/dingshi2.png";
import jiaoHaoImg from "@/img/jiaoHao.png";
@@ -220,15 +331,21 @@
import cljdImg from "@/img/cljd.png";
import txqImg from "@/img/txq.png";
import tizhongImg from "@/img/tizhong.png";
import yizhuImg from "@/img/yizhu.png";
import maibo2Img from "@/img/maibo2.png";
import {
  getItemName,
  formatTestColr,
  formatTestFlag,
  formatSubstituteMode,
} from "@/store/type/bedsideAuxiliaryScreen.type";
// @ts-ignore
import BlockBotttom from "../components/BlockBotttom.vue";
import { ElMessage } from "element-plus/es";
import { ElMessage } from "element-plus";
const ScheduledTaskDialog = defineAsyncComponent(
  () => import("../components/ScheduledTask.vue")
);
interface Props {
  height: number;
@@ -237,14 +354,75 @@
const bedsideAuxiliaryScreenStore = useBedsideAuxiliaryScreenStore();
const bloodPressureRectangularChart = ref<HTMLElement | null>(null);
const scheduledTaskDialogRef = ref<any>(null);
const pageData = computed(() => {
  return Object.assign(bedsideAuxiliaryScreenStore.deviceData.signedIn, {
    patientPhone: bedsideAuxiliaryScreenStore.deviceData.patientPhone,
  });
});
const fourPointBloodPressureMap = computed(() => {
  let result = {};
  if (
    pageData.value.四点血压图数据 &&
    pageData.value.四点血压图数据.length > 0
  ) {
    result = pageData.value.四点血压图数据[0];
  }
  return result;
});
const nowDateText = computed(() => {
  if (fourPointBloodPressureMap.value?.透析日期) {
    let result = dayjs(fourPointBloodPressureMap.value?.透析日期).format(
      "YYYY-MM-DD"
    );
    result += `(${dayjs(fourPointBloodPressureMap.value?.透析日期).format(
      "ddd"
    )})`;
    return result;
  }
  return "";
});
const weightGain1 = computed(() => {
  if (
    pageData.value.四点血压图数据 &&
    pageData.value.四点血压图数据.length > 1
  ) {
    const value =
      pageData.value.四点血压图数据[0].透前体重 -
      pageData.value.四点血压图数据[1].透后体重;
    const formattedValue = Number.isInteger(value)
      ? value
      : Number(value.toFixed(1));
    return formattedValue;
  }
  return "";
});
const weightGain2 = computed(() => {
  const value =
    fourPointBloodPressureMap.value.透前体重 -
    fourPointBloodPressureMap.value.干体重;
  const formattedValue = Number.isInteger(value)
    ? value
    : Number(value.toFixed(1));
  return formattedValue;
});
/** 点击定时任务 */
const onScheduledTasksClick = () => {};
const onScheduledTasksClick = () => {
  if (
    !bedsideAuxiliaryScreenStore.deviceCode ||
    !bedsideAuxiliaryScreenStore.deviceData.deviceCode
  )
    return ElMessage.warning("未初始化或正在进行初始化操作中");
  scheduledTaskDialogRef.value?.openDialog();
};
const onCallBumberClick = () => {
  ElMessage({
@@ -259,6 +437,211 @@
    type: "warning",
  });
};
const genderBloodPressureRectangularChart = (datas: 四点血压图数据[] | null) => {
  if (!bloodPressureRectangularChart.value) return;
  const benchmarkData = { width: 386, height: 280 };
  // 获取容器宽高(90% 缩放)
  const containerWidth = bloodPressureRectangularChart.value.offsetWidth * 0.9;
  const containerHeight = bloodPressureRectangularChart.value.offsetHeight * 0.9;
  // 获取设备像素比
  const dpr = window.devicePixelRatio || 1;
  // 等比例缩放因子(保持比例)
  const scale = Math.min(
    containerWidth / benchmarkData.width,
    containerHeight / benchmarkData.height
  );
  // 计算实际画布 CSS 尺寸
  const cssWidth = benchmarkData.width * scale;
  const cssHeight = benchmarkData.height * scale;
  // 获取 canvas
  let canvas = bloodPressureRectangularChart.value.querySelector("canvas");
  if (!canvas) {
    canvas = document.createElement("canvas");
    bloodPressureRectangularChart.value.appendChild(canvas);
  }
  // 物理像素
  canvas.width = cssWidth * dpr;
  canvas.height = cssHeight * dpr;
  canvas.style.width = `${cssWidth}px`;
  canvas.style.height = `${cssHeight}px`;
  const ctx = canvas.getContext("2d");
  if (!ctx) return;
  // 先清除画布(按物理像素)
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  // 缩放到实际坐标系(dpr & scale)
  ctx.save();
  ctx.scale(dpr * scale, dpr * scale);
  // 基准坐标系:benchmarkData.width × benchmarkData.height
  const chartWidth = benchmarkData.width;
  const chartHeight = benchmarkData.height;
  // ========== 绘制基线 ==========
  const upperLimitY = chartHeight * 0.5; // 200
  ctx.beginPath();
  ctx.moveTo(0, upperLimitY);
  ctx.lineTo(chartWidth, upperLimitY);
  ctx.strokeStyle = "red";
  ctx.lineWidth = 1;
  ctx.stroke();
  const lowerLimitY = chartHeight * (1 - 0.2857); // 140
  ctx.beginPath();
  ctx.moveTo(0, lowerLimitY);
  ctx.lineTo(chartWidth, lowerLimitY);
  ctx.strokeStyle = "blue";
  ctx.lineWidth = 1;
  ctx.stroke();
  // ========== 血压数据 ==========
  const measurements = [
    { systolic: datas?.[0]?.血压1_透前收缩压 ?? 0, diastolic: datas?.[0]?.血压1_透前舒张压 ?? 0 },
    { systolic: datas?.[0]?.血压2_前半程最低收缩压 ?? 0, diastolic: datas?.[0]?.血压2_前半程最低舒张压 ?? 0 },
    { systolic: datas?.[0]?.血压3_后半程最低收缩压 ?? 0, diastolic: datas?.[0]?.血压3_后半程最低舒张压 ?? 0 },
    { systolic: datas?.[0]?.血压4_透后收缩压 ?? 0, diastolic: datas?.[0]?.血压4_透后舒张压 ?? 0 },
  ];
  const measurementWidth = chartWidth / (measurements.length + 1);
  // 收缩压线
  let systolicEnd = { x: 0, y: 0 };
  ctx.beginPath();
  ctx.moveTo(measurementWidth, chartHeight - measurements[0].systolic);
  for (let i = 1; i < measurements.length; i++) {
    const x = (i + 1) * measurementWidth;
    ctx.lineTo(x, chartHeight - measurements[i].systolic);
    if (i === measurements.length - 1) {
      systolicEnd = { x, y: chartHeight - measurements[i].systolic };
    }
  }
  ctx.strokeStyle = "black";
  ctx.stroke();
  // 舒张压线
  let diastolicEnd = { x: 0, y: 0 };
  ctx.beginPath();
  ctx.moveTo(measurementWidth, chartHeight - measurements[0].diastolic);
  for (let i = 1; i < measurements.length; i++) {
    const x = (i + 1) * measurementWidth;
    ctx.lineTo(x, chartHeight - measurements[i].diastolic);
    if (i === measurements.length - 1) {
      diastolicEnd = { x, y: chartHeight - measurements[i].diastolic };
    }
  }
  ctx.strokeStyle = "black";
  ctx.stroke();
  // 连接起始 & 结束
  ctx.beginPath();
  ctx.moveTo(measurementWidth, chartHeight - measurements[0].systolic);
  ctx.lineTo(measurementWidth, chartHeight - measurements[0].diastolic);
  ctx.moveTo(systolicEnd.x, systolicEnd.y);
  ctx.lineTo(diastolicEnd.x, diastolicEnd.y);
  ctx.stroke();
  // ========== 文本 ==========
  const baseFontSize = 24;
  ctx.font = `${baseFontSize}px Arial`;
  ctx.textAlign = "center";
  ctx.textBaseline = "middle";
  ctx.fillStyle = "black";
  measurements.forEach((m, i) => {
    const x = (i + 1) * measurementWidth;
    ctx.fillText(m.systolic.toString(), x, chartHeight - m.systolic - 5);
    ctx.fillText(m.diastolic.toString(), x, chartHeight - m.diastolic + 10);
  });
  // ========== 圆柱体 ==========
  const 计算脱水量刻度 = 100 / (datas?.[0]?.超滤总量 || 1);
  const cylinderX = chartWidth * 0.9;
  const cylinderY = chartHeight;
  const cylinderRadius = 6;
  const cylinderHeight = 计算脱水量刻度 * (datas?.[0]?.超滤总量 || 0);
  drawCylinder(
    ctx,
    chartHeight,
    1, // 因为已经 scale 过了
    cylinderX,
    cylinderY,
    cylinderRadius,
    cylinderHeight,
    datas?.[0]?.超滤总量?.toString() ?? "0 L",
    datas?.[0]?.脱水百分比 ?? 0,
    datas?.[0]?.透后体重减干体重的差值 ?? 0
  );
  ctx.restore(); // 恢复
};
const drawCylinder = (
  ctx: CanvasRenderingContext2D,
  canvasHeight: number,
  scale: number,
  x: number,
  y: number,
  radius: number,
  height: number,
  超滤总量: string, // 超滤总量
  脱水百分比: number, // 脱水百分比
  透后体重减干体重的差值: number // 透后体重减干体重的差值
) => {
  ctx.beginPath();
  ctx.arc(x, y + height, radius, 0, Math.PI * 2);
  ctx.fillStyle = "#409EFF"; // 填充蓝色
  ctx.strokeStyle = "#409EFF";
  if (脱水百分比 > 3) {
    ctx.fillStyle = "#E6A23C"; // 填充黄色
    ctx.strokeStyle = "#E6A23C";
  } else if (脱水百分比 > 5) {
    ctx.fillStyle = "#F56C6C"; // 填充红色
    ctx.strokeStyle = "#F56C6C";
  }
  ctx.fill();
  ctx.stroke();
  // 绘制侧面矩形
  ctx.beginPath();
  ctx.moveTo(x - radius, y - height);
  ctx.lineTo(x - radius, y + height);
  ctx.lineTo(x + radius, y + height);
  ctx.lineTo(x + radius, y - height);
  ctx.closePath();
  ctx.fill();
  ctx.stroke();
  const baseFontSize = 16;
  // 添加文本说明
  ctx.font = `${baseFontSize * scale}px Arial`;
  ctx.textAlign = "center";
  ctx.fillStyle = "#409EFF";
  ctx.fillText(超滤总量, x, canvasHeight - height - 5); // 文本位于圆柱上方一点
  if (透后体重减干体重的差值 > 0) {
    ctx.font = `${baseFontSize * scale}px Arial`;
    ctx.textAlign = "center";
    ctx.fillStyle = "#000000";
    ctx.fillText(透后体重减干体重的差值 + "", x, canvasHeight - 5); // 文本位于圆柱上方一点
  }
};
onMounted(() => {
  genderBloodPressureRectangularChart(pageData.value.四点血压图数据);
});
</script>
<style lang="less" scoped>
* {
@@ -269,176 +652,317 @@
  height: var(--height);
  overflow: hidden;
  .row1 {
    height: 37.44%;
    margin-bottom: 4px;
    height: 38.38%;
    overflow: hidden;
    margin-bottom: 1.07%;
    display: flex;
    align-items: center;
    justify-content: space-between;
    .row1-col1 {
      flex: 0 0 14.86%;
    .col {
      height: 100%;
      border-radius: 2px;
      overflow: hidden;
    }
    .row1-col2 {
      flex: 0 0 32.86%;
      height: 100%;
      .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;
        }
      &.row1-col1 {
        flex: 0 0 14.86%;
      }
    }
    .row1-col3 {
      flex: 0 0 23.71%;
      height: 100%;
      display: flex;
      flex-direction: column;
      gap: 4px;
      .row1-col3-row1 {
        flex: 1;
      &.row1-col2 {
        flex: 0 0 14.57%;
        display: flex;
        flex-direction: column;
        gap: 4px;
        .row1-col3-row1-item {
          flex: 1;
        }
      }
      .row1-col3-row2 {
        flex: 1;
      }
    }
    .row1-col4 {
      flex: 0 0 25.14%;
      height: 100%;
      display: flex;
      flex-direction: column;
      gap: 4px;
      .row1-col4-row {
        flex: 1;
        .dehydrated-level {
          padding-left: 6px;
          display: flex;
          flex-direction: column;
          align-items: center;
          justify-content: space-between;
          &.left-0 {
            padding-left: 0;
          }
          .dehydrated-level-item {
            width: 100%;
        .row1-col2-row1 {
          flex: 0 0 40%;
          .dialysis-mode-content {
            display: flex;
            align-items: center;
            .item-left {
              flex: 1;
            justify-content: center;
            .text-1 {
              font-family: PingFangSC, PingFang SC;
              font-weight: 600;
              font-size: 4px;
              font-size: 6px;
              color: #c9a589;
              line-height: 8px;
              text-align: center;
              font-style: normal;
            }
            .text-2 {
              font-family: PingFangSC, PingFang SC;
              font-weight: 600;
              font-size: 9px;
              color: #d58e56;
              line-height: 12px;
              text-align: center;
              font-style: normal;
            }
          }
        }
        .row1-col2-row2 {
          flex: 0 0 60%;
          .prescription-ehydration-olume {
            display: flex;
            align-items: center;
            justify-content: center;
            font-family: PingFangSC, PingFang SC;
            font-weight: 600;
            font-size: 11px;
            color: #e87d00;
            text-align: center;
            font-style: normal;
          }
        }
      }
      &.row1-col3 {
        flex: 0 0 14.57%;
        display: flex;
        flex-direction: column;
        gap: 4px;
        .row1-col3-row1 {
          flex: 0 0 40%;
          .total-amount-replacement {
            display: flex;
            align-items: center;
            justify-content: center;
            font-family: PingFangSC, PingFang SC;
            font-weight: 600;
            font-size: 9px;
            color: #d58e56;
            line-height: 13px;
            text-align: center;
            font-style: normal;
          }
        }
        .row1-col3-row2 {
          flex: 0 0 60%;
          .dialysis-duration {
            display: flex;
            align-items: center;
            justify-content: center;
            font-family: PingFangSC, PingFang SC;
            font-weight: 600;
            font-size: 8px;
            color: #333333;
            line-height: 11px;
            text-align: center;
            font-style: normal;
          }
        }
      }
      &.row1-col4 {
        flex: 0 0 25.71%;
        display: flex;
        flex-direction: column;
        gap: 4px;
        .row1-col4-row1 {
          flex: 0 0 40%;
          .dialyzer {
            font-family: PingFangSC, PingFang SC;
            font-weight: 600;
            font-size: 9px;
            color: #333333;
            text-align: center;
            font-style: normal;
          }
        }
        .row1-col4-row2 {
          flex: 0 0 60%;
          .anticoagulant {
            .list-item {
              font-family: PingFangSC, PingFang SC;
              font-weight: 600;
              font-size: 4.5px;
              color: #333333;
              line-height: 6px;
              text-align: left;
              font-style: normal;
              .level-dete {
              .list-item-name {
                margin-bottom: 2px;
              }
            }
          }
        }
      }
      &.row1-col5 {
        flex: 0 0 25.71%;
        display: flex;
        flex-direction: column;
        gap: 4px;
        .row1-col5-row1 {
          flex: 0 0 40%;
          .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: #d58e56;
                text-align: left;
                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;
              }
            }
            .item-right {
              font-family: PingFangSC, PingFang SC;
              font-weight: 600;
              font-size: 4px;
              color: #777777;
              line-height: 6px;
              font-style: normal;
            }
          }
        }
        .row1-col5-row2 {
          flex: 0 0 60%;
          .prescription-remarks {
            font-family: PingFangSC, PingFang SC;
            font-weight: 500;
            font-size: 4px;
            color: #9a1717;
            line-height: 6px;
            text-align: left;
            font-style: normal;
          }
        }
      }
    }
  }
  .row2 {
    height: 21.72%;
    height: 44.56%;
    overflow: hidden;
    margin-bottom: 1.07%;
    display: flex;
    gap: 4px;
    .row2-item {
      flex: 1;
      .weight-box {
    justify-content: space-between;
    .col {
      height: 100%;
      border-radius: 2px;
      overflow: hidden;
      &.row2-col1 {
        flex: 0 0 38%;
        display: flex;
        align-items: flex-end;
        justify-content: center;
        gap: 2px;
        align-items: baseline;
        .weight-text {
          font-family: PingFangSC, PingFang SC;
          font-weight: 600;
          font-size: 11px;
          color: #333333;
          text-align: center;
          font-style: normal;
        flex-direction: column;
        justify-content: space-between;
        .row2-col1-row1 {
          height: 34%;
          display: flex;
          gap: 4px;
          .row2-col1-row1-col1 {
            flex: 1;
            height: 100%;
            .blood-flow {
              display: flex;
              align-items: center;
              justify-content: center;
              font-family: PingFangSC, PingFang SC;
              font-weight: 600;
              font-size: 9px;
              color: #333333;
              line-height: 12px;
              text-align: center;
              font-style: normal;
            }
          }
          .row2-col1-row1-col2 {
            flex: 1;
            height: 100%;
            .prescription-sodium {
              display: flex;
              align-items: center;
              justify-content: center;
              font-family: PingFangSC, PingFang SC;
              font-weight: 600;
              font-size: 9px;
              color: #333333;
              line-height: 12px;
              text-align: center;
              font-style: normal;
            }
          }
        }
        .unit-text {
          font-family: PingFangSC, PingFang SC;
          font-weight: 600;
          font-size: 7px;
          color: #333333;
          text-align: center;
          font-style: normal;
        .row2-col1-row2 {
          height: 34%;
          display: flex;
          gap: 4px;
          .row2-col1-row2-col1 {
            flex: 1;
            height: 100%;
            .dialysis-fluid-flow-rate {
              display: flex;
              align-items: center;
              justify-content: center;
              font-family: PingFangSC, PingFang SC;
              font-weight: 600;
              font-size: 9px;
              color: #333333;
              line-height: 12px;
              text-align: center;
              font-style: normal;
            }
          }
          .row2-col1-row2-col2 {
            flex: 1;
            height: 100%;
            .types-dialysis-fluid {
              display: flex;
              flex-direction: column;
              font-family: PingFangSC, PingFang SC;
              font-weight: 600;
              font-size: 4.2px;
              color: #333333;
              font-style: normal;
            }
          }
        }
        .row2-col1-row3 {
          height: 22.3%;
          flex-direction: row;
          .treatment-status {
            display: flex;
            align-items: center;
            justify-content: center;
            font-family: PingFangSC, PingFang SC;
            font-weight: 600;
            font-size: 9px;
            color: #70a3dd;
            text-align: center;
            font-style: normal;
          }
        }
      }
      &.row2-col2 {
        flex: 0 0 18.2%;
      }
      &.row2-col3 {
        flex: 0 0 41.4%;
      }
    }
  }
  .row3 {
    position: absolute;
    width: 100%;
    bottom: 2px;
    height: 13.33%;
    height: 11.92%;
    overflow: hidden;
    background: #fff;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    padding-right: 13px;
    overflow: hidden;
    background: #ffffff;
    border-radius: 2px;
    .btn {
      margin-left: 9px;
    }
  }
  .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;
    }
    &.treatment-status {
      color: #70a3dd;
    }
    &.prescription-ehydration-olume {
      color: #8079cb;
    }
  }
  // card header class
  :deep(.mihi-header) {
    flex: 0 0 4px;
    .card-icon {
@@ -449,14 +973,89 @@
      font-size: 4px;
    }
  }
  :deep(.big-header) {
    flex: 0 0 9px;
    .card-icon {
      width: 9px;
      height: 9px;
}
.item-box {
  height: 100%;
  overflow-y: auto !important;
}
:deep(.mini-header) {
  flex: 0 0 4px !important;
  .card-icon {
    width: 4px !important;
    height: 4px !important;
  }
  .card-title {
    font-size: 4px !important;
  }
}
</style>
// <style lang="less">
// .reference-indicators {
//   padding: 0 !important;
//   .card-header {
//     padding: 3px 4px;
//   }
// }
//
</style>
<style lang="less">
.reference-indicators {
  padding: 0 !important;
  .card-header {
    padding: 3px 4px;
    margin-bottom: 0 !important;
  }
  .reference-indicators-content {
    width: 100%;
    border-collapse: collapse;
    td {
      border: 1px solid #dfdfdf; /* 黑色边框 */
      border-left: none;
      text-align: center;
      vertical-align: middle;
    }
    .card-title {
      font-size: 5px;
    & td:first-child {
      width: 36%;
      font-family: PingFangSC, PingFang SC;
      font-weight: 400;
      font-size: 3px;
      color: #333333;
      text-align: center;
      font-style: normal;
    }
    & td:last-child {
      position: relative;
      width: 64%;
      border-right: none;
      font-family: PingFangSC, PingFang SC;
      font-weight: 500;
      font-size: 3.6px;
      color: #333333;
      text-align: center;
      font-style: normal;
      &.flex-td {
        display: flex;
        align-items: center;
        justify-content: space-around;
        width: 100%;
      }
      .sub-text {
        font-size: 3px;
        color: #666;
        margin-right: 1.2px;
         white-space: nowrap;
      }
      // .text-right {
      //   position: absolute;
      //   right: 0;
      //   top: 50%;
      //   transform: translateY(-50%);
      //   font-size: 3px;
      //   color: #666;
      // }
    }
    & tr:not(:first-child) td {
      height: 6px;
    }
  }
}