mirror of
https://gitee.com/element-plus/element-plus.git
synced 2024-12-15 09:50:58 +08:00
61 lines
1.4 KiB
Vue
61 lines
1.4 KiB
Vue
|
<template>
|
||
|
<el-table-v2
|
||
|
v-model:sort-state="sortState"
|
||
|
:columns="columns"
|
||
|
:data="data"
|
||
|
:width="700"
|
||
|
:height="400"
|
||
|
fixed
|
||
|
@column-sort="onSort"
|
||
|
/>
|
||
|
</template>
|
||
|
|
||
|
<script lang="ts" setup>
|
||
|
import { ref } from 'vue'
|
||
|
import { TableV2SortOrder } from 'element-plus'
|
||
|
import type { SortBy, SortState } from 'element-plus'
|
||
|
|
||
|
const generateColumns = (length = 10, prefix = 'column-', props?: any) =>
|
||
|
Array.from({ length }).map((_, columnIndex) => ({
|
||
|
...props,
|
||
|
key: `${prefix}${columnIndex}`,
|
||
|
dataKey: `${prefix}${columnIndex}`,
|
||
|
title: `Column ${columnIndex}`,
|
||
|
width: 150,
|
||
|
}))
|
||
|
|
||
|
const generateData = (
|
||
|
columns: ReturnType<typeof generateColumns>,
|
||
|
length = 200,
|
||
|
prefix = 'row-'
|
||
|
) =>
|
||
|
Array.from({ length }).map((_, rowIndex) => {
|
||
|
return columns.reduce(
|
||
|
(rowData, column, columnIndex) => {
|
||
|
rowData[column.dataKey] = `Row ${rowIndex} - Col ${columnIndex}`
|
||
|
return rowData
|
||
|
},
|
||
|
{
|
||
|
id: `${prefix}${rowIndex}`,
|
||
|
parentId: null,
|
||
|
}
|
||
|
)
|
||
|
})
|
||
|
|
||
|
const columns = generateColumns(10)
|
||
|
const data = ref(generateData(columns, 200))
|
||
|
|
||
|
columns[0].sortable = true
|
||
|
columns[1].sortable = true
|
||
|
|
||
|
const sortState = ref<SortState>({
|
||
|
'column-0': TableV2SortOrder.DESC,
|
||
|
'column-1': TableV2SortOrder.ASC,
|
||
|
})
|
||
|
|
||
|
const onSort = ({ key, order }: SortBy) => {
|
||
|
sortState.value[key] = order
|
||
|
data.value = data.value.reverse()
|
||
|
}
|
||
|
</script>
|