fix(desktop): 报告 PDF 导出在壳内改走原生桥 —— WKWebView 拦死 window.open
实机验证抓到的:桌面壳内点 PDF 报「打印窗口被拦截」——Wails v3 的 WKWebView 把 window.open 拦成 null,前端弹打印窗那条路在壳内根本走不通(浏览器预览没事)。 - app.go 加 PrintReportPage(filename, html):打印视图 HTML 落临时文件(文件名 过滤路径字符),openInSystem 交系统默认浏览器打开,页面 onload 自动唤起打印框, 用户直接「存储为 PDF」。CJK 零字体依赖的原有优势不变。 - desktop.ts printReportHtml 改 async:inWails 走原生桥,浏览器维持 window.open; RunsView 调用点随之 async + 错误透 toast。 - 绑定重新生成(注意要 `wails3 generate bindings -ts`,裸跑默认吐 JS 且要 GOWORK=off,否则 go.work 干扰找不到 Service)。 验证:go test/tsc/68 例 vitest 全绿;壳内被拦是用户实机复现的。 ⚠️ 原生桥新路径(临时文件→浏览器→打印框)用户尚未实机点验,重新打的包已就位, 下次跑报告顺手验。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
goruntime "runtime"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/wailsapp/wails/v3/pkg/application"
|
||||
@@ -61,6 +62,27 @@ func (a *App) OpenReport(url, filename string) error {
|
||||
return openInSystem(dst)
|
||||
}
|
||||
|
||||
// PrintReportPage 把报告打印视图 HTML 落到临时文件,交系统默认浏览器打开(在那里 ⌘P →
|
||||
// 存储为 PDF)。Wails 的 WKWebView 会把 window.open 拦成 null,前端弹打印窗那条路在壳内
|
||||
// 走不通;转交系统浏览器后「前端打印出 PDF、CJK 零字体依赖」的原有优势不变。返回落盘路径。
|
||||
func (a *App) PrintReportPage(filename, html string) (string, error) {
|
||||
if filename == "" {
|
||||
filename = "report"
|
||||
}
|
||||
// 文件名进过滤:主题可能含 / 之类的路径字符。
|
||||
safe := strings.Map(func(r rune) rune {
|
||||
if strings.ContainsRune(`/\:*?"<>|`, r) {
|
||||
return '_'
|
||||
}
|
||||
return r
|
||||
}, filename)
|
||||
dst := filepath.Join(os.TempDir(), "sundynix-print-"+safe+".html")
|
||||
if err := os.WriteFile(dst, []byte(html), 0o600); err != nil {
|
||||
return "", err
|
||||
}
|
||||
return dst, openInSystem(dst)
|
||||
}
|
||||
|
||||
// Notify 弹一条系统通知(best-effort:macOS 用 osascript,其它平台暂静默)。
|
||||
func (a *App) Notify(title, body string) {
|
||||
if goruntime.GOOS == "darwin" {
|
||||
|
||||
Reference in New Issue
Block a user