element-ui出的treeselect下拉树组件基本使用,以及只能选择叶子节点的功能,给节点添加按钮操作

element-ui出的treeselect下拉树组件基本使用:Vue通用下拉树组件@riophae/vue-treeselect的使用-CSDN博客

vue-treeselect 问题合集、好用的树形下拉组件(vue-treeselect的使用、相关问题解决方案)-CSDN博客

需求1:treeselect下拉树组件只能选择叶子节点,其他父节点均为点击展开功能(不选中)

v-model绑定的值要设为null,不能设为'' ,否则会回显unknown 

options属性为绑定的树

normalizer就是把我们自己的后端返的数据格式按树插件需要的格式转换 ;

@select为选中某个节点时触发,

disable-branch-nodes属性是禁用节点属性(针对需求1这个属性一定要设置,否则不生效)

             <treeselect
                v-model="partId"
                :options="icdTree"
                :normalizer="tenantIdnormalizerPart"
                noOptionsText="暂无数据"
                placeholder="请选择"             
                @select="partChange"
                :disable-branch-nodes="true">
              </treeselect>
        //获取tree数据时,就要递归tree标记叶子节点了
        getIcdDict({level:1}).then(res => {
          const temp = res.data
          this.markLeafNodes(temp)
          this.icdTree = temp
          let findItem = this.getNode(this.icdTree,'diagnosisId',curBtn[0].searchKey.bodyId[0])
          this.partId = findItem.diagnosisId
        }),
        //标记叶子节点方法
        markLeafNodes(list) {
          list.forEach(item => {
            item.show = false
            if(item.children.length == 0){
              item.isLeaf = true
            }else{
              this.markLeafNodes(item.children)
            }
          })
        },
        //递归tree找到某个节点对象
        getNode(data, key, value) {
          let result = null;
          let fn = function (d) {
            if (Array.isArray(d)) { // 判断是否是数组
                for (let i = 0; i < d.length; i++) {
                  const e = d[i];
                  if (e[key] == value) { // 数据循环每个子项,并且判断子项下边是否有id值
                      result = e; // 返回的结果等于每一项
                      break;
                  } else if (e.children) {
                      fn(e.children); // 递归调用下边的子项
                  }
                }
            }
          }
          fn(data); // 调用一下
          return result;
        },
        tenantIdnormalizerPart(node, instanceId) {
          if (node.children && !node.children.length) {
            delete node.children; 
          }
          //这里判断node节点如果是叶子节点,则设置当前节点的isDisabled属性为false(节点不禁用,可选)
          if(node.isLeaf){
            node['isDisabled'] = false;
          }
          return {
            id: node.diagnosisId,
            label: node.diagnosisContent,
            children: node.children,
          };
        },

需求2:treeselect下拉树组件叶子节点添加按钮功能

参考文章:12.element-ui组件 el-tree 树菜单 鼠标滑过mouseenter,mouseleave移入移出节点,显示操作按钮 新增,删除等(element)_el-tree-select 鼠标移入事件-CSDN博客 

需要用到treeselect组件的插槽:slot="option-label",

插槽slot=“option-label” 是下拉框的值,

插槽slot=“value-label” 是输入框回显的值,

接上面代码

              <treeselect
                v-model="partId"
                :options="icdTree"
                :normalizer="tenantIdnormalizerPart"
                noOptionsText="暂无数据"
                placeholder="请选择"             
                @select="partChange"
                :disable-branch-nodes="true">
                    <div slot="option-label" slot-scope="{ node}" @mouseover="handleMsenter(node)" @mouseleave="handleMsLeave(node)">
                  <span>
                    <span>{{ node.label }}</span>
                    <span v-show="node.show && node.isLeaf" size="small" type="text" style="margin-left:50px;color:#1890ff" @mousedown="msAdd(node)">添加</span>
                  </span>
                </div>
              </treeselect>
//注意此处添加按钮如果使用el-button,和@click事件,那么点击事件是不会被触发的,此处使用span标签+@mousedown事件,就可以成功触发事件。

    handleMsenter(node){
      this.$set(node,'show',true)
    },
    handleMsLeave(node){
      this.$set(node,'show',false)
    },
    msAdd(node){
      //添加事件todo....
    },
   

    

 

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

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

相关文章

Bert的一些理解

Bert的一些理解 Masked Language Model (MLM)Next Sentence Prediction (NSP)总结 参考链接1 参考链接2 BERT 模型的训练数据集通常是以预训练任务的形式来构建的&#xff0c;其中包括两个主要任务&#xff1a;Masked Language Model (MLM) 和 Next Sentence Prediction (NSP)。…

【Python】Miniconda+Vscode+Jupyter 环境搭建

1.安装 Miniconda Conda 是一个开源的包管理和环境管理系统&#xff0c;可在 Windows、macOS 和 Linux 上运行&#xff0c;它可以快速安装、运行和更新软件包及其依赖项。使用 Conda&#xff0c;我们可以轻松在本地计算机上创建、保存、加载和切换不同的环境 Conda 分为 Anaco…

MyBatis记录

目录 什么是MyBatis MyBatis的优点和缺点 #{}和${}的区别 Mybatis是如何进行分页的&#xff0c;分页插件的原理 Mybatis是如何将sql执行结果封装为目标对象并返回的 MyBatis实现一对一有几种方式 Mybatis设计模式 什么是MyBatis &#xff08;1&#xff09;Mybatis是一个…

【鸿蒙系统】 ---Harmony 鸿蒙编译构建指导(一)

&#x1f48c; 所属专栏&#xff1a;【鸿蒙系统】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢…

一文全面了解 wxAUI 界面库

目录 wxAUI 简介 框架管理 工具栏 非模态控件 外观和风格 wxAUI 简介 wxAUI 代表高级用户界面 (Advanced User Interface)。 它的目标是为用户提供一个前沿的界面&#xff0c;具有可浮动的窗口和可自定义的布局。最初的 wxAUI 源代码由 Kirix Corp.慷慨地提供&#xff0…

MNN createSession 之创建流水线后端(四)

系列文章目录 MNN createFromBuffer&#xff08;一&#xff09; MNN createRuntime&#xff08;二&#xff09; MNN createSession 之 Schedule&#xff08;三&#xff09; MNN createSession 之创建流水线后端&#xff08;四&#xff09; MNN Session::resize 之流水线编码&am…

在openSUSE-Leap-15.5-DVD-x86_64中使用微信wechat-beta-1.0.0.238

在openSUSE-Leap-15.5-DVD-x86_64中使用微信wechat-beta-1.0.0.238 参考文章&#xff1a; 《重磅&#xff01;微信&#xff08;Universal&#xff09;UOS版迎来全新升级丨统信应用商店上新 》统信软件 2024-03-13 17:45 北京 https://mp.weixin.qq.com/s/VSxGSAPTMPH4OGvGSilW…

初探Springboot 参数校验

文章目录 前言Bean Validation注解 实践出真知异常处理 总结 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 前言 工作中我们经常会遇到验证字段是否必填&#xff0c;或者字段的值是否…

[Python人工智能] 四十三.命名实体识别 (4)利用bert4keras构建Bert+BiLSTM-CRF实体识别模型

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解如何实现中文命名实体识别研究,构建BiGRU-CRF模型实现。这篇文章将继续以中文语料为主,介绍融合Bert的实体识别研究,使用bert4keras和kears包来构建Bert+BiLSTM-CRF模型。然而,该代码最终结…

轻松解锁微博视频:基于Perl的下载解决方案

引言 随着微博成为中国最受欢迎的社交平台之一&#xff0c;其内容已经变得丰富多彩&#xff0c;特别是视频内容吸引了大量用户的关注。然而&#xff0c;尽管用户对微博上的视频内容感兴趣&#xff0c;但却面临着无法直接下载这些视频的难题。本文旨在介绍一个基于Perl的解决方…

Unity Toggle处理状态变化事件

Toggle处理状态变化事件&#xff0c;有两个方法。 法一、通过Inspector面板设置 实现步骤&#xff1a; 在Inspector面板中找到Toggle组件的"On Value Changed"事件。单击""按钮添加一个新的监听器。拖动一个目标对象到"None (Object)"字段&am…

pytorch单层感知机

目录 1.单层感知机模型2. 推导单层感知机梯度3. 实战 1.单层感知机模型 2. 推导单层感知机梯度 公式前加了一个1/2是为了消除平方2&#xff0c;不加也是可以的&#xff0c;不会改变函数的单调性 3. 实战 初始化1行10列的x和wsigmod中xw.t() w做了转置操作是为了将[1,10]转换…

webpack5零基础入门-12搭建开发服务器

1.目的 每次写完代码都需要手动输入指令才能编译代码&#xff0c;太麻烦了&#xff0c;我们希望一切自动化 2.安装相关包 npm install --save-dev webpack-dev-server 3.添加配置 在webpack.config.js中添加devServer相关配置 /**开发服务器 */devServer: {host: localhos…

[OpenCV学习笔记]获取鼠标处图像的坐标和像素值

目录 1、介绍2、效果展示3、代码实现4、源码展示 1、介绍 实现获取鼠标点击处的图像的坐标和像素值&#xff0c;灰度图显示其灰度值&#xff0c;RGB图显示rgb的值。 OpenCV获取灰度值及彩色像素值的方法&#xff1a; //灰度图像&#xff1a; image.at<uchar>(j, i) //j…

.NET 异步编程(异步方法、异步委托、CancellationToken、WhenAll、yield)

文章目录 异步方法异步委托async方法缺点CancellationTokenWhenAllyield 异步方法 “异步方法”&#xff1a;用async关键字修饰的方法 异步方法的返回值一般是Task<T>&#xff0c;T是真正的返回值类型&#xff0c;Task<int>。惯例&#xff1a;异步方法名字以 Asy…

【保姆级】前端使用node.js基础教程

文章目录 安装和版本管理&#xff1a;npm 命令&#xff08;Node 包管理器&#xff09;&#xff1a;运行 Node.js 脚本&#xff1a;调试和开发工具&#xff1a;其他常用命令&#xff1a;模块管理&#xff1a;包管理&#xff1a;调试工具&#xff1a;异步编程和包管理&#xff1a…

redis和rabbitmq实现延时队列

redis和rabbitmq实现延时队列 延迟队列使用场景Redis中zset实现延时队列Rabbitmq实现延迟队列 延迟队列使用场景 1. 订单超时处理 延迟队列可以用于处理订单超时问题。当用户下单后&#xff0c;将订单信息放入延迟队列&#xff0c;并设置一定的超时时间。如果在超时时间内用户…

数据仓库系列总结

一、数据仓库架构 1、数据仓库的概念 数据仓库&#xff08;Data Warehouse&#xff09;是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。 数据仓库通常包含多个来源的数据&#xff0c;这些数据按照主题进行组织和存储&#x…

AnyGo for Mac最新激活版:位置模拟软件打破地域限制

AnyGo for Mac&#xff0c;一款专为Mac用户打造的位置模拟软件&#xff0c;让您能够轻松打破地域限制&#xff0c;畅享无限可能。 软件下载&#xff1a;AnyGo for Mac v7.0.0最新激活版 通过AnyGo&#xff0c;您可以随时随地模拟出任何地理位置&#xff0c;无论是国内热门景点还…

【Godot4.2】2D导航02 - AstarGrid2D及其使用方法

概述 AstarGrid2D是Godot4.0新增的A*寻路辅助类型。可以看做是Astar2D的加强版。它允许你通过设置其size和cell_size属性来创建一个虚拟的网格。 并使用set_point_solid()这样的方法来在指定位置创建障碍物。 AstarGrid2D的好处是你不再需要手动的添加点以及点与点之间的连接…
最新文章