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 }; }