From c014190d15b41704085d2e96b3fb51d39d8c2016 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Wed, 12 Feb 2025 13:39:07 +0800
Subject: [PATCH] refactor(mall): 优化订单商品名称的显示格式

---
 src/main/resources/templates/febs/views/modules/order/orderList.html |  253 +++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 235 insertions(+), 18 deletions(-)

diff --git a/src/main/resources/templates/febs/views/modules/order/orderList.html b/src/main/resources/templates/febs/views/modules/order/orderList.html
index 85bf849..ee8d91e 100644
--- a/src/main/resources/templates/febs/views/modules/order/orderList.html
+++ b/src/main/resources/templates/febs/views/modules/order/orderList.html
@@ -65,14 +65,14 @@
                                         <label class="layui-form-label layui-form-label-sm">开始时间</label>
                                         <div class="layui-input-inline">
                                             <input type="text" name="startTime" id="febs-form-group-date-start" lay-verify="date"
-                                                   placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input">
+                                                   placeholder="yyyy-MM-dd HH:mm:ss" autocomplete="off" class="layui-input">
                                         </div>
                                 </div>
                                 <div class="layui-inline">
                                         <label class="layui-form-label layui-form-label-sm">结束时间</label>
                                         <div class="layui-input-inline">
                                             <input type="text" name="endTime" id="febs-form-group-date-end" lay-verify="date"
-                                                   placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input">
+                                                   placeholder="yyyy-MM-dd HH:mm:ss" autocomplete="off" class="layui-input">
                                         </div>
                                 </div>
                             </div>
@@ -153,11 +153,11 @@
         currPageOrder = $view.find(".layui-laypage-em").next().html();
         //日期范围
         laydate.render({
-            elem: '#febs-form-group-date-start'
+            elem: '#febs-form-group-date-start',type: 'datetime'
         });
 
         laydate.render({
-            elem: '#febs-form-group-date-end'
+            elem: '#febs-form-group-date-end',type: 'datetime'
         });
 
 
@@ -195,17 +195,20 @@
                     printSelect(checkStatus.data)
                 }
             }
+            let statisticIds = 0;
             if(event === 'goodsStatistics'){
                 var data = checkStatus.data;
                 let statistics = 0;
                 for(let i = 0;i < data.length;i++){
                         statistics = statistics+ "," + data[i].id;
                 }
+                console.log(statistics);
                 if(statistics == null || statistics == ""){
                     febs.alert.warn('请选择需要统计的订单');
                     return;
                 }
-                let statisticIds = statistics;
+                statisticIds = statistics;
+                console.log(statisticIds);
                 febs.modal.open( '商品数量统计', 'modules/order/goodsStatistics/'+statisticIds, {
                     maxmin: true,
                 });
@@ -321,9 +324,22 @@
                 layEvent = obj.event;
             if (layEvent === 'deliverGoods') {
                 febs.modal.open('发货', 'modules/order/deliverGoods/' + data.id, {
-                    btn: ['确认', '取消'],
+                    btn: ['确认','取消'],
                     yes: function (index, layero) {
                         $('#deliver-update').find('#submit').trigger('click');
+                        // $query.click();
+                    },
+                    btn2: function () {
+                        layer.closeAll();
+                    }
+                });
+            }
+            if (layEvent === 'updateDeliver') {
+                febs.modal.open('修改物流信息', 'modules/order/deliverGoods/' + data.id, {
+                    btn: ['确认','取消'],
+                    yes: function (index, layero) {
+                        $('#deliver-update').find('#deliverInfoSubmit').trigger('click');
+                        // $query.click();
                     },
                     btn2: function () {
                         layer.closeAll();
@@ -338,6 +354,16 @@
             if (layEvent === 'cancelOrder') {
                 febs.modal.confirm('取消订单', '确认取消订单?', function () {
                     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') {
@@ -357,12 +383,195 @@
             }
         });
 
+        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 () {
@@ -388,16 +597,19 @@
                 url: ctx + 'admin/order/orderList?orderType=1',
                 // defaultToolbar: [],
                 //系统自带打印导出
+                totalRow : true,
                 toolbar: '#tableToolBarOrder',
                 cols: [[
                         {type: 'checkbox', fixed: 'left'},
-                        {field: 'orderNo', title: '订单编号', minWidth: 200,align:'left'},
+                        {field: 'orderNo', title: '订单编号', minWidth: 200,align:'left' ,totalRowText:"合计"},
                         {field: 'memberName', title: '购买人', minWidth: 100,align:'left'},
                         {field: 'memberPhone', title: '联系方式', minWidth: 120,align:'left'},
+                        {field: 'refererName', title: '推荐人', minWidth: 100,align:'left'},
                         {field: 'goodsName', title: '商品', minWidth: 160,align:'left'},
-                        {field: 'goodsAmount', title: '价格', minWidth: 80,align:'left'},
-                        {field: 'carriage', title: '邮费', minWidth: 80,align:'left'},
-                        {field: 'amount', title: '总金额', minWidth: 100,align:'left'},
+                        {field: 'remark', title: '备注', minWidth: 160,align:'left'},
+                        {field: 'goodsAmount', title: '价格', minWidth: 80,align:'left', totalRow:true},
+                        {field: 'carriage', title: '邮费', minWidth: 80,align:'left', totalRow:true},
+                        {field: 'amount', title: '总金额', minWidth: 100,align:'left', totalRow:true},
                         {field: 'orderTime', title: '下单时间', minWidth: 200,align:'left'},
                         {field: 'status', title: '状态',
                             templet: function (d) {
@@ -437,8 +649,13 @@
                         {title: '操作',
                             templet: function (d) {
                                 if(d.status === 2){
+                                    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="deliverGoods" 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>'
                                 }
@@ -515,7 +732,7 @@
             //用于包含内容
             var v = document.createElement("div");
             //页面头部,导入css  ,media="print"表示打印时使用该样式
-            var f = ["<head>", "<style>", "div{font-size:8px;}", ".main{width:100%;height:20%}",
+            var f = ["<head>", "<style>", "div{font-size:8px;}", ".main{width:100%;}",
                 ".main div{width:100%;display:inline-block;}", "</style>", "</head>"
             ].join("");
             var contentHtml = "";
@@ -523,12 +740,12 @@
                 let data = allData[i]
                 var template =
                     "<div class='main'>" +
-                    // "<div style='text-align: center;font-size: 22px;font-weight: bold;margin-bottom: 30px'>订单详情</div>" +
-                    "<div>姓名:" + data.name + "</div><br><br>" +
-                    "<div>电话:" + data.phone + "</div><br><br>" +
-                    "<div>地址:" + data.address + "</div><br><br>" +
-                    "<div>编号:" + data.orderNo + "</div><br><br>" +
-                    "<div>商品:" + data.goodsName + "</div><br><br>" +
+                    "<div style='text-align: center;font-size: 10px;font-weight: bold;margin-bottom: 10px'>订单编号:" + data.orderNo + "</div>" +
+                        "<span style='font-size: 10px;font-weight: bold;'>收货人:</span><span>" + data.name + ",</span>" +
+                        "<span style='font-size: 10px;font-weight: bold;'>电话:</span><span>" + data.phone + ",</span>" +
+                        "<span style='font-size: 10px;font-weight: bold;'>地址:</span><span>" + data.address + "</span><br>" +
+                        "<span style='font-size: 10px;font-weight: bold;'>商品:</span><span>" + data.goodsName + "</span><br>" +
+                        "<span style='font-size: 10px;font-weight: bold;'>备注:</span><span>" + data.remark + "</span><br>" +
                     "</div>"
 
                 contentHtml += template;

--
Gitblit v1.9.1