bztang-admin/plugins/exhelper/views/admin/supplier_doprint.blade.php

783 lines
32 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@extends('layouts.base')
@section('content')
@section('title', trans('单个打印'))
<style>
.mask {
display: none;
width: 100%;
height: 100%;
z-index: 1000;
position: fixed;
background-color: rgba(0, 0, 0, 0.6);
top: 0;
left: 0;
}
.mask .addDataNode {
display: none;
position: relative;
left: 50%;
top: 50%;
color: white;
}
</style>
<div class="rightlist">
<div class="mask">
<div class="addDataNode">正在推送打印任务...</div>
{{-- <div class="addDataNode" onclick="cancel()">取消</div>--}}
</div>
<div class="panel panel-default">
<div class="panel-heading">查找订单</div>
<div style="padding: 10px; padding-bottom: 0px;" class="panel-body">
<div class="alert alert-info">数据量大可能会引起卡顿,请在搜索前根据需要选择您的搜索条件。</div>
<form id="form1" role="form" class="form-horizontal" method="post" action="">
<div class="form-group">
<div class="col-sm-8 col-lg-12 col-xs-12">
<div class="input-group">
<div class="input-group-addon">订单号</div>
<input type="text" placeholder="订单号" value="" name="search[order_sn]" class="form-control">
<div class="input-group-addon">快递单号</div>
<input type="text" placeholder="快递单号" value="" name="search[express_sn]" class="form-control">
<div class="input-group-addon">用户信息</div>
<input type="text" placeholder="用户手机号/姓名/昵称" value="" name="search[member]" class="form-control">
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-12 col-lg-12 col-xs-12">
<div class="input-group">
<div class="input-group-addon">订单状态</div>
<select class="form-control" name="search[order_status]">
<option value="">全部</option>
<option value="0">待付款</option>
<option value="1" selected="">待发货</option>
<option value="2">已发货</option>
<option value="3">已完成</option>
<option value="-1">已关闭</option>
</select>
<div class="input-group-addon">快递单打印状态</div>
<select class="form-control" name="search[express_print_status]">
<option value="">全部</option>
<option value="no">未打印</option>
{{--<option value="1">部分打印</option>--}}
<option value="end">打印完成</option>
</select>
<div class="input-group-addon">发货单打印状态</div>
<select class="form-control" name="search[send_print_status]">
<option selected="" value="">全部</option>
<option value="no" >未打印</option>
{{--<option value="1">部分打印</option>--}}
<option value="end">打印完成</option>
</select>
<div class="input-group-addon">电子面单打印状态</div>
<select class="form-control" name="search[panel_print_status]">
<option selected="" value="">全部</option>
<option value="no" >未打印</option>
{{--<option value="1">部分打印</option>--}}
<option value="end">打印完成</option>
</select>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-8 col-lg-12 col-xs-12">
<div class="input-group">
<div class="input-group-addon">下单时间</div>
<div class="col-sm-3">
<label class="radio-inline">
<input type="radio" name="search[create_order_time]" value="0" checked="checked">不搜索
</label>
<label class="radio-inline">
<input type="radio" name="search[create_order_time]" value="1">搜索
</label>
</div>
<div style="height: 34px; float: left;">
<script type="text/javascript">
require(["daterangepicker"], function($) {
$(function() {
$(".daterange.daterange-time").each(function() {
var elm = this;
$(this).daterangepicker({
startDate: $(elm).prev().prev().val(),
endDate: $(elm).prev().val(),
format: "YYYY-MM-DD HH:mm",
timePicker: true,
timePicker12Hour: false,
timePickerIncrement: 1,
minuteStep: 1
}, function(start, end) {
$(elm).find(".date-title").html(start.toDateTimeStr() + "" + end.toDateTimeStr());
$(elm).prev().prev().val(start.toDateTimeStr());
$(elm).prev().val(end.toDateTimeStr());
});
});
});
});
</script>
<input type="hidden" value="{!! date('Y-m-d H:m', strtotime('-1 month')) !!}" name="time[start]">
<input type="hidden" value="{!! date('Y-m-d H:m') !!}" name="time[end]">
<button type="button" class="btn btn-default daterange daterange-time" data-original-title="" title=""><span class="date-title"><?php echo date('Y-m-d H:i:s', strtotime("-1 month"))?> 至 <?php echo date('Y-m-d H:i:s',time())?></span> <i class="fa fa-calendar"></i></button>
</div>
<div style="height: 34px; width: 150px; float: left; padding-left: 5px;">
<button id="search-btn" onclick="search()" class="btn btn-primary" type="button" data-original-title="" title=""><i class="fa fa-search"></i> 搜索</button>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
<div id="orderresult" style="height: auto; overflow: hidden;"></div>
</div>
<div class="modal fade" id="errorModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" id="myModalLabel">未打印订单</h4>
</div>
<div class="modal-body">
<table class="table table-bordered">
<thead>
<tr>
<th>订单编号</th>
<th>错误原因</th>
</tr>
</thead>
<tbody id="errorMsg">
{{--js填充--}}
</tbody>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal -->
</div>
<object id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width="0"
height="0">
<embed id="LODOP_EM" type="application/x-print-lodop" width="0" height="0" pluginspage="{{resource_get('plugins/exhelper/src/common/lodop/install_lodop32.exe', 1)}}"></embed>
</object>
<script language='javascript' src="{{resource_get('plugins/exhelper/src/common/static/js/LodopFuncs.js', 1)}}"></script>
</div>
<!-- -->
<script language="javascript">
var LODOP=getCLodop();
// 执行搜索
function search(){
var data = {
order_sn: $.trim($(":input[name='search[order_sn]']").val()),
express_sn: $.trim($(":input[name='search[express_sn]']").val()),
member: $.trim($(":input[name='search[member]']").val()),
order_status: $.trim($("select[name='search[order_status]']").val()),
express_print_status: $.trim($("select[name='search[express_print_status]']").val()),
send_print_status: $.trim($("select[name='search[send_print_status]']").val()),
panel_print_status: $.trim($("select[name='search[panel_print_status]']").val()),
create_order_time: $(":input[name='search[create_order_time]']:checked").val(),
time: {start: $(":input[name='time[start]']").val(),end: $(":input[name='time[end]']").val()}
};
$('#search-btn').html("<i class='fa fa-spinner fa-spin'></i> 正在搜索...");
$.ajax({
url: "{!! yzWebUrl('plugin.exhelper.admin.supplier-print-once.search') !!}",
data: {search:data},
success:function(html){
$('#search-btn').html("<i class='fa fa-search'></i> 搜索")
$('#orderresult').html(html);
setallPrintBtnState(false);
$('.order_item').click(function(){
setalldoprintDivIsShow(false)
ordersDivIsShow(true)
clearCheckBoxChange()
$('#orders').find('.panel-body').html("<i class='fa fa-spinner fa-spin'></i> 正在加载...")
$.ajax({
url: "{!! yzWebUrl('plugin.exhelper.admin.supplier-print-once.detail') !!}",
data: {orderids: $(this).data('orderids')},
success:function(html){
$('#orders').html(html);
}
});
})
//全选
$("#allChange").click(function (){
var oneChangeLen = $(".oneChange").length;
if(oneChangeLen == 0){
alert('暂无订单!')
return false;
}
var _thisState = $(this).is(":checked");
$(".oneChange").prop("checked",_thisState)
setallPrintBtnState(_thisState);
})
//单选
$(".oneChange").click(function () {
setAllChangeState();
var oneChangeState = $(".oneChange").is(":checked");
setallPrintBtnState(oneChangeState);
})
//开始打印
$('.alldoprint').click(function () {
if($(this).attr('disabled')){
return false;
}else{
var thisCate = $(this).data("cate");
printAll(thisCate)
}
})
}
});
}
/**
* 根据checkbox设置是否勾选全选按钮
*/
function setAllChangeState()
{
var stateNum = 0;
var oneChangeLen = $('.oneChange').length;
$('.oneChange').each(function () {
if( $(this).is(":checked")){
stateNum++
}else{
stateNum--
}
});
if(stateNum == oneChangeLen){
$("#allChange").prop("checked",true)
}else{
$("#allChange").prop("checked",false)
setallPrintBtnState(false);
}
}
/**
* 多选打印显示控制
* @param bool
*/
function setalldoprintDivIsShow(bool)
{
if(bool){
$('#alldoprintDiv').show();
}else{
$('#alldoprintDiv').hide();
}
}
/**
* 打开了详细信息就取消全部checkBox勾选
*/
function clearCheckBoxChange()
{
$("#allChange").prop("checked",false)
$(".oneChange").prop("checked",false)
}
/**
* 订单详情DIV展示控制
* @param bool
*/
function ordersDivIsShow(bool)
{
if(bool){
$('#orders').show()
}else{
$('#orders').hide()
}
}
/**
* 控制打印按钮
* @param _thisState
*/
function setallPrintBtnState(_thisState){
if(_thisState){
// 正常
$("#alldoprint1").data("state",0).removeClass("btn-disabled").addClass("btn-primary").attr('disabled', false);
$("#alldoprint2").data("state",0).removeClass("btn-disabled").addClass("btn-warning").attr('disabled', false);
$("#alldoprint3").data("state",0).removeClass("btn-disabled").addClass("btn-default").attr('disabled', false);
$("#alldosend").data("state",0).removeClass("btn-disabled").addClass("btn-success").attr('disabled', false);
ordersDivIsShow(false)
setalldoprintDivIsShow(true)
}else{
$("#alldoprint1").data("state",1).removeClass("btn-primary").addClass("btn-disabled").attr('disabled', true);
$("#alldoprint2").data("state",1).removeClass("btn-warning").addClass("btn-disabled").attr('disabled', true);
$("#alldoprint3").data("state",1).removeClass("btn-default").addClass("btn-disabled").attr('disabled', true);
ordersDivIsShow(true)
setalldoprintDivIsShow(false)
}
}
/**
* 全选打印
* @param type
* @returns {boolean}
*/
function printAll(type)
{
if(confirm("多张单打印无预览效果,直接打印!确定吗?")){
$('.mask,.addDataNode').show();
}else{
return false;
}
//打印快递单或发货单
var printDatasTemp;
var printUser;
var printTemp;
var response;
var orders;
var ordersNum;
var orderIds = getOrderIds();
var printNum = 0; //打印次数
if(type == 3){
printElectronics();
return;
}
//打印快递单或发货单
var url = "{!! yzWebUrl('plugin.exhelper.admin.supplier-print-once.print-all') !!}";
var data = {
type:type,
order_ids:orderIds,
};
// 执行ajax获取打印模版
$.ajax({
type: 'POST',
url: url,
data: data,
dataType:'json',
async:false,
success: function(data){
// console.log(data);
// return;
response = data.data;
if(data.result==1){
printDatasTemp = response.temp.respDatas;
printUser = response.temp.respUser;
printTemp = response.temp.respTemp;
orders = response.orders;
ordersNum = orders.length;
}else{
alert(data.msg);
return;
}
}
});
console.log('orders',orders);
orders.forEach((order, orderIndex) => {
/*打印的模板数据*/
var rep_sendInfo = order.address.sendinfo;
var rep_realName = order.address.realname;
var rep_nickName = order.address.realname;
var rep_mobile = order.address.mobile;
var rep_province = order.addressInfo.province;
var rep_city = order.addressInfo.city;
var rep_area = order.address.district;
var rep_address = order.address.address;
var rep_ordersn = '';
let price=0;
let dispatchprice = 0;
var info = [];
//克隆对象
var printDatas = $.extend(true, {}, printDatasTemp);
/*打印的模板数据*/
order.list.forEach(_order => {
if(rep_ordersn){
rep_ordersn += ", ";
}
rep_ordersn += _order.order_sn;
price += Number(_order.price);
dispatchprice += Number(_order.dispatch_price);
_order.has_many_order_goods.forEach(goods => {
info.push(setOrderInfos(_order, goods))
});
})
saveSenderAll({rep_realName, rep_mobile, rep_province, rep_city, rep_area, rep_address, rep_ordersn})
console.log('order',order);
/*打印模板的初始化*/
$.each(printDatas,function(tempIndex){
this.items = this.items.replace("sendinfo",rep_sendInfo);
this.items = this.items.replace("realname",rep_realName);
this.items = this.items.replace("nickname",rep_nickName);
this.items = this.items.replace("mobile",rep_mobile);
this.items = this.items.replace("province",rep_province);
this.items = this.items.replace("city",rep_city);
this.items = this.items.replace("area",rep_area);
this.items = this.items.replace("address",rep_address);
this.items = this.items.replace("ordersn",rep_ordersn);
this.items = this.items.replace("shopname",printTemp.shopname);
});
LODOP.PRINT_INITA(0,0,printTemp.width+"mm",printTemp.height+"mm","单据打印");
LODOP.NewPageA();
LODOP.SET_PRINT_PAGESIZE(1,printTemp.width+"mm",printTemp.height+"mm", "");
if(printTemp.bg){
// LODOP.ADD_PRINT_IMAGE(0,0,printTemp.width,printTemp.height,"<img border='0' src='"+printTemp.bg+"'>");
LODOP.ADD_PRINT_SETUP_BKIMG("<img border='0' src='"+printTemp.bg+"'>");
LODOP.SET_SHOW_MODE("BKIMG_IN_PREVIEW",true);//设置预览包含背景图
LODOP.SET_SHOW_MODE("BKIMG_PRINT",true);//设置打印背景图
LODOP.SET_SHOW_MODE("BKIMG_IN_PREVIEW",1);
}
LODOP.SET_PRINT_MODE("AUTO_CLOSE_PREWINDOW",true);
/*打印模板的初始化*/
let isMerge=false;
let dispatchIsMerge=false;
$.each(printDatas,function(i,d){
//打印准备
if(d.cate==1){
LODOP.ADD_PRINT_TEXTA('"t_'+i+'"',d.top+"px",d.left+"px",d.width+"px",d.height+"px",d.pre+d.items+d.last);
if(d.color){
LODOP.SET_PRINT_STYLEA('"t_'+i+'"',"FontColor",d.color); // 文字颜色
}
if(d.bold){
LODOP.SET_PRINT_STYLEA('"t_'+i+'"',"Bold",1); // 文字加粗
}
if(d.align){
LODOP.SET_PRINT_STYLEA('"t_'+i+'"',"Alignment",d.align); // 对齐方式
}
var FontSize = !d.size?"12":d.size;
LODOP.SET_PRINT_STYLEA('"t_'+i+'"',"FontSize",FontSize); //文字大小
var FontName = !d.font?"微软雅黑":d.font;
LODOP.SET_PRINT_STYLEA('"t_'+i+'"',"FontName",FontName); // 文字字体
}
if(d.cate==2){
var strings = d.string.split(',');
var values = d.items.split(',');
var _html = '<table border style="width: '+d.width+'; display:table-fixed; border-collapse:collapse;border-spacing:0;border-left:1px solid '+d.color+';border-top:1px solid '+d.color+'; corlor:'+d.color+'; ';
if(d.align==1){
_html += "text-align:left;"
}
if(d.align==2){
_html += "text-align:center;"
}
if(d.align==3){
_html += "text-align:right;"
}
_html += '">';
_html += '<tr>';
$.each(strings, function(ii,s) {
_html += '<td style="border-right:1px solid '+d.color+'; border-bottom:1px solid '+d.color+'; font-size:'+d.size+'pt; font-family:'+d.font+'; color:'+d.color+';">'+s;
_html += '</td>';
});
order.list.forEach((_order, index) => {
_html += '</tr>';
$.each(values, function(iii,val) {
str = '';
dispatchStr='';
if (val == 'price'){
if(isMerge===false){
str = 'rowspan='+rowLength+' style="text-align:center;"';
_html += '<td '+str+' style="border-right:1px solid '+d.color+'; border-bottom:1px solid '+d.color+'; font-size:'+d.size+'pt; font-family:'+d.font+'; color:'+d.color+';">';
_html += (price).toFixed(2);
isMerge=true;
}
}else if (val == 'dispatchprice') {
if (dispatchIsMerge ===false){
dispatchStr = 'rowspan='+rowLength+' style="text-align:center;"';
_html += '<td '+dispatchStr+' style="border-right:1px solid '+d.color+'; border-bottom:1px solid '+d.color+'; font-size:'+d.size+'pt; font-family:'+d.font+'; color:'+d.color+';">';
_html += (dispatchprice).toFixed(2);
dispatchIsMerge=true;
}
}else{
_html += '<td style="border-right:1px solid '+d.color+'; border-bottom:1px solid '+d.color+'; font-size:'+d.size+'pt; font-family:'+d.font+'; color:'+d.color+';">';
}
// _html += '<td '+str+' style="border-right:1px solid '+d.color+'; border-bottom:1px solid '+d.color+'; font-size:'+d.size+'pt; font-family:'+d.font+'; color:'+d.color+';">';
if(val=="printsn"){
_html += index+1;
}else{
if (val == 'price'&&isMerge==true) {
_html += '';
}else if (val == 'dispatchprice'&&dispatchIsMerge==true){
_html += '';
}
else {
_html += info[index][val];
}
}
_html += '</td>';
});
_html += '</tr>';
})
_html += '</table>';
LODOP.ADD_PRINT_HTM(d.top+"px", d.left+"px", d.width+"px", d.height+"px", _html);
}
});
//选择默认的打印机
LODOP.SET_PRINTER_INDEX(-1)
// 获取打印状态
if (LODOP.CVERSION) {
printNum++
if(LODOP.PRINT()){
console.log("打印次数", printNum)
if(printNum == ordersNum){
console.log('打印完成!')
successHander();
}
}else{
alert("打印已取消");
return;
}
};
})
}
/**
* 全部打印成功回调
*/
function successHander()
{
setTimeout(function () {
cancel("推送完成!");
}, 1000); // 延时1秒
}
/**
* 关闭loading
*/
function cancel(msg)
{
$('.mask,.addDataNode').hide();
alert(msg);
}
/**
* 订单的详细信息
* @param order
* @param goods
* @returns {*|{note: string, odsn: (*|string), goodname: *, productsn: *, changedispatchprice: *, goodssn: *, goodoption: string, goodshortname: (*|string), deductprice: *, deductenough: (*|string), discountprice: *, goodweight: string, goodunit: methods.form.goods.sku, dispatchprice: (*|number), total: number, goodsprice: *, allprice: string, price: (*|string), realprice: string, vipdiscount: (*|string), productprice: string, marketprice: string, couponprice: number}}
*/
function setOrderInfos(order, goods)
{
var _ordersn = order.order_sn // 订单编号
var _goodname = goods.title; // 商品名称
if(goods.has_one_short){
var _goodshortname = goods.has_one_short.short_title; // 商品简称
}else{
var _goodshortname = '-';
}
var _goodssn = goods.goods_sn; // 商品编码
var _productsn = goods.product_sn; //商品条码
var _marketprice = (goods.goods_price / Number(goods.total)).toFixed(2); //商品原价
var _productprice = (goods.price / Number(goods.total)).toFixed(2); //商品原价
var _allprice = _productprice * Number(goods.total); // 商品总价
_allprice = _allprice.toFixed(2);
var _total = Number(goods.total); // 商品数量
var _note = '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'; //备注栏
var _goodoption = '-'
if(goods.goods_option_title != ''){
_goodoption = goods.goods_option_title; // 商品规格
}
var _goodunit = goods.goods.sku; // 商品单位
var _goodweight = '-'; // 商品重量
if(goods.goods.weight != ''){
_goodweight = goods.goods.weight; // 商品规格
}
var _realprice = _productprice; // 商品折后价格
//订单信息
var _goodsprice = goods.goods_price; // 商品小计
var _dispatchprice = order.dispatch_price; // 运费
var _deductprice = goods.deduction_amount; // 抵扣金额
var _discountprice = order.discount_price; // 优惠券金额
var _vipdiscount = goods.price; // 会员折扣
if(Number(goods.vip_price) > 0 ){
_vipdiscount = goods.price - goods.vip_price
}
var _changeprice = order.change_price; // 改价优惠
var _changedispatchprice = order.change_dispatch_price; // 运费改价
var _couponprice = 0; // 优惠券优惠
var _price = order.price; // 实付费
info = {
'odsn':_ordersn,'goodname':_goodname,'goodshortname':_goodshortname,'goodssn':_goodssn,'productsn':_productsn,
'marketprice':_marketprice,
'productprice':_productprice,
'allprice':_allprice,
'total':_total,
'note':_note,
'goodoption':_goodoption,
'goodunit':_goodunit,
'goodweight':_goodweight,
'realprice':_realprice,
'goodsprice':_goodsprice,
'dispatchprice':_dispatchprice,
'discountprice':_discountprice,
'deductprice':_deductprice,
'vipdiscount':_vipdiscount,
'deductenough':_changeprice,'changedispatchprice':_changedispatchprice,'couponprice':_couponprice,
'price':_price
};
return info;
}
function getOrderIds()
{
let orderIds = [];
$('.oneChange').each(function () {
var _thisState = $(this).is(":checked");
var _orderIds = $(this).data('orderids');
if(_thisState){
orderIds.push(_orderIds);
}
});
console.log("orderIdsorderIds",orderIds)
return orderIds;
}
function saveSenderAll(data){
// ajax 执行写入数据库
$.ajax({
type: 'POST',
url: "{!! yzWebUrl('plugin.exhelper.admin.print-once.saveAddress') !!}",
data: {
realname:data.rep_realName,
mobile:data.rep_mobile,
province:data.rep_province,
city:data.rep_city,
area:data.rep_area,
address:data.rep_address,
ordersns:data.rep_ordersn.split(','),
},
dataType:'json',
success: function (result){
if(result.result=='error'){
alert(result.resp);
}
}
});
}
function printElectronics() {
var orderIds = getOrderIds();
var htmtList;
var errors;
var zipCode = prompt("发件地邮编(快递是EMS、邮政的必填否则报错不是可不填)");
$.ajax({
type: 'POST',
url: "{!! yzWebUrl('plugin.exhelper.admin.panel.print-electronics') !!}",
data: {
order_ids: orderIds,
zip_code: zipCode,
},
dataType: 'json',
success: function (result) {
var data = result.data;
if (result.result == 1) {
htmtList = data.html_list;
errors = data.errors;
printStart(htmtList);
alertError(errors);
} else {
cancel('推送失败。错误原因:' + result.msg);
return;
}
}
});
}
/**
* 开始打印电子面单
* @param htmtList
*/
function printStart(htmtList)
{
var htmlListCount = htmtList.length;
htmtList.forEach((html, htmlIdx) => {
LODOP.PRINT_INITA(0, 0, "100mm", "150mm", "单据打印");
LODOP.NewPageA();
LODOP.SET_PRINT_PAGESIZE(1, "80mm", "130mm", "");
LODOP.SET_PRINT_MODE("AUTO_CLOSE_PREWINDOW", true);
LODOP.ADD_PRINT_HTM('0mm', '0mm', '150mm', '150mm', html);
//选择默认的打印机
LODOP.SET_PRINTER_INDEX(-1)
//获取打印状态
if (LODOP.CVERSION) {
if(LODOP.PRINT()){
if(htmlListCount == (htmlIdx + 1)){
console.log('打印完成!')
successHander();
}
}else{
cancel('推送失败。错误原因:' + result.msg);
return;
}
}
})
}
/**
* 打印错误的电子面单返回数据
* @param alertError
*/
function alertError(alertError)
{
var html = '';
$("#errorMsg").html('');
if(alertError.length > 0){
alertError.forEach(error => {
html += `
<tr>
<td>${error.order_sn}</td>
<td style="width:50%;white-space:normal;word-wrap:break-word;word-break:break-all;">${error.msg}</td>
</tr>
`
})
$("#errorMsg").append(html);
$('#errorModal').modal('show')
}
}
</script>
@endsection