From 3e71d77e7809a709ca2015306ab7ef7935dc82d7 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 24 八月 2026 17:03:50 +0800
Subject: [PATCH] style(auth): 优化认证页面样式和登录组件
---
src/views/_core/authentication/login.vue | 135 +++++++-------------------------------------
1 files changed, 22 insertions(+), 113 deletions(-)
diff --git a/src/views/_core/authentication/login.vue b/src/views/_core/authentication/login.vue
index 9df6483..819eb4b 100644
--- a/src/views/_core/authentication/login.vue
+++ b/src/views/_core/authentication/login.vue
@@ -1,31 +1,20 @@
<script lang="ts" setup>
-import type { VbenFormSchema } from '../../../packages/effects/common-ui/src';
+import type { VbenFormSchema } from '@vben/common-ui';
import type { AuthApi } from '#/api/core/auth';
-import { computed, onMounted, ref } from 'vue';
-import { useRoute } from 'vue-router';
+import { computed, ref } from 'vue';
-import { AuthenticationLogin, Verification, z } from '../../../packages/effects/common-ui/src';
-import { isCaptchaEnable, isTenantEnable } from '../../../packages/effects/hooks/src';
-import { $t } from '../../../packages/locales/src';
-import { useAccessStore } from '../../../packages/stores/src';
+import { AuthenticationLogin, Verification, z } from '@vben/common-ui';
+import { isCaptchaEnable } from '@vben/hooks';
+import { $t } from '@vben/locales';
-import {
- checkCaptcha,
- getCaptcha,
- getTenantByWebsite,
- getTenantSimpleList,
- socialAuthRedirect,
-} from '#/api/core/auth';
+import { checkCaptcha, getCaptcha } from '#/api/core/auth';
import { useAuthStore } from '#/store';
defineOptions({ name: 'Login' });
-const { query } = useRoute();
const authStore = useAuthStore();
-const accessStore = useAccessStore();
-const tenantEnable = isTenantEnable();
const captchaEnable = isCaptchaEnable();
const loginRef = ref();
@@ -33,114 +22,29 @@
const captchaType = 'blockPuzzle'; // 楠岃瘉鐮佺被鍨嬶細'blockPuzzle' | 'clickWord'
-/** 鑾峰彇绉熸埛鍒楄〃锛屽苟榛樿閫変腑 */
-const tenantList = ref<AuthApi.TenantResult[]>([]); // 绉熸埛鍒楄〃
-async function fetchTenantList() {
- if (!tenantEnable) {
- return;
- }
- try {
- // 鑾峰彇绉熸埛鍒楄〃銆佸煙鍚嶅搴旂鎴�
- const websiteTenantPromise = getTenantByWebsite(window.location.hostname);
- tenantList.value = await getTenantSimpleList();
-
- // 閫変腑绉熸埛锛氬煙鍚� > store 涓殑绉熸埛 > 棣栦釜绉熸埛
- let tenantId: null | number = null;
- const websiteTenant = await websiteTenantPromise;
- if (websiteTenant?.id) {
- tenantId = websiteTenant.id;
- }
- // 濡傛灉娌℃湁浠庡煙鍚嶈幏鍙栧埌绉熸埛锛屽皾璇曚粠 store 涓幏鍙�
- if (!tenantId && accessStore.tenantId) {
- tenantId = accessStore.tenantId;
- }
- // 濡傛灉杩樻槸娌℃湁绉熸埛锛屼娇鐢ㄥ垪琛ㄤ腑鐨勭涓�涓�
- if (!tenantId && tenantList.value?.[0]?.id) {
- tenantId = tenantList.value[0].id;
- }
-
- // 璁剧疆閫変腑鐨勭鎴风紪鍙�
- accessStore.setTenantId(tenantId);
- loginRef.value.getFormApi().setFieldValue('tenantId', tenantId?.toString());
- } catch (error) {
- console.error('鑾峰彇绉熸埛鍒楄〃澶辫触:', error);
- }
-}
-
/** 澶勭悊鐧诲綍 */
-async function handleLogin(values: any) {
- // 濡傛灉寮�鍚獙璇佺爜锛屽垯鍏堥獙璇侀獙璇佺爜
+async function handleLogin(values: AuthApi.LoginParams) {
if (captchaEnable) {
verifyRef.value.show();
return;
}
- // 鏃犻獙璇佺爜锛岀洿鎺ョ櫥褰�
await authStore.authLogin('username', values);
}
/** 楠岃瘉鐮侀�氳繃锛屾墽琛岀櫥褰� */
-async function handleVerifySuccess({ captchaVerification }: any) {
- try {
- await authStore.authLogin('username', {
- ...(await loginRef.value.getFormApi().getValues()),
- captchaVerification,
- });
- } catch (error) {
- console.error('Error in handleLogin:', error);
- }
+async function handleVerifySuccess({
+ captchaVerification,
+}: {
+ captchaVerification: string;
+}) {
+ await authStore.authLogin('username', {
+ ...(await loginRef.value.getFormApi().getValues()),
+ captchaVerification,
+ });
}
-
-/** 澶勭悊绗笁鏂圭櫥褰� */
-const redirect = query?.redirect;
-async function handleThirdLogin(type: number) {
- if (type <= 0) {
- return;
- }
- try {
- // 璁$畻 redirectUri
- // tricky: type銆乺edirect 闇�瑕佸厛 encode 涓�娆★紝鍚﹀垯閽夐拤鍥炶皟浼氫涪澶便�傞厤鍚� social-login.vue#getUrlValue() 浣跨敤
- const redirectUri = `${
- location.origin
- }/auth/social-login?${encodeURIComponent(
- `type=${type}&redirect=${redirect || '/'}`,
- )}`;
-
- // 杩涜璺宠浆
- window.location.href = await socialAuthRedirect(type, redirectUri);
- } catch (error) {
- console.error('绗笁鏂圭櫥褰曞鐞嗗け璐�:', error);
- }
-}
-
-/** 缁勪欢鎸傝浇鏃惰幏鍙栫鎴蜂俊鎭� */
-onMounted(() => {
- fetchTenantList();
-});
const formSchema = computed((): VbenFormSchema[] => {
return [
- {
- component: 'VbenSelect',
- componentProps: {
- options: tenantList.value.map((item) => ({
- label: item.name,
- value: item.id.toString(),
- })),
- placeholder: $t('authentication.tenantTip'),
- },
- fieldName: 'tenantId',
- label: $t('authentication.tenant'),
- rules: z.string().min(1, { message: $t('authentication.tenantTip') }),
- dependencies: {
- triggerFields: ['tenantId'],
- if: tenantEnable,
- trigger(values) {
- if (values.tenantId) {
- accessStore.setTenantId(Number(values.tenantId));
- }
- },
- },
- },
{
component: 'VbenInput',
componentProps: {
@@ -175,8 +79,13 @@
ref="loginRef"
:form-schema="formSchema"
:loading="authStore.loginLoading"
+ :show-code-login="false"
+ :show-qrcode-login="false"
+ :show-third-party-login="false"
+ :show-register="false"
+ :show-forget-password="false"
+ :show-doc-link="false"
@submit="handleLogin"
- @third-login="handleThirdLogin"
/>
<Verification
ref="verifyRef"
--
Gitblit v1.9.3