Исправление путей к статическим файлам
- Перенос trips-calendar.css в /static/css/ - Перенос upcoming-trips.js и trip-form-loader.js в /static/js/ - Удаление файлов из неправильной папки /public/
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
* Динамическое заполнение dropdown формы поездками из upcoming-trips.json
|
||||
* Синхронизировано с Telegram Bot управлением
|
||||
*/
|
||||
|
||||
class TripFormLoader {
|
||||
constructor(selectId = 'trip_period', jsonPath = '/data/upcoming-trips.json') {
|
||||
this.selectId = selectId;
|
||||
this.jsonPath = jsonPath;
|
||||
}
|
||||
|
||||
async loadTripsData() {
|
||||
try {
|
||||
const response = await fetch(this.jsonPath);
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! status: ${response.status}`);
|
||||
}
|
||||
return await response.json();
|
||||
} catch (error) {
|
||||
console.error('Ошибка загрузки данных поездок для формы:', error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async populateTripsDropdown() {
|
||||
console.log(`🔍 Ищем dropdown с ID: "${this.selectId}"`);
|
||||
const select = document.getElementById(this.selectId);
|
||||
if (!select) {
|
||||
console.error(`❌ Dropdown с ID "${this.selectId}" не найден`);
|
||||
console.log('📋 Доступные элементы с ID:', Array.from(document.querySelectorAll('[id]')).map(el => el.id));
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`✅ Dropdown найден, загружаем данные из: ${this.jsonPath}`);
|
||||
const data = await this.loadTripsData();
|
||||
if (!data || !data.trips) {
|
||||
console.error('❌ Не удалось загрузить данные поездок');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`📊 Данные загружены: ${data.trips.length} поездок всего`);
|
||||
|
||||
// Фильтруем только активные поездки и сортируем по порядку
|
||||
const activeTrips = data.trips
|
||||
.filter(trip => trip.active === true)
|
||||
.sort((a, b) => (a.order || 0) - (b.order || 0));
|
||||
|
||||
// Очищаем существующие опции (кроме первой пустой)
|
||||
const firstOption = select.querySelector('option[value=""]');
|
||||
select.innerHTML = '';
|
||||
|
||||
// Возвращаем первую пустую опцию
|
||||
if (firstOption) {
|
||||
select.appendChild(firstOption);
|
||||
} else {
|
||||
const emptyOption = document.createElement('option');
|
||||
emptyOption.value = '';
|
||||
emptyOption.textContent = '';
|
||||
select.appendChild(emptyOption);
|
||||
}
|
||||
|
||||
// Добавляем активные поездки
|
||||
activeTrips.forEach(trip => {
|
||||
const option = document.createElement('option');
|
||||
option.value = trip.title;
|
||||
option.textContent = trip.title;
|
||||
select.appendChild(option);
|
||||
});
|
||||
|
||||
// Добавляем статичную опцию "Свой вариант без БВС"
|
||||
const customOption = document.createElement('option');
|
||||
customOption.value = 'Свой вариант без БВС';
|
||||
customOption.textContent = 'Свой вариант без БВС';
|
||||
select.appendChild(customOption);
|
||||
|
||||
console.log(`✅ Dropdown формы заполнен: ${activeTrips.length} активных поездок`);
|
||||
}
|
||||
|
||||
// Метод для обновления (можно вызывать для перезагрузки)
|
||||
async refresh() {
|
||||
await this.populateTripsDropdown();
|
||||
}
|
||||
}
|
||||
|
||||
// Глобальная переменная для доступа к загрузчику
|
||||
let tripFormLoader;
|
||||
|
||||
// Инициализация при загрузке DOM
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Проверяем, есть ли на странице dropdown для поездок
|
||||
const tripSelect = document.getElementById('trip_period');
|
||||
if (tripSelect) {
|
||||
tripFormLoader = new TripFormLoader();
|
||||
tripFormLoader.populateTripsDropdown();
|
||||
|
||||
console.log('🗓️ Загрузчик поездок для формы инициализирован');
|
||||
}
|
||||
});
|
||||
|
||||
// Функция для обновления dropdown (можно вызывать извне)
|
||||
function refreshTripFormDropdown() {
|
||||
if (tripFormLoader) {
|
||||
tripFormLoader.refresh();
|
||||
}
|
||||
}
|
||||
|
||||
// Экспорт для использования в других скриптах
|
||||
if (typeof module !== 'undefined' && module.exports) {
|
||||
module.exports = TripFormLoader;
|
||||
}
|
||||
Reference in New Issue
Block a user