import React, { useEffect, useState } from 'react'; import { fetchWithAuth } from '../fetchWithAuth'; // Animación fade-in/slide-up para cards const fadeInSlideUp = `@keyframes fadein-slideup { 0% { opacity: 0; transform: translateY(40px); } 100% { opacity: 1; transform: translateY(0); } }`; // Inyectar animación global si no existe if (typeof document !== 'undefined' && !document.getElementById('fadein-slideup-admin')) { const style = document.createElement('style'); style.id = 'fadein-slideup-admin'; style.innerHTML = fadeInSlideUp; document.head.appendChild(style); } import TestTailwind from '../components/TestTailwind'; import { colors } from '../theme'; const API_URL = import.meta.env.VITE_EFC_API_URL; export default function Admin() { // Leer grupos del usuario desde localStorage let userGroups = []; if (typeof window !== 'undefined') { try { userGroups = JSON.parse(localStorage.getItem('user_groups') || '[]'); } catch { userGroups = []; } } // Si los grupos son exactamente [3,5] const isGroup35 = Array.isArray(userGroups) && userGroups.length === 2 && userGroups.includes(3) && userGroups.includes(5); // Estado de servicios const [services, setServices] = useState(null); // Estado de descargas const [downloads, setDownloads] = useState(null); // Últimos documentos const [latestDocs, setLatestDocs] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); // Estado para análisis de actividad de usuario const [userActivity, setUserActivity] = useState(null); useEffect(() => { async function fetchData() { setLoading(true); setError(''); try { // Servicios const resServices = await fetchWithAuth(`${API_URL}/cards/services-util-information/`); if (!resServices.ok) throw new Error('Error al obtener estados de servicios'); const dataServices = await resServices.json(); setServices(dataServices); // Descargas const resDownloads = await fetchWithAuth(`${API_URL}/cards/document-util-information/`); if (!resDownloads.ok) throw new Error('Error al obtener información de descargas'); const dataDownloads = await resDownloads.json(); setDownloads(dataDownloads); // Últimos documentos const resDocs = await fetchWithAuth(`${API_URL}/cards/downloaded-documents/`); if (!resDocs.ok) throw new Error('Error al obtener últimos documentos'); const dataDocs = await resDocs.json(); setLatestDocs(dataDocs.documentos); // Análisis de actividad de usuario const resUserActivity = await fetchWithAuth(`${API_URL}/cards/user-activity-analysis/`); if (!resUserActivity.ok) throw new Error('Error al obtener análisis de actividad de usuario'); const dataUserActivity = await resUserActivity.json(); setUserActivity(dataUserActivity); } catch (err) { console.error('Error fetching admin data:', err); setError(err instanceof Error ? err.message : String(err)); } finally { setLoading(false); } } fetchData(); }, []); // Helper para nombre de archivo // Helper para nombre de archivo function getFileName(path) { return path.split('/').pop() || path; } return (
{typeof window !== 'undefined' && localStorage.getItem('user_is_importador') === 'true' ? 'Dashboard principal para gestión de Expediente electrónico' : 'Dashboard principal para gestión de agencia aduanal'}
Procesos en Espera
{services ? services.en_espera : '-'}
Total: {services ? services.procesos_filtrados : '-'}
En Proceso
{services ? services.en_proceso : '-'}
Finalizados: {services ? services.finalizados : '-'}
Con Error
{services ? services.con_error : '-'}
Finalizados: {services ? services.finalizados : '-'}
Descargados 1 día
{downloads ? downloads.archivos_ultimas_1_dia : '-'}
| Archivo | Pedimento | Organización | Fecha |
|---|---|---|---|
|
{getFileName(doc.archivo)}
|
{doc.pedimento} | {doc.organizacion} | {new Date(doc.created_at).toLocaleString('es-MX', { year: 'numeric', month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' })} |