From 5a5fa07eb8f4b96dc1978718b69fff536313be17 Mon Sep 17 00:00:00 2001
From: Fixiaobai <fixiaobai@163.com>
Date: 星期四, 14 十二月 2023 22:58:56 +0800
Subject: [PATCH] 	modified:   package.json 	new file:   src/views/common/qrCodeApp.vue 	deleted:    src/views/quality/rawMaterial/QrcodeReader.vue 	modified:   src/views/quality/rawMaterial/rawMaterial-form.vue

---
 src/views/quality/rawMaterial/rawMaterial-form.vue |   45 ++++--
 /dev/null                                          |   76 ----------
 package.json                                       |    2 
 src/views/common/qrCodeApp.vue                     |  245 +++++++++++++++++++++++++++++++++++
 4 files changed, 275 insertions(+), 93 deletions(-)

diff --git a/package.json b/package.json
index 1bd2008..56764cc 100644
--- a/package.json
+++ b/package.json
@@ -45,7 +45,7 @@
     "vue-json-editor": "^1.2.3",
     "vue-json-tree-view": "^2.1.4",
     "vue-qr": "^4.0.9",
-    "vue-qrcode-reader": "^5.4.1",
+    "vue-qrcode-reader": "^3.1.0",
     "vue-quill-editor": "3.0.6",
     "vue-router": "^3.0.2",
     "vuedraggable": "^2.24.3",
diff --git a/src/views/common/qrCodeApp.vue b/src/views/common/qrCodeApp.vue
new file mode 100644
index 0000000..c50d1d4
--- /dev/null
+++ b/src/views/common/qrCodeApp.vue
@@ -0,0 +1,245 @@
+<template>
+    <div class="scan" style="height: 100%; width: 100%;">
+        <qrcode-stream v-show="isShow" :camera="camera" @decode="onDecode" @init="onInit"
+            style="height: 100%;">
+            <div>
+                <div class="qr-scanner">
+                    <div style="display: flex;justify-content: end;">
+                        <el-button plain @click="switchCamera">鍙嶈浆鐩告満</el-button>
+                        <el-button plain @click="cancelCode">閫�鍑烘壂鐮�</el-button>
+                    </div>
+                    <div class="box">
+                        <div class="line"></div>
+                        <div class="angle"></div>
+                    </div>
+                </div>
+            </div>
+        </qrcode-stream>
+    </div>
+</template>
+<script>
+// 涓嬭浇鎻掍欢
+// cnpm install --save  vue-qrcode-reader
+// 寮曞叆
+import { QrcodeStream } from "vue-qrcode-reader";
+export default {
+    name: "codeCompont",
+    // 娉ㄥ唽
+    components: { QrcodeStream },
+    data() {
+        return {
+            isShow: true,
+            camera: "front",
+            result: "", // 鎵爜缁撴灉淇℃伅
+            error: "" // 閿欒淇℃伅
+        };
+    },
+    created() { },
+    methods: {
+        openCamera(){
+            this.camera="front"
+        },
+        //鍥炶皟鎵弿缁撴灉
+        onDecode(result) {
+            console.log(result);
+            if (result !== "") {
+                this.$emit("onDecode", result);
+                alert(result)
+            }
+        },
+        // 鐩告満鍙嶈浆
+        switchCamera() {
+            switch (this.camera) {
+                //鍓嶇疆
+                case 'front':
+                    //杞�
+                    this.camera = 'rear'
+                    break
+                    //鍙嶄箣
+                case 'rear':
+                    this.camera = 'front'
+                    break
+                default:
+                    this.$toast('閿欒')
+            }
+        },
+        // 鍏抽棴鐩告満
+        turnCameraOff() {
+            this.camera = 'off'
+        },
+        cancelCode() {
+            this.turnCameraOff()
+            this.$emit("cancelCodeDialog")
+        },
+        // 妫�鏌ユ槸鍚﹁皟鐢ㄦ憚鍍忓ご
+        async onInit(promise) {
+            try {
+                const { capabilities } = await promise;
+                console.log(
+                    "馃殌 ~ file: cameracomponent.vue:47 ~ onInit ~ capabilities",
+                    capabilities
+                );
+            } catch (error) {
+                // console.log()
+                this.$toast(error.name);
+                if (error.name === "NotAllowedError") {
+                    this.error = "ERROR: 鎮ㄩ渶瑕佹巿浜堢浉鏈鸿闂潈闄�";
+                } else if (error.name === "NotFoundError") {
+                    this.error = "ERROR: 杩欎釜璁惧涓婃病鏈夋憚鍍忓ご";
+                } else if (error.name === "NotSupportedError") {
+                    this.error = "ERROR: 鎵�闇�鐨勫畨鍏ㄤ笂涓嬫枃(HTTPS銆佹湰鍦颁富鏈�)";
+                } else if (error.name === "NotReadableError") {
+                    this.error = "ERROR: 鐩告満琚崰鐢�";
+                } else if (error.name === "OverconstrainedError") {
+                    this.error = "ERROR: 瀹夎鎽勫儚澶翠笉鍚堥��";
+                } else if (error.name === "StreamApiNotSupportedError") {
+                    this.error = "ERROR: 姝ゆ祻瑙堝櫒涓嶆敮鎸佹祦API";
+                } else if (error.name === "InsecureContextError") {
+                    this.error =
+                        "ERROR: 浠呭厑璁稿湪瀹夊叏涓婁笅鏂囦腑璁块棶鎽勫儚鏈恒�備娇鐢℉TTPS鎴栨湰鍦颁富鏈猴紝鑰屼笉鏄疕TTP銆�";
+                } else {
+                    this.error = "ERROR:鎽勫儚鏈洪敊璇�";
+                }
+
+                this.$emit("err", this.error);
+            }
+        }
+    },
+    watch: {
+        "result": {
+            handler(newVal) {
+                console.log('鎵弿鍊�' + newVal);
+            },
+            deep: true
+        }
+    }
+};
+</script>
+<style scoped>
+.error {
+    font-weight: bold;
+    color: red;
+}
+</style>
+<style scoped>
+.scan {
+    width: 100%;
+    height: 100%;
+    border-color: #585858;
+    position: fixed;
+    top: 0;
+    left: 0;
+}
+
+.qrcode-stream-camera {
+    width: 100%;
+    height: 100%;
+    display: block;
+    -o-object-fit: cover;
+    object-fit: cover;
+    position: absolute;
+    top: 0%;
+    left: 0%;
+}
+
+.qr-scanner {
+    background-image: linear-gradient(0deg,
+            transparent 24%,
+            rgba(32, 255, 77, 0.1) 25%,
+            rgba(32, 255, 77, 0.1) 26%,
+            transparent 27%,
+            transparent 74%,
+            rgba(32, 255, 77, 0.1) 75%,
+            rgba(32, 255, 77, 0.1) 76%,
+            transparent 77%,
+            transparent),
+        linear-gradient(90deg,
+            transparent 24%,
+            rgba(32, 255, 77, 0.1) 25%,
+            rgba(32, 255, 77, 0.1) 26%,
+            transparent 27%,
+            transparent 74%,
+            rgba(32, 255, 77, 0.1) 75%,
+            rgba(32, 255, 77, 0.1) 76%,
+            transparent 77%,
+            transparent);
+    background-size: 3rem 3rem;
+    background-position: -1rem -1rem;
+    width: 100%;
+    /* height: 100%; */
+    height: 100vh;
+    position: relative;
+    /* background-color: #1110;*/
+
+    /* background-color: #111; */
+}
+
+.qr-scanner .box {
+    width: 213px;
+    height: 213px;
+    position: absolute;
+    left: 50%;
+    top: 50%;
+    transform: translate(-50%, -50%);
+    overflow: hidden;
+    border: 0.1rem solid rgba(0, 255, 51, 0.2);
+    /* background: url('http://resource.beige.world/imgs/gongconghao.png') no-repeat center center; */
+}
+
+.qr-scanner .line {
+    height: calc(100% - 2px);
+    width: 100%;
+    /* background: linear-gradient(180deg, rgba(0, 255, 51, 0) 43%, #00ff33 211%); */
+    border-bottom: 3px solid #00ff33;
+    transform: translateY(-100%);
+    animation: radar-beam 2s infinite alternate;
+    animation-timing-function: cubic-bezier(0.53, 0, 0.43, 0.99);
+    animation-delay: 1.4s;
+}
+
+.qr-scanner .box:after,
+.qr-scanner .box:before,
+.qr-scanner .angle:after,
+.qr-scanner .angle:before {
+    content: "";
+    display: block;
+    position: absolute;
+    width: 3vw;
+    height: 3vw;
+    border: 0.2rem solid transparent;
+}
+
+.qr-scanner .box:after,
+.qr-scanner .box:before {
+    top: 0;
+    border-top-color: #00ff33;
+}
+
+.qr-scanner .angle:after,
+.qr-scanner .angle:before {
+    bottom: 0;
+    border-bottom-color: #00ff33;
+}
+
+.qr-scanner .box:before,
+.qr-scanner .angle:before {
+    left: 0;
+    border-left-color: #00ff33;
+}
+
+.qr-scanner .box:after,
+.qr-scanner .angle:after {
+    right: 0;
+    border-right-color: #00ff33;
+}
+
+@keyframes radar-beam {
+    0% {
+        transform: translateY(-100%);
+    }
+
+    100% {
+        transform: translateY(0);
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/quality/rawMaterial/QrcodeReader.vue b/src/views/quality/rawMaterial/QrcodeReader.vue
deleted file mode 100644
index ddf5450..0000000
--- a/src/views/quality/rawMaterial/QrcodeReader.vue
+++ /dev/null
@@ -1,76 +0,0 @@
-<template>
-    <div class="qrcode">
-      <div class="code">
-        <!-- decode鏄壂鎻忕粨鏋滅殑鍑芥暟锛宼orch鐢ㄤ簬鏄惁闇�瑕佹墦寮�鎵嬬數绛掞紝init鐢ㄤ簬妫�鏌ヨ璁惧鏄惁鑳藉璋冪敤鎽勫儚澶寸殑鏉冮檺锛宑amera鍙敤浜庢墦寮�鍓嶉潰鎴栬�呭悗闈㈡憚鍍忓ご  -->
-        <qrcode-drop-zone @decode="onDecode">
-          <qrcode-stream @decode="onDecode" :torch="torchActive" @init="onInit" :camera="camera" />
-        </qrcode-drop-zone>
-        <div class="code-button">
-          <button @click="switchCamera">鐩告満鍙嶈浆</button>
-          <button @click="ClickFlash">鎵撳紑鎵嬬數绛�</button>
-          <button @click="turnCameraOff">鍏抽棴鐩告満</button>
-        </div>
-      </div>
-    </div>
-  </template>
-  
-  <script>
-  // 寮曠敤vue-qrcode-reader鎻掍欢
-  import { QrcodeStream, QrcodeDropZone, QrcodeCapture } from 'vue-qrcode-reader'
-  
-  export default {
-    name: 'Approve',
-    props: {
-      camera: {
-        type: String,
-        default: 'rear',
-      },
-      torchActive: {
-        type: Boolean,
-        default: false,
-      },
-      qrcode: {
-        type: Boolean,
-        default: false,
-      },
-      noStreamApiSupport: {
-        type: Boolean,
-        default: false,
-      },
-    },
-    data() {
-      return {}
-    },
-    created() {
-    },
-  
-    components: {
-      // 娉ㄥ唽缁勪欢
-      QrcodeStream,
-      QrcodeDropZone,
-      QrcodeCapture,
-    },
-    methods: {
-      // 鎵爜缁撴灉鍥炶皟
-      onDecode(result) {
-        this.$emit('onDecode', result)
-      },
-      // 鐩告満鍙嶈浆
-      switchCamera() {
-        this.$emit('switchCamera')
-      },
-      // 鍏抽棴鐩告満锛燂紵锛燂紵锛燂紵
-      turnCameraOff() {
-        this.$emit('turnCameraOff')
-      },
-      // 鎵撳紑鎵嬬數绛�
-      ClickFlash() {
-        this.$emit('ClickFlash')
-      },
-      // 妫�鏌ユ槸鍚﹁皟鐢ㄦ憚鍍忓ご
-      onInit(promise) {
-        this.$emit('onInit', promise)
-      },
-    },
-  }
-  </script>
\ No newline at end of file
diff --git a/src/views/quality/rawMaterial/rawMaterial-form.vue b/src/views/quality/rawMaterial/rawMaterial-form.vue
index 1d38bdc..ed15c3b 100644
--- a/src/views/quality/rawMaterial/rawMaterial-form.vue
+++ b/src/views/quality/rawMaterial/rawMaterial-form.vue
@@ -29,16 +29,16 @@
               <el-col :span="6">
                 <el-form-item label="闆朵欢鍙�" prop="code">
                 <el-input v-model="dataForm.code" :disabled="resultVal!=null && dataForm.id!=null">
-                  <el-button
+                  <!-- <el-button
                     slot="append"
                     icon="el-icon-search"
                     :disabled="resultVal!=null && dataForm.id!=null"
-                    @click="queryCode()"></el-button>
-                    <!-- <el-button
+                    @click="queryCode()"></el-button> -->
+                    <el-button
                     slot="append"
                     icon="el-icon-full-screen"
                     :disabled="resultVal!=null && dataForm.id!=null"
-                    @click="Turnonthecamera"></el-button> -->
+                    @click="Turnonthecamera"></el-button>
                 </el-input>
                 </el-form-item>
             </el-col>
@@ -265,7 +265,18 @@
         <el-button type="primary" @click="submitSave()">纭� 瀹�</el-button>
       </span>
     </el-dialog>
-    <!-- <qrcode :qrcode="qrcode" v-show="qrcode" :camera="camera" /> -->
+  <el-dialog
+  title="鎵弿"
+  :visible.sync="qrcode"
+  width="60%">
+  <div style="height: 100vh;width: 100%;">
+    <qr-code-app ref="codeCompont" @cancelCodeDialog="cancelCodeDialog"></qr-code-app>
+  </div>
+  <span slot="footer" class="dialog-footer">
+    <el-button @click="qrcode = false">鍙� 娑�</el-button>
+    <el-button type="primary" @click="qrcode = false">纭� 瀹�</el-button>
+  </span>
+</el-dialog>
   </div>
 </template>
 
@@ -278,19 +289,16 @@
   updateRawInspectsById,
   updateDeviceById, } from '@/api/quality/rawMaterial'
   import rawMaterialPartDialog from '@/views/common/rawMaterial-part'
-  // import qrcode from './QrcodeReader.vue'
-export default {
+  import qrCodeApp from '@/views/common/qrCodeApp'
+  export default {
+  components:{
+    rawMaterialPartDialog,
+    qrCodeApp
+  },
     computed:{},
-    components:{
-      rawMaterialPartDialog,
-      // qrcode
-      // qrcode: () => import('./QrcodeReader.vue'),
-    },
     data(){
         return{
             qrcode: false,
-            torchActive: false,
-            camera: 'off',
             userdata:[],
             currentRow:[],
             userlist:[],
@@ -363,10 +371,15 @@
       },
     },
     methods:{
+      cancelCodeDialog(){
+        this.qrcode = false
+      },
        // 鎵撳紑鐩告満
       Turnonthecamera() {
-      this.qrcode = true
-      this.camera = 'rear'
+        console.log("鎵ц");
+        this.qrcode = true
+        this.$refs.codeCompont.openCamera()
+      // this.camera = 'rear'
     },
     // 鎵爜缁撴灉鍥炶皟
     // onDecode(result) {

--
Gitblit v1.9.3