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

项目需求如下:当我点击“编辑”后,需要在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.mfbz.cn/a/714840.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java】已解决:java.lang.OutOfMemoryError: Java heap space

文章目录 一、问题分析背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决Java&#xff1a;java.lang.OutOfMemoryError: Java heap space 一、问题分析背景 在Java开发过程中&#xff0c;有时我们会遇到java.lang.OutOfMemoryError: Java heap spa…

在typora中利用正则表达式,批量处理图片

一&#xff0c;png格式 在 Typora 中批量将 HTML 图片标签转换为简化的 Markdown 图片链接&#xff0c;且忽略 alt 和 style 属性&#xff0c;可以按照以下步骤操作&#xff1a; 打开 Typora 并加载你的文档。按下 Ctrl H&#xff08;在 Windows/Linux 上&#xff09;或 Cmd…

【Python】理解『下采样』:原理与应用

是你多么温馨的目光 教我坚毅望着前路 叮嘱我跌倒不应放弃 没法解释怎可报尽亲恩 爱意宽大是无限 请准我说声真的爱你 &#x1f3b5; Beyond《真的爱你》 在数字信号处理、图像处理和机器学习中&#xff0c;下采样&#xff08;Downsampling&#xff09;是…

【Java04】引用变量数组初始化的内存机制

引用类型数组指向的元素也是引用。其本质是&#xff1a; 由一个在栈上的引用数组变量指向一块堆内存&#xff1b;这块堆内存里存储的元素是引用&#xff0c;又分别指向其他堆内存。 class Person // Person是一个自定义的类 {public int age;puiblic double height;public vo…

Java课程设计:基于Javaweb的校园订餐系统

文章目录 一、项目介绍二、项目技术栈三、核心代码四、项目展示五、源码获取 一、项目介绍 在当今互联网高速发展的时代,大学校园内的学生生活正在发生着翻天覆地的变化。其中,校园内的餐饮服务无疑是亟需改革和创新的领域之一。 传统的校园食堂模式,往往存在就餐高峰时段拥挤…

使用了代理IP怎么还会被封?代理IP到底有没有效果

代理IP作为一种网络工具&#xff0c;被广泛应用于各种场景&#xff0c;例如网络爬虫、海外购物、规避地区限制等。然而&#xff0c;很多用户在使用代理IP的过程中却发现自己的账号被封禁&#xff0c;这让他们不禁产生疑问&#xff1a;使用了代理IP怎么还会被封&#xff1f;代理…

Web前端项目-交互式3D魔方【附源码】

交互式3D魔方 ​ 3D魔方游戏是一款基于网页技术的三维魔方游戏。它利用HTML、CSS和JavaScript前端技术来实现3D效果&#xff0c;并在网页上呈现出逼真的魔方操作体验。 运行效果&#xff1a; 一&#xff1a;index.html <!DOCTYPE html> <html><head><…

刚入职,写接口用了PUT和DELETE方法,结果被同事喷了,感觉自己被针对了

事情是这样&#xff0c;某社交平台上有个兄弟发帖&#xff0c;说自己刚入职国企&#xff0c;写了个借口&#xff0c;用了PUT和DELETE方法&#xff0c;前段说不能用这两个&#xff0c;这位仁兄感觉很委屈&#xff0c;特地发帖吐槽。 其实站在安全的角度来说&#xff0c;真没冤枉…

爱了爱了,11款超良心App推荐!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/今天&#xff0c;我们向你推荐十款与众不同但又不错的win10软件&#xff0c;它们都有各自的功能和优点&#xff0c;相信你一定会喜欢。 1.图片处…

第 4 章:从 Spring Framework 到 Spring Boot

通过前面几个章节的介绍&#xff0c;相信大家已经对 Spring Framework 有了一个基本的认识&#xff0c;相比早期那些没有 Spring Framework 加持的项目而言&#xff0c;它让生产力产生了质的飞跃。但人们的追求是无止境的&#xff0c;这也驱动着技术的发展。开发者认为 Spring …

【计算机组成原理】指令系统考研真题详解之拓展操作码!

计算机组成原理&#xff1a;指令系统概述与深入解析 1. 指令系统概述 计算机软硬件界面的概念 在计算机组成原理中&#xff0c;指令系统扮演着至关重要的角色&#xff0c;它是计算机软硬件界面的核心。软件通过指令与硬件进行通信&#xff0c;硬件根据指令执行相应的操作。指…

基于STM32和人工智能的智能气象站系统

目录 引言环境准备智能气象站系统基础代码实现&#xff1a;实现智能气象站系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统4.4 用户界面与数据可视化应用场景&#xff1a;智能气象管理与优化问题解决方案与优化收尾与总结 1. 引言 随着气象科技的进步&#xff0c;智能…

定个小目标之刷LeetCode热题(21)

这是道技巧题&#xff0c;利用了 &#xff08;num - 1&#xff09;% n 计算下标的形式来将数组元素与数组索引产生映射关系&#xff0c;代码如下&#xff0c;可以看下注释 class Solution {public List<Integer> findDisappearedNumbers(int[] nums) {int n nums.lengt…

Qt画五角星,简单图表

五角星&#xff1a; 代码&#xff1a; widget.cpp #include "widget.h" #include "ui_widget.h" #include <QPaintEvent> #include <QPainter> #include <QPainterPath> Widget::Widget(QWidget *parent): QWidget(parent), ui(new U…

广东启动“粤企质量提升工作会议” 着力提升产品和服务质量

6月5日,由广东质量峰会组委会牵头,联合相关质量、信用、打假和检验检测等部门共同举办的“粤企质量提升工作会议”在广州正式启动。本次工作会议旨在贯彻落实《质量强国建设纲要》及《广东省质量强省建设纲要》精神,深入开展全民质量行动,弘扬企业家和工匠精神,营造政府重视质量…

互联网应用主流框架整合之SpringMVC基础组件开发

多种传参方式 在前一篇文章互联网应用主流框架整合之SpringMVC初始化及各组件工作原理中讨论了最简单的参数传递&#xff0c;而实际情况要复杂的多&#xff0c;比如REST风格&#xff0c;它往往会将参数写入请求路径中&#xff0c;而不是以HTTP请求参数传递&#xff1b;比如查询…

acwing 5575. 改变数值 | c++题解及解释

acwing 5575. 改变数值 题目 代码及解释 #include <iostream> #include <cstring> #include <algorithm> #include <unordered_map> using namespace std;const int N305; int a[N],b[N]; unordered_map<int,int>f[N]; const int INF1e9;int gc…

异或运算的原理以及应用

异或&#xff08;XOR&#xff09;是计算机科学和数字电路中常用的运算之一。异或运算符通常用符号“⊕”或“^”表示&#xff0c;它有着简单而独特的性质&#xff0c;使其在数据加密、错误检测与纠正等多个领域得到了广泛的应用。在网络上我们传输的每一比特数据都经过了异或运…

如何用 ChatGPT DALL-E3绘画(10个案例)

如何用ChatGPT绘画——10个案例&#xff08;附提示词&#xff09; DALL•E 3可以在ChatGPT plus里直接使用了。 如果想免费使用&#xff0c;可以用新必应免费使用。 上次有个朋友问&#xff1a;DALL•E 3 有什么用。 这里用十个案例&#xff0c;来解释一下这个问题。 1.创…

计算机缺失msvcr110.dll如何解决,这6种解决方法可有效解决

电脑已经成为我们生活和工作中不可或缺的工具&#xff0c;然而在使用电脑的过程中&#xff0c;我们常常会遇到一些问题&#xff0c;其中之一就是电脑找不到msvcr110.dll文件。这个问题可能会给我们带来一些困扰&#xff0c;但是只要我们了解其原因并采取相应的解决方法&#xf…