navigation.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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-home-variant-outline",
  11. disable: false,
  12. permission: false,
  13. permissionScope: "dashboard",
  14. },
  15. {
  16. type: "expansive",
  17. title: "ui.navigation.registration",
  18. icon: "mdi-cog-outline",
  19. disable: false,
  20. permission: false,
  21. permissionScope: "config",
  22. childrens: [
  23. {
  24. type: "single",
  25. title: "ui.navigation.users",
  26. name: "UsersPage",
  27. icon: "mdi-account-multiple-outline",
  28. disable: false,
  29. permission: false,
  30. permissionScope: "config.user",
  31. },
  32. {
  33. type: "single",
  34. title: "ui.navigation.city",
  35. name: "CityPage",
  36. icon: "mdi-city-variant-outline",
  37. disable: false,
  38. permission: false,
  39. permissionScope: "config.city",
  40. },
  41. {
  42. type: "single",
  43. title: "ui.navigation.country",
  44. name: "CountryPage",
  45. icon: "mdi-earth",
  46. disable: false,
  47. permission: false,
  48. permissionScope: "config.country",
  49. },
  50. {
  51. type: "single",
  52. title: "ui.navigation.state",
  53. name: "StatePage",
  54. icon: "mdi-map-marker",
  55. disable: false,
  56. permission: false,
  57. permissionScope: "config.state",
  58. },
  59. ],
  60. },
  61. ]);
  62. const getNavigationAccess = () => {
  63. const { getAccess } = permissionStore();
  64. return navigationStructure
  65. .map((menu) => {
  66. if (menu.type === "expansive") {
  67. if (getAccess(menu.permissionScope, "menu")) {
  68. menu.permission = true;
  69. }
  70. menu.childrens = menu.childrens.filter((children) => {
  71. children.permission = getAccess(children.permissionScope, "menu");
  72. return children.permission;
  73. });
  74. return menu.childrens.length > 0 ? menu : null;
  75. } else {
  76. menu.permission = getAccess(menu.permissionScope, "menu");
  77. return menu;
  78. }
  79. })
  80. .filter((menu) => menu !== null);
  81. };
  82. const navigationItems = computed(() => getNavigationAccess());
  83. return {
  84. navigationItems,
  85. };
  86. });