import PrinterJobs from '@/components/print/printerjobs.js' import printerUtil from '@/components/print/printerutil.js' import util from '@/components/print/util.js' import drawQrcode from '@/components/print/weapp.qrcode.esm.js' import Bluetooth from '@/components/print/bluetooth.js' let bluetooth = new Bluetooth(); let isPrint= false let data1 = {} export default { getData() { var that = this; if(uni.getStorageSync('bluetoothDeviceId')){ let id = uni.getStorageSync('bluetoothDeviceId') const baseUrl = getApp().globalData.mainurl uni.request({ url: baseUrl + "/mall/order/detail/"+ getApp().globalData.printData[0].order_id, data: {}, method:'GET', header: { "content-type": 'application/x-www-form-urlencoded', 'accessToken':uni.getStorageSync('hiver_token') }, success: function(res) { console.log('连接成功了!!!!!!!!!!!!',res) if (res.data.code == 200) { data1 = res.data.result that.bindViewTap(id,false) } else { uni.showToast({ title: res.data.message, icon: 'none' }); return; } uni.hideLoading(); }, fail: function(err) { console.log(err) uni.hideLoading(); } }) }else{ uni.showModal({ title: '提示', content: '您还没有连接打印机,将无法为您打印小票!', confirmText:'连接蓝牙', cancelText:'暂不连接', success: function (res) { if (res.confirm) { uni.navigateTo({ url:'/pages/myCenter/setPrint' }) } } }); } }, async bindViewTap(deviceId, state) { var _this = this; console.log(deviceId) try { //1.链接设备 await bluetooth.createBLEConnection(deviceId).then((res) => { bluetooth.deviceId = deviceId; }).catch((e) => { throw e; }); let server = []; //2.寻找服务 await bluetooth.getBLEDeviceServices().then((res) => { console.log(res) bluetooth.notifyId = ''; bluetooth.writeId = ''; bluetooth.num = 0; bluetooth.serviceList = res }).catch((e) => { throw e; }); //3.获取蓝牙设备所有服务 let result3 = await bluetooth.getBLEDeviceCharacteristics().then(res => { uni.setStorageSync('bluetoothDeviceId', deviceId); this.pickUpOnce() }).catch((e) => { throw e; }); } catch (e) { //TODO handle the exception console.log("e: " + JSON.stringify(e)); } }, //打印一次 pickUpOnce() { isPrint = true; bluetooth.notifyBLECharacteristicValue(); let self = this; setTimeout(() => { self.writeBLECharacteristicValue(); }, 500); }, //写入控制命令 async writeBLECharacteristicValue() { console.log("走到这里已经拿到数据了",data1) if(data1.receiverName == null){ console.log("22222") data1.receiverName = "***" } if(data1.receiverAddress == null){ console.log("3333") data1.receiverAddress = '***' } if(data1.deliveryInfo == null){ data1.deliveryInfo = { mustFinishTime:"***" } console.log("111111111") } let printerJobs = new PrinterJobs(); printerJobs.setAlign('ct').setSize(2, 2).setLineSpacing(80).print(data1.numberCode + (data1.deliveryType == 1?'配送':'自取')) .setAlign('lt').setSize(1, 1).setLineSpacing(40).print('预计时间:'+ data1.deliveryInfo == null?'暂无':data1.deliveryInfo.mustFinishTime) .setAlign('lt').setSize(1, 1).setLineSpacing(40).print(data1.shopName) .print(printerUtil.fillLine('-', 1, 50)) .setAlign('lt').setSize(2, 2).setLineSpacing(80).print(data1.receiverName == null?'暂无':data1.receiverName) .setAlign('lt').setSize(1, 1).setLineSpacing(40).print('联系电话: '+data1.receiverPhone) .setAlign('lt').setSize(2, 2).setLineSpacing(80).print('地址:'+(data1.receiverAddress == null?'暂无':data1.receiverAddress)) .setAlign('lt').setSize(1, 1).setLineSpacing(40).print('为保护隐私,顾客电话及地址已被隐藏,您可登录商家端或骑手端查看') .print(printerUtil.fillLine('-', 1, 50)); for (var i = 0; i < data1.goodsList.length; i++) { printerJobs.setAlign('lt').setSize(1, 1).setLineSpacing(40).print(data1.goodsList[i].productName) let setLineSpacing = 40 printerJobs.setLineSpacing(setLineSpacing).print(printerUtil.inlineArr([{ 'text': 'X' + data1.goodsList[i].quantity, 'width': 20, }, { 'text': data1.goodsList[i].price, 'width': 10, }], 1, 50)); } printerJobs.print(printerUtil.fillLine('-', 1, 50)) .setAlign('lt').setSize(1, 1).setLineSpacing(40).print('配送费:'+ data1.deliveryFee) .setAlign('lt').setSize(1, 1).setLineSpacing(40).print('合计金额:'+ data1.totalAmount) .print(printerUtil.fillLine('-', 1, 50)) .setAlign('lt').setSize(1, 1).setLineSpacing(40).print('商品取到后,如有任何商品问题,请及时联系商家和平台,客服将为您服务,客服电话15533910775,谢谢您的惠顾') .println(); let buffer = printerJobs.buffer(); this.sendPrint(buffer); }, sendPrint(buffer) { // 1.并行调用多次会存在写失败的可能性 // 2.建议每次写入不超过20字节 // 分包处理,延时调用 let that = this const maxChunk = 20; const delay = 20; isPrint = true; for (let i = 0, j = 0, length = buffer.byteLength; i < length; i += maxChunk, j++) { let subPackage = buffer.slice(i, i + maxChunk <= length ? (i + maxChunk) : length); setTimeout(this.sendPrintData, j * delay, subPackage); } isPrint = false; }, sendPrintData(buffer) { bluetooth.writeBLECharacteristicValue(buffer).then(res => {}); }, startSearch(state) { let that = this bluetooth.openBluetoothAdapter().then(e => { uni.startBluetoothDevicesDiscovery({ success: res => { uni.onBluetoothDeviceFound(result => { let arr = that.list; let devices = []; let list = result.devices; for (let i = 0; i < list.length; ++i) { console.log(list[i]) if (list[i].name && list[i].name != "未知设备") { let arrNew = arr.filter((item) => { return item.deviceId == list[i].deviceId; }); if (arrNew.length == 0) { devices.push(list[i]); } if (uni.getStorageSync('bluetoothDeviceId') == list[i] .deviceId) { // that.bindViewTap(list[i].deviceId, state) } } } that.list = arr.concat(devices); }); }, fail: res => { uni.hideLoading(); uni.showToast({ title: `搜索设备失败` + JSON.stringify(err) }) } }) }).catch(e => { console.log(e) }); }, // 停止搜索 stopSearch() { uni.hideLoading(); bluetooth.stopBluetoothDevicesDiscovery(); } }