diff --git a/examples/routers/modal.vue b/examples/routers/modal.vue index 23e6a6d0..0c5c37e1 100644 --- a/examples/routers/modal.vue +++ b/examples/routers/modal.vue @@ -5,7 +5,9 @@ v-model="modal1" title="Common Modal dialog box title" @on-ok="ok" - @on-cancel="cancel"> + @on-cancel="cancel" + :before-close="handleBeforeClose" + >

Content of dialog

Content of dialog

Content of dialog

@@ -145,6 +147,20 @@ handleSpinShow () { this.$Spin.show(); }, + handleBeforeClose () { + return new Promise((resolve, reject) => { + this.$Modal.confirm({ + title: '关闭确认', + content: '您确认要关闭弹窗吗?', + onOk: () => { + resolve(); + }, + onCancel: () => { + reject(); + } + }); + }); + } } } diff --git a/src/components/modal/modal.vue b/src/components/modal/modal.vue index 5a992c21..5e86c6af 100644 --- a/src/components/modal/modal.vue +++ b/src/components/modal/modal.vue @@ -150,7 +150,8 @@ zIndex: { type: Number, default: 1000 - } + }, + beforeClose: Function }, data () { return { @@ -259,6 +260,21 @@ }, methods: { close () { + if (!this.beforeClose) { + return this.handleClose(); + } + + const before = this.beforeClose(); + + if (before && before.then) { + before.then(() => { + this.handleClose(); + }); + } else { + this.handleClose(); + } + }, + handleClose () { this.visible = false; this.$emit('input', false); this.$emit('on-cancel');