row-class.vue 2.0 KB

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