var printPageUrl = ""; var billOrderList = []; var IsPrintOrderList = []; var orderCount = 0; var errorMsg = ""; let isConnected = false; function doConnect() { const service_status = $(".service_status") socket = new WebSocket('ws://127.0.0.1:5000');//菜鸟ws://127.0.0.1:13528, 13888抖音打印组件, //拼多多打印组件ws://127.0.0.1:5000;wss://127.0.0.1:18653 //京东 ws为9113;wss为9114 socket.onerror = function (e) { service_status.text('打印服务状态:未连接'); isConnected = false; } // 打开Socket socket.onopen = function (event) { service_status.text('打印服务状态:已连接'); isConnected = true; // 监听消息 socket.onmessage = function (event) { console.log('Client received a message', event); var response = JSON.parse(event.data); if (response.cmd == 'getPrinters') { getPrintersHandler(response);//处理打印机列表 } else if (response.cmd == 'setPrinterConfig') { printConfigHandler(response); } }; // 监听Socket的关闭 socket.onclose = function (event) { console.log('Client notified socket has closed', event); }; }; } function doGetPrinters() { var request = getRequestObject("getPrinters"); socket.send(JSON.stringify(request)); } function doSetPrintConfig(pName) { var request = getRequestObject("setPrinterConfig"); request.printer = {}; request.printer.name = pName; request.printer.needBottomLogo = false; request.printer.autoOrientation = false; request.printer.needTopLogo = false; request.printer.orientation = 0;//纵向 //request.printer.horizontalOffset = 0.2; //request.printer.verticalOffset = 0.3; request.printer.autoPageSize = false; //request.printer.paperSize.width = 55; //request.printer.paperSize.height = 95; request.printer.paperSize = {}; request.printer.paperSize.width = 75; request.printer.paperSize.height = 128; request.printer.orientation = 0; request.printer.autoOrientation = true; socket.send(JSON.stringify(request)); } function printConfigHandler(res) { console.log("xxxxx", res); } /*** * * 获取请求的UUID,指定长度和进制,如 * getUUID(8, 2) //"01001010" 8 character (base=2) * getUUID(8, 10) // "47473046" 8 character ID (base=10) * getUUID(8, 16) // "098F4D35"。 8 character ID (base=16) * */ function getUUID(len, radix) { var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''); var uuid = [], i; radix = radix || chars.length; if (len) { for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]; } else { var r; uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'; uuid[14] = '4'; for (i = 0; i < 36; i++) { if (!uuid[i]) { r = 0 | Math.random() * 16; uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; } } } return uuid.join(''); } /*** * 构造request对象 */ function getRequestObject(cmd) { var request = new Object(); request.requestID = getUUID(8, 16); request.version = "1.0"; request.cmd = cmd; return request; } /*** * 获取自定义区数据以及模板URL * waybillNO 电子面单号 */ function getCustomAreaData(waybillNO) { //获取waybill对应的自定义区的JSON object,此处的ajaxGet函数是伪代码 var jsonObject = ajaxGet(waybillNO); var ret = new Object(); ret.templateURL = jsonObject.content.templateURL; ret.data = jsonObject.content.data; return ret; } /*** * 获取电子面单Json 数据 * waybillNO 电子面单号 */ function getWaybillJson(waybillNO) { //获取waybill对应的json object,此处的ajaxGet函数是伪代码 var jsonObject = ajaxGet(waybillNO); return jsonObject; } /** * 弹窗模式配置打印机 * */ //var request = getRequestObject("printerConfig"); //webSocket.send(JSON.stringify(request)); /** * 打印电子面单 * printer 指定要使用那台打印机 * waybillArray 要打印的电子面单的数组 */ function doPrint(data, sellerMemo) { var nJsonData = JSON.parse(data); var docuData = nJsonData.waybillCloudPrintResponseList[0]; var printStr = docuData.printData; printStr = printStr.replace(/\\/g, ""); var printData = JSON.parse(printStr); console.log(printData); var request = getRequestObject("print"); request.task = new Object(); request.task.taskID = getUUID(8, 10); request.task.preview = false; request.task.printer = mini.get("txtBillPrinter_CN").getText(); var documents = new Array(); var doc = new Object(); doc.documentID = docuData.waybillCode; var content = new Array(); var obj = {}; obj.templateURL = mini.get("txtBillModel_CN").getValue(); var selfData = {}; selfData.recipient = printData.data.recipient; selfData.routingInfo = printData.data.routingInfo; selfData.sender = printData.data.sender; selfData.shippingOption = printData.data.recipient.shippingOption; selfData.waybillCode = docuData.waybillCode; selfData.packageInfo = printData.data.packageInfo; //selfData.item_name = "我是你要的商品芭比娃娃。。。"; obj.data = selfData content.push(obj); var Obj2 = {}; Obj2.data = {}; Obj2.data.value = ""; //Obj2.templateURL = "http://cloudprint.cainiao.com/template/customArea/440439"; Obj2.templateURL = printPageUrl + "/waybillPrintPage.aspx?value=" + sellerMemo; content.push(Obj2); doc.contents = content; documents.push(doc); request.task.documents = documents; socket.send(JSON.stringify(request)); } function doPrintSF(iData, sellerMemo) { var mainDataStr = iData.data; mainDataStr = mainDataStr.replace(/\\/g, ""); //mainDataStr = mainDataStr.replace(/n/g, ""); var mainData = JSON.parse(mainDataStr); var docData = mainData.data[0] console.log("SFSFSFSF", docData); var request = getRequestObject("print"); request.task = new Object(); request.task.taskID = getUUID(8, 10); request.task.preview = false; request.task.printer = mini.get("txtBillPrinter").getText(); var documents = new Array(); var doc = new Object(); doc.documentID = docData.waybillCode; var content = new Array(); var obj = {}; //obj.templateURL = docData.templateURL; //var selfData = {}; //selfData.recipient = docData.printData.receiverInfo; ////selfData.routingInfo = //selfData.sender = docData.printData.deliverInfo; ////selfData.shippingOption = deliverInfo; //selfData.waybillCode = docData.waybillCode; //selfData.packageInfo = printData.data.packageInfo; //selfData.item_name = "我是你要的商品芭比娃娃。。。"; obj.templateURL = docData.templateURL; obj.data = docData.printData; content.push(obj); var Obj2 = {}; Obj2.data = {}; Obj2.data.value = ""; //Obj2.templateURL = "http://cloudprint.cainiao.com/template/customArea/440439"; Obj2.templateURL = printPageUrl + "/waybillPrintPage2.aspx?value=" + sellerMemo; content.push(Obj2); doc.contents = content; documents.push(doc); request.task.documents = documents; socket.send(JSON.stringify(request)); } function doPrintEn(data, sellerMemo) { var nJsonData = JSON.parse(data); var docuData = nJsonData.response.data.content[0]; //var printStr = docuData.printData; //printStr = printStr.replace(/\\/g, ""); //var printData = JSON.parse(printStr); //console.log(printData); var request = getRequestObject("print"); request.task = new Object(); request.task.taskID = getUUID(8, 10); request.task.preview = false; request.task.printer = mini.get("txtBillPrinter").getText(); var documents = new Array(); var doc = new Object(); doc.documentID = docuData.waybillCode; var content = new Array(); //var obj = {}; //obj.templateURL = mini.get("txtBillModel").getValue(); //var selfData = {}; //selfData.recipient = printData.data.recipient; //selfData.routingInfo = printData.data.routingInfo; //selfData.sender = printData.data.sender; //selfData.shippingOption = printData.data.recipient.shippingOption; //selfData.waybillCode = docuData.waybillCode; //selfData.packageInfo = printData.data.packageInfo; //selfData.item_name = "我是你要的商品芭比娃娃。。。"; //obj.data = selfData content.push(docuData.props); console.log("doPrintEn", sellerMemo); let result_str = ""; for (let i = 0; i < sellerMemo.length; i++) { if (i % 20 === 0 && i != 0) { result_str += "\n"; } result_str += sellerMemo[i]; } var Obj2 = {}; Obj2.data = {}; Obj2.data.list = []; var objsmall = new Object(); objsmall.text = result_str; //objsmall.value = ""; Obj2.data.list.push(objsmall); Obj2.data.text = result_str; Obj2.templateURL = printPageUrl + "/PDDXMLFile.xml"; content.push(Obj2); doc.contents = content; documents.push(doc); request.task.documents = documents; socket.send(JSON.stringify(request)); } //function doPrint(data) { // var docuData = data.cainiao_waybill_ii_get_response.modules.waybill_cloud_print_response[0]; // var printStr = docuData.print_data; // printStr = printStr.replace(/\\/g, ""); // var printData = JSON.parse(printStr); // console.log(printData); // var request = getRequestObject("print"); // request.task = new Object(); // request.task.taskID = getUUID(8, 10); // request.task.preview = false; // request.task.printer = mini.get("txtBillPrinter").getText(); // var documents = new Array(); // var doc = new Object(); // doc.documentID = docuData.waybill_code; // var content = new Array(); // var obj = {}; // obj.templateURL = mini.get("txtBillModel").getValue(); // var selfData = {}; // selfData.recipient = printData.data.recipient; // selfData.routingInfo = printData.data.routingInfo; // selfData.sender = printData.data.sender; // selfData.shippingOption = printData.data.recipient.shippingOption; // selfData.waybillCode = docuData.waybill_code; // selfData.packageInfo = printData.data.packageInfo; // selfData.item_name = "我是你要的商品芭比娃娃。。。"; // obj.data = selfData // content.push(obj); // var Obj2 = {}; // Obj2.data = {}; // Obj2.data.item_name = "我是你要的商品芭比娃娃"; // content.push(Obj2); // doc.contents = content; // documents.push(doc); // request.task.documents = documents; // socket.send(JSON.stringify(request)); //} function getPrintersHandler(jsonData) { console.log("xxxx", jsonData); if (jsonData.printers != undefined && jsonData.printers.length > 0) { mini.get("txtBillPrinter").setData(jsonData.printers); mini.get("txtBillPrinter_CN").setData(jsonData.printers); } } //打开弹窗 function waybillFn() { var rec = grid.getSelecteds(); if (rec != undefined && rec != "" && rec.length > 0) { if (!isConnected) { return mini.alert("打印机未连接") } //edit_id = rec.tid; var offline_str = ""; for (var item of rec) { if (item.IsOffLineOrder == 1) { offline_str += item.ctid; offline_str += ","; } } if (offline_str.length > 0) { mini.alert("选中订单中有线下单:" + offline_str + "线下单请使用“菜鸟打单"); return; } mini.get("waybill_win").show(); $("#win_btns").show(); $("#qr_input").hide(); $("#waybill_win").find("input").val(""); doGetPrinters(); var wb_cpname = localStorage.getItem("waybill_cpname"); var wb_cpcode = localStorage.getItem("waybill_cpcode"); //var wb_tempid = localStorage.getItem("waybill_tempid"); //var wb_temptext = localStorage.getItem("waybill_temptext"); var wb_printer = localStorage.getItem("waybill_printer"); if (wb_cpcode != undefined && wb_cpcode != null) { mini.get("txtBillCom").setValue(wb_cpcode); //mini.get("txtBillModel").setValue(wb_tempid); //mini.get("txtBillModel").setText(wb_temptext); mini.get("txtBillPrinter").setText(wb_printer); mini.get("txtBillPrinter").setValue(wb_printer); doSetPrintConfig(wb_printer); } } else { mini.alert("请选中一行记录!"); } } function QRwaybillFn() { if (!isConnected) { return mini.alert("打印机未连接") } mini.get("waybill_win").show(); $("#waybill_win").find("input").val(""); $("#win_btns").hide(); $("#qr_input").show(); doGetPrinters(); var wb_cpname = localStorage.getItem("waybill_cpname"); var wb_cpcode = localStorage.getItem("waybill_cpcode"); var wb_printer = localStorage.getItem("waybill_printer"); if (wb_cpcode != undefined && wb_cpcode != null) { mini.get("txtBillCom").setValue(wb_cpcode); mini.get("txtBillPrinter").setText(wb_printer); mini.get("txtBillPrinter").setValue(wb_printer); doSetPrintConfig(wb_printer); } } function onBillComChanged(e) { var rec = e.selected; console.log(rec); var id = rec.id; var name = rec.name; //mini.get("txtBillModel").setValue(""); //var url = "../handler/sync.ashx?t=get_waybill_model&pid=" + id //mini.get("txtBillModel").setUrl(url); //var printTem = localStorage.getItem("waybill_templates"); //console.log("printem", printTem); //if (printTem != undefined && printTem != "") { // printTem = JSON.parse(printTem); //} //console.log("printTemplate", printTem); //var cname = name.split("-")[0]; //var tempList = printTem.response.data.content; //var needList = []; //if (tempList.length > 0) { // for (var tp of tempList) { // if (tp.name.indexOf(cname) != -1) { // needList.push(tp); // } // } //} //mini.get("txtBillModel").setData(needList); } function onBillPrinterChanged(e) { doSetPrintConfig(mini.get("txtBillPrinter").getText()); } function saveWaybillFn() { //var url = "http://d3.diansan.com/d3/open/print/express/index.html?waybillCodeList=YT5608493119031&templateId=1&requestId=1909374336748825642&sourceType=THIRD_ORDER"; //openWaiWin("打印面单", url, 900, 700, null); //return; mini.get("id_saveWaybillBtn").disable(); //mini.get("id_sysWaybillBtn").disable(); IsPrintOrderList = []; billOrderList = []; billOrderList = grid.getSelecteds(); orderCount = billOrderList.length; errorMsg = ""; if (billOrderList.length <= 0) return; console.log(billOrderList); progressShow("电子面单打印中...进度:1"); sendPrintData(0); } function sendPrintData(iTag) { if (iTag >= orderCount) { //console.log("return" + billOrderList.length); grid.reload(); mini.get("id_saveWaybillBtn").enable(); //mini.get("id_sysWaybillBtn").enable(); return; } //console.log("start" + billOrderList.length); var item = billOrderList[iTag]; if (item.SplitTag.length > 0) { isHaveOtherOrder(item.ctid, item, iTag, item.tid); } else { doRealGetPrintData(item, iTag); } } function doRealGetPrintData(item, iTag, isTogether = 0) { var ctid = item.ctid; var cpcode = mini.get("txtBillCom").getValue(); var cpname = mini.get("txtBillCom").getText(); //var tempId = mini.get("txtBillModel").getValue(); if (cpcode == "") { alert("快递公司和模板不能为空!"); return; } var parms = new Object(); parms.ctid = ctid; parms.cpcode = cpcode; parms.cpname = cpname; parms.together = isTogether; $("#progressShowDiv").html("电子面单打印中...进度:" + (iTag + 1)); postAjaxSync("set_erp_printwaybill", parms, function (data) { //console.log("back" + billOrderList.length); console.log("电子面单返回data", data); if (data.restype == 0) { errorMsg += item.ctid; errorMsg += data.data; errorMsg += ","; } else { if (cpcode == "SFFQ-LY") { doPrintSF(data, item.seller_memo); } else doPrintEn(data.data, item.seller_memo); } if (iTag < orderCount - 1) { //console.log("another" + billOrderList.length); sendPrintData(iTag + 1); } else { localStorage.setItem("waybill_cpcode", cpcode); localStorage.setItem("waybill_cpname", cpname); localStorage.setItem("waybill_printer", mini.get("txtBillPrinter").getText()); grid.reload(); mini.get("id_saveWaybillBtn").enable(); //mini.get("id_sysWaybillBtn").enable(); mini.get("waybill_win").hide(); progressHide(); if (errorMsg != "") { mini.alert(errorMsg); } //console.log("end" + billOrderList.length); } }); } function isHaveOtherOrder(ctid, item, iTag, tid) { for (var ltid of IsPrintOrderList) { if (ltid == tid) { sendPrintData(iTag + 1); return; } } postAjax("get_erp_sameorders", "ctid=" + ctid, function (data) { if (data.data > 1) { mini.showMessageBox({ title: "提示!", width: 500, //宽度 height: 200, //高度 iconCls: "mini-messagebox-question", buttons: ["继续打单", "合并打单", "取消打印"], message: "请注意:该订单有相同发货地址,共 " + data.data + " 单!", callback: function (action) { if (action == "继续打单") { doRealGetPrintData(item, iTag); } else if (action == "合并打单") { IsPrintOrderList.push(tid); doRealGetPrintData(item, iTag, 1); } else if (action == "取消打印") { mini.get("id_saveWaybillBtn").enable(); return; } } }); return; } else { doRealGetPrintData(item, iTag); } }); } function cancelWaybillFn() { mini.get("waybill_win").hide(); } //菜鸟物流云打印--------------------------------------------------------------------------------------------======================================= function CNwaybillFn() { var rec = grid.getSelected(); if (rec != undefined && rec != "") { edit_id = rec.tid; mini.get("waybill_win_CN").show(); $("#waybill_win_CN").find("input").val(""); doGetPrinters(); var wb_cpname = localStorage.getItem("waybill_cpname_CN"); var wb_cpcode = localStorage.getItem("waybill_cpcode_CN"); var wb_tempurl = localStorage.getItem("waybill_tempurl_CN"); var wb_temptext = localStorage.getItem("waybill_temptext_CN"); var wb_printer = localStorage.getItem("waybill_printer_CN"); if (wb_cpcode != undefined && wb_cpcode != null) { mini.get("txtBillCom_CN").setValue(wb_cpcode); mini.get("txtBillModel_CN").setValue(wb_tempurl); mini.get("txtBillModel_CN").setText(wb_temptext); mini.get("txtBillPrinter_CN").setText(wb_printer); mini.get("txtBillPrinter_CN").setValue(wb_printer); doSetPrintConfig(wb_printer); } } else { mini.alert("请选中一行记录!"); } } function CNonBillComChanged(e) { var rec = e.selected; console.log(rec); var cpCode = rec.cpCode; var id = cpCode.split("_")[1]; mini.get("txtBillModel_CN").setValue(""); var url = "../handler/sync.ashx?t=get_waybill_model&pid=" + id mini.get("txtBillModel_CN").setUrl(url); } function CNonBillPrinterChanged(e) { doSetPrintConfig(mini.get("txtBillPrinter_CN").getText()); } function CNsaveWaybillFn() { billOrderList = []; billOrderList = grid.getSelecteds(); orderCount = billOrderList.length; errorMsg = ""; if (billOrderList.length <= 0) return; progressShow("电子面单打印中...进度:1"); sendPrintDataEN(0); } function sendPrintDataEN(iTag) { if (iTag >= orderCount) { //console.log("return" + billOrderList.length); grid.reload(); return; } var rec = billOrderList[iTag]; var ctid = rec.ctid; var cpcode = mini.get("txtBillCom_CN").getValue(); var cpname = mini.get("txtBillCom_CN").getText(); var tempUrl = mini.get("txtBillModel_CN").getValue(); if (cpcode == "" || tempUrl == "") { alert("快递公司和模板不能为空!"); return; } var parms = new Object(); parms.ctid = ctid; parms.cpcode = cpcode; parms.cpname = cpname; parms.tempurl = tempUrl; $("#progressShowDiv").html("电子面单打印中...进度:" + (iTag + 1)); postAjaxSync("set_erp_printwaybill_cn", parms, function (data) { console.log("set_erp_printwaybill_cn", data); if (data.restype == 0) { errorMsg += rec.ctid; errorMsg += data.data; errorMsg += ","; } else doPrint(data.data, rec.seller_memo); if (iTag < orderCount - 1) { sendPrintDataEN(iTag + 1); } else { localStorage.setItem("waybill_cpcode_CN", cpcode); localStorage.setItem("waybill_cpname_CN", cpname); localStorage.setItem("waybill_tempurl_CN", tempUrl); localStorage.setItem("waybill_temptext_CN", mini.get("txtBillModel_CN").getText()); localStorage.setItem("waybill_printer_CN", mini.get("txtBillPrinter_CN").getText()); grid.reload(); progressHide(); mini.get("waybill_win_CN").hide(); if (errorMsg.length > 0) { mini.alert(errorMsg); } } }); } function CNcancelWaybillFn() { mini.get("waybill_win_CN").hide(); } window.onload = function () { $("body").keydown(function (event) { if (event.keyCode == 13) { let value = $("#qr_code").val(); if (value.length > 0) { $("#qr_code").val(""); let parms = { 'ctid': value }; postAjaxSync("get_erp_qr_waitdeliverylist", parms, function (data) { if (data?.data?.length >= 1) { let item = data?.data[0]; if (item.OrderState > 6) { if (!confirm("已发货是否继续打印?")) return; } if (item.type != 'PDD') { return mini.alert("只能打印拼多多订单") } QRprint(item) $("#qr_print_result").append(`
${value}
`) } }) } } }) } function QRprint(item) { billOrderList = []; billOrderList.push(item) progressShow("电子面单打印中...进度:1"); sendPrintData(0); }