vxe-table 尾部合计使用

本文介绍了如何在Vxe-table组件中使用内置的合计功能,包括设置`show-footer`和`footer-method`,以及注意事项如数据初始化时机和合并单元格的处理。还提供了代码示例和表尾点击事件的处理方法。

vxe-table有自带的合计,文档比较繁琐

先看图

官方文档是这么说的

通过表尾来实现合计功能,设置 show-footer show-footer 和 footer-method 设置表尾数据,结果返回一个二维数组
需要注意的是表尾的调用并非实时的,而是在 data 初始化时才会触发执行;如果要达到实时调用请手动调用 updateFooter 方法
(注:footer-method 表尾的数据都是自行生成的,该示例仅供参考)

先上代码:

 <vxe-table
          class="mytable-footer"
          border
          show-footer
          max-height="400"
          :row-config="{isHover: true}"
          :footer-method="footerMethod"
          :merge-footer-items="mergeFooterItems"
          show-footer="true"
          @footer-cell-click="footerClick"
          :data="tableData1">
          <vxe-column type="seq" width="60"></vxe-column>
          <vxe-column field="name" title="Name" sortable></vxe-column>
          <vxe-column field="sex" title="Sex"></vxe-column>
          <vxe-column field="age" title="Age"></vxe-column>
          <vxe-column field="amount" title="Amount"></vxe-column>
        </vxe-table>
import NP from "number-precision"
sumNum(list, field) {
      let count = 0;
      list.forEach((item) => {
        count = NP.plus(
          count,
          Number(item[field] === undefined ? 0 : item[field])
        );
      });
      return count;
    },
  //表尾点击事件
 footerClick({ items, $rowIndex, column, columnIndex, $columnIndex, $event }){
  //获取点击的数据
   console.log(items[$columnIndex])
 },
 footerMethod({ columns, data }) {
      return [
        columns.map((column, columnIndex) => {
          if (
            ["age", "amount"].includes(column.property)
          ) {
            return this.sumNum(data, column.property);
          }
          return null;
        }),
      ];
    },

merge-footer-items这个属性主要是合并单元格:

data里面要先声明mergeFooterItems:[]

记住不要在data里面定义数据,不然页面一刷新就恢复原状

要在赋值tableData1里面push

{ row: 0, col: 0, rowspan: 0, colspan: 11 },

col表示从第几个开始,colspan表示从第几个结束,11其实只是合并到10

使用 `vxe-table` 时,若需要在表格尾部显示多行合计数据,可以通过配置 `footer-method` 和 `footer-data` 属性实现自定义的合计逻辑。`vxe-table` 提供了灵活的接口,允许开发者根据业务需求定义多行的合计内容。 ### 配置方式 #### 使用 `footer-method` `footer-method` 是一个函数,用于自定义表格尾部的数据生成逻辑。该函数接收一个参数 `params`,其中包含表格的数据和列信息,可以基于这些信息生成多行合计数据。 示例如下: ```html <template> <vxe-table :data="tableData" :footer-method="footerMethod" show-footer footer-cell-class-name="footer-cell" > <vxe-column type="seq" width="60"></vxe-column> <vxe-column field="item1" title="项目1"></vxe-column> <vxe-column field="item2" title="项目2"></vxe-column> <vxe-column field="item3" title="项目3"></vxe-column> <vxe-column field="item4" title="项目4"></vxe-column> </vxe-table> </template> ``` ```javascript export default { data() { return { tableData: [ { item1: 100, item2: 200, item3: 300, item4: 400 }, { item1: 150, item2: 250, item3: 350, item4: 450 }, ], }; }, methods: { footerMethod({ columns, data }) { const sums = columns.map((column, columnIndex) => { if (columnIndex === 0) { return '合计'; } const values = data.map(item => Number(item[column.property])); return values.reduce((sum, val) => sum + (isNaN(val) ? 0 : val), 0); }); const bonus = sums[1] + sums[3]; // 假设店员奖金是项目1和项目3的和 return [ sums, columns.map((column, columnIndex) => { if (columnIndex === 0) { return '店员奖金'; } if (columnIndex === 1 || columnIndex === 3) { return sums[columnIndex]; } return columnIndex === 2 ? '' : bonus; }), ]; }, }, }; ``` #### 使用 `footer-data` 如果需要更精确地控制每一行的数据显示,可以使用 `footer-data` 属性,直接提供一个二维数组作为表格尾部的数据源。 ```javascript export default { data() { return { tableData: [ { item1: 100, item2: 200, item3: 300, item4: 400 }, { item1: 150, item2: 250, item3: 350, item4: 450 }, ], footerData: [ [ '合计', 250, // item1 合计 450, // item2 合计 650, // item3 合计 850, // item4 合计 ], [ '店员奖金', 250, // item1 合计 '', // 空值 650, // item3 合计 900, // 店员奖金总计 ], ], }; }, }; ``` ```html <template> <vxe-table :data="tableData" :footer-data="footerData" show-footer> <vxe-column type="seq" width="60"></vxe-column> <vxe-column field="item1" title="项目1"></vxe-column> <vxe-column field="item2" title="项目2"></vxe-column> <vxe-column field="item3" title="项目3"></vxe-column> <vxe-column field="item4" title="项目4"></vxe-column> </vxe-table> </template> ``` ### 注意事项 -使用 `footer-method` 时,返回的二维数组决定了尾部显示的行数和每行的内容。 - 如果需要展示更复杂的逻辑(如动态计算),可以在 `footer-method` 中进行更详细的处理[^1]。 - `footer-data` 更适合静态数据或预处理完成的数据展示。
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值