0


Vue使用ElementUI对table的指定列进行合算

前言

最近有一个想法,就是记录自己花销的时候,table中有一项内容是花销的金额。然后想在table的底部有一项内容是该金额的总计。

然后我就顺着elementui的table组件寻找相关的demo,还真发现了一个这样的demo。

在这里插入图片描述

对于这个demo,官方是这么描述的:

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

通过描述可以发现几个要点:

1.可以通过show-summary开启在表格尾部展示合计行,默认是false,改成true即可开启,第一列不进行数据求合操作。
2.尾部合计的文案默认是合计,可以通过sum-text自定义修改
3.可以通过summary-method编写一个函数,自定义合计的逻辑

在这里插入图片描述

官方的原生代码如下:

  1. <template><el-table
  2. :data="tableData"
  3. border
  4. show-summary
  5. style="width: 100%"><el-table-column
  6. prop="id"
  7. label="ID"
  8. width="180"></el-table-column><el-table-column
  9. prop="name"
  10. label="姓名"></el-table-column><el-table-column
  11. prop="amount1"
  12. sortable
  13. label="数值 1"></el-table-column><el-table-column
  14. prop="amount2"
  15. sortable
  16. label="数值 2"></el-table-column><el-table-column
  17. prop="amount3"
  18. sortable
  19. label="数值 3"></el-table-column></el-table><el-table
  20. :data="tableData"
  21. border
  22. height="200":summary-method="getSummaries"
  23. show-summary
  24. style="width: 100%; margin-top: 20px"><el-table-column
  25. prop="id"
  26. label="ID"
  27. width="180"></el-table-column><el-table-column
  28. prop="name"
  29. label="姓名"></el-table-column><el-table-column
  30. prop="amount1"
  31. label="数值 1(元)"></el-table-column><el-table-column
  32. prop="amount2"
  33. label="数值 2(元)"></el-table-column><el-table-column
  34. prop="amount3"
  35. label="数值 3(元)"></el-table-column></el-table></template><script>
  36. export default{data(){return{
  37. tableData:[{
  38. id:'12987122',
  39. name:'王小虎',
  40. amount1:'234',
  41. amount2:'3.2',
  42. amount3:10},{
  43. id:'12987123',
  44. name:'王小虎',
  45. amount1:'165',
  46. amount2:'4.43',
  47. amount3:12},{
  48. id:'12987124',
  49. name:'王小虎',
  50. amount1:'324',
  51. amount2:'1.9',
  52. amount3:9},{
  53. id:'12987125',
  54. name:'王小虎',
  55. amount1:'621',
  56. amount2:'2.2',
  57. amount3:17},{
  58. id:'12987126',
  59. name:'王小虎',
  60. amount1:'539',
  61. amount2:'4.1',
  62. amount3:15}]};},
  63. methods:{getSummaries(param){const{ columns, data }= param;const sums =[];
  64. columns.forEach((column, index)=>{if(index ===0){
  65. sums[index]='总价';return;}const values = data.map(item =>Number(item[column.property]));if(!values.every(value =>isNaN(value))){
  66. sums[index]= values.reduce((prev, curr)=>{const value =Number(curr);if(!isNaN(value)){return prev + curr;}else{return prev;}},0);
  67. sums[index]+=' 元';}else{
  68. sums[index]='N/A';}});return sums;}}};</script>

接下来就改造下代码,根据自己的需求去修改对应的逻辑。

show-summary合计项初始化

首先把相关的代码加上,初始化就是这样的一个效果

在这里插入图片描述

在这里插入图片描述

sum-tex修改文案

但是默认的文案是合计,有时候我们可能需要根据自己的场景进行修改

这时候就可以使用sum-tex属性进行修改了,比如我这里修改:

sum-text="总共消费

在这里插入图片描述

效果马上就来

在这里插入图片描述

但是这时候还有一个问题,我只想要消费金额这一列进行汇总,但是现在的情况是把table全部的列都汇总了。甚至把我的字典值都汇总了。。。

这显然不符合我的需求,这时候就可以使用自定义函数了。

在这里插入图片描述

summary-method自定义函数

和前面两个属性一样,直接加在table中即可。由于它的值是一个函数,所以写法和前两位略有不同。

在这里插入图片描述

在这里插入图片描述

我们也可以再这个函数里面通过 sums[index] 去定义总价的文案,如果sum-text和函数里面定义的 sums[index] 有冲突,会以函数中的 sums[index] 文案为主

在这里插入图片描述

这时候的效果是这样的。

在这里插入图片描述

自定义总计列

单个列

如果我们只想要对某一列进行总计,那么可以借助column的property属性:

在这里插入图片描述

可以发现其实就是全部的属性名称,那么我们就可以根据它判断,实现自定义核算了

在这里插入图片描述

比如这里我想要核算amount这一列的值:

在这里插入图片描述

在这里插入图片描述

多个列

如果哪天又加了一个需求,需要再算一个列,这时候在判断里面加上这个条件即可。使用|| 拼接该列

比如这里我又要合算remark这一列。就可以这么写:

在这里插入图片描述

在这里插入图片描述

相关代码如下:

  1. <el-table
  2. :data="moneyTableData.slice((currentPage-1)*pagesize,currentPage*pagesize)"
  3. highlight-current-row
  4. border
  5. stripe
  6. fit
  7. show-summary
  8. sum-text="总共消费":summary-method="getSummaries">// 对列进行合算getSummaries(param){const{ columns, data }= param;const sums =[];
  9. columns.forEach((column, index)=>{if(index ===0){
  10. sums[index]='总共消费';return;}const values = data.map(item =>Number(item[column.property]));// 只对amount这一列进行总计核算。if(column.property ==='amount'){if(!values.every(value =>isNaN(value))){
  11. sums[index]= values.reduce((prev, curr)=>{const value =Number(curr);if(!isNaN(value)){return prev + curr;}else{return prev;}},0);
  12. sums[index]+=' 元';}else{
  13. sums[index]='---'}}});return sums;},

总结

ElemenUI对这个demo封装的特别好,我们直接拿来用修改下自己的逻辑即可。


本文转载自: https://blog.csdn.net/weixin_46713508/article/details/129367881
版权归原作者 小花皮猪 所有, 如有侵权,请联系我们删除。

“Vue使用ElementUI对table的指定列进行合算”的评论:

还没有评论