|
|
- // pages/bindLock/bindLock.js
- var util = require('../../utils/util');
- var util1 = require('../../utils/util1');
- import {
- BLE
- } from "../../utils/btls/ble";
- const app = getApp();
- const WXAPI = require('../../utils/request')
- import ICINLocker from '../../utils/ICINPakage/ICINLocker'
- const emitter = app.globalData.emitter
- // ArrayBuffer转16进度字符串示例
- function ab2hex(buffer) {
- var hexArr = Array.prototype.map.call(
- new Uint8Array(buffer),
- function (bit) {
- return ('00' + bit.toString(16)).slice(-2)
- }
- )
- return hexArr.join(',');
- }
- function promisify(fn, args) {
- return new Promise((resolve, reject) => {
- fn({
- ...(args || {}),
- success: (res) => resolve(res),
- fail: (err) => reject(err),
- });
- });
- }
- Page({
-
- /**
- * 页面的初始数据
- */
- data: {
- deviceNum: '',
- radio: '1',
- zgBlueStatus: false,
- bluestatus: true,
- selectindex: 1,
- info: '',
- deviceList:[],
- searchClick:false,
- show:false,
- showSelect:false,
- searchValue:'',
- pageNum: 1,
- pageSize: 20,
- zNodes: [],
- selectRoomName:'选择房间',
- allDevice:[],
- list:[],
- setRoomArr:[],
- confirmSelectKey:'',
- stoppull:false
- },
- onChange1(event) {
- this.setData({
- deviceNum: event.detail,
- });
- },
- onChange2(event) {
- this.setData({
- radio: event.detail,
- });
- },
- // 关闭弹窗
- onClose() {
- this.setData({ show: false });
- },
- onClose1() {
- this.setData({ showSelect: false });
- },
- // 打开弹窗
- selectRoom(){
- this.setData({ show: true });
- },
- // 房源搜索
- onClick() {
- this.getRoom2()
- },
- /**
- * 生命周期函数--监听页面加载
- */
- onLoad: function (options) {
- // app.globalData.zgBlueStatus = false
- let _this=this
- this.setData({
- selectindex: options.id
- })
- ICINLocker.checkTheWechatVersion()
- this.getTree()
- },
- // 触底触发
- bottomingOut(){
- if (!this.data.stoppull) {
- var num = this.data.pageNum + 1
- this.setData({
- pageNum: num
- })
- this.getRoom()
- }
- },
- // 搜索值
- onChangeSearch(event){
- this.setData({
- searchValue: event.detail
- })
- },
- //选择房源弹窗
- bindroom() {
- this.setData({
- showSelect: true
- });
- },
- // 获取所有设备
- getAllDeviceSelect(ids,callback){
- var data = {
- q: JSON.stringify({
- roomIds: ids
- })
- }
- WXAPI.getDeviceItems(data).then(res => {
- if(res.data.list.length>0){
- callback(res.data.list)
- }else{
- callback([])
- }
- }).catch(err=>{
- callback([])
- })
- },
- getTree() {
- var _this = this
- WXAPI.getTree('').then(res => {
- var list=res.data.sort((pre, cur)=>pre.id - cur.id)
- var newArr = util.uniqueArray(list, "id");
- var setting = {
- data: {
- simpleData: {
- idKey: 'id',
- pIdKey: 'pid'
- },
- key: {
- children: 'children'
- }
- }
- }
- var dataList = this.transformTozTreeFormat(setting, newArr)
- var selectKey = wx.getStorageSync('selectKey') || ''
- var selectRoomName = wx.getStorageSync('selectRoomName') || ''
- var pid = wx.getStorageSync('pid') || dataList[0].pid
- this.setData({
- dataList: dataList,
- // pid:dataList[0].pid,
- treeList:newArr,
- // selectRoomName:dataList[0].name,
- selectKey,selectRoomName,pid
- })
- this.getRoom()
- })
- },
- // 确认选择房间
- selectRoomId(e){
- this.setData({
- confirmSelectKey:e.currentTarget.dataset.select.id,
- show:false,
- selectRoomName:e.currentTarget.dataset.select.path
- })
- },
- handleSelect(e) {
- console.log(e)
- wx.showToast({
- title: `已选择${e.detail.item.name}`,
- icon: 'none',
- duration: 1000
- })
- wx.setStorageSync('selectKey', e.detail.item.id)
- wx.setStorageSync('selectRoomName', e.detail.item.name)
- wx.setStorageSync('pid', e.detail.item.id)
- this.setData({
- selectKey: e.detail.item.id,
- selectRoomName: e.detail.item.name,
- pid:e.detail.item.id,
- showSelect: false
- })
- this.getRoom2()
- },
- // 获取房间
- getRoom2() {
- var that = this
- var q = {
- ancestor: this.data.selectKey,
- isRoom:1,
- name:this.data.searchValue
- };
- console.log(q)
- var data = {
- q: JSON.stringify(q),
- pageNum: 1,
- pageSize: 20
- };
- WXAPI.getSiteList(data).then(res => {
- var stoppull = false
- if (res.data.list.list.length < 20) {
- stoppull = true
- }
- let setArr = []
- var alllist = res.data.list.list
- alllist.map(lt=>{
- setArr.push(lt.id)
- })
- this.getAllDeviceSelect(setArr,function(data){
- alllist.map(li=>{
- var name = that.findIndexArray(that.data.dataList, li.id, [])
- var path = ''
- if (name) {
- path = name.reverse().join('/')
- }
- li['path'] = path
- var device=data.filter(item=>item.roomId==li.id)[0]
- if(device){
- li.deviceNum=device.deviceNum
- li['battery']=device.battery
- li['rssi']=device.rssi
- li['isOnline']=device.isOnline
- li['manufactureId']=device.manufactureId
- }else{
- li['battery']=''
- li['rssi']=''
- li['isOnline']=''
- li['manufactureId']=''
- }
- })
- that.setData({
- list: alllist,
- stoppull,
- pageNum: 1
- })
- })
- })
- },
- findIndexArray(data,id,indexArray){
- let arr = Array.from(indexArray);
- for(let i=0,len=data.length;i<len;i++){
- arr.push(data[i].name);
- if(data[i].id===id){
- return arr
- }
- let children=data[i].children;
- if(children&&children.length){
- let result=this.findIndexArray(children,id,arr);
- if(result) return result
- }
- arr.pop()
- }
- return false
- },
- transformTozTreeFormat(setting, sNodes) {
- var i, l,
- key = setting.data.simpleData.idKey,
- parentKey = setting.data.simpleData.pIdKey,
- childKey = setting.data.key.children
- if (!key || key == "" || !sNodes) return [];
- var r = [];
- var tmpMap = [];
- for (i = 0, l = sNodes.length; i < l; i++) {
- tmpMap[sNodes[i][key]] = sNodes[i];
- }
- for (i = 0, l = sNodes.length; i < l; i++) {
- if (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] != sNodes[i][parentKey]) {
- if (!tmpMap[sNodes[i][parentKey]][childKey])
- tmpMap[sNodes[i][parentKey]][childKey] = [];
- tmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i]);
- } else {
- r.push(sNodes[i]);
- }
- }
- return r;
- },
- // 获取房间
- getRoom() {
- var that= this
- var q = {
- ancestor: this.data.pid,
- isRoom:1,
- name:this.data.searchValue
- };
- var data = {
- q: JSON.stringify(q),
- pageNum: this.data.pageNum,
- pageSize: this.data.pageSize
- };
- WXAPI.getSiteList(data).then(res => {
- var stoppull = false
- if (res.data.list.list.length < 20) {
- stoppull = true
- }
- let setArr = []
- var alllist = this.data.list.concat(res.data.list.list)
- alllist.map(lt=>{
- setArr.push(lt.id)
- })
- this.getAllDeviceSelect(setArr,function(data){
- alllist.map(li=>{
- var name = that.findIndexArray(that.data.dataList, li.id, [])
- var path = ''
- if (name) {
- path = name.reverse().join('/')
- }
- li['path'] = path
- var device=data.filter(item=>item.roomId==li.id)[0]
- if(device){
- li.deviceNum=device.deviceNum
- li['battery']=device.battery
- li['rssi']=device.rssi
- li['isOnline']=device.isOnline
- li['manufactureId']=device.manufactureId
- }else{
- li['battery']=''
- li['rssi']=''
- li['isOnline']=''
- li['manufactureId']=''
- }
- })
- that.setData({
- list: alllist,
- setRoomArr:setArr,
- stoppull
- })
- })
- })
- },
- getAllDevice(deviceNum,callback){
- var data = {
- q: JSON.stringify({
- deviceNum: deviceNum
- })
- }
- WXAPI.getDeviceItems(data).then(res => {
- if(res.data.list.length>0){
- callback(res.data.list)
- }else{
- callback([])
- }
- }).catch(err=>{
- callback([])
- })
- },
- searchDevicesMethods(){
- var that = this;
- wx.showLoading({
- title: '正在搜索',
- // mask: true
- })
- this.setData({
- searchClick:false
- })
- wx.openBluetoothAdapter({
- success: function (res) {
- wx.startBluetoothDevicesDiscovery({
- success: function (res) {
- wx.getBluetoothDevices({
- success: function (res) {
- wx.hideLoading()
- if(that.data.selectindex==1){
- var deviceList=[]
- res.devices.map(li=>{
- var status=li.name.indexOf('yxwl')
- if(status!=-1){
- that.getAllDevice(li.name,function(data){
- if(data.length>0){
- li.roomName = data[0].roomName
- deviceList.push(li)
- }else{
- li.roomName = ''
- deviceList.push(li)
- }
- })
- }
- })
- setTimeout(()=>{
- that.setData({
- deviceList
- })
- },1000)
- }else if(that.data.selectindex==2||that.data.selectindex==3){
- var deviceList=[]
- res.devices.map(li=>{
- var status=li.name.indexOf('ICIN_')
- if(status!=-1){
- that.getAllDevice(li.name,function(data){
- if(data.length>0){
- li.roomName = data[0].roomName
- deviceList.push(li)
- }else{
- li.roomName = ''
- deviceList.push(li)
- }
- })
- deviceList.push(li)
- }
- })
- setTimeout(()=>{
- that.setData({
- deviceList
- })
- },1000)
- }else if(that.data.selectindex==4){
- var deviceList=[]
- console.log(res);
- res.devices.map(it=>{
- console.log(it);
- var status=it.name.indexOf('WSL_')
- if(status!=-1){
- if (it.RSSI != 127) {
- if (it.advertisData != null) {
- it.adData = util1.ab2hex(it.advertisData)
- if (it.adData.length > 10) {
- var macStr = it.adData.substring(4, 16).toUpperCase()
- //console.log('macStr', macStr)
- it.mac = macStr.substr(10, 2) + ':' + macStr.substr(8, 2) + ':' + macStr.substr(6, 2) + ':' + macStr.substr(4, 2) + ':' + macStr.substr(2, 2) + ':' + macStr.substr(0, 2)
- if (it.adData.substring(1, 2) == '1') {
- it.isLightOn = true
- it.textColor = 'green'
- } else {
- it.isLightOn = false
- it.textColor = 'black'
- }
- if (it.adData.substring(3, 4) == '1') {
- it.textColor = 'pink'
- it.isBind = true
- } else {
- it.isBind = false
- }
- // deviceList.push(it)
- //console.log(it)
- }
- } else {
- it.textColor = 'black'
- }
- console.log(it)
- var lockModel = util1.getLockModel(it.name)
- it.lockType = util1.getLockType(lockModel)
- if(that.data.searchClick){
- wx.navigateTo({
- url: '/pages/Bluetooth/Bluetooth?&deviceNum=' + it.name + '&selectindex=' + that.data.selectindex+'&connectedDeviceId='+ it.deviceId+'&name='+ it.name+'&mac=' + it.mac,
- })
- }else{
- deviceList.push(it)
- }
- app.addDeviceWithDevName(it.name, it)
- }
- }
- })
- that.setData({
- deviceList
- })
- }
- console.log(res)
- }
- })
- },
- fail:function(res){
- wx.hideLoading({
- success: (res) => {
- wx.showToast({
- title: '请重新搜索设备',
- duration:2000,
- icon:'none'
- })
- },
- })
- }
- })
- },
- fail: function (res) {
- console.log('请打开蓝牙和定位功能')
- wx.hideLoading({
- success: (res) => {
- wx.showToast({
- title: '请打开蓝牙和定位功能',
- duration:2000,
- icon:'none'
- })
- },
- })
- }
- })
- },
- searchBlueButton(e) {
- var deviceId=e.currentTarget.dataset.select.name
- this.setData({
- deviceNum:deviceId
- })
- this.linkBule()
- },
- // 扫描
- scanning() {
- var that = this
- wx.showLoading({
- title: '加载中',
- mask: true
- });
- wx.scanCode({
- success(res) {
- var deviceNum = ''
- if (res.result.indexOf('&') != -1) {
- deviceNum = res.result.split('&')[0]
- }else if(res.result.indexOf('WSL') != -1){
- deviceNum = res.result
- }else if (res.result.indexOf('_')) {
- deviceNum = "ICIN_" + res.result.split('_')[0]
- }
- that.setData({
- deviceNum: deviceNum,
- bluestatus: true
- })
- wx.hideLoading()
- },
- fail(res) {
- wx.hideLoading()
- }
- })
- },
- linkBule() {
- wx.stopBluetoothDevicesDiscovery()
- wx.closeBluetoothAdapter()
- if (this.data.deviceNum == '') {
- wx.hideLoading()
- wx.showToast({
- title: '请输入锁号',
- duration: 2000,
- icon: 'none'
- })
- } else {
- // wx.navigateTo({
- // url: '/pages/Bluetooth/Bluetooth?&deviceNum=' + this.data.deviceNum + '&selectindex=' + this.data.selectindex,
- // })
- // return
- if (this.data.selectindex == 1) {
- // wx.navigateTo({
- // url: '/pages/Bluetooth1/Bluetooth1?&deviceNum=' + this.data.deviceNum + '&selectindex=' + this.data.selectindex,
- // })
- // return
- this.startconnect()
- }else if( this.data.selectindex == 4){
- this.searchDevicesMethods()
- this.setData({
- searchClick:true
- })
- } else if (this.data.selectindex == 2||this.data.selectindex == 3) {
- // wx.navigateTo({
- // url: '/pages/Bluetooth/Bluetooth?&deviceNum=' + this.data.deviceNum + '&selectindex=' + this.data.selectindex,
- // })
- // return
- this.goBlue()
- }
- }
- },
-
- ConnectTo: function(e) {
- var that = this
- console.log('ConnectTo', e.currentTarget.dataset.select)
- var bleDevice = app.getDeviceByDevName(e.currentTarget.dataset.select)
- console.log('bleDevice', bleDevice)
- // wx.navigateTo({
- // url: '../lockFun/lockFun?connectedDeviceId=' + bleDevice.deviceId + '&name=' + bleDevice.name + '&mac=' + bleDevice.mac
- // })
- wx.navigateTo({
- url: '/pages/Bluetooth/Bluetooth?&deviceNum=' + bleDevice.name + '&selectindex=' + this.data.selectindex+'&connectedDeviceId='+ bleDevice.deviceId+'&name='+ bleDevice.name+'&mac=' + bleDevice.mac,
- })
- return
- },
- startconnect() {
- wx.showLoading({
- title: "连接中",
- // mask: true
- })
- const ble = new BLE(this.data.deviceNum, emitter)
- app.globalData.ble = ble
- this.watchBLE()
- app.globalData.ble.init()
- },
- watchBLE() {
- var that = this
- if (app.globalData.ble) {
- app.globalData.ble.listen(res => {
- if (res.type == 'connect') {
- if (res.data == "未打开适配器") {
- wx.hideLoading()
- wx.showModal({
- title: "提示",
- content: "请检查手机蓝牙和定位功能是否打开?",
- showCancel: false,
- confirmText: "确定",
- success(res) {}
- });
- } else {
- if (res.data == '蓝牙已连接') {
- this.data.info = res.data
- app.globalData.bleStatus = res.data
- wx.navigateTo({
- url: '/pages/Bluetooth1/Bluetooth1?&deviceNum=' + this.data.deviceNum + '&selectindex=' + this.data.selectindex,
- })
-
- }
- }
- }
- })
- }
- },
- goBlue() {
- var that = this
- wx.showLoading({
- title: '连接中',
- // mask: true
- })
- wx.removeStorageSync("connectedDeviceId")
- ICINLocker.scanDevices(this.data.deviceNum)
- .then((res) => {
- console.log(res)
- if (res.status == 0) {
- //成功找到蓝牙情况下进行锁连接
- app.globalData.blueDeviceId = res.deviceId
- console.log(app.globalData.blueDeviceId, 'blueDeviceId')
- ICINLocker.connect(res.deviceId, false) // 此处 deviceId 存起来,当断开连接时使用
- .then((res) => {
- if (res.status === 0) {
- wx.hideLoading()
- if(this.data.confirmSelectKey){
- wx.navigateTo({
- url: '/pages/Bluetooth/Bluetooth?&deviceNum=' + this.data.deviceNum + '&type=' + this.data.radio+'&selectindex=' + this.data.selectindex+'&selectKey='+this.data.confirmSelectKey+'&selectRoomName='+this.data.selectRoomName,
- })
- }else{
- wx.navigateTo({
- url: '/pages/Bluetooth/Bluetooth?&deviceNum=' + this.data.deviceNum + '&type=' + this.data.radio+'&selectindex=' + this.data.selectindex,
- })
- }
- //此处成功连接锁
- wx.showToast({
- title: res.statusReason,
- duration: 1000,
- icon: 'none'
- })
- } else {
- var msg = ''
- switch (res.errCode) {
- case 10001:
- msg = '调用失败,请打开蓝牙!';
- break;
- }
- wx.showToast({
- title: msg,
- duration: 2000,
- icon: 'none'
- })
- //此处处理返回值不为成功(0)的情况
- }
- }).catch((res) => {
- wx.hideLoading()
- wx.showToast({
- title: '连接错误',
- duration: 2000,
- icon: 'none'
- })
- console.log(res, '失败')
- })
- }
- })
- .catch((res) => {
- if (res.status == 1) {
- if (res.statusReason.errCode == 10001) {
- wx.hideLoading()
- wx.showModal({
- title: "提示",
- content: "请检查手机蓝牙和定位功能是否打开?",
- showCancel: false,
- confirmText: "确定",
- success(res) {}
- });
- } else {
- if (!app.globalData.zgBlueStatus && that.data.bluestatus) {
- that.goBlue()
- } else {
- wx.hideLoading()
- }
- }
- }
- })
- },
- onChange(event) {
- // event.detail 为当前输入的值
- this.setData({
- deviceNum: event.detail
- })
- },
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady: function () {
- app.globalData.zgBlueStatus = false
- },
-
- /**
- * 生命周期函数--监听页面显示
- */
- onShow: function () {
- },
-
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide: function () {
- this.setData({
- bluestatus: false
- })
- },
-
- closeblue() {
- app.globalData.ble.close()
- app.globalData.bleStatus = false
- },
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload: function () {
- this.closeblue()
- },
-
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh: function () {
-
- },
-
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom: function () {
-
- },
-
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage: function () {
-
- }
- })
|