1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import { ElNotification } from "element-plus";
- /**
- * @description 接收数据流生成 blob,创建链接,下载文件
- * @param {Function} api 导出表格的api方法 (必传)
- * @param {String} tempName 导出的文件名 (必传)
- * @param {Object} params 导出的参数 (默认{})
- * @param {Boolean} isNotify 是否有导出消息提示 (默认为 true)
- * @param {String} fileType 导出的文件格式 (默认为.xlsx)
- * */
- export const useDownload = async (
- api: (param: any) => Promise<any>,
- tempName: string,
- params: any = {},
- isNotify: boolean = true,
- fileType: string = ".xlsx"
- ) => {
- if (isNotify) {
- ElNotification({
- title: "温馨提示",
- message: "如果数据庞大会导致下载缓慢哦,请您耐心等待!",
- type: "info",
- duration: 3000
- });
- }
- try {
- const res = await api(params);
- const blob = new Blob([res]);
- // 兼容 edge 不支持 createObjectURL 方法
- if ("msSaveOrOpenBlob" in navigator) return window.navigator.msSaveOrOpenBlob(blob, tempName + fileType);
- const blobUrl = window.URL.createObjectURL(blob);
- const exportFile = document.createElement("a");
- exportFile.style.display = "none";
- exportFile.download = `${tempName}${fileType}`;
- exportFile.href = blobUrl;
- document.body.appendChild(exportFile);
- exportFile.click();
- // 去除下载对 url 的影响
- document.body.removeChild(exportFile);
- window.URL.revokeObjectURL(blobUrl);
- } catch (error) {
- console.log(error);
- }
- };
- /**
- * @description 接收数据流生成 blob,创建链接,下载文件, 非api
- * @param {any} t i18n
- * @param {any} data 导出的内容
- * @param {String} tempName 导出的文件名 (必传)
- * @param {Object} blobParams 导出的blob参数 (默认{})
- * @param {String} fileType 导出的文件格式 (默认为.xlsx)
- * */
- export const useDownloadLocal = (t: any, data: any, tempName: string, blobParams: Object = {}, fileType: string = ".xlsx") => {
- try {
- let fileName = tempName + fileType;
- const blob = new Blob([data], blobParams);
- // 兼容 edge 不支持 createObjectURL 方法
- if ("msSaveOrOpenBlob" in navigator) return window.navigator.msSaveOrOpenBlob(blob, fileName);
- const blobUrl = window.URL.createObjectURL(blob);
- const exportFile = document.createElement("a");
- exportFile.style.display = "none";
- exportFile.download = fileName;
- exportFile.href = blobUrl;
- document.body.appendChild(exportFile);
- exportFile.click();
- // 去除下载对 url 的影响
- document.body.removeChild(exportFile);
- window.URL.revokeObjectURL(blobUrl);
- ElNotification({
- title: t("sys.app.logoutTip"),
- message: `${t("sys.api.exportSyccess")}:${fileName}`,
- type: "success",
- duration: 3000
- });
- } catch (error) {
- console.log(error);
- }
- };
|