You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

421 lines
12 KiB

// 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 () {
}
})