From 441227d88e72425f73e9a9c6525e1ca1e8bc5a22 Mon Sep 17 00:00:00 2001 From: xlsea Date: Fri, 14 Mar 2025 10:30:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=95=B4=E5=90=88giee=E4=B8=80?= =?UTF-8?q?=E9=94=AE=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/service/api/auth.ts | 8 +++++ src/store/modules/auth/index.ts | 33 ++++++++++++++++++- .../_builtin/login/modules/pwd-login.vue | 31 +++++++++++++++-- 3 files changed, 68 insertions(+), 4 deletions(-) diff --git a/src/service/api/auth.ts b/src/service/api/auth.ts index 7d158e5..2b8b02f 100644 --- a/src/service/api/auth.ts +++ b/src/service/api/auth.ts @@ -46,3 +46,11 @@ export function fetchRefreshToken(refreshToken: string) { export function fetchCustomBackendError(code: string, msg: string) { return request({ url: '/auth/error', params: { code, msg } }); } + +export function fetchAuthLoginToken(token: string) { + return request({ + url: '/auth/login/token', + method: 'post', + data: { token } + }); +} diff --git a/src/store/modules/auth/index.ts b/src/store/modules/auth/index.ts index 88a6ee3..b36e804 100644 --- a/src/store/modules/auth/index.ts +++ b/src/store/modules/auth/index.ts @@ -4,7 +4,7 @@ import { defineStore } from 'pinia'; import { useLoading } from '@sa/hooks'; import { SetupStoreId } from '@/enum'; import { useRouterPush } from '@/hooks/common/router'; -import { fetchGetUserInfo, fetchLogin, fetchVersion } from '@/service/api'; +import { fetchAuthLoginToken, fetchGetUserInfo, fetchLogin, fetchVersion } from '@/service/api'; import { localStg } from '@/utils/storage'; import { $t } from '@/locales'; import { roleTypeRecord } from '@/constants/business'; @@ -97,6 +97,36 @@ export const useAuthStore = defineStore(SetupStoreId.Auth, () => { endLoading(); } + /** + * Login + * + * @param authToken token + * @param [redirect=true] Whether to redirect after login. Default is `true` + */ + async function loginByAuthToken(authToken: string, redirect = true) { + startLoading(); + + const { data: loginToken, error } = await fetchAuthLoginToken(authToken); + + if (!error) { + const pass = await loginByToken(loginToken); + + if (pass) { + await redirectFromLogin(redirect); + + window.$notification?.success({ + title: $t('page.login.common.loginSuccess'), + content: $t('page.login.common.welcomeBack', { userName: userInfo.userName }), + duration: 4500 + }); + } + } else { + resetStore(); + } + + endLoading(); + } + async function loginByToken(loginToken: Api.Auth.LoginToken) { // 1. stored in the localStorage, the later requests need it in headers localStg.set('token', loginToken.token); @@ -190,6 +220,7 @@ export const useAuthStore = defineStore(SetupStoreId.Auth, () => { loginLoading, resetStore, login, + loginByAuthToken, getUserInfo, initUserInfo, initAppVersion, diff --git a/src/views/_builtin/login/modules/pwd-login.vue b/src/views/_builtin/login/modules/pwd-login.vue index cc83bc1..77b4938 100644 --- a/src/views/_builtin/login/modules/pwd-login.vue +++ b/src/views/_builtin/login/modules/pwd-login.vue @@ -1,6 +1,7 @@