/** * 2019-09-24 * 使用promise的方式弹出模态框 * @params title = '提示', *@params message = '', @params footer = [{ text: '确定', promiseType: 'confirm' }], @params icon= 'warning', @params maskClosable = false */ import React, { Component } from "react"; import { render } from 'react-dom'; import './modal.less'; import { Button, Icon, Modal } from "antd"; function renderModal(modalInfo, resolve) { class ModalComponent extends Component { constructor(props, context) { super(props, context); this.state = { ...modalInfo }; } render() { return ( {(() => { switch(modalInfo.icon) { case 'info': return ; case 'success': return ; case 'warning': return ; case 'error': return ; default: // return ; return ''; } })()} {modalInfo.title} {modalInfo.message} {/* */} {modalInfo.footer instanceof Array && modalInfo.footer.map((btn, index) => { return ( { const open = () => { this.setState({ visible: false }); const { title, message, footer, icon, maskClosable} = this.state; return showModal(title, message, footer, icon, maskClosable); }; const close = () => { this.setState({ visible: false }); }; // if(!btn.promiseType) { // close(); // } close(); resolve({ type: btn.promiseType, close, open }); } }> {btn.text} ); })} ); } } let div = document.createElement('div'); render(, div); } export default function showModal( title = '提示', message = '', footer = [{ text: '确定', type: 'primary' }], icon= 'warning', maskClosable = false ) { return new Promise((resolve, reject) => { try{ const modalInfo = { visible: true, maskClosable, title, message, footer: footer || [{ text: '确定', type: 'primary' }], icon: icon || 'warning' }; renderModal(modalInfo, resolve); }catch(err) { reject(err); } }); }