Browse Source

德邦快递 打印 1 + bug 修改

king 4 năm trước cách đây
mục cha
commit
6503fc8e85

+ 1 - 1
app/Console/Commands/CreateWeightStatistic.php

@@ -25,7 +25,7 @@ class CreateWeightStatistic extends Command
     {
         $yesterday = date("Y-m-d",strtotime("-1 day"));
         $sql = <<<sql
-SELECT DATE_FORMAT(order_packages.created_at,'%Y-%m-%d') date,IFNULL(order_packages.measuring_machine_id, 0) measuring_machine_id,order_packages.owner_id
+SELECT DATE_FORMAT(order_packages.created_at,'%Y-%m-%d') date,IFNULL(order_packages.measuring_machine_id, 0) measuring_machine_id,order_packages.owner_id,
 SUM(CASE WHEN order_packages.weighed_at IS NOT NULL THEN 1 ELSE 0 END) AS count,
 COUNT(1) total FROM order_packages LEFT JOIN orders ON order_packages.order_id=orders.id
 WHERE orders.wms_status != '订单取消'

+ 2 - 2
app/Http/Controllers/ControlPanelController.php

@@ -221,7 +221,7 @@ class ControlPanelController extends Controller
     private function getTargetData(string $date, array $owner = [])
     {
         $res = [];$where='';$no_weight  = 0;
-        if ($owner) $where = " and order_packages.owner_id in ".implode(',',$owner).")";
+        if ($owner) $where = " and order_packages.owner_id in (".implode(',',$owner).")";
         if ($date == date("Y-m-d")){
             $sql = <<<sql
 SELECT DATE_FORMAT(order_packages.created_at,'%Y-%m-%d') date,IFNULL(order_packages.measuring_machine_id, 0) measuring_machine_id,
@@ -235,7 +235,7 @@ sql;
             if (empty($info)) return  $res;
             foreach ($info as $v){
                 $res[] = [$v->measuring_machine_id,(int)$v->count];
-                $no_weight += (int)($v->total_count - $v->un_weigh_count);
+                $no_weight += (int)($v->total - $v->count);
             }
             array_push($res, ['未称重',$no_weight]);
         }else{

+ 22 - 0
app/Http/Controllers/WaybillController.php

@@ -1120,4 +1120,26 @@ class WaybillController extends Controller
         }
         $this->success(count($ids)==$waybills->count() ? '运单拆单完毕' : '部分运单不符合拆单条件');
     }
+
+    /**
+     * 快递面单打印 :暂时支持 德邦
+     */
+    public function expressFaceList(Request $request)
+    {
+        $this->gate("运输管理-编辑");
+        $ids = $request->input("ids");
+        try {
+            /** @var Collection $waybills */
+            $waybills = Waybill::query()->whereIn("id",$ids)->get();
+            if ($waybills->count()==0)$this->error("运单不存在");
+            foreach ($waybills as $waybill){
+                $waybill->loadMissing([
+                    "order.shop","destinationCity","owner","order.warehouse.province","order.warehouse.city","order.warehouse.county","deliveryType"
+                ]);
+            }
+        }catch (\Exception $e){
+            $this->error($e->getMessage());
+        }
+        $this->success(count($ids)==$waybills->count() ? $waybills : []);
+    }
 }

+ 6 - 0
app/Waybill.php

@@ -65,6 +65,12 @@ class Waybill extends Model
         'total_weight',
         'deliveryType_id',
         "merge_owner",//合并货主ID集
+        'order_type',
+        'transport_type',
+        'pay_type',
+        'back_sign_bill',
+        'package_service',
+        'express_face_list'
     ];
 
     public function district()

+ 32 - 0
database/migrations/2021_08_10_110830_change_express_face_list_column_in_waybills_table.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class ChangeExpressFaceListColumnInWaybillsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('waybills', function (Blueprint $table) {
+            $table->tinyInteger('express_face_list')->default(0)->comment('快递面单 是否打印: 1:是 0:否');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('waybills', function (Blueprint $table) {
+            $table->dropColumn('express_face_list');
+        });
+    }
+}

BIN
resources/images/dbwl/qrCode.jpg


BIN
resources/images/dbwl/revice.png


+ 1 - 0
resources/js/app.js

@@ -9,6 +9,7 @@ window.ElementUI=require('./utilities/tempTip');
 window.getGetVal=require('./utilities/getGetVal');
 window.scanner=require('./utilities/scanner');
 window.datetimeRelating=require('./utilities/datetimeRelating');
+window.lodop=require('./lodop');
 window.Vue.use(window.ElementUI);
 require('bootstrap-select');
 window.Vue.use(require('http-vue-loader'));

BIN
resources/js/lodop/CLodop_Setup_for_Win32NT.exe


+ 133 - 0
resources/js/lodop/LodopFuncs.js

@@ -0,0 +1,133 @@
+var CreatedOKLodop7766=null;
+
+//====判断是否需要安装CLodop云打印服务器:====
+function needCLodop(){
+    try{
+	var ua=navigator.userAgent;
+	if (ua.match(/Windows\sPhone/i) !=null) return true;
+	if (ua.match(/iPhone|iPod/i) != null) return true;
+	if (ua.match(/Android/i) != null) return true;
+	if (ua.match(/Edge\D?\d+/i) != null) return true;
+	if (ua.match(/QQBrowser/i) != null) return false;
+	var verTrident=ua.match(/Trident\D?\d+/i);
+	var verIE=ua.match(/MSIE\D?\d+/i);
+	var verOPR=ua.match(/OPR\D?\d+/i);
+	var verFF=ua.match(/Firefox\D?\d+/i);
+	var x64=ua.match(/x64/i);
+	if ((verTrident==null)&&(verIE==null)&&(x64!==null)) 
+		return true; else
+	if ( verFF !== null) {
+		verFF = verFF[0].match(/\d+/);
+		if ( verFF[0] >= 42 ) return true;
+	} else 
+	if ( verOPR !== null) {
+		verOPR = verOPR[0].match(/\d+/);
+		if ( verOPR[0] >= 32 ) return true;
+	} else 
+	if ((verTrident==null)&&(verIE==null)) {
+		var verChrome=ua.match(/Chrome\D?\d+/i);		
+		if ( verChrome !== null ) {
+			verChrome = verChrome[0].match(/\d+/);
+			if (verChrome[0]>=42) return true;
+		};
+	};
+        return false;
+    } catch(err) {return true;};
+};
+
+//====页面引用CLodop云打印必须的JS文件:====
+if (needCLodop()) {
+	var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
+	var oscript = document.createElement("script");
+	var ishttps = 'https:' == document.location.protocol ? true: false;
+
+	if(ishttps){
+		oscript.src ="https://localhost:8443/CLodopfuncs.js?priority=1";
+		head.insertBefore( oscript,head.firstChild );
+		//本机云打印的后补端口8444:
+		oscript = document.createElement("script");
+		oscript.src ="https://localhost:8444/CLodopfuncs.js?priority=2";
+		head.insertBefore( oscript,head.firstChild );
+	}else{
+		oscript.src ="http://localhost:8000/CLodopfuncs.js?priority=1";
+		head.insertBefore( oscript,head.firstChild );
+		//本机云打印的后补端口8001:
+		oscript = document.createElement("script");
+		oscript.src ="http://localhost:8001/CLodopfuncs.js?priority=2";
+		head.insertBefore( oscript,head.firstChild );
+	}
+	
+	
+};
+
+//====获取LODOP对象的主过程:====
+function getLodop(oOBJECT,oEMBED){
+    var strHtmInstall="<br><font color='#FF00FF'>打印控件未安装!点击这里<a href='../lodop/install_lodop32.exe' target='_self'>执行安装</a>,安装后请刷新页面或重新进入。</font>";
+    var strHtmUpdate="<br><font color='#FF00FF'>打印控件需要升级!点击这里<a href='../lodop/install_lodop32.exe' target='_self'>执行升级</a>,升级后请重新进入。</font>";
+    var strHtm64_Install="<br><font color='#FF00FF'>打印控件未安装!点击这里<a href='../lodop/install_lodop64.exe' target='_self'>执行安装</a>,安装后请刷新页面或重新进入。</font>";
+    var strHtm64_Update="<br><font color='#FF00FF'>打印控件需要升级!点击这里<a href='../lodop/install_lodop64.exe' target='_self'>执行升级</a>,升级后请重新进入。</font>";
+    var strHtmFireFox="<br><br><font color='#FF00FF'>(注意:如曾安装过Lodop旧版附件npActiveXPLugin,请在【工具】->【附加组件】->【扩展】中先卸它)</font>";
+    var strHtmChrome="<br><br><font color='#FF00FF'>(如果此前正常,仅因浏览器升级或重安装而出问题,需重新执行以上安装)</font>";
+    var strCLodopInstall="<br><font color='#FF00FF'>CLodop云打印服务(localhostw本地)未安装启动!点击这里<a href='../lodop/CLodop_Setup_for_Win32NT.exe' target='_self'>执行安装</a>,安装后请刷新页面。</font>";
+    var strCLodopUpdate="<br><font color='#FF00FF'>CLodop云打印服务需升级!点击这里<a href='../lodop/CLodop_Setup_for_Win32NT.exe' target='_self'>执行升级</a>,升级后请刷新页面。</font>";
+    var LODOP;
+    try{
+        var isIE = (navigator.userAgent.indexOf('MSIE')>=0) || (navigator.userAgent.indexOf('Trident')>=0);
+        if (needCLodop()) {
+            try{ LODOP=getCLodop();} catch(err) {};
+	    if (!LODOP && document.readyState!=="complete") {/*alert("C-Lodop没准备好,请稍后再试!");*/ return;};
+            if (!LODOP) {
+		 if (isIE) document.write(strCLodopInstall); else
+		  $("#lodopTips").append(strCLodopInstall);
+                 return;
+            } else {
+
+	         if (CLODOP.CVERSION<"2.0.6.8") { 
+			if (isIE) document.write(strCLodopUpdate); else
+			 $("#lodopTips").append(strCLodopUpdate);
+		 };
+		 if (oEMBED && oEMBED.parentNode) oEMBED.parentNode.removeChild(oEMBED);
+		 if (oOBJECT && oOBJECT.parentNode) oOBJECT.parentNode.removeChild(oOBJECT);	
+	    };
+        } else {
+            var is64IE  = isIE && (navigator.userAgent.indexOf('x64')>=0);
+            //=====如果页面有Lodop就直接使用,没有则新建:==========
+            if (oOBJECT!=undefined || oEMBED!=undefined) {
+                if (isIE) LODOP=oOBJECT; else  LODOP=oEMBED;
+            } else if (CreatedOKLodop7766==null){
+                LODOP=document.createElement("object");
+                LODOP.setAttribute("width",0);
+                LODOP.setAttribute("height",0);
+                LODOP.setAttribute("style","position:absolute;left:0px;top:-100px;width:0px;height:0px;");
+                if (isIE) LODOP.setAttribute("classid","clsid:2105C259-1E0C-4534-8141-A753534CB4CA");
+                else LODOP.setAttribute("type","application/x-print-lodop");
+                document.documentElement.appendChild(LODOP);
+                CreatedOKLodop7766=LODOP;
+             } else LODOP=CreatedOKLodop7766;
+            //=====Lodop插件未安装时提示下载地址:==========
+            if ((LODOP==null)||(typeof(LODOP.VERSION)=="undefined")) {
+                 if (navigator.userAgent.indexOf('Chrome')>=0)
+                      $("#lodopTips").append(strHtmChrome);
+                 if (navigator.userAgent.indexOf('Firefox')>=0)
+                      $("#lodopTips").append(strHtmFireFox);
+                 if (is64IE) document.write(strHtm64_Install); else
+                 if (isIE)   document.write(strHtmInstall);    else
+                      $("#lodopTips").append(strHtmInstall);
+                 return LODOP;
+            };
+        };
+        if (LODOP.VERSION<"6.2.0.8") {
+            if (needCLodop())
+             $("#lodopTips").append(strCLodopUpdate); else
+            if (is64IE)  $("#lodopTips").append(strHtm64_Update); else
+            if (isIE)  $("#lodopTips").append(strHtmUpdate); else
+             $("#lodopTips").append(strHtmUpdate);
+            return LODOP;
+        };
+        //===如下空白位置适合调用统一功能(如注册语句、语言选择等):===
+        LODOP.SET_LICENSES("","8547576574263FCEE0D67DA8BFE4BECC","C94CEE276DB2187AE6B65D56B3FC2848","");
+        //===========================================================
+        return LODOP;
+    } catch(err) {alert("getLodop出错:"+err);};
+};
+

BIN
resources/js/lodop/install_lodop32.exe


BIN
resources/js/lodop/install_lodop64.exe


+ 37 - 0
resources/js/lodop/jquery.PrintArea.js

@@ -0,0 +1,37 @@
+// JavaScript Document
+(function($) {
+var printAreaCount = 0;
+$.fn.printArea = function()
+{
+var ele = $(this);
+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="' + $(ele).attr("class") + '">' + $(ele).html() + '</div>');
+doc.close();
+var frameWindow = iframe.contentWindow;
+frameWindow.close();
+frameWindow.focus();
+frameWindow.print();
+}
+var removePrintArea = function(id)
+{
+$( "iframe#" + id ).remove();
+};
+})(jQuery);

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2 - 0
resources/js/lodop/jquery.js


+ 50 - 0
resources/js/lodop/myAlert.js

@@ -0,0 +1,50 @@
+(function() {
+	$.extend({
+		myAlert: function(options) {//参数格式{title:'Title',message:'message',callback:function(){alert('callback')}}or"需要提示的话"
+			var option={title:"提示",message:"程序员太傻,忘记输入提示内容啦……",callback:function(){}}
+			if(typeof(options)=="string"){
+				option.message=options
+			}else{
+				option=$.extend(option,options);
+			}
+			var top=$(window).height()*0.3;
+			$('body').append('<div class="myModa"><div class="myAlertBox"  style="margin-top:'+top+'px"><h6>'+option.title+'</h6><p>'+option.message+'</p><div class="btn sure">确定</div></div></div>');
+			$('.btn.sure').click(function(){
+				$('.myModa').remove();
+				option.callback();
+			})
+		},
+		myConfirm: function(options) {//参数格式{title:'Title',message:'message',callback:function(){alert('callback')}}or"需要提示的话"$.myConfrim()
+			var option={title:"提示",message:"程序员太傻,忘记输入提示内容啦……",callback:function(){}}
+			if(typeof(options)=="string"){
+				option.message=options
+			}else{
+				option=$.extend(option,options);
+			}
+			var top=$(window).height()*0.3;
+			$('body').append('<div class="myModa"><div class="myAlertBox" style="margin-top:'+top+'px"><h6>'+option.title+'</h6><p>'+option.message+'</p><div class="col2"><div class="col" style="margin-right: 20px;"><div class="btn exit">取消</div></div><div class="col"><div class="btn sure">确定</div></div></div></div></div>');
+			$('.btn.exit').click(function(){
+				$('.myModa').remove();
+			})
+			$('.btn.sure').click(function(){
+				$('.myModa').remove();
+				option.callback();
+			})
+		},
+		myToast:function(message){
+			var top=$(window).height()*0.3;
+			$('body').append('<div class="myToast">'+message+'</div>');
+			console.log($('.myToast').outerWidth())
+			var top=($(window).height()-$('.myToast').height())/2;
+			var left=($('body').width()-$('.myToast').width())/2;
+			$('.myToast').css({'top':top+'px','left':left+'px'});
+			setTimeout(function(){
+				$('.myToast').fadeOut(300);
+				setTimeout(function(){
+					$('.myToast').remove();
+				},300)
+			},1000)
+		}
+	});
+})(jQuery)
+

+ 316 - 0
resources/js/lodop/myPrintKit.js

@@ -0,0 +1,316 @@
+function PrintTable(billList){
+    for (var i = 0; i < billList.length; i++) {
+        var printOrders = billList[i];
+        //如果原发货人,电话不为空,显示原发货人信息,否则现在发货人信息
+        if (printOrders.shipperCompanyName != null
+            && printOrders.shipperCompanyName != ''
+            && printOrders.shipperCompanyPhone != null
+            && printOrders.shipperCompanyPhone != '') {
+            printOrders.shipperTel = printOrders.shipperCompanyPhone;
+            printOrders.shipperName = printOrders.shipperCompanyName;
+            printOrders.saddress = printOrders.shipperCompanyAddress;
+            printOrders.shipperPhone = '';
+        }
+    }
+    var len = $(".waybillNum").length;
+    var wayNum = "";
+    for (var i = 0; i < len; i++) {
+        wayNum += $(".waybillNum")[i].innerText + ",";
+    }
+    wayNum = wayNum.substring(0, wayNum.length - 1);
+    //newPrintWayBill(billList, wayNum); //打印
+    lodopPrintTable(billList, wayNum); //打印
+}
+//当前打印模板
+var htmlTemplateObj = null;
+
+function lodopPrintTable(billList, wayNum){
+    //获取打印模板
+    htmlTemplateObj = $("#printContext");
+    //console.log("shipperName"+htmlTemplateObj.find("span.shipperName").text())
+    var LODOP = null;
+    try{
+        LODOP=getLodop();
+        if ((LODOP!=null)&&(typeof(LODOP.VERSION)!="undefined")){
+            $("#lodopTips").hide();
+        }
+        else{
+            $("#lodopTips").show();
+            return;
+        }
+    }catch(err){
+        $("#lodopTips").show();
+        return;
+    }
+    //打印
+    print(billList, wayNum);
+
+}
+//打印模板
+function templateDataProcess(data, index){
+    Date.prototype.Format = function (fmt) { //author: meizz
+        var o = {
+            "M+": this.getMonth() + 1, //月份
+            "d+": this.getDate(), //日
+            "H+": this.getHours(), //小时
+            "m+": this.getMinutes(), //分
+            "s+": this.getSeconds(), //秒
+            "q+": Math.floor((this.getMonth() + 3) / 3), //季度
+            "S": this.getMilliseconds() //毫秒
+        };
+        if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
+        for (var k in o)
+            if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
+        return fmt;
+    }
+
+    var printHtml = null;
+    if(data==undefined || data == null || data== ""){
+        return printHtml;
+    }
+
+    htmlTemplateObj.find("span.conPhone").text(data.conPhone);
+    htmlTemplateObj.find("span.conTel").text(data.conTel);
+    htmlTemplateObj.find("span.shipperTel").text(data.shipperTel);
+    htmlTemplateObj.find("span.shipperName").text(data.shipperName);
+    htmlTemplateObj.find("span.shipperPhone").text(data.shipperPhone);
+    htmlTemplateObj.find("span.conName").text(data.conName);
+
+    if(data.caddress.length>42){
+        $('#conMsg').attr('style','border-right:0mm;font-size:8pt;width:90mm;font-family:黑体;font-weight:bold;text-align:left; ');
+        $('#conMsg2').attr('style','font-family:黑体;text-align:left; font-size:8px;font-weight:bold; ');
+
+    }else{
+        $('#conMsg').attr('style','border-right:0mm;font-size:10pt;width:90mm;font-family:黑体;font-weight:bold;text-align:left; ');
+        $('#conMsg2').attr('style','font-family:黑体;text-align:left; font-size:10px;font-weight:bold; ');
+    }
+    htmlTemplateObj.find("span.caddress").text(data.caddress);
+    htmlTemplateObj.find("span.saddress").text(data.saddress);
+    htmlTemplateObj.find("span.cargoName").text(data.cargoName);
+    htmlTemplateObj.find("span.cargoWeight").text(data.cargoWeight);
+    htmlTemplateObj.find("span.refundPayment").text(data.refundPayment);
+
+    if (data.refundPayment > 0) {
+        $("#refundPaymentId").text("代收货款");
+        $('#refundPaymentId').attr('style','border-top:0mm;background:#000000;line-height:72px;font-weight:bold; text-align:center; color:#FFFFFF; font-size:20px;');
+    } else {
+        $("#refundPaymentId").text("");
+        $('#refundPaymentId').attr('style','border-top:0mm;background:#000000;line-height:72px; text-align:center; color:#FFFFFF;');
+    }
+
+    if (data.payType.length > 2) {
+
+        $('#payTypeId').attr('style','border-top:0mm;background:#000000;line-height:72px;font-weight:bold; text-align:center; color:#FFFFFF; font-size:10px;');
+
+    } else {
+
+        $('#payTypeId').attr('style','border-top:0mm;background:#000000;line-height:72px;font-weight:bold; text-align:center; color:#FFFFFF; font-size:20px;');
+
+    }
+    $("#payTypeId").text(data.payType);
+
+    if ("" == data.transType) {
+
+        $('#transTypeId').attr('style','border-top:0mm;background:#FFFFFF;line-height:72px;font-weight:bold; text-align:center; color:#000000; font-size:13px;');
+        htmlTemplateObj.find("span.transType").text("无法匹配");
+
+    } else {
+
+        if (data.transType.length > 4) {
+
+            $('#transTypeId').attr('style','border-top:0mm;background:#FFFFFF;line-height:72px;font-weight:bold; text-align:center; color:#000000; font-size:8px;');
+
+        } else {
+
+            $('#transTypeId').attr('style','border-top:0mm;background:#FFFFFF;line-height:72px;font-weight:bold; text-align:center; color:#000000; font-size:13px;');
+
+        }
+
+        htmlTemplateObj.find("span.transType").text(data.transType);
+    }
+
+    htmlTemplateObj.find("span.destination").text(data.destination);
+    htmlTemplateObj.find("span.billWeight").text(data.billWeight);
+    htmlTemplateObj.find("span.transportCharge").text(data.transportCharge);
+    htmlTemplateObj.find("span.totalCharge").text(data.totalCharge);
+    htmlTemplateObj.find("span.insuranceMoney").text(data.insuranceMoney);
+    htmlTemplateObj.find("span.signSheet").text(data.signSheet);
+    htmlTemplateObj.find("span.outerField1").text(data.outerField1);
+    htmlTemplateObj.find("span.lastOutLoadOrgName").text(data.lastOutLoadOrgName);
+    htmlTemplateObj.find("span.departCityName").text(data.departCityName);
+    htmlTemplateObj.find("span.departCityName").text(data.departCityName);
+    htmlTemplateObj.find("span.secondLoadOrgName").text(data.secondLoadOrgName);
+    htmlTemplateObj.find("span.stationNumber").text(data.stationNumber);
+    htmlTemplateObj.find("span.custOrderLine").text(data.custOrderLine);
+    htmlTemplateObj.find("span.transNote").text(data.transNote);
+
+    if ("" == data.markerPen) {
+
+        $('#markerPen').attr('style','text-align: center; line-height: 13mm; vertical-align: middle;font-size: 35px; font-weight: bold; margin: 0px; padding: 0px;');
+        $("#refundPaymentId").text("无大头笔信息");
+    } else {
+
+        if (data.markerPen.length > 10) {
+
+            $('#markerPen').attr('style','text-align: center; line-height: 13mm; vertical-align: middle;font-size: 18px; font-weight: bold; margin: 0px; padding: 0px;');
+            $("#markerPen").text(data.markerPen);
+        } else {
+
+            $('#markerPen').attr('style','text-align: center; line-height: 13mm; vertical-align: middle;font-size: 35px; font-weight: bold; margin: 0px; padding: 0px;');
+            $("#markerPen").text(data.markerPen);
+        }
+    }
+//	htmlTemplateObj.find("span.markerPen").text(data.markerPen);
+
+
+
+    htmlTemplateObj.find("span.orderNumber").text(data.orderNumber);
+    htmlTemplateObj.find("span.printTime").text(new Date().Format("yyyyMMdd HH:mm:ss"));
+    htmlTemplateObj.find("span.billTime").text(data.billTime.substring(0,10));
+    var cargoCount = data.cargoCount;
+    if(data.cargoCount>1){
+        cargoCount += "-" + (index+1);
+    }
+    htmlTemplateObj.find("span.cargoCount").text(cargoCount);
+
+    //代收账号
+    var account = data.reciveLoanAccount;
+    if (account != null && account != '') {
+        account = account.substring(0, 3) + "*"
+            + account.substring(account.length - 4, account.length);
+    } else {
+        account = "";
+    }
+    htmlTemplateObj.find("span.reciveLoanAccount").text(account);
+
+    if (data.conTel != '' && data.conTel != null) {
+        if (data.conPhone != '' && data.conPhone != null) {
+            htmlTemplateObj.find("span.conTel").text(data.conTel + "/");
+        }
+    }
+    if (data.shipperTel != '' && data.shipperTel != null) {
+        if (data.shipperPhone != ''
+            && data.shipperPhone != null) {
+            htmlTemplateObj.find("span.shipperTel").text(data.shipperTel + "/");
+        }
+    }
+//	return htmlTemplateObj.html();
+}
+/**
+ * 打印
+ * @param list
+ */
+function print(billList, wayNum){
+    for(var i=0; i<billList.length; i++){
+
+        var data = billList[i];
+        data.cargoCount = 1;
+        for(var j=0; j<data.cargoCount; j++){
+
+            var serialNo = data.printSerialNos;
+            if(data.cargoCount>1){
+                serialNo = data.printSerialNos.split(",")[j];
+            }
+            //条码
+            var barcode = data.waybillNumber + serialNo + data.stationNumber;
+
+            var isHideWareHouse  = data.isHideWareHouse;
+
+            //模板数据处理
+            templateDataProcess(data, j);
+            console.log("XXXX: "+ htmlTemplateObj.find("span.shipperName").text())
+            //打印电子运单1
+            printEWaybill(data, serialNo, barcode, wayNum);
+
+            //打印仓库分拣单
+//			if("N"==isHideWareHouse){
+//				printWareHouseWaybill(data, serialNo, barcode);
+//			}
+
+        }
+    }
+    if(billList.length>0){
+        //$.myAlert("本次共打印"+billList.length+"张,已成功添加到打印列表!");
+
+    }else {
+        //$.myAlert('请先勾选需要打印的面单');
+    }
+}
+/**
+ * 打印电子运单
+ * @param data
+ * @param serialNo
+ */
+function printEWaybill(data, serialNo, barcode, wayNum){
+    //打印内容
+    var printHtml = htmlTemplateObj.find("div#expressPrintArea").html();
+
+    LODOP.PRINT_INIT("二级模板");
+    LODOP.SET_PRINT_PAGESIZE(0,"110mm","180mm","CreateCustomPage");
+
+    // LODOP.ADD_PRINT_TEXT(130,30,150,130,$(".markerPenCode").text());
+    // LODOP.ADD_PRINT_TEXT(130,30,150,130,"河南郑州");
+    LODOP.SET_SHOW_MODE("BKIMG_WIDTH","100mm");
+    LODOP.SET_SHOW_MODE("BKIMG_HEIGHT","180mm");
+
+
+    LODOP.ADD_PRINT_TABLE("2mm","0.6mm","95mm","177mm",printHtml);
+    LODOP.ADD_PRINT_BARCODE("79mm","10mm","84mm","15mm","128C", data.waybillNumber);
+    LODOP.ADD_PRINT_BARCODE("117mm","45mm","50mm","8mm","128C", data.waybillNumber);
+
+    //打印
+    LODOP.PREVIEW();
+    //LODOP.PRINT();
+//	LODOP.PRINT_DESIGN();
+
+    //记录打印日志
+    try {
+        printLogses(data);
+    } catch (e) {
+    }
+}
+function printTest(item = '') {
+    var printOrder = {};
+
+    printOrder.waybillNumber = item.waybill_number??'';
+    printOrder.shipperCompanyPhone = item.owner.phone_number;
+    printOrder.shipperCompanyAddress = item.order.warehouse.province.name +'-'+item.order.warehouse.city.name+'-'+item.order.warehouse.county.name+'-'+item.order.warehouse.address
+    printOrder.shipperTel = item.owner.phone_number;
+    printOrder.saddress = item.order.warehouse.province.name +'-'+item.order.warehouse.city.name+'-'+item.order.warehouse.county.name+'-'+item.order.warehouse.address;
+    printOrder.shipperPhone = item.owner.phone_number;
+    printOrder.conPhone = item.order.consignee_phone;
+    printOrder.conTel = item.order.consignee_phone;
+    printOrder.shipperName = item.owner.name;
+    printOrder.conName = item.order.consignee_name;
+    printOrder.caddress = item.order.province+'-'+item.order.city+'-'+item.order.district+'-'+item.order.address;
+    printOrder.cargoName = item.cargo_name;
+    printOrder.cargoWeight = item.total_weight;
+    printOrder.refundPayment = item.is_to_pay ? item.collect_fee : 0;  //代收款
+    printOrder.payType = '月结';
+    printOrder.transType = item.transport_type == "JZQY_LONG" ? '精确汽运' : '精准卡航';
+    printOrder.destination = item.destination_city.name;
+    printOrder.billWeight = item.total_weight;
+    printOrder.transportCharge = item.fee;
+    printOrder.totalCharge = item.charge;
+    printOrder.insuranceMoney = 0; //保价
+    printOrder.signSheet = item.back_sign_bill ? (item.back_sign_bill == 1 ? '签收单原件返回' : '电子签收单' ) : '无需返单';
+    printOrder.outerField1 = '德邦货运'; //受理部门
+    printOrder.lastOutLoadOrgName = '上海市';  //最终外场
+    printOrder.departCityName = '上海市'; //原寄地
+    printOrder.secondLoadOrgName = '上海市';  //第二外场
+    printOrder.stationNumber = 1; //提货网点id
+    printOrder.custOrderLine = item.wms_bill_number;
+    printOrder.transNote = item.ordering_remark;
+    printOrder.markerPen = item.origination;
+    printOrder.orderNumber = item.source_bill;
+    printOrder.billTime = item.order.created_at;
+    printOrder.cargoCount = item.total_number;
+    printOrder.reciveLoanAccount = ''; //代收账号
+    printOrder.printSerialNos = ''; //流水号
+    printOrder.isHideWareHouse = '';
+    printOrder.originalNumber = '';
+
+    var printList = [];
+    printList.push(printOrder);
+    PrintTable(printList);
+}

+ 268 - 1
resources/views/transport/waybill/index.blade.php

@@ -46,6 +46,10 @@
                         title="合并多条运单至一条,已填写信息将被累加处理" @click="waybillMerge()">运单合并</button>
             <button class="btn btn-sm btn-outline-info tooltipTarget"
                     title="将已合并运单拆分返回原状态" @click="waybillSplit()">拆单返回</button>
+                @if($uriType=='' || $uriType=='德邦物流')
+                    <button class="btn btn-sm btn-outline-info tooltipTarget"
+                        title="打印快递面单" @click="expressFaceList()">打印快递面单</button>
+                @endif
             @endcan
             <div>
                 @if(Session::has('successTip'))
@@ -241,8 +245,241 @@
         </div>
     </div>
 
-@endsection
+{{--    德邦面单--}}
+    <div id="lodopTips"></div>
+    <div id="printContext" class="ordercontent"
+         style="margin-top: 15px; width: 630px; height: 665px; float: left; overflow-y: auto; text-align: center; display:none">
+        <div id="expressPrintArea">
+            <style>
+                .wayBill li {
+                    float: left;
+                    width: 85px;
+                }
+
+                .wayBill li a:hover {
+                    color: blue;
+                }
+
+                .wayBill li a {
+                    color: blue;
+                }
+                #expressPrintArea {
+                    width: 100mm;
+                    height: 180mm;
+                    margin-left: 100px;
+                    /*  float: left; */
+                    /* background: url('../images/order/lttBackground.jpg') no-repeat; */
+                    background-size: 104mm 175mm;
+                    padding: 4mm 0.5mm 0.5mm 2.3mm;
+                }
+                td {
+                    border: 0.15mm solid #cecece;
+                    padding-left: 1mm;
+                    font-size: 12px;
+                    font-family: 宋体;
+                    vertical-align: middle;
+                    text-align: left;
+                }
+                tr {
+                    width: 100%;
+                    border-left:0mm;
+                    border-right:0mm;
+                    border: 0.2mm solid #000000;
+                }
+                .singlePlane{
+                    font-size: 7pt;
+                    width:60mm;
+                    font-family:黑体;
+                    text-align:left;
+                    valign:top;
+                }
+                .sign{
+                    font-size:8pt;
+                    width:60mm;
+                    font-family:黑体;
+                    text-align:right;
+                    line-height: 5mm;
+                    padding-top: 2mm;
+                }
+                .singlePlane2{
+                    font-size:7pt;
+                    width:99mm;
+                    font-family:黑体;
+                    text-align:left;
+                    valign:top;
+                    padding-left: 1mm;
+                    padding-right: 1mm;
+                }
+                .houseCode td{
+                    font-size:17px;width:20mm;font-family:黑体; font-weight:bold; text-align:center;
+                }
+                .originalNumber {
+                    font-size: 15px;
+                    font-weight: bold;
+                }
+
+                #cargoName {
+                    font-size:  16px;
+                    font-weight: bold;
+                }
+                #transNote {
+                    font-weight: bold;
+                }
+                #transNote {
+                    font-size:  10px;
+                }
+
+                .top-amount td span, .top-amount td strong, .outerField1, .signSheet {
+                    font-size: 10px !important;
+                    font-family: "黑体";
+                }
+
+            </style>
+            <%-- <div style="width: 20mm;height: 20mm;/* background-color: #fff; */text-align: center;line-height: 20mm;position: absolute; left:50mm; top:60mm;">
+                <span class="markerPenCode" style=" display: inline-block; color: #666;font-size: 40mm;font-weight: bold;transform:rotate(-30deg);opacity: 0.5;">A5</span>
+            </div> --%>
+            <span class="markerPenCode" style="
+        /*display: none;*/
+"></span>
+            <table border="2" style="width: 99mm;border-collapse:collapse;">
+                <%--==================================上联=============================================--%>
+                <tr class="tr1" style="height: 0mm; border: none;">
+                    <td width="10mm"></td>
+                    <td width="10mm"></td>
+                    <td width="10mm"></td>
+                    <td width="10mm"></td>
+                    <td width="10mm"></td>
+                    <td width="10mm"></td>
+                    <td width="10mm"></td>
+                    <td width="10mm"></td>
+                    <td width="10mm"></td>
+                    <td width="5mm"></td>
+                </tr>
+                <%--德邦--%>
+                <tr style="height: 14mm;">
+                    <td colspan="3"></td>
+                    <td valign="middle" colspan="3" style="border-top:0mm;background:white;color:black;line-height:72px;font-weight:bold; text-align:center; font-size:20px;" id="refundPaymentId"></td>
+                    <td valign="middle" colspan="2" style="border-top:0mm;background:black;color:white;line-height:72px;font-weight:bold; text-align:center; font-size:20px;" id="payTypeId"></td>
+                    <td valign="middle" colspan="2" style="border-top:0mm;background:white;color:black;line-height:72px;font-weight:bold; text-align:left; font-size:13px;" id = "transTypeId">
+                        <span class=transType></span></td>
+                </tr>
+                <%--金额--%>
+                <tr style="height: 11mm;" class="top-amount">
+                    <td colspan="4" style="width: 30mm; vertical-align: middle; border-right: 0px;">
+                        <span style="padding-bottom: 1.5mm;"><strong>代收金额:</strong></span><span
+                            class="refundPayment">20000</span><br/>
+                    </td>
+                    <td colspan="6" style="width: 50mm; vertical-align: middle; border-left: 0px;">
+                        <span style="padding-bottom: 1.5mm;"><strong>保价金额:</strong></span><span
+                            class="insuranceMoney">22</span><br/>
+                        <span style="padding-bottom: 1.5mm;"><strong>签单返回:</strong></span><span
+                            class="signSheet"></span><br/>
+                        <span style="padding-bottom: 1.5mm;"><strong>始发网点:</strong></span><span
+                            class="outerField1" style="font-size: 8px;"></span><br/>
+                    </td>
+                </tr>
+                <%--大头笔--%>
+                <tr style="height: 14mm;" >
+                    <td colspan="10" style="text-align: center; line-height: 13mm; vertical-align: middle;font-size: 35px; font-weight: bold; margin: 0px; padding: 0px;" id="markerPen">
+                        无大头笔信息
+                    </td>
+                </tr>
 
+                <%--收件人--%>
+                <tr style="height: 14mm;">
+                    <td colspan="1" style="border-right:0mm;font-size:10px;width:10mm;font-family:黑体;text-align:center;"><img
+                            src="{{URL::asset('./images/dbwl/revice.png')}}"/></td>
+                    <td colspan="9"
+                        style="border-right:0mm;font-size:10pt;width:90mm;font-family:黑体;font-weight:bold;text-align:left; " id="conMsg">
+                        <span class="conName">张小二</span>&nbsp;&nbsp;
+                        <span class="conPhone">(优先取手机号取不到取固话)</span>&nbsp;&nbsp;&nbsp;<span class="conTel"></span><br/>
+                        <span class="caddress">上海市青浦区徐泾镇明珠路10181号</span>
+                    </td>
+                </tr>
+                <%--寄件人--%>
+                <tr style="height: 11mm;">
+                    <td colspan="1" style="border-right:0mm;font-size:25px;width:10mm;font-family:黑体;font-weight:bold;text-align:center;">
+                        寄
+                    </td>
+                    <td colspan="9"
+                        style="border-right:0mm;font-size:8pt;width:90mm;font-family:黑体;text-align:left;">
+                        <span class="shipperName">张小二</span>&nbsp;&nbsp;&nbsp;
+                        <span class="shipperPhone">400-617-9999</span><br/>
+                        <span class="saddress">寄件人地址</span>
+                    </td>
+                </tr>
+                <%--运单号条码--%>
+                <tr style="height: 23mm;">
+                    <td colspan="10"></td>
+                </tr>
+                <%--打印时间验视--%>
+                <tr style="height: 18mm; text-align: left;">
+                    <td colspan="2" valign="bottom" colspan="2" style="text-align:left;font-size:12px;font-family:黑体;width:20mm;border-right:0mm;">
+                    <span class="printTime">
+                    </span><br/>
+                        打印时间
+                    </td>
+                    <td colspan="6">
+                        <div class = "singlePlane">
+                            快件送达收件人地址,经收件人或收件人(寄件人)允许的代收人签字,视为送达。您的签字代表您已经签收次包裹,并已确定商品信息无损,包装完好、没有划痕、破损等表面质量问题。
+                            <br/>
+                        </div>
+                        <div class="sign">
+                            签收栏
+                        </div>
+                    </td>
+                    <td valign="bottom" colspan="2" style="text-align:center;font-size:12px;width:20mm;font-family:黑体;border-right:0mm;">
+                        已验视
+                    </td>
+                </tr>
+                <%--==================================下联=============================================--%>
+                <%--德邦图标--%>
+                <tr style="height: 12mm;" >
+                    <td colspan="4" align="center"></td>
+                    <td colspan="6" align="center">
+                    </td>
+                </tr>
+                <%--收件人--%>
+                <tr style="height: 10mm;">
+                    <td  colspan="1"style="border-right:0mm;font-family:黑体;font-size:11pt;text-align:center;"> <img src="{{URL::asset('./images/dbwl/revice.png')}}" /></td>
+                    <td  colspan="7"style="font-family:黑体;text-align:left; font-size:10px;font-weight:bold;" id="conMsg2">
+                        <span class="conName">张小二</span>&nbsp;&nbsp;
+                        <span class="conPhone">(优先取手机号取不到取固话)</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                        <span class="conTel"></span><br/><span class="caddress">上海市青浦区徐泾镇明珠路1018号</span></td>
+                    <%--<td  rowspan="2" valign="bottom">  <!-- <img src="../images/order/deppon_qrcode.jpg" /> --> </td>--%>
+                    <td valign="bottom" rowspan="2" style="width:180mm;border-right:0mm;">
+                        <img src="{{URL::asset('./images/dbwl/qrCode.jpg')}}" style="width: 18mm; height: 18mm" />
+                    </td>
+                </tr>
+                <%--寄件人--%>
+                <tr style="height: 10mm;">
+                    <td  colspan="1"style="font-weight:bold;border-right:0mm;font-family:黑体;font-size:14pt;width:10mm;text-align:center;">寄</td>
+                    <td  colspan="7"style="font-family:黑体;text-align:left; font-size:7pt;width:70mm">
+                        <span class="shipperName">张小二</span>&nbsp;&nbsp;&nbsp;
+                        <span class="shipperPhone">400-617-9999</span><br/>
+                        <span class="saddress">酒仙网电子商务股份有限公司</span>
+                </tr>
+                <tr style="text-align: left;">
+                    <td colspan="10">
+                        <div class="singlePlane2" style="height: 5mm; max-height: 5mm;">
+                            客户订单号:<span class="originalNumber"></span>
+                        </div>
+                        <div class="singlePlane2" style="height: 10mm; max-height: 10mm;">
+                            货物品名:<span id="cargoName" class="cargoName"></span>
+                        </div>
+                        <div class="singlePlane2" style="height: 11mm; max-height: 11mm;">
+                            备注:<span class="transNote" id="transNote"></span>
+                        </div>
+                        <div class="singlePlane2" style="height: 2mm; max-height: 2mm;">
+                            <!--                        <%&#45;&#45;用户订单号:<span class="orderNumber"></span>&#45;&#45;%>-->
+                            用户订单号:<span class="orderNumber"></span>
+                        </div>
+                    </td>
+                </tr>
+            </table>
+        </div>
+    </div>
+@endsection
 
 @section('lastScript')
     <style type="text/css">
@@ -293,6 +530,12 @@
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
     <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
+{{--    德邦物流--}}
+{{--    <script type="text/javascript" src="{{mix('js/lodop/jquery.js')}}"></script>--}}
+    <script type="text/javascript" src="{{URL::asset('js/lodop/jquery.PrintArea.js')}}"></script>
+    <script type="text/javascript" src="{{URL::asset('js/lodop/LodopFuncs.js')}}"></script>
+    <script type="text/javascript" src="{{URL::asset('js/lodop/myAlert.js')}}"></script>
+    <script type="text/javascript" src="{{URL::asset('js/lodop/myPrintKit.js')}}"></script>
     <script>
         let vue = new Vue({
             el:'#list',
@@ -393,6 +636,7 @@
                 selectTr:'',
                 dailyBilling:{screenDate:'', billing:''},
                 error:{screenDate:'', billing:''},
+                expresss:[{name:1,value:'是'},{name:0,value:'否'}]
             },
             mounted:function(){
                 $(".tooltipTarget").tooltip({'trigger':'hover'});
@@ -427,6 +671,7 @@
                         {name:'logistic',type:'select_multiple_select',tip:['输入关键词快速定位下拉列表,回车确定','选择要显示的承运商'],
                             placeholder:['承运商','定位或多选承运商'],data:this.logistics},
                         {name:'carType_id',type:'select',placeholder: '车型',data:this.carTypes},
+                        {name:'express_face_list',type:'select',placeholder: '快递面单是否打印',data:this.expresss},
                     ]
                 ];
                 let param=[];
@@ -483,6 +728,28 @@
                         });
                     })
                 },
+                //快递面单打印
+                expressFaceList(){
+                    if (checkData.length<1){
+                        window.tempTip.setDuration(2000);
+                        window.tempTip.show("未选择任何记录");
+                        return;
+                    }
+                    window.tempTip.confirm("确定要打印快递面单吗?",()=>{
+                        window.tempTip.setDuration(99999);
+                        window.tempTip.waitingTip("打印中,请稍等...");
+                        window.tempTip.postBasicRequest("{{url('transport/waybill/expressFaceList')}}",{ids:checkData},res=>{
+                            window.tempTip.cancelWaitingTip();
+                            window.tempTip.setDuration(2000);
+                            console.log(res);
+                            res.forEach((item, index)=>{
+                                console.log(item);
+                                //window.myPrintKit.printTest(item);
+                                printTest(item)
+                            })
+                        });
+                    })
+                },
                 rendingFloatBtn(){
                     let parent = $('.pick-btn :visible');
                     if (parent.length<1)return;

+ 1 - 0
routes/web.php

@@ -380,6 +380,7 @@ Route::group(['middleware'=>'auth'],function ($route){
             Route::post('waybillSplit','WaybillController@waybillSplit');
             Route::resource('waybillFinancialSnapshot','WaybillFinancialSnapshotsController');
             Route::resource('waybillFinancialExcepted','WaybillFinancialExceptedController');
+            Route::post('expressFaceList','WaybillController@expressFaceList');
         });
         Route::resource('waybill','WaybillController');
     });

+ 10 - 0
webpack.mix.js

@@ -35,4 +35,14 @@ mix.js('resources/js/elementUi.js','public/js/element-ui.js')
 mix.copy("resources/sass/animation.css",'public/css/animation.css');
 mix.js("resources/js/marked.js", "public/js/marked.js");
 
+//德邦快递
+mix.js('resources/js/lodop/jquery.js','public/js/lodop/jquery.js')
+mix.js('resources/js/lodop/jquery.PrintArea.js','public/js/lodop/jquery.PrintArea.js')
+mix.js('resources/js/lodop/LodopFuncs.js','public/js/lodop/LodopFuncs.js')
+mix.js('resources/js/lodop/myAlert.js','public/js/lodop/myAlert.js')
+mix.js('resources/js/lodop/myPrintKit.js','public/js/lodop/myPrintKit.js')
+mix.copy('resources/js/lodop/install_lodop32.exe','public/js/lodop/install_lodop32.exe')
+mix.copy('resources/js/lodop/install_lodop64.exe','public/js/lodop/install_lodop64.exe')
+mix.copy('resources/js/lodop/CLodop_Setup_for_Win32NT.exe','public/js/lodop/CLodop_Setup_for_Win32NT.exe')
+
 mix.version();

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác