|
@@ -1,40 +1,43 @@
|
|
|
import { defineStore } from "pinia";
|
|
import { defineStore } from "pinia";
|
|
|
import { computed } from "vue";
|
|
import { computed } from "vue";
|
|
|
import { permissionStore } from "src/stores/permission";
|
|
import { permissionStore } from "src/stores/permission";
|
|
|
|
|
+import { userStore } from "src/stores/user";
|
|
|
|
|
|
|
|
export const navigationStore = defineStore("navigation", () => {
|
|
export const navigationStore = defineStore("navigation", () => {
|
|
|
const navigationStructure = Object.freeze([
|
|
const navigationStructure = Object.freeze([
|
|
|
|
|
+ // ─── Comum ───────────────────────────────────────────────
|
|
|
{
|
|
{
|
|
|
type: "single",
|
|
type: "single",
|
|
|
title: "ui.navigation.home",
|
|
title: "ui.navigation.home",
|
|
|
name: "HomePage",
|
|
name: "HomePage",
|
|
|
icon: "mdi-home-outline",
|
|
icon: "mdi-home-outline",
|
|
|
- disable: false,
|
|
|
|
|
permission: true,
|
|
permission: true,
|
|
|
|
|
+ allowedTypes: [],
|
|
|
},
|
|
},
|
|
|
|
|
+
|
|
|
|
|
+ // ─── ADMINISTRADOR ───────────────────────────────────────────────
|
|
|
{
|
|
{
|
|
|
type: "single",
|
|
type: "single",
|
|
|
title: "ui.navigation.dashboard",
|
|
title: "ui.navigation.dashboard",
|
|
|
name: "DashboardPage",
|
|
name: "DashboardPage",
|
|
|
icon: "mdi-poll",
|
|
icon: "mdi-poll",
|
|
|
- disable: false,
|
|
|
|
|
permission: false,
|
|
permission: false,
|
|
|
permissionScope: "dashboard",
|
|
permissionScope: "dashboard",
|
|
|
|
|
+ allowedTypes: ["administrador"],
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
type: "expansive",
|
|
type: "expansive",
|
|
|
title: "ui.navigation.registration",
|
|
title: "ui.navigation.registration",
|
|
|
icon: "mdi-plus",
|
|
icon: "mdi-plus",
|
|
|
- disable: false,
|
|
|
|
|
permission: false,
|
|
permission: false,
|
|
|
permissionScope: "config",
|
|
permissionScope: "config",
|
|
|
|
|
+ allowedTypes: ["administrador"],
|
|
|
childrens: [
|
|
childrens: [
|
|
|
{
|
|
{
|
|
|
type: "single",
|
|
type: "single",
|
|
|
title: "ui.navigation.users",
|
|
title: "ui.navigation.users",
|
|
|
name: "UsersPage",
|
|
name: "UsersPage",
|
|
|
icon: "mdi-account-multiple-outline",
|
|
icon: "mdi-account-multiple-outline",
|
|
|
- disable: false,
|
|
|
|
|
permission: false,
|
|
permission: false,
|
|
|
permissionScope: "config.user",
|
|
permissionScope: "config.user",
|
|
|
},
|
|
},
|
|
@@ -43,7 +46,6 @@ export const navigationStore = defineStore("navigation", () => {
|
|
|
title: "ui.navigation.city",
|
|
title: "ui.navigation.city",
|
|
|
name: "CityPage",
|
|
name: "CityPage",
|
|
|
icon: "mdi-city-variant-outline",
|
|
icon: "mdi-city-variant-outline",
|
|
|
- disable: false,
|
|
|
|
|
permission: false,
|
|
permission: false,
|
|
|
permissionScope: "config.city",
|
|
permissionScope: "config.city",
|
|
|
},
|
|
},
|
|
@@ -52,7 +54,6 @@ export const navigationStore = defineStore("navigation", () => {
|
|
|
title: "ui.navigation.country",
|
|
title: "ui.navigation.country",
|
|
|
name: "CountryPage",
|
|
name: "CountryPage",
|
|
|
icon: "mdi-earth",
|
|
icon: "mdi-earth",
|
|
|
- disable: false,
|
|
|
|
|
permission: false,
|
|
permission: false,
|
|
|
permissionScope: "config.country",
|
|
permissionScope: "config.country",
|
|
|
},
|
|
},
|
|
@@ -61,24 +62,194 @@ export const navigationStore = defineStore("navigation", () => {
|
|
|
title: "ui.navigation.state",
|
|
title: "ui.navigation.state",
|
|
|
name: "StatePage",
|
|
name: "StatePage",
|
|
|
icon: "mdi-map-marker",
|
|
icon: "mdi-map-marker",
|
|
|
- disable: false,
|
|
|
|
|
permission: false,
|
|
permission: false,
|
|
|
permissionScope: "config.state",
|
|
permissionScope: "config.state",
|
|
|
},
|
|
},
|
|
|
],
|
|
],
|
|
|
},
|
|
},
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "expansive",
|
|
|
|
|
+ title: "ui.navigation.partners",
|
|
|
|
|
+ icon: "mdi-handshake-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "parceiro",
|
|
|
|
|
+ allowedTypes: ["administrador"],
|
|
|
|
|
+ childrens: [
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.partner_agreements",
|
|
|
|
|
+ name: "PartnerAgreementsPage",
|
|
|
|
|
+ icon: "mdi-office-building-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "parceiro.convenio",
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.partner_services",
|
|
|
|
|
+ name: "PartnerServicesPage",
|
|
|
|
|
+ icon: "mdi-briefcase-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "parceiro.servico",
|
|
|
|
|
+ },
|
|
|
|
|
+ ],
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "expansive",
|
|
|
|
|
+ title: "ui.navigation.store",
|
|
|
|
|
+ icon: "mdi-store-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "loja",
|
|
|
|
|
+ allowedTypes: ["administrador"],
|
|
|
|
|
+ childrens: [
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.store_items",
|
|
|
|
|
+ name: "StoreItemsPage",
|
|
|
|
|
+ icon: "mdi-package-variant-closed",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "loja.item",
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.store_orders",
|
|
|
|
|
+ name: "StoreOrdersPage",
|
|
|
|
|
+ icon: "mdi-cart-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "loja.pedido",
|
|
|
|
|
+ },
|
|
|
|
|
+ ],
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.appointments",
|
|
|
|
|
+ name: "AppointmentsPage",
|
|
|
|
|
+ icon: "mdi-calendar-check-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "agendamento",
|
|
|
|
|
+ allowedTypes: ["administrador"],
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.notifications",
|
|
|
|
|
+ name: "NotificationsPage",
|
|
|
|
|
+ icon: "mdi-bell-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "notificacao",
|
|
|
|
|
+ allowedTypes: ["administrador"],
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.categories",
|
|
|
|
|
+ name: "CategoriesPage",
|
|
|
|
|
+ icon: "mdi-tag-multiple-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "categoria",
|
|
|
|
|
+ allowedTypes: ["administrador"],
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ // ─── ASSOCIADO ───────────────────────────────────────────────────
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.dashboard",
|
|
|
|
|
+ name: "DashboardPage",
|
|
|
|
|
+ icon: "mdi-view-dashboard-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "dashboard",
|
|
|
|
|
+ allowedTypes: ["associado"],
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.partner_agreements",
|
|
|
|
|
+ name: "PartnerAgreementsPage",
|
|
|
|
|
+ icon: "mdi-handshake-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "parceiro.convenio",
|
|
|
|
|
+ allowedTypes: ["associado"],
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.store",
|
|
|
|
|
+ name: "StoreItemsPage",
|
|
|
|
|
+ icon: "mdi-store-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "loja.item",
|
|
|
|
|
+ allowedTypes: ["associado"],
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.my_appointments",
|
|
|
|
|
+ name: "AppointmentsPage",
|
|
|
|
|
+ icon: "mdi-calendar-check-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "agendamento",
|
|
|
|
|
+ allowedTypes: ["associado"],
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ // ─── PARCEIRO ────────────────────────────────────────────────────
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.dashboard",
|
|
|
|
|
+ name: "DashboardPage",
|
|
|
|
|
+ icon: "mdi-view-dashboard-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "dashboard",
|
|
|
|
|
+ allowedTypes: ["parceiro"],
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.my_profile",
|
|
|
|
|
+ name: "PartnerAgreementsPage",
|
|
|
|
|
+ icon: "mdi-office-building-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "parceiro.convenio",
|
|
|
|
|
+ allowedTypes: ["parceiro"],
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.my_services",
|
|
|
|
|
+ name: "PartnerServicesPage",
|
|
|
|
|
+ icon: "mdi-briefcase-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "parceiro.servico",
|
|
|
|
|
+ allowedTypes: ["parceiro"],
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.received_appointments",
|
|
|
|
|
+ name: "AppointmentsPage",
|
|
|
|
|
+ icon: "mdi-calendar-clock-outline",
|
|
|
|
|
+ permission: false,
|
|
|
|
|
+ permissionScope: "agendamento",
|
|
|
|
|
+ allowedTypes: ["parceiro"],
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ // ─── Comum (rodapé) ───────────────────────────────────────
|
|
|
|
|
+ {
|
|
|
|
|
+ type: "single",
|
|
|
|
|
+ title: "ui.navigation.versions",
|
|
|
|
|
+ name: "SystemVersionsPage",
|
|
|
|
|
+ icon: "mdi-information-outline",
|
|
|
|
|
+ permission: true,
|
|
|
|
|
+ allowedTypes: [],
|
|
|
|
|
+ },
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
const getNavigationAccess = () => {
|
|
const getNavigationAccess = () => {
|
|
|
const { getAccess } = permissionStore();
|
|
const { getAccess } = permissionStore();
|
|
|
|
|
+ const { userTipo } = userStore();
|
|
|
|
|
+
|
|
|
return navigationStructure
|
|
return navigationStructure
|
|
|
|
|
+ .filter((menu) => {
|
|
|
|
|
+ if (!menu.allowedTypes || menu.allowedTypes.length === 0) return true;
|
|
|
|
|
+ return menu.allowedTypes.includes(userTipo);
|
|
|
|
|
+ })
|
|
|
.map((menu) => {
|
|
.map((menu) => {
|
|
|
if (menu.type === "expansive") {
|
|
if (menu.type === "expansive") {
|
|
|
if (getAccess(menu.permissionScope, "menu")) menu.permission = true;
|
|
if (getAccess(menu.permissionScope, "menu")) menu.permission = true;
|
|
|
- menu.childrens = menu.childrens.filter((children) => {
|
|
|
|
|
- if (!children?.permissionScope) return true;
|
|
|
|
|
- children.permission = getAccess(children.permissionScope, "menu");
|
|
|
|
|
- return children.permission;
|
|
|
|
|
|
|
+ menu.childrens = menu.childrens.filter((child) => {
|
|
|
|
|
+ if (!child?.permissionScope) return true;
|
|
|
|
|
+ child.permission = getAccess(child.permissionScope, "menu");
|
|
|
|
|
+ return child.permission;
|
|
|
});
|
|
});
|
|
|
return menu.childrens.length > 0 ? menu : null;
|
|
return menu.childrens.length > 0 ? menu : null;
|
|
|
} else {
|
|
} else {
|
|
@@ -87,7 +258,7 @@ export const navigationStore = defineStore("navigation", () => {
|
|
|
return menu;
|
|
return menu;
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
- .filter((menu) => menu !== null);
|
|
|
|
|
|
|
+ .filter((menu) => menu !== null && menu.permission);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const navigationItems = computed(() => getNavigationAccess());
|
|
const navigationItems = computed(() => getNavigationAccess());
|