1. 通用优化: - 统一系统标题为"库房客户端"/"MES产线控制",移除北自所前缀 - 调整内置账号密码为统一123456,优化密码校验逻辑 - 新增数据库自动创建逻辑,简化部署流程 - 修复日志时间格式配置,优化日志输出 - 新增纯数字密码安全提示 2. MES系统优化: - 新增日排产管理功能,支持增删改查与自动算料生成备料单 - 重构BOM模块,改为按产品编码维护而非工单维度 - 新增工艺参数模板配置与手动报工页面 - 新增产品类型自动编码功能 - 优化菜单结构,调整工单管理、扫码报工等页面名称与路由 - 新增删除日排产接口与权限保护 - 修复物料清单查询逻辑,适配新BOM结构 - 新增refreshToken支持,优化登录会话管理 3. WMS系统优化: - 新增基础数据维护页面,支持区域与物料档案管理 - 新增工单列表下拉接口,对接MES获取未完成工单优先展示 - 优化入库管理提示文案,替换英文提示为中文 - 修复精密件入库校验逻辑,优化错误提示 - 优化Excel导入功能,新增备注字段支持 - 优化登录页面与菜单文案,统一备料台账名称 - 新增自动打开浏览器功能,优化客户端启动体验 - 修复备料出库页面查询提示文案 - 新增WMS与MES对接配置,完善内部API调用逻辑 4. 其他优化: - 删除冗余的旧版静态资源文件,更新资源引用路径 - 新增帮助文档,完善基础数据模块说明 - 修复多处文案不统一、英文残留问题
106 lines
2.6 KiB
Go
106 lines
2.6 KiB
Go
package main
|
||
|
||
import (
|
||
"embed"
|
||
"flag"
|
||
"fmt"
|
||
"io/fs"
|
||
"net/http"
|
||
"os/exec"
|
||
"path"
|
||
"runtime"
|
||
"strings"
|
||
"time"
|
||
|
||
"bj_power_wms_client/internal/config"
|
||
"bj_power_wms_client/internal/proxy"
|
||
|
||
"github.com/zeromicro/go-zero/core/conf"
|
||
"github.com/zeromicro/go-zero/core/logx"
|
||
"github.com/zeromicro/go-zero/rest"
|
||
)
|
||
|
||
//go:embed all:web/static
|
||
var webFS embed.FS
|
||
|
||
var configFile = flag.String("f", "etc/bj_power_wms_client.yaml", "the config file")
|
||
|
||
// newStaticHandler 嵌入式静态文件:命中则直接返回;未命中的非 /api 路径
|
||
// 回退到 index.html(SPA history 路由),由浏览器端 Vue Router 接管。
|
||
func newStaticHandler(fsys embed.FS) http.Handler {
|
||
sub, err := fs.Sub(fsys, "web/static")
|
||
if err != nil {
|
||
panic(fmt.Sprintf("嵌入静态目录不可用: %v", err))
|
||
}
|
||
fileServer := http.FileServer(http.FS(sub))
|
||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
name := strings.TrimPrefix(path.Clean(r.URL.Path), "/")
|
||
if name == "" {
|
||
name = "index.html"
|
||
}
|
||
if f, openErr := sub.Open(name); openErr == nil {
|
||
f.Close()
|
||
fileServer.ServeHTTP(w, r)
|
||
return
|
||
}
|
||
r2 := r.Clone(r.Context())
|
||
r2.URL.Path = "/"
|
||
fileServer.ServeHTTP(w, r2)
|
||
})
|
||
}
|
||
|
||
// openBrowser 调用系统默认浏览器打开 url
|
||
func openBrowser(url string) {
|
||
var cmd *exec.Cmd
|
||
switch runtime.GOOS {
|
||
case "windows":
|
||
cmd = exec.Command("rundll32", "url.dll,FileProtocolHandler", url)
|
||
case "darwin":
|
||
cmd = exec.Command("open", url)
|
||
default:
|
||
cmd = exec.Command("xdg-open", url)
|
||
}
|
||
_ = cmd.Start()
|
||
}
|
||
|
||
func main() {
|
||
flag.Parse()
|
||
|
||
var c config.Config
|
||
conf.MustLoad(*configFile, &c)
|
||
|
||
apiProxy := proxy.New(c.WmsAddr, c.ApiToken)
|
||
staticHandler := newStaticHandler(webFS)
|
||
|
||
// 兜底路由:/api/* 反向代理到 WMS 后端,其余走嵌入式静态资源(未命中回退 index.html)
|
||
notFound := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
if strings.HasPrefix(r.URL.Path, "/api") {
|
||
if r.URL.Path == "/api" || strings.HasPrefix(r.URL.Path, "/api/") {
|
||
apiProxy.ServeHTTP(w, r)
|
||
return
|
||
}
|
||
http.NotFound(w, r)
|
||
return
|
||
}
|
||
staticHandler.ServeHTTP(w, r)
|
||
})
|
||
|
||
server := rest.MustNewServer(c.RestConf, rest.WithNotFoundHandler(notFound))
|
||
defer server.Stop()
|
||
|
||
fmt.Printf("Starting bj_power_wms_client at :%d...\n", c.Port)
|
||
logx.Infof("Starting bj_power_wms_client at :%d...", c.Port)
|
||
|
||
// 服务起来后自动打开浏览器访问前端
|
||
host := c.Host
|
||
if host == "0.0.0.0" || host == "" {
|
||
host = "127.0.0.1"
|
||
}
|
||
go func() {
|
||
time.Sleep(time.Second)
|
||
openBrowser(fmt.Sprintf("http://%s:%d", host, c.Port))
|
||
}()
|
||
|
||
server.Start()
|
||
}
|