element树形结构封装菜单改变父节点的样式及遍历节点数据

Posted 晚星@

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了element树形结构封装菜单改变父节点的样式及遍历节点数据相关的知识,希望对你有一定的参考价值。

效果图:
在这里插入图片描述
template代码

<el-dialog title="常用菜单配置"
               :visible.sync="dialogVisible"
               custom-class="notic-add-dialog"
               width="30%">
      <div style="height:400px;overflow:auto;padding:0 20px;">
        <el-tree :data="data"
                 show-checkbox
                 default-expand-all
                 node-key="pageId"
                 ref="treeData"
                 highlight-current
                 :props="defaultProps">
        </el-tree>
      </div>
      <span slot="footer"
            class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button type="primary"
                   @click="submitMenu()">确 定</el-button>
      </span>
    </el-dialog>

script

data(){
	return{
	// 树形结构的假数据
      data: [],
      // 默认显示参数名
      defaultProps: {
        children: 'child',
        label: 'pageName'
      },
      // 遍历选中回显的数组
      treeDataChange: [],
      // 显示按钮
      buttonMenu: []
      ]
},
methods:{
	// 打开菜单弹窗
    openMenu () {
      this.data = []
      const that = this
      this.$http.get(this.$API.OIL_GET_getUserMenu).then(res => {
        this.data = res.data[0].child
        var treeChange = this.getName(this.data)
        this.$refs.treeData.setCheckedKeys(treeChange);
      })
      this.dialogVisible = true
    },
    // 节点递归查id
    getName (item) {
      this.treeDataChange = [];
      let ret = this.recurision(item);
      return ret;
    },
    // 遍历递归
    recurision (item) {
      if (!item) return null;
      for (var i = 0; i < item.length; i++) {
        if (item[i].isPitch == 0) {
          this.treeDataChange.push(item[i].pageId)
          break
        };
        if (item[i].child) {
          this.recurision(item[i].child)
        };
      }
      return this.treeDataChange;
    },
    // 快捷口入
    submitMenu () {
      var arrData = this.$refs.treeData.getCheckedNodes()
      var newArrData = []
      if (arrData.length > 0) {
        arrData.forEach((item, index) => {
          if (item.child.length == 0) {
            newArrData.push(arrData[index])
          }
        })
        this.$http.post(this.$API.OIL_GET_updateUserCommonMenu, newArrData).then(res => {
          this.$message.success('添加成功')
          this.submitMenuButton()
        })
      } else {
        this.$message.error('请选择您想要的菜单')
      }
    },
}

接口输出是这样的
在这里插入图片描述

以上是关于element树形结构封装菜单改变父节点的样式及遍历节点数据的主要内容,如果未能解决你的问题,请参考以下文章

生成树形菜单

解决element生成的下拉菜单,不在父级之下,而是在body之下,通过父级控制该下拉菜单的样式,达到不跟别的地方冲突的目的

ElementTree之Xml文档处理

vue+ element ui 树形控件tree实现单选功能 2021-04-28

JSP实现树形菜单

EasyUI之树形菜单