单应用项目,可以创建很多独立工具类页面 ,不用登录 初始化的页面
gx
chenyc
2025-04-21 c587f3499ca5eebf81374cf77ed1e0694f8c236b
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>
@@ -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("");
@@ -1175,6 +1185,46 @@
    }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.设备变化,
@@ -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; /* 垂直居中 */
    
    
  }