优化useGetFile

master
LiuJiaNan 2026-01-21 08:49:31 +08:00
parent b7d208ef74
commit d94578ec98
2 changed files with 88 additions and 16 deletions

View File

@ -1,10 +1,3 @@
export interface GetFileOptions {
/** 文件类型 */
eqType: number;
/** 外键ID */
eqForeignKey: string;
}
export interface FileItem { export interface FileItem {
/** 文件路径 */ /** 文件路径 */
filePath: string; filePath: string;
@ -19,7 +12,35 @@ export interface FileItem {
[key: string]: any; [key: string]: any;
} }
export type GetFileFunction = (options: GetFileOptions) => Promise<FileItem[]>; export interface BaseParams {
/** 文件类型 */
eqType: number;
}
export interface SingleGetFileOptions extends BaseParams {
/** 外键ID */
eqForeignKey: string;
/** 是否单文件获取 */
single?: true;
}
export interface MultipleGetFileOptions extends BaseParams {
/** dataSource 中外键ID的 key */
foreignKey: string;
/** 是否单文件获取 */
single: false;
/** 数据源 */
dataSource: Record<string, any>[];
}
export type SingleFileResponse = FileItem[];
export type MultipleFileResponse = Array<Record<string, any> & { files: FileItem[] }>;
export interface GetFileFunction {
(options: SingleGetFileOptions): Promise<SingleFileResponse>;
(options: MultipleGetFileOptions): Promise<MultipleFileResponse>;
}
/** /**
* *

View File

@ -1,7 +1,9 @@
import { request } from "@cqsjjb/jjb-common-lib/http.js"; import { request } from "@cqsjjb/jjb-common-lib/http.js";
import { useState } from "react"; import { useState } from "react";
import { UPLOAD_FILE_TYPE_ENUM } from "../../enum/uploadFile/gwj"; // import { UPLOAD_FILE_TYPE_ENUM } from "../../enum/uploadFile/gwj";
import { addingPrefixToFile } from "../../utils"; // import { addingPrefixToFile } from "../../utils";
import { UPLOAD_FILE_TYPE_ENUM } from "zy-react-library/enum/uploadFile/gwj";
import { addingPrefixToFile } from "zy-react-library/utils";
/** /**
* 获取文件 * 获取文件
@ -26,7 +28,7 @@ function useGetFile(returnType = "object") {
} }
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const { eqType, eqForeignKey } = options; const { eqType, eqForeignKey, single = true, foreignKey, dataSource } = options;
if (!eqType) { if (!eqType) {
console.error("【getFile】 缺少 options.eqType 参数"); console.error("【getFile】 缺少 options.eqType 参数");
@ -39,19 +41,68 @@ function useGetFile(returnType = "object") {
return; return;
} }
if (eqForeignKey === undefined || eqForeignKey === null) { if (single) {
console.error("【getFile】 缺少 options.eqForeignKey 参数"); if (eqForeignKey === undefined || eqForeignKey === null || eqForeignKey === "") {
return; console.error("【getFile】 缺少 options.eqForeignKey 参数");
return;
}
} }
else {
if (foreignKey === undefined || foreignKey === null || foreignKey === "") {
console.error("【getFile】 缺少 options.foreignKey 参数");
return;
}
if (dataSource === undefined || dataSource === null || dataSource === "") {
console.error("【getFile】 缺少 options.dataSource 参数");
return;
}
if (dataSource.length === 0) {
resolve(dataSource);
return;
}
}
const params = single ? { eqType, eqForeignKey } : { eqType, inForeignKey: dataSource.map(item => item[foreignKey]).join(",") };
// 发送请求 // 发送请求
request( request(
"/basicInfo/imgFiles/listAll", "/basicInfo/imgFiles/listAll",
"get", "get",
{ eqType, eqForeignKey }, params,
) )
.then((res) => { .then((res) => {
resolve(addingPrefixToFile(res.data).map(item => ({ ...item, type: undefined }))); if (single) {
resolve(addingPrefixToFile(res.data).map(item => ({ ...item, type: undefined })));
}
else {
// 创建一个 Map 来提高查找效率
const fileMap = new Map();
// 将 res.data 按照 foreigKey 分组
res.data.forEach((file) => {
if (!fileMap.has(file.foreignKey)) {
fileMap.set(file.foreignKey, []);
}
fileMap.get(file.foreignKey).push({ ...file, type: undefined });
});
// 为 dataSource 中的每一项添加对应的文件列表
const result = dataSource.map((item) => {
const itemForeignKey = item[foreignKey];
const matchedFiles = fileMap.has(itemForeignKey)
? addingPrefixToFile(fileMap.get(itemForeignKey))
: [];
return {
...item,
files: matchedFiles,
};
});
resolve(result);
}
}) })
.catch((err) => { .catch((err) => {
reject(err); reject(err);