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 export default { getData() { var that = this; if(uni.getStorageSync('bluetoothDeviceId')){ let id = uni.getStorageSync('bluetoothDeviceId') this.bindViewTap(id,false) }else{ uni.showModal({ title: '提示', content: '您还没有连接打印机,将无法为您打印小票!' }); } }, 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() { let data = { "settled_name": "#0112配送", "detail": { "total_amount": "137.00", "other_amount": "0.00", "discount_amount": "0.00", "actual_amount": "137.00", "order_sn": "20220512165337", "goods_count": 3, "order_time": "2022-05-12 16:53:00", "supplier_id": 1 }, "code": "https://www.oulaisong.com/purchase?id=8", "list": [{ "id": 8, "goods_name": "红烧带鱼", "article_number": "1", 'sum_price':'16.00' }, { "id": 9, "goods_name": "女童外套", "article_number": "2", "sum_price": "34.00" }, { "id": 10, "goods_name": "25", "article_number": "3", "sum_price": "3.00" }] } let printerJobs = new PrinterJobs(); printerJobs.setAlign('ct').setSize(2, 2).setLineSpacing(80).print('#0112配送') .setAlign('lt').setSize(1, 1).setLineSpacing(40).print('预计时间:2026-02-01 13:41:00') .setAlign('lt').setSize(1, 1).setLineSpacing(40).print('七里香快餐明珠店') .print(printerUtil.fillLine('-', 1, 50)) .setAlign('lt').setSize(2, 2).setLineSpacing(80).print('王先生') .setAlign('lt').setSize(1, 1).setLineSpacing(40).print('联系电话: *******0775') .setAlign('lt').setSize(2, 2).setLineSpacing(80).print('地址:黑背生东川建设集团有限公司黑恶生运河区****') .setAlign('lt').setSize(1, 1).setLineSpacing(40).print('为保护隐私,顾客电话及地址已被隐藏,您可登录商家端或骑手端查看') .print(printerUtil.fillLine('-', 1, 50)); for (var i = 0; i < data.list.length; i++) { printerJobs.setAlign('lt').setSize(1, 1).setLineSpacing(40).print(data.list[i].goods_name) let setLineSpacing = 40 printerJobs.setLineSpacing(setLineSpacing).print(printerUtil.inlineArr([{ 'text': 'X' + data.list[i].article_number, 'width': 20, }, { 'text': data.list[i].sum_price, 'width': 10, }], 1, 50)); } printerJobs.print(printerUtil.fillLine('-', 1, 50)) .setAlign('lt').setSize(1, 1).setLineSpacing(40).print('配送费:1圆') .setAlign('lt').setSize(1, 1).setLineSpacing(40).print('合计金额:17圆') .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(); } }