zoukankan      html  css  js  c++  java
  • ajax导出excel文件并增加等待动画效果

    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 hink esponseJson
    * @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();
    }
    }


  • 相关阅读:
    Python 集合
    Python 文字列
    JUNIT5(maven配置)
    Javascript严格模式
    移动互联测试
    Python的基础知识
    Linux系统下发件oa环境
    禅道的使用
    Linux系统的安装过程
    Oracle基础知识
  • 原文地址:https://www.cnblogs.com/zzeng347/p/8046674.html
Copyright © 2011-2022 走看看