sort.vue 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <template>
  2. <el-table-v2 :columns="columns" :data="data" :sort-by="sortState" :width="700" :height="400" fixed @column-sort="onSort" />
  3. </template>
  4. <script lang="ts" setup>
  5. import { ref } from 'vue'
  6. import { TableV2SortOrder } from 'element-plus'
  7. import type { SortBy } from 'element-plus'
  8. const generateColumns = (length = 10, prefix = 'column-', props?: any) =>
  9. Array.from({ length }).map((_, columnIndex) => ({
  10. ...props,
  11. key: `${prefix}${columnIndex}`,
  12. dataKey: `${prefix}${columnIndex}`,
  13. title: `Column ${columnIndex}`,
  14. width: 150,
  15. }))
  16. const generateData = (columns: ReturnType<typeof generateColumns>, length = 200, prefix = 'row-') =>
  17. Array.from({ length }).map((_, rowIndex) => {
  18. return columns.reduce(
  19. (rowData, column, columnIndex) => {
  20. rowData[column.dataKey] = `Row ${rowIndex} - Col ${columnIndex}`
  21. return rowData
  22. },
  23. {
  24. id: `${prefix}${rowIndex}`,
  25. parentId: null,
  26. }
  27. )
  28. })
  29. const columns = generateColumns(10)
  30. let data = generateData(columns, 200)
  31. columns[0].sortable = true
  32. const sortState = ref<SortBy>({
  33. key: 'column-0',
  34. order: TableV2SortOrder.ASC,
  35. })
  36. const onSort = (sortBy: SortBy) => {
  37. console.log(sortBy)
  38. data = data.reverse()
  39. sortState.value = sortBy
  40. }
  41. </script>