index.vue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <template>
  2. <div class="layout-navbars-breadcrumb-index">
  3. <Logo v-if="setIsShowLogo" />
  4. <Breadcrumb />
  5. <Horizontal :menuList="menuList" v-if="isLayoutTransverse" />
  6. <User />
  7. </div>
  8. </template>
  9. <script>
  10. import Breadcrumb from '@/layout/navBars/breadcrumb/breadcrumb.vue';
  11. import User from '@/layout/navBars/breadcrumb/user.vue';
  12. import Logo from '@/layout/logo/index.vue';
  13. import Horizontal from '@/layout/navMenu/horizontal.vue';
  14. export default {
  15. name: 'layoutNavBars',
  16. components: { Breadcrumb, User, Logo, Horizontal },
  17. data() {
  18. return {
  19. menuList: [],
  20. };
  21. },
  22. computed: {
  23. // 设置 logo 是否显示
  24. setIsShowLogo() {
  25. let { isShowLogo, layout } = this.$store.state.themeConfig.themeConfig;
  26. console.log(this.$store.state.themeConfig.themeConfig, layout, 'isShowLogo, layout');
  27. return (isShowLogo && layout === 'classic') || (isShowLogo && layout === 'transverse');
  28. },
  29. // 设置是否显示横向菜单
  30. isLayoutTransverse() {
  31. let { layout, isClassicSplitMenu } = this.$store.state.themeConfig.themeConfig;
  32. return layout === 'transverse' || (isClassicSplitMenu && layout === 'classic');
  33. },
  34. },
  35. mounted() {
  36. this.setFilterRoutes();
  37. },
  38. methods: {
  39. // 设置路由的过滤
  40. setFilterRoutes() {
  41. this.menuList = this.filterRoutesFun(this.$store.state.routesList.routesList);
  42. },
  43. // 设置路由的过滤递归函数
  44. filterRoutesFun(arr) {
  45. return arr
  46. .filter((item) => item.path)
  47. .map((item) => {
  48. item = Object.assign({}, item);
  49. if (item.children) item.children = this.filterRoutesFun(item.children);
  50. return item;
  51. });
  52. },
  53. },
  54. watch: {
  55. // 监听 vuex 数据变化
  56. '$store.state': {
  57. handler(val) {
  58. if (val.routesList.routesList.length === this.menuList.length) return false;
  59. this.setFilterRoutes();
  60. },
  61. deep: true,
  62. },
  63. },
  64. };
  65. </script>
  66. <style scoped lang="scss">
  67. .layout-navbars-breadcrumb-index {
  68. height: 50px;
  69. display: flex;
  70. align-items: center;
  71. padding-right: 15px;
  72. overflow: hidden;
  73. background: var(--prev-bg-topBar);
  74. // border-bottom: 1px solid var(--prev-border-color-lighter);
  75. }
  76. </style>