'use client'; import { useState, useEffect, useRef } from 'react'; import { PageLayout } from '@/components/ui'; import { apiFetch } from '@/lib/api/api-client'; import { useAuth } from '@/lib/auth-context'; const ROLE_LABELS: Record = { admin: 'Администратор', authority_inspector: 'Инспектор', operator_manager: 'Менеджер оператора', operator_user: 'Оператор', mro_manager: 'Менеджер ТОиР', mro_specialist: 'Специалист ТОиР', mro_user: 'Специалист ТОиР' }; const DEFAULT_ORG = { name: 'АО «Авиакомпания»', inn: '7707123456', address: 'г. Москва, ул. Авиационная, 1' }; const DEFAULT_TEMPLATES = { work_order: 'Шаблон наряда ТО', defect: 'Шаблон дефекта', certificate: 'Шаблон сертификата' }; const DEFAULT_REFBOOKS = { aircraft_types: 'Типы ВС', ata_chapters: 'ATA главы', positions: 'Должности' }; export default function SettingsPage() { const { user } = useAuth(); const [prefs, setPrefs] = useState(null); const [saving, setSaving] = useState(false); const [orgProfile, setOrgProfile] = useState(DEFAULT_ORG); const [templates, setTemplates] = useState(DEFAULT_TEMPLATES); const [refbooks, setRefbooks] = useState(DEFAULT_REFBOOKS); const [integrations, setIntegrations] = useState>({ ai: 'warning', fgis: 'off', keycloak: 'on', minio: 'on' }); const fileInputRef = useRef(null); useEffect(() => { apiFetch('/notification-preferences').catch(() => null).then(setPrefs); }, []); const save = async () => { if (!prefs) return; setSaving(true); await apiFetch('/notification-preferences', { method: 'PUT', body: JSON.stringify(prefs) }); setSaving(false); }; const exportSettings = () => { const blob = new Blob([JSON.stringify({ prefs, orgProfile, templates, refbooks, integrations }, null, 2)], { type: 'application/json' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'settings_export.json'; a.click(); URL.revokeObjectURL(url); }; const importSettings = (e: React.ChangeEvent) => { const f = e.target.files?.[0]; if (!f) return; const r = new FileReader(); r.onload = () => { try { const j = JSON.parse(r.result as string); if (j.orgProfile) setOrgProfile(j.orgProfile); if (j.templates) setTemplates(j.templates); if (j.refbooks) setRefbooks(j.refbooks); if (j.integrations) setIntegrations(j.integrations); if (j.prefs) setPrefs(j.prefs); } catch { alert('Ошибка формата файла'); } }; r.readAsText(f); e.target.value = ''; }; const resetSection = (section: string) => { if (!confirm(`Сбросить настройки раздела «${section}»?`)) return; if (section === 'Профиль организации') setOrgProfile(DEFAULT_ORG); if (section === 'Шаблоны') setTemplates(DEFAULT_TEMPLATES); if (section === 'Справочники') setRefbooks(DEFAULT_REFBOOKS); }; const Toggle = ({ label, field }: { label: string; field: string }) => (
{label}
); return ( }>

🏢 Профиль организации

Название setOrgProfile(p => ({ ...p, name: e.target.value }))} />
ИНН setOrgProfile(p => ({ ...p, inn: e.target.value }))} />
Адрес setOrgProfile(p => ({ ...p, address: e.target.value }))} />

👤 Профиль пользователя

Имя{user?.display_name ?? 'Dev User'}
Email{user?.email ?? 'dev@local'}
Роль{user?.role ? ROLE_LABELS[user.role] ?? user.role : 'Администратор'}
Организация{user?.organization_name ?? orgProfile.name}
{prefs && (

📢 Уведомления

)}

🔗 Интеграции

AI-помощник{integrations.ai === 'on' ? 'Подключено' : '⚠️ Настройка'}
ФГИС ЕС ОрВДНе подключено
Keycloak SSOПодключено
MinIO (документы)Подключено

📄 Шаблоны документов

{Object.entries(templates).map(([k, v]) =>
{k} setTemplates(p => ({ ...p, [k]: e.target.value }))} />
)}

📖 Справочники

{Object.entries(refbooks).map(([k, v]) =>
{k} setRefbooks(p => ({ ...p, [k]: e.target.value }))} />
)}

🖥️ Система

НазваниеREFLY АСУ ТК
Версия2.0.0-beta
Часовой поясEurope/Moscow (UTC+3)
{prefs && ( )}

© 2025–2026 REFLY Aviation Technologies

); }