feat: 接入托盘 / 添加图标生成工具 / 重命名并完善前端
- 托盘:用 getlantern/systray 重写 internal/tray,支持显示/隐藏窗口与退出 - 图标:新增 pkg/icongen 工具,支持 png/jpg/gif/bmp/webp,输出 ico/png 多个尺寸 - 重命名:项目默认名改为「青梧映星」,wails.json/productname/companyname/copyright 同步更新 - 顶栏:新增顶部导航栏(主题切换、设置、用户),iconfont 自托管 fa-solid-900.woff2 - 主题:CSS 变量 + html[data-theme] 控制白昼/黑夜切换,同时调用 WindowSetDarkTheme/LightTheme - 底部:版权栏包含工作室、开发者与点击跳转客服链接 - 打包:wails build + exe 版本更新至 1.20 MB
This commit is contained in:
55
main.go
55
main.go
@@ -4,23 +4,33 @@ import (
|
||||
"context"
|
||||
"embed"
|
||||
"log"
|
||||
"sync/atomic"
|
||||
|
||||
"github.com/wailsapp/wails/v2"
|
||||
"github.com/wailsapp/wails/v2/pkg/options"
|
||||
"github.com/wailsapp/wails/v2/pkg/options/assetserver"
|
||||
"github.com/wailsapp/wails/v2/pkg/options/windows"
|
||||
"github.com/wailsapp/wails/v2/pkg/runtime"
|
||||
|
||||
"go_win_template/internal/plugins"
|
||||
"go_win_template/internal/tray"
|
||||
)
|
||||
|
||||
//go:embed all:frontend/dist
|
||||
//go:embed assets/icon.png
|
||||
//go:embed build/windows/icon.ico
|
||||
var assets embed.FS
|
||||
|
||||
var (
|
||||
trayMgr *tray.Manager
|
||||
forceQuit atomic.Bool
|
||||
)
|
||||
|
||||
func main() {
|
||||
wailsApp := NewApp()
|
||||
|
||||
cfg := &options.App{
|
||||
Title: "go_win_template",
|
||||
Title: "青梧映星",
|
||||
Width: 1280,
|
||||
Height: 800,
|
||||
MinWidth: 1024,
|
||||
@@ -30,6 +40,10 @@ func main() {
|
||||
Assets: assets,
|
||||
},
|
||||
BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1},
|
||||
Windows: &windows.Options{
|
||||
// 窗口标题栏跟随系统白昼/黑夜主题
|
||||
Theme: windows.SystemDefault,
|
||||
},
|
||||
OnStartup: func(ctx context.Context) {
|
||||
log.Println("[main] startup complete")
|
||||
// 启动插件
|
||||
@@ -37,6 +51,25 @@ func main() {
|
||||
log.Printf("[main] plugin start error: %v", err)
|
||||
}
|
||||
plugins.PrintStatus()
|
||||
// 启动系统托盘
|
||||
startTray(ctx)
|
||||
},
|
||||
OnBeforeClose: func(ctx context.Context) bool {
|
||||
// 真正退出时不再拦截
|
||||
if forceQuit.Load() {
|
||||
return false
|
||||
}
|
||||
// 托盘可用时,关闭窗口改为隐藏到托盘
|
||||
if trayMgr != nil && trayMgr.Active() {
|
||||
runtime.WindowHide(ctx)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
},
|
||||
OnShutdown: func(context.Context) {
|
||||
if trayMgr != nil {
|
||||
trayMgr.Quit()
|
||||
}
|
||||
},
|
||||
Bind: []interface{}{
|
||||
wailsApp,
|
||||
@@ -48,3 +81,23 @@ func main() {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
// startTray 初始化系统托盘。Windows 下托盘图标需为 .ico 格式,
|
||||
// 使用 build/windows/icon.ico;macOS/Linux 可改用 .png。
|
||||
func startTray(ctx context.Context) {
|
||||
icon, err := assets.ReadFile("build/windows/icon.ico")
|
||||
if err != nil {
|
||||
log.Printf("[tray] load icon failed: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
trayMgr = tray.New(tray.Options{
|
||||
Icon: icon,
|
||||
Tooltip: "青梧映星",
|
||||
OnQuit: func() {
|
||||
forceQuit.Store(true)
|
||||
runtime.Quit(ctx)
|
||||
},
|
||||
})
|
||||
trayMgr.Run(ctx)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user