import React, { useState, useEffect } from 'react'; import { BarChart2, Clock, AlertTriangle, CheckCircle, Filter, Search, MoreVertical, Download, RotateCcw } from 'lucide-react'; const ProductionDashboard = () => { const [selectedFilter, setSelectedFilter] = useState('all'); const [searchTerm, setSearchTerm] = useState(''); const [filteredOrders, setFilteredOrders] = useState([]); const productionOrders = [ { id: 'OP-001', product: 'Sala Modelo X', status: 'in-progress', currentPhase: 'Ensamble', progress: 65, startDate: '2024-03-20', daysDelayed: 2, totalPieces: 10, completedPieces: 7, assignedLine: 'Línea 1', materialStatus: 'Completo', responsibleTeam: 'Equipo A' }, { id: 'OP-002', product: 'Mesa Comedor', status: 'delayed', currentPhase: 'Materiales', progress: 20, startDate: '2024-03-22', daysDelayed: 3, totalPieces: 5, completedPieces: 1, assignedLine: 'Línea 2', materialStatus: 'Faltante', responsibleTeam: 'Equipo B' }, { id: 'OP-003', product: 'Silla Ejecutiva', status: 'completed', currentPhase: 'Acabado', progress: 100, startDate: '2024-03-15', daysDelayed: 0, totalPieces: 15, completedPieces: 15, assignedLine: 'Línea 3', materialStatus: 'Completo', responsibleTeam: 'Equipo C' } ]; useEffect(() => { let result = productionOrders; // Filtro por estado if (selectedFilter !== 'all') { result = result.filter(order => order.status === selectedFilter); } // Filtro por búsqueda if (searchTerm) { result = result.filter(order => order.id.toLowerCase().includes(searchTerm.toLowerCase()) || order.product.toLowerCase().includes(searchTerm.toLowerCase()) ); } setFilteredOrders(result); }, [selectedFilter, searchTerm]); // Inicializar filteredOrders en el primer render useEffect(() => { setFilteredOrders(productionOrders); }, []); const getStatusColor = (status) => { switch(status) { case 'in-progress': return 'bg-blue-100 text-blue-800'; case 'delayed': return 'bg-red-100 text-red-800'; case 'completed': return 'bg-green-100 text-green-800'; default: return 'bg-gray-100 text-gray-800'; } }; const getStatusIcon = (status) => { switch(status) { case 'in-progress': return ; case 'delayed': return ; case 'completed': return ; default: return null; } }; return (
{/* Encabezado con título y acciones */}

Dashboard de Producción

{/* Controles de filtrado y búsqueda */}
setSearchTerm(e.target.value)} />
{/* Resumen estadístico */}
Total Pedidos
{productionOrders.length}
En Progreso
{productionOrders.filter(o => o.status === 'in-progress').length}
Retrasados
{productionOrders.filter(o => o.status === 'delayed').length}
Completados
{productionOrders.filter(o => o.status === 'completed').length}
{/* Lista de órdenes */}
{filteredOrders.map((order) => (
{order.id}
{order.status === 'in-progress' ? 'En Progreso' : order.status === 'delayed' ? 'Retrasado' : order.status === 'completed' ? 'Completado' : ''}
{getStatusIcon(order.status)}
{order.product}
Fase Actual: {order.currentPhase}
Línea Asignada: {order.assignedLine}
Equipo Responsable: {order.responsibleTeam}
Estado Material: {' '}{order.materialStatus}
Progreso: {order.progress}% {order.completedPieces}/{order.totalPieces} Piezas
Fecha Inicio: {order.startDate}
{order.daysDelayed > 0 && (
Días Retrasados: {order.daysDelayed}
)}
))}
); }; export default ProductionDashboard;