elementUI的表格单元格合并

在Vue项目中使用elementui的el-table列表,从后台请求的列表动态数据其中有版本和任务两个字段(列)都会有重复,需要合并行单元格

查看elementui文档,可以给 el-table 传入一个 span-method 方法,接收一个参数{ row, column, rowIndex, columnIndex },四个属性分别为当前行数据,当前列数据,当前行号,当前列号。方法返回一个数组 [rowspan, colspan] 或者 对象 { rowspan: 0, colspan: 2 },表示合并的行和列

上代码
el-table 中的代码
<el-table
	v-loading="loading"
    :data="tableData"
    :span-method="arraySpanMethod"
    v-auto-height:maxHeight="-10"
    :max-height="maxHeight"
    border
>
    <el-table-column
        prop="versionName"
        label="版本"
        align="center"
     />
     <el-table-column
        prop="taskName"
        label="任务名称"
        align="center"
      />
      <el-table-column
        prop="cycle"
        label="轮次"
        align="center"
      />
      <el-table-column
        prop="caseTotal"
        label="Case 总数"
        align="center"
      />
      <el-table-column
        prop="successNum"
        label="成功数"
        align="center"
      />
      <el-table-column
        prop="failNum"
        label="失败数"
        align="center"
      />
</el-table>
js 代码
<script>
export default {
  name: 'TestReport',
  data() {
    return {
      loading: true,
      tableData: [],
      // 用于存储列表中需要合并的单元格和合并数
      versionSpanArr: [],
      taskSpanArr: [],
    }
  },
  created() {
    this.getTestReport()
  },
  methods: {
    // 获取表格数据
    async getTestReport() {
      this.loading = true
      try {
        const { data } = await getReport()
        this.tableData = data.casesResult
        // 从后台获取到列表数据之后,执行getSpanNum,要在DOM渲染之前即arraySpanMethod调用之前完成调用
        this.getSpanNum('versionName', 'versionSpanArr')
        this.getSpanNum('taskName', 'taskSpanArr')
      } catch (error) {
        console.log(error)
      } finally {
        this.loading = false
      }
    },
    // 重点:首先获取需要合并的单元格以及合并行数
    getSpanNum(spanName, spanArrName) {
      // 由于我有两列都需要合并,spanName, spanArrName 两个参数只是为了方便复用
      // spanName是需要合并的列的字段键名,spanArrName是接收需要合并的列的数据,初始化在data中
      this[spanArrName] = []
      let contantDot = 0
      this.tableData.forEach((item, index) => {
        if (index === 0) {
          // 第一列
          this[spanArrName].push(1)
        } else {
          // 判断与上一行的值是否一样
          if (item[spanName] === this.tableData[index - 1][spanName]) {
            this[spanArrName][contantDot] += 1
            this[spanArrName].push(0)
          } else {
            // contantDot记录当前需要合并的行
            contantDot = index
            this[spanArrName].push(1)
          }
        }
      })
    },
    // 表格单元格合并绑定的函数
    arraySpanMethod({ row, column, rowIndex, columnIndex }) {
      if (columnIndex === 0) {
        // 第一列,版本,与上一行值相同的this.versionSpanArr[rowIndex]都为0
        if (this.versionSpanArr[rowIndex]) {
          return {
            // rowspan 合并的行数
            rowspan: this.versionSpanArr[rowIndex],
            colspan: 1
          }
        } else {
          return {
            rowspan: 0,
            colspan: 0
          }
        }
      } else if (columnIndex === 1) {
        // 第二列,任务
        if (this.taskSpanArr[rowIndex]) {
          return {
            rowspan: this.taskSpanArr[rowIndex],
            colspan: 1
          }
        } else {
          return {
            rowspan: 0,
            colspan: 0
          }
        }
      }
    }
  }
</script>
Element UI是一个基于Vue 2.0的桌面端组件库,它提供了丰富的组件来帮助开发者快速构建优雅的用户界面。其中,表格组件支持展示数据的各种形式,包括树形结构的表格,而单元格合并则是通过表格合并单元格功能来实现的。 在Element UI中,表格树形结构的合并单元格通常需要结合表格的`span-method`属性来使用。`span-method`属性允许我们定义一个方法,该方法返回一个对象,对象中的`row`、`column`、`rowspan`和`colspan`分别表示当前单元格所在的行、列、需要跨越的行数和列数。通过返回的对象,可以动态地合并表格中的单元格。 下面是一个简单的例子,展示了如何在Element UI的表格中使用`span-method`来实现树形结构的合并单元格: ```javascript // 假设有一个树形数据结构 const tableData = [ { id: 1, name: '活动概述', type: '0' }, { id: 2, name: '活动方案', type: '1', parent: 1 }, // ... 更多数据 ]; export default { data() { return { tableData: tableData, // 定义合并单元格的方法 spanMethod({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { // 只有第一列需要合并 if (row.type === '0') { // 第一行合并整列 if (rowIndex % 2 === 0) { return { rowspan: 2, colspan: 1 }; } else { return { rowspan: 0, colspan: 0 }; } } else { return { rowspan: 1, colspan: 1 }; } } return { rowspan: 1, colspan: 1 }; } }; } }; ``` 在上述代码中,`spanMethod`函数被用于计算单元格是否需要合并,以及合并的行数和列数。这个函数会被调用多次,每次渲染表格的一个单元格时都会调用这个方法,并根据返回的对象来决定是否合并单元格
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值