Files
vServer/Backend/admin/frontend/assets/js/ui/navigation.js
Falknat 4b13923375 Добавление и Удаление сайта
Backend (Go):
- Добавлен полный функционал создания сайтов
- Добавлен функционал удаления сайтов
- Новые API методы в admin.go:
- Добавлен шаблон стартовой страницы
- Добавлена функция DecodeBase64

Исправления критических ошибок:
- Исправлена работа wildcard алиасов (*.domain.com) в handler.go
- Исправлены ошибки "файл не найден" при создании файлов

Frontend (JavaScript + HTML + CSS):
- Добавлена страница создания сайта
- Добавлена кнопка "Удалить сайт" в редактировании
- Мелкие доработки стилей

Build:
- Обновлён build_admin.ps1 - добавлен шаг генерации биндингов (wails generate module)

Fixes:
- #fix Wildcard алиасы (*.domain.com) теперь работают корректно
- #fix Удалён порт из host при проверке алиасов
- #fix Приоритет точных доменов над wildcard
- #fix Ошибки "файл не найден" при создании сайтов/vAccess
- #fix Секция добавления сайта теперь скрывается при навигации
2025-11-14 14:18:26 +07:00

69 lines
2.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ============================================
Navigation
Управление навигацией
============================================ */
import { $, $$, hide, show, removeClass, addClass } from '../utils/dom.js';
/**
* Класс для управления навигацией
*/
export class Navigation {
constructor() {
this.navItems = $$('.nav-item');
this.sections = {
services: $('sectionServices'),
sites: $('sectionSites'),
proxy: $('sectionProxy'),
settings: $('sectionSettings'),
vaccess: $('sectionVAccessEditor'),
addSite: $('sectionAddSite')
};
this.init();
}
init() {
this.navItems.forEach((item, index) => {
item.addEventListener('click', () => this.navigate(index));
});
}
navigate(index) {
// Убираем active со всех навигационных элементов
this.navItems.forEach(nav => removeClass(nav, 'active'));
addClass(this.navItems[index], 'active');
// Скрываем все секции
this.hideAllSections();
// Показываем нужные секции
if (index === 0) {
// Главная - всё кроме настроек
show(this.sections.services);
show(this.sections.sites);
show(this.sections.proxy);
} else if (index === 3) {
// Настройки
show(this.sections.settings);
// Загружаем конфигурацию при открытии
if (window.loadConfig) {
window.loadConfig();
}
}
}
hideAllSections() {
Object.values(this.sections).forEach(section => {
if (section) hide(section);
});
}
showDashboard() {
this.hideAllSections();
show(this.sections.services);
show(this.sections.sites);
show(this.sections.proxy);
}
}