// pages/roomDetail/roomDetail.js const WXAPI = require('../../utils/request') import ICINLocker from "../../utils/ICINPakage/ICINLocker" var methods = require('../../utils/methods'); var util = require('../../utils/util'); const config = require('../../config') const plugin = requirePlugin('myPlugin') const util1 = require('../../utils/util1.js') import IotTask from '../../utils/IotTask' import { BLE } from "../../utils/btls/ble"; // import { clearInterval } from "timers"; const app = getApp(); var bleall = require('../../utils/bleall'); const emitter = app.globalData.emitter import moment from "../../utils/moment" const ADD_NFC_MODE=10 var basecode = '' var isConnected = false var connectedDeviceId = '' var lockDevice = { name: '' } var taskId = 0 var lockModel = '' var lockMac = '' var isSearch = false var isLockLogin = false var isInitReady = false // 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(','); } Page({ /** * 页面的初始数据 */ data: { isUnloked: false, toSearch: true, isSearch: false, event: '', wifiName: '', // wifi名称 wifiPwd: '', // wifi密码 show2: false, // 配网弹出层 passwordStatus:false, addpassword:'', showTwo:false, showOne:false, starttime:'', endtime:'', minDate: '', minDate1: '', info: "", //显示框 deviceinfo: { rssi: 0, battery: 0, lockStatus: 0, isOnline: 0, event: '', bleStatus: '' }, index: 0, fingerprintId: '', openlock: '', IssuingPersonnel: true, backstatus: false, cgInfo: '', zgBlueStatus: false, timer: '', count: 0, show: false, actions: [{ name: '静音', color: '#ee0a24' }, { name: '低音', color: '#333' }, { name: '高音', color: '#333' }, ], volume: '', bluestatus: app.globalData.backstatus, show1: false, TemporaryPassword: '', phone: '', userInfo: { type: '' }, authority: false, showbuleKey:false, deviceList:[], userRole:'', passwordList:[], NfcList:[], remotePasswordStatus:false }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { var personinfo = wx.getStorageSync('info') console.log(personinfo); this.setData({ minDate: moment(personinfo.startTime).format('YYYY-MM-DD HH:mm:ss'), minDate1: moment(personinfo.endTime).format('YYYY-MM-DD HH:mm:ss') }) var userRole = wx.getStorageSync('userRole') || '' this.setData({ userRole }) app.globalData.zgBlueStatus = false this.AddressPermissions() let deviceinfo = wx.getStorageSync('deviceinfo') if(deviceinfo.bluetoothMac){ let superAdmin = [] var superAdminIdlist = deviceinfo.bluetoothMac.slice(deviceinfo.bluetoothMac.length - 11, deviceinfo.bluetoothMac.length).split(":").join("") for (let i = 0; i < superAdminIdlist.length; i++) { if (superAdminIdlist[i] >= 0 && superAdminIdlist[i] <= 9) { superAdmin.push(superAdminIdlist[i]) } else { let adminid = superAdminIdlist.charCodeAt(i) superAdmin.push(adminid) } } let superAdminId = superAdmin.join('').slice(superAdmin.length - 8, superAdmin.length) basecode = superAdminId console.log(basecode, "basecode"); } if(deviceinfo.manufactureId == 201||deviceinfo.manufactureId == 221){ var data3 = { code: "zg/bleRegisterInfo", signature:wx.getStorageSync('signature'), cardId:deviceinfo.cardId, data: { lockerId: deviceinfo.deviceNum } } WXAPI.sendCommandOne(data3).then(res1 => { console.log(res1); if (res1.success) { wx.setStorageSync('cgInfo', res1.data) this.setData({ cgInfo: res1.data }) console.log(this.data.cgInfo); } else { } }) }else{ } this.getApartmentCardInfoMethods() this.getPassWordMehods() app.globalData.deviceNum = deviceinfo.deviceNum console.log("169",this.data.minDate, this.data.minDate1); if(deviceinfo.manufactureId == 101){ app.watch(this.getcartcount, 'backdata') app.watch(this.fingerprintFun, 'fingerprintId') app.watch(this.openlockfun, 'openlock') } }, // 获取合同信息 getApartmentCardInfoMethods(){ let deviceinfoList = wx.getStorageSync('deviceinfoList') if(deviceinfoList[0].cardId){ let data={ signature:wx.getStorageSync('signature'), id:deviceinfoList[0].cardId, } WXAPI.getApartmentCardInfo(data).then(res=>{ console.log("184",res); if(res.success){ let leases = res.data.leases if(leases.length>0){ let leasesObject = leases[leases.length-1] let minDate = moment(leasesObject.signingTime).format('YYYY-MM-DD') let minDate1 = moment(leasesObject.contractTime).format('YYYY-MM-DD') this.setData({ minDate:minDate, minDate1:minDate1 }) }else{ wx.showToast({ title: "还未签订合同", duration: 2000, icon: 'none' }) } }else{ wx.showToast({ title: "获取合同信息失败", duration: 2000, icon: 'none' }) } }) }else{ wx.showToast({ title: "还未有对应合同", duration: 2000, icon: 'none' }) } }, // // 同步平台任务 // synchroPlatformTask() { // wx.showLoading({ // title: '同步平台任务中', // icon: 'none', // mask: true // }) // const iotInstance = new IotTask(this.data.cgInfo.lockerId, this.iotCallBack) // iotInstance.run() // }, // iotCallBack(sendData) { // let _this = this // if (!sendData) return // return new Promise((resolve, reject) => { // console.log(_this.data.cgInfo.commonKey) // ICINLocker.nbIotTransmit(sendData, _this.data.cgInfo.commonKey, (callback) => { // console.log('发送数据' + new Date(), sendData) // console.log('同步任务回调结果' + new Date(), callback) // if (callback) { // resolve(callback.nbIotResp) // } else { // reject('同步任务fail') // } // }) // }) // }, // // 添加远程密码 // addRemotePassword(){ // this.setData({ // showTwo:true, // remotePasswordStatus:true // }) // }, // 配网 changeshow2() { this.setData({ show2: true }) }, onClose2() { this.setData({ show2: false }) }, onChangewifi(e) { this.setData({ wifiName: e.detail }) }, onChangewifi1(e) { this.setData({ wifiPwd: e.detail }) }, configurationWifi() { if(this.data.wifiName == '' || this.data.wifiPwd == '') { return wx.showToast({ title: 'wifi名称和密码不能为空', duration: 2000, icon: "none" }) } let event = { currentTarget: { dataset: { i: '3' } } } this.setData({ event: event.currentTarget.dataset.i }) if(this.data.isSearch){ this.configurewifj() }else{ this.btntest1(event) } }, // 前往密码列表 goPasswordList(){ wx.navigateTo({ url: '/pagesA/passwordList/passwordList', }) }, // 交租跳转 payRentMethods(){ wx.navigateTo({ url: '/pages/rentDetail/rentDetail', }) }, onCloseBlue(){ this.setData({ showbuleKey:false }) }, onCloseTwo(){ this.setData({ showTwo:false, remotePasswordStatus:false }) }, onCloseOne(){ this.setData({ showOne:false }) }, // 选择开始结束时间 bindDateChangeAdd(e){ var str = e.detail.value + " 00:00:00" this.setData({ starttime: str }) }, bindDateChangeAddTwo(e){ var str = e.detail.value + " 23:59:59" this.setData({ endtime: str }) }, addUser(){ var cgInfo=this.data.cgInfo ICINLocker.getSignKey(cgInfo.lockerId, cgInfo.superId, cgInfo.superId, (callback) => { if (callback.status == '00') { ICINLocker.getCommonKey(cgInfo.lockerId, cgInfo.superId, cgInfo.superId, callback.signKey, (callback1) => { if (callback1.status == '00') { ICINLocker.addUserToLock(cgInfo.lockerId, cgInfo.superId, "BLEKEY_8d82e5d527e1", "0o01weit9ti9ti", "00", callback.signKey, "", callback1.commonKey, "00000000", "FFFFFFFF", (callback) => { console.log(callback) }) } }) } }) }, stringToHex(str){     var val="";     for(var i = 0; i < str.length; i++){       if(val == "")         val = str.charCodeAt(i).toString(16);       else         val += str.charCodeAt(i).toString(16);     }     return val;   }, linkBlue(){ wx.navigateTo({ url: '/pages/addBlueButton/addBlueButton', }) }, searchBlueButton(e) { var that = this var cgInfo=this.data.cgInfo var comm=this.stringToHex(e.currentTarget.dataset.select.name) console.log(comm) var deviceId=e.currentTarget.dataset.select.deviceId var keyId="0o01weit9ti9ti" var password="3030000000000000000000000000000000000000" app.globalData.blueDeviceId = e.currentTarget.dataset.select.name var blueKeyId=e.currentTarget.dataset.select.name ICINLocker.connect(deviceId,true) // 此处 deviceId 存起来,当断开连接时使用 .then((res) => { if (res.status == 0) { clearInterval(that.data.timer) this.setData({ bleStatus: '蓝牙已连接', deviceId: deviceId }) app.globalData.zgBlueStatus = true wx.showToast({ title: '连接成功', icon: "none", duration: 2000 }) ICINLocker.readBluetoothBuckle(cgInfo.lockerId, comm, callback2 => { if(callback2.status==0){ ICINLocker.registeBluetoothBuckle(cgInfo.superId, blueKeyId, keyId, password, "", cgInfo.authKey, comm, callback3 => { if(callback3.status==0){ wx.hideLoading() wx.showToast({ title: '添加成功', duration:2000, icon:"none" }) }else{ wx.hideLoading() wx.showToast({ title: '添加成功', duration:2000, icon:"none" }) } }) }else{ wx.hideLoading() wx.showToast({ title: '读取失败', duration:2000, icon:"none" }) } }); } else { wx.hideLoading() var msg = '' switch (res.errCode) { case 10001: msg = '调用失败,请打开蓝牙!'; break; } wx.showToast({ title: msg, duration: 2000, icon: 'none' }) //此处处理返回值不为成功(0)的情况 } }).catch((res) => { wx.hideLoading() console.log(res, '失败') // 此处处理未能连接成功问题 }) }, onChange2(event) { this.setData({ addpassword: event.detail }) }, onChange(event) { this.setData({ phone: event.detail }) }, // 发送临时密码 sendMessage() { var re = /^1\d{10}$/ if (re.test(this.data.phone)) { var data = { code: this.data.TemporaryPassword, phone: this.data.phone, device: this.data.deviceinfo.deviceNum, name: this.data.deviceinfo.roomName } WXAPI.sendEmergence(data).then(res => { if (res.success) { this.setData({ show1: false }) wx.showToast({ title: "发送成功", duration: 2000, icon: "none" }) } else { wx.showToast({ title: "发送失败", duration: 2000, icon: "none" }) } }) } else { wx.showToast({ title: "请输入正确的手机号", duration: 2000, icon: "none" }) } }, // 获取临时密码 getTemporaryPassword() { var data = { code: "zg/getEmergence", signature:wx.getStorageSync('signature'), cardId:this.data.deviceinfo.cardId, data: { lockerId: this.data.deviceinfo.deviceNum } } WXAPI.sendCommandOne(data).then(res => { if (res.success) { this.setData({ TemporaryPassword: res.data.data, show1: true }) } else { wx.showToast({ title: "获取失败", duration: 2000, icon: "none" }) } }) }, // 关闭临时密码弹窗 onClose1() { this.setData({ show1: false }); }, // 关闭设置音量 onClose() { this.setData({ show: false }); }, processCardNumber(cardNo){ var str1=cardNo.substr(0,8) var str2=cardNo.substr(8,8) var num=str2.split("") var status=num.every(item=> item==0) console.log(status,num,'numnum',str1,str2) if(status){ var bbb = str1.split("") var a, b; var aIndex = 0; var bIndex = 1; var arr = []; bbb.forEach((str, index) => { if (index % 2 === 0) { a = str; aIndex += 1 } else { b = str bIndex += 1 } if (a&&b&&(bIndex-aIndex === 1)) { arr.push(a+b) } }); console.log(arr) return arr.join("") }else{ var ll=str1+str2 return ll } }, sendNfc() { var time3 = new Date(this.data.starttime) var time4 = new Date(this.data.endtime) var passwordStartTimecontrast = time3.getTime() / 1000 var passwordEndTimecontrast = time4.getTime() / 1000 if (passwordStartTimecontrast > passwordEndTimecontrast) { wx.showToast({ title: '开始时间不能大于结束时间', duration: 2000, mask:true, icon: 'none' }) return } wx.showLoading({ title: '正在添加', mask: true }) var _this = this var deviceinfo = this.data.deviceinfo var info = JSON.parse(this.data.deviceinfo.info) if (deviceinfo.manufactureId == 101) { } else if (deviceinfo.manufactureId == 201||deviceinfo.manufactureId == 221) { var cgInfo = this.data.cgInfo var passwordStartTime = passwordStartTimecontrast var passwordEndTime = passwordEndTimecontrast var pzname='',cardName='' if(pzname==""){ pzname=_this.data.deviceinfo.name+'-蓝牙-NFC'+(_this.data.NfcList.length+1) cardName=_this.data.deviceinfo.name+'-蓝牙-NFC'+(_this.data.NfcList.length+1) }else{ pzname=_this.data.deviceinfo.name+'-蓝牙-'+pzname cardName=_this.data.deviceinfo.name+'-蓝牙-'+pzname } var dataPasswod = { code: "zg/cardOperate", cardId:deviceinfo.cardId, data: { lockerId: deviceinfo.deviceNum, imei: deviceinfo.imei, lockerUserId: info.userPassword, keyId: info.userPassword, action: 1, taskStatus: 1, order: 6210, startTime: passwordStartTime, endTime: passwordEndTime, cardType: 50, type: ADD_NFC_MODE, roomName: this.data.deviceinfo.roomName, cardName: cardName, operateName:_this.data.deviceinfo.name }, signature:wx.getStorageSync('signature'), } console.log(dataPasswod,'dataPasswod') WXAPI.sendCommandOne(dataPasswod).then(res => { console.log(res,'resres') if (res.success) { var pwdNo = res.data.index var passwordIndex = res.data.index var serialNumber=res.data.serialNumber pwdNo = pwdNo.toString(16) if (pwdNo.length < 2) { pwdNo='0'+pwdNo } var startTime = passwordStartTime.toString(16).toUpperCase() var endTime = passwordEndTime.toString(16).toUpperCase() info.startTime=startTime info.endTime=endTime info.pwdNo = pwdNo methods.bluetoothOperation_ZH(cgInfo,info,7).then(result=>{ if (result.status == '00') { let carNoId=this.processCardNumber(result.cardNo) var datacom = { code: "zg/bleSendVoucherReply", cardId:deviceinfo.cardId, data: { lockerId: deviceinfo.deviceNum, serialNumber: serialNumber, index: passwordIndex, type: ADD_NFC_MODE, cardNo: carNoId.toUpperCase(), result: 1, operateName:_this.data.deviceinfo.name }, signature:wx.getStorageSync('signature'), } WXAPI.sendCommandOne(datacom).then(res2 => { if (res2.success) { var str = { // cardId: this.personInfo.cardId, pzname:pzname, imei: _this.data.deviceinfo.imei, password: carNoId.toUpperCase(), blueCardNo:result.cardNo, userTelephone: info.userTelephone, operateMode: 10, userPassword: info.userPassword, passwordStartTime: passwordStartTime, passwordEndTime: passwordEndTime, is: false, roomName:_this.data.deviceinfo.roomName, } var data = { cardId: _this.data.deviceinfo.cardId, content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1 deviceNum: _this.data.deviceinfo.deviceNum, type: 3, blueCardNo:result.cardNo, imei: _this.data.deviceinfo.imei, serial: serialNumber, startTime: passwordStartTime, endTime: passwordEndTime, signature:wx.getStorageSync('signature'), }; console.log(data, '添加凭证') var datalist = { cardId: _this.data.deviceinfo.cardId, content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1 type: 13, startTime: passwordStartTime, endTime: passwordEndTime, signature:wx.getStorageSync('signature'), }; WXAPI.tsAddCertificate(datalist).then(res6 => { console.log(datalist,'NFC',res6) }) WXAPI.tsAddCertificate(data).then(res3 => { if (res3.success) { var updatedata = { id: res3.data, status:1, signature:wx.getStorageSync('signature'), }; WXAPI.editCertificate(updatedata).then((res2) => { }); console.log(res3, '添加凭证成功') _this.setData({ showOne: false }) _this.getPassWordMehods() wx.hideLoading() wx.showToast({ title: '添加成功', mask:true, icon: 'none', duration: 2000 }) } else { wx.hideLoading() wx.showToast({ title: '添加失败', mask:true, icon: 'none', duration: 2000 }) } }) } }) } else { wx.hideLoading() wx.showToast({ title: '添加失败', mask:true, icon: 'none', duration: 2000 }) var datacom = { code: "zg/bleSendVoucherReply", cardId:deviceinfo.cardId, data: { lockerId: deviceinfo.deviceNum, serialNumber: serialNumber, index: passwordIndex, type: ADD_NFC_MODE, result: 0 }, signature:wx.getStorageSync('signature'), } WXAPI.sendCommandOne(datacom).then(res2 => { console.log(res2, '失败') _this.setData({ showOne: false }) }) } }) } else { wx.showToast({ title: res.msg, duration: 2000, mask:true, icon: 'none' }) } }) } }, // 选择设置音量 onSelect(event) { var volume = '', volume1 = '' if (event.detail.name == '静音') { volume = '00' volume1 = 0 } else if (event.detail.name == '低音') { volume = '01' volume1 = 1 } else if (event.detail.name == '高音') { volume = '02' volume1 = 2 } this.setData({ volume: volume }) wx.showLoading({ title: "正在设置...", }); if (this.data.deviceinfo.manufactureId == 201||this.data.deviceinfo.manufactureId == 221) { this.setVolume(volume) } else if (this.data.deviceinfo.manufactureId == 101) { this.setVolume1(volume) } }, fingerprintFun() { this.data.fingerprintId = app.globalData.fingerprintId }, // 人员管理 personManger() { wx.navigateTo({ url: '/pages/personManger/personManger', }) }, openlockfun() { var that = this this.data.openlock = app.globalData.openlock var userInfo=wx.getStorageSync('deviceinfo') if (app.globalData.openlock == 1) { var data = { code: "ld/bleUnlockRecord", signature:wx.getStorageSync('signature'), cardId:this.data.deviceinfo.cardId, data: { deviceNum: this.data.deviceinfo.deviceNum, userTelephone: "18270949468", password: "2021", roomId:that.data.deviceinfo.roomId, roomName:that.data.deviceinfo.roomName, cardName:userInfo.name, } } console.log(data) WXAPI.sendCommandOne(data).then(res => { }) } else { wx.showToast({ title: "开门失败,请重新开门", duration: 2000, icon: "none" }) } }, getcartcount(val) { var that = this let deviceNum = that.data.deviceinfo.deviceNum if (app.globalData.backdata == 3 && this.data.backstatus) { that.startFp_29(deviceNum, 0x02) } else if (app.globalData.backdata == 2 && this.data.backstatus) { that.startFp_29(deviceNum, 0x01) } else if (app.globalData.backdata == 1 && this.data.backstatus) { var data = { managerTelephone: "18270949468", managerPassword: "202108", userTelephone: JSON.parse(that.data.deviceinfo.info).userTelephone, userPassword: JSON.parse(that.data.deviceinfo.info).userPassword, startTime: "20210813010101", endTime: "20680813010101" } this.data.backstatus = false that.startFp_63(data.managerTelephone, data.managerPassword, data.userTelephone, data.userPassword, data.startTime, data.endTime, 16) } }, startFp_63(managerTelephone, managerPassword, userTelephone, userPassword, startTime, endTime, num) { wx.showLoading({ title: "正在发送...", }); setTimeout(() => { wx.hideLoading() }, 1000); let cmd = 0x63 let mt = util.stringToUint8Array(managerTelephone) let mp = util.stringToUint8Array(managerPassword) let ut = util.stringToUint8Array(userTelephone) let up = util.stringToUint8Array(userPassword) let ust = util.time40ToBytes(startTime) let uet = util.time40ToBytes(endTime) let fst = util.time40ToBytes(startTime) let fet = util.time40ToBytes(endTime) let length = 1 + 11 + 6 + 11 + 6 + 5 + 5 + 4 + 2 + 10 + 5 + 5 + 1 + 2 + 1 let b = new Uint8Array(length) b[0] = cmd b.set(mt, 1) b.set(mp, 12) b.set(ut, 18) b.set(up, 29) b.set(ust, 35) b.set(uet, 40) //权限 b[45] = 0x46; b[46] = 0x46; b[47] = 0x46; b[48] = 0x46; //密码长度 uint16 b[49] = 0 b[50] = 0x0a //密码数据 b[51] = this.data.fingerprintId b[52] = 0xff b[53] = 0xff b[54] = 0xff b[55] = 0xff b[56] = 0xff b[57] = 0xff b[58] = 0xff b[59] = 0xff b[60] = 0xff b.set(fst, 61) b.set(fet, 66) b[71] = 0xff; b[72] = 0xff; b[73] = 0xff; b[74] = num; //添加指纹 app.globalData.ble.send(cmd, b) }, delete_63(managerTelephone, managerPassword, userTelephone, userPassword, startTime, endTime, id) { wx.showLoading({ title: "正在发送...", }); setTimeout(() => { wx.hideLoading() }, 1000); let cmd = 0x63 let mt = util.stringToUint8Array(managerTelephone) let mp = util.stringToUint8Array(managerPassword) let ut = util.stringToUint8Array(userTelephone) let up = util.stringToUint8Array(userPassword) let ust = util.time40ToBytes(startTime) let uet = util.time40ToBytes(endTime) let fst = util.time40ToBytes(startTime) let fet = util.time40ToBytes(endTime) let length = 1 + 11 + 6 + 11 + 6 + 5 + 5 + 4 + 2 + 10 + 5 + 5 + 1 + 2 + 1 let b = new Uint8Array(length) b[0] = cmd b.set(mt, 1) b.set(mp, 12) b.set(ut, 18) b.set(up, 29) b.set(ust, 35) b.set(uet, 40) //权限 b[45] = 0x46; b[46] = 0x46; b[47] = 0x46; b[48] = 0x46; //密码长度 uint16 b[49] = 0 b[50] = 0x0a //密码数据 b[51] = id b[52] = 0xff b[53] = 0xff b[54] = 0xff b[55] = 0xff b[56] = 0xff b[57] = 0xff b[58] = 0xff b[59] = 0xff b[60] = 0xff b.set(fst, 61) b.set(fet, 66) b[71] = 0xff; b[72] = 0xff; b[73] = 0xff; b[74] = 18; //删除指纹 app.globalData.ble.send(cmd, b) }, startFp_29(deviceNum, status) { wx.showLoading({ title: "正在发送...", }); setTimeout(() => { wx.hideLoading() }, 1000); let cmd = 0x29 let dn = util.stringToUint8ArrayWithPadding(deviceNum, 20, 0xff) let length = 1 + 20 + 5 + 1 + 1 let b = new Uint8Array(length) b[0] = cmd b.set(dn, 1) //send data=0x0036000008 b[21] = 0x00; b[22] = 0x36; b[23] = 0; b[24] = 0; b[25] = 0x08 b[26] = status //status: 0x03, 0x02, 0x01 b[27] = 0x01 app.globalData.ble.send(cmd, b) }, // 设置密码 permissionsfun() { wx.navigateTo({ url: "/pages/permissions/permissions" }) }, // 跳转开锁记录页面 getlogList() { wx.navigateTo({ url: "/pages/openLockLog/openLockLog?&roomId=" + this.data.deviceinfo.roomId+"&cardId="+this.data.deviceinfo.cardId }) }, // zg蓝牙连接 openTheDoor() { // if(this.data.deviceinfo.info){ // JSON.parse(this.data.deviceinfo.info) // var deviceinfo = this.data.deviceinfo var that = this var userInfo = wx.getStorageSync('deviceinfo') ICINLocker.getSignKey(this.data.cgInfo.lockerId, this.data.cgInfo.superId, this.data.cgInfo.superId, (callback) => { console.log(callback) if (callback.status == '00') { var userSignKey = callback.signKey ICINLocker.getCommonKey(this.data.cgInfo.lockerId, this.data.cgInfo.superId, this.data.cgInfo.superId, userSignKey, (callback) => { console.log(callback) var commonKey = callback.commonKey ICINLocker.openTheDoor(this.data.cgInfo.lockerId, this.data.cgInfo.superId, userSignKey, this.data.cgInfo.superId, '', '01', commonKey, (callback) => { // that.synchroPlatformTask() var data = { code: "zg/bleUnlockRecord", signature:wx.getStorageSync('signature'), cardId:this.data.deviceinfo.cardId, data: { lockerId: this.data.cgInfo.lockerId, lockerUserId: this.data.cgInfo.superId, roomId:this.data.deviceinfo.roomId, roomName:this.data.deviceinfo.roomName, cardName:userInfo.name, operateName:this.data.deviceinfo.name } } WXAPI.sendCommandOne(data).then(res => { console.log(res) }) }) }) } }); // }else{ // wx.showToast({ // title: '请先下发人员', // duration:2000, // icon:'none' // }) // } }, // 退出登录 loginOut(){ console.log(1111) wx.removeStorage({ key:"signature" }) wx.redirectTo({ url:"/pages/login/login" }) }, // 添加指纹 addFingerPrints() { var userInfo = JSON.parse(this.data.deviceinfo.info) ICINLocker.getCommonKey(this.data.cgInfo.lockerId, this.data.cgInfo.superId, this.data.cgInfo.superId, this.data.cgInfo.authKey, (callback) => { ICINLocker.addFingerPrints(this.data.cgInfo.lockerId, this.data.cgInfo.superId, userInfo.userPassword, this.data.cgInfo.superId, '', this.data.cgInfo.authKey, '00000000', 'FFFFFFFF', '00', callback.commonKey, (callback) => { console.log(callback) }) }) }, changeLockUnlockState: function () { var that = this taskId = 101 that.initBluetooth() }, // 蓝牙初始化 btntest1(e) { var event = e.currentTarget.dataset.i var that = this; this.data.event = event var deviceinfo = this.data.deviceinfo this.setData({ remotePasswordStatus:false }) if (deviceinfo.manufactureId == 201||deviceinfo.manufactureId == 221) { if (app.globalData.zgBlueStatus) { if (event == 0) { this.openTheDoor() } else if (event == 1) { this.addPassword() }else if (event == 3) { this.addFingerPrints() } else if (event == 6) { this.setData({ show: true }) }else if (event == 11) { this.setData({ showOne: true }) }else if (event == 12) { this.goPasswordList() }else if(event == 17){ this.synchronizationTime() } wx.hideLoading() } else { that.goBlue() } } else if (deviceinfo.manufactureId == 101) { if (app.globalData.bleStatus == '蓝牙已连接') { if (event == 0) { this.btntest2() } else if (event == 1) { this.addPassword() }else if (event == 3) { this.btntest3() } else if (event == 6) { // this.setVoice() this.setData({ show: true }) } else if (event == 7) { wx.showModal({ title: "常开设置", cancelText: '关闭', confirmText: '开启', success: (res) => { if (res.confirm) { that.setOpen() } else if (res.cancel) { that.setOpen1() } } }) } } else { this.startconnect() } }else if (deviceinfo.manufactureId == 1201 || deviceinfo.manufactureId == 1241) { console.log("1202", this.data.isSearch, event); if (this.data.isSearch) { if (event == '0') { this.LwjopenLock() }else if(event == '3') { this.configurewifj() }else if(event == '12'){ this.goPasswordList() }else if(event == '1'){ this.addPincode() }else if(event == 71){ this.changeLockUnlockState() }else if(event == 117){ this.syncClock() } } else { this.searchDevicesMethods() } } }, addPincode: function() { var that = this taskId = 51 that.initBluetooth() }, configurewifj() { var that = this taskId = 121 that.initBluetooth() }, 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) { console.log("1128",res) res.devices.map(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 } } } else { it.textColor = 'black' } lockModel = util1.getLockModel(it.name) it.lockType = util1.getLockType(lockModel) if (it.name == that.data.deviceinfo.deviceNum) { app.addDeviceWithDevName(it.name, it) connectedDeviceId = it.deviceId lockDevice = it console.log(lockDevice, it, 'lockDevice,it') app.globalData.isSearch = true that.setData({ isSearch: true, // lockDevice:it }) // let iotLwj = new LwJ(it,isConnected,connectedDeviceId,isInitReady,it.lockModel) // iotLwj.connectTo() if (that.data.event == '0') { // iotLwj.openLock(41) that.LwjopenLock() } else if (that.data.event == '3') { console.log("1298wifi"); that.configurewifj() }else if(that.data.event == '12'){ that.goPasswordList() }else if(that.data.event == '71'){ that.changeLockUnlockState() }else if(that.data.event == '117'){ that.syncClock() } wx.hideLoading({ success: (res) => {}, }) } } } }) if (!that.data.isSearch && that.data.toSearch) { that.searchDevicesMethods() } } }) }, fail: function (res) { wx.hideLoading({ success: (res) => { wx.showToast({ title: res.errMsg, duration: 2000, icon: 'none' }) }, }) } }) }, fail: function (res) { console.log('请打开蓝牙和定位功能') wx.hideLoading({ success: (res) => { wx.showToast({ title: '请打开蓝牙和定位功能', duration: 2000, icon: 'none' }) }, }) } }) }, LwjopenLock: function () { var that = this taskId = 41 that.initBluetooth() }, initBluetooth: function () { var that = this wx.getConnectedBluetoothDevices({ services: [config.uuid.serviceUuid], success: function (res) { res.devices.map(function (it) { if (it.deviceId == connectedDeviceId || it.name == lockDevice.name) { isConnected = true } }) that.setData({ isConnected: isConnected }) console.log('isConnected', isConnected) if (isConnected) { if (isInitReady) { console.log(isInitReady, 'isInitReady', taskId) setTimeout(() => { that.doWork() }, 500) } else { that.setupConnection() } } else { that.connectTo() } }, }) }, doWork: function () { console.log(taskId); var that = this switch (taskId) { case 11: { that.onBindLock() break } case 12: { that.onUnbindLock() break } case 21: { that.onQueryBindState() break } case 22: { that.onQueryBattery() break } case 31: { that.onQueryNbImei() break } case 32: { that.onLogin() break } case 41: { that.LwjonOpenLock() break } case 42: { that.onSyncClock() break } case 51: { that.onAddPincode() break } case 52: { that.onDelPincode() break } case 61: { if (lockModel > 70) { that.onAddRfCard() } else { wx.showModal({ title: '提示', content: '请刷卡!', showCancel: false }) } break } case 62: { that.onDelRfCard() break } case 71: { that.onAddFingerprint() break } case 72: { that.onDelFingerprint() break } case 81: { that.onChangeAdminPincode() break } case 91: { that.onQueryLockSlotState() break } case 92: { that.onQueryLockUnlockState() break } case 101: { that.onChangeLockUnlockState() break } case 102: { that.onChangeLockMutedState() break } case 111: { this.onChangeLockNbState() } case 121: { this.onConfigurewifi() break } case 9010: { this.gotoperson() break } default: { } } }, onChangeLockUnlockState: function () { var that = this wx.showLoading({ title: that.data.isUnloked ? '退出常开模式' : '进入常开模式', }) var bytes = plugin.setLockUnlockState(lockDevice.name, !that.data.isUnloked) console.debug('bytes', bytes) that.sendBytes(bytes) }, onConfigurewifi() { var that = this var bytes = plugin.configureWifi(lockDevice.name, lockMac, that.data.wifiName, that.data.wifiPwd) that.sendBytes(bytes) this.setData({ show2: false }) }, connectTo: function () { var that = this wx.showLoading({ title: '连接中', }) wx.createBLEConnection({ deviceId: lockDevice.deviceId, timeout: config.ble.connectTimeOut, success: function (res) { console.debug('connectTo', res) isConnected = true wx.hideLoading() setTimeout(function () { that.setupConnection() }, 500) }, fail: function (e) { console.debug('connectTo', e) wx.hideLoading() switch (e.errCode) { case 10003: { wx.showModal({ title: '连接失败', content: '是否重新连接?', success: function (res) { if (res.confirm) { that.connectTo() } } }) break } case 10012: { wx.showModal({ title: '连接失败', content: '蓝牙连接超时', showCancel: false }) break } case 10002: { wx.showModal({ title: '连接失败', content: '没有找到指定设备', showCancel: false }) break } } } }) }, setupConnection: function () { var that = this wx.showLoading({ title: '初始化连接中', }) wx.getBLEDeviceServices({ deviceId: lockDevice.deviceId, success: function (res) { console.log('Services', res) wx.getBLEDeviceCharacteristics({ deviceId: lockDevice.deviceId, serviceId: config.uuid.serviceUuid.toUpperCase(), success: function (res) { console.log('Characteristics', res) wx.showLoading({ title: '连接成功', }) wx.onBLECharacteristicValueChange(function (res) { var bytes = new Uint8Array(res.value) console.log('bytes', bytes) console.log(lockDevice.name, 'lockDevice.name1') var data = plugin.parseBytes(lockDevice.name, basecode, bytes) console.log('data', data) switch (data.cmd) { case 'reportLockBattery': { if (data.data.battery < 10) { wx.showModal({ title: '电量报警', content: `门锁当前电量${data.data.battery}%!\n电量严重不足,请立即更换电池!`, showCancel: false }) } else if (data.data.battery < 30) { wx.showModal({ title: '电量预警', content: `门锁当前电量${data.data.battery}%!\n请及时更换电池!`, showCancel: false }) } break } case 'reportRfCardResult': { if (taskId == 61) { wx.showModal({ title: '检测到新卡', content: `是否添加此房卡,卡号:${data.data.cardId}?`, success: function (res) { if (res.confirm) { rfCardId = data.data.cardId that.onAddRfCard() } } }) } else { if (lockModel > 70) { if (data.data.isValid) { wx.showModal({ title: '提示', content: `房卡开锁成功,序号:${data.data.index}!`, showCancel: false }) } else { wx.showModal({ title: '提示', content: `多次刷房卡开锁失败!`, showCancel: false }) } } else { if (data.data.isValid) { wx.showModal({ title: '提示', content: `房卡开锁成功,卡号:${data.data.cardId}!`, showCancel: false }) } else { wx.showModal({ title: '提示', content: `房卡未授权,卡号:${data.data.cardId}!`, showCancel: false }) } } } break } case 'reportPincodeResult': { if (lockModel > 70) { if (data.data.isValid) { wx.showModal({ title: '提示', content: `密码开锁成功,序号:${data.data.index}!`, showCancel: false }) } else { wx.showModal({ title: '提示', content: `多次密码开锁失败!`, showCancel: false }) } } else { if (data.data.isValid) { wx.showModal({ title: '提示', content: `密码:${data.data.pincode}开锁成功!`, showCancel: false }) } else { wx.showModal({ title: '提示', content: `密码:${data.data.pincode}未授权!`, showCancel: false }) } } break } case 'reportFingerprintResult': { if (data.data.isValid) { wx.showModal({ title: '提示', content: `指纹开锁成功,序号:${data.data.index}!`, showCancel: false }) } else { wx.showModal({ title: '提示', content: `多次指纹开锁失败!`, showCancel: false }) } break } case 'queryLockState': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '查询失败!', showCancel: false, success: function (res) {} }) break } that.setData({ lock: { mac: data.data.mac, lockType: util1.getLockType(lockModel), }, isBindLock: data.data.isBind }) lockMac = data.data.mac if (taskId > 0) { if (data.data.isBind) { wx.showModal({ title: data.data.mac, content: '此设备已经硬件绑定!', showCancel: false, success: function (res) {} }) } else { wx.showModal({ title: data.data.mac, content: '此设备硬件未绑定!', showCancel: false, success: function (res) {} }) } } taskId = 0 break } case 'queryLockBattery': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '查询失败!', showCancel: false, success: function (res) {} }) break } taskId = 0 wx.showModal({ title: '提示', content: `此门锁电量为${data.data.battery}%`, showCancel: false, success: function (res) {} }) break } case 'queryNbImei': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '查询失败!', showCancel: false, success: function (res) {} }) break } taskId = 0 wx.showModal({ title: '提示', content: `此NB设备IMEI为${data.data.imei}`, showCancel: false, success: function (res) {} }) break } case 'setNbFun': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '设置Nb功能失败!', showCancel: false, success: function (res) {} }) break } taskId = 0 wx.showModal({ title: '提示', content: that.data.isNbEnable ? 'NB功能已禁用' : 'NB功能已打开', showCancel: false, }) that.setData({ isNbEnable: !that.data.isNbEnable }) break } case 'sendBindLock': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '绑定失败!', showCancel: false, success: function (res) {} }) break } taskId = 0 that.setData({ isBindLock: data.data.isBind }) if (data.data.isBind) { wx.showToast({ title: '绑定成功!', }) } else { wx.showToast({ title: '绑定失败!', }) } break } case 'sendUnbindLock': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '解绑失败!', showCancel: false, success: function (res) {} }) break } taskId = 0 that.setData({ isBindLock: data.data.isBind }) if (data.data.isBind) { wx.showToast({ title: '解绑失败!', }) } else { wx.showToast({ title: '解绑成功!', }) } break } case 'login1': case 'sendOpenLockP1': { if (data.code != 200) { wx.hideLoading() if (taskId == 41) { wx.showModal({ title: '提示', content: that.data.isJack ? '上电失败!' : '解锁失败!', showCancel: false, success: function (res) {} }) } else if (taskId == 32) { wx.showModal({ title: '提示', content: '登录失败!', showCancel: false, success: function (res) {} }) } break } if (taskId == 41) { console.log(lockDevice.name, 'lockDevice.name2') var bytes = plugin.sendOpenLockP2(lockDevice.name, basecode, data.data.randomN) console.debug('bytes', bytes) that.sendBytes(bytes) } else if (taskId == 32) { console.log(lockDevice.name, 'lockDevice.name3') var bytes = plugin.login2(lockDevice.name, basecode, data.data.randomN) console.debug('bytes', bytes) that.sendBytes(bytes) } break; } case 'login': case 'sendOpenLockP2': { wx.hideLoading() if (data.code != 200) { if (taskId == 41) { wx.showModal({ title: '提示', content: that.data.isJack ? '上电失败!' : '解锁失败!', showCancel: false, success: function (res) {} }) } else if (taskId == 32) { wx.showModal({ title: '提示', content: '登录失败!', showCancel: false, success: function (res) {} }) } break } isLockLogin = true if (taskId == 41) { var data = { code: "ble/bleUnlockRecord", data: { deviceNum: that.data.deviceinfo.deviceNum, roomId: that.data.deviceinfo.roomId, roomName: that.data.deviceinfo.roomName, cardName: that.data.userInfo.username, productId: that.data.deviceinfo.manufactureId, userId: '29283991' } } WXAPI.sendCommand(data).then(res => { console.log(res) }) wx.showToast({ title: that.data.isJack ? '上电成功!' : '解锁成功!', }) } else if (taskId == 32) { wx.showToast({ title: '登录成功!', }) } taskId = 0 break; } case 'syncClock': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '同步时间失败!' + data.data.msg, showCancel: false, success: function (res) {} }) break } taskId = 0 wx.showModal({ title: '提示', content: '时间更新成功!', showCancel: false }) break; } case 'addPincode': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '添加密码失败!' + data.data.msg, showCancel: false, success: function (res) {} }) break } taskId = 0 that.setData({ isPincodeAdd: true }) wx.showModal({ title: '提示', content: `添加密码${pincode}成功!`, showCancel: false }) break } case 'delPincode': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '删除密码失败!', showCancel: false, success: function (res) {} }) break } taskId = 0 wx.showModal({ title: '提示', content: `删除密码${pincode}成功!`, showCancel: false, }) that.setData({ isPincodeAdd: false }) pincode = -1 pincodeIndex = -1 break } case 'addRfCard': { wx.hideLoading() if (data.code == 100) { wx.showLoading({ title: data.data.msg, }) break } else if (data.code != 200) { wx.showModal({ title: '提示', content: '添加房卡失败!' + data.data.msg, showCancel: false, success: function (res) {} }) break } taskId = 0 that.setData({ isRfCardAdd: true }) if (lockModel > 70) { wx.showModal({ title: '提示', content: `添加房卡成功,序号${rfCardIndex}!`, showCancel: false }) } else { wx.showModal({ title: '提示', content: `添加房卡成功,卡号${rfCardId}!`, showCancel: false }) } break } case 'delRfCard': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '删除房卡失败!', showCancel: false, success: function (res) {} }) break } taskId = 0 that.setData({ isRfCardAdd: false }) if (lockModel > 70) { wx.showModal({ title: '提示', content: `删除房卡成功,序号${rfCardIndex}!`, showCancel: false, }) } else { wx.showModal({ title: '提示', content: `删除房卡成功,卡号${rfCardId}!`, showCancel: false, }) } rfCardId = -1 rfCardIndex = -1 break } case 'addFingerprint': { wx.hideLoading() if (data.code == 100) { wx.showLoading({ title: data.data.msg, }) break } else if (data.code != 200) { wx.showModal({ title: '提示', content: '添加指纹失败!' + data.data.msg, showCancel: false, success: function (res) {} }) break } taskId = 0 that.setData({ isFingerprintAdd: true }) wx.showModal({ title: '提示', content: `添加指纹成功,序号${fingerprintIndex}!`, showCancel: false }) break } case 'delFingerprint': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '删除指纹失败!', showCancel: false, success: function (res) {} }) break } taskId = 0 wx.showModal({ title: '提示', content: `删除指纹成功,序号${fingerprintIndex}!`, showCancel: false, }) that.setData({ isFingerprintAdd: false }) fingerprintIndex = -1 break } case 'changeAdminPincode': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '修改管理密码失败!', showCancel: false, success: function (res) {} }) break } taskId = 0 wx.showToast({ title: '修改管理密码成功!', }) } case 'queryLockSlotState': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '查询失败!', showCancel: false, success: function (res) {} }) break } taskId = 0 wx.showModal({ title: '提示', content: data.data.state == 0 ? '此门锁方舌关闭' : '此门锁方舌打开', showCancel: false, success: function (res) {} }) break } case 'queryLockUnlockState': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '查询失败!', showCancel: false, success: function (res) {} }) break } taskId = 0 wx.showModal({ title: '提示', content: data.data.state == 0 ? '此门锁已关闭' : '此门锁已打开', showCancel: false, success: function (res) {} }) break } case 'setLockUnlockState': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '设置常开指令失败!', showCancel: false, success: function (res) {} }) break } taskId = 0 wx.showModal({ title: '提示', content: data.data.state == 0 ? '常开模式已退出' : '常开模式已开启', showCancel: false, }) that.setData({ isUnloked: data.data.state == 1 }) break } case 'setLockMuteState': { wx.hideLoading() if (data.code != 200) { wx.showModal({ title: '提示', content: '设置静音指令失败!', showCancel: false, success: function (res) {} }) break } taskId = 0 wx.showModal({ title: '提示', content: data.data.state == 1 ? '静音模式已退出' : '静音模式已开启', showCancel: false, }) that.setData({ isMuted: data.data.state == 0 }) break } } }) wx.notifyBLECharacteristicValueChange({ deviceId: lockDevice.deviceId, serviceId: config.uuid.serviceUuid.toUpperCase(), characteristicId: config.uuid.notifyUuid.toUpperCase(), state: true, success: function (res) { console.log('setupNotify', res) isInitReady = true setTimeout(function () { wx.hideLoading() // that.onQueryBindState() // if (taskId == '41' && that.data.event == '0') { // that.doWork() // }else if(taskId == '121' && that.data.event == '3') { // that.doWork() // }else if(taskId == '9010' && that.data.event == '8') { // that.doWork() // } that.doWork() }, 500) }, }) }, }) }, }) }, synchronizationTime() { var time = parseInt(new Date().getTime() / 1000) ICINLocker.getSignKey(this.data.cgInfo.lockerId, this.data.cgInfo.superId, this.data.cgInfo.superId, (callback) => { var signKey = callback.signKey ICINLocker.getCommonKey(this.data.cgInfo.lockerId, this.data.cgInfo.superId, this.data.cgInfo.superId, signKey, (callback1) => { var _commonKey = callback1.commonKey ICINLocker.updateTime(this.data.cgInfo.lockerId, this.data.cgInfo.superId, time, '', _commonKey, callback2 => { if (callback2.status == '00') { wx.showToast({ title: '同步时间成功', duration: 2000, icon: 'none' }) this.setData({ showIP: false }) } else { wx.showToast({ title: '同步时间失败,错误码:' + callback2.status, duration: 2000, icon: 'none' }) } }); }) }) }, syncClock: function() { var that = this taskId = 42 that.initBluetooth() }, onSyncClock: function() { var that = this wx.showLoading({ title: '同步时钟中', }) console.log(lockDevice.name, basecode, util1.getLocalTime(8), '0000') var bytes = plugin.syncClock(lockDevice.name, basecode, util1.getLocalTime(8)) console.debug('bytes', bytes) that.sendBytes(bytes) }, LwjonOpenLock: function () { var that = this wx.showLoading({ title: that.data.isJack ? '上电中' : '解锁中', }) console.log(lockDevice.name, 'lockDevice.name0开锁中') var bytes = plugin.sendOpenLockP1(lockDevice.name, basecode) console.debug('bytes', bytes) that.sendBytes(bytes) }, sendBytes(bytes) { console.log(lockDevice, config, bytes, 'sendBytes---') setTimeout(function () { wx.writeBLECharacteristicValue({ deviceId: lockDevice.deviceId, serviceId: config.uuid.serviceUuid.toUpperCase(), characteristicId: config.uuid.writeUuid.toUpperCase(), value: bytes, success: function (res) { }, }) }, 50) }, goBlue() { var that = this wx.showLoading({ title: '连接中', }) console.log(this.data.deviceinfo.deviceNum, 'this.data.deviceinfo.deviceNum') ICINLocker.scanDevices(this.data.deviceinfo.deviceNum) .then((res) => { console.log(res) if (res.status == 0) { var deviceId = res.deviceId //成功找到蓝牙情况下进行锁连接 app.globalData.blueDeviceId = res.deviceId ICINLocker.connect(res.deviceId,false) // 此处 deviceId 存起来,当断开连接时使用 .then((res) => { if (res.status == 0) { clearInterval(that.data.timer) this.setData({ bleStatus: '蓝牙已连接', deviceId: deviceId, isSearch: true }) app.globalData.zgBlueStatus = true wx.hideLoading() wx.showToast({ title: '连接成功', icon: "none", duration: 2000 }) setTimeout(() => { if (this.data.event == 0) { this.openTheDoor() }else if(this.data.event == 1){ this.addPassword() } else if (this.data.event == 3) { this.addFingerPrints() } else if (this.data.event == 6) { this.setData({ show: true }) }else if(this.data.event == 11){ this.setData({ showOne: true }) }else if (this.data.event == 12) { this.goPasswordList() }else if(this.data.event == 17){ this.synchronizationTime() } },500) } else { wx.hideLoading() var msg = '' switch (res.errCode) { case 10001: msg = '调用失败,请打开蓝牙!'; break; } wx.showToast({ title: msg, duration: 2000, icon: 'none' }) //此处处理返回值不为成功(0)的情况 } }).catch((res) => { wx.hideLoading() console.log(res, '失败') // 此处处理未能连接成功问题 }) } }) .catch((res) => { //此处处理未能连接到蓝牙的问题 if (res.status == 1) { if (res.statusReason.errCode == 10001) { wx.hideLoading() wx.showToast({ title: '请检查手机蓝牙和定位功能是否打开?', duration: 2000, icon: 'none' }) } else { if (!app.globalData.zgBlueStatus && that.data.bluestatus) { that.goBlue() } else { wx.hideLoading() } } }else{ wx.hideLoading() } }) }, /** * *设置音量 * @param {门锁ID} _lockId * @param {用户ID – 最多20字节} _userId * @param {r 声音选项 00: 静音 01: 低音 02:高音} _action * @param _commonKey * @param {回调方法} callback **/ // 设置音量 setVolume1(volume) { wx.showLoading({ title: "正在发送...", }); setTimeout(() => { wx.hideLoading() }, 1000); let cmd = 0xF2 // let dn = util.stringToUint8ArrayWithPadding(deviceNum, 20, 0xff) let length = 2 let b = new Uint8Array(length) b[0] = cmd b[1] = volume; app.globalData.ble.send(cmd, b, function (res) { }) }, setVolume(volume) { ICINLocker.getSignKey(this.data.cgInfo.lockerId, this.data.cgInfo.superId, this.data.cgInfo.superId, (callback) => { console.log(callback, '-----') if (callback.status == '00') { ICINLocker.getCommonKey(this.data.cgInfo.lockerId, this.data.cgInfo.superId, this.data.cgInfo.superId, callback.signKey, (callback1) => { console.log(callback1, '2222222') if (callback1.status == '00') { ICINLocker.setVolume(this.data.cgInfo.lockerId, this.data.cgInfo.superId, volume, callback1.commonKey, (callback2) => { console.log(callback2, '333333333') if (callback2.status == '00') { wx.hideLoading() wx.showToast({ title: '设置成功', duration: 2000, icon: 'none' }) } else { wx.hideLoading() wx.showToast({ title: '设置失败', duration: 2000, icon: 'none' }) } }) } else { wx.hideLoading() wx.showToast({ title: '设置失败', duration: 2000, icon: 'none' }) } }) } else { wx.hideLoading() wx.showToast({ title: '设置失败', duration: 2000, icon: 'none' }) } }); }, //设置常开 setOpen() { wx.showLoading({ title: "正在开启...", }); setTimeout(() => { wx.hideLoading() }, 1000); let cmd = 0xF3 // let dn = util.stringToUint8ArrayWithPadding(deviceNum, 20, 0xff) let length = 2 let b = new Uint8Array(length) b[0] = cmd b[1] = 1; app.globalData.ble.send(cmd, b, function (res) {}) }, setOpen1() { wx.showLoading({ title: "正在关闭...", }); setTimeout(() => { wx.hideLoading() }, 1000); let cmd = 0xF3 // let dn = util.stringToUint8ArrayWithPadding(deviceNum, 20, 0xff) let length = 2 let b = new Uint8Array(length) b[0] = cmd b[1] = 0; app.globalData.ble.send(cmd, b, function (res) {}) }, //设置音量 setVoice() { }, startconnect() { //if(checkWechatVersion()) // { wx.showLoading({ title: "连接中" }) var deviceinfo = this.data.deviceinfo const ble = new BLE(this.data.deviceinfo.deviceNum, emitter) app.globalData.ble = ble this.watchBLE() app.globalData.ble.init() // } }, watchBLE() { var that = this var deviceinfo = this.data.deviceinfo if (app.globalData.ble) { app.globalData.ble.listen(res => { if (res.type == 'connect') { if (res.data == "未打开适配器") { wx.hideLoading() wx.showToast({ title: '请检查手机蓝牙和定位功能是否打开?', duration: 2000, icon: 'none' }) } else { if (res.data == '蓝牙已连接') { this.data.info = res.data app.globalData.bleStatus = res.data if (this.data.event == 0) { this.btntest2() } else if(this.data.event == 1){ this.addPassword() }else if (this.data.event == 3) { this.btntest3() } else if (this.data.event == 6) { // this.setVoice() this.setData({ show: true }) } else if (this.data.event == 7) { wx.showModal({ title: "常开设置", cancelText: '关闭', confirmText: '开启', success: (res) => { if (res.confirm) { that.setOpen() } else if (res.cancel) { that.setOpen1() } } }) } } } } }) } }, // 添加密码 addPassword(){ this.setData({ showTwo:true }) }, async getPassWordMehods(){ var that=this let deviceinfoList = wx.getStorageSync('deviceinfo') var data = { id:deviceinfoList.cardId, signature:wx.getStorageSync('signature'), }; WXAPI.tsGetCertificate(data).then(res=>{ if(res.success){ var dataOne=[],dataTwo=[] res.data.map(li=>{ if(li.type == 14){ li.content=JSON.parse(li.content) dataOne.push(li) }else if(li.type == 13){ li.content=JSON.parse(li.content) dataTwo.push(li) } }) this.setData({ passwordList:dataOne, NfcList:dataTwo }) }else{ wx.showToast({ title: '获取失败', duration:'2000', mask:true, icon:'none' }) } }) }, async sendPassword() { var addpassword = this.data.addpassword.toString() if(addpassword.length!=6){ wx.showToast({ title: '格式错误,密码为6位数字!', icon:'none' }) return false; } var time3 = new Date(this.data.starttime) var time4 = new Date(this.data.endtime) var passwordStartTimecontrast = time3.getTime() / 1000 var passwordEndTimecontrast = time4.getTime() / 1000 let passwordStatus = this.data.passwordStatus console.log(time3,time4,passwordStartTimecontrast,passwordEndTimecontrast) // await this.getPassWordMehods(this.data.addpassword,this.data.deviceinfo.cardId,14) let paaaWd=this.data.passwordList.filter(lt=> lt.content.password == this.data.addpassword) if(paaaWd.length > 0){ passwordStatus = false }else{ passwordStatus = true } if(this.data.addpassword==''){ wx.showToast({ title: '密码不能为空', mask:true, duration: 2000, icon: 'none' }) return } if(!passwordStatus){ wx.showToast({ title: '已存在该密码,请重输', duration: 2000, mask:true, icon: 'none' }) return } if (passwordStartTimecontrast > passwordEndTimecontrast) { wx.showToast({ title: '开始时间不能大于结束时间', duration: 2000, mask:true, icon: 'none' }) return } wx.showLoading({ title: '正在添加', mask:true, }) var _this = this var deviceinfo = this.data.deviceinfo if(this.data.remotePasswordStatus){ var pzname='',cardName='' pzname=_this.data.deviceinfo.name+'-远程-密码'+(_this.data.passwordList.length+1) cardName=_this.data.deviceinfo.name+'-远程-密码'+(_this.data.passwordList.length+1) let dataObject={ code: "zg/tempPassword", data: { lockerId: deviceinfo.deviceNum, imei: deviceinfo.imei, order: 6207, lockerUserId: JSON.parse(deviceinfo.info).userPassword, passwordCount: 255, keyId: JSON.parse(deviceinfo.info).userPassword, passwordStartTime: passwordStartTimecontrast, passwordEndTime: passwordEndTimecontrast, action: 1, password: addpassword, cardName: cardName, roomName: deviceinfo.roomName }, operateName:_this.data.deviceinfo.name, signature:wx.getStorageSync('signature'), cardId: deviceinfo.cardId, } WXAPI.sendCommandOne(dataObject).then(res=>{ if (res.success) { let dataPassword = { imei: deviceinfo.imei, deviceNum: deviceinfo.deviceNum, userTelephone: JSON.parse(deviceinfo.info).userTelephone, cardId: deviceinfo.cardId, userPassword: JSON.parse(deviceinfo.info).userPassword, password: addpassword, operateMode: 7, order: 6207, type: 4, passwordStartTime: passwordStartTimecontrast, passwordEndTime: passwordEndTimecontrast, is: false, cardName: cardName, roomName: deviceinfo.roomName, pzname: pzname, pass: false }; var data = { cardId: _this.data.deviceinfo.cardId, content: JSON.stringify(dataPassword), //operateMode:NFC-10、把人员添加到凭证-1 deviceNum: _this.data.deviceinfo.deviceNum, type: 4, imei: _this.data.deviceinfo.imei, serial: res.data.serialNumber, startTime: passwordStartTimecontrast, endTime: passwordEndTimecontrast, signature:wx.getStorageSync('signature'), }; var datalist = { cardId: _this.data.deviceinfo.cardId, content: JSON.stringify(dataPassword), //operateMode:NFC-10、把人员添加到凭证-1 type: 14, startTime: passwordStartTimecontrast, endTime: passwordEndTimecontrast, signature:wx.getStorageSync('signature'), }; console.log(datalist,'密码11') WXAPI.tsAddCertificate(datalist).then(res6 => { console.log(datalist,'密码22') }) wx.showToast({ title: '下发成功', icon: 'none', mask:true, duration: 2000 }) WXAPI.tsAddCertificate(data).then(res3 => { if (res3.success) { // var updatedata = { // id: res3.data, // status:1, // signature:wx.getStorageSync('signature'), // }; // WXAPI.editCertificate(updatedata).then((res2) => { // }); _this.getPassWordMehods() _this.setData({ showTwo: false }) wx.hideLoading() wx.showToast({ title: '下发成功', icon: 'none', mask:true, duration: 2000 }) } else { wx.hideLoading() wx.showToast({ title: '添加失败', mask:true, icon: 'none', duration: 2000 }) } }) }else{ wx.showToast({ title: `${res.msg}`, duration:2000, icon:'none' }) } }) }else{ if (deviceinfo.manufactureId == 101) { var time1 = moment(this.data.starttime).format("YYYYMMDDHHmmss") var time2 = moment(this.data.endTime).format("YYYYMMDDHHmmss") var time3 = new Date(_this.data.starttime.replace(/-/g, '/')) var time4 = new Date(_this.data.endTime.replace(/-/g, '/')) var passwordStartTime = time3.getTime() / 1000 var passwordEndTime = time4.getTime() / 1000 let info = JSON.parse(_this.data.deviceinfo.info) var data1 = { managerTelephone: "18270949468", managerPassword: '202108', userTelephone: info.userTelephone, userPassword: info.userPassword, password: this.data.addpassword, startTime: time1, endTime: time2, } var timestamp = moment().format("x") bleall.startFp1_63(data1.managerTelephone, data1.managerPassword, data1.userTelephone, data1.userPassword, data1.password, data1.startTime, data1.endTime, 7, timestamp, function (res) { console.log(res) if (res.success) { var pzname='',cardName='' pzname=_this.data.deviceinfo.name+'-蓝牙-密码'+(_this.data.passwordList.length+1) cardName=_this.data.personLi.name+'-蓝牙-密码'+(_this.data.passwordList.length+1) var str = { // cardId: this.personInfo.cardId, pzname:pzname, imei: _this.data.deviceinfo.imei, password: _this.data.addpassword, userTelephone: info.userTelephone, operateMode: 7, userPassword: info.userPassword, passwordStartTime: time1, passwordEndTime: time2, is: false, pass:true } var data3 = { code: "ble/operateUserInfo", signature:wx.getStorageSync('signature'), cardId:_this.data.deviceinfo.cardId, data: { deviceNum: _this.data.deviceinfo.deviceNum, imei: _this.data.deviceinfo.imei, userTelephone: info.userTelephone, userPassword: info.userPassword, password: _this.data.password, userStartTime: time1, userEndTime: time2, passwordStartTime: time1, passwordEndTime: time2, operateMode: 7, order: 6207, timestamp: timestamp, managerTelephone: '18270949468', managerPassword: '202108', passwordLength: 10, permission: 4294967295, times: 255, recycleTime: "65535", roomName: _this.data.deviceinfo.roomName, cardName: cardName, } } WXAPI.sendCommandOne(data3).then(res3 => { if (res3.success) { var data4 = { result: 1, serial: res3.data.serialNumber } WXAPI.updatePush(data4).then(res4 => { }) var data = { cardId: _this.data.deviceinfo.cardId, content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1 deviceNum: _this.data.deviceinfo.deviceNum, type: 4, imei: _this.data.deviceinfo.imei, serial: res3.data.serialNumber, startTime: passwordStartTime, endTime: passwordEndTime, signature:wx.getStorageSync('signature'), }; var datalist = { cardId: _this.data.deviceinfo.cardId, content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1 type: 14, startTime: passwordStartTime, endTime: passwordEndTime, signature:wx.getStorageSync('signature'), }; console.log(datalist,'密码11') WXAPI.tsAddCertificate(datalist).then(res6 => { console.log(datalist,'密码22') }) WXAPI.tsAddCertificate(data).then(res3 => { if (res3.success) { var updatedata = { id: res3.data, status:1, signature:wx.getStorageSync('signature'), }; WXAPI.editCertificate(updatedata).then((res2) => { }); _this.getPassWordMehods() _this.setData({ showTwo: false }) wx.hideLoading() wx.showToast({ title: '添加成功', icon: 'none', mask:true, duration: 2000 }) } else { wx.hideLoading() wx.showToast({ title: '添加失败', mask:true, icon: 'none', duration: 2000 }) } }) } else { wx.showToast({ title: res3.msg, mask:true, icon: 'none', duration: 2000 }) } }) }else{ wx.hideLoading() if (res.data == "蓝牙功能暂不支持") { _this.startconnect() }else{ wx.showToast({ title: '下发失败', mask:true, duration: 2000, icon: "none" }) } } }) }else if(deviceinfo.manufactureId == 201||deviceinfo.manufactureId == 221){ var cgInfo = this.data.cgInfo console.log(passwordStartTimecontrast,passwordEndTimecontrast) var passwordStartTime = passwordStartTimecontrast var passwordEndTime = passwordEndTimecontrast var pzname='',cardName='' console.log(_this.data.passwordList,_this.data.deviceinfo) pzname=_this.data.deviceinfo.name+'-蓝牙-密码'+(_this.data.passwordList.length+1) cardName=_this.data.deviceinfo.name+'-蓝牙-密码'+(_this.data.passwordList.length+1) let info = JSON.parse(_this.data.deviceinfo.info) var dataPasswod = { code: "zg/tempPassword", cardId:deviceinfo.cardId, data: { lockerId: deviceinfo.deviceNum, imei: deviceinfo.imei, passwordCount: 255, lockerUserId: info.userPassword, keyId: info.userPassword, passwordStartTime: passwordStartTime, passwordEndTime: passwordEndTime, order: 6207, action: 1, password: this.data.addpassword, type: 1, roomName: this.data.deviceinfo.roomName, cardName: cardName, operateName:_this.data.deviceinfo.name }, signature:wx.getStorageSync('signature'), } console.log(dataPasswod) WXAPI.sendCommandOne(dataPasswod).then(res => { console.log(res, '获取索引') if (res.success) { var pwdNo = res.data.index var passwordIndex = res.data.index // var str = res.data.index pwdNo = pwdNo.toString(16) if (pwdNo.length < 2) { pwdNo='0'+pwdNo } var startTime = passwordStartTime.toString(16).toUpperCase() var endTime = passwordEndTime.toString(16).toUpperCase() console.log(startTime,endTime) info.startTime=startTime info.endTime=endTime info.pwdNo=pwdNo info.password=_this.data.addpassword methods.bluetoothOperation_ZH(cgInfo,info,3).then(result=>{ console.log(result) if (result.status == '00') { var datacom = { code: "zg/bleSendVoucherReply", signature:wx.getStorageSync('signature'), cardId:deviceinfo.cardId, data: { lockerId: deviceinfo.deviceNum, serialNumber: res.data.serialNumber, index: passwordIndex, type: 7, result: 1, operateName:_this.data.deviceinfo.name } } var str = { // cardId: this.personInfo.cardId, imei: deviceinfo.imei, pzname:pzname, password: _this.data.addpassword, userTelephone: info.userTelephone, operateMode: 7, userPassword: info.userPassword, passwordStartTime: passwordStartTime, passwordEndTime: passwordEndTime, is: false, pass:true } var data = { cardId: deviceinfo.cardId, content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1 deviceNum: deviceinfo.deviceNum, type: 4, imei: deviceinfo.imei, serial: res.data.serialNumber, startTime: passwordStartTime, endTime: passwordEndTime, signature:wx.getStorageSync('signature'), }; var datalist = { cardId: deviceinfo.cardId, content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1 type: 14, startTime: passwordStartTime, endTime: passwordEndTime, signature:wx.getStorageSync('signature'), }; console.log(datalist,'密码11') WXAPI.tsAddCertificate(datalist).then(res6 => { console.log(datalist,'密码22',res6) }) console.log(data, '添加凭证') WXAPI.tsAddCertificate(data).then(res3 => { if (res3.success) { var updatedata = { id: res3.data, status:1, signature:wx.getStorageSync('signature'), }; WXAPI.editCertificate(updatedata).then((res2) => { }); WXAPI.sendCommandOne(datacom).then(res2 => { if (res2.success) {} }) console.log(res3, '添加凭证成功') _this.setData({ show: false, showTwo:false }) _this.getPassWordMehods() wx.hideLoading() wx.showToast({ title: '添加成功', mask:true, icon: 'none', duration: 2000 }) } else { wx.hideLoading() wx.showToast({ title: '添加失败', mask:true, icon: 'none', duration: 2000 }) } }) } else { wx.showToast({ title: '添加失败', mask:true, icon: 'none', duration: 2000 }) var datacom = { code: "zg/bleSendVoucherReply", signature:wx.getStorageSync('signature'), cardId:deviceinfo.cardId, data: { lockerId: deviceinfo.deviceNum, serialNumber: res.data.serialNumber, index: res.data.index, type: 7, result: 0 } } WXAPI.sendCommandOne(datacom).then(res2 => { console.log(res2, '失败') _this.setData({ show: false }) }) } }) // .catch(err=>{ // wx.hideLoading() // wx.showToast({ // title: '添加失败', // icon: 'none', // mask:true, // duration: 2000 // }) // var datacom = { // code: "zg/bleSendVoucherReply", // signature:wx.getStorageSync('signature'), // data: { // lockerId: deviceinfo.deviceNum, // serialNumber: res.data.serialNumber, // index: res.data.index, // type: 7, // result: 0 // } // } // WXAPI.sendCommandOne(datacom).then(res2 => { // console.log(res2, '失败') // _this.setData({ // show: false // }) // }) // }) } else { wx.showToast({ title: res.msg, duration: 2000, mask:true, icon: 'none' }) } }) }else if(deviceinfo.manufactureId == 1201 || deviceinfo.manufactureId == 1241){ } } }, closeblue() { app.globalData.ble.close() this.data.info = '' app.globalData.bleStatus = false this.data.bleStatus = false, this.data.respond = [] }, closeblue1() { // wx.showLoading({ // title: "正在停止...", // }); app.globalData.ble.close() // setTimeout(() => { // wx.hideLoading() // }, 1000); this.data.info = '' app.globalData.bleStatus = false this.data.bleStatus = false, this.data.respond = [] }, btntest3(event) { var that = this let deviceNum = that.data.deviceinfo.deviceNum this.data.backstatus = true that.startFp_29(deviceNum, 0x03) // setTimeout(() => { // that.getcartcount() // }, 300) }, btntest2(event) { var that = this let userTelephone = "18270949468" //JSON.parse(this.data.deviceinfo.info).userTelephone let userPassword = "202108" //JSON.parse(this.data.deviceinfo.info).userPassword let pwd = "2021110309" //JSON.parse(this.data.deviceinfo.info).userPassword let openLockType = 2 var userInfo=wx.getStorageSync('deviceinfo') var timestamp = moment().format("x") bleall.openLock(userTelephone, userPassword, pwd, openLockType, timestamp, function (res) { if (res.success) { var data = { code: "ld/bleUnlockRecord", signature:wx.getStorageSync('signature'), cardId:that.data.deviceinfo.cardId, data: { deviceNum: that.data.deviceNum, userTelephone: userTelephone, password: userPassword, roomId:that.data.deviceinfo.roomId, roomName:that.data.deviceinfo.roomName, cardName:userInfo.name, } } WXAPI.sendCommandOne(data).then(res => { }) } if (res.data == "蓝牙功能暂不支持") { wx.showToast({ title: '重新连接蓝牙中', duration: 2000, icon: "none" }) that.startconnect() } }) }, openLock(userTelephone, userPassword, pwd, openLockType) { wx.showLoading({ title: "正在发送...", }); setTimeout(() => { wx.hideLoading() }, 1000); let cmd = 0x41 console.log(util, userTelephone) let ut = util.stringToUint8Array(userTelephone) let up = util.stringToUint8Array(userPassword) let p = util.hexStringToBytesWithPadding(pwd, 10, 0xff) let length = 1 + 11 + 6 + 10 + 1 let b = new Uint8Array(length) b[0] = cmd b.set(ut, 1) b.set(up, 12) b.set(p, 18) b[28] = openLockType console.log(b) app.globalData.ble.send(cmd, b, length) }, //远程开锁 remoteUnlocking() { if (this.data.info == '蓝牙已连接') { this.closeblue1() } var str2 = { imei: this.data.deviceinfo.imei, openLockType: 2, is: true, }; WXAPI.openLock(str2).then(res => { if (res.data.success) { wx.showToast({ title: "操作成功", icon: "none", duration: 2000 }) } }) }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { app.globalData.zgBlueStatus = false // this.btntest1() }, AddressPermissions() { wx.openBluetoothAdapter({ success: function (res) { console.log('蓝牙已开启!'); }, fail: function (e) { console.log(e) wx.showToast({ title: '请打开蓝牙!', duration: 2000, icon: 'none' }) } }); ICINLocker.getLocationPermission().then((res) => { if (res.status == 0) {} else { // 连接出现问题 } }).catch((res) => { //处理未能获得地理位置情况 wx.showToast({ title: '请打开微信定位功能!', duration: 2000, icon: 'none' }) }) }, /** * 生命周期函数--监听页面显示 */ onShow: function () { var deviceinfo = wx.getStorageSync('deviceinfo') this.setData({ deviceinfo:deviceinfo, bleStatus: app.globalData.bleStatus }) }, /** * 生命周期函数--监听页面隐藏 */ /** * 生命周期函数--监听页面卸载 */ onUnload: function () { if (app.globalData.zgBlueStatus) { ICINLocker.disConnect(app.globalData.blueDeviceId); this.onReady() } this.setData({ bluestatus: false, toSearch: false }) this.closeblue() }, onHide() { this.setData({ toSearch: false }) this.closeblue() }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { // this.AddressPermissions() var deviceinfo = wx.getStorageSync('deviceinfo') app.globalData.deviceNum = deviceinfo.deviceNum var userInfo1 = wx.getStorageSync('userInfo') if (deviceinfo.manufactureId == 201|| deviceinfo.manufactureId == 221) { var data3 = { code: "zg/bleRegisterInfo", signature:wx.getStorageSync('signature'), cardId:deviceinfo.cardId, data: { lockerId: deviceinfo.deviceNum } } WXAPI.sendCommandOne(data3).then(res1 => { if (res1.success) { wx.setStorageSync('cgInfo', res1.data) this.setData({ cgInfo: res1.data }) } else { } }) } if (deviceinfo.roomId) { if (userInfo1.type != 3) { var data2 = { q: JSON.stringify({ id: deviceinfo.roomId }), orderBy: "createTime", orderType: 'desc' } WXAPI.getSiteTenant(data2).then(res1 => { if (res1.data.list.length > 0) { var array = res1.data.list.reverse() wx.setStorageSync('info', array[0]) deviceinfo.info = array[0].info this.setData({ deviceinfo: deviceinfo }) } else { wx.showToast({ title: "还未下发人员,请先下发人员", duration: 2000, icon: 'none' }) } }) } else if (userInfo1.type == 3) { this.setData({ deviceinfo: deviceinfo }) } } else { wx.navigateTo({ url: "../index/index" }) } this.setData({ info: app.globalData.bleStatus, deviceinfo: deviceinfo }) wx.stopPullDownRefresh() }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () { }, /** * 用户点击右上角分享 */ onShareAppMessage: function () { } })