element的Table表格组件树形数据与懒加载简单使用

news2024/11/18 15:31:24

目录

  • 1. 代码实现
  • 2. 效果图
  • 3. 解决新增、删除、修改之后树节点不刷新问题。([参考文章](https://blog.csdn.net/weixin_41549971/article/details/135504471))

1. 代码实现

<template>
    <div>
        <!-- lazy 是否懒加载子节点数据 -->
        <!-- load 加载子节点数据的函数,lazy 为 true 时生效,函数第二个参数包含了节点的层级信息 -->
        <!-- :default-expand-all="defaultExpandAll" 是否默认展开所有行,当 Table 包含展开行存在或者为树形表格时有效  -->
        <!-- expand-row-keys 可以通过该属性设置 Table 目前的展开行,需要设置 row-key 属性才能使用,该属性为展开行的 keys 数组。 -->
        <!-- row-click 当某一行被点击时会触发该事件 -->
        <!-- expand-change 当用户对某一行展开或者关闭的时候会触发该事件(展开行时,回调的第二个参数为 expandedRows;树形表格时第二参数为 expanded)	 -->
        <el-table ref="tableRef" :data="deptList" row-key="deptId" :lazy="true" :load="load"
            :tree-props="{ children: 'children', hasChildren: 'existSub' }" :expand-row-keys="expandRowKeys"
            @row-click="(row, column, e) => clickRowLoad(row, column, e)" @expand-change="handleExpandChange">
            <el-table-column prop="deptName" label="名称" min-width="260" />
            <el-table-column prop="orderNum" label="排序" />
            <el-table-column label="创建时间" align="center" prop="createTime" min-width="200">
                <template slot-scope="scope">
                    <span>{{ (scope.row.createTime) }}</span>
                </template>
            </el-table-column>
            <el-table-column label="操作" align="center" fixed="right" min-width="220">
                <template slot-scope="scope">
                    <el-button size="mini" type="primary" @click.stop="clickHandle(scope.row)">查看</el-button>
                </template>
            </el-table-column>
        </el-table>

    </div>
</template>
  
<script>

export default {
    name: "TablePage3",
    data() {
        return {
            // 模拟数据1
            deptList_01: [
                {
                    "createTime": "2023-10-23 11:39:03",
                    "deptId": 2104,
                    "deptName": "部门1",
                    "parentName": null,
                    "parentId": 0,
                    "orderNum": 0,
                    "children": [],
                    "existSub": true,
                },
                {
                    "createTime": "2023-10-23 11:39:03",
                    "deptId": 2105,
                    "deptName": "部门2",
                    "parentName": null,
                    "parentId": 0,
                    "orderNum": 1,
                    "children": [],
                    "existSub": true,
                },
                {
                    "createTime": "2023-10-23 11:39:03",
                    "deptId": 2106,
                    "deptName": "部门3",
                    "parentName": null,
                    "parentId": 0,
                    "orderNum": 2,
                    "children": [],
                    "existSub": false,
                }
            ],
            // 模拟数据2
            deptList_02: [
                {
                    "createTime": "2023-10-23 11:39:03",
                    "deptId": 21041,
                    "deptName": "部门1-1",
                    "parentName": null,
                    "parentId": 2104,
                    "orderNum": 1,
                    "children": [],
                    "existSub": false,
                },
                {
                    "createTime": "2023-10-23 11:39:03",
                    "deptId": 21042,
                    "deptName": "部门1-2",
                    "parentName": null,
                    "parentId": 2104,
                    "orderNum": 1,
                    "children": [],
                    "existSub": false,
                },
            ],
            // 模拟数据3
            deptList_03: [
                {
                    "createTime": "2023-10-23 11:39:03",
                    "deptId": 21051,
                    "deptName": "部门2-1",
                    "parentName": null,
                    "parentId": 2105,
                    "orderNum": 1,
                    "children": [],
                    "existSub": true,
                },
            ],
            // 模拟数据4
            deptList_04: [
                {
                    "createTime": "2023-10-23 11:39:03",
                    "deptId": 210511,
                    "deptName": "部门2-1-1",
                    "parentName": null,
                    "parentId": 21051,
                    "orderNum": 1,
                    "children": [],
                    "existSub": false,
                },
            ],
            // 部门表格树数据
            deptList: [],
            // 重新渲染表格状态
            refreshTable: true,
            //父级的Id
            parentId: '',
            expandRowKeys: [],

        };
    },
    mounted() {
        // 列表
        this.getList()
    },
    methods: {
        /** 查询列表 懒加载 */
        getList() {
            //根据实际项目调用接口
            // lazyList(this.queryParams).then(response => {
            //     console.log(response, 'response查询列表')
            //     this.deptList = response.data
            // }) 

            // 模拟数据1
            this.deptList = this.deptList_01;
            this.deptList.forEach(item => {
                item.hasChildren = item.existSub
            })
            // 如果只是单纯的更新绑定的数据:是在重新加载时,清空对应ref下的这两个数据
            // this.$set(this.$refs["tableRef"].store.states, "lazyTreeNodeMap", {});
            // this.$set(this.$refs["tableRef"].store.states, "treeData", {});

            console.log(this.deptList, ' this.deptList')
            // ------------触发点击事件load------------------
            //一、-------默认展开了deptList的第一层所有数据的下级数据--------
            // 一、-------默认展开了deptList的第一层所有数据的下级数据(相当于自动点击了一次)--------
            this.openTreeHandle(this.deptList)

            //二、 展开所有行,(建议直接使用非懒加载,配置default-expand-all为true)

        },
        // 点击列表懒加载
        load(tree, treeNode, resolve) {
            console.log(tree, 'tree')
            // console.log(treeNode, 'treeNode')
            //根据实际项目调用接口,获取对应的下级数据
            // this.parentId = tree.deptId
            // lazyList(this.queryParams).then(res => {
            // console.log(res.data, 'res.data')
            // resolve(res.data)
            // })

            // 模拟数据2,模拟数据3, 模拟数据4
            let tempList = []
            if (tree.deptName == '部门1') {
                tempList = this.deptList_02
            } else if (tree.deptName == '部门2') {
                tempList = this.deptList_03
            } else if (tree.deptName == '部门2-1') {
                tempList = this.deptList_04
            }

            resolve(tempList)

        },

        // 一、-------根据接口得到deptList,根据实际需要获取需要展开的节点的id,也就是table绑定的row-key属性值(如deptId)--------
        openTreeHandle(deptList) {
            const deptId = deptList ? deptList.map(item => (item.deptId).toString()) : []
            // expandRowKeys 可以通过该属性设置 Table 目前的展开行,需要设置 row-key 属性才能使用,该属性为展开行的 keys 数组
            // 这个必须配置,只有配置了这个,getElementsByClassName才能获取到对应的数据els,下面click事件才会触发
            this.expandRowKeys = this.expandRowKeys.concat(deptId)
            console.log(this.expandRowKeys, ' this.expandRowKeys')
            const els = document.getElementsByClassName('el-table__expand-icon el-table__expand-icon--expanded')
            this.$nextTick(() => {
                console.log(els, 'els')
                console.log(els.length, 'els.length')
                if (els.length > 0) {
                    for (let i = 0; i < els.length; i++) {
                        els[i].click()
                    }
                }
            })
        },
        // 展开改变触发函数,只展开一行
        handleExpandChange(row, expandedRows) {
            // console.log(row, 'row')
            // console.log(expandedRows, 'expandedRows')
            if (expandedRows.length > 1) {
                this.$refs.tableRef.toggleRowExpansion(expandedRows[0])
            }
        },
        //点击整行load (能够点击一行的任意位置都可以进行伸缩)
        clickRowLoad(r, c, e) {
            if (e.currentTarget && e.currentTarget.firstElementChild.firstElementChild.firstElementChild) {
                console.log(e.currentTarget, 'e.currentTarget')
                if (e.currentTarget.firstElementChild.firstElementChild.firstElementChild.tagName == 'DIV') {
                    e.currentTarget.firstElementChild.firstElementChild.firstElementChild.click()
                } else {
                    e.currentTarget.firstElementChild.firstElementChild.firstElementChild.nextElementSibling.click()
                }
            }

        },
        clickHandle(row) {
            console.log(row, '点击')
        },
    },
};
</script>
  

2. 效果图

在这里插入图片描述

3. 解决新增、删除、修改之后树节点不刷新问题。(参考文章)

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

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

相关文章

anaconda创建虚拟环境启动jupyter notebook

1.进入虚拟环境 &#xff08;以环境名为py37_pytorch1.9为例&#xff09; 创建虚拟环境: conda create -n py37_pytorch1.9 python3.7 查看已经创建的虚拟环境&#xff1a; ​​​​​​​conda env list 切换/进入环境&#xff1a; conda activate py37_pytorch1.9 删除环…

Verifiable Credentials可验证证书 2023 终极指南

1. 引言 Dock公司为去中心化数字身份领域的先驱者&#xff0c;其自2017年以来&#xff0c;已知专注于构建前沿的可验证证书&#xff08;Verifiable Credentials&#xff09;技术。本文将阐述何为电子证书、电子证书工作原理、以及其对组合和个人的重要性。 伪造实物证书和数字…

思迈特2023 年度回顾:这一年,在不确定的时代里做好正确的事

2023年&#xff0c;思迈特的成长离不开您的相伴❤️2024年&#xff0c;思迈特愿与君携手&#xff0c;让数据创造更大的价值&#xff0c;让经营决策更智能&#xff01;

c语言:输入成绩,统计不及格人数|练习题

一、题目 输入学生成绩&#xff0c;统计不及格的学生人数 二、代码截图【带注释】 三、源代码【带注释】 #include <stdio.h> //题目&#xff1a;输入成绩&#xff0c;统计不及格人数 //思考分析 //1、由于学生人数是未知数&#xff0c;所以可以在输入时&#xff0c;以0…

浙大恩特客户资源管理系统 CrmBasicAction.entcrm任意文件上传

产品介绍 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源&#xff0c;提升销售和市场营销的效果。 漏洞描述 浙大恩特客户资源管理系统 fcrmbasicaction接口存在任意文件上传漏洞。攻击者可通过该漏洞在服务器…

Python自带爬虫库urllib使用大全

目录 一、urllib库简介 二、发送HTTP请求 三、处理响应 四、解析URLs 五、设置代理 六、总结 在Python中&#xff0c;urllib是一个用于处理URLs的内置库&#xff0c;它提供了用于构建、解析、发送和接收HTTP、HTTPS和其他URLs的强大工具。这个库是Python标准库的一部分&a…

第8章 BOM

学习目标 了解BOM的概念,能够说出BOM的作用 掌握BOM对象的使用,能够通过BOM对象实现浏览器操作 掌握窗口事件的使用,能够在窗口加载、卸载或改变大小时执行特定的代码 掌握定时器方法的使用,能够通过定时器延迟一段时间执行代码或间歇执行代码 熟悉同步和异步的概念,能够说…

2024年湖北建设厅特种工电工、焊工如何报名考试呢?

特种作业&#xff1a;是指容易发生事故&#xff0c;对操作者本人、他人的安全健康及设备、设施的安全可能造成重大危害的作业。特种作业的范围由特种作业目录规定。本规定所称特种作业人员&#xff0c;是指直接从事特种作业的从业人员。特种作业人员所持证件为特种作业操作证。…

小红书获得小红书笔记详情 API (smallredbook.item_get_video)在电商中的发展

小红书笔记详情API&#xff08;smallredbook.item_get_video&#xff09;在电商中具有广阔的发展前景&#xff0c;具体来说&#xff1a; 优化商品展示&#xff1a;通过API获取的商品视频详情&#xff0c;可以丰富商品展示形式&#xff0c;提供更加全面、生动的商品信息&#xf…

快递批量查询助手:智能删除空格,让查询更精准

在快递单号中&#xff0c;空格可能会造成查询失败或延误。现在&#xff0c;有了我们的快递批量查询助手&#xff0c;您不再需要担心空格问题&#xff01; 首先&#xff0c;我们要进入快递批量查询高手主页面&#xff0c;并在上方的功能栏里点击“添加单号”功能。 第二步&…

Unity组件开发--UI管理器

1.Canvas组件&#xff1a; 注意属性&#xff1a; &#xff08;1&#xff09;渲染模式是&#xff1a;屏幕空间相机 &#xff08;2&#xff09;创建一个UICamera节点&#xff0c;管理相机 &#xff08;3&#xff09;屏幕画布缩放模式 &#xff08;4&#xff09;画布下挂载两…

常见Mysql数据库操作语句

-- DDL创建数据库结构 -- 查询所有数据库 show databases ; -- 修改数据库字符集 alter database db02 charset utf8mb4; -- 创建字符编码为utf——8的数据库 create database db05 DEFAULT CHARACTER SET utf8;-- 创建表格 create table tb_user(id int auto_increment primar…

Kubernetes 核心实战之三(精华篇 3/3)

文章目录 6、Ingress ★6.1 安装 Ingress6.2 访问6.3 安装不成功的bug解决6.4 测试使用6.4.1 搭建测试环境6.4.2 配置 Ingress的规则6.4.3 测试I6.4.4 测试II6.4.5 路径重写6.4.6 限流 7. Kubernetes 存储抽象7.1 NFS 搭建7.2 原生方式 数据挂载7.3 PV 和 PVC ★7.3.1 创建 PV …

2023年度总结:但行前路,不负韶华

​ &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x…

【三】把Python Tk GUI打包exe可执行程序,移植到其他机器可用

背景 这是一个系列文章。上一篇【【二】为Python Tk GUI窗口添加一些组件和绑定一些组件事件-CSDN博客】 使用python脚本写一个小工具。因为命令行运行的使用会有dos窗口&#xff0c;交互也不是很方便&#xff0c;开发环境运行也不方便分享给别人用&#xff0c;所以想到…

生物信息学中的可重复性研究

科学就其本质而言&#xff0c;是累积渐进的。无论你是使用基于网络的还是基于命令行的工具&#xff0c;在进行研究时都应保证该研究可被其他研究人员重复。这有利于你的工作的累积与进展。在生物信息学领域&#xff0c;这意味着如下内容。 工作流应该有据可查。这可能包括在电脑…

java递归生成树型结构

java递归生成树 1.获取数据 public List<TreeClassifyRespVO> getTreeClassifyList(ClassifyPageReqVO reqVO) {List<ClassifyDO> classifyList classifyMapper.selectList(reqVO);List<TreeClassifyRespVO> childClassifyResp ClassifyConvert.INSTANCE…

2019年认证杯SPSSPRO杯数学建模B题(第一阶段)外星语词典全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 基于方差分布的方法对未知语言文本中重复片段的自动搜索问题的研究 B题 外星语词典 原题再现&#xff1a; 我们发现了一种未知的语言&#xff0c;现只知道其文字是以 20 个字母构成的。我们已经获取了许多段由该语言写成的文本&#xff0c;但…

哈希表-散列表数据结构

1、什么是哈希表&#xff1f; 哈希表也叫散列表&#xff0c;哈希表是根据关键码值(key value)来直接访问的一种数据结构&#xff0c;也就是将关键码值(key value)通过一种映射关系映射到表中的一个位置来加快查找的速度&#xff0c;这种映射关系称之为哈希函数或者散列函数&…

性能分析与调优: Linux 磁盘I/O 观测工具

目录 一、实验 1.环境 2.iostat 3.sar 4.pidstat 5.perf 6. biolatency 7. biosnoop 8.iotop、biotop 9.blktrace 10.bpftrace 11.smartctl 二、问题 1.如何查看PSI数据 2.iotop如何安装 3.smartctl如何使用 一、实验 1.环境 &#xff08;1&#xff09;主机 …