cell-templating.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <template>
  2. <el-table-v2
  3. :columns="columns"
  4. :data="data"
  5. :width="700"
  6. :height="400"
  7. fixed
  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 } 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. },
  70. ]
  71. const data = ref(Array.from({ length: 200 }).map(dataGenerator))
  72. </script>