|
|
|
import request from "@/utils/request";
|
|
|
|
import { Message } from "element-ui";
|
|
|
|
|
|
|
|
export function delay(ms = 240) {
|
|
|
|
return new Promise((resolve) => setTimeout(() => resolve(void 0), ms));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param {{ method?: string; url: string; data?: string; type?: string; filename?: string; }} options
|
|
|
|
*/
|
|
|
|
export function exportFile({
|
|
|
|
url,
|
|
|
|
method = "post",
|
|
|
|
data,
|
|
|
|
type = "application/vnd.ms-excel",
|
|
|
|
filename = "download",
|
|
|
|
ext = "xlsx",
|
|
|
|
} = {}) {
|
|
|
|
if (!url) return;
|
|
|
|
const loadingMessage = Message.info({
|
|
|
|
message: `文件下载中...`,
|
|
|
|
duration: 0,
|
|
|
|
customClass: "loading-message",
|
|
|
|
iconClass: "el-icon-loading",
|
|
|
|
});
|
|
|
|
|
|
|
|
request({
|
|
|
|
url,
|
|
|
|
method,
|
|
|
|
responseType: "blob",
|
|
|
|
data: {
|
|
|
|
...data,
|
|
|
|
},
|
|
|
|
params: {
|
|
|
|
...data,
|
|
|
|
},
|
|
|
|
})
|
|
|
|
.then((result) => {
|
|
|
|
const blob = new Blob([result], { type });
|
|
|
|
const downloadElement = document.createElement("a");
|
|
|
|
const href = window.URL.createObjectURL(blob);
|
|
|
|
downloadElement.href = href;
|
|
|
|
downloadElement.download = result.filename || `${filename}.${ext}`;
|
|
|
|
document.body.appendChild(downloadElement);
|
|
|
|
downloadElement.click();
|
|
|
|
document.body.removeChild(downloadElement);
|
|
|
|
window.URL.revokeObjectURL(href);
|
|
|
|
|
|
|
|
Message.success("文件下载成功");
|
|
|
|
})
|
|
|
|
.catch((err) => {
|
|
|
|
Message.error("文件下载失败");
|
|
|
|
})
|
|
|
|
.finally(() => loadingMessage.close());
|
|
|
|
}
|