顶栏新增时区选择器:加载时自动检测用户所在时区(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
88 lines
3.5 KiB
Markdown
88 lines
3.5 KiB
Markdown
# timeTableFix - 纯前端 ICS 日历整理器
|
||
|
||
浏览器内解析、去重、编辑 ICS 日历文件,全程无需后端服务。拖入 `.ics` -> 整理去重 -> 编辑 -> 下载。独立可维护,亦可作为 [mainPage](https://git.zikai.wang/zikai/zMainPage) 的子模块集成展示。
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
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 依赖) |
|
||
|
||
> 纯前端应用,无运行期后端依赖。
|
||
|
||
## 如何使用
|
||
|
||
```bash
|
||
# 克隆并安装
|
||
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`](./docs/timezone.md)。
|
||
|
||
## 技术栈
|
||
|
||
| 项 | 选择 |
|
||
|----|------|
|
||
| 框架 | Vue 3.5(SFC,`<script setup>`) |
|
||
| 构建 | Vite 6 |
|
||
| ICS 库 | ical.js 2.x |
|
||
| 国际化 | vue-i18n 9(中文同步,英文懒加载) |
|
||
| 状态管理 | composable 单例 store |
|
||
| 测试 | Vitest |
|
||
| 包源 | npmmirror.com(中国镜像加速) |
|
||
|
||
## 了解更多
|
||
|
||
- [嵌入 mainPage(i18n prop 桥接 / 样式隔离)](./docs/integration.md)
|
||
- [时区选择(自动检测 / 回退墨尔本)](./docs/timezone.md)
|
||
- [间隔合并与链拆分算法](./docs/organize-algorithm.md)
|
||
- [自动保存设计](./docs/auto-save-design.md)
|
||
- [初始设计文档](./docs/superpowers/specs/2026-07-13-timetable2-design.md)
|