vue3 + sortablejs + element plus 实现表格拖动排序

vue3 + sortablejs + element plus 实现表格拖动排序

准备工作

下载插件 npm install sortable.js --save (下载的时候注意一下,不要去下载 npm install sortable–save )
因为sortable.js和sortable是不一样的

代码

<template>
 <el-table :data="data.tableData" row-key="date" border style="width: 100%">
     <el-table-column type="index" label="序号" width="180"/>
     <el-table-column prop="date" label="日期" width="180"/>
     <el-table-column prop="name" label="匹配网址" width="180"/>
     <el-table-column prop="address" label="备注"/>
     <el-table-column prop="address" label="操作"/>
   </el-table>
</template>
<script setup>
import {computed, nextTick, onMounted, reactive, watch} from "vue";

import Sortable from 'sortablejs';

const props = defineProps({
  dialogVisible: {
    type: Boolean,
    default: false
  }
})

const emits = defineEmits('update:dialogVisible')

const dialogVisible = computed({
  get: () => props.dialogVisible,
  set: (value) => emits('dialogVisible', value)
})

const data = reactive({
  dictTableKey: '',
  title: '编辑',
  tableData: [
    {
      date: '2016-05-03',
      name: '张三',
      address: 'No. 189, Grove St, Los Angeles',
    },
    {
      date: '2016-05-02',
      name: '里斯',
      address: 'No. 189, Grove St, Los Angeles',
    },
    {
      date: '2016-05-04',
      name: '王五',
      address: 'No. 189, Grove St, Los Angeles',
    },
  ]
})

  nextTick(() => {
    rowDrop();
  });
//行拖拽
const rowDrop = () => {
  const tbody = document.querySelector('.edit .el-table__body-wrapper tbody')
  Sortable.create(tbody, {
    onEnd({ newIndex, oldIndex }) {
      let newList = [...data.tableData]

      const currRow = newList?.splice(oldIndex, 1)[0]
      newList.splice(newIndex, 0, currRow)
      data.tableData = newList
    }
  })
}
</script>
<style scoped lang="scss">

</style>

说明

切记一定要设置el-table的row-key属性,不然会出现视图就近更新的问题,导致视图和数据的排序对不上。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值