Pārlūkot izejas kodu

添加redirect,调整整体页面样式,撑开

lrf 11 mēneši atpakaļ
vecāks
revīzija
870fb310c7
3 mainītis faili ar 91 papildinājumiem un 37 dzēšanām
  1. 7 0
      index.html
  2. 0 3
      src/App.vue
  3. 84 34
      src/router/guard.js

+ 7 - 0
index.html

@@ -12,6 +12,13 @@
   </body>
 </html>
 <style>
+  body {
+    margin: 0;
+  }
+  #app {
+    height: 100vh;
+    width: 100vw;
+  }
 </style>
 </body>
 </html>

+ 0 - 3
src/App.vue

@@ -11,9 +11,6 @@ const appStore = useAppStore()
 </template>
 
 <style lang="scss">
-body {
-  margin: 0;
-}
 .w_1200 {
   // width: 1200px;
   margin: 0 auto;

+ 84 - 34
src/router/guard.js

@@ -1,6 +1,6 @@
 import { AxiosWrapper } from '@/utils/axios-wrapper'
 import { UserStore } from '@/store/user'
-import { cloneDeep, isArray, omit } from 'lodash-es'
+import { cloneDeep, get, isArray, omit } from 'lodash-es'
 import NProgress from 'nprogress'
 import 'nprogress/nprogress.css'
 import { ElMessageBox } from 'element-plus'
@@ -73,7 +73,7 @@ const routesRegister = (menus, defaultRoutes, router) => {
   for (const route of menus) {
     const { type, route_name, path, component, parent_id } = route
     if (!path) {
-      console.log(route)
+      // console.log(route)
     }
     // 检查路由是否已存在,存在跳过
     const hasRoute = defaultRoutes.find((f) => f.path === path)
@@ -127,6 +127,8 @@ const resetMenus = (menus) => {
   return result
 }
 
+const dontRedirectList = ['/login', '/', '/401', '/404']
+
 // 注册前置守卫
 export const registerBeforeRouter = async (router) => {
   router.beforeEach(async (to, from, next) => {
@@ -141,43 +143,91 @@ export const registerBeforeRouter = async (router) => {
       NProgress.inc()
       if (to.path === '/login') next()
       NProgress.inc()
-      const { menus, errcode, errmsg } = await getUserMeta(token)
-      // 登录信息有问题
-      if (errcode !== 0) {
-        if (errcode.includes('FRAMEERROR_401')) {
-          await ElMessageBox.alert(errmsg, i18n.global.t('common.user_confirm'), {
-            confirmButtonText: i18n.global.t('common.re_login'),
-            type: 'error',
-          })
-          next('/login')
+      try {
+        const { menus, errcode, errmsg } = await getUserMeta(token)
+        // 登录信息有问题
+        if (errcode !== 0) {
+          if (errcode.includes('FRAMEERROR_401')) {
+            await ElMessageBox.alert(errmsg, i18n.global.t('common.user_confirm'), {
+              confirmButtonText: i18n.global.t('common.re_login'),
+              type: 'error'
+            })
+            const fp = from.path
+            const noneed = dontRedirectList.includes(fp)
+            if (noneed) next('/login')
+            else next(`/login?redirect=${from.fullPath}`)
+            return
+          } else {
+            await ElMessageBox.alert(errmsg, i18n.global.t('common.user_confirm'), {
+              confirmButtonText: i18n.global.t('common.re_login'),
+              type: 'error'
+            })
+            // location.reload()
+            const fp = from.path
+            const noneed = dontRedirectList.includes(fp)
+            if (noneed) next('/login')
+            else next(`/login?redirect=${from.fullPath}`)
+          }
+        }
+        // 菜单格式不正确
+        if (!menus) {
+          next('/401')
           return
-        } else {
-          await ElMessageBox.alert(errmsg, i18n.global.t('common.user_confirm'), {
-            confirmButtonText: i18n.global.t('common.re_login'),
-            type: 'error'
-          })
-          location.reload()
         }
-      }
-      // 菜单格式不正确
-      if (!menus) {
-        next('/401')
-        return
-      }
-      // 检查目的地路由是否注册
-      const hasRoute = hasNecessaryRoute(to, router)
-      NProgress.inc()
-      if (hasRoute || to.meta.hidden) {
-        // 注册了直接进入
-        next()
-      } else {
-        // 没注册就先注册再重定向进入直到进入为止
-        await addUserRoutes(menus, router)
+        // 检查目的地路由是否注册
+        const hasRoute = hasNecessaryRoute(to, router)
         NProgress.inc()
-        next({ ...to, replace: true })
+        // console.log(`hasRoute`)
+        // console.log(hasRoute)
+        // const t = router.getRoutes()
+        // console.log(`t`)
+        // console.log(JSON.parse(JSON.stringify(t)))
+        if (hasRoute || to.meta.hidden) {
+          // 注册了直接进入
+          // console.log(`if: to.path`)
+          if (get(from, 'query.redirect')) {
+            const redirect = get(from, 'query.redirect')
+            from.query = {}
+            next(redirect)
+            return
+          } else {
+            next()
+            return
+          }
+        } else {
+          // 没注册就先注册再重定向进入直到进入为止
+          await addUserRoutes(menus, router)
+          NProgress.inc()
+          // const t2 = router.getRoutes()
+          // console.log(`t2`)
+          // console.log(JSON.parse(JSON.stringify(t2)))
+          // const t3 = hasNecessaryRoute(to, router)
+          // console.log('t3')
+          // console.log(JSON.parse(JSON.stringify(t3)))
+          // console.log('to')
+          // console.log(JSON.parse(JSON.stringify(to)))
+          // console.log(`else: to.path`)
+          if (get(from, 'query.redirect')) {
+            const redirect = get(from, 'query.redirect')
+            from.query = {}
+            next(redirect)
+          } else {
+            await next(to)
+          }
+
+          // next({ ...to, replace: true })
+        }
+      } catch (error) {
+        const fp = from.path
+        const noneed = dontRedirectList.includes(fp)
+        if (noneed) next('/login')
+        else next(`/login?redirect=${from.fullPath}`)
       }
     } else {
-      next('/login')
+      const fp = from.path
+      const noneed = dontRedirectList.includes(fp)
+      if (noneed) next('/login')
+      else next(`/login?redirect=${from.fullPath}`)
     }
   })
 }