# 腾图工具箱(TengTu Toolbox) 基于 Wails v3 的桌面工具箱应用。前端使用原生 HTML/CSS/JS + Vite 构建,后端使用 Go;主窗口内嵌多个网页 Tab,并提供新闻聚合、Github 仓库监听、股票行情、记录/待办编辑、硬件监控、主机管理、工具(Web 服务 / 翻译 / 二维码)、聊天与设置等面板。 ## 快速开始 ```bash # 开发模式:启动应用并为前后端启用热重载 wails3 dev # 构建生产版本,输出到 bin/ 目录 wails3 build ``` ## 主要功能 | Tab | 说明 | | --- | --- | | 笔记 | 内嵌网页,地址可在设置中修改;底部 footer 显示随机古诗(水平滚动,可配置颜色/字号/刷新间隔) | | 控制 | 内嵌网页,地址可在设置中修改 | | 博客 | 内嵌网页,地址可在设置中修改 | | 网址 | 常用网址卡片,点击在浏览器打开,列表在设置中维护 | | 新闻 | 聚合煎蛋、头条热榜、腾讯科技/财经、Solidot;命中关键词置顶高亮,已查看标题灰显,条数可设置 | | Github | 监听配置仓库的最新提交与 release,本地版本低于最新版提示更新;Latest 之后的 Pre-release/草稿版本也会列出(仅展示,不参与更新比较);「本地 xxx」徽标与版本徽标均可点击跳转到对应 releases 列表 | | 股市 | 自选股实时行情,点击行查看分时 / 日K;交易时段自动刷新,休市用较长间隔 | | 记录 | 文本记录文件编辑,支持 Markdown 实时预览(编辑 / 预览切换,预览用后端 gomarkdown 渲染),路径可在设置中修改 | | 待办 | 每行一个待办任务,可勾选完成、编辑、删除;每条可设置提醒时间,到点自动弹出置顶消息窗提醒(即使窗口隐藏也会触发) | | 硬件 | 内嵌硬件监控页,地址可在设置中修改 | | 工具 | 开发/运维辅助工具:Web 服务(选目录开启浏览服务)、翻译(中英互译)、二维码生成、发送 ntfy 消息、ntfy 聊天室、古诗词、屏幕截图;各功能区默认折叠,点击标题展开 | | 服务 | 内置 API 服务状态、电源命令状态与 Gin 日志(「清空日志」在标题右侧);原截屏功能已迁移至工具页 | | 聊天 | 内嵌网页,地址可在设置中修改 | | 设置 | 按「系统 + 各 Tab」分组展示配置项,保存后立即生效 | ### 随机古诗 笔记页 footer 显示的水平滚动随机古诗,数据来源为 [古诗词网接口](https://poetry.palemoky.com/api/poems/random)(`https://poetry.palemoky.com/api/poems/random`,由 [古诗词网](https://poetry.palemoky.com) 提供)。每次随机取一首,返回标题 / 作者 / 朝代 / 内容;可在设置中调整显示开关(禁止显示)、文字颜色、字号、滚动速度(秒/轮,数值越小滚动越快)、朗读按钮;速度保存后立即生效。 ### 设置项 - 系统:界面样式(暗色/亮色)、系统启动时运行、窗口置顶、呼出窗口热键 - 各 Tab 对应设置:页面地址、Tab 显示顺序(逗号分隔)、股票代码与涨跌颜色、股市刷新间隔与休市刷新间隔、新闻关键词、新闻刷新间隔与显示条数、Github 项目与刷新间隔、API 监听地址、记录文件路径、待办文件路径、股票/新闻滚动条等 ### 滚动文字 股票与新闻滚动条显示在屏幕顶部,位置与配置(宽度、字号、颜色、速度、背景透明)均可在设置中调整;位置会在拖动时自动保存,下次启动恢复。 ### 工具页 - **Web 服务**:选择任意目录,开启本地静态文件浏览服务(默认页为 `index.html` 或 `readme.md`,README 会自动渲染为 HTML);启动后点击地址链接可在系统浏览器打开。 - **翻译**:一个文本框,输入中文自动翻译为英文、输入英文自动翻译为中文(自动检测方向)。使用 MyMemory 免费接口,每日约 5000 词配额(超出会提示恢复时间);支持 Ctrl/Cmd+Enter 快捷翻译。 - **二维码生成**:输入任意字符串(网址、文本、联系方式等),即时生成 PNG 二维码图片;点击图片或「下载 PNG」可保存,支持 Ctrl/Cmd+Enter 快捷生成。 - **发送 ntfy 消息**:输入主题(Topic,用于指定监听频道,输入过的主题自动记忆、下拉可选)、标题(可空)、内容,推送到 ntfy 服务(默认 `https://ntfy.sh`),供手机 / 浏览器 / 其他设备即时提醒。主题历史保存于用户配置目录 `TengTuToolbox/ntfy_topics.json`。 - **ntfy 聊天室**:输入聊天室名称(ntfy 主题)并「开始监听」,通过 SSE 长连接实时接收该主题消息并显示在列表中;主题留空则不监听。可与手机 / 其他设备用同一主题互发消息,实现跨设备聊天 / 通知。监听时收到消息自动滚动到底部(上滚可暂停跟随)。 - **古诗词**:显示主窗口 footer 最近获取到的古诗词内容(题目 / 作者 / 诗句),可点击「刷新获取」拉取新的一首;footer 加载到的古诗也会同步显示在此。数据来自古诗词网随机接口。 - **屏幕截图**:点击「截屏」后自动隐藏本程序窗口,截取整个屏幕(全部显示器拼接),完成后重新显示本程序并预览截图;截到的画面不含本程序自身。原位于主机页的截屏功能已迁移至此。 ### 鼠标提醒 通过内置 API 触发系统级鼠标提醒:平时鼠标为正常样式;触发后鼠标图标闪烁(白↔红,约 250ms 周期),光标下方浮出半透明提示文字,可覆盖任意窗口(系统级),默认 8 秒自动消退。文字默认带黑色描边(可在设置中调整描边颜色与宽度,0 关闭),避免在亮/暗不同背景下看不清。详见 [mousealert_windows.go](mousealert_windows.go)。 ## 项目结构 - `main.go`:Go 后端入口,创建应用、主窗口、系统托盘,注册服务与窗口事件,启动时间广播与待办提醒调度协程 - `greetservice.go`:Wails 示例服务(GreetService,用于验证 Go↔JS 绑定链路) - `settingsservice.go`:设置读写、新闻抓取、Github 监听、行情查询、翻译、二维码、截屏、Web 服务、待办读写、Markdown 渲染、API 状态等核心服务 - `settings.go`:AppSettings 结构体、默认值与字段校验 - `newsfeed.go`:新闻来源抓取(煎蛋 / 头条 / 腾讯 / Solidot) - `trending.go`:GitHub Trending 热门仓库抓取与自动翻译 - `bilifeed.go`:B站关注动态抓取(需 cookie) - `githubwatch.go`:Github REST API 提交与版本监控(含 Latest 之后的版本列出) - `stockquote.go`:股票行情与分时 / 日K - `ticker.go`:滚动条窗口(位置保存) - `poem.go`:主窗口首 Tab footer 随机古诗(水平滚动) - `apiserver.go`:内置 API 服务(健康检查、通知、窗口控制、电源命令、鼠标提醒、屏幕截图等) - `pccontrol.go`:电源控制(关机 / 重启 / 休眠 / 锁屏) - `timesync.go`(及 `_windows.go` / `_other.go`):系统时间同步 - `screenshot.go`:屏幕截图(多显示器拼接,返回 PNG base64 data URI) - `webservice.go`:工具页 Web 服务(目录选择、静态文件服务、README 渲染) - `translate.go`:工具页翻译(MyMemory 免费接口 + 中英文自动检测 + 限流提示) - `qrcode.go`:工具页二维码生成(go-qrcode,返回 PNG data URI) - `ntfy.go`:工具页 ntfy 消息推送与聊天室(POST ntfy.sh 指定主题、SSE 长连接订阅实时接收消息,主题历史持久化记忆) - `todoremind.go`:待办提醒调度(解析待办文件中的 `@ 时间` 标记,到点广播事件) - `mousealert_windows.go`:系统级鼠标提醒(Windows,WH_MOUSE_LL 全局钩子 + 置顶透明覆盖层 + GDI 绘制) - `mousealert_other.go`:鼠标提醒非 Windows 空实现 - `frontend/`:前端代码(HTML、CSS、JavaScript) - `frontend/src/main.js`:前端逻辑,负责调用后端服务、监听后端事件(含 Tab 管理、工具页折叠、待办提醒弹窗、记录 Markdown 预览等) - `frontend/src/ticker.js`:滚动条逻辑 - `frontend/src/lunar.js`:农历与节日计算 - `wails.json`:Wails 项目配置 ## 构建说明 - 开发调试:`wails3 dev` - 生产构建:`wails3 build`,输出 `bin/腾图工具箱.exe`(UPX 压缩) - 后端单独编译:`go build .` - 前端单独构建:`cd frontend && npm run build` ## 备注 1. `wails3 task windows:build BIN_DIR=Z:/` 可编译到指定目录并 UPX 压缩(见 `build/windows/taskfile.yml`) 2. `wails3 dev` 会根据 `bin/config.yaml` 的配置决定输出目录 3. 先 `npm run build` 完成后再单独 `go build`(后端需要读取构建后的前端 dist 清单,并行会导致 embed 失败) 4. 修改 Go 结构体/事件后需运行 `wails3 generate bindings` 重新生成前端绑定 5. 修改/新增前端页面后需 `cd frontend && npm run build`,再 `wails3 build` 才能打入产物 ## 需求 1. 始终没有保存文字滚动条的位置(新闻/股票):移动滚动条后 10 秒保存一次位置,重启程序时调用最后一次保存的位置 2. 系统级鼠标动态提醒:平时正常样式,API 触发时鼠标闪烁 + 光标下方半透明提示文字(已实现,见 mousealert_windows.go) 3. 工具页各功能区加区隔,默认折叠(已实现,见 frontend/src/main.js 的 initToolCollapse) 4. 记录界面支持 Markdown 格式(已实现,编辑/预览切换,见 settingsservice.go 的 RenderMarkdown)