// pages/permissions/permissions.js const WXAPI = require('../../utils/request') import ICINLocker from "../../utils/ICINPakage/ICINLocker" var util = require('../../utils/util'); import { BLE } from "../../utils/btls/ble"; const app = getApp(); 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 CurentTime() { var now = new Date(); var year = now.getFullYear(); //年 var month = now.getMonth() + 1; //月 var day = now.getDate(); //日 var hh = now.getHours(); //时 var mm = now.getMinutes(); //分 var clock = year + "-"; if (month < 10) clock += "0"; clock += month + "-"; if (day < 10) clock += "0"; clock += day + " "; if (hh < 10) clock += "0"; clock += hh + ":"; if (mm < 10) clock += '0'; clock += mm; return (clock); } var date = new Date() Page({ /** * 页面的初始数据 */ data: { personInfo: {}, password: '', datetimerange: [CurentTime(), CurentTime()], deviceinfo: {}, endtime: '', starttime: '', minDate: CurentTime(), minDate1: CurentTime(), }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { var userInfo1 = wx.getStorageSync('userInfo') if (userInfo1.type != 3) { this.data.personInfo = wx.getStorageSync('info') } else if (userInfo1.type == 3) { this.data.personInfo = wx.getStorageSync('deviceinfo') } this.data.deviceinfo = wx.getStorageSync('deviceinfo') }, onChange(event) { // event.detail 为当前输入的值 this.setData({ password: event.detail }) }, bindDateChange: function (e) { var str = e.detail.value + " 00:00:00" this.data.datetimerange[0] = str this.setData({ starttime: e.detail.value, minDate1: e.detail.value }) }, bindDateChange1: function (e) { var str = e.detail.value + " 00:00:00" this.data.datetimerange[1] = str this.setData({ endtime: e.detail.value }) }, addwordfun() { var _this=this if (this.data.deviceinfo.manufactureId == 201||this.data.deviceinfo.manufactureId == 221) { if (app.globalData.zgBlueStatus) { var deviceinfo = this.data.deviceinfo var info = JSON.parse(this.data.personInfo.info) var cgInfo = wx.getStorageSync('cgInfo') ICINLocker.getUserSignKey(cgInfo.lockerId, cgInfo.superId, info.userPassword, cgInfo.superId, cgInfo.authKey, '01', (callback) => { console.log(callback) if (callback.status == '00') { var userSignKey = callback.userSignKey ICINLocker.getCommonKey(cgInfo.lockerId, info.userPassword, info.userPassword, userSignKey, (callback) => { console.log(callback, 'commonKey') var commonKey = callback.commonKey ICINLocker.handlePwd(deviceinfo.deviceNum, cgInfo.superId, info.userPassword, this.data.password, '00', cgInfo.superId, cgInfo.authKey, '', '00000000', 'FFFFFFFF', 255, commonKey, (callback) => { console.log(callback.status) if(callback.status='00'){ var passwordStartTime = _this.data.datetimerange[0].replaceAll('-', '').replaceAll(':', '').replaceAll( ' ', '') var passwordEndTime = _this.data.datetimerange[1].replaceAll('-', '').replaceAll(':', '').replaceAll( ' ', '') var str = { // cardId: this.personInfo.cardId, imei: _this.data.deviceinfo.imei, password: _this.data.password, userTelephone: JSON.parse(_this.data.personInfo.info).userTelephone, operateMode: 7, userPassword: JSON.parse(_this.data.personInfo.info).userPassword, passwordStartTime: passwordStartTime, passwordEndTime: passwordEndTime, is: false } var data = { cardId: _this.data.personInfo.card, content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1 deviceNum: _this.data.personInfo.deviceNum, type: 4, imei: _this.data.deviceinfo.imei, startTime: passwordStartTime, endTime: passwordEndTime, }; WXAPI.addCertificates(data).then(res => { if(res.success){ wx.showToast({ title: '添加成功', }) } }) } }) }) } }) } else { this.goBlue() } } else { if (app.globalData.bleStatus == '蓝牙已连接') { var _this = this if (this.data.password.length != 6) { wx.showToast({ title: "密码为6位数字", icon: 'none', duration: 2000 }) } else { var passwordStartTime = _this.data.datetimerange[0].replaceAll('-', '').replaceAll(':', '').replaceAll( ' ', '') var passwordEndTime = _this.data.datetimerange[1].replaceAll('-', '').replaceAll(':', '').replaceAll( ' ', '') var str = { // cardId: this.personInfo.cardId, imei: _this.data.deviceinfo.imei, password: _this.data.password, userTelephone: JSON.parse(_this.data.personInfo.info).userTelephone, operateMode: 7, userPassword: JSON.parse(_this.data.personInfo.info).userPassword, passwordStartTime: passwordStartTime, passwordEndTime: passwordEndTime, is: false, } var data = { cardId: _this.data.personInfo.card, content: JSON.stringify(str), //operateMode:NFC-10、把人员添加到凭证-1 deviceNum: _this.data.personInfo.deviceNum, type: 4, imei: _this.data.deviceinfo.imei, startTime: passwordStartTime, endTime: passwordEndTime, }; WXAPI.addCertificates(data).then(res => { var data = { managerTelephone: "18270949468", managerPassword: "202108", userTelephone: JSON.parse(_this.data.personInfo.info).userTelephone, userPassword: JSON.parse(_this.data.personInfo.info).userPassword, startTime: passwordStartTime, password: _this.data.password, endTime: passwordEndTime } _this.startFp_63(data.managerTelephone, data.managerPassword, data.userTelephone, data .userPassword, data.password, data.startTime, data.endTime, 7) }) } } else { this.startconnect() } } }, goBlue() { var that = this wx.showLoading({ title: '连接中', }) ICINLocker.scanDevices(this.data.deviceinfo.deviceNum) .then((res) => { console.log(res) if (res.status == 0) { //成功找到蓝牙情况下进行锁连接 ICINLocker.connect(res.deviceId) // 此处 deviceId 存起来,当断开连接时使用 .then((res) => { if (res.status == 0) { this.setData({ bleStatus: '蓝牙已连接' }) app.globalData.zgBlueStatus = true wx.hideLoading() wx.showToast({ title: '连接成功', icon: "none", duration: 2000 }) } 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) => { //此处处理未能连接到蓝牙的问题 switch (res.errCode) { case 10001: wx.showToast({ title: '请打开蓝牙', duration: 2000, icon: 'none' }); break; // default:this.goBlue(); } this.goBlue() }) }, startconnect() { //if(checkWechatVersion()) // { wx.showLoading({ title: "连接中" }) const ble = new BLE(this.data.deviceinfo.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 this.addwordfun() } } } }) } }, closeblue() { wx.showLoading({ title: "正在停止...", }); app.globalData.ble.close() this.data.info = '' setTimeout(() => { wx.hideLoading() }, 1000); app.globalData.bleStatus = false this.data.bleStatus = false, this.data.respond = [] }, startFp_63(managerTelephone, managerPassword, userTelephone, userPassword, password, 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 pd = util.hexStringToBytesWithPadding(password, 10, 0xff) 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] = 0xff; b[46] = 0xff; b[47] = 0xff; b[48] = 0xff; //密码长度 uint16 b[49] = 0 b[50] = 0x0a //密码数据 b.set(pd, 51) 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) }, change(e) { this.data.single = e console.log('-change事件:', e); }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: function () { }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () { }, /** * 用户点击右上角分享 */ onShareAppMessage: function () { } })