封装一个导出表格数据的函数

函数解析

这段代码是一个用于导出表格数据的函数。它接受三个参数:

  1. query: 表格数据的查询条件,通常是一个对象。
  2. url: 导出数据的接口地址。
  3. textName: 导出文件的名称。

函数返回一个 Promise 对象,用于处理导出操作的异步结果。

在函数内部,首先使用 request 工具发起一个 POST 请求,请求的地址是传入的 url,请求的数据是传入的 query。设置请求的 responseTypeblob,以便处理文件类型的响应数据。

当请求成功时,将返回的 blob 数据包装成一个可下载的链接,创建一个 <a> 标签,设置其 href 属性为包装后的 blob 对象的 URL,并设置 download 属性为传入的 textName。然后将该 <a> 标签添加到文档的 body 中,模拟用户点击该链接实现下载。下载完成后移除该 <a> 标签,并通过 resolve(true) 完成 Promise。

当请求失败时,通过 reject(false) 拒绝 Promise,并显示导出失败的提示消息。

最后,将函数 exportTable 使用 ES6 的导出语法导出,以便在其他地方使用。

代码: 

import request from "@/utils/request";
import { message } from "@/utils/message";
function exportTable(query, url, textName) {
  return new Promise((resolve, reject) => {
    request({
      url: url,
      method: "post",
      data: query,
      responseType: "blob"
    })
      .then(res => {
        const link = document.createElement("a"); // 创建a标签
        let blob = new Blob([res], {
          type: "application/vnd.ms-excel;charset=UTF-8"
        }); // 设置文件类型
        link.style.display = "none";
        link.href = URL.createObjectURL(blob); // 创建URL
        link.setAttribute("download", textName);
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
        resolve(true);

        message({
          message: "导出成功!",
          type: "success",
          duration: 1500
        });
      })
      .catch(error => {
        reject(false);
        message({
          message: "导出失败!",
          type: "error",
          duration: 1500
        });
      });
  });
}
export default exportTable;

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值