| | |
| | | <span class="text-group_3">治疗模式</span> |
| | | </div> |
| | | <div class="container-body" style="height: calc(100% - 30px);width: 100%;"> |
| | | <div class="container-body-text" style="color: #3A75B8;"> |
| | | <div class="container-body-text" style="color: #3A75B8;font-size: 30px;" > |
| | | <span style="font-size: 30px;" v-if="deviceData.透析方案 ==='HDF'"> {{deviceData?.置换方式==='前置换'?'前':'后'}}</span> {{ deviceData.透析方案 }} |
| | | </div> |
| | | |
| | |
| | | /> |
| | | <span class="text-group_3">人工肾</span> |
| | | </div> |
| | | <div class="grid-container" style="height: calc(100% - 30px);width: 100%;font-size: 40px;"> |
| | | <div class="grid-container-text" style="color: #A78718;" v-for="(item,index) in deviceData.透析器列表" :key="index"> |
| | | <div class="grid-container" style="height: calc(100% - 30px);width: 100%;font-size: 28px;"> |
| | | <div class="grid-container-text" style="color: #A78718;" v-for="(item,index) in deviceData.透析器列表" :style="{fontSize:deviceData.透析器列表.length>1?'22px':'28px'}" :key="index"> |
| | | <div class="left-div">{{item.name}}</div> |
| | | <div class="right-div">{{item.数量}}{{item.单位}}</div> |
| | | </div> |
| | |
| | | /> |
| | | <span class="text-group_3">一次性循环管路</span> |
| | | </div> |
| | | <div class="grid-container" style="height: calc(100% - 30px);width: 100%;font-size: 40px;"> |
| | | <div class="grid-container-text" style="color: #3AB859;" v-for="(item,index) in deviceData.管路列表" :key="index"> |
| | | <div class="grid-container" style="height: calc(100% - 30px);width: 100%;font-size: 28px;"> |
| | | <div class="grid-container-text" style="color: #3AB859;" v-for="(item,index) in deviceData.管路列表" :style="{fontSize:deviceData.管路列表.length>1?'22px':'28px'}" :key="index"> |
| | | <div class="left-div">{{item.name}}</div> |
| | | <div class="right-div">{{item.数量}}支</div> |
| | | </div> |
| | |
| | | <span class="text-group_3">治疗状态</span> |
| | | </div> |
| | | <div class="container-body" style="height: calc(100% - 30px);width: 100%;"> |
| | | <div class="container-body-text" style="color: #333333; font-size: 60px;"> |
| | | <div class="container-body-text" style="color: #333333; font-size: 50px;"> |
| | | {{txztText}} |
| | | </div> |
| | | </div> |
| | |
| | | /> |
| | | <span class="text-group_3">透析液</span> |
| | | </div> |
| | | <div class="grid-container" style="height: calc(100% - 30px);width: 100%;font-size: 40px;"> |
| | | <div class="grid-container-text" style="color: #3AB859;" v-for="(item,index) in deviceData.透析液列表" :key="index"> |
| | | <div class="grid-container" style="height: calc(100% - 30px);width: 100%;font-size: 28px;"> |
| | | <div class="grid-container-text" style="color: #3AB859;" :style="{fontSize:deviceData.透析液列表.length>1?'22px':'28px'}" v-for="(item,index) in deviceData.透析液列表" :key="index"> |
| | | <div class="left-div">{{item.name}}</div> |
| | | <div class="right-div">{{item.数量}}{{item.单位}}</div> |
| | | </div> |
| | |
| | | /> |
| | | <span class="text-group_3">抗凝剂</span> |
| | | </div> |
| | | <div class="grid-container" style="height: calc(100% - 30px);width: 100%;font-size: 40px;"> |
| | | <div class="grid-container-text" style="color: #A78718;" v-for="(item,index) in deviceData.抗凝剂列表" :key="index"> |
| | | <div class="grid-container" style="height: calc(100% - 30px);width: 100%;"> |
| | | <div class="grid-container-text" style="color: #A78718;" v-for="(item,index) in deviceData.抗凝剂列表" :style="{fontSize:deviceData.抗凝剂列表.length>1?'22px':'28px'}" :key="index"> |
| | | <div class="left-div">{{item.name}}</div> |
| | | <div class="right-div">{{item.数量}}{{item.单位}}</div> |
| | | </div> |
| | |
| | | /> |
| | | <span class="text-group_3">穿刺针</span> |
| | | </div> |
| | | <div class="grid-container" style="height: calc(100% - 30px);width: 100%;font-size: 40px;"> |
| | | <div class="grid-container-text" style="color: #A78718;" v-for="(item,index) in deviceData.穿刺针列表" :key="index"> |
| | | <div class="grid-container" style="height: calc(100% - 30px);width: 100%;font-size: 25px;"> |
| | | <div class="grid-container-text" style="color: #A78718;" v-for="(item,index) in deviceData.穿刺针列表" :style="{fontSize:deviceData.穿刺针列表.length>1?'22px':'28px'}" :key="index"> |
| | | <div class="left-div">{{item.name}}</div> |
| | | <div class="right-div">{{item.数量}}支</div> |
| | | </div> |
| | |
| | | /> |
| | | <span class="text-group_3">一次性使用透析护理包</span> |
| | | </div> |
| | | <div class="grid-container" style="height: calc(100% - 30px);width: 100%;font-size: 40px;"> |
| | | <div class="grid-container-text" style="color: #1D77BD;" v-for="(item,index) in deviceData.护理包列表" :key="index"> |
| | | <div class="grid-container" style="height: calc(100% - 30px);width: 100%;font-size: 28px;"> |
| | | <div class="grid-container-text" style="color: #1D77BD;" v-for="(item,index) in deviceData.护理包列表" :style="{fontSize:deviceData.护理包列表.length>1?'22px':'28px'}" :key="index"> |
| | | <div class="left-div">{{item.name}}</div> |
| | | <div class="right-div">{{item.数量}}{{item.单位}}</div> |
| | | </div> |
| | |
| | | /> |
| | | <span class="text-group_3">血管通路</span> |
| | | </div> |
| | | <div class="grid-container" style="height: calc(100% - 30px);width: 100%;font-size: 40px;"> |
| | | <div class="grid-container-text" style="color: #1D77BD;" v-for="(item,index) in deviceData.血管通路列表" :key="index"> |
| | | <div class="grid-container" style="height: calc(100% - 30px);width: 100%;font-size: 28px;"> |
| | | <div class="grid-container-text" style="color: #1D77BD;" v-for="(item,index) in deviceData.血管通路列表" :style="{fontSize:deviceData.血管通路列表.length>1?'22px':'28px'}" :key="index"> |
| | | <div class="left-div">{{item.类型}}</div> |
| | | <div class="right-div" style="width: 200px;">{{item.位置}}</div> |
| | | </div> |
| | |
| | | <span class="text-group_3">一次性血液透析体外循环管路</span> |
| | | </div> |
| | | <div class="grid-container" style="height: calc(100% - 30px);width: 100%;"> |
| | | <div class="scrollable-container" style="height: 100%;color: #3AB859;"> |
| | | <div class="scrollable-container" style="height: 100%;color: #3AB859;"> |
| | | <ul> |
| | | <li v-for="(item,index) in 当前客户耗材集合.管路" :key="index"> |
| | | {{item}} |
| | |
| | | </el-form-item> |
| | | </el-space> |
| | | </el-form> |
| | | <video ref="video" width="300" height="300" autoplay></video> |
| | | <input type="text" v-model="codeResult" placeholder="扫描结果将会显示在这里"> |
| | | </span> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button @click="centerDialogVisible = false">取消</el-button> |
| | | <el-button type="primary" @click="shaoma"> |
| | | 扫码录入 |
| | | </el-button> |
| | | <el-button type="primary" @click="saveSet"> |
| | | 确认 |
| | | </el-button> |
| | |
| | | import cljd from '../img/cljd.png' |
| | | import tizhong from '../img/tizhong.png' |
| | | import {EventSourcePolyfill} from 'event-source-polyfill'; |
| | | import jsQR from 'jsqr'; |
| | | import { computed, getCurrentInstance, onBeforeMount, onMounted, ref, watch, watchEffect } from "vue"; |
| | | import { Local } from '../utils/storage'; |
| | | import * as echarts from "echarts"; |
| | |
| | | ], |
| | | }); |
| | | // 告警提示 |
| | | const textbaojing = ref(""); |
| | | const iscomfig = ref(false); |
| | | // 识别窗口 |
| | | const video = ref<HTMLVideoElement | null>(null); |
| | | // 识别文本 |
| | | const codeResult = ref<string>(''); |
| | | // 识别数据流 |
| | | let stream: MediaStream | null = null; |
| | | const centerDialogVisible = ref(false); |
| | | const background = ref(""); |
| | | const txztText = ref(""); |
| | |
| | | }else{ |
| | | ElMessage.warning('请先输入设备编号') |
| | | } |
| | | } |
| | | function captureFrame() { |
| | | if (!video.value) return; |
| | | |
| | | const canvas = document.createElement('canvas'); |
| | | const context = canvas.getContext('2d'); |
| | | if (!context || !video.value) return; |
| | | |
| | | canvas.width = video.value.videoWidth; |
| | | canvas.height = video.value.videoHeight; |
| | | context.drawImage(video.value, 0, 0, canvas.width, canvas.height); |
| | | const imageData = context.getImageData(0, 0, canvas.width, canvas.height); |
| | | |
| | | // 解析二维码 |
| | | const code = jsQR(imageData.data, imageData.width, imageData.height); |
| | | if (code) { |
| | | codeResult.value = code.data; |
| | | } |
| | | |
| | | // 定期捕获帧 |
| | | setTimeout(captureFrame, 500); |
| | | } |
| | | const startCamera=async()=> { |
| | | if (video.value) { |
| | | try { |
| | | stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: "environment" } }); |
| | | if (video.value) { |
| | | video.value.srcObject = stream; |
| | | video.value.play(); |
| | | |
| | | // 开始捕获帧 |
| | | captureFrame(); |
| | | } |
| | | } catch (e) { |
| | | console.error("无法访问摄像头", e); |
| | | } |
| | | } |
| | | } |
| | | const shaoma=()=>{ |
| | | startCamera() |
| | | } |
| | | watch( |
| | | () => deviceData.value.设备变化, |
| | |
| | | margin-left:10px; |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 600; |
| | | font-size: 20px; |
| | | font-size: 16px; |
| | | } |
| | | } |
| | | .container-weiqiandao { |
| | |
| | | } |
| | | .left-div { |
| | | flex-grow: 1; /* 自适应宽度,占满剩余空间 */ |
| | | white-space: nowrap; /* 防止文字自动换行 */ |
| | | overflow: hidden; /* 隐藏超出容器宽度的内容 */ |
| | | text-overflow: ellipsis; /* 当文本溢出时显示省略号 */ |
| | | width: 100%; /* 设置一个具体的宽度或确保有继承宽度 */ |
| | | font-weight: 600; |
| | | } |
| | | |
| | | .right-div { |
| | | width: 120px; /* 固定宽度 */ |
| | | text-align: center; /* 可选:文本居中 */ |
| | | width: 50px; /* 固定宽度 */ |
| | | font-size: 16px; |
| | | display: flex; |
| | | justify-content: center; /* 水平居中 */ |
| | | align-items: center; /* 垂直居中 */ |
| | | |
| | | |
| | | } |