vivo-ui
Version:
vivo ui component lib for vue
63 lines (57 loc) • 2.17 kB
JavaScript
import _toConsumableArray from 'babel-runtime/helpers/toConsumableArray';
import Dialog from '../../components/dialog/index';
var index = {
install: function install(Vue) {
var list = [];
Dialog.mixins = [].concat(_toConsumableArray(Dialog.mixins), [{
created: function created() {
list.push(this);
}
}]);
Vue.$vui = Vue.prototype.$vui = Vue.prototype.$vui || {};
Vue.prototype.$vui.dialog = {
show: function show(option) {
new Vue({ // eslint-disable-line no-new
el: document.body.appendChild(document.createElement('div')),
template: '<v-dialog class="' + (option.className ? option.className : 'vui-dialog-plugin') + '" :close="close" :auto-close="autoClose" :title="title" :btns="btns" v-model="show" @btn-click="btnClick"><div v-html="slot"></div></v-dialog>',
data: {
show: true,
slot: option && option.slot || '',
close: option && option.close || Dialog.props.close.default,
autoClose: option && option.autoClose !== undefined ? option.autoClose : Dialog.props.autoClose.default,
title: option && option.title || Dialog.props.title.default,
btns: option && option.btns || Dialog.props.btns.default()
},
watch: {
show: function show(value) {
var _this = this;
!value && setTimeout(function () {
_this.$destroy();
}, 1000);
}
},
methods: {
btnClick: function btnClick(type) {
option && typeof option.callback === 'function' ? option.callback(type, this.destroy) : this.destroy();
},
destroy: function destroy() {
this.show = false;
}
},
destroyed: function destroyed() {
this.$el.parentElement.removeChild(this.$el);
},
components: {
VDialog: Dialog
}
});
},
hide: function hide() {
list.forEach(function (vm) {
vm.$emit('input', false);
});
}
};
}
};
export default index;