vue最强table vxe-table 虚拟滚动列表 前端导出

news2024/12/27 10:41:11

最近遇到个问题。后台一次性返回2万条列表数据。

并且需求要求所有数据必须全部展示,不能做假分页(不能优化了)。

这些数据的直接来源就是CS客户端。

他们做CS客户端就是一次性加载几万条数据不分页(说这是客户的要求)。

我体验了一把CS客户端,数万条数据放在那里,着实卡顿。

他们CS开发人员非他妈嘴硬说,这一点也不卡,极致顺滑。

真尼玛在这里掩耳盗铃呢,是吗?懒得跟他们废话。

结论就是:永远不要和傻子讲道理。

不废话,开整吧。

既然需要一次性展示数万条数据,那么element-table基本是不行了,毕竟也不能做个假分页。

终于,茫茫人海,遇到了 vxe-table。

官方地址:https://vxetable.cn/#/table/start/install

 最高支持10w+数据的流畅滚动。确实厉害。

那么这么厉害的虚拟滚动,如何实现?

官方也一语道破。

没错,就是懒加载。界面上只是在窗口可视区域范围内加载数据,随着鼠标滚动,再继续加载下一波数据。

怎么用?

第一,写下table模板

<vxe-table
              border
          show-overflow
          show-header-overflow
          ref="tableRef"
          height="600"
          :row-config="{isCurrent: true, isHover: true, useKey: true}"
          :column-config="{resizable: true}"
          :export-config="{}"
          :loading="demo1.loading"
          :sort-config="{trigger: 'cell'}"
          :checkbox-config="{checkField: 'checked'}">
          <vxe-column type="seq" width="100" fixed="left"></vxe-column>
          <vxe-column type="checkbox" width="60" fixed="left"></vxe-column>
          <vxe-column field="attr0" title="Attr0" width="200" sortable></vxe-column>
          <vxe-column field="attr1" title="Attr1" width="200"></vxe-column>
          <vxe-column field="attr2" title="Attr2" width="200"></vxe-column>
          <vxe-column field="attr3" title="Attr3" width="200"></vxe-column>
          <vxe-column field="attr4" title="Attr4" width="200"></vxe-column>
          <vxe-column field="attr5" title="Attr5" width="200"></vxe-column>
          <vxe-column field="attr6" title="Attr6" width="300" sortable></vxe-column>
          <vxe-column field="attr7" title="Attr7" width="200" sortable></vxe-column>
          <vxe-column field="attr8" title="Attr8" width="200"></vxe-column>
          <vxe-column field="attr9" title="Attr9" width="200"></vxe-column>
          <vxe-column field="attr10" title="Attr10" width="200"></vxe-column>
          <vxe-column field="attr11" title="Attr11" width="200"></vxe-column>
          <vxe-column field="attr12" title="Attr12" width="200"></vxe-column>
          <vxe-column field="attr13" title="Attr14" width="200"></vxe-column>
          <vxe-column field="attr14" title="Attr14" width="200"></vxe-column>
          <vxe-column field="attr15" title="Attr15" width="200"></vxe-column>
          <vxe-column field="attr16" title="Attr16" width="200" fixed="right"></vxe-column>
        </vxe-table>

这样子,看起来和element-table几乎没有区别。只是注意一些常用字段,改了下名字。

第二,写下数据请求方法

但是你发现这里没有绑定数据,也就是 :data="tableData"。

仔细想想朋友,10万+数据你交给vue双向绑定,你是要累死谁啊?不合适啊,这么干。所以,官方提供了一个方法:reloadData。

// 第一步: 接口请求后台数据(可能是10万条数据)

new Promise(resolve => {
    
    // 注意  这里引入接口方法
    
    getList().then(res => {
        
        // 在这里将请求的列表数据 返回出promise
        resolve(res ? res : [])
        
    })

}).then(list => {
    
    /* 
    * 在这里开始给vxe-table数据了
    */

    
    // 1. 首先通过 $refs(vue内部方法,或者原生获取vxe-table这个dom)
    const VXE_TABLE = this.$refs.tableRef;
    
    // 2. 通过这个dom下挂载的方法 reloadData 方法 取数据
    VXE_TABLE..reloadData(list).then(() => {
        // 如果你有loading的话  可以在这里关闭
    })    

    // 至此, 数据接收完毕。




}).catch(err => {
    console.log('请求数据报错了 -- ',err);
})

第三,自定义(翻译)字段

总有一些需要自己翻译的字段。实际上和element-table很类似。

<template #default="{ row }">
    vxe-button @click="showDetailEvent(row)">弹框{{ row.name }}</vxe-button>
</template>

还是插槽。更多插槽,请移步官方文档:vxe-table v4

 第四,高亮某一行

<vxe-table
      border
      ref="tableRef"
      height="300"
      :row-config="{isCurrent: true, isHover: true}"
      :data="tableData"
      @current-change="currentChangeEvent">
      <vxe-column field="name" title="Name"></vxe-column>
      <vxe-column field="sex" title="Sex"></vxe-column>
      <vxe-column field="age" title="Age"></vxe-column>
      <vxe-column field="address" title="Address" show-overflow></vxe-column>
    </vxe-table>

配置 row-config.

然后写一个方法 setCurrentRow.

// 老规矩 还是获取table这个dom

// talbeData[0] 设置第一行数据高亮

this.$refs.tableRef.setCurrentRow(talbeData[0])

等等?刚才说,这个data没有绑定。那么我们应该去哪里拿到这个数据呢?

// 通过 reloadData方法获取数据的 通过下边方式 拿到所有的table数据

const TABLE_DATA = this.$refs.tableRef.allFullData;

// 然后就可以愉快的设置某一行数据了 index 就是你需要哪一行数据高亮

this.$refs.tableRef.setCurrentRow(TABLE_DATA[index])

// 想要一键删除所有高亮  那么就直接调用 clearCurrentRow

this.$refs.tableRef.clearCurrentRow

第五,导出数据

本来这个导出数据这个事,后台返回个流,前端处理下就完事了。

但是这个table组件厉害了。可以直接通过内置方法,直接导出数据。

内置的格式有 txt,html,csv等等。

说实话,也够用了。

// 例如 导出csv文件 使用内置 $table.exportData({ type: 'csv' }) 方法


this.$refs.tableRef.exportData({type: 'csv'})

但是,需求要求我们导出pdf(wocao)。

对不起,失态了。

那么,我们也可以利用 vxe-table 的插件实现该功能。

文档:vxe-table v4 集成第三方

// 首先肯定是要安装这个插件了
npm install xe-utils vxe-table@next vxe-table-plugin-export-pdf@next jspdf

// 没错 基于 jspdf做的插件 
// 然后 入口文件引入
import VXETable from 'vxe-table'
import VXETablePluginExportPDF from 'vxe-table-plugin-export-pdf'
// ...

VXETable.use(VXETablePluginExportPDF)


// 然后配置字体  
// 需要注意的是  中文尤其要配字体  不然导出就是乱码
VXETablePluginExportPDF.setup({
  // Set default font
  fontName: 'SourceHanSans-Normal',
  // Font maps
  fonts: [
    {
      // Font name
      fontName: 'SourceHanSans-Normal',
      // Font library url
      fontUrl: 'https://cdn.jsdelivr.net/npm/vxe-table-plugin-export-pdf/fonts/source-han-sans-normal.js'
    }
  ]
})


// 以上配置完毕之后  在具体的组件业务中 就可以使用导出pdf功能


// 导出功能如下

this.$refs.tableRef.exportData({
    filename: 'Order details',
    sheetName: 'Order details ( X02514645652 )',
    type: 'pdf'
})

与此同时,你可以导出 xlsx格式的。

具体不再细说。请参考官方文档:vxe-table v4 集成第三方

至此,导出部分也讲完了。

但是,导出功能最后交给后台,毕竟这前端不擅长干这事。

结束了。

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

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

相关文章

android_mars老师_定位_获取最佳的provider

结果展示 ManiActivity package com.example.locationmanager2;import androidx.appcompat.app.AppCompatActivity;import android.content.Context; import android.location.Criteria; import android.location.LocationManager; import android.os.Bundle; import android.…

开放式耳机对耳朵伤害大吗?开放式耳机是什么意思?

​今天来跟大家一起聊聊&#xff0c;开放式耳机对耳朵伤害大不大&#xff0c;还有就是开放式耳机到底是什么类型的耳机&#xff0c;且开放式耳机有哪些比较好用的... 开放式耳机对耳朵伤害大吗&#xff1f; 开放式耳机对耳机的伤害是比较小的&#xff0c;传统入耳式耳机佩戴久了…

【Linux实验】将个人主页上传到服务器

一、实验目的 l 网页制作&#xff1b; l 熟悉 Linux FTP or scp 拷贝&#xff1b; l 熟悉 apache 权限配置。 二、实验内容 l 创建个人主页&#xff1b; l 用 FTP 或 scp 上传服务器&#xff1b; l chmod 设置目录权限&#xff1b; l Web 访问。 三、实验代码 略…

ModaHub魔搭社区:Milvus向量数据库最权威全面的百科

目录 什么是 Milvus&#xff1f; Milvus 向量数据库专为向量查询与检索设计&#xff0c;能够为万亿级向量数据建立索引。与现有的主要用作处理结构化数据的关系型数据库不同&#xff0c;Milvus 在底层设计上就是为了处理由各种非结构化数据转换而来的向量而生。 产品版本 强…

进行EE存储时需要关中断

一、调度中执行存储 在task调度里执行存储任务&#xff0c;在存储之前必须关掉中断&#xff0c;存储之后再打开中断&#xff0c;否则将会影响存储。以下两个函数分别执行挂起所有嵌套的中断和恢复所有嵌套的中断。 二、下电存储 在下电存储之前也需要使EcuM Shutdown或者Shut…

彻底掌握IDEA Debug技巧让你的开发不受任何阻挠

高效开发&#xff1a;IntelliJ IDEA Debug技巧 Debug用来追踪代码的运行流程&#xff0c;通常在程序运行过程中出现异常&#xff0c;启用Debug模式可以分析定位异常发生的位置&#xff0c;以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习…

3-Spring cloud之搭建Ribbon负载均衡——服务器上实操(上)

3-Spring cloud之搭建Ribbon负载均衡——服务器上实操&#xff08;上&#xff09; 1. 前言2. ribbon整合eureka入门2.1 修改相关配置2.1.1 修改服务消费者pom&#xff0c;引入ribbon相关依赖2.1.2 修改服务消费者yml&#xff0c;将客户端注册进eureka服务列表内2.1.3 修改配置类…

Python爬虫爬取双色球开奖结果源码

使用Python编写双色球爬虫&#xff1a;解析彩票数据 引言&#xff1a; 在数字化时代&#xff0c;彩票已经成为人们休闲娱乐的一种方式。而双色球无疑是最受欢迎的彩票之一&#xff0c;它的中奖概率和巨额奖金吸引了无数人的注意。在本文中&#xff0c;我们将介绍如何使用Python…

华为OD机试真题 Python 实现【知识图谱新词挖掘1】【2023Q1 100分】

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Python算法源码六、效果展示1、输入2、输出3、说明 一、题目描述 小华负责公司知识图谱产品&#xff0c;现在要通过新词挖掘完善知识图谱。 新词挖掘: 给出一个待挖掘文本内容字符串Content和一个词的字符串word&am…

apple pencil二代平替笔哪个好用?好用的苹果笔推荐

自从ipad和其他的平板电脑都搭配上了电容笔以后&#xff0c;电容笔很好地取代了我们的手指&#xff0c;书写的效率就大大提升了&#xff0c;但由于苹果原装电容笔的价格不够人性化&#xff0c;一直高居不下给普通人带来了很大的负担&#xff0c;特别是对于学生们来说&#xff0…

6个提高图片分辨率的在线网站,真的超级实用!

在日常生活中&#xff0c;我们经常会遇到保存的图片模糊不清的情况。有时候这可能是由于保存方式不当&#xff0c;有时候则是由于图片在上传至网站时被压缩所致&#xff0c;导致画质和分辨率下降。 那么&#xff0c;有没有办法可以提高图片的分辨率和画质呢&#xff1f;事实上…

【笔记】微机原理及接口技术5 -- MCS51单片机概述

MCS-51 CPU 由两个部分组成&#xff1a;运算器和控制器 运算器&#xff1a;算术逻辑单元&#xff08;ALU&#xff09;、位处理器、累加器 ACC 等组成&#xff1b; 控制器&#xff1a;主要有内部晶振和一些定时、控制逻辑组成 存储器 拥有三个存储器地址空间 程序存储器地址…

【内网穿透】Linux服务使用宝塔面板搭建网站,并内网穿透实现公网远程访问

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 转载自cpolar极点云文章&#xff1a;Linux使用宝塔面板搭建网站&#xff0c;并内网穿透实现公网访问 前言 宝塔面板作为简单好用的服务器运维管理面板&#xf…

第七章 商品详情三

流程&#xff1a; 1、用户在订单服务&#xff08;192.168.232.101&#xff09;下单后&#xff0c;订单服务以生产者身份往rabbitmq&#xff08;192.168.232.104&#xff09;推送消息&#xff0c;下单后将减库存信息推送到rabbitmq 2、数据worker&#xff08;192.168.232.100&…

造船码头行车/电动葫芦限位器无线应用

一、应用背景 近年来&#xff0c;我国造船业在高技术船舶研发和建造方面持续取得新突破&#xff0c;据统计截止到2022年&#xff0c;我国造船业完工量、新接订单量、手持订单量三大指标国际市场份额均保持世界前列。连续13年位居全球居首。随着船舶制造的综合能力不断提高&…

【算法与数据结构】459、LeetCode重复的子字符串

文章目录 一、题目二、解法2.1 暴力破解法2.2 KMP算法2.3 Sunday算法2.4 官方查找算法 三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 2.1 暴力破解法 思路分析&#xff1a;子串多次循环才能构成整个…

【回溯算法part03】| 39.组合总和、40.组合总和||、131.分割回文串

目录 &#x1f388;LeetCode39. 组合总和 &#x1f388;LeetCode40.组合总和|| &#x1f388;LeetCode131.分割回文串 &#x1f388;LeetCode39. 组合总和 链接&#xff1a;39.组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 …

nuxt3 fullpage.js踩坑, fullpage.js 全屏滚动

nuxt3 fullpage.js踩坑&#xff0c; fullpage.js 全屏滚动, fullpage is underfind 我用的是 nuxt 3.6.1 1.引入 fullpage.js(3.0.1), 下载地址 github链接&#xff0c;下载后放到assets文件下 app: {head: {script: [{ src: /assets/fullpage.js, type: "text/javascript…

[BitSail] Connector开发详解系列二:SourceSplitCoordinator

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 ource Connector 本文将主要介绍创建、管理Split的角色SplitCoordinator。 SourceSplitCoordinator 大数据处理框架的核心目的就是将大规模的数据拆分成为多个合理…

皂液机低功耗红外测距感应方案 免触碰红外感应模块WTU201F2 B004

近年来&#xff0c;随着卫生意识的提高&#xff0c;自动感应设备在公共场所、家庭和工作场所中变得越来越重要。在这个领域中&#xff0c;皂液机的自动感应功能成为了关键。为了提供更为智能、高效的用户体验&#xff0c;深圳唯创知音推出了全新的皂液机红外测距感应方案——WT…