From 4ca4444ad33a2a1a51f5c06e78ee9365dfb1eed6 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期四, 08 十月 2026 17:11:11 +0800
Subject: [PATCH] feat(mes): 种子二维码标签国标四要素合规改造

---
 yudao-server/src/main/resources/static/trace.html |  107 ++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 76 insertions(+), 31 deletions(-)

diff --git a/yudao-server/src/main/resources/static/trace.html b/yudao-server/src/main/resources/static/trace.html
index b5a75cc..128d955 100644
--- a/yudao-server/src/main/resources/static/trace.html
+++ b/yudao-server/src/main/resources/static/trace.html
@@ -347,11 +347,26 @@
 (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 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 || '';
+          IS_IMPORTED = !!res.data.imported;
+        }
+      })
+      .catch(function () { /* 閰嶇疆鎷夊彇澶辫触锛氶��鍥炰娇鐢ㄦ煡璇㈢粨鏋滀腑鐨勫悓鍚嶅瓧娈� */ });
+  }
 
   var STATE = document.getElementById('state');
   var CODE_INPUT = document.getElementById('codeInput');
@@ -477,11 +492,19 @@
       renderState('<div class="empty-tip error">鏈煡璇㈠埌璇ヨ拷婧爜锛岃鏍稿浜岀淮鐮佹垨鑱旂郴瀹樻柟</div>');
       return;
     }
+    // 宸蹭綔搴熺殑杩芥函鐮侊紙鐮存崯鏇挎崲鍚庝綔搴燂級涓嶅緱浣滀负鏈夋晥浜у搧娴侀�氾紝鐩存帴缁欏嚭璀︾ず骞跺仠姝㈠睍绀烘函婧愯鎯�
+    if (d.codeStatus === 'CANCELED') {
+      renderState('<div class="empty-tip error">璇ヨ拷婧爜宸蹭綔搴燂紝闈炴湰鍏徃鏈夋晥浜у搧锛岃皑闃插亣鍐掋��<br>'
+        + '濡傛湁鐤戦棶璇疯仈绯诲畼鏂规牳瀹炪��</div>');
+      return;
+    }
     var html = '';
     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' });
   }
@@ -537,9 +560,19 @@
   }
 
   // 鍖哄潡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 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 +580,40 @@
         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" href="' + esc(traceUrl) + '">' + 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.batchBound !== false) {
+      var batchBody =
+        kv('鎵规鍙�', text(d.batchCode)) +
+        kv('鎵规鐘舵��', d.batchStatusName ? statusBadge({ v: [d.batchStatusName, 'blue'] }, 'v') : text(d.batchStatus)) +
+        kv('鐢熶骇鏃ユ湡', fmtDate(d.produceDate)) +
+        kv('浜х嚎', text(d.lineName || d.lineCode)) +
+        kv('璁″垝鏁伴噺', fmtNum(d.planQuantity)) +
+        kv('宸茬敓鎴愯鐮�', fmtNum(d.bagQuantity)) +
+        kv('宸茬敓鎴愭墭鐩�', fmtNum(d.palletQuantity)) +
+        kv('鍏ュ簱鏃堕棿', fmtDate(d.inboundTime)) +
+        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 +638,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 +649,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 +659,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,8 +672,8 @@
       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))];
       });
@@ -697,6 +739,9 @@
     });
   })();
 
+  // 鍏堟媺鍙栭〉闈㈤厤缃紙鐢熶骇缁忚惀鑰呭悕绉般�佽拷婧綉鍧�锛夛紝鍐嶆墽琛屾煡璇紱鏌ヨ缁撴灉涓悓鏍峰甫鏈夎繖涓ら」锛屼簰涓哄厹搴�
+  loadTraceConfig();
+
   var initialCode = new URLSearchParams(location.search).get('code') || '';
   CODE_INPUT.value = initialCode;
   if (initialCode) {

--
Gitblit v1.9.3