el-table 列分页

news2024/11/28 3:44:31

在这里插入图片描述

<template>
  <div>
    <el-table
      :data="tableData"
      :key="tampTime"
      style="width: 100%">
      <el-table-column
        prop="name"
        label="姓名"
        width="180">
      </el-table-column>
      <el-table-column
        prop="age"
        label="年龄"
        width="180">
      </el-table-column>
      <el-table-column
        prop="gender"
        label="性别">
      </el-table-column>
      <el-table-column
        v-for="(item, index) in showColData"
        :key="index"
        :label="item.colLabel">
        <template slot="header">
          <div class="custom-header-cell">
            <span class="label">{{item.colLabel}}</span>
            <template v-if="colPage.totalPage > 1">
              <div v-if="!index" :class="['prev-btn', {disabled: colPage.current === 1}]" @click="handlePrev">上一页</div>
              <div v-if="index === showColData.length - 1" :class="['next-btn', {disabled: colPage.current === colPage.totalPage}]" @click="handleNext">下一页</div>
            </template>
          </div>
        </template>
        <template slot-scope="scope">
          {{ scope.row.colData[item.index].colValue }}
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

<script>

export default {
  data () {
    return {
      tableData: [],
      fullColData: [],
      showColData: [],
      colPage: {
        current: 1,
        size: 10,
        totalPage: 0
      },
      tampTime: ''
    }
  },
  created () {
    this.initTableData()
  },
  methods: {
    // 模拟一些数据
    initTableData () {
      const result = []
      for (let i = 0; i < 10; i++) {
        const obj = {
          name: '张三',
          age: 18,
          gender: '男',
          colData: []
        }
        for (let j = 0; j < 40; j++) {
          obj.colData.push({
            colLabel: `${j + 1}`,
            colValue: `${i + 1}_${j + 1}`
          })
        }
        result.push(obj)
      }
      this.tableData = result
      this.initColData()
    },
    // 初始化列
    initColData () {
      const { tableData, colPage } = this
      const { colData: fullColData } = tableData[0]
      // 添加索引,用于取数据
      fullColData.forEach((item, index) => {
        item.index = index
      })
      this.fullColData = fullColData
      let showColData = fullColData
      if (fullColData.length > colPage.size) {
        showColData = fullColData.slice(0, 10)
      }
      this.showColData = showColData

      this.colPage.totalPage = Math.ceil(fullColData.length / colPage.size)
    },
    // 上一页
    handlePrev () {
      let { current } = this.colPage
      if (current > 1) {
        current--
        this.colPage.current = current
        this.changeCellData()
      }
    },
    // 下一页
    handleNext () {
      let { current, totalPage } = this.colPage
      if (current < totalPage) {
        current++
        this.colPage.current = current
        this.changeCellData()
      }
      this.$forceUpdate()
    },
    // 根据页数改变列数据
    changeCellData () {
      const { colPage, fullColData } = this
      const startSlice = (colPage.current - 1) * colPage.size
      const endSlice = startSlice + colPage.size
      const showColData = fullColData.slice(startSlice, endSlice)
      this.showColData = showColData
      this.tampTime = new Date().valueOf()
    }
  }
}
</script>

<style lang="scss" scoped>
::v-deep .el-table {
  // 默认是 hidden 按钮超出会隐藏
  .el-table__header-wrapper,
  th.el-table__cell,
  .cell {
    overflow: visible;
  }
  .custom-header-cell {
    position: relative;
    .label {
      position: relative;
      z-index: 2;
      color: #000;
    }
    .prev-btn,
    .next-btn {
      width: 20px;
      padding: 6px 0;
      position: absolute;
      z-index: 9;
      top: -12px;
      background-color: #3f3fbb;
      color: #fff;
      text-align: center;
      font-weight: 400;
      line-height: 18px;
      transition: all .4s;
      &:hover {
        cursor: pointer;
        opacity: .8;
      }
      &.disabled {
        cursor: not-allowed;
        background-color: #a6a7e2;
      }
    }
    .prev-btn {
      left: -30px;
    }
    .next-btn {
      right: -10px;
    }
  }
}
</style>

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

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

相关文章

使用vscode实现远程开发,并通过内网穿透在公网环境下远程连接

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

Windows11恢复组策略编辑器功能的方法

原因分析 日常工作学习中,对 Windows 计算机上的问题进行故障排除时,有些高级用户经常使用组策略编辑器轻松修复它。通过其分层结构,您可以快速调整应用于用户或计算机的设置。如果搜索结果中缺少组策略编辑器,则可能必须使用注册表编辑器作为疑难解答工具,这是一种更复杂…

Unity Perception合成数据生成、标注与ML模型训练

在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D场景编辑器 任何训练过机器学习模型的人都会告诉你&#xff0c;模型是从数据得到的&#xff0c;一般来说&#xff0c;更多的数据和标签会带来更好的性能。 …

算法:Java构建二叉树并递归实现二叉树的前序、中序、后序遍历

先自定义一下二叉树的类&#xff1a; // Definition for a binary tree node. public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left…

LLM推理部署(二):英伟达LLM推理部署工具TensorRT-LLM

在大模型时代&#xff0c;各大公司在陆续推出和优化各自的底座大模型&#xff0c;不断刷新榜单&#xff0c;然而大模型的超大参数给生产部署带来了很大的困难&#xff0c;由此也带来大模型部署框架的蓬勃发展&#xff08;可以参考之前写的LLM推理部署&#xff08;一&#xff09…

如何快速学习编程编程?

语言的选择 选择适合自己的编程语言学习主流的编程语言了解不同语言的特点和适用场景学习资源线上学习资源&#xff1a;在线课程、视频教程、GitHub等线下学习资源&#xff1a;书籍、教程、练习题等 社区交流 加入编程社区&#xff0c;与他人交流学习心得和经验学习方法分阶…

内存空间的扩充

一、覆盖技术 解决程序大小超过物理内存总和问题 1.思想 将程序分为多个段/模块&#xff0c;常用段常驻内存&#xff0c;不常用段在需要时调入内存 2.组成 固定区(存放常驻内存&#xff0c;调入后到运行结束时才调出)覆盖区(存放不常用段&#xff0c;需要时调入&#xff0c;不需…

【优选算法系列】【专题五位运算】第一节.常见的位运算(面试题 01.01. 判定字符是否唯一和268. 丢失的数字)

文章目录 前言常见的位运算一、判定字符是否唯一 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写二、丢失的数字 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写总结 前言 常见的…

[PyTorch][chapter 60][强化学习-2-有模型学习2]

前言&#xff1a; 前面我们讲了一下策略评估的原理,以及例子. 强化学习核心是找到最优的策略&#xff0c;这里 重点讲解两个知识点&#xff1a; 策略改进 策略迭代与值迭代 最后以下面环境E 为例&#xff0c;给出Python 代码 。 目录&#xff1a; 1&#xff1a; 策略改进 2&…

FSCTF2023-MISC部分WP

FSCTF2023-MISC部分WP 前言&#xff1a;MISC&#xff1a;[FSCTF 2023]Simple Encryption&#xff1a;[FSCTF 2023]萧河&#xff1a;[FSCTF 2023]base套&#xff1a;[FSCTF 2023]行不行啊细狗&#xff1a;[FSCTF 2023]为什么不换换思路捏:[FSCTF 2023]小试牛刀&#xff1a;[FSCT…

Redis内存满的最佳解决方案

文章目录 前言造成内存满原因数据量过大键过期机制不合理内存碎片内存泄漏大量短期数据存储 解决方案1.增加内存2.设置过期时间2.1.在set命令中指定过期时间(秒):2.2.在set命令中指定过期时间(毫秒):2.3.使用expire命令为已有key设置过期时间(秒):2.4.使用pexpire命令为已有key…

Git复制代码

目录 一、常用下载代码 1.登录Git克隆SSH​编辑 2.新建文件然后右键点击Git Bash Here 3.git clone Paste 二. 本地下载 1.从本地进入页面 2.生成代码——>导入——>生成代码后下载 3.解压道相应位置 一、常用下载代码 1.登录Git克隆SSH 2.新建文件然后右键点击…

大厂面试题-什么是拆包和粘包?怎么解决?

目录 问题分析 问题解答 问题分析 拆包和粘包是在网络编程中比较常见的现象。 因为TCP协议底层是面向流的传输&#xff0c;所以数据在传输的过程中会被分割成一个个的数据包(如图) 接收端在接收数据时需要重新组装数据包&#xff0c;但是TCP协议不保证数据包与应用层的数据…

ch0_OSI 七层网络协议介绍

目录 概述 1、三网融合的概念 三网&#xff1a;电信网络、有线电视网络、计算机网络 概念&#xff1a;把上述三种网络融合成一种网络 2、计算机网络的定义、分类 定义&#xff1a;计算机网络是将地理位置不同的独立计算机系统&#xff0c;通过传输介质链接起来&#xff0c…

JS中null和undefined的区别

首先 Undefined 和 Null 都是基本数据类型&#xff0c;这两个基本数据类型分别都只有一个值&#xff0c;就是 undefined 和 null。 undefined 代表的含义是未定义&#xff0c;null 代表的含义是空对象。一般变量声明了但还没有定义的时候会返回 undefined&#xff0c;null主要…

Python基础(11)-- numpy.argpartition函数

1.前言 在深挖自己研究领域的代码过程中&#xff0c;发现np.argpartition函数出现在核心代码部分&#xff0c;并且出现的频率很高&#xff0c;对于我理解这段代码也有很大的帮助&#xff0c;决定彻底搞懂&#xff0c;话不多说&#xff0c;Let’s go&#xff01; 2.函数解析 …

企业级API资产如何管理

在当今数字化时代&#xff0c;API已成为企业开发和创新的重要工具&#xff0c;如何高效地管理和调度这些资产成为了企业发展的重要课题。API资产管理的出现&#xff0c;为企业解决了这一难题&#xff0c;通过合理管理和利用API资产&#xff0c;企业可以更好地推动业务发展&…

vue工程化开发和脚手架

工程化开发和脚手架 1.开发Vue的两种方式 核心包传统开发模式&#xff1a;基于html / css / js 文件&#xff0c;直接引入核心包&#xff0c;开发 Vue。工程化开发模式&#xff1a;基于构建工具&#xff08;例如&#xff1a;webpack&#xff09;的环境中开发Vue。 工程化开…

漏洞复现--XXL-JOB默认accessToken身份绕过漏洞

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…