From f1767b8a1f98a91b446e1bd5d8ed6d7f90da20bd Mon Sep 17 00:00:00 2001 From: Denozordec Date: Sat, 18 Jul 2026 20:47:28 +0700 Subject: [PATCH] =?UTF-8?q?fix(ui):=20=D0=B2=D1=8B=D1=80=D0=BE=D0=B2=D0=BD?= =?UTF-8?q?=D1=8F=D1=82=D1=8C=20=D1=80=D0=B8=D1=82=D0=BC=20Dashboard=20?= =?UTF-8?q?=D1=81=20list-=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PageHeader вынесен из OpsDashboard; empty чартов/очереди — EmptyState по центру. Co-authored-by: Cursor --- apps/web/src/components/page-header.tsx | 4 +- .../reui-kit/dashboard-analytics.tsx | 21 +++++++++-- .../src/components/reui-kit/ops-dashboard.tsx | 12 +----- apps/web/src/routes/_auth/index.tsx | 37 +++++++++++++++---- 4 files changed, 50 insertions(+), 24 deletions(-) diff --git a/apps/web/src/components/page-header.tsx b/apps/web/src/components/page-header.tsx index bb3674c..67b397d 100644 --- a/apps/web/src/components/page-header.tsx +++ b/apps/web/src/components/page-header.tsx @@ -6,11 +6,11 @@ interface PageHeaderProps { actions?: ReactNode } -/** Page-level section header — etalon EvoBGP. */ +/** Page-level section header — etalon EvoBGP / Domains list. */ export function PageHeader({ title, description, actions }: PageHeaderProps) { return (
-
+

{title}

{description ? (

{description}

diff --git a/apps/web/src/components/reui-kit/dashboard-analytics.tsx b/apps/web/src/components/reui-kit/dashboard-analytics.tsx index 1181c58..430d83d 100644 --- a/apps/web/src/components/reui-kit/dashboard-analytics.tsx +++ b/apps/web/src/components/reui-kit/dashboard-analytics.tsx @@ -2,6 +2,7 @@ import { useMemo, useEffect, useRef } from 'react' import { Bar, BarChart, CartesianGrid, Cell, Pie, PieChart, XAxis } from 'recharts' import { StatusBadge } from '@/components/status-badge' +import { EmptyState } from '@/components/empty-state' import { Frame, FrameDescription, @@ -85,9 +86,15 @@ export function CertStatusChart({ data }: CertStatusChartProps) { Статусы сертификатов Распределение по последней проверке - + {data.length === 0 ? ( -

Нет данных о сертификатах

+
+ +
) : (
Домены по группам Топ-6 групп по количеству зон - + {data.length === 0 ? ( -

Нет групп с доменами

+
+ +
) : (
-
- - -
@@ -44,8 +38,6 @@ function OpsDashboardSkeleton() { } export function OpsDashboard({ - title = 'Панель управления', - description = 'Обзор доменов, групп, сервисов и сертификатов Cloudflare', kpiCards, afterKpi, charts, @@ -58,8 +50,6 @@ export function OpsDashboard({ return (
- -
diff --git a/apps/web/src/routes/_auth/index.tsx b/apps/web/src/routes/_auth/index.tsx index 104d126..53a5fac 100644 --- a/apps/web/src/routes/_auth/index.tsx +++ b/apps/web/src/routes/_auth/index.tsx @@ -18,6 +18,8 @@ import { serviceGroupsQueryOptions, } from '@/queries' import { PageShell } from '@/components/page-shell' +import { PageHeader } from '@/components/page-header' +import { EmptyState } from '@/components/empty-state' import { CertStatusChart, GroupDomainsChart, @@ -276,6 +278,10 @@ function DashboardPage() { return ( + {attentionServices.length === 0 ? ( -

- Нет сервисов со статусом Down или Slow -

+
+ +
) : ( {attentionServices.map((service) => ( @@ -356,9 +367,14 @@ function DashboardPage() { ) : null}
{expiringCerts.length === 0 ? ( -

- В пределах 14 дней истечений нет -

+
+ +
) : ( {expiringCerts.map(({ cert, ts }) => ( @@ -391,7 +407,14 @@ function DashboardPage() { ) : null}
{ungroupedDomains.length === 0 ? ( -

Все домены в группах

+
+ +
) : ( {ungroupedDomains.map((domain) => (