This commit is contained in:
2026-09-12 13:49:44 +08:00
commit a8b1decc48
62 changed files with 16061 additions and 0 deletions

88
README.md Normal file
View File

@@ -0,0 +1,88 @@
# Time
轻量 Electron 桌面应用:巨字时钟 + 多闹钟 + 番茄钟 + 通用倒计时,顶栏 + 4 个标签挤在同一个 ~440×400 小窗口里。
- **巨字时钟** —— `HH:MM:SS` 24 小时制;首页另含日期、下一闹钟、番茄 / 倒计时状态、已启用闹钟数
- **多闹钟** —— 支持 `once` / `daily`,列表按本地时刻升序;`once` 响过后自动停用,`daily` 保留并排到下一天同刻
- **番茄钟** —— `25 / 5 / 15` 三段式,每完成 4 轮 focus 后插一个长休;可暂停 / 继续 / 跳过 / 重置;底部展示今日完成数
- **通用倒计时** —— `HH:MM:SS` 自由设置自动记住上次时长归零后弹“完成”按钮8 秒无操作自动收起
- **6 套皮肤** —— Linear Dark、黄铜暗色、Solarized、Nord、Catppuccin Mocha、Vercel Light
- **4 张浮窗** —— 时钟 / 番茄钟 / 闹钟 / 倒计时各自一个独立 BrowserWindow启动期预创建 + `hide`,点击瞬开;用户拖过的位置会记住
- **系统集成** —— 顶栏4 个浮窗 toggle + 图钉置顶 + 齿轮)、托盘菜单、单实例锁、写盘失败 toast、主窗几何持久化、多显示器越界回退
提醒统一走系统通知(`Notification` API
---
## 快速开始
### 用户
1. 下载安装包或便携版(见 [打包](#打包)
2. 首次启动若被 Windows SmartScreen 拦截,点「更多信息 → 仍要运行」
3. 顶栏右侧依次是 4 个浮窗 toggle、图钉置顶、齿轮设置主面板 4 个标签:**时钟 / 番茄钟 / 倒计时 / 闹钟**
4. 浮窗右键 / 双击 / Esc / × / 触屏长按 都能关
### 开发者
```bash
npm install
npm run dev # electron-vite + HMR
npm run typecheck # node + web 两份 tsconfig 都过一遍
npm run build # 构建产物到 out/
npm run package # 打包 → release/NSIS 安装包 + portable 单文件)
```
需要 Node.js 20+。
---
## 键盘交互
| 范围 | 按键 | 行为 |
|---|---|---|
| 浮窗 | `Esc` | 关闭(实际是 hide预创建 BrowserWindow 不销毁) |
| 主窗标签条 | `←` / `→` | 切换上一个 / 下一个标签 |
| 主窗标签条 | `Home` / `End` | 跳到第一个 / 最后一个标签 |
| 闹钟 / 倒计时编辑器 | 滚轮 / `Shift` + 滚轮 | 时间步进 ±1 / ±5 |
---
## 数据存储
Windows 上是 `%APPDATA%/time/`macOS / Linux 类似路径):
- `app-state.json` —— 主状态(闹钟 / 番茄钟 / 倒计时 / 设置)
- `window-state.json` —— 主窗位置、大小(同步 `writeFileSync` 落盘)
`app-state.json` 写盘走 300ms 防抖 + 合并同批次 + `.tmp → rename` 原子提交;版本不匹配或解析失败时复制为 `.bak-v1` 后回退默认状态。`window-state.json` 不参与备份。
落盘前会剥离 `pomodoro.active` / `countdown.active` —— 重启后回到 idle避免“旧 endsAt 已过期”的假象;闹钟的 `active=enabled` 完全持久化,重启后调度器按规则继续排程。
---
## 打包
```bash
npm run package
```
产物落在 `release/`
- `Time Setup <version>.exe` —— NSIS 安装包(当前用户安装,可改安装目录)
- `Time-<version>-portable.exe` —— 免安装单文件
`productName = Time``appId = com.guan.time`,当前版本 `0.1.0`。未配置代码签名与自动更新。
---
## 已知限制
- 仅本地时区UI 仅中文
- 未配置代码签名 —— 首次启动会被 SmartScreen 拦截
- macOS / Linux 标题栏已分支macOS `hiddenInset` / Linux 系统 `default`),但仅在 Windows 上完整验证过打包
- 提醒只走系统通知;若系统级关闭了通知,闹钟 / 番茄钟阶段切换 / 倒计时归零都不会响
- 闹钟重复仅支持 `once` / `daily`;没有工作日 / 每周指定日
- 闹钟仅按本地时刻升序排列,**没有拖拽重排**
- 番茄钟持久化的 30 天完成历史(`byDate`)当前不展示在 UI 上;面板只显示今日完成数
- 没有“全局重置应用”入口 —— 只能分别重置番茄钟 / 倒计时到 idle