| | |
| | | data: function () { |
| | | return { |
| | | isLoading: false, |
| | | textInput:'' |
| | | textInput: '', |
| | | scanWorkstation: '', // 新增:扫描工位绑定字段 |
| | | html5QrCode: null // 新增:扫码器实例 |
| | | } |
| | | }, |
| | | mounted() { |
| | | var that = this; |
| | | }, |
| | | methods: { |
| | | sendMessage() { |
| | | var detail = "! 0 200 200 565 1\r\n" + |
| | | "PAGE - WIDTH 400\r\n" + |
| | | "BAR - SENSE\r\n" + |
| | | "BOX 10 10 400 565 2\r\n" + |
| | | "LINE 10 60 400 60 1\r\n" + |
| | | "LINE 10 110 400 110 1\r\n" + |
| | | "LINE 10 160 400 160 1\r\n" + |
| | | "LINE 10 210 400 210 1\r\n" + |
| | | "LINE 10 300 400 310 1\r\n" + |
| | | "LINE 10 350 400 360 1\r\n" + |
| | | "LINE 10 405 190 415 1\r\n" + |
| | | "LINE 10 460 190 470 1\r\n" + |
| | | "LINE 10 515 190 525 1\r\n" + |
| | | "LINE 130 10 130 350 1\r\n" + |
| | | "LINE 190 350 190 565 1\r\n" + |
| | | "TEXT 24 0 15 25 " + '条码' + " " + '001' + "\r\n" + //物料条码 |
| | | "TEXT 24 0 15 75 " + '条码' + "\r\n" + //物料名称 |
| | | "TEXT 55 0 140 75 " + '条码' + "\r\n" + //物料名称 |
| | | "TEXT 24 0 15 125 " + '条码' + " " + '001' + "\r\n" + //物料编码 |
| | | "TEXT 24 0 15 175 " + '条码' + " " + '001' + "\r\n" + //图号 |
| | | "TEXT 24 0 15 250 " + '条码' + "\r\n" + |
| | | // "TEXT 24 0 15 325 "+strt6+" " + str6 + "\r\n" + |
| | | "TEXT 24 0 15 315 " + '条码' + " " + '001' + "\r\n" + |
| | | "TEXT 55 0 140 218 " + '条码' + "\r\n" + |
| | | "TEXT 55 0 140 238 " + '条码' + "\r\n" + |
| | | "TEXT 55 0 140 258 " + '条码' + "\r\n" + |
| | | "TEXT 55 0 140 272 " + '条码' + "\r\n" + |
| | | "TEXT 24 0 50 365 " + '001' + "\r\n" + |
| | | "TEXT 24 0 40 420 " + '001' + "\r\n" + |
| | | "TEXT 24 0 50 475 " + '001' + "\r\n" + |
| | | "TEXT 24 0 60 530 " + '001' + "\r\n" + |
| | | "B QR 200 360 M 2 U 9\r\n" + |
| | | "MA," + '001' + "\r\n" + |
| | | "ENDQR\r\n" + |
| | | // "B QR 25 285 M 2 U 4\r\n" + |
| | | // "MA," + str8 + "\r\n" + |
| | | // "ENDQR\r\n" + |
| | | sendMessage(obj) { |
| | | var detail = ["第一组指令"+ |
| | | "! 0 203 203 480 1\r\n" + |
| | | "PREFEED 0\n\r" + |
| | | "POSTFEED 0\n\r" + |
| | | "PAGE - WIDTH 640\r\n" + |
| | | |
| | | // 右上角放置一个方型二维码(80*80),扫描后的值为“123456” |
| | | "BOX 560 10 640 90 2\r\n" + // 绘制二维码的方框 |
| | | "TEXT 570 20 5 \"条码\"\r\n" + // 在方框中上方显示“条码” |
| | | "QRCODE 570 40 M 4 U 0 \"" + obj.qrcode+"\"\r\n" + // 创建二维码 |
| | | |
| | | // 右下角显示一个条形码,最左在320位置,长度为100,同时这个条形码将其扫描的值显示在条形码下侧,条形码的值为“987654” |
| | | "BARCODE 320 350 100 50 1 \"987654\"\r\n" + // 显示条形码的位置和大小 |
| | | "TEXT 320 410 5 \"987654\"\r\n" + // |
| | | "GAP-SENSE\r\n" + |
| | | "ENDQR\r\n" + |
| | | "FORM\r\n" + |
| | | "PRINT\r\n", |
| | | "第二组指令" + "! 0 400 400 480 1\r\n" + |
| | | "PREFEED 0\n\r" + |
| | | "POSTFEED 0\n\r" + |
| | | "PAGE - WIDTH 640\r\n" + |
| | | "GAP-SENSE\r\n" + |
| | | "BOX 5 10 620 450 2\r\n" + |
| | | "LINE 5 60 620 60 1\r\n" + // 横线1 |
| | | "LINE 5 110 620 110 1\r\n" + // 横线2 |
| | | "LINE 5 160 620 160 1\r\n" + // 横线3 |
| | | "LINE 5 210 620 210 1\r\n" + // 横线4 |
| | | "LINE 5 260 620 260 1\r\n" + // 横线5 |
| | | "LINE 120 10 120 260 1\r\n" + // 字段名称右侧竖线 |
| | | "LINE 240 260 240 450 1\r\n" + // 规格型号左侧竖线 |
| | | "LINE 285 210 285 450 1\r\n" + // 规格型号右侧竖线 |
| | | "LINE 410 210 410 260 1\r\n" + // 到货日期右侧竖线 |
| | | "ENDQR\r\n" + |
| | | "FORM\r\n" + |
| | | "PRINT\r\n"; |
| | | "PRINT\r\n" ]; |
| | | |
| | | let sendData = { |
| | | Type: 'Bar', |
| | | Barcode: 'TM250304-000104-2', |
| | | Detail: detail, |
| | | Ip: '192.168.38.61', |
| | | Ip: '192.168.38.25', |
| | | Port: '9100', |
| | | } |
| | | console.log('sendMessage 开始1:') |
| | | console.log('sendMessage 开始2:' + JSON.stringify(sendData)) |
| | |
| | | data: JSON.stringify(sendData) |
| | | }) |
| | | }, |
| | | // 修改sendScan方法为实际扫码功能 |
| | | sendScan() { |
| | | var that = this; |
| | | that.$toast.fail("暂时不能使用!"); |
| | | const that = this; |
| | | if (!this.html5QrCode) { |
| | | // 鸿蒙设备需要使用特定设备ID |
| | | this.html5QrCode = new Html5Qrcode("qr-reader", { |
| | | experimentalFeatures: { |
| | | useBarCodeDetectorIfSupported: true |
| | | }, |
| | | formatsToSupport: [ Html5QrcodeSupportedFormats.QR_CODE ] |
| | | }); |
| | | } |
| | | |
| | | const config = { |
| | | fps: 10, |
| | | qrbox: 250, |
| | | // 鸿蒙需要明确指定视频输入设备 |
| | | videoConstraints: { |
| | | deviceId: 'default' // 使用默认摄像头 |
| | | } |
| | | }; |
| | | |
| | | // 修改摄像头调用方式 |
| | | this.html5QrCode.start( |
| | | config, |
| | | qrCodeMessage => { |
| | | that.scanWorkstation = qrCodeMessage; |
| | | that.stopScan(); |
| | | that.$toast.success("扫码成功!"); |
| | | }, |
| | | errorMessage => { |
| | | console.error("扫码失败:", errorMessage); |
| | | that.$toast.fail("扫码失败"); |
| | | } |
| | | ).catch(err => { |
| | | console.error("摄像头错误:", err); |
| | | // 增加鸿蒙设备错误处理 |
| | | const errMsg = err.message || err.name || '摄像头不可用'; |
| | | that.$toast.fail("无法启动摄像头: " + errMsg); |
| | | |
| | | // 原生扫码备用方案 |
| | | if(window.plus && plus.barcode){ |
| | | plus.barcode.scan( |
| | | 'qr', |
| | | (type, result) => { |
| | | that.scanWorkstation = result; |
| | | that.$toast.success("扫码成功!"); |
| | | }, |
| | | (error) => { |
| | | that.$toast.fail("扫码失败: "+error.code); |
| | | } |
| | | ); |
| | | } |
| | | }); |
| | | |
| | | // 显示扫码框(需在ASPX中添加<div id="qr-reader"></div>) |
| | | document.getElementById('qr-reader').style.display = 'block'; |
| | | }, |
| | | |
| | | // 新增:停止扫码方法 |
| | | stopScan() { |
| | | if (this.html5QrCode && this.html5QrCode.isScanning) { |
| | | this.html5QrCode.stop().then(() => { |
| | | document.getElementById('qr-reader').style.display = 'none'; |
| | | }).catch(err => { |
| | | console.error("关闭摄像头失败:", err); |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | testSuccessSound() { |
| | | this.$playSound('success'); |
| | | }, |
| | | |
| | | testErrorSound() { |
| | | this.$playSound('error'); |
| | | } |
| | | } |
| | | }) |
| | | }) |