vue3 级联全选

VUE3 Elemnt Cascader 级联选择器添加全选 使用v-if当id=‘all’时选项变为全选和全不选按钮,此时全选和全不选可会变成一个选项可以选择此时通过popper-class="cascaderClass"添加一个cascaderClass类名,然后通过scss来把前面的选择框去掉。首先当你获取到数据时,可以通过watch监听,添加一个id=‘all’(可随意定义)的一项数据到数据的开头。element中的Cascader组件并没有给我们添加全选的选项,可以通过添加按钮选项来实现全选。最后就是实现全选和全不选的函数。template部分。 阅读详情

<template>
  <div>
    <el-cascader
      v-model="selected"
      clearable
      filterable
      :options="userOption"
      :props="{
        multiple: true,
        value: 'value',
        label: 'label',
      }"
      :collapse-tags="true"
      placeholder="请选择"
      @change="selectHandle"
    >
      <template #default="{ node, data }">
        <span>{{ data.label }}</span>
        <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
      </template>
    </el-cascader>
  </div>
</template>

<script setup>
import { ref } from "vue";

const preSelected = ref([]); // 上次选中的数据
const originData = ref([]); //  源数据平铺成一级节点
const defaultExpandedKeys = ref([]);
const selected = ref([]);
const userOption = ref([
  { label: "全选", value: "全选" },
  { label: "层级0", value: "0" },
  {
    label: "层级1",
    value: "1",
    children: [
      {
        label: "层级11",
        value: "11",
        children: [
          { label: "层级111", value: "111" },
          { label: "层级112", value: "112" },
        ],
      },
      {
        label: "层级12",
        value: "12",
        children: [{ label: "层级121", value: "121" }],
      },
    ],
  },
  {
    label: "层级2",
    value: "2",
    children: [
      { label: "层级21", value: "21" },
      { label: "层级22", value: "22" },
    ],
  },
  {
    label: "层级3",
    value: "3",
    children: [{ label: "层级31", value: "31" }],
  },
]);

const judgetAllSelected = (node) => {
  let isAllSelected = false;
  for (let i = 0; i < node.length; i++) {
    if (node[i][0] === "全选") {
      isAllSelected = true;
      break;
    }
  }
  return isAllSelected;
};

const loopFlatData = (list, parentNode = []) => {
  list.length > 0 &&
    list.forEach((e) => {
      let pNode = [...parentNode];
      if (e.children && e.children.length > 0) {
        pNode.push(e.value);
        loopFlatData(e.children, pNode);
      } else {
        if (e.label !== "全选") {
          if (parentNode.length > 0) {
            pNode.push(e.value);
            originData.value.push({ ...e, parentNode: pNode });
          } else {
            originData.value.push(e);
          }
        }
      }
    });
};

const loopSelectData = (list, parentNode = []) => {
  list.length > 0 &&
    list.forEach((e) => {
      let pNode = [...parentNode];
      if (e.children && e.children.length > 0) {
        pNode.push(e.value);
        loopSelectData(e.children, pNode);
      } else {
        if (parentNode.length > 0) {
          selected.value.push([...parentNode, e.value]);
        } else {
          selected.value.push([e.value]);
        }
      }
    });
};

const checkIsAddAllSelected = () => {
  let list = userOption.value;
  if (originData.value.length === 0) {
    loopFlatData(list);
  }
  let origin = originData.value;
  let now = [...selected.value].filter((item) => item[0] !== "全选");
  if (origin.length > now.length) {
    selected.value = selected.value.filter((item) => item[0] !== "全选");
  } else {
    if (selected.value[0] && selected.value[0][0] !== "全选") {
      selected.value = [["全选"], ...selected.value];
    }
  }
};

const selectHandle = async (node) => {
  defaultExpandedKeys.value = [];
  selected.value = [];
  let list = userOption.value;
  let current = [];
  if (node.length >= preSelected.value.length) {
    let keys = preSelected.value.map((item) => JSON.stringify(item));
    current = node.filter((item) => !keys.includes(JSON.stringify(item)));
    console.log("选中某项", current);
  } else {
    let keys = node.map((item) => JSON.stringify(item));
    current = preSelected.value.filter(
      (item) => !keys.includes(JSON.stringify(item))
    );
    console.log("取消选中", current);
    defaultExpandedKeys.value = current[0];
  }
  const currentValue = current.length > 0 ? current[0][0] || "" : "";
  if (currentValue === "全选") {
    if (judgetAllSelected(node)) {
      loopSelectData(list);
    } else {
      selected.value = [];
    }
  } else {
    selected.value = node;
  }
  checkIsAddAllSelected();
  preSelected.value = selected.value;
  changeHandle();
};

const changeHandle = () => {
  console.log("changeHandle: ", selected.value);
};
</script>

VUE3+element-plus el-select 支持全选 总结:利用计算属性的get(),set()函数来控制开关的选中状态和回显下拉框中数据的选中状态。弹窗中的监管行业是支持多选的下拉选择框,需求是要再后面加一个全选开关。来控制他的是否全选。👇全选方法设置成计算属性。👇下拉框和全选开关代码。 阅读详情

相关推荐

element-ui之级联选择器(Cascader) 全选 功能

最近产品要求做一个省市区选择,效果就建议使用element-UI的cascader级联,这也是我第一次使用此插件,但要在原cascader级联基础上加一个“全选”按钮,查看官方文档没有关于全选功能属性设置。搜索也没找到好的方法解决。最后请教一个大牛,下面是实现全选的方法. (官方文档地址:https://element.eleme.cn/#/zh-CN/component/cascader) 方法就是:从树结构中抽出数据。变与model结构就可以了。 需要引用(官方可下载): <script sr

qq_27319361的博客 6336

vue3+elementplus(el-cascader)实现全选功能

的代码,修改为标准的后端返回格式。

u011290962的博客 1336

Vue3+Ts+Ant Design Vue实现多选框的全选功能

Vue3+Ts+Ant Design Vue实现select下拉框的多选和全选功能

m0_52449484的博客 1709

【vue3】使用elmentui中的el-cascader联级菜单筛选切换数据列表

需求:点击联级中的某一节点,点击确认,筛选符合条件的数据列表 创建文件 cascader.vue,完整代码如下: <template> <div class="home_box"> <div class="right_box"> <div class="seachTop"> <div class="big_select"> <el-cascader...

weixin_50450473的博客 3821

vue运用之el-cascader组件

el-cascader 是 Element UI 的级联选择器组件。以下是一些常见的 el-cascader 问题以及对应的案例代码。

日常笔记/总结/系列知识梳理 1674

AI脸部替换Roop-Unleashed,一键整合包教程

Roop-Unleashed是一个无须训练模型的深度伪造工具,专为图像和视频的面部替换而设计。它通过简洁的浏览器界面提供用户友好且跨平台的使用体验,无论用户是业余爱好者还是专业人士,都能快速上手。它无需复杂的设置即可实现高效的处理和转换,使图像和视频的编辑变得更加轻松和便捷。

m0_72580657的博客 1万+

关于ant-design-vue3的cascader(级联选择)在多选模式下能同时支持子节点的单选和全选;

文章摘要:本文介绍了一个使用级联选择器(Cascader)的项目需求,要求在多种类型选择时,不能混选,且特定地区(如浙江)只能单选。当子项只有两个时,选择切换会出现无法获取最新值的问题。解决方案是通过设置showCheckedStrategy为SHOW_CHILD,结合handleDropdownVisible方法监听父项的hover状态,实现仅显示子节点状态。当hover到浙江时,showCheckedStrategy值变为SHOW_CHILD,其他情况则恢复为SHOW_ALL。代码展示了如何实现这一功能

qq_45838639的博客 1088

mac(apple silicon)arm64安装spm12详细教程

3.下载matlab runtime R2023b for macOS (macA64),注意必须下载这个,只下载matlab是不可以的。默认安装目录是/Applications/MATLAB/MATLAB_Runtime/R2023b。注意最后的命令,路径根据自己的matlab_runtime安装位置进行调整,然后就可以安装成功了。5. 解压spm12.zip,解压后将文件夹拖到应用程序下(Applications)2.下载spm12,这个版本可兼容mac芯片!6.打开mac终端,输入。

weixin_62332001的博客 2020

不想动大脑系列:企业开发实际需求篇--级联#vue

企业实际需求

weixin_54040152的博客 218

康耐视VisionPro必学技巧:用CogCopyRegionTool实现图像拼接与局部替换

本文深入探讨了康耐视VisionPro中CogCopyRegionTool的高级应用,重点解析如何利用其精确的像素级复制与坐标对齐功能,实现工业视觉中的多相机图像拼接与印刷品局部替换。通过实战案例与代码示例,详细指导了从坐标标定、画布创建到顺序复制的完整流程,并分享了性能优化与常见避坑指南,帮助工程师高效解决复杂图像合成难题。

weixin_29204121的博客 500

Dify 本地插件安装失败?别慌,这篇教程手把手教你解决(解决 the plugin you want to install has a bad signature 报错的问题)

🤯dify安装本地插件报错 PluginDaemonBadRequestError: plugin verification has been enabled, and the plugin you want to install has a bad signature。的解决方案!

XiaoqiangClub的博客 3984

Vue3.0实战:JeecgBoot项目中BasicTable父子组件联动全选功能实现(附完整代码)

本文详细解析了在JeecgBoot项目中利用Vue3.0组合式API实现BasicTable父子组件联动全选功能的技术方案。通过核心代码示例展示了父子级联选择的状态管理、性能优化技巧及JeecgBoot集成实践,帮助开发者高效处理企业级后台系统中的复杂表格交互需求。

weixin_28718755的博客 142

【异常】OpenClaw 飞书端 OpenClaw: access not configured. Pairing code: [] Ask the bot owner to approve with

摘要: OpenClaw飞书机器人交互中出现的access not configured报错,是因用户或组织未配置访问权限触发的拦截提示。报错包含组织单元ID和配对校验码,需管理员审批开通权限。普通用户需提交完整报错信息给管理员处理;管理员可通过执行标准化命令单次审批,或批量配置组织白名单优化权限管理。建议提前梳理权限范围、及时同步组织架构变更,并定期审计权限列表以确保安全合规。

奶爸的编程之路,也就一周冷个三天 371

vue elementui 多选级联组件 全选功能

vue element 级联组件 多选 全选,自定义封装组件

黄钟飞的博客 4924

【绝对要收藏-优秀论文范文】高项-度量绩效域

摘要:本文基于某水库数字孪生平台建设项目(2022.9-2023.5,645.97万元)的管理实践,从信息系统度量绩效域角度展开论述。项目构建了包含防洪调度等6大子系统的数字平台,实现洪水"四预"功能。重点分析了度量绩效域的五大要点:制定有效指标(如成本±8%偏差阈值)、多维数据采集、预警临界值设定、基于趋势的主动干预和持续改进机制。特别阐述了绩效问题的诊断方法,包括设备采购全周期成本分析、阶段性成本报告制度等。项目状态展示采用三维可视化看板,集成进度、成本、质量等多维度实时数据,最终实

xylllamm的博客 345

Cesium 实现气象(温度,降水,风速)可视化详细代码实现

本教程介绍了使用Cesium实现气象数据可视化的方法,主要包括:1) 搭建Cesium开发环境;2) 三种核心气象要素的展示技术:温度热力图(基于颜色渐变和点密度)、降水区域填充(矩形着色)和风速风向(粒子系统);3) 数据集成方案,包括模拟数据生成和API对接;4) 高级功能如3D温度柱和时间序列动画;5) 性能优化策略,如数据聚合和LOD控制。教程提供了完整的代码示例,从基础配置到视觉效果实现,帮助开发者构建交互式气象可视化应用。

专注AI大模型,软件混淆,授权 1847

Vue3复选框(Checkbox)组件:从基础封装到高级交互实战

本文详细介绍了Vue3复选框(Checkbox)组件的封装与高级交互实现,从基础功能到企业级需求全覆盖。内容包括v-model双向绑定处理、全选/半选状态控制、交互动画优化、灵活布局定制以及表单集成等实战技巧,帮助开发者快速掌握Vue3组件开发精髓,提升前端开发效率。

weixin_30919571的博客 147

TC8:IPv4_HEADER_01-04

IPv4_HEADER_01: Ensure that the DUT generates an IPv4 Packet with a Total Length greater than or equal to 20 目的 确保DUT生成的IPv4报文的IP头部中的Total Length字段值大于等于20 IPv4协议头部中的Total Length字段表示整个IP数据包的长度,包括IP Header和payload之和,IP首部的长度最少就有20个字节,所以Total Length值肯定大于等于20

jasonj333 3961

基于vue3和element-plus的省市区级联组件,elui-china-area-dht发布

说明 其实该组件很简单,核心在于全国省市区数据的来源,还有数据格式化以及组件封装。 然后大家应该知道在vue2阶段其实有一个省市区的第三方封装的组件,我想大家应该不少人使用过。 看源码,作者应该暂时没有发布vue3的计划。那么我这里就提前一步给大家个福利。 使用的话直接看使用部分就行了。 核心原理 数据基于:https://github.com/airyland/china-area-data 根据第三方提供的省市区数据部分,将数据改为element-plus所需的嵌套数据结构 封装Chin

海天酱油zz 4140

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

vue3中使用Cascader 级联选择器

vue3中使用Cascader 级联选择器。

ZX115675的博客 509

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

扩展element UI级联选择器全选功能

在elementUI原有的级联选择器基础上给第二级第三级菜单添加全选功能,同时,不要把全选复选框写在级联选择器组件外部。即,将全选添加到菜单内部。

有点意思 1835

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

vue+element 动态加载数据,checkbox实现全选,不全选

效果图: 功能描述: 图中所展示数据,全是从服务器获取的数据动态加载,实现点击全选,不全选,加粗字体为父节点,后面为子节点。 数据结构: [ { "children": [ { "children": [ { "inc...

树洞博客 3443

Element cascader级联多选器增加对于某一子层的全选功能

在使用了自定义插槽后我们会发现出现了两个checkedbox我们得想办法把左边的隐藏掉保留我们右边想要的给我们自定义的checkbox添加一个叫的类名通过元素选择器我看能看见左边的checkedbox和我们添加的checkedbox 是相邻的但是我们添加的checkedbox被包裹在了el-cascader-node__label里面所以我们就需要找出所有与包含了newcheckbox的el-cascader-node__label相邻的.el-checkbox并把它们隐藏掉。

weixin_67434607的博客 1862

Vue2手搓级联组件

由于公司的需求是 展开平铺的级联组件 所以用不了element组件,只能进行手搓。

weixin_65084919的博客 1033

vue+elementUI实现全选功能

需要实现这样的功能,全选和判断是否是全选状态.因为样式的需要所以结构和elementUI案例结构有点区别 <div> <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange" >全选</el-checkbox...

ju__ju的博客 8818

基于el-cascader实现省市二级联动,全选和取消全选

需求:需要在城市列表最上方,增加“全选”选项,点击全选,选中列表所有城市,再次点击取消全选1.html部分 <el-cascader ref='cascader' v-model="cityCode" :options="areaOptions" :props="props" clearable @change="changeProblemType"> </el-cascader> cityCode:双向绑定最后要传给接口的值 are

grace姐姐的博客 3728
上一篇: 接口返回文件流,前端实现下载功能
下一篇: 导出文件获取文件名的坑!
candy0521
博客等级 码龄9年 28粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值