修复权限bug

dev_2022-05-11
yujialong 3 years ago
parent 897d16fcdb
commit 6aa514738b
  1. 10
      src/layouts/header/index.vue
  2. 232
      src/router/index.js
  3. 29
      src/router/routes.js

@ -10,7 +10,7 @@
<span class="m-l-10">{{ customer ? customerName : userName }}</span> <span class="m-l-10">{{ customer ? customerName : userName }}</span>
</div> </div>
<el-divider direction="vertical"></el-divider> <el-divider direction="vertical"></el-divider>
<el-button type="text" class="ml20" @click="logout">退出</el-button> <el-button type="text" class="ml20" @click="loginout">退出</el-button>
</div> </div>
</div> </div>
</template> </template>
@ -35,8 +35,14 @@ export default {
}, },
methods: { methods: {
...mapActions("user", [ ...mapActions("user", [
"logout", "setTitle", "setLogoUrl", "setAvatar", "setUserName" "setTitle", "setLogoUrl", "setAvatar", "setUserName"
]), ]),
loginout() {
this.$router.push('/login');
localStorage.clear();
sessionStorage.clear()
location.reload();
},
toPersonal() { toPersonal() {
if (!this.customer) { if (!this.customer) {
this.$router.push("/setting/person"); this.$router.push("/setting/person");

@ -16,7 +16,7 @@ const createRouter = () => new Router({
routes routes
}); });
console.log(routes);
export function resetRouter() { export function resetRouter() {
const newRouter = createRouter(); const newRouter = createRouter();
router.matcher = newRouter.matcher; router.matcher = newRouter.matcher;
@ -57,7 +57,7 @@ function getPermission() {
// 取得路由的值,使用addRouter添加进路由里 // 取得路由的值,使用addRouter添加进路由里
// 该项目的路由实际上做了两层处理,一层指向了默认的路由,对应模块,用于基础布局的nav,下面一层才是实际上的路由跳转, // 该项目的路由实际上做了两层处理,一层指向了默认的路由,对应模块,用于基础布局的nav,下面一层才是实际上的路由跳转,
// 所以需要默认进行赋值,实际操作时根据path去禁用掉对应的nav即可。 // 所以需要默认进行赋值,实际操作时根据path去禁用掉对应的nav即可。
const arr = ["achievement", "assessment", "course", "evaluation", "information", "match", "project", "setting", "student", "system"]; const arr = ["student", "evaluation", "assessment", "achievement", "course", "information", "match", "project", "system"];
let permissionRouters = []; // 最后处理好的路由数组 let permissionRouters = []; // 最后处理好的路由数组
let data = res.permissionMenu[0].children; let data = res.permissionMenu[0].children;
@ -66,123 +66,128 @@ function getPermission() {
// 第一级路由,需要根据匹配到的path,塞进对应的路由children里 // 第一级路由,需要根据匹配到的path,塞进对应的路由children里
let str = e.path.split("/")[1]; let str = e.path.split("/")[1];
let index = arr.indexOf(str); let index = arr.indexOf(str);
let obj = { console.log(index);
path: e.path, if (index !== -1) {
name: arr[index] + "-list", let obj = {
component: () => import(`@/pages${e.path}`), path: e.path,
meta: { title: e.name, btn: [] }, name: arr[index] + "-list",
children: [] component: () => import(`@/pages${e.path}`),
}; meta: { title: e.name, btn: [] },
let meta = []; children: []
let children = []; };
// 第二级是按钮级数据,一级归属当前页的同级页面,实际上一共就一级路由 let meta = [];
if (e.children && e.children.length > 0) { let children = [];
e.children.forEach(i => { // 第二级是按钮级数据,一级归属当前页的同级页面,实际上一共就一级路由
// 避免重复生成路由 if (e.children && e.children.length > 0) {
if (i.path && !permissionRouters[index].children.some(e => i.path === e.path)) { e.children.forEach(i => {
// console.log(i.path,'当前二级路由的路径') // 避免重复生成路由
let obj = { console.log(i.path);
path: i.path, console.log(permissionRouters[index]);
name: arr[index] + "-" + i.path.split("/").pop(), if (i.path && permissionRouters[index] && !permissionRouters[index].children.some(e => i.path === e.path)) {
component: () => import(`@/pages${i.path}`), // console.log(i.path,'当前二级路由的路径')
meta: { title: i.name, btn: [] }, let obj = {
children: [] path: i.path,
}; name: arr[index] + "-" + i.path.split("/").pop(),
// 没找到第一级就生成一个 component: () => import(`@/pages${i.path}`),
if (!permissionRouters.some(e => e.path === `/${str}`)) { meta: { title: i.name, btn: [] },
let one = { children: []
path: "/" + arr[index],
name: arr[index],
redirect: {
name: `${arr[index]}-list`
},
component: BasicLayout,
children: []// 传来的路由实际上传入对应的children中
}; };
one.children.push(obj); // 没找到第一级就生成一个
permissionRouters.push(one); if (!permissionRouters.some(e => e.path === `/${str}`)) {
} else { let one = {
// 找到第一级,判断没有重复地址直接塞进去 path: "/" + arr[index],
let nowIndex = permissionRouters.findIndex(e => { name: arr[index],
return e.path === `/${str}`; redirect: {
}); name: `${arr[index]}-list`
if (nowIndex != -1 && !permissionRouters[nowIndex].children.some(e => e.path === obj.path)) { },
permissionRouters[nowIndex].children.push(obj); component: BasicLayout,
children: []// 传来的路由实际上传入对应的children中
};
one.children.push(obj);
permissionRouters.push(one);
} else {
// 找到第一级,判断没有重复地址直接塞进去
let nowIndex = permissionRouters.findIndex(e => {
return e.path === `/${str}`;
});
if (nowIndex != -1 && permissionRouters[nowIndex] && !permissionRouters[nowIndex].children.some(e => e.path === obj.path)) {
permissionRouters[nowIndex].children.push(obj);
}
} }
// permissionRouters.push(obj) // path是页面,要塞入上一级同级里,需要单独push进去生成路由
meta.push(i.name);
} else {
meta.push(i.name);
} }
// permissionRouters.push(obj) // path是页面,要塞入上一级同级里,需要单独push进去生成路由
meta.push(i.name);
} else {
meta.push(i.name);
}
if (i.children && i.children.length) { if (i.children && i.children.length) {
i.children.forEach(j => { i.children.forEach(j => {
if (j.path && !permissionRouters[index].children.some(e => j.path === e.path)) { if (j.path && permissionRouters[index] && !permissionRouters[index].children.some(e => j.path === e.path)) {
// console.log(j.path,'当前三级路由的路径') // console.log(j.path,'当前三级路由的路径')
let obj = { let obj = {
path: j.path, path: j.path,
name: arr[index] + "-" + j.path.split("/").pop(), name: arr[index] + "-" + j.path.split("/").pop(),
component: () => import(`@/pages${j.path}`), component: () => import(`@/pages${j.path}`),
meta: { title: j.name, btn: [] }, meta: { title: j.name, btn: [] },
children: [] children: []
};
// 没找到第一级就生成一个
if (!permissionRouters.some(e => e.path === `/${str}`)) {
let one = {
path: "/" + arr[index],
name: arr[index],
redirect: {
name: `${arr[index]}-list`
},
component: BasicLayout,
children: []// 传来的路由实际上传入对应的children中
}; };
one.children.push(obj); // 没找到第一级就生成一个
permissionRouters.push(one); if (!permissionRouters.some(e => e.path === `/${str}`)) {
} else { let one = {
// 找到第一级,判断没有重复地址直接塞进去 path: "/" + arr[index],
let nowIndex = permissionRouters.findIndex(e => { name: arr[index],
return e.path === `/${str}`; redirect: {
}); name: `${arr[index]}-list`
if (nowIndex != -1 && !permissionRouters[nowIndex].children.some(e => e.path === obj.path)) { },
permissionRouters[nowIndex].children.push(obj); component: BasicLayout,
children: []// 传来的路由实际上传入对应的children中
};
one.children.push(obj);
permissionRouters.push(one);
} else {
// 找到第一级,判断没有重复地址直接塞进去
let nowIndex = permissionRouters.findIndex(e => {
return e.path === `/${str}`;
});
if (nowIndex != -1 && permissionRouters[nowIndex] && !permissionRouters[nowIndex].children.some(e => e.path === obj.path)) {
permissionRouters[nowIndex].children.push(obj);
}
} }
// permissionRouters.push(obj) // path是页面,要塞入上一级同级里,需要单独push进去生成路由
meta.push(i.name+"-"+j.name);
} else {
meta.push(i.name+"-"+j.name);
} }
// permissionRouters.push(obj) // path是页面,要塞入上一级同级里,需要单独push进去生成路由 })
meta.push(i.name+"-"+j.name); }
} else { });
meta.push(i.name+"-"+j.name);
}
})
}
});
} }
obj.meta.btn = meta; obj.meta.btn = meta;
obj.children = children; obj.children = children;
// 处理好的路由,需要进行一次匹配,arr中必然存在对应的路由,所以在此处才生成第一级路由,免得额外判断是否有children // 处理好的路由,需要进行一次匹配,arr中必然存在对应的路由,所以在此处才生成第一级路由,免得额外判断是否有children
if (permissionRouters.length === 0 || !permissionRouters.some(e => e.path === `/${str}`)) { if (permissionRouters.length === 0 || !permissionRouters.some(e => e.path === `/${str}`)) {
// 生成第一级 // 生成第一级
let one = { let one = {
path: "/" + arr[index], path: "/" + arr[index],
name: arr[index], name: arr[index],
redirect: { redirect: {
name: `${arr[index]}-list` name: `${arr[index]}-list`
}, },
component: BasicLayout, component: BasicLayout,
children: []// 传来的路由实际上传入对应的children中 children: []// 传来的路由实际上传入对应的children中
}; };
one.children.push(obj); one.children.push(obj);
permissionRouters.push(one); permissionRouters.push(one);
// console.log(one,'当前的第一级别',obj,'第二级别') // console.log(one,'当前的第一级别',obj,'第二级别')
} else { } else {
// 找到第一级直接塞进去 // 找到第一级直接塞进去
let nowIndex = permissionRouters.findIndex(e => { let nowIndex = permissionRouters.findIndex(e => {
return e.path === `/${str}`; return e.path === `/${str}`;
}); });
if (nowIndex != -1) { if (nowIndex != -1) {
permissionRouters[nowIndex].children.push(obj); permissionRouters[nowIndex].children.push(obj);
}
} }
} }
}); });
@ -191,6 +196,11 @@ function getPermission() {
// 记录一下路由的名称,用于nav // 记录一下路由的名称,用于nav
let nav = data.map(e => e.path); let nav = data.map(e => e.path);
router.app.$options.store.commit("routers", nav); router.app.$options.store.commit("routers", nav);
let redirect = [{
path: "/index",
redirect: permissionRouters[0].path
}];
router.addRoutes(redirect);
router.addRoutes(permissionRouters); router.addRoutes(permissionRouters);
router.addRoutes(errorPage); router.addRoutes(errorPage);
} }

@ -7,10 +7,6 @@ const frameIn = [
path: "/", path: "/",
redirect: "/login" redirect: "/login"
}, },
{
path: "/index",
redirect: "/student"
},
{ {
path: "/", path: "/",
component: () => BasicLayout, component: () => BasicLayout,
@ -44,28 +40,6 @@ const frameOut = [
} }
]; ];
/**
* 错误页面
*/
const errorPage = [
{
path: "/403",
name: "403",
meta: {
title: "403"
},
component: () => import("@/pages/exception/error/403")
},
{
path: "*",
name: "404",
meta: {
title: "404"
},
component: () => import("@/pages/exception/error/404")
}
];
// 导出需要显示菜单的 // 导出需要显示菜单的
export const frameInRoutes = frameIn; export const frameInRoutes = frameIn;
@ -73,6 +47,5 @@ export const frameInRoutes = frameIn;
// 重新组织后导出 // 重新组织后导出
export default [ export default [
...frameIn, ...frameIn,
...frameOut, ...frameOut
// ...errorPage
]; ];
Loading…
Cancel
Save