美文网首页
vue和原生js 计算表格合计

vue和原生js 计算表格合计

作者: 菲儿_cdd4 | 来源:发表于2021-02-20 18:45 被阅读0次

前段时间,前端实现了一个ant表格的合计,在网上找了很多方法,不过大多数都是element表格的合计,没有找见ant表格实现合计的方法。于是,借鉴了一下element实现合计的方法,把功能实现了。(自己瞎研究的方法,如果觉得我写的不对或者有更好的方法可以留言告知。)

ant表格和element表格写合计的区别:

ant表格没有 show-summary和 :summary-method="getSummaries"这两个属性,要在自定义的footer里面去调用自定义列的方法;
element表格有show-summary和 :summary-method="getSummaries"两个属性,所以直接用:summary-method去自定义列就好了。

vue ant表格合计

效果图:


image.png

html部分:

               <a-table
                    bordered
                    :loading="loading"
                    rowKey="userId"
                    :columns="columnsDetail"
                    :dataSource="dataSourceDetail"
                    :pagination="false"
                    :scroll="{ y: 350 }"
                    style="margin-bottom:30px;"
                  >
                    <span slot="waitCount" slot-scope="text, record">
                      {{ record.waitCount }}
                    </span>
                    <span slot="handledCount" slot-scope="text, record">
                      {{ record.handledCount }}
                    </span>
                    <template slot="footer" slot-scope="currentPageData">
                      <a-row>
                        <a-col
                          :span="6"
                          align="center"
                          v-for="(item, index) in getSummaries(currentPageData)"
                          :key="index"
                          >{{ item }}</a-col
                        >
                      </a-row>
                    </template>
                  </a-table>

js部分适用于ant表格和element:

   getSummaries(param) {
    //ant里面适用
      const data = param
      const columns = this.columnsDetail

   //element里面适用
   // const { columns, data } = param;

      const sums = []
      columns.forEach((column, index) => {
        if (index === 0) {
          sums[index] = '合计'
        } else if (index === 1 || index === 2 || index === 3) {
    //ant里面适用
          const values = data.map(item => Number(item[column.dataIndex]))
    //element里面适用
    // const values = data.map(item => Number(item[column.property]));
          if (!values.every(value => isNaN(value))) {
            sums[index] = values.reduce((prev, curr) => {
              const value = Number(curr)
              if (!isNaN(value)) {
                return prev + curr
              }
            }, 0)
          }
        } else {
          sums[index] = ''
        }
      })
      return sums
    },

vue element表格合计(js方法同ant的js方法)

效果图:


image.png

html部分

<el-table
          :data="tableData"
          show-summary
          :summary-method="getSummaries"
          border
          style="width: 100%"
        >
          <el-table-column prop="name" label="姓名" width="180">
          </el-table-column>
          <el-table-column prop="grade" label="数据" width="180">
          </el-table-column>
        </el-table>

注意: show-summary显示合计行,:summary-method="getSummaries"自定义合计列

使用js实现table的合计功能

效果图:


image.png

html部分:

  <table border="1" cellspacing="0" style="text-align: center;" id="table">
        <tr>
            <td>班级</td>
            <td>男生</td>
            <td>女生</td>
        </tr>
        <tr>
            <td>1班</td>
            <td>12</td>
            <td>24</td>
        </tr>
        <tr>
            <td>2班</td>
            <td>34</td>
            <td>13</td>
        </tr>
        <tr>
            <td>3班</td>
            <td>22</td>
            <td>45</td>
        </tr>
        <tr>
            <td>4班</td>
            <td>31</td>
            <td>32</td>
        </tr>
        <tr>
            <td>5班</td>
            <td>10</td>
            <td>9</td>
        </tr>
        <tr class="sum">
        </tr>
    </table>

js部分:

  <script>
        $(function () {
            var table = document.getElementById("table")
            //获取表格的行数
            var rows = table.rows
           //获取表格的列数
            var cells = table.rows.item(0).cells.length
            //每次加载完清空最后一列数据,防止二次加载出现多行数据
            $('.sum').empty()
            $('.sum').append('<td>合计</td>')
            // 如果从列开始遍历,得到的就是每一列的数据
            // 如果从行开始遍历,得到的就是每一行的数据
            for (var i = 1; i < cells; i++) {
                var sum = 0
                for (var j = 1; j < rows.length - 1; j++) {
                    sum += parseFloat(rows[j].cells[i].innerHTML.trim())
                }
                $('.sum').append('<td>' + sum + '</td>')
            }
        })
    </script>

相关文章

网友评论

      本文标题:vue和原生js 计算表格合计

      本文链接:https://www.haomeiwen.com/subject/bddsnktx.html