import { Modal } from "ant-design-vue";
import axios, { AxiosError, AxiosResponse, Method } from "axios";
import NProgress from "nprogress";
import i18n from "@/locales/i18n";
import { ModalConfirm } from "ant-design-vue/types/modal";
let modal: ModalConfirm;
export const ajaxUpload = (url: string, file: File, method: Method = "PUT") => {
const formData = new FormData();
formData.append("file", file);
return new Promise((resolve, reject) => {
NProgress.start();
if (file.size > 10 * 1024 * 1024) modal = Modal.info({ title: i18n.t("文件上传"), content: i18n.t("开始上传"), centered: true, okText: i18n.t("关闭") as string });
axios({
url,
method,
data: formData,
timeout: 120000,
headers: { "Content-Type": "multipart/form-data" },
onUploadProgress(e) {
if (e.lengthComputable) {
if (file.size > 10 * 1024 * 1024) modal.update({ content: i18n.t("当前文件上传进度") + ":" + ((e.loaded / e.total) * 100).toFixed(2) + "%" });
if (e.loaded === e.total) {
NProgress.set(e.loaded / e.total);
Modal.destroyAll();
}
}
},
})
.then((response: AxiosResponse) => {
resolve(response.data);
})
.catch((err: AxiosError) => {
NProgress.done();
Modal.destroyAll();
reject(err);
Modal.error({ content: i18n.t("文件上传失败"), centered: true });
});
});
};
customRequest({ file }: any) {
ajaxUpload(this.action, file).then((res: any) => {
if (res && res.data) {
}
});
}