当前位置:   article > 正文

element-ui中el-table数据合并行和列,应该怎么解决_el-table列合并

el-table列合并

最近接到一个任务,要实现一个数据报表,涉及到很多合并问题,一开始想着原生会简单点,实际上很麻烦,最后还是用elemen-ui中table自带的合并方法.

最终的效果是要做成这种:1.数据处理,后端返回来的数据是,一个大对象,包含三个数组,既然合并,肯定是要处理成一个数组,并且要把相同的追加一个属性,后面根据这个属性进行合并处理.

2.页面结构代码

  1. <div class="p-title-header">
  2. <span>日期:{{ currentDate }}</span>
  3. <span>门诊业务信息日报表</span>
  4. <span>单位: 元</span>
  5. </div>
  6. <el-table
  7. :data="tableData1"
  8. ref="recordTable"
  9. :span-method="arraySpanMethod1"
  10. border
  11. :cell-style="{ textAlign: 'center' }"
  12. :header-cell-style="{ textAlign: 'center' }"
  13. :row-style="{ height: '0' }"
  14. >
  15. <el-table-column prop="name" label="类型" width="100"> </el-table-column>
  16. <el-table-column prop="docName" label="疫苗种类"> </el-table-column>
  17. <el-table-column prop="serviceCount" label="日业务量"> </el-table-column>
  18. <el-table-column prop="totalFee" label="单价"> </el-table-column>
  19. <el-table-column label="当日确认收入">
  20. <el-table-column prop="vaccineIncome" label="疫苗收入">
  21. </el-table-column>
  22. <el-table-column prop="vaccinateIncome" label="接种收入">
  23. </el-table-column>
  24. </el-table-column>
  25. </el-table>

2.请求回来的数据,进行数据处理

  1. // 获取数据
  2. getDataList() {
  3. let params = {};
  4. this.filter.forEach((item) => {
  5. if (item.value && item.type != "daterange") {
  6. params[item.key] = item.value;
  7. }
  8. if (item.value && item.type == "daterange") {
  9. params.visitDateStart = item.value[0];
  10. params.visitDateEnd = item.value[1];
  11. }
  12. });
  13. // if (
  14. // !this.filter.some((item) => item.type === "daterange" && item.value)
  15. // ) {
  16. // this.$message.error('请选择要查询的日期范围')
  17. // return;
  18. // }
  19. this.$http({
  20. method: "post",
  21. url: "/report/forms/reportQuery",
  22. mode: "main",
  23. data: params,
  24. })
  25. .then((res) => {
  26. console.log(res, "666-res");
  27. })
  28. .catch((err) => {
  29. console.log(err, "555-err");
  30. let arr = [];
  31. let arr1 = err.data.listCheck;
  32. let arr2 = err.data.listVaccine;
  33. let arr3 = err.data.listSpecial;
  34. arr1.map((val) => {
  35. return { ...(val.name = "疫苗接种") };
  36. });
  37. arr1.push({
  38. name: "疫苗接种",
  39. docName: "疫苗接种收入合计",
  40. vaccineIncome: err.data.listVaccine[0].vaccineIncomeAmount,
  41. });
  42. arr2.map((val) => {
  43. return { ...(val.name = "个人检测") };
  44. });
  45. arr2.push({
  46. name: "个人检测",
  47. docName: "个人检测收入合计",
  48. vaccineIncome: err.data.listCheck[0].vaccineIncomeAmount,
  49. });
  50. arr3.map((val) => {
  51. return { ...(val.name = "特色健康门诊") };
  52. });
  53. arr3.push({
  54. name: "特色健康门诊",
  55. docName: "特色健康门诊收入合计",
  56. vaccineIncome: err.data.listSpecial[0].vaccineIncomeAmount,
  57. });
  58. let arr4 = [
  59. {
  60. name: "当日确认收入合计",
  61. vaccinateIncome: err.data.listVaccine[0].vaccinateAllAmount,
  62. },
  63. ];
  64. console.log(err.data.listCheck, 22222);
  65. // this.tableData1 = arr
  66. // .concat(arr1)
  67. // .concat(arr2)
  68. // .concat(arr3)
  69. // .concat(arr4);
  70. this.tableData1 = [...arr, ...arr1, ...arr2, ...arr3, ...arr4];
  71. console.log(this.tableData1, "099090909090");
  72. });
  73. },

4.合并公共方法

  1. // 合并公共方法
  2. flitterData(arr) {
  3. let spanOneArr = [],
  4. spanTwoArr = [],
  5. concatOne = 0;
  6. arr.forEach((item, index) => {
  7. if (index === 0) {
  8. spanOneArr.push(1);
  9. spanTwoArr.push(1);
  10. } else {
  11. // 只需要将 span_name 修改为自己需要合并的字段名即可
  12. if (item.name === arr[index - 1].name) {
  13. // 第一列需合并相同内容的判断条件
  14. spanOneArr[concatOne] += 1;
  15. spanOneArr.push(0);
  16. } else {
  17. spanOneArr.push(1);
  18. concatOne = index;
  19. }
  20. }
  21. });
  22. return {
  23. one: spanOneArr,
  24. };
  25. },

5.合并方法,这里是要根据自己的业务请求进行调整处理的

  1. // 合并方法
  2. arraySpanMethod1({ row, column, rowIndex, columnIndex }) {
  3. // console.log(rowIndex, columnIndex)
  4. if (columnIndex == 0) {
  5. const _row = this.flitterData(this.tableData1).one[rowIndex];
  6. if (row.name == "当日确认收入合计") {
  7. return [1, 1];
  8. } else {
  9. return {
  10. rowspan: _row,
  11. colspan: 1,
  12. };
  13. }
  14. }
  15. if (
  16. row.docName == "个人检测收入合计" ||
  17. row.docName == "特色健康门诊收入合计" ||
  18. row.docName == "疫苗接种收入合计"
  19. ) {
  20. if (columnIndex == 1) return [1, 3];
  21. else if (columnIndex == 4) return [1, 2];
  22. else return [0, 0];
  23. }
  24. },

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

闽ICP备14008679号