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();
}
}
												

最新文章

  1. Yii 1开发日记 -- 后台搜索功能下拉及关联表搜索
  2. SpringMVC+FreeMarker
  3. ZOJ3802 Easy 2048 Again (状压DP)
  4. IIS报错 未将对象引用设置到对象的实例。
  5. 最小二乘法(least squares method)
  6. 【Longest Common Prefix】cpp
  7. SQL Server日期时间格式转换字符串详解
  8. raw socket遇上windows
  9. 10.23 noip模拟试题
  10. javascript常用内置对象总结(重要)
  11. How to load jars residing over NFS in JBossAS7 classpath ? --reference
  12. 二、Cocos2dx中Android部分的c++和java实现相互调用(高级篇)
  13. vue.js学习笔记(二):如何加载本地json文件
  14. $_GET
  15. Mahout源码分析:并行化FP-Growth算法
  16. JAVA环境变量关于
  17. linux 运维工程师发展路线
  18. URL 通过Get方式传递数组参数
  19. Ubuntu16.04更新源
  20. Android工程图片资源命名禁忌

热门文章

  1. Bryce1010的操作系统课程设计
  2. stack(数组模拟) POJ 2559 Largest Rectangle in a Histogram
  3. 尺取法 POJ 3601 Subsequence
  4. 使用HttpClient携带pfx证书调用HTTPS协议的WebService
  5. 等待进程结束函数中的BUG
  6. 来自AJPFX的二分法查找
  7. hihocoder offer收割编程练习赛12 C 矩形分割
  8. [BZOJ1025][SCOI2009]游戏 DP+置换群
  9. Vue 学习之el、template、replace和vue的生命周期 参考网址:https://segmentfault.com/a/1190000008010666
  10. .vue文件在phpstorm中红线解决办法