vue2 a-tree-select树形结构-懒加载(无限子级)---笔记

news2025/1/18 6:49:11

实现效果

思维导图 

 

 HTML代码:treeData是绑定的数组,onLoadData是懒加载函数

<a-tree-select 
  style="width: 100%; margin-left: 20px" 
  tree-data-simple-mode 
  multiple
  labelInValue
  placeholder="请选择…" 
  v-decorator="['leadersStr', { rules: [{ required: true, message: '请选择…' }] }]" 
  :tree-data="treeData"
  :disabled="readOnly"
  :load-data="onLoadData" 
/>

js代码部分,接口返回的数据是数组包裹对象的形式,前端需要组装

 官网中的isLeaf是叶子节点,open为true时,说明节点下有数据,就不是叶子节点,isLeaf要取反

注: 这里兼顾到两种情况:

1. pId和id相同导致数据挂不上页面

2. id和id之间相同(机构id和人员id相同)也会导致挂不上去

 要保持value和id的唯一性,所以加一个随机数,重新组装数据,value=random + '-'+ value

页面初始化-请求接口数据

/* 获取带队领导姓名列表 */
    async getLaderOrg(orgId = '111111111') {
      let res = await findLeaderForOrg(orgId)
      if(res.success && res.body.length > 0) {
        this.treeData = res.body.map( v => {
          const random = Math.random().toString(36).substring(2, 6);
          /* 如果是人员,匹配接口数据,是否有已选中 */
          if(v.type == '2') {
            this.dealWithInitLeaders(v, random)
          }
          return {
            id: random + '/' + v.sid,
            pId: null,
            value: random + '-' + v.sid,
            title: v.title,
            selectable: v.type == '2',
            isLeaf: !v.open && v.type == '2',
            disabled: v.type == '1'
          }
        })
      }
    },

懒加载部分:遍历数组最外层,

/* 领导带队检查懒加载 */
    async onLoadData(treeNode) {
      return new Promise(resolve => {
        const { value, isLeaf } = treeNode
        this.genTreeNode(value, isLeaf)
        resolve()
      });
    },

    // 树加载
    async genTreeNode(key, isLeaf = false) {
      var arr = []
      /* key是拼接后的数据,需要还原回接口返回的形势,截断一下 */
      await findLeaderForOrg(key.split('/')[1]).then( res => {
        if(res.success && res.body.length > 0 ) {
          res.body.map( item => {
            const random = Math.random().toString(36).substring(2, 6);
            /* 回显 */
            if(item.type == '2') {
              this.dealWithInitLeaders(item, random)
            }
            let params = {
              id: random+'/'+item.sid,
              pId: key,
              value: random+'-'+item.sid,
              title: item.title,
              isLeaf: !item.open && item.type == '2',
              selectable: item.type != '1',
              disabled: item.type == '1',
            }
            arr.push(params)
          })
        }
        return arr
      })
      this.treeData = this.treeData.concat(arr)
    },

由于对数组的数据进行了出来,如果选择框内原本就有数据,查看页面详情时需要对数据进行回显,和对机构列表进行 - '已选中状态高亮',所以要对数据进行处理

/* 编辑 - 详情  带队领导选择字段回显 */
    dealWithInitLeaders(v, random) {
      /* 回显 当接口返回的leaders的id 和 机构列表的id一致,则同时修改表单leaders的id 和 列表的id */
      let index = this.resLeaders.findIndex( item => item.value == v.sid)
      if(index >= 0) {
        this.resLeaders[index].value = random + '-' + v.sid
      }
      if(index >= 0) {
        this.$nextTick( () => {
          this.form.setFieldsValue({ leadersStr: this.resLeaders})
        })
      }
    },

当然,懒加载部分也要添加,这样就能实现已选中的人员id和列表保持一致,避免同一个人员可以选择多次的情况 

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

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

相关文章

史上最详细的KMP算法教程,看这一篇就够了

&#x1f9d1;‍&#x1f4bb; 文章作者&#xff1a;Iareges &#x1f517; 博客主页&#xff1a;https://blog.csdn.net/raelum ⚠️ 转载请注明出处 目录一、BF算法二、KMP算法2.1 字符串基础2.2 next数组2.3 KMP的实现2.4 next数组的生成三、改进的KMP算法3.1 nextval数组3.…

turf.js实现行政区(多边形)图形合并边界提取,掩膜等效果

在做前端行政区展示的时候,可能经常会遇到这样的需求,就是给定一个行政区比如杭州市各个区,县的行政区边界图形,但是我们现在需要一个杭州市的行政区边界,我们是否可以通过前端合并这些行政区,答案当然是可以的,我们可以使用turf.js来实现这个需求。 turf官网:Turf.js…

纯滞后系统的数字Smith预估控制-2

在纯滞后系统的数字Smith预估控制-1的基础上进行Simulink仿真。采用 Simulink 进行数字化仿真&#xff0c;按Smith算法设计Simulink模块。在PI控制中&#xff0c;kp0.5&#xff0c;ki0.01。其响应结果如图1和图2所示。图1 Smith阶跃响应结果图2 只采用PI控制时的阶跃响应结果初…

CDA Level Ⅱ 模拟题(一)

单选1 练习题 【单选题】1/20 一项针对某城市小微企业税收扶持和税收种类的调查&#xff0c;本打算调查500个企业&#xff0c;但忽然发现税务中心数据库中已存有这项调查数据&#xff0c;并且可以有权限获取这份数据&#xff0c;请问这是什么类型的调查方式&#xff1f; A.分层…

flask计算pin码

Flask debug模式算pin码_Ys3ter的博客-CSDN博客_flask pin码 可以参考这个链接 ctfshow801 然后这张图非常的重要 也就是我们需要上面的各个因素&#xff0c;然后获得ping码&#xff0c;也就是console的密码&#xff0c;就可以自己输出命令 然后会有两个脚本&#xff0c;一个…

原神私服搭建教程(3.0本地版)

环境准备安装Java SE – 17 注意: 如果想仅运行服务端, 只下载 jre 即可MongoDB (推荐 4.0)代理程序: mitmproxy (仅需 mitmdump&#xff1b;推荐使用), Fiddler Classic 等校验win r &#xff0c;输入cmd 呼出控制台java&#xff1a;输入java -version 查看版本&#xff0c;正…

嵌入式Linux从入门到精通之第十二节:线程

线程类比于人得大脑,进程来实现具体操作 每个进程都拥有自己的数据段、代码段和堆栈段,这就造成进程在进行创建、切换、撤销操作时,需要较大的系统开销。 为了减少系统开销,从进程中演化出了线程。 线程存在于进程中,共享进程的资源。 线程是进程中的独立控制流,由…

【C++】C++ 入门(三)

目录 一、内联函数 1、前置知识 2、内联函数概念 3、内联函数特性 4、补充内容 4.1、宏的优缺点 4.2、C有哪些技术替代宏 二、auto关键字(C11) 1、概念 2、使用场景 3、使用细则 3.1、auto与指针和引用结合起来使用 3.2、 在同一行定义多个变量 3.3、auto不能作为…

Java安全基础(二)Servlet核心技术

因为在实习中&#xff0c;文章更新速度可能有点慢&#xff0c;初学JAVA安全&#xff0c;内容如有不恰当的地方&#xff0c;欢迎各位大佬指正。 今天写一下Servlet的一些核心技术&#xff0c;后面更新完Filter之后我会对这两个进行一个总结。 了解Servlet知识对后续的框架审计…

自媒体人绝对要知道的6款软件工具!免费文案、配音不在话下

NO.1丨喵盐配音&#xff08;小程序&#xff09; 喵盐配音&#xff0c;它是我近期使用次数较多的配音小程序。这是一款专注于文字转语音的智能语音合成小程序&#xff0c;不需要下载&#xff0c;v小橙序搜索在线使用。其拥有200多个抖音热门发音人&#xff0c;支持普通话、英语、…

更安全的ftp服务器Pure-FTP搭建(4)

实验简介 实验所属系列&#xff1a;Linux服务器搭建 实验对象&#xff1a; 本科/专科信息安全专业 相关课程及专业&#xff1a;计算机基础&#xff0c;计算机网络 实验时数&#xff08;学分&#xff09;&#xff1a;2学时 实验类别&#xff1a;实践类预备知识 本实验要求实验者…

【JVM】Java类加载机制详解

【JVM】Java类加载机制详解 文章目录【JVM】Java类加载机制详解一&#xff1a;类加载子系统1&#xff1a;类加载器子系统的作用2&#xff1a;加载器 ClassLoader 的角色二&#xff1a;类的加载过程1&#xff1a;加载阶段2&#xff1a;验证阶段&#xff1a;确保被加载的类的正确…

[leetcode 215] 数组中的第K个最大元素

题目 题目&#xff1a;https://leetcode.cn/problems/kth-largest-element-in-an-array/description/ 解法 这道题目目前快排可以直接过&#xff0c;但是时间复杂度是 O(nlogn)O(nlogn)O(nlogn)。 想要 O(n)O(n)O(n)&#xff0c;这就涉及到408考研知识点了&#x1f602;&…

Java高手速成 | 使用TCP进行手机文件传输

由于TCP是面向流的&#xff0c;这意味着接收端有可能会在一次接收动作中接收两个或者多个数据包&#xff0c;那么当发送方需要把一个大文件分批连续发送时&#xff0c;如何保证接收方能够正确地接收并重修组会成一个完整的文件显得十分重要&#xff0c;本节通过一个端到端的手机…

每天10个前端小知识 【Day 4】

前端面试基础知识题 1. js中如何判断一个值是否是数组类型&#xff1f; instanceof const arr []; arr instanceof Array; // true Array.isArray const arr []; Array.isArray(arr) // true const obj {}; Array.isArray(obj) // false Object.prototype.isPrototype…

拉伯证券|A股延续强势格局 北向资金开年以来净买入超1500亿元

周四&#xff0c;A股商场整体延续强势格局&#xff0c;沪指贴合5日均线震动向上。科技板块仍是干流热点&#xff0c;半导体板块大面积飘红&#xff0c;创新药、CRO等生长赛道均涨势杰出。 到收盘&#xff0c;上证综指报3285.67点&#xff0c;涨0.02%&#xff1b;深证成指报1213…

初识SpringSecurity

初识SpringSecurity spring-security在spring的官网即可找到 spring-security spring-security官方文档的地址 https://docs.spring.io/spring-security/site/docs/ spring-security是Spring系列的关于安全的框架&#xff0c;还有一套安全的框架是Shiro 环境的搭建 项目使…

Android 播放base64音频

需求描述&#xff1a; 做一个Android扫码验证入场的程序&#xff1a; 如果验证通过&#xff0c;则播放一段“验证通过&#xff0c;请放行”的语音&#xff0c; 如果验证不通过&#xff0c;则播放其他的语音提示。 实现步骤&#xff1a; 1.要播放语音提示&#xff0c;先要有…

8个你可能不知道答案的常见JavaScript面试问题

不管你喜不喜欢&#xff0c;棘手的问题仍然会被野外的面试官问到。 原因是&#xff0c;这些问题可以告诉你很多关于你对语言的核心理解&#xff0c;因此你是否适合这份工作。 这些问题中涉及的常见概念包括&#xff1a; Hoisting关闭范围值与引用类型原型继承 今天我们要一石…

AC自动机详解

更好的阅读体验\color{red}{更好的阅读体验}更好的阅读体验 文章目录前置知识字典树 Trie支持操作建字典树实现思想代码实现例题Trie字符串统计最大异或对AC自动机基础概念实现思想代码实现例题搜索关键词单词前置知识 字典树 Trie Trie 是一种能够快速插入和查询字符串的多叉树…