封装element-table合计行Hooks方法

背景:

 在我们常做的后台管理系统中,经常的会遇到关于表格合计行的计算以及显示,如下图,我们采用的是element框架这一套

封装:

由于考虑到该需求是最常见的,每个中心可能都会涉及到,我们封装公共方法,放在utils/tools这个方法下

export const useSummary = (has) => {
  // 定义一个名为 getSummary 的函数,接受一个对象参数 { columns, data }
  const getSummary = ({ columns, data }) => {
    // 创建一个空数组 sums 用于存储计算结果
    const sums = []

    // 遍历 columns 数组
    columns.forEach((column, index) => {
      // 如果索引为 0,即第一列
      if (index === 0) {
        // 设置 sums 数组的第一个元素为 '合计'
        sums[index] = '合计'
        return
      }

      // 输出日志,显示 column.property 的值
      console.log('[column.property]', [column.property])

      // 判断 has 对象中是否存在 column.property 属性
      if ([column.property] in has) {
        // 计算相应列的合计值,使用 BigNumber 库处理精度问题
        sums[index] = data?.reduce(
//3.加法
          (p, i) => new BigNumber(p).plus(i[column.property] || 0).toString(),
          0
        )

        // 如果计算出的合计值不是一个有效的数字,则将其设置为 0
        isNaN(Number(sums[index])) && (sums[index] = 0)

        // 将计算出的合计值存储到 has 对象中,使用 column.property 作为属性名
        has[column.property] = sums[index]
      }
    })

    // 返回计算结果数组 sums
    return sums
  }

  // 返回一个包含 has 和 getSummary 的对象
  return { has, getSummary }
}

使用:

引入方法

  import { useSummary } from "@/utils/tools";

在data这里声明

data(vm) {

      const { getSummary } = useSummary({

        num: 0,

        num2: 0,

        money: 0,

      });

      return {

        list,

      };

    },

 

给table主要加两个属性

:summary-method="getSummary"

 show-summary

封装的table 认为是el-table就行

  <CustomTable

            ref="contractTable"

            stripe

            :data="list"

            :column.sync="columns"

            :table-id-name="$route.path"

            row-key="index"

            :reserve-selection="true"

            min-height="400"

            max-height1="500"

            :summary-method="getSummary"

            show-summary

            @selection-change="handleSelectionChange"

          />

 
//数据解构如下 主要对money,num2,num计算

const list = [

  {

    setPrdCode: "123",

    setProductName: "销售奖123",

    setProductName2: "销售奖345",

    setProductStatus: "Y",

    setProductStatusName: "生效",

    salesOrgCode: ["A00000000550", "A00100000033"],

    salesOrgName: "网络大区",

    money: 653.33,

    num: 33,

    num2: 1288,

  },

{

    setPrdCode: "8888",

    setProductName: "销售奖888",

    setProductName2: "销售奖999",

    setProductStatus: "N",

    setProductStatusName: "失效",

    salesOrgCode: ["A00000034000", "A00100024000", "A0010140000"],

    salesOrgName: "东北大区",

    money: 888.88,

    num: 12,

    num2: 12,

  },

]

结束: 

分享的方法很简单 感觉有需要的小伙伴可以自取,谢谢您的观看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值