使用elementui实现三级菜单左侧显示以及用户权限修改

menu组件实现三级菜单

左侧菜单栏显示

	<el-menu
          :default-active="$route.path"
          class="el-menu-vertical-demo"
          background-color="rgb(5, 29, 53)"
          text-color="#fff"
          active-text-color="#ffd04b"
          :collapse="isCollapse"
          router
          @select="selectMenu"
          @open="handleOpen"
          @close="handleClose"
          :unique-opened="true"
          style="border:0"
        >
		//一层一层进行循环
		<template v-for="item in menulist">
            <el-submenu
              v-if="item.childs && item.childs.length"
              :index="item.MenuUrl"
              :key="item.MenuID"
            >
              <template slot="title">
                <i :class="item.MenuIcon"></i>
                <span>{{item.MenuName}}</span>
              </template>

              <!-- 二级菜单 -->
              <template v-for="itemChild in item.childs">
                <el-submenu
                  v-if="itemChild.childs && itemChild.childs.length"
                  :index="itemChild.MenuUrl"
                  :key="itemChild.MenuID"
                >
                  <template slot="title">
                    <i :class="itemChild.MenuIcon"></i>
                    <span>{{itemChild.MenuName}}</span>
                  </template>

                  <!-- 三级菜单 -->
                  <el-menu-item
                    v-for="itemChild_Child in itemChild.childs"
                    :index="itemChild_Child.MenuUrl"
                    :key="itemChild_Child.MenuID"
                  >
                    <i :class="itemChild_Child.MenuIcon"></i>
                    <span slot="title">{{itemChild_Child.MenuName}}</span>
                  </el-menu-item>
                </el-submenu>

                <el-menu-item v-else :index="itemChild.MenuUrl" :key="itemChild.MenuID">
                  <i :class="itemChild.MenuIcon"></i>
                  <span slot="title">{{itemChild.MenuName}}</span>
                </el-menu-item>
              </template>
            </el-submenu>

            <el-menu-item v-else :index="item.MenuUrl" :key="item.MenuID">
              <i :class="item.MenuIcon"></i>
              <span slot="title">{{item.MenuName}}</span>
            </el-menu-item>
          </template>
    </el-menu>

tree组件实现三级菜单

角色管理中对其菜单权限进行编辑

 <el-tree
     ref="menuTree"
     :data="data"
     show-checkbox
     node-key="MenuID"
     :props="{label:'MenuName',children:'childs'}"	//设置后台传回数据的字段显示
     :default-expand-all="true"	//设置默认全部展开
     :default-checked-keys="expandedKeys"	//设置后台返回数据 选中的节点
     @check="menuChange"		//这里选中方法有多个,根据自己需要选择,elementui官网
   ></el-tree>

    menuChange(data, obj) {
    	//之前罗里吧嗦写了200行的ifelse+foreach,后来发现两个值就可以概括所有
	  	let curCheckedKeys = this.$refs.menuTree.getCheckedKeys();
	  	let halfCheckedKeys = this.$refs.menuTree.getHalfCheckedKeys();	  	
	  	this.allKeys = Array.from(
	    	new Set(curCheckedKeys.concat(halfCheckedKeys))
	  	);
	  	//一般传给后台数据都是需要选中的子节点以及父节点
	  	//allKeys就是传给后台数据的集合
  	}
  	//后台返回数据进行筛选并默认选中,isEnable为是否选中标识
  	fiterMenu() {
      this.expandedKeys = [];
      this.data.forEach((element) => {
        if (element.isEnable) {
          if (element.childs.length == 0) {
            this.expandedKeys.push(element.MenuID);
          } else {
            element.childs.forEach((ele) => {
              if (ele.isEnable) {
                ele.childs.forEach((e) => {
                  if (e.isEnable) {
                    this.expandedKeys.push(e.MenuID);
                  }
                });
              }
            });
          }
        }
      });
      //去重
      this.allKeys = Array.from(new Set(this.expandedKeys));
    },

   

后台返回数据示例

    [
	  {
	    "MenuID": 1000,
	    "ParentID": 1000,
	    "MenuName": "xxxx",
	    "MenuLevel": 1,
	    "MenuUrl": "/xxx",
	    "isEnable": 0,
	    "childs": []
	  },
	  {
	    "MenuID": 1001,
	    "ParentID": 0,
	    "MenuName": "xxxx",
	    "MenuLevel": 1,
	    "MenuUrl": "/xxx",
	    "isEnable": 1,
	    "childs": [
	      {
	        "MenuID": 1002,
	        "ParentID": 1001,
	        "MenuName": "xxxx",
	        "MenuLevel": 2,
	        "MenuUrl": "/xxx",
	        "isEnable": 1,
	        "childs": [
	          {
	            "MenuID": 1012,
	            "ParentID": 1002,
	            "MenuName": "xxxx",
	            "MenuLevel": 3,
	            "MenuUrl": "/xxx",
	            "isEnable": 1
	          },
	          {
	            "MenuID": 1013,
	            "ParentID": 1002,
	            "MenuName": "xxxx",
	            "MenuLevel": 3,
	            "MenuUrl": "/xxx",
	            "isEnable": 1
	          }
	        ]
	      }
	    ]
	  }
	]
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element UI 的下拉菜单组件支持二级菜单,如果需要三级下拉菜单,可以通过嵌套使用多个下拉菜单组件来实现。具体步骤如下: 1. 创建一个一级菜单,并添加一个子菜单。 2. 将子菜单的 trigger 属性设置为 hover,这样当鼠标悬停在一级菜单上时,子菜单就会显示出来。 3. 在子菜单中再添加一个下拉菜单组件,作为二级菜单。 4. 重复以上步骤,将二级菜单中的子菜单的 trigger 属性设置为 hover,添加第三级下拉菜单。 示例代码如下: ``` <template> <el-menu> <el-submenu index="1"> <template slot="title">一级菜单</template> <el-menu-item index="1-1">菜单项一</el-menu-item> <el-submenu index="1-2" v-show-timeout="200"> <template slot="title">二级菜单</template> <el-menu-item index="1-2-1">菜单项一</el-menu-item> <el-submenu index="1-2-2" v-show-timeout="200"> <template slot="title">三级菜单</template> <el-menu-item index="1-2-2-1">菜单项一</el-menu-item> <el-menu-item index="1-2-2-2">菜单项二</el-menu-item> </el-submenu> </el-submenu> </el-submenu> </el-menu> </template> ``` 在上面的示例中,我们创建了一个一级菜单,并添加了一个子菜单。子菜单中又添加了一个下拉菜单组件作为二级菜单。在二级菜单中再添加一个子菜单,作为三级菜单。 需要注意的是,在菜单组件中,子菜单的 trigger 属性默认为 click,需要手动将其设置为 hover,才能实现鼠标悬浮显示菜单的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值