authorizationBluetooth ( )  { wx. getSetting ( { success :  ( res )  =>  { if  ( res. authSetting. hasOwnProperty ( 'scope.bluetooth' ) )  { if  ( ! res. authSetting[ 'scope.bluetooth' ] )  { this . setData ( { showManual :  true } ) }  else  { this . bluetoothState ( ) } }  else  { wx. authorize ( { scope :  'scope.bluetooth' , success :  ( )  =>  { this . bluetoothState ( ) } , fail :  ( )  =>  { Toast ( '你已拒绝开启蓝牙功能' ) } } ) } } } ) 
} , 
bluetoothState ( )  { wx. openBluetoothAdapter ( { mode :  'central' , success :  ( res )  =>  { console. log ( '第一步,蓝牙初始化成功' ,  res) this . startBluetoothDevicesDiscovery ( ) } , fail :  ( err )  =>  { console. log ( '蓝牙设备错误' ,  err) if  ( err. errCode ==  10001 )  { wx. onBluetoothAdapterStateChange ( ( ress )  =>  { if  ( ress. available)  { this . startBluetoothDevicesDiscovery ( ) }  else  { Toast ( '蓝牙设备不可用' ) } } ) }  else  { Toast ( '蓝牙设备不可用' ) } } } ) 
} , 
startBluetoothDevicesDiscovery ( )  { wx. startBluetoothDevicesDiscovery ( { allowDuplicatesKey :  false , success :  ( res )  =>  { this . onBluetoothDeviceFound ( ) } , } ) 
} , 
onBluetoothDeviceFound ( )  { wx. showLoading ( { title :  '重新搜索中' , mask :  true } ) wx. onBluetoothDeviceFound ( ( )  =>  { wx. getBluetoothDevices ( { success :  res  =>  { let  deviceList =  [ ] if  ( res. devices. length >  0 )  { res. devices. forEach ( v  =>  { if  ( v. RSSI  <  0  &&  v. name !=  '未知设备' )  { deviceList. push ( v) } } ) } wx. hideLoading ( ) this . setData ( { deviceList} ) } } ) } ) 
} , 
connectDevice ( e )  { const  item =  e. currentTarget. dataset. itemthis . setData ( { linkShow :  true , activeItem :  item} ,  ( )  =>  { app. linkBluetooth ( item. deviceId) . then ( res  =>  { console. log ( '蓝牙连接成功' ,  res) Toast ( '蓝牙连接成功' ) this . updateHisList ( this . data. activeItem) this . setlinkDeviceId ( this . data. activeItem. deviceId) this . setData ( { linkShow :  false } ) } ) . catch ( err  =>  { console. log ( err. message,  err) Toast ( err. message) this . closeBLEConnection ( item. deviceId) this . setData ( { linkShow :  false , } ) } ) } ) 
} , 
closeBLEConnection ( deviceId,  tip )  { app. closeBluetooth ( deviceId) . then ( res  =>  { this . setlinkDeviceId ( '' ) if  ( tip)  { Toast ( tip) } } ) . catch ( err  =>  { Toast ( '断开连接失败' ) } ) 
} , 
linkBluetooth ( deviceId )  { return  new  Promise ( ( resolve,  reject )  =>  { wx. createBLEConnection ( { deviceId :  deviceId, success :  ( res )  =>  { setTimeout ( ( )  =>  { wx. getBLEDeviceServices ( { deviceId :  deviceId, success :  ( res )  =>  { for  ( let  i =  0 ;  i <  res. services. length;  i++ )  { if  ( res. services[ i] . isPrimary)  { let  serviceId =  res. services[ i] . uuidlet  Iswrite =  false wx. getBLEDeviceCharacteristics ( { deviceId, serviceId, success :  ( res )  =>  { let  characteristicId =  '' for  ( let  i =  0 ;  i <  res. characteristics. length;  i++ )  { let  item =  res. characteristics[ i] if  ( item. properties. write)  { Iswrite =  true characteristicId =  item. uuid} } if  ( Iswrite)  { wx. setStorageSync ( 'linkDeviceId' ,  deviceId) wx. setStorageSync ( 'serviceId' ,  serviceId) wx. setStorageSync ( 'characteristicId' ,  characteristicId) resolve ( { message :  '蓝牙连接成功' } ) }  else  { reject ( { message :  '蓝牙服务不支持此功能,已断开' } ) } } , fail ( err )  { reject ( { message :  '获取蓝牙低功耗设备某个服务中所有特征失败' , err} ) } } ) return } } } , fail ( err )  { reject ( { message :  '获取蓝牙低功耗设备所有服务失败' , err} ) } } ) } ,  3000 ) } , fail :  ( err )  =>  { reject ( { message :  '蓝牙连接失败' , err} ) } } ) } ) 
} , 
closeBluetooth ( deviceId )  { return  new  Promise ( ( resolve,  reject )  =>  { wx. closeBLEConnection ( { deviceId :  deviceId, success :  res  =>  { wx. removeStorageSync ( 'linkDeviceId' ) wx. removeStorageSync ( 'serviceId' ) wx. removeStorageSync ( 'characteristicId' ) resolve ( res) } , fail :  err  =>  { wx. removeStorageSync ( 'linkDeviceId' ) wx. removeStorageSync ( 'serviceId' ) wx. removeStorageSync ( 'characteristicId' ) reject ( err) } } ) } ) 
} , 
import  GBK  from  './gbk.min.js' ; 
export  const  printGoodsTag  =  ( option )  =>  { if  ( ! wx. getStorageSync ( 'linkDeviceId' ) )  { wx. showToast ( { title :  '请连接打印机' , icon :  'none' , mask :  true } ) return } let  data = 'SIZE 40 mm,30 mm\n'  + 'GAP 2 mm,0 mm\n'  + 'DIRECTION 1\n'  + 'CLS\n'  + ` TEXT 20,30,"0",0,1,1,"商品名称: ${ option. goodsName} "\n ` + ` TEXT 20,80,"0",0,1,1,"规格: ${ option. skuName ||  '' } "\n ` + ` QRCODE 20,130,M,3,M,0,M1,S2," ${ option. id} _1"\n ` + ` TEXT 120,140,"0",0,1,1,"零售价"\n ` + ` TEXT 120,180,"0",0,1.5,1.5,"¥ ${ option. price ||  '' } "\n ` + 'PRINT 1,1' sendDataToDevice ( new  Uint8Array ( [ ... GBK . encode ( data) ,  ... [ 10 ] ] ) . buffer) ; 
} 
export  const  printRepairTag  =  ( option )  =>  { if  ( ! wx. getStorageSync ( 'linkDeviceId' ) )  { wx. showToast ( { title :  '请连接打印机' , icon :  'none' , mask :  true } ) return } let  data = 'SIZE 40 mm,30 mm\n'  + 'GAP 2 mm,0 mm\n'  + 'DIRECTION 1\n'  + 'CLS\n'  + ` QRCODE 20,30,M,3,M,0,M1,S2," ${ option. id} _2"\n ` + ` TEXT 110,30,"0",0,1,1," ${ option. equModel ||  '' } "\n ` + ` TEXT 110,60,"0",0,1,1," ${ option. okey ||  '' } "\n ` + ` TEXT 110,90,"0",0,1,1," ${ option. imei ||  '' } "\n ` let  str =  option. reason ||  '' if  ( str)  { let  length =  str. lengthlet  maxNum =  12 let  top =  130 for  ( let  i =  0 ,  len =  length;  i <=  len;  i +=  12 )  { let  text =  str. slice ( i,  maxNum) data =  data +  ` TEXT 20, ${ top} ,"0",0,1,1," ${ text} "\n ` +=  12 top +=  30 } } data =  data +  'PRINT 1,1' sendDataToDevice ( new  Uint8Array ( [ ... GBK . encode ( data) ,  ... [ 10 ] ] ) . buffer) ; 
} const  sendDataToDevice  =  value  =>  { let  byteLength =  value. byteLength; const  speed =  20 ; if  ( byteLength >  0 )  { wx. writeBLECharacteristicValue ( { deviceId :  wx. getStorageSync ( 'linkDeviceId' ) , characteristicId :  wx. getStorageSync ( 'characteristicId' ) , serviceId :  wx. getStorageSync ( 'serviceId' ) , value :  value. slice ( 0 ,  byteLength >  speed ?  speed :  byteLength) , success :  res  =>  { if  ( byteLength >  speed)  { sendDataToDevice ( value. slice ( speed,  byteLength) ) ; }  else  { console. log ( '已完成打印   laster success' ,  res) ; } } , fail :  err  =>  { console. log ( err) } , } ) ; } 
}