From f89e1386f715f889ee4049683b07c6c5800aaad1 Mon Sep 17 00:00:00 2001 From: yagostn Date: Mon, 8 Dec 2025 11:24:59 -0300 Subject: [PATCH] feat: tela de gerenciar equipe --- frontend/components/Navbar.tsx | 4 +- frontend/pages/Dashboard.tsx | 339 ++++++++++++++++++++++++++++++--- frontend/pages/Finance.tsx | 114 ++++++----- 3 files changed, 374 insertions(+), 83 deletions(-) diff --git a/frontend/components/Navbar.tsx b/frontend/components/Navbar.tsx index adb5c39..6f2a1f9 100644 --- a/frontend/components/Navbar.tsx +++ b/frontend/components/Navbar.tsx @@ -204,7 +204,7 @@ export const Navbar: React.FC = ({ onNavigate, currentPage }) => { user.role === UserRole.SUPERADMIN) && ( + + + {/* Body */} +
+
+

+ Profissionais disponíveis para a data {new Date(selectedEvent.date + 'T00:00:00').toLocaleDateString('pt-BR')}. Clique em "Adicionar" para atribuir ao evento. +

+
+ + {/* Tabela de Profissionais */} +
+ + + + + + + + + + + + {MOCK_PHOTOGRAPHERS + .filter((photographer) => { + const isAssigned = selectedEvent.photographerIds.includes(photographer.id); + const isAvailable = photographer.availability[selectedEvent.date] ?? false; + return isAvailable || isAssigned; + }) + .map((photographer) => { + const isAssigned = selectedEvent.photographerIds.includes(photographer.id); + const isAvailable = photographer.availability[selectedEvent.date] ?? false; + + return ( + + {/* Profissional */} + + + {/* Função */} + + + {/* E-mail */} + + + {/* Status */} + + + {/* Ação */} + + + ); + })} + {MOCK_PHOTOGRAPHERS.filter((p) => { + const isAssigned = selectedEvent.photographerIds.includes(p.id); + const isAvailable = p.availability[selectedEvent.date] ?? false; + return isAvailable || isAssigned; + }).length === 0 && ( + + + + )} + +
+ Profissional + + Função + + E-mail + + Status + + Ação +
+
+
+
+

+ {photographer.name} +

+

+ ID: {photographer.id} +

+
+
+
+ + {photographer.role} + + + {photographer.email} + + {isAssigned ? ( + + + Atribuído + + ) : ( + + + Disponível + + )} + + +
+
+ +

+ Nenhum profissional disponível para esta data +

+

+ Tente selecionar outra data ou entre em contato com a equipe +

+
+
+
+
+ + {/* Footer */} +
+ +
+ + + )} ); diff --git a/frontend/pages/Finance.tsx b/frontend/pages/Finance.tsx index b408814..733dfb0 100644 --- a/frontend/pages/Finance.tsx +++ b/frontend/pages/Finance.tsx @@ -192,41 +192,41 @@ export const FinancePage: React.FC = () => { {/* Stats Cards */}
-
+
-

Receitas

- +

Receitas

+
-

{formatCurrency(totalIncome)}

+

{formatCurrency(totalIncome)}

Pagamentos recebidos

-
+
-

Despesas

- +

Despesas

+
-

{formatCurrency(totalExpense)}

+

{formatCurrency(totalExpense)}

Gastos do período

-
+
-

Saldo

- +

Saldo

+
-

= 0 ? 'text-brand-gold' : 'text-red-600'}`}> +

= 0 ? 'text-brand-gold' : 'text-red-600'}`}> {formatCurrency(balance)}

Receitas - Despesas

-
+
-

A Receber

- +

A Receber

+
-

{formatCurrency(pendingIncome)}

+

{formatCurrency(pendingIncome)}

Pagamentos pendentes

@@ -237,7 +237,7 @@ export const FinancePage: React.FC = () => {