From 2b80cfa1ea7b8f177cc53e1ed3299e4db3ecac1d Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期四, 15 一月 2026 09:47:42 +0800
Subject: [PATCH] 完善销售订单出库自动勾选
---
src/main/webapp/views/order/outLocDetlQuery.html | 220 +++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 150 insertions(+), 70 deletions(-)
diff --git a/src/main/webapp/views/order/outLocDetlQuery.html b/src/main/webapp/views/order/outLocDetlQuery.html
index be2bcba..39ca5e6 100644
--- a/src/main/webapp/views/order/outLocDetlQuery.html
+++ b/src/main/webapp/views/order/outLocDetlQuery.html
@@ -186,6 +186,32 @@
</div>
</script>
+<!-- 鎵归噺閫夋嫨鍑哄簱绔欏脊绐楁ā鏉� -->
+<script type="text/html" id="staBatchSelectDialog">
+ <div style="padding: 20px;">
+ <form class="layui-form" id="batchSelectStaBox">
+ <!-- 涓嬫媺妗嗗皢閫氳繃Handlebars妯℃澘鍔ㄦ�佹覆鏌� -->
+ </form>
+ <div style="text-align: center; margin-top: 20px;">
+ <button class="layui-btn layui-btn-sm" lay-submit lay-filter="staBatchSelectConfirm">纭</button>
+ </div>
+ </div>
+</script>
+
+<!-- 鎵归噺閫夋嫨鍑哄簱绔欎笅鎷夋妯℃澘 -->
+<script type="text/html" id="batchStaSelectTpl">
+ <div class="layui-form-item">
+ <label class="layui-form-label">鍑哄簱绔�</label>
+ <div class="layui-input-block">
+ <select name="batchSta" lay-filter="batchSta" lay-search>
+ {{#each list}}
+ <option value="{{this}}">{{this}}</option>
+ {{/each}}
+ </select>
+ </div>
+ </div>
+</script>
+
<script type="text/html" id="tbBasicTbStaNos">
<div class="ew-select-fixed">
<select class="order-sta-select" lay-filter="tbBasicTbStaNos">
@@ -312,31 +338,30 @@
var data = obj.data;
var checked = obj.checked;
var type = obj.type;
-
- // 纭繚window.autoSelectedData宸插垵濮嬪寲
- if (!window.autoSelectedData) {
- window.autoSelectedData = [];
+ console.log("data"+data.batch)
+ if (type === 'one') {
+ // 鍗曚釜閫夋嫨
+ if (checked) {
+ selectedTotal += parseFloat(data.anfme || 0);
+ } else {
+ selectedTotal -= parseFloat(data.anfme || 0);
+ }
+ } else if (type === 'all') {
+ // 鍏ㄩ��
+ var checkStatus = table.checkStatus('stockOut');
+ if (checked) {
+ // 璁$畻褰撳墠椤垫墍鏈夋暟鎹殑鏁伴噺鎬诲拰
+ checkStatus.data.forEach(function(item){
+ selectedTotal += parseFloat(item.anfme || 0);
+ });
+ } else {
+ // 鍙栨秷鍏ㄩ�夛紝鍑忓幓褰撳墠椤垫墍鏈夋暟鎹殑鏁伴噺鎬诲拰
+ checkStatus.data.forEach(function(item){
+ selectedTotal -= parseFloat(item.anfme || 0);
+ });
+ }
}
- // 閲嶆柊璁$畻selectedTotal锛岀‘淇濅笌瀹為檯鍕鹃�夌姸鎬佷竴鑷�
- var updateSelectedTotalFromCheckboxes = function() {
- var checkStatus = table.checkStatus('stockOut');
- selectedTotal = 0;
-
- // 鏇存柊window.autoSelectedData锛屽彧淇濈暀瀹為檯鍕鹃�夌殑鏁版嵁
- window.autoSelectedData = [];
-
- // 閲嶆柊璁$畻閫変腑鎬绘暟鍜屾洿鏂癮utoSelectedData
- checkStatus.data.forEach(function(item) {
- selectedTotal += parseFloat(item.anfme || 0);
- window.autoSelectedData.push(item);
- });
- };
-
- // 涓嶇鏄崟閫夎繕鏄叏閫夛紝閮介噸鏂拌绠楀疄闄呭嬀閫夌殑鏁版嵁鍜屾�绘暟
- updateSelectedTotalFromCheckboxes();
-
- // 鏇存柊鏄剧ず閫変腑鐨勬暟閲�
updateSelectedTotal();
// 濡傛灉閫変腑鐨勬暟閲忚秴杩囪鍗曟暟閲忥紝缁欏嚭鎻愮ず
@@ -407,47 +432,39 @@
var remaining = orderTotal;
var selectedCount = 0;
- // 瀵瑰簱浣嶆暟鎹繘琛屾帓搴忥紝浼樺厛閫夋嫨鐩稿悓搴撲綅鐨勫簱瀛�
- allData.sort(function(a, b) {
- // 鍏堟寜搴撲綅鍙锋帓搴�
- if (a.locNo !== b.locNo) {
- return a.locNo.localeCompare(b.locNo);
- }
- // 鍐嶆寜鎵规鎺掑簭
- return a.batch.localeCompare(b.batch);
- });
+ // 浣跨敤鍘熷椤哄簭鐨勫壇鏈紝浠庣涓�椤电涓�涓紑濮嬪嬀閫�
+ var sortedData = allData.slice();
- for (var i = 0; i < allData.length; i++) {
- var item = allData[i];
+ // 閫夋嫨闆嗗悎锛堜娇鐢ㄥ敮涓�閿伩鍏嶇储寮曢敊涔憋級
+ var selectionKeys = {};
+ for (var i = 0; i < sortedData.length; i++) {
+ var item = sortedData[i];
var itemAnfme = parseFloat(item.anfme || 0);
-
- if (itemAnfme <= 0) {
- continue; // 璺宠繃鏁伴噺涓�0鐨勮褰�
- }
-
- // 濡傛灉鍓╀綑鏁伴噺澶т簬绛変簬褰撳墠椤圭殑鏁伴噺锛屽叏閮ㄥ嬀閫�
+ if (itemAnfme <= 0) continue;
+ var key = (item.locNo || '') + '|' + (item.batch || '') + '|' + (item.matnr || '') + '|' + (item.anfme || 0);
if (remaining >= itemAnfme) {
- allData[i].LAY_CHECKED = true;
- selectedTotal += itemAnfme;
+ selectionKeys[key] = true;
remaining -= itemAnfme;
selectedCount++;
window.autoSelectedData.push(item);
- }
- // 鍚﹀垯鍙嬀閫夊墿浣欓儴鍒嗭紙瀹為檯鎿嶄綔涓紝鏁翠釜璁板綍閮戒細琚嬀閫夛紝浣嗕細鍦ㄦ彁浜ゆ椂澶勭悊鏁伴噺锛�
- else if (remaining > 0) {
- allData[i].LAY_CHECKED = true;
- selectedTotal += itemAnfme;
- // 杩欓噷涓嶄慨鏀筰tem.anfme锛屽洜涓鸿繖鏄〃鏍兼樉绀虹殑鏁版嵁
+ } else if (remaining > 0) {
+ selectionKeys[key] = true;
remaining = 0;
selectedCount++;
window.autoSelectedData.push(item);
- } else {
- break; // 宸叉弧瓒宠鍗曟暟閲忥紝鍋滄鍕鹃��
- }
-
- // 濡傛灉宸茬粡婊¤冻璁㈠崟鏁伴噺锛屽仠姝㈠嬀閫�
- if (remaining <= 0) {
break;
+ } else {
+ break;
+ }
+ }
+
+ // 鏍规嵁閫夋嫨闆嗗悎鍚屾鍘熷鏁版嵁鐨勫嬀閫夋爣璁帮紝骞堕噸鏂拌绠楅�変腑鏁伴噺
+ selectedTotal = 0;
+ for (var i = 0; i < allData.length; i++) {
+ var k = (allData[i].locNo || '') + '|' + (allData[i].batch || '') + '|' + (allData[i].matnr || '') + '|' + (allData[i].anfme || 0);
+ allData[i].LAY_CHECKED = !!selectionKeys[k];
+ if (allData[i].LAY_CHECKED) {
+ selectedTotal += parseFloat(allData[i].anfme || 0);
}
}
@@ -580,9 +597,6 @@
, moveType: 1 //鎷栨嫿妯″紡锛�0鎴栬��1
, content: $('#pakoutPreviewBox').html()
, success: function (layero, index) {
- res.data.forEach((item, index) => {
- console.log(`椤� ${index + 1}:`, item);
- });
stoPreTabIdx = table.render({
elem: '#stoPreTab1',
data: res.data,
@@ -590,8 +604,10 @@
page: false,
limit: Number.MAX_VALUE,
cellMinWidth: 100,
+ // cols蹇呴』浣跨敤浜岀淮鏁扮粍鏍煎紡锛岃繖鏄痩ayui table鐨勬爣鍑嗛厤缃�
cols: [[
- // {type: 'checkbox', merge: ['orderNo']},
+ // 灏嗗閫夋鍒楁斁鍦ㄧ涓�鍒楋紝渚夸簬鐢ㄦ埛鎿嶄綔鍜宼ableMerge澶勭悊
+
{field: 'orderNo', title: '鍗曟嵁缂栧彿', merge: true, align: 'center'},
{field: 'title', title: '鍟嗗搧', merge: true, align: 'center', width: 350},
{field: 'batch', title: '鎵瑰彿', align: 'center'},
@@ -607,6 +623,7 @@
title: '璐т綅',
align: 'center',
width: 100,
+ merge: ['locNo'],
templet: '#locNoTpl'
},
{
@@ -616,7 +633,7 @@
merge: ['locNo'],
templet: '#tbBasicTbStaNos'
},
- {type: 'checkbox', merge: ['locNo']},
+ {type: 'checkbox'}
]],
done: function (res) {
tableMerge.render(this);
@@ -638,7 +655,30 @@
});
// 鎵归噺淇敼鍑哄簱绔�
form.on('submit(batchModifySta)', function () {
- let stoPreTabData = layui.table.checkStatus('stoPreTab1').data;
+ // 鑾峰彇閫変腑鐨勬暟鎹紝鍏煎鍚堝苟琛岀殑鎯呭喌
+ let checkStatus = table.checkStatus('stoPreTab1');
+ let stoPreTabData = checkStatus.data;
+
+ // 濡傛灉checkStatus杩斿洖鐨勬暟鎹负绌猴紝灏濊瘯浠巘ableCache涓幏鍙�
+ if (stoPreTabData.length === 0) {
+ // 閬嶅巻tableCache锛屾壘鍑烘墍鏈夐�変腑鐨勮鍙婂叾鍚堝苟琛�
+ let checkedLocNos = [];
+ // 棣栧厛鎵惧嚭鎵�鏈夎閫変腑鐨勮鐨刲ocNo
+ tableCache.forEach(function(item) {
+ if (item.LAY_CHECKED === true) {
+ checkedLocNos.push(item.locNo);
+ }
+ });
+
+ // 鍘婚噸
+ checkedLocNos = [...new Set(checkedLocNos)];
+
+ // 鏍规嵁locNo杩囨护鍑烘墍鏈夌浉鍏崇殑琛�
+ stoPreTabData = tableCache.filter(function(item) {
+ return checkedLocNos.includes(item.locNo);
+ });
+ }
+
if (stoPreTabData.length < 1) {
layer.msg("璇疯嚦灏戦�夋嫨涓�鏉′互涓婂悎骞舵暟鎹�", {icon: 7});
return false;
@@ -663,6 +703,11 @@
}
}
}
+
+ // 娣诲姞璋冭瘯淇℃伅
+ console.log('staBatchSelectVal:', staBatchSelectVal);
+ console.log('staBatchSelectVal绫诲瀷:', Array.isArray(staBatchSelectVal) ? '鏁扮粍' : '闈炴暟缁�');
+ console.log('staBatchSelectVal闀垮害:', staBatchSelectVal.length);
if (staBatchSelectVal.length === 0) {
layer.msg("鍑哄簱绔欐病鏈変氦闆嗭紝鏃犳硶鎵归噺淇敼", {icon: 2});
return;
@@ -674,21 +719,56 @@
title: '璇烽�夋嫨绔欑偣',
content: $('#staBatchSelectDialog').html(),
success: function (layero, ddIndex) {
- // 娓叉煋涓嬫媺妗�
- let template = Handlebars.compile($('#batchStaSelectTpl').html());
- $('#batchSelectStaBox').html(template({list: staBatchSelectVal}));
+ // 鐩存帴浣跨敤鍘熺敓鏂瑰紡鍒涘缓select鍏冪礌锛屼笉渚濊禆Handlebars妯℃澘
+ let selectHtml = '<div class="layui-form-item">';
+ selectHtml += '<label class="layui-form-label">鍑哄簱绔�</label>';
+ selectHtml += '<div class="layui-input-block">';
+ selectHtml += '<select name="batchSta" lay-filter="batchSta" lay-search>';
+
+ // 鎵嬪姩閬嶅巻鏁扮粍鍒涘缓option
+ staBatchSelectVal.forEach(function(staNo) {
+ selectHtml += '<option value="' + staNo + '">' + staNo + '</option>';
+ });
+
+ selectHtml += '</select>';
+ selectHtml += '</div>';
+ selectHtml += '</div>';
+
+ // 鐩存帴鎻掑叆HTML
+ $(layero).find('#batchSelectStaBox').html(selectHtml);
+
+ // 娓叉煋琛ㄥ崟
+ layui.form.render('select');
+
// 纭
form.on('submit(staBatchSelectConfirm)', function (obj) {
let loadIdx = layer.load(2);
- let batchSta = Number(obj.field.batchSta);
+ // 鐩存帴浠嶥OM涓幏鍙栭�変腑鐨勭珯鐐瑰�硷紝纭繚鑳芥纭幏鍙栧埌
+ let batchSta = $(layero).find('select[name="batchSta"]').val();
+ console.log('鎵归噺淇敼鐨勭珯鐐瑰��:', batchSta);
let arr = [];
- for (let j = 0; j < stoPreTabData.length; j++) {
+
+ // 绠�鍖栨洿鏂伴�昏緫锛岀洿鎺ユ洿鏂版墍鏈夐�変腑鐨勬暟鎹�
+ stoPreTabData.forEach(function(preItem) {
for (let i = 0; i < tableCache.length; i++) {
- if (tableCache[i].orderNo === stoPreTabData[j].orderNo
- && tableCache[i].matnr === stoPreTabData[j].matnr
- && tableCache[i].locNo === stoPreTabData[j].locNo) {
+ // 鍙牴鎹甽ocNo杩涜鍖归厤锛屽洜涓鸿〃鏍间腑locNo鏄悎骞跺崟鍏冩牸鐨勫叧閿瓧娈�
+ if (tableCache[i].locNo === preItem.locNo) {
tableCache[i]['staNo'] = batchSta;
arr.push(i);
+ console.log('鏇存柊浜嗘暟鎹储寮�:', i, '绔欑偣鍊�:', batchSta);
+ }
+ }
+ });
+
+ // 濡傛灉娌℃湁鎵惧埌鍖归厤椤癸紝灏濊瘯鐩存帴鏇存柊閫変腑鐨勬暟鎹�
+ if (arr.length === 0) {
+ console.log('鏈壘鍒板尮閰嶉」锛屽皾璇曠洿鎺ユ洿鏂�');
+ // 鐩存帴閬嶅巻tableCache锛屾洿鏂版墍鏈塋AY_CHECKED涓簍rue鐨勯」
+ for (let i = 0; i < tableCache.length; i++) {
+ if (tableCache[i].LAY_CHECKED === true) {
+ tableCache[i]['staNo'] = batchSta;
+ arr.push(i);
+ console.log('鐩存帴鏇存柊浜嗛�変腑鐨勬暟鎹储寮�:', i);
}
}
}
@@ -706,7 +786,6 @@
});
// 寮圭獥涓嶅嚭鐜版粴鍔ㄦ潯
$(layero).children('.layui-layer-content').css('overflow', 'visible');
- layui.form.render('select');
},
})
}
@@ -715,6 +794,7 @@
, yes: function (index, layero) {
//鎸夐挳銆愮珛鍗冲嚭搴撱�戠殑鍥炶皟
// 涓嶅啀浼犻�抰ableCache锛宲akout鍑芥暟灏嗕娇鐢╳indow.selectedDataForPakout
+ window.selectedDataForPakout = tableCache;
pakout(index);
}
, btn2: function (index, layero) {
@@ -813,4 +893,4 @@
window.autoSelectedData = null;
})
</script>
-</html>
\ No newline at end of file
+</html>
--
Gitblit v1.9.1