element plus的table合并单元格

element的table合并单元格

就element+中的el-table中的span-method方法的使用和遇到的一些问题
如果想要将后一列挨着的单元格合并,return 1,2,但是得将后一个单元格设置为 0,0,不然会被推走

<template>
  <div>
    <el-table
      :data="tableData"
      :span-method="arraySpanMethod"
      border
      style="width: 100%"
    >
      <el-table-column prop="id" label="ID" width="180" />
      <el-table-column prop="name" label="Name" />
      <el-table-column prop="amount1" sortable label="Amount 1" />
      <el-table-column prop="amount2" sortable label="Amount 2" />
      <el-table-column prop="amount3" sortable label="Amount 3" />
    </el-table>

    <el-table
      :data="tableData"
      :span-method="objectSpanMethod"
      border
      style="width: 100%; margin-top: 20px"
    >
      <el-table-column prop="id" label="ID" width="180" />
      <el-table-column prop="name" label="Name" />
      <el-table-column prop="amount1" label="Amount 1" />
      <el-table-column prop="amount2" label="Amount 2" />
      <el-table-column prop="amount3" label="Amount 3" />
    </el-table>
  </div>
</template>

<script lang="ts" setup>
import type { TableColumnCtx } from 'element-plus'

interface User {
  id: string
  name: string
  amount1: string
  amount2: string
  amount3: number
}

interface SpanMethodProps {
  row: User
  column: TableColumnCtx<User>
  rowIndex: number
  columnIndex: number
}

const arraySpanMethod = ({
  row,
  column,
  rowIndex,
  columnIndex,
}: SpanMethodProps) => {
  if (rowIndex % 2 === 0) {
    if (columnIndex === 0) {
      return [1, 2]
    } else if (columnIndex === 1) {
      return [0, 0]
    }
  }
}

const objectSpanMethod = ({
  row,
  column,
  rowIndex,
  columnIndex,
}: SpanMethodProps) => {
  if (columnIndex === 0) {
    if (rowIndex % 2 === 0) {
      return { //这里表示,单前单元格和后一列的单元格合并
        rowspan: 1,
        colspan: 2,
      }
    } 
    else { //返回11表示此单元显示
      return {
        rowspan: 1,
        colspan: 1,
      }
    }
  }else if(columnIndex === 1){
    if (rowIndex % 2 === 0) {
      return { //返回00表示此单元格移出
        rowspan: 0,
        colspan: 0,
      }
    } 
    else {
      return {
        rowspan: 1,
        colspan: 1,
      }
    }
  }
}

const tableData: User[] = [
  {
    id: '合计',
    name: 'Tom',
    amount1: '234',
    amount2: '3.2',
    amount3: 10,
  },
  {
    id: '12987123',
    name: 'Tom',
    amount1: '165',
    amount2: '4.43',
    amount3: 12,
  },
  {
    id: '合计',
    name: 'Tom',
    amount1: '324',
    amount2: '1.9',
    amount3: 9,
  },
  {
    id: '12987125',
    name: 'Tom',
    amount1: '621',
    amount2: '2.2',
    amount3: 17,
  },
  {
    id: '合计',
    name: 'Tom',
    amount1: '539',
    amount2: '4.1',
    amount3: 15,
  },
]
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element Plus是一套基于Vue.js 2.0的桌面端组件库,其中的table表格组件支持合并单元格。在Element Plus中,我们可以通过设置span-method属性来自定义合并单元格的方法。具体来说,我们需要在data中定义一个方法,该方法接收两个参数:row和column,分别表示当前单元格所在的行和列。在该方法中,我们可以根据需要返回一个对象,该对象包含两个属性:rowspan和colspan,分别表示需要合并的行数和列数。例如,如果我们需要将第一列中相同的单元格合并,可以编写如下的span-method方法: ``` spanMethod({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { let rowspan = 1; for (let i = rowIndex + 1; i < this.tableData.length; i++) { if (this.tableData[i][columnIndex] === this.tableData[rowIndex][columnIndex]) { rowspan++; } else { break; } } return { rowspan, colspan: 1 }; } } ``` 在上述代码中,我们首先判断当前单元格是否为第一列,如果是,则遍历该列下面的所有单元格,找到相同的单元格并计算需要合并的行数,最后返回一个包含rowspan和colspan属性的对象即可。 除了自定义span-method方法外,我们还可以通过设置column的属性来实现合并单元格。具体来说,我们可以在column中设置prop属性来指定需要合并的列,然后在需要合并的单元格中设置rowspan和colspan属性即可。例如,如果我们需要将第一列中相同的单元格合并,可以编写如下的column配置: ``` columns: [ { label: '入库编号', prop: 'batchNo', rowspan: ({ row, column, rowIndex, columnIndex }) => { if (columnIndex === 0) { let rowspan = 1; for (let i = rowIndex + 1; i < this.tableData.length; i++) { if (this.tableData[i][columnIndex] === this.tableData[rowIndex][columnIndex]) { rowspan++; } else { break; } } return rowspan; } } }, { label: '供应商', prop: 'supplierName', rowspan: ({ row, column, rowIndex, columnIndex }) => { if (columnIndex === 1) { let rowspan = 1; for (let i = rowIndex + 1; i < this.tableData.length; i++) { if (this.tableData[i][columnIndex] === this.tableData[rowIndex][columnIndex]) { rowspan++; } else { break; } } return rowspan; } } }, // 其他列的配置 ] ``` 在上述代码中,我们在column中设置了prop属性来指定需要合并的列,然后在需要合并的单元格中设置了rowspan属性来指定需要合并的行数。需要注意的是,rowspan属性可以是一个函数,该函数接收一个参数,该参数包含row、column、rowIndex和columnIndex四个属性,分别表示当前单元格所在的行、列以及行索引和列索引。在该函数中,我们可以根据需要返回需要合并的行数即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值