element 樹形控件-Tree


樹形節點 實現單選

tree 單選
<el-tree
class="filter-tree"
:data="groupTree"
:props="defaultProps"
node-key="id"   # 關鍵代碼
:filter-node-method="filterNode"
show-checkbox
:check-strictly="true"
ref="tree2"
@check-change="getDeptDetail"
check-on-click-node
@check="setSelectedNode"
></el-tree>
//第一種方式
//注意:組件需要添加node-key="id" 否則報錯
setSelectedNode(data, obj) {
    if(obj.checkedNodes.length){
        this.$refs.tree2.setCheckedNodes([data]);
    }
},
    
//第二種方式
getDeptDetail(event, isChecked) {
    this.singleChecked(event);
},
singleChecked(event) {
    let targ = this.$refs.tree2;
    let nodes = targ.getCheckedNodes();

    if (nodes.length >= 2) {
        nodes.map((item, index) => {
            if (item.id != event.id) {
                targ.setChecked(targ.getCheckedNodes()[index], false);
            }
        });
    }
}   

一鍵清空樹形節點

 getAllList() {
     this.$refs.tree2.setCheckedKeys([]);
 },

對樹形節點進行搜索篩選

<el-input
  placeholder="輸入關鍵字進行過濾"
  v-model="filterText">
</el-input>

<el-tree
  class="filter-tree"
  :data="data"
  :props="defaultProps"
  default-expand-all
  :filter-node-method="filterNode"
  ref="tree">
</el-tree>
watch: {
    filterText(val) {//監聽輸入框值變化
        this.$refs.tree.filter(val);
    }
},
    
methods: {
    filterNode(value, data) {
        if (!value) return true;
        //注意這里的.name可以換 具體根據篩選什么來決定 名字就.name
        return data.name.indexOf(value) !== -1;
    }
},

實現第一級別不顯示選擇框並無法選擇

<script>
/第一步  獲取到后台的數據 給第一級的數據添加選擇框禁用
this.$axios.get("admin/department/getDeptByType").then(({ data }) => {
    data.forEach(item => {
        item.disabled = "disabled";
    });
    this.groupTree = data;
});
</script>

<style>
/*第二步 因為加了禁用后 element會給其添加一個is-disabled類 
所以可以根據這個類名讓選擇框隱藏*/
/deep/ .el-checkbox__input.is-disabled {
  display: none;
}
</style>

實現回顯數據,並且修改選中狀態樣式

實現效果:

*上下2個樹型組件,默認進來回填數據,並讓選中數據紅色字體顯示

只允許單選,點擊切換
YEjhQO.gif

<template>
 <el-tree
     :default-checked-keys="[temporary]" # 回填
     show-checkbox  # 顯示勾選框
     ref="tree"
     :data="treeData"
     @check="setSelectedNode"
     check-on-click-node # 點擊任意位置選中
     node-key="id"
></el-tree>
<el-tree
     :default-checked-keys="[temporary]"
     show-checkbox
     ref="tree2"
     :data="treeData"
     :props="defaultProps"
     @check="setSelectedNode"
     check-on-click-node
     :filter-node-method="filterNode"
     node-key="id"
></el-tree>
</template>
export default {
    data() {
        temporary: ""
    },
    created() {
    this.temporary = this.$route.query.student_id; //上個頁面帶來的數據進行回填操作
    },
    methods:{
     setSelectedNode(data, obj) {
      this.$refs.tree.setCheckedNodes([]);
      this.$refs.tree2.setCheckedNodes([]);
      this.temporary = "";
      if (obj.checkedNodes.length) {
        this.$refs.tree.setCheckedNodes([data]);
        this.$refs.tree2.setCheckedNodes([data]);
      }
    },
   }
     
}
/deep/ .el-tree-node__content > label.el-checkbox {
  display: none;
}
/deep/ .is-checked .el-tree-node__label {
  color: red;
}
/deep/ .is-checked .custom-tree-node span {
  color: red;
}

Tree組件實現自定義節點樣式

YZ8H8s.png
<el-tree
      :default-checked-keys="[1]"
      show-checkbox
      ref="tree"
      :data="treeData"
      @check="setSelectedNode"
      check-on-click-node
      node-key="id"
      :render-content="renderContent"
></el-tree>
//data為節點數據
renderContent(h, { node, data, store }) {
      return (
        <span class="custom-tree-node">
          <span>{node.label}</span>
          <span>
            <el-button
              size="mini"
              type="text"
              on-click={() => this.append(data)}
            >
              Append
            </el-button>
            <el-button
              size="mini"
              type="text"
              on-click={() => this.remove(node, data)}
            >
              Delete
            </el-button>
          </span>
        </span>
      );
}
/deep/ .custom-tree-node {
  width: 260px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 10px;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM