zikai cf941c50bc feat: 增加时区选择(自动检测,回退墨尔本)
顶栏新增时区选择器:加载时自动检测用户所在时区(Intl.DateTimeFormat),
检测不到则默认澳大利亚墨尔本。选定时区作为新建事件的默认 tzid 与下载
ICS 的 X-WR-TIMEZONE,不做时间换算(应用内部为 wall-clock 字符串)。

- 新增 src/lib/timezone.js(detect/list/validate/默认值)
- useCalendar 持 state.timezone、setTimezone、addEvent 传 tzid、serialize 注入 X-WR-TIMEZONE
- HeaderBar 顶栏下拉选择器 + i18n 文案
- 新增 test/timezone.test.js(15 项),全量 57 项通过
- README 简述功能,细节移至 docs/timezone.md
2026-07-27 09:49:13 +08:00
2026-07-13 17:31:43 +08:00

timeTableFix - 纯前端 ICS 日历整理器

浏览器内解析、去重、编辑 ICS 日历文件,全程无需后端服务。拖入 .ics -> 整理去重 -> 编辑 -> 下载。独立可维护,亦可作为 mainPage 的子模块集成展示。

项目结构

timeTableFix/
├── index.html                  Vite 入口
├── package.json
├── vite.config.js
├── vitest.config.js
├── .npmrc                      npmmirror 镜像加速
├── README.md
├── src/
│   ├── main.js                 应用挂载i18n + 全局样式)
│   ├── App.vue                 便携式根组件(嵌入与独立两用)
│   ├── i18n/                   独立 vue-i18n 实例 + 中英 locale
│   ├── composables/
│   │   ├── useCalendar.js      中心 store自动保存无 undo
│   │   └── useLocale.js        语言辅助(直读自身 i18n 实例)
│   ├── lib/
│   │   ├── weekday.js          星期常量与工具
│   │   ├── date.js             日期工具
│   │   ├── timezone.js         时区检测 / 选择(回退墨尔本)
│   │   ├── colors.js           事件配色
│   │   ├── uuid.js             UUID 生成(含非安全上下文回退)
│   │   ├── ical-io.js          ICS 文本 <-> plain model
│   │   ├── recur.js            RRULE 网格展开
│   │   ├── organize.js         间隔去重 + 链拆分算法
│   │   ├── event-factory.js    事件构造工厂
│   │   └── split.js            事件拆分逻辑
│   └── components/
│       ├── HeaderBar.vue       顶栏:整理/导入/下载
│       ├── DropZone.vue        拖拽/选择文件
│       ├── EventList.vue       侧栏事件列表
│       ├── EventDetail.vue     编辑表单 + 拆分
│       ├── OccurrenceGrid.vue  排除日期网格
│       ├── MonthPreview.vue    月预览
│       └── WeekPreview.vue     周预览
├── test/                       Vitest 单元测试
└── docs/                       设计文档

外部依赖

说明
Node.js ≥ 18
ical.js ICS 解析库npm 依赖)

纯前端应用,无运行期后端依赖。

如何使用

# 克隆并安装
git clone https://git.zikai.wang/zikai/timeTableFix.git
cd timeTableFix
npm install        # 已配 npmmirror 镜像加速

npm run dev        # 开发服务器 http://localhost:5173
npm run build      # 构建到 dist/
npm test           # 单元测试57 项)

顶栏时区选择器在加载时自动检测用户所在时区,检测不到则默认澳大利亚墨尔本;仅作为新建事件与下载 ICS 的默认时区,不做时间换算。详见 docs/timezone.md

技术栈

选择
框架 Vue 3.5SFC<script setup>
构建 Vite 6
ICS 库 ical.js 2.x
国际化 vue-i18n 9中文同步英文懒加载
状态管理 composable 单例 store
测试 Vitest
包源 npmmirror.com中国镜像加速

了解更多

Description
No description provided
Readme 377 KiB
Languages
JavaScript 59.7%
Vue 38.7%
CSS 1.3%
HTML 0.3%