import useBodyScroll from '@/hooks/use-body-scroll'; import { ExclamationCircleFilled } from '@ant-design/icons'; import { useIntl } from '@umijs/max'; import { Button, Checkbox, Modal, Space, message, type ModalFuncProps } from 'antd'; import { FC, forwardRef, useImperativeHandle, useState } from 'react'; import styled from 'styled-components'; import Styles from './index.less'; const CheckboxWrapper = styled.div` margin-top: 20px; margin-left: 30px; display: flex; justify-content: flex-start; align-items: center; .check-text { font-weight: 700; color: var(--ant-color-warning); } `; interface DeleteModalProps { ref: any; } interface DataOptions { content: string; selection?: boolean; name?: string; okText?: string; cancelText?: string; title?: string; operation: string; checkConfig?: { checkText: string; defautlChecked: boolean; }; } const DeleteModal: FC = forwardRef((props, ref) => { const intl = useIntl(); const { saveScrollHeight, restoreScrollHeight } = useBodyScroll(); const [visible, setVisible] = useState(false); const [checked, setChecked] = useState(false); const [config, setConfig] = useState({} as any); useImperativeHandle(ref, () => ({ show: (data: ModalFuncProps & DataOptions) => { saveScrollHeight(); setConfig(data); setChecked(data.checkConfig?.defautlChecked || false); setVisible(true); }, hide: () => { setVisible(false); restoreScrollHeight(); }, configuration: { checked: checked } })); const handleCancel = () => { setVisible(false); config.onCancel?.(); restoreScrollHeight(); }; const handleOk = async () => { await config.onOk?.(); message.success(intl.formatMessage({ id: 'common.message.success' })); setVisible(false); restoreScrollHeight(); }; return ( } >
{config.title ? intl.formatMessage({ id: config.title }) : intl.formatMessage({ id: 'common.title.delete.confirm' })}
{config.checkConfig && ( setChecked(e.target.checked)} > {intl.formatMessage({ id: config.checkConfig?.checkText })} )}
); }); export default DeleteModal;