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 |  261 +++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 226 insertions(+), 35 deletions(-)

diff --git a/src/main/webapp/views/order/outLocDetlQuery.html b/src/main/webapp/views/order/outLocDetlQuery.html
index 7c212f6..c8535ef 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>
@@ -126,14 +131,9 @@
                 <input class="layui-input" type="text" name="batch" placeholder="鎵瑰彿" autocomplete="off">
             </div>
         </div>
-        <div class="layui-inline">
-            <div class="layui-input-inline">
-                <input class="layui-input" type="text" name="brand" placeholder="鐢熶骇绾�" autocomplete="off">
-            </div>
-        </div>
-        <div class="layui-inline">
-            <div class="layui-input-inline">
-                <input class="layui-input" type="text" name="sku" placeholder="绛夌骇" autocomplete="off">
+        <div class="layui-input-inline" style="margin-right: 100px;">
+            <div id="condition" name="condition">
+
             </div>
         </div>
         <!-- 鏃ユ湡鑼冨洿 -->
@@ -154,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>
@@ -200,9 +201,10 @@
 </script>
 
 <script>
+    var conditionXmSelect;
     function getCol() {
         var cols = [
-            {type: 'checkbox', merge: ['locNo']}
+            {type: 'checkbox'}
             , {field: 'locNo', align: 'center', title: '搴撲綅鍙�', merge: true, style: 'font-weight: bold'}
             // ,{field: 'locNo$', align: 'center',title: '搴撲綅鍙�'}
         ];
@@ -217,7 +219,7 @@
     }).extend({
         notice: 'notice/notice',
     })
-        .use(['table', 'notice', 'laydate', 'form', 'admin', 'tableMerge'], function () {
+        .use(['table', 'notice', 'laydate', 'form', 'admin', 'tableMerge','xmSelect'], function () {
             var table = layui.table;
             var $ = layui.jquery;
             var layer = layui.layer;
@@ -226,6 +228,7 @@
             var admin = layui.admin;
             var tableMerge = layui.tableMerge;
             var notice = layui.notice;
+            var xmSelect = layui.xmSelect;
 
             $('#matnr').val(parent.matnR);
             $('#anfme').val(parent.anfme);
@@ -293,6 +296,14 @@
                     // 鍒濆鍖栭�変腑鏁伴噺
                     selectedTotal = 0;
                     updateSelectedTotal();
+
+                    // 浠庡悗绔幏鍙栨暟鎹悗锛岄粯璁よ嚜鍔ㄥ嬀閫夋暟鎹紝鍕鹃�夊埌鍜岃鍗曟暟閲忎竴鑷�
+                    if (res.data.length > 0 && orderTotal > 0) {
+                        // 寤惰繜鎵ц锛岀‘淇濊〃鏍兼覆鏌撳畬鎴�
+                        setTimeout(function() {
+                            autoSelectItems();
+                        }, 100);
+                    }
                 }
             });
 
@@ -302,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();
 
                 // 濡傛灉閫変腑鐨勬暟閲忚秴杩囪鍗曟暟閲忥紝缁欏嚭鎻愮ず
@@ -336,13 +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('閫変腑鐨勬暟閲忓凡瓒呰繃璁㈠崟鏁伴噺锛屾槸鍚︾户缁紵', {
@@ -358,6 +377,145 @@
                         break;
                 }
             });
+
+            // 鑷姩鍕鹃�夊嚱鏁� - 鍕鹃�夊簱瀛樻槑缁嗭紝鏁伴噺绱姞涓嶈秴杩囪鍗曟暟閲�
+            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;
+
+                // 瀵瑰簱浣嶆暟鎹繘琛屾帓搴忥紝浼樺厛閫夋嫨鐩稿悓搴撲綅鐨勫簱瀛�
+                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 item = allData[i];
+                    var itemAnfme = parseFloat(item.anfme || 0);
+
+                    if (itemAnfme <= 0) {
+                        continue; // 璺宠繃鏁伴噺涓�0鐨勮褰�
+                    }
+
+                    // 濡傛灉鍓╀綑鏁伴噺澶т簬绛変簬褰撳墠椤圭殑鏁伴噺锛屽叏閮ㄥ嬀閫�
+                    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; // 宸叉弧瓒宠鍗曟暟閲忥紝鍋滄鍕鹃��
+                    }
+
+                    // 濡傛灉宸茬粡婊¤冻璁㈠崟鏁伴噺锛屽仠姝㈠嬀閫�
+                    if (remaining <= 0) {
+                        break;
+                    }
+                }
+
+                // 涓嶉噸鏂板姞杞借〃鏍硷紝鐩存帴鏇存柊琛ㄦ牸鐨勫嬀閫夌姸鎬�
+                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: {
+                    width: '200px',
+                },
+                autoRow: true,
+                toolbar: {show: true},
+                filterable: true,
+                data: [
+                    {
+                        name: '鎴愬搧鏅鸿兘绔嬪簱',
+                        value: '鎴愬搧鏅鸿兘绔嬪簱'
+                    },
+                    {
+                        name: '鐗归噰鏅鸿兘绔嬪簱',
+                        value: '鐗归噰鏅鸿兘绔嬪簱'
+                    }
+                ]
+            })
 
             // 鎼滅储鏍忔悳绱簨浠�
             form.on('submit(search)', function (data) {
@@ -384,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",
@@ -547,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爜鍙姝㈢偣鍑昏鎸夐挳鍏抽棴
                                 }
                             });
@@ -564,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({
@@ -615,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