rowspan-and-colspan.vue 2.6 KB

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