SOURCE

console 命令行工具 X clear

                    
>
console
var Main = {
      data() {
        return {
          tableData: []
        }
      },
      created() {
        this.getList()
      },
      methods: {
        spanMethod({ row, column, rowIndex, columnIndex }) {
          if (columnIndex === 1 || columnIndex === 2) {
            // 连续的数量
            let continuousNumber = this.getContinuousNumber(row, rowIndex)
            // 是否与上一个相同
            let isPrevSame = this.getPrevSame(row, rowIndex)
            if (continuousNumber >= 1) {
              // 连续数量大于等于1 的,向下合并 continuousNumber 个单元格
              // 如果当前 gradeCode 和上一条数据相同,不显示当前数据,则 colspan  rowspan 为0
              return {
                rowspan: isPrevSame ? 0 : continuousNumber,
                colspan: isPrevSame ? 0 : 1
              };
            } else {
              return {
                rowspan: 0,
                colspan: 0
              };
            }
          }
        },
        // 获取与当前数据相邻且 gradeCode 相同的数据条数
        getContinuousNumber(row, rowIndex) {
          // 默认 number 为0
          let number = 0;
          let tableData = this.tableData || []
          //  rowIndex 开始往后循环,如果 gradeCode  row.gradeCode 相同,number++,否则跳出循环
          for(let i = rowIndex; i < tableData.length; i++) {
            if(tableData[i].gradeCode === row.gradeCode) {
              number++
            } else {
              break;
            }
          }
          return number
        },
        // 获取 gradeCode 是否与上一条数据相同
        getPrevSame(row, rowIndex) {
          if(rowIndex === 0) return false;
          let tableData = this.tableData || []
          return row.gradeCode === tableData[rowIndex - 1].gradeCode
        },
        getList() {
          let list = [
            {
              date: '2016-05-02',
              name: '王小虎',
              gradeName: '七年级',
              gradeCode: 7,
              total: 7,
              address: '上海市普陀区金沙江路 1518 弄'
            }, {
              date: '2016-05-04',
              name: '王小虎',
              gradeName: '七年级',
              gradeCode: 7,
              total: 7,
              address: '上海市普陀区金沙江路 1517 弄'
            }, {
              date: '2016-05-02',
              name: '王小虎',
              gradeName: '八年级',
              gradeCode: 8,
              total: 8,
              address: '上海市普陀区金沙江路 1518 弄'
            }, {
              date: '2016-05-04',
              name: '王小虎',
              gradeName: '八年级',
              gradeCode: 8,
              total: 8,
              address: '上海市普陀区金沙江路 1517 弄'
            }, {
              date: '2016-05-01',
              name: '王小虎',
              gradeName: '八年级',
              gradeCode: 8,
              total: 8,
              address: '上海市普陀区金沙江路 1519 弄'
            }, {
              date: '2016-05-03',
              name: '王小虎',
              gradeName: '八年级',
              gradeCode: 8,
              total: 8,
              address: '上海市普陀区金沙江路 1516 弄'
            }, {
              date: '2016-05-03',
              name: '王小虎',
              gradeName: '九年级',
              gradeCode: 9,
              total: 9,
              address: '上海市普陀区金沙江路 1516 弄'
            }
          ];
          this.tableData = list;
        }
      }
    }
var Ctor = Vue.extend(Main)
new Ctor().$mount('#app')
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/element-ui@2.15.14/lib/index.js"></script>
<div id="app">
<template>
    <el-table
      :data="tableData"
      border
      :span-method="spanMethod"
      style="width: 100%">
      <el-table-column
        prop="index"
        label="index"
        width="180">
        <template slot-scope="scope">
          {{ scope.$index + 1 }}
        </template>
      </el-table-column>
      <el-table-column
        prop="gradeName"
        label="年級"
        width="180">
      </el-table-column>
      <el-table-column
        prop="total"
        label="总计"
        width="180">
      </el-table-column>
      <el-table-column
        prop="name"
        label="姓名">
      </el-table-column>
    </el-table>
  </template>
</div>
@import url("https://cdn.jsdelivr.net/npm/element-ui@2.15.14/lib/theme-chalk/index.css");

本项目引用的自定义外部资源