diff --git a/frontend/src/FilterManager.jsx b/frontend/src/FilterManager.jsx index 4215ae0..49a72aa 100644 --- a/frontend/src/FilterManager.jsx +++ b/frontend/src/FilterManager.jsx @@ -136,18 +136,14 @@ function FilterManager() { const handleSaveServerConfig = async (serverId) => { try { - console.log('Starting to save server config for serverId:', serverId); const config = await generateMikrotikConfig(); - console.log('Generated config:', config); - // Проверяем, что конфигурация не пустая if (!config || config === '// Сначала выберите сервер' || config === '// Нет фильтров для генерации конфигурации') { setError('Нет данных для сохранения конфигурации. Убедитесь, что выбран сервер и есть фильтры.'); return; } - console.log('Sending config to save:', { config }); await axios.post(`${API_URL}/server-configs/${serverId}`, { config }); setSuccess(`Конфигурация для сервера "${servers.find(s => s.id === serverId)?.name}" сохранена!`); @@ -187,7 +183,7 @@ function FilterManager() { } const confirm = window.confirm( - `Скопировать конфигурацию с сервера "${sourceServer.name}" на ${targetServers.length} сервер(ов)?\n\n` + + `Скопировать конфигурацию и фильтры с сервера "${sourceServer.name}" на ${targetServers.length} сервер(ов)?\n\n` + `Целевые серверы: ${targetServers.map(s => s.name).join(', ')}` ); @@ -195,9 +191,13 @@ function FilterManager() { setLoading(true); try { + // Получаем фильтры исходного сервера + const sourceFiltersResponse = await axios.get(`${API_URL}/server-filters/${sourceServerId}`); + const sourceFilters = sourceFiltersResponse.data; + // Получаем конфигурацию исходного сервера - const sourceResponse = await axios.get(`${API_URL}/server-configs/${sourceServerId}`); - const sourceConfig = sourceResponse.data.config; + const sourceConfigResponse = await axios.get(`${API_URL}/server-configs/${sourceServerId}`); + const sourceConfig = sourceConfigResponse.data.config; if (!sourceConfig || sourceConfig === '// Конфигурация не найдена') { setError(`У сервера "${sourceServer.name}" нет сохраненной конфигурации.`); @@ -206,13 +206,18 @@ function FilterManager() { const results = []; - // Копируем конфигурацию на все целевые серверы + // Копируем фильтры и конфигурацию на все целевые серверы for (const targetServer of targetServers) { try { + // Копируем фильтры + await axios.post(`${API_URL}/server-filters/${targetServer.id}`, { filters: sourceFilters }); + + // Копируем конфигурацию await axios.post(`${API_URL}/server-configs/${targetServer.id}`, { config: sourceConfig }); + results.push({ server: targetServer.name, status: 'success' }); } catch (error) { - console.error(`Error copying config to ${targetServer.name}:`, error); + console.error(`Error copying to ${targetServer.name}:`, error); results.push({ server: targetServer.name, status: 'error', error: error.message }); } } @@ -221,7 +226,12 @@ function FilterManager() { const errorCount = results.filter(r => r.status === 'error').length; if (errorCount === 0) { - setSuccess(`Конфигурация успешно скопирована на ${successCount} сервер(ов)!`); + setSuccess(`Конфигурация и фильтры успешно скопированы на ${successCount} сервер(ов)!`); + + // Если текущий выбранный сервер был в списке копируемых, обновляем его фильтры + if (selectedServer && targetServers.some(s => s.id === selectedServer.id)) { + await fetchServerFilters(selectedServer.id); + } } else { setError( `Копирование завершено с ошибками:\n` + @@ -251,20 +261,25 @@ function FilterManager() { }; const handleDeployToAllServers = async () => { - if (servers.length === 0) { - setError('Нет серверов для развертывания.'); + if (!selectedServer) { + setError('Сначала выберите сервер с фильтрами для развертывания.'); return; } - const enabledServers = servers.filter(s => s.enabled); + if (serverFilters.length === 0) { + setError('У выбранного сервера нет фильтров для развертывания.'); + return; + } + + const enabledServers = servers.filter(s => s.enabled && s.id !== selectedServer.id); if (enabledServers.length === 0) { - setError('Нет включенных серверов для развертывания.'); + setError('Нет других включенных серверов для развертывания.'); return; } const confirm = window.confirm( - `Вы уверены, что хотите развернуть конфигурацию на ${enabledServers.length} сервер(ов)?\n\n` + - `Серверы: ${enabledServers.map(s => s.name).join(', ')}` + `Развернуть фильтры и конфигурацию с сервера "${selectedServer.name}" на ${enabledServers.length} сервер(ов)?\n\n` + + `Целевые серверы: ${enabledServers.map(s => s.name).join(', ')}` ); if (!confirm) return; @@ -276,7 +291,12 @@ function FilterManager() { for (const server of enabledServers) { try { + // Копируем фильтры + await axios.post(`${API_URL}/server-filters/${server.id}`, { filters: serverFilters }); + + // Копируем конфигурацию await axios.post(`${API_URL}/server-configs/${server.id}`, { config }); + results.push({ server: server.name, status: 'success' }); } catch (error) { console.error(`Error deploying to ${server.name}:`, error); @@ -288,7 +308,7 @@ function FilterManager() { const errorCount = results.filter(r => r.status === 'error').length; if (errorCount === 0) { - setSuccess(`Конфигурация успешно развернута на ${successCount} сервер(ов)!`); + setSuccess(`Фильтры и конфигурация успешно развернуты на ${successCount} сервер(ов)!`); } else { setError( `Развертывание завершено с ошибками:\n` + @@ -396,15 +416,10 @@ function FilterManager() { } try { - console.log('Sending filters to generate config:', serverFilters); - console.log('Making request to:', `${API_URL}/server-filters/generate-config`); const response = await axios.post(`${API_URL}/server-filters/generate-config`, { filters: serverFilters }); - console.log('Response from generate-config:', response.data); - console.log('Response status:', response.status); - if (response.data && response.data.config) { return response.data.config; } else {