el-tree回显复选框时半选中和全选中的树

news2024/9/22 11:36:54

项目需求如下:当我点击“编辑”后,需要在tree树上全勾中和半勾中选项,由于后端接口返回的tree树是含了父级节点id的数组集合,所以我们回显时需要处理好这个全勾中和半勾中的问题。

在这里插入图片描述
主要思路如下,我们通过setData方法获取详情接口数据,然后调用defaultChecked方法回显,通过控制checkStrictly是否为true来确定父子是否关联,然后通过myTree.setChecked来设置选中的项,如下所示:

    setData(item) {
      getRoleDetail(item.id)
        .then(res => {
          // console.log("角色详情", res);

          this.formData = res.data
          this.formData.checked_menus = res.data.permissions

          this.defaultChecked(res.data.permissions)
        })
    },

    defaultChecked(myData) {
      // 默认选中

      this.searchConfig[2].checkStrictly = true

      let myTree

      setTimeout(() => {
        this.$nextTick(() => {
          myTree = this.$refs.searchForm.$refs.treeRef[0]

          setTimeout(() => {
            myData.forEach(item => {
              myTree.setChecked(item, true, false)
            })
          }, 100)

          this.searchConfig[2].defaultCheckedKeys = myData

          this.searchConfig[2].checkStrictly = false
        })
      }, 200)

      // this.$refs.searchForm.setKeyTree(myData);
    },

当前页面完整代码如下:

<template>
  <div class="search-container">
    <search-form
      ref="searchForm"
      :showSearchButton="false"
      :isShowResetButton="false"
      :formData="formData"
      :rules="rules"
      :isInline="false"
      :searchConfig="searchConfig"
      @checkTree="checkTree"
    />

    <div class="txc">
      <yihen-button-group
        :isShowSaveAdd="!isEdit"
        @saveAdd="addNext"
        @saveForm="submit"
        @handleClose="cancel"
      />
    </div>
  </div>
</template>
<script>
import searchForm from '@/components/search-form'

import { genTree } from '@/libs/utils.js'
import {
  getMenuList,
  getRoleDetail

  // staticDeleteAll
} from '@/api/account.js'
export default {
  components: { searchForm },
  props: {
    currentItem: {
      type: Object,
      default: () => {}
    },
    isEdit: {
      type: Boolean,
      default: false
    }
  },
  data() {
    return {
      formData: {},
      showSeniorForm: false,
      searchConfig: [
        {
          type: 'input',
          label: '角色名称',
          props: 'group_name',
          placeholder: '请输入角色名称',
          labelWidth: 105,
          colSpan: 20
        },

        {
          type: 'textArea',
          label: '角色描述',
          props: 'remark',
          placeholder: '请输入角色描述',
          labelWidth: 105,
          colSpan: 20
        },
        {
          type: 'tree',
          label: '菜单权限',
          props: 'checked_menus',
          placeholder: '请选择菜单',
          nodeKey: 'id',
          checkStrictly: false,
          labelWidth: 105,
          colSpan: 20,
          treeData: [],
          showCheckbox: true,
          defaultProps: {
            children: 'children',
            label: 'permiss_name'
          },
          defaultCheckedKeys: []
        }
      ],
      rules: {
        group_name: [
          { required: true, message: '请输入角色名称', trigger: 'blur' }
        ],

        remark: [
          { required: false, message: '请输入角色描述', trigger: 'blur' }
        ],

        checked_menus: [
          {
            required: false,

            message: '请选择菜单',
            trigger: 'blur'
          }
        ]
      }
    }
  },
  watch: {
    currentItem: {
      handler(val) {
        // this.showSeniorForm = false;
        // console.log("回显", val);
        // this.formData = { ...val };
      },
      immediate: true
    }
  },
  created() {
    this.getMenuArr()
  },
  methods: {
    submit() {
      this.$refs.searchForm.validatorForm(data => {
        this.$emit('submit', this.formData)
      })
    },
    cancel() {
      this.$emit('cancel')
    },
    addNext() {
      this.$refs.searchForm.validatorForm(data => {
        this.$emit('addNext', this.formData)
      })
    },

    // 获取菜单下拉
    getMenuArr() {
      const obj = {
        page_size: 9999,
        page: 1,
        permiss_name: ''
      }

      getMenuList(obj)
        .then(res => {
          const routesList = genTree(res.data.list)

          // console.log("routesList", routesList);

          this.searchConfig[2].treeData = routesList
        })
    },

    checkTree(node, data) {
      // this.temp.menuList = data.checkedKeys.concat(data.halfCheckedKeys);
      const selectArr = data.checkedKeys.concat(data.halfCheckedKeys)

      this.formData.checked_menus = selectArr

      // console.log("checkTree", node, data, selectArr);
    },

    setData(item) {
      getRoleDetail(item.id)
        .then(res => {
          // console.log("角色详情", res);

          this.formData = res.data
          this.formData.checked_menus = res.data.permissions

          this.defaultChecked(res.data.permissions)
        })
    },

    defaultChecked(myData) {
      // 默认选中

      this.searchConfig[2].checkStrictly = true

      let myTree

      setTimeout(() => {
        this.$nextTick(() => {
          myTree = this.$refs.searchForm.$refs.treeRef[0]

          setTimeout(() => {
            myData.forEach(item => {
              myTree.setChecked(item, true, false)
            })
          }, 100)

          this.searchConfig[2].defaultCheckedKeys = myData

          this.searchConfig[2].checkStrictly = false
        })
      }, 200)

      // this.$refs.searchForm.setKeyTree(myData);
    },
    resetForm() {
      this.$nextTick(() => {
        this.$refs.searchForm.resetFields()
      })
    }
  }
}
</script>
<style lang="less" scoped>
.senior-setting {
  border-top: 1px solid #e9e9e9;
}
.first-line {
  display: flex;
  align-items: center;
  cursor: pointer;
  padding: 20px 0 20px 20px;
  span {
    color: #409eff;
  }
  i {
    color: #409eff;
  }
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1814064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

服务器数据恢复—热备盘未完全启用导致raid5阵列崩溃的数据恢复案例

服务器存储故障&#xff1a; 一台EMC某型号存储由于存储中raid5阵列出现故障导致服务器崩溃&#xff0c;由于数据涉密&#xff0c;需要工程师到现场恢复数据。 服务器数据恢复工程师到现场后对数据进行检测&#xff0c;经过检测发现服务器崩溃是由于raid中某些硬盘掉线所导致。…

【深度学习】数竹签演示软件系统

往期文章列表&#xff1a; 【YOLO深度学习系列】图像分类、物体检测、实例分割、物体追踪、姿态估计、定向边框检测演示系统【含源码】 【深度学习】物体检测/实例分割/物体追踪/姿态估计/定向边框/图像分类检测演示系统【含源码】 【深度学习】YOLOV8数据标注及模型训练方法整…

meilisearch的Managing API keys,自己趟过的坑

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

电商比价系统的搭建需要哪些方面着手准备?

搭建一个淘宝/京东比价系统所需的时间取决于多个因素&#xff0c;包括但不限于系统的复杂度、开发团队的规模与经验、数据源获取的难易程度、技术选型等。以下是一个大致的时间估计和考虑因素&#xff1a; 需求分析与设计&#xff1a; 确定系统的主要功能&#xff0c;如商品搜…

Python基于 GPU 的机器学习算法库之cuml使用详解

概要 在大数据和机器学习的时代,高效的数据处理和模型训练变得尤为重要。传统的 CPU 计算方式在处理大规模数据时往往显得力不从心,而 GPU 的并行计算能力为此提供了一种解决方案。cuml 是 RAPIDS AI 项目的一部分,它提供了一组基于 GPU 的机器学习算法,能够极大地提升数据…

【数据结构与算法】哈夫曼树与哈夫曼编码

文章目录 哈夫曼树&#xff08;最优二叉树&#xff09;定义举个&#x1f330;&#xff08;WPL的计算&#xff09; 哈夫曼树的构造&#xff08;最优二叉树的构造&#xff09;举个&#x1f330; 哈夫曼编码定义构造 哈夫曼树&#xff08;最优二叉树&#xff09; 在介绍哈夫曼树之…

中间件复习之-分布式存储系统

单机存储系统介绍 存储引擎&#xff1a;存储系统的发动机&#xff0c;提供数据的增、删、改、查能力&#xff0c;直接决定存储系统的功能&#xff08;支持怎么样的查询&#xff0c;锁能锁到什么程度&#xff09;和性能&#xff08;增删改查速度&#xff09;。 性能因素 写入方…

1939springboot VUE 高等院校求职信息管理系统开发mysql数据库web结构java编程计算机网页源码maven项目前后端分离

一、源码特点 springboot VUE高等院校信息&#xff08;求职&#xff09;管理系统是一套完善的完整信息管理类型系统 前后端分离&#xff0c;结合springboot框架和VUE完成本系统&#xff0c;对理解vue java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&a…

Spring Cloud全家桶(上)【Nacos、OpenFeign、LoadBalancer、GateWay、金丝雀灰色发布】

0.零基础入门微服务实战课 1.微服务和 Spring Cloud1.1 什么是微服务&#xff1f;1.2 什么是 Spring Cloud&#xff1f;1.3 微服务 VS Spring Cloud 2.为什么要学微服务&#xff1f;3.Spring Cloud 组件介绍1.什么是 Nacos?1.1 Nacos 功能1.1.1 配置中心1.1.2 注册中心 1.2 Na…

29、shell变量、重定向及运算符

一、shell脚本 1.1、shell的定义 脚本&#xff1a;可运行的代码的集合&#xff0c;脚本语言&#xff08;计算机语言&#xff09;。 脚本的特点&#xff1a;从上到下&#xff0c;按行执行。 python&#xff1a;脚本语言 格式更严谨的执行缩进。也是从上到下按行执行。 shel…

正式发布 | 极海首款GHD3440电机专用栅极驱动器,构建多元电机产品矩阵

​栅极驱动器是低压控制器和高功电路之间的缓冲电路&#xff0c;用于放大控制器的控制信号&#xff0c;从而实现功率器件更有效的导通和关断。随着各种智能电子设备的不断普及和应用&#xff0c;栅极驱动器的市场需求也在不断增加。据国际权威研究机构Yole Group预计&#xff0…

元灵诀 逆天纪系统搭建 零撸看广告升级模式 定制开发

在当今互联网飞速发展的时代&#xff0c;元灵诀逆天纪系统的出现无疑为游戏行业注入了新的活力。这款系统不仅是一个定制开发的youxiu作品&#xff0c;更是对游戏产业的一次深度思考和探索。其独特的零撸看广告升级模式&#xff0c;将游戏体验和商业模式完美结合&#xff0c;开…

HoloLens2系列讲解 - 05 HoloLens2 Appx 安装

安装准备 Hololens2设备打包好的Appx文件一台电脑Hololens2 和电脑需要处于同一局域网 安装Appx 1.在Hololens设备上点击设置->网络和Internet->选择“自己wifi名称”网络并点击自动连接。 2.查看HoloLens的IP地址&#xff0c;如192.168.0.1。 &#xff08;1&#xff…

【Go语言】面向对象编程(二):通过组合实现类的继承和方法重写

通过组合实现类的继承和方法重写 要实现面向对象的编程&#xff0c;就必须实现面向对象编程的三大特性&#xff1a;封装、继承和多态。 1 封装 类的定义及其内部数据的定义可以看作是类的属性&#xff0c;基于类定义的函数方法则是类的成员方法。 2 继承 Go 语言中&#x…

微软将 AI 工具和软件的研发工作外包给 OpenAI

微软将 AI 工具和软件的研发工作外包给 OpenAI 科技媒体 CNBC 报道称&#xff0c;微软正计划将其人工智能&#xff08;AI&#xff09;工具和软件的开发工作外包给OpenAI&#xff0c;这对竞争对手谷歌来说无疑是一个利好消息。 Okta首席执行官Todd McKinnon表示&#xff0c;微…

【浏览器清空证书】

chrome://net-internals/#hsts 在地址栏输入并访问&#xff1a;chrome://net-internals/#hsts

.NET C# 读写Excel及转换DataTable

目录 .NET C# 读写Excel及转换DataTable1. 依赖库2. Nuget包与版本3. ExcelUtil3.1 Excel sheet 转 DataTable3.2 Excel sheet 转 DataSet3.3 DataTable 转 Excel sheet3.4 DataSet 转 Excel3.5 私有方法 .NET C# 读写Excel及转换DataTable 1. 依赖库 using NPOI.HSSF.UserMo…

[数据集][目标检测]中国象棋检测数据集VOC+YOLO格式300张12类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;300 标注数量(xml文件个数)&#xff1a;300 标注数量(txt文件个数)&#xff1a;300 标注类别…

串口通信的基本概念

串口通信&#xff08;Serial Communications&#xff09;的基本概念可以归纳为以下几个方面&#xff1a; 1、定义与原理&#xff1a; 串口通信是一种通过串行接口进行数据传输的通信方式。它可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去&#xff0c;同时可…

大学四年没写过一行代码?真实的计算机专业到底如何?

最近我帮一个学弟做了一个网站当作课程项目&#xff0c;我做好了发给他。他却问我怎么打开&#xff0c;可以用 eclipse 吗&#xff1f;当时直接给我整不会了。这个学弟是通过我们学校的一个代做项目群认识的&#xff0c;这个群有 600 多人&#xff0c;而且天天有人问有没有代做…