From 50c1c093430b5c301b96c2f355fd629f84868abc Mon Sep 17 00:00:00 2001 From: Falknat Date: Mon, 2 Feb 2026 03:59:59 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D1=80=D0=BE=D0=BA=D1=81=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Возможность удаление прокси серверов --- Backend/admin/frontend/assets/js/main.js | 55 ++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/Backend/admin/frontend/assets/js/main.js b/Backend/admin/frontend/assets/js/main.js index c0828ad..4c36c09 100644 --- a/Backend/admin/frontend/assets/js/main.js +++ b/Backend/admin/frontend/assets/js/main.js @@ -217,6 +217,7 @@ class App { removeAliasTag: (btn) => btn.parentElement.remove(), saveModalData: async () => await this.saveModalData(), deleteSiteConfirm: async () => await this.deleteSiteConfirm(), + deleteProxyConfirm: async () => await this.deleteProxyConfirm(), // Тестовые функции editTestSite: (i) => { @@ -402,7 +403,7 @@ class App { }); }, 50); - this.removeDeleteButtonFromModal(); + this.addDeleteButtonToModal(); } // Установить статус в модальном окне @@ -527,15 +528,20 @@ class App { const oldDeleteBtn = footer.querySelector('#modalDeleteBtn'); if (oldDeleteBtn) oldDeleteBtn.remove(); + // Определяем текст и обработчик в зависимости от типа редактирования + const isProxy = window.currentEditType === 'proxy'; + const buttonText = isProxy ? 'Удалить прокси' : 'Удалить сайт'; + const onClickHandler = isProxy ? () => this.deleteProxyConfirm() : () => this.deleteSiteConfirm(); + // Создаём кнопку удаления const deleteBtn = document.createElement('button'); deleteBtn.className = 'action-btn delete-btn'; deleteBtn.id = 'modalDeleteBtn'; deleteBtn.innerHTML = ` - Удалить сайт + ${buttonText} `; - deleteBtn.onclick = () => this.deleteSiteConfirm(); + deleteBtn.onclick = onClickHandler; // Вставляем перед кнопкой "Отмена" const cancelBtn = footer.querySelector('#modalCancelBtn'); @@ -592,6 +598,49 @@ class App { } } + // Подтверждение удаления прокси + async deleteProxyConfirm() { + const index = window.currentEditIndex; + const proxy = this.proxyManager.proxiesData[index]; + if (!proxy) return; + + const confirmed = confirm( + `⚠️ ВНИМАНИЕ!\n\n` + + `Вы действительно хотите удалить прокси "${proxy.external_domain}"?\n\n` + + `Будет удалена запись в конфигурации.\n\n` + + `Это действие НЕОБРАТИМО!` + ); + + if (!confirmed) return; + + try { + notification.show('Удаление прокси...', 'info', 1000); + + const config = await configAPI.getConfig(); + + if (config.Proxy_Service && config.Proxy_Service.length > index) { + config.Proxy_Service.splice(index, 1); + } + + const result = await configAPI.saveConfig(JSON.stringify(config, null, 4)); + + if (result.startsWith('Error')) { + notification.error(result, 3000); + return; + } + + notification.success('✅ Прокси успешно удалён!', 1500); + await this.restartHttpServices(); + notification.success('🚀 Серверы перезапущены!', 1000); + + modal.close(); + await this.proxyManager.load(); + + } catch (error) { + notification.error('Ошибка: ' + error.message, 3000); + } + } + // ====== Cert Manager ====== certManagerHost = null;