【el-cascader-panel】组件el-cascader-panel使用踩坑

需求背景:角色管理资源,资源返回树形结构数据,左侧树形展示列表可查询,右侧勾选资源权限平铺。

本身组件不支持全选,所以增加了全选按钮。覆写了级联面板宽度。可传只勾选code或者顺序当前节点二维数组列表。

效果

因未配置id报错

<div v-if="dataValueOptions.length" style="height: 32px; line-height 32px; display: flex; align-items: center; border: 1px solid #E4E7ED; border-radius: 4px;">
                <el-checkbox v-model="isAllSelected" @change="handleAllSelectedChange" style=" margin-left: 20px;">全选</el-checkbox>
              </div>
              <el-cascader-panel
                v-if="dataValueOptions.length"
                id="cascaderPanel"   一定要有防止动态生成时,组件报错  option.level 找不到
                ref="cascaderPanel"
                v-model="selectedValues"
                :key="cascaderPanelKey"
                :options="dataValueOptions"
                :props="{
                    expandTrigger: 'click',
                    checkStrictly: false,
                    multiple: isMultiple,
                    emitPath: false,   决定勾选以及初始化选中数据结果
                    value: 'code',
                    label: 'name',
                }"
                @change="handleSelected"
                placeholder="请选择"
                style="width: 100%; height: 400px; overflow-x: auto;"
                :filter-method="dataFilter"
                filterable
              >
                <template slot-scope="{ node, data }">
                  <span v-if="data.name" >{{ `${data.name}` }}</span>
                </template>
              </el-cascader-panel>
              <div v-else style="text-align: center; padding-top: 50px;">暂无数据</div>
            </div>


return {
      relations: [{
        content: '角色'
      }, {
        content: '应用',
      }],
      sureLoad: false,
      roleInfo: {},
      leftLoad: false,
      selectApp: {},
      appName: "",
      appList: [],
      defaultExpandKeys: [],
      defaultProps: {
        children: 'children',
        label: 'name'
      },
      searchLoad: false,
      resourceList: [],
      rightLoad: false,
      isMultiple: true,
      selectedValues: [],
      dataValueOptions: [],
      isAllSelected: false,
      cascaderPanelKey: ""
    }

// 存储初始化勾选的资源
initSelectedCodes(data) {
      for (let i = 0; i < data.length; i++) {
        const node = data[i]
        if (node.selected) {
          this.selectedValues.push(node.code)
        }
        if (node.children) {
          this.initSelectedCodes(node.children)
        }
      }
    },


getAppResourceTree(appId) {
      this.rightLoad = true
      const params = {
        appId: appId,
        roleCode: this.roleInfo.code
      }
      this.$api.getResourceTreeByAppId(params).then(res => {
        this.rightLoad = false
        if (res.code === '0') {
          // 左侧级联选择器默认数据
          this.dataValueOptions = res.result
          // 动态设置key值防止报level错误
          this.cascaderPanelKey = Date.now()
          // 级联选择器默认选中数据
          if (this.dataValueOptions.length) {
            this.initSelectedCodes(this.dataValueOptions)
            // 数据初始化完成且组件已渲染
            this.$nextTick(() => {

              this.handleSelected()
            })
          }
        }
      }).catch((err) => {
        this.$message.error(err)
        this.rightLoad = false
      })
    },
    handleSelected() {
      if (this.dataValueOptions.length) {
        // 获取所有codes,如果长度跟选中长度一致说明是全选,否则部分选中
        const codes = []
        this.getAllCodes(this.dataValueOptions, codes)
        if (this.$refs.cascaderPanel && this.selectedValues && this.selectedValues.length) {
          this.isAllSelected = codes.length === this.$refs.cascaderPanel.getCheckedNodes().length
        }
      }
    },
    dataFilter(node, val){
      const baseName = node.data.baseName.toUpperCase()
      const baseValue = node.data.baseValue.toUpperCase()
      const inputVal = val.toUpperCase()
      if(baseName.indexOf(inputVal) !== -1 || baseValue.indexOf(inputVal) !== -1){
          return true
      }
    }


resetQuery() {
      this.isAllSelected = false
      this.appName = ""
      this.resourceList = []
      this.selectedValues = []
      this.dataValueOptions = []
      this.getAppList()
    }

// 额外方法,如果后台需要勾选的节点的所有顺序父节点包括勾选的节点
findParentCodes(treeData, selectedCode, parentCodes = []) {
      for (let i = 0; i < treeData.length; i++) {
        const node = treeData[i]
        if (node.code === selectedCode) {
          return [...parentCodes, node.code]
        }
        if (node.children) {
          const result = this.findParentCodes(node.children, selectedCode, [...parentCodes, node.code])
          if (result) {
            return result
          }
        }
      }
      return null;
    }

方法使用。
for (let i = 0; i < this.selectedRootCodes.length; i++) {
              const selectedRootCode = this.selectedRootCodes[i]
              if (selectedRootCode) {
                const selectedCodes = this.findParentCodes(this.dataValueOptions, selectedRootCode)
                if (selectedCodes.length) {
                  this.selectedValues.push(selectedCodes)
                }
              }
            }
/* 自定义面板样式 */
    #right .el-cascader-menu__wrap,
    #right .el-scrollbar__wrap {
      overflow-x: auto;
      overflow-y: hidden;
      height: 404px;
      margin-right: 0px !important;
    }

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Portraiture4.1.2最新中文汉化版

提起PS后期修图人像美白磨皮&#xff0c;大家会想到各种磨皮工具&#xff0c;其中Portraiture这款磨皮效率超高&#xff0c;是99%摄影师的必备插件&#xff0c;一秒磨皮&#xff0c;无卡顿&#xff0c;效果好&#xff01;人像摄影师人均一款&#xff0c;磨皮质感非常好&#xf…

groovy下载与安装

Groovy是一种基于JVM&#xff08;Java虚拟机&#xff09;的敏捷开发语言&#xff0c;它结合了Python、Ruby和Smalltalk的许多强大的特性&#xff0c;Groovy 代码能够与 Java 代码很好地结合&#xff0c;也能用于扩展现有代码。由于其运行在 JVM 上的特性&#xff0c;Groovy也可…

降低存储网络55% 延迟!阿里云存储论文入选计算机顶会

近日&#xff0c;计算机系统领域的国际顶级学术会议USENIX ATC 2023在美国波士顿市举行。凭借在规模化部署和应用模型上的创新&#xff0c;阿里云存储团队发表的技术论文《Deploying User-space TCP at Cloud Scale with LUNA》被顶会收录&#xff0c;这是继NSDI 21、SIGCOMM 2…

【Linux】基础IO之文件操作(文件fd)——针对被打开的文件

系列文章目录 文章目录 系列文章目录前言浅谈文件的共识 一、 回忆c语言对文件操作的接口1.fopen接口和cwd路径2.fwrite接口和"w"&#xff0c;"a"方法3.fprintf接口和三个默认打开的输入输出流&#xff08;文件&#xff09; 二、过渡到系统&#xff0c;认识…

短视频矩阵营销系统工具如何助力商家企业获客?

1.批量剪辑技术研发 做的数学建模算法&#xff0c;数学阶乘的组合乘组形式&#xff0c;采用两套查重机制&#xff0c;一套针对素材进行查重抽帧素材&#xff0c;一套针对成片进行抽帧素材打分制度查重&#xff0c;自动滤重计入打分。 2.账号矩阵分发开发 多平台&#xff0c;…

React Hooks的使用

目录 1.React Hooks使用注意事项 1.useState Hook&#xff1a; 2.useEffect Hook&#xff1a; 3.其他常用Hooks&#xff1a; 2.使用React Hooks需要遵循 1.安装React&#xff1a; 2.导入所需的Hooks&#xff1a; 3.使用Hooks创建组件&#xff1a; 4.在应用中使用组件&…

el-popover触发元素位置改变后更新弹出框的偏移位置

el-popover的使用如下&#xff1a;包含一个触发元素和一个弹出框元素 但是如果触发元素位置发生变化时&#xff0c;如根据弹框选择内容&#xff0c;会显示或隐藏对应的元素&#xff0c;从而导致弹出框触发元素的位置的变化&#xff0c;此时触发元素位置变化了&#xff0c;但是…

[C++]关键字,类与对象等——喵喵要吃C嘎嘎2

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;大大会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

MATLAB颜色索引表---持续更新中--各个平台都可使用

MATLAB颜色索引表—持续更新中–各个平台都可使用

XCTF-RSA-2:baigeiRSA2、 cr4-poor-rsa

baigeiRSA2 题目描述 import libnum from Crypto.Util import number from functools import reduce from secret import flagn 5 size 64 while True:ps [number.getPrime(size) for _ in range(n)]if len(set(ps)) n:breake 65537 n reduce(lambda x, y: x*y, ps) m …

CentOS、linux安装squid搭建正向代理,window11配置正向代理

1.CentOS安装配置squid 1.1.安装 yum install -y squid1.2.修改配置文件 在配置文件添加以下2行代码 acl localnet src 0.0.0.0/0.0.0.0 # add by lishuoboy http_access allow all # add by lishuoboy1.3.启动squid systemctl restart squid2.win11…

Jmeter只能做性能测试吗?

Jmeter除了可以性能测试&#xff0c;还能做接口测试 1、Jmeter和Fiddler&#xff0c;Postman有什么区别? Fiddler&#xff1a;虽然有接口测试功能&#xff0c;很少用来做接口测试。 一般用Fiddle来做抓包和异常测试&#xff0c;辅助接口测试。Postman&#xff1a; 是接口调试…

VScode + opencv + c++ + win配置教程

准备&#xff1a; 1、下载opencv 2、下载MinGw 3、 3、下载CMake 下载完解压放到一个文件夹里面&#xff0c;便于环境管理&#xff0c;文件夹我重命名了&#xff0c;解压出来文件名不一样正常 环境变量配置 C:\Users\wuxulong\cpp_env\MinGw\mingw64\bin C:\Users\wuxulon…

数字电路与逻辑设计 触发器

与非门构成的RS触发器 在这个中禁止RS 00 要记住s对应Q 或非门构成的RS触发器 注意这里的RS换了位置 且不允许RS 11 同步触发器 钟控RS触发器 钟控D触发器 cp 为 0 的时候不变 钟控JK触发器 00不变11改&#xff0c;JK不同随J摆 钟控T触发器 什么是空翻&am…

ios原生分享

什么是 ios 系统的原生分享呢&#xff0c;如下图所示 具体使用系统UIActivityViewController&#xff0c;完整代码如下&#xff1a; -(void)shareAny:(NSString *)text url:(NSString *)_url imagePath:(NSString *)_imagePath {NSLog("shareAny, text:%, url:%, imagePa…

413 (Payload Too Large) 2023最新版解决方法

文章目录 出现问题解决方法 出现问题 博主在用vue脚手架开发的时候&#xff0c;在上传文件的接口中碰到 这样一个错误&#xff0c;查遍所有csdn&#xff0c;都没有找到解决方法&#xff0c;通过一些方式&#xff0c;终于解决了。 解决方法 1.打开Vue项目的根目录。 2.在根目…

uniapp小程序刮刮乐抽奖

使用canvas画布画出刮刮乐要被刮的图片&#xff0c;使用移动清除画布。 当前代码封装为刮刮乐的组件&#xff1b; vue代码&#xff1a; <template><view class"page" v-if"merchantInfo.cdn_static"><image class"bg" :src&q…

基于计算机视觉的身份证识别系统 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器视觉的身份证识别系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-sen…

Scala集合操作

1 集合简介 Scala 中拥有多种集合类型&#xff0c;主要分为可变的和不可变的集合两大类&#xff1a; 可变集合&#xff1a; 可以被修改。即可以更改&#xff0c;添加&#xff0c;删除集合中的元素&#xff1b; 不可变集合类&#xff1a;不能被修改。对集合执行更改&#xff0c;…

CSDN规则详解(一)

文章目录 前言CSDN博客用户准则总则博客注册博客行为规则被投诉侵权用户处理规则附则 博客积分规则博客等级博客VIP文章说明后记 前言 CSDN是一个专业的技术社区&#xff0c;不仅可以分享自己的技术经验&#xff0c;还可以向其他行业专业人士学习。在CSDN上写出优秀的博客可以…