当前位置:   article > 正文

Element table 实现表格行、列拖拽功能 以及指定区域拖动_el-table 拖拽行

el-table 拖拽行

安装包

npm install sortablejs --save

  1. <template>
  2. <div class="draggable" style="padding: 20px">
  3. <el-table
  4. :header-cell-style="{
  5. background: '#f1f3f5',
  6. color: '#000000',
  7. 'text-align': 'center'
  8. }"
  9. :cell-class-name="addClass"
  10. row-key="id"
  11. :data="tableData"
  12. border
  13. stripe
  14. style="width: 100%"
  15. @selection-change="handleSelectionChange"
  16. >
  17. <el-table-column
  18. v-for="(item, index) in oldList"
  19. :key="`col_${index}`"
  20. :prop="newList[index].prop"
  21. :label="item.label"
  22. :width="item.width"
  23. :type="item.type"
  24. align="center"
  25. >
  26. <template v-if="item.prop == 'tuodong'">
  27. <span>
  28. <i style="font-size: 18px" class="el-icon-s-operation"></i>
  29. </span>
  30. </template>
  31. </el-table-column>
  32. </el-table>
  33. </div>
  34. </template>
  35. <script>
  36. import Sortable from 'sortablejs'
  37. export default {
  38. mounted () {
  39. this.oldList = JSON.parse(JSON.stringify(this.tableConfig.tableItems))
  40. this.newList = JSON.parse(JSON.stringify(this.tableConfig.tableItems))
  41. // this.columnDrop()
  42. this.rowDrop()
  43. },
  44. data () {
  45. return {
  46. multipleSelection: [],
  47. oldList: [],
  48. newList: [],
  49. tableData: [
  50. {
  51. id: 1,
  52. name: '客户编号'
  53. },
  54. {
  55. id: 2,
  56. name: '王二'
  57. },
  58. {
  59. id: 3,
  60. name: '张三'
  61. }
  62. ],
  63. tableConfig: {
  64. tableItems: [
  65. {
  66. label: '显示',
  67. prop: 'row1',
  68. type: 'selection',
  69. width: 100
  70. },
  71. {
  72. label: '列名',
  73. prop: 'name',
  74. width: 500
  75. },
  76. {
  77. label: '拖动调整顺序',
  78. prop: 'tuodong'
  79. }
  80. ]
  81. }
  82. }
  83. },
  84. methods: {
  85. // 指定区域拖动 这里是关键
  86. addClass ({ row, column, rowIndex, columnIndex }) {
  87. if (columnIndex == 2) {
  88. return 'draggable_cell'
  89. }
  90. },
  91. // 行拖拽
  92. rowDrop () {
  93. // 此时找到的元素是要拖拽元素的父容器
  94. const tbody = document.querySelector('.draggable .el-table__body-wrapper tbody')
  95. const _this = this
  96. Sortable.create(tbody, {
  97. // 指定父元素下可被拖拽的子元素
  98. draggable: '.draggable .el-table__row',
  99. // handle 格式为简单css选择器的字符串,使列表单元中符合选择器的元素成为拖动的手柄,只有按住拖动手柄才能使列表单元进行拖动
  100. handle: '.draggable_cell',
  101. onEnd ({ newIndex, oldIndex }) {
  102. const currRow = _this.tableData.splice(oldIndex, 1)[0]
  103. _this.tableData.splice(newIndex, 0, currRow)
  104. }
  105. })
  106. },
  107. handleSelectionChange (val) {
  108. this.multipleSelection = val
  109. }
  110. // 列拖拽
  111. // columnDrop () {
  112. // const wrapperTr = document.querySelector('.draggable .el-table__header-wrapper tr')
  113. // this.sortable = Sortable.create(wrapperTr, {
  114. // animation: 180,
  115. // delay: 0,
  116. // onEnd: (evt) => {
  117. // const oldItem = this.newList[evt.oldIndex]
  118. // this.newList.splice(evt.oldIndex, 1)
  119. // this.newList.splice(evt.newIndex, 0, oldItem)
  120. // }
  121. // })
  122. // }
  123. }
  124. }
  125. </script>
  126. <style lang="scss" scoped>
  127. // .addBorder11111111111 {
  128. // color: red;
  129. // background-color: red;
  130. // }
  131. </style>

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

闽ICP备14008679号