vue 导出 excal

之前用axios 发请求携带参数来下载 老是显示乱码问题  设置响应格式为 blob 也不能解决问题 
然后用单独的 xhr 来发请求下载解决了问题
Vue.prototype.downLoadXls = function (url,fileName, dataParams) {//传入的 url地址  ,文件名 ,传入参数为对象格式
  let oReq = new XMLHttpRequest(); 
  let dataStr = '' //数据拼接字符串
  Object.keys(dataParams).forEach(key => { //对传入参数做拼接字符串处理
    let str = String(dataParams[key])
    dataStr += key + '=' + str + '&'
    // dataStr += key + '=' + dataParams[key] + '&'
  })
  if (dataStr !== '') {
    dataStr = dataStr.substring(0, dataStr.lastIndexOf('&'))
    url = url + '?' + dataStr
  }
  var exportDeviceUrl = encodeURI(url);
  oReq.open("get", exportDeviceUrl, true);
  oReq.setRequestHeader("Content-Type", "application/json;charset=UTF-8");//设置类型格式
  console.log(window.sessionStorage.getItem('token'))
  oReq.setRequestHeader('token', window.sessionStorage.getItem('token') || null); //这是需要携带的token 请求不需要的可以去掉
  var data = JSON.stringify(dataParams);
  oReq.responseType = "blob";
  oReq.onreadystatechange = function() {//成功的回调
    if (oReq.readyState == 4 && oReq.status == 200) {
      var content = oReq.response;
      if(content['type'] === 'application/vnd.ms-excel'){//判断返回数据类型
        var blob = new Blob([content]);
        var elink = document.createElement("a");//创建a标签
        elink.download = fileName + new Date().getFullYear()+""+(new Date().getMonth()+1)+""+new Date().getDate()+""+new Date().getHours()+""+new Date().getMinutes()+""+new Date().getSeconds()+ ".xls"//给下载文件加上时间戳
        elink.href = URL.createObjectURL(blob);//下载地址
        elink.click(); 
      
    } 
  };
}
oReq.send();
}
posted @ 2020-04-09 17:29  虹猫淘气  阅读(193)  评论(0编辑  收藏  举报