名字来自一句吐槽:人只有一个 CPU,工作线程开多了就会卡死——所以把"记住这些事"这条线程外包出去吧。
最早的起因是:在电脑上多开工作的时候,忙着忙着就把一开始要做的事忘掉了 qwq,于是想能不能把任务都记下来——这才用蓝色大肥鱼顺手搓了这么一个小工具。
白天被会议、需求变更和群消息轮番抢占,等真正坐下来的时候,今天要做的事已经忘了一半。这个项目就是为这种日常准备的:把"记住这些事"这条线程外包出去。
它做的事情很朴素:把你今天的任务记下来,到点前提醒你一声;你忙的时候,它缩成巴掌大的小窗贴在屏幕角落——像一张便利贴,区别是它不会掉、不会被顺手撕掉、也不会在下班时被风吹走。
希望它能让你少惦记一点"我是不是忘了什么",多想一点"接下来做哪件"。
主窗口 · 今日任务(左边是今天要做的事,右边一眼看到完成率)
mini 小窗(点「缩为小窗」后缩到屏幕角落并始终置顶,忙的时候盯着它就行)
窗口背景自定义(不透明度、明暗程度、自己的图片、图片遮罩)
内置的默认背景图片来自 B 站用户 ZipZipPipe,随仓库放在
src/assets/bg/wallpaper.jpg。不喜欢的话随时可以换成自己的图,见 窗口背景自定义。
- 任务管理:创建 / 编辑 / 删除,分类与标签、优先级、进度、状态流转;按住卡片左边的
⋮⋮握把直接拖动排序 - 今日任务:把计划开始 / 截止在今天、今天创建、以及进行中的任务聚在一起;没有期限的任务未完成时会一直留着
- 到点提醒:任务开始前、到期前、到期时的系统通知,托盘菜单常驻
- 番茄钟:25 / 5 / 15 可配置,可关联任务,专注结束后自动 +1 番茄数
- 统计回顾:今日完成率环形图、近 7 天柱状图、近 30 天热力图、本月分类饼图
- mini 小窗:一键缩成 260×360 置顶小窗(标题栏 / 侧边栏 / 托盘菜单),专注时挂在桌面角落
- 窗口背景自定义:自带一张默认背景图,也可以换成自己的图片(铺满 / 完整显示 / 平铺),并调节不透明度、明暗程度与图片遮罩
- 系统集成:始终置顶、开机自启、深色模式(跟随系统 / 手动)、数据导入导出
- 本地优先:运行时零联网,不注册、不上传、无遥测,数据就是你机器上的一个 JSON 文件
- Node.js >= 18
- npm 或 pnpm
- Windows(打包配置目前提供 NSIS 安装包与便携版)
git clone https://github.com/Mantianxiaoyou/MyTaskThreads.git
cd MyTaskThreads
npm install
npm run dev # 启动 Vite 开发服务器,并自动打开 Electron 窗口改了
electron/下的主进程或 preload 必须重启 Electron 才生效;src/里的渲染进程有热更新。
npm run build # 渲染进程 + NSIS 安装包 + 便携版,输出到 release/
npm run build:dir # 只产出免安装目录 release/win-unpacked
npx vite build # 只想验证渲染进程能否编译
electron-builder第一次打包要联网下载 Electron 运行时与打包工具(100MB 以上),之后走本地缓存。
推一个 v* 标签,.github/workflows/build.yml 会在 GitHub 的 Windows 机器上自动打包,并把安装包与便携版附到 Release:
git tag v1.0.0
git push origin v1.0.0平时 push 和 PR 只会跑一次渲染进程编译校验(几十秒),不打安装包;也可以在 Actions 页面手动触发打包。
仓库里附了两个双击启动器,不用开终端:
| 文件 | 说明 |
|---|---|
无终端启动器.vbs |
静默启动,不弹控制台窗口 |
终端启动器.bat |
带控制台窗口,方便看输出 |
首次运行时它们会先构建 dist/(需要 PATH 上有 node / npm)。注意这一步走的是 npm run build,会连带触发 electron-builder 打包流程,因此第一次会比较慢;只想准备 dist/ 的话手动跑一次 npx vite build 更快。
| 快捷键 | 功能 |
|---|---|
| Ctrl+Shift+T | 显示 / 隐藏主窗口(系统全局) |
「设置 → 窗口 → 窗口背景」,对主窗口和 mini 小窗同时生效:
| 控件 | 说明 |
|---|---|
| 不透明度 | 0-100,越低越能透出桌面(窗口本身是透明的) |
| 明暗程度 | 50 跟随主题;< 50 背景更暗,> 50 更亮 |
| 背景图片 | 默认用内置图;点「换成自己的图片…」可选任意本地图片,可切换铺满窗口 / 完整显示 / 平铺 |
| 图片遮罩 | 在图片上叠一层主题色,0 为原图,越大文字越清晰 |
几点说明:
- 内置背景可以随便换:设置里随时能换成自己的图片,也能一键「用内置背景」换回来;想彻底替换内置那张,直接改
src/assets/bg/wallpaper.jpg即可。 - 图片由主进程读成 data URL 再交给页面,开发模式(http)和打包后(file)行为一致
- 只把图片路径存进 tasks.json,图片内容留在内存;图片被移动或删除后,设置页会给出提示
- 支持 png / jpg / webp / gif / bmp / avif,单张上限 20MB
- 默认值是内置背景 + 明暗 50 + 不透明度 100;「恢复默认背景」就是回到这套默认值
- 计划开始时间、截止时间在今天,或今天创建的任务
- 进行中的任务
- 没有期限的任务:没做完就一直留在今日,做完后只在完成当天显示
- 跨天时会自动重新判定(每 30 秒检查一次日期),不需要重启应用
数据保存在 Electron userData 目录下的 tasks.json:
- Windows:
%APPDATA%/MyTaskThreads/tasks.json - macOS:
~/Library/Application Support/MyTaskThreads/tasks.json - Linux:
~/.config/MyTaskThreads/tasks.json
可在「设置 → 数据」中导出 / 导入备份。背景图片只记录文件路径,不占用数据文件体积。
.
├── electron/ # Electron 主进程
│ ├── main.js # 入口
│ ├── preload.js # contextBridge 桥
│ ├── data.service.js
│ ├── ipc-handlers.js
│ ├── notifications.js
│ └── tray.js
├── src/ # Vue 3 渲染进程
│ ├── main.js
│ ├── App.vue
│ ├── router/
│ ├── components/
│ ├── views/
│ ├── stores/
│ ├── composables/ # 复用逻辑(窗口背景样式等)
│ ├── services/
│ ├── utils/
│ └── assets/
│ └── bg/ # 内置背景图(可自行替换 wallpaper.jpg)
├── index.html
├── docs/ # README 用的界面截图
├── vite.config.js
└── package.json
| 层 | 技术 |
|---|---|
| 桌面框架 | Electron 28 |
| 前端框架 | Vue 3 + Vite |
| 状态管理 | Pinia |
| 路由 | Vue Router 4 |
| 图表 | Chart.js + vue-chartjs |
| 样式 | 原生 CSS + CSS 变量(背景混色用 color-mix) |
| 数据 | 本地 JSON 文件 |
| 打包 | electron-builder |
改了代码为什么没生效?
src/ 走 Vite 热更新;electron/ 下的主进程和 preload 只跟着窗口创建加载,必须重启 Electron(刷新页面救不了主进程)。
背景图片选了,但窗口里没看到? 先看设置页的预览框:预览有图而窗口没有,重启一次应用即可(preload 变更后旧窗口不生效);预览也没有的话,设置页会写出具体原因(格式不支持 / 超过 20MB / 文件被移动或删除)。
npm run build 一直卡在下载?
electron-builder 首次要下载 Electron 运行时和 NSIS / 签名工具,国内网络可能很慢。只想出前端产物用 npx vite build,想跳过安装包用 npm run build:dir。
数据在哪,换电脑怎么带走?
见 数据存储。直接拷 tasks.json,或用「设置 → 数据」导出导入。
会联网、会上传数据吗?
不会。运行时没有任何网络请求,没有账号也没有统计上报;唯一联网的地方是 npm install 和打包。
欢迎提 Issue 和 PR。提交前建议先跑 npx vite build 确认渲染进程能编译;electron/ 的改动没有自动化测试,麻烦手动 npm run dev 验一遍。


