navigation.js 4.7 KB

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