UNPKG

vivo-ui

Version:

vivo ui component lib for vue

63 lines (57 loc) 2.17 kB
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;