From 1d7a2013e375cae1c3f26261fc5a24d4770d06c5 Mon Sep 17 00:00:00 2001 From: Gsh <15170702455@163.com> Date: Sat, 28 Jun 2025 18:14:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=8D=95=E7=82=B9=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=8E=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Yi.Ai.Vue3/.env.development | 7 +-- Yi.Ai.Vue3/.env.production | 4 +- .../src/components/LoginDialog/index.vue | 17 +++---- Yi.Ai.Vue3/src/config/sso.ts | 4 +- Yi.Ai.Vue3/src/styles/btn-style.scss.bak | 35 ------------- Yi.Ai.Vue3/src/styles/element-plus.scss.bak | 50 ------------------- Yi.Ai.Vue3/src/styles/elx.scss.bak | 36 ------------- Yi.Ai.Vue3/src/styles/index.scss.bak | 9 ---- Yi.Ai.Vue3/src/styles/var.scss.bak | 24 --------- Yi.Ai.Vue3/types/import_meta.d.ts | 3 +- Yi.Bbs.Vue3/src/permission.js | 21 ++------ 11 files changed, 20 insertions(+), 190 deletions(-) delete mode 100644 Yi.Ai.Vue3/src/styles/btn-style.scss.bak delete mode 100644 Yi.Ai.Vue3/src/styles/element-plus.scss.bak delete mode 100644 Yi.Ai.Vue3/src/styles/elx.scss.bak delete mode 100644 Yi.Ai.Vue3/src/styles/index.scss.bak delete mode 100644 Yi.Ai.Vue3/src/styles/var.scss.bak diff --git a/Yi.Ai.Vue3/.env.development b/Yi.Ai.Vue3/.env.development index ce807789..b32755dd 100644 --- a/Yi.Ai.Vue3/.env.development +++ b/Yi.Ai.Vue3/.env.development @@ -9,13 +9,14 @@ VITE_WEB_ENV = 'development' # 本地环境 VITE_WEB_BASE_API = '/dev-api' +# VITE_WEB_BASE_API='/prod-api' # 本地接口 # VITE_API_URL = http://localhost:19001/api/app VITE_API_URL=http://ccnetcore.com:19001/api/app # SSO单点登录url -# SSO_SEVER_URL='http://localhost:18001' -SSO_SEVER_URL='http://ccnetcore.com' +VITE_SSO_SEVER_URL='http://localhost:18001' +# SSO_SEVER_URL='http://ccnetcore.com' # SSO单点登录项目标识 -SSO_CLIENT_ID='YiXin-Ai'; +VITE_SSO_CLIENT_ID='YiXin-Ai'; diff --git a/Yi.Ai.Vue3/.env.production b/Yi.Ai.Vue3/.env.production index c32394bd..51d7e599 100644 --- a/Yi.Ai.Vue3/.env.production +++ b/Yi.Ai.Vue3/.env.production @@ -17,8 +17,8 @@ VITE_API_URL = http://ccnetcore.com:19001/api/app VITE_BUILD_COMPRESS = gzip # SSO单点登录url -SSO_SEVER_URL='https://ccnetcore.com' +VITE_SSO_SEVER_URL='https://ccnetcore.com' # SSO单点登录项目标识 -SSO_CLIENT_ID='YiXin-Ai'; +VITE_SSO_CLIENT_ID='YiXin-Ai'; diff --git a/Yi.Ai.Vue3/src/components/LoginDialog/index.vue b/Yi.Ai.Vue3/src/components/LoginDialog/index.vue index f853cae0..521db32a 100644 --- a/Yi.Ai.Vue3/src/components/LoginDialog/index.vue +++ b/Yi.Ai.Vue3/src/components/LoginDialog/index.vue @@ -56,6 +56,8 @@ function onAfterLeave() { } function handleThirdPartyLogin() { + console.log('SSO_SEVER_URL', SSO_SEVER_URL); + console.log('import.meta.env', import.meta.env); const redirectUri = encodeURIComponent(`${window.location.origin}/chat`); const popup = window.open( `${SSO_SEVER_URL}/login?client_id=${SSO_CLIENT_ID}&redirect_uri=${redirectUri}`, @@ -68,23 +70,19 @@ function handleThirdPartyLogin() { const messageHandler = async (event: any) => { if (event.origin === new URL(SSO_SEVER_URL).origin - || event.data.type === 'SSO_LOGIN_SUCCESS' - || !isHandled) { + && event.data.type === 'SSO_LOGIN_SUCCESS' + && !isHandled) { isHandled = true; try { + // 清理监听 + window.removeEventListener('message', messageHandler); const { token } = event.data; userStore.setToken(token); - const resUserInfo = await getUserInfo(); userStore.setUserInfo(resUserInfo.data); - // 关闭弹窗 if (popup && !popup.closed) popup.close(); - - // 清理监听 - window.removeEventListener('message', messageHandler); - // 后续逻辑 ElMessage.success('登录成功'); userStore.closeLoginDialog(); @@ -96,9 +94,6 @@ function handleThirdPartyLogin() { ElMessage.error('登录失败'); } } - else { - console.log('2222-', event); - } }; // 先移除旧监听,再添加新监听 diff --git a/Yi.Ai.Vue3/src/config/sso.ts b/Yi.Ai.Vue3/src/config/sso.ts index bb983ab7..8e92f5d7 100644 --- a/Yi.Ai.Vue3/src/config/sso.ts +++ b/Yi.Ai.Vue3/src/config/sso.ts @@ -1,4 +1,4 @@ // 三方登录 // export const SSO_SEVER_URL: string = 'https://ccnetcore.com'; -export const SSO_SEVER_URL: string = import.meta.env.SSO_SEVER_URL || 'http://ccnetcore.com'; -export const SSO_CLIENT_ID: string = import.meta.env.SSO_CLIENT_ID || 'YiXin-Ai'; +export const SSO_SEVER_URL: string = import.meta.env.VITE_SSO_SEVER_URL || 'http://ccnetcore.com'; +export const SSO_CLIENT_ID: string = import.meta.env.VITE_SSO_CLIENT_ID || 'YiXin-Ai'; diff --git a/Yi.Ai.Vue3/src/styles/btn-style.scss.bak b/Yi.Ai.Vue3/src/styles/btn-style.scss.bak deleted file mode 100644 index 71c6fd1f..00000000 --- a/Yi.Ai.Vue3/src/styles/btn-style.scss.bak +++ /dev/null @@ -1,35 +0,0 @@ -// 公共的图表按钮样式 -.btn-icon-btn { - align-items: center; - justify-content: center; - display: inline-block; - border: 1px solid transparent; - border-radius: 30%; - padding: 4px; - cursor: pointer; - transition: all 0.3s ease; - - // 鼠标移入 - &:hover { - background-color: rgb(0, 0, 0, .05); - - .svg-icon { - color: rgb(0, 0, 0, .6); - } - } - - // 鼠标按下 - &:active { - background-color: rgb(0, 0, 0, .08); - - .svg-icon { - color: rgb(0, 0, 0, .7); - } - } - - // 图标 - .svg-icon { - user-select: none; - color: rgb(0, 0, 0, .5); - } -} diff --git a/Yi.Ai.Vue3/src/styles/element-plus.scss.bak b/Yi.Ai.Vue3/src/styles/element-plus.scss.bak deleted file mode 100644 index 2ddb9eb0..00000000 --- a/Yi.Ai.Vue3/src/styles/element-plus.scss.bak +++ /dev/null @@ -1,50 +0,0 @@ -.el-form{ - .el-form-item{ - &:nth-last-child(1){ - margin-bottom: 0px; - } - } -} - -// el 弹框不知道为啥宽度会变大 -.el-popup-parent--hidden { - overflow: hidden; - width: 100% !important; -} - - -// messagebox 样式 -.is-message-box { - .el-message-box { - border-radius: 16px; - } -} - -// rounded-tooltip 提示框样式 -.rounded-tooltip { - border-radius: 10px !important; - display: flex; - align-items: center; - height: fit-content; -} - -.rounded-tooltip-enter-from { - transform: scale(0.9); /* 进入前:缩小隐藏 */ - opacity: 0; -} -.rounded-tooltip-enter-active, -.rounded-tooltip-leave-active { - transition: transform 0.3s, opacity 0.3s; /* 缓入动画 */ -} -.rounded-tooltip-enter-to { - transform: scale(1); /* 进入后:正常大小 */ - opacity: 1; -} -.rounded-tooltip-leave-from { - transform: scale(1); /* 离开前:正常大小 */ - opacity: 1; -} -.rounded-tooltip-leave-to { - transform: scale(0.9); /* 离开后:缩小隐藏 */ - opacity: 0; -} diff --git a/Yi.Ai.Vue3/src/styles/elx.scss.bak b/Yi.Ai.Vue3/src/styles/elx.scss.bak deleted file mode 100644 index 420e09d9..00000000 --- a/Yi.Ai.Vue3/src/styles/elx.scss.bak +++ /dev/null @@ -1,36 +0,0 @@ -// 覆盖一些 elx 组件样式 - -// attachments 图片组件的 1.2.0 版本样式 bug -.image-preview-container { - flex: none !important; -} - -.elx-files-card-content { - gap: 8px; - .elx-files-card-description { - line-height: 1.35; - } -} - -.prev-next-btn { - position: absolute; - top: calc(50% + 3px); - transform: translateY(-50%); - z-index: 10; - cursor: pointer; -} - -.elx-attachments-file-card-wrap { - padding-top: 6px; -} - -.elx-attachments-card { - user-select: none; -} - -// 隐藏 elx-sender-header 组件的底部边框 -.el-sender-header { - border-bottom-color: transparent !important; -} - - diff --git a/Yi.Ai.Vue3/src/styles/index.scss.bak b/Yi.Ai.Vue3/src/styles/index.scss.bak deleted file mode 100644 index d833ce61..00000000 --- a/Yi.Ai.Vue3/src/styles/index.scss.bak +++ /dev/null @@ -1,9 +0,0 @@ -@use './media.scss'; -@use './btn-style.scss'; -@use 'reset-css'; -@use './element-plus.scss'; -@use './elx.scss'; - -body{ - overflow: hidden; -} diff --git a/Yi.Ai.Vue3/src/styles/var.scss.bak b/Yi.Ai.Vue3/src/styles/var.scss.bak deleted file mode 100644 index d482be3e..00000000 --- a/Yi.Ai.Vue3/src/styles/var.scss.bak +++ /dev/null @@ -1,24 +0,0 @@ -:root { - /* 头部高度 */ - --header-container-default-heigth: 56px; - - /* 左侧侧边栏背景色 */ - --sidebar-background-color: #f3f4f6; - - - /* 登录弹框变量 */ - --login-dialog-width: 738px; - --login-dialog-height: 416px; - --login-dialog-padding: 0px; - --login-dialog-section-padding: 0px; - --login-dialog-border-radius: 24px; - --login-dialog-mode-toggle-color: #409eff; - --login-dialog-logo-background: #fff; - --login-dialog-logo-text-color: #191919; - - - - /* 覆盖 element-plus 样式 */ - --el-border-radius-base: 12px !important; - --el-messagebox-border-radius: 16px !important; -} diff --git a/Yi.Ai.Vue3/types/import_meta.d.ts b/Yi.Ai.Vue3/types/import_meta.d.ts index caa83c90..727544a9 100644 --- a/Yi.Ai.Vue3/types/import_meta.d.ts +++ b/Yi.Ai.Vue3/types/import_meta.d.ts @@ -6,7 +6,8 @@ interface ImportMetaEnv { readonly VITE_WEB_ENV: string; readonly VITE_WEB_BASE_API: string; readonly VITE_API_URL: string; - readonly VITE_BUILD_COMPRESS: string; + readonly VITE_SSO_SEVER_URL: string; + readonly VITE_SSO_CLIENT_ID: string; } declare interface ImportMeta { diff --git a/Yi.Bbs.Vue3/src/permission.js b/Yi.Bbs.Vue3/src/permission.js index f209c2cc..6ba38d23 100644 --- a/Yi.Bbs.Vue3/src/permission.js +++ b/Yi.Bbs.Vue3/src/permission.js @@ -12,35 +12,22 @@ const whiteList = ["/login", "/auth-redirect", "/bind", "/register"]; router.beforeEach((to, from, next) => { NProgress.start(); const hasToken = getToken(); - if (to.path === "/login" || to.path === "/index") { const urlParams = new URLSearchParams(window.location.search); const isPopup = window.opener && window.opener !== window; const clientId = urlParams.get('client_id'); const redirectUri = urlParams.get('redirect_uri'); - // 检查是否已经处理过SSO登录(防重复) - const hasHandledSSO = sessionStorage.getItem('sso_handled'); - if (isPopup && clientId && redirectUri && !hasHandledSSO) { + if (isPopup && clientId && redirectUri ) { if (hasToken) { - // 标记已处理,避免重复发送 - sessionStorage.setItem('sso_handled', 'true'); - // 发送消息给父窗口 + const targetOrigin = new URL(decodeURIComponent(redirectUri)).origin; window.opener.postMessage({ type: 'SSO_LOGIN_SUCCESS', token: hasToken - }, redirectUri); - - // 关闭弹出窗口 + }, targetOrigin); + // 立即关闭窗口 setTimeout(() => window.close(), 100); - } else { - // 存储SSO参数,但改用sessionStorage避免持久化 - sessionStorage.setItem('sso_params', JSON.stringify({ - isPopup, - clientId, - redirectUri - })); } } }