自动化立体仓库 - WMS系统
lty
2 天以前 2998faf8dceff0189854742d78455762fffb95e3
src/main/webapp/static/js/order/order.js
@@ -245,11 +245,25 @@
                        {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: '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'}
                        {
                            align: 'center',
                            title: '操作',
                            toolbar: '#formSSXMTableBar',
                            minWidth: 80,
                            width: 80,
                            fixed: 'right'
                        }
                    ]],
                    done: function (res) {
                        $(layero).find('.layui-table-view').css('margin', '0');
@@ -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('解析Excel失败:' + err.message, {icon: 2});
                                    }
                                };
                                reader.readAsArrayBuffer(file);
                            });
                        }
                    });
                });
                // 显示添加明细表单弹窗
@@ -553,7 +680,12 @@
                                    },
                                    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);
                                // 赋值
@@ -565,7 +697,10 @@
                                        {
                                            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.totalQty - res.data.wrkQty - res.data.endQty - res.data.lackQty
                                                },
                                                {name: '库存不足', value: res.data.lackQty},
                                            ]
                                        }