feat(dashboard): reemplazar Load More por paginación con overlay de carga

- Añadir AJAX handlers para paginación en las 3 tablas (búsquedas, clicks, sin resultados)
- Implementar controles de paginación estilo sitio principal (Inicio, números, Ver más, Fin)
- Añadir overlay de carga que mantiene el tamaño del card (sin saltos visuales)
- Estilos de paginación: botones con padding 8px 16px, border-radius 6px, activo naranja #FF8600
- Spinner CSS puro centrado durante la carga
- Deshabilitar pointer-events mientras carga para evitar doble clic

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
FrankZamora
2025-12-03 22:46:05 -06:00
parent e92d2018b1
commit 5e7626725d
3 changed files with 548 additions and 199 deletions

View File

@@ -89,6 +89,46 @@ body .card {
display: none;
}
/* =================================================================
Table Loading State (overlay sin cambiar tamaño)
================================================================= */
.dashboard-analytics-wrap .card.is-loading-table {
position: relative;
pointer-events: none;
}
.dashboard-analytics-wrap .card.is-loading-table::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(255, 255, 255, 0.7);
z-index: 10;
}
.dashboard-analytics-wrap .card.is-loading-table::before {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 24px;
height: 24px;
margin: -12px 0 0 -12px;
border: 3px solid #f3f3f3;
border-top: 3px solid #FF8600;
border-radius: 50%;
z-index: 11;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
/* =================================================================
KPI Cards - Sin efecto hover
================================================================= */
@@ -123,6 +163,55 @@ body .card {
border-color: #FF8600;
}
/* =================================================================
Pagination - Estilo igual al sitio principal
================================================================= */
.dashboard-analytics-wrap .pagination {
gap: 0.25rem;
flex-wrap: wrap;
}
.dashboard-analytics-wrap .pagination .page-item .page-link {
padding: 8px 16px;
margin: 0 4px;
border-radius: 6px;
border: 1px solid #e5e7eb;
font-size: 1rem;
min-height: 42px;
display: flex;
align-items: center;
justify-content: center;
color: #374151;
background-color: #fff;
text-decoration: none;
transition: all 0.2s ease;
}
.dashboard-analytics-wrap .pagination .page-item .page-link:hover {
background-color: #f3f4f6;
border-color: #d1d5db;
color: #111827;
}
.dashboard-analytics-wrap .pagination .page-item.active .page-link {
background-color: #FF8600;
border-color: #FF8600;
color: #fff;
}
.dashboard-analytics-wrap .pagination .page-item.disabled .page-link {
background-color: #f9fafb;
border-color: #e5e7eb;
color: #9ca3af;
cursor: not-allowed;
}
/* Botones de navegación (flechas) */
.dashboard-analytics-wrap .pagination .page-item .page-link i {
font-size: 0.875rem;
}
/* =================================================================
Responsive
================================================================= */
@@ -135,4 +224,11 @@ body .card {
.dashboard-analytics-wrap .card-body {
padding: 0.75rem;
}
.dashboard-analytics-wrap .pagination .page-item .page-link {
padding: 6px 12px;
font-size: 0.875rem;
min-height: 36px;
margin: 0 2px;
}
}