From d18e6df1c06582c63d9c9d18afda5994f2b9e919 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Sat, 4 Jan 2025 16:33:33 +0800 Subject: [PATCH] pin code input supports pressing enter to confirm and pressing tab to switch to the next component --- src/components/common/PinCodeInput.vue | 11 ++++++++++- src/components/mobile/PinCodeInputSheet.vue | 2 +- src/views/desktop/UnlockPage.vue | 2 +- .../desktop/app/settings/tabs/AppLockSettingTab.vue | 9 ++++++++- src/views/mobile/UnlockPage.vue | 2 +- 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/components/common/PinCodeInput.vue b/src/components/common/PinCodeInput.vue index cd18043a..cb505b72 100644 --- a/src/components/common/PinCodeInput.vue +++ b/src/components/common/PinCodeInput.vue @@ -33,6 +33,7 @@ const props = defineProps<{ length: number; disabled?: boolean; autofocus?: boolean; + autoConfirm?: boolean; secure?: boolean; }>(); @@ -151,6 +152,14 @@ function onKeydown(index: number, event: KeyboardEvent): void { return; } + if (index <= 0 && (event.shiftKey && event.key === 'Tab')) { + return; + } + + if (index >= props.length - 1 && (!event.shiftKey && event.key === 'Tab')) { + return; + } + if (event.key === 'Enter' && finalPinCode.value.length === props.length) { emit('pincode:confirm', finalPinCode.value); event.preventDefault(); @@ -204,7 +213,7 @@ function onKeydown(index: number, event: KeyboardEvent): void { setInputType(index); setNextFocus(index); - if (finalPinCode.value.length === props.length) { + if (props.autoConfirm && finalPinCode.value.length === props.length) { emit('pincode:confirm', finalPinCode.value); } } diff --git a/src/components/mobile/PinCodeInputSheet.vue b/src/components/mobile/PinCodeInputSheet.vue index f2088ce3..b3fc2cec 100644 --- a/src/components/mobile/PinCodeInputSheet.vue +++ b/src/components/mobile/PinCodeInputSheet.vue @@ -10,7 +10,7 @@
{{ hint }}