index.vue 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <template>
  2. <el-breadcrumb class="app-breadcrumb" separator="/">
  3. <transition-group name="breadcrumb">
  4. <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path" v-if='item.meta.title'>
  5. <span v-if='item.redirect==="noredirect"||index==levelList.length-1' class="no-redirect">{{generateTitle(item.meta.title)}}</span>
  6. <router-link v-else :to="item.redirect||item.path">{{generateTitle(item.meta.title)}}</router-link>
  7. </el-breadcrumb-item>
  8. </transition-group>
  9. </el-breadcrumb>
  10. </template>
  11. <script>
  12. import { generateTitle } from '@/utils/i18n'
  13. export default {
  14. created() {
  15. this.getBreadcrumb()
  16. },
  17. data() {
  18. return {
  19. levelList: null
  20. }
  21. },
  22. watch: {
  23. $route() {
  24. this.getBreadcrumb()
  25. }
  26. },
  27. methods: {
  28. generateTitle,
  29. getBreadcrumb() {
  30. let matched = this.$route.matched.filter(item => item.name)
  31. const first = matched[0]
  32. if (first && first.name !== 'dashboard') {
  33. matched = [{ path: '/dashboard', meta: { title: 'dashboard' }}].concat(matched)
  34. }
  35. this.levelList = matched
  36. }
  37. }
  38. }
  39. </script>
  40. <style rel="stylesheet/scss" lang="scss" scoped>
  41. .app-breadcrumb.el-breadcrumb {
  42. display: inline-block;
  43. font-size: 14px;
  44. line-height: 50px;
  45. margin-left: 10px;
  46. .no-redirect {
  47. color: #97a8be;
  48. cursor: text;
  49. }
  50. }
  51. </style>