bad / src /components /Equipment.jsx
Karmashek's picture
Upload 21 files
74d7347 verified
import React, { useState } from 'react';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faEdit, faTrash, faPlus } from '@fortawesome/free-solid-svg-icons';
import Swal from 'sweetalert2';
function Equipment({ equipment, onAdd, onEdit, onDelete }) {
const [filters, setFilters] = useState({
status: '',
type: '',
search: ''
});
const filteredEquipment = equipment.filter(item => {
return (
(!filters.status || item.status === filters.status) &&
(!filters.type || item.type === filters.type) &&
(!filters.search ||
item.name.toLowerCase().includes(filters.search.toLowerCase()) ||
item.serial.toLowerCase().includes(filters.search.toLowerCase()) ||
item.inventory.toLowerCase().includes(filters.search.toLowerCase())
)
);
});
const handleDelete = (id) => {
Swal.fire({
title: 'Подтверждение',
text: 'Вы уверены, что хотите удалить это оборудование?',
icon: 'warning',
showCancelButton: true,
confirmButtonText: 'Да, удалить',
cancelButtonText: 'Отмена'
}).then((result) => {
if (result.isConfirmed) {
onDelete(id);
}
});
};
return (
<div>
<div className="mb-4 flex justify-between items-center">
<h2 className="text-2xl font-bold">Оборудование</h2>
<button
onClick={onAdd}
className="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg flex items-center"
>
<FontAwesomeIcon icon={faPlus} className="mr-2" />
Добавить оборудование
</button>
</div>
<div className="mb-4 flex space-x-4">
<select
value={filters.status}
onChange={(e) => setFilters({ ...filters, status: e.target.value })}
className="border rounded-lg px-4 py-2"
>
<option value="">Все статусы</option>
<option value="active">Активно</option>
<option value="maintenance">ТО</option>
<option value="repair">Ремонт</option>
</select>
<select
value={filters.type}
onChange={(e) => setFilters({ ...filters, type: e.target.value })}
className="border rounded-lg px-4 py-2"
>
<option value="">Все типы</option>
<option value="Станок">Станок</option>
<option value="Конвейер">Конвейер</option>
<option value="Компрессор">Компрессор</option>
<option value="Генератор">Генератор</option>
<option value="Насос">Насос</option>
</select>
<input
type="text"
value={filters.search}
onChange={(e) => setFilters({ ...filters, search: e.target.value })}
placeholder="Поиск..."
className="border rounded-lg px-4 py-2 flex-1"
/>
</div>
<div className="bg-white rounded-lg shadow overflow-hidden">
<table className="min-w-full divide-y divide-gray-200">
<thead className="bg-gray-50">
<tr>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Название</th>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Тип</th>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Статус</th>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Инв. номер</th>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Действия</th>
</tr>
</thead>
<tbody className="bg-white divide-y divide-gray-200">
{filteredEquipment.map((item) => (
<tr key={item.id}>
<td className="px-6 py-4 whitespace-nowrap">{item.name}</td>
<td className="px-6 py-4 whitespace-nowrap">{item.type}</td>
<td className="px-6 py-4 whitespace-nowrap">
<span className={`px-2 py-1 rounded-full text-xs font-semibold ${
item.status === 'active' ? 'bg-green-100 text-green-800' :
item.status === 'maintenance' ? 'bg-yellow-100 text-yellow-800' :
'bg-red-100 text-red-800'
}`}>
{item.status === 'active' ? 'Активно' :
item.status === 'maintenance' ? 'ТО' : 'Ремонт'}
</span>
</td>
<td className="px-6 py-4 whitespace-nowrap">{item.inventory}</td>
<td className="px-6 py-4 whitespace-nowrap">
<button
onClick={() => onEdit(item)}
className="text-blue-600 hover:text-blue-800 mr-3"
>
<FontAwesomeIcon icon={faEdit} />
</button>
<button
onClick={() => handleDelete(item.id)}
className="text-red-600 hover:text-red-800"
>
<FontAwesomeIcon icon={faTrash} />
</button>
</td>
</tr>
))}
</tbody>
</table>
</div>
</div>
);
}
export default Equipment;