Commit 29f8fb905eb0464a41ac644568c7d0dd7bfd6a7e
1 parent
4c4f7640
刷新浏览器重新动态添加路由
Showing
3 changed files
with
324 additions
and
43 deletions
src/api/apis/login.js
@@ -5,10 +5,6 @@ import loginUrls from "../urls/login" | @@ -5,10 +5,6 @@ import loginUrls from "../urls/login" | ||
5 | export default { | 5 | export default { |
6 | // 账号密码登陆 | 6 | // 账号密码登陆 |
7 | fetchLogin (data) { | 7 | fetchLogin (data) { |
8 | - // return axios.post(loginUrls.login, data) | ||
9 | - return { | ||
10 | - status:200, | ||
11 | - data:[] | ||
12 | - } | 8 | + return axios.post(loginUrls.login, data) |
13 | } | 9 | } |
14 | } | 10 | } |
src/router/permission.js
1 | import NProgress from "nprogress" | 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 | import router from "./index" | 5 | import router from "./index" |
4 | import store from "../store" | 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 | router.beforeEach((to, from, next) => { | 255 | router.beforeEach((to, from, next) => { |
@@ -10,20 +258,33 @@ router.beforeEach((to, from, next) => { | @@ -10,20 +258,33 @@ router.beforeEach((to, from, next) => { | ||
10 | if (to.path === "/login") { | 258 | if (to.path === "/login") { |
11 | next() | 259 | next() |
12 | } else { | 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 | next() | 286 | next() |
26 | - // } | 287 | + } |
27 | } | 288 | } |
28 | } else { | 289 | } else { |
29 | if (to.path === "/login") { | 290 | if (to.path === "/login") { |
src/store/index.js
@@ -285,31 +285,55 @@ const store = new Vuex.Store({ | @@ -285,31 +285,55 @@ const store = new Vuex.Store({ | ||
285 | }, | 285 | }, |
286 | actions: { | 286 | actions: { |
287 | Login({ commit }, that) { | 287 | Login({ commit }, that) { |
288 | - console.log(that.$router) | ||
289 | - debugger | ||
290 | // request.fetchLogin(that.loginForm).then(res => { | 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 | }, |