• Vue3+element plus+sortablejs实现table列表拖拽


    1、安装

    npm install sortablejs --save
    

    2、引入

    import Sortable from 'sortablejs';
    

    3、使用

    • 表格表头必须加row-key,否则会出现排序错乱
    • 完整代码table.vue
    1. <el-table v-loading="loading"
    2. row-key="id"
    3. :height="tableHeight"
    4. ref="tableRef"
    5. border
    6. stripe
    7. size="small"
    8. :data="receiptDataList"
    9. :row-class-name="setRowColor"
    10. show-summary
    11. :summary-method="getSummaries"
    12. @selection-change="handleSelectionChange">
    13. <el-table-column type="selection" width="45" align="center"/>
    14. <el-table-column
    15. v-for="(item, index) in tableHeaderList"
    16. :key="`col_${index}_${mykey}`"
    17. :prop="item.prop"
    18. :label="item.label"
    19. :width="item.width"
    20. :sortable="item.sortable"
    21. :show-overflow-tooltip="item.overflow"
    22. align="center"
    23. >
    24. <template #default="{row}" v-if="item.label === '收款编码'">
    25. <span>{{ row.no }}</span>
    26. </template>
    27. <template #default="{row}" v-if="item.label === '箱号'">
    28. <span>{{ row.caseNum }}</span>
    29. </template>
    30. .......
    31. </el-table-column>
    32. </el-table>
    1. onMounted(() => {
    2. columnDrop()
    3. rowDrop()
    4. })
    5. //列拖拽:列拖拽方法实际上就是修改表头数据的值
    6. const mykey = ref(0)
    7. function columnDrop() {
    8. const wrapperTr = document.querySelector('.el-table__header-wrapper tr');
    9. Sortable.create(wrapperTr , {
    10. animation: 180,
    11. delay: 0,
    12. onEnd: evt => {
    13. // 跳过显示的列数量,如开头我们用了一个多选框
    14. const empty = 1
    15. const oldItem = tableHeaderList.value[evt.oldIndex- empty];
    16. tableHeaderList.value.splice(evt.oldIndex- empty, 1);
    17. tableHeaderList.value.splice(evt.newIndex- empty, 0, oldItem);
    18. //防止表头数据改变,但表头未重新渲染
    19. //在自定义表头的时候,由于是用的v-for循环生成的,因此会给每个循环体一个固定的key,导致数据频繁异步更新时,因为这个key没有变,所以el-table觉得表头数据是没有变化的,因此就只更新了整体表格数据、key值有变化的列的表头。
    20. mykey.value = Math.floor(Math.random()*1000+1)
    21. }
    22. });
    23. }
    24. //行拖拽:行拖拽方法实际上就是修改this.tableData的值
    25. function rowDrop() {
    26. // 要侦听拖拽响应的DOM对象
    27. const tbody = document.querySelector('.el-table__body-wrapper tbody');
    28. Sortable.create(tbody, {
    29. // 结束拖拽后的回调函数
    30. onEnd({newIndex, oldIndex}) {
    31. console.log('拖动了行,当前序号:' + newIndex);
    32. const currentRow = receiptDataList.value.splice(oldIndex, 1)[0];
    33. receiptDataList.value.splice(newIndex, 0, currentRow);
    34. }
    35. })
    36. }

  • 相关阅读:
    Python统计学09——多元线性回归
    tomcat使用总结
    JUC并发编程学习笔记(十七)彻底玩转单例模式
    gRPC 基础概念详解
    金仓数据库KingbaseES本地化支持(2. 概述,3. 区域支持)
    在Eclipse中使用Junit
    jdbc 技术执行 insert 后获取自增列的值,插入操作时获取自增列的值
    Shell编程从看懂到看开③(函数、echo、printf、test)
    C/C++学习 -- RSA算法
    通讯协议学习之路:USART协议理论
  • 原文地址:https://blog.csdn.net/zyj_15067066062/article/details/132834616