函数解析
这段代码是一个用于导出表格数据的函数。它接受三个参数:
query
: 表格数据的查询条件,通常是一个对象。url
: 导出数据的接口地址。textName
: 导出文件的名称。
函数返回一个 Promise 对象,用于处理导出操作的异步结果。
在函数内部,首先使用 request
工具发起一个 POST 请求,请求的地址是传入的 url
,请求的数据是传入的 query
。设置请求的 responseType
为 blob
,以便处理文件类型的响应数据。
当请求成功时,将返回的 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;