antd级联选择器(a-cascader)动态加载和动态回显效果实现

news2024/9/23 9:34:51

文章目录

  • 1、介绍
  • 2、效果图如下图所示:(只实现3层的)
  • 3、实现方法
    • (1)层级可单独选择
    • (2)组件使用
    • (3)data数据
    • (4)实现动态加载数据
      • 1、 提示:options的数据格式是这样的
      • 2、methods方法
      • 3、异步加载数据方法
      • 4、获取2,3级组织列表
    • (5)编辑回显

1、介绍

​ 需要实现级联选择器动态拿到每一层级的数据并显示,同时在编辑数据时弹框回显对应的层级关系。

2、效果图如下图所示:(只实现3层的)

在这里插入图片描述

3、实现方法

(1)层级可单独选择

​ 给组件添加 :checkStrictly="true" 这个属性就可以实现单独勾选一级、二级、三级组织关系。(官方api没有写)

(2)组件使用

​ 首先先在html里 模态框上写上a-cascader组件

 <a-modal v-model="uploadNew" :title="title" :width="800" :footer="null" @cancel="resetForm">
        <a-form-model :model="addForm" :label-col="labelCol" :wrapper-col="wrapperCol" ref="addForm" :rules="roleRules">
           
          <a-form-model-item label="所属组织" prop="orgIds">
            <a-cascader  v-model="addForm['orgIds']"
                         :options="options"
                         change-on-select
                         @change="onChange"
                         :load-data="loadData"
                         :checkStrictly="true"
                         placeholder="选择组织" />
          </a-form-model-item>
          <a-form-model-item :wrapper-col="{ span: 14, offset: 10 }">
            <span @click="onSubmit" style="cursor: pointer">
             提交
            </span>
            <span @click="resetForm" style="margin-left: 100px;cursor: pointer">
              取消
            </span>
          </a-form-model-item>
        </a-form-model>
      </a-modal>
    

(3)data数据

  data() {
    return {
      options: []
    }
  },

(4)实现动态加载数据

​ 先实现只有动态加载数据的功能(根据官网https://1x.antdv.com/components/cascader-cn/示例即可实现)

1、 提示:options的数据格式是这样的

 options: [
        {
          value: 'zhejiang',
          label: 'Zhejiang',
          isLeaf: false,//是否叶子节点
          children:[]
        },
        {
          value: 'jiangsu',
          label: 'Jiangsu',
          isLeaf: false,
        },
      ],

2、methods方法

注意:(初始化时会先获取第一层级的数据)

//获取一级组织
    async getOneList(){
      try {
        let par={
          parentId:''
        }
        const res = await getOrgOneList(par)
        this.roleOneList=res.data.data
        this.roleOneList.forEach(item=>{
          let temp={
            value:item.id,
            label:item.orgName,
            isLeaf:false,
          }
          this.options.push(temp)
        })
      } catch (error) {
        console.log(error)
      }
    }, 

3、异步加载数据方法

   async loadData(selectedOptions) {
      const targetOption = selectedOptions[selectedOptions.length - 1];
      this.levelIndex=selectedOptions.length+1 //点第几级组织,selectedOptions长度就是几,点3级时,没有叶子节点,不会进入这个方法(这里只会等于2,3)
      targetOption.loading = true;
      let parentId=targetOption.value//根据父id才能查询子数组
      await this.getOrgTwoList(parentId)//这个方法是掉接口,返回2,3级数据,下方有该方法
      targetOption.loading = false;
      if(this.levelIndex<=3){
        targetOption.children = this.roleTwoList
      }
      this.options = [...this.options];
 
    },
    onChange(value) {
      this.roleCheck=value
      console.log(value,'sel')
    },

4、获取2,3级组织列表

 
//根据父id获取2,3级组织列表
    async getOrgTwoList(id){
      try {
        let par={
          parentId:id
        }
        const res = await getOrgOneList(par)//掉接口,获取下一层级数据
        this.roleTwoList=[]
        res.data.data.forEach(item=>{
          let temp={
            value:item.id,
            label:item.orgName,
            isLeaf: this.levelIndex==3?true:false//判断是否是叶子节点
          }
          this.roleTwoList.push(temp)
        })
      } catch (error) {
        console.log(error)
      }
    },

(5)编辑回显

在上面基础上,实现编辑的时候数据回显

 //编辑用户
    async editUser(row){
   
      this.addForm=Object.assign({},row)
      this.addForm.orgIds=row.orgIds.split(',')//数据需要转成数组的格式
      for (let i = 0; i < this.addForm.orgIds.length - 1; i++) {
        await this.getNextList(this.addForm.orgIds[i])//获取下一层级的数据
      }
      this.uploadNew=true//显示弹框
    },

方法实现

//根据父id获取下一层级数据  
async getNextList (targetOption) {
      let obj = {
        parentId: targetOption
      }
          const res = await getOrgOneList(obj)//掉接口,获取下一层级数据
          const list = res.data.data.map((item) => {
            // dLevel == 3 时表示是叶子节点
            this.$set(item,'isLeaf',item.dLevel == 3)
            this.$set(item,'value',item.id)
            this.$set(item,'label',item.orgName)
            return item
          })
          //初始化时,this.options包含全部第一层级的数据
            this.options.forEach((item) => {
              if (item.children) {
                item.children.forEach((ite) => {
                  if (ite.value == targetOption ) {
                    this.$set(ite,'children',list)
                    // ite['children'] = list
                  }
                })
              }
              if (item.value == targetOption) {//数据value值等于父id
                this.$set(item,'children',list)
              }
            })
          this.options = [...this.options]
    },

以上getOrgTwoList和getNextList方法都是根据父id获取下一层级(2,3级)数据,可优化。

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

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

相关文章

模糊预测|RFIS与ANFIS模糊模型预测的比较(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清…

vue2中实现右键菜单

vue2中实现右键菜单 效果图-右键菜单 1、安装 npm install vue-contextmenujsyarn add vue-contextmenujsCDN <script src"https://unpkg.com/vue-contextmenujs/dist/contextmenu.umd.js">2、使用 2.1、引入 src/main.js import Contextmenu from "…

python sklearn knn快速实现,保姆级教学

目录介绍KNN实战加载模块读取数据训练、测试数据分割关键环节&#xff1a;训练预测sklearn官方代码实例介绍 首先上链接 https://www.sklearncn.cn/ scikit-learn是基于Python语言的机器学习库&#xff0c;具有&#xff1a; 简单高效的数据分析工具 可在多种环境中重复使用 …

一套Altair Feko复杂结构模型散射和天线辐射仿真建模攻略

导读&#xff1a;Feko软件广泛应用于电磁散射、电磁辐射仿真&#xff0c;例如&#xff1a;天线、天线布局、天线罩、屏蔽效能、电磁散射、频选结构、线束EMC等方面。问题种类繁多&#xff0c;但是无论仿真哪一类问题&#xff0c;其仿真流程是相同的&#xff0c;我们只需掌握了这…

VirtualBox Ubuntu 16.04 磁盘不相邻分区扩容解决方案

前言 博主做期末大作业时用到 VirtualBox 6.1 安装的 Ubuntu 16.04 LTS 虚拟机&#xff0c;开始只分配了 20GB 硬盘&#xff0c;跑实验时发现空间不够&#xff0c;需要对磁盘扩容&#xff0c;折腾了半天&#xff0c;在此做一个小记录。 警告&#xff1a;博主并不精通 Linux&am…

风险评估具体操作流程

概述 风险评估应贯穿于评估对象生命周期 各阶段中。评估对象生命周期各阶段中涉及的风险评估原则和方法昆一致的&#xff0c;但由干各阶段实施内容对象、安全需求不同.使得风险评估的对象、目的、要求等各方面也有所不同。在规划设计阶段&#xff0c;通过风险评估以确定评估对…

摄影师接单小程序开发,自由交易平台

在网红直播经济的强势发展下&#xff0c;年轻一代对于摄影方面的需求急速增长&#xff0c;但是年轻人群体在摄影方面的要求更趋向于个性化&#xff0c;普通的影楼不仅拍摄价格高&#xff0c;在拍摄风格上也比较单调&#xff0c;缺乏创新&#xff0c;难以满足用户消费需求。对于…

cubeIDE开发, stm32的ADC(模数转换器) 开发要点

一、ADC模数转换简介 ADC(Analog-to-Digital Converter&#xff0c;模数转换器) 是将连续变化的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号&#xff0c;例如温度、压力、声音或者图像等&#xff0c;需要转换成更容易储存、处理和发射的数字形式。模数转换器可以实…

cesium切片底图正常出来但控制台一直报错的方法

1、部署ngnix服务 2、修改ngnix配置 在location 下的路径配置如下内容 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET, POST, OPTIONS; add_header Access-Control-Allow-Headers DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Re…

程序员需知的8个视频教程网站,建议收藏

上一篇介绍的是在线教程网站以文字性内容为主&#xff0c;同样收藏了一些以视频为主的一些网站&#xff0c;相比较而言&#xff0c;更容易上手&#xff0c;当然&#xff0c;也更加耗时间。 1、B站 简 介&#xff1a;没错&#xff0c;bilibili也可以用来学习&#xff0c;除了番…

吉林优美姿文化:抖音小店店铺评分怎么提升?

现在大家都在抖音平台上购物&#xff0c;只用等商家发货就行了&#xff0c;但是抖音发货也是有一定相关规定的&#xff0c;也需要各位商家去遵守的&#xff0c;那么抖音的发货时效方面有着什么样的规定呢&#xff1f;跟着吉林优美姿小编来看一下吧&#xff01;发货时间&#xf…

TPE-3-CHO;CAS:2351847-81-7;AIE聚集诱导发光

中文名 4,4,4,4-(乙烯-1,1,2,2-四基)四(([1,1-联苯]-3-甲醛)) 英文名 4,4,4,4-(Ethene-1,1,2,2-tetrayl)tetrakis(([1,1-biphenyl]-3-carbaldehyde)) 中文别名 四(3-甲醛基联苯基)乙烯 | 4,4,4,4-(乙烯-1,1,2,2-四基)四(([[1,1-联苯] -3 -甲醛)) 物理化学性质 密度 1.2200.06 g…

spring的BeanPostProcessor分析

spring常见的set注入&#xff0c;就是通过配置文件给变量赋值&#xff0c;这属于第一步注入。BeanPostProcessor还能进行第二次注入&#xff0c;简单来说就是第二是给变量赋值 1、首先定义一个实体类EntityObject&#xff0c;声明get和set方法 package beanPost;public class…

C语言---函数---总结

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​ &#x1f4e3;系列专栏&#xff1a;鹏哥带我学c带我飞 &#x1f4ac;总结&#xff1a;希望你看…

一文了解Linux内核网络设备驱动

1. 接收数据包过程概述 介绍数据包收包过程&#xff0c;有助于我们了解Linux内核网络设备在数据收包过程中的位置&#xff0c;下面从宏观的角度介绍数据包从被网卡接收到进入 socket 接收队列的整个过程&#xff1a; 加载网卡驱动&#xff0c;初始化数据包从外部网络进入网卡…

月子会所管理系统| 月子会所小程序| 数字化门店转型

随着二孩三孩政策的相继开放&#xff0c;中国母婴市场呈现出稳定增长的局面&#xff0c;据相关数据显示&#xff0c;2019年中国母婴市场规模达34950亿元&#xff0c;预计2024年将增长到70000亿元。母婴行业的细分类高&#xff0c;同时还可与多行业进行对接。 母婴月子会所近些年…

Vue3 事件处理

Vue3 事件处理1.基本使用2.事件修饰符3.按键修饰符1.基本使用 我们可以使用 v-on 指令来监听 DOM 事件&#xff0c;从而执行 JavaScript 代码。 v-on 指令可以缩写为 符号。 语法格式&#xff1a; v-on:click"methodName" 或 click"methodName"一个最…

基于jsp+ssm的驾校预约管理系统-计算机毕业设计

项目介绍 驾校预约管理系统是一个高校用来管理教员和学员的授课信息并存储档案必需的一个管理系统&#xff0c;由于时代的进步&#xff0c;它成为了一个现代化管理不可缺少的一部分。它的查询的方便简洁&#xff0c;可以为一个驾校经营者节约足够的时间&#xff0c;为驾校迅速…

QWebEngine集成Netron可视化模型

Netron是一个用于可视化深度学习网络模型的工具软件&#xff0c;主体以JavaScript语言实现&#xff0c;源码在: https://github.com/lutzroeder/netron 。用户可以使用各系统平台的安装包进行安装之后使用&#xff0c;也可以用浏览器使用在线版本: Netron。 Netron支持几乎所有…

ChatGPT 和 Midjourney 将改变我们的生活,日常工作流程将完全改变并与这些新型工具集成

上周末我花了很多时间先玩 Open AI ChatGPT,然后玩 Midjourney。起初我笑了,然后我开始完全被各种可能性所困扰,然后我终于意识到了它的潜力,并开始将其用于更有成效的工作。 注意:我本可以用它来制作一个引人入胜的点击诱饵标题,但我没有. 这是我问 Open AI 聊天的第一…