You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
2.5 KiB
Vue
113 lines
2.5 KiB
Vue
1 year ago
|
<template>
|
||
|
<div id="app">
|
||
|
<router-view></router-view>
|
||
|
</div>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
import { mapActions } from "vuex";
|
||
|
|
||
|
export default {
|
||
|
name: "App",
|
||
|
methods: {
|
||
|
...mapActions("cache", ["addCache", "removeCache"]),
|
||
|
// 收集缓存(通过监听)
|
||
|
collectCaches() {
|
||
|
// 收集当前路由相关的缓存
|
||
|
this.$route.matched.forEach((routeMatch) => {
|
||
|
const instance = routeMatch.components?.default;
|
||
|
const componentName = instance?.name;
|
||
|
console.log(componentName);
|
||
|
if (process.env.NODE_ENV === "development") {
|
||
|
this.checkRouteComponentName(componentName, instance?.__file);
|
||
|
}
|
||
|
// 配置了meta.keepAlive的路由组件添加到缓存
|
||
|
if (routeMatch.meta.keepAlive) {
|
||
|
if (!componentName) {
|
||
|
console.warn(`${routeMatch.path} 路由的组件名称name为空`);
|
||
|
return;
|
||
|
}
|
||
|
this.addCache(componentName);
|
||
|
} else {
|
||
|
this.removeCache(componentName);
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
// 检测路由组件名称是否重复(组件重名会缓存到不该缓存的组件,而且不容易排查问题,所以开发环境时检测重名)
|
||
|
checkRouteComponentName(name, file) {
|
||
|
if (!this.cmpNames) this.cmpNames = {};
|
||
|
if (this.cmpNames[name]) {
|
||
|
if (this.cmpNames[name] !== file) {
|
||
|
console.warn(
|
||
|
`${file} 与${this.cmpNames[name]} 组件名称重复: ${name}`
|
||
|
);
|
||
|
}
|
||
|
} else {
|
||
|
this.cmpNames[name] = file;
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
watch: {
|
||
|
"$route.path": {
|
||
|
immediate: true,
|
||
|
handler() {
|
||
|
this.collectCaches();
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
};
|
||
|
</script>
|
||
|
|
||
|
<style lang="less">
|
||
|
* {
|
||
|
margin: 0;
|
||
|
padding: 0;
|
||
|
}
|
||
|
html,
|
||
|
body {
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
overflow: hidden;
|
||
|
color: #fff;
|
||
|
}
|
||
|
a {
|
||
|
text-decoration: none;
|
||
|
color: #fff;
|
||
|
}
|
||
|
#app {
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
}
|
||
|
body {
|
||
|
font-family: "PingFang SC", "Helvetica Neue", Helvetica, "microsoft yahei",
|
||
|
arial, STHeiTi, sans-serif;
|
||
|
}
|
||
|
// /* 整个滚动条 */
|
||
|
// ::-webkit-scrollbar {
|
||
|
// width: 8px;
|
||
|
// height: 8px;
|
||
|
// }
|
||
|
|
||
|
// /* 滚动条上的滚动滑块 */
|
||
|
// ::-webkit-scrollbar-thumb {
|
||
|
// background-color: #ccc;
|
||
|
// /* 关键代码 */
|
||
|
// border-radius: 32px;
|
||
|
// }
|
||
|
|
||
|
// /* 滚动条轨道 */
|
||
|
// ::-webkit-scrollbar-track {
|
||
|
// background-color: #f0f0f0;
|
||
|
// border-radius: 32px;
|
||
|
// }
|
||
|
.el-dialog__headerbtn {
|
||
|
top: 18px;
|
||
|
.el-dialog__close {
|
||
|
font-size: 26px;
|
||
|
&:hover {
|
||
|
background: #e2e2e2;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</style>
|