klg-asutk-app/app/modifications/page.tsx
Yuriy b147d16798 MVP: заглушки, auth, .env.example, связь с бэкендом, главная КЛГ
- Заполнены заглушки: user-friendly-messages, health, aria, keyboard
- backend: core/auth.py, /api/v1/stats; cached-api → backend-client при USE_MOCK_DATA=false
- .env.example, middleware auth (skip при USE_MOCK_DATA), убраны неиспользуемые deps
- Страницы: airworthiness, maintenance, defects, modifications; AircraftAddModal, Sidebar
- Главная страница: REFLY — Контроль лётной годности (вместо Numerology App)
- Линт/скрипты: eslintrc, security, cleanup, logs, api inbox/knowledge

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-13 16:43:53 +03:00

61 lines
4.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use client";
import { useState } from "react";
import Sidebar from "@/components/Sidebar";
import Logo from "@/components/Logo";
const MOCK_MODS = [
{ id: "mod-001", number: "SB-737-57-1326", title: "Усиление нервюры крыла", aircraft: "Boeing 737-800", applicability: "RA-73701, RA-73702, RA-73704", type: "SB", status: "approved", approvedBy: "Росавиация", date: "2026-01-10" },
{ id: "mod-002", number: "STC-SSJ-2025-014", title: "Установка системы TCAS II v7.1", aircraft: "Sukhoi Superjet 100", applicability: "RA-89001, RA-89002, RA-89003, RA-89004", type: "STC", status: "in_progress", approvedBy: "EASA", date: "2025-11-20" },
{ id: "mod-003", number: "EO-MI8-2026-003", title: "Модификация топливной системы", aircraft: "Mi-8MTV-1", applicability: "RA-02801", type: "EO", status: "planned", approvedBy: "Росавиация", date: "2026-02-01" },
{ id: "mod-004", number: "SB-IL96-72-0045", title: "Замена блоков FADEC двигателей ПС-90А", aircraft: "Il-96-300", applicability: "RA-96017", type: "SB", status: "completed", approvedBy: "Росавиация", date: "2025-08-15" },
{ id: "mod-005", number: "AD-MOD-IL76-2025", title: "Доработка системы наддува по AD", aircraft: "Il-76TD-90VD", applicability: "RA-76511", type: "AD compliance", status: "completed", approvedBy: "Росавиация", date: "2025-10-01" },
];
const stColors: Record<string,string> = { approved: "#ff9800", in_progress: "#2196f3", planned: "#9c27b0", completed: "#4caf50" };
const stLabels: Record<string,string> = { approved: "Одобрена", in_progress: "Выполняется", planned: "Запланирована", completed: "Завершена" };
export default function ModificationsPage() {
const [filter, setFilter] = useState("all");
const filtered = filter === "all" ? MOCK_MODS : MOCK_MODS.filter(m => m.status === filter);
return (
<div style={{ display: "flex", minHeight: "100vh" }}>
<Sidebar />
<div style={{ marginLeft: "280px", flex: 1, padding: "32px" }}>
<Logo size="large" />
<p style={{ color: "#666", margin: "16px 0 24px" }}>Модификации и доработки воздушных судов</p>
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: "24px" }}>
<div>
<h2 style={{ fontSize: "24px", fontWeight: "bold", marginBottom: "8px" }}>Модификации ВС</h2>
<p style={{ fontSize: "14px", color: "#666" }}>Service Bulletins, STC, Engineering Orders EASA Part-21, Росавиация</p>
</div>
</div>
<div style={{ display: "grid", gridTemplateColumns: "repeat(4, 1fr)", gap: "12px", marginBottom: "24px" }}>
{[["approved","Одобрена","#fff3e0"],["in_progress","Выполняется","#e3f2fd"],["planned","Запланирована","#f3e5f5"],["completed","Завершена","#e8f5e9"]].map(([s,l,bg]) => (
<div key={s} onClick={() => setFilter(filter===s?"all":s)} style={{ background: bg, padding: "16px", borderRadius: "8px", textAlign: "center", cursor: "pointer", border: filter===s ? "2px solid #1e3a5f" : "2px solid transparent" }}>
<div style={{ fontSize: "28px", fontWeight: "bold", color: stColors[s] }}>{MOCK_MODS.filter(m=>m.status===s).length}</div>
<div style={{ fontSize: "13px", color: "#666" }}>{l}</div>
</div>
))}
</div>
<table style={{ width: "100%", borderCollapse: "collapse", background: "white" }}>
<thead><tr style={{ background: "#1e3a5f", color: "white" }}>
{["НОМЕР","ОПИСАНИЕ","ТИП ВС","ТИП","ПРИМЕНИМОСТЬ","СТАТУС","ОДОБРЕНО"].map(h => <th key={h} style={{ padding: "12px", textAlign: "left", fontSize: "12px" }}>{h}</th>)}
</tr></thead>
<tbody>{filtered.map(m => (
<tr key={m.id} style={{ borderBottom: "1px solid #e0e0e0" }}>
<td style={{ padding: "12px", fontWeight: 600, fontSize: "13px" }}>{m.number}</td>
<td style={{ padding: "12px", fontSize: "13px" }}>{m.title}</td>
<td style={{ padding: "12px" }}>{m.aircraft}</td>
<td style={{ padding: "12px" }}><span style={{ padding: "3px 8px", borderRadius: "4px", fontSize: "11px", background: "#e0e0e0" }}>{m.type}</span></td>
<td style={{ padding: "12px", fontSize: "12px", color: "#666" }}>{m.applicability}</td>
<td style={{ padding: "12px" }}><span style={{ padding: "3px 8px", borderRadius: "4px", fontSize: "11px", color: "white", background: stColors[m.status] }}>{stLabels[m.status]}</span></td>
<td style={{ padding: "12px", fontSize: "13px" }}>{m.approvedBy}<br/><span style={{ fontSize: "11px", color: "#999" }}>{m.date}</span></td>
</tr>
))}</tbody>
</table>
</div>
</div>
);
}