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;
// }
相关推荐
honkun620 分钟前
vue甘特图组件 vxe-gantt 实现拖拽任务自动更新紧前紧后依赖线关联任务的日期
vue.js·vxe-gantt
雪芽蓝域zzs1 小时前
第20章:ECharts 图表主题切换 + 自定义颜色渐变
vue.js·echars
李少兄1 小时前
深入解析 JavaScript 中的 `document` 对象
javascript
paopaokaka_luck1 小时前
考研政治刷题小程序(AI推荐题目、ECharts数据分析、章节练习与专项训练、模拟考试、错题本与收藏夹、学习打卡与目标管理、题库和组卷维护)
前端·javascript·spring boot·spring·数据分析·echarts
刃神太酷啦1 小时前
前端入门第一课:HTML 基础语法 + 常用标签 + 实战全解
服务器·c语言·前端·javascript·css·c++·html
mldong1 小时前
给流程设计器加国际化,我没引 vue-i18n
前端·javascript·vue.js
边境悍匪1 小时前
蜗牛学苑 Java 智能体学习 Day46|贯穿项目 2 思维导图复盘
java·开发语言·vue.js·学习·spring
开开心心就好8 小时前
批量提取PDF中的图片,直接导出原图
前端·javascript·支持向量机·智能手机·pdf·html·启发式算法
默_笙12 小时前
🏛 给 AI 配一间办公室:Harness Engineering 六大模块与它的实现
前端·javascript
linux_cfan13 小时前
videojs v10 源代码系列解读:14 · 谓词守卫:在运行时安全地调用能力
前端·javascript·音视频