From 549c69511740f702c20911fad72ac4bf4ee361da Mon Sep 17 00:00:00 2001 From: shats Date: Tue, 20 Jan 2026 14:56:42 +0700 Subject: [PATCH] =?UTF-8?q?feat(FilterManager):=20=D0=A1=D0=83=D0=A0=D1=91?= =?UTF-8?q?=D0=A0=D0=85=D0=A1=E2=80=A6=D0=A1=D0=82=D0=A0=D1=95=D0=A0=D0=85?= =?UTF-8?q?=D0=A0=D1=91=D0=A0=C2=B7=D0=A0=C2=B0=D0=A1=E2=80=A0=D0=A0=D1=91?= =?UTF-8?q?=D0=A1=D0=8F=20=D0=A1=D0=83=20jumphost'=D0=A0=C2=B0=D0=A0=D1=98?= =?UTF-8?q?=D0=A0=D1=91=20=D0=A0=D1=91=D0=A0=C2=B7=20=D0=A1=D0=82=D0=A0?= =?UTF-8?q?=C2=B0=D0=A0=C2=B7=D0=A0=D2=91=D0=A0=C2=B5=D0=A0=C2=BB=D0=A0?= =?UTF-8?q?=C2=B0=20=D0=A0=D0=8E=D0=A0=C2=B5=D0=A1=D0=82=D0=A0=D0=86=D0=A0?= =?UTF-8?q?=C2=B5=D0=A1=D0=82=D0=A1=E2=80=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/FilterManager.jsx | 74 +++++++++++++++++++++------------- 1 file changed, 47 insertions(+), 27 deletions(-) diff --git a/frontend/src/FilterManager.jsx b/frontend/src/FilterManager.jsx index c96622b..db69099 100644 --- a/frontend/src/FilterManager.jsx +++ b/frontend/src/FilterManager.jsx @@ -1,4 +1,5 @@ import { useState, useEffect, useRef } from 'react'; +import { Link } from 'react-router-dom'; import api from './lib/api.js'; import ConfirmDialog from './components/ConfirmDialog.jsx'; import FormModal from './components/FormModal.jsx'; @@ -716,14 +717,32 @@ function FilterManager() { }; // Функции для управления серверами + // Загружаем jumphost'ы из раздела "Серверы" (/api/servers) const fetchServers = async () => { try { - const response = await api.get(`/server-configs`); - const payload = Array.isArray(response.data) ? response.data : []; - setServers(payload.map(s => ({ ...s, gateways: normalizeGateways(s.gateways, s.name) }))); + const response = await api.get(`/servers`); + const allServers = Array.isArray(response.data) ? response.data : []; + + // Фильтруем только jumphost'ы (не exit-ноды) + const jumphosts = allServers + .filter(s => s.type !== 'exit') + .map(s => ({ + id: s.id || s.ip, // Используем id или ip как идентификатор + name: s.dns?.split('.')[0] || s.ip, // Короткое имя из DNS или IP + fullName: s.dns || s.ip, + description: `${s.provider || ''} ${s.country || ''}`.trim(), + enabled: true, + ip: s.ip, + dns: s.dns, + country: s.country, + provider: s.provider, + tunnel: s.tunnel, + gateways: normalizeGateways(s.gateways, s.dns?.split('.')[0] || s.ip) + })); + + setServers(jumphosts); } catch (error) { console.error('Error fetching servers:', error); - // Если файл не существует, создаем пустой массив setServers([]); } }; @@ -1435,13 +1454,13 @@ function FilterManager() { )}
- + + Управление серверами +
@@ -1450,18 +1469,18 @@ function FilterManager() {
-

Нет серверов

+

Нет jumphost серверов

- Создайте первый сервер для работы с фильтрами + Добавьте серверы типа JUMP в разделе "Серверы"

- + + Перейти к серверам +
) : ( @@ -2121,17 +2140,18 @@ function FilterManager() { title="Управление серверами" size="xl" > -
- + + Управление серверами +
{servers.length === 0 ? ( @@ -2139,9 +2159,9 @@ function FilterManager() {
-

Нет серверов

+

Нет jumphost серверов

- Создайте первый сервер для работы с фильтрами + Добавьте серверы типа JUMP в разделе "Серверы"

) : (