permission.js 3.69 KB
import NProgress from "nprogress"
import en from "../i18n/lang/en"
import Layout from "@/views/layout/layout"
import CommerViews from "@/views/commerViews"
import router from "./index"
import store from "../store"
let routeName = en.routeName

const Erji = () => import("@/views/duoji/erji")
const Sanji = () => import("@/views/duoji/sanji")
 let addrouters = [  //测试用,后续后端获取

  {
    path: "/",
    iconCls: "fa fa-server",
    // name: routeName.multiDirectory,
    name: '多级',
    component: Layout,
    children: [
      {
        path: "/erji1",
        iconCls: "fa fa-server",
        // name: routeName["menu2-1"],
        name: '二级',
        component: Erji,
        meta:{
          role:['admin']
        },
        children: []
      },
      {
        path: "/erji3",
        iconCls: "fa fa-server",
        name: "三级",
        component: CommerViews, // 无限极菜单的容器
        children: [
          {
            path: "/sanji1",
            iconCls: "fa fa-server",
            name: "三级子页面",
            component: Sanji,
            children: []
          },
        ]
      }
    ]
  },

  { path: "*",
    redirect: "/404",
    hidden: true,
    children: []
  }
]


//  获取角色信息,根据用户权限动态加载路由
router.beforeEach((to, from, next) => {
  NProgress.start()
  if (store.getters.token) {
    if (to.path === "/login") {
      next({path: "/"})
    } else {
      if (!store.getters.info.role) {
        !(async function getAddRouters () {
          // 省略 axios 请求代码 通过 token 向后台请求用户权限等信息,这里用假数据赋值
          await store.dispatch("setInfo", {
            role: "superAdmin",
            permissions: "超级管理员",
            name:"张老师",
          })
          await store.dispatch("newRoutes",addrouters)
          let newAddRouters = store.getters.addRouters
          await router.addRoutes(newAddRouters)
          next({path: to.path})
        }())
      } else {
        let is404 = to.matched.some(record => {
          if (record.meta.role) {
            return store.getters.info.authorityRouter === -1
          }
        })
        if (is404) {
          next({path: "/404"})
          return false
        }
        next()
      }
    }
  } else {
    if (to.path === "/login") {
      next()
    }
    next({path: "/login"})
  }
})

router.afterEach(() => {
  NProgress.done()
})


// //  真实使用 
// import fetchUser from "@/api/apis/user"
//
// router.beforeEach((to, from, next) => {
//   if (store.getters.token && store.getters.token !== "undefined") {
//     // store.dispatch('setToken', store.getters.token)
//     if (to.path === "/login") {
//       next({path: "/"})
//     } else {
//       if (!store.getters.info) {
//         (async function getAddRouters () {
//           fetchUser.fetchGetUserInfo().then(async function (response) {
//             await store.dispatch("setInfo", response.data)
            // await store.dispatch("newRoutes", store.getters.info.authorityRouter)
//             await router.addRoutes(store.getters.addRouters)
//             next({path: "/index"})
//           }).catch(function (error) {
//             console.log(error)
//           })
//         }())
//       } else {
//         let is404 = to.matched.some(record => {
//           console.log(record)
//           if (record.meta.role) {
//             return store.getters.info.authorityRouter === -1
//           }
//         })
//         if (is404) {
//           next({path: "/404"})
//           return false
//         }
//         next()
//       }
//     }
//   } else {
//     if (to.path === "/login") {
//       next()
//     }
//     next({path: "/login"})
//   }
// })