TableTotal.vue 4.76 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: this.$t('system.updateTime'),
          dataIndex: 'updateTime',
        },
      ],
      /* 分页参数 */
      ipagination: {
        current: 1,
        pageSize: 10,
        pageSizeOptions: ['10', '20', '30'],
        showTotal: (total, range) => {
          return range[0] + "-" + range[1] + " " + this.$t('list.showing') + " " + total + " " + this.$t('list.records')
        },
        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>