TableTotal.vue 4.94 KB
<template>
  <a-card :bordered="false">
    <a-table
      rowKey="rowIndex"
      bordered
      :columns="columns"
      :dataSource="dataSource"
      :pagination="ipagination"
      @change="handleTableChange"
    >
    </a-table>
  </a-card>
</template>

<script>
  export default {
    name: 'TableTotal',
    data() {
      return {
        columns: [
          {
            title: '#',
            width: '180px',
            align: 'center',
            dataIndex: 'rowIndex',
            customRender: function (text, r, index) {
              return (text !== '合计') ? (parseInt(index) + 1) : text
            }
          },
          {
            title: '姓名',
            dataIndex: 'name',
          },
          {
            title: '贡献点',
            dataIndex: 'point',
          },
          {
            title: '等级',
            dataIndex: 'level',
          },
          {
            title: '更新时间',
            dataIndex: 'updateTime',
          },
        ],
        /* 分页参数 */
        ipagination:{
          current: 1,
          pageSize: 10,
          pageSizeOptions: ['10', '20', '30'],
          showTotal: (total, range) => {
            return range[0] + "-" + range[1] + " 共" + total + "条"
          },
          showQuickJumper: true,
          showSizeChanger: true,
          total: 0
        },
        dataSource: [
          { id:"1",name: '张三', point: 23, level: 3, updateTime: '2019-8-14' },
          { name: '小王', point: 6, level: 1, updateTime: '2019-8-13' },
          { name: '李四', point: 53, level: 8, updateTime: '2019-8-12' },
          { name: '小红', point: 44, level: 5, updateTime: '2019-8-11' },
          { name: '王五', point: 97, level: 10, updateTime: '2019-8-10' },
          { name: '小明', point: 33, level: 2, updateTime: '2019-8-10' },
          { name: '小张', point: 33, level: 2, updateTime: '2019-8-10' },
          { name: '小六', point: 33, level: 2, updateTime: '2019-8-10' },
          { name: '小五', point: 33, level: 2, updateTime: '2019-8-10' },
          { name: '小赵', point: 33, level: 2, updateTime: '2019-8-10' },
          { name: '李华', point: 33, level: 2, updateTime: '2019-8-10' },
          { name: '小康', point: 33, level: 2, updateTime: '2019-8-10' },
          { name: '小鹿', point: 33, level: 2, updateTime: '2019-8-10' },
        ],
        newArr:[],
        newDataSource:[],
      }
    },
    mounted() {
      // this.tableAddTotalRow(this.columns, this.dataSource)
      /*新增分页合计方法*/
      this.newDataSource=this.dataSource
      this.dataHandling(this.ipagination.pageSize-1)
    },
    watch:{
      'ipagination.pageSize':function(val) {
        this.dataHandling(val-1)
      }
    },
    methods: {
      /** 表格增加合计行 */
      tableAddTotalRow(columns, dataSource) {
        let numKey = 'rowIndex'
        let totalRow = { [numKey]: '合计' }
        columns.forEach(column => {
          let { key, dataIndex } = column
          if (![key, dataIndex].includes(numKey)) {

            let total = 0
            dataSource.forEach(data => {
              total += /^\d+\.?\d?$/.test(data[dataIndex]) ? Number.parseInt(data[dataIndex]) : Number.NaN
              console.log(data[dataIndex], ':', (/^\d+\.?\d?$/.test(data[dataIndex]) ? Number.parseInt(data[dataIndex]) : Number.NaN))
            })

            if (Number.isNaN(total)) {
              total = '-'
            }
            totalRow[dataIndex] = total
          }
        })

        dataSource.push(totalRow)
      },
      handleTableChange(pagination, filters, sorter) {
        this.ipagination = pagination;
      },
      /*如果分页走这个方法*/
      dataHandling(num) {
        this.newArr=[];
        let arrLength = this.newDataSource.length; // 数组长度;
        let index = 0;
        for (let i = 0; i < arrLength; i++) {
          if (i % num === 0 && i !== 0) {
            this.newArr.push(this.newDataSource.slice(index, i));
            index = i;
          }
          if ((i + 1) === arrLength) {
            this.newArr.push(this.newDataSource.slice(index, (i + 1)));
          }
        }
        var arrs=this.newArr;
        for (let i =0;i<arrs.length;i++){
          let arr = arrs[i];
          let newArr= { };
          newArr.name="-";
          newArr.updateTime="-";
          newArr.rowIndex="合计"
          var level=0;
          var point=0;
          for (let j=0;j<arr.length;j++){
            level+=arr[j].level;
            point+=arr[j].point;
          }
          newArr.level=level;
          newArr.point=point;
          arrs[i].push(newArr);
        }
        var newDataSource=[];
        for (let i =0;i<arrs.length;i++){
          let arr = arrs[i];
          for(var j in arr){
            newDataSource.push(arr[j]);
          }
        }
        console.log(this.dataSource)
        this.dataSource = Object.values(newDataSource);
        console.log(this.dataSource)
      }
    }
  }
</script>

<style scoped>

</style>