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.
261 lines
6.7 KiB
261 lines
6.7 KiB
"use strict";
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
|
|
exports.__esModule = true;
|
|
exports.default = void 0;
|
|
|
|
var _babelHelperVueJsxMergeProps = _interopRequireDefault(require("@vue/babel-helper-vue-jsx-merge-props"));
|
|
|
|
var _utils = require("../utils");
|
|
|
|
var _constant = require("../utils/constant");
|
|
|
|
var _popup = require("../mixins/popup");
|
|
|
|
var _button = _interopRequireDefault(require("../button"));
|
|
|
|
var _goodsAction = _interopRequireDefault(require("../goods-action"));
|
|
|
|
var _goodsActionButton = _interopRequireDefault(require("../goods-action-button"));
|
|
|
|
var _createNamespace = (0, _utils.createNamespace)('dialog'),
|
|
createComponent = _createNamespace[0],
|
|
bem = _createNamespace[1],
|
|
t = _createNamespace[2];
|
|
|
|
var _default = createComponent({
|
|
mixins: [(0, _popup.PopupMixin)()],
|
|
props: {
|
|
title: String,
|
|
theme: String,
|
|
width: [Number, String],
|
|
message: String,
|
|
className: null,
|
|
callback: Function,
|
|
beforeClose: Function,
|
|
messageAlign: String,
|
|
cancelButtonText: String,
|
|
cancelButtonColor: String,
|
|
confirmButtonText: String,
|
|
confirmButtonColor: String,
|
|
showCancelButton: Boolean,
|
|
overlay: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
allowHtml: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
transition: {
|
|
type: String,
|
|
default: 'van-dialog-bounce'
|
|
},
|
|
showConfirmButton: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
closeOnPopstate: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
closeOnClickOverlay: {
|
|
type: Boolean,
|
|
default: false
|
|
}
|
|
},
|
|
data: function data() {
|
|
return {
|
|
loading: {
|
|
confirm: false,
|
|
cancel: false
|
|
}
|
|
};
|
|
},
|
|
methods: {
|
|
onClickOverlay: function onClickOverlay() {
|
|
this.handleAction('overlay');
|
|
},
|
|
handleAction: function handleAction(action) {
|
|
var _this = this;
|
|
|
|
this.$emit(action); // show not trigger close event when hidden
|
|
|
|
if (!this.value) {
|
|
return;
|
|
}
|
|
|
|
if (this.beforeClose) {
|
|
this.loading[action] = true;
|
|
this.beforeClose(action, function (state) {
|
|
if (state !== false && _this.loading[action]) {
|
|
_this.onClose(action);
|
|
}
|
|
|
|
_this.loading.confirm = false;
|
|
_this.loading.cancel = false;
|
|
});
|
|
} else {
|
|
this.onClose(action);
|
|
}
|
|
},
|
|
onClose: function onClose(action) {
|
|
this.close();
|
|
|
|
if (this.callback) {
|
|
this.callback(action);
|
|
}
|
|
},
|
|
onOpened: function onOpened() {
|
|
this.$emit('opened');
|
|
},
|
|
onClosed: function onClosed() {
|
|
this.$emit('closed');
|
|
},
|
|
genRoundButtons: function genRoundButtons() {
|
|
var _this2 = this;
|
|
|
|
var h = this.$createElement;
|
|
return h(_goodsAction.default, {
|
|
"class": bem('footer')
|
|
}, [this.showCancelButton && h(_goodsActionButton.default, {
|
|
"attrs": {
|
|
"size": "large",
|
|
"type": "warning",
|
|
"text": this.cancelButtonText || t('cancel'),
|
|
"color": this.cancelButtonColor,
|
|
"loading": this.loading.cancel
|
|
},
|
|
"class": bem('cancel'),
|
|
"on": {
|
|
"click": function click() {
|
|
_this2.handleAction('cancel');
|
|
}
|
|
}
|
|
}), this.showConfirmButton && h(_goodsActionButton.default, {
|
|
"attrs": {
|
|
"size": "large",
|
|
"type": "danger",
|
|
"text": this.confirmButtonText || t('confirm'),
|
|
"color": this.confirmButtonColor,
|
|
"loading": this.loading.confirm
|
|
},
|
|
"class": bem('confirm'),
|
|
"on": {
|
|
"click": function click() {
|
|
_this2.handleAction('confirm');
|
|
}
|
|
}
|
|
})]);
|
|
},
|
|
genButtons: function genButtons() {
|
|
var _this3 = this,
|
|
_ref;
|
|
|
|
var h = this.$createElement;
|
|
var multiple = this.showCancelButton && this.showConfirmButton;
|
|
return h("div", {
|
|
"class": [_constant.BORDER_TOP, bem('footer')]
|
|
}, [this.showCancelButton && h(_button.default, {
|
|
"attrs": {
|
|
"size": "large",
|
|
"loading": this.loading.cancel,
|
|
"text": this.cancelButtonText || t('cancel')
|
|
},
|
|
"class": bem('cancel'),
|
|
"style": {
|
|
color: this.cancelButtonColor
|
|
},
|
|
"on": {
|
|
"click": function click() {
|
|
_this3.handleAction('cancel');
|
|
}
|
|
}
|
|
}), this.showConfirmButton && h(_button.default, {
|
|
"attrs": {
|
|
"size": "large",
|
|
"loading": this.loading.confirm,
|
|
"text": this.confirmButtonText || t('confirm')
|
|
},
|
|
"class": [bem('confirm'), (_ref = {}, _ref[_constant.BORDER_LEFT] = multiple, _ref)],
|
|
"style": {
|
|
color: this.confirmButtonColor
|
|
},
|
|
"on": {
|
|
"click": function click() {
|
|
_this3.handleAction('confirm');
|
|
}
|
|
}
|
|
})]);
|
|
},
|
|
genContent: function genContent(hasTitle, messageSlot) {
|
|
var h = this.$createElement;
|
|
|
|
if (messageSlot) {
|
|
return h("div", {
|
|
"class": bem('content')
|
|
}, [messageSlot]);
|
|
}
|
|
|
|
var message = this.message,
|
|
messageAlign = this.messageAlign;
|
|
|
|
if (message) {
|
|
var _bem, _domProps;
|
|
|
|
var data = {
|
|
class: bem('message', (_bem = {
|
|
'has-title': hasTitle
|
|
}, _bem[messageAlign] = messageAlign, _bem)),
|
|
domProps: (_domProps = {}, _domProps[this.allowHtml ? 'innerHTML' : 'textContent'] = message, _domProps)
|
|
};
|
|
return h("div", {
|
|
"class": bem('content', {
|
|
isolated: !hasTitle
|
|
})
|
|
}, [h("div", (0, _babelHelperVueJsxMergeProps.default)([{}, data]))]);
|
|
}
|
|
}
|
|
},
|
|
render: function render() {
|
|
var h = arguments[0];
|
|
|
|
if (!this.shouldRender) {
|
|
return;
|
|
}
|
|
|
|
var message = this.message;
|
|
var messageSlot = this.slots();
|
|
var title = this.slots('title') || this.title;
|
|
var Title = title && h("div", {
|
|
"class": bem('header', {
|
|
isolated: !message && !messageSlot
|
|
})
|
|
}, [title]);
|
|
return h("transition", {
|
|
"attrs": {
|
|
"name": this.transition
|
|
},
|
|
"on": {
|
|
"afterEnter": this.onOpened,
|
|
"afterLeave": this.onClosed
|
|
}
|
|
}, [h("div", {
|
|
"directives": [{
|
|
name: "show",
|
|
value: this.value
|
|
}],
|
|
"attrs": {
|
|
"role": "dialog",
|
|
"aria-labelledby": this.title || message
|
|
},
|
|
"class": [bem([this.theme]), this.className],
|
|
"style": {
|
|
width: (0, _utils.addUnit)(this.width)
|
|
}
|
|
}, [Title, this.genContent(title, messageSlot), this.theme === 'round-button' ? this.genRoundButtons() : this.genButtons()])]);
|
|
}
|
|
});
|
|
|
|
exports.default = _default; |