document.getElementById('importJson').addEventListener('change', function(event) { var files = event.target.files; if (files.length > 0) { Array.from(files).forEach(file => { var reader = new FileReader(); reader.onload = function(e) { try { var config = JSON.parse(e.target.result); applyConfig(config); } catch (err) { errorSystem.show('导入配置失败: ' + err.message, 'error'); } }; reader.readAsText(file); }); } }); function applyConfig(config) { try { fetch('audio_files.json') .then(response => response.json()) .then(audioFiles => { const reminderCookie = getCookie("reminders"); // 获取有效的音频列表和默认音频 let validAudioTypes = Object.keys(audioFiles); let defaultAudio = validAudioTypes[0]; if (config.examInfos) { courseSchedule = config.examInfos; updateScheduleTable(); } if (config.examName) { document.title = config.examName; document.getElementById('examTitle').textContent = config.examName; } if (config.message) { document.getElementById('examMessage').textContent = config.message; } if (config.room) { document.getElementById('timeDescription').textContent = '考场: ' + config.room; } // 验证并修复提醒中的音频设置 if (config.reminders) { config.reminders = config.reminders.map(reminder => { if (!validAudioTypes.includes(reminder.audio)) { errorSystem.show(`音频"${reminder.audio}"不存在,已替换为"${defaultAudio}"`, 'info'); reminder.audio = defaultAudio; } return reminder; }); // 清空现有提醒表 var table = document.getElementById('reminderTable'); while (table.rows.length > 2) { table.deleteRow(1); } // 添加新的提醒设置 config.reminders.forEach(function(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(config.reminders); } errorSystem.show('配置导入成功(临时生效)', 'info'); }) .catch(err => { errorSystem.show('获取音频列表失败: ' + err.message, 'error'); }); } catch (err) { errorSystem.show('应用配置失败: ' + err.message, 'error'); } } function exportConfig() { var table = document.getElementById('reminderTable'); var reminders = []; for (var i = 1; i < table.rows.length - 1; i++) { var row = table.rows[i]; var condition = row.cells[0].querySelector('select').value; var timeInput = row.cells[1].querySelector('input'); var audioSelect = row.cells[2].querySelector('select'); if (timeInput && audioSelect) { reminders.push({ condition: condition, time: timeInput.value || 0, audio: audioSelect.value || 'classStart' }); } } var config = { examInfos: courseSchedule, examName: document.title, message: document.getElementById('examMessage').textContent || "诚信考试,禁止作弊", room: document.getElementById('timeDescription').textContent.replace('考场: ', ''), reminders: reminders }; var dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(config)); var downloadAnchorNode = document.createElement('a'); downloadAnchorNode.setAttribute("href", dataStr); downloadAnchorNode.setAttribute("download", "exam_config.json"); document.body.appendChild(downloadAnchorNode); downloadAnchorNode.click(); downloadAnchorNode.remove(); }