当前位置:   article > 正文

el-table 合并单元格(合并行)_el-table合并单元格

el-table合并单元格

1.  添加 :span-method="objectSpanMethod"

 2.  写objectSpanMethod 方法

  1. //#region 合并单元格
  2. // 这个方法是 element-ui提供的单元格合并方法
  3. // objectSpanMethod 传入了 { row, column, rowIndex, columnIndex }
  4. // row: 当前行
  5. // column: 当前列
  6. // rowIndex:当前行号
  7. // columnIndex :当前列号
  8. // 1代表:独占一行
  9. // 更大的自然数:代表合并了若干行
  10. // 0:代表“消失”的哪那一个单元格,后面的单元格向前推一格
  11. mergeCol(id, rowIndex) {
  12. debugger;
  13. // 合并单元格
  14. // id:属性名
  15. // rowIndex:行索引值
  16. var idName = this.TableData[rowIndex][id]; // 获取当前单元格的值
  17. if (rowIndex > 0) {
  18. // 判断是不是第一行
  19. // eslint-disable-next-line eqeqeq
  20. if (this.TableData[rowIndex][id] != this.TableData[rowIndex - 1][id]) {
  21. // 先判断当前单元格的值是不是和上一行的值相等
  22. var i = rowIndex;
  23. var num = 0; // 定义一个变量i,用于记录行索引值并进行循环,num用于计数
  24. while (i < this.TableData.length) {
  25. // 当索引值小于table的数组长度时,循环执行
  26. if (this.TableData[i][id] === idName) {
  27. // 判断循环的单元格的值是不是和当前行的值相等
  28. i++; // 如果相等,则索引值加1
  29. num++; // 合并的num计数加1
  30. } else {
  31. i = this.TableData.length; // 如果不相等,将索引值设置为table的数组长度,跳出循环
  32. }
  33. }
  34. return {
  35. rowspan: num, // 最终将合并的行数返回
  36. colspan: 1,
  37. };
  38. } else {
  39. return {
  40. rowspan: 0, // 如果相等,则将rowspan设置为0
  41. colspan: 1,
  42. };
  43. }
  44. } else {
  45. // 如果是第一行,则直接返回
  46. let i = rowIndex;
  47. let num = 0;
  48. while (i < this.TableData.length) {
  49. // 当索引值小于table的数组长度时,循环执行
  50. if (this.TableData[i][id] === idName) {
  51. i++;
  52. num++;
  53. } else {
  54. i = this.TableData.length;
  55. }
  56. }
  57. return {
  58. rowspan: num,
  59. colspan: 1,
  60. };
  61. }
  62. },
  63. objectSpanMethod({ row, column, rowIndex, columnIndex }) {
  64. // 合并单元格
  65. switch (
  66. columnIndex // 将列索引作为判断值
  67. ) {
  68. // 通过传递不同的列索引和需要合并的属性名,可以实现不同列的合并(索引0,1 指的是页面上的0,1
  69. // gzTroubles,gzID 这两个字段是我要合并的字段名,
  70. case 1:
  71. return this.mergeCol("gzTroubles", rowIndex);
  72. case 0:
  73. return this.mergeCol("gzID", rowIndex);
  74. }
  75. },
  76. //#endregion

其中,switch中 0和1 是根据下面这张图中的顺序来的,

 完整代码如下:

  1. <template>
  2. <div class="pCindex">
  3. <el-table
  4. ref="tableRef"
  5. :data="TableData"
  6. class="tableStyle"
  7. :span-method="objectSpanMethod"
  8. border
  9. >
  10. <el-table-column
  11. align="center"
  12. prop="gzID"
  13. :label="lable.gzID"
  14. width="80"
  15. >
  16. </el-table-column>
  17. <el-table-column
  18. align="center"
  19. prop="gzTroubles"
  20. :label="lable.gzTroubles"
  21. >
  22. </el-table-column>
  23. <el-table-column
  24. header-align="center"
  25. prop="gzReason"
  26. :label="lable.gzReason"
  27. ></el-table-column>
  28. <el-table-column
  29. header-align="center"
  30. prop="gzWay"
  31. :label="lable.gzWay"
  32. ></el-table-column>
  33. </el-table>
  34. </div>
  35. </template>
  36. <script>
  37. export default {
  38. components: {},
  39. data() {
  40. return {
  41. lable: {
  42. gzID: "序号",
  43. gzTroubles: "故障现象",
  44. gzReason: "故障原因",
  45. gzWay: "排除方法",
  46. },
  47. TableData: [
  48. {
  49. gzID: "1",
  50. gzTroubles: "发动机胜多负少的温度过高",
  51. gzReason: "1.是的",
  52. gzWay: "1.打开上翻门",
  53. },
  54. {
  55. gzID: "1",
  56. gzTroubles: "发动机胜多负少的温度过高",
  57. gzReason: "2.散热风机有噪音",
  58. gzWay: "2.转轴上加润滑油",
  59. },
  60. {
  61. gzID: "2",
  62. gzTroubles: "发动机不能起动",
  63. gzReason: "1.电瓶电压不足,接线柱松动或氧化",
  64. gzWay: "1.充电、打磨接头并接牢",
  65. },
  66. {
  67. gzID: "3",
  68. gzTroubles: "发动机不等等能起动",
  69. gzReason: "2.燃油不足是否",
  70. gzWay: "2.加油或排气",
  71. },
  72. ],
  73. };
  74. },
  75. watch: {},
  76. mounted() {},
  77. methods: {
  78. //#region 合并单元格
  79. // 这个方法是 element-ui提供的单元格合并方法
  80. // objectSpanMethod 传入了 { row, column, rowIndex, columnIndex }
  81. // row: 当前行
  82. // column: 当前列
  83. // rowIndex:当前行号
  84. // columnIndex :当前列号
  85. // 1代表:独占一行
  86. // 更大的自然数:代表合并了若干行
  87. // 0:代表“消失”的哪那一个单元格,后面的单元格向前推一格
  88. mergeCol(id, rowIndex) {
  89. debugger;
  90. // 合并单元格
  91. // id:属性名
  92. // rowIndex:行索引值
  93. var idName = this.TableData[rowIndex][id]; // 获取当前单元格的值
  94. if (rowIndex > 0) {
  95. // 判断是不是第一行
  96. // eslint-disable-next-line eqeqeq
  97. if (this.TableData[rowIndex][id] != this.TableData[rowIndex - 1][id]) {
  98. // 先判断当前单元格的值是不是和上一行的值相等
  99. var i = rowIndex;
  100. var num = 0; // 定义一个变量i,用于记录行索引值并进行循环,num用于计数
  101. while (i < this.TableData.length) {
  102. // 当索引值小于table的数组长度时,循环执行
  103. if (this.TableData[i][id] === idName) {
  104. // 判断循环的单元格的值是不是和当前行的值相等
  105. i++; // 如果相等,则索引值加1
  106. num++; // 合并的num计数加1
  107. } else {
  108. i = this.TableData.length; // 如果不相等,将索引值设置为table的数组长度,跳出循环
  109. }
  110. }
  111. return {
  112. rowspan: num, // 最终将合并的行数返回
  113. colspan: 1,
  114. };
  115. } else {
  116. return {
  117. rowspan: 0, // 如果相等,则将rowspan设置为0
  118. colspan: 1,
  119. };
  120. }
  121. } else {
  122. // 如果是第一行,则直接返回
  123. let i = rowIndex;
  124. let num = 0;
  125. while (i < this.TableData.length) {
  126. // 当索引值小于table的数组长度时,循环执行
  127. if (this.TableData[i][id] === idName) {
  128. i++;
  129. num++;
  130. } else {
  131. i = this.TableData.length;
  132. }
  133. }
  134. return {
  135. rowspan: num,
  136. colspan: 1,
  137. };
  138. }
  139. },
  140. objectSpanMethod({ row, column, rowIndex, columnIndex }) {
  141. // 合并单元格
  142. switch (
  143. columnIndex // 将列索引作为判断值
  144. ) {
  145. // 通过传递不同的列索引和需要合并的属性名,可以实现不同列的合并(索引0,1 指的是页面上的0,1
  146. case 1:
  147. return this.mergeCol("gzTroubles", rowIndex);
  148. case 0:
  149. return this.mergeCol("gzID", rowIndex);
  150. }
  151. },
  152. //#endregion
  153. },
  154. };
  155. </script>

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

闽ICP备14008679号