- {/* Шлюз (gateway) — только при выбранном сервере */}
+ {/* Шлюз — только при выбранном сервере */}
{serverId && (
<>
-
- {gatewaysForServer.length > 0
- ? 'Выберите шлюз для привязки проверки (опционально). Можно искать по IP или интерфейсу ниже.'
- : 'Нет настроенных шлюзов для этого сервера. Проверка пойдёт без привязки к gateway.'}
+
+
+ Шлюз
+ {gatewaysForServer.length === 0 && (
+ нет настроенных
+ )}
{loading && !networkConfig ? (
Загрузка сетевых настроек…
) : (
<>
{gatewaysForServer.length > 0 && (
-
+
{gatewaysForServer.map((g) => {
const isSelected = gatewayRef === g.ip || gatewayRef === g.id;
const flag = g.country ? countryToFlag(g.country) : '';
- const subtitle = [g.country, g.provider].filter(Boolean).join(' · ');
return (
-
-
+
+
{flag || (g.ip ? g.ip.slice(0, 2) : '?')}
-
+
{g.ip || '—'}
- {(g.description || g.ip) && (
-
- {g.description || g.ip}
-
- )}
-
{subtitle || '—'}
+
+ {g.description || [g.country, g.provider].filter(Boolean).join(' · ') || '—'}
+
@@ -380,44 +372,30 @@ function MikrotikTools() {
gateways={gateways}
interfaces={interfaces}
serverId={serverId || null}
- placeholder="IP gateway или remote IP туннеля…"
+ placeholder="IP gateway или интерфейс…"
onSelectMeta={handleSelectGatewayMeta}
/>
-
- Текущий gateway:
- {gatewayRef || gatewayMeta?.ip || 'не выбран'}
-
>
)}
- {/* Популярные цели — быстрый выбор таргета по логотипу */}
-
- Популярные цели
-
- Клик по карточке подставит цель в поле «Домен или IP назначения».
-
-
+ {/* Быстрые цели — чипы */}
+
+
Цель:
{POPULAR_TARGETS.map(({ id: tid, name, target: tgt, Icon, color }) => {
const isSelected = target === tgt;
const bgClass = color === 'red' ? 'bg-red-lt' : color === 'blue' ? 'bg-blue-lt' : 'bg-orange-lt';
const textClass = color === 'red' ? 'text-red' : color === 'blue' ? 'text-blue' : 'text-orange';
return (
-
+
setTarget(tgt)}
+ title={tgt}
+ >
+
+ {name}
+
);
})}
@@ -426,14 +404,16 @@ function MikrotikTools() {
- {/* Режим и кнопки запуска — только при выбранном сервере */}
- {serverId && (
-
-
-
-
-
-
+ {/* Параметры + результаты */}
+
+
+
+
+
Параметры
+ {serverId && (
+ <>
+
-
-
-
-
-
+
+
+
Сбросить
-
- {running ? 'Выполнение…' : (mode === 'traceroute' ? 'Запустить трассировку' : 'Запустить ping')}
+
+ {running ? '…' : (mode === 'traceroute' ? 'Трассировка' : 'Ping')}
-
-
+ >
+ )}
-
- )}
-
- {/* Параметры проверки + результаты */}
-
-
-
-
-
Параметры проверки
-
-
+
{loading && !networkConfig ? (
-
Загрузка сетевых настроек…
+
Загрузка…
) : !serverId ? (
-
Выберите сервер выше — шлюз и параметры появятся там.
+
Выберите сервер выше.
) : (
- <>
-
-
Домен или IP назначения
-
-
-
-
+
+
+
Домен или IP
+
+
setTarget(e.target.value)}
/>
{gatewayMeta?.ip && (
- setTarget(gatewayMeta.ip)}
- >
+ setTarget(gatewayMeta.ip)}>
IP gateway
)}
-
- Можно трассировать как до внешнего домена, так и до IP gateway/туннеля.
-
-
{mode === 'traceroute' && (
-
-
Максимальное число хопов
-
setMaxHops(e.target.value)}
- />
+
+ Макс. хопов
+ setMaxHops(e.target.value)} />
)}
-
-
-
Формат адресов в результатах
-
- setUseDns(e.target.checked)}
- />
-
- {useDns ? 'DNS + IP (если доступны)' : 'Только IP адреса'}
-
-
-
- Для traceroute параметр также передаётся на MikroTik как
use-dns.
+
- >
+
)}
@@ -563,8 +491,8 @@ function MikrotikTools() {
{mode === 'ping' && (
-
-
+
+
Результаты ping
@@ -681,8 +609,8 @@ function MikrotikTools() {
)}
{mode === 'traceroute' && (
-