diff --git a/frontend/src/NetworkConfigManager.jsx b/frontend/src/NetworkConfigManager.jsx index c607e24..91886e7 100644 --- a/frontend/src/NetworkConfigManager.jsx +++ b/frontend/src/NetworkConfigManager.jsx @@ -552,7 +552,31 @@ function NetworkConfigManager() { // === Копирование кода MikroTik === const handleCopyMikrotikCode = async () => { - await copyToClipboard(generatedMikrotikCode); + try { + if (navigator.clipboard && navigator.clipboard.writeText) { + await navigator.clipboard.writeText(generatedMikrotikCode); + notify.success('Код скопирован в буфер обмена!'); + } else { + // Fallback для старых браузеров + const textArea = document.createElement('textarea'); + textArea.value = generatedMikrotikCode; + textArea.style.position = 'fixed'; + textArea.style.left = '-999999px'; + document.body.appendChild(textArea); + textArea.focus(); + textArea.select(); + try { + document.execCommand('copy'); + notify.success('Код скопирован в буфер обмена!'); + } catch (err) { + notify.error('Не удалось скопировать код'); + } + document.body.removeChild(textArea); + } + } catch (err) { + console.error('Error copying to clipboard:', err); + notify.error('Не удалось скопировать код'); + } }; // === Получение цвета провайдера === @@ -1621,6 +1645,8 @@ function NetworkConfigManager() { show={mikrotikCodeModalOpen} config={generatedMikrotikCode} mode="advanced" + title="Предварительный просмотр конфигурации" + description="Конфигурация MikroTik RouterOS для рекурсивных маршрутов" onClose={() => setMikrotikCodeModalOpen(false)} onCopy={handleCopyMikrotikCode} /> diff --git a/frontend/src/components/filter/PreviewConfigModal.jsx b/frontend/src/components/filter/PreviewConfigModal.jsx index e197463..379c03f 100644 --- a/frontend/src/components/filter/PreviewConfigModal.jsx +++ b/frontend/src/components/filter/PreviewConfigModal.jsx @@ -1,12 +1,13 @@ -import { IconFilter, IconCopy } from '@tabler/icons-react'; +import { IconFilter, IconCopy, IconEye } from '@tabler/icons-react'; /** * Модальное окно предварительного просмотра конфигурации */ -function PreviewConfigModal({ show, config, mode, onClose, onCopy }) { +function PreviewConfigModal({ show, config, mode, onClose, onCopy, title, description }) { if (!show) return null; const getModalTitle = () => { + if (title) return title; if (mode === 'simple') { return 'Предварительный просмотр конфигурации MikroTik (упрощённый режим)'; } else if (mode === 'advanced') { @@ -25,7 +26,16 @@ function PreviewConfigModal({ show, config, mode, onClose, onCopy }) { }; const getConfigInfo = () => { - if (config.includes('// Сначала выберите сервер') || config.includes('// Нет фильтров для генерации конфигурации')) { + if (description) { + return ( +
+ + {description} +
+ ); + } + + if (config.includes('// Сначала выберите сервер') || config.includes('// Нет фильтров для генерации конфигурации') || config.includes('// Нет рекурсивных gateway')) { return
Нет данных для генерации конфигурации
; } @@ -42,9 +52,18 @@ function PreviewConfigModal({ show, config, mode, onClose, onCopy }) { ); } - return null; + return ( +
+ + Конфигурация MikroTik RouterOS для применения фильтров +
+ ); }; + const isConfigEmpty = config.includes('// Сначала выберите сервер') || + config.includes('// Нет фильтров для генерации конфигурации') || + config.includes('// Нет рекурсивных gateway'); + return (
@@ -58,26 +77,33 @@ function PreviewConfigModal({ show, config, mode, onClose, onCopy }) {
{getConfigInfo()} -
-
- -
-
-
+            
               {config}
             
+ +
+

Инструкция по применению:

+
    +
  1. Скопируйте конфигурацию в буфер обмена
  2. +
  3. Подключитесь к MikroTik через SSH или Winbox
  4. +
  5. Вставьте конфигурацию в терминал
  6. +
  7. Проверьте применение командой: /routing filter print или /ip route print
  8. +
+
+