feat: Sistema de Ranking de Consultores CAPES - versão inicial
Backend (FastAPI + DDD):
- Arquitetura DDD com camadas Domain, Application, Infrastructure, Interface
- Integração com Elasticsearch (ATUACAPES) para dados de consultores
- Integração com Oracle (SUCUPIRA_PAINEL) para coordenações PPG
- Cálculo dos 4 componentes de pontuação (A, B, C, D)
- Cache em memória para otimização de performance
- API REST com endpoints /ranking, /ranking/detalhado, /consultor/{id}
Frontend (React + Vite):
- Interface responsiva com cards expansíveis
- Visualização detalhada de pontuação por componente
- Filtro por quantidade de consultores (Top 10, 50, 100, etc)
Docker:
- docker-compose com shared_network externa
- Backend com Oracle Instant Client
- Frontend com Vite dev server
This commit is contained in:
97
frontend/src/App.css
Normal file
97
frontend/src/App.css
Normal file
@@ -0,0 +1,97 @@
|
||||
.container {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.loading,
|
||||
.error {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 60vh;
|
||||
text-align: center;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.loading {
|
||||
font-size: 1.2rem;
|
||||
color: var(--accent-2);
|
||||
}
|
||||
|
||||
.error {
|
||||
background: rgba(255, 59, 48, 0.1);
|
||||
border: 1px solid rgba(255, 59, 48, 0.3);
|
||||
border-radius: 12px;
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
.error h2 {
|
||||
color: #ff3b30;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.error button {
|
||||
margin-top: 1rem;
|
||||
padding: 0.6rem 1.2rem;
|
||||
background: var(--accent);
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
color: white;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
transition: background 200ms;
|
||||
}
|
||||
|
||||
.error button:hover {
|
||||
background: var(--accent-2);
|
||||
}
|
||||
|
||||
.controls {
|
||||
margin: 1.5rem 0;
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.controls label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
font-size: 0.9rem;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
.controls select {
|
||||
padding: 0.5rem 1rem;
|
||||
background: rgba(255,255,255,0.06);
|
||||
border: 1px solid var(--stroke);
|
||||
border-radius: 8px;
|
||||
color: var(--text);
|
||||
font-size: 0.9rem;
|
||||
cursor: pointer;
|
||||
transition: border-color 200ms;
|
||||
}
|
||||
|
||||
.controls select:hover {
|
||||
border-color: var(--accent-2);
|
||||
}
|
||||
|
||||
.ranking-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
footer {
|
||||
text-align: center;
|
||||
margin-top: 2.4rem;
|
||||
padding: 1.4rem 0 0.8rem;
|
||||
color: var(--muted);
|
||||
border-top: 1px solid var(--stroke);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
footer p + p {
|
||||
margin-top: 0.5rem;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
Reference in New Issue
Block a user