navigation.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { defineStore } from "pinia";
  2. import { computed } from "vue";
  3. import { permissionStore } from "src/stores/permission";
  4. export const navigationStore = defineStore("navigation", () => {
  5. const navigationStructure = Object.freeze([
  6. {
  7. type: "single",
  8. title: "ui.navigation.dashboard",
  9. name: "DashboardPage",
  10. icon: "mdi-poll",
  11. disable: false,
  12. permission: true,
  13. },
  14. {
  15. type: "single",
  16. title: "Alunos",
  17. name: "StudentPage",
  18. icon: "mdi-account-outline",
  19. disable: false,
  20. permission: true,
  21. },
  22. {
  23. type: "single",
  24. title: "Usuários",
  25. name: "UsersPage",
  26. icon: "mdi-account-multiple-outline",
  27. disable: false,
  28. permission: true,
  29. },
  30. {
  31. type: "single",
  32. title: "Dados da Unidade",
  33. name: "UnitEditPage",
  34. icon: "mdi-cog-outline",
  35. disable: false,
  36. permission: true,
  37. },
  38. ]);
  39. const getNavigationAccess = () => {
  40. const { getAccess } = permissionStore();
  41. return navigationStructure
  42. .map((menu) => {
  43. if (menu.type === "expansive") {
  44. if (getAccess(menu.permissionScope, "menu")) menu.permission = true;
  45. menu.childrens = menu.childrens.filter((children) => {
  46. if (!children?.permissionScope) return true;
  47. children.permission = getAccess(children.permissionScope, "menu");
  48. return children.permission;
  49. });
  50. return menu.childrens.length > 0 ? menu : null;
  51. } else {
  52. if (!menu?.permissionScope) return menu;
  53. menu.permission = getAccess(menu.permissionScope, "menu");
  54. return menu;
  55. }
  56. })
  57. .filter((menu) => menu !== null);
  58. };
  59. const navigationItems = computed(() => getNavigationAccess());
  60. return {
  61. navigationItems,
  62. };
  63. });