From 2b83d4d511401b7011e51170d8d7d25c2ca45c51 Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期一, 21 四月 2025 16:31:14 +0800
Subject: [PATCH] 更新识别提示

---
 src/views/deviceWindoes2.vue |  288 ++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 254 insertions(+), 34 deletions(-)

diff --git a/src/views/deviceWindoes2.vue b/src/views/deviceWindoes2.vue
index 35b94e9..3f651df 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>
@@ -482,7 +482,7 @@
         </div>
          <!-- 未签到 -->
         <div class="mowei" style="height: 39%;" v-if="Number(deviceData.透析状态) ===0">
-          <el-row gutter="20" style="height: 100%;">
+          <el-row gutter="20" style="height: 100%;padding:10px 20px 20px 20px;">
             <el-col :span="12" style="height: 100%;">
               <div class="container-weiqiandao" style="height: 100%;" >
                 <div class="item-weiqiandao" style="background: #FFEDD2;border-radius: 8px;">
@@ -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>
@@ -584,19 +584,168 @@
                 </div>
             </el-row>
         </div>
-
-        <div  style="height: 89%;width: 100%;background: #FEF0E1;;border-radius: 8px; font-size: 100px;">
-              <div style="height: 100%;">
-                <div class="container-cord" style="height: 100%;padding-left: 20PX;">
-                  <img style="width: 100px;"
-                    referrerpolicy="no-referrer"
-                    src="https://lanhu-oss.lanhuapp.com/SketchPng7d7c4e66d2f3fb56cb7c93cf3b359782ee05a12117f39e9b1836bff686aca428"
-                  />
-                  <span class="text-group_3" style="font-size: 100px;">等待患者排班</span>
+        <template v-if="!ispaiban">
+          <div  class="chongjian" style="height: 50%;">
+            <el-row :gutter="20" style="height: 100%; padding: 20px;">
+              <el-col :span="7" style="height: 100%;">
+                <div  class="container-weiqiandao" style="height: 100%">
+                  <div class="item-weiqiandao" style="background: #FFEDD2;border-radius: 8px;height: 100%;">
+                    <div class="container-cord" style="height: 30px;">
+                      <img style="width: 25px;" referrerpolicy="no-referrer" :src="tsl"
+                      />
+                      <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%;">
+                          <ul>
+                            <li v-for="(item,index) in 当前客户耗材集合.抗凝剂" :key="index">
+                              {{item}}
+                            </li>
+                          
+                          </ul>
+                        </div>
+                    </div>
+                  </div>
                 </div>
-                
-              </div>
+              </el-col>
+              <el-col :span="10">
+                <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-group_3">透析方案</span>
+                    </div>
+                    <div class="grid-container" style="height: calc(100% - 30px);width: 100%;">
+                      <div class="container-body-text" style="color: #3A75B8;">
+                        <template v-for="(item,index) in 当前客户耗材集合.透析模式" :key="index">
+                          <span> {{item}}</span><template v-if="当前客户耗材集合.透析模式.length>index+1">,</template>
+                        </template>
+                        
+                      </div>
+                    </div>
+                  </div>
+                  <div class="item-weiqiandao" style="background: #D9F0E2;border-radius: 8px;height: 100%;">
+                    <div class="container-cord" style="height: 30px;">
+                      <img style="width: 25px;" referrerpolicy="no-referrer" :src="tsl"
+                      />
+                      <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;">
+                          <ul>
+                            <li v-for="(item,index) in 当前客户耗材集合.管路" :key="index">
+                              {{item}}
+                            </li>
+                          
+                          </ul>
+                        </div>
+                    </div>
+                  </div>
+                  <div class="item-weiqiandao" style="background: #F9DEDE;border-radius: 8px;height: 100%;">
+                    <div class="container-cord" style="height: 30px;">
+                      <img style="width: 25px;" referrerpolicy="no-referrer" :src="tsl"
+                      />
+                      <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: #902D2D;">
+                          <ul>
+                            <li v-for="(item,index) in 当前客户耗材集合.护理包" :key="index">
+                              {{item}}
+                            </li>
+                          
+                          </ul>
+                        </div>
+                    </div>
+                  </div>
+                </div>
+              </el-col>
+              <el-col :span="7" style="height: 100%;">
+                <div  class="container-weiqiandao" style="height: 100%">
+                  <div class="item-weiqiandao" style="background: #EFE5FF;border-radius: 8px;height: 100%;">
+                    <div class="container-cord" style="height: 30px;">
+                      <img style="width: 25px;" referrerpolicy="no-referrer" :src="tsl"
+                      />
+                      <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: #A78718;">
+                          <ul>
+                            <li v-for="(item,index) in 当前客户耗材集合.穿刺针" :key="index">
+                              {{item}}
+                            </li>
+                          
+                          </ul>
+                        </div>
+                    </div>
+                  </div>
+                </div>
+              </el-col>
+            </el-row>
+          </div>
+          <div  class="mowei" style="height: 39%;">
+            <el-row :gutter="20" style="height: 100%;padding:10px 20px 20px 20px;">
+              <el-col :span="12" style="height: 100%">
+                <div  class="container-weiqiandao" style="height: 100%">
+                  <div class="item-weiqiandao" style="background: #F6F5FA;border-radius: 8px;height: 100%;">
+                    <div class="container-cord" style="height: 30px;">
+                      <img style="width: 25px;" referrerpolicy="no-referrer" :src="tsl"
+                      />
+                      <span class="text-group_3">血液透析器</span>
+                    </div>
+                    <div class="grid-container" style="height: calc(100% - 30px);width: 100%;">
+                      <div  style="height: 100%;color: #333333;font-weight: 600;">
+                          <div>
+                            <span v-for="(item,index) in 当前客户耗材集合.透析器" :key="index" style="margin-right: 10px">
+                              {{item}}<template v-if="当前客户耗材集合.透析器.length>index+1">,</template>
+                            </span>
+                          
+                          </div>
+                        </div>
+                    </div>
+                  </div>
+                </div>
+              </el-col>
+              <el-col :span="12">
+                <div  class="container-weiqiandao" style="height: 100%">
+                  <div class="item-weiqiandao" style="background: #F6F5FA;border-radius: 8px;height: 100%;">
+                    <div class="container-cord" style="height: 30px;">
+                      <img style="width: 25px;" referrerpolicy="no-referrer" :src="tsl"
+                      />
+                      <span class="text-group_3">血液透析滤过器</span>
+                    </div>
+                    <div class="grid-container" style="height: calc(100% - 30px);width: 100%;">
+                      <div style="height: 100%;color: #333333;font-weight: 600;">
+                        <div>
+                            <span v-for="(item,index) in 当前客户耗材集合.滤过器" :key="index" style="margin-right: 10px">
+                              {{item}}<template v-if="当前客户耗材集合.滤过器.length>index+1">,</template>
+                            </span>
+                          
+                          </div>
+                        </div>
+                    </div>
+                  </div>
+                </div>
+              </el-col>
+            </el-row>
+          </div>
+        </template>
+        <template v-else>
+          <div   style="height: 89%;width: 100%;background: #FEF0E1;;border-radius: 8px; font-size: 100px;">
+          <div style="height: 100%;">
+            <div class="container-cord" style="height: 100%;padding-left: 20PX;">
+              <img style="width: 100px;"
+                referrerpolicy="no-referrer"
+                src="https://lanhu-oss.lanhuapp.com/SketchPng7d7c4e66d2f3fb56cb7c93cf3b359782ee05a12117f39e9b1836bff686aca428"
+              />
+              <span class="text-group_3" style="font-size: 100px;">等待患者排班</span>
             </div>
+            
+          </div>
+        </div>
+        </template>
+       
       </div>
       <el-dialog
       :show-close="false"
@@ -611,12 +760,16 @@
           <el-space fill>
             <el-alert type="warning" show-icon :closable="false">
               <p>"请输入设备编号后才能使用不然无法定位到数据来源:</p>
+              <p>也可以选择二维码图片文件识别</p>
             </el-alert>
             <el-form-item label="设备编号">
               <el-input v-model="deviceCode" />
             </el-form-item>
           </el-space>
         </el-form>
+        <div>
+          <input type="file" pattern="选取二维码" accept="image/*" @change="onFileChange"  />
+        </div>
       </span>
       <template #footer>
         <div class="dialog-footer">
@@ -633,6 +786,7 @@
     
   </template>
   <script lang="ts" setup>
+  import { BrowserMultiFormatReader, NotFoundException, ChecksumException, FormatException } from '@zxing/library';
   import TQS88 from "../img/TQS88.png";
   import shezhi from '../img/shezhi.png'
   import xinlv from '../img/xinlv.png'
@@ -651,6 +805,7 @@
   const { proxy } = getCurrentInstance() as any;
   // 在需要使用的组件中引入
   import { ChatDotSquare } from '@element-plus/icons-vue';
+  const ispaiban=ref(false)
   import { ElMessage } from "element-plus";
   // 连接服务器
   const source = ref<EventSourcePolyfill | null>(null);
@@ -669,6 +824,7 @@
     dbp:'111',
     zuihouTime:new Date()
   })
+  const 当前客户耗材集合=ref({})
   const deviceData = ref({
     iot_传输时间: "2025-01-10 19:15:24",
     iot_当前脱水量: 2.04,
@@ -832,8 +988,10 @@
     ],
   });
   // 告警提示
-  const textbaojing = ref("");
-  const iscomfig = ref(false);
+  // 识别窗口
+  const video = ref<HTMLVideoElement | null>(null);
+  // 识别数据流
+  let stream: MediaStream | null = null;
   const centerDialogVisible = ref(false);
   const background = ref("");
   const txztText = ref("");
@@ -1025,6 +1183,39 @@
       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 {
+          const codeReader = new BrowserMultiFormatReader();
+          const result = await codeReader.decodeFromImage(undefined, e.target.result);
+          deviceCode.value = result.text;
+          ElMessage.success('识别成功')
+        } catch (err) {
+          if (err instanceof NotFoundException) {
+            ElMessage.error("未找到二维码");
+          } else if (err instanceof ChecksumException) {
+            ElMessage.error("校验错误");
+          } else if (err instanceof FormatException) {
+            ElMessage.error("格式错误");
+          } else {
+            ElMessage.error("识别错误请重新识别");
+            console.error(err);
+          }
+        }
+      }
+    };
+
+    reader.readAsDataURL(file);
+  }
+  const shaoma=()=>{
+  }
   watch(
     () => deviceData.value.设备变化,
     () => {
@@ -1093,6 +1284,9 @@
                       }else{
                         deviceData.value.设备名称=dataBody.IOT信息.床号
                         deviceData.value.患者姓名=''
+                        if(dataBody?.使用耗材字典){
+                          当前客户耗材集合.value=dataBody?.使用耗材字典
+                        }
                       }
                       
                       deviceData.value.设备变化=Date.now() + 'DEV'
@@ -1714,14 +1908,14 @@
       margin-left:10px;
           font-family: PingFangSC, PingFang SC;
           font-weight: 600;
-          font-size: 20px;
+          font-size: 16px;
       }
   }
   .container-weiqiandao {
     display: flex;
     flex-direction: column;
     height: 100%;
-    gap: 20px; /* 调整这个值来设置间隔 */
+    gap: 10px; /* 调整这个值来设置间隔 */
 }
 
 .item-weiqiandao {
@@ -1750,13 +1944,39 @@
 }
   .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; /* 垂直居中 */
     
     
   }
+  /* 设置你的div占据整个高度,并在需要时显示滚动条 */
+.scrollable-container {
+  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;
+}
   
   </style>
\ No newline at end of file

--
Gitblit v1.8.0