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 |  219 ++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 146 insertions(+), 73 deletions(-)

diff --git a/yudao-server/src/main/resources/static/trace.html b/yudao-server/src/main/resources/static/trace.html
index b5a75cc..d89fb73 100644
--- a/yudao-server/src/main/resources/static/trace.html
+++ b/yudao-server/src/main/resources/static/trace.html
@@ -323,7 +323,7 @@
         </div>
         <div class="contact-item">
           <span class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3.1 19.5 19.5 0 0 1-6-6A19.8 19.8 0 0 1 2.1 4.2 2 2 0 0 1 4.1 2h3a2 2 0 0 1 2 1.7c.1 1 .4 1.9.7 2.8a2 2 0 0 1-.5 2.1L8.1 9.9a16 16 0 0 0 6 6l1.3-1.3a2 2 0 0 1 2.1-.4c.9.3 1.8.6 2.8.7a2 2 0 0 1 1.7 2z"/></svg></span>
-          <span class="txt"><span class="lbl">鑱旂郴鐢佃瘽</span><div class="val">琛屾斂绠$悊閮細<a href="tel:09974615802">0997-4615802</a></div></span>
+          <span class="txt"><span class="lbl">鑱旂郴鐢佃瘽</span><div class="val">缁煎悎绠$悊閮細<a href="tel:09974615802">0997-4615802</a></div></span>
         </div>
         <div class="contact-item">
           <span class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9.5 12 3l9 6.5V20a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="M9.5 22v-6h5v6"/></svg></span>
@@ -347,24 +347,33 @@
 (function () {
   'use strict';
 
-  // ========== 椤甸潰鍙厤缃」 ==========
-  // 鐢熶骇缁忚惀鑰咃紙杩芥函鏌ヨ鍖哄潡灞曠ず锛�
-  var COMPANY_NAME = '鏂扮枂濉旈噷鏈ㄦ渤绉嶄笟鑲′唤鏈夐檺鍏徃';
-  // 杩芥函缃戝潃锛堝缃戣闂湴鍧�锛屼笌鍖呰/浜岀淮鐮佷笂鍗板埗鐨勪竴鑷达級
-  var TRACE_URL = 'http://1.95.78.124:9008/';
+  // ========== 椤甸潰閰嶇疆 ==========
+  // 鐢熶骇缁忚惀鑰呭悕绉颁笌杩芥函缃戝潃鏄瀛愭爣绛惧洓瑕佺礌鐨勭粍鎴愰儴鍒嗭紝蹇呴』涓庝簩缁寸爜/鏍囩鍗板埛鍐呭涓�鑷达紝
+  // 鍥犳缁熶竴鐢卞悗绔笅鍙戯紙/public/mes/trace/config锛夛紝绂佹鍦ㄦ纭紪鐮併��
+  var COMPANY_NAME = '';
+  var TRACE_URL = '';
+  var TRACE_LOCATION_URL = '';
+  var IS_IMPORTED = false;
+
+  // 鎷夊彇婧簮椤甸厤缃紱澶辫触鏃朵笉闃绘柇鏌ヨ锛堟煡璇㈢粨鏋滄湰韬篃甯︾敓浜х粡钀ヨ�呬笌杩芥函缃戝潃锛�
+  function loadTraceConfig() {
+    return fetch('/public/mes/trace/config')
+      .then(function (resp) { return resp.json(); })
+      .then(function (res) {
+        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;
+        }
+      })
+      .catch(function () { /* 閰嶇疆鎷夊彇澶辫触锛氶��鍥炰娇鐢ㄦ煡璇㈢粨鏋滀腑鐨勫悓鍚嶅瓧娈� */ });
+  }
 
   var STATE = document.getElementById('state');
   var CODE_INPUT = document.getElementById('codeInput');
   var SEARCH_BTN = document.getElementById('searchBtn');
 
-  var FLOW_DIRECTION = { 1: ['鍏ュ簱', 'green'], 2: ['鍑哄簱', 'blue'] };
-  var FLOW_BIZ_TYPE = {
-    110: '閲囪喘鍏ュ簱', 111: '閲囪喘鍏ュ簱鍙栨秷', 112: '璋冩嫧鍑哄簱', 113: '璋冩嫧鍏ュ簱',
-    114: '鍏朵粬鍑哄簱', 115: '鍏朵粬鍏ュ簱', 116: '鐢熶骇棰嗘枡', 117: '鐢熶骇閫�鏂�',
-    118: '鐢熶骇鍏ュ簱', 119: '閿�鍞嚭搴�', 120: '閿�鍞��璐у叆搴�', 121: '澶栧崗鍙戞枡',
-    122: '澶栧崗鍏ュ簱', 123: '鐢熶骇娑堣��', 124: '浜у搧浜у嚭', 125: '渚涘簲鍟嗛��璐у嚭搴�',
-    126: '搴撳瓨璋冩暣鍏ュ簱', 127: '搴撳瓨璋冩暣鍑哄簱'
-  };
   var SOURCE_TYPE = { BAG: '琚嬬爜', PALLET: '鎵樼洏鐮�', BATCH: '鎵规鐮�' };
 
   // ========== 宸ュ叿鍑芥暟 ==========
@@ -396,12 +405,6 @@
   // 琛ㄦ牸绐勫垪锛堟暟閲� / 鏃ユ湡锛変笉鎹㈣锛岄伩鍏嶆暟瀛楄鎷嗚
   function nw(html) {
     return '<span style="white-space:nowrap">' + html + '</span>';
-  }
-
-  function statusBadge(map, key) {
-    var item = map[key];
-    if (!item) return '<span class="badge gray">' + (key === null || key === undefined ? '' : esc(key)) + '</span>';
-    return '<span class="badge ' + item[1] + '">' + esc(item[0]) + '</span>';
   }
 
   function kv(k, v, dim) {
@@ -477,13 +480,96 @@
       renderState('<div class="empty-tip error">鏈煡璇㈠埌璇ヨ拷婧爜锛岃鏍稿浜岀淮鐮佹垨鑱旂郴瀹樻柟</div>');
       return;
     }
+    // 宸蹭綔搴熺殑杩芥函鐮侊紙鐮存崯鏇挎崲鍚庝綔搴燂級涓嶅緱浣滀负鏈夋晥浜у搧娴侀�氾紝鐩存帴缁欏嚭璀︾ず骞跺仠姝㈠睍绀烘函婧愯鎯�
+    if (d.codeStatus === 'CANCELED') {
+      renderState('<div class="empty-tip error">璇ヨ拷婧爜宸蹭綔搴燂紝闈炴湰鍏徃鏈夋晥浜у搧锛岃皑闃插亣鍐掋��<br>'
+        + '濡傛湁鐤戦棶璇疯仈绯诲畼鏂规牳瀹炪��</div>');
+      return;
+    }
     var html = '';
+    if (new URLSearchParams(location.search).get('view') === 'location') {
+      html += locationSections(d);
+      html += sec('浜у搧杩芥函鏍囪瘑', null, tracePanel(d), null);
+      STATE.innerHTML = html;
+      window.scrollTo({ top: 0, behavior: 'smooth' });
+      return;
+    }
     html += sec('闃蹭吉鏌ヨ', null, fakePanel(d), null);
     html += sec('杩芥函鏌ヨ', null, tracePanel(d), null);
-    // 鐢熶骇鏄庣粏鎶樺彔鍖猴紙鎵规/璐ㄦ/浜哄憳/鎵樼洏/琚嬬爜/閲囪喘鏉ユ簮/绉嶅瓙娴佸悜/鍔犲伐娴佽浆锛夋寜闇�姹備笉灞曠ず锛�
-    // detailSections 淇濈暀浠ヤ究鍚庣画鎸夐渶寮�鍚�
+    // 鐢熶骇鏄庣粏鎶樺彔鍖猴細瀵瑰灞曠ず鍔犲伐娴佽浆锛岀敓浜ф壒娆′俊鎭笉灞曠ず銆�
+    // 璐ㄦ/浜哄憳/鎵樼洏/琚嬬爜/閲囪喘鏉ユ簮绛夊唴閮ㄦ槑缁嗕笉瀵瑰灞曠ず锛�
+    // 濡傞渶涓�骞跺睍绀猴紝鏀逛负 detailSections(d, true) 鍗冲彲銆�
+    html += detailSections(d, false);
     STATE.innerHTML = html || '<div class="empty-tip">鏆傛棤杩芥函鏁版嵁</div>';
     window.scrollTo({ top: 0, behavior: 'smooth' });
+  }
+
+  // 瀹氫綅鎺堟潈鍏ュ彛娌跨敤鏈〉鐨勫搧鐗岃儗鏅笌鍖哄潡鏍峰紡锛屾寜鐢熶骇銆佷粨鍌ㄣ�佺墿娴佺粍缁囧凡鏈夌湡瀹炴暟鎹��
+  function groupOutboundOrders(rows, codeOf, dateField) {
+    var grouped = [];
+    var byCode = new Map();
+    rows.forEach(function (item) {
+      var code = String(codeOf(item) || '').trim();
+      var quantity = Number(item.quantity);
+      var validQuantity = item.quantity !== null && item.quantity !== undefined && Number.isFinite(quantity);
+      var existing = code ? byCode.get(code) : null;
+      if (!existing) {
+        var order = Object.assign({}, item, { quantity: validQuantity ? Math.abs(quantity) : null });
+        grouped.push(order);
+        if (code) byCode.set(code, order);
+      } else {
+        if (validQuantity) existing.quantity = (existing.quantity || 0) + Math.abs(quantity);
+        if (!existing.contactName && item.contactName) existing.contactName = item.contactName;
+        if (item[dateField] && (!existing[dateField] || item[dateField] > existing[dateField])) {
+          existing[dateField] = item[dateField];
+        }
+      }
+    });
+    return grouped;
+  }
+
+  function locationSections(d) {
+    var production = kv('浜у搧鍚嶇О', text(d.itemName)) +
+      kv('瑙勬牸', text(d.itemSpecification || d.itemUnitMeasureName)) +
+      kv('鍔犲伐鎵规', text(d.batchCode || d.tempCode));
+    if (d.produceDate) production = kv('鐢熶骇鏃ユ湡', fmtDay(d.produceDate)) + production;
+    var html = sec('鐢熶骇淇℃伅', null, production, null);
+
+    var salesFlows = groupOutboundOrders((d.seedFlows || []).filter(function (item) { return item.bizType === 119; }),
+      function (item) { return item.bizCode; }, 'transactionTime');
+    var salesTargets = groupOutboundOrders(d.salesTargets || [],
+      function (item) { return item.salesCode || item.salesOrderCode; }, 'salesDate');
+    var flow = (d.seedFlows || []).find(function (item) { return item.warehouseName; });
+    var storage = '';
+    if (d.inboundTime) storage += kv('鍏ュ簱鏃ユ湡', fmtDay(d.inboundTime));
+    var outboundDates = salesFlows.map(function (item) { return item.transactionTime; })
+      .concat(salesTargets.map(function (item) { return item.salesDate; })).filter(Boolean).sort();
+    if (outboundDates.length) storage += kv('鏈�杩戝嚭搴撴棩鏈�', fmtDay(outboundDates[outboundDates.length - 1]));
+    if (flow) storage += kv('浠撳簱', text(flow.warehouseName));
+    html += sec('浠撳偍淇℃伅', null, storage || '<div class="empty-tip">鏆傛棤浠撳偍淇℃伅</div>', null);
+
+    var logistics = salesFlows.map(function (item) {
+      var route = [item.warehouseName, item.clientName].filter(Boolean).join(' 鈫� ');
+      var description = '璇ユ壒娆�' + (item.transactionTime ? '浜� ' + String(item.transactionTime).slice(0, 10) + ' ' : '') +
+        (item.warehouseName ? '浠�' + item.warehouseName + '鍑哄簱' : '瀹屾垚閿�鍞嚭搴�') +
+        (item.clientName ? '锛屽彂寰�' + item.clientName : '') + '銆�';
+      return li('<span class="li-ttl">' + text(route || '閿�鍞嚭搴�') + '</span>', fmtDay(item.transactionTime),
+        kv('鍑哄簱鍗曞彿', text(item.bizCode)) + kv('鏁伴噺', fmtNum(item.quantity)) +
+        kv('娴佽浆璇存槑', text(description)) +
+        (item.contactName ? kv('鑱旂郴浜�', text(item.contactName)) : ''));
+    }).join('');
+    if (!logistics && !isEmptyList(salesTargets)) {
+      logistics = salesTargets.map(function (item) {
+        var description = '璇ユ壒娆�' + (item.salesDate ? '浜� ' + String(item.salesDate).slice(0, 10) + ' ' : '') +
+          '瀹屾垚閿�鍞嚭搴�' + (item.clientName ? '锛屽幓鍚�' + item.clientName : '') + '銆�';
+        return li('<span class="li-ttl">' + text(item.clientName || '閿�鍞幓鍚�') + '</span>', fmtDay(item.salesDate),
+          kv('鍑哄簱鍗曞彿', text(item.salesCode || item.salesOrderCode)) + kv('鏁伴噺', fmtNum(item.quantity)) +
+          kv('娴佽浆璇存槑', text(description)) +
+          (item.contactName ? kv('鑱旂郴浜�', text(item.contactName)) : ''));
+      }).join('');
+    }
+    html += sec('鐗╂祦淇℃伅', null, logistics || '<div class="empty-tip">鏆傛棤鐗╂祦淇℃伅</div>', null);
+    return html;
   }
 
   function stripUrl(v) {
@@ -537,9 +623,21 @@
   }
 
   // 鍖哄潡2锛氳拷婧煡璇紙鏈綍鍏ユ壒娆℃椂鍙睍绀哄搧绉嶄俊鎭� + 鎻愮ず锛�
+  // 鍥涜绱狅紙鍝佺鍚嶇О 鈫� 鐢熶骇缁忚惀鑰� 鈫� 鍗曞厓璇嗗埆浠g爜 鈫� 杩芥函缃戝潃锛夋寜鍥芥爣椤哄簭鎺掑垪锛屽叾浣欎俊鎭帓鍦ㄥ叾鍚�
   function tracePanel(d) {
     var code = resolveCode(d);
     var name = [d.itemName, d.itemSpecification].filter(Boolean).join(' ');
+    // 鐢熶骇缁忚惀鑰呬笌杩芥函缃戝潃浼樺厛鍙栨煡璇㈢粨鏋滐紙涓庢爣绛惧嵃鍒峰唴瀹瑰悓婧愶級锛岄��鍥為〉闈㈤厤缃�
+    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 ? '杩涘彛鍟嗗悕绉�' : '鐢熶骇缁忚惀鑰�';
+    // 鍙湁琚嬬爜鎵嶆槸銆屾渶灏忛攢鍞崟鍏冦�嶏紝鍏剁爜鍊兼墠绉般�屽崟鍏冭瘑鍒唬鐮併�嶏紱
+    // 鎵樼洏鐮�/鎵规鐮佷笉灞炰簬鏈�灏忛攢鍞崟鍏冩爣璇嗭紝鎸夊疄闄呯被鍨嬪睍绀猴紝閬垮厤璇娑堣垂鑰�
+    var codeLabel = d.sourceType === 'BAG'
+      ? '鍗曞厓璇嗗埆浠g爜'
+      : (SOURCE_TYPE[d.sourceType] ? SOURCE_TYPE[d.sourceType] + '锛堥潪鏈�灏忛攢鍞崟鍏冿級' : '杩芥函鐮�');
     var unbound = d.batchBound === false;
     var batchRows = unbound
       ? '<div class="notice">璇ヨ拷婧爜灏氭湭褰曞叆鐢熶骇鎵规锛屾壒娆″彿銆佺敓浜ф棩鏈熴�佷骇绾跨瓑淇℃伅寰呭畬鍠勶紱褰撳墠灞曠ず璇ョ爜瀵瑰簲鐨勫搧绉嶄俊鎭��</div>'
@@ -547,31 +645,24 @@
         kv('鐢熶骇鏃ユ湡', fmtDate(d.produceDate)) +
         kv('浜х嚎', text(d.lineName || d.lineCode));
     return kv('鍝佺鍚嶇О', text(name)) +
+      kv(operatorLabel, text(operatorName)) +
+      kv(codeLabel, text(code || '-')) +
+      kv('杩芥函缃戝潃', traceUrl
+        ? '<a class="link" target="_top" href="' + esc(locationUrl.href) + '">' + esc(traceUrl) + '</a>'
+        : '-') +
       kv('璁¢噺鍗曚綅', text(d.itemUnitMeasureName)) +
-      kv('鐢熶骇缁忚惀鑰�', esc(COMPANY_NAME)) +
-      kv('鍗曞厓璇嗗埆浠g爜', text(code || '-')) +
-      kv('杩芥函缃戝潃', '<a class="link" href="' + esc(TRACE_URL) + '">' + esc(TRACE_URL) + '</a>') +
       kv('杩芥函绫诲瀷', esc(SOURCE_TYPE[d.sourceType] || '杩芥函鐮�')) +
       batchRows;
   }
 
   // 鍖哄潡3~锛氱敓浜ф槑缁嗭紙鎶樺彔锛屾湁鏁版嵁鎵嶅睍绀猴級
-  function detailSections(d) {
+  // full=true 鏃跺睍绀哄叏閮ㄦ槑缁嗭紙璐ㄦ/浜哄憳/鎵樼洏/琚嬬爜/閲囪喘鏉ユ簮锛夛紱
+  // 榛樿鍙睍绀虹墿娴侀攢鍞紙绉嶅瓙娴佸悜锛変俊鎭紝鍏朵綑鍖哄潡涓嶅澶栧睍绀恒��
+  function detailSections(d, full) {
     var html = '';
 
-    // 鐢熶骇鎵规淇℃伅
-    var batchBody =
-      kv('鎵规鐘舵��', d.batchStatusName ? statusBadge({ v: [d.batchStatusName, 'blue'] }, 'v') : text(d.batchStatus)) +
-      kv('璁″垝鏁伴噺', fmtNum(d.planQuantity)) +
-      kv('宸茬敓鎴愯鐮�', fmtNum(d.bagQuantity)) +
-      kv('宸茬敓鎴愭墭鐩�', fmtNum(d.palletQuantity)) +
-      kv('鍏ュ簱鏃堕棿', fmtDate(d.inboundTime)) +
-      kv('涓存椂鎵规鐮�', text(d.tempCode)) +
-      kv('澶囨敞', text(d.remark));
-    html += sec('鐢熶骇鎵规淇℃伅', null, batchBody, { collapsible: true, open: false });
-
-    // 璐ㄦ淇℃伅
-    if (d.quality) {
+    // 璐ㄦ淇℃伅锛堜粎瀹屾暣妯″紡灞曠ず锛�
+    if (full && d.quality) {
       var q = d.quality;
       var qBody =
         kv('璐ㄦ缁撹', q.resultName ? '<span class="badge ' + (q.result === 1 ? 'green' : 'red') + '">' + esc(q.resultName) + '</span>' : '-') +
@@ -596,8 +687,8 @@
       html += sec('璐ㄦ淇℃伅', null, qBody, { collapsible: true, open: false });
     }
 
-    // 鐢熶骇浜哄憳
-    if (!isEmptyList(d.workers)) {
+    // 鐢熶骇浜哄憳锛堜粎瀹屾暣妯″紡灞曠ず锛氭秹鍙婁釜浜轰俊鎭紝涓嶅澶栧叕寮�锛�
+    if (full && !isEmptyList(d.workers)) {
       var wBody = d.workers.map(function (w) {
         return li('<span class="li-ttl">' + text(w.userName) + '</span>' +
           (w.workerTypeName ? '<span class="badge gray">' + esc(w.workerTypeName) + '</span>' : ''),
@@ -607,8 +698,8 @@
       html += sec('鐢熶骇浜哄憳', d.workers.length + ' 浜�', '<div class="scroll-list">' + wBody + '</div>', { collapsible: true, open: false });
     }
 
-    // 鎵樼洏淇℃伅
-    if (!isEmptyList(d.pallets)) {
+    // 鎵樼洏淇℃伅锛堜粎瀹屾暣妯″紡灞曠ず锛�
+    if (full && !isEmptyList(d.pallets)) {
       var pRows = d.pallets.map(function (p) {
         return [text(p.code), fmtNum(p.palletNo), fmtNum(p.bagCount), fmtNum(p.capacity)];
       });
@@ -617,8 +708,8 @@
         { collapsible: true, open: false });
     }
 
-    // 琚嬬爜鍒楄〃
-    if (!isEmptyList(d.bags)) {
+    // 琚嬬爜鍒楄〃锛堜粎瀹屾暣妯″紡灞曠ず锛�
+    if (full && !isEmptyList(d.bags)) {
       var bBody = d.bags.map(function (b) {
         return li('<span class="li-ttl">' + text(b.code) + '</span>' +
           (b.statusName ? '<span class="badge gray">' + esc(b.statusName) + '</span>' : ''),
@@ -630,33 +721,12 @@
       html += sec('琚嬬爜鍒楄〃', bagCountText, '<div class="scroll-list">' + bBody + '</div>', { collapsible: true, open: false });
     }
 
-    // 閲囪喘鏉ユ簮
-    if (!isEmptyList(d.purchaseSources)) {
+    // 閲囪喘鏉ユ簮锛堜粎瀹屾暣妯″紡灞曠ず锛�
+    if (full && !isEmptyList(d.purchaseSources)) {
       var psRows = d.purchaseSources.map(function (s) {
         return [text(s.receiptCode), text(s.vendorName), nw(fmtNum(s.receivedQuantity)), nw(fmtDay(s.receiptDate))];
       });
       html += sec('閲囪喘鏉ユ簮', null, table(['閲囪喘鍏ュ簱鍗�', '渚涘簲鍟�', '鏁伴噺', '鏃ユ湡'], psRows), { collapsible: true, open: false });
-    }
-
-    // 绉嶅瓙娴佸悜淇℃伅锛堜粎閿�鍞嚭搴� bizType=119锛�
-    var salesFlows = (d.seedFlows || []).filter(function (f) { return f.bizType === 119; });
-    if (!isEmptyList(salesFlows)) {
-      var sfBody = salesFlows.map(function (f) {
-        var qty = (f.quantity === null || f.quantity === undefined) ? '-' : fmtNum(Math.abs(Number(f.quantity)));
-        var wh = [f.warehouseName, f.locationName].filter(Boolean).join(' / ') || '-';
-        return li(statusBadge(FLOW_DIRECTION, f.type) + '<span class="li-ttl">' + esc(FLOW_BIZ_TYPE[f.bizType] || '') + '</span>',
-          fmtDate(f.transactionTime),
-          kv('鏉ユ簮鍗曞彿', text(f.bizCode)) +
-          kv('瀹㈡埛', text(f.clientName)) +
-          kv('鏁伴噺', qty) +
-          kv('浠撳簱/搴撳尯', text(wh)));
-      }).join('');
-      html += sec('绉嶅瓙娴佸悜淇℃伅', null, '<div class="scroll-list">' + sfBody + '</div>', { collapsible: true, open: false });
-    } else if (!isEmptyList(d.salesTargets)) {
-      var stRows = d.salesTargets.map(function (s) {
-        return [text(s.salesCode || s.salesOrderCode || ''), text(s.clientName), nw(fmtNum(s.quantity)), nw(fmtDay(s.salesDate))];
-      });
-      html += sec('绉嶅瓙娴佸悜淇℃伅', null, table(['閿�鍞嚭搴撳崟', '瀹㈡埛', '鏁伴噺', '鏃ユ湡'], stRows), { collapsible: true, open: false });
     }
 
     // 鍔犲伐娴佽浆
@@ -697,13 +767,16 @@
     });
   })();
 
+  // 鍏堟媺鍙栭〉闈㈤厤缃紙鐢熶骇缁忚惀鑰呭悕绉般�佽拷婧綉鍧�锛夛紝鍐嶆墽琛屾煡璇紱鏌ヨ缁撴灉涓悓鏍峰甫鏈夎繖涓ら」锛屼簰涓哄厹搴�
   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