From 2998faf8dceff0189854742d78455762fffb95e3 Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期一, 15 十二月 2025 12:06:21 +0800
Subject: [PATCH] #订单导入

---
 src/main/webapp/static/js/order/order.js |  281 +++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 208 insertions(+), 73 deletions(-)

diff --git a/src/main/webapp/static/js/order/order.js b/src/main/webapp/static/js/order/order.js
index 528f193..cd9ed08 100644
--- a/src/main/webapp/static/js/order/order.js
+++ b/src/main/webapp/static/js/order/order.js
@@ -14,19 +14,19 @@
 
     // 娓叉煋鎼滅储妯℃澘
     $.ajax({
-        url: baseUrl+"/docType/list/auth",
+        url: baseUrl + "/docType/list/auth",
         headers: {'token': localStorage.getItem('token')},
         data: {
             limit: 9999
         },
         method: 'POST',
         success: function (res) {
-            if (res.code === 200){
+            if (res.code === 200) {
                 let template = Handlebars.compile($('#docTypeTpl').html());
                 $('#docType-query').html(template(res.data));
                 layui.form.render('select');
-            } else if (res.code === 403){
-                top.location.href = baseUrl+"/";
+            } else if (res.code === 403) {
+                top.location.href = baseUrl + "/";
             } else {
                 layer.msg(res.msg, {icon: 2})
             }
@@ -36,7 +36,7 @@
     // 娓叉煋琛ㄦ牸
     var insTb = table.render({
         elem: '#order',
-        url: baseUrl+'/order/head/page/auth',
+        url: baseUrl + '/order/head/page/auth',
         headers: {token: localStorage.getItem('token')},
         page: true,
         cellMinWidth: 100,
@@ -44,12 +44,12 @@
             {type: 'numbers'},
             {field: 'orderNo', title: '鍗曟嵁缂栧彿', templet: '#orderNoTpl'},
             // {field: 'itemName', align: 'center', title: '瀹㈡埛po',  minWidth: 160, width: 160},
-            {field: 'docType$', align: 'center', title: '绫诲瀷',  minWidth: 160, width: 160},
-            {field: 'cstmrName', align: 'center', title: '璐т富',  minWidth: 160, width: 160},
+            {field: 'docType$', align: 'center', title: '绫诲瀷', minWidth: 160, width: 160},
+            {field: 'cstmrName', align: 'center', title: '璐т富', minWidth: 160, width: 160},
             {align: 'center', title: '鏄庣粏', toolbar: '#tbLook', minWidth: 160, width: 160},
             {field: 'createTime$', title: '鍒涘缓鏃堕棿', minWidth: 200, width: 200},
-            {field: 'settle$', align: 'center', title: '鐘舵��', templet: '#settleTpl',  minWidth: 160, width: 160},
-            {field: 'memo', align: 'center',title: '澶囨敞', hide: true},
+            {field: 'settle$', align: 'center', title: '鐘舵��', templet: '#settleTpl', minWidth: 160, width: 160},
+            {field: 'memo', align: 'center', title: '澶囨敞', hide: true},
             {align: 'center', title: '鎿嶄綔', toolbar: '#operate', width: 180}
         ]],
         request: {
@@ -70,7 +70,7 @@
         done: function (res, curr, count) {
             limit();
             if (res.code === 403) {
-                top.location.href = baseUrl+"/";
+                top.location.href = baseUrl + "/";
             }
             insTbCount = count;
         }
@@ -118,7 +118,7 @@
                     table.render({
                         elem: '#lookSSXMTable',
                         headers: {token: localStorage.getItem('token')},
-                        url: baseUrl+'/orderDetl/list/auth',
+                        url: baseUrl + '/orderDetl/list/auth',
                         where: {
                             order_id: data.id
                         },
@@ -186,18 +186,18 @@
                     }
                     let nList = admin.util.deepClone(xxDataList);
                     for (let xi = 0; xi < nList.length; xi++) {
-                        if (nList[xi].anfme <= 0){
+                        if (nList[xi].anfme <= 0) {
                             layer.msg('鏄庣粏淇敼鏁伴噺涓嶅悎娉�', {icon: 2});
                             return false;
                         }
-                        if (nList[xi].anfme < nList[xi].workQty){
+                        if (nList[xi].anfme < nList[xi].workQty) {
                             layer.msg('鏁伴噺涓嶈兘灏忎簬宸蹭綔涓氭暟閲�', {icon: 2});
                             return false;
                         }
                     }
                     layer.load(2);
                     $.ajax({
-                        url: baseUrl+"/order/form/" + (isExpAdd?"add":"modify") + "/auth",
+                        url: baseUrl + "/order/form/" + (isExpAdd ? "add" : "modify") + "/auth",
                         headers: {'token': localStorage.getItem('token')},
                         data: JSON.stringify({
                             orderId: Number(data.field.id),
@@ -207,17 +207,17 @@
                             ownerId: Number(data.field.owner),
                             orderDetlList: nList
                         }),
-                        contentType:'application/json;charset=UTF-8',
+                        contentType: 'application/json;charset=UTF-8',
                         method: 'POST',
                         success: function (res) {
                             layer.closeAll('loading');
-                            if (res.code === 200){
+                            if (res.code === 200) {
                                 layer.close(dIndex);
                                 $(".layui-laypage-btn")[0].click();
                                 layer.msg(res.msg, {icon: 1});
-                            } else if (res.code === 403){
-                                top.location.href = baseUrl+"/";
-                            }else {
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl + "/";
+                            } else {
                                 layer.msg(res.msg, {icon: 2});
                             }
                         }
@@ -239,17 +239,31 @@
                         {field: 'maktx', title: '鍚嶇О', width: 80},
                         // {field: 'batch', title: '鎵瑰彿', edit: true},
                         // {field: 'specs', title: '瑙勬牸'},
-                        {field: 'standby1', title: 'po',edit: true},
-                        {field: 'standby2', title: 'upc',edit: true},
-                        {field: 'standby3', title: '瀹㈡埛SKU',edit: true},
-                        {field: 'boxType1', title: '璐т富鍚嶇О',edit: true},
-                        {field: 'boxType2', title: '璐т富缂栧彿',edit: true},
-                        {field: 'boxType3', title: '閲囪喘鍗曞彿',edit: true},
-                        {field: 'anfme', title: '鏁伴噺(淇敼)', style: 'color: blue;font-weight: bold', edit: true, minWidth: 110, width: 110},
-                        {field: 'workQty', title: '浣滀笟鏁伴噺',  minWidth: 100, width: 100},
+                        {field: 'standby1', title: 'po', edit: true},
+                        {field: 'standby2', title: 'upc', edit: true},
+                        {field: 'standby3', title: '瀹㈡埛SKU', edit: true},
+                        {field: 'boxType1', title: '璐т富鍚嶇О', edit: true},
+                        {field: 'boxType2', title: '璐т富缂栧彿', edit: true},
+                        {field: 'boxType3', title: '閲囪喘鍗曞彿', edit: true},
+                        {
+                            field: 'anfme',
+                            title: '鏁伴噺(淇敼)',
+                            style: 'color: blue;font-weight: bold',
+                            edit: true,
+                            minWidth: 110,
+                            width: 110
+                        },
+                        {field: 'workQty', title: '浣滀笟鏁伴噺', minWidth: 100, width: 100},
                         // {field: 'unit', title: '鍗曚綅', width: 80},
-                        {field: 'memo', title: '澶囨敞' , edit: true},
-                        {align: 'center', title: '鎿嶄綔', toolbar: '#formSSXMTableBar', minWidth: 80, width: 80, fixed: 'right'}
+                        {field: 'memo', title: '澶囨敞', edit: true},
+                        {
+                            align: 'center',
+                            title: '鎿嶄綔',
+                            toolbar: '#formSSXMTableBar',
+                            minWidth: 80,
+                            width: 80,
+                            fixed: 'right'
+                        }
                     ]],
                     done: function (res) {
                         $(layero).find('.layui-table-view').css('margin', '0');
@@ -258,17 +272,17 @@
                 };
                 if (!isExpAdd) {
                     $.ajax({
-                        url: baseUrl+"/order/detl/all/auth?orderId=" + expTpe.id,
+                        url: baseUrl + "/order/detl/all/auth?orderId=" + expTpe.id,
                         headers: {'token': localStorage.getItem('token')},
                         method: 'GET',
                         async: false,
                         success: function (res) {
-                            if (res.code === 200){
+                            if (res.code === 200) {
                                 xxDataList = res.data;
                                 tbOptions.data = xxDataList;
-                            } else if (res.code === 403){
-                                top.location.href = baseUrl+"/";
-                            }else {
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl + "/";
+                            } else {
                                 layer.msg(res.msg, {icon: 2})
                             }
                         }
@@ -282,7 +296,7 @@
                     if (layEvent === 'edit') {
                         showEditModel2(data);
                     } else if (layEvent === 'del') {
-                        if(data.workQty > 0){
+                        if (data.workQty > 0) {
                             layer.msg("宸插瓨鍦ㄤ綔涓氭暟閲忥紝涓嶈兘鍒犻櫎", {icon: 2});
                             return;
                         }
@@ -305,7 +319,7 @@
                 table.on('edit(formSSXMTable)', function (obj) {
                     let index = obj.tr.attr("data-index");
                     let data = xxDataList[index];
-                    if (obj.field === 'anfme'){
+                    if (obj.field === 'anfme') {
                         let vle = Number(obj.value);
                         if (isNaN(vle)) {
                             layer.msg("璇疯緭鍏ユ暟瀛�", {icon: 2});
@@ -317,7 +331,7 @@
                                 // insTbSSXM.reload({data: xxDataList});
                                 return false;
                             }
-                            if(obj.value < data.workQty){
+                            if (obj.value < data.workQty) {
                                 layer.msg("杈撳叆鏁伴噺涓嶈兘灏忎簬浣滀笟涓暟閲�", {icon: 2});
                                 // data[obj.field] = 0;
                                 // insTbSSXM.reload({data: xxDataList});
@@ -331,6 +345,119 @@
 
                 $('#matAddBtnComment').click(function () {
                     showEditModel2();
+                });
+                // 瀵煎叆Excel鎸夐挳鐐瑰嚮
+                $('#importExcelBtn').on('click', function () {
+                    admin.open({
+                        type: 1,
+                        title: '瀵煎叆鏄庣粏Excel',
+                        area: '500px',
+                        content: $('#importExcelDialog').html(),
+                        success: function (layero, dIndex) {
+                            // 涓嬭浇妯℃澘
+                            $('#downloadExcelTemplate').on('click', function () {
+                                var data = [
+                                    ['鐗╂枡缂栫爜', '瀹㈡埛PO', '鏉$爜UPC', '瀹㈡埛SKU', '閲囪喘鍗曞彿', '鍑哄簱鏁伴噺'],
+                                    ['', '', '', '', '', 0]  // 绀轰緥琛�
+                                ];
+                                var ws = XLSX.utils.aoa_to_sheet(data);
+                                var wb = XLSX.utils.book_new();
+                                XLSX.utils.book_append_sheet(wb, ws, "鏄庣粏");
+                                XLSX.writeFile(wb, "鍑哄簱鏄庣粏瀵煎叆妯℃澘.xlsx");
+                            });
+
+                            // 寮�濮嬪鍏�
+                            $('#doImportExcel').on('click', function () {
+                                var fileInput = $('#excelFileInput')[0];
+                                if (!fileInput.files || !fileInput.files[0]) {
+                                    layer.msg('璇峰厛閫夋嫨Excel鏂囦欢', {icon: 2});
+                                    return;
+                                }
+                                var file = fileInput.files[0];
+                                var reader = new FileReader();
+                                reader.onload = function (e) {
+                                    try {
+                                        var data = new Uint8Array(e.target.result);
+                                        var workbook = XLSX.read(data, {type: 'array'});
+                                        var firstSheet = workbook.Sheets[workbook.SheetNames[0]];
+                                        var jsonData = XLSX.utils.sheet_to_json(firstSheet, {
+                                            header: ['matnr', 'standby1', 'standby2', 'standby3', 'boxType3', 'anfme'],
+                                            range: 1
+                                        }); // 浠庣2琛屽紑濮�
+
+                                        if (jsonData.length === 0) {
+                                            layer.msg('Excel涓病鏈夋暟鎹�', {icon: 2});
+                                            return;
+                                        }
+
+                                        var successCount = 0;
+                                        var errorMsgs = [];
+
+                                        jsonData.forEach(function (row, idx) {
+                                            if (!row.matnr) {
+                                                errorMsgs.push('绗�' + (idx + 2) + '琛岋細鐗╂枡缂栫爜涓嶈兘涓虹┖');
+                                                return;
+                                            }
+                                            var anfme = Number(row.anfme);
+                                            if (isNaN(anfme) || anfme <= 0) {
+                                                errorMsgs.push('绗�' + (idx + 2) + '琛岋細鏁伴噺蹇呴』涓哄ぇ浜�0鐨勬暟瀛�');
+                                                return;
+                                            }
+
+                                            // 閫氳繃鐗╂枡缂栫爜鏌ヨ瀹屾暣鐗╂枡淇℃伅锛堜笌鍘熸湁娣诲姞鏂瑰紡涓�鑷达級
+                                            $.ajax({
+                                                url: baseUrl + "/mat/covert/" + row.matnr + "/auth",
+                                                headers: {'token': localStorage.getItem('token')},
+                                                method: 'GET',
+                                                async: false,
+                                                success: function (res) {
+                                                    if (res.code === 200) {
+                                                        var item = res.data;
+                                                        // 瑕嗙洊瀵煎叆鐨勫瓧娈�
+                                                        item.standby1 = row.standby1 || item.standby1 || '';
+                                                        item.standby2 = row.standby2 || item.standby2 || '';
+                                                        item.standby3 = row.standby3 || item.standby3 || '';
+                                                        item.boxType3 = row.boxType3 || item.boxType3 || '';
+                                                        item.anfme = anfme;
+                                                        item.workQty = item.workQty || 0;
+
+                                                        if (anfme < item.workQty) {
+                                                            errorMsgs.push('绗�' + (idx + 2) + '琛岋細鏁伴噺涓嶈兘灏忎簬宸蹭綔涓氭暟閲�(' + item.workQty + ')');
+                                                            return;
+                                                        }
+
+                                                        xxDataList.push(item);
+                                                        successCount++;
+                                                    } else {
+                                                        errorMsgs.push('绗�' + (idx + 2) + '琛岋細鐗╂枡缂栫爜 ' + row.matnr + ' 鏌ヨ澶辫触 - ' + res.msg);
+                                                    }
+                                                },
+                                                error: function () {
+                                                    errorMsgs.push('绗�' + (idx + 2) + '琛岋細鐗╂枡缂栫爜 ' + row.matnr + ' 鏌ヨ澶辫触');
+                                                }
+                                            });
+                                        });
+
+                                        insTbSSXM.reload({data: xxDataList});
+
+                                        if (errorMsgs.length > 0) {
+                                            layer.msg('瀵煎叆瀹屾垚锛屾垚鍔�' + successCount + '鏉★紝澶辫触淇℃伅锛�<br>' + errorMsgs.slice(0, 10).join('<br>') + (errorMsgs.length > 10 ? '<br>...绛�' : ''), {
+                                                icon: 2,
+                                                time: 8000
+                                            });
+                                        } else {
+                                            layer.msg('鎴愬姛瀵煎叆 ' + successCount + ' 鏉℃槑缁�', {icon: 1});
+                                        }
+
+                                        layer.close(dIndex);
+                                    } catch (err) {
+                                        layer.msg('瑙f瀽Excel澶辫触锛�' + err.message, {icon: 2});
+                                    }
+                                };
+                                reader.readAsArrayBuffer(file);
+                            });
+                        }
+                    });
                 });
 
                 // 鏄剧ず娣诲姞鏄庣粏琛ㄥ崟寮圭獥
@@ -347,21 +474,21 @@
                             // 琛ㄥ崟鎻愪氦浜嬩欢
                             form.on('submit(matEditSubmit)', function (data) {
                                 let selectList = matXmSelect.getValue();
-                                for (let i = 0; i<selectList.length; i++) {
+                                for (let i = 0; i < selectList.length; i++) {
                                     let item = selectList[i];
                                     // 鏌ヨ鐗╂枡璇︽儏
                                     $.ajax({
-                                        url: baseUrl+"/mat/covert/"+item.value+"/auth",
+                                        url: baseUrl + "/mat/covert/" + item.value + "/auth",
                                         headers: {'token': localStorage.getItem('token')},
                                         method: 'GET',
                                         async: false,
                                         success: function (res) {
-                                            if (res.code === 200){
+                                            if (res.code === 200) {
                                                 xxDataList.push(res.data);
                                                 insTbSSXM.reload({data: xxDataList, page: {curr: 1}});
-                                            } else if (res.code === 403){
-                                                top.location.href = baseUrl+"/";
-                                            }else {
+                                            } else if (res.code === 403) {
+                                                top.location.href = baseUrl + "/";
+                                            } else {
                                                 layer.msg(res.msg, {icon: 2})
                                             }
                                         }
@@ -377,19 +504,19 @@
                                     width: '340px',
                                 },
                                 autoRow: true,
-                                toolbar: { show: true },
+                                toolbar: {show: true},
                                 filterable: true,
                                 remoteSearch: true,
-                                remoteMethod: function(val, cb, show){
+                                remoteMethod: function (val, cb, show) {
                                     $.ajax({
-                                        url: baseUrl+"/mat/all/get/kv",
+                                        url: baseUrl + "/mat/all/get/kv",
                                         headers: {'token': localStorage.getItem('token')},
                                         data: {
                                             condition: val
                                         },
                                         method: 'POST',
                                         success: function (res) {
-                                            if (res.code === 200){
+                                            if (res.code === 200) {
                                                 cb(res.data)
                                             } else {
                                                 cb([]);
@@ -419,7 +546,7 @@
             layer.close(i);
             layer.load(2);
             $.ajax({
-                url: baseUrl+"/order/delete/auth",
+                url: baseUrl + "/order/delete/auth",
                 headers: {'token': localStorage.getItem('token')},
                 data: {
                     orderId: orderId
@@ -427,16 +554,16 @@
                 method: 'POST',
                 success: function (res) {
                     layer.closeAll('loading');
-                    if (res.code === 200){
+                    if (res.code === 200) {
                         if (insTbCount === 0) {
                             insTb.reload({page: {curr: 1}});
                         } else {
                             $(".layui-laypage-btn")[0].click();
                         }
                         layer.msg(res.msg, {icon: 1});
-                    } else if (res.code === 403){
-                        top.location.href = baseUrl+"/";
-                    }else {
+                    } else if (res.code === 403) {
+                        top.location.href = baseUrl + "/";
+                    } else {
                         layer.msg(res.msg, {icon: 2});
                     }
                 }
@@ -455,7 +582,7 @@
             console.log(orderId);
             console.log(settle);
             $.ajax({
-                url: baseUrl+"/order/update/auth",
+                url: baseUrl + "/order/update/auth",
                 headers: {'token': localStorage.getItem('token')},
                 data: {
                     id: orderId,
@@ -465,16 +592,16 @@
                 method: 'POST',
                 success: function (res) {
                     layer.closeAll('loading');
-                    if (res.code === 200){
+                    if (res.code === 200) {
                         if (insTbCount === 0) {
                             insTb.reload({page: {curr: 1}});
                         } else {
                             $(".layui-laypage-btn")[0].click();
                         }
                         layer.msg(res.msg, {icon: 1});
-                    } else if (res.code === 403){
-                        top.location.href = baseUrl+"/";
-                    }else {
+                    } else if (res.code === 403) {
+                        top.location.href = baseUrl + "/";
+                    } else {
                         layer.msg(res.msg, {icon: 2});
                     }
                 }
@@ -493,7 +620,7 @@
             console.log(orderId);
             console.log(settle);
             $.ajax({
-                url: baseUrl+"/order/update/auth",
+                url: baseUrl + "/order/update/auth",
                 headers: {'token': localStorage.getItem('token')},
                 data: {
                     id: orderId,
@@ -503,16 +630,16 @@
                 method: 'POST',
                 success: function (res) {
                     layer.closeAll('loading');
-                    if (res.code === 200){
+                    if (res.code === 200) {
                         if (insTbCount === 0) {
                             insTb.reload({page: {curr: 1}});
                         } else {
                             $(".layui-laypage-btn")[0].click();
                         }
                         layer.msg(res.msg, {icon: 1});
-                    } else if (res.code === 403){
-                        top.location.href = baseUrl+"/";
-                    }else {
+                    } else if (res.code === 403) {
+                        top.location.href = baseUrl + "/";
+                    } else {
                         layer.msg(res.msg, {icon: 2});
                     }
                 }
@@ -524,7 +651,7 @@
     function showWrkTrace(orderId) {
         let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false});
         $.ajax({
-            url: baseUrl+"/order/wrk/trace/auth",
+            url: baseUrl + "/order/wrk/trace/auth",
             headers: {'token': localStorage.getItem('token')},
             data: {
                 orderId: orderId
@@ -532,7 +659,7 @@
             method: 'POST',
             success: function (res) {
                 layer.close(loadIndex);
-                if (res.code === 200){
+                if (res.code === 200) {
                     laytpl(wrkTraceDialog.innerHTML).render(res.data, function (html) {
                         admin.open({
                             type: 1,
@@ -553,19 +680,27 @@
                                     },
                                     color: ['#10B4E8', '#E0E0E0', '#FF0000'],
                                     tooltip: {trigger: 'item'},
-                                    series: [{name: '鏁伴噺', type: 'pie', radius: ['75%', '80%'], label: {normal: {show: false}}}]
+                                    series: [{
+                                        name: '鏁伴噺',
+                                        type: 'pie',
+                                        radius: ['75%', '80%'],
+                                        label: {normal: {show: false}}
+                                    }]
                                 };
                                 traceCharts.setOption(traceOptions);
                                 // 璧嬪��
                                 traceCharts.setOption({
                                     title: {
-                                        subtext: res.data.totalQty+"/"+res.data.endQty+"/"+res.data.wrkQty
+                                        subtext: res.data.totalQty + "/" + res.data.endQty + "/" + res.data.wrkQty
                                     },
                                     series: [
                                         {
                                             data: [
-                                                {name: '宸蹭綔涓�', value: res.data.wrkQty+res.data.endQty},
-                                                {name: '鏈綔涓�', value: res.data.totalQty-res.data.wrkQty-res.data.endQty-res.data.lackQty},
+                                                {name: '宸蹭綔涓�', value: res.data.wrkQty + res.data.endQty},
+                                                {
+                                                    name: '鏈綔涓�',
+                                                    value: res.data.totalQty - res.data.wrkQty - res.data.endQty - res.data.lackQty
+                                                },
                                                 {name: '搴撳瓨涓嶈冻', value: res.data.lackQty},
                                             ]
                                         }
@@ -574,9 +709,9 @@
                             }
                         });
                     });
-                } else if (res.code === 403){
-                    top.location.href = baseUrl+"/";
-                }else {
+                } else if (res.code === 403) {
+                    top.location.href = baseUrl + "/";
+                } else {
                     layer.msg(res.msg, {icon: 2});
                 }
             }
@@ -585,7 +720,7 @@
 
     layDate.render({
         elem: '.layui-laydate-range'
-        ,type: 'datetime'
-        ,range: true
+        , type: 'datetime'
+        , range: true
     });
 });

--
Gitblit v1.9.1