Commit 4a8826fa029afc966c38c916411893ed6aaea5a0

Authored by 梁灏
1 parent f308dcac

fixed #4895

examples/routers/drawer.vue
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <Button @click="visible3 = true">show3</Button> 5 <Button @click="visible3 = true">show3</Button>
6 6
7 <div style="width: 500px;height:500px;background: green;position: relative;"> 7 <div style="width: 500px;height:500px;background: green;position: relative;">
8 - <Drawer v-model="visible" placement="left" draggable inner :transfer="false" width="50" @on-resize-width="hrw" title="抽屉标题" :styles="styles" @on-close="handleClose"> 8 + <Drawer v-model="visible" placement="left" :before-close="handleBeforeClose" draggable inner :transfer="false" width="50" @on-resize-width="hrw" title="抽屉标题" :styles="styles" @on-close="handleClose">
9 <p>一些内容</p> 9 <p>一些内容</p>
10 <p>一些内容</p> 10 <p>一些内容</p>
11 <p>一些内容</p> 11 <p>一些内容</p>
@@ -209,6 +209,20 @@ @@ -209,6 +209,20 @@
209 }, 209 },
210 hrw (w) { 210 hrw (w) {
211 console.log(w); 211 console.log(w);
  212 + },
  213 + handleBeforeClose () {
  214 + return new Promise((resolve, reject) => {
  215 + this.$Modal.confirm({
  216 + title: '关闭确认',
  217 + content: '您确认要关闭抽屉吗?',
  218 + onOk: () => {
  219 + resolve();
  220 + },
  221 + onCancel: () => {
  222 + reject();
  223 + }
  224 + });
  225 + });
212 } 226 }
213 } 227 }
214 }; 228 };
src/components/drawer/drawer.vue
@@ -106,7 +106,8 @@ @@ -106,7 +106,8 @@
106 draggable: { 106 draggable: {
107 type: Boolean, 107 type: Boolean,
108 default: false 108 default: false
109 - } 109 + },
  110 + beforeClose: Function,
110 }, 111 },
111 data () { 112 data () {
112 return { 113 return {
@@ -176,6 +177,21 @@ @@ -176,6 +177,21 @@
176 }, 177 },
177 methods: { 178 methods: {
178 close () { 179 close () {
  180 + if (!this.beforeClose) {
  181 + return this.handleClose();
  182 + }
  183 +
  184 + const before = this.beforeClose();
  185 +
  186 + if (before && before.then) {
  187 + before.then(() => {
  188 + this.handleClose();
  189 + });
  190 + } else {
  191 + this.handleClose();
  192 + }
  193 + },
  194 + handleClose () {
179 this.visible = false; 195 this.visible = false;
180 this.$emit('input', false); 196 this.$emit('input', false);
181 this.$emit('on-close'); 197 this.$emit('on-close');