VXEtable/VXEgrid 表格sorttablejs实现行列拖拽功能

1 篇文章 0 订阅
1 篇文章 0 订阅

1、配置vxe-grid组件:

:row-config="{useKey: true}"   
:scroll-y="{enabled: false}"
:key="tableKey"

2、导包

import Sortable from 'sortablejs'

3、实现拖拽函数

        //行拖拽
        rowDrop() {
            this.$nextTick(() => {
                let xTable = this.$refs[this.tableRef]
                this.sortableObj = Sortable.create(xTable.$el.querySelector('.body--wrapper>.vxe-table--body tbody'), {
                    handle: 'td',
                    onEnd: ({
                        newIndex,
                        oldIndex
                    }) => {
                        // 换序操作
                        //let tmpdata = this.tdata.map(el=>{return el._X_ID})
                        let currRow = this.tdata.splice(oldIndex, 1)[0]
                        this.tdata.splice(newIndex, 0, currRow)
                        //this.tdata.forEach((el,index) => {el._X_ID = tmpdata[index]})

                        //const codeCurrRow = this.code.splice(oldIndex, 1)[0]
                        //this.code.splice(newIndex, 0, codeCurrRow)

                        this.tableKey ++;
                    }
                })
            })
        },
        //列拖拽
        columnDrop() {
            this.$nextTick(() => {
                let xTable = this.$refs[this.tableRef]
                this.sortableObj2 = Sortable.create(xTable.$el.querySelector('.body--wrapper>.vxe-table--header .vxe-header--row'), {
                    handle: '.zb-h',
                    onEnd: ({
                        newIndex,
                        oldIndex
                    }) => {
                        // 换序操作
                        let currRow = this.columns.splice(oldIndex, 1)[0]
                        this.columns.splice(newIndex, 0, currRow)
                        xTable.reloadColumn(this.columns)
                        this.tableKey ++;
                    }
                })
            })

 4、调用拖拽函数

this.rowDrop() ;
this.columnDrop();

--以上4步即可对普通表格进行拖拽内容换序

Q:若有锁定列固定列则无法进行拖拽怎么办?

A:因为vxetable对锁定列固定列的做法是多复制一个实例,即两张表,进行的重叠效果。所以以上使用的querySelector中的el是无法select到的。

行拖拽解决方法:

5、增加vxe-grid配置项

:tooltip-config="{showAll: true, contentMethod: showTooltipMethod}"
@cell-mouseenter="rowDrop"


// 实现showTooltipMethod方法
showTooltipMethod(){
    return '' ;
}

6、修改querySelector中的el

xTable.$el.querySelector('.fixed-left--wrapper>.vxe-table--body tbody')

7、watch监控tableKey

tableKey : {
            handler: function (nv,ov) {
                if (this.sortableObj2){
                    this.sortableObj2.destroy() ;
                }
                this.columnDrop() ;
            },
            immediate: true
 }

总结:根据querySelector中的el进行拖拽,有固定列锁定列的情况下需使用tableKey来刷新表格

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
在 `vxetable` 中,实现表格列宽可以自定义的方式,可以通过配置 `column-resizing` 属性来实现。 具体来说,你需要在 `columns` 属性中为每一列设置 `resizable: true`,以指示该列可以进行列宽调整。然后,在 `tableProps` 属性中,你可以将 `column-resizing` 属性设置为一个对象,该对象包含一个 `handleWidth` 属性(可选),以指定列调整的手柄宽度,和一个 `minWidth` 属性(可选),以指定列的最小宽度。 例如,下面是一个实现了自定义表格列宽的 `vxetable` 示例代码: ```vue <template> <vxe-table :data="tableData" :columns="tableColumns" :table-props="tableProps" /> </template> <script> export default { data() { return { tableData: [ { name: 'John', age: 22, gender: 'Male' }, { name: 'Jane', age: 30, gender: 'Female' }, { name: 'Bob', age: 45, gender: 'Male' } ], tableColumns: [ { field: 'name', title: 'Name', resizable: true }, { field: 'age', title: 'Age', resizable: true }, { field: 'gender', title: 'Gender', resizable: true } ], tableProps: { columnResizing: { handleWidth: 5, minWidth: 50 } } } } } </script> ``` 在上面的代码中,`tableData` 和 `tableColumns` 分别是表格的数据和列定义,其中每一列都设置了 `resizable: true`,以允许列宽调整。在 `tableProps` 中,我们将 `column-resizing` 设置为一个对象,其中 `handleWidth` 属性设置为 `5`,以指定列调整的手柄宽度为 `5px`,并将 `minWidth` 属性设置为 `50`,以指定列的最小宽度为 `50px`。 这样,在 `vxetable` 中,你就可以通过简单的配置实现表格列宽可以自定义了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值