rowspan-and-colspan.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <template>
  2. <div>
  3. <el-table
  4. :data="tableData"
  5. :span-method="arraySpanMethod"
  6. border
  7. style="width: 100%"
  8. >
  9. <el-table-column prop="id" label="ID" width="180" />
  10. <el-table-column prop="name" label="Name" />
  11. <el-table-column prop="amount1" sortable label="Amount 1" />
  12. <el-table-column prop="amount2" sortable label="Amount 2" />
  13. <el-table-column prop="amount3" sortable label="Amount 3" />
  14. </el-table>
  15. <el-table
  16. :data="tableData"
  17. :span-method="objectSpanMethod"
  18. border
  19. style="width: 100%; margin-top: 20px"
  20. >
  21. <el-table-column prop="id" label="ID" width="180" />
  22. <el-table-column prop="name" label="Name" />
  23. <el-table-column prop="amount1" label="Amount 1" />
  24. <el-table-column prop="amount2" label="Amount 2" />
  25. <el-table-column prop="amount3" label="Amount 3" />
  26. </el-table>
  27. </div>
  28. </template>
  29. <script lang="ts" setup>
  30. import type { TableColumnCtx } from 'element-plus'
  31. interface User {
  32. id: string
  33. name: string
  34. amount1: string
  35. amount2: string
  36. amount3: number
  37. }
  38. interface SpanMethodProps {
  39. row: User
  40. column: TableColumnCtx<User>
  41. rowIndex: number
  42. columnIndex: number
  43. }
  44. const arraySpanMethod = ({
  45. row,
  46. column,
  47. rowIndex,
  48. columnIndex,
  49. }: SpanMethodProps) => {
  50. if (rowIndex % 2 === 0) {
  51. if (columnIndex === 0) {
  52. return [1, 2]
  53. } else if (columnIndex === 1) {
  54. return [0, 0]
  55. }
  56. }
  57. }
  58. const objectSpanMethod = ({
  59. row,
  60. column,
  61. rowIndex,
  62. columnIndex,
  63. }: SpanMethodProps) => {
  64. if (columnIndex === 0) {
  65. if (rowIndex % 2 === 0) {
  66. return {
  67. rowspan: 2,
  68. colspan: 1,
  69. }
  70. } else {
  71. return {
  72. rowspan: 0,
  73. colspan: 0,
  74. }
  75. }
  76. }
  77. }
  78. const tableData: User[] = [
  79. {
  80. id: '12987122',
  81. name: 'Tom',
  82. amount1: '234',
  83. amount2: '3.2',
  84. amount3: 10,
  85. },
  86. {
  87. id: '12987123',
  88. name: 'Tom',
  89. amount1: '165',
  90. amount2: '4.43',
  91. amount3: 12,
  92. },
  93. {
  94. id: '12987124',
  95. name: 'Tom',
  96. amount1: '324',
  97. amount2: '1.9',
  98. amount3: 9,
  99. },
  100. {
  101. id: '12987125',
  102. name: 'Tom',
  103. amount1: '621',
  104. amount2: '2.2',
  105. amount3: 17,
  106. },
  107. {
  108. id: '12987126',
  109. name: 'Tom',
  110. amount1: '539',
  111. amount2: '4.1',
  112. amount3: 15,
  113. },
  114. ]
  115. </script>