diff --git a/.gitignore b/.gitignore index ba8194a..0389cdc 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ bin frontend/dist frontend/node_modules build/linux/appimage/build -build/windows/nsis/MicrosoftEdgeWebview2Setup.exe \ No newline at end of file +build/windows/nsis/MicrosoftEdgeWebview2Setup.exe +config.yaml \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json deleted file mode 100644 index 6b61141..0000000 --- a/.vs/VSWorkspaceState.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "ExpandedNodes": [ - "" - ], - "PreviewInSolutionExplorer": false -} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite deleted file mode 100644 index 900657b..0000000 Binary files a/.vs/slnx.sqlite and /dev/null differ diff --git a/.vs/wails3-nuxt2/v17/.wsuo b/.vs/wails3-nuxt2/v17/.wsuo deleted file mode 100644 index f5b3ef0..0000000 Binary files a/.vs/wails3-nuxt2/v17/.wsuo and /dev/null differ diff --git a/.vs/wails3-nuxt2/v17/DocumentLayout.json b/.vs/wails3-nuxt2/v17/DocumentLayout.json deleted file mode 100644 index db5ea0a..0000000 --- a/.vs/wails3-nuxt2/v17/DocumentLayout.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "Version": 1, - "WorkspaceRootPath": "D:\\Project\\Go\\src\\wails3-nuxt2\\", - "Documents": [], - "DocumentGroupContainers": [ - { - "Orientation": 0, - "VerticalTabListWidth": 256, - "DocumentGroups": [] - } - ] -} \ No newline at end of file diff --git a/app.go b/app.go new file mode 100644 index 0000000..e895640 --- /dev/null +++ b/app.go @@ -0,0 +1,20 @@ +package main + +import ( + "context" + + "github.com/wailsapp/wails/v3/pkg/application" +) + +// App struct +type App struct { + ctx context.Context + app *application.App +} + +// startup is called when the app starts. The context is saved +// so we can call the runtime methods +func (a *App) ServiceStartup(ctx context.Context, options application.ServiceOptions) error { + a.ctx = ctx + return nil +} diff --git a/go.mod b/go.mod index e28dc4d..6d422c6 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module changeme +module go-desk-wails go 1.24.0 @@ -12,7 +12,7 @@ require ( github.com/bep/debounce v1.2.1 // indirect github.com/cloudflare/circl v1.6.0 // indirect github.com/cyphar/filepath-securejoin v0.4.1 // indirect - github.com/ebitengine/purego v0.8.2 // indirect + github.com/ebitengine/purego v0.8.4 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.6.2 // indirect @@ -36,12 +36,13 @@ require ( github.com/samber/lo v1.49.1 // indirect github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/skeema/knownhosts v1.3.1 // indirect + github.com/stretchr/testify v1.11.1 // indirect github.com/wailsapp/go-webview2 v1.0.21 // indirect github.com/wailsapp/mimetype v1.4.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect golang.org/x/crypto v0.36.0 // indirect golang.org/x/net v0.37.0 // indirect - golang.org/x/sys v0.31.0 // indirect + golang.org/x/sys v0.35.0 // indirect golang.org/x/text v0.23.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect diff --git a/go.sum b/go.sum index 65c7e45..41b3388 100644 --- a/go.sum +++ b/go.sum @@ -20,8 +20,8 @@ github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGL github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I= -github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/ebitengine/purego v0.8.4 h1:CF7LEKg5FFOsASUj0+QwaXf8Ht6TlFxg09+S9wz0omw= +github.com/ebitengine/purego v0.8.4/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/elazarl/goproxy v1.4.0 h1:4GyuSbFa+s26+3rmYNSuUVsx+HgPrV1bk1jXI0l9wjM= github.com/elazarl/goproxy v1.4.0/go.mod h1:X/5W/t+gzDyLfHW4DrMdpjqYjpXsURlBt9lpBDxZZZQ= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -97,8 +97,8 @@ github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/wailsapp/go-webview2 v1.0.21 h1:k3dtoZU4KCoN/AEIbWiPln3P2661GtA2oEgA2Pb+maA= github.com/wailsapp/go-webview2 v1.0.21/go.mod h1:qJmWAmAmaniuKGZPWwne+uor3AHMB5PFhqiK0Bbj8kc= github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= @@ -125,8 +125,8 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= diff --git a/main.go b/main.go index 9d9468a..0da4d1c 100644 --- a/main.go +++ b/main.go @@ -2,11 +2,11 @@ package main import ( "embed" - _ "embed" "log" "time" "github.com/wailsapp/wails/v3/pkg/application" + "github.com/wailsapp/wails/v3/pkg/events" ) // Wails uses Go's `embed` package to embed the frontend files into the binary. @@ -27,10 +27,12 @@ func main() { // 'Assets' configures the asset server with the 'FS' variable pointing to the frontend files. // 'Bind' is a list of Go struct instances. The frontend has access to the methods of these instances. // 'Mac' options tailor the application when running an macOS. + appService := &App{} app := application.New(application.Options{ - Name: "wails3-nuxt", + Name: "main", Description: "A demo of using raw HTML & CSS", Services: []application.Service{ + application.NewService(appService), application.NewService(&GreetService{}), }, Assets: application.AssetOptions{ @@ -46,7 +48,7 @@ func main() { // 'Mac' options tailor the window when running on macOS. // 'BackgroundColour' is the background colour of the window. // 'URL' is the URL that will be loaded into the webview. - app.Window.NewWithOptions(application.WebviewWindowOptions{ + mainWindow := app.Window.NewWithOptions(application.WebviewWindowOptions{ Title: "Window 1", Mac: application.MacWindow{ InvisibleTitleBarHeight: 50, @@ -55,8 +57,59 @@ func main() { }, BackgroundColour: application.NewRGB(27, 38, 54), URL: "/", + Width: 1240, + Height: 850, }) + // 窗口关闭时隐藏到托盘而不是退出 + mainWindow.RegisterHook(events.Common.WindowClosing, func(event *application.WindowEvent) { + log.Println("窗口关闭,隐藏到系统托盘") + mainWindow.Hide() + event.Cancel() + }) + + appService.app = app + + // 创建系统托盘 + systray := app.SystemTray.New() + + // 读取并设置托盘图标 + // iconData, err := os.ReadFile("build/windows/icon.ico") + // if err != nil { + // // 如果读取失败,尝试使用 favicon + // iconData, _ = assets.ReadFile("frontend/dist/favicon.ico") + // } + // if iconData != nil { + // systray.SetIcon(iconData) + // } + + // 设置托盘提示文本 + // systray.SetTooltip(appConfig.AppName) + + // 创建托盘菜单 + trayMenu := app.NewMenu() + trayMenu.Add("显示主窗口").OnClick(func(ctx *application.Context) { + log.Println("托盘菜单:显示主窗口") + mainWindow.Show() + mainWindow.Focus() + }) + trayMenu.AddSeparator() + trayMenu.Add("退出").OnClick(func(ctx *application.Context) { + log.Println("托盘菜单:退出应用") + app.Quit() + }) + + systray.SetMenu(trayMenu) + + // 单击托盘图标显示主窗口 + systray.OnClick(func() { + log.Println("托盘图标被点击") + mainWindow.Show() + mainWindow.Focus() + }) + + log.Println("系统托盘创建成功") + // Create a goroutine that emits an event containing the current time every second. // The frontend can listen to this event and update the UI accordingly. go func() {