|
@@ -2,16 +2,36 @@
|
|
|
import type { VbenFormSchema } from '@vben/common-ui';
|
|
|
import type { Recordable } from '@vben/types';
|
|
|
|
|
|
-import { computed, ref } from 'vue';
|
|
|
+import { computed, ref, useTemplateRef } from 'vue';
|
|
|
|
|
|
import { AuthenticationCodeLogin, z } from '@vben/common-ui';
|
|
|
import { $t } from '@vben/locales';
|
|
|
|
|
|
+import { message } from 'ant-design-vue';
|
|
|
+
|
|
|
defineOptions({ name: 'CodeLogin' });
|
|
|
|
|
|
const loading = ref(false);
|
|
|
const CODE_LENGTH = 6;
|
|
|
-
|
|
|
+const loginRef =
|
|
|
+ useTemplateRef<InstanceType<typeof AuthenticationCodeLogin>>('loginRef');
|
|
|
+function sendCodeApi(phoneNumber: string) {
|
|
|
+ message.loading({
|
|
|
+ content: $t('page.auth.sendingCode'),
|
|
|
+ duration: 0,
|
|
|
+ key: 'sending-code',
|
|
|
+ });
|
|
|
+ return new Promise((resolve) => {
|
|
|
+ setTimeout(() => {
|
|
|
+ message.success({
|
|
|
+ content: $t('page.auth.codeSentTo', [phoneNumber]),
|
|
|
+ duration: 3,
|
|
|
+ key: 'sending-code',
|
|
|
+ });
|
|
|
+ resolve({ code: '123456', phoneNumber });
|
|
|
+ }, 3000);
|
|
|
+ });
|
|
|
+}
|
|
|
const formSchema = computed((): VbenFormSchema[] => {
|
|
|
return [
|
|
|
{
|
|
@@ -39,6 +59,25 @@ const formSchema = computed((): VbenFormSchema[] => {
|
|
|
: $t('authentication.sendCode');
|
|
|
return text;
|
|
|
},
|
|
|
+ handleSendCode: async () => {
|
|
|
+ // 模拟发送验证码
|
|
|
+ // Simulate sending verification code
|
|
|
+ loading.value = true;
|
|
|
+ const formApi = loginRef.value?.getFormApi();
|
|
|
+ if (!formApi) {
|
|
|
+ loading.value = false;
|
|
|
+ throw new Error('formApi is not ready');
|
|
|
+ }
|
|
|
+ await formApi.validateField('phoneNumber');
|
|
|
+ const isPhoneReady = await formApi.isFieldValid('phoneNumber');
|
|
|
+ if (!isPhoneReady) {
|
|
|
+ loading.value = false;
|
|
|
+ throw new Error('Phone number is not Ready');
|
|
|
+ }
|
|
|
+ const { phoneNumber } = await formApi.getValues();
|
|
|
+ await sendCodeApi(phoneNumber);
|
|
|
+ loading.value = false;
|
|
|
+ },
|
|
|
placeholder: $t('authentication.code'),
|
|
|
},
|
|
|
fieldName: 'code',
|
|
@@ -62,6 +101,7 @@ async function handleLogin(values: Recordable<any>) {
|
|
|
|
|
|
<template>
|
|
|
<AuthenticationCodeLogin
|
|
|
+ ref="loginRef"
|
|
|
:form-schema="formSchema"
|
|
|
:loading="loading"
|
|
|
@submit="handleLogin"
|