|
|
@ -9,9 +9,9 @@ |
|
|
|
v-model="activeValue" |
|
|
|
> |
|
|
|
<el-tab-pane |
|
|
|
:key="item.name" |
|
|
|
:key="item.name + JSON.stringify(item.query)+JSON.stringify(item.params)" |
|
|
|
:label="item.meta.title" |
|
|
|
:name="item.name" |
|
|
|
:name="item.name + JSON.stringify(item.query)+JSON.stringify(item.params)" |
|
|
|
:tab="item" |
|
|
|
v-for="item in historys" |
|
|
|
></el-tab-pane> |
|
|
@ -27,73 +27,75 @@ |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
<script> |
|
|
|
import {mapGetters} from "vuex" |
|
|
|
import { mapGetters } from "vuex"; |
|
|
|
|
|
|
|
export default { |
|
|
|
name: 'HistoryComponent', |
|
|
|
name: "HistoryComponent", |
|
|
|
data() { |
|
|
|
return { |
|
|
|
historys: [], |
|
|
|
activeValue: '', |
|
|
|
activeValue: "", |
|
|
|
contextMenuVisible: false, |
|
|
|
left: 0, |
|
|
|
top: 0, |
|
|
|
isCollapse: false, |
|
|
|
isMobile: false, |
|
|
|
rightActive: '' |
|
|
|
} |
|
|
|
rightActive: "" |
|
|
|
}; |
|
|
|
}, |
|
|
|
|
|
|
|
computed:{ |
|
|
|
...mapGetters("user",["userInfo"]), |
|
|
|
defaultRouter(){ |
|
|
|
return this.userInfo.authority.defaultRouter |
|
|
|
computed: { |
|
|
|
...mapGetters("user", ["userInfo"]), |
|
|
|
defaultRouter() { |
|
|
|
return this.userInfo.authority.defaultRouter; |
|
|
|
} |
|
|
|
}, |
|
|
|
created() { |
|
|
|
this.activeValue = this.defaultRouter |
|
|
|
this.$bus.on('mobile', isMobile => { |
|
|
|
this.isMobile = isMobile |
|
|
|
}) |
|
|
|
this.$bus.on('collapse', isCollapse => { |
|
|
|
this.isCollapse = isCollapse |
|
|
|
}) |
|
|
|
this.$bus.on("mobile", isMobile => { |
|
|
|
this.isMobile = isMobile; |
|
|
|
}); |
|
|
|
this.$bus.on("collapse", isCollapse => { |
|
|
|
this.isCollapse = isCollapse; |
|
|
|
}); |
|
|
|
const initHistorys = [ |
|
|
|
{ |
|
|
|
name: this.defaultRouter, |
|
|
|
meta: { |
|
|
|
title: '首页' |
|
|
|
} |
|
|
|
title: "首页" |
|
|
|
}, |
|
|
|
query: {}, |
|
|
|
params: {} |
|
|
|
} |
|
|
|
] |
|
|
|
]; |
|
|
|
this.historys = |
|
|
|
JSON.parse(sessionStorage.getItem('historys')) || initHistorys |
|
|
|
this.setTab(this.$route) |
|
|
|
JSON.parse(sessionStorage.getItem("historys")) || initHistorys; |
|
|
|
this.activeValue = window.sessionStorage.getItem("activeValue"); |
|
|
|
this.setTab(this.$route); |
|
|
|
}, |
|
|
|
|
|
|
|
beforeDestroy() { |
|
|
|
this.$bus.off('collapse') |
|
|
|
this.$bus.off('mobile') |
|
|
|
this.$bus.off("collapse"); |
|
|
|
this.$bus.off("mobile"); |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
openContextMenu(e) { |
|
|
|
if (this.historys.length == 1 && this.$route.name == this.defaultRouter) { |
|
|
|
return false |
|
|
|
return false; |
|
|
|
} |
|
|
|
if (e.srcElement.id) { |
|
|
|
this.contextMenuVisible = true |
|
|
|
let width |
|
|
|
this.contextMenuVisible = true; |
|
|
|
let width; |
|
|
|
if (this.isCollapse) { |
|
|
|
width = 54 |
|
|
|
width = 54; |
|
|
|
} else { |
|
|
|
width = 220 |
|
|
|
width = 220; |
|
|
|
} |
|
|
|
if (this.isMobile) { |
|
|
|
width = 0 |
|
|
|
width = 0; |
|
|
|
} |
|
|
|
this.left = e.clientX - width |
|
|
|
this.top = e.clientY + 10 |
|
|
|
this.rightActive = e.srcElement.id.split('-')[1] |
|
|
|
this.left = e.clientX - width; |
|
|
|
this.top = e.clientY + 10; |
|
|
|
this.rightActive = e.srcElement.id.split("-")[1]; |
|
|
|
} |
|
|
|
}, |
|
|
|
closeAll() { |
|
|
@ -101,115 +103,197 @@ export default { |
|
|
|
{ |
|
|
|
name: this.defaultRouter, |
|
|
|
meta: { |
|
|
|
title: '首页' |
|
|
|
} |
|
|
|
title: "首页" |
|
|
|
}, |
|
|
|
query: {}, |
|
|
|
params: {} |
|
|
|
} |
|
|
|
] |
|
|
|
this.$router.push({ name: this.defaultRouter }) |
|
|
|
this.contextMenuVisible = false |
|
|
|
sessionStorage.setItem('historys', JSON.stringify(this.historys)) |
|
|
|
]; |
|
|
|
this.$router.push({ name: this.defaultRouter }); |
|
|
|
this.contextMenuVisible = false; |
|
|
|
sessionStorage.setItem("historys", JSON.stringify(this.historys)); |
|
|
|
}, |
|
|
|
closeLeft() { |
|
|
|
let right |
|
|
|
const rightIndex = this.historys.findIndex( |
|
|
|
item => { |
|
|
|
if(item.name == this.rightActive){ |
|
|
|
right = item |
|
|
|
} |
|
|
|
return item.name == this.rightActive |
|
|
|
let right; |
|
|
|
const rightIndex = this.historys.findIndex(item => { |
|
|
|
if ( |
|
|
|
item.name + |
|
|
|
JSON.stringify(item.query) + |
|
|
|
JSON.stringify(item.params) == |
|
|
|
this.rightActive |
|
|
|
) { |
|
|
|
right = item; |
|
|
|
} |
|
|
|
) |
|
|
|
return ( |
|
|
|
item.name + |
|
|
|
JSON.stringify(item.query) + |
|
|
|
JSON.stringify(item.params) == |
|
|
|
this.rightActive |
|
|
|
); |
|
|
|
}); |
|
|
|
const activeIndex = this.historys.findIndex( |
|
|
|
item => item.name == this.activeValue |
|
|
|
) |
|
|
|
this.historys.splice(0, rightIndex) |
|
|
|
item => |
|
|
|
item.name + |
|
|
|
JSON.stringify(item.query) + |
|
|
|
JSON.stringify(item.params) == |
|
|
|
this.activeValue |
|
|
|
); |
|
|
|
this.historys.splice(0, rightIndex); |
|
|
|
if (rightIndex > activeIndex) { |
|
|
|
this.$router.push(right) |
|
|
|
this.$router.push(right); |
|
|
|
} |
|
|
|
sessionStorage.setItem('historys', JSON.stringify(this.historys)) |
|
|
|
sessionStorage.setItem("historys", JSON.stringify(this.historys)); |
|
|
|
}, |
|
|
|
closeRight() { |
|
|
|
let right |
|
|
|
const leftIndex = this.historys.findIndex( |
|
|
|
item => { |
|
|
|
if(item.name == this.rightActive){ |
|
|
|
right = item |
|
|
|
let right; |
|
|
|
const leftIndex = this.historys.findIndex(item => { |
|
|
|
if ( |
|
|
|
item.name + |
|
|
|
JSON.stringify(item.query) + |
|
|
|
JSON.stringify(item.params) == |
|
|
|
this.rightActive |
|
|
|
) { |
|
|
|
right = item; |
|
|
|
} |
|
|
|
return item.name == this.rightActive |
|
|
|
} |
|
|
|
) |
|
|
|
return ( |
|
|
|
item.name + |
|
|
|
JSON.stringify(item.query) + |
|
|
|
JSON.stringify(item.params) == |
|
|
|
this.rightActive |
|
|
|
); |
|
|
|
}); |
|
|
|
const activeIndex = this.historys.findIndex( |
|
|
|
item => item.name == this.activeValue |
|
|
|
) |
|
|
|
this.historys.splice(leftIndex + 1, this.historys.length) |
|
|
|
item => |
|
|
|
item.name + |
|
|
|
JSON.stringify(item.query) + |
|
|
|
JSON.stringify(item.params) == |
|
|
|
this.activeValue |
|
|
|
); |
|
|
|
this.historys.splice(leftIndex + 1, this.historys.length); |
|
|
|
if (leftIndex < activeIndex) { |
|
|
|
this.$router.push(right) |
|
|
|
this.$router.push(right); |
|
|
|
} |
|
|
|
sessionStorage.setItem('historys', JSON.stringify(this.historys)) |
|
|
|
sessionStorage.setItem("historys", JSON.stringify(this.historys)); |
|
|
|
}, |
|
|
|
closeOther() { |
|
|
|
let right |
|
|
|
this.historys = this.historys.filter( |
|
|
|
item => { |
|
|
|
if(item.name == this.rightActive){ |
|
|
|
right = item |
|
|
|
let right; |
|
|
|
this.historys = this.historys.filter(item => { |
|
|
|
if ( |
|
|
|
item.name + |
|
|
|
JSON.stringify(item.query) + |
|
|
|
JSON.stringify(item.params) == |
|
|
|
this.rightActive |
|
|
|
) { |
|
|
|
right = item; |
|
|
|
} |
|
|
|
return ( |
|
|
|
item.name + |
|
|
|
JSON.stringify(item.query) + |
|
|
|
JSON.stringify(item.params) == |
|
|
|
this.rightActive |
|
|
|
); |
|
|
|
}); |
|
|
|
this.$router.push(right); |
|
|
|
sessionStorage.setItem("historys", JSON.stringify(this.historys)); |
|
|
|
}, |
|
|
|
isSame(route1, route2) { |
|
|
|
if (route1.name != route2.name) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
for (let key in route1.query) { |
|
|
|
if (route1.query[key] != route2.query[key]) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
for (let key in route1.params) { |
|
|
|
if (route1.params[key] != route2.params[key]) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
return item.name == this.rightActive |
|
|
|
} |
|
|
|
) |
|
|
|
this.$router.push(right) |
|
|
|
sessionStorage.setItem('historys', JSON.stringify(this.historys)) |
|
|
|
return true; |
|
|
|
}, |
|
|
|
setTab(route) { |
|
|
|
if (!this.historys.some(item => item.name == route.name)) { |
|
|
|
const obj = {} |
|
|
|
obj.name = route.name |
|
|
|
obj.meta = route.meta |
|
|
|
obj.query = route.query |
|
|
|
obj.params = route.params |
|
|
|
this.historys.push(obj) |
|
|
|
if (!this.historys.some(item => this.isSame(item, route))) { |
|
|
|
const obj = {}; |
|
|
|
obj.name = route.name; |
|
|
|
obj.meta = route.meta; |
|
|
|
obj.query = route.query; |
|
|
|
obj.params = route.params; |
|
|
|
this.historys.push(obj); |
|
|
|
} |
|
|
|
this.activeValue = this.$route.name |
|
|
|
window.sessionStorage.setItem( |
|
|
|
"activeValue", |
|
|
|
this.$route.name + |
|
|
|
JSON.stringify(this.$route.query) + |
|
|
|
JSON.stringify(this.$route.params) |
|
|
|
); |
|
|
|
}, |
|
|
|
changeTab(component) { |
|
|
|
const tab = component.$attrs.tab |
|
|
|
this.$router.push({ name: tab.name,query:tab.query,params:tab.params }) |
|
|
|
const tab = component.$attrs.tab; |
|
|
|
this.$router.push({ |
|
|
|
name: tab.name, |
|
|
|
query: tab.query, |
|
|
|
params: tab.params |
|
|
|
}); |
|
|
|
}, |
|
|
|
removeTab(tab) { |
|
|
|
const index = this.historys.findIndex(item => item.name == tab) |
|
|
|
if (this.$route.name == tab) { |
|
|
|
const index = this.historys.findIndex( |
|
|
|
item => |
|
|
|
item.name + |
|
|
|
JSON.stringify(item.query) + |
|
|
|
JSON.stringify(item.params) == |
|
|
|
tab |
|
|
|
); |
|
|
|
if ( |
|
|
|
this.$route.name + |
|
|
|
JSON.stringify(this.$route.query) + |
|
|
|
JSON.stringify(this.$route.params) == |
|
|
|
tab |
|
|
|
) { |
|
|
|
if (this.historys.length == 1) { |
|
|
|
this.$router.push({ name: this.defaultRouter }) |
|
|
|
this.$router.push({ name: this.defaultRouter }); |
|
|
|
} else { |
|
|
|
if (index < this.historys.length - 1) { |
|
|
|
this.$router.push({ name: this.historys[index + 1].name,query:this.historys[index + 1].query,params:this.historys[index + 1].params }) |
|
|
|
this.$router.push({ |
|
|
|
name: this.historys[index + 1].name, |
|
|
|
query: this.historys[index + 1].query, |
|
|
|
params: this.historys[index + 1].params |
|
|
|
}); |
|
|
|
} else { |
|
|
|
this.$router.push({ name: this.historys[index - 1].name,query:this.historys[index - 1].query,params:this.historys[index - 1].params }) |
|
|
|
this.$router.push({ |
|
|
|
name: this.historys[index - 1].name, |
|
|
|
query: this.historys[index - 1].query, |
|
|
|
params: this.historys[index - 1].params |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
this.historys.splice(index, 1) |
|
|
|
this.historys.splice(index, 1); |
|
|
|
} |
|
|
|
}, |
|
|
|
watch: { |
|
|
|
contextMenuVisible() { |
|
|
|
if (this.contextMenuVisible) { |
|
|
|
document.body.addEventListener('click', () => { |
|
|
|
this.contextMenuVisible = false |
|
|
|
}) |
|
|
|
document.body.addEventListener("click", () => { |
|
|
|
this.contextMenuVisible = false; |
|
|
|
}); |
|
|
|
} else { |
|
|
|
document.body.removeEventListener('click', () => { |
|
|
|
this.contextMenuVisible = false |
|
|
|
}) |
|
|
|
document.body.removeEventListener("click", () => { |
|
|
|
this.contextMenuVisible = false; |
|
|
|
}); |
|
|
|
} |
|
|
|
}, |
|
|
|
$route(to) { |
|
|
|
this.historys = this.historys.filter(item => !item.meta.hidden) |
|
|
|
this.setTab(to) |
|
|
|
sessionStorage.setItem('historys', JSON.stringify(this.historys)) |
|
|
|
$route(to, now) { |
|
|
|
this.historys = this.historys.filter(item => !item.meta.closeTab); |
|
|
|
this.setTab(to); |
|
|
|
sessionStorage.setItem("historys", JSON.stringify(this.historys)); |
|
|
|
this.activeValue = window.sessionStorage.getItem("activeValue"); |
|
|
|
if (now && to && now.name == to.name) { |
|
|
|
this.$bus.$emit("reload"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
</script> |
|
|
|
<style lang="scss"> |
|
|
|
.contextmenu { |
|
|
@ -234,6 +318,4 @@ export default { |
|
|
|
background: #f2f2f2; |
|
|
|
cursor: pointer; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
</style> |