当前位置:   article > 正文

基于sortablejs实现拖拽element-ui el-table表格行进行排序

基于sortablejs实现拖拽element-ui el-table表格行进行排序

可以用原生的dragstart、drag、dragend、dragover、drop、dragleave实现这个效果,但是有现成的轮子就不要重复造了,看效果:

 

  1. <template>
  2. <el-table :class="$options.name" :data="tableData" ref="table" row-key="ID">
  3. <!-- 注意:必须要定义row-key="ID",否者会导致拖拽顺序错乱 -->
  4. <el-table-column type="index" label="序号" width="60" />
  5. <el-table-column prop="label" label="列名">
  6. <template slot-scope="scope">
  7. <el-link :type="scope.row.type" :underline="false">{{ scope.row.label }}</el-link>
  8. </template>
  9. </el-table-column>
  10. </el-table>
  11. </template>
  12. <script>
  13. import sortablejs from "sortablejs"; //npm install sortablejs --save
  14. export default {
  15. name: "dragTableRow",
  16. data() {
  17. return {
  18. tableData: [
  19. { ID: 1, value: 1, label: "显示文本1", type: `primary` },
  20. { ID: 2, value: 2, label: "显示文本2", type: `success` },
  21. { ID: 3, value: 3, label: "显示文本3", type: `warning` },
  22. { ID: 4, value: 4, label: "显示文本4", type: `danger` },
  23. { ID: 5, value: 5, label: "显示文本5", type: `info` },
  24. ],
  25. };
  26. },
  27. mounted() {
  28. this.initDragSortTableRow(); //拖拽表格行排序
  29. },
  30. methods: {
  31. initDragSortTableRow() {
  32. let el = this.$refs.table.$el.querySelectorAll(
  33. ".el-table__body-wrapper > table > tbody"
  34. )[0];
  35. sortablejs.create(el, {
  36. ghostClass: "ghostClass", //定义拖拽的时候接触到的行样式
  37. setData: (dataTransfer) => {
  38. dataTransfer.setData("自定义传参字段", "传输内容");
  39. },
  40. onEnd: (e) => {
  41. this.$g.array.moveArrayElement(this.tableData, e.oldIndex, e.newIndex); //修改数组的顺序
  42. console.log(e.originalEvent.dataTransfer.getData("自定义传参字段"));
  43. },
  44. });
  45. },
  46. },
  47. };
  48. </script>
  49. <style lang="scss" scoped>
  50. .dragTableRow {
  51. >>> .ghostClass {
  52. background-color: #ecf5ff;
  53. td {
  54. border-bottom-color: #409eff;
  55. }
  56. }
  57. }
  58. </style>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/274391
推荐阅读