el-tree实现横向排列

<template>
  <div class="container">
    <div class="routeList-box" v-for="(item,index) in routeList" :key="index">
      <el-collapse v-model="activeNames">
        <el-collapse-item :title="item.title" :name="index">
          <el-tree
            class="el-tree"
            :data="item.list"
            :render-content="renderContent"
            show-checkbox
            node-key="id"
            ref="tree"
            highlight-current
            @node-expand="handleExpand"
            :props="defaultProps"
          ></el-tree>
        </el-collapse-item>
      </el-collapse>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      routeList: [
        {
          title: "授权管理后台",
          list: [
            {
              id: 1,
              label: "京店宝",
              children: [
                {
                  id: 2,
                  label: "用户分析",
                  children: [
                    {
                      id: 4,
                      label: "查询次数",
                      children: [
                        {
                          id: 7,
                          label: "页面查看权限"
                        },
                        {
                          id: 7,
                          label: "页面查看权限"
                        },
                        {
                          id: 7,
                          label: "页面查看权限"
                        },
                        {
                          id: 7,
                          label: "页面查看权限"
                        },
                        {
                          id: 8,
                          label: "编辑"
                        }
                      ]
                    },
                    {
                      id: 5,
                      label: "次数分布",
                      children: [
                        {
                          id: 9,
                          label: "次数分布child1"
                        },
                        {
                          id: 10,
                          label: "次数分布child2"
                        }
                      ]
                    }
                  ]
                },
                {
                  id: 3,
                  label: "系统性能",
                  children: [
                    {
                      id: 6,
                      label: "所用时间",
                      children: [
                        {
                          id: 7,
                          label: "页面查看权限"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              id: 111,
              label: "有品库",
              children: [
                {
                  id: 112,
                  label: "用户数"
                }
              ]
            }
          ]
        }
      ],
      defaultProps: {
        children: "children",
        label: "label"
      }
    };
  },
  mounted() {
    this.changeCss();
  },
  methods: {
  handleExpand() {//节点被展开时触发的事件
    //因为该函数执行在renderContent函数之前,所以得加this.$nextTick()
      this.$nextTick(()=>{
      this.changeCss();
    })
    },
    renderContent(h, { node, data, store }) {//树节点的内容区的渲染 Function
    let classname = "";
      // 由于项目中有三级菜单也有四级级菜单,就要在此做出判断
      if (node.level === 4) {
        classname = "foo";
      }
      if (node.level === 3 && node.childNodes.length === 0) {
        classname = "foo";
      }
      return h(
        "p",
        {
          class: classname
        },
        node.label
      );
    },
    changeCss() {
      var levelName = document.getElementsByClassName("foo"); // levelname是上面的最底层节点的名字
      for (var i = 0; i < levelName.length; i++) {
        // cssFloat 兼容 ie6-8  styleFloat 兼容ie9及标准浏览器
        levelName[i].parentNode.style.cssFloat = "left"; // 最底层的节点,包括多选框和名字都让他左浮动
        levelName[i].parentNode.style.styleFloat = "left";
        levelName[i].parentNode.onmouseover = function() {
          this.style.backgroundColor = "#fff";
        };
      }
    }
  }
};
</script>
<style lang="scss" scoped>
.container {
  width: 800px;
  padding: 40px;
}
.routeList-box {
  border-left: 1px solid #eee;
  border-right: 1px solid #eee;
  margin-bottom: 20px;
  .el-tree {
    margin: 12px 0;
  }
  /deep/.el-collapse-item__header {
    height: 40px;
    background-color: #f4f4f4;
    padding: 0 10px;
  }
  /deep/.el-icon-arrow-right:before {
    color: #409eff;
  }
}
/deep/ .el-tree-node__content::before {
  content: "";
  padding-left: 10px;
}
/deep/.el-checkbox__input {
  margin-right: 6px;
}
</style>
posted @ 2020-12-29 19:32  web小超  阅读(2415)  评论(1编辑  收藏  举报