photum/frontend/index.html
João Vitor 3178207353 feat: Sistema completo de Gestão FOT e melhorias no dashboard
- Sistema FOT (Formatura Operations Tracking):
  * Tela de Gestão FOT (/cursos) com tabela Excel-style
  * Modal CourseForm com 10 campos (FOT, Empresa, Instituição, etc)
  * Validação de FOT (5 dígitos numéricos)
  * Edição de turmas ao clicar na linha
  * Integração com API backend (empresas, níveis educacionais, universidades)

- Dashboard renovado (/painel):
  * Tabela com 8 colunas (FOT, Data, Curso, Instituição, Ano, Empresa, Tipo, Status)
  * Filtros avançados: FOT (busca numérica), Data, Tipo de Evento
  * Removidos filtros de Estado e Cidade
  * Página de detalhes com tabela vertical (12 informações)
  * Botão Aprovar redireciona para modal de equipe

- Sistema de Aprovação Dupla (/aprovacao):
  * 2 tabelas separadas por abas (Usuários Normais e Profissionais)
  * Coluna Universidade renomeada para Empresa
  * Coluna Função nos profissionais
  * Workflow de aprovação com atribuição de equipe

- Cadastro Profissional (/cadastro-profissional):
  * Formulário específico para fotógrafos
  * Dropdown de Função Profissional da API
  * Tratamento de erro quando backend offline

- Modal de Criar Evento:
  * Tipo de Evento como primeiro campo
  * Nome do Evento (Opcional) como segundo campo

- Componentes novos:
  * EventTable.tsx - Tabela de eventos com ordenação
  * EventFiltersBar.tsx - Filtros avançados (3 filtros)
  * CourseForm.tsx - Formulário FOT completo
  * ProfessionalForm.tsx - Cadastro profissional

- API Service:
  * Integração com backend Go
  * Endpoints: /api/empresas, /api/funcoes, /api/niveis-educacionais, /api/universidades, /graduation-years

- Documentação:
  * README.md principal atualizado
  * frontend/README.md atualizado
  * Documentação completa de componentes e features
2025-12-11 16:02:39 -03:00

144 lines
No EOL
3.3 KiB
HTML

<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>PhotumFormaturas</title>
<!-- Mapbox GL CSS (versão CDN confiável) -->
<link href='https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.css' rel='stylesheet' />
<script src="https://cdn.tailwindcss.com"></script>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Playfair+Display:ital,wght@0,400;0,600;1,400&display=swap"
rel="stylesheet">
<script>
tailwind.config = {
theme: {
extend: {
fontFamily: {
sans: ['Inter', 'sans-serif'],
serif: ['Playfair Display', 'serif'],
},
colors: {
brand: {
black: '#1a1a1a',
gold: '#B9CF33',
gray: '#f4f4f4',
darkgray: '#333333'
}
}
}
}
}
</script>
<style>
html {
scroll-behavior: smooth;
}
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
}
::-webkit-scrollbar-thumb {
background: #B9CF33;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: #a5bd2e;
}
.fade-in {
animation: fadeIn 0.5s ease-out forwards;
}
.slide-up {
animation: slideUp 0.6s ease-out forwards;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes slideUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Mapbox custom styles */
.mapboxgl-ctrl-group {
border-radius: 8px !important;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15) !important;
}
.mapboxgl-ctrl-group button {
width: 36px !important;
height: 36px !important;
}
.mapboxgl-ctrl-geolocate {
background-color: white !important;
}
.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 2v20M2 12h20'/%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3C/svg%3E") !important;
}
.custom-marker {
cursor: grab !important;
transition: transform 0.2s ease;
}
.custom-marker:active {
cursor: grabbing !important;
transform: scale(1.1);
}
.mapboxgl-popup {
max-width: 300px !important;
}
.mapboxgl-popup-content {
border-radius: 8px !important;
padding: 15px !important;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;
}
/* Hide scrollbar for mobile tabs */
.scrollbar-hide {
-ms-overflow-style: none;
scrollbar-width: none;
}
.scrollbar-hide::-webkit-scrollbar {
display: none;
}
</style>
</head>
<body class="bg-white text-brand-black antialiased selection:bg-brand-gold selection:text-white">
<div id="root"></div>
<script type="module" src="/index.tsx"></script>
</body>
</html>