handleRoutes.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /**
  2. * @copyright chuzhixin 1204505056@qq.com
  3. * @description all模式渲染后端返回路由
  4. * @param constantRoutes
  5. * @returns {*}
  6. */
  7. export function convertRouter(asyncRoutes) {
  8. return asyncRoutes.map((route) => {
  9. if (route.component) {
  10. if (route.component === "Layout") {
  11. route.component = (resolve) => require(["@/layouts"], resolve);
  12. } else if (route.component === "EmptyLayout") {
  13. route.component = (resolve) =>
  14. require(["@/layouts/EmptyLayout"], resolve);
  15. } else {
  16. const index = route.component.indexOf("views");
  17. const path =
  18. index > 0 ? route.component.slice(index) : `views/${route.component}`;
  19. route.component = (resolve) => require([`@/${path}`], resolve);
  20. }
  21. }
  22. if (route.children && route.children.length)
  23. route.children = convertRouter(route.children);
  24. if (route.children && route.children.length === 0) delete route.children;
  25. return route;
  26. });
  27. }
  28. /**
  29. * @copyright chuzhixin 1204505056@qq.com
  30. * @description 判断当前路由是否包含权限
  31. * @param permissions
  32. * @param route
  33. * @returns {boolean|*}
  34. */
  35. function hasPermission(permissions, route) {
  36. if (route.meta && route.meta.permissions) {
  37. return permissions.some((role) => route.meta.permissions.includes(role));
  38. } else {
  39. return true;
  40. }
  41. }
  42. /**
  43. * @copyright chuzhixin 1204505056@qq.com
  44. * @description intelligence模式根据permissions数组拦截路由
  45. * @param routes
  46. * @param permissions
  47. * @returns {[]}
  48. */
  49. export function filterAsyncRoutes(routes, permissions) {
  50. const finallyRoutes = [];
  51. routes.forEach((route) => {
  52. const item = { ...route };
  53. if (hasPermission(permissions, item)) {
  54. if (item.children) {
  55. item.children = filterAsyncRoutes(item.children, permissions);
  56. }
  57. finallyRoutes.push(item);
  58. }
  59. });
  60. return finallyRoutes;
  61. }