jjzjj

【关于Element UI中el-table组件】summary-method属性表格底部固定两行并动态赋值

XujiRe 2023-12-24 原文

小编在开发账单表时候遇到一个需求,需要在el-table表格添加两行固定行,来统计总值。我们可以看到在各个资源社区里都有关于底部固定一行总计。但是那些都是直接将上面的总值相加起来获得上面所有行的总计值。然而小编这里的需求是将后端返回的数据填充到我们固定的那两行中去。
因此社区里的资源就不符合小编的开发需求了。我们先来看看将所有行相加得出总计行的值的代码是如何的。
一、底部固定一行总计行并得出总计值
1.首先就是在el-table中使用summary-method属性,设置:summary-method=“getSummaries”,这一步是必要的。
2.编写getSummaries()方法函数

getSummaries({ columns, data }) {
  const sums = [];
  columns.forEach((column, index) => {
     if (index === 0) {
        sums[index] = '合计';//可更改合计行的名称
        return;
     }
     const values = data.map(item => {
        return Number(item[column.property])//property为表头的prop值
     });
     // every() 方法用于检测values数组所有元素是否都符合指定条件(通过函数提供)
     if (!values.every(value => isNaN(value))) {
        sums[index] = values.reduce((prev, curr) => {
	        const value = Number(curr);//Number转换为数值
	        let sum =Number(Number(prev) + Number(curr)).toFixed(2);//toFixed(2)数据项保留两位小数
	        if (!isNaN(value)) {
	            return sum;
	        } else {
	            return prev;
	        }
        }, 0);
        sums[index] += '元';//给合计项添加单位元
     } else {
        sums[index] = '';
     }
  });
  return sums;//返回sums数组,sums数组中各项就会显示在合计行的各列中
},

这样出来的我们就可以得到单行固定的一个底部总计行了。
那么如何才能弄出底部固定两行,并且返回的值根据后端的数据能够动态修改呢?

二、底部固定两行,并使用后端返回值动态改变
1.我们同样在el-table中使用summary-method属性,设置:summary-method=“getSummaries”
2.编写getSummaries()方法函数

getSummaries(param) {
   const { columns, data } = param;
   let that = this;
   const sums = [];
   columns.forEach((column, index) => {
     if (index === 0) {
       sums[index] = '合计';
       return;
     }
     if (index === 2) {
     	//可以看到小编这里使用ref属性,对标签进行绑定,为什么呢?
       sums[index] = <div ref="voucherType"></div>
       return;
     }
     if (index === 3) {
       sums[index] = <div ref="billDate"></div>
       return;
     }
     //使用<br/>标签使得数据换行,这样就可以得到固定两行效果
     if (index === 4) {
       sums[index] = <p class="count_row">本期合计<br /><br />本年合计<br /></p>
       return;
     }
     if (index === 5) {
       sums[index] = <p class="count_row"><div  ref="borrowAmount1"></div><br /><div  ref="borrowAmount2"></div></p>
       return;
     }
     if (index === 6) {
       sums[index] = <p class="count_row"><div  ref="loanAmount1"></div><br /><div  ref="loanAmount2"></div></p>
       return;
     }
     if (index === 7) {
       sums[index] = <p class="count_row"><div  ref="direction1"></div></p>
       return;
     }
     if (index === 8) {
       sums[index] = <p class="count_row"><div  ref="balance1"></div><br /><div  ref="balance2"></div></p>
       return;
     }
     //这里小编为什么要另出一个赋值呢?因为小编index为1列,怎么使用动态数据都不得行,所以小编直接让index为1的列等于上面的字符,刚好都是一样的
     if (column.property === "areaName") { // 判断当前prop绑定的ID
       const values = data.map(item => (item[column.property]))// 把对应一列中的之全部取出,放到一个数组中
       sums[index] = values.reduce((prev, curr) => {
         return curr
       }, 0)
     }
   });
   return sums;
 },

3.我们可以看到上面的div标签小编都使用ref属性,那么为什么呢?因为小编使用的是后台数据动态赋值。当我们请求到数据的时候使用ref对标签内容进行修改赋值。

//使用setTimeout延时器,等待给标签一些渲染时间
setTimeout(function(){
  _this.$nextTick(() => {
    _this.$refs.direction1.innerHTML = _this.AllCount.yearAmount.direction == 1?'借':'平';
    _this.$refs.voucherType.innerHTML = _this.AllCount.yearAmount.voucherType;
    _this.$refs.billDate.innerHTML = _this.AllCount.yearAmount.billDate;
    _this.$refs.borrowAmount1.innerHTML = _this.AllCount.currentAmount.borrowAmount == null?'0元':_this.AllCount.currentAmount.borrowAmount+'元';
    _this.$refs.borrowAmount2.innerHTML = _this.AllCount.yearAmount.borrowAmount == null?'0元':_this.AllCount.yearAmount.borrowAmount+'元';
    _this.$refs.loanAmount1.innerHTML = _this.AllCount.currentAmount.loanAmount == null?'0元':_this.AllCount.currentAmount.loanAmount+'元';
    _this.$refs.loanAmount2.innerHTML = _this.AllCount.yearAmount.loanAmount == null?'0元':_this.AllCount.yearAmount.loanAmount+'元';
    _this.$refs.balance1.innerHTML = _this.AllCount.currentAmount.balance == null?'0元':_this.AllCount.currentAmount.balance+'元';
    _this.$refs.balance2.innerHTML = _this.AllCount.yearAmount.balance == null?'0元':_this.AllCount.yearAmount.balance+'元';
  })
},1)

好了,这是小编对于el-table的summary-method的一些使用。有更好的方法的小伙伴们记得跟小编分享一下你们的开发经验哦!

有关【关于Element UI中el-table组件】summary-method属性表格底部固定两行并动态赋值的更多相关文章

  1. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  2. Ruby 元类 : why three when defined singleton methods? - 2

    让我们计算MRI范围内的类别:defcount_classesObjectSpace.count_objects[:T_CLASS]endk=count_classes用类方法定义类:classAdefself.foonilendend然后运行:putscount_classes-k#=>3请解释一下,为什么是三个? 最佳答案 查看MRI代码,每次你创建一个Class时,在Ruby中它是Class类型的对象,ruby会自动为这个新类创建“元类”类,这是另一个单例类型的Class对象。C函数调用(class.c)是:rb_define

  3. ruby-on-rails - Rails 中的 NoMethodError::MailersController#preview undefined method `activation_token=' for nil:NilClass - 2

    似乎无法为此找到有效的答案。我正在阅读Rails教程的第10章第10.1.2节,但似乎无法使邮件程序预览正常工作。我发现处理错误的所有答案都与教程的不同部分相关,我假设我犯的错误正盯着我的脸。我已经完成并将教程中的代码复制/粘贴到相关文件中,但到目前为止,我还看不出我输入的内容与教程中的内容有什么区别。到目前为止,建议是在函数定义中添加或删除参数user,但这并没有解决问题。触发错误的url是http://localhost:3000/rails/mailers/user_mailer/account_activation.http://localhost:3000/rails/mai

  4. ruby-on-rails - Prawn PDF : I need to generate nested tables - 2

    我需要一个表,其中行实际上是2行表,一个嵌套表是..我怎样才能在Prawn中做到这一点?也许我需要延期..但哪一个? 最佳答案 现在支持子表:Prawn::Document.generate("subtable.pdf")do|pdf|subtable=pdf.make_table([["sub"],["table"]])pdf.table([[subtable,"original"]])end 关于ruby-on-rails-PrawnPDF:Ineedtogeneratenested

  5. ruby - 怎么来的(a_method || :other) returns :other only when assigning to a var called a_method? - 2

    给定以下方法:defsome_method:valueend以下语句按我的预期工作:some_method||:other#=>:valuex=some_method||:other#=>:value但是下面语句的行为让我感到困惑:some_method=some_method||:other#=>:other它按预期创建了一个名为some_method的局部变量,随后对some_method的调用返回该局部变量的值。但为什么它分配:other而不是:value呢?我知道这可能不是一件明智的事情,并且可以看出它可能有多么模棱两可,但我认为应该在考虑作业之前评估作业的右侧...我已经在R

  6. ruby - 使用 rbenv 和 ruby​​-build 构建 ruby​​ 失败,出现 undefined symbol : SSLv2_method - 2

    我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby​​2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby​​-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm

  7. ruby - "undefined method"用于 rails 模型 - 2

    我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom

  8. ruby - 从另一个私有(private)方法中使用 self.xxx() 调用私有(private)方法 xxx,导致错误 "private method ` xxx' called” - 2

    我正在尝试获得良好的Ruby编码风格。为防止意外调用具有相同名称的局部变量,我总是在适当的地方使用self.。但是现在我偶然发现了这个:classMyClass上面的代码导致错误privatemethodsanitize_namecalled但是当删除self.并仅使用sanitize_name时,它会起作用。这是为什么? 最佳答案 发生这种情况是因为无法使用显式接收器调用私有(private)方法,并且说self.sanitize_name是显式指定应该接收sanitize_name的对象(self),而不是依赖于隐式接收器(也是

  9. ruby 代码 : why put colon in front of variable name (inside initialize method) - 2

    我遇到了一些Ruby代码,我试图理解为什么变量在initialize方法声明中的名称末尾有冒号。冒号有什么原因吗?attr_reader:var1,:var2definitialize(var1:,var2:)@var1=var1@var2=var2end 最佳答案 那些是关键字参数。您可以按名称而非位置使用它们。例如ThatClass.new(var1:42,var2:"foo")或ThatClass.new(var2:"foo",var1:42)Anarticleaboutkeywordargumentsbythoughtbot

  10. ruby-on-rails - 关于 Ruby 的一般问题 - 2

    我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia

随机推荐