| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package main
- import (
- "context"
- "embed"
- "io/fs"
- "log"
- "net/http"
- "net/http/httputil"
- "net/url"
- "wails-app/internal"
- "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"
- )
- //go:embed all:frontend/dist
- var assets embed.FS
- func main() {
- // Initialize the Gin backend (non-blocking goroutine, listens on :8888)
- internal.InitBackend()
- // Reverse proxy for /api/* requests to Gin backend (strips /api prefix)
- backendURL, _ := url.Parse("http://127.0.0.1:8888")
- proxy := httputil.NewSingleHostReverseProxy(backendURL)
- // Embedded frontend static files
- distFS, err := fs.Sub(assets, "frontend/dist")
- if err != nil {
- log.Fatal("failed to get embedded frontend:", err)
- }
- fileServer := http.FileServer(http.FS(distFS))
- // Create a handler that proxies /api to Gin, serves everything else from embed
- mux := http.NewServeMux()
- mux.HandleFunc("/api/", func(w http.ResponseWriter, r *http.Request) {
- // Strip /api prefix before forwarding to Gin
- r.URL.Path = r.URL.Path[4:] // remove "/api"
- if r.URL.Path == "" {
- r.URL.Path = "/"
- }
- r.RequestURI = r.URL.RequestURI()
- proxy.ServeHTTP(w, r)
- })
- mux.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) {
- r.URL.Path = "/"
- r.RequestURI = "/"
- proxy.ServeHTTP(w, r)
- })
- mux.Handle("/", fileServer)
- err = wails.Run(&options.App{
- Title: "智慧停车管理系统",
- Width: 1400,
- Height: 900,
- MinWidth: 1024,
- MinHeight: 768,
- AssetServer: &assetserver.Options{
- Assets: assets,
- Handler: mux,
- },
- OnStartup: func(ctx context.Context) {
- log.Println("Wails app started, backend running on :8888")
- },
- Windows: &windows.Options{
- WebviewIsTransparent: false,
- WindowIsTranslucent: false,
- },
- })
- if err != nil {
- log.Fatal(err)
- }
- }
|