新增useImportFile
							parent
							
								
									d68bd52ba6
								
							
						
					
					
						commit
						c54bd2eb68
					
				|  | @ -10,11 +10,13 @@ export default function useDownloadBlob() { | ||||||
|   const [loading, setLoading] = useState(false); |   const [loading, setLoading] = useState(false); | ||||||
| 
 | 
 | ||||||
|   // 下载Blob流文件
 |   // 下载Blob流文件
 | ||||||
|   const downloadBlob = (url, options = { name: "", type: "", params: {} }) => { |   const downloadBlob = (url, options) => { | ||||||
|     setLoading(true); |     setLoading(true); | ||||||
|  | 
 | ||||||
|     return new Promise((resolve, reject) => { |     return new Promise((resolve, reject) => { | ||||||
|  |       const { name= "", type= "", params= {} } = options | ||||||
|       const finalUrl = (process.env.app.API_HOST || window.__JJB_ENVIRONMENT__.API_HOST) + url; |       const finalUrl = (process.env.app.API_HOST || window.__JJB_ENVIRONMENT__.API_HOST) + url; | ||||||
|       Object.entries(options.params).forEach(([key, value]) => { |       Object.entries(params).forEach(([key, value]) => { | ||||||
|         finalUrl.searchParams.append(key, value); |         finalUrl.searchParams.append(key, value); | ||||||
|       }); |       }); | ||||||
|       fetch(finalUrl, { |       fetch(finalUrl, { | ||||||
|  | @ -32,14 +34,14 @@ export default function useDownloadBlob() { | ||||||
|         }) |         }) | ||||||
|         .then((blob) => { |         .then((blob) => { | ||||||
|           const finalBlob = new Blob([blob], { |           const finalBlob = new Blob([blob], { | ||||||
|             type: options.type || "application/vnd.ms-excel", |             type: type || "application/vnd.ms-excel", | ||||||
|           }); |           }); | ||||||
|           const downloadElement = document.createElement("a"); |           const downloadElement = document.createElement("a"); | ||||||
|           const href = window.URL.createObjectURL(finalBlob); |           const href = window.URL.createObjectURL(finalBlob); | ||||||
|           downloadElement.style.display = "none"; |           downloadElement.style.display = "none"; | ||||||
|           downloadElement.href = href; |           downloadElement.href = href; | ||||||
|           downloadElement.download |           downloadElement.download | ||||||
|             = options.name || dayjs().format("YYYY-MM-DD HH:mm:ss"); |             = name || dayjs().format("YYYY-MM-DD HH:mm:ss"); | ||||||
|           document.body.appendChild(downloadElement); |           document.body.appendChild(downloadElement); | ||||||
|           downloadElement.click(); |           downloadElement.click(); | ||||||
|           document.body.removeChild(downloadElement); |           document.body.removeChild(downloadElement); | ||||||
|  |  | ||||||
|  | @ -0,0 +1,24 @@ | ||||||
|  | export interface UploadFile { | ||||||
|  |   /** 原始文件对象 */ | ||||||
|  |   originFileObj?: File; | ||||||
|  |   [key: string]: any; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface UseImportFileOptions { | ||||||
|  |   /** 要上传的文件数组 */ | ||||||
|  |   files: UploadFile[]; | ||||||
|  |   /** 额外携带的参数对象 */ | ||||||
|  |   params?: Record<string, any>; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export interface ImportFileOptions { | ||||||
|  |   url: string; | ||||||
|  |   options: UseImportFileOptions; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export type ImportFileFunction = (url: string, options: UseImportFileOptions) => Promise<any>; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 导入文件 | ||||||
|  |  */ | ||||||
|  | export default function useImportFile(): [boolean, ImportFileFunction]; | ||||||
|  | @ -0,0 +1,44 @@ | ||||||
|  | import {request} from "@cqsjjb/jjb-common-lib/http"; | ||||||
|  | import { useState } from "react"; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 导入文件 | ||||||
|  |  */ | ||||||
|  | export default function useImportFile() { | ||||||
|  |   // loading状态
 | ||||||
|  |   const [loading, setLoading] = useState(false); | ||||||
|  | 
 | ||||||
|  |   // 导入文件
 | ||||||
|  |   const importFile = (url, options) => { | ||||||
|  |     setLoading(true); | ||||||
|  | 
 | ||||||
|  |     return new Promise((resolve, reject) => { | ||||||
|  |       const { files = [], params = {} } = options | ||||||
|  |       const formData = new FormData(); | ||||||
|  | 
 | ||||||
|  |       // 将文件添加到formData中
 | ||||||
|  |       files.forEach((f) => { | ||||||
|  |         f.originFileObj && formData.append("file", f.originFileObj); | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       // 将额外携带的参数添加到formData中
 | ||||||
|  |       Object.keys(params).forEach((key) => { | ||||||
|  |         formData.append(key, params[key]); | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       // 发送请求
 | ||||||
|  |       request(url, "post", formData, { "Content-Type": "multipart/form-data" }) | ||||||
|  |         .then((res) => { | ||||||
|  |           resolve(res); | ||||||
|  |         }) | ||||||
|  |         .catch((err) => { | ||||||
|  |           reject(err); | ||||||
|  |         }) | ||||||
|  |         .finally(() => { | ||||||
|  |           setLoading(false); | ||||||
|  |         }); | ||||||
|  |     }); | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   return [loading, importFile]; | ||||||
|  | } | ||||||
|  | @ -6,7 +6,7 @@ export interface UploadFile { | ||||||
| 
 | 
 | ||||||
| export interface SingleUploadFileOptions { | export interface SingleUploadFileOptions { | ||||||
|   /** 要上传的文件 */ |   /** 要上传的文件 */ | ||||||
|   files: UploadFile; |   files: UploadFile[]; | ||||||
|   /** 是否单文件上传 */ |   /** 是否单文件上传 */ | ||||||
|   single?: true; |   single?: true; | ||||||
|   /** 上传的参数 */ |   /** 上传的参数 */ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue