From e93f13a9296affa2cd7a5b7c667aa5e5a4f5fde6 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期六, 25 四月 2026 10:33:24 +0800
Subject: [PATCH] 订单出库可指定部分出库

---
 src/main/webapp/static/js/orderPakout/out.js |  138 ++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 127 insertions(+), 11 deletions(-)

diff --git a/src/main/webapp/static/js/orderPakout/out.js b/src/main/webapp/static/js/orderPakout/out.js
index a7ba719..4b9a8f1 100644
--- a/src/main/webapp/static/js/orderPakout/out.js
+++ b/src/main/webapp/static/js/orderPakout/out.js
@@ -143,13 +143,14 @@
                         ,area: ['1200px', '700px']
                         ,shade: 0.5
                         ,shadeClose: false
-                        ,btn: ['绔嬪嵆鍑哄簱', '绋嶅悗澶勭悊']
+                        ,btn: ['涓�閿嚭搴�', '閮ㄥ垎鍑哄簱', '绋嶅悗澶勭悊']
                         ,btnAlign: 'c'
                         ,moveType: 1 //鎷栨嫿妯″紡锛�0鎴栬��1
                         ,content: $('#pakoutPreviewBox').html()
                         ,success: function(layero, index){
                             stoPreTabIdx = table.render({
                                 elem: '#stoPreTab',
+                                id: 'stoPreTab',
                                 data: res.data,
                                 height: 520,
                                 page: false,
@@ -160,7 +161,8 @@
                                     {field: 'orderNo', title: '鍗曟嵁缂栧彿', merge: true, align: 'center'},
                                     {field: 'title', title: '鍟嗗搧', merge: true, align: 'center', width: 350},
                                     {field: 'batch', title: '搴忓垪鐮�', align: 'center'},
-                                    {field: 'anfme', title: '鏁伴噺', align: 'center', width: 90, style: 'font-weight: bold'},
+                                    {field: 'anfme', title: '闇�姹傛暟閲�', align: 'center', width: 90, style: 'font-weight: bold'},
+                                    {field: 'anfme$', align: 'center', title: '鍑哄簱鏁伴噺', edit: 'text', style: 'font-weight: bold'},
                                     {field: 'locNo', title: '璐т綅', align: 'center', width: 100, templet: '#locNoTpl'},
                                     {field: 'frozen$', title: '鏄庣粏', align: 'center', width: 90, templet: '#locFrozen'},
                                     {field: 'frozenLoc$', title: '搴撲綅', align: 'center', width: 90, templet: '#locFrozenLoc'},
@@ -170,7 +172,12 @@
                                 done: function (res) {
                                     tableMerge.render(this);
                                     $('.layui-table-body.layui-table-main').css("overflow", "auto");
-                                    tableCache = tableData = table.cache.stoPreTab;
+                                    // tableCache = tableData = table.cache.stoPreTab;
+                                    tableCache = table.cache['stoPreTab'];
+                                    tableCache.forEach(item => {
+                                        // console.log('anfme:', item.anfme, 'anfme$:', item.anfme$);
+                                        item.anfme$ = item.anfme$ ?? item.anfme;
+                                    });
                                 }
                             });
                             // 淇敼鍑哄簱绔�
@@ -185,6 +192,61 @@
                                 obj.othis.children().find("input").css("color", "blue");
                                 return false;
                             });
+                            table.on('edit(stoPreTab)', function(obj) {
+                                let field = obj.field;
+                                let value = obj.value;
+                                let index = obj.tr.data('index');
+                                
+                                // 鍙鐞� anfme$ 瀛楁鐨勬牎楠�
+                                if (field === 'anfme$') {
+                                    let numValue = Number(value);
+                                    // 鐩存帴浠巘ableCache鑾峰彇鏈�鏂版暟鎹�
+                                    let rowData = tableCache[index];
+                                    let max = Number(rowData.anfme); // 鑾峰彇鏈�澶у彲杈撳叆鍊硷紙闇�姹傛暟閲忥級
+
+                                    if (isNaN(numValue)) {
+                                        layer.msg("璇疯緭鍏ユ暟瀛�", {icon: 2});
+                                        // 鎭㈠涓洪渶姹傛暟閲�
+                                        setCellValue(index, rowData.anfme);
+                                        return;
+                                    }
+
+                                    if (numValue <= 0) {
+                                        layer.msg("鍑哄簱鏁伴噺蹇呴』澶т簬0", {icon: 2});
+                                        // 鎭㈠涓洪渶姹傛暟閲�
+                                        setCellValue(index, rowData.anfme);
+                                        return;
+                                    }
+
+                                    if (numValue > max) {
+                                        layer.msg("涓嶈兘澶т簬 " + max, {icon: 2});
+                                        // 鎭㈠涓洪渶姹傛暟閲�
+                                        setCellValue(index, rowData.anfme);
+                                        return;
+                                    }
+
+                                    // 鏍¢獙閫氳繃锛岀洿鎺ユ洿鏂�
+                                    // console.log('鏍¢獙閫氳繃锛岃缃�间负:', numValue);
+                                }
+                            });
+                            
+                            // 璁剧疆鍗曞厓鏍煎�肩殑鍑芥暟锛堝悓鏃舵洿鏂扮紦瀛樺拰鏄剧ず锛�
+                            function setCellValue(index, newValue) {
+                                // console.log('璁剧疆绗�' + index + '琛岀殑anfme$涓�:', newValue);
+                                
+                                // 1. 鏇存柊tableCache锛堣繖鏄渶鏍规湰鐨勬暟鎹簮锛�
+                                tableCache[index].anfme$ = newValue;
+                                
+                                // 2. 鏇存柊DOM鏄剧ず
+                                let cell = $('div[lay-id=stoPreTab] tr[data-index="' + index + '"] td[data-field="anfme$"] input.layui-table-edit');
+                                if (cell.length > 0) {
+                                    cell.val(newValue);
+                                } else {
+                                    // 濡傛灉涓嶅湪缂栬緫鐘舵�侊紝鏇存柊鏄剧ず鏂囨湰
+                                    cell = $('div[lay-id=stoPreTab] tr[data-index="' + index + '"] td[data-field="anfme$"] div.layui-table-cell');
+                                    cell.text(newValue);
+                                }
+                            }
                             // 鎵归噺淇敼鍑哄簱绔�
                             form.on('submit(batchModifySta)', function () {
                                 let stoPreTabData = layui.table.checkStatus('stoPreTab').data;
@@ -263,11 +325,14 @@
                         ,yes: function(index, layero){
                             //鎸夐挳銆愮珛鍗冲嚭搴撱�戠殑鍥炶皟
                             pakout(tableCache, index);
-                        }
-                        ,btn2: function(index, layero){
-                            //鎸夐挳銆愮◢鍚庡鐞嗐�戠殑鍥炶皟
-                            layer.close(index)
-                            //return false 寮�鍚浠g爜鍙姝㈢偣鍑昏鎸夐挳鍏抽棴
+                        },
+                        btn2: function(index, layero){
+                            // 鎸夐挳銆愰儴鍒嗗嚭搴撱�戠殑鍥炶皟 - 涓嶅叧闂晫闈�
+                            return partialPakout(tableCache, index);  // 璋冪敤閮ㄥ垎鍑哄簱鍑芥暟
+                        },
+                        btn3: function(index, layero){
+                            // 鎸夐挳銆愮◢鍚庡鐞嗐�戠殑鍥炶皟
+                            layer.close(index);
                         }
                     });
                 } else if (res.code === 403){
@@ -280,18 +345,69 @@
     }
 
     function pakout(tableCache, layerIndex) {
-        // let loadIndex = layer.load(2);
+        // 娣诲姞纭妗�
+        layer.confirm('纭畾瑕佷竴閿嚭搴撳叏閮ㄧ墿鏂欏悧锛�', {
+            icon: 3,
+            title: '纭涓�閿嚭搴�',
+            btn: ['纭畾', '鍙栨秷']
+        }, function(confirmIndex) {
+            // 鐢ㄦ埛鐐瑰嚮纭畾鍚庢墽琛屽嚭搴撴搷浣�
+            layer.close(confirmIndex);
+            notice.msg('姝e湪鐢熸垚鍑哄簱浠诲姟......', {icon: 4});
+            $.ajax({
+                url: baseUrl + "/out/pakout/auth",
+                headers: {'token': localStorage.getItem('token')},
+                contentType: 'application/json;charset=UTF-8',
+                data: JSON.stringify(tableCache),
+                method: 'POST',
+                success: function (res) {
+                    notice.destroy();
+                    if (res.code === 200) {
+                        layer.close(layerIndex);
+                        layer.msg(res.msg, {icon: 1});
+                        insTb.reload({where: null});
+                        insTb2.reload({where: null, page: {curr: 1}});
+                    } else if (res.code === 403) {
+                        top.location.href = baseUrl + "/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2})
+                    }
+                }
+            });
+        });
+    }
+
+    function partialPakout(tableCache, layerIndex) {
+
+        let stoPreTabData = layui.table.checkStatus('stoPreTab').data;
+        if (stoPreTabData.length < 1) {
+            layer.msg("璇烽�夋嫨閮ㄥ垎鍑哄簱鏁版嵁", {icon: 7});
+            return false;
+        }
+
+        // 鎵撳嵃鍕鹃�夌殑鏁版嵁
+        // console.log("鍕鹃�夌殑鏁版嵁:", JSON.stringify(stoPreTabData));
+
+        // 灏嗗嬀閫夋暟鎹殑 anfme$ 鍊艰祴缁� anfme
+        stoPreTabData.forEach(item => {
+            // console.log('淇敼鍓� - anfme:', item.anfme, 'anfme$:', item.anfme$);
+            item.anfme = Number(item.anfme$); // 鐩存帴灏嗗嬀閫夋暟鎹殑 anfme$ 璧嬬粰 anfme
+            // console.log('淇敼鍚� - anfme:', item.anfme);
+        });
+
+        // console.log("鎻愪氦鐨勬暟鎹�:", JSON.stringify(stoPreTabData));
+
+        // 浣跨敤涓庝竴閿嚭搴撶浉鍚岀殑鎺ュ彛鎻愪氦
         notice.msg('姝e湪鐢熸垚鍑哄簱浠诲姟......', {icon: 4});
         $.ajax({
             url: baseUrl + "/out/pakout/auth",
             headers: {'token': localStorage.getItem('token')},
             contentType: 'application/json;charset=UTF-8',
-            data: JSON.stringify(tableCache),
+            data: JSON.stringify(stoPreTabData),
             method: 'POST',
             success: function (res) {
                 notice.destroy();
                 if (res.code === 200) {
-                    layer.close(layerIndex);
                     layer.msg(res.msg, {icon: 1});
                     insTb.reload({where: null});
                     insTb2.reload({where: null, page: {curr: 1}});

--
Gitblit v1.9.1