Ver código fonte

修改编辑代码

niujiuru 1 mês atrás
pai
commit
e083a22b8b

+ 8 - 1
Makefile

@@ -33,7 +33,7 @@ D_LIBS2 += -L$(RTU_LINUX_MODULES_PATH)/dh_takephoto/lib/armv7hf -lMVSDK -liImage
 D_LIBS2 += -L$(RTU_LINUX_MODULES_PATH)/dh_takephoto/lib/armv7hf/GenICam/bin -lGCBase_gcc483_v3_0 -lGenApi_gcc483_v3_0 -lLog_gcc483_v3_0 -llog4cpp_gcc483_v3_0 -lMathParser_gcc483_v3_0 -lNodeMapData_gcc483_v3_0 -lXmlParser_gcc483_v3_0
 
 # 编译的目标
-all: networkd timesyncd gnss sshd-mqtt-bridge
+all: networkd timesyncd gnss sshd-mqtt-bridge web-ui
 
 # 可执行程序
 networkd : LK_LIBS = $(S_LIBS0) $(S_LIBS1) $(D_LIBS0)
@@ -62,6 +62,13 @@ sshd-mqtt-bridge :
 	$(MAKE) -C $(RTU_LINUX_MODULES_PATH) yfkj_sshd.out target=armv7hf
 	cp -f $(RTU_LINUX_MODULES_PATH)/yfkj_sshd.out ./build/$@
 
+web-ui: LK_LIBS =
+web-ui:
+	mkdir -p ./build
+	$(GO) mod tidy
+	$(SETGO_ENV) CGO_LDFLAGS="$(LK_LIBS)" $(GO_BUILD) $(GO_FLAGS) -o $@ ./web-ui.service/*.go
+	cp -f $@ ./build/ && rm -f $@
+
 # 静态库模块
 libswapi.a :
 	$(MAKE) -C $(RTU_LINUX_MODULES_PATH)/swapi         target=armv7hf $@

+ 1 - 1
web-ui.service/main.go

@@ -8,7 +8,7 @@ func main() {
 		log.Fatal(err)
 	}
 
-	log.Println("Server started at http://0.0.0.0:80")
+	log.Println("Web UI started on 0.0.0.0:80")
 	if err := webUI.Start(); err != nil {
 		log.Fatal(err)
 	}

+ 30 - 2
web-ui.service/web/static/js/app.js

@@ -22,6 +22,10 @@ document.addEventListener("DOMContentLoaded", () => {
   loadPage("page1");
 });
 
+function logout() {
+  window.location.href = "/logout";
+}
+
 function setIMEI(imei) {
   const el = document.getElementById("imei-value");
   if (el) {
@@ -29,6 +33,30 @@ function setIMEI(imei) {
   }
 }
 
-function logout() {
-  window.location.href = "/logout";
+async function fetchIMEI() {
+  try {
+    const res = await fetch("/getIMEI");
+
+    if (!res.ok) {
+      throw new Error("http error");
+    }
+
+    const imei = await res.text();
+
+    if (!imei || imei.trim() === "") {
+      throw new Error("empty imei");
+    }
+
+    setIMEI(imei.trim());
+    return;
+  } catch (e) {
+    console.log("get imei failed, retrying...");
+    setTimeout(fetchIMEI, 3000); // 3秒后继续重试
+  }
 }
+
+function initIMEI() {
+    fetchIMEI();
+}
+
+initIMEI();

+ 9 - 3
web-ui.service/web_handlers.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"io/fs"
 	"net/http"
+	"os"
 	"strings"
 )
 
@@ -16,7 +17,7 @@ type LoginResp struct {
 	Success bool `json:"success"`
 }
 
-func WebLoginHandler(w http.ResponseWriter, r *http.Request) {
+func loginHandler(w http.ResponseWriter, r *http.Request) {
 	if r.Method != http.MethodPost {
 		w.WriteHeader(http.StatusMethodNotAllowed)
 		return
@@ -47,7 +48,7 @@ func WebLoginHandler(w http.ResponseWriter, r *http.Request) {
 	json.NewEncoder(w).Encode(LoginResp{Success: ok})
 }
 
-func WebLogoutHandler(w http.ResponseWriter, r *http.Request) {
+func logoutHandler(w http.ResponseWriter, r *http.Request) {
 	if cookie, err := r.Cookie("session_id"); err == nil {
 		sessionMu.Lock()
 		delete(sessions, cookie.Value)
@@ -64,7 +65,12 @@ func WebLogoutHandler(w http.ResponseWriter, r *http.Request) {
 	http.Redirect(w, r, "/", http.StatusFound)
 }
 
-func (ui *WebUI) WebRootHandler(w http.ResponseWriter, r *http.Request) {
+func getIMEIHandler(w http.ResponseWriter, r *http.Request) {
+	data, _ := os.ReadFile("/var/device_imei.txt")
+	w.Write(data)
+}
+
+func (ui *WebUI) rootHandler(w http.ResponseWriter, r *http.Request) {
 	path := r.URL.Path
 
 	w.Header().Set("Content-Type", "text/html; charset=utf-8")

+ 4 - 3
web-ui.service/web_ui.go

@@ -27,14 +27,15 @@ func NewWebUI(addr string) (*WebUI, error) {
 	mux.Handle("/static/css/", fs) /////////////// 页面样式
 	mux.Handle("/static/js/", fs)  /////////////// 页面脚本
 
-	mux.HandleFunc("/login", WebLoginHandler)   // 登录接口
-	mux.HandleFunc("/logout", WebLogoutHandler) // 注销接口
+	mux.HandleFunc("/login", loginHandler)   // 登录接口
+	mux.HandleFunc("/logout", logoutHandler) // 注销接口
+	mux.HandleFunc("/getIMEI", getIMEIHandler)
 
 	return &WebUI{fs: sub, addr: addr, mux: mux}, nil
 }
 
 func (ui *WebUI) Start() error {
 	StartSessionCleaner() // session过期自动回收
-	ui.mux.HandleFunc("/", ui.WebRootHandler)
+	ui.mux.HandleFunc("/", ui.rootHandler)
 	return http.ListenAndServe(ui.addr, ui.mux)
 }