element Table表格el-table表尾合计行:定义合计逻辑

show-summary设置为true就会在表格尾部展示合计行。默认情况下,对于合计行,第一列不进行数据求合操作,而是显示「合计」二字(可通过sum-text配置),其余列会将本列所有数值进行求合操作,并显示出来。当然,你也可以定义自己的合计逻辑。使用summary-method并传入一个方法,返回一个数组,这个数组中的各项就会显示在合计行的各列中。

      <el-table
        :data="styleTableData"
        style="width: 100%"
        show-summary
        :summary-method="getSummaries"
      >
        <el-table-column align="center" type="selection" width="60">
        </el-table-column>
        <el-table-column align="center" label="序号" type="index" width="50">
        </el-table-column>
        <el-table-column
          align="center"
          prop="date1"
          label="组合名称"
          width="180"
        >
        </el-table-column>
        <el-table-column
          align="center"
          prop="name"
          label="组合颜色"
          width="180"
        >
        </el-table-column>
        <el-table-column align="center" prop="address" label="尺码">
        </el-table-column>
        <el-table-column align="center" prop="style" label="款号">
        </el-table-column>
        <el-table-column align="center" label="数量" prop="numaaa">
          <template slot-scope="scope">
            <el-input
              size="mini"
              @input="styleInputEdit(scope.$index, scope.row)"
              type="number"
              v-model="scope.row.numaaa"
              placeholder="数量"
            ></el-input>
          </template>
        </el-table-column>
        <el-table-column align="center" label="期望交期">
          <template slot-scope="scope">
            <el-date-picker
              size="mini"
              style="width: 100%; line-height: 28px"
              align="center"
              v-model="scope.row.date"
              type="date"
              placeholder="选择日期"
            >
            </el-date-picker>
          </template>
        </el-table-column>

        <el-table-column width="80" align="center" label="操作">
          <template slot-scope="scope">
            <el-button
              size="mini"
              type="text"
              @click="styleHandleEdit(scope.$index, scope.row)"
              >修改</el-button
            >
          </template>
        </el-table-column>
      </el-table>
    getSummaries(param) {
      // console.log("param", param);
      const { columns, data } = param;
      const sums = [];
      columns.forEach((column, index) => {
        if (index === 5) {
          sums[index] = "汇总";
          return;
        }

        const values = data.map((item) => Number(item[column.property]));
        console.log(values);
        if (!values.every((value) => isNaN(value))) {
          sums[index] = values.reduce((prev, curr) => {
            const value = Number(curr);
            if (!isNaN(value)) {
              return prev + curr;
            } else {
              return prev;
            }
          }, 0);
          sums[index] += "";
        } else {
          sums[index] = "";
        }
      });
      return sums;
    },

注意!!!
element官方文档里举例的方法const values = data.map((item) =>Number(item[column.property])); 要注意[column.property],要将计算合计的列加上prop属性,否则合计无效

相加失精问题

            if (!isNaN(value)) {
              let d = 0; //定义小数位的初始长度,默认为整数,即小数位为0
              let arr = curr;
              if (arr.toString().split(".").length > 1) {
                //判断数字是否为小数
                //获取小数位的长度
                var temp = arr.toString().split(".").length;
                //比较此数的小数位与原小数位的长度,取小数位较长的存储到d中
                d = d < temp ? temp : d;
              }
              //计算需要乘的数值
              let m = Math.pow(10, d);
              return (prev* m + curr * m) / m;
            } else {
              return prev;
            }```

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值