From 0cfeaec417568774aa1c549fb63cb9cfa9525f4d Mon Sep 17 00:00:00 2001 From: shats Date: Thu, 22 Jan 2026 22:14:19 +0700 Subject: [PATCH] feat(NetworkConfigManager): normalize interface names and descriptions to uppercase for consistency; enhance data handling during interface creation and updates --- frontend/src/NetworkConfigManager.jsx | 36 ++++++++++++++++----------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/frontend/src/NetworkConfigManager.jsx b/frontend/src/NetworkConfigManager.jsx index 77d45df..3e72401 100644 --- a/frontend/src/NetworkConfigManager.jsx +++ b/frontend/src/NetworkConfigManager.jsx @@ -415,9 +415,10 @@ function NetworkConfigManager() { return; } - // Очищаем пустые parentGateways и удаляем старое поле parentGatewayId + // Преобразуем description в верхний регистр const cleanedData = { ...gatewayData, + description: gatewayData.description ? gatewayData.description.toUpperCase() : '', parentGateways: gatewayData.type === 'recursive' ? (gatewayData.parentGateways || []).filter(p => p && p.id) : [], @@ -505,7 +506,7 @@ function NetworkConfigManager() { } const prefixPart = prefix ? `${prefix}-` : ''; - return `${prefixPart}${name}`; + return `${prefixPart}${name}`.toUpperCase(); }; // === Создание интерфейса из шаблона === @@ -551,8 +552,8 @@ function NetworkConfigManager() { // Генерируем имена интерфейсов const baseName1 = generateInterfaceName(server1, server2, templateType, templateNamePrefix); const baseName2 = generateInterfaceName(server2, server1, templateType, templateNamePrefix); - const name1 = pair.name1?.trim() || baseName1; - const name2 = pair.name2?.trim() || baseName2; + const name1 = (pair.name1?.trim() || baseName1).toUpperCase(); + const name2 = (pair.name2?.trim() || baseName2).toUpperCase(); // Используем настройки из пары или глобальные const pairIpsecPasswordId = pair.ipsecPasswordId || templateIpsecPasswordId; @@ -657,8 +658,8 @@ function NetworkConfigManager() { } // Генерируем имена интерфейсов (используем опциональные имена если указаны) - const name1 = templateName1.trim() || generateInterfaceName(server1, server2, templateType, templateNamePrefix); - const name2 = templateName2.trim() || generateInterfaceName(server2, server1, templateType, templateNamePrefix); + const name1 = (templateName1.trim() || generateInterfaceName(server1, server2, templateType, templateNamePrefix)).toUpperCase(); + const name2 = (templateName2.trim() || generateInterfaceName(server2, server1, templateType, templateNamePrefix)).toUpperCase(); // Генерируем IP адреса const localIp = generateFreePrivateIp(null, false, null, templateIpPoolId || null); @@ -1116,10 +1117,17 @@ function NetworkConfigManager() { }, [ipRegistry, ipRegistrySearch]); const handleSaveInterface = (ifaceData) => { + // Преобразуем имена интерфейсов в верхний регистр + const normalizedData = { + ...ifaceData, + name: ifaceData.name ? ifaceData.name.toUpperCase() : '', + name2: ifaceData.name2 ? ifaceData.name2.toUpperCase() : '', + }; + // Валидация: проверка пересечений IP адресов const conflicts = checkInterfaceIpConflict( - ifaceData, - interfaceModalMode === 'edit' ? ifaceData.id : null + normalizedData, + interfaceModalMode === 'edit' ? normalizedData.id : null ); if (conflicts.length > 0) { @@ -1134,13 +1142,13 @@ function NetworkConfigManager() { if (interfaceModalMode === 'add') { setConfig(prev => ({ ...prev, - tunnelInterfaces: [...prev.tunnelInterfaces, ifaceData], + tunnelInterfaces: [...prev.tunnelInterfaces, normalizedData], })); notify.success('Интерфейс добавлен'); } else { setConfig(prev => ({ ...prev, - tunnelInterfaces: prev.tunnelInterfaces.map(i => i.id === ifaceData.id ? ifaceData : i), + tunnelInterfaces: prev.tunnelInterfaces.map(i => i.id === normalizedData.id ? normalizedData : i), })); notify.success('Интерфейс обновлён'); } @@ -3643,8 +3651,8 @@ function NetworkConfigManager() { const autoName1 = generateInterfaceName(server1, server2, templateType, templateNamePrefix); const autoName2 = generateInterfaceName(server2, server1, templateType, templateNamePrefix); - const previewName1 = templateName1.trim() || autoName1; - const previewName2 = templateName2.trim() || autoName2; + const previewName1 = (templateName1.trim() || autoName1).toUpperCase(); + const previewName2 = (templateName2.trim() || autoName2).toUpperCase(); const previewLocalIp = generateFreePrivateIp(null, false, null, templateIpPoolId || null); const previewRemoteIp = previewLocalIp ? generateFreePrivateIp(null, true, previewLocalIp, templateIpPoolId || null) : null; @@ -3701,8 +3709,8 @@ function NetworkConfigManager() { const baseName1 = generateInterfaceName(server1, server2, templateType, templateNamePrefix); const baseName2 = generateInterfaceName(server2, server1, templateType, templateNamePrefix); - const previewName1 = pair.name1?.trim() || baseName1; - const previewName2 = pair.name2?.trim() || baseName2; + const previewName1 = (pair.name1?.trim() || baseName1).toUpperCase(); + const previewName2 = (pair.name2?.trim() || baseName2).toUpperCase(); // Используем настройки из пары или глобальные для предпросмотра const pairIpPoolId = pair.ipPoolId || templateIpPoolId;