element tree组件连接线以及懒加载

在这里插入图片描述

      <el-tree highlight-current :indent="0"  default-expand-all :data="treelist" class="tree-line" ref="tree" node-key="id"  
      :props="defaultProps"  @node-click="nodeClick"  :expand-on-click-node="false"  lazy :load="loadNode">
      <!-- 插槽 -->
      <span class="custom-tree-node" slot-scope="{data}">
      <!-- 设置icon图标 -->
        <span>
          <i class="el-icon-folder"></i>
        </span>
        <span v-if="!data.id">
          <i class="el-icon-document"></i>
        </span>
        <span>
          {{ data.fvAreaName }}
        </span>
      </span>
    </el-tree>

default-expand-all为节点数默认全部展开,懒加载适用

<script>
import bus from '@/utils/eventBus.js'
import { TableAPI} from '@/api/valuation/my_valuation.js'
  export default {
    props: {
      treelist: Array,
      ShowSave: Boolean,
      taskInfo : Object
    },
    data() {
      return {
       treelist:[],
      };
    },
    computed: {
    },
    created() {
    },
    mounted() {
    },
    computed: {
    },
    watch: {
    },
    methods: {
      
      // 该节点为真实选中的节点,不包含半勾选的上级节点
      nodeClick(data) {
        console.log(data,'节点点击');
      },
      
     // 刷新列表
     getTable() {
      // 初始化列表...
      TableAPI(this.params).then(el=>{
      
        })
     },
     // 获取选择的节点数组
      handleCheckChange(click, checked,index){
        // this.$refs.tree.setCheckedKeys([click.id]); // 只允许选择一个节点
        console.log('选择的节点',click,checked,index);
      },
      // 懒加载层级
      loadNode(node, resolve) {
        const id = node.data.id
        // 通过node.level的层级判断点击的是第几层
        if (node.level === 1) {
            CityAPI({id : this.taskInfo.taskId, provinceId : id}).then(el=>{
                const childNodes = el.data.map(item => ({
                    fiLevel : item.fiLevel,
                    fvAreaName : item.fvAreaName,
                    id : item.id,
                    leaf: false  // 通过leaf判断是否有下一层级
                }))
                resolve(childNodes)
            })
        } else if (node.level === 2) {
            DistrictAPI({id : this.taskInfo.taskId, cityId : id}).then(el=>{
                const childNodes = el.data.map(item => ({
                    fiLevel : item.fiLevel,
                    fvAreaName : item.fvAreaName,
                    id : item.id,
                    leaf: false  // 通过leaf判断是否有下一层级
                }))
                resolve(childNodes)  // 返回最新节点数据
            })
        } else if (node.level === 3) {
            SubdistrictAPI({id : this.taskInfo.taskId, districtId : id}).then(el=>{
                const childNodes = el.data.map(item => ({
                    fiLevel : item.fiLevel,
                    fvAreaName : item.fvAreaName,
                    id : item.id,
                    leaf: false  // 通过leaf判断是否有下一层级
                }))
                resolve(childNodes)   // 返回最新节点数据
            })
        } else if (node.level === 4) {
            CommunityAPI({id : this.taskInfo.taskId, subdistrictId : id}).then(el=>{
                const childNodes = el.data.map(item => ({
                    fiLevel : item.fiLevel,
                    fvAreaName : item.fvAreaName,
                    id : item.id,
                    leaf: false
                }))
                resolve(childNodes)  // 返回最新节点数据
            })
        } else if (node.level === 5) {
            CompoundAPI({id : this.taskInfo.taskId, communitytId : id}).then(el=>{
                const childNodes = el.data.map(item => ({
                    fiLevel : item.fiLevel,
                    fvAreaName : item.fvAreaName,
                    id : item.id,
                    leaf: true  // 通过leaf判断是否有下一层级
                }))
                resolve(childNodes)  // 返回最新节点数据
            })
        } 
      }
    }
  };

</script>

利用css配置tree节点虚线

<style lang="scss">

// 点击选中的tree节点样式
.organization_configuration {
  .el-tree--highlight-current
    .el-tree-node.is-current
    > .el-tree-node__content {
    // 设置颜色
    color: #409eff; // 节点的字体颜色
    background: transparent;
  }
}

// tree连接线
.tree-line {
  .el-tree-node {
    position: relative;
    padding-left: 16px;
  }
  .el-tree-node__content {
    margin-top: 10px;
  }
  .el-tree-node__children {
    padding-left: 16px;
  }

  .el-tree-node::before {
    content: '';
    height: 100%;
    width: 1px;
    position: absolute;
    left: -1px;
    top: -22px;
    border-width: 1px;
    border-left: 1px dashed #c0c4cc;
  }

  .el-tree-node:last-child::before {
    height: 33px;
  }

  .el-tree-node::after {
    content: '';
    width: 30px;
    height: 20px;
    position: absolute;
    left: 1px;
    top: 11px;
    border-width: 1px;
    border-top: 1px dashed #c0c4cc;
  }

  & > .el-tree-node::after {
    border-top: none;
  }
  & > .el-tree-node::before {
    border-left: none;
  }

  .el-tree-node__expand-icon {
    font-size: 18px;
    // color: #000;
    &.is-leaf {
      color: transparent;
      // display: none;
    }
  }
}
</style>

设置tree节点的连接线需要在tree组件上配置 :index = 0 ; 初始化节点的距离,否则节点的连接线位置会偏移,配置完成后使用上面的css样式即可,before伪元素为Y轴、after伪元素为X轴连接线。

另外
tree点击激活和失焦后的样式调整,如果上面的方法失效可以用这个


<style scoped lang='scss'>
  /* 改变被点击节点背景颜色,字体颜色 */
  .el-tree-node:focus > .el-tree-node__content {
    background-color: #4a9de7 !important;
    color: #fff !important;
  }
  /*节点失焦时的背景颜色*/
  .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content{
    background-color: #4a9de7 !important;
    color: #fff !important;
  }
</style>
您好!要在Vue中使用Element UI的Tree组件并实现懒加载,您可以按照以下步骤进行操作: 1. 首先,确保您已经安装了Vue和Element UI,并在您的项目中引入它们。 2. 在需要使用Tree组件的Vue文件中,先引入Tree组件和相关的样式: ```javascript import { Tree } from 'element-ui'; import 'element-ui/lib/theme-chalk/tree.css'; ``` 3. 在Vue组件中注册Tree组件: ```javascript export default { components: { 'el-tree': Tree }, // ... } ``` 4. 在模板中使用Tree组件,并设置相关属性和事件: ```html <template> <div> <el-tree :data="treeData" :load="lazyLoad" :lazy="true" :expand-on-click-node="false" @node-click="handleNodeClick" ></el-tree> </div> </template> ``` 在上面的代码中,我们通过`:data`属性将树的数据传递给Tree组件。`:load`属性用于指定懒加载函数,`:lazy`属性设置为`true`以启用懒加载功能,而`:expand-on-click-node`属性设置为`false`以禁用节点点击展开功能。同时,我们还可以通过`@node-click`事件处理节点的点击操作。 5. 在Vue组件的方法中定义懒加载函数和节点点击事件处理方法: ```javascript export default { // ... methods: { lazyLoad(node, resolve) { // 模拟异步请求 setTimeout(() => { const children = [ { id: 1, label: '节点1' }, { id: 2, label: '节点2' }, { id: 3, label: '节点3' } ]; resolve(children); }, 1000); }, handleNodeClick(node) { console.log('点击了节点:', node); } } } ``` 在上面的代码中,`lazyLoad`方法模拟了一个异步请求,通过`resolve`函数将加载到的子节点数据传递给Tree组件。`handleNodeClick`方法用于处理节点的点击事件,您可以根据需要进行相应的处理。 这样,您就可以在Vue中使用Element UI的Tree组件并实现懒加载了。请注意,上述代码中的数据和延时仅作为示例,您可以根据实际需求进行调整。希望对您有所帮助!如果您还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值