Files
timeTableFix/README.md
zikai 2d7b8d0d07 docs: 移除 systemd 部署与 /ttf/ 独立入口说明
本项目仅作为 mainPage submodule 集成,无独立线上入口。
保留独立开发/测试说明(npm run dev/test/build)。
2026-07-23 04:46:23 +00:00

113 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# timeTableFix - 纯前端 ICS 日历整理器
浏览器内解析、去重、编辑 ICS 日历文件,全程无需后端服务。拖入 `.ics` -> 整理去重 -> 编辑 -> 下载。
## 功能
- 拖入即用:拖拽或选择 `.ics` 文件,浏览器内直接解析
- 智能去重:检测事件间隔(每周 / 每两周 / 每 N 天),将扁平事件合并为 RRULE 重复事件 + EXDATE交错的多班次自动拆分为多个系列
- 自动保存:所有编辑即时生效,下载时兜底序列化最新状态,无需手动保存
- 可视化编辑:编辑标题/地点/时间/重复规则,点击网格切换排除日期
- 拆分事件:把一个重复事件按日期拆成前后两段
- 增删事件:新增单次/重复事件,删除任意事件
- 导出 ICS下载整理后的 `.ics`,可直接导入日历应用
## 项目结构
```
timeTableFix/
├── index.html Vite 入口
├── package.json
├── vite.config.js 构建配置(含 preview.allowedHosts
├── vitest.config.js
├── .npmrc npmmirror 镜像加速
├── src/
│ ├── main.js 应用挂载
│ ├── App.vue 布局装配
│ ├── composables/
│ │ └── useCalendar.js 中心 store自动保存无 undo
│ ├── lib/
│ │ ├── weekday.js 星期常量与工具
│ │ ├── date.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 单元测试
│ ├── golden-org.ics 测试用例61 事件的真实课表)
│ ├── weekday.test.js
│ ├── ical-io.test.js
│ ├── recur.test.js
│ └── organize.test.js
└── docs/ 设计文档
├── organize-algorithm.md 间隔合并与链拆分算法详解
└── auto-save-design.md 自动保存设计
```
## Ubuntu 从零安装
### 1. 安装 Node.js 18+
```bash
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
node --version # 确认 v18.x
```
### 2. 克隆并安装依赖
```bash
git clone https://git.zikai.wang/zikai/timeTableFix.git
cd timeTableFix
npm install # 已配 npmmirror 镜像加速
```
### 3. 构建生产版本
```bash
npm run build # 产物输出到 dist/
npm test # (可选)运行单元测试
```
### 4. 集成到主页
本项目作为 [mainPage](https://git.zikai.wang/zikai/zMainPage) 的一个页签集成展示,采用**构建期组件集成 + git submodule**
- mainPage 通过 git submodule 把本项目作为子目录(`third_party/timeTableFix`)引入,并直接 `import` 本项目的 `src/App.vue` 作为懒加载路由组件。
- 集成时共享 mainPage 的构建、依赖(`ical.js`)与 KeepAlive 缓存,不再是 iframe无运行期割裂。
- 本项目 `App.vue` 已做样式隔离scoped + `ttf-` 前缀类名),设计令牌与 mainPage 对齐;全局重置仅在独立 app`main.js`)加载,作为组件嵌入时不污染宿主。
本项目无独立线上入口,仅通过主页 `https://zikai.wang/timetable` 访问。升级流程见 mainPage 的 [`docs/submodule-timeTableFix.md`](https://git.zikai.wang/zikai/zMainPage/src/branch/main/docs/submodule-timeTableFix.md)。
## 开发
```bash
cd timeTableFix
npm install
npm run dev # 开发服务器 http://localhost:5173
npm test # 单元测试42 项)
npm run build # 构建到 dist/(独立预览用,非线上入口)
```
## 技术栈
| 项 | 选择 |
|----|------|
| 框架 | Vue 3.5SFC`<script setup>` |
| 构建 | Vite 6 |
| ICS 库 | ical.js 2.x |
| 状态管理 | composable 单例 store |
| 测试 | Vitest |
| 包源 | npmmirror.com中国镜像加速 |