import $ from 'jquery'; import { JSONRPC } from '@/json-rpc.js'; // --- Глобальное состояние для страницы --- let availableResources = {}; let subscribedKeys = []; /** Загружает все необходимые данные для страницы */ async function loadSubscriptionData() { try { subscribedKeys = await JSONRPC.SubscriptionManager.getSubscribedResources(); availableResources = await JSONRPC.SubscriptionManager.getAvailableResources(); } catch (e) { console.error("Ошибка при загрузке данных подписок:", e); availableResources = {}; subscribedKeys = []; return false; } return true; } /** Рендеринг HTML списка */ function renderSubscriptionList() { const $listContainer = $('#subscription-list-container'); const availableKeys = Object.keys(availableResources).sort(); if (availableKeys.length === 0) { $listContainer.html('

Нет доступных ресурсов для подписки.

'); return; } let listHtml = availableKeys.map(key => { const details = availableResources[key]; const isChecked = subscribedKeys.includes(key); // 🔥 Обновлено: Используем description и меняем структуру const description = details.description || 'Нет описания'; // Формируем строку с деталями (теперь на новой строке) const detailText = ` Доменов: ${details.domains ? details.domains.length : 0}, ASN: ${details.ASN ? details.ASN.length : 0}, Подсетей: ${details.subnets ? details.subnets.length : 0} `; return `
  • `; }).join(''); const html = ` `; $listContainer.html(html); attachEventHandlers(); } /** Обработчик кнопки "Сохранить" (остается без изменений) */ function attachEventHandlers() { $('#save-subscriptions-btn').on('click', async function() { const $btn = $(this); const $message = $('#subscription-status-message'); $message.hide().removeClass('success-message').addClass('error-message'); const newSubscribedKeys = $('.subscription-checkbox:checked').map(function() { return $(this).val(); }).get(); $btn.prop('disabled', true).text('Сохранение...'); try { await JSONRPC.SubscriptionManager.setSubscribedResources(newSubscribedKeys); subscribedKeys = newSubscribedKeys; $message.text('Настройки подписок успешно сохранены!').addClass('success-message').show(); } catch (e) { console.error('Ошибка сохранения подписок:', e); $message.text('Ошибка при сохранении подписок.').show(); } finally { $btn.prop('disabled', false).text('Сохранить'); setTimeout(() => $message.fadeOut(), 5000); } }); } // ... (SubscriptionsPage, loadSubscriptionData остаются без изменений) ... export const SubscriptionsPage = { render: () => { return `

    Управление Подписками

    Загрузка доступных ресурсов...

    `; }, mount: async () => { const success = await loadSubscriptionData(); if (success) { renderSubscriptionList(); } else { $('#subscription-list-container').html('

    Не удалось загрузить данные. Проверьте соединение с сервером.

    '); } }, unmount: () => { availableResources = {}; subscribedKeys = []; } };