按照作者所说的,需要什么功能,从vue-element-admin-master中拷贝过来使用即可。
一、从vue-element-admin复制文件:
vue-admin-template\src\layout\components\TagsView 文件夹
vue-admin-template\src\store\modules\tagsView.js
二、修改 vue-admin-template\src\layout\components\AppMain.vue :AppMain.vue文件,修改如下:
name:'AppMain',
computed: {//需要缓存的页面 固钉
cachedViews() {return this.$store.state.tagsView.cachedViews
},
key() {return this.$route.fullPath
}
}
}
.app-main {/*84 = navbar + tags-view = 50 + 34*/min-height: calc(100vh -84px);
}
.fixed-header+.app-main {
padding-top: 84px;
}
}
//fix css style bug in open el-dialog
.el-popup-parent--hidden {
.fixed-header {
padding-right: 15px;
}
}
三、修改vue-admin-template\src\layout\components\index.js,新增如下行
export { default as TagsView } from './TagsView'
四、在 vue-admin-template\src\layout\index.vue 文件中 新增 tagsview标签
import { Navbar, Sidebar, AppMain,TagsView } from './components'
components: {
Navbar,
Sidebar,
AppMain,
TagsView//新增
},
五、vue-admin-template\src\store\getters.js,增加:
visitedViews: state =>state.tagsView.visitedViews,
cachedViews: state=> state.tagsView.cachedViews,
六、修改 vue-admin-template\src\store\index.js
import tagsView from './modules/tagsView'
const store = newVuex.Store({
modules: {
app,
settings,
tagsView,//此处新增
user
},
getters
})
七、修改vue-admin-template\src\settings.js 添加
tagsView: true,
设置为根据值,是否选择加载。
八、修改vue-admin-template\src\store\modules\settings.js
const { showSettings, fixedHeader, sidebarLogo,tagsView } = defaultSettings
const state ={
showSettings: showSettings,
tagsView: tagsView,//此处新增
fixedHeader: fixedHeader,
sidebarLogo: sidebarLogo
}
九、解决问题
1、删除vue-admin-template\src\layout\components\TagsView\index.vue中routes方法(因为没有用到权限校验)
computed: {
visitedViews() {return this.$store.state.tagsView.visitedViews
}/*,
routes() {
return this.$store.state.permission.routes
}*/},
2、遍历标签时可能控制台报错
filterAffixTags(routes, basePath = '/') {
let tags=[]//判断是否为空,否则控制台会报错
if(this.routes){
routes.forEach(route=>{if (route.meta &&route.meta.affix) {
const tagPath=path.resolve(basePath, route.path)
tags.push({
fullPath: tagPath,
path: tagPath,
name: route.name,
meta: { ...route.meta }
})
}if(route.children) {
const tempTags= this.filterAffixTags(route.children, route.path)if (tempTags.length >= 1) {
tags=[...tags, ...tempTags]
}
}
})
}returntags
},
3、删除全部标签后,会跳到404页面,所以要固定一些版面是不允许删除的。
在meta中加上affix: true就能使它不可删除,例如:meta: { title: '首页', icon: 'dashboard', affix: true }
{
path:'/',
component: Layout,
redirect:'/dashboard',
children: [{
path:'dashboard',
name:'Dashboard',
component: ()=> import('@/views/dashboard/index'),
meta: { title:'后台管理系统', icon: 'dashboard' , affix: true}
}]
},
以上步骤,亲测可行。