vue+element-ui el-table组件二次封装(2023-09-03 TTable组件实现虚拟滚动,解决数据量大页面卡顿问题)

2023-11-17

2023-09-03 TTable组件实现虚拟滚动,解决数据量大页面卡顿问题

在这里插入图片描述

所有示例效果

在这里插入图片描述

1. 简介

HTML一行代码,可以实现表格编辑/分页/表格内/外按钮操作/行内文字变色/动态字典展示/filters格式化数据/排序/显示隐藏表格内操作按钮等

点击查看文档实例demo

代码示例:

   <t-table
       :table="table"
        :columns="table.columns"
        @size-change="handlesSizeChange"
        @page-change="handlesCurrentChange"
      />

2、配置参数(Table Attributes)

参数 说明 类型 默认值
table 表格数据对象 Object {}
—rules 规则(可依据 elementUI el-form 配置————对应 columns 的 prop 值) Object -
—data 展示数据 Array []
—toolbar 表格外操作栏选中表格某行,可以将其数据传出 Array -
—operator 表格内操作栏数据 Array []
-------hasPermi 表格内操作栏按钮权限资源(结合 btnPermissions 属性使用) String -
-------show 表格内操作栏根据状态显示 Object -
-------noshow 表格内操作栏根据多种状态不显示 Array -
-------type 基于 element button type String text
----size el-button的size String ‘mini’
-------render 自定义操作按钮 jsx 方式编写 function -
—operatorConfig 表格内操作栏样式 Object {}
—changeColor 整行文字颜色样式控制 Object {}
—firstColumn 表格首列(序号 index,复选框 selection,单选 radio)排列 object {}
—total 数据总条数 Number -
—pageSize 页数量 Number -
—currentPage 是否需要显示切换页条数 Number -
columns 表头信息 Array []
----sort 排序 (设置:sort:true) Boolean false
----headerRequired 是否显示表头必填’*’ Boolean false
----renderHeader 列标题 Label 区域渲染使用的可以用 jsx 方式 Function -
----bind el-table-column Attributes Object -
----noShowTip 是否换行 (设置:noShowTip:true);开启虚拟列表不会换行 Boolean false
----render 返回三个参数(text:当前值,row:当前整条数据 ,index:当前行) function -
----slotName 插槽显示此列数据(其值是具名作用域插槽) String -
----slotNameMerge 合并表头插槽显示此列数据(其值是具名作用域插槽) String -
----------param 具名插槽获取此行数据必须用解构接收{param} Object 当前行数据
----canEdit 是否开启单元格编辑功能 Boolean false
----filters 字典过滤 Object -
----------list listTypeInfo 里面对应的下拉数据源命名 String -
----------key 数据源的 key 字段(默认:dictValue) String ‘dictValue’
----------label 数据源的 label 字段(默认:dictLabel) String ‘dictLabel’
----configEdit 表格编辑配置(开启编辑功能有效) Object -
----------rules 规则(可依据 elementUI el-form 配置————对应 columns 的 prop 值) Object -
----------label placeholder 显示 String -
----------editComponent 组件名称可直接指定全局注册的组件,也可引入第三方组件 String input
----------bind 第三方 UI 的 Attributes Object -
----------eventHandle 第三方 UI 的 事件(返回两个参数,第一个自己自带,第二个 scope) Object -
----------event 触发 handleEvent 事件的标志 String -
----------type 下拉或者复选框显示(select-arr/select-obj/checkbox) String -
----------list 下拉选择数据源名称 String -
----------arrLabel type:select-arr 时对应显示的中文字段 String -
----------arrKey type:select-arr 时对应显示的数字字段 String -
listTypeInfo 下拉选择数据源{单元格编辑时需要} Object {}
title 表格左上标题 String /slot ‘’
toolbar 表格外操作栏 (显示在 table 右侧) slot -
footer 底部操作区(默认隐藏,使用插槽展示“保存”按钮) slot -
isShowFooterBtn 是否显示保存按钮(一般整行编辑才会开启) Boolean false
isEditCell 是否开启编辑模式(整行编辑模式) Boolean false
isEdit 是否显示添加按钮(在 table 的下面) Boolean false
highlightCurrentRow 是否高亮选中行 Boolean false
isShowTips 开启单元格编辑时鼠标移入是否显示“单击可编辑”tips Boolean false
columnSetting 是否显示设置(隐藏/显示列) Boolean false
isShowTreeStyle 是否开启 tree 树形结构样式 Boolean false
isMergedCell 是否开启合并单元格 Boolean false
comparisonOperator 多列行合并比较运算符 String ==
mergeCol 第几列合并进行行合并(默认第一列) Number 0
isObjShowProp 是否开启对象模式渲染数据 功能(适用于一层对象数据) Boolean false
isShowPagination 是否显示分页(默认显示分页) Boolean false
pageSizes 每页显示个数选择器的选项设置 number[] [10, 20, 50, 100]
isCopy 是否允许双击单元格复制 Boolean false
spanMethod 是否自定义编写合并单元格方法(跟 element 一样) funtion -
rowClickRadio 是否开启点击整行选中单选框 Boolean false
isTableColumnHidden 是否开启合计行隐藏复选框/单选框/序列 Boolean false
sortable 是否所有 table 列都开启排序 若值 ‘custom’,需要监听 Table 的 sort-change 事件 Boolean/String -
isSortable 是否开启组件排序功能(仅有升序和降序) Boolean false
notSortJudge 不排序条件判断规则 String -
isKeyup 单元格编辑是否开启键盘事件(向上、向下、回车横向的下一个输入框) Boolean false
defaultRadioCol 设置默认选中项(单选)defaultRadioCol 值必须大于 0! Number -
btnPermissions 按钮权限 store.getters 接收字段 String -
isRowSort 是否开启行拖拽(结合row-key配置) Boolean false
columnSetBind 列设置按钮配置(继承el-button所有属性) Object -
----btnTxt 按钮显示文字 String ‘列设置’
----title 点击按钮下拉显示title String ‘列设置’
----size el-button的size String ‘small’
----icon el-button的icon String ‘el-icon-s-operation’
onlyIconSort 是否开启仅点击排序图标才排序 Boolean false
useVirtual 是否开启虚拟列表 Boolean false
maxHeight Table 的最大高度。合法的值为数字或者单位为 px 的高度。(开启虚拟列表是其值默认540) String/Number false

3、events 其他事件按照el-table直接使用(如sort-change排序事件)

事件名 说明 返回值
page-change 当前页码 当前选中的页码
radioChange 单选选中事件 返回当前选中的整行数据
add 新增按钮 -
save 保存按钮 编辑后的所有数据
validateError 单元格编辑保存校验不通过触发 返回校验不通过的 prop–label 集合
handleEvent 单元格编辑时触发事件 configEdit 中的 event 值和对应输入的 value 值
sort-change 当表格的排序条件发生变化的时候会触发该事件 { column, prop, order }
rowSort 行拖拽排序后触发事件 返回排序后的table数据

4、Methods 方法(继承el-table的所有方法)

事件名 说明 参数
save 保存方法(返回编辑后的所有数据) -
resetFields 对表单进行重置,并移除校验结果(单元格编辑时生效)
clearValidate 清空校验规则(单元格编辑时生效) -

5、 部分具体代码——代码较多,可以结合文档案例使用

 <template v-for="(item,index) in renderColumns">
        <el-table-column
          :key="index+'i'"
          :type="item.type"
          :label="item.label"
          :prop="item.prop"
          :min-width="item['min-width'] || item.minWidth || item.width"
          :sortable="item.sort"
          :align="item.align || 'center'"
          :show-overflow-tooltip="item.noShowTip"
          v-bind="$attrs"
          v-on="$listeners"
        >
          <template slot-scope="scope">
          <!--非编辑模式-->
            <template v-if="!isEditCell">
             <!-- render渲染 -->
              <template v-if="item.customRender">
                <OptComponent
                  v-for="(comp, i) in item.customRender.comps"
                  :key="scope.$index + i.toString()"
                  v-bind="comp"
                  :scope="scope"
                />
              </template>
              <!--自定义作用域插槽-->
              <template v-if="item.slotName">
                <slot :name="item.slotName" :param="scope"></slot>
              </template>
               <!-- 单个单元格编辑 -->
              <template v-if="item.canEdit">
                <single-edit-cell
                  :canEdit="item.canEdit"
                  :configEdit="item.configEdit"
                  v-model="scope.row[scope.column.property]"
                  v-on="$listeners"
                  v-bind="$attrs"
                  ref="editCell"
                >
                  <template v-for="(index, name) in $slots" :slot="name">
                    <slot :name="name" />
                  </template>
                </single-edit-cell>
              </template>
               <!--常见的filters(金额/百分比)-->
              <div
                v-if="!item.filters&&!item.slotName&&!item.customRender"
                :style="{color:txtChangeColor(scope)}"
              >{{scope.row[item.prop]}}</div>
              <div v-if="item.filters" :style="{color:txtChangeColor(scope)}">
              <!--常见的字典过滤-->
                <span
                  v-if="item.filters.param"
                >{{scope.row[item.prop] |constantKey2Value(item.filters.param)}}</span>
                <span
                  v-if="!item.filters.param&&item.filters.method==='¥'"
                >{{scope.row[item.prop] |currencyFilter}}</span>
                <span
                  v-if="!item.filters.param&&item.filters.method==='%'"
                >{{scope.row[item.prop] |percentFilter}}</span>
              </div>
            </template>
            <!--开启编辑模式-->
            <template v-else>
              <edit-cell
                :configEdit="item.configEdit"
                v-model="scope.row[scope.column.property]"
                v-bind="$attrs"
                v-on="$listeners"
                ref="editCell"
              >
                <template v-for="(index, name) in $slots" :slot="name">
                  <slot :name="name" />
                </template>
              </edit-cell>
            </template>
          </template>
        </el-table-column>
      </template>

6、源码地址

gitHub组件地址

gitee码云组件地址


相关文章

基于ElementUi&Antd再次封装基础组件文档

vue3+ts基于Element-plus再次封装基础组件文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue+element-ui el-table组件二次封装(2023-09-03 TTable组件实现虚拟滚动,解决数据量大页面卡顿问题) 的相关文章

  • idea+sbt

    1 idea新建sbt scala项目 https blog csdn net aliceyangxi1987 article details 76423334 2 自己下载sbt集成到idea项目里 https www cnblogs c
  • LeetCode-1325. Delete Leaves With a Given Value

    Given a binary tree root and an integer target delete all the leaf nodes with value target Note that once you delete a l
  • Linux安装oracle 19C

    一 下载软件 我这边下的是ZIP Linux x86 64 二 安装依赖 yum install compat libcapl elfutils libelf devel fontconfig devel gliba devel kshli
  • Windows 10使用WSL部署Chatgpt_academic

    目录 一 在windows10中安装Ubuntu系统 二 在Ubuntu系统中安装anaconda3和GPT Academic 本文主要介绍windows10使用WSL安装Ubuntu系统 然后通过安装anaconda3来部署chatgpt

随机推荐

  • Unity——虚拟轴

    1 虚拟轴的概念 简单来说 虚拟轴就是一个数值在之间的数轴 其中最重要的数值为 1 0 1 2 虚拟轴的模拟 以按键模拟为例 用按键模拟虚拟轴需要2个按键 一个为负轴按键 按键1 一个为正轴按键 按键2 在没有按下任何按键的时候 虚拟轴的数
  • NRF52832学习笔记(1)—— 添加自有service(基于SDK15.3)

    前言 SDK版本15 3 评估板 pca10040 在uart的例程中添加battery service 添加之前 手机连上设备之后扫描到的service如下 一 分配ram空间 softdevice的flash code是确定 但ram是
  • WIKIOI – 1083 Cantor表

    题目描述 Description 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的 他是用下面这一张表来证明这一命题的 1 1 1 2 1 3 1 4 1 5 2 1 2 2 2 3 2 4 3 1 3 2 3 3 4
  • 2021上半年

    转眼间 2021年已经过去了一半 按照记账惯例 每逢月底 要对当月的财务状况进行结算 6月的话 还要再额外增加一轮年中结算 同时 受到近期一系列调整的影响 记录表也相应进行比较大的变更 以适应复杂度的增加 以至于 例行结算迟了两天才完成 但
  • 【matplotlib】AttributeError: Unknown property figsize

    AttributeError Unknown property figsize 属性错误 未知属性figsize 原代码 var YearBuilt data pd concat df train SalePrice df train va
  • Kafka【命令行操作】

    Kafka 命令行操作 Kafka 主要包括三大部分 生产者 主题分区节点 消费者 1 Topic 命令行操作 也就是我们 kafka 下的脚本 kafka topics sh 的相关操作 常用命令行操作 参数 描述 bootstrap s
  • Java中的IO流系统详解

    摘要 Java 流在处理上分为字符流和字节流 字符流处理的单元为 2 个字节的 Unicode 字符 分别操作字符 字符数组或字符串 而字节流处理单元为 1 个字节 操作字节和字节数组 Java 内用 Unicode 编码存储字符 字符流处
  • 【网络】——UDP复习笔记

    目录 1 UDP报文结构 2 UDP缓冲区 3 UDP特点 4 课后题 1 UDP报文结构 2 UDP缓冲区 UDP没有真正意义上的发送缓冲区 应用层调用sendto 函数直接将数据应用层的数据拷贝给传输层 传输层再构建UDP报头 然后再交
  • VMware——VMware Tools的介绍及安装方法

    VMware VMware Tools的介绍及安装方法 一 VMware Tools的作用 二 VMware Tools的安装步骤 参考文章 一 VMware Tools的作用 1 最大的好处是可以直接把windows界面的文件拖进linu
  • 【前端Vue】Element UI:一站式前端组件库的简单入门指南

    Element UI 一站式前端组件库的完整指南 引言 Element UI概述 常用组件介绍及用法 结语 引言 在现代的前端开发中 UI组件库扮演着至关重要的角色 它们为开发者提供了一套可重用的UI组件和工具 使得构建复杂的用户界面变得更
  • css炫酷标题,分享几个CSS小众但炫酷的技巧

    1 黑白图像 这段代码会让你的彩色照片显示为黑白照片 是不是很酷 复制代码代码如下 img desaturate filter grayscale 100 webkit filter grayscale 100 moz filter gra
  • 什么是DBMS,什么是数据库?

    马克 to win DBMS database management system 数据库管理系统 像mysql oracle sql server之类 首先没什么神秘的 都只是某个公司编的一个软件而已 比如mysql是MySQL AB公司
  • msvcp140.dll重新安装的解决方法【msvcp140.dll修复工具下载】

    msvcp140 dll文件如何安装 win10系统是目前大家常用的电脑操作系统 最近有很多用户不知道如何安装msvcp140 dll文件 这里小编今天为大家带来了msvcp140 dll文件怎么安装的方法 有需要的用户快来看看吧 msvc
  • 4.网络爬虫—Post请求(实战演示)

    网络爬虫 Post请求实战演示 POST请求 GET请求 POST请求和GET请求的区别 获取二进制数据 爬 百度官网 https www baidu com logo实战 发送post请求 百度翻译实战 使用session发送请求 模拟登
  • 喜报

    本文部分内容来自 中国AIOps现状调查报告 2023 丝小编扣1 领取完整版报告 2023年7月18日 信通院Xops产业创新发展论坛于北京成功举办 大会旨在提高企业研发运营水平 加强XOps体系建设经验分享 以三大不同主题的分论坛组成
  • 异步复位,同步释放的理解

    文章目录 什么情况下 复位信号需要做 异步复位 同步释放 处理 异步复位同步释放原理 利用前面两级触发器实现 特点 问题1 如果没有前面两级触发器的处理 异步信号直接驱动系统的触发器 会出现什么情况 问题2 复位信号存在亚稳态 有危险吗 问
  • Angular中的管道

    Angular同在在模板文件中使用一些管道 这些管道是用来对字符串 货币金额 日期等数据进行转换和格式化的 管道的本质是一些简单的函数 可以在模板表达式中用来接受输入值并返回一个按一定规则转换后的值 Angular内置管道 DatePipe
  • js数组的includes方法优化判断逻辑

    js数组的includes方法代替大量判断 优化前 function printAnimals animal if animal dog animal cat console log I have a animal printAnimals
  • Python 利用随机函数和电脑玩石头剪刀布

    首先导入第三方库 random import random 注意 使用前请先下载random函数 import random 从控制台出拳 拳头 剪刀 布 player input 请输入你要出的拳 石头 剪刀 布 电脑随机出拳 先假定电脑
  • vue+element-ui el-table组件二次封装(2023-09-03 TTable组件实现虚拟滚动,解决数据量大页面卡顿问题)

    2023 09 03 TTable组件实现虚拟滚动 解决数据量大页面卡顿问题 所有示例效果 1 简介 HTML一行代码 可以实现表格编辑 分页 表格内 外按钮操作 行内文字变色 动态字典展示 filters格式化数据 排序 显示隐藏表格内操