element-UI配置多层级菜单

入口文件:

<template>
  <div class="menu" id="menu">
    <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect">
      <menuItem v-for="item in menuList" :key="item.id" :data="item" class="horizontal-item"/>
    </el-menu>
  </div>
</template>

<script>
import menuItem from './menuItem';
export default {
  name: 'menu',
  components: {menuItem},
  data () {
    return {
      activeIndex: '',
      menuList: [
        {
          id: 232,
          name: '菜单栏目1',
          isAdmin: true
        },
        {
          id: 323,
          name: '菜单栏目2',
          isAdmin: true
        },
        {
          id: 32311,
          name: '菜单栏目3',
          isAdmin: true,
          children: [
            {
              id: 123443321,
              name: '菜单栏目3-1',
              isAdmin: true
            },
            {
              id: 123433221,
              name: '菜单栏目3-2',
              isAdmin: true
            }
          ]
        },
        {
          id: 1,
          name: '菜单栏目4',
          isAdmin: true,
          children: [
            {
              id: 2,
              name: '菜单栏目4-1',
              isAdmin: true
            },
            {
              id: 3,
              name: '菜单栏目4-2',
              isAdmin: true,
              children: [
                {
                  id: 4,
                  name: '菜单栏目4-2-1',
                  isAdmin: true,
                  children: [
                    {
                      id: 42,
                      name: '菜单栏目4-2-1-1',
                      isAdmin: true
                    },
                    {
                      id: 53,
                      name: '菜单栏目4-2-2-2',
                      isAdmin: true
                    }
                  ]
                },
                {
                  id: 5,
                  name: '菜单栏目4-2-2',
                  isAdmin: true
                }
              ]
            }
          ]
        }
      ]
    };
  },
  methods: {
    handleSelect () {}
  }
};
</script>

<style lang="less">
  #menu {
    .horizontal-collapse-transition {
      transition: 0s width ease-in-out,
                  0s padding-left ease-in-out,
                  0s padding-right ease-in-out;
    }
    .is-horizontal {
      display: none;
    }
    .el-menu {
      border: none;
      height: 100%;
      width: 100% !important;
    }
    .horizontal-item{
      float: left;
      width: 100px;
    }
  }
</style>

菜单组件:

<template>
<div class="menu-item">
  <template v-if="!data.children">
    <el-menu-item :key="data.id" :index="data.id.toString()">{{data.name}}</el-menu-item>
  </template>
  <el-submenu :key="data.id" :index="data.id + ''" v-if="data.children">
    <template slot="title">{{data.name}}</template>
    <template v-for="item in data.children">
      <template v-if="!item.children">
        <el-menu-item :key="item.id" :index="item.id + ''">{{item.name}}</el-menu-item>
      </template>
      <template v-if="item.children && item.children.length > 0">
        <menuItem :data="item" :key="item.id"/>
      </template>
    </template>
  </el-submenu>
</div>
</template>

<script>
export default {
  name: 'menuItem',
  components: {},
  data () {
    return {
      activeIndex: ''
    };
  },
  props: ['data'],
  methods: {}
};
</script>

<style lang="less">
.menu-item{
  .el-menu--popup-right-start{
    margin: 0px;
    margin-top: -5px;
  }
  .is-active {
    & > .el-submenu__title{
      color: #fff!important;
    }
  }
  .el-menu.el-menu--horizontal {
    border-bottom: none;
  }
  .el-submenu__icon-arrow{
    display: none;
  }
  .el-submenu__title{
    font-size: 16px;
  }
  .el-submenu {
    .el-submenu__title:hover {
    background:#34404f !important;
  }
  }
  .el-menu-item:hover {
    background:#34404f !important;
  }
}
.el-menu {
  .el-menu-item:hover {
  background:#34404f !important;
}
}
.el-menu-item,
.el-submenu__title {
  padding:0 10px;
  text-align: center;
}
.el-menu--horizontal {
  .el-menu {
    .el-menu-item,
    .el-submenu__title {
      height: 50px;
      line-height: 50px;
    }
  }
}
.el-menu-item{
  font-size: 16px;
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值