Sfoglia il codice sorgente

fix(router/request): 优化登录失效提示和错误处理逻辑

- 统一登录失效提示信息格式
- 重构请求拦截器中的错误处理逻辑,减少重复代码
- 完善错误消息处理和用户登出流程
- 更新README文档格式和说明位置
liujia 2 mesi fa
parent
commit
1de27a6
3 ha cambiato i file con 47 aggiunte e 33 eliminazioni
  1. 2 1
      README.md
  2. 44 31
      src/request/index.ts
  3. 1 1
      src/router/guard.ts

+ 2 - 1
README.md

@@ -30,7 +30,7 @@ bash scripts/merge_dev_to_pro.sh # 同步dev分支到prod分支
 
 ---
 ## 🎯 命令速查表
-说明:目前分为开发、测试/单机版、生产/集成环境
+
 | 环境 | 命令 | 端口 / 说明 |
 |------|------|------------|
 | 🟢 开发环境 | `npm run dev` | 3000 |
@@ -45,6 +45,7 @@ bash scripts/merge_dev_to_pro.sh # 同步dev分支到prod分支
 | 🧹 代码修复 | `npm run lint` | ESLint 自动修复 |
 | 🎨 格式化代码 | `npm run format` | Prettier 格式化 |
 
+> 说明:目前分为开发、测试/单机版、生产/集成环境
 ---
 
 ## 📦 开发相关

+ 44 - 31
src/request/index.ts

@@ -54,52 +54,65 @@ service.interceptors.response.use(
     // 业务状态码处理
     if ([200, '200'].includes(data.code)) {
       return data
-    } else {
-      // token过期
-      if (['11011', '11012', '11016'].includes(data.code)) {
-        if (!userStore.userInfo.tokenValue) return
-        message.error('登录失效,请重新登录')
+    }
+
+    // 全局错误信息
+    let errorMsg: string = data.message || data.msg
+
+    if (['11011', '11012', '11016'].includes(data.code)) {
+      if (!userStore.userInfo.tokenValue) {
         userStore.logout()
-        return
+        return Promise.reject(new Error('未授权,请先登录'))
       }
-      if (['60001'].includes(data.code)) {
-        // 房间信息不存在,不用报错提示
-        return
-      }
-      if ([500, '500'].includes(data.code)) {
-        message.error(data.message || data.msg || '服务异常,请联系管理员')
-        return
-      }
-      message.error(data.message || data.msg) // 全局错误信息
-      return Promise.reject(new Error(data.message))
+      // token过期
+      errorMsg = `登录过期,请重新登录, ${data?.code}`
+      userStore.logout()
+    } else if (['60001'].includes(data.code)) {
+      // 房间信息不存在,不用报错提示
+      errorMsg = ''
+    } else if ([500, '500'].includes(data.code)) {
+      errorMsg = data.message || data.msg || '服务异常,请联系管理员'
     }
+
+    // 全局错误信息
+    if (errorMsg) {
+      message.error(errorMsg)
+    }
+
+    return Promise.reject(new Error(errorMsg))
   },
   (error) => {
     const userStore = useUserStore()
+    let errorMessage: string = ''
     // HTTP状态码非2xx
     if (error.response) {
-      // 服务器有响应的情况
+      // 1 服务器有响应
       const { status, data } = error.response
-      console.error('❌ 服务器错误 🚀', status, data, error.config.url)
-      const errorMessage = data?.message || data?.msg || `服务异常,请联系管理员`
-      if (status === 400 && data?.code === '11016') {
-        message.error('登录失效,请重新登录')
-        userStore.logout()
-        return
+      console.error(`❌ 服务器响应错误 ${status}: 🚀 ${error.config.url}`, data)
+
+      errorMessage = data?.message || data?.msg || `服务异常,请联系管理员`
+      if (status === 400) {
+        if (['11016'].includes(data?.code)) {
+          errorMessage = `登录过期,请重新登录, ${status}、${data?.code}`
+          userStore.logout()
+        }
       }
-      message.error(errorMessage)
-      return Promise.reject(new Error(errorMessage))
     } else if (error.request) {
-      // 请求已发出但没有收到响应
-      console.error('❌ 网络错误 🚀', error.message)
-      message.error('网络异常,请检查网络')
-      return Promise.reject(new Error('网络异常,请检查网络'))
+      // 2 请求已发出但没有收到响应
+      console.error(`❌ 网络错误 🚀 ${error.message}`)
+      errorMessage = '网络异常,请检查网络'
     } else {
       // 请求配置错误
       console.error('❌ 请求错误 🚀', error.message)
-      message.error(`${error.message || '请求异常,请联系管理员'}`)
-      return Promise.reject(error)
+      errorMessage = `${error.message || '请求异常,请联系管理员'}`
     }
+
+    // 统一显示错误消息
+    if (errorMessage) {
+      message.error(errorMessage)
+    }
+
+    return Promise.reject(new Error(errorMessage))
   }
 )
 

+ 1 - 1
src/router/guard.ts

@@ -6,7 +6,7 @@ export const authGuard = (to: RouteLocationNormalized) => {
   const userStore = useUserStore()
 
   if (!userStore.userInfo.tokenValue && to.name !== 'login') {
-    message.error('登录失效,请重新登录')
+    message.error(`登录失效,请重新登录`)
     return {
       name: 'login',
       // query: { redirect: to.fullPath },