当前位置:   article > 正文

Vxetable 递归多级表头_j-vxe-table多表头

j-vxe-table多表头

在对vxetable 进行二次封装的时候,多级表头也是需要考虑进去的,所以需要封装一个递归列组件进行多级表头的一个渲染。

  1. // my-table.vue
  2. <vxe-table
  3. ref="xTable"
  4. :key="currentKey"
  5. :data="pageData?.list || []"
  6. show-header-overflow="tooltip"
  7. show-overflow="tooltip"
  8. border="inner"
  9. :row-style="rowStyle"
  10. @current-change="onCurrentChange"
  11. >
  12. <!-- 普通列 -->
  13. <template v-for="(tOptions) of tableNormalOptions" :key="tOptions.prop">
  14. <!-- 单表头 -->
  15. <vxe-column
  16. v-if="!tOptions.child || tOptions.child?.length===0"
  17. :title="tOptions.showName"
  18. :field="tOptions.uniqueKey"
  19. :width="tOptions.width ? tOptions.width : ''"
  20. :min-width="tOptions.minWidth ? tOptions.minWidth : '100'"
  21. :header-align="tOptions.headerAlign ? tOptions.headerAlign : 'center'"
  22. :align="tOptions.align ? tOptions.align : 'center'"
  23. :fixed="tOptions.fixed ? tOptions.fixed : ''"
  24. :sortable="tOptions.sortable ? true : false"
  25. :sort-by="tOptions.sortable ? tOptions.sortBy : ''"
  26. :resizable="tOptions.resizable !== null ? tOptions.resizable : true"
  27. :visible="tOptions.visible !== null ? tOptions.visible : false"
  28. :filters="tOptions.filters"
  29. >
  30. <!-- 自定义列内容格式 -->
  31. <template v-if="tOptions.slot" #default="scope">
  32. <t-button
  33. class="hyperlink-button"
  34. :text="`${isNoVal(scope.row[tOptions.uniqueKey])}`"
  35. type="text"
  36. @click="openNewWindow(tOptions.uniqueKey)"
  37. ></t-button>
  38. </template>
  39. <!-- 默认展示格式(此处做了判空处理, 如果为空, 则展示小短横线) -->
  40. <template v-else #default="scope">
  41. {{ `${isNoVal(scope.row[tOptions.uniqueKey])}` }}
  42. </template>
  43. </vxe-column>
  44. <!-- 多表头 -->
  45. <cross-table-vxe-colgroup
  46. v-else
  47. :data="tOptions"
  48. :all-sheet-resources="allSheetResources"
  49. ></cross-table-vxe-colgroup>
  50. </template>
  51. </vxe-table>
  1. // cross-table-vxe-colgroup.vue
  2. <template>
  3. <vxe-colgroup
  4. :title="data.name"
  5. :header-align="data?.headAlign||'center'"
  6. >
  7. <template
  8. v-for="item in data.child"
  9. :key="item.prop"
  10. >
  11. <vxe-column
  12. v-if="!item.child || item.child?.length ===0"
  13. :title="item.name"
  14. :field="item.uniqueKey"
  15. :width="item.width ? item.width : ''"
  16. :min-width="item.minWidth ? item.minWidth : '100'"
  17. :header-align="item.headerAlign ? item.headerAlign : 'center'"
  18. :align="item.align ? item.align : 'center'"
  19. :fixed="item.fixed ? item.fixed : ''"
  20. :sortable="item.sortable ? true : false"
  21. :sort-by="item.sortable ? item.sortBy : ''"
  22. :resizable="item.resizable ? item.resizable : false"
  23. :visible="item.visible !== null ? item.visible : false"
  24. :filters="item.filters"
  25. >
  26. <!-- 默认展示格式(此处做了判空处理, 如果为空, 则展示小短横线) -->
  27. <template #default="scope">
  28. {{ scope.row[item.uniqueKey]}
  29. </template>
  30. </vxe-column>
  31. <cross-table-vxe-colgroup v-else :data="item"></cross-table-vxe-colgroup>
  32. </template>
  33. </vxe-colgroup>
  34. </template>

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

闽ICP备14008679号