Sortable实现table拖拽功能

本文介绍了如何使用Sortable.js库实现一个表格的行拖拽功能,包括npm安装、导入Sortable库,以及在Vue组件的mounted钩子中设置拖拽事件监听。在拖拽结束后,通过更新数据和调用接口来完成表格数据的位置交换。注意,必须设置row-key以确保拖拽后的表格顺序正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<el-table ref="sourceTable" row-key="programid" class="tableList"  :data="resourceData" v-if="resourceData.length > 0"   size="small" @selection-change="selectionChange" >

        <el-table-column type="selection" width="50"></el-table-column>

        <el-table-column type="index" :index="setIndex()" label="序号" width="50" show-overflow-tooltip></el-table-column>

        <el-table-column prop="programid" width="100" label="节目ID"  show-overflow-tooltip></el-table-column>

        <el-table-column prop="name" label="节目名称"  show-overflow-tooltip></el-table-column>

        <el-table-column prop="source" width="100"  label="提供商"  show-overflow-tooltip></el-table-column>

        <el-table-column prop="contenttype" width="100"  label="类型"  show-overflow-tooltip>

          <template v-slot="{row}">{{contentMap[row.contenttype]||''}}</template>

        </el-table-column>

        <el-table-column  label="操作" width="180">

          <template v-slot="{row,$index}">

            <div class="action">

              <span @click="moveProgram(1,row.programid)"  v-if="!($index===0 && pageData.currentPage===1)">置顶</span>

              <span @click="addAndReplace(row,$index)">替换</span>

              <span @click="getProgramInfo(row)">属性</span>

              <span @click="deleteResourse(row)">删除</span>

            </div>

          </template>

        </el-table-column>

      </el-table>

 

1、npm 安装

2、import Sortable from 'sortablejs';

3、注意rowDrop一定要在mounted钩子函数,即html元素加载完毕

//行拖拽

    rowDrop() {     

      const tbody = document.querySelector(".tableList .el-table__body-wrapper tbody");

      if(tbody){

        Sortable.create(tbody, {

            onEnd: ({ newIndex, oldIndex }) => {//这里我使用的是拖拽完毕去调用move接口

                if (newIndex !== oldIndex) {

                    const currRow = this.resourceData.splice(oldIndex, 1)[0];

                    this.resourceData.splice(newIndex, 0, currRow); //数据互换位置

                    const { currentPage, size } = this.pageData,

                        index = newIndex + 1 + (currentPage - 1) * size;

                    this.moveProgram(index, currRow.programid); //发送换位置的请求

                }

            }

        });

      }

    },

 

//这里重点说一定要设置row-key,掉坑里了,拖拽完表格顺序不对,找不出原因,最后发现没有设置row-key,其他应用参考官网sortable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值