定位
pf-download 是图模工坊的桌面下载客户端——面向运营/交付人员的 Windows 应用,登录后端、筛选订单、批量下载合成成品,带队列、重试、去重、自动轮询与离线告警。它随”合成状态与下载状态解耦”一起引入(8bedb52),是下载状态流的消费端。
- 形态:Wails 桌面应用(Go 后端 + Vue 3 前端),产物
pf-download.exe - Go:
module pf-download,Go 1.25,Wails v2.13,energye/systray - 前端:Quasar
2.23+ Vue3.5+ Pinia + vue-router + vue-i18n - 窗口:1280×800(最小 1024×700),关闭最小化到系统托盘(暂停/继续/退出)
- 运行数据:
%APPDATA%\pf-download(config、download_history.json、download_receipts.json、session.json、logs/)
它做什么
一句话:登录 pf-service → 浏览订单/提交 → 把已合成成品排队下载到本地文件夹,并把下载回执同步回服务端。
1 | 登录(pf-service JWT) |
GetSubmissionsPage(..., status, downloadStatus, ...) 的双状态签名,正是”合成状态 / 下载状态解耦”的直接体现(详见 数据模型)。
应用结构
Go 侧 app.go(绑定到 window.go.main.App.*)聚合 pkg/ 下的服务:
| 模块 | 职责 |
|---|---|
config |
本地配置读写 |
auth |
登录 / 会话 / 租户 |
order |
订单 + 提交分页 |
downloader |
下载引擎:入队/重试/暂停/继续/自动轮询/磁盘状态 |
history / receipt |
下载历史去重 / 回执 |
alarm |
离线告警 |
logger / sys |
日志 / 系统托盘 + 开机自启(写注册表) |
前端页面:index、history、queue、settings、login;src/bridge/index.ts 是 Wails 桥接,boot/auth.ts、boot/i18n.ts。
能力要点
- 队列 + 重试:批量下载排队,失败可重试,磁盘状态跟踪
- 去重:
download_history.json记录已下载,避免重复 - 自动轮询:无人值守模式定时拉取新完成的成品
- 离线告警:后端不可达时告警
- 系统集成:托盘常驻、Windows 开机自启
发布分发
apps/pf-download/upload.js(”新增 MinIO 客户端上传工具”提交)是发布辅助脚本,不是应用核心:bun run upload.js 把构建好的 build/bin/pf-download.exe 用 Bun S3Client 传到 MinIO pf-bucket/downloads/pf-download.exe,终端用户即可从 https://pf.wangijun.com/storage/downloads/pf-download.exe 下载客户端。
开发
1 | bun dev:download # bun run --filter @wangijun/pf-download dev(Wails dev, serverUrl :9000) |
pf-download不进 根dev/部署脚本主流程(只有dev:download)——它以.exe形式分发,不部署到 Nginx。
下一步
- 想看它消费的下载 API → pf-service 后端
- 想看合成/下载状态如何解耦 → 数据模型
- 想看运营在后台的审核视图 → 管理后台