Vue----动态表格如何简单实现

效果图如下:

具体实现:

<el-table :data="tableList" :cell-style="cellStyle" :span-method="objectSpanMethod" :header-cell-style="{textAlign: 'center'}" border style="width: 100%">
  <el-table-column v-for="item in tableColumns" :key="item.prop" :prop="item.prop" align='center' :label="item.label"/>
</el-table>

data中的数据如下:

tableList: [
  {
    name:'北京',
    dept:'财务部',
    column_0:'1.0',
    column_1:'0.0',
  },
  {
    name:'北京',
    dept:'财务部',
    column_0:'1.0',
    column_1:'0.0',
  },
  {
    name:'北京',
    dept:'合计',
    column_0:'2.0',
    column_1:'0.0',
  },
  {
    name:'南京',
    dept:'业务部',
    column_0:'2.0',
    column_1:'1.0',
  },
  {
    name:'南京',
    dept:'合计',
    column_0:'2.0',
    column_1:'1.0',
  }
],
//动态表头
tableColumns: [
  {label: "省市", prop: "name"},
  {label: "部门", prop: "dept"},
  {label: "金额1", prop: "column_0"},
  {label: "金额2", prop: "column_1"}
], 

methods下实现方式:

methods: {
  cellStyle({ row, column, rowIndex, columnIndex }) {
    if (row.dept == '合计') {
      return {
        backgroundColor: '#ffaf48',
        color:'black',
        fontWeight:'bold'
      }
    } else {
      return 'background-color: white;';
    }
  },
  objectSpanMethod({ row, column, rowIndex, columnIndex }) {
    if (columnIndex === 0) {
      // 获取当前单元格的值
      const currentValue = row[column.property];
      // 获取上一行相同列的值
      const preRow = this.tableList[rowIndex - 1];
      const preValue = preRow ? preRow[column.property] : null;
      // 如果当前值和上一行的值相同,则将当前单元格隐藏
      if (currentValue === preValue) {
        return { rowspan: 0, colspan: 0 };
      } else {
        // 否则计算当前单元格应该跨越多少行
        let rowspan = 1;
        for (let i = rowIndex + 1; i < this.tableList.length; i++) {
          const nextRow = this.tableList[i];
          const nextValue = nextRow[column.property];
          if (nextValue === currentValue) {
            rowspan++;
          } else {
            break;
          }
        }
        return { rowspan, colspan: 1 };
      }
    }
  },

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值