DraggableTable 可拖拽表格
表格展示数据,有时会拖动排序,传给后端。
基于 useSortable 开发。
基本使用
默认整行可以拖动。
el-draggable-table
组件只是扩展了el-table
组件的功能,其他功能一致,所以需要配合el-table-column
组件使用。
vue
<template>
<el-draggable-table
row-key="id"
:data="tableData"
style="width: 100%"
@sort-data="handleSortData"
>
<el-table-column prop="date" label="日期" width="180" />
<el-table-column prop="name" label="姓名" width="180" />
<el-table-column prop="address" label="地址" />
</el-draggable-table>
</template>
<script setup>
const tableData = [
{
date: '2024-08-01',
name: 'Summer',
address: 'No. 189, Grove St, Los Angeles',
id: 1,
},
{
date: '2024-08-02',
name: 'Summer',
address: 'No. 189, Grove St, Los Angeles',
id: 2,
},
{
date: '2024-08-03',
name: 'Summer',
address: 'No. 189, Grove St, Los Angeles',
id: 3,
},
{
date: '2024-08-04',
name: 'Summer',
address: 'No. 189, Grove St, Los Angeles',
id: 4,
},
{
date: '2024-08-05',
name: 'Summer',
address: 'No. 189, Grove St, Los Angeles',
id: 5,
},
]
const handleSortData = (data) => {
console.log('排序后的数据', data)
}
</script>
隐藏源代码
指定某列拖动
Sortable.options 所有属性可以通过 draggable-props
属性来传递。
使用sort-data
事件来接收排序后的数据。
vue
<template>
<el-draggable-table
border
row-key="id"
:data="tableData"
style="width: 100%"
:draggable-props="{
handle: '.move',
}"
@sort-data="handleSortData"
>
<el-table-column prop="drag" label="" width="40" class-name="move">
<el-icon><Rank /></el-icon>
</el-table-column>
<el-table-column prop="date" label="日期" width="180" />
<el-table-column prop="name" label="姓名" width="180" />
<el-table-column prop="address" label="地址" />
</el-draggable-table>
</template>
<script setup>
import { Rank } from '@element-plus/icons-vue'
const tableData = [
{
date: '2024-08-01',
name: 'Summer',
address: 'No. 189, Grove St, Los Angeles',
id: 1,
},
{
date: '2024-08-02',
name: 'Summer',
address: 'No. 189, Grove St, Los Angeles',
id: 2,
},
{
date: '2024-08-03',
name: 'Summer',
address: 'No. 189, Grove St, Los Angeles',
id: 3,
},
{
date: '2024-08-04',
name: 'Summer',
address: 'No. 189, Grove St, Los Angeles',
id: 4,
},
{
date: '2024-08-05',
name: 'Summer',
address: 'No. 189, Grove St, Los Angeles',
id: 5,
},
]
const handleSortData = (data) => {
console.log('排序后的数据', data)
}
</script>
隐藏源代码
禁用
使用disabled
属性来控制 table 是否可以拖动
可拖动禁止拖动
vue
<template>
<el-switch
v-model="disabled"
size="large"
active-text="禁止拖动"
inactive-text="可拖动"
/>
<el-draggable-table
border
row-key="id"
:data="tableData"
style="width: 100%"
:disabled="disabled"
:draggable-props="{
handle: '.move',
}"
@sort-data="handleSortData"
>
<el-table-column prop="drag" label="" width="40" class-name="move">
<el-icon><Rank /></el-icon>
</el-table-column>
<el-table-column prop="date" label="日期" width="180" />
<el-table-column prop="name" label="姓名" width="180" />
<el-table-column prop="address" label="地址" />
</el-draggable-table>
</template>
<script setup>
import { ref } from 'vue'
import { Rank } from '@element-plus/icons-vue'
const disabled = ref(false)
const tableData = ref([
{
date: '2024-08-01',
name: 'Summer',
address: 'No. 189, Grove St, Los Angeles',
id: 1,
},
{
date: '2024-08-02',
name: 'Summer',
address: 'No. 189, Grove St, Los Angeles',
id: 2,
},
{
date: '2024-08-03',
name: 'Summer',
address: 'No. 189, Grove St, Los Angeles',
id: 3,
},
{
date: '2024-08-04',
name: 'Summer',
address: 'No. 189, Grove St, Los Angeles',
id: 4,
},
{
date: '2024-08-05',
name: 'Summer',
address: 'No. 189, Grove St, Los Angeles',
id: 5,
},
])
const handleSortData = (data) => {
console.log('排序后的数据', data)
}
</script>
隐藏源代码
API
DraggableTable Props
属性名 | 说明 | 类型 | 默认值 |
---|---|---|---|
draggable-props | Sortable.options | object | - |
disabled | table 是否禁用拖动 | boolean | false |
DraggableTable Events
事件名 | 说明 | 类型 |
---|---|---|
sort-data | 拖动排序后的对象数组 | array |