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.
 

634 lines
16 KiB

// index.js
// 获取应用实例
const app = getApp()
var util = require('../../utils/util');
import ICINLocker from "../../utils/ICINPakage/ICINLocker"
const WXAPI = require('../../utils/request')
// 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(',');
}
import {
ztreeToElementTree,
IntToBytesLittleEndian,
BytesToIntBigEndian,
uniqueArray
} from "../../utils/util"
import moment from "../../utils/moment"
Page({
data: {
show: false,
signKey: '',
commonKey: '',
list: [],
searchValue: '',
userInfo: {},
pageNum: 1,
pageSize: 20,
stoppull: false,
zNodes: [],
index: 0,
array: [],
index1: 0,
array1: [],
ces: 0,
ces1: '',
ces2: '',
dataList: [],
selectKey: '', //选中的节点id
selectRoomName: '选择房间',
pid:'',
treeList:[],
allDevice:[],
devices_list:[],
searching:''
},
onLoad() {
this.getAllDevice()
var userInfo = wx.getStorageSync('userInfo')
this.setData({
userInfo,
})
wx.getStorage({
key: "token",
success: (res) => {
// this.getIntegration()
if (userInfo.type >= 3) {
this.getRoomList()
this.getRoom1()
} else if (userInfo.type < 3) {
this.getTree()
}
},
fail: (res) => {
wx.redirectTo({
url: "/pages/login/login"
})
}
})
},
getCgInfo(deviceNum){
return new Promise((resolve, reject)=>{
var data3 = {
code: "zg/bleRegisterInfo",
data: {
lockerId: deviceNum
}
}
WXAPI.sendCommand(data3).then(res1 => {
if(res1.success){
resolve(res1)
}else{
reject(res1)
}
})
})
},
// 获取所有设备
getAllDevice(){
var data1={
pageNum: 0,
pageSize: 0,
}
WXAPI.getDeviceItems(data1).then(res => {
if(res.success){
this.setData({
allDevice:res.data.list
})
}
})
},
handleSelect(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,
show: false
})
this.getRoom2(e.detail.item.id)
},
bindroom() {
this.setData({
show: true
});
},
onClose() {
this.setData({
show: false
});
},
zh() {
var time = moment().format("x")
var str = this.toBin(time)
console.log(str)
var ces1 = IntToBytesLittleEndian(time, 6)
var ces2 = BytesToIntBigEndian(ces1)
this.setData({
ces: time,
ces1: ces1,
ces2: ces2,
})
},
toBin(str) {
var arr = [];
var remainder, i, str2, num, char;
while (str.length > 0) {
str2 = "";
remainder = 0;
for (i = 0; i < str.length; i++) { // str2 = str组成的十进制数 / 2
num = str.charCodeAt(i) - 0x30; // num to String
num = remainder * 10 + num;
char = Math.floor(num / 2).toString();
// 忽略最高为的0 , 即最高为如果是 0 则不放入 str2
if (!(char === "0" && str2 === "")) {
str2 += char;
}
remainder = num % 2;
}
str = str2;
arr.push(remainder); // 保存余数
}
return arr.reverse().join('');
},
bindPickerChange: function (e) {
console.log('picker发送选择改变,携带值为', e.detail.value)
var array1 = [],
children = []
if (this.data.zNodes[e.detail.value].children) {
children = this.data.zNodes[e.detail.value].children
children.map(li => {
array1.push(li.name)
})
}
this.getRoom2(this.data.zNodes[e.detail.value].id)
this.setData({
index: e.detail.value,
array1: array1
})
},
bindPickerChange1: function (e) {
console.log('picker发送选择改变,携带值为', e.detail.value)
this.getRoom2(this.data.zNodes[this.data.index].children[e.detail.value].id)
this.setData({
index1: e.detail.value,
})
},
getRoomList(){
var data = {
pageNum: 0,
pageSize: 0
};
WXAPI.getSiteList(data).then(res => {
var newArr = util.uniqueArray(res.data.list.list, "id");
this.setData({
treeList:newArr
})
})
},
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') || dataList[0].name
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()
})
},
onChange(event) {
this.setData({
searchValue: event.detail
})
},
godetail(e) {
console.log(e)
var IMEI = e.currentTarget.dataset.item
// if (this.data.userInfo.type != 3) {
if (IMEI.imei) {
var q = {
roomId: IMEI.id,
// lockType:1,
types:[1,21, 41],
}
var data1 = {
q: JSON.stringify(q)
}
WXAPI.getDeviceItems(data1).then(res => {
console.log(res);
if (res.data.list.length > 0) {
// wx.setStorage({
// key: "deviceinfo",
// data: res.data.list[0]
// })
wx.setStorageSync('deviceinfo', res.data.list[0])
wx.navigateTo({
url: "/pages/roomDetail/roomDetail"
})
} else {
wx.showToast({
title: "未发现此门锁信息",
duration: 2000,
icon: 'none'
})
}
})
} else {
wx.showToast({
title: "还未绑定门锁",
duration: 2000,
icon: 'none'
})
}
// } else if (this.data.userInfo.type == 3) {
// wx.setStorage({
// key: "deviceinfo",
// data: this.data.list[0]
// })
// wx.navigateTo({
// url: "/pages/roomDetail/roomDetail"
// })
// }
},
// 搜索
onClick(e) {
var userInfo = this.data.userInfo
this.setData({
pageNum: 1,
pid: '',
list: []
})
wx.getStorage({
key: "token",
success: (res) => {
if (userInfo.type != 3) {
this.getRoom()
} else if (userInfo.type == 3) {
this.getRoom1()
}
},
fail: (res) => {
wx.redirectTo({
url: "/pages/login/login"
})
}
})
},
// 获取用户信息
getuserInfo() {
WXAPI.getuserInfo('').then(res => {
this.setData({
userInfo: res.data,
});
wx.setStorageSync("userInfo", res.data)
})
},
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
},
// 获取房间
getRoom2(id) {
var q = {
ancestor: id,
isRoom:1
};
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
}
res.data.list.list.map(li=>{
var name = this.findIndexArray(this.data.dataList, li.id, [])
var path = ''
if (name) {
path = name.reverse().join('/')
}
li['path'] = path
var device=this.data.allDevice.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']=''
}
})
var alllist = res.data.list.list
this.setData({
list: alllist,
stoppull,
pageNum: 1
})
})
},
// 获取房间
getRoom() {
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
}
res.data.list.list.map(li=>{
var name = this.findIndexArray(this.data.dataList, li.id, [])
var path = ''
if (name) {
path = name.reverse().join('/')
}
li['path'] = path
var device=this.data.allDevice.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']=''
}
})
var alllist = this.data.list.concat(res.data.list.list)
this.setData({
list: alllist,
stoppull
})
})
},
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;
},
// 获取房间列表
getRoom1() {
var q = {
number: this.data.userInfo.username,
isRoom:1,
name:this.data.searchValue
};
var data = {
q: JSON.stringify(q),
pageNum: 0,
pageSize: 0
};
WXAPI.getlistNum(data).then(res => {
if(res.success){
var person=res.data.list[0]
var query={}
wx.setStorageSync('info', person)
WXAPI.onlyTenant(query).then(res2=>{
var dataList=res2.data.list.filter(item=> item.cardId==person.id)
let list=[]
dataList.map(li=>{
var obj=this.data.treeList.filter(it=>it.id===li.roomId)[0]
if(obj){
list.push(obj)
}
var device=this.data.allDevice.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']=''
}
})
this.setData({
list:list
})
})
}else{
wx.showToast({
icon: "none",
duration: 2000,
title: "未找到该人员"
})
}
})
},
qrcodefun() {
var that = this
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]
}
console.log(res.result.indexOf('WSL'))
var q = {
deviceNum: deviceNum,
// lockType:1,
types:[1,21],
};
var data = {
q: JSON.stringify(q),
pageNum: 1,
pageSize: 10,
};
WXAPI.getDeviceItems(data).then(res => {
var len = res.data.list
if (len.length > 0) {
wx.setStorage({
key: "deviceinfo",
data: res.data.list[0]
})
wx.navigateTo({
url: "/pages/roomDetail/roomDetail?open=true"
})
} else {
wx.showToast({
icon: "none",
duration: 2000,
title: "未在平台找到此设备!"
})
}
})
}
})
},
onPullDownRefresh() {
this.setData({
list:[]
})
this.onLoad()
setTimeout(()=>{
wx.stopPullDownRefresh()
},500)
// this.setData({
// pageNum: 1,
// list: [],
// stoppull: false
// })
// wx.getStorage({
// key: "token",
// success: (res) => {
// wx.stopPullDownRefresh()
// if (this.data.userInfo.type > 3) {
// this.getRoom()
// } else if (this.data.userInfo.type <= 3) {
// this.getRoom1()
// }
// },
// fail: (res) => {
// wx.stopPullDownRefresh()
// wx.redirectTo({
// url: "/pages/login/login"
// })
// }
// })
},
onReachBottom() {
var userInfo = this.data.userInfo
if (!this.data.stoppull) {
wx.getStorage({
key: "token",
success: (res) => {
var num = this.data.pageNum + 1
this.setData({
pageNum: num
})
if (userInfo.type != 3) {
this.getRoom()
} else if (userInfo.type == 3) {
this.getRoom1()
}
},
fail: (res) => {
wx.redirectTo({
url: "/pages/login/login"
})
}
})
} else {
wx.showToast({
title: '暂无更多数据',
duration: 2000,
icon: 'none'
})
}
},
closeblue() {
wx.showLoading({
title: "正在停止...",
mask: true
});
app.globalData.ble.close()
setTimeout(() => {
wx.hideLoading()
}, 1000);
app.globalData.bleStatus = false
},
onShow: function () {
wx.hideLoading()
if (app.globalData.zgBlueStatus) {
ICINLocker.disConnect(app.globalData.blueDeviceId);
}
if(app.globalData.bleStatus){
this.closeblue()
}
},
getUserProfile(e) {},
getUserInfo(e) {
// 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
this.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true
})
},
onShareAppMessage() {}
})