单应用项目,可以创建很多独立工具类页面 ,不用登录 初始化的页面
chenyc
2025-01-22 57712331391fbc6c0022d9c1cc80704bc1cdd1d7
完善功能
2个文件已修改
251 ■■■■■ 已修改文件
index.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home.vue 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
index.html
@@ -3,7 +3,7 @@
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" >
    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
    <meta name="x5-orientation" content="landscape"> <!-- 针对QQ浏览器 -->
    <meta name="screen-orientation" content="landscape"> <!-- 针对UC浏览器 -->
    <title>胜透床旁监测</title>
src/views/Home.vue
@@ -219,7 +219,7 @@
          </div>
        </el-col>
        <el-col :span="12">
          <div
          <div
            v-if="Number(deviceData.透析状态) > 1"
            :ref="'echartsDiv' + deviceData.设备编号"
            style="height: 97%"
@@ -229,23 +229,23 @@
            style="text-align: right; height: 100%"
          >
            <div
              class="container"
              style="
                height: 25%;
                font-weight: 600;
                color: #909399;
                font-size: 80%;
              "
            >
              CW:<span
                style="
                  font-weight: 800;
                  font-size: 130%;
                  color: #303133;
                  white-space: nowrap;
                "
                >{{ Number(deviceData.透前称重).toFixed(1) }}</span
              >
              <div   class="grid-container" style="height: 100%;">
                <div
                  style="
                    font-weight: 800;
                  "
                  >
                  透前称重
                  <b style="font-size: 200%;color: #303133;">{{ Number(deviceData.透前称重).toFixed(1) }}</b>
                  </div
                >
              </div>
            </div>
            <div
              class="container"
@@ -253,42 +253,39 @@
                height: 25%;
                font-weight: 600;
                color: #909399;
                font-size: 80%;
              "
            >
              D<span
                style="
                  font-weight: 800;
                  font-size: 130%;
                  color: #303133;
                  white-space: nowrap;
                "
                >{{ Number(deviceData.干体重).toFixed(1) }}</span
              >L<span
                style="
                  font-weight: 800;
                  font-size: 130%;
                  color: #303133;
                  white-space: nowrap;
                "
                >{{ Number(deviceData.上次透后称重) }}</span
              >
              <div   class="grid-container" style="height: 100%;">
                <div
                  style="
                    font-weight: 800;
                    color: #909399;
                  "
                  >
                  干体重
                  <b style="font-size: 200%;color: #303133;">{{ Number(deviceData.干体重).toFixed(1) }}</b>
                  上次透后称重
                  <b style="font-size: 200%;color: #303133;">{{ Number(deviceData.上次透后称重).toFixed(1) }}</b>
                  </div
                >
              </div>
            </div>
            <div
              :style="{ color: deviceData.体重增长率 >= 5 ? 'red' : '#303133' }"
              style="height: 25%; font-weight: 600; font-size: 80%"
              style="height: 25%; font-weight: 600;color: #909399;"
            >
              <span
                style="font-weight: 800; font-size: 130%; white-space: nowrap"
              >
                <template
                  v-if="Number(deviceData.透前称重 - deviceData.干体重) > 0"
                  >+</template
                >{{
                  Number(deviceData.透前称重 - deviceData.干体重).toFixed(1)
                }}
              </span>
              <span>({{ deviceData.体重增长率 }}%)</span>
              <div  class="grid-container" style="height: 100%;">
                <div>
                  体重增长
                    <b style="font-size: 200%; color: #303133;"
                      v-if="Number(deviceData.透前称重 - deviceData.干体重) > 0"
                      >+{{
                      Number(deviceData.透前称重 - deviceData.干体重).toFixed(1)
                    }}</b
                    >
                    增长率<b style="font-size: 200%;color: #303133;">({{ deviceData.体重增长率 }}%)</b>
                  </div>
                </div>
            </div>
            <div
              class="container"
@@ -296,49 +293,58 @@
                font-weight: 600;
                height: 25%;
                color: #909399;
                font-size: 80%;
                margin-left: -20px;
              "
            >
              <span
                v-if="deviceData.透前血压_伸缩压"
                :style="{ color: tqXygj ? 'red' : '#303133' }"
                style="font-weight: 800; font-size: 130%; white-space: nowrap"
                >{{ deviceData.透前血压_伸缩压 }}/</span
              >
              <span
                :style="{ color: tqXygj ? 'red' : '#303133' }"
                style="font-weight: 800; font-size: 130%; white-space: nowrap"
                >{{ deviceData.透前血压_舒张压 }}</span
              >
              <span
                v-if="deviceData.透前脉搏"
                :style="{ color: tqMbgj ? 'red' : '#303133' }"
                style="font-weight: 800; font-size: 130%; white-space: nowrap"
                >,{{ deviceData.透前脉搏 }}</span
              >
              <div  class="grid-container" style="height: 100%;">
                  <div>
                    透前血压
                    <span
                      v-if="deviceData.透前血压_伸缩压"
                      :style="{ color: tqXygj ? 'red' : '#303133' }"
                      style="font-weight: 800; font-size: 200%; white-space: nowrap"
                      >{{ deviceData.透前血压_伸缩压 }}/</span
                    >
                    <span
                      :style="{ color: tqXygj ? 'red' : '#303133' }"
                      style="font-weight: 800; font-size: 200%; white-space: nowrap"
                      >{{ deviceData.透前血压_舒张压 }}</span
                    >
                    脉搏
                    <span
                      v-if="deviceData.透前脉搏"
                      :style="{ color: tqMbgj ? 'red' : '#303133' }"
                      style="font-weight: 800; font-size: 200%; white-space: nowrap"
                      >{{ deviceData.透前脉搏 }}</span
                    >
                  </div>
              </div>
            </div>
          </div>
        </el-col>
      </el-row>
      <el-row style="height: 20%;background-color: #ffffff; line-height: 50px;">
        <!-- <div style="font-size: 200%;height: 100%;text-align: center; color: #909399;" class="grid-container">
            <el-icon><ChatDotSquare /></el-icon>暂无通知
        </div> -->
        <div style="color: cornflowerblue;height: 20%; width: 100%;" class="grid-container">
        <div v-if="床旁血压计.zuihouTime>shishiTime" style="color: cornflowerblue;height: 20%; width: 100%;" class="grid-container">
            <div style="text-align: center;width: 100%; color: #909399;">
                2025-01-11 12:23:45
              <!-- {{isShowXY}} -->
            <!-- {{床旁血压计.zuihouTime}} / {{shishiTime}}
              {{}} -->
                {{床旁血压计.date_time}}
            </div>
            
        </div>
        <div style="font-size: 300%; color: cornflowerblue;height: 80%; width: 100%;" class="grid-container">
        <div v-if="床旁血压计.zuihouTime>shishiTime" style="font-size: 300%; color: cornflowerblue;height: 80%; width: 100%;" class="grid-container">
            
            <div style="text-align: center;width: 100%;">
               高压:118,低压:88, 心率:89
            <div style="text-align: center;width: 100%;" class="flash-text">
               高压:{{床旁血压计.sbp}},低压: {{床旁血压计.dbp}}, 心率: {{床旁血压计.pulseRate}}
            </div>
        </div>
        <div v-else style="font-size: 200%;height: 100%;text-align: center; color: #909399;padding: 5px;" class="grid-container">
          透析器:{{deviceData.透析器}}
        </div>
         <!-- <div style="font-size: 300%; color: red;height: 100%;" class="grid-container">
            
@@ -376,7 +382,7 @@
            overflow: hidden;
          "
        >
          <div class="grid-container" style="height: 100%">
          <div class="grid-container" style="height: 100%" @click="initTupiao">
            {{ deviceData.设备名称 }} {{ zhuangtaiStr }}
          </div>
        </el-row>
@@ -414,13 +420,14 @@
                &nbsp;
              </el-col>
              <el-col
                v-if="noBaoji !== ''"
                v-if="noBaoji === ''"
                :span="14"
                style="
                  padding-left: 5px;
                  height: 100%;
                  font-weight: 500;
                  font-size: 100%;
                  font-size: 200%
                "
              >
                <div
@@ -440,7 +447,7 @@
            </el-row>
          </div>
        </el-col>
        <el-col :span="9" v-if="noBaoji !== ''">
        <el-col :span="9" v-if="noBaoji == ''">
          <!-- 历史状态画图 -->
          <div
            :ref="'echartsDivwd' + deviceData.设备编号"
@@ -510,6 +517,14 @@
 // sse状态
const readyState = ref({ key: 0, value: "正在链接中" });
const deviceCode=ref('')
const shishiTime=ref(new Date())
const 床旁血压计=ref({
  date_time:'',
  sbp:'',
  pulseRate:'',
  dbp:'',
  zuihouTime:new Date()
})
const deviceData = ref({
  iot_传输时间: "2025-01-10 19:15:24",
  iot_当前脱水量: 2.04,
@@ -529,7 +544,7 @@
  性别: "男",
  患者头像:
    "http://dhimg.leon056.com/hemodialysis/face/PAT9090070832211PyVq/face-IMG_20240413_112705.jpg-202404131127536157.jpg",
  患者姓名: "李金山",
  患者姓名: "",
  患者编号: "PAT9090070832211PyVq",
  患者透析号: "0207",
  最后一条血压: 116,
@@ -584,7 +599,7 @@
  透析处方的时长_小时: "4",
  透析开始时间: "2025-01-10 16:44:00",
  透析方案: "HD",
  透析状态: "2.0",
  透析状态: "1.0",
  透析结束时间: "2025-01-10 20:44:00",
  设备变化: "1736508117033DEV",
  属性历史列表: [
@@ -687,6 +702,13 @@
const wd = ref("");
const ls = ref("");
const ddd = ref("");
const isShowXY=computed(()=>{
  if(床旁血压计.value.zuihouTime>new Date()){
    return true
  }else{
    return false
  }
})
const txzt: any = computed(() => {
  return deviceData.value.透析状态;
});
@@ -759,9 +781,9 @@
  const list = deviceData.value.设备状态列表;
  if (
    (deviceData.value.监测血压是否低于百分之30 ||
    deviceData.value.跨膜压是否大于200 ||
    deviceData.value.监测血压是否高于百分之30) &&
    deviceData.value.透析状态 === "2.0"
      deviceData.value.跨膜压是否大于200 ||
      deviceData.value.监测血压是否高于百分之30) &&
      deviceData.value.透析状态 === "2.0"
  ) {
    return true;
  } else {
@@ -851,7 +873,7 @@
watch(
  () => deviceData.value.设备变化,
  () => {
    // console.log(device.value.设备名称,'子组件变量')
    console.log(deviceData.value.设备名称,'子组件变量')
    setTimeout(() => {
      if (!xiaoduzhuangti.value) {
        initTupiao();
@@ -867,7 +889,7 @@
        { key: 2, value: "连接已关闭或者没有链接成功" },
        ];
        try {
        source.value=  new EventSourcePolyfill(`https://hemobs.icoldchain.cn/sse/sseEvent/${deviceCode.value}`,{
        source.value=  new EventSourcePolyfill(`http://testbs.ihemodialysis.com/sse/sseEvent/${deviceCode.value}`,{
            heartbeatTimeout:60000
        });
        source.value.onopen = (e) => {
@@ -881,6 +903,7 @@
        };
        source.value.onmessage = (e) => {
            console.log('收到消息',e.data)
            shishiTime.value=new Date();
            if(e.data){
                const msg=e.data
                let dif=msg.indexOf('event:message')
@@ -890,12 +913,36 @@
                  const datax=msg.slice(beng,end+1)
                  const dataBody=JSON.parse(datax)
                  console.log(dataBody) 
                  deviceData.value=dataBody.透析状态
                  deviceData.value.属性历史列表=dataBody.IOT信息.属性历史列表
                  deviceData.value.设备变化=Date.now() + 'DEV'
                  console.log(dataBody)
                  if(dataBody.推送类型==='床旁血压计'){
                    let date = new Date();
                    date.setMinutes(date.getMinutes() + 1);
                    床旁血压计.value={
                      date_time:dataBody?.床旁血压结果?.measureTime,
                      sbp:dataBody?.床旁血压结果?.sbp,
                      pulseRate:dataBody?.床旁血压结果?.pulseRate,
                      dbp:dataBody?.床旁血压结果?.dbp,
                      zuihouTime:date
                    }
                  }else if(dataBody.推送类型==='中央监控大屏信息'){
                    console.log(Date.now() + 'DEV')
                    deviceData.value=dataBody?.透析状态
                    deviceData.value.设备变化=Date.now() + 'DEV'
                    console.log(1)
                    console.log(2)
                    deviceData.value.属性历史列表=dataBody?.IOT信息?.属性历史列表
                    console.log(3)
                    console.log(4)
                    console.log(deviceData.value.设备变化)
                    deviceData.value.设备状态列表=dataBody.IOT信息.状态列表
                    if(!dataBody.透析状态){
                      deviceData.value.患者姓名=''
                    }
                  }
                }
            }
        };
        } catch (error) {
            console.log(error);
@@ -1153,6 +1200,7 @@
      }
    }
  } else if (deviceData.value.患者姓名 === "") {
    console.log('2222')
    const tbdata1 = [];
    const tbdata2 = [];
    const tbdata3 = [];
@@ -1187,6 +1235,7 @@
      });
    }
    try {
      console.log('渲染设备')
      const myChart1 = echarts.init(
        proxy.$refs["echartsDivwd" + deviceData.value.设备编号]
      );
@@ -1197,7 +1246,7 @@
        proxy.$refs["echartsDivddd" + deviceData.value.设备编号]
      );
      const option1 = {
        backgroundColor: textcolor.value,
        // backgroundColor: textcolor.value,
        tooltip: {
          trigger: "axis",
        },
@@ -1206,11 +1255,11 @@
        },
        grid: {
          left: 8,
          top: 30,
          top: 100,
          bottom: 0,
        },
        xAxis: {
          show: false, // 隐藏X轴
          show: true, // 隐藏X轴
          type: "category",
          // 标记做右往左排列
          boundaryGap: false,
@@ -1237,7 +1286,7 @@
        ],
      };
      const option2 = {
        backgroundColor: textcolor.value,
        // backgroundColor: textcolor.value,
        tooltip: {
          trigger: "axis",
        },
@@ -1246,7 +1295,7 @@
        },
        grid: {
          left: 8,
          top: 20,
          top: 100,
          bottom: 0,
        },
        xAxis: {
@@ -1278,7 +1327,7 @@
        ],
      };
      const option3 = {
        backgroundColor: textcolor.value,
        // backgroundColor: textcolor.value,
        tooltip: {
          trigger: "axis",
        },
@@ -1287,7 +1336,7 @@
        },
        grid: {
          left: 8,
          top: 10,
          top: 100,
          bottom: 0,
        },
        xAxis: {
@@ -1412,4 +1461,22 @@
.fixed-bottom-right:hover {
  background-color: #0056b3;
}
/* 定义闪现动画的关键帧 */
@keyframes flash {
  0%, 100% {
    opacity: 1; /* 开始和结束时完全可见 */
  }
  50% {
    opacity: 0; /* 中间时刻完全透明 */
  }
}
/* 应用动画到 div */
.flash-text {
  animation-name: flash;
  animation-duration: 2s; /* 动画持续时间 */
  animation-timing-function: linear; /* 动画速度曲线 */
  animation-iteration-count: infinite; /* 动画重复次数 */
  animation-direction: alternate; /* 动画方向 */
}
</style>