Selaa lähdekoodia

抽离退出登录逻辑

丸子 3 kuukautta sitten
vanhempi
sitoutus
f8979752a5

+ 2 - 42
src/components/HomePage.vue

@@ -112,8 +112,7 @@ import studyImg from '@/assets/images/study.png'
 // 退出登录图标
 import logoutIcon from '@/assets/icon/logout.png'
 // 退出登录
-import { logout } from '@/api/login/login.js'
-import { Message } from '@/utils/message/Message.js'
+import { logoutLogic } from '@/utils/loginUtils.js'
 
 // 平台标题响应式变量
 const platformTitle = ref(import.meta.env.VITE_APP_TITLE)
@@ -132,46 +131,7 @@ const updateUserName = () => {
 const router = useRouter()
 // 退出登录
 const LogoutClick = async () => {
-  try {
-    // 调用logout API 退出登录
-     const logoutRes = await logout()
-     console.log('退出登录:', logoutRes);
-    // 清空登录状态相关信息
-    localStorage.removeItem('token')
-    localStorage.removeItem('isLoggedIn')
-    localStorage.removeItem('maxCourseSections')
-    
-    // 检查是否勾选了记住我
-    const rememberMe = localStorage.getItem('rememberMe') === 'true'
-    
-    if (!rememberMe) {
-      // 未勾选记住我,清空所有信息
-      localStorage.removeItem('userName')
-      localStorage.removeItem('tenantName')
-      localStorage.removeItem('rememberMe')
-    }
-
-    // 跳转到登录页面
-    router.push({ path: '/login' })
-  } catch (error) {
-    console.error('退出登录失败:', error)
-    // API调用失败,也清空本地存储
-    localStorage.removeItem('token')
-    localStorage.removeItem('isLoggedIn')
-    localStorage.removeItem('maxCourseSections')
-    
-    // 检查是否勾选了记住我
-    const rememberMe = localStorage.getItem('rememberMe') === 'true'
-    
-    if (!rememberMe) {
-      // 未勾选记住我,清空所有信息
-      localStorage.removeItem('userName')
-      localStorage.removeItem('tenantName')
-      localStorage.removeItem('rememberMe')
-    }
-    Message().notifyError('退出登录失败,请重试', true)
-    router.push({ path: '/login' })
-  }
+  await logoutLogic(router)
 }
 
 // 默认选中 AI 通识课

+ 49 - 2
src/utils/loginUtils.js

@@ -1,9 +1,11 @@
 import { ref, computed } from 'vue'
-import { getTenantIdByName, login, smsLogin, smsCode } from '@/api/login/login.js'
+import { getTenantIdByName, login, smsLogin, smsCode, logout } from '@/api/login/login.js'
 import { ElLoading, ElMessage } from 'element-plus'
 import { updateAllDictData } from './dictUtils.js';
 // CryptoJS 库(用于密码加密)
 import CryptoJS from 'crypto-js';
+// 消息工具
+import { Message } from './message/Message.js';
 
 // 加密密钥 (从环境变量获取)
 const SECRET_KEY = import.meta.env.VITE_SECRET_KEY;
@@ -326,6 +328,50 @@ const autoLogin = async (tenantName, username, password, router, redirectPath) =
   }
 }
 
+// 退出登录逻辑
+const logoutLogic = async (router) => {
+  try {
+    // 调用logout API 退出登录
+    const logoutRes = await logout()
+    console.log('退出登录:', logoutRes);
+    // 清空登录状态相关信息
+    localStorage.removeItem('token')
+    localStorage.removeItem('isLoggedIn')
+    localStorage.removeItem('maxCourseSections')
+    
+    // 检查是否勾选了记住我
+    const rememberMe = localStorage.getItem('rememberMe') === 'true'
+    
+    if (!rememberMe) {
+      // 未勾选记住我,清空所有信息
+      localStorage.removeItem('userName')
+      localStorage.removeItem('tenantName')
+      localStorage.removeItem('rememberMe')
+    }
+
+    // 跳转到登录页面
+    router.push({ path: '/login' })
+  } catch (error) {
+    console.error('退出登录失败:', error)
+    // API调用失败,也清空本地存储
+    localStorage.removeItem('token')
+    localStorage.removeItem('isLoggedIn')
+    localStorage.removeItem('maxCourseSections')
+    
+    // 检查是否勾选了记住我
+    const rememberMe = localStorage.getItem('rememberMe') === 'true'
+    
+    if (!rememberMe) {
+      // 未勾选记住我,清空所有信息
+      localStorage.removeItem('userName')
+      localStorage.removeItem('tenantName')
+      localStorage.removeItem('rememberMe')
+    }
+    Message().notifyError('退出登录失败,请重试', true)
+    router.push({ path: '/login' })
+  }
+}
+
 export {
   createLoginData,
   createVerificationCodeLogic,
@@ -334,5 +380,6 @@ export {
   loadLoginData,
   checkLoginStatus,
   generateRules,
-  autoLogin
+  autoLogin,
+  logoutLogic
 }

+ 2 - 0
src/views/laboratory/ExperimentalCourses.vue

@@ -105,6 +105,8 @@ import {Message} from "@/utils/message/Message.js";
 // 根据ID获取实验室课程列表接口
 import { getCourseByTypeId } from '@/api/laboratory/index.js'
 
+import {DICT_TYPE} from "@/utils/dictUtils.js";
+
 // 常量配置
 const CONSTANTS = {
   SCROLL_SPEED: 2,

+ 2 - 42
src/views/laboratory/ExperimentalTheme.vue

@@ -109,8 +109,7 @@ import rightbtn from '@/assets/programming/rightbtn.png'
 // 退出登录图标
 import logoutIcon from '@/assets/icon/logout.png'
 // 退出登录
-import { logout } from '@/api/login/login.js'
-import { Message } from '@/utils/message/Message.js'
+import { logoutLogic } from '@/utils/loginUtils.js'
 // 实验课主题接口
 import { getThemeExperimentList } from '@/api/laboratory/index.js'
 
@@ -260,46 +259,7 @@ const goToHomePage = () => {
 
 // 退出登录
 const LogoutClick = async () => {
-  try {
-    // 调用logout API 退出登录
-    const logoutRes = await logout()
-    console.log('退出登录:', logoutRes);
-    // 清空登录状态相关信息
-    localStorage.removeItem('token')
-    localStorage.removeItem('isLoggedIn')
-    localStorage.removeItem('maxCourseSections')
-    
-    // 检查是否勾选了记住我
-    const rememberMe = localStorage.getItem('rememberMe') === 'true'
-    
-    if (!rememberMe) {
-      // 未勾选记住我,清空所有信息
-      localStorage.removeItem('userName')
-      localStorage.removeItem('tenantName')
-      localStorage.removeItem('rememberMe')
-    }
-
-    // 跳转到登录页面
-    router.push({ path: '/login' })
-  } catch (error) {
-    console.error('退出登录失败:', error)
-    // API调用失败,也清空本地存储
-    localStorage.removeItem('token')
-    localStorage.removeItem('isLoggedIn')
-    localStorage.removeItem('maxCourseSections')
-    
-    // 检查是否勾选了记住我
-    const rememberMe = localStorage.getItem('rememberMe') === 'true'
-    
-    if (!rememberMe) {
-      // 未勾选记住我,清空所有信息
-      localStorage.removeItem('userName')
-      localStorage.removeItem('tenantName')
-      localStorage.removeItem('rememberMe')
-    }
-    Message().notifyError('退出登录失败,请重试', true)
-    router.push({ path: '/login' })
-  }
+  await logoutLogic(router)
 }
 
 // 存储事件处理函数

+ 2 - 22
src/views/programming/ProgrammingGame.vue

@@ -91,8 +91,7 @@ import rightbtn from '@/assets/programming/rightbtn.png'
 // 退出登录图标
 import logoutIcon from '@/assets/icon/logout.png'
 // 退出登录
-import { logout } from '@/api/login/login.js'
-import { Message } from '@/utils/message/Message.js'
+import { logoutLogic } from '@/utils/loginUtils.js'
 
 
 // 创建路由实例
@@ -224,26 +223,7 @@ const goToHomePage = () => {
 
 // 退出登录
 const LogoutClick = async () => {
-  try {
-    // 调用logout API 退出登录
-     const logoutRes = await logout()
-     console.log('退出登录:', logoutRes);
-    // 清空 token 和登录状态
-    localStorage.removeItem('token')
-    localStorage.removeItem('isLoggedIn')
-    localStorage.removeItem('maxCourseSections')
-
-    // 跳转到登录页面
-    router.push({ path: '/login' })
-  } catch (error) {
-    console.error('退出登录失败:', error)
-    // API调用失败,也清空本地存储
-    localStorage.removeItem('token')
-    localStorage.removeItem('isLoggedIn')
-    localStorage.removeItem('maxCourseSections')
-    Message().notifyError('退出登录失败,请重试', true)
-    router.push({ path: '/login' })
-  }
+  await logoutLogic(router)
 }
 
 onMounted(() => {