1234567891011121314151617181920212223242526272829303132333435363738 |
- 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
|