2021SC@SDUSC
首先导入相关的模块
import * as React from 'react';
import Dialog from 'rc-dialog';
import classNames from 'classnames';
import CloseOutlined from '@ant-design/icons/CloseOutlined';
import { getConfirmLocale } from './locale';
import Button from '../button';
import { LegacyButtonType, ButtonProps, convertLegacyProps } from '../button/button';
import LocaleReceiver from '../locale-provider/LocaleReceiver';
import { ConfigContext, DirectionType } from '../config-provider';
import { canUseDocElement } from '../_util/styleChecker';
import { getTransitionName } from '../_util/motion';
设定变量,存储鼠标的点击坐标
let mousePosition: { x: number; y: number } | null;
const getClickPosition = (e: MouseEvent) => {
mousePosition = {
x: e.pageX,
y: e.pageY,
};
// 100ms 内发生过点击事件,则从点击位置动画展示
// 否则直接 zoom 展示
// 这样可以兼容非点击方式展开
setTimeout(() => {
mousePosition = null;
}, 100);
};
// 只有点击事件支持从鼠标位置动画展开
if (canUseDocElement()) {
document.documentElement.addEventListener('click', getClickPosition, true);
}
export interface ModalProps {
/** 对话框是否可见 */
visible?: boolean;
/** 确定按钮 loading */
confirmLoading?: boolean;
/** 标题 */
title?: React.ReactNode | string;
/** 是否显示右上角的关闭按钮 */
closable?: boolean;
/** 点击确定回调 */
onOk?: (e: React.MouseEvent<HTMLElement>) => void;
/** 点击模态框右上角叉、取消按钮、Props.maskClosable 值为 true 时的遮罩层或键盘按下 Esc 时的回调 */
onCancel?: (e: React.MouseEvent<HTMLElement>) => void;
/** 关闭对话框之后的事件 */
afterClose?: () => void;
/** 垂直居中 */
centered?: boolean;
/** 宽度 */
width?: string | number;
/** 底部内容 */
footer?: React.ReactNode;
/** 确认按钮文字 */
okText?: React.ReactNode;
/** 确认按钮类型 */
okType?: LegacyButtonType;
/** 取消按钮文字 */
cancelText?: React.ReactNode;
/** 点击蒙层是否允许关闭 */
maskClosable?: boolean;
/** 强制渲染 Modal */
forceRender?: boolean;
/** 对话框中的确认按钮,类型为ButtonProps */
okButtonProps?: ButtonProps;
/** 对话框中的取消按钮,类型为ButtonProps */
cancelButtonProps?: ButtonProps;
/** 关闭后是否完全清除此对话框的内容 */
destroyOnClose?: boo