feat: 适配腾讯锁添加发送电子钥匙后在锁板创建用户,开门方式适配wifi锁

This commit is contained in:
范鹏 2025-04-11 10:04:18 +08:00
parent baecc976ee
commit 28aac335f9
8 changed files with 221 additions and 110 deletions

View File

@ -103,6 +103,7 @@
import { useBasicStore } from '@/stores/basic' import { useBasicStore } from '@/stores/basic'
import { createKeyRequest } from '@/api/key' import { createKeyRequest } from '@/api/key'
import { useBluetoothStore } from '@/stores/bluetooth' import { useBluetoothStore } from '@/stores/bluetooth'
import { transportType } from '@/utils/constants'
const instance = getCurrentInstance().proxy const instance = getCurrentInstance().proxy
const eventChannel = instance.getOpenerEventChannel() const eventChannel = instance.getOpenerEventChannel()
@ -246,10 +247,32 @@
params.receiverUsername = permanentAccount.value params.receiverUsername = permanentAccount.value
params.isOnlyManageSelf = permanentManageSelf.value ? 1 : 0 params.isOnlyManageSelf = permanentManageSelf.value ? 1 : 0
} }
const { code, message } = await createKeyRequest(params) const { code, data, message } = await createKeyRequest(params)
if (code === 0) { if (code === 0) {
eventChannel.emit('refresherList', {}) eventChannel.emit('refresherList', {})
$basic.backAndToast('添加成功') $basic.backAndToast('添加成功')
if ($bluetooth.currentLockInfo.transport_type === transportType.TRANSPORT_TENCENT_YUN) {
$bluetooth.addLockUser({
name: $bluetooth.currentLockInfo.name,
keyId: $bluetooth.keyId,
authUid: $bluetooth.currentLockInfo.uid.toString(),
uid: data.receiverUid.toString(),
openMode: 1,
keyType: params.keyType,
startDate: params.startDate.toString(),
expireDate: params.endDate.toString(),
useCountLimit: params.keyType === '3' ? 1 : 0xffff,
isRound: params.keyType === '4' ? 1 : 0,
weekRound:
params.keyType === '4' ? $bluetooth.convertWeekdaysToNumber(params.weekDays) : 0,
startHour: params.keyType === '4' ? new Date(params.startDate).getHours() : 0,
startMin: params.keyType === '4' ? new Date(params.startDate).getMinutes() : 0,
endHour: params.keyType === '4' ? new Date(params.endDate).getHours() : 0,
endMin: params.keyType === '4' ? new Date(params.endDate).getMinutes() : 0,
role: 1,
password: (Math.floor(Math.random() * 900000) + 100000).toString()
})
}
} else if (code === 425) { } else if (code === 425) {
pending.value = false pending.value = false
uni.showModal({ uni.showModal({
@ -324,23 +347,23 @@
} }
.text { .text {
padding: 0 32rpx;
margin-top: 40rpx; margin-top: 40rpx;
margin-bottom: 50rpx; margin-bottom: 50rpx;
color: #262626;
font-size: 26rpx; font-size: 26rpx;
padding: 0 32rpx; color: #262626;
} }
.button { .button {
border-radius: 64rpx;
width: 686rpx; width: 686rpx;
margin-left: 32rpx;
height: 100rpx; height: 100rpx;
line-height: 100rpx; margin-left: 32rpx;
text-align: center;
background-color: #63b8af;
color: #fff;
font-size: 32rpx; font-size: 32rpx;
font-weight: bold; font-weight: bold;
line-height: 100rpx;
color: #fff;
text-align: center;
background-color: #63b8af;
border-radius: 64rpx;
} }
</style> </style>

View File

@ -127,6 +127,7 @@
import { useUserStore } from '@/stores/user' import { useUserStore } from '@/stores/user'
import { useBluetoothStore } from '@/stores/bluetooth' import { useBluetoothStore } from '@/stores/bluetooth'
import { checkCardNameRequest } from '@/api/card' import { checkCardNameRequest } from '@/api/card'
import { transportType } from '@/utils/constants'
const instance = getCurrentInstance().proxy const instance = getCurrentInstance().proxy
const eventChannel = instance.getOpenerEventChannel() const eventChannel = instance.getOpenerEventChannel()
@ -306,17 +307,29 @@
cardName: params.cardName cardName: params.cardName
}) })
if (code === 0) { if (code === 0) {
$basic.routeJump({ if ($bluetooth.currentLockInfo.transport_type === transportType.TRANSPORT_TENCENT_YUN) {
name: 'bindCard', const { code } = await $bluetooth.registerAuthentication(params)
params: { if (code === 0) {
card: JSON.stringify(params) $basic.backAndToast('请在锁端添加卡片')
}, } else {
events: { uni.showToast({
refresherList() { title: '添加卡片命令下达失败,请重试',
eventChannel.emit('refresherList', {}) icon: 'none'
} })
} }
}) } else {
$basic.routeJump({
name: 'bindCard',
params: {
card: JSON.stringify(params)
},
events: {
refresherList() {
eventChannel.emit('refresherList', {})
}
}
})
}
} else { } else {
uni.showToast({ uni.showToast({
title: message, title: message,
@ -385,23 +398,23 @@
} }
.text { .text {
padding: 0 32rpx;
margin-top: 40rpx; margin-top: 40rpx;
margin-bottom: 50rpx; margin-bottom: 50rpx;
color: #262626;
font-size: 26rpx; font-size: 26rpx;
padding: 0 32rpx; color: #262626;
} }
.button { .button {
border-radius: 64rpx;
width: 686rpx; width: 686rpx;
margin-left: 32rpx;
height: 100rpx; height: 100rpx;
line-height: 100rpx; margin-left: 32rpx;
text-align: center;
background-color: #63b8af;
color: #fff;
font-size: 32rpx; font-size: 32rpx;
font-weight: bold; font-weight: bold;
line-height: 100rpx;
color: #fff;
text-align: center;
background-color: #63b8af;
border-radius: 64rpx;
} }
</style> </style>

View File

@ -104,6 +104,7 @@
import { useUserStore } from '@/stores/user' import { useUserStore } from '@/stores/user'
import { useBluetoothStore } from '@/stores/bluetooth' import { useBluetoothStore } from '@/stores/bluetooth'
import { checkFaceNameRequest } from '@/api/face' import { checkFaceNameRequest } from '@/api/face'
import { transportType } from '@/utils/constants'
const instance = getCurrentInstance().proxy const instance = getCurrentInstance().proxy
const eventChannel = instance.getOpenerEventChannel() const eventChannel = instance.getOpenerEventChannel()
@ -275,17 +276,29 @@
faceName: params.faceName faceName: params.faceName
}) })
if (code === 0) { if (code === 0) {
$basic.routeJump({ if ($bluetooth.currentLockInfo.transport_type === transportType.TRANSPORT_TENCENT_YUN) {
name: 'bindFace', const { code } = await $bluetooth.registerAuthentication(params)
params: { if (code === 0) {
info: JSON.stringify(params) $basic.backAndToast('请在锁端添加人脸')
}, } else {
events: { uni.showToast({
refresherList() { title: '添加人脸命令下达失败,请重试',
eventChannel.emit('refresherList', {}) icon: 'none'
} })
} }
}) } else {
$basic.routeJump({
name: 'bindFace',
params: {
info: JSON.stringify(params)
},
events: {
refresherList() {
eventChannel.emit('refresherList', {})
}
}
})
}
} else { } else {
uni.showToast({ uni.showToast({
title: message, title: message,
@ -344,23 +357,23 @@
} }
.text { .text {
padding: 0 32rpx;
margin-top: 40rpx; margin-top: 40rpx;
margin-bottom: 50rpx; margin-bottom: 50rpx;
color: #262626;
font-size: 26rpx; font-size: 26rpx;
padding: 0 32rpx; color: #262626;
} }
.button { .button {
border-radius: 64rpx;
width: 686rpx; width: 686rpx;
margin-left: 32rpx;
height: 100rpx; height: 100rpx;
line-height: 100rpx; margin-left: 32rpx;
text-align: center;
background-color: #63b8af;
color: #fff;
font-size: 32rpx; font-size: 32rpx;
font-weight: bold; font-weight: bold;
line-height: 100rpx;
color: #fff;
text-align: center;
background-color: #63b8af;
border-radius: 64rpx;
} }
</style> </style>

View File

@ -127,6 +127,7 @@
import { useUserStore } from '@/stores/user' import { useUserStore } from '@/stores/user'
import { useBluetoothStore } from '@/stores/bluetooth' import { useBluetoothStore } from '@/stores/bluetooth'
import { checkFingerprintNameRequest } from '@/api/fingerprint' import { checkFingerprintNameRequest } from '@/api/fingerprint'
import { transportType } from '@/utils/constants'
const instance = getCurrentInstance().proxy const instance = getCurrentInstance().proxy
const eventChannel = instance.getOpenerEventChannel() const eventChannel = instance.getOpenerEventChannel()
@ -306,17 +307,29 @@
fingerprintName: params.fingerprintName fingerprintName: params.fingerprintName
}) })
if (code === 0) { if (code === 0) {
$basic.routeJump({ if ($bluetooth.currentLockInfo.transport_type === transportType.TRANSPORT_TENCENT_YUN) {
name: 'bindFingerprint', const { code } = await $bluetooth.registerAuthentication(params)
params: { if (code === 0) {
info: JSON.stringify(params) $basic.backAndToast('请在锁端添加指纹')
}, } else {
events: { uni.showToast({
refresherList() { title: '添加指纹命令下达失败,请重试',
eventChannel.emit('refresherList', {}) icon: 'none'
} })
} }
}) } else {
$basic.routeJump({
name: 'bindFingerprint',
params: {
info: JSON.stringify(params)
},
events: {
refresherList() {
eventChannel.emit('refresherList', {})
}
}
})
}
} else { } else {
uni.showToast({ uni.showToast({
title: message, title: message,
@ -385,23 +398,23 @@
} }
.text { .text {
padding: 0 32rpx;
margin-top: 40rpx; margin-top: 40rpx;
margin-bottom: 50rpx; margin-bottom: 50rpx;
color: #262626;
font-size: 26rpx; font-size: 26rpx;
padding: 0 32rpx; color: #262626;
} }
.button { .button {
border-radius: 64rpx;
width: 686rpx; width: 686rpx;
margin-left: 32rpx;
height: 100rpx; height: 100rpx;
line-height: 100rpx; margin-left: 32rpx;
text-align: center;
background-color: #63b8af;
color: #fff;
font-size: 32rpx; font-size: 32rpx;
font-weight: bold; font-weight: bold;
line-height: 100rpx;
color: #fff;
text-align: center;
background-color: #63b8af;
border-radius: 64rpx;
} }
</style> </style>

View File

@ -130,6 +130,7 @@
import { useBluetoothStore } from '@/stores/bluetooth' import { useBluetoothStore } from '@/stores/bluetooth'
import { useLockStore } from '@/stores/lock' import { useLockStore } from '@/stores/lock'
import { createKeyRequest } from '@/api/key' import { createKeyRequest } from '@/api/key'
import { transportType } from '@/constant/transportType'
export default { export default {
components: { components: {
@ -173,7 +174,7 @@
} }
}, },
computed: { computed: {
...mapState(useBluetoothStore, ['currentLockInfo']), ...mapState(useBluetoothStore, ['currentLockInfo', 'keyId']),
...mapState(useLockStore, ['keySearch']) ...mapState(useLockStore, ['keySearch'])
}, },
async onLoad() { async onLoad() {
@ -182,6 +183,7 @@
methods: { methods: {
...mapActions(useBasicStore, ['getDeviceInfo', 'backAndToast', 'getNetworkType']), ...mapActions(useBasicStore, ['getDeviceInfo', 'backAndToast', 'getNetworkType']),
...mapActions(useLockStore, ['getKeyList', 'updateKeySearch']), ...mapActions(useLockStore, ['getKeyList', 'updateKeySearch']),
...mapActions(useBluetoothStore, ['addLockUser', 'convertWeekdaysToNumber']),
changeCycle(data) { changeCycle(data) {
this.cycleStartTime = data.startDate this.cycleStartTime = data.startDate
this.cycleEndTime = data.endDate this.cycleEndTime = data.endDate
@ -271,7 +273,7 @@
params.startTime = this.cycleStartTime params.startTime = this.cycleStartTime
params.endTime = this.cycleEndTime params.endTime = this.cycleEndTime
} }
const { code, message } = await createKeyRequest(params) const { code, data, message } = await createKeyRequest(params)
if (code === 0) { if (code === 0) {
uni.reportEvent('create_key', {}) uni.reportEvent('create_key', {})
this.updateKeySearch({ this.updateKeySearch({
@ -280,6 +282,27 @@
}) })
this.getKeyList(this.keySearch) this.getKeyList(this.keySearch)
this.backAndToast('钥匙已发送') this.backAndToast('钥匙已发送')
if (this.currentLockInfo.transport_type === transportType.TRANSPORT_TENCENT_YUN) {
this.addLockUser({
name: this.currentLockInfo.name,
keyId: this.keyId,
authUid: this.currentLockInfo.uid.toString(),
uid: data.receiverUid.toString(),
openMode: 1,
keyType: params.keyType,
startDate: params.startDate.toString(),
expireDate: params.endDate.toString(),
useCountLimit: params.keyType === '3' ? 1 : 0xffff,
isRound: params.keyType === '4' ? 1 : 0,
weekRound: params.keyType === '4' ? this.convertWeekdaysToNumber(params.weekDays) : 0,
startHour: params.keyType === '4' ? new Date(params.startDate).getHours() : 0,
startMin: params.keyType === '4' ? new Date(params.startDate).getMinutes() : 0,
endHour: params.keyType === '4' ? new Date(params.endDate).getHours() : 0,
endMin: params.keyType === '4' ? new Date(params.endDate).getMinutes() : 0,
role: 0,
password: (Math.floor(Math.random() * 900000) + 100000).toString()
})
}
} else if (code === 425) { } else if (code === 425) {
this.pending = false this.pending = false
uni.showModal({ uni.showModal({
@ -350,21 +373,21 @@
} }
.text { .text {
color: #262626;
font-size: 26rpx;
padding: 0 32rpx; padding: 0 32rpx;
font-size: 26rpx;
color: #262626;
} }
.button { .button {
border-radius: 64rpx;
width: 686rpx; width: 686rpx;
margin-left: 32rpx;
height: 100rpx; height: 100rpx;
line-height: 100rpx; margin-left: 32rpx;
text-align: center;
background-color: #63b8af;
color: #fff;
font-size: 32rpx; font-size: 32rpx;
font-weight: bold; font-weight: bold;
line-height: 100rpx;
color: #fff;
text-align: center;
background-color: #63b8af;
border-radius: 64rpx;
} }
</style> </style>

View File

@ -128,6 +128,7 @@
import { useUserStore } from '@/stores/user' import { useUserStore } from '@/stores/user'
import { useBluetoothStore } from '@/stores/bluetooth' import { useBluetoothStore } from '@/stores/bluetooth'
import { checkPalmVeinNameRequest } from '@/api/palmVein' import { checkPalmVeinNameRequest } from '@/api/palmVein'
import { transportType } from '@/utils/constants'
const instance = getCurrentInstance().proxy const instance = getCurrentInstance().proxy
const eventChannel = instance.getOpenerEventChannel() const eventChannel = instance.getOpenerEventChannel()
@ -307,17 +308,29 @@
palmVeinName: params.palmVeinName palmVeinName: params.palmVeinName
}) })
if (code === 0) { if (code === 0) {
$basic.routeJump({ if ($bluetooth.currentLockInfo.transport_type === transportType.TRANSPORT_TENCENT_YUN) {
name: 'bindPalmVein', const { code } = await $bluetooth.registerAuthentication(params)
params: { if (code === 0) {
info: JSON.stringify(params) $basic.backAndToast('请在锁端添加掌静脉')
}, } else {
events: { uni.showToast({
refresherList() { title: '添加掌静脉命令下达失败,请重试',
eventChannel.emit('refresherList', {}) icon: 'none'
} })
} }
}) } else {
$basic.routeJump({
name: 'bindPalmVein',
params: {
info: JSON.stringify(params)
},
events: {
refresherList() {
eventChannel.emit('refresherList', {})
}
}
})
}
} else { } else {
uni.showToast({ uni.showToast({
title: message, title: message,
@ -386,23 +399,23 @@
} }
.text { .text {
padding: 0 32rpx;
margin-top: 40rpx; margin-top: 40rpx;
margin-bottom: 50rpx; margin-bottom: 50rpx;
color: #262626;
font-size: 26rpx; font-size: 26rpx;
padding: 0 32rpx; color: #262626;
} }
.button { .button {
border-radius: 64rpx;
width: 686rpx; width: 686rpx;
margin-left: 32rpx;
height: 100rpx; height: 100rpx;
line-height: 100rpx; margin-left: 32rpx;
text-align: center;
background-color: #63b8af;
color: #fff;
font-size: 32rpx; font-size: 32rpx;
font-weight: bold; font-weight: bold;
line-height: 100rpx;
color: #fff;
text-align: center;
background-color: #63b8af;
border-radius: 64rpx;
} }
</style> </style>

View File

@ -83,6 +83,7 @@
import { useUserStore } from '@/stores/user' import { useUserStore } from '@/stores/user'
import { useBluetoothStore } from '@/stores/bluetooth' import { useBluetoothStore } from '@/stores/bluetooth'
import { checkRemoteNameRequest } from '@/api/remote' import { checkRemoteNameRequest } from '@/api/remote'
import { transportType } from '@/utils/constants'
const instance = getCurrentInstance().proxy const instance = getCurrentInstance().proxy
const eventChannel = instance.getOpenerEventChannel() const eventChannel = instance.getOpenerEventChannel()
@ -248,17 +249,29 @@
remoteName: params.remoteName remoteName: params.remoteName
}) })
if (code === 0) { if (code === 0) {
$basic.routeJump({ if ($bluetooth.currentLockInfo.transport_type === transportType.TRANSPORT_TENCENT_YUN) {
name: 'bindRemote', const { code } = await $bluetooth.registerAuthentication(params)
params: { if (code === 0) {
info: JSON.stringify(params) $basic.backAndToast('请在锁端添加远程')
}, } else {
events: { uni.showToast({
refresherList() { title: '添加远程命令下达失败,请重试',
eventChannel.emit('refresherList', {}) icon: 'none'
} })
} }
}) } else {
$basic.routeJump({
name: 'bindRemote',
params: {
info: JSON.stringify(params)
},
events: {
refresherList() {
eventChannel.emit('refresherList', {})
}
}
})
}
} else { } else {
uni.showToast({ uni.showToast({
title: message, title: message,
@ -307,23 +320,23 @@
} }
.text { .text {
padding: 0 32rpx;
margin-top: 40rpx; margin-top: 40rpx;
margin-bottom: 50rpx; margin-bottom: 50rpx;
color: #262626;
font-size: 26rpx; font-size: 26rpx;
padding: 0 32rpx; color: #262626;
} }
.button { .button {
border-radius: 64rpx;
width: 686rpx; width: 686rpx;
margin-left: 32rpx;
height: 100rpx; height: 100rpx;
line-height: 100rpx; margin-left: 32rpx;
text-align: center;
background-color: #63b8af;
color: #fff;
font-size: 32rpx; font-size: 32rpx;
font-weight: bold; font-weight: bold;
line-height: 100rpx;
color: #fff;
text-align: center;
background-color: #63b8af;
border-radius: 64rpx;
} }
</style> </style>

View File

@ -1275,7 +1275,7 @@ export const useBluetoothStore = defineStore('ble', {
this.currentLockInfo.keyType === 4 this.currentLockInfo.keyType === 4
? new Date(this.currentLockInfo.endDate).getMinutes() ? new Date(this.currentLockInfo.endDate).getMinutes()
: 0, : 0,
role: 0, role: Number(this.currentLockInfo.keyRight),
password password
} }
const { code: addUserCode } = await this.addLockUser(addUserParams) const { code: addUserCode } = await this.addLockUser(addUserParams)