"use client" import { useState } from 'react' import { Card } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar' import { Badge } from '@/components/ui/badge' import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { Edit, Phone, Mail, Calendar, MapPin, User, Briefcase, Save, X } from 'lucide-react' // Интерфейс сотрудника interface Employee { id: string firstName: string lastName: string position: string department: string phone: string email: string avatar?: string hireDate: string status: 'active' | 'vacation' | 'sick' | 'inactive' salary: number address: string } // Моковые данные сотрудников const mockEmployees: Employee[] = [ { id: '1', firstName: 'Александр', lastName: 'Петров', position: 'Менеджер склада', department: 'Логистика', phone: '+7 (999) 123-45-67', email: 'a.petrov@company.com', hireDate: '2023-01-15', status: 'active', salary: 80000, address: 'Москва, ул. Ленина, 10' }, { id: '2', firstName: 'Мария', lastName: 'Иванова', position: 'Кладовщик', department: 'Логистика', phone: '+7 (999) 234-56-78', email: 'm.ivanova@company.com', hireDate: '2023-03-20', status: 'active', salary: 60000, address: 'Москва, ул. Советская, 25' }, { id: '3', firstName: 'Дмитрий', lastName: 'Сидоров', position: 'Водитель', department: 'Доставка', phone: '+7 (999) 345-67-89', email: 'd.sidorov@company.com', hireDate: '2022-11-10', status: 'vacation', salary: 70000, address: 'Москва, ул. Мира, 15' }, { id: '4', firstName: 'Анна', lastName: 'Козлова', position: 'HR-специалист', department: 'Кадры', phone: '+7 (999) 456-78-90', email: 'a.kozlova@company.com', hireDate: '2023-02-05', status: 'active', salary: 75000, address: 'Москва, пр. Победы, 8' } ] interface EmployeesListProps { searchQuery: string } export function EmployeesList({ searchQuery }: EmployeesListProps) { const [employees, setEmployees] = useState(mockEmployees) const [selectedEmployee, setSelectedEmployee] = useState(null) const [isEditModalOpen, setIsEditModalOpen] = useState(false) // Фильтрация сотрудников по поисковому запросу const filteredEmployees = employees.filter(employee => `${employee.firstName} ${employee.lastName}`.toLowerCase().includes(searchQuery.toLowerCase()) || employee.position.toLowerCase().includes(searchQuery.toLowerCase()) || employee.department.toLowerCase().includes(searchQuery.toLowerCase()) ) const getStatusBadge = (status: Employee['status']) => { switch (status) { case 'active': return Активен case 'vacation': return В отпуске case 'sick': return На больничном case 'inactive': return Неактивен default: return Неизвестно } } const getInitials = (firstName: string, lastName: string) => { return `${firstName.charAt(0)}${lastName.charAt(0)}` } const formatSalary = (salary: number) => { return new Intl.NumberFormat('ru-RU').format(salary) + ' ₽' } const handleEditEmployee = (employee: Employee) => { setSelectedEmployee(employee) setIsEditModalOpen(true) } const handleSaveEmployee = () => { if (selectedEmployee) { setEmployees(prev => prev.map(emp => emp.id === selectedEmployee.id ? selectedEmployee : emp) ) setIsEditModalOpen(false) setSelectedEmployee(null) } } return (
{/* Статистика */}

Всего сотрудников

{employees.length}

Активных

{employees.filter(e => e.status === 'active').length}

В отпуске

{employees.filter(e => e.status === 'vacation').length}

Отделов

{new Set(employees.map(e => e.department)).size}

{/* Список сотрудников */}
{filteredEmployees.map((employee) => (
{employee.avatar ? ( ) : null} {getInitials(employee.firstName, employee.lastName)}

{employee.firstName} {employee.lastName}

{employee.position}

{employee.department}

{getStatusBadge(employee.status)} {formatSalary(employee.salary)}
{employee.phone}
{employee.email}
С {new Date(employee.hireDate).toLocaleDateString('ru-RU')}
))}
{/* Модальное окно редактирования */} Редактировать сотрудника {selectedEmployee && (
setSelectedEmployee({ ...selectedEmployee, firstName: e.target.value })} className="glass-input text-white" />
setSelectedEmployee({ ...selectedEmployee, lastName: e.target.value })} className="glass-input text-white" />
setSelectedEmployee({ ...selectedEmployee, position: e.target.value })} className="glass-input text-white" />
setSelectedEmployee({ ...selectedEmployee, department: e.target.value })} className="glass-input text-white" />
setSelectedEmployee({ ...selectedEmployee, phone: e.target.value })} className="glass-input text-white" />
setSelectedEmployee({ ...selectedEmployee, salary: Number(e.target.value) })} className="glass-input text-white" />
setSelectedEmployee({ ...selectedEmployee, email: e.target.value })} className="glass-input text-white" />
setSelectedEmployee({ ...selectedEmployee, address: e.target.value })} className="glass-input text-white" />
)}
) }