element ui 树标签处理搜索过滤展示子节点

HTML

html 复制代码
    <div>
      <el-drawer
        size="50%"
        title="选择标签"
        :visible.sync="isShowDrawer"
        :before-close="handleCloseDrawer"
      >
        <div style="padding:15px">
          <el-input placeholder="输入关键字进行过滤" v-model="filterText"></el-input>

          <el-tree
            style="margin: 20px 0"
            highlight-current
            node-key="id"
            show-checkbox
            check-on-click-node
            class="filter-tree"
            :data="dataTag"
            :props="defaultProps"
            :filter-node-method="filterNode"
            :default-checked-keys="defaultCheck"
            ref="tree"
          ></el-tree>

          <div>
            <el-button size="small" type="primary" @click="onSave">保存</el-button>
            <el-button size="small" @click="handleCloseDrawer">取消</el-button>
          </div>
        </div>
      </el-drawer>
    </div>

JS

javascript 复制代码
 // 标签过滤方法
    filterNode(value, data, node) {
      if (!value) return true
      let one = data.label.indexOf(value) !== -1
      let two =
        node.parent &&
        node.parent.data &&
        node.parent.data.label &&
        node.parent.data.label.indexOf(value) !== -1
      let three =
        node.parent &&
        node.parent.parent &&
        node.parent.parent.data &&
        node.parent.parent.data.label &&
        node.parent.parent.data.label.indexOf(value) !== -1
      let four =
        node.parent &&
        node.parent.parent &&
        node.parent.parent.parent &&
        node.parent.parent.parent.data &&
        node.parent.parent.parent.data.label &&
        node.parent.parent.parent.data.label.indexOf(value) !== -1
      let result_one = false
      let result_two = false
      let result_three = false
      let result_four = false
      if (node.level === 1) {
        result_one = one
      } else if (node.level === 2) {
        result_two = one || two
      } else if (node.level === 3) {
        result_three = one || two || three
      } else if (node.level === 4) {
        result_three = one || two || three || four
      }
      return result_one || result_two || result_three || result_four
    },
    handleClose(index) {
      this.ruleFormData.tagList.splice(index, 1)
    },

    handleSelectTags() {
      this.defaultCheck = this.ruleFormData.tagList.map(i => i.id)
      this.isShowDrawer = true
    },
    onSave() {
      let tags = this.$refs.tree.getCheckedNodes()
      if (tags.length == 0) {
        return this.$message.error('请选择标签')
      }
      this.ruleFormData.tagList = tags
        .filter(item => !item.hasOwnProperty('children'))
        .map(item => {
          return {
            ...item,
            tagId: item.id,
            tagValue: item.label
          }
        })

      this.handleCloseDrawer()
    },
    handleCloseDrawer() {
      this.$refs.tree.setCheckedKeys([])
      this.filterText = ''
      this.defaultCheck = []
      this.isShowDrawer = false
    },

CSS

css 复制代码
/deep/ .el-tree-node.is-expanded > .el-tree-node__children {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
}

/deep/ .el-tree-node__label {
  font-size: 16px;
}

.image-tip {
  font-size: 12px;
  color: #606266;
}

/deep/ .el-tree-node {
  margin: 10px 0;
}

// /deep/.el-tree-node {
//   .is-leaf + el-checkbox .el-checkbox__inner {
//     display: inline-block;
//   }
// }
// .el-checkbox .el-checkbox__inner {
//   display: none;
// }
相关推荐
刘一说1 分钟前
Vue单页应用(SPA)开发全解析:从原理到最佳实践
前端·javascript·vue.js
疯狂成瘾者2 分钟前
前端vue核心知识点
前端·javascript·vue.js
hh随便起个名8 小时前
力扣二叉树的三种遍历
javascript·数据结构·算法·leetcode
我是小路路呀9 小时前
element级联选择器:已选中一个二级节点,随后又点击了一个一级节点(仅浏览,未确认选择),此时下拉框失去焦点并关闭
javascript·vue.js·elementui
JIngJaneIL10 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
敲敲了个代码10 小时前
隐式类型转换:哈基米 == 猫 ? true :false
开发语言·前端·javascript·学习·面试·web
澄江静如练_10 小时前
列表渲染(v-for)
前端·javascript·vue.js
JustHappy10 小时前
「chrome extensions🛠️」我写了一个超级简单的浏览器插件Vue开发模板
前端·javascript·github
Loo国昌10 小时前
Vue 3 前端工程化:架构、核心原理与生产实践
前端·vue.js·架构
sg_knight10 小时前
拥抱未来:ECMAScript Modules (ESM) 深度解析
开发语言·前端·javascript·vue·ecmascript·web·esm