3、Element企业开发tree系列

104 阅读1分钟

1、select下拉 + 树状图

1、单选

<template>
 <el-form>
   <el-form-item label="上级组织:" label-width="100px" prop="parent_id">
     <el-select
       ref="treeSelect"
       v-model="form.parent_id"
       placeholder="请选择上级组织"
       clearable
       @clear="handleClear"
     >
       <el-option :value="treeValue" :label="treeLabel">
         <el-tree
           ref="selectTree"
           node-key="id"
           :data="treeData"
           :props="defaultProps"
           :default-expanded-keys="defaultExpandedKeys"
           :expand-on-click-node="false"
           :highlight-current="true"
           :default-expand-all="true"
           @node-click="handleNode"
         ></el-tree>
       </el-option>
     </el-select>
   </el-form-item>
 </el-form>
</template>

<script>
export default {
 // data() 定义的数据
 data() {
   return {
     form: {},
     formRules: {
       parent_id: [
         {
           required: true,
           message: "请输入组织架构的名称",
           trigger: "change",
         },
       ],
     },
     // 组织下拉
     treeData: [
       {
         id: 1,
         name: "一级 1",
         children: [
           {
             id: 4,
             name: "二级 1-1",
             children: [
               {
                 id: 9,
                 name: "三级 1-1-1",
               },
               {
                 id: 10,
                 name: "三级 1-1-2",
               },
             ],
           },
         ],
       },
       {
         id: 2,
         name: "一级 2",
         children: [
           {
             id: 5,
             name: "二级 2-1",
           },
           {
             id: 6,
             name: "二级 2-2",
           },
         ],
       },
       {
         id: 3,
         name: "一级 3",
         children: [
           {
             id: 7,
             name: "二级 3-1",
           },
           {
             id: 8,
             name: "二级 3-2",
           },
         ],
       },
     ],
     // 组织树默认
     defaultProps: {
       value: "id",
       label: "name",
       children: "children",
     },
     // 默认展开
     defaultExpandedKeys: [],
     // options value值
     treeValue: "",
     // options label值
     treeLabel: "",
   };
 },
 methods: {
   // js
   // 切换选项
   handleNode(data, node) {
     this.treeValue = data.id;
     this.form.parent_id = data.id;
     this.treeLabel = data.name;
     this.$refs.treeSelect.blur();
     this.defaultExpandedKeys = [];
   },

   // 树清空
   handleClear() {
     this.treeLabel = "";
     this.clearSelected();
   },

   /* 清空选中样式 */
   clearSelected() {
     let allNode = document.querySelectorAll("#tree-option .el-tree-node");
     allNode.forEach((element) => element.classList.remove("is-current"));
   },
 },
};
</script>
<style scoped>
/* 下拉高度 */
.el-scrollbar .el-scrollbar__view .el-select-dropdown__item {
 height: auto;
 max-height: 274px;
 padding: 0;
 overflow: hidden;
 overflow-y: auto;
}
.el-select-dropdown__item.selected {
 font-weight: normal;
}
ul li ::deep .el-tree .el-tree-node__content {
 height: auto;
 padding: 0 20px;
}
.el-tree-node__label {
 font-weight: normal;
}
.el-tree ::deep .is-current .el-tree-node__label {
 color: #409eff;
 font-weight: 700;
}
.el-tree ::deep .is-current .el-tree-node__children .el-tree-node__label {
 color: #606266;
 font-weight: normal;
}
</style>

2、多选

3、项目实际开发--单选

<el-form-item
             label="上级组织:"
             label-width="100px"
             prop="parent_id"
           >
             <el-select
               ref="treeSelect"
               v-model="form.parent_id"
               placeholder="请选择上级组织"
               clearable
               @clear="handleClear"
             >
               <el-option :value="treeValue" :label="treeLabel">
                 <el-tree
                   ref="selectTree"
                   node-key="id"
                   :data="treeData"
                   :props="defaultProps"
                   :default-expanded-keys="defaultExpandedKeys"
                   :expand-on-click-node="false"
                   :highlight-current="true"
                   :default-expand-all="true"
                   @node-click="handleNode"
                 ></el-tree>
               </el-option>
             </el-select>
           </el-form-item>
/* 下拉高度 */
.el-scrollbar .el-scrollbar__view .el-select-dropdown__item {
  height: auto;
  max-height: 274px;
  padding: 0;
  overflow: hidden;
  overflow-y: auto;
}
.el-select-dropdown__item.selected {
  font-weight: normal;
}
ul li >>> .el-tree .el-tree-node__content {
  height: auto;
  padding: 0 20px;
}
.el-tree-node__label {
  font-weight: normal;
}
.el-tree >>> .is-current .el-tree-node__label {
  color: #409eff;
  font-weight: 700;
}
.el-tree >>> .is-current .el-tree-node__children .el-tree-node__label {
  color: #606266;
  font-weight: normal;
}
// data() 定义的数据
data() {
    return {
      form: {},
      formRules: {
        parent_id: [
          {
            required: true,
            message: '请输入组织架构的名称',
            trigger: 'change'
          },
        ]
      },
      // 组织下拉
      treeData: [],
      // 组织树默认
      defaultProps: {
        value: 'id',
        label: 'name',
        children: 'children',
      },
      // 默认展开
      defaultExpandedKeys: [],
      // options value值
      treeValue: '',
      // options label值
      treeLabel: '',
    }
  },
created() {
    // 初始化字段parent_id,为了校验
    this.$set(this.form, 'parent_id', '')
  },
// 初始化数据,不需要默认,可以略过
// 编辑请求form数据
    initForm() {
      if (this.itemId) {
        this.$http.post(this.$ApiUrl + "Organization/GetOrganizationDetailById", {
          organization_id: this.itemId,
        }).then(res => {
          if (res && res.code === 0) {
            let data = res.data;
            if (data) {
              this.form = data;
              this.tableData = data.users;
              this.treeValue = data.parent_id
              if (this.treeValue) {
                this.treeLabel = this.$refs.selectTree.getNode(this.treeValue).data.name // 初始化显示
                this.$refs.selectTree.setCurrentKey(this.treeValue) // 设置默认选中
              }
            }
          }
        })
      }
    },
   
 // js
 // 切换选项
    handleNode(data, node) {
      this.treeValue = data.id
      this.form.parent_id = data.id
      this.treeLabel = data.name
      this.$refs.treeSelect.blur()
      this.defaultExpandedKeys = []
    },

    // 树清空
    handleClear() {
      this.treeLabel = ''
      this.clearSelected()
    },

    /* 清空选中样式 */
    clearSelected() {
      let allNode = document.querySelectorAll('#tree-option .el-tree-node')
      allNode.forEach((element) => element.classList.remove('is-current'))
    },