优化useGetFile
parent
b7d208ef74
commit
d94578ec98
|
|
@ -1,10 +1,3 @@
|
|||
export interface GetFileOptions {
|
||||
/** 文件类型 */
|
||||
eqType: number;
|
||||
/** 外键ID */
|
||||
eqForeignKey: string;
|
||||
}
|
||||
|
||||
export interface FileItem {
|
||||
/** 文件路径 */
|
||||
filePath: string;
|
||||
|
|
@ -19,7 +12,35 @@ export interface FileItem {
|
|||
[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>;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文件
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
import { request } from "@cqsjjb/jjb-common-lib/http.js";
|
||||
import { useState } from "react";
|
||||
import { UPLOAD_FILE_TYPE_ENUM } from "../../enum/uploadFile/gwj";
|
||||
import { addingPrefixToFile } from "../../utils";
|
||||
// import { UPLOAD_FILE_TYPE_ENUM } from "../../enum/uploadFile/gwj";
|
||||
// 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) => {
|
||||
const { eqType, eqForeignKey } = options;
|
||||
const { eqType, eqForeignKey, single = true, foreignKey, dataSource } = options;
|
||||
|
||||
if (!eqType) {
|
||||
console.error("【getFile】 缺少 options.eqType 参数");
|
||||
|
|
@ -39,19 +41,68 @@ function useGetFile(returnType = "object") {
|
|||
return;
|
||||
}
|
||||
|
||||
if (eqForeignKey === undefined || eqForeignKey === null) {
|
||||
console.error("【getFile】 缺少 options.eqForeignKey 参数");
|
||||
return;
|
||||
if (single) {
|
||||
if (eqForeignKey === undefined || eqForeignKey === null || eqForeignKey === "") {
|
||||
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(
|
||||
"/basicInfo/imgFiles/listAll",
|
||||
"get",
|
||||
{ eqType, eqForeignKey },
|
||||
params,
|
||||
)
|
||||
.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) => {
|
||||
reject(err);
|
||||
|
|
|
|||
Loading…
Reference in New Issue