Commit 29f8fb905eb0464a41ac644568c7d0dd7bfd6a7e
1 parent
4c4f7640
刷新浏览器重新动态添加路由
Showing
3 changed files
with
324 additions
and
43 deletions
src/api/apis/login.js
src/router/permission.js
| 1 | 1 | import NProgress from "nprogress" |
| 2 | - | |
| 2 | +import en from "../i18n/lang/en" | |
| 3 | +import Layout from "@/views/layout/layout" | |
| 4 | +import CommerViews from "@/views/commerViews" | |
| 3 | 5 | import router from "./index" |
| 4 | 6 | import store from "../store" |
| 7 | +// let routeName = en.routeName | |
| 8 | + | |
| 9 | +const ExaminationPaper = () => import("@/views/examinationPaper/index") | |
| 10 | +const ExaminationPaperAdd = () => import("@/views/examinationPaper/add") | |
| 11 | +const ExaminationPaperEdit = () => import("@/views/examinationPaper/edit") | |
| 12 | +const ExaminationPaperRecycle = () => import("@/views/examinationPaper/recycle") | |
| 13 | +const Ask = () => import("@/views/ask/index") | |
| 14 | +const AskAnalysis = () => import("@/views/ask/analysis") | |
| 15 | +const Test = () => import("@/views/test/index") | |
| 16 | +const TestAnalysis = () => import("@/views/test/analysis") | |
| 17 | +const DataSync = () => import("@/views/dataSync/index") | |
| 18 | +const Portrait = () => import("@/views/portrait/index") | |
| 19 | +const Card = () => import("@/views/card/index") | |
| 20 | +const Device = () => import("@/views/device/index") | |
| 21 | +const Down = () => import("@/views/down/index") | |
| 22 | +const DownClient = () => import("@/views/down/client") | |
| 23 | +const SetUpAccount = () => import("@/views/setUp/account") | |
| 24 | +const SetUpConglomerate = () => import("@/views/setUp/conglomerate") | |
| 25 | +const SetUpSchool = () => import("@/views/setUp/school") | |
| 26 | +const SetUpStudent = () => import("@/views/setUp/student") | |
| 27 | +const SetUpTeacher = () => import("@/views/setUp/teacher") | |
| 28 | +let addrouters = [ //测试用,后续后端获取 | |
| 29 | + { | |
| 30 | + path: "/examinationPaper", | |
| 31 | + iconCls: "fa fa-file-text", // 图标样式class | |
| 32 | + name: "备题组卷", | |
| 33 | + component: Layout, | |
| 34 | + alone: true, | |
| 35 | + children: [ | |
| 36 | + { | |
| 37 | + path: "/examinationPaper", | |
| 38 | + iconCls: "fa fa-file-text", // 图标样式class | |
| 39 | + name: "", | |
| 40 | + component: ExaminationPaper, | |
| 41 | + children: [] | |
| 42 | + }, | |
| 43 | + { | |
| 44 | + path: "/examinationPaperAdd", | |
| 45 | + iconCls: "", // 图标样式class | |
| 46 | + name: "添加答题卡", | |
| 47 | + component: ExaminationPaperAdd, | |
| 48 | + children: [] | |
| 49 | + }, | |
| 50 | + { | |
| 51 | + path: "/examinationPaperEdit", | |
| 52 | + iconCls: "", // 图标样式class | |
| 53 | + name: "修改答题卡", | |
| 54 | + component: ExaminationPaperEdit, | |
| 55 | + children: [] | |
| 56 | + }, | |
| 57 | + { | |
| 58 | + path: "/examinationPaperRecycle", | |
| 59 | + iconCls: "", // 图标样式class | |
| 60 | + name: "已归档答题卡", | |
| 61 | + component: ExaminationPaperRecycle, | |
| 62 | + children: [] | |
| 63 | + }, | |
| 64 | + ] | |
| 65 | + }, | |
| 66 | + { | |
| 67 | + path: "/ask", | |
| 68 | + iconCls: "fa fa-bar-chart", // 图标样式class | |
| 69 | + name: "随堂问报表", | |
| 70 | + component: Layout, | |
| 71 | + alone: true, | |
| 72 | + children: [ | |
| 73 | + { | |
| 74 | + path: "/ask", | |
| 75 | + iconCls: "fa fa-bar-chart", // 图标样式class | |
| 76 | + name: "", | |
| 77 | + component: Ask, | |
| 78 | + children: [] | |
| 79 | + | |
| 80 | + }, | |
| 81 | + { | |
| 82 | + path: "/askAnalysis", | |
| 83 | + iconCls: "", // 图标样式class | |
| 84 | + name: "随堂问报表分析", | |
| 85 | + component: AskAnalysis, | |
| 86 | + children: [] | |
| 87 | + } | |
| 88 | + ] | |
| 89 | + }, | |
| 90 | + { | |
| 91 | + path: "/test", | |
| 92 | + iconCls: "fa fa-pie-chart", // 图标样式class | |
| 93 | + name: "即时测报表", | |
| 94 | + component: Layout, | |
| 95 | + alone: true, | |
| 96 | + children: [ | |
| 97 | + { | |
| 98 | + path: "/test", | |
| 99 | + iconCls: "fa fa-pie-chart", // 图标样式class | |
| 100 | + name: "", | |
| 101 | + component: Test, | |
| 102 | + children: [] | |
| 103 | + }, | |
| 104 | + { | |
| 105 | + path: "/testAnalysis", | |
| 106 | + iconCls: "", // 图标样式class | |
| 107 | + name: "即时测报表分析", | |
| 108 | + component: TestAnalysis, | |
| 109 | + children: [] | |
| 110 | + } | |
| 111 | + | |
| 112 | + ] | |
| 113 | + }, | |
| 114 | + { | |
| 115 | + path: "/portrait", | |
| 116 | + iconCls: "fa fa-users", // 图标样式class | |
| 117 | + name: "学生画像", | |
| 118 | + component: Layout, | |
| 119 | + alone: true, | |
| 120 | + children: [ | |
| 121 | + { | |
| 122 | + path: "/portrait", | |
| 123 | + iconCls: "fa fa-users", // 图标样式class | |
| 124 | + name: "", | |
| 125 | + component: Portrait, | |
| 126 | + children: [] | |
| 127 | + } | |
| 128 | + ] | |
| 129 | + }, | |
| 130 | + { | |
| 131 | + path: "/dataSync", | |
| 132 | + iconCls: "fa fa-random", // 图标样式class | |
| 133 | + name: "数据同步", | |
| 134 | + component: Layout, | |
| 135 | + alone: true, | |
| 136 | + children: [ | |
| 137 | + { | |
| 138 | + path: "/dataSync", | |
| 139 | + iconCls: "fa fa-random", // 图标样式class | |
| 140 | + name: "", | |
| 141 | + component: DataSync, | |
| 142 | + children: [] | |
| 143 | + } | |
| 144 | + ] | |
| 145 | + }, | |
| 146 | + { | |
| 147 | + path: "/", | |
| 148 | + iconCls: "fa fa-cog", | |
| 149 | + name: '信息管理', | |
| 150 | + component: Layout, | |
| 151 | + children: [ | |
| 152 | + { | |
| 153 | + path: "/setUpAccount", | |
| 154 | + iconCls: "fa fa-id-card-o", | |
| 155 | + name: '账号管理', | |
| 156 | + component: SetUpAccount, | |
| 157 | + children: [] | |
| 158 | + }, | |
| 159 | + { | |
| 160 | + path: "/setUpConglomerate", | |
| 161 | + iconCls: "fa fa-building", | |
| 162 | + name: '集团管理', | |
| 163 | + component: SetUpConglomerate, | |
| 164 | + children: [] | |
| 165 | + }, | |
| 166 | + { | |
| 167 | + path: "/setUpSchool", | |
| 168 | + iconCls: "fa fa-calculator", | |
| 169 | + name: '学校管理', | |
| 170 | + component: SetUpSchool, | |
| 171 | + children: [] | |
| 172 | + }, | |
| 173 | + { | |
| 174 | + path: "/setUpTeacher", | |
| 175 | + iconCls: "fa fa-male", | |
| 176 | + name: '教师管理', | |
| 177 | + component: SetUpTeacher, | |
| 178 | + children: [] | |
| 179 | + }, | |
| 180 | + { | |
| 181 | + path: "/setUpStudent", | |
| 182 | + iconCls: "fa fa-mortar-board", | |
| 183 | + name: '学生管理', | |
| 184 | + component: SetUpStudent, | |
| 185 | + children: [] | |
| 186 | + }, | |
| 187 | + ] | |
| 188 | + }, | |
| 189 | + { | |
| 190 | + path: "/card", | |
| 191 | + iconCls: "fa fa-id-card", // 图标样式class | |
| 192 | + name: "发卡记录", | |
| 193 | + component: Layout, | |
| 194 | + alone: true, | |
| 195 | + children: [ | |
| 196 | + { | |
| 197 | + path: "/card", | |
| 198 | + iconCls: "fa fa-id-card", // 图标样式class | |
| 199 | + name: "", | |
| 200 | + component: Card, | |
| 201 | + children: [] | |
| 202 | + } | |
| 203 | + ] | |
| 204 | + }, | |
| 205 | + { | |
| 206 | + path: "/device", | |
| 207 | + iconCls: "fa fa-dashboard", // 图标样式class | |
| 208 | + name: "设备状态", | |
| 209 | + component: Layout, | |
| 210 | + alone: true, | |
| 211 | + children: [ | |
| 212 | + { | |
| 213 | + path: "/device", | |
| 214 | + iconCls: "fa fa-dashboard", // 图标样式class | |
| 215 | + name: "", | |
| 216 | + component: Device, | |
| 217 | + children: [] | |
| 218 | + } | |
| 219 | + ] | |
| 220 | + }, | |
| 221 | + { | |
| 222 | + path: "/down", | |
| 223 | + iconCls: "fa fa-download", // 图标样式class | |
| 224 | + name: "软件下载", | |
| 225 | + component: Layout, | |
| 226 | + alone: true, | |
| 227 | + children: [ | |
| 228 | + { | |
| 229 | + path: "/down", | |
| 230 | + iconCls: "fa fa-download", // 图标样式class | |
| 231 | + name: "", | |
| 232 | + component: Down, | |
| 233 | + children: [] | |
| 234 | + }, | |
| 235 | + { | |
| 236 | + path: "/downClient", | |
| 237 | + iconCls: "", // 图标样式class | |
| 238 | + name: "", | |
| 239 | + component: DownClient, | |
| 240 | + children: [] | |
| 241 | + } | |
| 242 | + ] | |
| 243 | + }, | |
| 244 | + | |
| 245 | + { | |
| 246 | + path: "*", | |
| 247 | + redirect: "/404", | |
| 248 | + hidden: true, | |
| 249 | + children: [] | |
| 250 | + } | |
| 251 | +] | |
| 252 | + | |
| 5 | 253 | |
| 6 | 254 | // 获取角色信息,根据用户权限动态加载路由 |
| 7 | 255 | router.beforeEach((to, from, next) => { |
| ... | ... | @@ -10,20 +258,33 @@ router.beforeEach((to, from, next) => { |
| 10 | 258 | if (to.path === "/login") { |
| 11 | 259 | next() |
| 12 | 260 | } else { |
| 13 | - // if (!store.getters.info.permissions) { | |
| 14 | - // next({ path: to.path }) | |
| 15 | - // } else { | |
| 16 | - // let is404 = to.matched.some(record => { | |
| 17 | - // if (record.meta.role) { | |
| 18 | - // return store.getters.info.authorityRouter === -1 | |
| 19 | - // } | |
| 20 | - // }) | |
| 21 | - // if (is404) { | |
| 22 | - // next({ path: "/404" }) | |
| 23 | - // return false | |
| 24 | - // } | |
| 261 | + if (!store.getters.info.permissions) { | |
| 262 | + !(async function getAddRouters() { | |
| 263 | + // 省略 axios 请求代码 通过 token 向后台请求用户权限等信息,这里用假数据赋值 | |
| 264 | + await store.commit("setInfo", { | |
| 265 | + permissions: [ | |
| 266 | + { | |
| 267 | + role: "superAdmin", | |
| 268 | + roleName: "超级管理员" | |
| 269 | + } | |
| 270 | + ], | |
| 271 | + name: "张老师", | |
| 272 | + // avatar: data.avatar ? data.avatar : "", | |
| 273 | + // uid: data.id, | |
| 274 | + // authorityRouter:[], | |
| 275 | + | |
| 276 | + }) | |
| 277 | + await store.commit("setRouters", addrouters) | |
| 278 | + let newAddRouters = store.getters.addRouters | |
| 279 | + // await router.addRoutes(newAddRouters) | |
| 280 | + newAddRouters.forEach(res => { | |
| 281 | + router.addRoute(res) | |
| 282 | + }) | |
| 283 | + next({ path: to.path }) | |
| 284 | + }()) | |
| 285 | + } else { | |
| 25 | 286 | next() |
| 26 | - // } | |
| 287 | + } | |
| 27 | 288 | } |
| 28 | 289 | } else { |
| 29 | 290 | if (to.path === "/login") { | ... | ... |
src/store/index.js
| ... | ... | @@ -285,31 +285,55 @@ const store = new Vuex.Store({ |
| 285 | 285 | }, |
| 286 | 286 | actions: { |
| 287 | 287 | Login({ commit }, that) { |
| 288 | - console.log(that.$router) | |
| 289 | - debugger | |
| 290 | 288 | // request.fetchLogin(that.loginForm).then(res => { |
| 291 | - // if (res.status == 200) { | |
| 292 | - commit("setToken", "xxxx") | |
| 293 | - commit("setInfo", { | |
| 294 | - permissions: [ | |
| 295 | - { | |
| 296 | - role: "superAdmin", | |
| 297 | - roleName: "超级管理员", | |
| 298 | - }, | |
| 299 | - ], | |
| 300 | - name: "张老师", | |
| 301 | - // avatar: data.avatar ? data.avatar : "", | |
| 302 | - // uid: data.id, | |
| 303 | - // authorityRouter:[], | |
| 304 | - }); | |
| 305 | - commit("setRouters", addrouters) | |
| 306 | - // let newAddRouters = getters.addRouters; | |
| 307 | - // await router.addRoutes(newAddRouters) | |
| 308 | - addrouters.forEach((res) => { | |
| 309 | - that.$router.addRoute(res); | |
| 310 | - }); | |
| 311 | - that.$router.push({ path: "/" }) | |
| 312 | - // } | |
| 289 | + // if (res.status == 200) { | |
| 290 | + commit("setToken", "xxxx") | |
| 291 | + commit("setInfo", { | |
| 292 | + permissions: [ | |
| 293 | + { | |
| 294 | + role: "superAdmin", | |
| 295 | + roleName: "超级管理员", | |
| 296 | + }, | |
| 297 | + ], | |
| 298 | + name: "张老师", | |
| 299 | + // avatar: data.avatar ? data.avatar : "", | |
| 300 | + // uid: data.id, | |
| 301 | + // authorityRouter:[], | |
| 302 | + }); | |
| 303 | + commit("setRouters", addrouters) | |
| 304 | + // let newAddRouters = getters.addRouters; | |
| 305 | + // await router.addRoutes(newAddRouters) | |
| 306 | + addrouters.forEach((res) => { | |
| 307 | + that.$router.addRoute(res); | |
| 308 | + }); | |
| 309 | + that.$router.push({ path: "/" }) | |
| 310 | + // } | |
| 311 | + // }) | |
| 312 | + }, | |
| 313 | + permissions({ commit }, that) { | |
| 314 | + // request.fetchLogin(that.loginForm).then(res => { | |
| 315 | + // if (res.status == 200) { | |
| 316 | + commit("setToken", "xxxx") | |
| 317 | + commit("setInfo", { | |
| 318 | + permissions: [ | |
| 319 | + { | |
| 320 | + role: "superAdmin", | |
| 321 | + roleName: "超级管理员", | |
| 322 | + }, | |
| 323 | + ], | |
| 324 | + name: "李老师", | |
| 325 | + // avatar: data.avatar ? data.avatar : "", | |
| 326 | + // uid: data.id, | |
| 327 | + // authorityRouter:[], | |
| 328 | + }); | |
| 329 | + commit("setRouters", addrouters) | |
| 330 | + // let newAddRouters = getters.addRouters; | |
| 331 | + // await router.addRoutes(newAddRouters) | |
| 332 | + addrouters.forEach((res) => { | |
| 333 | + that.$router.addRoute(res); | |
| 334 | + }); | |
| 335 | + that.$router.push({ path: "/" }) | |
| 336 | + // } | |
| 313 | 337 | // }) |
| 314 | 338 | } |
| 315 | 339 | }, | ... | ... |