Time
轻量 Electron 桌面应用:巨字时钟 + 多闹钟 + 番茄钟 + 通用倒计时,顶栏 + 4 个标签挤在同一个 ~440×400 小窗口里。
- 巨字时钟 ——
HH:MM:SS24 小时制;首页另含日期、下一闹钟、番茄 / 倒计时状态、已启用闹钟数 - 多闹钟 —— 支持
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)。
快速开始
用户
- 下载安装包或便携版(见 打包)
- 首次启动若被 Windows SmartScreen 拦截,点「更多信息 → 仍要运行」
- 顶栏右侧依次是 4 个浮窗 toggle、图钉(置顶)、齿轮(设置);主面板 4 个标签:时钟 / 番茄钟 / 倒计时 / 闹钟
- 浮窗右键 / 双击 / Esc / × / 触屏长按 都能关
开发者
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 完全持久化,重启后调度器按规则继续排程。
打包
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
Description
Languages
TypeScript
70%
CSS
23.1%
HTML
6.9%