From 28aac335f949a864d51780f7e56062031755a0a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83=E9=B9=8F?= Date: Fri, 11 Apr 2025 10:04:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=80=82=E9=85=8D=E8=85=BE=E8=AE=AF?= =?UTF-8?q?=E9=94=81=E6=B7=BB=E5=8A=A0=E5=8F=91=E9=80=81=E7=94=B5=E5=AD=90?= =?UTF-8?q?=E9=92=A5=E5=8C=99=E5=90=8E=E5=9C=A8=E9=94=81=E6=9D=BF=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E7=94=A8=E6=88=B7=EF=BC=8C=E5=BC=80=E9=97=A8=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=E9=80=82=E9=85=8Dwifi=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/feature/createAdmin.vue | 41 ++++++++++++++++++------ pages/feature/createCard.vue | 49 ++++++++++++++++++----------- pages/feature/createFace.vue | 49 ++++++++++++++++++----------- pages/feature/createFingerprint.vue | 49 ++++++++++++++++++----------- pages/feature/createKey.vue | 43 +++++++++++++++++++------ pages/feature/createPalmVein.vue | 49 ++++++++++++++++++----------- pages/feature/createRemote.vue | 49 ++++++++++++++++++----------- stores/bluetooth.js | 2 +- 8 files changed, 221 insertions(+), 110 deletions(-) diff --git a/pages/feature/createAdmin.vue b/pages/feature/createAdmin.vue index d08fcd1..078007e 100644 --- a/pages/feature/createAdmin.vue +++ b/pages/feature/createAdmin.vue @@ -103,6 +103,7 @@ import { useBasicStore } from '@/stores/basic' import { createKeyRequest } from '@/api/key' import { useBluetoothStore } from '@/stores/bluetooth' + import { transportType } from '@/utils/constants' const instance = getCurrentInstance().proxy const eventChannel = instance.getOpenerEventChannel() @@ -246,10 +247,32 @@ params.receiverUsername = permanentAccount.value params.isOnlyManageSelf = permanentManageSelf.value ? 1 : 0 } - const { code, message } = await createKeyRequest(params) + const { code, data, message } = await createKeyRequest(params) if (code === 0) { eventChannel.emit('refresherList', {}) $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) { pending.value = false uni.showModal({ @@ -324,23 +347,23 @@ } .text { + padding: 0 32rpx; margin-top: 40rpx; margin-bottom: 50rpx; - color: #262626; font-size: 26rpx; - padding: 0 32rpx; + color: #262626; } .button { - border-radius: 64rpx; width: 686rpx; - margin-left: 32rpx; height: 100rpx; - line-height: 100rpx; - text-align: center; - background-color: #63b8af; - color: #fff; + margin-left: 32rpx; font-size: 32rpx; font-weight: bold; + line-height: 100rpx; + color: #fff; + text-align: center; + background-color: #63b8af; + border-radius: 64rpx; } diff --git a/pages/feature/createCard.vue b/pages/feature/createCard.vue index cc5925e..d1bcbf1 100644 --- a/pages/feature/createCard.vue +++ b/pages/feature/createCard.vue @@ -127,6 +127,7 @@ import { useUserStore } from '@/stores/user' import { useBluetoothStore } from '@/stores/bluetooth' import { checkCardNameRequest } from '@/api/card' + import { transportType } from '@/utils/constants' const instance = getCurrentInstance().proxy const eventChannel = instance.getOpenerEventChannel() @@ -306,17 +307,29 @@ cardName: params.cardName }) if (code === 0) { - $basic.routeJump({ - name: 'bindCard', - params: { - card: JSON.stringify(params) - }, - events: { - refresherList() { - eventChannel.emit('refresherList', {}) - } + if ($bluetooth.currentLockInfo.transport_type === transportType.TRANSPORT_TENCENT_YUN) { + const { code } = await $bluetooth.registerAuthentication(params) + if (code === 0) { + $basic.backAndToast('请在锁端添加卡片') + } else { + uni.showToast({ + title: '添加卡片命令下达失败,请重试', + icon: 'none' + }) } - }) + } else { + $basic.routeJump({ + name: 'bindCard', + params: { + card: JSON.stringify(params) + }, + events: { + refresherList() { + eventChannel.emit('refresherList', {}) + } + } + }) + } } else { uni.showToast({ title: message, @@ -385,23 +398,23 @@ } .text { + padding: 0 32rpx; margin-top: 40rpx; margin-bottom: 50rpx; - color: #262626; font-size: 26rpx; - padding: 0 32rpx; + color: #262626; } .button { - border-radius: 64rpx; width: 686rpx; - margin-left: 32rpx; height: 100rpx; - line-height: 100rpx; - text-align: center; - background-color: #63b8af; - color: #fff; + margin-left: 32rpx; font-size: 32rpx; font-weight: bold; + line-height: 100rpx; + color: #fff; + text-align: center; + background-color: #63b8af; + border-radius: 64rpx; } diff --git a/pages/feature/createFace.vue b/pages/feature/createFace.vue index 8c1be34..36a9d6c 100644 --- a/pages/feature/createFace.vue +++ b/pages/feature/createFace.vue @@ -104,6 +104,7 @@ import { useUserStore } from '@/stores/user' import { useBluetoothStore } from '@/stores/bluetooth' import { checkFaceNameRequest } from '@/api/face' + import { transportType } from '@/utils/constants' const instance = getCurrentInstance().proxy const eventChannel = instance.getOpenerEventChannel() @@ -275,17 +276,29 @@ faceName: params.faceName }) if (code === 0) { - $basic.routeJump({ - name: 'bindFace', - params: { - info: JSON.stringify(params) - }, - events: { - refresherList() { - eventChannel.emit('refresherList', {}) - } + if ($bluetooth.currentLockInfo.transport_type === transportType.TRANSPORT_TENCENT_YUN) { + const { code } = await $bluetooth.registerAuthentication(params) + if (code === 0) { + $basic.backAndToast('请在锁端添加人脸') + } else { + uni.showToast({ + title: '添加人脸命令下达失败,请重试', + icon: 'none' + }) } - }) + } else { + $basic.routeJump({ + name: 'bindFace', + params: { + info: JSON.stringify(params) + }, + events: { + refresherList() { + eventChannel.emit('refresherList', {}) + } + } + }) + } } else { uni.showToast({ title: message, @@ -344,23 +357,23 @@ } .text { + padding: 0 32rpx; margin-top: 40rpx; margin-bottom: 50rpx; - color: #262626; font-size: 26rpx; - padding: 0 32rpx; + color: #262626; } .button { - border-radius: 64rpx; width: 686rpx; - margin-left: 32rpx; height: 100rpx; - line-height: 100rpx; - text-align: center; - background-color: #63b8af; - color: #fff; + margin-left: 32rpx; font-size: 32rpx; font-weight: bold; + line-height: 100rpx; + color: #fff; + text-align: center; + background-color: #63b8af; + border-radius: 64rpx; } diff --git a/pages/feature/createFingerprint.vue b/pages/feature/createFingerprint.vue index 9c7116a..8d035c4 100644 --- a/pages/feature/createFingerprint.vue +++ b/pages/feature/createFingerprint.vue @@ -127,6 +127,7 @@ import { useUserStore } from '@/stores/user' import { useBluetoothStore } from '@/stores/bluetooth' import { checkFingerprintNameRequest } from '@/api/fingerprint' + import { transportType } from '@/utils/constants' const instance = getCurrentInstance().proxy const eventChannel = instance.getOpenerEventChannel() @@ -306,17 +307,29 @@ fingerprintName: params.fingerprintName }) if (code === 0) { - $basic.routeJump({ - name: 'bindFingerprint', - params: { - info: JSON.stringify(params) - }, - events: { - refresherList() { - eventChannel.emit('refresherList', {}) - } + if ($bluetooth.currentLockInfo.transport_type === transportType.TRANSPORT_TENCENT_YUN) { + const { code } = await $bluetooth.registerAuthentication(params) + if (code === 0) { + $basic.backAndToast('请在锁端添加指纹') + } else { + uni.showToast({ + title: '添加指纹命令下达失败,请重试', + icon: 'none' + }) } - }) + } else { + $basic.routeJump({ + name: 'bindFingerprint', + params: { + info: JSON.stringify(params) + }, + events: { + refresherList() { + eventChannel.emit('refresherList', {}) + } + } + }) + } } else { uni.showToast({ title: message, @@ -385,23 +398,23 @@ } .text { + padding: 0 32rpx; margin-top: 40rpx; margin-bottom: 50rpx; - color: #262626; font-size: 26rpx; - padding: 0 32rpx; + color: #262626; } .button { - border-radius: 64rpx; width: 686rpx; - margin-left: 32rpx; height: 100rpx; - line-height: 100rpx; - text-align: center; - background-color: #63b8af; - color: #fff; + margin-left: 32rpx; font-size: 32rpx; font-weight: bold; + line-height: 100rpx; + color: #fff; + text-align: center; + background-color: #63b8af; + border-radius: 64rpx; } diff --git a/pages/feature/createKey.vue b/pages/feature/createKey.vue index 54a19a6..afbea1c 100644 --- a/pages/feature/createKey.vue +++ b/pages/feature/createKey.vue @@ -130,6 +130,7 @@ import { useBluetoothStore } from '@/stores/bluetooth' import { useLockStore } from '@/stores/lock' import { createKeyRequest } from '@/api/key' + import { transportType } from '@/constant/transportType' export default { components: { @@ -173,7 +174,7 @@ } }, computed: { - ...mapState(useBluetoothStore, ['currentLockInfo']), + ...mapState(useBluetoothStore, ['currentLockInfo', 'keyId']), ...mapState(useLockStore, ['keySearch']) }, async onLoad() { @@ -182,6 +183,7 @@ methods: { ...mapActions(useBasicStore, ['getDeviceInfo', 'backAndToast', 'getNetworkType']), ...mapActions(useLockStore, ['getKeyList', 'updateKeySearch']), + ...mapActions(useBluetoothStore, ['addLockUser', 'convertWeekdaysToNumber']), changeCycle(data) { this.cycleStartTime = data.startDate this.cycleEndTime = data.endDate @@ -271,7 +273,7 @@ params.startTime = this.cycleStartTime params.endTime = this.cycleEndTime } - const { code, message } = await createKeyRequest(params) + const { code, data, message } = await createKeyRequest(params) if (code === 0) { uni.reportEvent('create_key', {}) this.updateKeySearch({ @@ -280,6 +282,27 @@ }) this.getKeyList(this.keySearch) 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) { this.pending = false uni.showModal({ @@ -350,21 +373,21 @@ } .text { - color: #262626; - font-size: 26rpx; padding: 0 32rpx; + font-size: 26rpx; + color: #262626; } .button { - border-radius: 64rpx; width: 686rpx; - margin-left: 32rpx; height: 100rpx; - line-height: 100rpx; - text-align: center; - background-color: #63b8af; - color: #fff; + margin-left: 32rpx; font-size: 32rpx; font-weight: bold; + line-height: 100rpx; + color: #fff; + text-align: center; + background-color: #63b8af; + border-radius: 64rpx; } diff --git a/pages/feature/createPalmVein.vue b/pages/feature/createPalmVein.vue index 458a0e9..9bf176c 100644 --- a/pages/feature/createPalmVein.vue +++ b/pages/feature/createPalmVein.vue @@ -128,6 +128,7 @@ import { useUserStore } from '@/stores/user' import { useBluetoothStore } from '@/stores/bluetooth' import { checkPalmVeinNameRequest } from '@/api/palmVein' + import { transportType } from '@/utils/constants' const instance = getCurrentInstance().proxy const eventChannel = instance.getOpenerEventChannel() @@ -307,17 +308,29 @@ palmVeinName: params.palmVeinName }) if (code === 0) { - $basic.routeJump({ - name: 'bindPalmVein', - params: { - info: JSON.stringify(params) - }, - events: { - refresherList() { - eventChannel.emit('refresherList', {}) - } + if ($bluetooth.currentLockInfo.transport_type === transportType.TRANSPORT_TENCENT_YUN) { + const { code } = await $bluetooth.registerAuthentication(params) + if (code === 0) { + $basic.backAndToast('请在锁端添加掌静脉') + } else { + uni.showToast({ + title: '添加掌静脉命令下达失败,请重试', + icon: 'none' + }) } - }) + } else { + $basic.routeJump({ + name: 'bindPalmVein', + params: { + info: JSON.stringify(params) + }, + events: { + refresherList() { + eventChannel.emit('refresherList', {}) + } + } + }) + } } else { uni.showToast({ title: message, @@ -386,23 +399,23 @@ } .text { + padding: 0 32rpx; margin-top: 40rpx; margin-bottom: 50rpx; - color: #262626; font-size: 26rpx; - padding: 0 32rpx; + color: #262626; } .button { - border-radius: 64rpx; width: 686rpx; - margin-left: 32rpx; height: 100rpx; - line-height: 100rpx; - text-align: center; - background-color: #63b8af; - color: #fff; + margin-left: 32rpx; font-size: 32rpx; font-weight: bold; + line-height: 100rpx; + color: #fff; + text-align: center; + background-color: #63b8af; + border-radius: 64rpx; } diff --git a/pages/feature/createRemote.vue b/pages/feature/createRemote.vue index 787e32b..fc2f954 100644 --- a/pages/feature/createRemote.vue +++ b/pages/feature/createRemote.vue @@ -83,6 +83,7 @@ import { useUserStore } from '@/stores/user' import { useBluetoothStore } from '@/stores/bluetooth' import { checkRemoteNameRequest } from '@/api/remote' + import { transportType } from '@/utils/constants' const instance = getCurrentInstance().proxy const eventChannel = instance.getOpenerEventChannel() @@ -248,17 +249,29 @@ remoteName: params.remoteName }) if (code === 0) { - $basic.routeJump({ - name: 'bindRemote', - params: { - info: JSON.stringify(params) - }, - events: { - refresherList() { - eventChannel.emit('refresherList', {}) - } + if ($bluetooth.currentLockInfo.transport_type === transportType.TRANSPORT_TENCENT_YUN) { + const { code } = await $bluetooth.registerAuthentication(params) + if (code === 0) { + $basic.backAndToast('请在锁端添加远程') + } else { + uni.showToast({ + title: '添加远程命令下达失败,请重试', + icon: 'none' + }) } - }) + } else { + $basic.routeJump({ + name: 'bindRemote', + params: { + info: JSON.stringify(params) + }, + events: { + refresherList() { + eventChannel.emit('refresherList', {}) + } + } + }) + } } else { uni.showToast({ title: message, @@ -307,23 +320,23 @@ } .text { + padding: 0 32rpx; margin-top: 40rpx; margin-bottom: 50rpx; - color: #262626; font-size: 26rpx; - padding: 0 32rpx; + color: #262626; } .button { - border-radius: 64rpx; width: 686rpx; - margin-left: 32rpx; height: 100rpx; - line-height: 100rpx; - text-align: center; - background-color: #63b8af; - color: #fff; + margin-left: 32rpx; font-size: 32rpx; font-weight: bold; + line-height: 100rpx; + color: #fff; + text-align: center; + background-color: #63b8af; + border-radius: 64rpx; } diff --git a/stores/bluetooth.js b/stores/bluetooth.js index b5c5610..126ec6e 100644 --- a/stores/bluetooth.js +++ b/stores/bluetooth.js @@ -1275,7 +1275,7 @@ export const useBluetoothStore = defineStore('ble', { this.currentLockInfo.keyType === 4 ? new Date(this.currentLockInfo.endDate).getMinutes() : 0, - role: 0, + role: Number(this.currentLockInfo.keyRight), password } const { code: addUserCode } = await this.addLockUser(addUserParams)