import { createNamespace, addUnit } from '../utils'; import { BORDER_TOP, BORDER_LEFT } from '../utils/constant'; import { PopupMixin } from '../mixins/popup'; import Button from '../button'; const [createComponent, bem, t] = createNamespace('dialog'); export default createComponent({ mixins: [PopupMixin()], props: { title: String, width: [Number, String], message: String, className: null, callback: Function, beforeClose: Function, messageAlign: String, cancelButtonText: String, cancelButtonColor: String, confirmButtonText: String, confirmButtonColor: String, showCancelButton: Boolean, transition: { type: String, default: 'van-dialog-bounce', }, showConfirmButton: { type: Boolean, default: true, }, overlay: { type: Boolean, default: true, }, closeOnClickOverlay: { type: Boolean, default: false, }, }, data() { return { loading: { confirm: false, cancel: false, }, }; }, methods: { onClickOverlay() { this.handleAction('overlay'); }, handleAction(action) { this.$emit(action); // show not trigger close event when hidden if (!this.value) { return; } if (this.beforeClose) { this.loading[action] = true; this.beforeClose(action, state => { if (state !== false && this.loading[action]) { this.onClose(action); } this.loading.confirm = false; this.loading.cancel = false; }); } else { this.onClose(action); } }, onClose(action) { this.close(); if (this.callback) { this.callback(action); } }, onOpened() { this.$emit('opened'); }, onClosed() { this.$emit('closed'); }, genButtons() { const multiple = this.showCancelButton && this.showConfirmButton; return (