2 changed files with 203 additions and 20 deletions
@ -0,0 +1,196 @@ |
|||
|
|||
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(); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue