diff --git a/index.html b/index.html index 8f53c99..0859504 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - HomeWorkPage + Classworks作业板
diff --git a/src/pages/index.vue b/src/pages/index.vue index b09fa58..c7f1a50 100644 --- a/src/pages/index.vue +++ b/src/pages/index.vue @@ -28,7 +28,9 @@ @@ -370,7 +372,7 @@ export default { snackbarText: "", fontSize: getSetting("font.size"), datePickerDialog: false, - selectedDate: null, + selectedDate: new Date().toISOString().split("T")[0], // 确保初始值正确 refreshInterval: null, subjectOrder: [ "语文", @@ -606,7 +608,9 @@ export default { const dateFromUrl = urlParams.get("date"); const today = new Date().toISOString().split("T")[0]; + // 确保日期格式正确 this.state.dateString = dateFromUrl || today; + this.state.selectedDate = this.state.dateString; // 添加这行,设置默认选中日期 this.state.isToday = this.state.dateString === today; await Promise.all([this.downloadData(), this.loadConfig()]); @@ -697,22 +701,26 @@ export default { if (!this.currentEditSubject) return; const content = this.state.textarea.trim(); - if (content) { - // 更新内容 - this.state.boardData.homework[this.currentEditSubject] = { - name: this.state.availableSubjects.find( - (s) => s.key === this.currentEditSubject - )?.name, - content, - }; + const originalContent = this.state.boardData.homework[this.currentEditSubject]?.content || ''; + + // 如果内容发生变化(包括清空),就视为修改 + if (content !== originalContent.trim()) { + if (content) { + this.state.boardData.homework[this.currentEditSubject] = { + name: this.state.availableSubjects.find( + (s) => s.key === this.currentEditSubject + )?.name, + content, + }; + } else { + delete this.state.boardData.homework[this.currentEditSubject]; + } this.state.synced = false; // 处理自动保存 if (this.autoSave) { await this.trySave(true); } - } else { - delete this.state.boardData.homework[this.currentEditSubject]; } this.state.dialogVisible = false; @@ -883,8 +891,16 @@ export default { }, handleDateSelect(newDate) { - if (newDate) { - const date = new Date(newDate); + if (!newDate) return; + + try { + // 确保日期格式正确 + const date = typeof newDate === 'string' ? new Date(newDate) : newDate; + if (!(date instanceof Date) || isNaN(date.getTime())) { + console.error('Invalid date:', newDate); + return; + } + const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, "0"); const day = String(date.getDate()).padStart(2, "0"); @@ -893,6 +909,7 @@ export default { // 只有当日期真正改变时才更新 if (this.state.dateString !== formattedDate) { this.state.dateString = formattedDate; + this.state.selectedDate = formattedDate; // 使用 replace 而不是 push 来避免创建新的历史记录 this.$router .replace({ @@ -901,6 +918,9 @@ export default { .catch(() => {}); this.downloadData(); } + } catch (error) { + console.error('Date processing error:', error); + this.$message.error('日期处理错误', '请重新选择日期'); } }, diff --git a/src/utils/settings.js b/src/utils/settings.js index a2606e4..e8ece11 100644 --- a/src/utils/settings.js +++ b/src/utils/settings.js @@ -14,27 +14,40 @@ async function requestNotificationPermission() { return false; } } -// 请求持久性存储权限 + +/** + * 请求持久性存储权限 + * @returns {Promise} 是否成功启用持久性存储 + */ async function requestPersistentStorage() { - if (navigator.storage && navigator.storage.persist) { - const isPersisted = await navigator.storage.persist(); - if (isPersisted) { - console.log("持久性存储已启用"); - } else { - console.warn("持久性存储请求被拒绝"); + if (!getSetting("storage.persistentStorage")) { + return false; + } + + try { + if (navigator.storage?.persist) { + return await navigator.storage.persist(); } - } else { - console.warn("浏览器不支持持久性存储"); + return false; + } catch (error) { + console.warn("请求持久性存储失败:", error); + return false; } } -// 在页面加载时请求通知权限和持久性存储 -window.addEventListener("load", async () => { +/** + * 初始化存储权限 + */ +async function initializeStorage() { const notificationGranted = await requestNotificationPermission(); - if (notificationGranted) { - await requestPersistentStorage(); + if (notificationGranted && getSetting("storage.persistOnLoad")) { + const persisted = await requestPersistentStorage(); + console.log(`持久性存储状态: ${persisted ? "已启用" : "未启用"}`); } -}); +} + +// 在页面加载时初始化 +window.addEventListener("load", initializeStorage); /** * 配置项定义 @@ -55,6 +68,18 @@ const SETTINGS_STORAGE_KEY = "classworks_settings"; * @type {Object.} */ const settingsDefinitions = { + // 存储设置 + "storage.persistentStorage": { + type: "boolean", + default: true, + description: "是否启用持久性存储", + }, + "storage.persistOnLoad": { + type: "boolean", + default: true, + description: "是否在页面加载时自动请求持久性存储", + }, + // 显示设置 "display.emptySubjectDisplay": { type: "string",