1. 下载插件jquery-ui-jqLoding.js
引入
~~~
<div class="col-md-1">
<button id="orderTrackDown" type="button" class="btn btn-primary btn_sizes">下载</button>
</div>
<script src="{{ asset('assets/js/jqLod/jquery-ui-jqLoding.js') }}" type="text/javascript"></script>
~~~
2. jq
$('#orderTrackDown').click(function(){
if(!check()){
return false;
}
$.fn.jqLoading({height: 70, width: 210, text: "正在生成报表,请稍后"});
buildTrackSummary(1,'');
});
function buildTrackSummary(id,fileName) {
var data = $("#orderTracking").serialize();
data += "&id=" + id;
if (fileName != '') {
data += "&file_name=" + fileName;
}
$.ajax({
type: 'post',
url: '{{url('admin/chart/orderTrackDownload')}}',
dataType: 'json',
data: data,
success: function (res) {
if (res.status) {
buildTrackSummary(res.id, res.fileName);
} else {
$.fn.jqLoading("destroy");
layer.msg(res.msg);
if (res.fileName !== false) {
window.location.href = "{{url('admin/chart/orderTrackCsv')}}" + "?file=/" + res.fileName + "&fileName=订单物流信息统计数据";
}
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$.fn.jqLoading("destroy");
layer.msg("发生意外错误,请重试!");
},
complete: function (XMLHttpRequest, textStatus) {
this; // 调用本次AJAX请求时传递的options参数
}
});
}
后段代码
public function orderTrackDownload(Request $request) {
$query = \App\Models\Order::query()->where('status','>',Order::STATUS_READY_SHIP);
if ($start_time = $request->get('starttime','')) {
$start_time = convertTime($start_time, TIME_CARBON)->startOfDay();
$query->where('created_at','>=',$start_time);
}
if ($end_time = $request->get('endtime','')) {
$end_time = convertTime($end_time, TIME_CARBON)->endOfDay();
$query->where('created_at','<=',$end_time);
}
if ($id = $request->get('id','')) {
$query->where('id','>',$id);
}
//数据
$orders = $query->orderBy('id','asc')->limit(1000)->get();
//最后一个id
$last_id = '';
if ($orders) {
//文件名
$file_name = $request->get('file_name', storage_path('files/order-track-summary-' . Uuid::uuid4()->getHex() . '.csv'));
$fp = fopen($file_name, 'a+');
//第一次
if ($id == 1) {
//bom
fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF));
$title_list = ['订单号','订单金额','订单类型'];
fputcsv($fp,$title_list);
}
//数据格式
foreach ($orders as $order) {
//最后一个id,方便分页搜索
$last_id = $order['id'];
$data = [
'id' => $order['id'],
'order_cost' => $order->cost['total'],
'type' => Order::$_orderTypeArr[$order['type']] ?? '',
];
fputcsv($fp,$data);
}
//关闭文件
fclose($fp);
if (count($orders) < 1000) {
return response()->json(['status' => false, 'msg' => '导出成功', 'fileName' => $file_name]);
}
return response()->json(['status' => true, 'id' => $last_id, 'fileName' => $file_name]);
}
return response()->json(['status' => false, 'msg' => 'cuowu']);
}