当前位置:   article > 正文

element组件库的table组件设置数据自定义汇总已经合计放到表头_elementui表格合计放到顶部

elementui表格合计放到顶部

1.自定义数组汇总(自定义方法)

①添加自定义方法getSummaries

  1. <el-table show-summary :summary-method="getSummaries"></el-table>

②自定义方法累加

  1. getSummaries(param) {
  2. const { columns, data } = param;
  3. const sums = [];
  4. columns.forEach((column, index) => {
  5. // column 是每一列,index 表示列的索引,第一列的时候不计算合计,显示自定义的文字内容
  6. if (index === 0) {
  7. sums[index] = '合计';
  8. return;
  9. }
  10. //下面这一坨代码就是把每一列中的所有单元格中的值转化成Number型,
  11. //然后对转化后的结果进行判断,如果是number型,则进行累加,
  12. //如果NaN型,说明单元格里是一些无法转化成number型的值,则返回自定义的内容
  13. // console.log(this.noticeList);
  14. const values = data.map(item => Number(item[column.property]));
  15. // console.log(column);
  16. // 判断需要统计数据的列
  17. if (column.property === 'arrivalQty'||column.property === 'qty'||column.property === 'costPrice'||column.property === 'arrivalCostPrice'||column.property === 'transitQty'||column.property === 'amount'||column.property === 'arrivalAmount'||column.property === 'transitAmount') {
  18. sums[index] = values.reduce((prev, curr) => {
  19. const value = Number(curr);
  20. if (!isNaN(value)) {
  21. return prev + curr;
  22. } else {
  23. return prev;
  24. }
  25. }, 0);
  26. if(column.property === 'transitQty'||column.property === 'arrivalQty'){
  27. // 处理数据的格式为千分位逗号隔开
  28. sums[index]=sums[index].toLocaleString('zh-CN').replace(/\./g, '');
  29. // console.log(sums[index]);
  30. }
  31. else{
  32. // 处理数据的格式为千分位逗号隔开,数据保留两位小数
  33. sums[index]=sums[index].toLocaleString('zh-CN', {style: 'currency',currency: 'CNY',}).slice(1)
  34. }
  35. } else {
  36. sums[index] = '/';
  37. }
  38. });
  39. // console.log(sums);
  40. return sums;
  41. },

2.后端传入汇总数据拼接

将汇总的数据加入到获取的表格数据的第一行

  1. await getSumNoticeList(this.queryParams).then(res=>{
  2. this.noticeList = res.rows;
  3. })
  4. await getsummaryListTotal(this.queryParams).then(res=>{
  5. this.noticeList.unshift(res.rows[0])
  6. })

如果需要排序控制汇总的数据保持在第一行,可以加上一个@sort-change="soltHandle"方法

  1. soltHandle (column) {
  2. //不参与排序的数组
  3. let freeGood = []
  4. //参与排序的数组
  5. let elseFree = []
  6. //fieldName 为对应列的prop
  7. let fieldName = column.prop
  8. let sortingType = column.order
  9. console.log(fieldName,sortingType);
  10. //降序
  11. if (sortingType == "descending") {
  12. this.noticeList.forEach((item,index) => {
  13. //在整个tableData中找到不参与排序的所有数据
  14. if (index==0) {
  15. //不参与排序的所有数据加到数组中
  16. freeGood.push(item)
  17. }
  18. else {
  19. //参与排序的数据
  20. elseFree.push(item)
  21. }
  22. })
  23. this.noticeList = elseFree.sort((a, b) => {
  24. if (typeof a[fieldName] == 'string') {
  25. return b[fieldName].localeCompare(a[fieldName])
  26. } else if (typeof a[fieldName] == 'number') {
  27. return b[fieldName] - a[fieldName]
  28. }
  29. })
  30. this.noticeList = [...freeGood,...this.noticeList ]
  31. } else {
  32. this.noticeList.forEach((item,index) => {
  33. if (index==0) {
  34. freeGood.push(item)
  35. } else {
  36. elseFree.push(item)
  37. }
  38. })
  39. this.noticeList = elseFree.sort((a, b) => {
  40. if (typeof a[fieldName] == 'string') {
  41. return a[fieldName].localeCompare(b[fieldName])
  42. } else if (typeof a[fieldName] == 'number') {
  43. return a[fieldName] - b[fieldName]
  44. }
  45. })
  46. this.noticeList = [...freeGood,...this.noticeList ]
  47. }
  48. console.log(this.noticeList);
  49. },

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/686737
推荐阅读
相关标签
  

闽ICP备14008679号