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 | 298 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 276 insertions(+), 22 deletions(-)
diff --git a/src/main/webapp/views/order/outLocDetlQuery.html b/src/main/webapp/views/order/outLocDetlQuery.html
index e41fba1..39ca5e6 100644
--- a/src/main/webapp/views/order/outLocDetlQuery.html
+++ b/src/main/webapp/views/order/outLocDetlQuery.html
@@ -75,6 +75,11 @@
.over-limit #selectedTotal {
color: #FF5722 !important; /* 绾㈣壊璀﹀憡 */
}
+
+ /* 璁㈠崟瀹屾垚鐘舵�� */
+ .order-completed {
+ background: #5FB878 !important;
+ }
</style>
</head>
<body>
@@ -149,6 +154,7 @@
<script type="text/html" id="toolbar">
<div class="layui-btn-container">
+ <button class="layui-btn" id="btn-auto-select" lay-event="autoSelect">鑷姩鍕鹃��</button>
<button class="layui-btn" id="btn-confirm" lay-event="confirm" style="">鎻愬彇</button>
</div>
</script>
@@ -177,6 +183,32 @@
lay-submit style="display: block;float: right;margin-right: 1rem">
鎵归噺淇敼
</button>
+ </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>
@@ -261,7 +293,7 @@
url: baseUrl + '/stock/out/list/auth',
where: {matnr: parent.matnR[0]},
page: true,
- limits: [16, 30, 50, 100, 200, 500],
+ limits: [50, 100, 200, 500],
limit: 16,
even: true,
toolbar: '#toolbar',
@@ -290,6 +322,14 @@
// 鍒濆鍖栭�変腑鏁伴噺
selectedTotal = 0;
updateSelectedTotal();
+
+ // 浠庡悗绔幏鍙栨暟鎹悗锛岄粯璁よ嚜鍔ㄥ嬀閫夋暟鎹紝鍕鹃�夊埌鍜岃鍗曟暟閲忎竴鑷�
+ if (res.data.length > 0 && orderTotal > 0) {
+ // 寤惰繜鎵ц锛岀‘淇濊〃鏍兼覆鏌撳畬鎴�
+ setTimeout(function() {
+ autoSelectItems();
+ }, 100);
+ }
}
});
@@ -298,7 +338,7 @@
var data = obj.data;
var checked = obj.checked;
var type = obj.type;
-
+ console.log("data"+data.batch)
if (type === 'one') {
// 鍗曚釜閫夋嫨
if (checked) {
@@ -333,13 +373,20 @@
// 鐩戝惉澶村伐鍏锋爮浜嬩欢
table.on('toolbar(stockOut)', function (obj) {
var checkStatus = table.checkStatus(obj.config.id);
- var data = checkStatus.data;
+ var data = checkStatus.data; // 杩欓噷鍙幏鍙栧疄闄呭嬀閫夌殑鏁版嵁
switch (obj.event) {
+ case 'autoSelect':
+ // 鑷姩鍕鹃�夊姛鑳�
+ autoSelectItems();
+ break;
case 'confirm':
+ // 鍙娇鐢ㄧ晫闈笂瀹為檯鍕鹃�夌殑鏁版嵁锛屼笉鍐嶉澶栨暣鍚坵indow.autoSelectedData
+ // 妫�鏌ユ槸鍚︽湁鏁版嵁鍙彁鍙�
if (data.length === 0) {
layer.msg("璇烽�夋嫨鏁版嵁");
return;
}
+
// 妫�鏌ラ�変腑鐨勬暟閲忔槸鍚﹁秴杩囪鍗曟暟閲�
if (selectedTotal > orderTotal) {
layer.confirm('閫変腑鐨勬暟閲忓凡瓒呰繃璁㈠崟鏁伴噺锛屾槸鍚︾户缁紵', {
@@ -356,6 +403,117 @@
}
});
+ // 鑷姩鍕鹃�夊嚱鏁� - 鍕鹃�夊簱瀛樻槑缁嗭紝鏁伴噺绱姞涓嶈秴杩囪鍗曟暟閲�
+ function autoSelectItems() {
+ // 鑾峰彇褰撳墠椤垫墍鏈夋暟鎹�
+ var allData = table.cache.stockOut;
+ if (!allData || allData.length === 0) {
+ layer.msg("娌℃湁鍙嬀閫夌殑鏁版嵁", {icon: 2});
+ return;
+ }
+
+ // 濡傛灉璁㈠崟鏁伴噺涓�0锛屼笉闇�瑕佸嬀閫�
+ if (orderTotal <= 0) {
+ layer.msg("璁㈠崟鏁伴噺涓�0锛屾棤闇�鍕鹃��", {icon: 2});
+ return;
+ }
+
+ // 鍏堝彇娑堟墍鏈夊凡閫変腑鐨勯」
+ for (var i = 0; i < allData.length; i++) {
+ allData[i].LAY_CHECKED = false;
+ }
+
+ // 閲嶇疆閫変腑鏁伴噺
+ selectedTotal = 0;
+ // 鍒濆鍖栬嚜鍔ㄩ�変腑鏁版嵁
+ window.autoSelectedData = [];
+
+ // 鎸夐『搴忓嬀閫夊簱瀛樻槑缁嗭紝鐩村埌绱鏁伴噺杈惧埌璁㈠崟鏁伴噺
+ var remaining = orderTotal;
+ var selectedCount = 0;
+
+ // 浣跨敤鍘熷椤哄簭鐨勫壇鏈紝浠庣涓�椤电涓�涓紑濮嬪嬀閫�
+ var sortedData = allData.slice();
+
+ // 閫夋嫨闆嗗悎锛堜娇鐢ㄥ敮涓�閿伩鍏嶇储寮曢敊涔憋級
+ var selectionKeys = {};
+ for (var i = 0; i < sortedData.length; i++) {
+ var item = sortedData[i];
+ var itemAnfme = parseFloat(item.anfme || 0);
+ if (itemAnfme <= 0) continue;
+ var key = (item.locNo || '') + '|' + (item.batch || '') + '|' + (item.matnr || '') + '|' + (item.anfme || 0);
+ if (remaining >= itemAnfme) {
+ selectionKeys[key] = true;
+ remaining -= itemAnfme;
+ selectedCount++;
+ window.autoSelectedData.push(item);
+ } else if (remaining > 0) {
+ selectionKeys[key] = true;
+ remaining = 0;
+ selectedCount++;
+ window.autoSelectedData.push(item);
+ 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);
+ }
+ }
+
+ // 涓嶉噸鏂板姞杞借〃鏍硷紝鐩存帴鏇存柊琛ㄦ牸鐨勫嬀閫夌姸鎬�
+ var checkStatus = table.checkStatus('stockOut');
+ // 閬嶅巻琛ㄦ牸琛屽苟璁剧疆鍕鹃�夌姸鎬�
+ $('.layui-table-box tr').each(function(index, tr) {
+ var rowIndex = $(tr).data('index');
+ if (rowIndex !== undefined && allData[rowIndex]) {
+ var checkbox = $(tr).find('input[type="checkbox"]');
+ checkbox.prop('checked', allData[rowIndex].LAY_CHECKED);
+ // 鍚屾layui鐨勫嬀閫夌姸鎬佹牱寮�
+ if (allData[rowIndex].LAY_CHECKED) {
+ $(tr).addClass('layui-table-click');
+ checkbox.next().addClass('layui-form-checked');
+ } else {
+ $(tr).removeClass('layui-table-click');
+ checkbox.next().removeClass('layui-form-checked');
+ }
+ }
+ });
+ // 鍚屾鍏ㄩ�夋鐘舵��
+ var headerCheckbox = $('.layui-table-header input[type="checkbox"]');
+ var allChecked = allData.length > 0;
+ for (var i = 0; i < allData.length; i++) {
+ if (!allData[i].LAY_CHECKED) {
+ allChecked = false;
+ break;
+ }
+ }
+ headerCheckbox.prop('checked', allChecked);
+ if (allChecked) {
+ headerCheckbox.next().addClass('layui-form-checked');
+ } else {
+ headerCheckbox.next().removeClass('layui-form-checked');
+ }
+
+ // 鏇存柊鏄剧ず閫変腑鐨勬暟閲�
+ updateSelectedTotal();
+
+ // 濡傛灉娌℃湁鍕鹃�夎冻澶熺殑鏁版嵁锛岀粰鍑烘彁绀�
+ if (selectedTotal < orderTotal && selectedCount > 0) {
+ layer.msg('宸查�夋嫨鍏ㄩ儴鍙敤搴撳瓨锛屼絾浠嶆湭婊¤冻璁㈠崟鏁伴噺锛�', {icon: 2, time: 3000});
+ } else if (selectedCount === 0) {
+ layer.msg('娌℃湁鍙嬀閫夌殑鏁版嵁锛岃妫�鏌ュ簱瀛橈紒', {icon: 2, time: 3000});
+ } else {
+ layer.msg('鑷姩鍕鹃�夊畬鎴愶紝宸插嬀閫� ' + selectedCount + ' 鏉¤褰曪紒', {icon: 1, time: 2000});
+ }
+ }
conditionXmSelect = xmSelect.render({
el: '#condition',
style: {
@@ -401,11 +559,20 @@
}
function pakoutPreview(id, data) {
+ // 纭繚浼犲叆鐨勬暟鎹湁鏁�
+ if (!data || data.length === 0) {
+ layer.msg("璇烽�夋嫨鏁版嵁");
+ return;
+ }
+
+ // 瀛樺偍瀹為檯鍕鹃�夌殑鏁版嵁鍒板叏灞�鍙橀噺锛岀敤浜庡嚭搴撴搷浣�
+ window.selectedDataForPakout = data;
+
console.log("id=" + id)
let loadIndex = layer.load(2);
var da = {
"id": JSON.stringify(id),
- "list": data
+ "list": data // 鍙娇鐢ㄥ疄闄呭嬀閫夌殑鏁版嵁
}
$.ajax({
url: baseUrl + "/out/pakout/preview/auth1",
@@ -430,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,
@@ -440,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'},
@@ -457,6 +623,7 @@
title: '璐т綅',
align: 'center',
width: 100,
+ merge: ['locNo'],
templet: '#locNoTpl'
},
{
@@ -466,7 +633,7 @@
merge: ['locNo'],
templet: '#tbBasicTbStaNos'
},
- {type: 'checkbox', merge: ['locNo']},
+ {type: 'checkbox'}
]],
done: function (res) {
tableMerge.render(this);
@@ -488,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;
@@ -513,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;
@@ -524,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);
}
}
}
@@ -556,7 +786,6 @@
});
// 寮圭獥涓嶅嚭鐜版粴鍔ㄦ潯
$(layero).children('.layui-layer-content').css('overflow', 'visible');
- layui.form.render('select');
},
})
}
@@ -564,11 +793,15 @@
}
, yes: function (index, layero) {
//鎸夐挳銆愮珛鍗冲嚭搴撱�戠殑鍥炶皟
- pakout(tableCache, index);
+ // 涓嶅啀浼犻�抰ableCache锛宲akout鍑芥暟灏嗕娇鐢╳indow.selectedDataForPakout
+ window.selectedDataForPakout = tableCache;
+ pakout(index);
}
, btn2: function (index, layero) {
//鎸夐挳銆愮◢鍚庡鐞嗐�戠殑鍥炶皟
layer.close(index)
+ // 娓呯悊鍏ㄥ眬鍙橀噺
+ window.selectedDataForPakout = null;
//return false 寮�鍚浠g爜鍙姝㈢偣鍑昏鎸夐挳鍏抽棴
}
});
@@ -581,7 +814,19 @@
})
}
- function pakout(tableCache, layerIndex) {
+ function pakout(layerIndex) {
+ // 鑾峰彇瀛樺偍鐨勫疄闄呭嬀閫夋暟鎹�
+ var tableCache = window.selectedDataForPakout;
+
+ // 纭繚浼犲叆鐨勬暟鎹湁鏁�
+ if (!tableCache || tableCache.length === 0) {
+ layer.msg("娌℃湁鏈夋晥鐨勬暟鎹彲澶勭悊", {icon: 2});
+ return;
+ }
+
+ // 閲嶇疆鑷姩閫変腑鐨勬暟鎹紝閬垮厤鏁版嵁娈嬬暀
+ window.autoSelectedData = [];
+
// let loadIndex = layer.load(2);
notice.msg('姝e湪鐢熸垚鍑哄簱浠诲姟......', {icon: 4});
$.ajax({
@@ -632,11 +877,20 @@
} else {
layer.msg(res.msg, {icon: 2})
}
+ },
+ error: function () {
+ notice.destroy();
+ layer.msg('缃戠粶閿欒锛岃绋嶅悗閲嶈瘯', {icon: 2});
}
});
+
+ // 娓呯悊鍏ㄥ眬鍙橀噺
+ window.selectedDataForPakout = null;
}
window.pakoutPreview = pakoutPreview;
+ // 鍒濆鍖栬嚜鍔ㄩ�変腑鏁版嵁鍙橀噺锛岀‘淇濋〉闈㈠姞杞芥椂琚纭垵濮嬪寲
+ window.autoSelectedData = null;
})
</script>
-</html>
\ No newline at end of file
+</html>
--
Gitblit v1.9.1