//go:build windows package tray import ( "fmt" "os/exec" "github.com/getlantern/systray" "web-giao-ban-go/config" "web-giao-ban-go/logger" ) func openBrowser(url string) { _ = exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start() } func Run(onServerReady func()) { systray.Run(func() { cfg := config.Get() baseURL := fmt.Sprintf("http://localhost:%d", cfg.Server.Port) adminPath := cfg.Server.AdminPath if adminPath == "" { adminPath = "/admin" } systray.SetIcon(DefaultIconBytes()) systray.SetTitle("DH-HIS Giao Ban") systray.SetTooltip(fmt.Sprintf("DH-HIS Quản Lý Giao Ban (Port %d)", cfg.Server.Port)) mTitle := systray.AddMenuItem(fmt.Sprintf("🏥 DH-HIS Giao Ban (%s)", cfg.Updater.CurrentVersion), "Phiên bản phần mềm") mTitle.Disable() systray.AddSeparator() mOpenWeb := systray.AddMenuItem("📊 Mở Báo Cáo Giao Ban", "Mở giao diện báo cáo giao ban bệnh viện") mOpenAdmin := systray.AddMenuItem("⚙️ Quản Trị Hệ Thống", "Thiết lập kết nối CSDL và tham số") mOpenLogs := systray.AddMenuItem("📜 Xem Nhật Ký / Log App", "Xem trực tiếp log hoạt động của ứng dụng") mCheckUpdate := systray.AddMenuItem("🔄 Kiểm Tra Bản Cập Nhật", "Kiểm tra phiên bản mới từ Gitea") systray.AddSeparator() mQuit := systray.AddMenuItem("❌ Thoát Ứng Dụng", "Dừng dịch vụ và thoát") // Start web server in background if onServerReady != nil { go onServerReady() } // Handle tray menu events go func() { for { select { case <-mOpenWeb.ClickedCh: openBrowser(baseURL + "/web-giao-ban-go") case <-mOpenAdmin.ClickedCh: openBrowser(baseURL + "/web-giao-ban-go" + adminPath) case <-mOpenLogs.ClickedCh: openBrowser(baseURL + "/web-giao-ban-go" + adminPath + "#tab-logs") case <-mCheckUpdate.ClickedCh: openBrowser(baseURL + "/web-giao-ban-go" + adminPath + "#tab-update") case <-mQuit.ClickedCh: logger.Info("Người dùng chọn Thoát từ khay hệ thống (System Tray)") systray.Quit() return } } }() }, func() { logger.Info("System Tray đã đóng") }) }