From 0ddbb4ec727ffce844ef672107e3410d84b1f11a Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期三, 30 九月 2026 09:42:08 +0800
Subject: [PATCH] feat: 业务编码改为随机16位数字并保证全系统唯一
---
yudao-server/src/main/resources/static/trace.html | 270 ++++++++++++++++++++++++++++-------------------------
1 files changed, 141 insertions(+), 129 deletions(-)
diff --git a/yudao-server/src/main/resources/static/trace.html b/yudao-server/src/main/resources/static/trace.html
index be5c7f5..2ff37d7 100644
--- a/yudao-server/src/main/resources/static/trace.html
+++ b/yudao-server/src/main/resources/static/trace.html
@@ -141,6 +141,40 @@
.scroll-list::-webkit-scrollbar { width: 4px; }
.scroll-list::-webkit-scrollbar-thumb { background: #d1d5db; border-radius: 2px; }
+ /* 姝e搧楠岃瘉鍗★紙椤堕儴锛屾壂鐮佷紭鍏堝睍绀猴級 */
+ .verify-card {
+ border: 1px solid var(--primary-light);
+ background: linear-gradient(180deg, #eef8ee, #fff);
+ }
+ .verify-card .card-bd { padding: 14px 16px; }
+ .verify-title {
+ display: flex; align-items: center; gap: 8px;
+ font-size: 16px; font-weight: 700; color: var(--primary);
+ margin-bottom: 4px;
+ }
+ .verify-title::before { content: ""; width: 5px; height: 16px; border-radius: 2px; background: var(--primary); }
+ .verify-sub { font-size: 12px; color: var(--text-sub); margin-bottom: 10px; }
+ .verify-badge { margin-bottom: 10px; }
+ .verify-stats { margin-top: 10px; border-top: 1px dashed var(--border); padding-top: 4px; }
+
+ /* 鍙姌鍙犲崱鐗� */
+ .card.collapsible .card-hd { cursor: pointer; position: relative; padding-right: 30px; }
+ .card.collapsible .card-hd::after {
+ content: "鈻�"; position: absolute; right: 12px; top: 50%;
+ transform: translateY(-50%); color: var(--text-sub); font-size: 12px;
+ transition: transform .2s;
+ }
+ .card.collapsible:not(.open) .card-hd::after { transform: translateY(-50%) rotate(-90deg); }
+ .card.collapsible .card-hd .count { margin-right: 16px; }
+ .card.collapsible .card-bd { display: none; }
+ .card.collapsible.open .card-bd { display: block; }
+
+ /* 浼佷笟绠�浠� */
+ .company-bd { font-size: 14px; color: #4b5563; line-height: 1.85; text-align: justify; }
+ .company-bd p + p { margin-top: 10px; }
+ .company-stats { margin-bottom: 12px; }
+ .company-stats .pill { background: var(--primary-bg); color: var(--primary); font-weight: 600; }
+
footer {
max-width: 480px; margin: 0 auto;
padding: 20px 16px 28px; text-align: center;
@@ -163,6 +197,26 @@
</div>
<section id="state" class="state"></section>
+
+ <!-- 浼佷笟绠�浠嬶紙甯搁┗搴曢儴锛岄粯璁ゅ睍寮�锛� -->
+ <div class="card collapsible open">
+ <div class="card-hd" onclick="this.parentNode.classList.toggle('open')">
+ <span class="bar"></span>浼佷笟绠�浠�
+ <span class="count">鏂扮枂 路 鍥芥湁鎺ц偂</span>
+ </div>
+ <div class="card-bd">
+ <div class="pill-list company-stats">
+ <span class="pill">鎴愮珛 2002 骞�</span>
+ <span class="pill">娉ㄥ唽璧勬湰 1.1 浜垮厓</span>
+ <span class="pill">鑷富鍝佺 61 涓�</span>
+ <span class="pill">鐮斿彂鍥㈤槦 16 浜�</span>
+ </div>
+ <div class="company-bd">
+ <p>鏂扮枂濉旈噷鏈ㄦ渤绉嶄笟鑲′唤鏈夐檺鍏徃浜�2002骞�12鏈�30鏃ュ湪鏂扮枂缁村惥灏旇嚜娌诲尯宸ュ晢灞�娉ㄥ唽鎴愮珛锛屾槸涓�瀹堕泦鍐滀綔鐗╃瀛愶紙妫夎姳銆佸皬楹︺�佹按绋荤瓑锛夎偛銆佺箒銆佹帹銆佸姞銆侀攢銆佺鏈嶄负涓�浣撶殑鍥芥湁鎺ц偂鍏徃銆傚叕鍙歌捣濮嬫敞鍐岃祫鏈�6500涓囧厓锛�2015骞村璧勫悗娉ㄥ唽璧勬湰杈�1.1浜垮厓锛岀敱鏂板啘寮�鍙戙�侀殕骞抽珮绉戙�佸閲屾湪澶у绉戞妧鍏徃銆佸反妤氫赴鍜岀涓氬洓瀹惰偂涓滃崟浣嶇粍鎴愩�傛棗涓嬫嫢鏈変袱瀹舵帶鑲″瓙鍏徃锛屽垎鍒槸涓昏惀鐢熶骇銆佸姞宸ャ�佹壒鍙戦攢鍞啘浣滅墿绉嶅瓙鍖呰。鍓傜殑濉旀渤鍕や赴鍏ㄨ祫瀛愬叕鍙革紝浠ュ強浠ュ啘浣滅墿绉嶅瓙鐢熶骇銆佺粡钀ュ強鍐滀笟鎶�鏈紑鍙戙�佹帹骞裤�佹湇鍔′负涓荤殑浼藉笀濉旀渤绉嶄笟鍏徃銆�</p>
+ <p>鍏徃鑷垚绔嬩互鏉ワ紝濮嬬粓鍧氭寔浠ュ啘涓氱瀛愪骇涓氬寲缁忚惀涓虹洰鏍囷紝鍏ㄥ姏鎵撻�犫�滆偛绉嶈兘鍔涘己銆佺敓浜у姞宸ユ妧鏈厛杩涖�佸競鍦鸿惀閿�缃戠粶鍋ュ叏銆佹妧鏈帹骞挎湇鍔″埌浣嶁�濓紝鈥滆偛绻佹帹鈥濅竴浣撳寲銆佲�滀骇瀛︾爺鈥濈浉缁撳悎鐨勭幇浠e啘浣滅墿绉嶅瓙缁忚惀浼佷笟銆傚叕鍙告嫢鏈夊己鏈夊姏鐨�16浜虹爺鍙戝洟闃燂紝鍧氭寔绉戠爺鍒涙柊鐨勫師鍒涙�э紝鍧氭寔鑷偛涓轰富锛屽悓鏃堕�氳繃寤虹珛鑱斿悎鐢熸�佽瘯楠岀珯锛屾煍鎬у紩鏅猴紝甯稿勾澶栬仒涓闄㈤櫌澹�佷腑鍥藉啘澶с�佹禉澶с�佷腑妫夋墍绛�12鍚嶅浗鍐呭惈鍗氬鍦ㄥ唴鐨勯《绾ф鑺变笓瀹跺洟闃燂紝涓庝竴甯堝啘绉戞墍寮�灞曚簡杩炵画鍗佷簲骞寸殑闄紒鍚堜綔锛岃В鍐充骇涓氬墠娌夸俊鎭拰浼樿川绉嶈川璧勬簮鈥滅煭鏉库�濋棶棰樸�傜洰鍓嶏紝鍏徃鎷ユ湁鑷湁鐭ヨ瘑浜ф潈鍝佺61涓紝鍏朵腑妫夎姳鍝佺46涓紝绮鍝佺15涓�傚嚟鍊熷湪绉嶄笟棰嗗煙鐨勭獊鍑鸿〃鐜帮紝鍏徃鐩哥户鑽h幏鍏靛洟鍜屽浗瀹跺啘涓氫骇涓氬寲閲嶇偣榫欏ご浼佷笟銆侀珮鏂版妧鏈紒涓氥��3A淇$敤浼佷笟銆佹柊鐤嗗悕鐗屻�佷腑鍥藉悕鐗岋紱鍥藉銆佽嚜娌诲尯3A绾ф爣鍑嗗寲鑹ソ琛屼负璇曠偣浼佷笟銆佷腑鍥界涓氫俊鐢ㄩ骞蹭紒涓氥�佽嚜娌诲尯浼佷笟鎶�鏈腑蹇冦�佹柊鐤嗕骇瀛︾爺鑱斿悎寮�鍙戠ず鑼冨熀鍦般�佸叺鍥㈤鎵瑰垱鏂板瀷浼佷笟銆佸叏鍥藉啘鍨﹀啘浣滅墿鑹灞曠ず绀鸿寖鍩哄湴绛夎崳瑾夌О鍙枫�傝嚜2020骞磋捣锛屽叕鍙告鑺卞晢鍝佺瀛愰攢鍞繛缁綅灞呭叏鍥芥棣栵紝2022骞村叆閫夊浗瀹跺啘浣滅墿绉嶄笟妫夎姳琛ョ煭鏉块樀鍨嬩紒涓氾紝2023骞�1鏈堣崳鑾锋柊鐤嗗啘浣滅墿绉嶄笟浼樺娍浼佷笟锛�2025骞�7鏈堣崳鑾峰叺鍥㈠垱鏂板瀷鍜屸�滀笓绮剧壒鏂扳�濅紒涓氱О鍙凤紝2025骞�8鏈堚�滄満閲囨鏂板搧绉嶉�夎偛鍙婃彁璐ㄥ鏁堝叧閿妧鏈泦鎴愬簲鐢ㄢ�濊幏寰楀叺鍥㈢鎶�杩涙濂栦竴绛夊锛�2026骞磋崳鑾峰叏鍥芥鑺辩瀛愯偛绻佹帹鐢熶骇缁忚惀A璇併��</p>
+ </div>
+ </div>
+ </div>
</div>
<footer>鏈郴缁熸暟鎹粎鐢ㄤ簬浜у搧婧簮锛岃閫氳繃姝h娓犻亾璐拱銆�</footer>
@@ -175,10 +229,14 @@
var CODE_INPUT = document.getElementById('codeInput');
var SEARCH_BTN = document.getElementById('searchBtn');
- var BATCH_STATUS = { 10: ['鑽夌', 'gray'], 20: ['鐢熶骇涓�', 'blue'], 30: ['宸插畬鎴�', 'green'], 40: ['宸蹭綔搴�', 'red'] };
- var BAG_STATUS = { 10: ['宸茬敓鎴�', 'gray'], 20: ['宸插鍑哄嵃鍒�', 'blue'], 30: ['宸蹭綔搴�', 'red'] };
- var QUALITY_RESULT = { 0: ['澶勭悊涓�', 'gray'], 1: ['鍚堟牸', 'green'], 2: ['涓嶅悎鏍�', 'red'] };
- var WORKER_TYPE = { 10: '缁勯暱', 20: '鎿嶄綔宸�', 30: '鍖呰宸�', 40: '璐ㄦ鍛�', 50: '鍏朵粬' };
+ 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: '搴撳瓨璋冩暣鍑哄簱'
+ };
// ========== 宸ュ叿鍑芥暟 ==========
function esc(v) {
@@ -207,11 +265,17 @@
return '<span class="badge ' + item[1] + '">' + esc(item[0]) + '</span>';
}
- function card(title, countHtml, bodyHtml) {
- return '<div class="card">' +
- '<div class="card-hd"><span class="bar"></span>' + esc(title) +
+ function card(title, countHtml, bodyHtml, opts) {
+ opts = opts || {};
+ var collapsible = !!opts.collapsible;
+ var open = collapsible && !!opts.open;
+ var hd = '<div class="card-hd"' +
+ (collapsible ? ' onclick="this.parentNode.classList.toggle(\'open\')"' : '') +
+ '><span class="bar"></span>' + esc(title) +
(countHtml ? '<span class="count">' + countHtml + '</span>' : '') +
- '</div>' + '<div class="card-bd">' + bodyHtml + '</div>' + '</div>';
+ '</div>';
+ return '<div class="card' + (collapsible ? ' collapsible' : '') + (open ? ' open' : '') + '">' +
+ hd + '<div class="card-bd">' + bodyHtml + '</div>' + '</div>';
}
function kv(k, v, dim) {
@@ -257,16 +321,56 @@
return;
}
var html = '';
+ html += buildVerifyCard(d);
html += buildItemCard(d);
- html += buildBatchCard(d);
- html += buildQualityCard(d);
- html += buildWorkerCard(d);
- html += buildInboundCard(d);
- html += buildPalletCard(d);
- html += buildBagCard(d);
html += buildOptionalCard(d);
STATE.innerHTML = html || '<div class="empty-tip">鏆傛棤杩芥函鏁版嵁</div>';
window.scrollTo({ top: 0, behavior: 'smooth' });
+ }
+
+ // 鍖哄潡0锛氭鍝侀獙璇侊紙椤堕儴锛屾壂鐮佷紭鍏堝睍绀洪獙璇佺粨璁轰笌鏌ヨ缁熻锛�
+ function stripUrl(v) {
+ if (!v) return v;
+ if (/^https?:\/\//i.test(v)) {
+ var m = v.match(/[?&]code=([^&]*)/);
+ return m ? decodeURIComponent(m[1]) : '';
+ }
+ return v;
+ }
+
+ function buildVerifyCard(d) {
+ var typeLabel = { BAG: '琚嬬爜', PALLET: '鎵樼洏鐮�', BATCH: '鎵规鐮�' }[d.sourceType] || '杩芥函鐮�';
+ var code = stripUrl(d.requestCode) || d.batchCode || d.tempCode || '-';
+ var bagNo = '-';
+ if (d.sourceType === 'BAG' && d.bags) {
+ for (var i = 0; i < d.bags.length; i++) {
+ if (d.bags[i].code === code) {
+ bagNo = d.bags[i].bagNo;
+ break;
+ }
+ }
+ }
+ var statsHtml = '<div class="verify-stats">';
+ if (d.antiFake && d.antiFake.scanCount > 0) {
+ statsHtml += kv('绱鏌ヨ', esc(d.antiFake.scanCount) + ' 娆�') +
+ kv('棣栨鏌ヨ', fmtDate(d.antiFake.firstScanTime)) +
+ kv('鏈�杩戞煡璇�', fmtDate(d.antiFake.lastScanTime));
+ } else {
+ statsHtml += kv('绱鏌ヨ', '鏆傛棤鏌ヨ璁板綍');
+ }
+ statsHtml += '</div>';
+ return '<div class="card verify-card">' +
+ '<div class="card-bd">' +
+ '<div class="verify-title">姝e搧楠岃瘉</div>' +
+ '<div class="verify-badge"><span class="badge-big green">鉁� 姝e搧楠岃瘉閫氳繃</span></div>' +
+ '<div class="verify-sub">璇ヨ拷婧爜涓烘瑙勬笭閬撲骇鍝侊紝婧簮淇℃伅鐪熷疄鏈夋晥</div>' +
+ kv('杩芥函绫诲瀷', typeLabel) +
+ kv(typeLabel, text(code)) +
+ (d.sourceType === 'BAG' ? kv('琚嬪彿', bagNo) : '') +
+ kv('鎵规鍙�', text(d.batchCode)) +
+ kv('鍝佺', text(d.itemName)) +
+ statsHtml +
+ '</div></div>';
}
// 鍖哄潡1锛氬搧绉嶄俊鎭�
@@ -275,117 +379,12 @@
return card('鍝佺淇℃伅', null,
kv('鍝佺鍚嶇О', text(d.itemName)) +
kv('瑙勬牸', text(d.itemSpecification)) +
- kv('鍝佺缂栫爜', text(d.itemCode))
+ kv('鍝佺缂栫爜', text(d.itemCode)),
+ { collapsible: true, open: true }
);
}
- // 鍖哄潡2锛氱敓浜ф壒娆�
- function buildBatchCard(d) {
- if (!d.batchCode && !d.tempCode) return '';
- var status = statusBadge(BATCH_STATUS, d.batchStatus);
- return card('鐢熶骇鎵规', status,
- kv('鎵规鍙�', text(d.batchCode)) +
- kv('鐘舵��', status) +
- kv('鐢熶骇鏃ユ湡', fmtDate(d.produceDate)) +
- kv('浜х嚎', text(d.lineName ? (d.lineName + (d.lineCode ? ' / ' + d.lineCode : '')) : d.lineCode)) +
- kv('璐d换浜�', text(d.ownerUserName)) +
- kv('璁″垝鏁伴噺', fmtNum(d.planQuantity) === '-' ? '-' : fmtNum(d.planQuantity)) +
- kv('宸茬敓鎴愯鐮�', fmtNum(d.bagQuantity)) +
- kv('宸茬敓鎴愭墭鐩�', fmtNum(d.palletQuantity)) +
- kv('鍏ュ簱鏃堕棿', fmtDate(d.inboundTime)) +
- (d.remark ? kv('澶囨敞', text(d.remark)) : '')
- );
- }
-
- // 鍖哄潡3锛氱瀛愯川妫�
- function buildQualityCard(d) {
- var q = d.quality;
- if (!q) return '';
- var result = QUALITY_RESULT[q.result];
- var badge = result
- ? '<span class="badge-big ' + result[1] + '">' + esc(result[0]) + '</span>'
- : '<span class="badge-big gray">鏈煡</span>';
-
- var rows = '';
- if (q.indicators && q.indicators.length) {
- rows = '<table class="mini-table"><thead><tr><th>鎸囨爣</th><th>妫�娴嬪��</th><th>鏍囧噯鑼冨洿</th><th>缁撴灉</th></tr></thead><tbody>';
- q.indicators.forEach(function (i) {
- var range = (i.minValue !== null && i.minValue !== undefined && i.maxValue !== null && i.maxValue !== undefined)
- ? esc(i.minValue) + ' ~ ' + esc(i.maxValue) : '-';
- var pass = (i.pass === true)
- ? '<span class="badge green">鍚堟牸</span>'
- : (i.pass === false ? '<span class="badge red">涓嶅悎鏍�</span>' : '<span class="badge gray">--</span>');
- rows += '<tr><td>' + text(i.indicatorName) + '</td><td>' + text(i.value) + '</td><td>' + range + '</td><td>' + pass + '</td></tr>';
- });
- rows += '</tbody></table>';
- }
-
- return card('绉嶅瓙璐ㄦ', badge,
- kv('妫�楠岀粨璁�', badge) +
- kv('妫�楠屽憳', text(q.inspectorName)) +
- kv('妫�楠屾椂闂�', fmtDate(q.inspectedAt)) +
- (q.reason ? kv('涓嶅悎鏍煎師鍥�', text(q.reason)) : '') +
- (rows ? '<div style="margin-top:8px">' + rows + '</div>' : '')
- );
- }
-
- // 鍖哄潡4锛氱敓浜т汉鍛�
- function buildWorkerCard(d) {
- if (isEmptyList(d.workers)) return '';
- var html = '<div class="pill-list">';
- d.workers.forEach(function (w) {
- var name = w.userName || '-';
- var type = w.workerTypeName || (WORKER_TYPE[w.workerType] || '');
- var color = { 10: 'var(--blue)', 20: 'var(--green)', 30: 'var(--primary-light)', 40: 'var(--red)', 50: 'var(--gray)' }[w.workerType] || 'var(--gray)';
- html += '<span class="pill"><span class="dot" style="background:' + color + '"></span>' +
- esc(type) + '锛�' + esc(name) + '</span>';
- });
- html += '</div>';
- return card('鐢熶骇浜哄憳', null, html);
- }
-
- // 鍖哄潡5锛氭壂鐮佸叆搴撲簨浠�
- function buildInboundCard(d) {
- var e = d.inbound;
- if (!e) return '';
- return card('鎵爜鍏ュ簱', null,
- kv('浜嬩欢鍙�', text(e.eventId)) +
- kv('鍏ュ簱鏁伴噺', fmtNum(e.quantity)) +
- kv('璁惧缂栫爜', text(e.deviceCode)) +
- kv('浜х嚎', text(e.lineCode)) +
- kv('鍏ュ簱鏃堕棿', fmtDate(e.eventTime))
- );
- }
-
- // 鍖哄潡6锛氭墭鐩�
- function buildPalletCard(d) {
- if (isEmptyList(d.pallets)) return '';
- var countHtml = '鍏� ' + esc(d.palletCount || d.pallets.length) + ' 涓�';
- var rows = '<table class="mini-table"><thead><tr><th>鎵樼洏鐮�</th><th>搴忓彿</th><th>宸茶/鍙</th></tr></thead><tbody>';
- d.pallets.forEach(function (p) {
- rows += '<tr><td>' + text(p.code) + '</td><td>' + fmtNum(p.palletNo) + '</td><td>' +
- fmtNum(p.bagCount) + ' / ' + fmtNum(p.capacity) + '</td></tr>';
- });
- rows += '</tbody></table>';
- return card('鎵樼洏淇℃伅', countHtml, rows);
- }
-
- // 鍖哄潡7锛氳鐮侊紙涓�琚嬩竴鐮侊級
- function buildBagCard(d) {
- if (d.bagTotal === null || d.bagTotal === undefined || d.bagTotal === 0) return '';
- var countHtml = '鍏� ' + esc(d.bagTotal) + ' 涓�' + (d.bags && d.bags.length < d.bagTotal ? '锛堝睍绀哄墠 ' + esc(d.bags.length) + ' 涓級' : '');
- var rows = '<table class="mini-table"><thead><tr><th>琚嬬爜</th><th>琚嬪彿</th><th>鎵樼洏</th><th>鐘舵��</th></tr></thead><tbody>';
- (d.bags || []).forEach(function (b) {
- rows += '<tr><td>' + text(b.code) + '</td><td>' + fmtNum(b.bagNo) + '</td><td>' + text(b.palletCode) + '</td><td>' +
- statusBadge(BAG_STATUS, b.status) + '</td></tr>';
- });
- rows += '</tbody></table>';
- return card('琚嬬爜淇℃伅', countHtml,
- '<div class="scroll-list">' + rows + '</div>'
- );
- }
-
- // 鍖哄潡8锛氬彲閫夋墿灞曪紙閲囪喘鏉ユ簮 / 閿�鍞幓鍚� / 鍔犲伐娴佽浆锛夛紝鏈夋暟鎹墠灞曠ず
+ // 鍖哄潡2锛氬彲閫夋墿灞曪紙閲囪喘鏉ユ簮 / 绉嶅瓙娴佸悜淇℃伅锛堜粎閿�鍞嚭搴擄級 / 鍔犲伐娴佽浆锛夛紝鏈夋暟鎹墠灞曠ず
function buildOptionalCard(d) {
var html = '';
if (!isEmptyList(d.purchaseSources)) {
@@ -394,15 +393,28 @@
rows += '<tr><td>' + text(s.receiptCode) + '</td><td>' + text(s.vendorName) + '</td><td>' + fmtNum(s.receivedQuantity) + '</td><td>' + fmtDate(s.receiptDate) + '</td></tr>';
});
rows += '</tbody></table>';
- html += card('閲囪喘鏉ユ簮', null, rows);
+ html += card('閲囪喘鏉ユ簮', null, rows, { collapsible: true, open: false });
}
- if (!isEmptyList(d.salesTargets)) {
- var rows2 = '<table class="mini-table"><thead><tr><th>閿�鍞嚭搴撳崟</th><th>瀹㈡埛</th><th>鏁伴噺</th><th>鏃ユ湡</th></tr></thead><tbody>';
- d.salesTargets.forEach(function (s) {
- rows2 += '<tr><td>' + text(s.outCode || s.salesOrderCode || '') + '</td><td>' + text(s.customerName) + '</td><td>' + fmtNum(s.quantity) + '</td><td>' + fmtDate(s.outTime) + '</td></tr>';
+ // 鍙睍绀洪攢鍞嚭搴擄紙bizType=119锛夌殑娴佹按锛岀敓浜у叆搴�/浜у搧浜у嚭绛変笉灞曠ず
+ var salesFlows = (d.seedFlows || []).filter(function (f) { return f.bizType === 119; });
+ if (!isEmptyList(salesFlows)) {
+ var rows2 = '<table class="mini-table"><thead><tr><th>鏂瑰悜</th><th>涓氬姟</th><th>鏉ユ簮鍗曞彿</th><th>瀹㈡埛</th><th>鏁伴噺</th><th>鏃堕棿</th><th>浠撳簱/搴撳尯</th></tr></thead><tbody>';
+ salesFlows.forEach(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(' / ') || '-';
+ rows2 += '<tr><td>' + statusBadge(FLOW_DIRECTION, f.type) + '</td><td>' + text(FLOW_BIZ_TYPE[f.bizType] || f.bizType) +
+ '</td><td>' + text(f.bizCode) + '</td><td>' + text(f.clientName) + '</td><td>' + qty + '</td><td>' +
+ fmtDate(f.transactionTime) + '</td><td>' + text(wh) + '</td></tr>';
});
rows2 += '</tbody></table>';
- html += card('閿�鍞幓鍚�', null, rows2);
+ html += card('绉嶅瓙娴佸悜淇℃伅', null, rows2, { collapsible: true, open: false });
+ } else if (!isEmptyList(d.salesTargets)) {
+ var rows2b = '<table class="mini-table"><thead><tr><th>閿�鍞嚭搴撳崟</th><th>瀹㈡埛</th><th>鏁伴噺</th><th>鏃ユ湡</th></tr></thead><tbody>';
+ d.salesTargets.forEach(function (s) {
+ rows2b += '<tr><td>' + text(s.salesCode || s.salesOrderCode || '') + '</td><td>' + text(s.clientName) + '</td><td>' + fmtNum(s.quantity) + '</td><td>' + fmtDate(s.salesDate) + '</td></tr>';
+ });
+ rows2b += '</tbody></table>';
+ html += card('绉嶅瓙娴佸悜淇℃伅', null, rows2b, { collapsible: true, open: false });
}
if (!isEmptyList(d.processTraces)) {
var rows3 = '<table class="mini-table"><thead><tr><th>鑺傜偣</th><th>璇存槑</th><th>鏃堕棿</th></tr></thead><tbody>';
@@ -410,7 +422,7 @@
rows3 += '<tr><td>' + text(t.nodeName) + '</td><td>' + text(t.description) + '</td><td>' + fmtDate(t.processTime) + '</td></tr>';
});
rows3 += '</tbody></table>';
- html += card('鍔犲伐娴佽浆', null, rows3);
+ html += card('鍔犲伐娴佽浆', null, rows3, { collapsible: true, open: false });
}
return html;
}
--
Gitblit v1.9.3