tt / src /components /Dashboard.jsx
Karmashek's picture
Upload 21 files
6f4bcd4 verified
import React from 'react';
import { Line, Pie } from 'react-chartjs-2';
import 'chart.js/auto';
function Dashboard({ equipment, maintenanceEvents }) {
const stats = {
total: equipment?.length || 0,
active: equipment?.filter(e => e.status === 'active').length || 0,
maintenance: equipment?.filter(e => e.status === 'maintenance').length || 0,
repair: equipment?.filter(e => e.status === 'repair').length || 0
};
const chartData = {
labels: ['Активно', 'ТО', 'Ремонт'],
datasets: [{
data: [stats.active, stats.maintenance, stats.repair],
backgroundColor: ['#10B981', '#F59E0B', '#EF4444'],
borderWidth: 0
}]
};
const chartOptions = {
responsive: true,
plugins: {
legend: {
position: 'bottom',
}
}
};
return (
<div className="space-y-6">
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
<div className="bg-white rounded-lg shadow p-6 border-l-4 border-blue-500">
<h4 className="font-medium text-gray-500">Всего оборудования</h4>
<p className="text-2xl font-bold">{stats.total}</p>
</div>
<div className="bg-white rounded-lg shadow p-6 border-l-4 border-green-500">
<h4 className="font-medium text-gray-500">Активно</h4>
<p className="text-2xl font-bold">{stats.active}</p>
</div>
<div className="bg-white rounded-lg shadow p-6 border-l-4 border-yellow-500">
<h4 className="font-medium text-gray-500">На ТО</h4>
<p className="text-2xl font-bold">{stats.maintenance}</p>
</div>
<div className="bg-white rounded-lg shadow p-6 border-l-4 border-red-500">
<h4 className="font-medium text-gray-500">В ремонте</h4>
<p className="text-2xl font-bold">{stats.repair}</p>
</div>
</div>
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
<div className="bg-white rounded-lg shadow p-6">
<h3 className="text-lg font-semibold mb-4">Статус оборудования</h3>
<div className="h-64">
<Pie data={chartData} options={chartOptions} />
</div>
</div>
<div className="bg-white rounded-lg shadow p-6">
<h3 className="text-lg font-semibold mb-4">Последние события</h3>
<div className="space-y-4">
{maintenanceEvents?.slice(0, 5).map(event => (
<div key={event.id} className="flex items-center justify-between border-b pb-2">
<div>
<p className="font-medium">{equipment?.find(e => e.id === event.equipment_id)?.name}</p>
<p className="text-sm text-gray-500">{new Date(event.date).toLocaleDateString()}</p>
</div>
<span className={`px-2 py-1 rounded-full text-xs font-semibold ${
event.status === 'completed' ? 'bg-green-100 text-green-800' :
event.status === 'planned' ? 'bg-blue-100 text-blue-800' :
'bg-yellow-100 text-yellow-800'
}`}>
{event.status}
</span>
</div>
))}
</div>
</div>
</div>
</div>
);
}
export default Dashboard;