index.vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <template>
  2. <el-breadcrumb class="breadcrumb-container" separator=">">
  3. <el-breadcrumb-item v-for="item in levelList" :key="item.path">
  4. <span>
  5. <vab-icon
  6. v-if="item.meta.icon"
  7. :icon="['fas', item.meta.icon]"
  8. ></vab-icon>
  9. <vab-remix-icon
  10. v-if="item.meta.remixIcon"
  11. :icon-class="item.meta.remixIcon"
  12. />
  13. {{ item.meta.title }}
  14. </span>
  15. </el-breadcrumb-item>
  16. </el-breadcrumb>
  17. </template>
  18. <script>
  19. export default {
  20. name: "Breadcrumb",
  21. data() {
  22. return {
  23. levelList: null,
  24. };
  25. },
  26. watch: {
  27. $route() {
  28. this.getBreadcrumb();
  29. },
  30. },
  31. created() {
  32. this.getBreadcrumb();
  33. },
  34. methods: {
  35. getBreadcrumb() {
  36. let matched = this.$route.matched.filter(
  37. (item) => item.meta && item.meta.title
  38. );
  39. const first = matched[0];
  40. /* if (!this.isIndex(first)) {
  41. matched = [
  42. {
  43. path: "/index",
  44. meta: {
  45. title: "首页",
  46. icon: "home",
  47. },
  48. },
  49. ].concat(matched);
  50. } */
  51. this.levelList = matched.filter(
  52. (item) =>
  53. item.meta && item.meta.title && item.meta.breadcrumb !== false
  54. );
  55. },
  56. isIndex(route) {
  57. const name = route && route.name;
  58. if (!name) {
  59. return false;
  60. }
  61. return name.trim().toLocaleLowerCase() === "Index".toLocaleLowerCase();
  62. },
  63. },
  64. };
  65. </script>
  66. <style lang="scss" scoped>
  67. .breadcrumb-container {
  68. display: inline-block;
  69. font-size: $base-font-size-default;
  70. line-height: 50px;
  71. -webkit-user-select: none;
  72. -moz-user-select: none;
  73. -ms-user-select: none;
  74. user-select: none;
  75. -webkit-touch-callout: none;
  76. }
  77. </style>