| | |
| | | <template> |
| | | <div class="divice"> |
| | | <!-- {{数据初始化}} --> |
| | | <div class="youzhiliao" style="height: 100%" v-if="deviceData.患者姓名"> |
| | | <el-carousel v-if="deviceData.患者姓名 && pageHeight > 0" height="auto" :autoplay="false" motion-blur :initial-index="0" always="always"> |
| | | <el-carousel-item :style="{ height: pageHeight + 'px'}"> |
| | | <div class="youzhiliao" style="height: 100%" > |
| | | <div class="toubu" style="height: 11%"> |
| | | <el-row |
| | | v-if="deviceData.患者姓名 !== ''" |
| | |
| | | <span |
| | | class="grid-container" |
| | | @click="initTupiao" |
| | | style="margin-left: 5%; font-size: 350%; height: 100%" |
| | | style="margin-left: 2%; font-size: 200%; height: 100%" |
| | | >{{ deviceData.患者姓名 }} |
| | | </span> |
| | | |
| | | <span |
| | | class="grid-container" |
| | | v-if="deviceData.年龄 !== null" |
| | | style="margin-left: 5%; font-size: 300%; height: 100%" |
| | | style="margin-left: 2%; font-size: 200%; height: 100%" |
| | | >{{ deviceData.年龄 }}岁</span |
| | | > |
| | | <span |
| | | class="grid-container" |
| | | style="margin-left: 5%; font-size: 300%; height: 100%" |
| | | style="margin-left: 2%; font-size: 200%; height: 100%" |
| | | >{{ deviceData.性别 }}</span |
| | | > |
| | | |
| | | <span |
| | | class="grid-container" |
| | | style="margin-left: 2%; font-size: 200%; height: 100%" |
| | | >{{ patientSourceAndCode }}</span |
| | | > |
| | | <span |
| | | v-if="deviceData.签到号" |
| | | class="grid-container" |
| | | style="margin-left: 2%; font-size: 200%; height: 100%" |
| | | >{{ deviceData.签到号 }}</span |
| | | > |
| | | |
| | | <div |
| | | style=" |
| | | position: absolute; |
| | |
| | | font-weight: 600; |
| | | color: #333333; |
| | | color: #ca7070; |
| | | overflow-y: auto; |
| | | " |
| | | > |
| | | <el-row style="font-size: 20px"> |
| | |
| | | font-size: 50px; |
| | | color: #333333; |
| | | color: #ca7070; |
| | | overflow-y: auto; |
| | | " |
| | | > |
| | | <el-row style="font-size: 20px"> |
| | | <el-col |
| | | v-for="(row, index) in deviceData.异常检验指标" |
| | | :span="12" |
| | | style="font-weight: 700" |
| | | style="font-weight: 700;" |
| | | :key="index" |
| | | > |
| | | {{ getItemName(row?.项目名称) }} |
| | |
| | | referrerpolicy="no-referrer" |
| | | src="https://lanhu-oss.lanhuapp.com/SketchPng7d7c4e66d2f3fb56cb7c93cf3b359782ee05a12117f39e9b1836bff686aca428" |
| | | /> |
| | | |
| | | |
| | | <span |
| | | class="text-group_3" |
| | | v-if="isinitXy && Number(deviceData.透析状态) >= 1" |
| | |
| | | </el-row> |
| | | </div> |
| | | </div> |
| | | </el-carousel-item> |
| | | <el-carousel-item :style="{ height: pageHeight + 'px'}"> |
| | | <div class="toubu" style="height: 11%"> |
| | | <el-row |
| | | v-if="deviceData.患者姓名 !== ''" |
| | | style=" |
| | | font-weight: 900; |
| | | color: #ffffff; |
| | | width: 100%; |
| | | height: 100%; |
| | | line-height: 100%; |
| | | padding: 20px; |
| | | position: relative; |
| | | " |
| | | > |
| | | <span |
| | | class="grid-container" |
| | | style="font-size: 300%; height: 100%" |
| | | v-if="deviceData.设备名称 !== null" |
| | | >{{ deviceData.设备名称 }} |
| | | </span> |
| | | <span |
| | | class="grid-container" |
| | | @click="initTupiao" |
| | | style="margin-left: 2%; font-size: 200%; height: 100%" |
| | | >{{ deviceData.患者姓名 }} |
| | | </span> |
| | | |
| | | <span |
| | | class="grid-container" |
| | | v-if="deviceData.年龄 !== null" |
| | | style="margin-left: 2%; font-size: 200%; height: 100%" |
| | | >{{ deviceData.年龄 }}岁</span |
| | | > |
| | | <span |
| | | class="grid-container" |
| | | style="margin-left: 2%; font-size: 200%; height: 100%" |
| | | >{{ deviceData.性别 }}</span |
| | | > |
| | | <span |
| | | class="grid-container" |
| | | style="margin-left: 2%; font-size: 200%; height: 100%" |
| | | >{{ patientSourceAndCode }}</span |
| | | > |
| | | <span |
| | | v-if="deviceData.签到号" |
| | | class="grid-container" |
| | | style="margin-left: 2%; font-size: 200%; height: 100%" |
| | | >{{ deviceData.签到号 }}</span |
| | | > |
| | | |
| | | <div |
| | | style=" |
| | | position: absolute; |
| | | top: 0; |
| | | right: 0; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: flex-end; |
| | | padding: 5px; |
| | | height: 100%; |
| | | " |
| | | > |
| | | <div |
| | | class="grid-container" |
| | | style="display: flex; align-items: center; padding-right: 20px" |
| | | > |
| | | <span |
| | | style=" |
| | | display: inline-block; |
| | | margin-right: 15px; |
| | | font-size: 30px; |
| | | color: #f56c6c; |
| | | " |
| | | >{{ 倒计时显示 }}</span |
| | | > |
| | | <span style="display: inline-block; margin-right: 15px"> |
| | | <img @click="dingshiShow" :src="dingshi" alt="Image 1" /> |
| | | </span> |
| | | <span style="display: inline-block"> |
| | | <img |
| | | @click="centerDialogVisible = true" |
| | | :src="shezhi" |
| | | alt="Image 2" |
| | | /> |
| | | </span> |
| | | </div> |
| | | </div> |
| | | </el-row> |
| | | </div> |
| | | <DoctorAdvice :height="'89%'" :list="deviceData.透析单医嘱列表" /> |
| | | </el-carousel-item> |
| | | </el-carousel> |
| | | |
| | | <div v-else style="height: 100%"> |
| | | <div class="toubu" style="height: 11%"> |
| | | <el-row |
| | |
| | | v-if="deviceData.设备名称 !== null" |
| | | >{{ deviceData.设备名称 }} |
| | | </span> |
| | | |
| | | |
| | | <div |
| | | style=" |
| | | position: absolute; |
| | |
| | | " |
| | | >{{ 倒计时显示 }}</span |
| | | > |
| | | |
| | | |
| | | <span style="display: inline-block; margin-right: 15px"> |
| | | <img @click="dingshiShow" :src="dingshi" alt="Image 1" /> |
| | | </span> |
| | |
| | | </div> |
| | | </div> |
| | | <!-- <div class="container-weiqiandao" > |
| | | |
| | | |
| | | <div class="item-weiqiandao" style="background: #E5EEFF;border-radius: 8px;height: 100%;"> |
| | | <div class="container-cord" style="height: 30px;"> |
| | | <img style="width: 25px;" referrerpolicy="no-referrer" :src="tsl" |
| | |
| | | <span class="text-gray-500">分钟 </span> |
| | | </el-col> |
| | | </el-form-item> |
| | | |
| | | |
| | | <el-form-item label="提醒内容:"> |
| | | <el-input |
| | | v-if="!formInline.selectOpen" |
| | |
| | | import tdddbaojing from "../assets/tzddd.mp3"; |
| | | import tzxllbaojing from "../assets/tzxll.mp3"; |
| | | import cgbaojing from "../assets/cg.mp3"; |
| | | |
| | | |
| | | import { |
| | | computed, |
| | | getCurrentInstance, |
| | |
| | | import * as echarts from "echarts"; |
| | | import { jgTime4 } from "../utils/formatTime"; |
| | | import { setTimeoutAlert } from "../utils/httpApi"; |
| | | import DoctorAdvice from '../components/doctorAdvice/index.vue'; |
| | | // 创建 Audio 对象,指向 public 目录下的音频文件 |
| | | const alarmSound = new Audio(alertbaojin); //一般报警声音 |
| | | const alarmSoundCXY = new Audio(cxybaojing); //测血压报警 |
| | |
| | | alarmSoundTZxll.loop = true; // 循环播放 |
| | | const alarmSoundCG = new Audio(cgbaojing); //冲管 |
| | | alarmSoundCG.loop = true; // 循环播放 |
| | | |
| | | |
| | | // 控制播放状态的变量 |
| | | const isPlaying = ref(false); |
| | | // 切换播放/暂停的方法 |
| | |
| | | const sseData = ref({}); |
| | | // sse状态 |
| | | const readyState = ref({ key: 0, value: "正在链接中" }); |
| | | |
| | | |
| | | const deviceCode = ref(""); |
| | | const shishiTime = ref(new Date()); |
| | | //有没有推送过血压如果有 就一直会显示血压数据 |
| | |
| | | selectType: "", |
| | | selectOpen: false, |
| | | }); |
| | | |
| | | |
| | | const 当前客户耗材集合 = ref({}); |
| | | const deviceData = ref({ |
| | | 患者来源: null, |
| | | 患者门诊住院号: '', |
| | | 签到号: '', |
| | | 透析单医嘱列表: [], |
| | | iot_传输时间: "2025-01-10 19:15:24", |
| | | iot_当前脱水量: 2.04, |
| | | iot_脱水目标量: 3.3, |
| | |
| | | const wd = ref(""); |
| | | const ls = ref(""); |
| | | const ddd = ref(""); |
| | | const pageHeight = ref(0); |
| | | const isShowXY = computed(() => { |
| | | if (床旁血压计.value.zuihouTime > shishiTime.value) { |
| | | return true; |
| | |
| | | return false; |
| | | } |
| | | }); |
| | | |
| | | const patientSourceAndCode = computed(() => { |
| | | let res = ''; |
| | | if (deviceData.value.患者来源 === null) { |
| | | return '' |
| | | } else { |
| | | res = deviceData.value.患者来源 === 1 ? '住院号:' : '门诊号:'; |
| | | res += deviceData.value.患者门诊住院号; |
| | | } |
| | | return res; |
| | | }) |
| | | |
| | | watch( |
| | | () => isShowXY.value, |
| | | () => { |
| | |
| | | }); |
| | | // centerDialogVisible2.value=false |
| | | }; |
| | | |
| | | |
| | | // 状态颜色 |
| | | const zhuangtaiColor = computed(() => { |
| | | const list = deviceData.value.设备状态列表; |
| | |
| | | } |
| | | }); |
| | | } |
| | | |
| | | |
| | | return zhuantaiStr; |
| | | }); |
| | | const isbaioji = computed(() => { |
| | |
| | | backgroundSize: "cover", // 根据需要调整 |
| | | backgroundPosition: "center", // 根据需要调整 |
| | | }; |
| | | |
| | | |
| | | watch( |
| | | () => txzt.value, |
| | | () => { |
| | |
| | | let hours = Math.floor(totalSeconds / 3600); |
| | | let minutes = Math.floor((totalSeconds % 3600) / 60); |
| | | let seconds = totalSeconds % 60; |
| | | |
| | | |
| | | // 补零函数 |
| | | const pad = (num) => String(num).padStart(2, "0"); |
| | | |
| | | |
| | | return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`; |
| | | }; |
| | | |
| | | |
| | | const 倒计时 = ref(-100); |
| | | const 倒计时显示 = ref("00:00:00"); |
| | | const 倒计时告警文本 = ref(""); |
| | |
| | | centerDialogVisible.value = true; |
| | | } |
| | | intervalId = setInterval(updateTime, 1000); |
| | | const height = window.innerHeight; |
| | | pageHeight.value = height; |
| | | }); |
| | | // 在组件卸载前清除定时器,防止内存泄漏 |
| | | onBeforeUnmount(() => { |
| | |
| | | clearInterval(intervalId); |
| | | } |
| | | }); |
| | | |
| | | |
| | | const saveSet = () => { |
| | | if (deviceCode.value) { |
| | | centerDialogVisible.value = false; |
| | |
| | | ElMessage.warning("请先输入设备编号"); |
| | | } |
| | | }; |
| | | |
| | | |
| | | /** |
| | | * 刷新页面 |
| | | */ |
| | |
| | | const onFileChange = async (event: Event) => { |
| | | const inputElement = event.target as HTMLInputElement; |
| | | if (!inputElement.files || inputElement.files.length === 0) return; |
| | | |
| | | |
| | | const file = inputElement.files[0]; |
| | | const reader = new FileReader(); |
| | | |
| | | |
| | | reader.onload = async (e) => { |
| | | if (e.target && typeof e.target.result === "string") { |
| | | try { |
| | |
| | | } |
| | | } |
| | | }; |
| | | |
| | | |
| | | reader.readAsDataURL(file); |
| | | }; |
| | | const shaoma = () => {}; |
| | |
| | | // http://testbs.ihemodialysis.com/sse/sseEvent |
| | | // const test='http://testbs.ihemodialysis.com/sse/sseEvent/' |
| | | 数据初始化.value = true; |
| | | const test = "https://backend.ihemodialysis.com/sse/sseEvent/"; |
| | | const test = import.meta.env.VITE_SSE_BASE_URL; |
| | | const stateArr = [ |
| | | { key: 0, value: "正在链接中" }, |
| | | { key: 1, value: "已经链接并且可以通讯" }, |
| | |
| | | console.log(Date.now() + "DEV"); |
| | | if (dataBody?.透析状态) { |
| | | deviceData.value = dataBody?.透析状态; |
| | | if ('透析单医嘱列表' in dataBody.透析状态) { |
| | | deviceData.value.透析单医嘱列表 = dataBody.透析状态.透析单医嘱列表; |
| | | } else { |
| | | deviceData.value.透析单医嘱列表 = [] |
| | | } |
| | | if ('患者来源' in dataBody.透析状态) { |
| | | deviceData.value.患者来源 = dataBody.透析状态.患者来源; |
| | | } else { |
| | | deviceData.value.患者来源 = null |
| | | } |
| | | if ('患者门诊住院号' in dataBody.透析状态) { |
| | | deviceData.value.患者门诊住院号 = dataBody.透析状态.患者门诊住院号; |
| | | } else { |
| | | deviceData.value.患者门诊住院号 = '' |
| | | } |
| | | } else { |
| | | deviceData.value.设备名称 = dataBody.IOT信息.床号; |
| | | deviceData.value.患者姓名 = ""; |
| | |
| | | 当前客户耗材集合.value = dataBody?.使用耗材字典; |
| | | } |
| | | } |
| | | |
| | | |
| | | deviceData.value.设备变化 = Date.now() + "DEV"; |
| | | |
| | | |
| | | deviceData.value.属性历史列表 = dataBody?.IOT信息?.属性历史列表; |
| | | console.log(deviceData.value.设备变化); |
| | | deviceData.value.设备状态列表 = dataBody.IOT信息.状态列表; |
| | |
| | | ], |
| | | }, |
| | | }, |
| | | |
| | | |
| | | { |
| | | name: "", |
| | | type: "line", |
| | |
| | | label: { fontSize: 20, color: "#409EFF" }, |
| | | }); |
| | | seriesData[2].markPoint.data.push({ |
| | | name: "上机血压", |
| | | name: "上机压", |
| | | value: e.脉搏, |
| | | xAxis: index, |
| | | yAxis: e.脉搏, |
| | |
| | | const myChart = echarts.init( |
| | | proxy.$refs["echartsDiv" + deviceData.value.设备编号] |
| | | ); |
| | | |
| | | |
| | | const option = { |
| | | backgroundColor: |
| | | 床旁血压计.value.zuihouTime > shishiTime.value |
| | |
| | | tbdata1.push(Number(wdMode?.finalText)); |
| | | wd.value = Number(wdMode?.finalText); |
| | | } |
| | | |
| | | |
| | | // 血液流速 |
| | | const xymode = e.属性列表.find((l) => { |
| | | return l.identifierText === "血液流速"; |
| | |
| | | tbdata2.push(Number(xymode?.finalText)); |
| | | ls.value = Number(xymode?.finalText); |
| | | } |
| | | |
| | | |
| | | // 电导度 |
| | | const dddMode = e.属性列表.find((l) => { |
| | | return l.identifierText === "透析液电导度"; |
| | |
| | | } catch (e) { |
| | | console.log("图标渲染异常异常"); |
| | | } |
| | | |
| | | |
| | | console.log(deviceData.value); |
| | | } |
| | | }; |
| | |
| | | width: 100%; |
| | | height: 100%; |
| | | border: 1px solid coral; |
| | | user-select: none; |
| | | .toubu { |
| | | // padding-left: 20px; |
| | | width: 100%; |
| | |
| | | // border-bottom:8px solid red ; |
| | | } |
| | | } |
| | | |
| | | |
| | | /* 应用闪烁动画 */ |
| | | .blink { |
| | | // float: left; /* 让div浮动到左边 */ |
| | | width: 100%; |
| | | height: 100%; |
| | | animation: blink 2s infinite; /* 每秒闪烁一次,无限次数 */ |
| | | |
| | | |
| | | // border-left:5px solid red ; |
| | | // border-right:5px solid red ; |
| | | |
| | | |
| | | // background: red; |
| | | cursor: pointer; |
| | | // margin-bottom: 100%; |
| | |
| | | align-items: center; /* 垂直居中 */ |
| | | height: 100vh; /* 根据需要调整高度 */ |
| | | } |
| | | |
| | | |
| | | .centered-text { |
| | | font-weight: 600; |
| | | /* 其他样式 */ |
| | |
| | | height: 100%; |
| | | gap: 10px; /* 调整这个值来设置间隔 */ |
| | | } |
| | | |
| | | |
| | | .item-weiqiandao { |
| | | flex: 1; /* 确保每个子 div 占据相同的高度 */ |
| | | background-color: lightblue; /* 可以根据需要调整背景颜色 */ |
| | |
| | | width: 100%; /* 设置一个具体的宽度或确保有继承宽度 */ |
| | | font-weight: 600; |
| | | } |
| | | |
| | | |
| | | .right-div { |
| | | width: 50px; /* 固定宽度 */ |
| | | font-size: 16px; |
| | |
| | | height: 100%; |
| | | overflow-y: auto; /* 当内容超出容器高度时,垂直方向上显示滚动条 */ |
| | | } |
| | | |
| | | |
| | | /* 可选:给ul设置一些样式 */ |
| | | .scrollable-container ul { |
| | | list-style: none; |
| | | padding: 0; |
| | | margin: 0; |
| | | } |
| | | |
| | | |
| | | .scrollable-container li { |
| | | // padding: 4px; |
| | | font-weight: 600; |
| | | // border-bottom: 1px solid #ddd; |
| | | } |
| | | |
| | | |
| | | .cont_parent { |
| | | height: 100%; |
| | | display: grid; |
| | | grid-template-rows: repeat(3, 1fr); /* 将容器划分为3行,每行占1份 */ |
| | | gap: 5px; /* 子元素之间的间隙(可选) */ |
| | | } |
| | | |
| | | |
| | | .cont_child { |
| | | border: 1px solid #ccc; |
| | | padding: 10px; |
| | |
| | | .custom-dialog { |
| | | border-radius: 10px; |
| | | } |
| | | |
| | | |
| | | .my-header { |
| | | background-color: #ff6b6b; /* 标题背景颜色 */ |
| | | color: white; /* 标题文字颜色 */ |
| | |
| | | padding: 0; |
| | | padding-bottom: 10px; |
| | | } |
| | | </style> |
| | | </style> |