|
|
|
@ -69,8 +69,8 @@ |
|
|
|
serviceId: '', |
|
|
|
writeId: '', |
|
|
|
readId: '', |
|
|
|
iosNo: false, |
|
|
|
deviceType:'ios' |
|
|
|
iosNo: false, |
|
|
|
deviceType: 'ios' |
|
|
|
} |
|
|
|
}, |
|
|
|
props: { |
|
|
|
@ -103,9 +103,16 @@ |
|
|
|
}, |
|
|
|
mounted() { |
|
|
|
|
|
|
|
}, |
|
|
|
onLoad(){ |
|
|
|
|
|
|
|
}, |
|
|
|
watch: { |
|
|
|
isShowSearch(newVal, oldVal) { |
|
|
|
if(newVal == false){ |
|
|
|
this.$parent.$parent.isShow = true |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
onLoad() { |
|
|
|
|
|
|
|
}, |
|
|
|
beforeDestroy() { |
|
|
|
|
|
|
|
@ -116,236 +123,238 @@ |
|
|
|
return; |
|
|
|
}, |
|
|
|
//点击打印按钮 |
|
|
|
handlePrintTap() { |
|
|
|
let that = this |
|
|
|
uni.showLoading({ |
|
|
|
mask:true, |
|
|
|
title: '加载中...' |
|
|
|
}); |
|
|
|
uni.getSystemInfo({ |
|
|
|
success (res) { |
|
|
|
that.deviceType = res.osName |
|
|
|
console.log('设备类型',res.osName) |
|
|
|
} |
|
|
|
handlePrintTap() { |
|
|
|
let that = this |
|
|
|
console.log(this.$parent) |
|
|
|
this.$parent.$parent.clickShow(); |
|
|
|
uni.showLoading({ |
|
|
|
mask: true, |
|
|
|
title: '加载中...' |
|
|
|
}); |
|
|
|
uni.getSystemInfo({ |
|
|
|
success(res) { |
|
|
|
that.deviceType = res.osName |
|
|
|
console.log('设备类型', res.osName) |
|
|
|
} |
|
|
|
}) |
|
|
|
// 初始化蓝牙模块 |
|
|
|
wx.openBluetoothAdapter({ //111 |
|
|
|
mode: 'central', |
|
|
|
success: (res2) => { |
|
|
|
success: (res2) => { |
|
|
|
console.log('初始化蓝牙模块', res2) |
|
|
|
that.sousuo() |
|
|
|
}, |
|
|
|
fail: (res) => { |
|
|
|
fail: (res) => { |
|
|
|
console.log('初始化蓝牙模块', res) |
|
|
|
that.tui.toast('初始化失败', res) |
|
|
|
this.isShowSearch = true |
|
|
|
that.tui.toast('初始化失败', res) |
|
|
|
this.isShowSearch = true |
|
|
|
uni.hideLoading(); |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
}, |
|
|
|
// 开始搜索附近的蓝牙外围设备 |
|
|
|
sousuo() { |
|
|
|
let that = this; |
|
|
|
wx.startBluetoothDevicesDiscovery({ //222 |
|
|
|
success(res3) { |
|
|
|
console.log('获取设备成功', res3) |
|
|
|
that.jiantingshebei() |
|
|
|
}, |
|
|
|
fail(err) { |
|
|
|
console.log('获取设备失败', err) |
|
|
|
that.tui.toast('获取设备失败', err) |
|
|
|
wx.closeBLEConnection({ |
|
|
|
deviceId: uni.getStorageSync('deviceId'), |
|
|
|
success(res) { |
|
|
|
console.log(res) |
|
|
|
} |
|
|
|
}) |
|
|
|
uni.removeStorageSync('deviceId'); |
|
|
|
that.isShowSearch = true |
|
|
|
that.sousuo() |
|
|
|
uni.hideLoading(); |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
//停止搜索蓝牙设备 |
|
|
|
stopSearchBtnTap() { |
|
|
|
wx.stopBluetoothDevicesDiscovery() |
|
|
|
}, |
|
|
|
/** |
|
|
|
* jiantingshebei方法,判断缓存中有没有deviceId等数据的时候, |
|
|
|
* 有: 直接拿到缓存中的deviceId等,直接请求 wx.createBLEConnection |
|
|
|
* 没有:才会调用 wx.onBluetoothDeviceFound 搜索 |
|
|
|
*/ |
|
|
|
jiantingshebei() { |
|
|
|
let that = this; |
|
|
|
if (uni.getStorageSync('deviceId')) { |
|
|
|
console.log("111") |
|
|
|
// that.huoqufuwu(uni.getStorageSync('deviceId')) |
|
|
|
that.lianejieshebei(uni.getStorageSync('deviceId')) |
|
|
|
} else { |
|
|
|
console.log("222") |
|
|
|
uni.hideLoading(); |
|
|
|
this.isShowSearch = true |
|
|
|
// 监听扫描到新设备事件 |
|
|
|
wx.onBluetoothDeviceFound((res4) => { //333 |
|
|
|
console.log('监听新设备列表,拿到想要的就自动停止', res4) |
|
|
|
res4.devices.forEach((device) => { |
|
|
|
if (!device.name && !device.localName) { |
|
|
|
return |
|
|
|
} |
|
|
|
that.devicesList.push(device) |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
lianejieshebei(deviceId) { |
|
|
|
let that = this; |
|
|
|
// 连接设备 |
|
|
|
wx.createBLEConnection({ //555 |
|
|
|
deviceId: deviceId, // 搜索到设备的 deviceId |
|
|
|
success: () => { |
|
|
|
that.isShowSearch = false |
|
|
|
console.log('连接设备成功') |
|
|
|
that.huoqufuwu(deviceId) |
|
|
|
}, |
|
|
|
fail: (res) => { |
|
|
|
console.log('连接设备失败', res) |
|
|
|
that.tui.toast('连接设备失败', res) |
|
|
|
if (uni.getStorageSync('deviceId')) { |
|
|
|
that.huoqufuwu(uni.getStorageSync('deviceId')) |
|
|
|
} else { |
|
|
|
wx.closeBLEConnection({ |
|
|
|
deviceId: uni.getStorageSync('deviceId'), |
|
|
|
success(res) { |
|
|
|
console.log(res) |
|
|
|
} |
|
|
|
}) |
|
|
|
uni.removeStorageSync('deviceId') |
|
|
|
that.sousuo() |
|
|
|
that.isShowSearch = true |
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
// 开始搜索附近的蓝牙外围设备 |
|
|
|
sousuo(){ |
|
|
|
let that = this; |
|
|
|
wx.startBluetoothDevicesDiscovery({ //222 |
|
|
|
success(res3) { |
|
|
|
console.log('获取设备成功', res3) |
|
|
|
that.jiantingshebei() |
|
|
|
}, |
|
|
|
fail(err) { |
|
|
|
console.log('获取设备失败', err) |
|
|
|
that.tui.toast('获取设备失败', err) |
|
|
|
wx.closeBLEConnection({ |
|
|
|
deviceId:uni.getStorageSync('deviceId'), |
|
|
|
success (res) { |
|
|
|
console.log(res) |
|
|
|
} |
|
|
|
}) |
|
|
|
uni.removeStorageSync('deviceId'); |
|
|
|
this.isShowSearch = true |
|
|
|
this.sousuo() |
|
|
|
uni.hideLoading(); |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
//停止搜索蓝牙设备 |
|
|
|
stopSearchBtnTap(){ |
|
|
|
wx.stopBluetoothDevicesDiscovery() |
|
|
|
}, |
|
|
|
/** |
|
|
|
* jiantingshebei方法,判断缓存中有没有deviceId等数据的时候, |
|
|
|
* 有: 直接拿到缓存中的deviceId等,直接请求 wx.createBLEConnection |
|
|
|
* 没有:才会调用 wx.onBluetoothDeviceFound 搜索 |
|
|
|
*/ |
|
|
|
jiantingshebei(){ |
|
|
|
let that = this; |
|
|
|
if(uni.getStorageSync('deviceId')){ |
|
|
|
console.log("111") |
|
|
|
// that.huoqufuwu(uni.getStorageSync('deviceId')) |
|
|
|
that.lianejieshebei(uni.getStorageSync('deviceId')) |
|
|
|
}else{ |
|
|
|
console.log("222") |
|
|
|
uni.hideLoading(); |
|
|
|
this.isShowSearch = true |
|
|
|
// 监听扫描到新设备事件 |
|
|
|
wx.onBluetoothDeviceFound((res4) => { //333 |
|
|
|
console.log('监听新设备列表,拿到想要的就自动停止', res4) |
|
|
|
res4.devices.forEach((device) => { |
|
|
|
if (!device.name && !device.localName) { |
|
|
|
return |
|
|
|
} |
|
|
|
that.devicesList.push(device) |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
lianejieshebei(deviceId){ |
|
|
|
let that = this; |
|
|
|
// 连接设备 |
|
|
|
wx.createBLEConnection({//555 |
|
|
|
deviceId: deviceId, // 搜索到设备的 deviceId |
|
|
|
success: () => { |
|
|
|
this.isShowSearch = false |
|
|
|
console.log('连接设备成功') |
|
|
|
that.huoqufuwu(deviceId) |
|
|
|
}, |
|
|
|
fail: (res) => { |
|
|
|
console.log('连接设备失败',res) |
|
|
|
that.tui.toast('连接设备失败', res) |
|
|
|
if(uni.getStorageSync('deviceId')){ |
|
|
|
this.huoqufuwu(uni.getStorageSync('deviceId')) |
|
|
|
}else{ |
|
|
|
wx.closeBLEConnection({ |
|
|
|
deviceId:uni.getStorageSync('deviceId'), |
|
|
|
success (res) { |
|
|
|
console.log(res) |
|
|
|
} |
|
|
|
}) |
|
|
|
uni.removeStorageSync('deviceId') |
|
|
|
this.sousuo() |
|
|
|
this.isShowSearch = true |
|
|
|
} |
|
|
|
|
|
|
|
uni.hideLoading(); |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
huoqufuwu(deviceId){ |
|
|
|
let that = this; |
|
|
|
//获取服务 |
|
|
|
wx.getBLEDeviceServices({ //666 |
|
|
|
deviceId: deviceId, // 搜索到设备的 deviceId |
|
|
|
success: (res5) => { |
|
|
|
console.log('获取服务成功',res5) |
|
|
|
that.duxietezhengzhi(deviceId,res5) |
|
|
|
}, |
|
|
|
fail: (res) => { |
|
|
|
console.log(res) |
|
|
|
that.tui.toast('获取服务失败', res) |
|
|
|
wx.closeBLEConnection({ |
|
|
|
deviceId:uni.getStorageSync('deviceId'), |
|
|
|
success (res1) { |
|
|
|
console.log(res1) |
|
|
|
} |
|
|
|
}) |
|
|
|
this.isShowSearch = true |
|
|
|
uni.hideLoading(); |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
duxietezhengzhi(deviceId,res5){ |
|
|
|
let that = this; |
|
|
|
//读写特征值 |
|
|
|
wx.getBLEDeviceCharacteristics({ //777 |
|
|
|
deviceId:deviceId, // 搜索到设备的 deviceId |
|
|
|
serviceId:res5.services[0].uuid, // 上一步中找到的某个服务 |
|
|
|
success: (res6) => { |
|
|
|
console.log('读写特征值成功',res6) |
|
|
|
for (let i =0; i <res6.characteristics.length; i++) { |
|
|
|
let item =res6.characteristics[i] |
|
|
|
if (item.properties.write) { // 该特征值可写 |
|
|
|
console.log('该特征值可写') |
|
|
|
uni.setStorageSync('deviceId', deviceId); |
|
|
|
uni.setStorageSync('serviceId', res5.services[0].uuid); |
|
|
|
uni.setStorageSync('characteristicId', item.uuid); |
|
|
|
that.xierushuju() |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
fail: (res) => { |
|
|
|
that.tui.toast('读写特征值失败', res) |
|
|
|
wx.closeBLEConnection({ |
|
|
|
deviceId:uni.getStorageSync('deviceId'), |
|
|
|
success (res) { |
|
|
|
console.log(res) |
|
|
|
} |
|
|
|
}) |
|
|
|
this.isShowSearch = true |
|
|
|
uni.hideLoading(); |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
xierushuju(){ |
|
|
|
let that = this; |
|
|
|
//写入数据 |
|
|
|
if(this.defaultText == '打印小票'){ |
|
|
|
that.$emit('onPrintSmall'); |
|
|
|
}else if(this.defaultText == '确认打印'){ |
|
|
|
that.$emit('goPrint'); |
|
|
|
}else{ |
|
|
|
that.$emit('onPrint'); |
|
|
|
} |
|
|
|
console.log('查看数据是否正确',that.bufferData) |
|
|
|
that.$nextTick(()=>{ |
|
|
|
var dataStr = '' |
|
|
|
for(let m=0;m<that.bufferData.length;m++){ |
|
|
|
dataStr += that.bufferData[m] |
|
|
|
} |
|
|
|
const maxChunk = that.deviceType== 'android'?20:180; |
|
|
|
const delay = that.deviceType== 'android'?20:180; |
|
|
|
|
|
|
|
let buffer = gbk.strToGBKByte(dataStr) |
|
|
|
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(that._writeBLECharacteristicValue, j * delay, subPackage); |
|
|
|
} |
|
|
|
|
|
|
|
}) |
|
|
|
return; |
|
|
|
}, |
|
|
|
_writeBLECharacteristicValue(buffer) { |
|
|
|
let that = this; |
|
|
|
wx.writeBLECharacteristicValue({ |
|
|
|
deviceId: uni.getStorageSync('deviceId'), |
|
|
|
serviceId: uni.getStorageSync('serviceId'), |
|
|
|
characteristicId: uni.getStorageSync('characteristicId'), |
|
|
|
value: buffer, |
|
|
|
success(res) { |
|
|
|
console.log('打印buffer',buffer) |
|
|
|
console.log('writeBLECharacteristicValue success', res) |
|
|
|
}, |
|
|
|
fail(res) { |
|
|
|
console.log('writeBLECharacteristicValue fail', res) |
|
|
|
wx.closeBLEConnection({ |
|
|
|
deviceId:uni.getStorageSync('deviceId'), |
|
|
|
success (res) { |
|
|
|
console.log(res) |
|
|
|
} |
|
|
|
}) |
|
|
|
if(uni.getStorageSync('deviceId')){ |
|
|
|
console.log("111") |
|
|
|
that.xierushuju() |
|
|
|
}else{ |
|
|
|
that.jiantingshebei() |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
uni.hideLoading(); |
|
|
|
}, |
|
|
|
handleSearchClose(){ |
|
|
|
this.isShowSearch = false |
|
|
|
uni.hideLoading(); |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
huoqufuwu(deviceId) { |
|
|
|
let that = this; |
|
|
|
//获取服务 |
|
|
|
wx.getBLEDeviceServices({ //666 |
|
|
|
deviceId: deviceId, // 搜索到设备的 deviceId |
|
|
|
success: (res5) => { |
|
|
|
console.log('获取服务成功', res5) |
|
|
|
that.duxietezhengzhi(deviceId, res5) |
|
|
|
}, |
|
|
|
fail: (res) => { |
|
|
|
console.log(res) |
|
|
|
that.tui.toast('获取服务失败', res) |
|
|
|
wx.closeBLEConnection({ |
|
|
|
deviceId: uni.getStorageSync('deviceId'), |
|
|
|
success(res1) { |
|
|
|
console.log(res1) |
|
|
|
} |
|
|
|
}) |
|
|
|
that.isShowSearch = true |
|
|
|
uni.hideLoading(); |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
duxietezhengzhi(deviceId, res5) { |
|
|
|
let that = this; |
|
|
|
//读写特征值 |
|
|
|
wx.getBLEDeviceCharacteristics({ //777 |
|
|
|
deviceId: deviceId, // 搜索到设备的 deviceId |
|
|
|
serviceId: res5.services[0].uuid, // 上一步中找到的某个服务 |
|
|
|
success: (res6) => { |
|
|
|
console.log('读写特征值成功', res6) |
|
|
|
for (let i = 0; i < res6.characteristics.length; i++) { |
|
|
|
let item = res6.characteristics[i] |
|
|
|
if (item.properties.write) { // 该特征值可写 |
|
|
|
console.log('该特征值可写') |
|
|
|
uni.setStorageSync('deviceId', deviceId); |
|
|
|
uni.setStorageSync('serviceId', res5.services[0].uuid); |
|
|
|
uni.setStorageSync('characteristicId', item.uuid); |
|
|
|
that.xierushuju() |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
fail: (res) => { |
|
|
|
that.tui.toast('读写特征值失败', res) |
|
|
|
wx.closeBLEConnection({ |
|
|
|
deviceId: uni.getStorageSync('deviceId'), |
|
|
|
success(res) { |
|
|
|
console.log(res) |
|
|
|
} |
|
|
|
}) |
|
|
|
that.isShowSearch = true |
|
|
|
uni.hideLoading(); |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
xierushuju() { |
|
|
|
let that = this; |
|
|
|
//写入数据 |
|
|
|
if (this.defaultText == '打印小票') { |
|
|
|
that.$emit('onPrintSmall'); |
|
|
|
} else if (this.defaultText == '确认打印') { |
|
|
|
that.$emit('goPrint'); |
|
|
|
} else { |
|
|
|
that.$emit('onPrint'); |
|
|
|
} |
|
|
|
console.log('查看数据是否正确', that.bufferData) |
|
|
|
that.$nextTick(() => { |
|
|
|
var dataStr = '' |
|
|
|
for (let m = 0; m < that.bufferData.length; m++) { |
|
|
|
dataStr += that.bufferData[m] |
|
|
|
} |
|
|
|
const maxChunk = that.deviceType == 'android' ? 20 : 180; |
|
|
|
const delay = that.deviceType == 'android' ? 20 : 180; |
|
|
|
|
|
|
|
let buffer = gbk.strToGBKByte(dataStr) |
|
|
|
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(that._writeBLECharacteristicValue, j * delay, subPackage); |
|
|
|
} |
|
|
|
|
|
|
|
}) |
|
|
|
return; |
|
|
|
}, |
|
|
|
_writeBLECharacteristicValue(buffer) { |
|
|
|
let that = this; |
|
|
|
wx.writeBLECharacteristicValue({ |
|
|
|
deviceId: uni.getStorageSync('deviceId'), |
|
|
|
serviceId: uni.getStorageSync('serviceId'), |
|
|
|
characteristicId: uni.getStorageSync('characteristicId'), |
|
|
|
value: buffer, |
|
|
|
success(res) { |
|
|
|
console.log('打印buffer', buffer) |
|
|
|
console.log('writeBLECharacteristicValue success', res) |
|
|
|
}, |
|
|
|
fail(res) { |
|
|
|
console.log('writeBLECharacteristicValue fail', res) |
|
|
|
wx.closeBLEConnection({ |
|
|
|
deviceId: uni.getStorageSync('deviceId'), |
|
|
|
success(res) { |
|
|
|
console.log(res) |
|
|
|
} |
|
|
|
}) |
|
|
|
if (uni.getStorageSync('deviceId')) { |
|
|
|
console.log("111") |
|
|
|
that.xierushuju() |
|
|
|
} else { |
|
|
|
that.jiantingshebei() |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
uni.hideLoading(); |
|
|
|
}, |
|
|
|
handleSearchClose() { |
|
|
|
this.isShowSearch = false |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|