| | |
| | | cancelOrder(data.id); |
| | | }); |
| | | } |
| | | if (layEvent === 'deliverPdfGoods') { |
| | | febs.modal.confirm('一键发货', '确认一键发货?', function () { |
| | | deliverPdfGoods(data.id); |
| | | }); |
| | | } |
| | | if (layEvent === 'cancelDeliver') { |
| | | febs.modal.confirm('取消发货', '确认取消发货?', function () { |
| | | cancelDeliver(data.id); |
| | | }); |
| | | } |
| | | if (layEvent === 'seePayImage') { |
| | | var t = $view.find('#seePayImage'+data.id+''); |
| | | //页面层 |
| | |
| | | } |
| | | }); |
| | | |
| | | function cancelDeliver(id) { |
| | | febs.get(ctx + 'admin/order/cancelDeliver/' + id, null, function (data) { |
| | | febs.alert.success(data.message); |
| | | $query.click(); |
| | | }); |
| | | } |
| | | |
| | | function cancelOrder(id) { |
| | | febs.get(ctx + 'admin/order/cancelOrder/' + id, null, function () { |
| | | febs.alert.success('操作成功'); |
| | | $query.click(); |
| | | }); |
| | | } |
| | | |
| | | function deliverPdfGoods(id) { |
| | | febs.get(ctx + 'admin/order/deliverPdfGoods/' + id, null, function (e) { |
| | | if (e.code == 200) { |
| | | // 创建弹层容器 |
| | | const content = ` |
| | | <div style="position:relative;min-height:500px"> |
| | | <div id="pdfContainer" style="margin:20px auto;max-width:800px"></div> |
| | | <div class="layui-form" style="text-align:center;margin-top:20px"> |
| | | <button class="layui-btn layui-btn-normal" onclick="printPdf()">打印</button> |
| | | </div> |
| | | </div> |
| | | `; |
| | | |
| | | // 显示弹层 |
| | | const index = layer.open({ |
| | | type: 1, |
| | | title: "电子面单", |
| | | content: content, |
| | | area: ['90%', '90%'], |
| | | success: function() { |
| | | // 渲染PDF |
| | | renderPdf(e.data.pdfStream); |
| | | } |
| | | }); |
| | | // 存储当前PDF数据 |
| | | window.currentPDF = e.data.pdfStream; |
| | | } else { |
| | | febs.alert.warn(e.message); |
| | | } |
| | | }); |
| | | $query.click(); |
| | | } |
| | | |
| | | // PDF渲染函数 |
| | | function renderPdf(base64Data) { |
| | | // 清理容器 |
| | | const container = document.getElementById('pdfContainer'); |
| | | container.innerHTML = ''; |
| | | |
| | | // Base64转Blob |
| | | const byteCharacters = atob(base64Data); |
| | | const byteNumbers = new Array(byteCharacters.length); |
| | | for (let i = 0; i < byteCharacters.length; i++) { |
| | | byteNumbers[i] = byteCharacters.charCodeAt(i); |
| | | } |
| | | const byteArray = new Uint8Array(byteNumbers); |
| | | const blob = new Blob([byteArray], {type: 'application/pdf'}); |
| | | |
| | | // 生成临时URL |
| | | const url = URL.createObjectURL(blob); |
| | | |
| | | // 使用PDF.js渲染 |
| | | pdfjsLib.getDocument(url).promise.then(pdf => { |
| | | // 循环渲染所有页面 |
| | | for (let pageNum = 1; pageNum <= pdf.numPages; pageNum++) { |
| | | pdf.getPage(pageNum).then(page => { |
| | | const scale = 1.5; |
| | | const viewport = page.getViewport({scale: scale}); |
| | | const canvas = document.createElement('canvas'); |
| | | const context = canvas.getContext('2d'); |
| | | canvas.height = viewport.height; |
| | | canvas.width = viewport.width; |
| | | |
| | | // 创建页面容器 |
| | | const pageDiv = document.createElement('div'); |
| | | pageDiv.className = 'pdf-page'; |
| | | pageDiv.style.margin = '10px 0'; |
| | | container.appendChild(pageDiv); |
| | | |
| | | // 渲染到Canvas |
| | | page.render({ |
| | | canvasContext: context, |
| | | viewport: viewport |
| | | }).promise.then(() => { |
| | | pageDiv.appendChild(canvas); |
| | | }); |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | // 打印函数 |
| | | window.printPdf = function() { |
| | | let base64Image = window.currentPDF; |
| | | const printWindow = window.open('', '_blank'); |
| | | printWindow.document.write(` |
| | | <html> |
| | | <head> |
| | | <title>电子面单打印</title> |
| | | <style> |
| | | body { margin: 0; padding: 20px } |
| | | canvas { |
| | | width: 100%!important; |
| | | height: auto!important; |
| | | page-break-after: always; |
| | | } |
| | | </style> |
| | | </head> |
| | | <body> |
| | | <iframe src="data:application/pdf;base64,`+base64Image+`" width="100%" height="100%"></iframe> |
| | | </body> |
| | | </html> |
| | | `); |
| | | printWindow.document.close(); |
| | | printWindow.onload = function() { |
| | | printWindow.print(); |
| | | printWindow.close(); |
| | | } |
| | | } |
| | | |
| | | // function deliverPdfGoods(id) { |
| | | // febs.get(ctx + 'admin/order/deliverPdfGoods/' + id, null, function (e) { |
| | | // if(e.code == 200){ |
| | | // console.info(e.data); |
| | | // console.info(e.data.pdfStream); |
| | | // console.info(e.data.result); |
| | | // layer.open({ |
| | | // type: 1, |
| | | // title: "电子面单", |
| | | // skin: 'layui-layer-rim', //加上边框 |
| | | // area: ['100%', '100%'], //宽高 |
| | | // shadeClose: true, //开启遮罩关闭 |
| | | // end: function (index, layero) { |
| | | // return false; |
| | | // }, |
| | | // content: '<div class="layui-card-body" id="pdfViewer"></div>' |
| | | // }); |
| | | // if(e.data.pdfStream === null){ |
| | | // |
| | | // renderPdf(e.data.pdfStreamList); |
| | | // } |
| | | // renderPdf(e.data.pdfStream); |
| | | // }else{ |
| | | // febs.alert.warn(e.message); |
| | | // } |
| | | // $query.click(); |
| | | // }); |
| | | // } |
| | | |
| | | // 渲染 PDF 到页面 |
| | | // function renderPdf(base64Data) { |
| | | // // Base64 转 Blob |
| | | // const byteCharacters = atob(base64Data); |
| | | // const byteNumbers = new Array(byteCharacters.length); |
| | | // for (let i = 0; i < byteCharacters.length; i++) { |
| | | // byteNumbers[i] = byteCharacters.charCodeAt(i); |
| | | // } |
| | | // const byteArray = new Uint8Array(byteNumbers); |
| | | // const blob = new Blob([byteArray], {type: 'application/pdf'}); |
| | | // |
| | | // // 生成临时 URL |
| | | // const url = URL.createObjectURL(blob); |
| | | // |
| | | // // 使用 PDF.js 渲染 |
| | | // pdfjsLib.getDocument(url).promise.then(function(pdf) { |
| | | // pdf.getPage(1).then(function(page) { |
| | | // const scale = 1.5; |
| | | // const viewport = page.getViewport({scale: scale}); |
| | | // const canvas = document.createElement('canvas'); |
| | | // const context = canvas.getContext('2d'); |
| | | // canvas.height = viewport.height; |
| | | // canvas.width = viewport.width; |
| | | // |
| | | // // 将 PDF 页面渲染到 Canvas |
| | | // page.render({ |
| | | // canvasContext: context, |
| | | // viewport: viewport |
| | | // }).promise.then(function() { |
| | | // $('#pdfViewer').html(canvas); |
| | | // }); |
| | | // }); |
| | | // }).catch(function(error) { |
| | | // layer.msg('PDF渲染失败: ' + error.message, {icon: 2}); |
| | | // }); |
| | | // } |
| | | |
| | | // 查询按钮 |
| | | $query.on('click', function () { |
| | |
| | | {title: '操作', |
| | | templet: function (d) { |
| | | if(d.status === 2){ |
| | | return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeOrder" shiro:hasPermission="user:update">详情</button>' |
| | | +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="deliverGoods" shiro:hasPermission="user:update">发货</button>' |
| | | return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="deliverPdfGoods" shiro:hasPermission="user:update">一键发货</button>' |
| | | +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeOrder" shiro:hasPermission="user:update">详情</button>' |
| | | // +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="deliverGoods" shiro:hasPermission="user:update">发货</button>' |
| | | }else if(d.status === 3){ |
| | | return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeOrder" shiro:hasPermission="user:update">详情</button>' |
| | | +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="updateDeliver" shiro:hasPermission="user:update">修改物流信息</button>' |
| | | +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="cancelDeliver" shiro:hasPermission="user:update">取消发货</button>' |
| | | // +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="updateDeliver" shiro:hasPermission="user:update">修改物流信息</button>' |
| | | }else{ |
| | | return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeOrder" shiro:hasPermission="user:update">详情</button>' |
| | | } |