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 Секция добавления сайта теперь скрывается при навигации
69 lines
2.0 KiB
JavaScript
69 lines
2.0 KiB
JavaScript
/* ============================================
|
||
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);
|
||
}
|
||
}
|
||
|