cell-templating.vue 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <template>
  2. <el-table-v2 :columns="columns" :data="data" :width="700" :height="400" fixed />
  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 } 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. },
  58. ]
  59. const data = ref(Array.from({ length: 200 }).map(dataGenerator))
  60. </script>