vivo-ui
Version:
vivo ui component lib for vue
57 lines (54 loc) • 1.87 kB
JavaScript
import Dialog from '../../components/dialog/index.vue'
export default {
install (Vue) {
const list = []
Dialog.mixins = [...Dialog.mixins, {
created () {
list.push(this)
}
}]
Vue.$vui = Vue.prototype.$vui = Vue.prototype.$vui || {}
Vue.prototype.$vui.dialog = {
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" -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 (value) {
!value && setTimeout(() => {
this.$destroy()
}, 1000)
}
},
methods: {
btnClick (type) {
option && typeof option.callback === 'function' ? option.callback(type, this.destroy) : this.destroy()
},
destroy () {
this.show = false
}
},
destroyed () {
this.$el.parentElement.removeChild(this.$el)
},
components: {
VDialog: Dialog
}
})
},
hide () {
list.forEach(function (vm) {
vm.$emit('input', false)
})
}
}
}
}