zikai
037b70deec
feat: 自动保存/移除撤销与红点, 间隔合并改进(DAILY/稀疏/交错拆分), 删死代码, 更新测试与文档
...
- organize: seriesKey 移除 weekday, 解锁每3天等 DAILY 序列合并
- organize: fitSeries 放宽阈值(稀疏序列如 BUS LAW Workshop 合并)
- organize: 新增 splitIntoChains, GCD=1 的交错多班次拆为多个系列
- useCalendar: 移除 dirty/history/undo/snapshot/markSaved 死代码
- HeaderBar: 移除撤销按钮与红点●, 下载兜底序列化当前状态
- 测试: 42 项(原32), 覆盖 DAILY/稀疏/交错拆分/两两和候选等场景
- 文档: README 精简, 新增 docs/organize-algorithm.md 与 auto-save-design.md
- 保留移动端 CSS 适配
2026-07-22 06:32:47 +00:00
zikai
b49dbd46eb
feat: 月预览自定义悬停 tooltip, 月/周预览添加回到今日按钮
...
- MonthPreview: 用自定义 tooltip 替代原生 title 属性, 鼠标悬停事件
即时显示详细信息 (标题/时间/地点/描述), 固定在右下角避免遮挡
- MonthPreview/WeekPreview: 工具栏新增回到今日按钮, 一键跳转回当天
- useCalendar: 新增 goToToday() action, 重置 previewDate 为今天
2026-07-22 04:29:46 +00:00
zikai
1c6ecf9d86
refactor: 移除重做/应用按钮, 自动应用更改, 删除死代码, 修复性能问题
...
UI 变更:
- 移除重做按钮及 redo/canRedo/redoStack 相关逻辑 (useCalendar, HeaderBar)
- 移除应用更改按钮, EventDetail 改为 watch form 自动应用 (deep watch)
- 用 syncing 标志防止 syncForm 回写时触发自动应用的循环
死代码清理:
- weekday.js: 移除未使用的 BYDAY_TO_INDEX 和 dowLabel
- date.js: 移除未使用的 toHHMM
- App.vue: 移除未使用的 .empty CSS
- DropZone.vue: 移除空的 .icon 容器及 CSS
- test/weekday.test.js: 移除对应死代码的 2 个测试用例
性能修复:
- WeekPreview: layoutEvents 从模板内联调用改为 computed (laidOutByDate),
避免每次渲染重新计算布局
- MonthPreview: occByDate 过滤为仅网格内 42 天, 避免展开全部 occurrence
代码质量:
- useCalendar: prevMonth/nextMonth 合并为 shiftMonth(delta), 消除重复
- WeekPreview/MonthPreview: 移除未使用导入 (toISODate, toDate)
2026-07-22 04:18:05 +00:00
zikai
add471eb44
feat: 新增月预览和周预览组件及视图切换滑块
...
- App.vue: 新增三段式视图切换滑块 (编辑/月预览/周预览), 条件渲染对应组件
- MonthPreview.vue (新增): 月历网格, 每天显示事件标题色块, 悬停显示详情,
支持上一月/下一月翻页, 今天高亮
- WeekPreview.vue (新增): 时间网格 (7列周一~周日, 24行每小时), 事件按真实
时间定位 (top/height), 重叠事件并排布局, 支持上一周/下一周翻页
- 编辑模式显示左侧事件列表, 预览模式隐藏列表占满宽度
2026-07-22 04:07:16 +00:00
zikai
50fc8de9eb
fix: 移除拖拽区中央的占位文字
2026-07-22 04:03:02 +00:00
zikai
84dbaf9cd2
style: 移除 emoji, 注释改为中文 (保留专业名词)
...
- 移除所有 Vue 组件和 README 中的 emoji (按钮文字、标题、功能列表)
- 将 src 下所有英文注释改为中文, 保留专业名词 (RRULE, EXDATE, ICS 等)
- 涉及文件: date.js, event-factory.js, ical-io.js, organize.js,
recur.js, split.js, weekday.js, useCalendar.js, EventDetail.vue,
App.vue, DropZone.vue, EventList.vue, HeaderBar.vue, README.md
2026-07-22 02:55:45 +00:00
zikai
e9fc10c89d
fix: WEEKLY 事件的 BYDAY 与 dtstartDate 不一致导致 ICS 输出错误
...
applyChanges 中 BYDAY 此前取自表单下拉框(默认 'MO'), 与 dtstartDate
的星期可能不一致。expandOccurrences 按 dtstartDate 展开 occurrence,
但序列化的 RRULE 写入表单选择的 BYDAY, 两者不匹配时日历应用会显示
错误的星期。
修复: BYDAY 始终由 dtstartDate 的星期自动推导(bydayFromDate), 下拉框
改为只读展示。确保 RRULE BYDAY 与实际 occurrence 日期始终一致。
2026-07-22 02:45:04 +00:00
timeTable2 dev
b352c4e116
refactor: high-cohesion low-coupling cleanup across store and components
...
ical-io.js:
- Import pad2/parseISODate from date.js (remove local duplicates)
- Rename ICAL.Time helpers to icalTimeTo* for clarity
useCalendar.js:
- Delegate addEvent to createEvent() factory
- Delegate splitEvent to splitRecurringEvent() pure function
- Use cloneEvent() instead of JSON.parse(JSON.stringify())
- Add selectEvent() action (components no longer mutate state.selectedUid directly)
Components:
- EventList: use selectEvent action + toDate() from date.js
- HeaderBar: destructure loadFile at top level (was re-calling useCalendar in handler)
- EventDetail: import DOW from weekday.js (was inlining the array)
- OccurrenceGrid: use toDate() from date.js
2026-07-13 20:06:00 +08:00
timeTable2 dev
15b6f30896
feat: add EventDetail with edit form, occurrence grid, split
2026-07-13 18:43:28 +08:00
timeTable2 dev
8a1d547001
feat: add OccurrenceGrid component
2026-07-13 18:41:51 +08:00
timeTable2 dev
f52f5315e6
feat: add EventList and HeaderBar with organize/undo/download
2026-07-13 18:40:44 +08:00
timeTable2 dev
906679fc11
feat: add DropZone and App layout skeleton
2026-07-13 18:39:15 +08:00