Table: revert sync fixed table rows height (#21486)

pull/19473/head^2
好多大米 2021-11-23 15:54:40 +08:00 committed by GitHub
parent 7f54540b6b
commit 55bac06f0f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 13 additions and 77 deletions

View File

@ -98,7 +98,6 @@ Watcher.prototype.mutations = {
} }
this.updateTableScrollY(); this.updateTableScrollY();
this.syncFixedTableRowHeight();
}, },
filterChange(states, options) { filterChange(states, options) {
@ -112,7 +111,6 @@ Watcher.prototype.mutations = {
} }
this.updateTableScrollY(); this.updateTableScrollY();
this.syncFixedTableRowHeight();
}, },
toggleAllSelection() { toggleAllSelection() {
@ -146,8 +144,4 @@ Watcher.prototype.updateTableScrollY = function() {
Vue.nextTick(this.table.updateScrollY); Vue.nextTick(this.table.updateScrollY);
}; };
Watcher.prototype.syncFixedTableRowHeight = function() {
Vue.nextTick(() => this.table.layout.syncFixedTableRowHeight());
};
export default Watcher; export default Watcher;

View File

@ -41,22 +41,13 @@ export default {
border="0"> border="0">
<colgroup> <colgroup>
{ {
this.columns this.columns.map(column => <col name={column.id} key={column.id} />)
.filter((column, index) => !(this.columnsHidden[index] && this.fixed))
.map(column => <col name={column.id} key={column.id} />)
} }
</colgroup> </colgroup>
<tbody> <tbody>
{ {
data.reduce((acc, row) => { data.reduce((acc, row) => {
const isSelected = this.store.isSelected(row); return acc.concat(this.wrappedRowRender(row, acc.length));
const isExpanded = this.store.states.expandRows.indexOf(row) > -1;
return acc.concat(this.wrappedRowRender({
row,
$index: acc.length,
isSelected,
isExpanded
}));
}, []) }, [])
} }
<el-tooltip effect={this.table.tooltipEffect} placement="top" ref="tooltip" content={this.tooltipContent}></el-tooltip> <el-tooltip effect={this.table.tooltipEffect} placement="top" ref="tooltip" content={this.tooltipContent}></el-tooltip>
@ -329,18 +320,8 @@ export default {
table.$emit(`row-${name}`, row, column, event); table.$emit(`row-${name}`, row, column, event);
}, },
getRowHeight(rowKey) { rowRender(row, $index, treeRowData) {
const { fixed } = this;
if (!fixed) {
return null;
}
const height = (this.tableLayout.fixedColumnsBodyRowsHeight || {})[rowKey];
return typeof height === 'number' ? `${height}px` : height;
},
rowRender({ row, $index, treeRowData, isSelected, isExpanded }) {
const { treeIndent, columns, firstDefaultColumnIndex } = this; const { treeIndent, columns, firstDefaultColumnIndex } = this;
const rowClasses = this.getRowClass(row, $index); const rowClasses = this.getRowClass(row, $index);
let display = true; let display = true;
if (treeRowData) { if (treeRowData) {
@ -352,14 +333,9 @@ export default {
let displayStyle = display ? null : { let displayStyle = display ? null : {
display: 'none' display: 'none'
}; };
const height = this.getRowHeight($index);
const heightStyle = height ? {
height
} : null;
return ( return (
<TableRow <TableRow
style={[displayStyle, this.getRowStyle(row, $index), heightStyle]} style={[displayStyle, this.getRowStyle(row, $index)]}
class={rowClasses} class={rowClasses}
key={this.getKeyOfRow(row, $index)} key={this.getKeyOfRow(row, $index)}
nativeOn-dblclick={($event) => this.handleDoubleClick($event, row)} nativeOn-dblclick={($event) => this.handleDoubleClick($event, row)}
@ -382,21 +358,21 @@ export default {
getCellClass={this.getCellClass} getCellClass={this.getCellClass}
handleCellMouseEnter={this.handleCellMouseEnter} handleCellMouseEnter={this.handleCellMouseEnter}
handleCellMouseLeave={this.handleCellMouseLeave} handleCellMouseLeave={this.handleCellMouseLeave}
isSelected={isSelected} isSelected={this.store.isSelected(row)}
isExpanded={isExpanded} isExpanded={this.store.states.expandRows.indexOf(row) > -1}
fixed={this.fixed} fixed={this.fixed}
> >
</TableRow> </TableRow>
); );
}, },
wrappedRowRender({ row, $index, isSelected, isExpanded }) { wrappedRowRender(row, $index) {
const store = this.store; const store = this.store;
const { isRowExpanded, assertRowKey } = store; const { isRowExpanded, assertRowKey } = store;
const { treeData, lazyTreeNodeMap, childrenColumnName, rowKey } = store.states; const { treeData, lazyTreeNodeMap, childrenColumnName, rowKey } = store.states;
if (this.hasExpandColumn && isRowExpanded(row)) { if (this.hasExpandColumn && isRowExpanded(row)) {
const renderExpanded = this.table.renderExpanded; const renderExpanded = this.table.renderExpanded;
const tr = this.rowRender({ row, $index, isSelected, isExpanded }); const tr = this.rowRender(row, $index);
if (!renderExpanded) { if (!renderExpanded) {
console.error('[Element Error]renderExpanded is required.'); console.error('[Element Error]renderExpanded is required.');
return tr; return tr;
@ -429,7 +405,7 @@ export default {
treeRowData.loading = cur.loading; treeRowData.loading = cur.loading;
} }
} }
const tmp = [this.rowRender({ row, $index, treeRowData, isSelected, isExpanded })]; const tmp = [this.rowRender(row, $index, treeRowData)];
// 渲染嵌套数据 // 渲染嵌套数据
if (cur) { if (cur) {
// currentRow 记录的是 index所以还需主动增加 TreeTable 的 index // currentRow 记录的是 index所以还需主动增加 TreeTable 的 index
@ -463,7 +439,7 @@ export default {
} }
} }
i++; i++;
tmp.push(this.rowRender({ row: node, $index: $index + i, treeRowData: innerTreeRowData, isSelected, isExpanded })); tmp.push(this.rowRender(node, $index + i, innerTreeRowData));
if (cur) { if (cur) {
const nodes = lazyTreeNodeMap[childKey] || node[childrenColumnName]; const nodes = lazyTreeNodeMap[childKey] || node[childrenColumnName];
traverse(nodes, cur); traverse(nodes, cur);
@ -477,7 +453,7 @@ export default {
} }
return tmp; return tmp;
} else { } else {
return this.rowRender({ row, $index, isSelected, isExpanded }); return this.rowRender(row, $index);
} }
} }
} }

View File

@ -25,7 +25,6 @@ class TableLayout {
this.bodyHeight = null; // Table Height - Table Header Height this.bodyHeight = null; // Table Height - Table Header Height
this.fixedBodyHeight = null; // Table Height - Table Header Height - Scroll Bar Height this.fixedBodyHeight = null; // Table Height - Table Header Height - Scroll Bar Height
this.gutterWidth = scrollbarWidth(); this.gutterWidth = scrollbarWidth();
this.fixedColumnsBodyRowsHeight = {};
for (let name in options) { for (let name in options) {
if (options.hasOwnProperty(name)) { if (options.hasOwnProperty(name)) {
@ -114,40 +113,10 @@ class TableLayout {
const noData = !(this.store.states.data && this.store.states.data.length); const noData = !(this.store.states.data && this.store.states.data.length);
this.viewportHeight = this.scrollX ? tableHeight - (noData ? 0 : this.gutterWidth) : tableHeight; this.viewportHeight = this.scrollX ? tableHeight - (noData ? 0 : this.gutterWidth) : tableHeight;
setTimeout(() => {
this.syncFixedTableRowHeight();
});
this.updateScrollY(); this.updateScrollY();
this.notifyObservers('scrollable'); this.notifyObservers('scrollable');
} }
syncFixedTableRowHeight() {
const fixedColumns = this.store.states.fixedColumns;
const rightFixedColumns = this.store.states.rightFixedColumns;
if (fixedColumns.length + rightFixedColumns.length === 0) {
return;
}
const { bodyWrapper } = this.table.$refs;
const tableRect = bodyWrapper.getBoundingClientRect();
if (tableRect.height !== undefined && tableRect.height <= 0) {
return;
}
const bodyRows = bodyWrapper.querySelectorAll('.el-table__row') || [];
const fixedColumnsBodyRowsHeight = [].reduce.call(
bodyRows,
(acc, row, index) => {
const height =
row.getBoundingClientRect().height || 'auto';
acc[index] = height;
return acc;
},
{}
);
this.fixedColumnsBodyRowsHeight = fixedColumnsBodyRowsHeight;
};
headerDisplayNone(elm) { headerDisplayNone(elm) {
if (!elm) return true; if (!elm) return true;
let headerChild = elm; let headerChild = elm;

View File

@ -39,9 +39,6 @@ export default {
<tr> <tr>
{ {
columns.map((column, cellIndex) => { columns.map((column, cellIndex) => {
if (columnsHidden[cellIndex] && this.fixed) {
return null;
}
const { rowspan, colspan } = this.getSpan(row, column, $index, cellIndex); const { rowspan, colspan } = this.getSpan(row, column, $index, cellIndex);
if (!rowspan || !colspan) { if (!rowspan || !colspan) {
return null; return null;

View File

@ -115,7 +115,7 @@
:row-class-name="rowClassName" :row-class-name="rowClassName"
:row-style="rowStyle" :row-style="rowStyle"
:style="{ :style="{
width: layout.fixedWidth ? layout.fixedWidth + 'px' : '' width: bodyWidth
}"> }">
</table-body> </table-body>
<div <div
@ -176,7 +176,7 @@
:row-style="rowStyle" :row-style="rowStyle"
:highlight="highlightCurrentRow" :highlight="highlightCurrentRow"
:style="{ :style="{
width: layout.rightFixedWidth ? layout.rightFixedWidth + 'px' : '', width: bodyWidth
}"> }">
</table-body> </table-body>
<div <div