首頁 > 軟體

jQuery實現表格的資料拖拽

2022-02-22 13:00:09

jQuery實現將一個ant-table的資料拖拽複製到另一個ant-table,供大家參考,具體內容如下

需求

1、ant-design-vue
2、將一個巢狀在drawer中的table資料拖拽複製到drawer外面的table中

效果

拖拽中

拖拽後

HTML

<el-button type="text" size="small" class="text-btn" @click="choseField">選擇欄位</el-button>
// 拖拽到table
<a-table class="droptable" :columns="columns_copy" :dataSource="fieldInfoList">
.....
</a-table>
// 從drawer中拖拽資料
<field-select ref="fieldList" @setFieldList="setFieldList"></field-select>

JS

initDrop() {
            // initDrop在mounted中觸發,使table區域可以接受拖拽 
            let that = this
            $('.table_container').droppable({
                scope: 'basic', // 設定兩個相同的scope接受拖拽資訊
                tolerance: 'fit',
                drop(e) {
                    let dropFieldInfo = {
                        enName: that.dragField.enname || '',
                        cnName: that.dragField.name || '',
                    }
                    that.fieldInfoList.push(dropFieldInfo)
                    that.repeatZhName() // 校驗欄位是否重複的方法
                }
            })
        },
 choseField() {
            this.$refs.fieldList.setShowState(true)  //顯示drawer
            // 因為drawer中的dom物件實在開啟抽屜時候才會被建立,所以不能再drawer元件中進行初始化
            this.$nextTick(() => {
                // sort-table為抽屜元件中ant-table的類名
                $('.sort-table tbody tr').draggable({
                    scope: 'basic',  //相同的scope name
                    scroll: false,
                    zIndex: 10000,  // zindex設定更高避免拖拽的資料被drawer遮住,同時去除遮罩層樣式
                    helper: 'clone',
                    appendTo: 'body',  //避免遮蓋
                    containment: document.getElementById('app'),
                    start: e => {
                        // rowIndex第一行是表頭,資料行的rowindex從1開始
                        let currentIndex = e.target.rowIndex - 1
                        // console.log(this.$refs.fieldList.tableData[currentIndex])
                        this.dragField = this.$refs.fieldList.tableData[currentIndex]
                    },
                    stop: e => {
                        // this.eventType = 'CLICK'
                        console.log('拖拽結束事件')
                        console.log(e)
                    }
                })
            })
  },

注意事項

1、drop和drag區域要設定相同的scope
2、為了避免拖拽的helper被遮住,drag要設定zIndex和appendTo
3、如果表格有翻頁或者查詢功能,列表資料會重新整理,jq的拖拽會失效,在getList請求方法成功之後,在初始化一次拖拽事件即可,然後使用$emit讓父元件接收一下

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com