feat: 为MES和工作站服务添加启动后自动打开浏览器功能

优化WMS客户端URL处理逻辑,移除尾斜杠避免请求404错误
更新工作站配置默认工位号为1
新增数据库字段支持工位页签配置
删除WMS端未完成的权限树形化和范围验证测试文件
删除物料档案对齐方案文档

新增自动打开浏览器的跨平台实现,服务启动后等待1秒后打开管理后台,提升使用便捷性
This commit is contained in:
SunYF
2026-09-24 17:27:24 +08:00
parent f274da044c
commit d9d4155de6
9 changed files with 63 additions and 221 deletions
+25
View File
@@ -10,8 +10,11 @@ import (
"io/fs"
"net/http"
"os"
"os/exec"
"path"
"runtime"
"strings"
"time"
"bj_power_mes/common/logx"
"bj_power_mes/internal/config"
@@ -150,6 +153,22 @@ func newStaticHandler(fsys embed.FS) http.Handler {
})
}
// openBrowser 用系统默认浏览器打开 url(Windows/macOS/Linux)
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)
}
if err := cmd.Start(); err != nil {
gologx.Errorf("自动打开浏览器失败(%s): %v", url, err)
}
}
func main() {
flag.Parse()
@@ -221,5 +240,11 @@ func main() {
fmt.Printf("Starting bj_power_mes server at %s:%d...\n", c.Host, c.Port)
gologx.Infof("Starting bj_power_mes server at %s:%d...", c.Host, c.Port)
// 启动后自动打开管理后台(等 1 秒让端口就绪;Host=0.0.0.0 时用 127.0.0.1 访问)
go func() {
time.Sleep(time.Second)
openBrowser(fmt.Sprintf("http://127.0.0.1:%d", c.Port))
}()
server.Start()
}
+5 -3
View File
@@ -110,8 +110,8 @@ var schemaPatchSQL = []string{
`ALTER TABLE inspection_record ADD COLUMN IF NOT EXISTS attachment_ids varchar(512) NOT NULL DEFAULT ''`,
`ALTER TABLE inspection_record ADD COLUMN IF NOT EXISTS disposal_type varchar(20) NOT NULL DEFAULT ''`,
`ALTER TABLE inspection_record ADD COLUMN IF NOT EXISTS disposal_remark varchar(500) NOT NULL DEFAULT ''`,
// work_order_bom 表名注解为 work_order_bom
`ALTER TABLE work_order_bom ADD COLUMN IF NOT EXISTS related_standard varchar(255) NOT NULL DEFAULT ''`,
// work_order_bom 表名注解为 work_order_bom(表已于 2026-09-23 退役删除,此补丁仅对历史库存留档库有意义)
`ALTER TABLE IF EXISTS work_order_bom ADD COLUMN IF NOT EXISTS related_standard varchar(255) NOT NULL DEFAULT ''`,
`ALTER TABLE process_step ADD COLUMN IF NOT EXISTS attachment jsonb NOT NULL DEFAULT '[]'::jsonb`,
`ALTER TABLE work_order ADD COLUMN IF NOT EXISTS created_by varchar(64) NOT NULL DEFAULT ''`,
`ALTER TABLE work_order ADD COLUMN IF NOT EXISTS due_date timestamp`,
@@ -194,7 +194,6 @@ var schemaPatchSQL = []string{
`ALTER TABLE workpiece_process DROP COLUMN IF EXISTS process_code`,
`ALTER TABLE workpiece_bind DROP COLUMN IF EXISTS process_code`,
`ALTER TABLE material_request DROP COLUMN IF EXISTS process_code`,
`ALTER TABLE work_order_bom DROP COLUMN IF EXISTS process_code`,
`ALTER TABLE workpiece DROP COLUMN IF EXISTS current_process`,
// 既有库补列(新装库由 ent AutoMigrate 直接建出,此处幂等兜底)
`ALTER TABLE work_order ADD COLUMN IF NOT EXISTS flow_combination jsonb`,
@@ -206,6 +205,9 @@ var schemaPatchSQL = []string{
// ---- 半成品流转新模型(2026-09-22 定稿):进度唯一权威源=workpiece.currentStationNo ----
// semi_flow 补进度快照列 completed_text("已完成至工位N");旧 done_process_codes 保留历史数据、不再写入
`ALTER TABLE semi_flow ADD COLUMN IF NOT EXISTS completed_text varchar(64) NOT NULL DEFAULT ''`,
// ---- 工位终端可见页签配置(2026-09-23):按工位勾选终端显示哪些页签(jsonb 数组),空=全部显示 ----
`ALTER TABLE station ADD COLUMN IF NOT EXISTS visible_tabs jsonb`,
}
// EnsureSchema ent 建表 + 幂等列补丁(只增,不删数据)
@@ -1,4 +1,4 @@
package production
package production
import (
"net/http"
+4 -5
View File
@@ -36,19 +36,18 @@ func New(baseURL, token string) *Client {
return c
}
// SetBaseURL 热切换 WMS 地址;空串回退默认地址
// SetBaseURL 热切换 WMS 地址;空串回退默认地址。
// 注意:所有请求路径都以 "/api/..." 开头,这里必须去掉尾斜杠,否则拼出 "//api" 404。
func (c *Client) SetBaseURL(u string) {
u = strings.TrimSpace(u)
if u == "" {
u = defaultBaseURL
}
if !strings.HasSuffix(u, "/") {
u += "/"
}
u = strings.TrimRight(u, "/")
c.baseURL.Store(u)
}
// BaseURL 当前生效的 WMS 地址(带尾斜杠)
// BaseURL 当前生效的 WMS 地址(不带尾斜杠,请求路径以 /api/... 开头直接拼接)
func (c *Client) BaseURL() string {
return c.baseURL.Load().(string)
}