From 29f8fb905eb0464a41ac644568c7d0dd7bfd6a7e Mon Sep 17 00:00:00 2001 From: 梁保满 Date: Thu, 1 Dec 2022 11:54:31 +0800 Subject: [PATCH] 刷新浏览器重新动态添加路由 --- src/api/apis/login.js | 6 +----- src/router/permission.js | 289 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------- src/store/index.js | 72 ++++++++++++++++++++++++++++++++++++++++++++++++------------------------ 3 files changed, 324 insertions(+), 43 deletions(-) diff --git a/src/api/apis/login.js b/src/api/apis/login.js index 1956ac0..930141b 100644 --- a/src/api/apis/login.js +++ b/src/api/apis/login.js @@ -5,10 +5,6 @@ import loginUrls from "../urls/login" export default { // 账号密码登陆 fetchLogin (data) { - // return axios.post(loginUrls.login, data) - return { - status:200, - data:[] - } + return axios.post(loginUrls.login, data) } } diff --git a/src/router/permission.js b/src/router/permission.js index e898dec..592b68a 100644 --- a/src/router/permission.js +++ b/src/router/permission.js @@ -1,7 +1,255 @@ 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 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: "/dataSync", + iconCls: "fa fa-random", // 图标样式class + name: "数据同步", + component: Layout, + alone: true, + children: [ + { + path: "/dataSync", + iconCls: "fa fa-random", // 图标样式class + name: "", + component: DataSync, + children: [] + } + ] + }, + { + path: "/", + iconCls: "fa fa-cog", + name: '信息管理', + component: Layout, + children: [ + { + path: "/setUpAccount", + iconCls: "fa fa-id-card-o", + name: '账号管理', + component: SetUpAccount, + children: [] + }, + { + path: "/setUpConglomerate", + iconCls: "fa fa-building", + name: '集团管理', + component: SetUpConglomerate, + 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: "/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: "*", + redirect: "/404", + hidden: true, + children: [] + } +] + // 获取角色信息,根据用户权限动态加载路由 router.beforeEach((to, from, next) => { @@ -10,20 +258,33 @@ router.beforeEach((to, from, next) => { if (to.path === "/login") { next() } else { - // if (!store.getters.info.permissions) { - // 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 - // } + 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 + // await router.addRoutes(newAddRouters) + newAddRouters.forEach(res => { + router.addRoute(res) + }) + next({ path: to.path }) + }()) + } else { next() - // } + } } } else { if (to.path === "/login") { diff --git a/src/store/index.js b/src/store/index.js index 6d85e79..70126cd 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -285,31 +285,55 @@ const store = new Vuex.Store({ }, actions: { Login({ commit }, that) { - console.log(that.$router) - debugger // request.fetchLogin(that.loginForm).then(res => { - // if (res.status == 200) { - commit("setToken", "xxxx") - commit("setInfo", { - permissions: [ - { - role: "superAdmin", - roleName: "超级管理员", - }, - ], - name: "张老师", - // avatar: data.avatar ? data.avatar : "", - // uid: data.id, - // authorityRouter:[], - }); - commit("setRouters", addrouters) - // let newAddRouters = getters.addRouters; - // await router.addRoutes(newAddRouters) - addrouters.forEach((res) => { - that.$router.addRoute(res); - }); - that.$router.push({ path: "/" }) - // } + // if (res.status == 200) { + commit("setToken", "xxxx") + commit("setInfo", { + permissions: [ + { + role: "superAdmin", + roleName: "超级管理员", + }, + ], + name: "张老师", + // avatar: data.avatar ? data.avatar : "", + // uid: data.id, + // authorityRouter:[], + }); + commit("setRouters", addrouters) + // let newAddRouters = getters.addRouters; + // await router.addRoutes(newAddRouters) + addrouters.forEach((res) => { + that.$router.addRoute(res); + }); + that.$router.push({ path: "/" }) + // } + // }) + }, + permissions({ commit }, that) { + // request.fetchLogin(that.loginForm).then(res => { + // if (res.status == 200) { + commit("setToken", "xxxx") + commit("setInfo", { + permissions: [ + { + role: "superAdmin", + roleName: "超级管理员", + }, + ], + name: "李老师", + // avatar: data.avatar ? data.avatar : "", + // uid: data.id, + // authorityRouter:[], + }); + commit("setRouters", addrouters) + // let newAddRouters = getters.addRouters; + // await router.addRoutes(newAddRouters) + addrouters.forEach((res) => { + that.$router.addRoute(res); + }); + that.$router.push({ path: "/" }) + // } // }) } }, -- libgit2 0.21.4