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;
// }
相关推荐
林的快手7 分钟前
CSS列表属性
前端·javascript·css·ajax·firefox·html5·safari
bug总结38 分钟前
新学一个JavaScript 的 classList API
开发语言·javascript·ecmascript
网络安全-老纪1 小时前
网络安全-js安全知识点与XSS常用payloads
javascript·安全·web安全
yqcoder1 小时前
Express + MongoDB 实现在筛选时间段中用户名的模糊查询
java·前端·javascript
十八朵郁金香1 小时前
通俗易懂的DOM1级标准介绍
开发语言·前端·javascript
计算机-秋大田2 小时前
基于Spring Boot的兴顺物流管理系统设计与实现(LW+源码+讲解)
java·vue.js·spring boot·后端·spring·课程设计
GDAL2 小时前
HTML 中的 Canvas 样式设置全解
javascript
GDAL3 小时前
HTML Canvas clip 深入全面讲解
前端·javascript·canvas
禾苗种树3 小时前
在 Vue 3 中使用 ECharts 制作多 Y 轴折线图时,若希望 **Y 轴颜色自动匹配折线颜色**且无需手动干预,可以通过以下步骤实现:
前端·vue.js·echarts
GISer_Jing3 小时前
Javascript排序算法(冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序)详解
javascript·算法·排序算法