首页 > 其他分享 >el-table表格合并头,多级表头,合并列,合并列数据处理(2024-05-22)

el-table表格合并头,多级表头,合并列,合并列数据处理(2024-05-22)

时间:2024-05-26 13:04:54浏览次数:27  
标签:el rowspan return name 05 合并 表头 address 2016

1、多级表头合并表头

数据结构比较复杂的时候,可使用多级表头来展现数据的层次关系。

<el-table-column>标签按照合并的层级放置标签即可实现,数据是正常的二维数据。

<template>
  <el-table
    :data="tableData"
    style="width: 100%">
    <el-table-column
      prop="date"
      label="日期"
      width="150">
    </el-table-column>
    <el-table-column label="配送信息">
      <el-table-column
        prop="name"
        label="姓名"
        width="120">
      </el-table-column>
      <el-table-column label="地址">
        <el-table-column
          prop="province"
          label="省份"
          width="120">
        </el-table-column>
        <el-table-column
          prop="address"
          label="地址"
          width="300">
        </el-table-column>
    </el-table-column>
  </el-table>
</template>

<script>
  export default {
    data() {
      return {
        tableData: [{
          date: '2016-05-03',
          name: '王胡',
          province: '上海',
          address: '上海市普陀区金沙江路',
        }, {
          date: '2016-05-02',
          name: '王胡',
          province: '上海',
          address: '上海市普陀区金沙江路',
        }, {
          date: '2016-05-04',
          name: '大可',
          province: '广州',
          address: '广州天河区黄埔大道112号',
        }, {
          date: '2016-05-04',
          name: '大可',
          province: '广州',
          address: '广州天河区黄埔大道112号',
        }]
      }
    }
  }
</script>

表头多级且合并


2、表数据合并列或者行数据

通过给table传入span-method方法可以实现合并行或列,方法的参数是一个对象,里面包含当前行row、当前列column、当前行号rowIndex、当前列号columnIndex四个属性。

该函数可以返回一个包含两个元素的数组,第一个元素代表rowspan,第二个元素代表colspan。 也可以返回一个键名为rowspancolspan的对象。

(1)合并行数据

<template>
  <el-table
    :data="tableData"
    :span-method="objectSpanMethod"
    style="width: 100%">
    <el-table-column
      prop="date"
      label="日期"
      width="150">
    </el-table-column>
    <el-table-column label="配送信息">
      <el-table-column
        prop="name"
        label="姓名"
        width="120">
      </el-table-column>
      <el-table-column label="地址">
        <el-table-column
          prop="province"
          label="省份"
          width="120">
        </el-table-column>
        <el-table-column
          prop="address"
          label="地址"
          width="300">
        </el-table-column>
    </el-table-column>
  </el-table>
</template>

<script>
  export default {
    data() {
      return {
        tableData: [{
          date: '2016-05-03',
          name: '王胡',
          province: '上海',
          address: '上海市普陀区金沙江路',
        }, {
          date: '2016-05-02',
          name: '王胡',
          province: '上海',
          address: '上海市普陀区金沙江路',
        }, {
          date: '2016-05-04',
          name: '大可',
          province: '广州',
          address: '广州天河区黄埔大道112号',
        }, {
          date: '2016-05-04',
          name: '大可',
          province: '广州',
          address: '广州天河区黄埔大道112号',
        }]
      };
    },
    methods: {
      objectSpanMethod({ row, column, rowIndex, columnIndex }) {
        let filed = 'name',tableFiled = 'tableData'
        if (column.property === filed) {
          const prevRow = this[tableFiled][rowIndex - 1];
          if (prevRow && (row[filed] === prevRow[filed])) {
            return {
              rowspan: 0,
              colspan: 1
            };
          } else {
            let rowspan = 1;
            for (let i = rowIndex + 1; i < this[tableFiled].length; i++) {
              if (this[tableFiled][i][filed] === row[filed]) {
                rowspan++;
              } else {
                break;
              }
            }
            return {
              rowspan,
              colspan: 1
            };
          }
        }
      },

    }
  }
</script>

(2)合并列数据

<template>
  <el-table
    :data="tableData"
    :span-method="arraySpanMethod"
    style="width: 100%">
    <el-table-column
      prop="date"
      label="日期"
      width="150">
    </el-table-column>
    <el-table-column label="配送信息">
      <el-table-column
        prop="name"
        label="姓名"
        width="120">
      </el-table-column>
      <el-table-column label="地址">
        <el-table-column
          prop="province"
          label="省份"
          width="120">
        </el-table-column>
        <el-table-column
          prop="address"
          label="地址"
          width="300">
        </el-table-column>
        <el-table-column
          prop="address"
          label="电话"
          width="300">
        </el-table-column>
    </el-table-column>
  </el-table>
</template>

<script>
  export default {
    data() {
      return {
        tableData: [{
          date: '2016-05-03',
          name: '王胡',
          phone: '15526445588',
          province: '上海',
          address: '上海市普陀区金沙江路',
        }, {
          date: '2016-05-02',
          name: '王胡',
          phone: '15526445588',
          province: '上海',
          address: '上海市普陀区金沙江路',
        }, {
          date: '2016-05-04',
          name: '大可',
          phone: '18855426782',
          province: '广州',
          address: '广州天河区黄埔大道112号',
        }, {
          date: '2016-05-04',
          name: '大可',
          phone: '18855426782',
          province: '广州',
          address: '广州天河区黄埔大道112号',
        }]
      };
    },
    methods: {
      arraySpanMethod({ row, column, rowIndex, columnIndex }) {
        if (rowIndex === 0) { // 用于设置合并开始的行号, 只要找到开始合并的行,在返回值当中,返回合并的行的数量,并且利用最后一个else,返回return {rowspan: 0, colspan: 0},就能够完成我们合并行的需求。
          if (columnIndex === 0) {
            return {
              rowspan: 1, //自定义行数, 1行
              colspan: 1  //自定义列数   第0列开始1列 【0】
            };
          } else if (columnIndex === 1) {
            return {
              //不做操作
              rowspan: 1,  // 1行
              colspan: 1   // 第1列开始1列  【1】
            };
          }else if (columnIndex === 2) {
            return {
              //不做操作
              rowspan: 1,  // 1行
              colspan: 2   // 第2列开始合并2列 【2,3】
            };
          }else if (columnIndex === 4) {
            return {
              //不做操作
              rowspan: 1,  // 1行
              colspan: 1   // 第4列开始1列 【4】
            };
          }else{
            return {
              //不做操作
              rowspan: 1, 
              colspan: 0
            };
          }
        }
      },

    }
  }
</script>

解析:if (rowIndex  === 1) {

用于设置合并开始的行号, 只要找到开始合并的行,在返回值当中,返回合并的行的数量,并且利用最后一个else,返回return {rowspan: 0, colspan: 0},就能够完成我们合并行的需求。

方法中 if 所要判断的是仅仅是从哪一行开始合并,然和返回结果为合并多少行、多少列

标签:el,rowspan,return,name,05,合并,表头,address,2016
From: https://blog.csdn.net/hap1994/article/details/139087653

相关文章

  • Shell 小技能
    这也是一种编程。Shell是一门短小精悍的胶水型语言,可以组合各种Linux实用工具进行日常临时任务处理。Shell就像一把匕首,其强大之处,在于能够灵活组合能力。掌握Shell命令组合方式也是一个实用编程小技能。Shell组合Shell命令组合主要有如下方式:|:管道符号,将上一......
  • DcatAdmin 多对多关联是,multipleSelect 报错 Array to string conversion
    classActivityextendsModel{//定义关联关系publicfunctionadminUsers(){//中间表$pivotTable='activity_admin_users';//关联模型类名$relatedModel=AdminUser::class;return$this->belongsToMany($......
  • Java项目:校园周边美食探索(java+SpringBoot+Mybaits+Vue+elementui+mysql)
    源码获取:俺的博客首页"资源"里下载! 项目介绍基于Springboot+vue实现的校园周边美食探索及分享平台本系统包含管理员、用户两个角色。管理员:用户管理、美食鉴赏管理、好友管理、收藏管理、系统管理用户:登录、注册、个人中心管理、美食鉴赏管理、好友管理、收藏管理......
  • changie 预处理release changelog 工具
    changie提供了比较友好的changelogs说明changelog的一些原则记住日志是写给人而非机器的每个版本都应该有独立的入口同类改动应该分组放置不同版本应分别设置链接新版本在前,旧版本在后应包括每个版本的发布日期注明是否遵守语义化版本规范changie提供的一些changes......
  • select_range
    Functionselect_range(start_title_strAsString,end_title_strAsString,Optionalstyle_strAsString="标题1")AsBoolean'选择范围,通过指定本标题字符串(start_title_str)和下一个标题字符串(end_title_str),选择它们之间的内容'若是end_title_str为空,则认为......
  • IntelliJ IDEA Community Edition 下载安装
    文章目录下载安装包安装中文插件卸载下载安装包下载IntelliJIDEA–领先的Java和KotlinIDE根据你的电脑操作系统选择合适的版本:IntelliJIDEAUltimate为付费版本,我们需要往下滑找到IntelliJIDEACommunityEdition,点击Download(如果需要,可以点击展开选......
  • react框架对Excel文件进行上传和导出
    1.首先需要安装xlsx第三方的库库引入插件npminstallxlsx在react引入import*asXLSXfrom'xlsx';1,首先设置jsx部分的 以下代码包含有导入excel文件和导出excel文件,读着可以根据需要,自己选择想要实现的功能 代码如下(示例)://importReactfrom'react';importR......
  • 如何使用 Channel 类来创建一个生产者-消费者模型
    如何使用Channel类来创建一个生产者-消费者模型.NET中Channel类简单使用 Channel是干什么的TheSystem.Threading.Channelsnamespaceprovidesasetofsynchronizationdatastructuresforpassingdatabetweenproducersandconsumersasynchronously.Theli......
  • helium
    helium⏲️ReleaseDate//2020-11-22✔️MD5//6c034ba16620358483d344f0572ad020☠Root//187......
  • THREE.JS中 CubeTextureLoader 使用避坑
    最近在跟着教程学THREE.JS,毕竟在现在的前端开发市场上,THREE.JS太火爆了。今天学到“纹理”这一块的时候,跟着教程敲代码,发现自己的没有正确显示,百思不得其解,打开控制台发现,如下WARNING:localhost/:1[.WebGL-000060380A191C00]GL_INVALID_VALUE:Eachcubemapfacemusthavee......