1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
| import Vue from "vue";
| import VueRouter from "vue-router";
| import Layouts from "../layouts";
| import Parent from "../layouts/components/AppContent"
| import store from "../store";
|
| Vue.use(VueRouter);
| const originalPush = VueRouter.prototype.push
| VueRouter.prototype.push = function push(location) {
| return originalPush.call(this, location).catch(err => err)
| }
|
| /**
| * path: "/login", ------页面地址
| component: () => import("../views/login"), ------组件地址
| name: "Login", ------组件名称 缓存时需要 唯一性
| meta: {
| title: "登录", ------页面标题
| icon: "el-icon-user-solid", ------菜单图标
| oneself: true, ------是否在单独页面打开
| hide: true, ------是否隐藏改菜单
| keepAlive: true, ------是否缓存
| }
| */
|
| const routes = [
| {
| path: "/",
| redirect: "login",
| component: Layouts,
| children: [
| {
| path: "/login",
| meta: {
| title: "登录",
| oneself: true,
| hide: true,
| },
| component: () => import("../views/login"),
| },
| {
| path: "/projectList",
| meta: {
| title: "项目组管理",
| },
| component: Parent,
| children: [
| {
| path: "list",
| name: "ProjectList",
| meta: {
| title: "项目组管理",
| },
| component: () => import("../views/projectList"),
| },
| {
| path: "addProject",
| name: "AddProject",
| meta: {
| title: "新增项目组",
| hide: true,
| keepAlive: true,
| },
| component: () => import("../views/projectList/addProject"),
| }
| ]
| },
| {
| path: "/dataManagement",
| component: Parent,
| meta: {
| title: "实验室数据管理",
| },
| children: [
| {
| path: "/approvalPlan",
| meta: {
| title: "项目课题方案审批",
| keepAlive: true,
| },
| component: () => import("../views/approvalPlan/list.vue"),
| },
| {
| path: "/dispatching",
| meta: {
| title: "实验调度管理",
| keepAlive: true,
| },
| component: () => import("../views/dispatching/list.vue"),
| },
| ],
| }
|
| ],
| },
| ];
|
| const router = new VueRouter({
| mode: "hash",
| base: process.env.BASE_URL,
| routes,
| });
|
| // 前置路由拦截器
| router.beforeEach((to, from, next) => {
| // 设置当前页签名称
| document.title = to.meta.title || '实验室流程';
|
| // 判断是否需要缓存
| if (to.meta.keepAlive) {
| store.commit('SET_KEEPALIVELIST', [...store.state.keepAliveList, to.name])
| }
| // 设置标签列表
| if (!to.meta.hide || !to.meta.oneself) {
| // 判断是否存在
| let isExist = store.state.tagList.some(item => item.path === to.path)
| if (!isExist) {
| store.commit('SET_TAGLIST', [...store.state.tagList, to])
| }
| }
| next()
|
| // 没有登录并且要去的页面不是登录页面,在强制跳转到登录
| // if (to.path === "/login") {
| // localStorage.removeItem('userInfo')
| // next()
| // } else if (!localStorage.getItem('userInfo')) {
| // next('/login')
| // } else {
| // // 判断是否拥有要跳转菜单权限
| // let menus = store.state.menus
| // if (to.meta.hasOwnProperty('privilege') && !menus.includes(to.meta.privilege)) {
| // return
| // }
| // 设置标签列表
| // if (!to.meta.hide || !to.meta.oneself) {
| // // 判断是否存在
| // let isExist = store.state.tagList.some(item => item.path === to.path)
| // if (!isExist) {
| // store.commit('SET_TAGLIST', [...store.state.tagList, to])
| // }
| // }
| // // 判断是否需要缓存
| // if (to.meta.keepAlive) {
| // store.commit('SET_KEEPALIVELIST', [...store.state.keepAliveList, to.name])
| // }
| // next()
| // }
| });
|
| export default router;
|
|