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

---
 src/views/deviceWindoes2.vue |   70 +++++++++++++++-------------------
 1 files changed, 31 insertions(+), 39 deletions(-)

diff --git a/src/views/deviceWindoes2.vue b/src/views/deviceWindoes2.vue
index 1ed4985..73455ef 100644
--- a/src/views/deviceWindoes2.vue
+++ b/src/views/deviceWindoes2.vue
@@ -760,21 +760,21 @@
           <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>
-        <video ref="video" width="300" height="300" autoplay></video>
-        <input type="text" v-model="codeResult" placeholder="扫描结果将会显示在这里">
+        <div>
+          <input type="file" pattern="选取二维码" accept="image/*" @change="onFileChange"  />
+          <input type="text" v-model="codeResult" placeholder="扫描结果将会显示在这里">
+        </div>
       </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>
@@ -1186,45 +1186,37 @@
       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 onFileChange=(event: Event) =>{
+    const inputElement = event.target as HTMLInputElement;
+    if (!inputElement.files || inputElement.files.length === 0) return;
 
-    // 解析二维码
-    const code = jsQR(imageData.data, imageData.width, imageData.height);
-    if (code) {
-      codeResult.value = code.data;
-    }
+    const file = inputElement.files[0];
+    const reader = new FileReader();
 
-    // 定期捕获帧
-    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();
+    reader.onload = function(e) {
+      if (e.target && typeof e.target.result === 'string') {
+        const img = document.createElement('img');
+        img.src = e.target.result;
+        img.onload = function() {
+          const canvas = document.createElement('canvas');
+          canvas.width = img.width;
+          canvas.height = img.height;
+          const ctx = canvas.getContext('2d');
+          if (ctx) {
+            ctx.drawImage(img, 0, 0);
+            const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
+            const code = jsQR(imageData.data, imageData.width, imageData.height);
+            if (code) {
+              codeResult.value = code.data;
+            }
+          }
+        };
       }
-    } catch (e) {
-      console.error("无法访问摄像头", e);
-    }
+    };
+
+    reader.readAsDataURL(file);
   }
-}
   const shaoma=()=>{
-    startCamera()
   }
   watch(
     () => deviceData.value.设备变化,

--
Gitblit v1.8.0