From 2c3df98c784bd825b6c2faab508e20fe4f2c3966 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 16 十月 2026 19:32:34 +0800
Subject: [PATCH] feat(mes): 添加追溯定位页面URL配置功能

---
 yudao-server/src/main/resources/static/trace.html                                                                     |   20 ++++++++++++--------
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/pub/trace/vo/MesProTracePublicConfigRespVO.java |    4 ++++
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/config/MesProperties.java                        |    3 +++
 docs/trace-location-gate.md                                                                                           |    2 +-
 yudao-server/src/main/resources/application-thzy.yaml                                                                 |    2 ++
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/trace/MesProTracePublicServiceImpl.java            |    1 +
 yudao-server/src/main/resources/application-local.yaml                                                                |    2 ++
 7 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/docs/trace-location-gate.md b/docs/trace-location-gate.md
index 73ec467..e3b8842 100644
--- a/docs/trace-location-gate.md
+++ b/docs/trace-location-gate.md
@@ -1,6 +1,6 @@
 # 杩芥函缃戝潃瀹氫綅鎺堟潈鍏ュ彛
 
-鏃ц拷婧〉鐨勨�滆拷婧綉鍧�鈥濇枃瀛椾粛鏄剧ず鏍囩鍗板埛鎵�鐢ㄧ殑 `mes.trace-base-url`锛岀偣鍑诲悗杩涘叆鍚岀洰褰曠殑 `trace-location.html?code=...`銆傛巿鏉冮〉浠ュ師杩芥函椤电殑鍝佺墝椤甸潰涓鸿儗鏅�傜敤鎴蜂富鍔ㄧ偣鍑烩�滃紑鍚畾浣嶅苟缁х画鈥濓紝鍙湁娴忚鍣ㄨ繑鍥炲綋鍓嶄綅缃�佷笖鏈嶅姟绔垚鍔熶繚瀛樿褰曞悗鎵嶅湪鏂扮綉鍧�涓樉绀轰骇鍝佽拷婧唴瀹广�傚畾浣嶈鍥炬部鐢ㄥ師鏈夎儗鏅拰鐗堝紡锛屾妸宸叉湁鐪熷疄鏁版嵁鎸夆�滅敓浜т俊鎭�佷粨鍌ㄤ俊鎭�佺墿娴佷俊鎭�濈粍缁囷紱娌℃湁鏉ユ簮鏁版嵁鐨勫瓧娈典笉鑷嗛�犮�傜洿鎺ユ墦寮�涓嶅甫杩芥函鐮佺殑鏂扮綉鍧�涔熷彲浠ユ巿鏉冨悗杩涘叆鎵嬪姩鏌ヨ銆傛嫆缁濇巿鏉冦�佸畾浣嶅け璐ユ垨淇濆瓨澶辫触浼氬仠鐣欏湪鎺堟潈椤靛苟缁欏嚭閲嶈瘯鎻愮ず銆傚埛鏂版柊缃戝潃闇�閲嶆柊鑾峰彇浣嶇疆銆�
+鏃ц拷婧〉鐨勨�滆拷婧綉鍧�鈥濇枃瀛椾粛鏄剧ず鏍囩鍗板埛鎵�鐢ㄧ殑 `mes.trace-base-url`锛岀偣鍑诲悗杩涘叆 `mes.trace-location-url` 閰嶇疆鐨勫畬鏁村叕缃戝湴鍧�锛屽苟闄勫甫 `code` 鍙傛暟锛涙湭閰嶇疆鏃朵粠褰撳墠椤电敓鎴愬悓鐩綍鐨勭粷瀵圭綉鍧�銆傛巿鏉冮〉浠ュ師杩芥函椤电殑鍝佺墝椤甸潰涓鸿儗鏅�傜敤鎴蜂富鍔ㄧ偣鍑烩�滃紑鍚畾浣嶅苟缁х画鈥濓紝鍙湁娴忚鍣ㄨ繑鍥炲綋鍓嶄綅缃�佷笖鏈嶅姟绔垚鍔熶繚瀛樿褰曞悗鎵嶅湪鏂扮綉鍧�涓樉绀轰骇鍝佽拷婧唴瀹广�傚畾浣嶈鍥炬部鐢ㄥ師鏈夎儗鏅拰鐗堝紡锛屾妸宸叉湁鐪熷疄鏁版嵁鎸夆�滅敓浜т俊鎭�佷粨鍌ㄤ俊鎭�佺墿娴佷俊鎭�濈粍缁囷紱娌℃湁鏉ユ簮鏁版嵁鐨勫瓧娈典笉鑷嗛�犮�傜洿鎺ユ墦寮�涓嶅甫杩芥函鐮佺殑鏂扮綉鍧�涔熷彲浠ユ巿鏉冨悗杩涘叆鎵嬪姩鏌ヨ銆傛嫆缁濇巿鏉冦�佸畾浣嶅け璐ユ垨淇濆瓨澶辫触浼氬仠鐣欏湪鎺堟潈椤靛苟缁欏嚭閲嶈瘯鎻愮ず銆傚埛鏂版柊缃戝潃闇�閲嶆柊鑾峰彇浣嶇疆銆�
 
 鍚庡彴鈥滄秷璐硅�呮壂鐮佺粺璁♀�濇柊澧炩�滃畾浣嶆巿鏉冭闂�濆尯鍧楋紝娌跨敤 `mes:trace-consumer-scan:query` 鏉冮檺锛屽彲鎸夋椂闂村拰杩芥函鐮佹煡璇紝鏄剧ず璁块棶娆℃暟銆佸潗鏍囥�佺簿搴︺�佹椂闂达紝骞跺彲鎵撳紑鍦板浘锛涚儹闂ㄤ綅缃皢缁忕含搴﹀垎鍒繚鐣欎袱浣嶅皬鏁板悗鑱氬悎锛堟渶澶� 20 澶勶級銆傝褰曚笌鍘熸湁鎸� IP 鎺ㄦ柇鐪佸競鐨勬壂鐮佷簨浠跺垎寮�瀛樺偍锛岄伩鍏嶅奖鍝嶅師缁熻鍙e緞銆�
 
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/pub/trace/vo/MesProTracePublicConfigRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/pub/trace/vo/MesProTracePublicConfigRespVO.java
index ef2d35f..7a5ef3e 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/pub/trace/vo/MesProTracePublicConfigRespVO.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/pub/trace/vo/MesProTracePublicConfigRespVO.java
@@ -21,6 +21,10 @@
             example = "http://1.95.78.124:9008/prod/trace.html")
     private String traceUrl;
 
+    @Schema(description = "瀹氫綅杩芥函椤靛畬鏁寸綉鍧�锛堜笉鍚� code 鍙傛暟锛�",
+            example = "http://1.95.78.124:9008/prod/trace-location.html")
+    private String traceLocationUrl;
+
     @Schema(description = "鏄惁杩涘彛绉嶅瓙鍦烘櫙锛氫负 true 鏃堕〉闈㈡爣绛惧簲灞曠ず銆岃繘鍙e晢鍚嶇О銆�")
     private Boolean imported;
 
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/config/MesProperties.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/config/MesProperties.java
index 0f10ded..ee199fb 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/config/MesProperties.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/config/MesProperties.java
@@ -24,6 +24,9 @@
      */
     private String traceBaseUrl = "";
 
+    /** 瀹氫綅杩芥函椤电殑瀹屾暣鍏綉 URL锛堜笉鍚� code 鍙傛暟锛夛紝渚� H5 椤甸潰閾炬帴璺宠浆浣跨敤銆� */
+    private String traceLocationUrl = "";
+
     /** 瀹氫綅鐗堣拷婧〉鏄惁蹇呴』鍏堝彇寰楃敤鎴峰畾浣嶏紱浠呮湰鍦拌皟璇曢厤缃负 false銆� */
     private boolean traceLocationRequired = true;
 
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/trace/MesProTracePublicServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/trace/MesProTracePublicServiceImpl.java
index 7503251..b88d63c 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/trace/MesProTracePublicServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/trace/MesProTracePublicServiceImpl.java
@@ -135,6 +135,7 @@
         MesProTracePublicConfigRespVO respVO = new MesProTracePublicConfigRespVO();
         respVO.setOperatorName(MesProQrLabelBuilder.resolveOperatorName());
         respVO.setTraceUrl(MesProQrLabelBuilder.resolveTraceUrl());
+        respVO.setTraceLocationUrl(mesProperties.getTraceLocationUrl());
         respVO.setImported(MesProQrLabelBuilder.isImported());
         respVO.setTraceLocationRequired(mesProperties.isTraceLocationRequired());
         return respVO;
diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml
index 416fa7a..905acd9 100644
--- a/yudao-server/src/main/resources/application-local.yaml
+++ b/yudao-server/src/main/resources/application-local.yaml
@@ -5,6 +5,8 @@
 mes:
   # 杩芥函缃戝潃锛堜簩缁寸爜鍐呭鍓嶇紑锛夛紝闇�涓哄叕浼楁壂鐮佸彲璁块棶鐨勫湴鍧�
   trace-base-url: http://192.168.0.10:48080/trace.html
+  # 鐐瑰嚮杩芥函缃戝潃鍚庤繘鍏ョ殑瀹氫綅杩芥函椤碉紙瀹屾暣鏈湴鍦板潃锛屼笉鍚� code 鍙傛暟锛�
+  trace-location-url: http://192.168.0.10:48080/trace-location.html
   # 鏈湴 HTTP 璋冭瘯鏃惰烦杩囨祻瑙堝櫒瀹氫綅鎺堟潈锛涚敓浜х幆澧冧娇鐢ㄩ粯璁ゅ�� true
   trace-location-required: false
   # 鐢熶骇缁忚惀鑰呭悕绉帮紙绉嶅瓙鏍囩鍥涜绱犱箣涓�锛屾爣绛句笌婧簮椤电粺涓�鍙栨鍊硷紱鏈厤缃垯鏃犳硶瀵煎嚭鏍囩锛�
diff --git a/yudao-server/src/main/resources/application-thzy.yaml b/yudao-server/src/main/resources/application-thzy.yaml
index 9cb9079..7b5320e 100644
--- a/yudao-server/src/main/resources/application-thzy.yaml
+++ b/yudao-server/src/main/resources/application-thzy.yaml
@@ -5,6 +5,8 @@
 mes:
   # 杩芥函缃戝潃锛堜簩缁寸爜鍐呭鍓嶇紑锛夛紝闇�涓哄叕浼楁壂鐮佸彲璁块棶鐨勫湴鍧�
   trace-base-url: http://1.95.78.124:9008/prod/trace.html
+  # 鐐瑰嚮杩芥函缃戝潃鍚庤繘鍏ョ殑瀹氫綅杩芥函椤碉紙瀹屾暣鍏綉鍦板潃锛屼笉鍚� code 鍙傛暟锛�
+  trace-location-url: http://1.95.78.124:9008/prod/trace-location.html
   # 鐢熶骇缁忚惀鑰呭悕绉帮紙绉嶅瓙鏍囩鍥涜绱犱箣涓�锛屾爣绛句笌婧簮椤电粺涓�鍙栨鍊硷級
   operator-name: 鏂扮枂濉旈噷鏈ㄦ渤绉嶄笟鑲′唤鏈夐檺鍏徃
 
diff --git a/yudao-server/src/main/resources/static/trace.html b/yudao-server/src/main/resources/static/trace.html
index 98a45ff..d89fb73 100644
--- a/yudao-server/src/main/resources/static/trace.html
+++ b/yudao-server/src/main/resources/static/trace.html
@@ -352,6 +352,7 @@
   // 鍥犳缁熶竴鐢卞悗绔笅鍙戯紙/public/mes/trace/config锛夛紝绂佹鍦ㄦ纭紪鐮併��
   var COMPANY_NAME = '';
   var TRACE_URL = '';
+  var TRACE_LOCATION_URL = '';
   var IS_IMPORTED = false;
 
   // 鎷夊彇婧簮椤甸厤缃紱澶辫触鏃朵笉闃绘柇鏌ヨ锛堟煡璇㈢粨鏋滄湰韬篃甯︾敓浜х粡钀ヨ�呬笌杩芥函缃戝潃锛�
@@ -362,6 +363,7 @@
         if (res && res.code === 0 && res.data) {
           COMPANY_NAME = res.data.operatorName || '';
           TRACE_URL = res.data.traceUrl || '';
+          TRACE_LOCATION_URL = res.data.traceLocationUrl || '';
           IS_IMPORTED = !!res.data.imported;
         }
       })
@@ -628,6 +630,8 @@
     // 鐢熶骇缁忚惀鑰呬笌杩芥函缃戝潃浼樺厛鍙栨煡璇㈢粨鏋滐紙涓庢爣绛惧嵃鍒峰唴瀹瑰悓婧愶級锛岄��鍥為〉闈㈤厤缃�
     var operatorName = d.operatorName || COMPANY_NAME;
     var traceUrl = d.traceUrl || TRACE_URL;
+    var locationUrl = new URL(TRACE_LOCATION_URL || location.pathname.replace(/trace\.html$/, 'trace-location.html'), location.href);
+    locationUrl.searchParams.set('code', code || '');
     var operatorLabel = IS_IMPORTED ? '杩涘彛鍟嗗悕绉�' : '鐢熶骇缁忚惀鑰�';
     // 鍙湁琚嬬爜鎵嶆槸銆屾渶灏忛攢鍞崟鍏冦�嶏紝鍏剁爜鍊兼墠绉般�屽崟鍏冭瘑鍒唬鐮併�嶏紱
     // 鎵樼洏鐮�/鎵规鐮佷笉灞炰簬鏈�灏忛攢鍞崟鍏冩爣璇嗭紝鎸夊疄闄呯被鍨嬪睍绀猴紝閬垮厤璇娑堣垂鑰�
@@ -644,7 +648,7 @@
       kv(operatorLabel, text(operatorName)) +
       kv(codeLabel, text(code || '-')) +
       kv('杩芥函缃戝潃', traceUrl
-        ? '<a class="link" target="_top" href="' + esc(location.pathname.replace(/trace\.html$/, 'trace-location.html') + '?code=' + encodeURIComponent(code || '')) + '">' + esc(traceUrl) + '</a>'
+        ? '<a class="link" target="_top" href="' + esc(locationUrl.href) + '">' + esc(traceUrl) + '</a>'
         : '-') +
       kv('璁¢噺鍗曚綅', text(d.itemUnitMeasureName)) +
       kv('杩芥函绫诲瀷', esc(SOURCE_TYPE[d.sourceType] || '杩芥函鐮�')) +
@@ -764,15 +768,15 @@
   })();
 
   // 鍏堟媺鍙栭〉闈㈤厤缃紙鐢熶骇缁忚惀鑰呭悕绉般�佽拷婧綉鍧�锛夛紝鍐嶆墽琛屾煡璇紱鏌ヨ缁撴灉涓悓鏍峰甫鏈夎繖涓ら」锛屼簰涓哄厹搴�
-  loadTraceConfig();
-
   var initialCode = new URLSearchParams(location.search).get('code') || '';
   CODE_INPUT.value = initialCode;
-  if (initialCode) {
-    query(initialCode);
-  } else {
-    renderState('<div class="empty-tip">鎵爜鎴栬緭鍏ヨ拷婧爜锛屽嵆鍙煡璇骇鍝佸叏绋嬫函婧愪俊鎭�</div>');
-  }
+  loadTraceConfig().then(function () {
+    if (initialCode) {
+      query(initialCode);
+    } else {
+      renderState('<div class="empty-tip">鎵爜鎴栬緭鍏ヨ拷婧爜锛屽嵆鍙煡璇骇鍝佸叏绋嬫函婧愪俊鎭�</div>');
+    }
+  });
 })();
 </script>
 </body>

--
Gitblit v1.9.3