fix: pinInput value synchronous update (#5142)

dev-v5
Netfan 2024-12-15 14:26:42 +08:00 committed by GitHub
parent bedf19993d
commit 7581fb381f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 26 additions and 6 deletions

View File

@ -10,6 +10,7 @@ import { $t } from '@vben/locales';
defineOptions({ name: 'CodeLogin' }); defineOptions({ name: 'CodeLogin' });
const loading = ref(false); const loading = ref(false);
const CODE_LENGTH = 6;
const formSchema = computed((): VbenFormSchema[] => { const formSchema = computed((): VbenFormSchema[] => {
return [ return [
@ -30,6 +31,7 @@ const formSchema = computed((): VbenFormSchema[] => {
{ {
component: 'VbenPinInput', component: 'VbenPinInput',
componentProps: { componentProps: {
codeLength: CODE_LENGTH,
createText: (countdown: number) => { createText: (countdown: number) => {
const text = const text =
countdown > 0 countdown > 0
@ -41,7 +43,9 @@ const formSchema = computed((): VbenFormSchema[] => {
}, },
fieldName: 'code', fieldName: 'code',
label: $t('authentication.code'), label: $t('authentication.code'),
rules: z.string().min(1, { message: $t('authentication.codeTip') }), rules: z.string().length(CODE_LENGTH, {
message: $t('authentication.codeTip', [CODE_LENGTH]),
}),
}, },
]; ];
}); });

View File

@ -10,6 +10,7 @@ import { $t } from '@vben/locales';
defineOptions({ name: 'CodeLogin' }); defineOptions({ name: 'CodeLogin' });
const loading = ref(false); const loading = ref(false);
const CODE_LENGTH = 6;
const formSchema = computed((): VbenFormSchema[] => { const formSchema = computed((): VbenFormSchema[] => {
return [ return [
@ -30,6 +31,7 @@ const formSchema = computed((): VbenFormSchema[] => {
{ {
component: 'VbenPinInput', component: 'VbenPinInput',
componentProps: { componentProps: {
codeLength: CODE_LENGTH,
createText: (countdown: number) => { createText: (countdown: number) => {
const text = const text =
countdown > 0 countdown > 0
@ -41,7 +43,9 @@ const formSchema = computed((): VbenFormSchema[] => {
}, },
fieldName: 'code', fieldName: 'code',
label: $t('authentication.code'), label: $t('authentication.code'),
rules: z.string().min(1, { message: $t('authentication.codeTip') }), rules: z.string().length(CODE_LENGTH, {
message: $t('authentication.codeTip', [CODE_LENGTH]),
}),
}, },
]; ];
}); });

View File

@ -10,6 +10,7 @@ import { $t } from '@vben/locales';
defineOptions({ name: 'CodeLogin' }); defineOptions({ name: 'CodeLogin' });
const loading = ref(false); const loading = ref(false);
const CODE_LENGTH = 6;
const formSchema = computed((): VbenFormSchema[] => { const formSchema = computed((): VbenFormSchema[] => {
return [ return [
@ -30,6 +31,7 @@ const formSchema = computed((): VbenFormSchema[] => {
{ {
component: 'VbenPinInput', component: 'VbenPinInput',
componentProps: { componentProps: {
codeLength: CODE_LENGTH,
createText: (countdown: number) => { createText: (countdown: number) => {
const text = const text =
countdown > 0 countdown > 0
@ -41,7 +43,9 @@ const formSchema = computed((): VbenFormSchema[] => {
}, },
fieldName: 'code', fieldName: 'code',
label: $t('authentication.code'), label: $t('authentication.code'),
rules: z.string().min(1, { message: $t('authentication.codeTip') }), rules: z.string().length(CODE_LENGTH, {
message: $t('authentication.codeTip', [CODE_LENGTH]),
}),
}, },
]; ];
}); });

View File

@ -47,6 +47,10 @@ watch(
}, },
); );
watch(inputValue, (val) => {
modelValue.value = val.join('');
});
function handleComplete(e: string[]) { function handleComplete(e: string[]) {
modelValue.value = e.join(''); modelValue.value = e.join('');
emit('complete'); emit('complete');

View File

@ -38,7 +38,7 @@
"qrcodeLogin": "QR Code Login", "qrcodeLogin": "QR Code Login",
"codeSubtitle": "Enter your phone number to start managing your project", "codeSubtitle": "Enter your phone number to start managing your project",
"code": "Security code", "code": "Security code",
"codeTip": "Security code is required", "codeTip": "Security code required {0} characters",
"mobile": "Mobile", "mobile": "Mobile",
"mobileLogin": "Mobile Login", "mobileLogin": "Mobile Login",
"mobileTip": "Please enter mobile number", "mobileTip": "Please enter mobile number",

View File

@ -38,7 +38,7 @@
"qrcodeLogin": "扫码登录", "qrcodeLogin": "扫码登录",
"codeSubtitle": "请输入您的手机号码以开始管理您的项目", "codeSubtitle": "请输入您的手机号码以开始管理您的项目",
"code": "验证码", "code": "验证码",
"codeTip": "请输入验证码", "codeTip": "请输入{0}位验证码",
"mobile": "手机号码", "mobile": "手机号码",
"mobileTip": "请输入手机号", "mobileTip": "请输入手机号",
"mobileErrortip": "手机号码格式错误", "mobileErrortip": "手机号码格式错误",

View File

@ -10,6 +10,7 @@ import { $t } from '@vben/locales';
defineOptions({ name: 'CodeLogin' }); defineOptions({ name: 'CodeLogin' });
const loading = ref(false); const loading = ref(false);
const CODE_LENGTH = 6;
const formSchema = computed((): VbenFormSchema[] => { const formSchema = computed((): VbenFormSchema[] => {
return [ return [
@ -30,6 +31,7 @@ const formSchema = computed((): VbenFormSchema[] => {
{ {
component: 'VbenPinInput', component: 'VbenPinInput',
componentProps: { componentProps: {
codeLength: CODE_LENGTH,
createText: (countdown: number) => { createText: (countdown: number) => {
const text = const text =
countdown > 0 countdown > 0
@ -41,7 +43,9 @@ const formSchema = computed((): VbenFormSchema[] => {
}, },
fieldName: 'code', fieldName: 'code',
label: $t('authentication.code'), label: $t('authentication.code'),
rules: z.string().min(1, { message: $t('authentication.codeTip') }), rules: z.string().length(CODE_LENGTH, {
message: $t('authentication.codeTip', [CODE_LENGTH]),
}),
}, },
]; ];
}); });