You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.6 KiB
45 lines
1.6 KiB
import Vue from 'vue' |
|
import store from './store'; |
|
Vue.mixin({ |
|
beforeRouteEnter: function (to, from, next) { |
|
next(() => { |
|
let avueView = document.getElementById('avue-view'); |
|
if (avueView && to.meta.savedPosition) { |
|
avueView.scrollTop = to.meta.savedPosition |
|
} |
|
}) |
|
}, |
|
beforeRouteLeave: function (to, from, next) { |
|
let avueView = document.getElementById('avue-view'); |
|
if (from && from.meta.keepAlive) { |
|
if (avueView) { |
|
from.meta.savedPosition = avueView.scrollTop |
|
} |
|
const result = this.$route.meta.keepAlive === true && store.state.tags.tagList.some(ele => { |
|
return ele.value === this.$route.fullPath; |
|
}); |
|
if (this.$vnode && !result) { |
|
from.meta.savedPosition = 0 |
|
if (this.$vnode.parent && this.$vnode.parent.componentInstance && this.$vnode.parent.componentInstance.cache) { |
|
if (this.$vnode.componentOptions) { |
|
let key = this.$vnode.key == null |
|
? this.$vnode.componentOptions.Ctor.cid + (this.$vnode.componentOptions.tag ? `::${this.$vnode.componentOptions.tag}` : '') |
|
: this.$vnode.key; |
|
let cache = this.$vnode.parent.componentInstance.cache; |
|
let keys = this.$vnode.parent.componentInstance.keys; |
|
if (cache[key]) { |
|
if (keys.length) { |
|
let index = keys.indexOf(key); |
|
if (index > -1) { |
|
keys.splice(index, 1); |
|
} |
|
} |
|
delete cache[key]; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
next(); |
|
}, |
|
});
|
|
|