VUE element-ui之el-tree树形控件勾选节点指定节点自动勾选(指定节点为必选项)

简介: VUE element-ui之el-tree树形控件勾选节点指定节点自动勾选(指定节点为必选项)

产品需求:

  1. 最后一级节点中列表节点为必选项
  2. 勾选列表节点之外的同级节点,列表节点自动勾选
  3. 取消列表节点勾选,其他同级节点也取消勾选(即列表节点为必选项)
  4. 列表之外的节点可单独操作(勾选或取消勾选)

实现步骤:

HTML中定义:

<el-tree
   ref="tree"
   node-key="code"
   show-checkbox
   class="el-tree"
   :indent="0"
   :data="routeList"
   :props="defaultProps"
   :highlight-current="true"
   :default-expand-all="true"
   :expand-on-click-node="false"
   :render-content="renderContent"
   :default-checked-keys="menuIds"
   @check="handleCheckChange" //本次需求需要事件
   @node-expand="handleExpand"
 />

methods中定义:

setRequiredNodeChecked(data) {
      for (let i = 0; i < data.length; i++) {
        if (data[i].type) {
          this.$refs.tree.setChecked(data[i].code, true)
        }
      }
    },
    setNodeUnChecked(data) {
      for (let i = 0; i < data.length; i++) {
        this.$refs.tree.setChecked(data[i].code, false)
      }
    },
    fetchCheckedNodeParent(data, findKey, callback) {
      for (let i = 0; i < data.length; i++) {
        const item = data[i]
        if (item.code && item.code === findKey) {
          callback(data)
          return true
        }
        if (item.childrens && item.childrens.length) {
          const result = this.fetchCheckedNodeParent(item.childrens, findKey, callback)
          if (result) {
            return true
          }
        }
      }
      return false
    },
    checkRequired(currentData, checkedKeys, halfCheckedNodes) {
      const currentKey = currentData.code
      const currentType = currentData.type
      if (checkedKeys.includes(currentKey)) {
        // 当前选中
        this.fetchCheckedNodeParent(halfCheckedNodes, currentKey, this.setRequiredNodeChecked)
      } else if (currentType) {
        // 取消选中,但当前项是必选项(如果取消勾选的是列表,那么其余同级节点全部取消勾选)
        this.fetchCheckedNodeParent(halfCheckedNodes, currentKey, this.setNodeUnChecked)
      }
    },
    // 点击节点
    handleCheckChange(data, node) {
      this.checkRequired(data, node.checkedKeys, node.halfCheckedNodes)
    }

看效果:
在这里插入图片描述
勾选列表之外的节点,列表节点自动勾选(如果取消列表勾选,其他同级节点全部自动取消勾选),单独操作列表节点可正常勾选反选,亲测有效。

相关文章
|
JavaScript 数据安全/隐私保护
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
Vue Amazing UI 是一个基于 Vue 3、TypeScript、Vite 等最新技术栈开发构建的现代化组件库,包含丰富的 UI 组件和常用工具函数,并且持续不断维护更新中。另外,组件库全量使用 TypeScript,支持自动按需引入和 Tree Shaking 等,能够显著提升开发效率,降低开发成本。
1006 5
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
743 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
17335 5
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
前端开发 Linux C#
一款开源、免费、美观的 Avalonia UI 原生控件库 - Semi Avalonia
一款开源、免费、美观的 Avalonia UI 原生控件库 - Semi Avalonia
2058 10
Ant Design Vue UI框架的基础使用,及通用后台管理模板的小demo【简单】
这篇文章介绍了如何使用Ant Design Vue UI框架创建一个简单的后台管理模板,包括创建Vue项目、安装和使用ant-design-vue、以及编写后台管理通用页面的代码和样式。
Ant Design Vue UI框架的基础使用,及通用后台管理模板的小demo【简单】
|
人工智能 API Apache
推荐3款开源、美观且免费的WinForm UI控件库
推荐3款开源、美观且免费的WinForm UI控件库
4019 6
|
API C# 开发者
基于Material Design风格开源、免费的WinForms UI控件库
基于Material Design风格开源、免费的WinForms UI控件库!
704 0
|
JavaScript 索引
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
1549 0
|
Linux C# Android开发
分享3款开源、免费的Avalonia UI控件库
分享3款开源、免费的Avalonia UI控件库
2338 0
|
JavaScript 开发者 UED
Vue.js组件库大对决:Element UI与Vuetify,开发者的罗密欧与朱丽叶!
【8月更文挑战第30天】Element UI和Vuetify是Vue.js开发中的热门组件库,前者简洁高效,后者遵循Material Design,国际化程度高。两者均提供丰富的组件支持,但Vuetify组件更多样,设计更灵活;Element UI在性能和中文支持上更优。文档方面,Element UI更直观易懂,而Vuetify配置灵活但学习成本稍高。选择时需综合考虑项目需求、团队背景及设计风格,以达到最佳开发效果。
1428 0