优化useGetFile
parent
b7d208ef74
commit
d94578ec98
|
|
@ -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>;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取文件
|
* 获取文件
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
if (eqForeignKey === undefined || eqForeignKey === null || eqForeignKey === "") {
|
||||||
console.error("【getFile】 缺少 options.eqForeignKey 参数");
|
console.error("【getFile】 缺少 options.eqForeignKey 参数");
|
||||||
return;
|
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) => {
|
||||||
|
if (single) {
|
||||||
resolve(addingPrefixToFile(res.data).map(item => ({ ...item, type: undefined })));
|
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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue