feat: DH-HIS Web Giao Ban Go v1.0.1 (Favicon, Exe icon, System Tray, Gitea auto-update)

This commit is contained in:
ongtrieuhau
2026-10-26 00:10:07 -07:00
commit 228d4d14df
32 changed files with 5914 additions and 0 deletions
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

+13
View File
@@ -0,0 +1,13 @@
package tray
import (
_ "embed"
)
//go:embed app.ico
var iconData []byte
// DefaultIconBytes returns the embedded ICO byte slice
func DefaultIconBytes() []byte {
return iconData
}
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

+23
View File
@@ -0,0 +1,23 @@
//go:build !windows
package tray
import (
"os"
"os/signal"
"syscall"
"web-giao-ban-go/logger"
)
func Run(onServerReady func()) {
if onServerReady != nil {
go onServerReady()
}
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
sig := <-sigChan
logger.Info("Nhận tín hiệu dừng hệ thống (%v), đang thoát...", sig)
}
+71
View File
@@ -0,0 +1,71 @@
//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")
})
}