vue2vue3 el-table实现整行拖拽排序功能(使用sortablejs插件)

news/2025/2/9 11:03:49/

1、此功能已集成到[TTable组件中]—Vue2TTable组件 、Vue3TTable组件

2、最终效果

在这里插入图片描述

3、安装sortablejs

npm install sortablejs --save

4、Vue2实现方式

<template><el-tableref="el-table":data="tableData":class="{'cursor':isCopy,'row_sort':isRowSort,'highlightCurrentRow':highlightCurrentRow,'radioStyle':(table.firstColumn&&table.firstColumn.type==='radio'),'treeProps':isShowTreeStyle}"v-bind="$attrs"v-on="$listeners":highlight-current-row="highlightCurrentRow":border="table.border||isTableBorder":span-method="spanMethod||objectSpanMethod":cell-class-name="cellClassNameFuc"@sort-change="soltHandle"@row-click="rowClick"@cell-dblclick="cellDblclick">....</el-table></template><script>
import Sortable from 'sortablejs'props: {// table所需数据table: {type: Object,default: () => {return {}}},// 是否开启行拖拽isRowSort: {type: Boolean,default: false}...
},
data() {return {tableData: this.table?.data}},watch: {'table.data': {handler(val) {this.tableData = val},deep: true // 深度监听}},
mounted() {this.initSort()},methods: {// 行拖拽initSort() {if (!this.isRowSort) returnconst el = this.$refs['el-table'].$el.querySelector('.el-table__body-wrapper > table > tbody')new Sortable(el, {animation: 150, // 动画onEnd: evt => {const curRow = this.tableData.splice(evt.oldIndex, 1)[0]this.tableData.splice(evt.newIndex, 0, curRow)this.$emit('rowSort', this.tableData)}})}}
</script>

5、Vue3实现方式

<template><div class="t-table" ref="TTableBox">....<el-tableref="TTable":data="state.tableData":class="{cursor: isCopy,row_sort: isRowSort,highlightCurrentRow: highlightCurrentRow,radioStyle: table.firstColumn && table.firstColumn.type === 'radio',}"v-bind="$attrs"size="default":highlight-current-row="highlightCurrentRow":border="table.border || isTableBorder"@cell-dblclick="cellDblclick"@row-click="rowClick":cell-class-name="cellClassNameFuc">....</el-table></div>
</template>
<script setup lang="ts">
import { computed, ref, watch, useSlots, reactive, onMounted } from 'vue'
import Sortable from 'sortablejs'
const props = defineProps({// table所需数据table: {type: Object,default: () => {return {}},required: true,},// 表头数据columns: {type: Array,default: () => {return []},// required: true},// 是否开启行拖拽isRowSort: {type: Boolean,default: false,}...
})
// 初始化数据
const state = reactive({tableData: props.table.data,...
})
// 获取el-table ref
const TTable: any = ref<HTMLElement | null>(null)
// 获取t-table ref
const TTableBox: any = ref<HTMLElement | null>(null)
// 抛出事件
const emits = defineEmits(['rowSort',....
])
watch(() => props.table.data,(val) => {// console.log(111, val)state.tableData = val},{ deep: true }
)
onMounted(() => {initSort()
})
// 行拖拽
const initSort = () => {if (!props.isRowSort) returnconst el = TTableBox.value.querySelector('.el-table__body-wrapper tbody')// console.log('3333', el)Sortable.create(el, {animation: 150, // 动画onEnd: (evt) => {const curRow = state.tableData.splice(evt.oldIndex, 1)[0]state.tableData.splice(evt.newIndex, 0, curRow)emits('rowSort', state.tableData)},})
}
</script>

注意事项,el-table需要配置row-key且保持唯一性,不然会出现排序不对的情况

6、sortablejs其他options配置

7、组件地址

Vue3组件地址

Vue2组件地址

8、相关文章

Vue2基于ElementUi再次封装基础组件文档

vue3+ts基于Element-plus再次封装基础组件文档


http://www.ppmy.cn/news/280681.html

相关文章

Django学习笔记-配置Docker、Git环境与项目创建

笔记内容转载自AcWing的Django框架课讲义&#xff0c;课程链接&#xff1a;AcWing Django框架课。 CONTENTS 1. 配置Docker环境2. Django项目创建3. Django App创建 1. 配置Docker环境 首先拉取一个 Ubuntu 镜像&#xff1a; docker pull ubuntu:20.04创建容器后进入容器配置…

第十七章:触发器

第十七章&#xff1a;触发器 17.1&#xff1a;触发器概述 ​ MySQL从5.0.2版本开始支持触发器。MySQL的触发器和存储过程一样&#xff0c;都是嵌入到MySQL服务器的一段程序。 ​ 触发器是由事件来触发某个操作&#xff0c;这些事件包括INSERT、UPDATE、DELETE事件。所谓事件…

安卓平板|markdown APP

想找一款安卓平板的markdown阅读器&#xff1f; 出发点错了&#xff0c;百度搜索一直是打markdown阅读器&#xff0c;一直找不到合适的&#xff1b;突然想到文本编辑器&#xff0c;于是就有了quickedict&#xff0c;可读可写&#xff0c;同时也说说其他。 MD阅读器&#xff1a…

微信怎么批量自动添加好友?

如何批量加客户资源到微信&#xff0c;怎么加微信好友&#xff0c;这个基本上熟悉的人都会知道。 实际上&#xff0c;你知道所有添加微信好友的方式吗&#xff1f;或者说&#xff0c;你知道如何批量加客户微信吗&#xff1f; 比如说在一定时间内&#xff0c;把你所有的客户资…

ipad和android平板应用程序,安卓平板相比iPad有哪些优势和劣势?

平板只有两种&#xff0c;一种是iPad&#xff0c;另一种是其他。这句话&#xff0c;或许明后两年左右改变说法。 手机从16:9发展到全面屏&#xff0c;干掉了之前的MAX类型大屏手机&#xff0c;但是始终没有干掉平板&#xff0c;哪怕是7英寸左右的Mini类型的平板。目前的平板市场…

智能会议平板——哪个品牌更靠谱_哪家好?

越来越多的企业和政府单位开始使用新的会议室显示屏——智能会议平板。与传统的会议室显示设备相比&#xff0c;智能会议平板具有特别突出的优势&#xff0c;更智能&#xff0c;但也提升了会议室的形象。在选择智能会议平板时&#xff0c;许多人关心哪个品牌更可靠&#xff1f;…

linux android工控哪个好,为什么越来越多的工业自动化选用安卓工业平板电脑?...

摘要&#xff1a;本文对工业自动化选用安卓工业平板电脑的原因及优势进行了详细解析&#xff0c;供参考。 随着Android系统的用户群不断地增加&#xff0c;现在Android工业平板电脑也得以与Windows相互竞争&#xff0c;Android工业平板电脑又有何好处能让这么多人趋之若鹜呢? …

会议平板Android和Windows系统区别_哪个好?

一般会议平板使用的操作系统有Android和Windows两种&#xff0c;这两种系统大家应该都听说过&#xff0c;下面简单讲解两中系统的在会议平板的优缺点。 Android系统&#xff1a; 优点&#xff1a; 1) 价格便宜&#xff0c;性能不错&#xff0c;性价比可以说是很高了。 2) 由…