diff --git a/components/.DS_Store b/components/.DS_Store index 1c8cdff..c028802 100644 Binary files a/components/.DS_Store and b/components/.DS_Store differ diff --git a/components/kk-printer/index.vue b/components/kk-printer/index.vue index ce57edb..3c1b0ed 100644 --- a/components/kk-printer/index.vue +++ b/components/kk-printer/index.vue @@ -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 { - 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 { + 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 } } }