1. <!-- 基础表格(表格 + 分页) -->
    2. <template>
    3. <div class="basic-table">
    4. <el-table
    5. ref="basicTable"
    6. height="100%"
    7. :data="tabVue.TableData"
    8. :highlight-current-row="tabVue.TableAttributes.highlightCurrentRow"
    9. :stripe="tabVue.TableAttributesConfig.stripe"
    10. :size="tabVue.TableAttributesConfig.size"
    11. :border="tabVue.TableAttributesConfig.border"
    12. :row-class-name="tabVue.TableAttributes.rowClassName"
    13. :cell-class-name="tabVue.TableAttributes.cellClassName"
    14. :expand-row-keys="tabVue.TableExpands"
    15. :row-key="tabVue.getRowKeys"
    16. :tree-props="tabVue.TableAttributes.treePros"
    17. @selection-change="tabVue.tableSelectionChange"
    18. @sort-change="tabVue.tableSortChange"
    19. @row-click="tabVue.tableRowClick"
    20. @row-dblclick="tabVue.rowDblClick"
    21. @expand-change="tabVue.getRowDetail">
    22. <!-- 展开行 -->
    23. <el-table-column>
    24. <template slot-scope="props">
    25. <slot name="tableRowDetail" :row="props.row">
    26. <div class="el-table-detailBox">
    27. <div class="table-detailBox-content">
    28. <span class="table-detailBox-title">{{ tabVue.TableController.rowDetail.title }}</span>
    29. <div class="table-detailBox-txt">{{ tabVue.ExpandsDetailMap[tabVue.getRowKeys(props.row)] }}</div>
    30. </div>
    31. </div>
    32. </slot>
    33. </template>
    34. </el-table-column>
    35. <!-- 复选框 -->
    36. <el-table-column v-if="tabVue.TableAttributes.hasSelection" type="selection" width="55" :selectable="tabVue.tableSelectable"></el-table-column>
    37. <el-table-column>
    38. v-for="(item, index) in tabVue.TableColumnsFilter"
    39. :key="`${item.pageColumnName}-${index}`"
    40. :sortable="item.sortable"
    41. :label="item.alias"
    42. :prop="item.pageColumnName"
    43. :sort-orders="['ascending', 'descending']"
    44. :class-name="item.className"
    45. </el-table-column>
    46. <!-- 展示列 -->
    47. <el-table-column
    48. v-for="(item, index) in tabVue.TableColumnsFilter"
    49. :key="`${item.pageColumnName}-${index}`"
    50. :sortable="item.sortable"
    51. :label="item.alias"
    52. :prop="item.pageColumnName"
    53. :sort-orders="['ascending', 'descending']"
    54. :class-name="item.className"
    55. :show-overflow-tooltip="item.pageColumnName =='remark' ? false : item.showOverflowTooltip"
    56. :min-width="item.minWidth"
    57. :width="item.width || undefined">
    58. <template slot-scope="scope">
    59. <slot name="tableColumn" row="scope.row" :columnItem="item">
    60. <template>{{ scope.row[item.pageColumnName] }}</template>
    61. </slot>
    62. </template>
    63. </el-table-column>
    64. <!-- 操作列 -->
    65. <template v-if="hasColumnControl">
    66. <el-table-column :width="controlColumnInfo" label="操作" fixed="right">
    67. <template slot-scope="scope">
    68. <table-column-control :column-control="tabVue.TableController.columnControl" :row-data="scope.row">
    69. </table-column-control>
    70. </template>
    71. </el-table-column>
    72. </template>
    73. </el-table>
    74. <!-- 分页 -->
    75. <div class="el-table-wrapper__content--footer">
    76. <el-pagination
    77. class="el-table__pagination"
    78. @size-change="tabVue.handleSizeChange"
    79. @current-change="tabVue.handleCurrentChange"
    80. :current-page="tabVue.Pagination.PageIndex"
    81. :page-sizes="tabVue.Pagination.PageSizes"
    82. :page-size="tabVue.Pagination.PageSize"
    83. :pager-count="tabVue.Pagination.PageCount"
    84. :layout="paginationTypeEnum._mapValue()[tabVue.TableAttributes.paginationType].layout"
    85. :total="tabVue.Pagination.DataCount">
    86. </el-pagination>
    87. </div>
    88. </div>
    89. </template>
    90. <script>
    91. import tableColumnControl from './table-column-control';
    92. import { paginationTypeEnum } from '@enums/common';
    93. export default {
    94. components: {
    95. tableColumnControl
    96. },
    97. props: {
    98. parent: { /* 指定父组件的this */
    99. type: Object
    100. }
    101. },
    102. data() {
    103. return {
    104. tabVue: this.parent || this.$parent,
    105. paginationTypeEnum
    106. }
    107. },
    108. computed: {
    109. // 获取操作列的宽度
    110. hasColumnControl() {
    111. return this.tabVue.TableController.columnControl && this.tabVue.TableController.columnControl.length;
    112. },
    113. controlColumnInfo() {
    114. if (this.tabVue.TableController.columnControlWidth) {
    115. return this.tabVue.TableController.columnControlWidth;
    116. }
    117. let len = this.tabVue.TableController.columnControlWidth;
    118. if (len === 1) {
    119. return '100px';
    120. } else if (len === 2) {
    121. return '180px';
    122. } else {
    123. return '200px';
    124. }
    125. }
    126. },
    127. methods: {
    128. // 刷新页面滚动条
    129. refreshScrollbar() {
    130. this.$refs.moduleTable.bodyWrapper.scrollTop = 0;
    131. }
    132. },
    133. watch: {
    134. 'tabVue.TableData': {
    135. deep: true,
    136. handler() {
    137. this.refreshScrollbar();
    138. }
    139. }
    140. }
    141. }
    142. </script>