/
Centermant
/
web-nodejs
Обзор
Документация
Войти
/
Centermant
/
web-nodejs
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
public/lab8/task3/script.js
134 строки
5 KB
Centermant
feat(lab8 final)
13 ноя 2025, 09:17
13 ноя 2025, 09:17
734379b
Код
Авторство
О чём код?
// Функция для генерации JSON результатов function generateResults() { fetch('/api/lab8/task3/generate', { method: 'GET', }) .then(response => { if (!response.ok) { return response.json().then(err => { throw new Error(err.error || 'Network response was not ok'); }); } return response.json(); }) .then(data => { const resultDiv = document.getElementById('generationResult'); resultDiv.innerHTML = `✅ Данные успешно сгенерированы!<br> Всего матчей: ${data.count}<br> Данные сохранены в файл: /backend/data/lab8/task3/resultsQatar22.json`; resultDiv.style.display = 'block'; }) .catch(error => { console.error('Error generating results:', error); alert(`Ошибка при генерации данных: ${error.message}`); }); } // Вспомогательная функция для определения результата по счету function getMatchResult(score) { if (!score || typeof score !== 'string') return 'unknown'; const parts = score.split('-'); if (parts.length !== 2) return 'unknown'; const team1Score = parseInt(parts[0], 10); const team2Score = parseInt(parts[1], 10); if (isNaN(team1Score) || isNaN(team2Score)) return 'unknown'; if (team1Score > team2Score) { return 'team1_wins'; } else if (team2Score > team1Score) { return 'team2_wins'; } else { return 'draw'; } } // Функция для загрузки и отображения данных матчей function loadMatchesData() { const tableBody = document.getElementById('matchesTableBody'); const errorContainer = document.getElementById('errorContainer'); const loadingContainer = document.getElementById('loadingContainer'); tableBody.innerHTML = ''; errorContainer.style.display = 'none'; loadingContainer.style.display = 'block'; fetch('/api/lab8/task3/matches', { method: 'GET', }) .then(response => { if (!response.ok) { return response.json().then(err => { throw new Error(err.error || 'Network response was not ok'); }); } return response.json(); }) .then(matches => { let currentDate = ''; matches.forEach(match => { if (match.date !== currentDate) { currentDate = match.date; const dateRow = document.createElement('tr'); dateRow.className = 'date-group'; dateRow.innerHTML = `<td colspan="7">${currentDate}</td>`; tableBody.appendChild(dateRow); } const row = document.createElement('tr'); const matchResult = getMatchResult(match.score); switch(matchResult) { case 'team1_wins': row.className = 'team1-wins'; break; case 'team2_wins': row.className = 'team2-wins'; break; case 'draw': row.className = 'draw'; break; default: row.className = ''; break; } row.innerHTML = ` <td>${match.group || 'N/A'}</td> <td>${match.date}</td> <td>${match.time}</td> <td>${match.team1}</td> <td class="score">${match.score}</td> <td>${match.team2}</td> <td>${match.stadium || 'N/A'}</td> `; tableBody.appendChild(row); }); if (matches.length === 0) { errorContainer.textContent = 'Нет данных о матчах. Сначала сгенерируйте JSON результатов.'; errorContainer.style.display = 'block'; } }) .catch(error => { console.error('Error loading matches ', error); errorContainer.textContent = `Ошибка загрузки данных: ${error.message}`; errorContainer.style.display = 'block'; }) .finally(() => { loadingContainer.style.display = 'none'; }); } // Вспомогательная функция для парсинга даты function parseDate(dateString) { const parts = dateString.split(' '); if (parts.length >= 2) { const monthDay = parts[1].replace('/', ' '); return new Date(`2022 ${monthDay}`); } return new Date(); } document.addEventListener('DOMContentLoaded', function() { loadMatchesData(); });