From de59371f50991a0dbee997eb4a13fd3f5f415ffd Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期五, 21 三月 2025 09:45:21 +0800
Subject: [PATCH] feat(login): 添加 Keycloak 登录支持

---
 src/layout/components/SocialCallback/index.vue |   35 ++++++++++++++++++++++++-----------
 1 files changed, 24 insertions(+), 11 deletions(-)

diff --git a/src/layout/components/SocialCallback/index.vue b/src/layout/components/SocialCallback/index.vue
index 5e3d704..84baf34 100644
--- a/src/layout/components/SocialCallback/index.vue
+++ b/src/layout/components/SocialCallback/index.vue
@@ -4,14 +4,11 @@
 
 <script setup lang="ts">
 import { login, callback } from '@/api/login';
-import { setToken } from '@/utils/auth';
-import Cookies from 'js-cookie';
-import { getToken } from '@/utils/auth';
+import { setToken, getToken } from '@/utils/auth';
 import { LoginData } from '@/api/types';
 
 const route = useRoute();
 const loading = ref(true);
-
 
 /**
  * 鎺ユ敹Route浼犻�掔殑鍙傛暟
@@ -20,20 +17,28 @@
 const code = route.query.code as string;
 const state = route.query.state as string;
 const source = route.query.source as string;
-const tenantId = Cookies.get("tenantId") ? Cookies.get("tenantId") as string : '000000';
-
+const stateJson = JSON.parse(atob(state));
+const tenantId = (stateJson.tenantId as string) ? (stateJson.tenantId as string) : '000000';
+const domain = stateJson.domain as string;
 
 const processResponse = async (res: any) => {
   if (res.code !== 200) {
     throw new Error(res.msg);
   }
+  if (res.data !== null) {
+    setToken(res.data.access_token);
+  }
   ElMessage.success(res.msg);
-  location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index';
+  setTimeout(() => {
+    location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index';
+  }, 2000);
 };
 
 const handleError = (error: any) => {
   ElMessage.error(error.message);
-  location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index';
+  setTimeout(() => {
+    location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index';
+  }, 2000);
 };
 
 const callbackByCode = async (data: LoginData) => {
@@ -47,7 +52,6 @@
 };
 
 const loginByCode = async (data: LoginData) => {
-  console.log(2)
   try {
     const res = await login(data);
     await processResponse(res);
@@ -58,12 +62,21 @@
 };
 
 const init = async () => {
+  // 濡傛灉鍩熷悕涓嶇浉绛� 鍒欓噸瀹氬悜澶勭悊
+  let host = window.location.host;
+  if (domain !== host) {
+    let urlFull = new URL(window.location.href);
+    urlFull.host = domain;
+    window.location.href = urlFull.toString();
+    return;
+  }
+
   const data: LoginData = {
     socialCode: code,
     socialState: state,
     tenantId: tenantId,
-    source: source,
-    clientId: 'e5cd7e4891bf95d1d19206ce24a7b32e',
+    source: 'keycloak',
+    clientId: import.meta.env.VITE_APP_CLIENT_ID,
     grantType: 'social'
   };
 

--
Gitblit v1.9.3