diff --git a/frontend/src/NetworkConfigManager.jsx b/frontend/src/NetworkConfigManager.jsx index 60ff4da..2efe412 100644 --- a/frontend/src/NetworkConfigManager.jsx +++ b/frontend/src/NetworkConfigManager.jsx @@ -1346,16 +1346,12 @@ function NetworkConfigManager() { } }; - // === Генерация кода MikroTik для настройки IP адресов интерфейсов === - const generateMikrotikInterfaceAddresses = async () => { - const interfacesWithBothServers = (config.tunnelInterfaces || []).filter(i => - i.serverId && i.serverId2 && i.localIp && i.remoteIp - ); - - if (interfacesWithBothServers.length === 0) { + // === Вспомогательная функция: построение блоков MikroTik для списка интерфейсов === + const buildMikrotikInterfaceBlocks = async (interfacesWithBothServers) => { + if (!interfacesWithBothServers || interfacesWithBothServers.length === 0) { return []; } - + // Загружаем пароли для интерфейсов с IPSec const passwordIds = [...new Set(interfacesWithBothServers .filter(i => i.ipsecPasswordId && i.ipsecPasswordId.trim() !== '') @@ -1504,6 +1500,24 @@ function NetworkConfigManager() { return blocks; }; + // === Генерация кода MikroTik для настройки IP адресов интерфейсов (всех) === + const generateMikrotikInterfaceAddresses = async () => { + const interfacesWithBothServers = (config.tunnelInterfaces || []).filter(i => + i.serverId && i.serverId2 && i.localIp && i.remoteIp + ); + + return buildMikrotikInterfaceBlocks(interfacesWithBothServers); + }; + + // === Генерация кода MikroTik только для выбранных интерфейсов === + const generateMikrotikInterfaceAddressesForSelection = async (selectedInterfaces) => { + const interfacesWithBothServers = (selectedInterfaces || []).filter(i => + i.serverId && i.serverId2 && i.localIp && i.remoteIp + ); + + return buildMikrotikInterfaceBlocks(interfacesWithBothServers); + }; + // === Генерация кода MikroTik для рекурсивных маршрутов === const generateMikrotikRecursiveRoutes = async () => { const recursiveGateways = (config.gateways || []).filter(gw => gw.type === 'recursive'); @@ -1648,6 +1662,30 @@ function NetworkConfigManager() { } }; + // === Генерация кода MikroTik только для одного интерфейса === + const handleGenerateMikrotikCodeForInterface = async (iface) => { + if (!iface) { + notify.error('Интерфейс не найден'); + return; + } + + setLoading(true); + try { + const blocks = await generateMikrotikInterfaceAddressesForSelection([iface]); + if (!blocks || blocks.length === 0) { + notify.error('Нет данных для генерации кода MikroTik для этого интерфейса'); + return; + } + setGeneratedMikrotikCode(blocks); + setMikrotikCodeModalOpen(true); + } catch (error) { + console.error('Error generating MikroTik code for interface:', error); + notify.error('Ошибка при генерации кода MikroTik для этого интерфейса'); + } finally { + setLoading(false); + } + }; + // === Копирование кода MikroTik === const handleCopyMikrotikCode = async (codeToCopy) => { if (!codeToCopy) { @@ -2160,6 +2198,13 @@ function NetworkConfigManager() { {/* Правая часть: действия */}
+