林旭祥 1 giorno fa
parent
commit
e0b92162df

+ 21 - 41
src/api/request.ts

@@ -2,6 +2,23 @@ import axios, { AxiosResponse, InternalAxiosRequestConfig } from 'axios';
 import utils from '@/utils/index';
 import router from '@/router';
 
+function jumpTo(){
+  //清空缓存
+  // localStorage.clear();
+  localStorage.removeItem('token');
+  localStorage.removeItem('userInfo');
+  let loginType = localStorage.getItem('loginType');
+  if(!['/login','/login/qrcode','/login/sunshineRun'].includes(router.currentRoute.value.path)){
+    if (loginType == "3") {
+      router.push('/login/sunshineRun?auto=1');
+    } else if (loginType == "2") {
+      router.push('/login/qrcode?auto=1');
+    } else {
+      router.push('/login?auto=1');
+    }
+  }
+};
+
 axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8';
 axios.defaults.headers['auth'] = true;
 // 创建 axios 实例
@@ -21,18 +38,7 @@ service.interceptors.request.use(
     if (!token && Boolean(config.headers['auth']) == true) {
       delete config.headers['auth'];
       const message = '缺少凭证,请重新登录!';
-      let deviceid = localStorage.getItem('deviceid');
-      if (router.currentRoute.value.path == '/gesture' || (deviceid && router.currentRoute.value.path != '/login/qrcode')) {
-        router.push('/login/qrcode');
-      } else if (router.currentRoute.value.path == '/sunshineRun') {
-        router.push('/login/sunshineRun');
-      } else {
-        router.push('/login');
-      }
-      //清空缓存
-      // localStorage.clear();
-      localStorage.removeItem('token');
-      localStorage.removeItem('userInfo');
+      jumpTo();
       ElMessage({ message: message, type: 'error', duration: 5 * 1000 });
       return Promise.reject(message);
     }
@@ -67,21 +73,11 @@ service.interceptors.response.use(
     const status = res.data.status;
     const message = res.data.message;
     if (code === 401) {
-      let deviceid = localStorage.getItem('deviceid');
-      if (router.currentRoute.value.path == '/gesture' || (deviceid && router.currentRoute.value.path != '/login/qrcode')) {
-        router.push('/login/qrcode');
-      } else if (router.currentRoute.value.path == '/sunshineRun') {
-        router.push('/login/sunshineRun');
-      } else {
-        router.push('/login');
-      }
-      //清空缓存
-      // localStorage.clear();
-      localStorage.removeItem('token');
-      localStorage.removeItem('userInfo');
+      jumpTo();
       ElMessage({ message: message, type: 'error', duration: 5 * 1000 });
       return Promise.reject('凭证已过期,请重新登录!');
     } else if (status == 500) {
+      ElMessage({ message: message, type: 'error', duration: 5 * 1000 });
       return Promise.reject(message);
     } else {
       return Promise.resolve(res.data);
@@ -94,23 +90,7 @@ service.interceptors.response.use(
     } else if (message.includes('timeout')) {
       message = '请求超时';
     } else if (response.status == 401) {
-      //清空缓存
-      // localStorage.clear();
-      localStorage.removeItem('token');
-      localStorage.removeItem('userInfo');
-      let deviceid = localStorage.getItem('deviceid');
-      if (deviceid && router.currentRoute.value.path != '/login/qrcode') {
-        router.push('/login/qrcode');
-      }
-      if (deviceid == undefined && router.currentRoute.value.path != '/login' && router.currentRoute.value.path != '/sunshineRun') {
-        router.push('/login');
-      }
-      if (deviceid == undefined && router.currentRoute.value.path == '/gesture') {
-        router.push('/login/qrcode');
-      }
-      if (deviceid == undefined && router.currentRoute.value.path == '/sunshineRun') {
-        router.push('/login/sunshineRun');
-      }
+      jumpTo();
       ElMessage({ message: '请重新登录', type: 'error', duration: 5 * 1000 });
       return Promise.reject('凭证已过期,请重新登录!');
     } else if (message.includes('Request failed with status code')) {

+ 1 - 0
src/views/gesture/index.vue

@@ -268,6 +268,7 @@ const getErweima = () => {
 };
 
 onBeforeMount(() => {
+  localStorage.setItem('loginType', "2");
   //加载设备WS
   handWs((e: any) => {
     if (router.currentRoute.value.path != '/gesture') {

+ 3 - 1
src/views/home/index.vue

@@ -112,7 +112,9 @@ const getJump = (url: string, name: string) => {
     router.push({ path: url });
   }
 };
-
+onBeforeMount(() => {
+  localStorage.setItem('loginType', "1");
+});
 onMounted(() => {
   //停止播报;
   speckCancel();

+ 10 - 6
src/views/login/index.vue

@@ -33,9 +33,9 @@
 <script setup name="Login" lang="ts">
 import CryptoJS from 'crypto-js';
 import useAppStore from '@/store/modules/app';
-
 const { proxy } = getCurrentInstance() as any;
 const router = useRouter();
+const route = useRoute();
 
 interface DataType {
   loginForm: {
@@ -80,6 +80,7 @@ const getLogin = () => {
       //保存token
       let token = res.access_token;
       let passwordStr = CryptoJS.AES.encrypt(password, 'trops').toString();
+      localStorage.setItem('loginType', "1");
       localStorage.setItem("token", token);
       localStorage.setItem('username', username);
       localStorage.setItem('password', passwordStr);
@@ -123,7 +124,7 @@ onMounted(() => {
   // }
   let deviceid = localStorage.getItem('deviceid');
   let username = localStorage.getItem('username');
-  // let password = localStorage.getItem('password');
+  let password = localStorage.getItem('password');
   if (deviceid) {
     loginForm.value.deviceid = deviceid;
   }
@@ -131,10 +132,13 @@ onMounted(() => {
     loginForm.value.username = username;
   }
   localStorage.removeItem('ip');
-  // if (password) {
-  //   let myPassword = CryptoJS.AES.decrypt(password, 'trops').toString(CryptoJS.enc.Utf8);
-  //   loginForm.value.password = myPassword;
-  // }
+  if (password) {
+    let myPassword = CryptoJS.AES.decrypt(password, 'trops').toString(CryptoJS.enc.Utf8);
+    loginForm.value.password = myPassword;
+  }
+  if(route.query?.auto){
+    getLogin();
+  }
 })
 </script>
 

+ 10 - 7
src/views/login/qrcode.vue

@@ -148,6 +148,7 @@ const getLogin = () => {
         //保存token
         let token = res.access_token;
         let passwordStr = CryptoJS.AES.encrypt(password, 'trops').toString();
+        localStorage.setItem('loginType', "2");
         localStorage.setItem('token', token);
         if (deviceid) {
           localStorage.setItem('deviceid', deviceid);
@@ -191,20 +192,22 @@ onMounted(() => {
   let token = localStorage.getItem('token');
   let deviceid = localStorage.getItem('deviceid');
   let username = localStorage.getItem('username');
-  // let password = localStorage.getItem('password');
+  let password = localStorage.getItem('password');
   if (deviceid) {
     loginForm.value.deviceid = deviceid;
   }
   if (username) {
     loginForm.value.username = username;
   }
-  // if (password) {
-  //   let myPassword = CryptoJS.AES.decrypt(password, 'trops').toString(CryptoJS.enc.Utf8);
-  //   loginForm.value.password = myPassword;
-  // }
+  if (password) {
+    let myPassword = CryptoJS.AES.decrypt(password, 'trops').toString(CryptoJS.enc.Utf8);
+    loginForm.value.password = myPassword;
+  }
   localStorage.removeItem('ip');
-  if (token && deviceid) {
-    //跳转
+  if (route.query?.auto) {
+    type.value = 2;
+    getLogin();
+  } else if (token && deviceid) {
     router.push({ path: '/gesture' });
   } else {
     getHandWs();

+ 5 - 0
src/views/login/sunshineRun.vue

@@ -35,6 +35,7 @@ import CryptoJS from 'crypto-js';
 import useAppStore from '@/store/modules/app';
 const { proxy } = getCurrentInstance() as any;
 const router = useRouter();
+const route = useRoute();
 
 interface DataType {
   loginForm: {
@@ -77,6 +78,7 @@ const getLogin = () => {
       //保存token
       let token = res.access_token;
       let passwordStr = CryptoJS.AES.encrypt(password, 'trops').toString(); 
+      localStorage.setItem('loginType', "3");
       localStorage.setItem("token", token);
       localStorage.setItem('username', username);
       localStorage.setItem('password', passwordStr);
@@ -127,6 +129,9 @@ onMounted(() => {
   if (ip) {
     loginForm.value.ip = ip;
   }
+  if(route.query?.auto){
+    getLogin();
+  }
 })
 </script>
 

+ 1 - 0
src/views/sunshineRun/index.vue

@@ -301,6 +301,7 @@ const openRanking = () => {
 };
 
 onBeforeMount(() => {
+  localStorage.setItem('loginType', "3");
   //获取当前时间
   setDate();
   //用户信息