'use client' import React, { useEffect, useState } from 'react' import { useRouter } from 'next/navigation' import Sidebar from '../ui/Sidebar' import useNavigationStore from '../../app/store/navigationStore' import ChartCard from './ChartCard' import AreaChart from './AreaChart' import BarChart from './BarChart' import DetectorChart from './DetectorChart' const Dashboard: React.FC = () => { const router = useRouter() const { currentObject, setCurrentSubmenu, closeMonitoring, closeFloorNavigation, closeNotifications } = useNavigationStore() const objectId = currentObject?.id const objectTitle = currentObject?.title const [dashboardAlerts, setDashboardAlerts] = useState([]) const [chartData, setChartData] = useState<{ timestamp: string; value: number }[]>([]) useEffect(() => { const loadDashboard = async () => { try { const res = await fetch('/api/get-dashboard', { cache: 'no-store' }) if (!res.ok) return const payload = await res.json() console.log('[Dashboard] GET /api/get-dashboard', { status: res.status, payload }) const tableData = payload?.data?.table_data ?? [] const arr = (Array.isArray(tableData) ? tableData : []) .filter((a: any) => (objectTitle ? a.object === objectTitle : true)) setDashboardAlerts(arr as any[]) const cd = Array.isArray(payload?.data?.chart_data) ? payload.data.chart_data : [] setChartData(cd as any[]) } catch (e) { console.error('Failed to load dashboard:', e) } } loadDashboard() }, [objectTitle]) const handleBackClick = () => { router.push('/objects') } // Статусы const statusCounts = dashboardAlerts.reduce((acc: { critical: number; warning: number; normal: number }, a: any) => { if (a.severity === 'critical') acc.critical++ else if (a.severity === 'warning') acc.warning++ else acc.normal++ return acc }, { critical: 0, warning: 0, normal: 0 }) const handleNavigationClick = () => { closeMonitoring() closeFloorNavigation() closeNotifications() setCurrentSubmenu(null) router.push('/navigation') } return (

Объект {objectId?.replace('object_', '')}

Период
{/* Карты-графики */}
({ value: d.value }))} />
{/* Список детекторов */}

Тренды

Месяц
{/* Таблица */}
{dashboardAlerts.map((alert: any) => ( ))}
Детектор Сообщение Серьезность Дата Решен
{alert.name} {alert.message} {alert.severity === 'critical' ? 'Критическое' : alert.severity === 'warning' ? 'Предупреждение' : 'Норма'} {new Date(alert.created_at).toLocaleString()} {alert.resolved ? ( Да ) : ( Нет )}
{/* Статы */}
{dashboardAlerts.length}
Всего
{statusCounts.normal}
Норма
{statusCounts.warning}
Предупреждения
{statusCounts.critical}
Критические
{/* Графики с аналитикой */}
({ value: d.value }))} /> ({ value: d.value }))} /> ({ value: d.value }))} /> ({ value: d.value }))} />
) } export default Dashboard