/*
|
* @Author: shuishen 1109946754@qq.com
|
* @Date: 2023-12-14 17:10:00
|
* @LastEditors: shuishen 1109946754@qq.com
|
* @LastEditTime: 2024-01-22 13:23:37
|
* @FilePath: \jczz_web\src\cache.js
|
* @Description:
|
*
|
* Copyright (c) 2024 by shuishen, All Rights Reserved.
|
*/
|
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;
|
}
|
console.log(store.state.tags.tagList, this.$route.fullPath, 909999);
|
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();
|
},
|
});
|