当前位置: 首页 > news >正文

elementUI tree树形控件 根据数据动态设置禁用,全选时不可选中禁用数据

需求

根据后端返回的数据禁用数据,将tree结构对应的数据设置为禁用状态,并且在点击全选后不可选中禁用数据。

效果

根据数据动态设置禁用
在这里插入图片描述
全选时不可选中禁用数据
在这里插入图片描述

代码

<template>
	...
	<div class="list-box">
		<div class="left">
			<h3 class="list-title">
				<el-checkbox v-model="checkAll"
                             style="margin-right: 15px;"
                             @change="handleCheckAllChange"></el-checkbox>
                <span>全部员工</span>
              </h3>
              <div class="list-main">
                <el-input placeholder="输入关键字进行过滤"
                          size="small"
                          v-model="filterText"
                          style="margin-bottom: 10px;">
                </el-input>
                <el-tree class="filter-tree"
                         ref="leftTreeRef"
                         node-key="id"
                         show-checkbox
                         :data="deptUser"
                         :props="defaultProps"
                         default-expand-all
                         :filter-node-method="filterNode"
                         :default-checked-keys="ruleForm.users"
                         @check-change="handleCheckChange">
                </el-tree>
			</div>
		</div>
		...
	</div>
    ...
</template>

<script>
...
export default {
  import API from '@/api.js'
  ...
  data() {
    return {
      ...
      checkAll: false, // 是否全选
      filterText: '', // 关键字过滤
      deptUser: [], // 部门员工树
      selectAllData: [], // 可全选数据
      ...
      defaultProps: {
        children: 'children',
        label: 'label',
        disabled: 'disabled'
      }
    }
  },
  watch: {
    filterText(val) {
      this.$refs.leftTreeRef.filter(val)
    }
  },
  ...
  methods: {
    getDeptUser() { // 获取部门员工
      api.GetDeptUser().then(res => {
        if (res.code === 200) {
          this.deptUser = res.data
          if (res.data2.length > 0) {
            this.setDisabled(this.deptUser, res.data2)
            this.selectAllData = this.setNoDisAll(JSON.parse(JSON.stringify(this.deptUser))) // 设置可全选的数据(删除不可选的数据)
          }
          ...
        } else {
          this.$message.error('错误')
        }
      })
    },
    setDisabled(nodes, disabledArr) { // 设置禁用节点 参数1要处理的数据(树结构) 参数2要禁用的数据(数组)
      nodes.forEach(node => {
        if (disabledArr.includes(node.id)) {
          node.disabled = true
        }
        if (node.children && node.children.length > 0) {
          this.setDisabled(node.children, disabledArr)
        }
      })
    },
    setNoDisAll(nodes) { // 设置可全选的数据 (删除禁用数据)
      const arr = []
      for (let i = 0; i < nodes.length; i++) {
        const item = nodes[i]
        if (item.disabled) {
          nodes.splice(i--, 1)
        } else {
          if (item.children && item.children.length > 0) {
            item.children = this.setNoDisAll(item.children)
          }
          arr.push(item)
        }
      }
      return arr
    },
    filterNode(value, data) {
      if (!value) return true
      return data.label.indexOf(value) !== -1
    },
    handleCheckAllChange(val) { // 列表全选/全不选
      if (this.checkAll) { // 全选
        this.$refs.leftTreeRef.setCheckedNodes(this.selectAllData)
      } else { // 全不选
        this.$refs.leftTreeRef.setCheckedKeys([])
      }
    }
    ...
  }
}
</script>

相关文章:

  • 股指期货和etf期权哪个更好交易?
  • 零基础学CocosCreator·第九季-网络游戏同步策略与ESC架构
  • 在 PyCharm 中接入deepseek的API的各种方法
  • CNN-BiGRU卷积神经网络双向门控循环单元多变量多步预测,光伏功率预测
  • 【Java常用】注解与反射_2.反射
  • 讯方·智汇云校华为授权培训机构的介绍
  • DeepSeek的开源核爆:当技术民主化重构AI权力版图
  • 常用数据格式:json、bson、msgpack
  • POI 的 Excel 读写操作教程
  • Ubuntu 22.04 - OpenLDAP安装使用(服务器+LAM+客户端)
  • 对正则表达式说不!!!
  • 【Android开发】华为手机安装包安装失败“应用是非正式版发布版本,当前设备不支持安装”问题解决
  • CentOS本机配置为时间源
  • 自定义基座实时采集uniapp日志
  • depcheck检查node.js项目中未使用和缺失依赖的工具
  • 【Apache Paimon】-- 作为一名小白,如何系统地学习 Apache paimon?
  • Ansible批量配置服务器免密登录步骤详解
  • 【pytest】获取所有用例名称并存于数据库
  • 联想电脑如何进入BIOS?
  • 新数据结构(9)——Java异常体系
  • 武汉公司注册网站/知乎seo排名帝搜软件
  • 学校网站建设的作用/百度如何做广告
  • 如何免费建立网站/手机制作网页
  • 到那里找做网站的兼职/百度自己的宣传广告
  • 高端网站开发制作/搜索引擎优化师工资
  • 成都电子网站建设/企业策划