vue+elementui表格拖拽

先安装:npm install sortablejs --save

代码:

<template>

  <div class="hibe">

    <el-table :data="tableData" row-key="id">

      <el-table-column

        v-for="(item, index) in col"

        :key="`col_${index}`"

        :prop="dropCol[index].prop"

        :label="item.label"

      ></el-table-column>

    </el-table>

  </div>

</template>

<script>

    import Sortable from 'sortablejs';



    export default {

        data () {

            return {

                col:[
                      {label: '日期', prop: 'date'}, 
                      {label: '姓名',  prop: 'name'}, 
                      {label: '地址', prop: 'address'}
                    ],

                dropCol:[
                            {label: '日期',  prop: 'date'},  
                            {label: '姓名', prop: 'name'}, 
                            {label: '地址', prop: 'address'}
                        ],

               tableData: [

                    {

                        id: '1',

                        date: '2016-05-02',

                        name: '王小虎1',

                        address: '上海市普陀区金沙江路 100 弄'

                    },

                    {

                        id: '2',

                        date: '2016-05-04',

                        name: '王小虎2',

                        address: '上海市普陀区金沙江路 200 弄'

                    },

                    {

                        id: '3',

                        date: '2016-05-01',

                        name: '王小虎3',

                        address: '上海市普陀区金沙江路 300 弄'

                    },

                    {

                        id: '4',

                        date: '2016-05-03',

                        name: '王小虎4',

                        address: '上海市普陀区金沙江路 400 弄'

                    }

                ]

            };

        },

        mounted () {

            this.rowDrop();

            this.columnDrop();

        },

        methods: {

            // 行拖拽

            rowDrop () {

               // 此时找到的元素是要拖拽元素的父容器

                const tbody = document.querySelector('.hibe .el-table__body-wrapper tbody');

                console.log(tbody)

                const _this = this;

                Sortable.create(tbody, {

           //  指定父元素下可被拖拽的子元素

                  draggable: ".hibe .el-table__row",

                   onEnd ({ newIndex, oldIndex }) {

                        const currRow = _this.tableData.splice(oldIndex, 1)[0];

                        _this.tableData.splice(newIndex, 0, currRow);

                    }

                });

            },

            // 列拖拽

            columnDrop () {

                const wrapperTr = document.querySelector('.hibe .el-table__header-wrapper tr');

                this.sortable = Sortable.create(wrapperTr, {

                    animation: 180,

                    delay: 0,

                    onEnd: evt => {

                        const oldItem = this.dropCol[evt.oldIndex];

                        this.dropCol.splice(evt.oldIndex, 1);

                        this.dropCol.splice(evt.newIndex, 0, oldItem);

                    }

                });

            }

        }

    };

</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值