# Easy Switch - Быстрое переключение шлюзов ## Описание Easy Switch - это новая страница для быстрого переключения шлюзов (gateways) внутри серверов на основе communities из фильтров. Интерфейс вдохновлен мобильными VPN приложениями и обеспечивает удобный способ управления маршрутизацией. ## Особенности ### 1. **Визуальный интерфейс** - Компактные карточки шлюзов (уменьшенный размер) - Карточки с флагами стран - Отображение пинга и протокола подключения - Метка "Fast" для самого быстрого шлюза в группе - Активный шлюз выделен синим цветом ### 2. **Группировка по Серверам** - Сервера группируются в отдельные блоки - Каждый сервер показывает свои communities - Для каждого community на сервере можно выбрать активный шлюз **этого сервера** - Переключение происходит между шлюзами **внутри одного сервера** - Отображается количество communities на каждом сервере ### 3. **Поиск и фильтрация** - Поиск по community, описанию или имени шлюза - Фильтрация по правилам - Вкладки "Прокси" и "Провайдер прокси" ### 4. **Управление изменениями** - Кнопка "Применить изменения" появляется при выборе нового шлюза - Возможность обновить данные с сервера - Отслеживание изменений ## Структура данных ### Источники данных 1. **Server Configs** (`/api/server-configs`) - Список серверов с настройками - ID сервера для загрузки фильтров 2. **Server Filters** (`/api/server-filters/{serverId}`) - Фильтры для каждого сервера - Community и gateway для каждого фильтра 3. **Inventory Servers** (`/api/servers`) - Метаданные серверов (страна, провайдер) - Используется для отображения флагов ### Формат данных фильтра ```json { "community": "65001:100", "gateway": "SWE-HIPHOST", "description": "Стриминг сервисы" } ``` ### Структура данных в приложении После загрузки данные организованы следующим образом: ```javascript servers = [ { id: "server-001", name: "SWE-HIPHOST", description: "Шведский сервер", communities: [ { community: "65001:100", description: "Стриминг сервисы", gateways: [ { name: "gateway1" }, { name: "gateway2" }, { name: "gateway3" } ] }, // ... другие communities ] }, // ... другие серверы ] ``` Активные шлюзы хранятся в формате: ```javascript activeGateways = { "server-001:65001:100": "gateway1", "server-002:65001:100": "gateway4", // ключ: "{serverId}:{community}", значение: "{gatewayName}" } ``` ## Интерфейс ### Заголовок - Название страницы "Easy Switch" - Кнопка "Обновить" для перезагрузки данных - Кнопка "Применить изменения" (появляется при наличии изменений) ### Вкладки - **Прокси** - основной список communities с шлюзами - **Провайдер прокси** - дополнительная вкладка (в разработке) ### Панель фильтров - Dropdown "Правило" - фильтрация по типу правила - Поле поиска - поиск по ключевым словам - Кнопки инструментов (настройки, быстрые действия) ### Блоки серверов Каждый сервер отображается в отдельной карточке с: - 🏴 **Флаг страны** сервера - 🖥️ **Иконка сервера** - **Название** сервера - **Описание** сервера - **Количество communities** на этом сервере ### Карточки шлюзов Каждая карточка шлюза (компактная) содержит: - ⚡ **Метка Fast** (для первого шлюза в списке) - **Название** шлюза - **Протокол** подключения (vless и т.д.) - **Пинг** в миллисекундах - ✓ **Галочка** для активного шлюза Карточки имеют меньший размер (col-6 col-sm-4 col-md-3 col-lg-2) для компактности. ### Состояния карточки шлюза - **Неактивная** - белый фон, серая рамка - **Активная** - синий фон, белый текст, тень - **Hover** - подъем карточки на 1px, легкая тень ## Использование ### Открытие страницы Навигация: `Управление → Easy Switch` URL: `/easy-switch` ### Переключение шлюза 1. Найдите нужный **сервер** в списке 2. В этом сервере найдите нужный **community** 3. Нажмите на карточку желаемого **шлюза этого сервера** 4. Карточка станет синей (активной) 5. Нажмите "Применить изменения" для сохранения **Важно:** Переключение происходит между шлюзами **внутри одного сервера**. Каждый сервер имеет свой набор шлюзов для каждого community. ### Поиск Введите в поле поиска: - Название сервера (например, `SWE-HIPHOST`) - Номер community (например, `65001:100`) - Описание (например, `Стриминг`) - Название шлюза (например, `gateway1`) ## Технические детали ### Компоненты - **EasySwitchManager.jsx** - главный компонент страницы ### Зависимости - React hooks (useState, useEffect) - Tabler Icons для иконок - API клиент для загрузки данных ### API Endpoints ```javascript GET /api/server-configs // Список серверов GET /api/server-filters/{id} // Фильтры сервера GET /api/servers // Метаданные серверов ``` ### Состояния ```javascript - loading: boolean // Загрузка данных - error: string // Текст ошибки - servers: [] // Список серверов с communities и gateways - inventoryServers: [] // Метаданные серверов (флаги, провайдеры) - activeGateways: {} // Активные шлюзы (ключ: "serverId:community") - hasChanges: boolean // Наличие изменений - searchQuery: string // Поисковый запрос - selectedRule: string // Выбранное правило фильтрации - activeTab: string // Активная вкладка (proxies/providers) ``` ## Важные изменения (v2) ### ✅ Исправлено в версии 2.0 - **Все communities отображаются для всех серверов** - больше нет различий в количестве communities между серверами - **Загрузка названий communities** из справочника `/api/communities` - **Все gateways сервера** отображаются для каждого community, а не только те, что настроены в filters - **Бейдж "настроен"** показывает, для каких communities уже есть фильтры - **Активный gateway берется из filters**, если настроен, иначе выбирается первый ### Логика работы v2 1. Загружается справочник communities → **все одинаковые для всех серверов** 2. Для каждого сервера загружаются его gateways (из `/api/servers` или `server-configs`) 3. Для каждого community показываются **все** gateways этого сервера 4. Из filters берется информация только об **активном** gateway для данного community ## Roadmap ### Планируется добавить - [ ] Реальные метрики пинга (интеграция с мониторингом) - [ ] Сохранение изменений на сервер - [ ] История переключений - [ ] Групповое переключение - [ ] Автоматический выбор fastest - [ ] Уведомления о недоступных серверах - [ ] Статистика использования - [ ] Экспорт конфигурации ### В разработке - [ ] Вкладка "Провайдер прокси" - [ ] Настройки отображения - [ ] Быстрые действия ## Отладка ### Проверка данных в консоли ```javascript // В DevTools Console console.log('Active Gateways:', activeGateways); console.log('Communities:', communities); console.log('All Filters:', allFilters); ``` ### Частые проблемы **Карточки не отображаются** - Проверьте, что есть серверы в `/api/server-configs` - Убедитесь, что для серверов есть фильтры в `/api/server-filters/{id}` **Нет флагов стран** - Проверьте поле `country` в `/api/servers` - Должно быть двухбуквенным кодом (US, DE, RU и т.д.) **Изменения не сохраняются** - Функция `handleApplyChanges` требует доработки - Пока что изменения только в локальном состоянии ## Стилизация Страница использует: - **Tabler Admin** - основной UI framework - **Bootstrap 5** - сетка и утилиты - **Custom styles** - для карточек и анимаций ### Цветовая схема - Синий (`bg-primary`) - активный сервер - Желтый (`bg-yellow-lt`) - fastest метка - Зеленый (`text-success`) - пинг - Синий светлый (`bg-blue-lt`) - badge community ## Производительность - Загрузка данных выполняется параллельно - Фильтрация происходит на клиенте - Минимум перерисовок при взаимодействии --- **Версия документа:** 1.0 **Дата создания:** 2025-12-06 **Автор:** AI Assistant