function saveSettingsToCookies() { try { 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) { var time = timeInput.value || 0; var audio = audioSelect.value; reminders.push({ condition: condition, time: time, audio: audio }); } } if (reminders.length === 0) { errorSystem.show('请添加至少一个提醒策略', 'error'); return false; } // 编码并保存到 Cookie const remindersStr = encodeURIComponent(JSON.stringify(reminders)); setCookie("reminders", remindersStr, 365); // 更新提醒队列 loadRemindersToQueue(reminders); errorSystem.show('提醒设置已保存', 'info'); return true; } catch (e) { errorSystem.show('保存设置失败: ' + e.message, 'error'); return false; } } function loadSettingsFromCookies() { try { const reminderCookie = getCookie("reminders"); if (reminderCookie) { // 解码并解析 Cookie 值 const reminders = JSON.parse(decodeURIComponent(reminderCookie)); if (Array.isArray(reminders)) { // 清空现有提醒 var table = document.getElementById('reminderTable'); while (table.rows.length > 2) { table.deleteRow(1); } // 使用 audio_files.json 的数据填充提醒表 fetch('audio_files.json') .then(response => response.json()) .then(audioFiles => { const validAudioTypes = Object.keys(audioFiles); const defaultAudio = validAudioTypes[0]; reminders.forEach(function(reminder) { // 检查音频是否有效 if (!validAudioTypes.includes(reminder.audio)) { reminder.audio = defaultAudio; } 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' ? '-' : '分钟'; }); }); // 更新提醒队列 loadRemindersToQueue(reminders); }) .catch(error => { errorSystem.show('加载音频文件列表失败: ' + error.message, 'error'); }); } } } catch (e) { errorSystem.show('加载设置失败: ' + e.message, 'error'); } } document.addEventListener("DOMContentLoaded", () => { const themeToggle = document.getElementById("theme-toggle"); let theme = getCookie("theme") || "light"; if (theme === "light") { document.body.classList.remove("dark-mode"); themeToggle.checked = false; } else { document.body.classList.add("dark-mode"); themeToggle.checked = true; } themeToggle.addEventListener("change", () => { const theme = themeToggle.checked ? "dark" : "light"; if (theme === "light") { document.body.classList.remove("dark-mode"); } else { document.body.classList.add("dark-mode"); } setCookie("theme", theme, 365); }); }); function getCookie(name) { const nameEQ = name + "="; const ca = document.cookie.split(';'); for (let i = 0; i < ca.length; i++) { let c = ca[i]; while (c.charAt(0) === ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length); } return null; } function setCookie(name, value, days) { var expires = ""; if (days) { var date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toUTCString(); } document.cookie = name + "=" + (value || "") + expires + "; path=/"; }