wx-starlock/pages/index/index.vue

206 lines
6.6 KiB
Vue
Raw Normal View History

2024-08-06 09:40:20 +08:00
<template>
<view class="content">
<view v-if="!showConnect">
<button class="button" v-if="showAdd" @click="getList">添加设备</button>
<button class="button" v-else @click="stopGetList">停止搜索</button>
<view class="device-list" v-for="(item, index) in deviceList" :key="item.deviceId" @click="connect(item)">{{item.name}}</view>
</view>
<view v-else>
<button class="button" @click="bindUser">添加用户</button>
<button class="button" @click="openDoorOperate">开门</button>
<button class="button" @click="closeDoorOperate">关门</button>
<button class="button" @click="reset">恢复出厂设置</button>
<button class="button" @click="getLockStatusResult">获取锁状态</button>
<button class="button" @click="resetPassword">重置锁密码</button>
<button class="button" @click="setPassword">设置密码</button>
<button class="button" @click="deletePassword">删除密码</button>
<view>名称{{currentLockInfo.name}}</view>
<view>设备Id{{currentLockInfo.deviceId}}</view>
</view>
2024-08-06 09:40:20 +08:00
</view>
</template>
<script>
import { useBluetoothStore } from '@/stores/bluetooth'
2024-08-06 10:20:56 +08:00
import { mapState, mapActions } from 'pinia'
2024-08-06 09:40:20 +08:00
export default {
data() {
return {
showAdd: true,
showConnect: false,
keyId: '0',
authUid: '294',
onlineToken: '0'
}
2024-08-06 09:40:20 +08:00
},
2024-08-06 10:20:56 +08:00
computed: {
...mapState(useBluetoothStore, ['deviceList', 'currentLockInfo'])
2024-08-06 12:11:38 +08:00
},
onLoad () {},
2024-08-06 09:40:20 +08:00
methods: {
...mapActions(useBluetoothStore, ['getBluetoothDevices', 'stopGetBluetoothDevices', 'updateCurrentLockInfo',
'connectBluetoothDevice', 'getPublicKey', 'getCommKey', 'getLockStatus', 'addLockUser', 'timestampToArray',
'openDoor', 'resetDevice', 'resetLockPassword', 'setLockPassword']),
async deletePassword() {
const timestamp = parseInt(new Date().getTime() / 1000)
const data = await this.setLockPassword({
keyId: this.keyId,
uid: this.authUid,
pwdNo: 2,
operate: 2,
isAdmin: 1,
pwd: '000000',
userCountLimit: 0,
startTime: timestamp,
endTime: timestamp
})
console.log('设置密码返回', data)
},
async setPassword() {
const timestamp = parseInt(new Date().getTime() / 1000)
const endTimestamp = timestamp + 3600 * 24 * 365
const data = await this.setLockPassword({
keyId: this.keyId,
uid: this.authUid,
pwdNo: 1,
operate: 0,
isAdmin: 1,
pwd: '000000',
userCountLimit: 0xffff,
startTime: timestamp,
endTime: endTimestamp
})
console.log('设置密码返回', data)
},
async resetPassword() {
const { code } = await this.resetLockPassword({
uid: this.authUid,
keyId: this.keyId
})
console.log('重置密码返回', code)
},
async openDoorOperate() {
const { code } = await this.openDoor({
name: this.currentLockInfo.name,
uid: this.authUid,
openMode: 0,
openTime: parseInt(new Date().getTime() / 1000),
onlineToken: this.onlineToken
})
console.log('开门返回', code)
},
async closeDoorOperate() {
const { code } = await this.openDoor({
name: this.currentLockInfo.name,
uid: this.authUid,
openMode: 32,
openTime: parseInt(new Date().getTime() / 1000),
onlineToken: this.onlineToken
})
console.log('关门返回', code)
},
async reset() {
const { code } = await this.resetDevice({
name: this.currentLockInfo.name,
authUid: this.authUid,
keyId: this.keyId
})
console.log('恢复出厂设置返回', code)
},
getList() {
this.getBluetoothDevices()
this.showAdd = false
},
stopGetList() {
this.stopGetBluetoothDevices()
this.showAdd = true
},
async connect(item) {
this.updateCurrentLockInfo({
name: item.name,
deviceId: item.deviceId
})
const result = await this.connectBluetoothDevice()
if(result) {
this.showConnect = true
this.stopGetBluetoothDevices()
}
},
async bindUser() {
const { code } = await this.getPublicKey(this.currentLockInfo.name)
console.log('获取公钥返回', code)
if(code !== 0) {
return
}
const { code: getCommKeyCode } = await this.getCommKey(this.currentLockInfo.name, this.keyId, this.authUid,
parseInt(new Date().getTime() / 1000))
console.log('获取私钥返回', getCommKeyCode)
if(getCommKeyCode !== 0) {
return
}
const timestamp = parseInt(new Date().getTime() / 1000)
const { code: addUserCode } = await this.addLockUser({
name: this.currentLockInfo.name,
keyId: this.keyId,
authUid: this.authUid,
uid: this.authUid,
publicKey: this.currentLockInfo.publicKey,
commKey: this.currentLockInfo.commKey,
openMode: 1,
keyType: 1,
startDate: timestamp,
expireDate: 0xffffffff,
useCountLimit: 0xffff,
isRound: 0,
weekRound: 0,
startHour: 0,
startMin: 0,
endHour: 0,
endMin: 0,
role: 0xff,
password: (Math.floor(Math.random() * 900000) + 100000).toString()
})
console.log('添加用户返回', addUserCode)
},
getLockStatusResult() {
2024-08-24 14:25:05 +08:00
const timestamp = parseInt(new Date().getTime() / 1000)
this.getLockStatus({
name: this.currentLockInfo.name,
uid: this.authUid,
2024-08-24 14:25:05 +08:00
nowTime: timestamp,
localTime: timestamp
})
2024-08-06 10:20:56 +08:00
}
2024-08-06 09:40:20 +08:00
}
}
</script>
<style lang="scss" scoped>
2024-08-06 09:40:20 +08:00
.content {
padding-top: 160rpx;
2024-08-06 09:40:20 +08:00
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.button {
margin-top: 40rpx;
width: 400rpx;
height: 108rpx;
line-height: 108rpx;
background: #3F536E;
color: #ffffff !important;
}
.device-list {
margin-top: 10rpx;
height: 100rpx;
width: 500rpx;
line-height: 100rpx;
text-align: center;
border: #dd524d solid 2rpx;
2024-08-06 10:20:56 +08:00
}
</style>