Система контроля лётной годности воздушных судов · Безопасность и качество

Дашборд

Общая статистика и аналитика системы контроля лётной годности

{aircraftError ? (
Ошибка загрузки данных: {aircraftError.message || 'Неизвестная ошибка'}
) : isLoading ? (
Загрузка данных...
Пожалуйста, подождите...
) : aircraft.length === 0 && !aircraftLoading ? (
Нет данных для отображения
) : aircraft.length > 0 ? ( <> {/* Статистика воздушных судов */}

Статистика воздушных судов

{ e.currentTarget.style.transform = 'translateY(-4px)'; e.currentTarget.style.boxShadow = '0 6px 16px rgba(30, 58, 95, 0.25)'; }} onMouseLeave={(e) => { e.currentTarget.style.transform = 'translateY(0)'; e.currentTarget.style.boxShadow = '0 4px 12px rgba(30, 58, 95, 0.15)'; }} >
Всего ВС
{computedStats.total.toLocaleString()}
{ e.currentTarget.style.transform = 'translateY(-4px)'; e.currentTarget.style.boxShadow = '0 6px 16px rgba(76, 175, 80, 0.25)'; }} onMouseLeave={(e) => { e.currentTarget.style.transform = 'translateY(0)'; e.currentTarget.style.boxShadow = '0 4px 12px rgba(76, 175, 80, 0.15)'; }} >
Активных
{computedStats.active.toLocaleString()}
{ e.currentTarget.style.transform = 'translateY(-4px)'; e.currentTarget.style.boxShadow = '0 6px 16px rgba(255, 152, 0, 0.25)'; }} onMouseLeave={(e) => { e.currentTarget.style.transform = 'translateY(0)'; e.currentTarget.style.boxShadow = '0 4px 12px rgba(255, 152, 0, 0.15)'; }} >
На обслуживании
{computedStats.maintenance.toLocaleString()}
{/* Статистика рисков */}

Статистика рисков

{ e.currentTarget.style.transform = 'translateY(-4px)'; e.currentTarget.style.boxShadow = '0 6px 16px rgba(30, 58, 95, 0.25)'; }} onMouseLeave={(e) => { e.currentTarget.style.transform = 'translateY(0)'; e.currentTarget.style.boxShadow = '0 4px 12px rgba(30, 58, 95, 0.15)'; }} >
Всего рисков
{risksStats.total}
{ e.currentTarget.style.transform = 'translateY(-4px)'; e.currentTarget.style.boxShadow = '0 6px 16px rgba(244, 67, 54, 0.25)'; }} onMouseLeave={(e) => { e.currentTarget.style.transform = 'translateY(0)'; e.currentTarget.style.boxShadow = '0 4px 12px rgba(244, 67, 54, 0.15)'; }} >
Критических
{risksStats.critical}
{ e.currentTarget.style.transform = 'translateY(-4px)'; e.currentTarget.style.boxShadow = '0 6px 16px rgba(255, 152, 0, 0.25)'; }} onMouseLeave={(e) => { e.currentTarget.style.transform = 'translateY(0)'; e.currentTarget.style.boxShadow = '0 4px 12px rgba(255, 152, 0, 0.15)'; }} >
Высоких
{risksStats.high}
{/* Статистика аудитов */}

Статистика аудитов

{ e.currentTarget.style.transform = 'translateY(-4px)'; e.currentTarget.style.boxShadow = '0 6px 16px rgba(33, 150, 243, 0.25)'; }} onMouseLeave={(e) => { e.currentTarget.style.transform = 'translateY(0)'; e.currentTarget.style.boxShadow = '0 4px 12px rgba(33, 150, 243, 0.15)'; }} >
Текущих
{auditsStats.current}
{ e.currentTarget.style.transform = 'translateY(-4px)'; e.currentTarget.style.boxShadow = '0 6px 16px rgba(255, 152, 0, 0.25)'; }} onMouseLeave={(e) => { e.currentTarget.style.transform = 'translateY(0)'; e.currentTarget.style.boxShadow = '0 4px 12px rgba(255, 152, 0, 0.15)'; }} >
Предстоящих
{auditsStats.upcoming}
{ e.currentTarget.style.transform = 'translateY(-4px)'; e.currentTarget.style.boxShadow = '0 6px 16px rgba(76, 175, 80, 0.25)'; }} onMouseLeave={(e) => { e.currentTarget.style.transform = 'translateY(0)'; e.currentTarget.style.boxShadow = '0 4px 12px rgba(76, 175, 80, 0.15)'; }} >
Завершённых
{auditsStats.completed}
{/* Рейтинг операторов по КЛГ */}

Рейтинг операторов по КЛГ

{/* Лучшие по КЛГ */}

Лучшие по КЛГ

{operatorRatings .filter(r => r.category === 'best') .slice(0, 5) .map((rating, index) => (
{rating.operator} {rating.rating}
))} {operatorRatings.filter(r => r.category === 'best').length === 0 && (
Нет данных
)}
{/* Средние */}

Средние

{operatorRatings .filter(r => r.category === 'average') .slice(0, 5) .map((rating, index) => (
{rating.operator} {rating.rating}
))} {operatorRatings.filter(r => r.category === 'average').length === 0 && (
Нет данных
)}
{/* Требуют внимания */}

Требуют внимания

{operatorRatings .filter(r => r.category === 'worst') .slice(0, 5) .map((rating, index) => (
{rating.operator} {rating.rating}
))} {operatorRatings.filter(r => r.category === 'worst').length === 0 && (
Нет данных
)}
) : null} {/* AI-Powered Knowledge System - показываем только если есть данные или не идет загрузка */} {(!isLoading && hasAnyData) && ( <>

Система знаний на основе ИИ

{ logInfo('Selected result', { result }); // Можно добавить навигацию к результату }} placeholder="Семантический поиск по базе знаний..." />

Визуализация графа знаний

{ logInfo('Knowledge graph node clicked', { nodeId }); // Можно добавить навигацию к узлу }} />
)} {/* Модальные окна */} setIsAIAgentModalOpen(false)} /> setIsUploadModalOpen(false)} onUpload={handleFileUpload} /> setIsSearchModalOpen(false)} aircraft={aircraft} searchType="dashboard" onNavigate={handleNavigate} /> setIsExportModalOpen(false)} data={aircraft} filename="aircraft-export" title="Экспорт воздушных судов" availableColumns={aircraft.length > 0 ? Object.keys(aircraft[0]) : []} columnLabels={{ registrationNumber: 'Регистрационный номер', aircraftType: 'Тип ВС', operator: 'Оператор', status: 'Статус', manufacturer: 'Производитель', model: 'Модель', }} /> setIsSettingsModalOpen(false)} />