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

96 lines
2.3 KiB
JavaScript
Raw Permalink Normal View History

2025-10-28 11:28:18 +08:00
import { request } from "@cqsjjb/jjb-common-lib/http";
import { useState } from "react";
/**
* 删除文件
2025-10-28 11:28:18 +08:00
*/
function useDeleteFile(returnType = "object") {
2025-10-28 11:28:18 +08:00
// loading状态
const [loading, setLoading] = useState(false);
// 用于跟踪进行中的请求数量(不暴露给外部)
let requestCount = 0;
2025-10-28 11:28:18 +08:00
// 删除文件
const deleteFile = (options) => {
if (!options)
throw new Error("请传入 options");
// 增加请求数量并设置loading状态
requestCount++;
if (requestCount > 0) {
setLoading(true);
}
2025-10-28 11:28:18 +08:00
return new Promise((resolve, reject) => {
const { files = [], single = true } = options;
2025-10-28 11:28:18 +08:00
if (!files)
throw new Error("请传入 files");
if (!Array.isArray(files))
throw new Error("请传入有效的 files");
// 如果没有文件则直接返回
2025-11-05 10:52:55 +08:00
if (files.length === 0) {
requestCount--;
if (requestCount <= 0) {
setLoading(false);
}
resolve();
2025-11-05 10:52:55 +08:00
return;
}
// 单文件并且没有文件路径则直接返回
if (single) {
const firstFile = files[0];
if (!firstFile.filePath) {
requestCount--;
if (requestCount <= 0) {
setLoading(false);
}
2025-11-05 10:52:55 +08:00
resolve();
return;
}
}
// 多文件并且没有文件id则直接返回
else {
const validFiles = files.filter(f => f.id);
if (validFiles.length === 0) {
requestCount--;
if (requestCount <= 0) {
setLoading(false);
}
2025-11-05 10:52:55 +08:00
resolve();
return;
}
}
2025-10-28 11:28:18 +08:00
// 发送请求
request(
2025-11-05 10:52:55 +08:00
single
? `/basic-info/imgFiles/delete?filePath=${files[0].filePath}`
: `/basic-info/imgFiles/ids?ids=${files.filter(f => f.id).map(f => f.id)}`,
"delete",
)
2025-10-28 11:28:18 +08:00
.then((res) => {
resolve(res.data);
})
.catch((err) => {
reject(err);
})
.finally(() => {
// 减少请求数量并在没有进行中的请求时设置loading为false
requestCount--;
if (requestCount <= 0) {
setLoading(false);
}
2025-10-28 11:28:18 +08:00
});
});
};
if (returnType === "array")
return [loading, deleteFile];
return { loading, deleteFile };
2025-10-28 11:28:18 +08:00
}
export default useDeleteFile;