把国际金价换算成人民币克价的 Windows 桌面卡片,使用 Tauri 2、React 和 TypeScript 构建。
人民币克价 = XAU/USD × USD/CNY ÷ 31.1034768
显示的是现货参考价,不是银行买卖价、黄金回收价或首饰零售价。
- 360px 无边框透明卡片,自动跟随 Windows 明暗主题
- 卡片附着在 Windows 桌面层,按 Win+D 显示桌面时仍然可见
- 系统托盘常驻;左键托盘图标显示或隐藏卡片
- 拖动卡片标题区域调整位置,重启后自动恢复
- 右键卡片或托盘:显示 / 隐藏、立即刷新、开机启动、检查更新、退出
- 每 5 分钟刷新;点击右上角状态可立即刷新
- 近半年周线走势图、涨跌额和涨跌幅,涨红跌绿
- 主报价源失败时自动切换备用源
- 断网后依次降级为缓存、过期和暂不可用状态
- 单实例运行,重复启动会唤醒已有卡片
桌面层挂载在应用启动时执行一次。如果手动重启了 Windows Explorer,重启 Gold Show 即可重新挂载。
应用启动 8 秒后静默检查一次更新,此后每 6 小时检查一次,也可以从托盘手动「检查更新」。 发现新版本时卡片底部浮出一条提示,下载和安装都需要点击确认,安装完成后点「重启」生效。
更新源是 GitHub Release 里的 latest.json,在 src-tauri/tauri.conf.json 的 plugins.updater.endpoints 中配置。
| 用途 | 接口 |
|---|---|
| 金价主源 | https://api.gold-api.com/price/XAU |
| 金价备源 | https://www.vang.today/api/prices?type=XAUUSD |
| 美元人民币汇率 | https://api.frankfurter.dev/v2/rate/USD/CNY |
| 历史金价主源 | 新浪 GlobalFuturesService.getGlobalFuturesDailyKLine?symbol=GC |
| 历史金价备源 | 东方财富 push2his.eastmoney.com/api/qt/stock/kline/get(klt=102 周 K) |
| 历史汇率 | https://api.frankfurter.dev/v1/{start}..{end} |
备用源使用 buy 字段,因此界面会明确标注为“vang.today 买入参考”,不把两种口径伪装成完全一致的报价。
成功报价和近半年的周线保存在 Tauri 应用数据目录下的 gold-show.json。缓存超过 24 小时后会标记为过期。
卡片上的克价是每 5 分钟拉一次的即时价,走势图走的是另一条路,两者互不影响。
走势图只画近半年 26 个周点,本地滚动保存:数据齐全时每 12 小时回源刷新一次本周收盘, 窗口内还缺周时每小时补一次,超出半年的周随时间自然被裁掉。因此关机多久都不会让曲线断档, 开机补齐即可,也不需要这台电脑一直开着攒数据。
两个历史金价源给的都是 COMEX 黄金期货,与现货有约 1~2% 的基差。画图前整条历史会按最新一周 缩放到现货口径,曲线末端因此与卡片上的即时价完全一致;缩放系数在首末两点上约掉,所以涨跌幅 不受影响。缩放系数明显异常时不缩放,宁可少对齐一次也不画出错位的曲线。
主源返回的是 JSONP 包裹的日 K,parseJsonBody 会先剥壳再解析,日线按自然周折成周收盘。
两个源都在国内可直连,不依赖跨境网络。
历史源全部失败且本地没有周线时,走势图位置显示“正在获取走势数据”,即时价照常显示。
- Windows 10/11
- Node.js 20+ 或 22+
- Rust stable(MSVC 工具链)
- Visual Studio C++ Build Tools,勾选“使用 C++ 的桌面开发”
- Microsoft Edge WebView2 Runtime
安装依赖并启动:
npm install
npm run tauri dev运行验证:
npm test
npm run build
cargo fmt --manifest-path src-tauri/Cargo.toml -- --check
cargo check --manifest-path src-tauri/Cargo.toml本地构建带更新签名的安装包:
./build.ps1脚本会从 ~/.tauri/gold-show.key 读取更新私钥,产物在 src-tauri/target/release/bundle/nsis/。
NSIS 安装程序按当前用户安装,不需要管理员权限,把 *-setup.exe 发给别人即可。
首次在新机器上准备签名密钥:
npx tauri signer generate -w "$HOME\.tauri\gold-show.key"生成的公钥要写回 tauri.conf.json 的 plugins.updater.pubkey;私钥请妥善保管,丢失后已发布的旧版本将无法再收到更新。
ci.yml 在 Windows 上运行测试、前端构建、Rust 格式检查和 cargo check。
发版前需要在仓库 Secrets 中配置:
| Secret | 内容 |
|---|---|
TAURI_SIGNING_PRIVATE_KEY |
~/.tauri/gold-show.key 的完整文本 |
TAURI_SIGNING_PRIVATE_KEY_PASSWORD |
生成密钥时设置的密码,没有则留空 |
然后同步 package.json、src-tauri/Cargo.toml、src-tauri/tauri.conf.json 三处版本号并打标签:
git tag v0.3.0
git push origin v0.3.0release.yml 会校验标签与版本号一致,构建签名安装包,并把 latest.json 一起上传到 GitHub Release,老版本随后即可自动升级。
src/
├─ components/ 卡片内容、SVG 走势图与更新提示
├─ hooks/ 报价刷新与更新检查
├─ quote/ 数据契约、计算、主备源、周线回填与缓存
├─ styles/ 卡片样式
└─ platform.ts 首次窗口定位
src-tauri/
├─ capabilities/ 最小权限和报价域名白名单
└─ src/ WorkerW 桌面挂载、托盘、菜单、单实例与开机启动