52 lines
1.3 KiB
Vue
52 lines
1.3 KiB
Vue
<template>
|
|
<div class='tabs-view-container'>
|
|
<router-link class="tabs-view" v-for="tag in Array.from(visitedViews)" :to="tag.path" :key="tag.path">
|
|
<el-tag :closable="true" @close='closeViewTabs(tag,$event)'>
|
|
{{tag.name}}
|
|
</el-tag>
|
|
</router-link>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
computed: {
|
|
visitedViews() {
|
|
return this.$store.state.app.visitedViews.slice(-6)
|
|
}
|
|
},
|
|
methods: {
|
|
closeViewTabs(view, $event) {
|
|
this.$store.dispatch('delVisitedViews', view)
|
|
$event.preventDefault()
|
|
},
|
|
generateRoute() {
|
|
if (this.$route.matched[this.$route.matched.length - 1].name) {
|
|
return this.$route.matched[this.$route.matched.length - 1]
|
|
}
|
|
this.$route.matched[0].path = '/'
|
|
return this.$route.matched[0]
|
|
},
|
|
addViewTabs() {
|
|
this.$store.dispatch('addVisitedViews', this.generateRoute())
|
|
}
|
|
},
|
|
watch: {
|
|
$route() {
|
|
this.addViewTabs()
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style rel="stylesheet/scss" lang="scss" scoped>
|
|
.tabs-view-container{
|
|
display: inline-block;
|
|
vertical-align: top;
|
|
margin-left: 10px;
|
|
.tabs-view{
|
|
margin-left: 10px;
|
|
}
|
|
}
|
|
|
|
</style>
|