当前位置:   article > 正文

Vue ElementUI中el-table表格嵌套样式问题_element表格展开嵌套表格

element表格展开嵌套表格

一、表格嵌套要求:

  1. 两个表格嵌套,当父表格有children数组时子表格才展示;
  2. 子表格数据少于父表格展示字段,且对应固定操作列不同;

二、嵌套问题:

当使用el-table的type='expand'实现表格嵌套时,样式出现以下问题:

  1. 展开图标每条数据都展示了,实际上接口数据并不是都有children数组;
  2. 在表格嵌套后,打开子表格,高亮显示在经过子表格后对应不上;
  3. 父表格的操作列固定在右侧影响了子表格的显示;
  4. 滑动到表格底部时,父子表格的固定列对不齐;

修改前效果如下:

修改后效果如下:

三、代码实现:

1、表格定义唯一值row-key="indexId"和类名:row-class-name="getRowClass"

  1. <el-table
  2. :row-class-name="getRowClass"
  3. ref="table"
  4. v-loading="tableLoading"
  5. size="mini"
  6. height="100%"
  7. :data="tableData"
  8. row-key="indexId"
  9. tooltip-effect="dark"
  10. :header-cell-style="{
  11. background: '#f5f7fa',
  12. fontWeight: 'bold',
  13. color: '#303133'
  14. }"
  15. @expand-change="expandChange"
  16. border
  17. >
  18. <el-table-column type="expand">
  19. <template slot-scope="props">
  20. <!-- 表格嵌套第二层 -->
  21. <el-table
  22. ref="sonTable"
  23. :style="{
  24. height: `${(props.row.children.length + 1) * 36 + 1}px`,
  25. width: '100%'
  26. }"
  27. row-key="indexId"
  28. :data="props.row.children"
  29. tooltip-effect="dark"
  30. :header-cell-style="{
  31. background: '#f5f7fa',
  32. fontWeight: 'bold',
  33. color: '#303133'
  34. }"
  35. border
  36. >
  37. <!-- 子表格字段 -->
  38. <el-table-column> XXX </el-table-column>
  39. </el-table>
  40. <!-- 父表格字段 -->
  41. <el-table-column> XXX </el-table-column>
  42. </el-table>

2、类名判断

  1. // 表格类名方法
  2. getRowClass({ row, rowIndex }) {
  3. // 把每一行的索引放进row
  4. row.index = rowIndex
  5. // 判断当前行是否有子数据
  6. if (
  7. row.children === null ||
  8. row.children === undefined ||
  9. row.children.length === 0
  10. ) {
  11. return 'row-hidden-expand-icon'
  12. } else {
  13. return 'row-show-icon'
  14. }
  15. },

3、表格样式

  1. <style lang="scss" scoped>
  2. // 子表格覆盖右侧fix
  3. ::v-deep .el-table__body-wrapper {
  4. .el-table__expanded-cell {
  5. z-index: 100;
  6. }
  7. }
  8. // 有子表格才显示展开箭头
  9. :deep(.row-hidden-expand-icon) {
  10. td {
  11. &:first-child {
  12. .el-icon {
  13. visibility: hidden;
  14. }
  15. }
  16. .el-table__expand-icon {
  17. pointer-events: none;
  18. }
  19. }
  20. }
  21. // 去掉表格的第三、第四个单元格出现的展开图标
  22. :deep(.el-table__row) {
  23. .el-table__cell {
  24. &:nth-child(3),
  25. &:nth-child(4) {
  26. .el-table__expand-icon {
  27. pointer-events: none;
  28. display: none;
  29. }
  30. }
  31. }
  32. }
  33. // 子表格样式
  34. :deep(.el-table__expanded-cell) {
  35. padding: 10px !important;
  36. }
  37. // 修复hover高亮不同步
  38. ::v-deep .el-table__body tr.hover-row > td.el-table__cell {
  39. background-color: transparent;
  40. }
  41. ::v-deep .el-table .el-table__row:hover {
  42. background-color: #f5f7fa;
  43. }
  44. ::v-deep .el-table__expanded-cell:hover {
  45. background-color: transparent;
  46. }
  47. // 修复滚到下面对不齐
  48. ::v-deep .el-table__fixed-body-wrapper .el-table__body {
  49. padding-bottom: 12px;
  50. }
  51. // 使得每一行都为36px高度
  52. ::v-deep .row-show-icon {
  53. td {
  54. &:first-child {
  55. .cell {
  56. height: 24px;
  57. }
  58. }
  59. }
  60. }
  61. :deep(.el-table .el-table__cell) {
  62. height: 36px !important;
  63. }
  64. </style>
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号