print.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. <template>
  2. <view>
  3. <button @click="searchBle">搜索蓝牙打印机</button>
  4. <view style="margin-top: 30upx;" :key="index" v-for="(item,index) in devices">
  5. <button style="width: 400upx; color: #0081FF;" @click="onConn(item)">{{item.name}}</button>
  6. </view>
  7. <button style="margin-top: 100upx;" @click="senBleLabel()">标签打印</button>
  8. <textarea @blur="bindTextAreaBlur" auto-height placeholder-style="color:#F76260" placeholder="请输入票据信息" v-model="piaojuText" />
  9. <button style="margin-top: 100upx;" @click="billPrint()">票据打印</button>
  10. </view>
  11. </template>
  12. <script>
  13. var tsc = require('../../components/gprint/tsc.js')
  14. var esc = require('../../components/gprint/esc.js')
  15. export default {
  16. data() {
  17. return {
  18. devices: [],
  19. currDev: null,
  20. connId: '',
  21. piaojuText:'',
  22. }
  23. },
  24. onLoad: function() {
  25. },
  26. methods: {
  27. destroyed: function() {
  28. console.log("destroyed----------")
  29. if (this.connId != '') {
  30. uni.closeBLEConnection({
  31. deviceId: this.connId,
  32. success(res) {
  33. console.log(res)
  34. }
  35. })
  36. }
  37. },
  38. searchBle() {
  39. var that = this
  40. console.log("initBule")
  41. uni.openBluetoothAdapter({
  42. success(res) {
  43. console.log("打开 蓝牙模块")
  44. console.log(res)
  45. that.onDevice()
  46. uni.getBluetoothAdapterState({
  47. success: function(res) {
  48. console.log(res)
  49. if (res.available) {
  50. if (res.discovering) {
  51. that.stopFindBule()
  52. }
  53. //搜索蓝牙
  54. //开始搜寻附近的蓝牙外围设备
  55. console.log("开始搜寻附近的蓝牙外围设备")
  56. uni.startBluetoothDevicesDiscovery({
  57. success(res) {
  58. console.log(res)
  59. }
  60. })
  61. } else {
  62. console.log('本机蓝牙不可用')
  63. }
  64. },
  65. })
  66. }
  67. })
  68. },
  69. onDevice(){
  70. console.log("监听寻找到新设备的事件---------------")
  71. var that = this
  72. //监听寻找到新设备的事件
  73. uni.onBluetoothDeviceFound(function(devices) {
  74. console.log('--------------new-----------------------'+JSON.stringify(devices))
  75. var re = JSON.parse(JSON.stringify(devices))
  76. console.log(re.devices[0].name + " " + re.devices[0].deviceId)
  77. let name = re.devices[0].name
  78. if (name != "未知设备" && name != "") {
  79. let deviceId = re.devices[0].deviceId
  80. that.devices.push({
  81. name: name,
  82. deviceId: deviceId,
  83. services: []
  84. })
  85. }
  86. })
  87. },
  88. stopFindBule() {
  89. console.log("停止搜寻附近的蓝牙外围设备---------------")
  90. uni.stopBluetoothDevicesDiscovery({
  91. success(res) {
  92. console.log(res)
  93. }
  94. })
  95. },
  96. onConn(item) {
  97. var that = this
  98. console.log("连接蓝牙---------------" + item.deviceId)
  99. let deviceId = item.deviceId
  100. uni.createBLEConnection({
  101. deviceId: deviceId,
  102. complete(res) {
  103. if (res.errMsg == "createBLEConnection:ok") {
  104. console.log("连接蓝牙-[" + item.name + "]--成功")
  105. that.$msg("连接蓝牙-[" + item.name + "]--成功");
  106. that.connId = deviceId;
  107. that.currDev = item
  108. setTimeout(function() {
  109. that.getBLEServices(deviceId)
  110. }, 2000)
  111. } else {
  112. console.log(res)
  113. }
  114. //连接成功 关闭搜索
  115. that.stopFindBule()
  116. },
  117. })
  118. },
  119. getBLEServices(_deviceId) {
  120. var that = this;
  121. let deviceId = _deviceId
  122. console.log("获取蓝牙设备所有服务(service)")
  123. uni.getBLEDeviceServices({
  124. // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
  125. deviceId: deviceId,
  126. complete(res) {
  127. console.log(res)
  128. let serviceId = ""
  129. for (var s = 0; s < res.services.length; s++) {
  130. console.log(res.services[s].uuid)
  131. let serviceId = res.services[s].uuid
  132. uni.getBLEDeviceCharacteristics({
  133. // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
  134. deviceId: deviceId,
  135. // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取
  136. serviceId: serviceId,
  137. success(res) {
  138. var re = JSON.parse(JSON.stringify(res))
  139. console.log('deviceId = [' + deviceId + '] serviceId = [' + serviceId + ']')
  140. for (var c = 0; c < re.characteristics.length; c++) {
  141. if (re.characteristics[c].properties.write == true) {
  142. let uuid = re.characteristics[c].uuid
  143. console.log(' deviceId = [' + deviceId + '] serviceId = [' + serviceId + '] characteristics=[' +
  144. uuid)
  145. for (var index in that.devices) {
  146. if (that.devices[index].deviceId == deviceId) {
  147. that.devices[index].services.push({
  148. serviceId: serviceId,
  149. characteristicId: uuid
  150. })
  151. break
  152. }
  153. }
  154. console.log(JSON.stringify(that.devices))
  155. }
  156. }
  157. }
  158. })
  159. }
  160. },
  161. fail(res) {
  162. console.log(res)
  163. },
  164. })
  165. },
  166. senBlData(deviceId, serviceId, characteristicId,uint8Array) {
  167. console.log('************deviceId = [' + deviceId + '] serviceId = [' + serviceId + '] characteristics=[' +characteristicId+ "]")
  168. var uint8Buf = Array.from(uint8Array);
  169. function split_array(datas,size){
  170. var result = {};
  171. var j = 0
  172. for (var i = 0; i < datas.length; i += size) {
  173. result[j] = datas.slice(i, i + size)
  174. j++
  175. }
  176. console.log(result)
  177. return result
  178. }
  179. var sendloop = split_array(uint8Buf, 20);
  180. // console.log(sendloop.length)
  181. function realWriteData(sendloop, i) {
  182. var data = sendloop[i]
  183. if(typeof(data) == "undefined"){
  184. return
  185. }
  186. console.log("第【" + i + "】次写数据"+data)
  187. var buffer = new ArrayBuffer(data.length)
  188. var dataView = new DataView(buffer)
  189. for (var j = 0; j < data.length; j++) {
  190. dataView.setUint8(j, data[j]);
  191. }
  192. uni.writeBLECharacteristicValue({
  193. deviceId,
  194. serviceId,
  195. characteristicId,
  196. value: buffer,
  197. success(res) {
  198. realWriteData(sendloop, i + 1);
  199. }
  200. })
  201. }
  202. var i = 0;
  203. realWriteData(sendloop, i);
  204. },
  205. senBleLabel() {
  206. //标签模式
  207. let deviceId = this.currDev.deviceId;
  208. let serviceId = this.currDev.services[0].serviceId;
  209. let characteristicId = this.currDev.services[0].characteristicId;
  210. var command = tsc.jpPrinter.createNew()
  211. command.setSize(40, 30)
  212. command.setGap(2)
  213. command.setCls()
  214. // command.setText(50, 10, "TSS24.BF2", 1, 1, "打印测试")
  215. // command.setQR(50, 50, "L", 5, "A", "977767937@qq.com")
  216. command.setText(10, 50, "TSS24.BF2", 1, 1, "收花人姓名:小明")
  217. command.setText(10, 90, "TSS24.BF2", 1, 1, "收花人电话:15280215347")
  218. command.setText(10, 130, "TSS24.BF2", 1, 1, "收花时间:2020-6-10 上午")
  219. command.setText(10, 170, "TSS24.BF2", 1, 1, "收花地址:厦门市集美区凤林前山路147号110室")
  220. command.setPagePrint()
  221. this.senBlData(deviceId, serviceId, characteristicId,command.getData())
  222. },
  223. billPrint(){
  224. //票据模式
  225. let deviceId = this.currDev.deviceId;
  226. let serviceId = this.currDev.services[0].serviceId;
  227. let characteristicId = this.currDev.services[0].characteristicId;
  228. var command = esc.jpPrinter.createNew()
  229. command.init()
  230. command.setText(this.piaojuText);
  231. command.setPrintAndFeedRow(1)
  232. this.senBlData(deviceId, serviceId, characteristicId,command.getData())
  233. }
  234. }
  235. }
  236. </script>
  237. <style>
  238. </style>