0


element ui 的多级表头的动态生成

1.需封装两个组件一个为DynamicTable.vueTableColumn.vue(主要是使用递归来对表头进行循环生成)

DynamicTable.vue

  1. <template>
  2. <el-table :data="tableData" border :header-cell-style="headerStyle" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" row-key="areaCode" lazy :load="load">
  3. <template v-for="item in tableHeader">
  4. <table-column v-if="item.children && item.children.length" :key="item.id"
  5. :coloumn-header="item"></table-column>
  6. <el-table-column v-else :key="item.id + 'else'" :label="item.label" :prop="item.prop"
  7. align="center" :min-width="item.width ? item.width : '200px'"></el-table-column>
  8. </template>
  9. </el-table>
  10. </template>
  11. <script>
  12. import TableColumn from '../TableColumn'
  13. export default {
  14. props: {
  15. // 表格的数据
  16. tableData: {
  17. type: Array,
  18. required: true
  19. },
  20. // 多级表头的数据
  21. tableHeader: {
  22. type: Array,
  23. required: true
  24. },
  25. // @Description: 设置表头样式
  26. headerStyle: {
  27. type: Object,
  28. default: () => {
  29. return {
  30. background: '#fff',
  31. fontSize: '14px',
  32. fontFamily: 'AlibabaPuHuiTi_2_85_Bold',
  33. color: '#222222'
  34. }
  35. }
  36. }
  37. },
  38. components: {
  39. TableColumn
  40. },
  41. methods: {
  42. load(tree, treeNode, resolve) {
  43. this.$emit('load', tree, treeNode, resolve)
  44. },
  45. }
  46. }
  47. </script>
  48. <style scoped></style>

TableColumn.vue

  1. <template>
  2. <el-table-column :label="coloumnHeader.label" :prop="coloumnHeader.label" show-overflow-tooltip align="center">
  3. <template v-for="item in coloumnHeader.children">
  4. <tableColumn v-if="item.children && item.children.length" :key="item.id" :coloumn-header="item">
  5. </tableColumn>
  6. <el-table-column v-else :key="item.name" :label="item.label" :prop="item.prop"
  7. align="center"></el-table-column>
  8. </template>
  9. </el-table-column>
  10. </template>
  11. <script>
  12. export default {
  13. name: 'tableColumn',
  14. props: {
  15. // 表头数据信息
  16. coloumnHeader: {
  17. type: Object,
  18. required: true
  19. }
  20. }
  21. }
  22. </script>
  23. <style scoped></style>

2.组件使用方式

  1. <template>
  2. <DynamicTable :table-data="tableData" :table-header="tableConfig" v-if="dynamicTableShow"></DynamicTable>
  3. </template>
  4. <script>
  5. import DynamicTable from '@/components/DynamicTable'
  6. export default {
  7. // 分地区披露统计
  8. name: 'areaStatistics',
  9. components: {
  10. DynamicTable
  11. },
  12. data() {
  13. return {
  14. dynamicTableShow: true,
  15. // 表头数据
  16. tableConfig: [
  17. {
  18. id: 100,
  19. label: '年度一级表头',
  20. prop: '',
  21. children: [
  22. {
  23. id: 110,
  24. label: '年度二级表头1',
  25. prop: 'districtName'
  26. },
  27. {
  28. id: 120,
  29. label: '年度二级表头2',
  30. prop: 'timeDimension'
  31. }
  32. ]
  33. },
  34. {
  35. id: 200,
  36. label: '年度一级表头1',
  37. prop: '',
  38. children: [
  39. {
  40. id: 210,
  41. label: '年度二级表头2',
  42. prop: '',
  43. children: [
  44. {
  45. id: 211,
  46. label: '年度三级表头3',
  47. prop: 'residentPopNum'
  48. },
  49. {
  50. id: 212,
  51. label: '年度三级表头',
  52. prop: 'residentPopDst'
  53. }
  54. ]
  55. }
  56. ]
  57. },
  58. {
  59. id: 300,
  60. label: '年度一级表头1',
  61. prop: '',
  62. children: [
  63. {
  64. id: 310,
  65. label: '年度二级表头2',
  66. prop: '',
  67. children: [
  68. {
  69. id: 311,
  70. label: '年度三级表头3',
  71. prop: 'liveLandArea'
  72. },
  73. {
  74. id: 312,
  75. label: '年度三级表头3',
  76. prop: 'liveLandDst'
  77. }
  78. ]
  79. },
  80. {
  81. id: 320,
  82. label: '年度二级表头1',
  83. prop: '',
  84. children: [
  85. {
  86. id: 321,
  87. label: '年度三级表头3',
  88. prop: 'employmentLandArea'
  89. },
  90. {
  91. id: 322,
  92. label: '年度三级表头3',
  93. prop: 'employmentLandDst'
  94. }
  95. ]
  96. }
  97. ]
  98. }
  99. ],
  100. tableData: [
  101. {
  102. districtName: '1',
  103. timeDimension: '2',
  104. residentPopNum: '3',
  105. residentPopDst: '4',
  106. liveLandArea: '5',
  107. liveLandDst: '6',
  108. employmentLandArea: '7',
  109. employmentLandDst: '8'
  110. }
  111. ],
  112. }
  113. },
  114. methods: {
  115. changeselect() {
  116. this.dynamicTableShow = false // 将表格组件进行销毁
  117. this.tableConfig = [
  118. {
  119. id: 100,
  120. label: '半年度表头',
  121. prop: '',
  122. children: [
  123. {
  124. id: 110,
  125. label: '半年度表头1',
  126. prop: 'districtName'
  127. },
  128. {
  129. id: 120,
  130. label: '半年度表头2',
  131. prop: 'timeDimension'
  132. }
  133. ]
  134. }
  135. ]
  136. this.$nextTick(() => {
  137. this.dynamicTableShow = true
  138. })
  139. }
  140. }
  141. }
  142. </script>
  143. <style lang="scss" scoped></style>

参考网站https://www.cnblogs.com/llcdxh/p/9473458.html

标签: ui vue.js javascript

本文转载自: https://blog.csdn.net/weixin_70955790/article/details/141224308
版权归原作者 小乐乐乐乐乐子 所有, 如有侵权,请联系我们删除。

“element ui 的多级表头的动态生成”的评论:

还没有评论