import Alert from './Alert'
|
|
const AlertMixin = {
|
install(Vue) {
|
Vue.mixin({
|
methods: {
|
$alert(message, duration = 2000) {
|
let Constructor= Vue.extend(Alert)
|
let alert = new Constructor()
|
alert.$slots.default = message
|
alert.$props.alert = this.$page.alert
|
alert.$mount()
|
document.body.appendChild(alert.$el)
|
|
const appendHeight = alert.$el.offsetHeight + 16
|
this.$page.alert.top += appendHeight
|
|
setTimeout(() => {
|
this.$page.alert.top -= appendHeight
|
this.triggerRemoveAlert(appendHeight)
|
setTimeout(() => {
|
alert.$destroy()
|
alert.$el.remove()
|
}, 100)
|
}, duration)
|
},
|
triggerRemoveAlert(height) {
|
const event = new CustomEvent('alert_remove', {
|
detail: {height}
|
})
|
window.dispatchEvent(event)
|
}
|
}
|
})
|
}
|
}
|
|
export default AlertMixin
|