From d94578ec9887ab7d157490de94c7ffbdf7d062d5 Mon Sep 17 00:00:00 2001 From: LiuJiaNan <15703339975@163.com> Date: Wed, 21 Jan 2026 08:49:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96useGetFile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useGetFile/index.d.ts | 37 ++++++++++++++---- src/hooks/useGetFile/index.js | 67 +++++++++++++++++++++++++++++---- 2 files changed, 88 insertions(+), 16 deletions(-) diff --git a/src/hooks/useGetFile/index.d.ts b/src/hooks/useGetFile/index.d.ts index 48205e6..b6ed5b3 100644 --- a/src/hooks/useGetFile/index.d.ts +++ b/src/hooks/useGetFile/index.d.ts @@ -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; +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[]; +} + +export type SingleFileResponse = FileItem[]; + +export type MultipleFileResponse = Array & { files: FileItem[] }>; + +export interface GetFileFunction { + (options: SingleGetFileOptions): Promise; + (options: MultipleGetFileOptions): Promise; +} /** * 获取文件 diff --git a/src/hooks/useGetFile/index.js b/src/hooks/useGetFile/index.js index 91517a2..17abf53 100644 --- a/src/hooks/useGetFile/index.js +++ b/src/hooks/useGetFile/index.js @@ -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);