封装一个树形结构组件

<!--
    author:金荣华
    description:树型组件进行封装
    date:2022-11-17
 -->
<template>
  <div class="tree-box">
    <el-tree
      :highlight-current="true"
      :data="data"
      accordion
      node-key="id"
      :default-expanded-keys="expandedKeys"
      ref="tree"
      @node-click="handleNodeClick"
    >
      <span class="custom-tree-node" slot-scope="{ data }">
        <span>{{ data.name }}</span>
        <span>
          <!-- <i class="el-icon-arrow-down"></i> -->
          <!-- <i class="el-icon-arrow-up"></i> -->
        </span>
      </span>
    </el-tree>
  </div>
</template>

<script>
export default {
  props: {
    // 接收的树型数组
    data: {
      type: Array
    },
    // 展开的key值
    expandedKeys: {
      type: Array
    },
    // 传入的当前key值
    currentKey: {
      type: String
    }
  },
  watch: {
    // 监听当前选中的key
    currentKey(oldValue, newValue) {
      console.log(oldValue)
      console.log(newValue)
      if (newValue) {
        this.$refs.tree.setCurrentKey(newValue)
      }
    }
  },
  methods: {
    handleNodeClick(data, node, obj) {
      this.$emit('node-click', { data, node, obj })
    }
  }
}
</script>

<style lang="scss">
.tree-box {
  //  移入树型样式
  .el-tree-node__content:hover {
    background: #f2f8f4;
    color: #009a44;
    // border-left: 4px solid #009A44;
  }

  // 选中当前node的样式
  .el-tree-node.is-current > .el-tree-node__content {
    background: #f2f8f4 !important;
    color: #009a44 !important;
    border-left: 4px solid #009a44;
  }

  // 树型图标样式调整
  .el-tree-node__expand-icon {
    position: absolute !important;
    right: 2% !important;
  }
  // 文本
  .el-tree-node__label {
    padding-left: 15px !important;
  }

  // 树形结构样式
  .el-tree-node__content {
    padding-bottom: 6px !important;
    padding-top: 3px !important;
    border-bottom: 1px solid #f2f8f4 !important;
    text-indent: 10px;
  }

  // 顶级背景颜色
  .el-tree-node.is-expanded.is-focusable > .el-tree-node__content:first-child {
    background-color: #009a44;
    color: #ffffff;
    font-weight: 400;

    &:hover {
      background: #f2f8f4 !important;
      color: #009a44 !important;

      .el-tree-node__expand-icon {
        color: #606266 !important;
        vertical-align: middle;
      }
    }

    .el-tree-node__expand-icon {
      color: #ffffff !important;
      vertical-align: middle;
    }
  }
  // 子级样式判断
  .el-tree-node__children > .el-tree-node.is-expanded.is-focusable > .el-tree-node__content {
    background-color: #fff;
    color: #606266;

    .el-tree-node__expand-icon {
      color: #606266 !important;
      vertical-align: middle;
    }
  }
}
</style>

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的美,让我痴迷

你的好,我会永远记住你的。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值