navigation.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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: "single",
  17. title: "ui.navigation.schedules",
  18. name: "SchedulesPage",
  19. icon: "mdi-calendar-clock",
  20. disable: false,
  21. permission: false,
  22. permissionScope: "config.schedule",
  23. },
  24. {
  25. type: "single",
  26. title: "ui.navigation.opportunities",
  27. name: "OpportunitiesPage",
  28. icon: "mdi-bullseye-arrow",
  29. disable: false,
  30. permission: false,
  31. permissionScope: "config.custom_schedule",
  32. },
  33. {
  34. type: "expansive",
  35. title: "ui.navigation.registration",
  36. icon: "mdi-cog-outline",
  37. disable: false,
  38. permission: false,
  39. permissionScope: "config",
  40. childrens: [
  41. {
  42. type: "single",
  43. title: "ui.navigation.city",
  44. name: "CityPage",
  45. icon: "mdi-city-variant-outline",
  46. disable: false,
  47. permission: false,
  48. permissionScope: "config.city",
  49. },
  50. {
  51. type: "single",
  52. title: "ui.navigation.client",
  53. name: "ClientPage",
  54. icon: "mdi-account-outline",
  55. disable: false,
  56. permission: false,
  57. permissionScope: "config.client",
  58. },
  59. {
  60. type: "single",
  61. title: "ui.navigation.speciality",
  62. name: "SpecialitiesPage",
  63. icon: "mdi-star-outline",
  64. disable: false,
  65. permission: false,
  66. permissionScope: "config.speciality",
  67. },
  68. {
  69. type: "single",
  70. title: "ui.navigation.state",
  71. name: "StatePage",
  72. icon: "mdi-map-marker",
  73. disable: false,
  74. permission: false,
  75. permissionScope: "config.state",
  76. },
  77. {
  78. type: "single",
  79. title: "ui.navigation.country",
  80. name: "CountryPage",
  81. icon: "mdi-earth",
  82. disable: false,
  83. permission: false,
  84. permissionScope: "config.country",
  85. },
  86. {
  87. type: "single",
  88. title: "ui.navigation.provider",
  89. name: "ProviderPage",
  90. icon: "mdi-account-hard-hat",
  91. disable: false,
  92. permission: false,
  93. permissionScope: "config.provider",
  94. },
  95. {
  96. type: "single",
  97. title: "ui.navigation.improvement_type",
  98. name: "ImprovementTypesPage",
  99. icon: "mdi-chart-line-variant",
  100. disable: false,
  101. permission: false,
  102. permissionScope: "config.improvement_type",
  103. },
  104. {
  105. type: "single",
  106. title: "ui.navigation.service_type",
  107. name: "ServiceTypesPage",
  108. icon: "mdi-briefcase-check-outline",
  109. disable: false,
  110. permission: false,
  111. permissionScope: "config.service_type",
  112. },
  113. {
  114. type: "single",
  115. title: "ui.navigation.users",
  116. name: "UsersPage",
  117. icon: "mdi-account-multiple-outline",
  118. disable: false,
  119. permission: false,
  120. permissionScope: "config.user",
  121. },
  122. ],
  123. },
  124. ]);
  125. const getNavigationAccess = () => {
  126. const { getAccess } = permissionStore();
  127. return navigationStructure
  128. .map((menu) => {
  129. if (menu.type === "expansive") {
  130. if (getAccess(menu.permissionScope, "menu")) {
  131. menu.permission = true;
  132. }
  133. menu.childrens = menu.childrens.filter((children) => {
  134. children.permission = getAccess(children.permissionScope, "menu");
  135. return children.permission;
  136. });
  137. return menu.childrens.length > 0 ? menu : null;
  138. } else {
  139. menu.permission = getAccess(menu.permissionScope, "menu");
  140. return menu;
  141. }
  142. })
  143. .filter((menu) => menu !== null);
  144. };
  145. const navigationItems = computed(() => getNavigationAccess());
  146. return {
  147. navigationItems,
  148. };
  149. });