Files
FastapiAdmin/frontend/web/src/plugins/download.ts
T
zhangtao b7800e2ddd fix(web): 修复代码格式和文件清理问题
清理无用文件和资源,调整代码格式统一双引号,修复部分组件路径引用问题

删除大量无用图片资源和组件文件,统一代码风格使用双引号,修复国际化文件路径引用,调整部分组件逻辑,优化项目结构
2026-05-01 01:05:16 +08:00

99 lines
3.1 KiB
TypeScript

import axios, { AxiosResponse } from "axios";
import { ElLoading, ElMessage } from "element-plus";
import { saveAs as fileSaverSaveAs } from "file-saver";
import { Auth } from "@/utils/auth";
import errorCode from "@/utils/errorCode";
import { blobValidate } from "@/utils/common";
const baseURL = import.meta.env.VITE_APP_BASE_API;
let downloadLoadingInstance: any;
interface DownloadUtil {
name(name: string, isDelete?: boolean): void;
resource(resource: string): void;
zip(url: string, name: string): void;
saveAs(text: Blob | string, name: string, opts?: any): void;
printErrMsg(data: Blob): Promise<void>;
}
const download: DownloadUtil = {
name(name: string, isDelete: boolean = true): void {
const url =
baseURL + "/common/download?fileName=" + encodeURIComponent(name) + "&delete=" + isDelete;
axios({
method: "get",
url,
responseType: "blob",
headers: { Authorization: "Bearer " + Auth.getAccessToken() },
}).then((res: AxiosResponse<Blob>) => {
const isBlob = blobValidate(res.data);
if (isBlob) {
const blob = new Blob([res.data]);
download.saveAs(blob, decodeURIComponent(res.headers["download-filename"]));
} else {
download.printErrMsg(res.data);
}
});
},
resource(resource: string): void {
const url = baseURL + "/common/download/resource?resource=" + encodeURIComponent(resource);
axios({
method: "get",
url,
responseType: "blob",
headers: { Authorization: "Bearer " + Auth.getAccessToken() },
}).then((res: AxiosResponse<Blob>) => {
const isBlob = blobValidate(res.data);
if (isBlob) {
const blob = new Blob([res.data]);
download.saveAs(blob, decodeURIComponent(res.headers["download-filename"]));
} else {
download.printErrMsg(res.data);
}
});
},
zip(url: string, name: string): void {
const fullUrl = baseURL + url;
downloadLoadingInstance = ElLoading.service({
text: "正在下载数据,请稍候",
background: "rgba(0, 0, 0, 0.7)",
});
axios({
method: "get",
url: fullUrl,
responseType: "blob",
headers: { Authorization: "Bearer " + Auth.getAccessToken() },
})
.then((res: AxiosResponse<Blob>) => {
const isBlob = blobValidate(res.data);
if (isBlob) {
const blob = new Blob([res.data], { type: "application/zip" });
download.saveAs(blob, name);
} else {
download.printErrMsg(res.data);
}
downloadLoadingInstance.close();
})
.catch((r: any) => {
console.error(r);
ElMessage.error("下载文件出现错误,请联系管理员!");
downloadLoadingInstance.close();
});
},
saveAs(text: Blob | string, name: string, opts?: any): void {
fileSaverSaveAs(text, name, opts);
},
async printErrMsg(data: Blob): Promise<void> {
const resText = await data.text();
const rspObj = JSON.parse(resText);
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
ElMessage.error(errMsg);
},
};
export default download;