From c587f3499ca5eebf81374cf77ed1e0694f8c236b Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期一, 21 四月 2025 15:13:05 +0800
Subject: [PATCH] gx

---
 src/views/deviceWindoes2.vue |  105 ++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 81 insertions(+), 24 deletions(-)

diff --git a/src/views/deviceWindoes2.vue b/src/views/deviceWindoes2.vue
index e7ba648..1ed4985 100644
--- a/src/views/deviceWindoes2.vue
+++ b/src/views/deviceWindoes2.vue
@@ -123,7 +123,7 @@
                                 <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>
                                  
@@ -135,8 +135,8 @@
                               />
                               <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>
@@ -148,8 +148,8 @@
                               />
                               <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>
@@ -167,7 +167,7 @@
                             <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>  
@@ -178,8 +178,8 @@
                             />
                             <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>
@@ -491,8 +491,8 @@
                     />
                     <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>
@@ -504,8 +504,8 @@
                     />
                     <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>
@@ -522,8 +522,8 @@
                     />
                     <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>
@@ -535,8 +535,8 @@
                     />
                     <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>
@@ -632,7 +632,7 @@
                       <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}}
@@ -766,10 +766,15 @@
             </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>
@@ -793,6 +798,7 @@
   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";
@@ -983,8 +989,12 @@
     ],
   });
   // 告警提示
-  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("");
@@ -1176,6 +1186,46 @@
       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.设备变化,
     () => {
@@ -1190,8 +1240,8 @@
   //创建链接对象
   const creatSource = () => {
     // http://testbs.ihemodialysis.com/sse/sseEvent
-    // const test='http://testbs.ihemodialysis.com/sse/sseEvent/'
-    const test='https://backend.ihemodialysis.com/sse/sseEvent/'
+    const test='http://testbs.ihemodialysis.com/sse/sseEvent/'
+    // const test='https://backend.ihemodialysis.com/sse/sseEvent/'
           const stateArr = [
           { key: 0, value: "正在链接中" },
           { key: 1, value: "已经链接并且可以通讯" },
@@ -1868,7 +1918,7 @@
       margin-left:10px;
           font-family: PingFangSC, PingFang SC;
           font-weight: 600;
-          font-size: 20px;
+          font-size: 16px;
       }
   }
   .container-weiqiandao {
@@ -1904,12 +1954,19 @@
 }
   .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; /* 垂直居中 */
     
     
   }

--
Gitblit v1.8.0