2D-карта (станции, заявки) и вкладка «Заявки»

Новая вкладка «Заявки»: показ заявок за интервал на 2D-карте,
создание заявки рисованием полигона на карте с формой параметров
(Оптика/РСА) и удаление выбранной заявки (createRequest/deleteRequest,
RequestCreatePanel/RequestDetailsPanel, polygonToWkt). В Tgu2DMapView
добавлен изолированный режим рисования полигона.

2D-карта: панели информации о станции и о заявках, слой станций
(stationsApi), поддержка выбора объектов через спатиальный индекс.
Список слоёв упрощён — трасса/полоса/маркеры КА убраны из переключателя,
по умолчанию включены работы плана, станции и заявки.
This commit is contained in:
Дмитрий Соловьев
2026-06-01 22:17:50 +03:00
parent 715b5108d6
commit 0128c5569c
26 changed files with 1851 additions and 96 deletions
@@ -1,4 +1,3 @@
import { TguLegend } from "./TguLegend";
import type { TguActiveTab } from "../../model/timelineTypes";
type TguToolbarProps = {
@@ -12,7 +11,6 @@ type TguToolbarProps = {
onToChange: (value: string) => void;
onApply: () => void;
onQuickRange: (hours: number) => void;
onRefresh: () => void;
};
export function TguToolbar({
@@ -25,8 +23,7 @@ export function TguToolbar({
onFromChange,
onToChange,
onApply,
onQuickRange,
onRefresh
onQuickRange
}: TguToolbarProps) {
return (
<header className="tgu-toolbar">
@@ -56,7 +53,7 @@ export function TguToolbar({
aria-selected={activeTab === "map"}
onClick={() => onTabChange("map")}
>
Карта 2D
Карта
</button>
<button
className={activeTab === "editor" ? "is-active" : ""}
@@ -67,6 +64,15 @@ export function TguToolbar({
>
Редактор
</button>
<button
className={activeTab === "requests" ? "is-active" : ""}
type="button"
role="tab"
aria-selected={activeTab === "requests"}
onClick={() => onTabChange("requests")}
>
Заявки
</button>
</div>
<label className="tgu-field">
@@ -90,11 +96,7 @@ export function TguToolbar({
<button className="tgu-button" type="button" onClick={() => onQuickRange(168)} disabled={loading}>
7 суток
</button>
<button className="tgu-button" type="button" onClick={onRefresh} disabled={loading}>
{loading ? "Обновление..." : "Обновить"}
</button>
</div>
<TguLegend />
{error && <div className="tgu-alert tgu-alert--danger">{error}</div>}
</header>
);