1b67e15071479d9240868f2a9c151a2add635b86
原 btn-secondary 与页面背景同色、文字灰,视觉上偏暗;导入操作无前置依赖 (随时可点),应始终可用且醒目,故改为 btn-primary 与组织按钮一致。
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 日期工具
│ │ ├── 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 # 单元测试(42 项)
技术栈
| 项 | 选择 |
|---|---|
| 框架 | Vue 3.5(SFC,<script setup>) |
| 构建 | Vite 6 |
| ICS 库 | ical.js 2.x |
| 国际化 | vue-i18n 9(中文同步,英文懒加载) |
| 状态管理 | composable 单例 store |
| 测试 | Vitest |
| 包源 | npmmirror.com(中国镜像加速) |
了解更多
Description
Languages
JavaScript
59.7%
Vue
38.7%
CSS
1.3%
HTML
0.3%