Browse Source

fix🐛: 路由跳转,交给请求自己判断数据

Akiraka 2 years ago
parent
commit
ea0fbd24db
3 changed files with 37 additions and 41 deletions
  1. 8 4
      src/router/index.js
  2. 13 22
      src/utils/request.js
  3. 16 15
      src/views/login/index.vue

+ 8 - 4
src/router/index.js

@@ -101,10 +101,14 @@ router.afterEach((to) => {
     document.title = store.sysConfig.sys_app_name;
   }
 
-  // Akiraka 20230117 加载水印
-  if ( store.userInfo.name != undefined ) {
-    Watermark.set(store.userInfo.name)
-  } else {
+  // Vincent 2023004 修复加载水印的bug 
+  if (store.userInfo != undefined){
+    if ( store.userInfo.name != undefined ) {
+      Watermark.set(store.userInfo.name)
+    } else {
+      Watermark.out() // 清除水印
+    }
+  } else{
     Watermark.out() // 清除水印
   }
 });

+ 13 - 22
src/utils/request.js

@@ -13,12 +13,11 @@ service.interceptors.request.use(
   (config) => {
     // Store 必须在拦截器内部导入,在外部导入会显示 Pinia 未初始化
     const store = useUserStore();
-
     // 设置请求头部 Authorization
     if (store.token) {
       config.headers['Authorization'] = 'Bearer ' + store.token;
+      config.headers['Content-Type'] = 'application/json'
     }
-    
     return config;
   },
   (error) => {
@@ -30,36 +29,28 @@ service.interceptors.request.use(
 // response interceptor
 service.interceptors.response.use(
   (response) => {
-    const res = response.data;
+    return response.data;
+  },
+  (error) => {
     const store = useUserStore();
-    if (res.code === 401) {
+    const { code, msg } = error.response.data;
+    // 如果过期则退出登录
+    if (code === 401) {
       Message.error({
         content: 'Token 已过期, 请重新登陆',
         duration: 3000
       });
       // 重定向路由到登陆页面
       store.userLogout();
+      // Akiraka 20230410 重定向到登录页面
       return router.push('/login');
-    }
-
-    if (res.code !== 200) {
-      Message.error({
-        content: res.msg,
-        duration: 3000,
-      });
-
-      return Promise.reject(new Error(res.msg));
     } else {
-      return res;
+      Message.error({
+        content: error.message,
+        duration: 3000
+      })
+      return Promise.reject(msg);
     }
-  },
-  (error) => {
-    console.error(`err: ${error}`);
-    Message.error({
-      content: error.message,
-      duration: 3000
-    })
-    return Promise.reject(error);
   }
 );
 

+ 16 - 15
src/views/login/index.vue

@@ -125,25 +125,26 @@ const handleLogin = () => {
   proxy.$refs.loginFormRef.validate(async (valid) => {
     if (!valid) {
       try {
-        const res = await login(loginForm);
-        await store.setToken(res.token);
-        proxy.$message.success({
-          content: '登陆成功',
-          duration: 2000,
-        });
-        setTimeout(() => {
-          proxy.$router.push('/admin/sys-api');
-          loading.value = false;
-        }, 500);
+        const { code, token, msg } = await login(loginForm);
+        if ( code == 200 ) {
+          await store.setToken(token);
+          proxy.$message.success({
+            content: '登陆成功',
+            duration: 2000,
+          });
+          setTimeout(() => {
+            proxy.$router.push('/admin/sys-api');
+            loading.value = false;
+          }, 500);
+        } else {
+          proxy.$message.error(`登陆失败:${msg}`);
+        }
       } catch (err) {
-        proxy.$message.error(`登陆失败:${err}`);
+        // 登录失败 重新获取验证码
         loadCaptcha();
-        loginForm.code = '';
+      } finally {
         loading.value = false;
       }
-    } else {
-      loading.value = false;
-      return false;
     }
   });
 };