row-class.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <template>
  2. <el-table-v2
  3. :columns="columns"
  4. :data="data"
  5. :row-class="rowClass"
  6. :width="700"
  7. :height="400"
  8. />
  9. </template>
  10. <script lang="tsx" setup>
  11. import { ref } from 'vue'
  12. import dayjs from 'dayjs'
  13. import {
  14. ElButton,
  15. ElIcon,
  16. ElTag,
  17. ElTooltip,
  18. TableV2FixedDir,
  19. } from 'element-plus'
  20. import { Timer } from '@element-plus/icons-vue'
  21. import type { Column, RowClassNameGetter } from 'element-plus'
  22. let id = 0
  23. const dataGenerator = () => ({
  24. id: `random-id-${++id}`,
  25. name: 'Tom',
  26. date: '2020-10-1',
  27. })
  28. const columns: Column<any>[] = [
  29. {
  30. key: 'date',
  31. title: 'Date',
  32. dataKey: 'date',
  33. width: 150,
  34. fixed: TableV2FixedDir.LEFT,
  35. cellRenderer: ({ cellData: date }) => (
  36. <ElTooltip content={dayjs(date).format('YYYY/MM/DD')}>
  37. {
  38. <span class="flex items-center">
  39. <ElIcon class="mr-3">
  40. <Timer />
  41. </ElIcon>
  42. {dayjs(date).format('YYYY/MM/DD')}
  43. </span>
  44. }
  45. </ElTooltip>
  46. ),
  47. },
  48. {
  49. key: 'name',
  50. title: 'Name',
  51. dataKey: 'name',
  52. width: 150,
  53. align: 'center',
  54. cellRenderer: ({ cellData: name }) => <ElTag>{name}</ElTag>,
  55. },
  56. {
  57. key: 'operations',
  58. title: 'Operations',
  59. cellRenderer: () => (
  60. <>
  61. <ElButton size="small">Edit</ElButton>
  62. <ElButton size="small" type="danger">
  63. Delete
  64. </ElButton>
  65. </>
  66. ),
  67. width: 150,
  68. align: 'center',
  69. flexGrow: 1,
  70. },
  71. ]
  72. const data = ref(Array.from({ length: 200 }).map(dataGenerator))
  73. const rowClass = ({ rowIndex }: Parameters<RowClassNameGetter<any>>[0]) => {
  74. if (rowIndex % 10 === 5) {
  75. return 'bg-red-100'
  76. } else if (rowIndex % 10 === 0) {
  77. return 'bg-blue-200'
  78. }
  79. return ''
  80. }
  81. </script>