history.vue 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <template>
  2. <div class="router-history">
  3. <el-tabs v-model="activeValue" type="card" :closable="!(historys.length==1&&this.$route.name=='dashboard')" @tab-click="changeTab" @tab-remove="removeTab">
  4. <el-tab-pane
  5. v-for="item in historys"
  6. :key="item.name"
  7. :label="item.meta.title"
  8. :name="item.name"
  9. >
  10. </el-tab-pane>
  11. </el-tabs>
  12. </div>
  13. </template>
  14. <script>
  15. export default {
  16. name:"HistoryComponent",
  17. data(){
  18. return{
  19. historys:[],
  20. activeValue:"dashboard"
  21. }
  22. },
  23. created(){
  24. const initHistorys = [
  25. {
  26. name:"dashboard",
  27. meta:{
  28. title:"仪表盘"
  29. }
  30. }
  31. ]
  32. this.historys = JSON.parse(sessionStorage.getItem("historys")) || initHistorys
  33. this.setTab(this.$route)
  34. },
  35. methods:{
  36. setTab(route){
  37. if(!this.historys.some(item=>item.name==route.name)){
  38. const obj = {}
  39. obj.name = route.name
  40. obj.meta = route.meta
  41. this.historys.push(obj)
  42. }
  43. this.activeValue = this.$route.name
  44. },
  45. changeTab(tab){
  46. this.$router.push({name:tab.name})
  47. },
  48. removeTab(tab){
  49. const index = this.historys.findIndex(item=>item.name == tab)
  50. if(this.$route.name == tab){
  51. if(this.historys.length==1){
  52. this.$router.push({name:"dashboard"})
  53. }else{
  54. if(index<this.historys.length-1){
  55. this.$router.push({name:this.historys[index+1].name})
  56. }else{
  57. this.$router.push({name:this.historys[index-1].name})
  58. }
  59. }
  60. }
  61. this.historys.splice(index,1)
  62. }
  63. },
  64. watch:{
  65. $route( to ){
  66. this.historys = this.historys.filter(item=>!item.meta.hidden)
  67. this.setTab(to)
  68. sessionStorage.setItem("historys",JSON.stringify(this.historys))
  69. }
  70. }
  71. }
  72. </script>
  73. <style lang="scss">
  74. </style>