1
0
zhang 6 роки тому
батько
коміт
06e1bdff12

+ 16 - 1
README.md

@@ -65,4 +65,19 @@ kmall-pt
 
 * 生成环境打包 
     * mvn clean
-    * mvn package -P prod
+    * mvn package -P prod
+    
+## 打印机静默设置
+* 谷歌浏览器
+    * 第一次打印设置好打印样式
+    * 右键快捷方式,点击【属性】,在【目标】尾部位置添加“ --kiosk-printing”注意空格,
+    * 如:"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --kiosk-printing
+    * 重新打开浏览器
+* 火狐浏览器
+    * 第一次打印设置好打印样式
+    * 在地址栏输入"about:config"
+    * 点击"我了解此风险!"按钮
+    * 在页面随意地方点击右键,选择【新建】->【布尔】
+    * 输入首选项名称为"print.always_print_silent",点击【确定】
+    * 选择值为"true"点击【确定】
+    * 重新打开浏览器

+ 1 - 1
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -214,7 +214,7 @@ public class OrderServiceImpl implements OrderService {
         for (OrderGoodsEntity orderGoods : orderGoodsEntityList) {
             goodsTotal += orderGoods.getNumber();
             total = total.add(orderGoods.getRetailPrice().multiply(new BigDecimal(orderGoods.getNumber()))).setScale(2, BigDecimal.ROUND_HALF_UP);
-            Goods goods = new Goods(orderGoods.getGoodsName(), orderGoods.getRetailPrice().toString(), orderGoods.getNumber().toString(), orderGoods.getRetailPrice().multiply(new BigDecimal(orderGoods.getNumber()).setScale(2, BigDecimal.ROUND_HALF_UP)).toString());
+            Goods goods = new Goods(orderGoods.getGoodsName(), orderGoods.getRetailPrice().toString(), orderGoods.getNumber().toString(), orderGoods.getRetailPrice().multiply(new BigDecimal(orderGoods.getNumber())).setScale(2,BigDecimal.ROUND_HALF_UP).toString());
             goodsList.add(goods);
         }
 

+ 185 - 2
kmall-admin/src/main/webapp/js/shop/order.js

@@ -332,7 +332,12 @@ let vm = new Vue({
                     data: JSON.stringify(rowId),
                     success: function (r) {
                         if (r.ticket != null) {
-                            alert('打印小票完成');
+                            // printArea(r.ticket);
+                            var content = getPrintContent(r.ticket);
+                            printArea(content);
+                            alert("操作成功");
+                        }else{
+                            alert("操作失败");
                         }
                     }
                 });
@@ -411,4 +416,182 @@ let vm = new Vue({
             vm.shippings = r.list;
         });
     }
-});
+});
+
+
+
+    // var printAreaCount = 0;
+    // function printArea(ticket) {
+    //     var idPrefix = "printArea_";
+    //     removePrintArea(idPrefix + printAreaCount);
+    //     printAreaCount++;
+    //     var iframeId = idPrefix + printAreaCount;
+    //     var iframeStyle = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;';
+    //     iframe = document.createElement('IFRAME');
+    //     $(iframe).attr({
+    //         style: iframeStyle,
+    //         id: iframeId
+    //     });
+    //     document.body.appendChild(iframe);
+    //     var doc = iframe.contentWindow.document;
+    //     $(document).find("link").filter(function () {
+    //         return $(this).attr("rel").toLowerCase() == "stylesheet";
+    //     }).each(
+    //         function () {
+    //             doc.write('<link type="text/css" rel="stylesheet" href="'
+    //                 + $(this).attr("href") + '" >');
+    //         });
+    //     doc.write('<div class="">' + content
+    //         + '</div>');
+    //     doc.close();
+    //     var frameWindow = iframe.contentWindow;
+    //     frameWindow.close();
+    //     frameWindow.focus();
+    //     frameWindow.print();
+    // }
+    // var removePrintArea = function (id) {
+    //     $("iframe#" + id).remove();
+    // };
+
+    function getPrintContent(ticket) {
+        var content = "<div style=\"width: 250px;font-family: 微软雅黑;font-size: 8px;\">";
+        //小票头
+        content += "<div style=\"text-align: center;width: 100%;font-weight:bold;font-size: 13px;\">";
+        content += ticket.ticketHead.title;
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "会员:" + ticket.ticketHead.memberId;
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "订单号:" + ticket.ticketHead.orderId;
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "交易时间:" + ticket.ticketHead.tradeTime;
+        content += "</div>";
+        content += "<div style=\"width: 100%;overflow:hidden;white-space: nowrap;\">--------------------------------------------------</div>";
+        //商品信息
+        content += "<table style=\"width: 100%;\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
+        content += "<tr>";
+        content += "<td style=\"width: 50%;text-align: left;font-size: 10px;font-weight: bold;\">商品名称</td>";
+        content += "<td style=\"width: 17%;text-align: right;font-size: 10px;font-weight: bold;\">单价</td>";
+        content += "<td style=\"width: 15%;text-align: right;font-size: 10px;font-weight: bold;\">数量</td>";
+        content += "<td style=\"width: 18%;text-align: right;font-size: 10px;font-weight: bold;\">小计</td>";
+        content += "</tr>";
+        content += "</table>";
+        content += "<div style=\"width: 100%;overflow:hidden;white-space: nowrap;\">--------------------------------------------------</div>";
+        content += "<table style=\"width: 100%;\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
+        for (var i=0;i< ticket.goods.length;i++){
+            content += "<tr>";
+            content += "<td style=\"width: 50%;text-align: left;font-size: 8px;padding-top: 8px;\">";
+            content += "<table style=\"width: 100%;\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
+            content += "<tr>";
+            content += "<td style=\"text-align: left;font-size: 8px;vertical-align:top;\">#</td>";
+            content += "<td style=\"text-align: left;font-size: 8px;\">" + ticket.goods[i].gname + "</td>";
+            content += "</tr>";
+            content += "</table>";
+            content += "</td>";
+            content += "<td style=\"width: 17%;text-align: right;font-size: 8px;vertical-align:bottom;padding-top: 8px;\">" + ticket.goods[i].uprice + "</td>";
+            content += "<td style=\"width: 15%;text-align: right;font-size: 8px;vertical-align:bottom;padding-top: 8px;\">" + ticket.goods[i].num + "</td>";
+            content += "<td style=\"width: 18%;text-align: right;font-size: 8px;vertical-align:bottom;padding-top: 8px;\">" + ticket.goods[i].subtotal + "元</td>";
+            content += "</tr>";
+
+        }
+        content += "</table>";
+        content += "<div style=\"width: 100%;overflow:hidden;white-space: nowrap;\">--------------------------------------------------</div>";
+        //收银信息
+        content += "<div style=\"width: 100%;\">";
+        content += "<span style=\"float: left;width: 50%;text-align: left;\">商品合计:</span>";
+        content += "<span style=\"float: left;width: 17%;text-align: left;\">" + ticket.cashInfo.goodsTotal + "件</span>";
+        content += "<span style=\"float: right;width: 33%;text-align: right;\">" + ticket.cashInfo.total + "元</span>";
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "<span style=\"float: left;width: 50%;text-align: left;\">实收:</span>";
+        content += "<span style=\"float: right;width: 50%;text-align: right;\">" + ticket.cashInfo.receipts + "元</span>";
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "<span style=\"float: left;width: 50%;text-align: left;\">找零:</span>";
+        content += "<span style=\"float: right;width: 50%;text-align: right;\">" + ticket.cashInfo.oddChange + "元</span>";
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "<span style=\"float: left;width: 50%;text-align: left;\">优惠券:</span>";
+        content += "<span style=\"float: right;width: 50%;text-align: right;\">" + ticket.cashInfo.coupon + "元</span>";
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "<span style=\"float: left;width: 50%;text-align: left;\">运费:</span>";
+        content += "<span style=\"float: right;width: 50%;text-align: right;\">" + ticket.cashInfo.freight + "元</span>";
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "<span style=\"float: left;width: 50%;text-align: left;\">支付渠道:</span>";
+        content += "<span style=\"float: right;width: 50%;text-align: right;\">" + ticket.cashInfo.paymentMode + "</span>";
+        content += "</div>";
+        content += "<div style=\"width: 100%;overflow:hidden;white-space: nowrap;\">--------------------------------------------------</div>";
+        //海关清单信息
+        content += "<div style=\"width: 100%;\">";
+        content += "订单号:" + ticket.cusListing.orderId;
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "运单编号:" + ticket.cusListing.waybillId;
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "海关清单号:" + ticket.cusListing.invtNo;
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "收货人:" + ticket.cusListing.consignee;
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "收货人电话:" + ticket.cusListing.consigneeTel;
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "始发地:" + ticket.cusListing.originAddress;
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "交货地:" + ticket.cusListing.deliveryAddress;
+        content += "</div>";
+        content += "<div style=\"width: 100%;overflow:hidden;white-space: nowrap;\">--------------------------------------------------</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += ticket.ticketFoot.summary;
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "客服电话:" + ticket.ticketFoot.serviceTel;
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += "网址:" + ticket.ticketFoot.url1;
+        content += "</div>";
+        content += "<div style=\"width: 100%;\">";
+        content += ticket.ticketFoot.welcome;
+        content += "</div>";
+        return content;
+    }
+    var printAreaCount = 0;
+    function printArea(content) {
+        var idPrefix = "printArea_";
+        removePrintArea(idPrefix + printAreaCount);
+        printAreaCount++;
+        var iframeId = idPrefix + printAreaCount;
+        var iframeStyle = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;';
+        iframe = document.createElement('IFRAME');
+        $(iframe).attr({
+            style: iframeStyle,
+            id: iframeId
+        });
+        document.body.appendChild(iframe);
+        var doc = iframe.contentWindow.document;
+        doc.open();
+        //$(document).find("link").filter(function () {
+            //return $(this).attr("rel").toLowerCase() == "stylesheet";
+        //}).each(
+            //function () {
+                //doc.write('<link type="text/css" rel="stylesheet" href="'
+                    //+ $(this).attr("href") + '" >');
+            //});
+        doc.write('<div class="">' + content
+            + '</div>');
+        doc.close();
+        var frameWindow = iframe.contentWindow;
+        frameWindow.close();
+        frameWindow.focus();
+        frameWindow.print();
+    }
+    var removePrintArea = function (id) {
+        $("iframe#" + id).remove();
+    };

+ 2 - 2
kmall-api/src/main/java/com/kmall/api/service/ApiOrderService.java

@@ -731,8 +731,8 @@ public class ApiOrderService {
                 for (OrderGoodsVo orderGoods : orderGoodsEntityList) {
                     goodsTotal += orderGoods.getNumber();
                     total = total.add(orderGoods.getRetail_price().subtract(new BigDecimal(orderGoods.getNumber()))).setScale(2, BigDecimal.ROUND_HALF_UP);
-                    Goods goods = new Goods(orderGoods.getGoods_name(), orderGoods.getRetail_price().toString(), orderGoods.getNumber().toString(),
-                            orderGoods.getRetail_price().multiply(new BigDecimal(orderGoods.getNumber()).setScale(2, BigDecimal.ROUND_HALF_UP)).toString());
+                    Goods goods = new Goods(orderGoods.getGoods_name(), orderGoods.getRetail_price().toString(), orderGoods.getNumber().toString()
+                                            ,orderGoods.getRetail_price().multiply(new BigDecimal(orderGoods.getNumber())).setScale(2,BigDecimal.ROUND_HALF_UP).toString());
                     goodsList.add(goods);
                 }