topbar.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <template>
  2. <div class="adminui-topbar">
  3. <div class="left-panel">
  4. <el-breadcrumb
  5. v-if="toolbarTags"
  6. separator-icon="arrow-right"
  7. class="hidden-sm-and-down"
  8. >
  9. <transition-group name="breadcrumb">
  10. <template v-for="item in breadList">
  11. <el-breadcrumb-item
  12. v-if="item.path != '/'"
  13. :key="item.meta.title"
  14. ><el-icon
  15. :size="18"
  16. class="icon"
  17. v-if="item.meta.icon"
  18. ><component :is="item.meta.icon" /></el-icon
  19. >{{
  20. $t2(item.meta.code) || item.meta.title
  21. }}</el-breadcrumb-item
  22. >
  23. </template>
  24. </transition-group>
  25. </el-breadcrumb>
  26. </div>
  27. <div class="center-panel"></div>
  28. <div class="right-panel">
  29. <slot></slot>
  30. </div>
  31. </div>
  32. </template>
  33. <script>
  34. export default {
  35. data() {
  36. return {
  37. breadList: [],
  38. };
  39. },
  40. created() {
  41. this.getBreadcrumb();
  42. },
  43. watch: {
  44. $route() {
  45. this.getBreadcrumb();
  46. },
  47. },
  48. computed: {
  49. toolbarTags() {
  50. return (
  51. this.$store.state.global.toolbarTags &&
  52. this.$route.meta.hiddenBreadcrumb !== "1"
  53. );
  54. },
  55. },
  56. methods: {
  57. getBreadcrumb() {
  58. let matched = this.$route.meta.breadcrumb || [
  59. {
  60. meta: {
  61. title:
  62. this.$route.query.title || this.$route.meta.title,
  63. },
  64. },
  65. ];
  66. this.breadList = matched;
  67. console.log(this.$route);
  68. },
  69. },
  70. };
  71. </script>
  72. <style lang="less" scoped>
  73. .adminui-topbar {
  74. display: flex;
  75. justify-content: space-between;
  76. margin: 0;
  77. padding: 0px;
  78. background: #fff;
  79. border-bottom: 1px solid #e8eaec;
  80. .left-panel {
  81. display: flex;
  82. align-items: center;
  83. }
  84. .right-panel {
  85. display: flex;
  86. align-items: center;
  87. }
  88. }
  89. .el-breadcrumb {
  90. margin-left: 15px;
  91. }
  92. .el-breadcrumb .el-breadcrumb__inner .icon {
  93. font-size: 14px;
  94. margin-right: 5px;
  95. float: left;
  96. }
  97. .breadcrumb-enter-active,
  98. .breadcrumb-leave-active {
  99. transition: all 0.3s;
  100. }
  101. .breadcrumb-enter-from,
  102. .breadcrumb-leave-active {
  103. opacity: 0;
  104. transform: translateX(20px);
  105. }
  106. .breadcrumb-leave-active {
  107. position: absolute;
  108. }
  109. </style>