| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | import { VantComponent } from '../common/component';import { button } from '../mixins/button';import { GRAY, RED } from '../common/color';import { toPromise } from '../common/utils';VantComponent({    mixins: [button],    classes: ['cancle-button-class', 'confirm-button-class'],    props: {        show: {            type: Boolean,            observer(show) {                !show && this.stopLoading();            },        },        title: String,        message: String,        theme: {            type: String,            value: 'default',        },        confirmButtonId: String,        className: String,        customStyle: String,        asyncClose: Boolean,        messageAlign: String,        beforeClose: null,        overlayStyle: String,        useSlot: Boolean,        useTitleSlot: Boolean,        useConfirmButtonSlot: Boolean,        useCancelButtonSlot: Boolean,        showCancelButton: Boolean,        closeOnClickOverlay: Boolean,        confirmButtonOpenType: String,        width: null,        zIndex: {            type: Number,            value: 2000,        },        confirmButtonText: {            type: String,            value: '确认',        },        cancelButtonText: {            type: String,            value: '取消',        },        confirmButtonColor: {            type: String,            value: RED,        },        cancelButtonColor: {            type: String,            value: GRAY,        },        showConfirmButton: {            type: Boolean,            value: true,        },        overlay: {            type: Boolean,            value: true,        },        transition: {            type: String,            value: 'scale',        },        rootPortal: {            type: Boolean,            value: false,        },    },    data: {        loading: {            confirm: false,            cancel: false,        },        callback: (() => { }),    },    methods: {        onConfirm() {            this.handleAction('confirm');        },        onCancel() {            this.handleAction('cancel');        },        onClickOverlay() {            this.close('overlay');        },        close(action) {            this.setData({ show: false });            this.closeAction = action;        },        onAfterLeave() {            const { closeAction: action } = this;            this.$emit('close', action);            const { callback } = this.data;            if (callback) {                callback(action, this);            }        },        stopLoading() {            this.setData({                loading: {                    confirm: false,                    cancel: false,                },            });        },        handleAction(action) {            this.$emit(action, { dialog: this });            const { asyncClose, beforeClose } = this.data;            if (!asyncClose && !beforeClose) {                this.close(action);                return;            }            this.setData({                [`loading.${action}`]: true,            });            if (beforeClose) {                toPromise(beforeClose(action)).then((value) => {                    if (value) {                        this.close(action);                    }                    else {                        this.stopLoading();                    }                });            }        },    },});
 |