自动化立体仓库 - WMS系统
chen.lin
14 小时以前 3c824a50b4894545ecf6ea57b5889444fe77c11c
二维码打印——委外
1个文件已修改
150 ■■■■ 已修改文件
src/main/webapp/views/erpMaterialwwout/materialwwout.html 150 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/erpMaterialwwout/materialwwout.html
@@ -622,35 +622,133 @@
                                LODOP.PRINT_INITA(0,0,800,1100,"委外加工出库单");
                                LODOP.SET_PRINT_PAGESIZE(1,0,0,"A4");
                                LODOP.SET_PRINT_MODE("PRINT_NOCOLLATE",1);
                                if(izRed==1)
                                {
                                    LODOP.ADD_PRINT_TEXT(28,268,331,36,"委外加工出库单(红字)");
                                // 收集二维码供应商:从选中的记录中收集所有供应商,去重后用|连接
                                var venNameSet = new Set();
                                if (selectList.value && selectList.value.length > 0) {
                                    selectList.value.forEach(function(item) {
                                        if (item.venName && item.venName.trim()) {
                                            venNameSet.add(item.venName.trim());
                                        }
                                    });
                                }
                                else{
                                    LODOP.ADD_PRINT_TEXT(28,268,331,36,"委外加工出库单");
                                var venNameStr = Array.from(venNameSet).join('|');
                                // 定义添加二维码的函数
                                function addQrCodeToPrint() {
                                    // 在右上角添加二维码(如果有供应商)
                                    if (venNameStr) {
                                        // 固定二维码尺寸,保持正方形比例,避免挤占打印文本和被拉长
                                        var qrCodeWidth = 130; // 固定宽度130px
                                        var qrCodeHeight = 130; // 固定高度130px,保持正方形比例
                                        var qrCodeUrl = baseUrl + "/file/barcode/qrcode/auth?type=2&param=" + encodeURIComponent(venNameStr) + "&width=" + qrCodeWidth + "&height=" + qrCodeHeight;
                                        // 创建一个临时img元素加载图片,然后转换为base64
                                        var img = new Image();
                                        img.crossOrigin = 'anonymous';
                                        img.onload = function() {
                                            try {
                                                // 创建canvas将图片转换为base64
                                                var canvas = document.createElement('canvas');
                                                canvas.width = img.width;
                                                canvas.height = img.height;
                                                var ctx = canvas.getContext('2d');
                                                ctx.drawImage(img, 0, 0);
                                                var base64Image = canvas.toDataURL('image/png');
                                                // LODOP添加图片,使用base64格式
                                                // ADD_PRINT_IMAGE参数:Top, Left, Width, Height, ImageURL或ImageData
                                                // 二维码位置:右上角,Top: 20, Left: 650 (页面宽度800,右边留50像素边距)
                                                var displayWidth = qrCodeWidth; // 固定宽度130px
                                                var displayHeight = qrCodeHeight; // 固定高度130px,保持正方形
                                                var displayLeft = 800 - displayWidth - 20; // 右对齐,留20px边距
                                                try {
                                                    LODOP.ADD_PRINT_IMAGE(20, displayLeft, displayWidth, displayHeight, base64Image);
                                                } catch(e) {
                                                    // 如果ADD_PRINT_IMAGE失败,使用HTML方式
                                                    var htmlContent = '<img src="' + base64Image + '" style="width:' + displayWidth + 'px;height:' + displayHeight + 'px;" />';
                                                    LODOP.ADD_PRINT_HTM(20, displayLeft, displayWidth, displayHeight, htmlContent);
                                                }
                                                // 图片加载完成后,执行打印
                                                executePrint();
                                            } catch(e) {
                                                console.error("转换图片失败:", e);
                                                // 如果转换失败,只显示文本(供应商名称)
                                                var displayWidth = qrCodeWidth;
                                                var displayHeight = qrCodeHeight;
                                                var displayLeft = 800 - displayWidth - 20;
                                                LODOP.ADD_PRINT_TEXT(20, displayLeft, displayWidth, displayHeight, venNameStr);
                                                LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
                                                LODOP.SET_PRINT_STYLEA(0, "Alignment", 2);
                                                executePrint();
                                            }
                                        };
                                        img.onerror = function() {
                                            console.error("加载二维码图片失败");
                                            // 如果加载失败,只显示文本(供应商名称)
                                            var displayWidth = qrCodeWidth;
                                            var displayHeight = qrCodeHeight;
                                            var displayLeft = 800 - displayWidth - 20;
                                            LODOP.ADD_PRINT_TEXT(20, displayLeft, displayWidth, displayHeight, venNameStr);
                                            LODOP.SET_PRINT_STYLEA(0, "FontSize", 12);
                                            LODOP.SET_PRINT_STYLEA(0, "Alignment", 2);
                                            executePrint();
                                        };
                                        img.src = qrCodeUrl;
                                    } else {
                                        // 没有供应商,直接执行打印
                                        executePrint();
                                    }
                                }
                                LODOP.SET_PRINT_STYLEA(0,"FontSize",20);
                                LODOP.SET_PRINT_STYLEA(0,"ItemType",1);
                                LODOP.ADD_PRINT_TEXT(69,21,213,25,"供应商:"+depName.value);
                                LODOP.SET_PRINT_STYLEA(0,"FontSize",12);
                                LODOP.SET_PRINT_STYLEA(0,"ItemType",1);
                                LODOP.ADD_PRINT_TEXT(70,268,213,25,"开工日期:"+dateFormat("YYYY-mm-dd", tableSearchParam.value.dateStart)+" 到 "+dateFormat("YYYY-mm-dd", tableSearchParam.value.dateEnd));
                                LODOP.SET_PRINT_STYLEA(0,"FontSize",12);
                                LODOP.SET_PRINT_STYLEA(0,"ItemType",1);
                                LODOP.ADD_PRINT_TABLE(96,16,2000,960,CreateTable(res.data));
                                LODOP.SET_PRINT_STYLEA(0,"TableHeightScope",1);
                                LODOP.SET_PRINT_MODE("FULL_WIDTH_FOR_OVERFLOW",true);
                                // 根据izPrint参数决定是打印还是预览
                                // izPrint=="是":直接打印,弹出打印对话框(不弹出预览窗口)
                                // izPrint=="否":打印预览,弹出预览窗口
                                if(izPrint=="是")
                                {
                                    LODOP.PRINT();
                                // 定义执行打印的函数
                                function executePrint() {
                                    // 计算表格的起始位置:如果有二维码,表格需要向下移动
                                    var tableTop = 96; // 默认表格起始位置
                                    var qrCodeTop = 20; // 二维码顶部位置
                                    var qrCodeHeight = 130; // 二维码高度
                                    var qrCodeBottom = qrCodeTop + qrCodeHeight; // 二维码底部位置:150
                                    var spacing = 10; // 二维码和表格之间的间距
                                    // 如果有二维码,且表格原始位置会被二维码覆盖,则向下移动表格
                                    if (venNameStr && tableTop < qrCodeBottom) {
                                        tableTop = qrCodeBottom + spacing; // 表格从二维码下方开始,留10px间距
                                    }
                                    if(izRed==1)
                                    {
                                        LODOP.ADD_PRINT_TEXT(28,268,331,36,"委外加工出库单(红字)");
                                    }
                                    else{
                                        LODOP.ADD_PRINT_TEXT(28,268,331,36,"委外加工出库单");
                                    }
                                    LODOP.SET_PRINT_STYLEA(0,"FontSize",20);
                                    LODOP.SET_PRINT_STYLEA(0,"ItemType",1);
                                    LODOP.ADD_PRINT_TEXT(69,21,213,25,"供应商:"+depName.value);
                                    LODOP.SET_PRINT_STYLEA(0,"FontSize",12);
                                    LODOP.SET_PRINT_STYLEA(0,"ItemType",1);
                                    LODOP.ADD_PRINT_TEXT(70,268,213,25,"开工日期:"+dateFormat("YYYY-mm-dd", tableSearchParam.value.dateStart)+" 到 "+dateFormat("YYYY-mm-dd", tableSearchParam.value.dateEnd));
                                    LODOP.SET_PRINT_STYLEA(0,"FontSize",12);
                                    LODOP.SET_PRINT_STYLEA(0,"ItemType",1);
                                    LODOP.ADD_PRINT_TABLE(tableTop,16,2000,960,CreateTable(res.data));
                                    LODOP.SET_PRINT_STYLEA(0,"TableHeightScope",1);
                                    LODOP.SET_PRINT_MODE("FULL_WIDTH_FOR_OVERFLOW",true);
                                    // 根据izPrint参数决定是打印还是预览
                                    // izPrint=="是":直接打印,弹出打印对话框(不弹出预览窗口)
                                    // izPrint=="否":打印预览,弹出预览窗口
                                    if(izPrint=="是")
                                    {
                                        LODOP.PRINT();
                                    }
                                    else{
                                        // 打印预览,弹出预览窗口
                                        LODOP.PREVIEW();
                                    }
                                }
                                else{
                                    // 打印预览,弹出预览窗口
                                    LODOP.PREVIEW();
                                }
                                // 先添加二维码,然后执行打印
                                addQrCodeToPrint();
                            } else if (res.code === 403) {
                                top.location.href = baseUrl + "/";
                            } else {