Merge branch 'master' of http://114.132.189.42:9002/r/mes-ocea-before
| | |
| | | "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", |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| | | // å¼å
¥ |
| | | 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.result=result |
| | | this.$emit("ok",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: ä»
å
许å¨å®å
¨ä¸ä¸æä¸è®¿é®æåæºã使ç¨HTTPSææ¬å°ä¸»æºï¼è䏿¯HTTPã"; |
| | | } 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> |
| | |
| | | <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> |
| | |
| | | <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" @ok="getResultInfo" @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> |
| | | |
| | |
| | | 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:[], |
| | |
| | | }, |
| | | }, |
| | | methods:{ |
| | | getResultInfo(data){ |
| | | // console.log("è¿å"); |
| | | console.log("æ«æåºçäºç»´ç å¼",data); |
| | | }, |
| | | 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) { |