当前位置:   article > 正文

前端实现el-table多列排序_列表可以按多列组合排列吗 前端交互

列表可以按多列组合排列吗 前端交互

主要实现了el-table的多列排序,并在前端对数据进行排序。代码是四处复制的,仅供参考。

HTML:下面这三个是和排序有关的。

  1. @sort-change="sortChange"
  2. :header-cell-class-name="handleHeaderCellClass"
  3. sortable="custom"
  1. <el-table :data="showData"
  2. v-loading="loading"
  3. size="small"
  4. :row-key="tableData.xxx"
  5. border
  6. @sort-change="sortChange"
  7. :header-cell-class-name="handleHeaderCellClass"
  8. @header-dragend="headerDragend"
  9. style="width: 100%"
  10. height="100%">
  11. <el-table-column
  12. v-for="(item, index) in colList"
  13. :fixed="item.fixed"
  14. :key="`col_${index}`"
  15. :prop="item.prop"
  16. :label="item.label"
  17. :width="item.width"
  18. sortable="custom"
  19. >

JS:用到的两个方法

  1. handleHeaderCellClass({row, column, rowIndex, columnIndex}) {
  2. this.orderArray.forEach((element) => {
  3. if (column.property === element.prop) {
  4. column.order = element.order;
  5. }
  6. });
  7. },
  8. sortChange({column, prop, order}) {
  9. //记录排序字段与排序方式,存入数组
  10. if (order) {
  11. //参与排序
  12. let flagIsHave = false;
  13. this.orderArray.forEach((element) => {
  14. if (element.prop === prop) {
  15. element.order = order;
  16. flagIsHave = true;
  17. }
  18. });
  19. if (!flagIsHave) {
  20. this.orderArray.push({
  21. prop: prop,
  22. order: order,
  23. });
  24. }
  25. } else {
  26. //不参与排序
  27. this.orderArray = this.orderArray.filter((element) => {
  28. return element.prop !== prop
  29. });
  30. }
  31. //要通过后端进行排序操作的话, 可以将this.orderArray传到后端
  32. console.log(this.orderArray);
  33. //处理前端要展示的数据,对数据进行排序
  34. this.currentPage = 1//回到第一页
  35. this.tableData.sort((a, b) => {
  36. const sortFun = (index) => {
  37. const currentSort = this.orderArray[index]
  38. // 如果当前相同,则递归向下排序
  39. if (a[currentSort.prop] === b[currentSort.prop]) {
  40. // 如果没有下级了,直接按照当前层级进行排序
  41. if (this.orderArray.length - 1 >= index + 1) {
  42. return sortFun(index + 1)
  43. }
  44. }
  45. // 根据排序规则进行排序
  46. if (currentSort.order === 'ascending') {
  47. if (a[currentSort.prop] > b[currentSort.prop]) {
  48. return 1
  49. } else {
  50. return -1
  51. }
  52. } else {
  53. if (a[currentSort.prop] > b[currentSort.prop]) {
  54. return -1
  55. } else {
  56. return 1
  57. }
  58. }
  59. }
  60. // 排序递归方法
  61. return sortFun(0)
  62. })
  63. //showData为要展示的数据,这里是通过前端分页的
  64. this.showData = this.tableData.slice(0, this.pageSize)
  65. },

最后的效果

                           

都是复制粘贴缝合出来的,有不对的地方多多见谅。

参考:

el-table多列同时排序且样式保留(多用于后台排序)

js实现多列排序

如何根据数组中每一项的某个非数字属性进行排序

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

闽ICP备14008679号