zy-react-library/hooks/useImportFile/index.js

60 lines
1.6 KiB
JavaScript

import { request } from "@cqsjjb/jjb-common-lib/http";
import { useState } from "react";
/**
* 导入文件
*/
export default function useImportFile(returnType = "object") {
// loading状态
const [loading, setLoading] = useState(false);
// 用于跟踪进行中的请求数量(不暴露给外部)
let requestCount = 0;
// 导入文件
const importFile = (url, options) => {
// 增加请求数量并设置loading状态
requestCount++;
if (requestCount > 0) {
setLoading(true);
}
return new Promise((resolve, reject) => {
if (!url)
return reject(new Error("请传入 url"));
const { files = [], params = {} } = options;
const formData = new FormData();
// 将文件添加到formData中
files.forEach((f) => {
f.originFileObj && formData.append("file", f.originFileObj);
});
// 将额外携带的参数添加到formData中
Object.keys(params).forEach((key) => {
formData.append(key, params[key]);
});
// 发送请求
request(url, "post", formData, { "Content-Type": "multipart/form-data" })
.then((res) => {
resolve(res);
})
.catch((err) => {
reject(err);
})
.finally(() => {
// 减少请求数量并在没有进行中的请求时设置loading为false
requestCount--;
if (requestCount <= 0) {
setLoading(false);
}
});
});
};
if (returnType === "array")
return [loading, importFile];
return { loading, importFile };
}