var courseSchedule = []; // 将fetch移动到函数中以便控制初始化顺序 function loadCourseSchedule() { return fetch('course_schedule.json') .then(response => response.json()) .then(data => { courseSchedule = data.examInfos || []; document.title = data.examName || '考试看板'; document.getElementById('examTitle').textContent = data.examName || '考试看板'; document.getElementById('examMessage').textContent = data.message || ''; document.getElementById('timeDescription').textContent = data.room ? '考场: ' + data.room : ''; updateScheduleTable(); // 检查Cookie是否存在 const reminderCookie = getCookie("reminders"); if (!reminderCookie && data.reminders && Array.isArray(data.reminders)) { // 如果Cookie不存在,加载配置文件中的提醒设置 fetch('audio_files.json') .then(response => response.json()) .then(audioFiles => { const validAudioTypes = Object.keys(audioFiles); const defaultAudio = validAudioTypes[0]; // 验证并修复音频设置 const reminders = data.reminders.map(reminder => { if (!validAudioTypes.includes(reminder.audio)) { reminder.audio = defaultAudio; } return reminder; }); // 填充提醒表格 var table = document.getElementById('reminderTable'); while (table.rows.length > 2) { table.deleteRow(1); } reminders.forEach(reminder => { var row = table.insertRow(table.rows.length - 1); let audioOptions = validAudioTypes .map(audio => ``) .join(''); row.innerHTML = ` `; row.cells[0].querySelector('select').addEventListener('change', function() { row.cells[1].querySelector('input').disabled = this.value === 'start' || this.value === 'end'; row.cells[1].querySelector('input').placeholder = this.value === 'start' || this.value === 'end' ? '-' : '分钟'; }); }); // 更新提醒队列并保存到Cookie loadRemindersToQueue(reminders); saveSettingsToCookies(); }); } return courseSchedule; }) .catch(error => { errorSystem.show('加载课程表失败: ' + error.message, 'error'); return []; }); } function parseTime(timeStr) { try { return new Date(timeStr); } catch (e) { errorSystem.show('时间解析错误: ' + e.message, 'info', 'error'); return new Date(); } } function updateCourseStatus() { try { var now = new Date(); currentCourse = null; for (var i = 0; i < courseSchedule.length; i++) { var course = courseSchedule[i], start = parseTime(course.start), end = parseTime(course.end); if (end < start) end.setDate(end.getDate() + 1); if (now >= start && now <= end) { currentCourse = course; break; } } if (currentCourse !== lastCourse) { handleStatusChange(); lastCourse = currentCourse; } } catch (e) { errorSystem.show('课程状态更新失败: ' + e.message, 'error'); } } function handleStatusChange() { // 处理状态变化的逻辑 console.log('课程状态已更改:', currentCourse); } function getNextCourse() { try { var now = new Date(); for (var i = 0; i < courseSchedule.length; i++) { var start = parseTime(courseSchedule[i].start); if (start > now) return courseSchedule[i]; } return null; } catch (e) { errorSystem.show('获取下一节课失败: ' + e.message, 'error'); return null; } } // 修改更新表格函数,增加数据检查 function updateScheduleTable() { try { if (!Array.isArray(courseSchedule)) { errorSystem.show('课程表数据格式错误', 'error'); return; } var now = new Date(); var table = document.getElementById('scheduleTable'); // 清空现有行,保留表头 while (table.rows.length > 1) { table.deleteRow(1); } courseSchedule.forEach(function(course) { var row = table.insertRow(-1); row.innerHTML = '' + course.name + '' + '' + formatDateTime(course.start) + ' - ' + formatDateTime(course.end) + '' + ''; var start = parseTime(course.start); var end = parseTime(course.end); if (now >= start && now <= end) { row.className = 'current-class'; row.cells[2].textContent = '进行中'; } else if (now < start) { row.className = 'future-class'; row.cells[2].textContent = '即将开始'; } else { row.className = 'past-class'; row.cells[2].textContent = '已结束'; } }); } catch (e) { errorSystem.show('课程表更新失败: ' + e.message, 'error'); } }