import Modal from "antd/lib/modal"; import { PlusOutlined } from "@ant-design/icons"; import Upload, { RcFile, UploadFile, UploadProps } from "antd/lib/upload"; import { useEffect, useState } from "react"; import Config from "@/util/config"; interface UploadFileProps { imgList: Array; onChnage: Function; maxCount?: number; } interface UploadFileEx extends UploadFile { systemImageId?: number; bannerName?: string; file_name?: string; file_url?: string; redictUrl?: string; id?: number; } const getBase64 = (file: RcFile): Promise => new Promise((resolve, reject) => { const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = () => resolve(reader.result as string); reader.onerror = (error) => reject(error); }); const AliUpload = (props: UploadFileProps) => { const [previewOpen, setPreviewOpen] = useState(false); const [previewImage, setPreviewImage] = useState(""); const [previewTitle, setPreviewTitle] = useState(""); const [files, setFileList] = useState([]); const handleCancel = () => setPreviewOpen(false); const handlePreview = async (file: UploadFile) => { if (!file.url && !file.preview) { file.preview = await getBase64(file.originFileObj as RcFile); } setPreviewImage(file.url || (file.preview as string)); setPreviewOpen(true); setPreviewTitle( file.name || file.url!.substring(file.url!.lastIndexOf("/") + 1) ); }; useEffect(() => { setFileList(props.imgList); }, [props.imgList]); const handleChange: UploadProps["onChange"] = ({ fileList: newFileList }) => { newFileList.forEach((i) => { i.url = `${Config.baseUrl}uploads/` + i.name; i.fileName = i.name; }); setFileList(newFileList); props.onChnage(newFileList); }; const uploadButton = (
Upload
); return (
{files.length >= (props.maxCount??4) ? null : uploadButton} example
); }; export default AliUpload;