- 移除 EventDetail.vue 未用的 computed 导入 - 移除 HeaderBar.vue 未用的 .btn-secondary CSS - store (updateEvent/splitEvent/toggleOccurrence): uid 缺失改抛错 (fail-fast), 不再静默 return - EventDetail onSplit: 捕获 splitEvent 抛错并提示用户 - DropZone/HeaderBar 解析失败: catch 内补 console.error - ical-io getZone: 时区未注册回退 UTC 时 console.warn - WeekPreview 周标签改用 i18n (weekPreview.rangeFmt), 与 MonthPreview 一致 - docs: 新增 error-handling.md; 修正 auto-save-design state 快照补 timezone - README: 补充部署说明 (经 zMainPage apache2 托管)
1.5 KiB
1.5 KiB
错误处理与日志约定
timeTableFix 的错误处理分两层:纯库函数 fail-fast,UI 层捕获后既写控制台又给用户反馈。
纯库层(src/lib/)
- 解析/算法错误直接抛出或返回
null,由调用方决定如何反馈。parseICS:ICAL.parse对非法文本抛错,向上传播。splitRecurringEvent/fitSeries:不可处理时返回null(合法的「拒绝」语义)。getZone:时区未注册(VTIMEZONE 缺失)时回退 UTC 并console.warn,避免静默时间偏移。
store 层(src/composables/useCalendar.js)
loadFile:不吞错,parseICS的异常直接 reject 给调用方。updateEvent/splitEvent/toggleOccurrence:uid 不存在视为编程错误,抛错而非静默 return。调用方(EventDetail)在调前已校验selectedEvent,正常流程不会触发;触发即暴露 bug。
UI 层(src/components/)
- 文件解析失败(DropZone / HeaderBar):
.catch内console.error记录原始错误,再用alert告知用户。 - 拆分失败(EventDetail
onSplit):splitEvent抛错被try/catch捕获,console.error+ 提示日期无效。 - 时区检测/列表降级(timezone.js):旧环境
Intl不可用时静默回退墨尔本(有测试覆盖),属可接受的降级。
控制台前缀
所有 [timeTableFix] 前缀的日志均来自本子项目,便于在嵌入宿主时与宿主日志区分。