import React, { useImperativeHandle, useRef, useState, forwardRef } from 'react'; import { Modal, ModalProps, Space, SpaceProps } from 'antd'; import theme from 'antd/lib/theme'; import { DownloadOutlined } from '@ant-design/icons'; import './index.less' type ViewLargerImageModalParams = { imgSrc?: string; warningData?: { label?: string; value?: string; }[]; }; export interface ViewLargerImageModalRef { show: (params?: ViewLargerImageModalParams) => void; handleCancel: () => void; } export interface ViewLargerImageModalProps { imgStyle?: React.CSSProperties; downloadImg?: (imgSrc?: string) => void; title?: string; downloadText?: string; modalProps?: ModalProps spaceProps?: SpaceProps; } export const ViewLargerImageModal = forwardRef( (props, ref) => { const { modalProps, downloadImg, imgStyle, title = '预警大图', downloadText = '下载大图', spaceProps } = props const { useToken } = theme const { token } = useToken() const [open, setOpen] = useState(false); const [imgSrc, setImgSrc] = useState(); const [warningData, setWarningData] = useState(); const handleCancel = () => { setOpen(false); } useImperativeHandle(ref, () => { return { show: (_params) => { setOpen(true); setImgSrc(_params?.imgSrc) setWarningData(_params?.warningData) }, handleCancel }; }); return ( {title}
{warningData?.map(({ label, value }) => (
{`${label}: `} {value}
))} {imgSrc && downloadImg &&
downloadImg?.(imgSrc)} >{downloadText}
}
); } ) export default ViewLargerImageModal; export const useViewLargerImageModal = () => { return useRef(null); };