permission.js 9.32 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 ExaminationPaper = () => import("@/views/examinationPaper/index")
const ExaminationPaperAdd = () => import("@/views/examinationPaper/add")
const ExaminationPaperEdit = () => import("@/views/examinationPaper/edit")
const ExaminationPaperRecycle = () => import("@/views/examinationPaper/recycle")
const Ask = () => import("@/views/ask/index")
const AskAnalysis = () => import("@/views/ask/analysis")
const Test = () => import("@/views/test/index")
const TestAnalysis = () => import("@/views/test/analysis")
const DataSync = () => import("@/views/dataSync/index")
const Portrait = () => import("@/views/portrait/index")
const Card = () => import("@/views/card/index")
const Analysis = () => import("@/views/analysis/index")
const Device = () => import("@/views/device/index")
const Down = () => import("@/views/down/index")
const DownClient = () => import("@/views/down/client")
const SetUpAccount = () => import("@/views/setUp/account")
const SetUpConglomerate = () => import("@/views/setUp/conglomerate")
const SetUpSchool = () => import("@/views/setUp/school")
const SetUpStudent = () => import("@/views/setUp/student")
const SetUpTeacher = () => import("@/views/setUp/teacher")
let addrouters = [  //测试用,后续后端获取
  {
    path: "/examinationPaper",
    iconCls: "fa fa-file-text", // 图标样式class
    name: "备题组卷",
    component: Layout,
    alone: true,
    children: [
      {
        path: "/examinationPaper",
        iconCls: "fa fa-file-text", // 图标样式class
        name: "",
        component: ExaminationPaper,
        children: []
      },
      {
        path: "/examinationPaperAdd",
        iconCls: "", // 图标样式class
        name: "添加答题卡",
        component: ExaminationPaperAdd,
        children: []
      },
      {
        path: "/examinationPaperEdit",
        iconCls: "", // 图标样式class
        name: "修改答题卡",
        component: ExaminationPaperEdit,
        children: []
      },
      {
        path: "/examinationPaperRecycle",
        iconCls: "", // 图标样式class
        name: "已归档答题卡",
        component: ExaminationPaperRecycle,
        children: []
      },
    ]
  },
  {
    path: "/ask",
    iconCls: "fa fa-bar-chart", // 图标样式class
    name: "随堂问报表",
    component: Layout,
    alone: true,
    children: [
      {
        path: "/ask",
        iconCls: "fa fa-bar-chart", // 图标样式class
        name: "",
        component: Ask,
        children: []

      },
      {
        path: "/askAnalysis",
        iconCls: "", // 图标样式class
        name: "随堂问报表分析",
        component: AskAnalysis,
        children: []
      }
    ]
  },
  {
    path: "/test",
    iconCls: "fa fa-pie-chart", // 图标样式class
    name: "即时测报表",
    component: Layout,
    alone: true,
    children: [
      {
        path: "/test",
        iconCls: "fa fa-pie-chart", // 图标样式class
        name: "",
        component: Test,
        children: []
      },
      {
        path: "/testAnalysis",
        iconCls: "", // 图标样式class
        name: "即时测报表分析",
        component: TestAnalysis,
        children: []
      }

    ]
  },
  {
    path: "/portrait",
    iconCls: "fa fa-users", // 图标样式class
    name: "学生画像",
    component: Layout,
    alone: true,
    children: [
      {
        path: "/portrait",
        iconCls: "fa fa-users", // 图标样式class
        name: "",
        component: Portrait,
        children: []
      }
    ]
  },
  
  {
    path: "/setUpConglomerate",
    iconCls: "fa fa-building", // 图标样式class
    name: "学校管理",
    component: Layout,
    alone: true,
    children: [
      {
        path: "/setUpConglomerate",
        iconCls: "fa fa-building",
        name: '集团管理',
        component: SetUpConglomerate,
        children: []
      },
    ]
  },
  {
    path: "/setUpAccount",
    iconCls: "fa fa-id-card-o", // 图标样式class
    name: "账号管理",
    component: Layout,
    alone: true,
    children: [
      {
        path: "/setUpAccount",
        iconCls: "fa fa-id-card-o",
        name: '',
        component: SetUpAccount,
        children: []
      },
    ]
  },
  {
    path: "/",
    iconCls: "fa fa-cog",
    name: '学校管理',
    component: Layout,
    children: [
      {
        path: "/setUpSchool",
        iconCls: "fa fa-calculator",
        name: '学校管理',
        component: SetUpSchool,
        children: []
      },
      {
        path: "/setUpTeacher",
        iconCls: "fa fa-male",
        name: '教师管理',
        component: SetUpTeacher,
        children: []
      },
      {
        path: "/setUpStudent",
        iconCls: "fa fa-mortar-board",
        name: '学生管理',
        component: SetUpStudent,
        children: []
      },
    ]
  },
  {
    path: "/card",
    iconCls: "fa fa-id-card", // 图标样式class
    name: "发卡记录",
    component: Layout,
    alone: true,
    children: [
      {
        path: "/card",
        iconCls: "fa fa-id-card", // 图标样式class
        name: "",
        component: Card,
        children: []
      }
    ]
  },
  {
    path: "/device",
    iconCls: "fa fa-dashboard", // 图标样式class
    name: "设备状态",
    component: Layout,
    alone: true,
    children: [
      {
        path: "/device",
        iconCls: "fa fa-dashboard", // 图标样式class
        name: "",
        component: Device,
        children: []
      }
    ]
  },
  {
    path: "/analysis",
    iconCls: "fa fa-area-chart", // 图标样式class
    name: "使用分析",
    component: Layout,
    alone: true,
    children: [
      {
        path: "/analysis",
        iconCls: "fa fa-area-chart", // 图标样式class
        name: "",
        component: Analysis,
        children: []
      }
    ]
  },
  {
    path: "/down",
    iconCls: "fa fa-download", // 图标样式class
    name: "软件下载",
    component: Layout,
    alone: true,
    children: [
      {
        path: "/down",
        iconCls: "fa fa-download", // 图标样式class
        name: "",
        component: Down,
        children: []
      },
      {
        path: "/downClient",
        iconCls: "", // 图标样式class
        name: "",
        component: DownClient,
        children: []
      }
    ]
  },
  {
    path: "/dataSync",
    iconCls: "fa fa-random", // 图标样式class
    name: "数据同步",
    component: Layout,
    alone: true,
    children: [
      {
        path: "/dataSync",
        iconCls: "fa fa-random", // 图标样式class
        name: "",
        component: DataSync,
        children: []
      }
    ]
  },
  {
    path: "*",
    redirect: "/404",
    hidden: true,
    children: []
  }
]


//  获取角色信息,根据用户权限动态加载路由
router.beforeEach((to, from, next) => {
  NProgress.start()
  if (store.getters.token) {
    if (to.path === "/login") {
      next()
    } else {
      if (!store.getters.info.permissions) {
        !(async function getAddRouters() {
          // 省略 axios 请求代码 通过 token 向后台请求用户权限等信息,这里用假数据赋值
          await store.commit("setInfo", {
            permissions: [
              {
                role: "superAdmin",
                roleName: "超级管理员"
              }
            ],
            name: "李老师",
            // avatar: data.avatar ? data.avatar : "",
            // uid: data.id,
            // authorityRouter:[],

          })
          await store.commit("setRouters", addrouters)
          let newAddRouters = store.getters.addRouters
          newAddRouters.forEach(res => {
            router.addRoute(res)
          })
          next({ path: to.path })
        }())
      } else {
        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"})
//   }
// })