You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							121 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							121 lines
						
					
					
						
							2.5 KiB
						
					
					
				
								import { VantComponent } from '../common/component';
							 | 
						|
								import { button } from '../mixins/button';
							 | 
						|
								import { openType } from '../mixins/open-type';
							 | 
						|
								import { GRAY, RED } from '../common/color';
							 | 
						|
								import { toPromise } from '../common/utils';
							 | 
						|
								VantComponent({
							 | 
						|
								  mixins: [button, openType],
							 | 
						|
								  props: {
							 | 
						|
								    show: {
							 | 
						|
								      type: Boolean,
							 | 
						|
								      observer(show) {
							 | 
						|
								        !show && this.stopLoading();
							 | 
						|
								      },
							 | 
						|
								    },
							 | 
						|
								    title: String,
							 | 
						|
								    message: String,
							 | 
						|
								    theme: {
							 | 
						|
								      type: String,
							 | 
						|
								      value: 'default',
							 | 
						|
								    },
							 | 
						|
								    useSlot: Boolean,
							 | 
						|
								    className: String,
							 | 
						|
								    customStyle: String,
							 | 
						|
								    asyncClose: Boolean,
							 | 
						|
								    messageAlign: String,
							 | 
						|
								    beforeClose: null,
							 | 
						|
								    overlayStyle: String,
							 | 
						|
								    useTitleSlot: 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',
							 | 
						|
								    },
							 | 
						|
								  },
							 | 
						|
								  data: {
							 | 
						|
								    loading: {
							 | 
						|
								      confirm: false,
							 | 
						|
								      cancel: false,
							 | 
						|
								    },
							 | 
						|
								  },
							 | 
						|
								  methods: {
							 | 
						|
								    onConfirm() {
							 | 
						|
								      this.handleAction('confirm');
							 | 
						|
								    },
							 | 
						|
								    onCancel() {
							 | 
						|
								      this.handleAction('cancel');
							 | 
						|
								    },
							 | 
						|
								    onClickOverlay() {
							 | 
						|
								      this.onClose('overlay');
							 | 
						|
								    },
							 | 
						|
								    close(action) {
							 | 
						|
								      this.setData({ show: false });
							 | 
						|
								      wx.nextTick(() => {
							 | 
						|
								        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();
							 | 
						|
								          }
							 | 
						|
								        });
							 | 
						|
								      }
							 | 
						|
								    },
							 | 
						|
								  },
							 | 
						|
								});
							 |