ajax导出excel文件并增加等待动画效果
2024-08-21 20:06:28
html:
<button class="btn btn-default" onclick="logToExcel('{:url('userLogToExcel',['day' => '3'])}')">3天日志导出</button>
js:
function logToExcel(url){
$('.masking').show();
$.ajax({
url:url,
type:"post",
processData : false,
contentType : false ,
success:function (data) {
if(data.result){
var form=$("<form>");//定义一个form表单
form.attr("style","display:none");
form.attr("target","");
form.attr("method","post");
form.attr("action",data.data);//请求地址
$("body").append(form);//将表单放置在web中
//传递参数
var input1 = $("<input>");
input1.attr("type", "hidden");
input1.attr("name", "fileName");
input1.attr("value", data.fileName);
form.append(input1); var input2 = $("<input>");
input2.attr("type", "hidden");
input2.attr("name", "fileDir");
input2.attr("value", data.fileDir);
form.append(input2); form.submit().remove();//表单提交
$('.masking').hide();
}else{
alert(data.msg);
}
}
})
} php:
/**
* 用户操作日志导出Excel表
* @internal param int $day 导出日志时间
* @return \think\response\Json
* @reviewer
*/
public function userLogToExcel(){
set_time_limit(0);
$time = date('Y-m-d',time());
$fileName = 'userlog-' . $time;
$day = Request::instance()->param('day');
//$day = input('day');
if ($day == '7'){
$start_time = strtotime('-7 day');
}else{
$start_time = strtotime('-3 day');
}
$startTime = date('Y-m-d',$start_time);
$endTime = date('Y-m-d H:i:s',time());
$userID = '';
$firstRow = '';
$listRows = '';
$logUser = new UserLog();
$list = $logUser->getLogList($userID,$startTime,$endTime,$firstRow, $listRows);
$listID = array();
foreach ($list as $k => $v){
$listID[$k] = $v['user_id'];
}
$listId = array_unique($listID);
$userDetail = new UserInfo();
$userData = $userDetail->getUserInfo($listId);
$userInfo = [];
foreach ($userData as $key => $value){
$userInfo[$value['user_id']] = $value;
}
$taskData = [];
foreach ($list as $k => $v){
$taskData[$k] = [
$k+1,
$userInfo[$v['user_id']]['user_name'],
$userInfo[$v['user_id']]['real_name'],
$v['log_info'],
$v['log_ip'],
$v['log_area'],
$v['log_url'],
$v['log_time'],
];
}
$taskNewData = ['序号', '用户名', '真实名', '操作信息', 'ip地址', '登陆地', '操作url','操作时间'];
array_unshift($taskData, $taskNewData);
$filePath = ROOT_PATH . 'public' . DS . 'static' . DS . 'file' . DS . 'tmp' . DS; try{
Excel::generateExcel($fileName, $taskData, false, $filePath);
}catch (\Exception $e){
return json(['result' => false, 'msg' => '日志导出失败']);
}
return json(['result' => true, 'fileName' => $fileName.'.xlsx', 'fileDir' => $filePath, 'data' => '/admin/log_user/sendFile']);
} /**
* 将服务器文件发送到浏览器
* @internal param $fileDir 文件路径
* @internal param $fileName 文件名称
* @return Excel
*/
public function sendFile()
{
$fileDir = Request::instance()->param('fileDir');
$fileName = Request::instance()->param('fileName');
$fileName = iconv('gbk','utf-8', $fileName);
//检查文件是否存在
if (!file_exists($fileDir . $fileName)) {
echo "<meta http-equiv='refresh' content='3; url={$_SERVER['HTTP_REFERER']}'>";
echo "文件不存在";
exit();
} else {
//打开文件
$file = fopen($fileDir . $fileName, "r");
//输入文件标签
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: " . filesize($fileDir . $fileName));
Header("Content-Disposition: attachment; filename=" . $fileName);
//输出文件内容
//读取文件内容并直接输出到浏览器
echo fread($file, filesize($fileDir . $fileName));
fclose($file);
exit();
}
}
最新文章
- Yii 1开发日记 -- 后台搜索功能下拉及关联表搜索
- SpringMVC+FreeMarker
- ZOJ3802 Easy 2048 Again (状压DP)
- IIS报错 未将对象引用设置到对象的实例。
- 最小二乘法(least squares method)
- 【Longest Common Prefix】cpp
- SQL Server日期时间格式转换字符串详解
- raw socket遇上windows
- 10.23 noip模拟试题
- javascript常用内置对象总结(重要)
- How to load jars residing over NFS in JBossAS7 classpath ? --reference
- 二、Cocos2dx中Android部分的c++和java实现相互调用(高级篇)
- vue.js学习笔记(二):如何加载本地json文件
- $_GET
- Mahout源码分析:并行化FP-Growth算法
- JAVA环境变量关于
- linux 运维工程师发展路线
- URL 通过Get方式传递数组参数
- Ubuntu16.04更新源
- Android工程图片资源命名禁忌
热门文章
- Bryce1010的操作系统课程设计
- stack(数组模拟) POJ 2559 Largest Rectangle in a Histogram
- 尺取法 POJ 3601 Subsequence
- 使用HttpClient携带pfx证书调用HTTPS协议的WebService
- 等待进程结束函数中的BUG
- 来自AJPFX的二分法查找
- hihocoder offer收割编程练习赛12 C 矩形分割
- [BZOJ1025][SCOI2009]游戏 DP+置换群
- Vue 学习之el、template、replace和vue的生命周期 参考网址:https://segmentfault.com/a/1190000008010666
- .vue文件在phpstorm中红线解决办法