文件导出方法

import axios from "axios";
import config from "./config.utils";
import moment from "moment";
import { Message } from "element-ui";

function exportData({
  url,
  method = "post",
  params = {},
  header = {
    "Content-Type": "application/json"
  },
  responseType = "blob"
}) {
  let axiosObj = {
    url: `${config.apiPath.service}${url}`,
    method: method || "post",
    data: params,
    params: params,
    responseType: responseType,
    withCredentials: true,
    headers: {
      ...header
    }
  };
  if (method == "post") {
    delete axiosObj.params;
  }
  if (method == "get") {
    delete axiosObj.data;
  }
  return axios({ ...axiosObj });
}
//导出文件
export function downloadFile({ url, method = "get", params, header }, { fileName, fileType = 'xlsx' }) {
  let filesName = `${fileName}-${moment(new Date()).format("YYYY-MM-DD")}`
  return new Promise((resolve, reject) => {
    exportData({ url, method, params, header })
      .then(res => {
        if (res.status == 200) {
          const fileReader = new FileReader();
          fileReader.readAsText(res.data);
          fileReader.onload = function () {
            try {
              // 解析成功  说明是json文件
              const jsonData = JSON.parse(this.result);
              if (jsonData.code) {
                Message.error(jsonData.message);
                reject(false);
              }
            } catch (e) {
              // 没成功是正常文件流
              const link = document.createElement("a");
              let blob = new Blob([res.data], {
                type: "application/vnd.ms-excel"
              });
              link.style.display = "none";
              link.href = URL.createObjectURL(blob);
              link.setAttribute("download", `${filesName}.${fileType}`);
              document.body.appendChild(link);
              link.click();
              document.body.removeChild(link);
              resolve(true);
            }
          };
        } else {
          reject(false);
        }
      })
      .catch(e => {
        reject(false);
      });
  });
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值