index.vue 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <template>
  2. <component :is="menuComponent" v-if="item.meta && !item.meta.hidden" :item-or-menu="item">
  3. <template v-if="item.children && item.children.length">
  4. <el-scrollbar
  5. v-if="
  6. (layout === 'horizontal' && item.children.length > 18) ||
  7. (layout !== 'horizontal' && collapse && item.children.length > 18)
  8. "
  9. class="vab-menu-children-height">
  10. <vab-menu v-for="route in item.children" :key="route.path" :item="route" />
  11. </el-scrollbar>
  12. <template v-else>
  13. <vab-menu v-for="route in item.children" :key="route.path" :item="route" />
  14. </template>
  15. </template>
  16. </component>
  17. </template>
  18. <script>
  19. import { mapGetters } from 'vuex'
  20. export default {
  21. name: 'VabMenu',
  22. props: {
  23. item: {
  24. type: Object,
  25. required: true,
  26. },
  27. layout: {
  28. type: String,
  29. default: '',
  30. },
  31. },
  32. data() {
  33. return {
  34. menuComponent: 'VabMenuItem',
  35. }
  36. },
  37. computed: {
  38. ...mapGetters({
  39. collapse: 'settings/collapse',
  40. }),
  41. },
  42. created() {
  43. if (
  44. this.item.children &&
  45. this.item.children.some((route) => {
  46. return route.meta && route.meta.hidden !== true
  47. })
  48. )
  49. this.menuComponent = 'VabSubmenu'
  50. },
  51. }
  52. </script>
  53. <style lang="scss" scoped>
  54. .vab-menu-children-height {
  55. height: 60vh !important;
  56. }
  57. </style>