getRowSpanMethod.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /**
  2. * 合并相同数据,导出合并列所需的方法(只适合el-table)
  3. * @param {Object} data
  4. * @param {Object} rowspanArray
  5. */
  6. export function getRowspanMethod(data, rowspanArray) {
  7. /**
  8. * 要合并列的数据
  9. */
  10. const rowspanNumObject = {};
  11. //初始化 rowspanNumObject
  12. rowspanArray.map((item) => {
  13. rowspanNumObject[item] = new Array(data.length).fill(1, 0, 1).fill(0, 1);
  14. rowspanNumObject[`${item}-index`] = 0;
  15. });
  16. //计算相关的合并信息
  17. for (let i = 1; i < data.length; i++) {
  18. rowspanArray.map((key) => {
  19. const index = rowspanNumObject[`${key}-index`];
  20. if (data[i][key] === data[i - 1][key]) {
  21. rowspanNumObject[key][index]++;
  22. } else {
  23. rowspanNumObject[`${key}-index`] = i;
  24. rowspanNumObject[key][i] = 1;
  25. }
  26. });
  27. }
  28. //提供合并的方法并导出
  29. // @ts-ignore
  30. const spanMethod = function ({ row, column, rowIndex, columnIndex }) {
  31. if (rowspanArray.includes(column['property'])) {
  32. const rowspan = rowspanNumObject[column['property']][rowIndex];
  33. if (rowspan > 0) {
  34. return { rowspan: rowspan, colspan: 1 };
  35. }
  36. return { rowspan: 0, colspan: 0 };
  37. }
  38. return { rowspan: 1, colspan: 1 };
  39. };
  40. return spanMethod;
  41. }