From 893f659d3923a710273b1e180eea2bcf614df403 Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期五, 21 十一月 2025 17:43:38 +0800
Subject: [PATCH] 1.自动勾选

---
 src/main/webapp/views/order/outLocDetlQuery.html |  223 ++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 152 insertions(+), 71 deletions(-)

diff --git a/src/main/webapp/views/order/outLocDetlQuery.html b/src/main/webapp/views/order/outLocDetlQuery.html
index 75bbbfc..c8535ef 100644
--- a/src/main/webapp/views/order/outLocDetlQuery.html
+++ b/src/main/webapp/views/order/outLocDetlQuery.html
@@ -202,7 +202,6 @@
 
 <script>
     var conditionXmSelect;
-    var
     function getCol() {
         var cols = [
             {type: 'checkbox'}
@@ -297,6 +296,14 @@
                     // 鍒濆鍖栭�変腑鏁伴噺
                     selectedTotal = 0;
                     updateSelectedTotal();
+
+                    // 浠庡悗绔幏鍙栨暟鎹悗锛岄粯璁よ嚜鍔ㄥ嬀閫夋暟鎹紝鍕鹃�夊埌鍜岃鍗曟暟閲忎竴鑷�
+                    if (res.data.length > 0 && orderTotal > 0) {
+                        // 寤惰繜鎵ц锛岀‘淇濊〃鏍兼覆鏌撳畬鎴�
+                        setTimeout(function() {
+                            autoSelectItems();
+                        }, 100);
+                    }
                 }
             });
 
@@ -306,29 +313,30 @@
                 var checked = obj.checked;
                 var type = obj.type;
 
-                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);
-                        });
-                    }
+                // 纭繚window.autoSelectedData宸插垵濮嬪寲
+                if (!window.autoSelectedData) {
+                    window.autoSelectedData = [];
                 }
 
+                // 閲嶆柊璁$畻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();
 
                 // 濡傛灉閫変腑鐨勬暟閲忚秴杩囪鍗曟暟閲忥紝缁欏嚭鎻愮ず
@@ -340,17 +348,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('閫変腑鐨勬暟閲忓凡瓒呰繃璁㈠崟鏁伴噺锛屾槸鍚︾户缁紵', {
@@ -367,7 +378,7 @@
                 }
             });
 
-            // 鑷姩鍕鹃�夊嚱鏁� - 淇鐗堟湰锛氬嬀閫夊簱瀛樻槑缁嗭紝鏁伴噺绱姞涓嶈秴杩囪鍗曟暟閲�
+            // 鑷姩鍕鹃�夊嚱鏁� - 鍕鹃�夊簱瀛樻槑缁嗭紝鏁伴噺绱姞涓嶈秴杩囪鍗曟暟閲�
             function autoSelectItems() {
                 // 鑾峰彇褰撳墠椤垫墍鏈夋暟鎹�
                 var allData = table.cache.stockOut;
@@ -389,65 +400,102 @@
 
                 // 閲嶇疆閫変腑鏁伴噺
                 selectedTotal = 0;
+                // 鍒濆鍖栬嚜鍔ㄩ�変腑鏁版嵁
+                window.autoSelectedData = [];
 
                 // 鎸夐『搴忓嬀閫夊簱瀛樻槑缁嗭紝鐩村埌绱鏁伴噺杈惧埌璁㈠崟鏁伴噺
                 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);
+                });
+
                 for (var i = 0; i < allData.length; i++) {
-                    var itemQuantity = parseFloat(allData[i].anfme || 0);
+                    var item = allData[i];
+                    var itemAnfme = parseFloat(item.anfme || 0);
 
-                    // 璺宠繃鏁伴噺涓�0鎴栨棤鏁堢殑椤�
-                    if (itemQuantity <= 0) continue;
+                    if (itemAnfme <= 0) {
+                        continue; // 璺宠繃鏁伴噺涓�0鐨勮褰�
+                    }
 
-                    // 濡傛灉鍓╀綑闇�姹備负0锛屽仠姝㈠嬀閫�
-                    if (remaining <= 0) break;
+                    // 濡傛灉鍓╀綑鏁伴噺澶т簬绛変簬褰撳墠椤圭殑鏁伴噺锛屽叏閮ㄥ嬀閫�
+                    if (remaining >= itemAnfme) {
+                        allData[i].LAY_CHECKED = true;
+                        selectedTotal += itemAnfme;
+                        remaining -= itemAnfme;
+                        selectedCount++;
+                        window.autoSelectedData.push(item);
+                    }
+                    // 鍚﹀垯鍙嬀閫夊墿浣欓儴鍒嗭紙瀹為檯鎿嶄綔涓紝鏁翠釜璁板綍閮戒細琚嬀閫夛紝浣嗕細鍦ㄦ彁浜ゆ椂澶勭悊鏁伴噺锛�
+                    else if (remaining > 0) {
+                        allData[i].LAY_CHECKED = true;
+                        selectedTotal += itemAnfme;
+                        // 杩欓噷涓嶄慨鏀筰tem.anfme锛屽洜涓鸿繖鏄〃鏍兼樉绀虹殑鏁版嵁
+                        remaining = 0;
+                        selectedCount++;
+                        window.autoSelectedData.push(item);
+                    } else {
+                        break; // 宸叉弧瓒宠鍗曟暟閲忥紝鍋滄鍕鹃��
+                    }
 
-                    // 鍕鹃�夎椤�
-                    allData[i].LAY_CHECKED = true;
-                    selectedTotal += itemQuantity;
-                    selectedCount++;
-
-                    // 鏇存柊鍓╀綑闇�姹�
-                    remaining = orderTotal - selectedTotal;
-
-                    // 濡傛灉鍕鹃�夊悗瓒呰繃璁㈠崟鏁伴噺锛岀粰鍑烘彁绀哄苟鍋滄鍕鹃��
-                    if (selectedTotal > orderTotal) {
-                        layer.msg('璀﹀憡锛氳嚜鍔ㄥ嬀閫夊悗鏁伴噺瓒呰繃璁㈠崟鏁伴噺锛屽凡鍋滄鍕鹃��', {icon: 2, time: 3000});
+                    // 濡傛灉宸茬粡婊¤冻璁㈠崟鏁伴噺锛屽仠姝㈠嬀閫�
+                    if (remaining <= 0) {
                         break;
                     }
                 }
 
-                // 鏇存柊琛ㄦ牸鏄剧ず - 鍙皟鐢ㄤ竴娆�
-                table.reload('stockOut', {
-                    data: allData,
-                    done: function() {
-                        // 鍦ㄨ〃鏍奸噸杞藉畬鎴愬悗锛屾墜鍔ㄦ洿鏂板閫夋鐨凞OM鐘舵��
-                        setTimeout(function() {
-                            for (var i = 0; i < allData.length; i++) {
-                                if (allData[i].LAY_CHECKED) {
-                                    var trElem = $('tr[data-index="' + i + '"]');
-                                    if (trElem.length > 0) {
-                                        // 鎿嶄綔澶嶉�夋
-                                        trElem.find('input[type="checkbox"]').prop('checked', true);
-                                        trElem.find('.layui-form-checkbox').addClass('layui-form-checked');
-                                    }
-                                }
-                            }
-                            // 閲嶆柊娓叉煋琛ㄥ崟
-                            form.render('checkbox');
-
-                            // 鏇存柊鏄剧ず
-                            updateSelectedTotal();
-
-                            if (selectedCount > 0) {
-                                layer.msg('宸茶嚜鍔ㄥ嬀閫� ' + selectedCount + ' 涓簱瀛樻槑缁嗭紝鏁伴噺: ' + selectedTotal, {icon: 1, time: 2000});
-                            } else {
-                                layer.msg('娌℃湁鍙嬀閫夌殑搴撳瓨鏄庣粏', {icon: 2});
-                            }
-                        }, 100);
+                // 涓嶉噸鏂板姞杞借〃鏍硷紝鐩存帴鏇存柊琛ㄦ牸鐨勫嬀閫夌姸鎬�
+                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',
@@ -494,11 +542,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",
@@ -657,11 +714,14 @@
                                 }
                                 , yes: function (index, layero) {
                                     //鎸夐挳銆愮珛鍗冲嚭搴撱�戠殑鍥炶皟
-                                    pakout(tableCache, index);
+                                    // 涓嶅啀浼犻�抰ableCache锛宲akout鍑芥暟灏嗕娇鐢╳indow.selectedDataForPakout
+                                    pakout(index);
                                 }
                                 , btn2: function (index, layero) {
                                     //鎸夐挳銆愮◢鍚庡鐞嗐�戠殑鍥炶皟
                                     layer.close(index)
+                                    // 娓呯悊鍏ㄥ眬鍙橀噺
+                                    window.selectedDataForPakout = null;
                                     //return false 寮�鍚浠g爜鍙姝㈢偣鍑昏鎸夐挳鍏抽棴
                                 }
                             });
@@ -674,7 +734,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({
@@ -725,11 +797,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

--
Gitblit v1.9.1