fix(ui): исправить доступность оболочки и проверку состояния сервера

This commit is contained in:
Denozordec committed 2026-10-03 22:49:52 +07:00
1 parent 1a9966ec95
commit c343ce62c8
25 files changed
+78 -21

No files matched your search

+8 -8
View File
@@ -467,7 +467,7 @@ const SEVERITY_META: Record<AlertSeverity, { label: string; dot: string; badge:
label: "Критическое",
dot: "bg-red-500",
badge: "bg-red-100 text-red-700 dark:bg-red-950 dark:text-red-400",
chip: "border-red-400 bg-red-500/10 text-red-600 dark:text-red-400",
chip: "border-red-400 bg-red-500/10 text-red-700 dark:text-red-400",
},
warning: {
label: "Предупреждение",
@@ -726,7 +726,7 @@ function AlertRuleRow({ rule, onToggle, onDelete, onEdit, interactionsDisabled,i
!rule.enabled && "opacity-55",
)}>
{/* toggle */}
<FormToggle ariaLabel={"Включить правило "+rule.name} checked={rule.enabled} onChange={v => onToggle(rule.id, v)} disabled={interactionsDisabled||(isLive&&rule.type==="bgp-prefix"&&!rule.enabled)} />
<FormToggle className="h-6" ariaLabel={"Включить правило "+rule.name} checked={rule.enabled} onChange={v => onToggle(rule.id, v)} disabled={interactionsDisabled||(isLive&&rule.type==="bgp-prefix"&&!rule.enabled)} />
{/* severity dot */}
<SeverityDot severity={rule.severity} />
@@ -746,7 +746,7 @@ function AlertRuleRow({ rule, onToggle, onDelete, onEdit, interactionsDisabled,i
{rule.targets.length > 1 ? `${rule.targets.length} объектов` : rule.target}
</span>
{rule.groupId ? (
<span className="text-muted-foreground/80"> · группа</span>
<span className="text-muted-foreground"> · группа</span>
) : null}
{" · "}{rule.condition}
</p>
@@ -968,7 +968,7 @@ function ServerObjectCardPicker({
{loc ? (
<p className="text-[10px] text-muted-foreground/90 truncate">{loc}</p>
) : null}
<p className="text-[9px] text-muted-foreground/80">
<p className="text-[9px] text-muted-foreground">
{SERVER_ROLES_RU[s.type] ?? s.type}
</p>
</div>
@@ -1122,7 +1122,7 @@ function GreTunnelObjectCardPicker({
</span>
</div>
{r.comment ? (
<p className="text-[9px] text-muted-foreground/80 line-clamp-2 mt-1 pl-5 border-t border-border/30 pt-1 leading-snug">
<p className="text-[9px] text-muted-foreground line-clamp-2 mt-1 pl-5 border-t border-border/30 pt-1 leading-snug">
{r.comment}
</p>
) : null}
@@ -2559,7 +2559,7 @@ function AlertsContent() {
className={cn(
"text-xs px-3 py-1.5 rounded-full border font-medium transition-colors",
onlyActive
? "border-emerald-400 bg-emerald-500/10 text-emerald-600 dark:text-emerald-400"
? "border-emerald-400 bg-emerald-500/10 text-emerald-700 dark:text-emerald-400"
: "border-border bg-muted/40 text-muted-foreground hover:bg-muted",
)}>
Активных: {active}
@@ -2569,8 +2569,8 @@ function AlertsContent() {
<span className={cn(
"ml-auto text-xs px-3 py-1.5 rounded-full border flex items-center gap-1.5 font-medium",
tg.connected
? "border-emerald-400 bg-emerald-500/10 text-emerald-600 dark:text-emerald-400"
: "border-red-400 bg-red-500/10 text-red-600 dark:text-red-400",
? "border-emerald-400 bg-emerald-500/10 text-emerald-700 dark:text-emerald-400"
: "border-red-400 bg-red-500/10 text-red-700 dark:text-red-400",
)}>
<span className={cn("size-1.5 rounded-full", tg.connected ? "bg-emerald-500" : "bg-red-500")} />
{tg.connected ? "Telegram: Параметры заполнены" : "Telegram: Не настроен"}
+1 -1
View File
@@ -22,7 +22,7 @@ export default function MainLayout({ children }: { children: ReactNode }) {
К содержимому
</a>
<AppSidebar />
<SidebarInset id="main-content" className="h-svh overflow-hidden">
<SidebarInset tabIndex={-1} id="main-content" className="h-svh overflow-hidden">
{children}
</SidebarInset>
<CommandPalette />
+2 -2
View File
@@ -103,7 +103,7 @@ export default function SettingsPage() {
</span>
)}
{backendStatus === true && (
<span className="flex items-center gap-1.5 text-xs text-emerald-600 dark:text-emerald-400">
<span className="flex items-center gap-1.5 text-xs text-emerald-700 dark:text-emerald-400">
<CheckIcon className="size-3.5" />Доступен
</span>
)}
@@ -121,7 +121,7 @@ export default function SettingsPage() {
{/* hint when live but backend unreachable */}
{mode === "live" && backendStatus === false && (
<div className="flex items-start gap-2 py-3 text-xs text-amber-600 dark:text-amber-400">
<div className="flex items-start gap-2 py-3 text-xs text-amber-700 dark:text-amber-400">
<AlertCircleIcon className="size-3.5 mt-0.5 shrink-0" />
<span>Сервер недоступен. Последние полученные данные сохраняются; новые запросы могут завершаться ошибкой.</span>
</div>