UNPKG

ant-design-vue

Version:

An enterprise-class UI design language and Vue-based implementation

222 lines (189 loc) 7.08 kB
import { createVNode as _createVNode } from "vue"; function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } import { defineComponent, inject } from 'vue'; import classNames from '../_util/classNames'; import Dialog from '../vc-dialog'; import PropTypes from '../_util/vue-types'; import addEventListener from '../vc-util/Dom/addEventListener'; import { getConfirmLocale } from './locale'; import CloseOutlined from '@ant-design/icons-vue/CloseOutlined'; import Button from '../button'; import buttonTypes from '../button/buttonTypes'; import LocaleReceiver from '../locale-provider/LocaleReceiver'; import { getComponent, getSlot } from '../_util/props-util'; import initDefaultProps from '../_util/props-util/initDefaultProps'; import { defaultConfigProvider } from '../config-provider'; var ButtonProps = buttonTypes(); var ButtonType = ButtonProps.type; var mousePosition = null; // ref: https://github.com/ant-design/ant-design/issues/15795 var getClickPosition = function getClickPosition(e) { mousePosition = { x: e.pageX, y: e.pageY }; // 100ms 内发生过点击事件,则从点击位置动画展示 // 否则直接 zoom 展示 // 这样可以兼容非点击方式展开 setTimeout(function () { return mousePosition = null; }, 100); }; // 只有点击事件支持从鼠标位置动画展开 if (typeof window !== 'undefined' && window.document && window.document.documentElement) { addEventListener(document.documentElement, 'click', getClickPosition, true); } function noop() {} var modalProps = { prefixCls: PropTypes.string, /** 对话框是否可见*/ visible: PropTypes.looseBool, /** 确定按钮 loading*/ confirmLoading: PropTypes.looseBool, /** 标题*/ title: PropTypes.any, /** 是否显示右上角的关闭按钮*/ closable: PropTypes.looseBool, closeIcon: PropTypes.any, /** 点击确定回调*/ onOk: { type: Function }, /** 点击模态框右上角叉、取消按钮、Props.maskClosable 值为 true 时的遮罩层或键盘按下 Esc 时的回调*/ onCancel: { type: Function }, afterClose: PropTypes.func.def(noop), /** 垂直居中 */ centered: PropTypes.looseBool, /** 宽度*/ width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), /** 底部内容*/ footer: PropTypes.any, /** 确认按钮文字*/ okText: PropTypes.any, /** 确认按钮类型*/ okType: ButtonType, /** 取消按钮文字*/ cancelText: PropTypes.any, icon: PropTypes.any, /** 点击蒙层是否允许关闭*/ maskClosable: PropTypes.looseBool, /** 强制渲染 Modal*/ forceRender: PropTypes.looseBool, okButtonProps: PropTypes.shape(buttonTypes).loose, cancelButtonProps: PropTypes.shape(buttonTypes).loose, destroyOnClose: PropTypes.looseBool, wrapClassName: PropTypes.string, maskTransitionName: PropTypes.string, transitionName: PropTypes.string, getContainer: PropTypes.func, zIndex: PropTypes.number, bodyStyle: PropTypes.style, maskStyle: PropTypes.style, mask: PropTypes.looseBool, keyboard: PropTypes.looseBool, wrapProps: PropTypes.object, focusTriggerAfterClose: PropTypes.looseBool }; export var destroyFns = []; export default defineComponent({ name: 'AModal', inheritAttrs: false, props: initDefaultProps(modalProps, { width: 520, transitionName: 'zoom', maskTransitionName: 'fade', confirmLoading: false, visible: false, okType: 'primary' }), emits: ['update:visible', 'cancel', 'change', 'ok'], setup: function setup() { return { configProvider: inject('configProvider', defaultConfigProvider) }; }, data: function data() { return { sVisible: !!this.visible }; }, watch: { visible: function visible(val) { this.sVisible = val; } }, methods: { handleCancel: function handleCancel(e) { this.$emit('update:visible', false); this.$emit('cancel', e); this.$emit('change', false); }, handleOk: function handleOk(e) { this.$emit('ok', e); }, renderFooter: function renderFooter(locale) { var _this = this; var okType = this.okType, confirmLoading = this.confirmLoading; var cancelBtnProps = _extends({ onClick: this.handleCancel }, this.cancelButtonProps || {}); var okBtnProps = _extends({ onClick: this.handleOk, type: okType, loading: confirmLoading }, this.okButtonProps || {}); return _createVNode("div", null, [_createVNode(Button, cancelBtnProps, { default: function _default() { return [getComponent(_this, 'cancelText') || locale.cancelText]; } }), _createVNode(Button, okBtnProps, { default: function _default() { return [getComponent(_this, 'okText') || locale.okText]; } })]); } }, render: function render() { var customizePrefixCls = this.prefixCls, visible = this.sVisible, wrapClassName = this.wrapClassName, centered = this.centered, getContainer = this.getContainer, $attrs = this.$attrs; var children = getSlot(this); var _this$configProvider = this.configProvider, getPrefixCls = _this$configProvider.getPrefixCls, getContextPopupContainer = _this$configProvider.getPopupContainer; var prefixCls = getPrefixCls('modal', customizePrefixCls); var defaultFooter = _createVNode(LocaleReceiver, { "componentName": "Modal", "defaultLocale": getConfirmLocale(), "children": this.renderFooter }, null); var closeIcon = getComponent(this, 'closeIcon'); var closeIconToRender = _createVNode("span", { "class": "".concat(prefixCls, "-close-x") }, [closeIcon || _createVNode(CloseOutlined, { "class": "".concat(prefixCls, "-close-icon") }, null)]); var footer = getComponent(this, 'footer'); var title = getComponent(this, 'title'); var dialogProps = _extends(_extends(_extends({}, this.$props), $attrs), { getContainer: getContainer === undefined ? getContextPopupContainer : getContainer, prefixCls: prefixCls, wrapClassName: classNames(_defineProperty({}, "".concat(prefixCls, "-centered"), !!centered), wrapClassName), title: title, footer: footer === undefined ? defaultFooter : footer, visible: visible, mousePosition: mousePosition, closeIcon: closeIconToRender, onClose: this.handleCancel }); return _createVNode(Dialog, dialogProps, { default: function _default() { return [children]; } }); } });