import React, { useState } from 'react'; import { Users, Plus, Search, Mail, Phone, Shield, Edit, Trash2, UserCheck, UserX } from 'lucide-react'; import { Button, Card, Badge, Input } from '../../../../components/ui'; import { PageHeader } from '../../../../components/layout'; const TeamPage: React.FC = () => { const [searchTerm, setSearchTerm] = useState(''); const [selectedRole, setSelectedRole] = useState('all'); const [showForm, setShowForm] = useState(false); const teamMembers = [ { id: '1', name: 'María González', email: 'maria.gonzalez@panaderia.com', phone: '+34 600 123 456', role: 'manager', department: 'Administración', status: 'active', joinDate: '2022-03-15', lastLogin: '2024-01-26 09:30:00', permissions: ['inventory', 'sales', 'reports', 'team'], avatar: '/avatars/maria.jpg', schedule: { monday: '07:00-15:00', tuesday: '07:00-15:00', wednesday: '07:00-15:00', thursday: '07:00-15:00', friday: '07:00-15:00', saturday: 'Libre', sunday: 'Libre' } }, { id: '2', name: 'Carlos Rodríguez', email: 'carlos.rodriguez@panaderia.com', phone: '+34 600 234 567', role: 'baker', department: 'Producción', status: 'active', joinDate: '2021-09-20', lastLogin: '2024-01-26 08:45:00', permissions: ['production', 'inventory'], avatar: '/avatars/carlos.jpg', schedule: { monday: '05:00-13:00', tuesday: '05:00-13:00', wednesday: '05:00-13:00', thursday: '05:00-13:00', friday: '05:00-13:00', saturday: '05:00-11:00', sunday: 'Libre' } }, { id: '3', name: 'Ana Martínez', email: 'ana.martinez@panaderia.com', phone: '+34 600 345 678', role: 'cashier', department: 'Ventas', status: 'active', joinDate: '2023-01-10', lastLogin: '2024-01-26 10:15:00', permissions: ['sales', 'pos'], avatar: '/avatars/ana.jpg', schedule: { monday: '08:00-16:00', tuesday: '08:00-16:00', wednesday: 'Libre', thursday: '08:00-16:00', friday: '08:00-16:00', saturday: '09:00-14:00', sunday: '09:00-14:00' } }, { id: '4', name: 'Luis Fernández', email: 'luis.fernandez@panaderia.com', phone: '+34 600 456 789', role: 'baker', department: 'Producción', status: 'inactive', joinDate: '2020-11-05', lastLogin: '2024-01-20 16:30:00', permissions: ['production'], avatar: '/avatars/luis.jpg', schedule: { monday: '13:00-21:00', tuesday: '13:00-21:00', wednesday: '13:00-21:00', thursday: 'Libre', friday: '13:00-21:00', saturday: 'Libre', sunday: '13:00-21:00' } }, { id: '5', name: 'Isabel Torres', email: 'isabel.torres@panaderia.com', phone: '+34 600 567 890', role: 'assistant', department: 'Ventas', status: 'active', joinDate: '2023-06-01', lastLogin: '2024-01-25 18:20:00', permissions: ['sales'], avatar: '/avatars/isabel.jpg', schedule: { monday: 'Libre', tuesday: '16:00-20:00', wednesday: '16:00-20:00', thursday: '16:00-20:00', friday: '16:00-20:00', saturday: '14:00-20:00', sunday: '14:00-20:00' } } ]; const roles = [ { value: 'all', label: 'Todos los Roles', count: teamMembers.length }, { value: 'manager', label: 'Gerente', count: teamMembers.filter(m => m.role === 'manager').length }, { value: 'baker', label: 'Panadero', count: teamMembers.filter(m => m.role === 'baker').length }, { value: 'cashier', label: 'Cajero', count: teamMembers.filter(m => m.role === 'cashier').length }, { value: 'assistant', label: 'Asistente', count: teamMembers.filter(m => m.role === 'assistant').length } ]; const teamStats = { total: teamMembers.length, active: teamMembers.filter(m => m.status === 'active').length, departments: { production: teamMembers.filter(m => m.department === 'Producción').length, sales: teamMembers.filter(m => m.department === 'Ventas').length, admin: teamMembers.filter(m => m.department === 'Administración').length } }; const getRoleBadgeColor = (role: string) => { switch (role) { case 'manager': return 'purple'; case 'baker': return 'green'; case 'cashier': return 'blue'; case 'assistant': return 'yellow'; default: return 'gray'; } }; const getStatusColor = (status: string) => { return status === 'active' ? 'green' : 'red'; }; const getRoleLabel = (role: string) => { switch (role) { case 'manager': return 'Gerente'; case 'baker': return 'Panadero'; case 'cashier': return 'Cajero'; case 'assistant': return 'Asistente'; default: return role; } }; const filteredMembers = teamMembers.filter(member => { const matchesRole = selectedRole === 'all' || member.role === selectedRole; const matchesSearch = member.name.toLowerCase().includes(searchTerm.toLowerCase()) || member.email.toLowerCase().includes(searchTerm.toLowerCase()); return matchesRole && matchesSearch; }); const formatLastLogin = (timestamp: string) => { const date = new Date(timestamp); const now = new Date(); const diffInDays = Math.floor((now.getTime() - date.getTime()) / (1000 * 60 * 60 * 24)); if (diffInDays === 0) { return 'Hoy ' + date.toLocaleTimeString('es-ES', { hour: '2-digit', minute: '2-digit' }); } else if (diffInDays === 1) { return 'Ayer'; } else { return `hace ${diffInDays} días`; } }; return (
Total Equipo
{teamStats.total}
Activos
{teamStats.active}
Producción
{teamStats.departments.production}
Ventas
{teamStats.departments.sales}
Se unió: {new Date(member.joinDate).toLocaleDateString('es-ES')}
Última conexión: {formatLastLogin(member.lastLogin)}
Permisos:
Horario esta semana:
No hay miembros del equipo que coincidan con los filtros seleccionados.
Formulario para agregar un nuevo miembro del equipo.