Correcao Sidebar Classico e Rail, Correcao Layout, Ajuste de Breakpoint para Tailwind, Ajuste AppTopbar, Ajuste Menu PopOver, Recriado Paleta de Cores, Inserido algumas animações leves, Reajuste Cor items NOVOS da tabela, Drawer Ajuda Corrigido no Logout, Whatsapp, sms, email, recursos extras
This commit is contained in:
@@ -14,107 +14,105 @@
|
||||
| © 2026 — Todos os direitos reservados
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
export default function adminMenu (ctx = {}) {
|
||||
const menu = [
|
||||
{
|
||||
label: 'Clínica',
|
||||
items: [
|
||||
// ✅ usar name real da rota (evita /admin cair em redirect estranho)
|
||||
{ label: 'Dashboard', icon: 'pi pi-fw pi-home', to: { name: 'admin.dashboard' } },
|
||||
|
||||
export default function adminMenu(ctx = {}) {
|
||||
const menu = [
|
||||
{
|
||||
label: 'Agenda da Clínica',
|
||||
icon: 'pi pi-fw pi-calendar',
|
||||
to: { name: 'admin-agenda-clinica' },
|
||||
feature: 'agenda.view',
|
||||
badgeKey: 'agendaHoje'
|
||||
label: 'Clínica',
|
||||
items: [
|
||||
// ✅ usar name real da rota (evita /admin cair em redirect estranho)
|
||||
{ label: 'Dashboard', icon: 'pi pi-fw pi-home', to: { name: 'admin.dashboard' } },
|
||||
|
||||
{
|
||||
label: 'Agenda da Clínica',
|
||||
icon: 'pi pi-fw pi-calendar',
|
||||
to: { name: 'admin-agenda-clinica' },
|
||||
feature: 'agenda.view',
|
||||
badgeKey: 'agendaHoje'
|
||||
},
|
||||
|
||||
{
|
||||
label: 'Recorrências',
|
||||
icon: 'pi pi-fw pi-refresh',
|
||||
to: { name: 'admin-agenda-recorrencias' },
|
||||
feature: 'agenda.view'
|
||||
},
|
||||
|
||||
// ✅ Compromissos determinísticos (tipos)
|
||||
{
|
||||
label: 'Compromissos',
|
||||
icon: 'pi pi-fw pi-clock',
|
||||
to: { name: 'admin-agenda-compromissos' },
|
||||
feature: 'agenda.view'
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
// ✅ SEM IF: sempre existe, só fica visível quando a feature estiver ligada
|
||||
{
|
||||
label: 'Pacientes',
|
||||
visible: () => {
|
||||
// 1) enquanto tenant/features estão carregando, NÃO some (evita piscar ao trocar de aba)
|
||||
if (ctx?.tenantLoading?.()) return true;
|
||||
if (ctx?.tenantFeaturesLoading?.()) return true;
|
||||
|
||||
// 2) quando estabilizou, aí sim decide pela feature
|
||||
return !!ctx?.tenantFeatureEnabled?.('patients');
|
||||
},
|
||||
items: [
|
||||
// ✅ usar name real das rotas (você já tem todas no routes.clinic.js)
|
||||
{ label: 'Lista de Pacientes', icon: 'pi pi-fw pi-users', to: { name: 'admin-pacientes' }, quickCreate: true, quickCreateRoute: 'admin-pacientes-cadastro', quickCreateLinkTo: { name: 'admin-pacientes-link-externo' } },
|
||||
{ label: 'Grupos', icon: 'pi pi-fw pi-sitemap', to: { name: 'admin-pacientes-grupos' } },
|
||||
{ label: 'Tags', icon: 'pi pi-fw pi-tags', to: { name: 'admin-pacientes-tags' } },
|
||||
{ label: 'Link Externo', icon: 'pi pi-fw pi-link', to: { name: 'admin-pacientes-link-externo' } },
|
||||
{ label: 'Cadastros recebidos', icon: 'pi pi-inbox', to: { name: 'admin-pacientes-recebidos' }, badgeKey: 'cadastrosRecebidos' }
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
label: 'Recorrências',
|
||||
icon: 'pi pi-fw pi-refresh',
|
||||
to: { name: 'admin-agenda-recorrencias' },
|
||||
feature: 'agenda.view'
|
||||
label: 'Gestão',
|
||||
items: [
|
||||
{ label: 'Profissionais', icon: 'pi pi-fw pi-id-card', to: { name: 'admin-clinic-professionals' } },
|
||||
{
|
||||
label: 'Tipos de Clínicas',
|
||||
icon: 'pi pi-fw pi-sliders-h',
|
||||
to: { name: 'admin-clinic-features' },
|
||||
visible: () => {
|
||||
if (ctx?.tenantLoading?.()) return true; // ← true durante loading (evita piscar)
|
||||
const role = ctx?.role?.();
|
||||
return role === 'clinic_admin'; // tenant_admin normaliza para clinic_admin
|
||||
}
|
||||
},
|
||||
{ label: 'Meu plano', icon: 'pi pi-fw pi-credit-card', to: { name: 'admin-meu-plano' } }
|
||||
]
|
||||
},
|
||||
|
||||
// ✅ Compromissos determinísticos (tipos)
|
||||
{
|
||||
label: 'Compromissos',
|
||||
icon: 'pi pi-fw pi-clock',
|
||||
to: { name: 'admin-agenda-compromissos' },
|
||||
feature: 'agenda.view'
|
||||
label: 'Financeiro',
|
||||
items: [{ label: 'Cobranças', icon: 'pi pi-fw pi-wallet', to: { name: 'admin-financeiro' } }]
|
||||
},
|
||||
|
||||
{
|
||||
label: 'Sistema',
|
||||
items: [
|
||||
{ label: 'Segurança', icon: 'pi pi-fw pi-shield', to: { name: 'admin-settings-security' } },
|
||||
{
|
||||
label: 'Agendamento Online (PRO)',
|
||||
icon: 'pi pi-fw pi-calendar-plus',
|
||||
to: { name: 'admin-online-scheduling' },
|
||||
feature: 'online_scheduling.manage',
|
||||
proBadge: true
|
||||
},
|
||||
{
|
||||
label: 'Agendamentos Recebidos',
|
||||
icon: 'pi pi-fw pi-inbox',
|
||||
to: { name: 'admin-agendamentos-recebidos' },
|
||||
feature: 'online_scheduling.manage',
|
||||
proBadge: true,
|
||||
badgeKey: 'agendamentosRecebidos'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
];
|
||||
|
||||
// ✅ SEM IF: sempre existe, só fica visível quando a feature estiver ligada
|
||||
{
|
||||
label: 'Pacientes',
|
||||
visible: () => {
|
||||
// 1) enquanto tenant/features estão carregando, NÃO some (evita piscar ao trocar de aba)
|
||||
if (ctx?.tenantLoading?.()) return true
|
||||
if (ctx?.tenantFeaturesLoading?.()) return true
|
||||
|
||||
// 2) quando estabilizou, aí sim decide pela feature
|
||||
return !!ctx?.tenantFeatureEnabled?.('patients')
|
||||
},
|
||||
items: [
|
||||
// ✅ usar name real das rotas (você já tem todas no routes.clinic.js)
|
||||
{ label: 'Lista de Pacientes', icon: 'pi pi-fw pi-users', to: { name: 'admin-pacientes' }, quickCreate: true, quickCreateRoute: 'admin-pacientes-cadastro', quickCreateLinkTo: { name: 'admin-pacientes-link-externo' } },
|
||||
{ label: 'Grupos', icon: 'pi pi-fw pi-sitemap', to: { name: 'admin-pacientes-grupos' } },
|
||||
{ label: 'Tags', icon: 'pi pi-fw pi-tags', to: { name: 'admin-pacientes-tags' } },
|
||||
{ label: 'Link Externo', icon: 'pi pi-fw pi-link', to: { name: 'admin-pacientes-link-externo' } },
|
||||
{ label: 'Cadastros recebidos', icon: 'pi pi-inbox', to: { name: 'admin-pacientes-recebidos' }, badgeKey: 'cadastrosRecebidos' }
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
label: 'Gestão',
|
||||
items: [
|
||||
{ label: 'Profissionais', icon: 'pi pi-fw pi-id-card', to: { name: 'admin-clinic-professionals' } },
|
||||
{
|
||||
label: 'Tipos de Clínicas',
|
||||
icon: 'pi pi-fw pi-sliders-h',
|
||||
to: { name: 'admin-clinic-features' },
|
||||
visible: () => {
|
||||
if (ctx?.tenantLoading?.()) return true // ← true durante loading (evita piscar)
|
||||
const role = ctx?.role?.()
|
||||
return role === 'clinic_admin' // tenant_admin normaliza para clinic_admin
|
||||
}
|
||||
},
|
||||
{ label: 'Meu plano', icon: 'pi pi-fw pi-credit-card', to: { name: 'admin-meu-plano' } }
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
label: 'Financeiro',
|
||||
items: [
|
||||
{ label: 'Cobranças', icon: 'pi pi-fw pi-wallet', to: { name: 'admin-financeiro' } }
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
label: 'Sistema',
|
||||
items: [
|
||||
{ label: 'Segurança', icon: 'pi pi-fw pi-shield', to: { name: 'admin-settings-security' } },
|
||||
{
|
||||
label: 'Agendamento Online (PRO)',
|
||||
icon: 'pi pi-fw pi-calendar-plus',
|
||||
to: { name: 'admin-online-scheduling' },
|
||||
feature: 'online_scheduling.manage',
|
||||
proBadge: true
|
||||
},
|
||||
{
|
||||
label: 'Agendamentos Recebidos',
|
||||
icon: 'pi pi-fw pi-inbox',
|
||||
to: { name: 'admin-agendamentos-recebidos' },
|
||||
feature: 'online_scheduling.manage',
|
||||
proBadge: true,
|
||||
badgeKey: 'agendamentosRecebidos'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
return menu
|
||||
}
|
||||
return menu;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user