| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- <script lang="ts" setup>
- import type { VbenFormSchema } from '@vben/common-ui';
- import type { Recordable } from '@vben-core/typings';
- import { computed, markRaw, ref, useTemplateRef } from 'vue';
- import { useRouter } from 'vue-router';
- import { AuthenticationLogin, SliderCaptcha, z } from '@vben/common-ui';
- import { $t } from '@vben/locales';
- import { message } from 'ant-design-vue';
- import { useAuthStore } from '#/store';
- defineOptions({ name: 'Login' });
- const authStore = useAuthStore();
- const formSchema = computed((): VbenFormSchema[] => {
- return [
- {
- component: 'VbenInput',
- componentProps: {
- placeholder: $t('authentication.usernameTip'),
- },
- fieldName: 'username',
- label: $t('authentication.username'),
- rules: z.string().min(1, { message: $t('authentication.usernameTip') }),
- },
- {
- component: 'VbenInputPassword',
- componentProps: {
- placeholder: $t('authentication.password'),
- },
- fieldName: 'password',
- label: $t('authentication.password'),
- rules: z.string().min(1, { message: $t('authentication.passwordTip') }),
- },
- {
- component: markRaw(SliderCaptcha),
- fieldName: 'captcha',
- rules: z.boolean().refine((value) => value, {
- message: $t('authentication.verifyRequiredTip'),
- }),
- },
- ];
- });
- const router = useRouter();
- const loginRef = useTemplateRef('loginRef');
- const loading = ref(false);
- async function handle(data: Recordable<any>) {
- loading.value = true;
- try {
- await authStore.login(data as any);
- } catch (error: any) {
- message.error(error?.message ?? `登录失败`);
- const formApi = loginRef.value?.getFormApi();
- formApi?.setFieldValue('captcha', false, false);
- formApi
- ?.getFieldComponentRef<InstanceType<typeof SliderCaptcha>>('captcha')
- ?.resume();
- } finally {
- loading.value = false;
- }
- }
- </script>
- <template>
- <AuthenticationLogin
- ref="loginRef"
- :form-schema="formSchema"
- :loading="loading"
- @submit="handle"
- :show-remember-me="false"
- :show-forget-password="false"
- :show-code-login="false"
- :show-qrcode-login="false"
- :show-third-party-login="false"
- :show-register="false"
- />
- </template>
|