在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
实现效果本来想在网上看看有没有基于antdesign做的,然后发现是真的少啊!废话不多说,先上图: sortablejs介绍首先先来认识一下这个插件: sortablejs 这边我就着重介绍一下我用到的api。
put:put用来定义往这个列表容器放置列表单元的的设置,true/false/[‘foo',‘bar']/function;
2. 具体实现1.第一步先初始化 <s-table ref="table" size="default" class="left-table" rowKey="key" :columns="columns" :data="loadData"> </s-table> <s-table class="sort-table" ref="table2" size="default" class="left-table" rowKey="key" :columns="columns" :data="loadData"> </s-table> 具体的columns 和loadData就不多余阐述。 JS代码 import Sortable from 'sortablejs' methods:{ // 初始化 sortable 实现拖动 initSortable () { var that = this var el = this.$el.querySelector('.sort-table tbody') Sortable.create(el, { handle: '.ant-table-row', animation: 150, group: { name: 'name', pull: true, put: true }, onUpdate: function (evt) { }, // 开始拖拽的时候 onStart: function (evt) { }, onAdd: function (evt) { }, onRemove: function (evt) { } }) }, initSortable1 () { var that = this var el = this.$el.querySelector('.left-table tbody') Sortable.create(el, { handle: '.ant-table-row', animation: 150, group: { name: 'name', pull: true, put: true }, onUpdate: function (evt) { }, // 开始拖拽的时候 onStart: function (evt) { }, onAdd: function (evt) { }, onRemove: function (evt) { } }) }, } 关于 至此两个table之间就可以实现拖拽效果,但仅仅只是拖拽效果。 排序是我右边表格特有的,但是这边的表格是不需要这个排序的,而且如果拖拽成功的话为什么还会显示暂无数据呢,最后左边表头的
考虑到性能消耗,我就选择了第二种: data(){ return{ unMatchedList: [], // 左边未匹配的数据 dataList: [], // 右边已匹配的数据 pullIndex :'',//原数组拖拽元素的下标 } } 2)在每一次 // 开始拖拽的时候 onStart: function (evt) { that.pullIndex = evt.oldIndex }, onAdd: function (evt) { //evt.newIndex 移入到新数组的下标 //pullIndex 原数组拖拽元素的下标 that.dataList.splice(evt.newIndex, 0, that.unMatchedList[that.pullIndex]) that.dataList.forEach((item, index) => { item.sort = index + 1 }) //通知table视图更新 that.$nextTick(() => { that.$refs.table2 && this.$refs.table2.refresh(true) that.$refs.table && this.$refs.table.refresh(true) }) }, onRemove: function (evt) { that.dataList.splice(evt.oldIndex, 1) that.dataList.forEach((item, index) => { item.sort = index + 1 }) that.$nextTick(() => { that.$refs.table2 && this.$refs.table2.refresh(true) that.$refs.table && this.$refs.table.refresh(true) }) } }) 3)实现同一个表格上下拖拽排序 initSortable () { var that = this var el = this.$el.querySelector('.sort-table tbody') Sortable.create(el, { handle: '.ant-table-row', animation: 150, group: { name: 'name', pull: true, put: true }, //这里千万不要用onEnd 方法 onUpdate: function (evt) { var o = evt.oldIndex var n = evt.newIndex if (o === n) { return } that.sortListAndUpdate(that.dataList, o, n) }, }) }, // 对数据进行排序,要求 o(oldIndex) 和 n(newIndex) 从 0开始 sortList (list, o, n) { var newTableData = JSON.parse(JSON.stringify(list)) var data = newTableData.splice(o, 1, null) newTableData.splice(o < n ? n + 1 : n, 0, data[0]) newTableData.splice(o > n ? o + 1 : o, 1) return newTableData }, /** * 对数据排序并更新 table, 要求 o(oldIndex) 和 n(newIndex) 从 0开始 */ sortListAndUpdate (list, o, n) { var newTableData = this.sortList(list, o, n) newTableData.forEach((item, index) => { item.sort = index + 1 }) this.$nextTick(() => { this.dataList = newTableData that.$refs.table2 && this.$refs.table2.refresh(true) }) }, 这边我们选用 到此这篇关于antdesign-vue结合sortablejs实现两个table相互拖拽排序功能的文章就介绍到这了,更多相关antdesign-vue实现拖拽排序内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论