vue2点击左侧的树节点(el-tree)定位到对应右侧树形表格(el-table)的位置,树形表格懒加载

news2025/3/12 17:32:33

在这里插入图片描述

左侧树代码

  <el-tree 
  	:data="treeData" 
  	node-key="id" 
  	default-expand-all="" //节点默认全部展开
  	:expand-on-click-node="false" //是否在点击节点的时候展开或者收缩节点
  	:props="defaultProps" 
  	@node-click="handleNodeClick">
    <span slot-scope="{ node, data }">
         <span>{{ node.label }}</span>
 	</span>
  </el-tree>

右侧树形表格代码

<el-table 
	ref="singleTable" 
	:data="detailsList" 
	highlight-current-row="" 
	row-key="detailId" 
	:tree-props="{children: 'children', hasChildren: 'hasChildren'}" 
	:lazy="lazy" 
	:load="load">
    <el-table-column type="index" width="80" label="序号" align="center" fixed=""> </el-table-column>
   	<el-table-column property="code" label="编码" width="160" fixed=""></el-table-column>
   	<el-table-column property="name" label="名称" width="160" fixed=""></el-table-column>
</el-table>

js代码

data: function () {
     return {
         defaultProps: {
             children: "childrenList",
             label: function (data, node) {
                 return  data.name;
             }
         },
         treeData: [],
         detailsList: [],
         lazy: true //开启懒加载
   	}
},
methods: {
	// 点击分项定位到右边表格位置
    handleNodeClick(data) {
        // 首先获取所有的行row的高度
        const rowHeightList = []; //存放所有元素的高度
        const temp = document.getElementsByClassName("el-table__row");
        for (let i = 0; i < temp.length; i++) {
            const item = temp[i];
            rowHeightList.push(item.scrollHeight);
        }
        let itemRow = {}; //存放当前行的所有数据
        let rowIndex = 0; //选中行位于第几行
        var number = 0
        let fn = dataList => {
            for (let x of dataList) {
                number++
                // 判断分项是否存在,存在则进行定位操作
                if (x.quotaName == data.firstQuotaName) {
                    // itemRow = x;
                    rowIndex = number - 1;
                    break;
                }
                if (x.children) {
                    fn(x.children);
                }
            }
        };
        fn(this.detailsList);
        let totalHeight = 0; //求出选中行之前的的高度之和,需要注意的是,当前行的高度不能包含进去
        for (let index = 0; index < rowHeightList.length; index++) {
            const row = rowHeightList[index];
            if (index < rowIndex) {
                totalHeight += row;
            }
        }
        // 滚动到指定行
        this.$refs.singleTable.bodyWrapper.scrollTop = totalHeight
        this.$refs.singleTable.setCurrentRow(itemRow);
    },
    // 懒加载数据
    load(tree, treeNode, resolve) {
         var childrenList = []
         childrenList = this.queryDetailsList(tree.detailId)	//查询节点数据
         resolve(childrenList)
         // 修改绑定的数据
         this.updateTableData(tree.detailId,childrenList)
     },
     // 查询节点数据
     queryDetailsList(detailParentId) {
	      let that = this
          let childrenList = []
          $.ajax({
              url: 接口地址,
              type: "get",
              dataType: "json",
              async: false,
              contentType: "application/json;charset=UTF-8",
              success: function (data) {
                  if (data.isOk) {
                      if (data.data) {
                         childrenList = data.data
                      }
                  } else {
                      $.Dialog.error(data.msg);
                  }
              },
          });
          return childrenList
     },
     // 修改绑定的数据
    updateTableData(detailId,childrenList) {
         let getMenu = function (data) {
             if (data.children){
                 data.children.forEach((itemChildren) => {
                     if (itemChildren.detailId == detailId) {
                         if (itemChildren.children) {
                             itemChildren.children.forEach(itemOld=>{
                                 childrenList.forEach(itemNew=>{
                                     if ((itemOld.detailId == itemNew.detailId) && itemOld.children) {
                                         itemNew.children = itemOld.children
                                     }
                                 })
                             })
                         }
                         itemChildren.children = childrenList
                     } else {
                         getMenu(itemChildren);
                     }
                 });
             }
         }
         this.detailsList.forEach(item=>{
             getMenu(item);
         })
     },
}

el-table左键双击单元格编辑内容(输入框输入计算公式可直接得出结果),右键单击展示操作菜单,可编辑单元格高亮展示

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

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

相关文章

(二十五)Flask之MTVMVC架构模式Demo【重点:原生session使用及易错点!】

目录&#xff1a; 每篇前言&#xff1a;MTV&MVC构建一个基于MTV模式的Demo项目&#xff1a;蹦出一个问题&#xff1a; 每篇前言&#xff1a; &#x1f3c6;&#x1f3c6;作者介绍&#xff1a;【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领…

社区居民医疗健康系统 微信小程序

设计原则 本社区健康医疗APP采用 Hbuildex技术&#xff0c;使用Java语言开发&#xff0c;充分保证了系统稳定性、完整性。 社区健康医疗APP的设计与实现的设计思想如下&#xff1a; &#xff08;1&#xff09;操作简单方便、系统界面安全良好、简单明了的页面布局、方便查询相…

java-模拟的例题实战

例题实战 在实际的开发工作中&#xff0c;对字符串的处理是最常见的编程惹怒我。本题目即是要求程序对用户输入的串进行处理。具体规则如下&#xff1a; 1 把每个单词的首字母变成大写 2 把数字与字母之间用下划线字符&#xff08;_&#xff09;分开&#xff0c;使得更清晰 …

下载BenchmarkSQL并使用BenchmarkSQL查看OceanBase 的执行计划

下载BenchmarkSQL并使用BenchmarkSQL查看OceanBase 的执行计划 一、什么是BenchmarkSQL二、下载BenchmarkSQL三、使用BenchmarkSQL查看OceanBase 的执行计划 一、什么是BenchmarkSQL BenchmarkSQL是一个开源的数据库基准测试工具&#xff0c;可以用来评估数据库系统的性能&…

unity3d Animal Controller的Animal组件中Stances,Advanced基础部分理解

Stances 立场 立场要求在动物动画控制器上的姿态动画参数。 你可以有多个运动状态,并根据当前的立场使用它们 过渡的条件是: Stance StanceID Default Stance默认姿势 如果调用函数Stance_Reset&#xff08;&#xff09;&#xff0c;动物将返回到的默认姿势。 Current …

webconfig-boot项目说明

1、前言 最近利用空余时间写了一个项目webconfig-boot 。该项目主要配置了web项目常用的一些配置&#xff0c;如统一参数校验、统一异常捕获、统一日期的处理、常用过滤器、常用注解等。引入依赖接口完成常规的web配置。 这里也是总结了笔者在项目开发中遇到的一些常用的配置…

力扣111---二叉树的最小深度(简单题,Java,递归+非递归)

目录 题目描述&#xff1a; &#xff08;递归&#xff09;代码&#xff1a; &#xff08;非递归、层次遍历&#xff09;代码&#xff1a; 题目描述&#xff1a; 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说…

【源码编译】Apache SeaTunnel-Web 适配最新2.3.4版本教程

Apache SeaTunnel新版本已经发布&#xff0c;感兴趣的小伙伴可以看之前版本发布的文章 本文主要给大家介绍为使用2.3.4版本的新特性&#xff0c;需要对Apache SeaTunnel-Web依赖的版本进行升级&#xff0c;而SeaTunnel2.3.4版本部分API跟之前版本不兼容&#xff0c;所以需要对 …

备战蓝桥杯Day27 - 省赛真题-2023

题目描述 大佬代码 import os import sysdef find(n):k 0for num in range(12345678,98765433):str1 ["2","0","2","3"]for x in str(num) :if x in str1:if str1[0] x:str1.pop(0)if len(str1) ! 0:k1print(k)print(85959030) 详…

Qt 图形视图 /基于Qt示例DiagramScene解读图形视图框架

文章目录 概述从帮助文档看示例程序了解程序背景/功能理清程序概要设计 分析图形视图的协同运作机制如何嵌入到普通Widget程序中&#xff1f;形状Item和文本Item的插入和删除&#xff1f;连接线Item与形状Item的如何关联&#xff1f;如何绘制ShapeItem间的箭头线&#xff1f; 下…

Centos strema 9 环境部署Glusterfs9

本文档只是创建复制卷&#xff0c;分布式卷&#xff0c;分布式复制卷&#xff0c;纠删卷 操作系统 内核 角色 Ip地址 说明 CentOS Stream 9 x86_64 5.14.0-427.el9.x86_64 客户端 client 192.168.80.119 挂载存储业务机器 CentOS Stream 9 x86_64 5.14.0-427.el9.x8…

Git的介绍

导出项目依赖 # 以后项目给别人需要导出项目依赖&#xff0c;放在项目路径下&#xff0c;以后在运行项目前&#xff0c;先安装依赖 一般约定俗成都叫 requirements.txt,但是会有别的&#xff1a;req.txt | dev.txt # 两种方式&#xff1a; 1、虚拟环境所有装的第三方&…

分享6款非常炫酷的前端动画特效(附在线演示)

分享6款非常不错的项目动画特效 其中有three.js特效、canvas特效、CSS动画、SVG特效等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 Three.js 3D游戏场景动画特效 基于Three.js的HTML5 3D动画&#xff0c;这个动…

【学习】感受野

感受野&#xff08;receptive field&#xff09;是指在神经网络中&#xff0c;某一层输出的特征图上的一个像素点对应输入图像的区域大小。在深度神经网络中&#xff0c;随着网络层数的增加&#xff0c;特征图的感受野也会逐渐增大。这是因为每一层的卷积操作都会扩大感受野。 …

python面向对象的三大特性:封装,继承,多态

1、面向对象有哪些特性 三种&#xff1a;封装性、继承性、多态性 2、Python中的封装 在Python代码中&#xff0c;封装有两层含义&#xff1a; ① 把现实世界中的主体中的属性和方法书写到类的里面的操作即为封装 ② 封装可以为属性和方法添加为私有权限&#xff0c;不能直…

设计模式二三事(含基础使用示例)

设计模式是众多软件开发人员经过长时间的试错和应用总结出来的&#xff0c;解决特定问题的一系列方案。现行的部分教材在介绍设计模式时&#xff0c;有些会因为案例脱离实际应用场景而令人费解&#xff0c;有些又会因为场景简单而显得有些小题大做。 本文会结合在美团金融服务…

苹果Find My App用处多多,产品认准伦茨科技ST17H6x芯片

苹果发布AirTag发布以来&#xff0c;大家都更加注重物品的防丢&#xff0c;苹果的 Find My 就可以查找 iPhone、Mac、AirPods、Apple Watch&#xff0c;如今的Find My已经不单单可以查找苹果的设备&#xff0c;随着第三方设备的加入&#xff0c;将丰富Find My Network的版图。产…

【Git】error: bad signature 0xb86f1e1 和 bfatal: index file corrupt

一、问题 之前都好好的&#xff0c;今天执行 git add .的时候突然报错 报错原因翻译成中文&#xff1a;索引文件损坏 二、解决方法 方法1&#xff1a; 删除.git隐藏文件夹中的index文件 然后执行 git reset 重新生成index文件 git reset 方法2&#xff1a; 重新从远程克隆…

用户和组及权限管理

用户至少属于一个组,在创建时如果不指定组,将会创建同名的组 用户只能有一个基本组(主组),但可以隶属于多个附加组 如果一个组作为某用户的基本组,此组将不能被删除 UID: 用户标识 GID: 组的标识 root管理员的uid及gid 都为0 用户的配置文件: 1./etc/passwd test:x:1000:1000…

文献速递:深度学习乳腺癌诊断---基于深度学习的图像分析预测乳腺癌中HE染色组织病理学图像的PD-L1状态

Title 题目 Deep learning-based image analysis predicts PD-L1 status from H&E-stained histopathol ogy images in breast cancer 基于深度学习的图像分析预测乳腺癌中H&E染色组织病理学图像的PD-L1状态 01 文献速递介绍 编程死亡配体-1&#xff08;PD-L1&…