Files
agenciapsilmno/src/router/routes.clinic.js
Leonardo f733db8436 ZERADO
2026-03-06 06:37:13 -03:00

177 lines
5.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// src/router/routes.clinic.js
import AppLayout from '@/layout/AppLayout.vue'
export default {
path: '/admin',
component: AppLayout,
meta: {
// 🔐 Tudo aqui dentro exige login
area: 'admin',
requiresAuth: true,
// 👤 Perfil de acesso (tenant-level)
// tenantStore normaliza tenant_admin -> clinic_admin, mas mantemos compatibilidade
roles: ['clinic_admin']
},
children: [
// ======================================================
// 📊 DASHBOARD
// ======================================================
{ path: '', name: 'admin.dashboard', component: () => import('@/views/pages/clinic/ClinicDashboard.vue') },
// ======================================================
// 🧩 CLÍNICA — MÓDULOS (tenant_features)
// ======================================================
{
path: 'clinic/features',
name: 'admin-clinic-features',
component: () => import('@/views/pages/clinic/clinic/ClinicFeaturesPage.vue'),
meta: {
// opcional: restringir apenas para admin canônico
roles: ['clinic_admin', 'tenant_admin']
}
},
{
path: 'clinic/professionals',
name: 'admin-clinic-professionals',
component: () => import('@/views/pages/clinic/clinic/ClinicProfessionalsPage.vue'),
meta: {
requiresAuth: true,
roles: ['clinic_admin', 'tenant_admin']
}
},
// ======================================================
// 💳 MEU PLANO
// ======================================================
{
path: 'meu-plano',
name: 'admin-meu-plano',
component: () => import('@/views/pages/billing/ClinicMeuPlanoPage.vue')
},
// ======================================================
// 📅 AGENDA DA CLÍNICA
// ======================================================
{
path: 'agenda/clinica',
name: 'admin-agenda-clinica',
component: () => import('@/features/agenda/pages/AgendaClinicaPage.vue'),
meta: {
feature: 'agenda.view',
roles: ['clinic_admin', 'tenant_admin']
}
},
// ✅ NOVO: Compromissos determinísticos (tipos)
{
path: 'agenda/compromissos',
name: 'admin-agenda-compromissos',
component: () => import('@/features/agenda/pages/CompromissosDeterminados.vue'),
meta: {
feature: 'agenda.view',
roles: ['clinic_admin', 'tenant_admin']
// ✅ sem tenantScope: a área /admin já está no tenant da clínica pelo fluxo normal
}
},
// ======================================================
// 👥 PACIENTES (módulo ativável por clínica)
// ======================================================
// 📋 Lista de pacientes
{
path: 'pacientes',
name: 'admin-pacientes',
component: () => import('@/features/patients/PatientsListPage.vue'),
meta: {
// ✅ depende do tenant_features.patients
tenantFeature: 'patients'
}
},
// Cadastro de paciente (novo)
{
path: 'pacientes/cadastro',
name: 'admin-pacientes-cadastro',
component: () => import('@/features/patients/cadastro/PatientsCadastroPage.vue'),
meta: {
tenantFeature: 'patients'
}
},
// ✏️ Editar paciente
{
path: 'pacientes/cadastro/:id',
name: 'admin-pacientes-cadastro-edit',
component: () => import('@/features/patients/cadastro/PatientsCadastroPage.vue'),
props: true,
meta: {
tenantFeature: 'patients'
}
},
// 👥 Grupos de pacientes
{
path: 'pacientes/grupos',
name: 'admin-pacientes-grupos',
component: () => import('@/features/patients/grupos/GruposPacientesPage.vue'),
meta: {
tenantFeature: 'patients'
}
},
// 🏷️ Tags de pacientes
{
path: 'pacientes/tags',
name: 'admin-pacientes-tags',
component: () => import('@/features/patients/tags/TagsPage.vue'),
meta: {
tenantFeature: 'patients'
}
},
// 🔗 Link externo para cadastro
{
path: 'pacientes/link-externo',
name: 'admin-pacientes-link-externo',
component: () => import('@/features/patients/cadastro/PatientsExternalLinkPage.vue'),
meta: {
tenantFeature: 'patients'
}
},
// 📥 Cadastros recebidos via link externo
{
path: 'pacientes/cadastro/recebidos',
name: 'admin-pacientes-recebidos',
component: () => import('@/features/patients/cadastro/recebidos/CadastrosRecebidosPage.vue'),
meta: {
tenantFeature: 'patients'
}
},
// ======================================================
// 🔐 SEGURANÇA
// ======================================================
{
path: 'settings/security',
name: 'admin-settings-security',
component: () => import('@/views/pages/auth/SecurityPage.vue')
},
// ======================================================
// 🔒 MÓDULO PRO — Online Scheduling
// ======================================================
{
path: 'online-scheduling',
name: 'admin-online-scheduling',
component: () => import('@/views/pages/clinic/OnlineSchedulingAdminPage.vue'),
meta: {
feature: 'online_scheduling.manage'
}
}
]
}