Compare commits

...

30 Commits

Author SHA1 Message Date
gx 3b5ae93b7a fix: 火狐浏览器,固定表格跟随resize事件产生的滚动条隐藏 2021-04-22 21:19:44 +08:00
gx 74737239c3 fix: stop drag when distance is less than 100 2021-04-21 17:22:26 +08:00
gx e9f3088eb0 fix: 综合修改 2021-04-19 21:17:32 +08:00
gx 6524a1d9aa fix: 兼容IE 2021-04-13 15:48:33 +08:00
gx 87ed08a724 fix: remove loading 2021-04-09 17:17:42 +08:00
gx 7c9066da5b fix: sync width 2021-04-02 16:08:29 +08:00
gx-mac 929f501ff0 fix: add syncFixedRowHeight 2021-03-30 15:13:19 +08:00
gx 1ed2de9c61 fix: add loading text for infinite table 2021-03-29 01:53:18 +08:00
gx 3ccd8210a2 fix: update 2021-03-28 19:23:41 +08:00
gx 4215c4ec1e fix: update 2021-03-21 17:51:58 +08:00
gx 4db60bd1b6 fix: use HTMLCollection to judge instead of Array 2021-03-21 17:50:59 +08:00
gx a2024a9827 fix: check if trs and action exist in doEventList 2021-03-18 16:37:51 +08:00
gx 0c7e3d9d7e fix: delete "dataChanged" operation in life cycle 2021-03-17 17:37:35 +08:00
gx b98ef9d4e8 fix: change the way to judge whether an array is empty 2021-03-16 20:12:52 +08:00
gx b0914c928e fix: reset scrollbar when the whole width changes 2021-03-16 14:12:35 +08:00
=gx d6e16c2ef1 fix: reset left/rightBodyRows when data changes 2021-03-12 15:41:22 +08:00
gx-mac ffd42b97e6 fix: change NCC record config 2021-03-11 20:18:01 +08:00
gx-mac f1c585a850 2.3.15-beta.7 2021-03-05 10:51:21 +08:00
gx-mac f1dfb9c85f 2.3.15-beta.6 2021-03-04 16:40:17 +08:00
gx-mac e072df43fb fix: css update 2021-03-04 10:24:24 +08:00
gx-mac 290ba7aed8 fix: css update 2021-03-04 10:19:18 +08:00
gx-mac 43193e089b fix: version update 2021-03-03 22:09:20 +08:00
gx-mac 3c0aa855a7 fix: scroll.x传100%的时候不显示各类滚动条 2021-03-03 22:08:00 +08:00
gx-mac cb7d54be80 fix: update 2021-03-02 16:40:03 +08:00
gx-mac 06a8d7f6ff fix: recalculate scrolltop when scroll.y changes 2021-03-02 16:37:36 +08:00
gx-mac 6b8ad2414e fix: scrollbar issue 2021-03-01 02:07:39 +08:00
gx-mac abf567d6da fix: scrollbar css 2021-03-01 02:05:10 +08:00
houjitong e1d73a9c33 fix: 发包 2021-02-24 17:06:53 +08:00
gx 6b609d1a3d fix: 2.3.15-beta.1 2021-02-24 16:58:38 +08:00
gx d867fdff33 fix: 修改触发onScroll事件的元素层级 2021-02-24 16:53:37 +08:00
25 changed files with 3910 additions and 2940 deletions

View File

@ -902,3 +902,17 @@
line-height: 30px; } line-height: 30px; }
.u-dropdown ul.u-table-inline-op-dropdowm li.u-dropdown-menu-item i.uf { .u-dropdown ul.u-table-inline-op-dropdowm li.u-dropdown-menu-item i.uf {
font-size: 12px; } font-size: 12px; }
.loading-td {
position: relative !important;
display: block !important; }
.loading-td.pre-td {
bottom: 0; }
.loading-div {
position: absolute;
border: none !important; }
.loading-div.pre {
bottom: 0; }
.loading-div.suf {
top: 0; }

View File

@ -168,6 +168,7 @@ var defaultProps = {
setRowParentIndex: function setRowParentIndex() {}, setRowParentIndex: function setRowParentIndex() {},
tabIndex: '0', tabIndex: '0',
heightConsistent: false, heightConsistent: false,
syncFixedRowHeight: false,
size: 'md', size: 'md',
rowDraggAble: false, rowDraggAble: false,
hideDragHandle: false, hideDragHandle: false,
@ -241,6 +242,9 @@ var Table = function (_Component) {
} }
}); });
if (currentIndex > -1) { if (currentIndex > -1) {
if (_this.contentTable.dragType == 'top') {
targetIndex = targetIndex - 1;
}
data = _this.swapArray(data, currentIndex, targetIndex); data = _this.swapArray(data, currentIndex, targetIndex);
_this.props.onDropRow && _this.props.onDropRow(data, record, targetIndex); _this.props.onDropRow && _this.props.onDropRow(data, record, targetIndex);
_this.setState({ _this.setState({
@ -289,6 +293,17 @@ var Table = function (_Component) {
return Number(tdPaddingTop.replace('px', '')) + Number(tdPaddingBottom.replace('px', '')) + Number(tdBorderTop.replace('px', '')) + Number(tdBorderBottom.replace('px', '')); return Number(tdPaddingTop.replace('px', '')) + Number(tdPaddingBottom.replace('px', '')) + Number(tdBorderTop.replace('px', '')) + Number(tdBorderBottom.replace('px', ''));
}; };
_this.getFlatRecords = function (data) {
var result = [];
for (var i = 0; i < data.length; i++) {
result.push(data[i]);
if ((data[i].children || []).length) {
result = result.concat(_this.getFlatRecords(data[i].children));
}
}
return result;
};
_this.clearBodyMouseLeaveTimer = function () { _this.clearBodyMouseLeaveTimer = function () {
if (_this.bodyMouseLeaveTimmer) { if (_this.bodyMouseLeaveTimmer) {
clearTimeout(_this.bodyMouseLeaveTimmer); clearTimeout(_this.bodyMouseLeaveTimmer);
@ -370,6 +385,7 @@ var Table = function (_Component) {
_this.getFooter = _this.getFooter.bind(_this); _this.getFooter = _this.getFooter.bind(_this);
_this.getEmptyText = _this.getEmptyText.bind(_this); _this.getEmptyText = _this.getEmptyText.bind(_this);
_this.getHeaderRowStyle = _this.getHeaderRowStyle.bind(_this); _this.getHeaderRowStyle = _this.getHeaderRowStyle.bind(_this);
_this.manualSyncFixedTableRowHeight = _this.manualSyncFixedTableRowHeight.bind(_this);
_this.syncFixedTableRowHeight = _this.syncFixedTableRowHeight.bind(_this); _this.syncFixedTableRowHeight = _this.syncFixedTableRowHeight.bind(_this);
_this.resetScrollX = _this.resetScrollX.bind(_this); _this.resetScrollX = _this.resetScrollX.bind(_this);
_this.findExpandedRow = _this.findExpandedRow.bind(_this); _this.findExpandedRow = _this.findExpandedRow.bind(_this);
@ -384,6 +400,7 @@ var Table = function (_Component) {
_this.leftColumnsLength; //左侧固定列的长度 _this.leftColumnsLength; //左侧固定列的长度
_this.centerColumnsLength; //非固定列的长度 _this.centerColumnsLength; //非固定列的长度
_this.columnsChildrenList = []; //复杂表头、所有叶子节点 _this.columnsChildrenList = []; //复杂表头、所有叶子节点
_this.dataChanged = false; // 数据是否改变
return _this; return _this;
} }
@ -478,9 +495,63 @@ var Table = function (_Component) {
// if (prevProps.data.length === 0 || this.props.data.length === 0 ) { // if (prevProps.data.length === 0 || this.props.data.length === 0 ) {
// this.resetScrollX(); // this.resetScrollX();
// } // }
// 当懒加载手动设置的scroll.y发生变化时滚动条回到顶部
var prevScrollY = prevProps.scroll.y;
var currentScrollY = this.props.scroll.y;
if (prevScrollY && currentScrollY && prevScrollY !== currentScrollY && this.props.lazyLoad && !this.props.ignoreScrollYChange) {
this.bodyTable.scrollTop = 0;
} else if (this.props.ignoreScrollYChange && currentScrollY && prevScrollY) {
if (prevScrollY !== currentScrollY) {
var bodyScrollTop = this.bodyTable.scrollTop;
if (bodyScrollTop === 0) {
// 在顶部的时候,滚动条不用动
this.bodyTable.scrollTop = 0;
} else {
var distance = bodyScrollTop + currentScrollY - prevScrollY;
if (distance < 0) {
this.bodyTable.scrollTop = 0;
} else {
var _bodyTable = this.bodyTable,
scrollHeight = _bodyTable.scrollHeight,
scrollTop = _bodyTable.scrollTop;
var bottomDistance = Math.abs(scrollHeight - scrollTop - prevScrollY); // 在最底部的时候也不用滚动滚动条
if (bottomDistance < 5) {
// 有些dom计算不是十分精确设置一个值来缓冲一下
this.bodyTable.scrollTop = scrollTop + prevScrollY - currentScrollY;
} else {
this.bodyTable.scrollTop = distance;
}
}
}
} else {
this.bodyTable.scrollTop += 1;
}
}
// 是否传入 scroll中的y属性如果传入判断是否是整数如果是则进行比较 。bodyTable 的clientHeight进行判断 // 是否传入 scroll中的y属性如果传入判断是否是整数如果是则进行比较 。bodyTable 的clientHeight进行判断
this.isShowScrollY(); this.isShowScrollY();
if (this.bodyTable) {
var currentOverflowX = window.getComputedStyle(this.bodyTable).overflowX;
if (!this.props.scroll.x && currentOverflowX === 'scroll') {
this.bodyTable.style.overflowX = 'hidden';
}
if (this.props.scroll.x && currentOverflowX !== 'scroll') {
// 此处应该对比一下实际的
if (this.computeWidth > this.contentDomWidth) {
this.bodyTable.style.overflowX = 'scroll';
}
}
}
if (this.bodyTableOuter) {
// 隐藏几个不需要真正滚动的父元素的滚动条
this.bodyTableOuter.style.overflowY = 'hidden';
}
if (this.fixedColumnsBodyLeftOuter) {
this.fixedColumnsBodyLeftOuter.style.overflowY = 'hidden';
}
if (this.fixedColumnsBodyRightOuter) {
this.fixedColumnsBodyRightOuter.style.overflowY = 'hidden';
}
}; };
Table.prototype.componentWillUnmount = function componentWillUnmount() { Table.prototype.componentWillUnmount = function componentWillUnmount() {
@ -916,7 +987,7 @@ var Table = function (_Component) {
var expandIconAsCell = fixed !== 'right' ? props.expandIconAsCell : false; var expandIconAsCell = fixed !== 'right' ? props.expandIconAsCell : false;
var expandIconColumnIndex = props.expandIconColumnIndex; var expandIconColumnIndex = props.expandIconColumnIndex;
if (props.lazyLoad && props.lazyLoad.preHeight && indent == 0) { if (props.lazyLoad && props.lazyLoad.preHeight && indent == 0) {
rst.push(_react2["default"].createElement(_TableRow2["default"], { onPaste: onPaste, height: props.lazyLoad.preHeight, columns: [], className: '', key: 'table_row_first', store: this.store, visible: true })); rst.push(_react2["default"].createElement(_TableRow2["default"], { onPaste: onPaste, containerWidth: this.contentDomWidth, isPre: true, height: props.lazyLoad.preHeight, columns: [], className: '', key: 'table_row_first', store: this.store, visible: true }));
} }
var lazyCurrentIndex = props.lazyLoad && props.lazyLoad.startIndex ? props.lazyLoad.startIndex : 0; var lazyCurrentIndex = props.lazyLoad && props.lazyLoad.startIndex ? props.lazyLoad.startIndex : 0;
var lazyParentIndex = props.lazyLoad && props.lazyLoad.startParentIndex ? props.lazyLoad.startParentIndex : 0; var lazyParentIndex = props.lazyLoad && props.lazyLoad.startParentIndex ? props.lazyLoad.startParentIndex : 0;
@ -926,7 +997,7 @@ var Table = function (_Component) {
var record = data[i]; var record = data[i];
var key = this.getRowKey(record, i); var key = this.getRowKey(record, i);
// 兼容 NCC 以前的业务逻辑,支持外部通过 record 中的 isleaf 字段,判断是否为叶子节点 // 兼容 NCC 以前的业务逻辑,支持外部通过 record 中的 isleaf 字段,判断是否为叶子节点
record['_isLeaf'] = typeof record['isleaf'] === 'boolean' ? record['isleaf'] : record['_isLeaf']; typeof record['isleaf'] === 'boolean' && (record['_isLeaf'] = record['isleaf']);
// _isLeaf 字段是在 bigData 里添加的,只有层级树大数据场景需要该字段 // _isLeaf 字段是在 bigData 里添加的,只有层级树大数据场景需要该字段
// _isLeaf 有三种取值情况true / false / null。Table内部字段 // _isLeaf 有三种取值情况true / false / null。Table内部字段
var _isLeaf = typeof record['_isLeaf'] === 'boolean' ? record['_isLeaf'] : null; var _isLeaf = typeof record['_isLeaf'] === 'boolean' ? record['_isLeaf'] : null;
@ -1049,7 +1120,7 @@ var Table = function (_Component) {
} }
if (props.lazyLoad && props.lazyLoad.sufHeight && indent == 0) { if (props.lazyLoad && props.lazyLoad.sufHeight && indent == 0) {
rst.push(_react2["default"].createElement(_TableRow2["default"], { onPaste: onPaste, height: props.lazyLoad.sufHeight, key: 'table_row_end', columns: [], className: '', store: this.store, visible: true })); rst.push(_react2["default"].createElement(_TableRow2["default"], { onPaste: onPaste, containerWidth: this.contentDomWidth, isSuf: true, height: props.lazyLoad.sufHeight, key: 'table_row_end', columns: [], className: '', store: this.store, visible: true }));
} }
if (!this.isTreeType) { if (!this.isTreeType) {
this.treeType = false; this.treeType = false;
@ -1165,7 +1236,7 @@ var Table = function (_Component) {
if (this.props.data.length == 0 && this.props.headerScroll) { if (this.props.data.length == 0 && this.props.headerScroll) {
bodyStyle.overflowX = 'hidden'; bodyStyle.overflowX = 'hidden';
} }
if (!footerScroll) { if (!footerScroll && this.computeWidth > this.contentDomWidth) {
bodyStyle.overflowX = bodyStyle.overflowX || 'auto'; bodyStyle.overflowX = bodyStyle.overflowX || 'auto';
} }
} }
@ -1177,6 +1248,11 @@ var Table = function (_Component) {
// bodyStyle.height = bodyStyle.height || scroll.y; // bodyStyle.height = bodyStyle.height || scroll.y;
innerBodyStyle.maxHeight = bodyStyle.maxHeight || scroll.y; innerBodyStyle.maxHeight = bodyStyle.maxHeight || scroll.y;
innerBodyStyle.overflowY = bodyStyle.overflowY || 'scroll'; innerBodyStyle.overflowY = bodyStyle.overflowY || 'scroll';
if (this.computeWidth > this.contentDomWidth) {
innerBodyStyle.overflowX = 'scroll';
} else if (this.contentWidth === this.contentDomWidth) {
innerBodyStyle.overflowX = 'hidden';
}
} else { } else {
bodyStyle.maxHeight = bodyStyle.maxHeight || scroll.y; bodyStyle.maxHeight = bodyStyle.maxHeight || scroll.y;
} }
@ -1210,7 +1286,15 @@ var Table = function (_Component) {
headStyle.overflow = 'hidden'; headStyle.overflow = 'hidden';
innerBodyStyle.overflowX = 'auto'; //兼容expand场景、子表格含有固定列的场景 innerBodyStyle.overflowX = 'auto'; //兼容expand场景、子表格含有固定列的场景
} else { } else {
if (this.computeWidth > this.contentDomWidth) {
bodyStyle.marginBottom = '-' + scrollbarWidth + 'px'; bodyStyle.marginBottom = '-' + scrollbarWidth + 'px';
var userAgent = navigator.userAgent; // 火狐浏览器固定表格跟随resize事件产生的滚动条隐藏
var isFF = userAgent.indexOf("Firefox") > -1;
if (isFF) {
// innerBodyStyle.overflowX = 'hidden';
delete innerBodyStyle.overflowX;
}
}
} }
} else { } else {
// 没有数据时,表头滚动条隐藏问题 // 没有数据时,表头滚动条隐藏问题
@ -1246,6 +1330,9 @@ var Table = function (_Component) {
if (!fixed && _this4.contentDomWidth < _this4.contentWidth) { if (!fixed && _this4.contentDomWidth < _this4.contentWidth) {
tableStyle.width = _this4.contentWidth - _this4.columnManager.getLeftColumnsWidth(_this4.contentWidth) - _this4.columnManager.getRightColumnsWidth(_this4.contentWidth); tableStyle.width = _this4.contentWidth - _this4.columnManager.getLeftColumnsWidth(_this4.contentWidth) - _this4.columnManager.getRightColumnsWidth(_this4.contentWidth);
} }
if (_this4.bodyTable && !fixed && _this4.contentDomWidth === _this4.contentWidth) {
tableStyle.width = _this4.bodyTable.clientWidth;
}
var tableBody = hasBody ? getBodyWrapper(_react2["default"].createElement( var tableBody = hasBody ? getBodyWrapper(_react2["default"].createElement(
'tbody', 'tbody',
{ className: clsPrefix + '-tbody', onMouseLeave: _this4.onBodyMouseLeave }, { className: clsPrefix + '-tbody', onMouseLeave: _this4.onBodyMouseLeave },
@ -1262,7 +1349,6 @@ var Table = function (_Component) {
}; };
var headTable = void 0; var headTable = void 0;
if (useFixedHeader) { if (useFixedHeader) {
headTable = _react2["default"].createElement( headTable = _react2["default"].createElement(
'div', 'div',
@ -1284,16 +1370,21 @@ var Table = function (_Component) {
{ {
className: clsPrefix + '-body', className: clsPrefix + '-body',
style: bodyStyle, style: bodyStyle,
ref: function ref(el) {
_this4.bodyTable = el;
},
onMouseOver: this.detectScrollTarget, onMouseOver: this.detectScrollTarget,
onTouchStart: this.detectScrollTarget, onTouchStart: this.detectScrollTarget,
onScroll: this.handleBodyScroll, ref: function ref(el) {
_this4.bodyTableOuter = el;
},
onMouseLeave: this.onBodyMouseLeave onMouseLeave: this.onBodyMouseLeave
}, },
this.renderDragHideTable(), this.renderDragHideTable(),
_react2["default"].createElement(
'div',
{ className: 'scroll-container', onScroll: this.handleBodyScroll, ref: function ref(el) {
_this4.bodyTable = el;
}, style: _extends({}, bodyStyle) },
renderTable(!useFixedHeader) renderTable(!useFixedHeader)
)
); );
if (fixed && columns.length) { if (fixed && columns.length) {
@ -1316,13 +1407,18 @@ var Table = function (_Component) {
{ {
style: _extends({}, innerBodyStyle), style: _extends({}, innerBodyStyle),
className: clsPrefix + '-body-inner', className: clsPrefix + '-body-inner',
ref: refName, ref: function ref(el) {
onMouseOver: this.detectScrollTarget, return _this4[refName + 'Outer'] = el;
onTouchStart: this.detectScrollTarget,
onScroll: this.handleBodyScroll
}, },
onMouseOver: this.detectScrollTarget,
onTouchStart: this.detectScrollTarget
},
_react2["default"].createElement(
'div',
{ className: 'fixed-scroll-container', ref: refName, style: _extends({}, innerBodyStyle), onScroll: this.handleBodyScroll },
renderTable(!useFixedHeader) renderTable(!useFixedHeader)
) )
)
); );
} }
// const leftFixedWidth = this.columnManager.getLeftColumnsWidth(this.contentWidth); // const leftFixedWidth = this.columnManager.getLeftColumnsWidth(this.contentWidth);
@ -1415,9 +1511,12 @@ var Table = function (_Component) {
} }
}; };
Table.prototype.syncFixedTableRowHeight = function syncFixedTableRowHeight() { Table.prototype.manualSyncFixedTableRowHeight = function manualSyncFixedTableRowHeight() {
var _this5 = this; this.dataChanged = true;
this.syncFixedTableRowHeight();
};
Table.prototype.syncFixedTableRowHeight = function syncFixedTableRowHeight() {
//this.props.height、headerHeight分别为用户传入的行高和表头高度如果有值所有行的高度都是固定的主要为了避免在千行数据中有固定列时获取行高度有问题 //this.props.height、headerHeight分别为用户传入的行高和表头高度如果有值所有行的高度都是固定的主要为了避免在千行数据中有固定列时获取行高度有问题
var _props9 = this.props, var _props9 = this.props,
clsPrefix = _props9.clsPrefix, clsPrefix = _props9.clsPrefix,
@ -1425,13 +1524,16 @@ var Table = function (_Component) {
headerHeight = _props9.headerHeight, headerHeight = _props9.headerHeight,
columns = _props9.columns, columns = _props9.columns,
heightConsistent = _props9.heightConsistent, heightConsistent = _props9.heightConsistent,
bodyDisplayInRow = _props9.bodyDisplayInRow; bodyDisplayInRow = _props9.bodyDisplayInRow,
lazyLoad = _props9.lazyLoad,
syncFixedRowHeight = _props9.syncFixedRowHeight;
var headRows = this.headTable ? this.headTable.querySelectorAll('thead') : this.bodyTable.querySelectorAll('thead'); var headRows = this.headTable ? this.headTable.querySelectorAll('thead') : this.bodyTable.querySelectorAll('thead');
var expandedRows = this.bodyTable.querySelectorAll('.' + clsPrefix + '-expanded-row') || []; var expandedRows = this.bodyTable.querySelectorAll('.' + clsPrefix + '-expanded-row') || [];
var bodyRows = this.bodyTable.querySelectorAll('.' + clsPrefix + '-row') || []; var bodyRows = this.bodyTable.querySelectorAll('.' + clsPrefix + '-row') || [];
var leftBodyRows = this.refs.fixedColumnsBodyLeft && this.refs.fixedColumnsBodyLeft.querySelectorAll('.' + clsPrefix + '-row') || []; var leftBodyRows = !this.dataChanged && this.refs.fixedColumnsBodyLeft && this.refs.fixedColumnsBodyLeft.querySelectorAll('.' + clsPrefix + '-row') || [];
var rightBodyRows = this.refs.fixedColumnsBodyRight && this.refs.fixedColumnsBodyRight.querySelectorAll('.' + clsPrefix + '-row') || []; var rightBodyRows = !this.dataChanged && this.refs.fixedColumnsBodyRight && this.refs.fixedColumnsBodyRight.querySelectorAll('.' + clsPrefix + '-row') || [];
this.dataChanged = false;
var fixedColumnsHeadRowsHeight = [].map.call(headRows, function (row) { var fixedColumnsHeadRowsHeight = [].map.call(headRows, function (row) {
var height = headerHeight; var height = headerHeight;
if (headerHeight) { if (headerHeight) {
@ -1439,25 +1541,35 @@ var Table = function (_Component) {
} }
return headerHeight ? height : parseInt(row.getBoundingClientRect().height) || 'auto'; return headerHeight ? height : parseInt(row.getBoundingClientRect().height) || 'auto';
}); });
var flatRecords = this.getFlatRecords(this.props.data || []);
var fixedColumnsBodyRowsHeight = [].map.call(bodyRows, function (row, index) { var fixedColumnsBodyRowsHeight = [].map.call(bodyRows, function (row, index) {
var rsHeight = height; var rsHeight = height;
if (bodyDisplayInRow && rsHeight) { if (bodyDisplayInRow && rsHeight) {
return rsHeight; return rsHeight;
} else { } else {
var rowKey = row.getAttribute('data-row-key');
var record = flatRecords.find(function (record) {
return record.key === rowKey;
}) || {};
var leafKey = 'isleaf' in record ? 'isleaf' : '_isLeaf' in record ? '_isLeaf' : null; // ncc传递这俩属性区分是否是子节点
var isLeaf = leafKey && record[leafKey] === true;
if (isLeaf) {
return Number(Number(row.getBoundingClientRect().height).toFixed(2)) || 'auto';
}
// 为了提高性能,默认获取主表的高度,但是有的场景中固定列的高度比主表的高度高,所以提供此属性,会统计所有列的高度取最大的,设置 // 为了提高性能,默认获取主表的高度,但是有的场景中固定列的高度比主表的高度高,所以提供此属性,会统计所有列的高度取最大的,设置
// 内容折行显示,并又设置了 height 的情况下,也要获取主表高度 // 内容折行显示,并又设置了 height 的情况下,也要获取主表高度
if (heightConsistent || !bodyDisplayInRow && rsHeight) { if (heightConsistent || !bodyDisplayInRow && rsHeight && syncFixedRowHeight) {
var leftHeight = void 0, var leftHeight = void 0,
rightHeight = void 0, rightHeight = void 0,
currentHeight = void 0, currentHeight = void 0,
maxHeight = void 0; maxHeight = void 0;
leftHeight = leftBodyRows[index] ? parseInt(leftBodyRows[index].getBoundingClientRect().height) : 0; leftHeight = leftBodyRows[index] ? Number(leftBodyRows[index].getBoundingClientRect().height).toFixed(2) : 0; // 有些浏览器中取到的高度是小数直接parseInt有问题保留两位小数处理
rightHeight = rightBodyRows[index] ? parseInt(rightBodyRows[index].getBoundingClientRect().height) : 0; rightHeight = rightBodyRows[index] ? Number(rightBodyRows[index].getBoundingClientRect().height).toFixed(2) : 0;
currentHeight = parseInt(row.getBoundingClientRect().height); currentHeight = Number(row.getBoundingClientRect().height).toFixed(2);
maxHeight = Math.max(leftHeight, rightHeight, currentHeight); maxHeight = Math.max(leftHeight, rightHeight, currentHeight);
return maxHeight || 'auto'; return maxHeight || 'auto';
} else { } else {
return parseInt(row.getBoundingClientRect().height) || 'auto'; return Number(Number(row.getBoundingClientRect().height).toFixed(2)) || 'auto';
} }
} }
}); });
@ -1465,17 +1577,16 @@ var Table = function (_Component) {
// expandedRows为NodeList Array.prototype.forEach ie 下报错 对象不支持 “forEach” 方法 // expandedRows为NodeList Array.prototype.forEach ie 下报错 对象不支持 “forEach” 方法
expandedRows.length > 0 && Array.prototype.forEach.call(expandedRows, function (row) { expandedRows.length > 0 && Array.prototype.forEach.call(expandedRows, function (row) {
var parentRowKey = row && row.previousSibling && row.previousSibling.getAttribute("data-row-key"); var parentRowKey = row && row.previousSibling && row.previousSibling.getAttribute("data-row-key");
var exHeight = height; var exHeight = row && parseInt(row.getBoundingClientRect().height) || 'auto';
if (!exHeight) { // fix: ie 展开表格计算渲染bug
exHeight = row && parseInt(row.getBoundingClientRect().height) || 'auto'; // try {//子表数据减少时,动态计算高度
try { // let td = row.querySelector('td');
//子表数据减少时,动态计算高度 // let tdPadding = this.getTdPadding(td);
var td = row.querySelector('td'); // let trueheight = parseInt(row.querySelectorAll('.u-table')[0].getBoundingClientRect().height);
var tdPadding = _this5.getTdPadding(td); // exHeight = trueheight+tdPadding;
var trueheight = parseInt(row.querySelectorAll('.u-table')[0].getBoundingClientRect().height); // } catch (error) {
exHeight = trueheight + tdPadding;
} catch (error) {} // }
}
fixedColumnsExpandedRowsHeight[parentRowKey] = parseInt(exHeight); fixedColumnsExpandedRowsHeight[parentRowKey] = parseInt(exHeight);
}); });
if ((0, _shallowequal2["default"])(this.state.fixedColumnsHeadRowsHeight, fixedColumnsHeadRowsHeight) && (0, _shallowequal2["default"])(this.state.fixedColumnsBodyRowsHeight, fixedColumnsBodyRowsHeight) && (0, _shallowequal2["default"])(this.state.fixedColumnsExpandedRowsHeight, fixedColumnsExpandedRowsHeight)) { if ((0, _shallowequal2["default"])(this.state.fixedColumnsHeadRowsHeight, fixedColumnsHeadRowsHeight) && (0, _shallowequal2["default"])(this.state.fixedColumnsBodyRowsHeight, fixedColumnsBodyRowsHeight) && (0, _shallowequal2["default"])(this.state.fixedColumnsExpandedRowsHeight, fixedColumnsExpandedRowsHeight)) {
@ -1499,10 +1610,10 @@ var Table = function (_Component) {
}; };
Table.prototype.findExpandedRow = function findExpandedRow(record, index) { Table.prototype.findExpandedRow = function findExpandedRow(record, index) {
var _this6 = this; var _this5 = this;
var rows = this.getExpandedRows().filter(function (i) { var rows = this.getExpandedRows().filter(function (i) {
return i === _this6.getRowKey(record, index); return i === _this5.getRowKey(record, index);
}); });
return rows[0]; return rows[0];
}; };
@ -1646,7 +1757,7 @@ var Table = function (_Component) {
}; };
Table.prototype.render = function render() { Table.prototype.render = function render() {
var _this7 = this; var _this6 = this;
var _state3 = this.state, var _state3 = this.state,
currentHoverRecord = _state3.currentHoverRecord, currentHoverRecord = _state3.currentHoverRecord,
@ -1700,7 +1811,7 @@ var Table = function (_Component) {
return _react2["default"].createElement( return _react2["default"].createElement(
'div', 'div',
{ className: className, style: props.style, ref: function ref(el) { { className: className, style: props.style, ref: function ref(el) {
return _this7.contentTable = el; return _this6.contentTable = el;
}, },
tabIndex: props.focusable && (props.tabIndex ? props.tabIndex : '0') }, tabIndex: props.focusable && (props.tabIndex ? props.tabIndex : '0') },
this.getTitle(), this.getTitle(),
@ -1732,7 +1843,7 @@ var Table = function (_Component) {
'div', 'div',
{ className: 'u-row-hover', { className: 'u-row-hover',
onMouseEnter: this.onRowHoverMouseEnter, onMouseLeave: this.onRowHoverMouseLeave, ref: function ref(el) { onMouseEnter: this.onRowHoverMouseEnter, onMouseLeave: this.onRowHoverMouseLeave, ref: function ref(el) {
return _this7.hoverDom = el; return _this6.hoverDom = el;
} }, } },
props.hoverContent(currentHoverRecord, currentHoverIndex) props.hoverContent(currentHoverRecord, currentHoverIndex)
) )

View File

@ -356,7 +356,11 @@ var TableCell = function (_Component) {
var colSpan = void 0; var colSpan = void 0;
var rowSpan = void 0, var rowSpan = void 0,
title = void 0; title = void 0;
var colMenu = this.renderColumnMenu(column.cellMenu, text, record, index);
// 如果是固定列在主表格上就渲染null
if (column.fixed && !fixed) {
text = null;
} else {
if (render && !showSum) { if (render && !showSum) {
text = render(text, record, index, _extends({ text = render(text, record, index, _extends({
dataIndex: dataIndex, render: render, fieldType: fieldType, linkConfig: linkConfig, fontColor: fontColor, bgColor: bgColor }, other)); dataIndex: dataIndex, render: render, fieldType: fieldType, linkConfig: linkConfig, fontColor: fontColor, bgColor: bgColor }, other));
@ -368,7 +372,6 @@ var TableCell = function (_Component) {
} }
} }
var colMenu = this.renderColumnMenu(column.cellMenu, text, record, index);
// 根据 fieldType 来渲染数据 // 根据 fieldType 来渲染数据
if (!render) { if (!render) {
switch (column.fieldType) { switch (column.fieldType) {
@ -422,6 +425,7 @@ var TableCell = function (_Component) {
} }
} }
} }
}
if (this.isInvalidRenderCellText(text)) { if (this.isInvalidRenderCellText(text)) {
text = null; text = null;

View File

@ -142,12 +142,13 @@ var TableHeader = function (_Component) {
table.cols = tableDome.getElementsByTagName("col"); table.cols = tableDome.getElementsByTagName("col");
table.ths = tableDome.getElementsByTagName("th"); table.ths = tableDome.getElementsByTagName("th");
table.tr = tableDome.getElementsByTagName("tr"); table.tr = tableDome.getElementsByTagName("tr");
table.tableHeaderCols = contentTable.querySelector('.u-table-scroll .u-table-header') && contentTable.querySelector('.u-table-scroll .u-table-header').getElementsByTagName("col");
table.tableBody = contentTable.querySelector('.u-table-scroll .u-table-body') && contentTable.querySelector('.u-table-scroll .u-table-body'); table.tableBody = contentTable.querySelector('.u-table-scroll .u-table-body') && contentTable.querySelector('.u-table-scroll .u-table-body');
table.tableBodyCols = contentTable.querySelector('.u-table-scroll .u-table-body') && contentTable.querySelector('.u-table-scroll .u-table-body').getElementsByTagName("col"); table.tableBodyCols = contentTable.querySelector('.u-table-scroll .u-table-body') && contentTable.querySelector('.u-table-scroll .u-table-body').getElementsByTagName("col");
table.bodyRows = table.tableBody && table.tableBody.querySelectorAll('tr') || []; table.bodyRows = table.tableBody && table.tableBody.querySelectorAll('tr') || [];
table.fixedLeftHeaderTable = contentTable.querySelector('.u-table-fixed-left .u-table-header'); table.fixedLeftHeaderTable = contentTable.querySelector('.u-table-fixed-left .u-table-header');
table.fixedRighHeadertTable = contentTable.querySelector('.u-table-fixed-right .u-table-header'); table.fixedRightHeaderTable = contentTable.querySelector('.u-table-fixed-right .u-table-header');
table.contentTableHeader = contentTable.querySelector('.u-table-scroll .u-table-header'); table.contentTableHeader = contentTable.querySelector('.u-table-scroll .u-table-header');
table.fixedLeftBodyTable = contentTable.querySelectorAll('.u-table-fixed-left .u-table-body-outer'); table.fixedLeftBodyTable = contentTable.querySelectorAll('.u-table-fixed-left .u-table-body-outer');
if (table.fixedLeftBodyTable) { if (table.fixedLeftBodyTable) {
@ -162,6 +163,10 @@ var TableHeader = function (_Component) {
} }
table.innerTableBody = contentTable.querySelector('.u-table-scroll .u-table-body table'); table.innerTableBody = contentTable.querySelector('.u-table-scroll .u-table-body table');
table.fixedLeftHeaderTableBody = table.fixedLeftHeaderTable && table.fixedLeftHeaderTable.querySelector('table') || null;
table.fixedRightHeaderTableBody = table.fixedRightHeaderTable && table.fixedRightHeaderTable.querySelector('table') || null;
table.fixedLeftInnerTableBody = table.fixedLeftBodyTable && table.fixedLeftBodyTable.querySelector('table') || null;
table.fixedRightInnerTableBody = table.fixedRightBodyTable && table.fixedRightBodyTable.querySelector('table') || null;
table.fixedLeftBodyRows = table.fixedLeftBodyTable && table.fixedLeftBodyTable.querySelectorAll('tr') || []; table.fixedLeftBodyRows = table.fixedLeftBodyTable && table.fixedLeftBodyTable.querySelectorAll('tr') || [];
table.fixedRightBodyRows = table.fixedRightBodyTable && table.fixedRightBodyTable.querySelectorAll('tr') || []; table.fixedRightBodyRows = table.fixedRightBodyTable && table.fixedRightBodyTable.querySelectorAll('tr') || [];
} }
@ -219,9 +224,11 @@ var TableHeader = function (_Component) {
}; };
TableHeader.prototype.doEventList = function doEventList(trs, action) { TableHeader.prototype.doEventList = function doEventList(trs, action) {
if (trs && HTMLCollection.prototype.isPrototypeOf(trs) && action) {
for (var index = 0; index < trs.length; index++) { for (var index = 0; index < trs.length; index++) {
action(trs[index]); action(trs[index]);
} }
}
}; };
/** /**
@ -230,13 +237,18 @@ var TableHeader = function (_Component) {
TableHeader.prototype.dragBorderEventInit = function dragBorderEventInit() { TableHeader.prototype.dragBorderEventInit = function dragBorderEventInit() {
var _this5 = this;
if (!this.props.dragborder) return; if (!this.props.dragborder) return;
var events = [{ key: 'mouseup', fun: this.onTrMouseUp }, { key: 'mousemove', fun: this.onTrMouseMove }]; this.eventListen([{ key: 'mouseup', fun: this.onTrMouseUp }], '', document.body);
this.doEventList(this.table.tr, function (tr) { this.eventListen([{ key: 'mousemove', fun: this.onTrMouseMove }], '', document.body);
_this5.eventListen(events, '', tr); //表示把事件添加到th元素上
}); // let events = [
// {key:'mouseup', fun:this.onTrMouseUp},
// {key:'mousemove', fun:this.onTrMouseMove},
// // {key:'mousemove', fun:debounce(50,this.onTrMouseMove)},//函数节流后体验很差
// ];
// this.doEventList(this.table.tr,(tr)=>{
// this.eventListen(events,'',tr);//表示把事件添加到th元素上
// })
// this.eventListen(events,'',this.table.tr[0]);//表示把事件添加到th元素上 // this.eventListen(events,'',this.table.tr[0]);//表示把事件添加到th元素上
}; };
@ -246,13 +258,15 @@ var TableHeader = function (_Component) {
TableHeader.prototype.removeDragBorderEvent = function removeDragBorderEvent() { TableHeader.prototype.removeDragBorderEvent = function removeDragBorderEvent() {
var _this6 = this; var _this5 = this;
var events = [{ key: 'mouseup', fun: this.onTrMouseUp }, { key: 'mousemove', fun: this.onTrMouseMove }]; var events = [{ key: 'mouseup', fun: this.onTrMouseUp }, { key: 'mousemove', fun: this.onTrMouseMove }];
// this.eventListen(events,'remove',this.table.tr[0]); // this.eventListen(events,'remove',this.table.tr[0]);
if (this.table && this.table.tr) {
this.doEventList(this.table.tr, function (tr) { this.doEventList(this.table.tr, function (tr) {
_this6.eventListen(events, 'remove', _this6.table.tr); _this5.eventListen(events, 'remove', _this5.table.tr);
}); });
}
}; };
TableHeader.prototype.eventListen = function eventListen(events, type, eventSource) { TableHeader.prototype.eventListen = function eventListen(events, type, eventSource) {
@ -431,7 +445,7 @@ var TableHeader = function (_Component) {
TableHeader.prototype.render = function render() { TableHeader.prototype.render = function render() {
var _this7 = this; var _this6 = this;
var _props2 = this.props, var _props2 = this.props,
clsPrefix = _props2.clsPrefix, clsPrefix = _props2.clsPrefix,
@ -449,7 +463,7 @@ var TableHeader = function (_Component) {
return _react2["default"].createElement( return _react2["default"].createElement(
"thead", "thead",
_extends({ className: clsPrefix + "-thead" }, attr, { "data-theader-fixed": "scroll", ref: function ref(_thead) { _extends({ className: clsPrefix + "-thead" }, attr, { "data-theader-fixed": "scroll", ref: function ref(_thead) {
return _this7._thead = _thead; return _this6._thead = _thead;
} }), } }),
rows.map(function (row, index) { rows.map(function (row, index) {
var _rowLeng = row.length - 1; var _rowLeng = row.length - 1;
@ -495,7 +509,7 @@ var TableHeader = function (_Component) {
// } // }
if (filterable && index == rows.length - 1) { if (filterable && index == rows.length - 1) {
da.children = _this7.filterRenderType(da["filtertype"], da.dataindex, columIndex); da.children = _this6.filterRenderType(da["filtertype"], da.dataindex, columIndex);
if (da.key === undefined) { if (da.key === undefined) {
keyTemp.key = keyTemp.key + '-filterable'; keyTemp.key = keyTemp.key + '-filterable';
} }
@ -516,7 +530,7 @@ var TableHeader = function (_Component) {
"th", "th",
_extends({}, da, keyTemp, { className: thClassName, "data-th-fixed": da.fixed, "data-line-key": da.key, _extends({}, da, keyTemp, { className: thClassName, "data-th-fixed": da.fixed, "data-line-key": da.key,
"data-line-index": columIndex, "data-th-width": da.width, "data-type": "draggable", onCopy: function onCopy(event) { "data-line-index": columIndex, "data-th-width": da.width, "data-type": "draggable", onCopy: function onCopy(event) {
_this7.onCopy(da, columIndex, event); _this6.onCopy(da, columIndex, event);
} }), } }),
da.children, da.children,
@ -524,10 +538,10 @@ var TableHeader = function (_Component) {
dragborder && lastObj && da.key != lastObj.key ? _react2["default"].createElement( dragborder && lastObj && da.key != lastObj.key ? _react2["default"].createElement(
"div", "div",
{ ref: function ref(el) { { ref: function ref(el) {
return _this7.gap = el; return _this6.gap = el;
}, "data-line-key": da.key, }, "data-line-key": da.key,
"data-line-index": columIndex, "data-th-width": da.width, "data-line-index": columIndex, "data-th-width": da.width,
"data-type": "online", className: clsPrefix + "-thead-th-drag-gap" }, "data-type": "online", "data-th-fixed": da.fixed, className: clsPrefix + "-thead-th-drag-gap" },
_react2["default"].createElement("div", { className: "online" }) _react2["default"].createElement("div", { className: "online" })
) : "" ) : ""
); );
@ -538,7 +552,22 @@ var TableHeader = function (_Component) {
da.onClick ? thDefaultObj.onClick = function (e) { da.onClick ? thDefaultObj.onClick = function (e) {
da.onClick(da, e); da.onClick(da, e);
} : ""; } : "";
return _react2["default"].createElement("th", _extends({}, thDefaultObj, keyTemp, { "data-th-fixed": da.fixed, style: { maxWidth: da.width }, onCopy: _this7.onCopy })); return _react2["default"].createElement(
"th",
_extends({}, thDefaultObj, keyTemp, { "data-th-fixed": da.fixed, style: { maxWidth: da.width }, onCopy: _this6.onCopy }),
da.children,
// && columIndex != _rowLeng
dragborder ? _react2["default"].createElement(
"div",
{ ref: function ref(el) {
return _this6.gap = el;
}, "data-line-key": da.key,
"data-line-index": columIndex, "data-th-width": da.width,
"data-type": "online", "data-th-fixed": da.fixed, className: clsPrefix + "-thead-th-drag-gap" },
_react2["default"].createElement("div", { className: "online" })
) : ""
);
} }
}) })
); );
@ -554,7 +583,7 @@ TableHeader.defaultProps = {
}; };
var _initialiseProps = function _initialiseProps() { var _initialiseProps = function _initialiseProps() {
var _this8 = this; var _this7 = this;
this.getOnLineObject = function (_element) { this.getOnLineObject = function (_element) {
var type = _element.getAttribute('data-type'), var type = _element.getAttribute('data-type'),
@ -571,28 +600,29 @@ var _initialiseProps = function _initialiseProps() {
}; };
this.onTrMouseDown = function (e) { this.onTrMouseDown = function (e) {
var eventNoStop = _this8.props.eventNoStop; var eventNoStop = _this7.props.eventNoStop;
!eventNoStop && _utils.Event.stopPropagation(e); !eventNoStop && _utils.Event.stopPropagation(e);
var event = _utils.Event.getEvent(e), var event = _utils.Event.getEvent(e),
targetEvent = _utils.Event.getTarget(event); targetEvent = _utils.Event.getTarget(event);
var _props3 = _this8.props, var _props3 = _this7.props,
clsPrefix = _props3.clsPrefix, clsPrefix = _props3.clsPrefix,
contentTable = _props3.contentTable, contentTable = _props3.contentTable,
lastShowIndex = _props3.lastShowIndex, lastShowIndex = _props3.lastShowIndex,
columnsChildrenList = _props3.columnsChildrenList; columnsChildrenList = _props3.columnsChildrenList;
// let currentElement = this.getOnLineObject(targetEvent); // let currentElement = this.getOnLineObject(targetEvent);
var currentElement = _this8.getTargetToType(targetEvent); var currentElement = _this7.getTargetToType(targetEvent);
if (!currentElement) return; if (!currentElement) return;
var type = currentElement.getAttribute('data-type'); var type = currentElement.getAttribute('data-type');
if (!_this8.props.dragborder && !_this8.props.draggable) return; var fixedType = currentElement.getAttribute('data-th-fixed');
if (type == 'online' && _this8.props.dragborder) { if (!_this7.props.dragborder && !_this7.props.draggable) return;
if (type == 'online' && _this7.props.dragborder) {
// if(!this.props.dragborder)return; // if(!this.props.dragborder)return;
targetEvent.setAttribute('draggable', false); //添加交换列效果 targetEvent.setAttribute('draggable', false); //添加交换列效果
var currentIndex = -1; var currentIndex = -1;
var defaultWidth = currentElement.getAttribute("data-th-width"); var defaultWidth = currentElement.getAttribute("data-th-width");
_this8.drag.option = "border"; //拖拽操作 _this7.drag.option = "border"; //拖拽操作
if (columnsChildrenList) { if (columnsChildrenList) {
var columnKey = currentElement.getAttribute("data-line-key"); var columnKey = currentElement.getAttribute("data-line-key");
if (columnKey) { if (columnKey) {
@ -605,27 +635,50 @@ var _initialiseProps = function _initialiseProps() {
console.log('Key must be set for column!'); console.log('Key must be set for column!');
return; return;
} }
var currentObj = _this8.table.cols[currentIndex]; var currentObj = _this7.table.cols[currentIndex];
_this8.drag.currIndex = currentIndex; _this7.drag.currIndex = currentIndex;
_this8.drag.oldLeft = event.clientX; _this7.drag.oldLeft = event.clientX;
_this8.drag.oldWidth = parseInt(currentObj.style.width); _this7.drag.currentLeft = event.clientX;
_this8.drag.minWidth = currentObj.style.minWidth != "" ? parseInt(currentObj.style.minWidth) : defaultWidth; _this7.drag.oldWidth = parseInt(currentObj.style.width);
_this8.drag.tableWidth = parseInt(_this8.table.table.style.width ? _this8.table.table.style.width : _this8.table.table.scrollWidth); _this7.drag.minWidth = currentObj.style.minWidth != "" ? parseInt(currentObj.style.minWidth) : defaultWidth;
if (!_this8.tableOldWidth) { _this7.drag.tableWidth = parseInt(_this7.table.table.style.width ? _this7.table.table.style.width : _this7.table.table.scrollWidth);
_this8.tableOldWidth = _this8.drag.tableWidth; //this.getTableWidth(); if (!_this7.tableOldWidth) {
_this7.tableOldWidth = _this7.drag.tableWidth; //this.getTableWidth();
} }
if (!_this8.lastColumWidth) {
_this8.lastColumWidth = parseInt(_this8.table.cols[lastShowIndex].style.width); // if(!this.lastColumWidth){
var contentT = _this7.table.tableHeaderCols || _this7.table.cols;
_this7.lastColumWidth = parseInt(contentT[lastShowIndex].style.width);
// console.log('begin--lastColumnWidth',this.lastColumWidth);
// }
_this7.drag.contentTableCWidth = _this7.table.contentTableHeader.clientWidth;
_this7.drag.contentTableSWidth = _this7.table.contentTableHeader.scrollWidth;
if (fixedType) {
var contentTablePar = _this7.table.contentTableHeader.parentNode;
if (contentTablePar) {
var originL = parseInt(contentTablePar.style.marginLeft);
var originR = parseInt(contentTablePar.style.marginRight);
// 内容区表格marginLef
_this7.drag.contentTableML = originL;
_this7.drag.contentTableMR = originR;
} }
} else if (type != 'online' && _this8.props.draggable) { }
_this7.drag.fixedType = fixedType;
if (fixedType === 'left' && _this7.table.fixedRightBodyTable) {
_this7.drag.fixedRightBodyTableLeft = _this7.table.fixedRightBodyTable.getBoundingClientRect().left;
} else {
_this7.drag.fixedRightBodyTableLeft = null;
}
} else if (type != 'online' && _this7.props.draggable) {
// if (!this.props.draggable || targetEvent.nodeName.toUpperCase() != "TH") return; // if (!this.props.draggable || targetEvent.nodeName.toUpperCase() != "TH") return;
if (!_this8.props.draggable) return; if (!_this7.props.draggable) return;
var th = _this8.getTargetToType(targetEvent); var th = _this7.getTargetToType(targetEvent);
th.setAttribute('draggable', true); //添加交换列效果 th.setAttribute('draggable', true); //添加交换列效果
_this8.drag.option = 'dragAble'; _this7.drag.option = 'dragAble';
_this8.currentDome = th; _this7.currentDome = th;
var _currentIndex = parseInt(th.getAttribute("data-line-index")); var _currentIndex = parseInt(th.getAttribute("data-line-index"));
_this8.drag.currIndex = _currentIndex; _this7.drag.currIndex = _currentIndex;
} else { } else {
// console.log("onTrMouseDown dragborder or draggable is all false !"); // console.log("onTrMouseDown dragborder or draggable is all false !");
return; return;
@ -635,8 +688,8 @@ var _initialiseProps = function _initialiseProps() {
this.getTableWidth = function () { this.getTableWidth = function () {
var tableWidth = 0, var tableWidth = 0,
offWidth = 0; //this.table.cols.length; offWidth = 0; //this.table.cols.length;
for (var index = 0; index < _this8.table.cols.length; index++) { for (var index = 0; index < _this7.table.cols.length; index++) {
var da = _this8.table.cols[index]; var da = _this7.table.cols[index];
tableWidth += parseInt(da.style.width); tableWidth += parseInt(da.style.width);
} }
return tableWidth - offWidth; return tableWidth - offWidth;
@ -645,7 +698,7 @@ var _initialiseProps = function _initialiseProps() {
this.getTargetToType = function (targetEvent) { this.getTargetToType = function (targetEvent) {
var tag = targetEvent; var tag = targetEvent;
if (targetEvent && !targetEvent.getAttribute("data-type")) { if (targetEvent && !targetEvent.getAttribute("data-type")) {
tag = _this8.getTargetToType(targetEvent.parentElement); tag = _this7.getTargetToType(targetEvent.parentElement);
} }
return tag; return tag;
}; };
@ -653,15 +706,15 @@ var _initialiseProps = function _initialiseProps() {
this.getTargetToTh = function (targetEvent) { this.getTargetToTh = function (targetEvent) {
var th = targetEvent; var th = targetEvent;
if (targetEvent.nodeName.toUpperCase() != "TH") { if (targetEvent.nodeName.toUpperCase() != "TH") {
th = _this8.getThDome(targetEvent); th = _this7.getThDome(targetEvent);
} }
// console.log(" getTargetToTh: ", th); // console.log(" getTargetToTh: ", th);
return th; return th;
}; };
this.onTrMouseMove = function (e) { this.onTrMouseMove = function (e) {
if (!_this8.props.dragborder && !_this8.props.draggable) return; if (!_this7.props.dragborder && !_this7.props.draggable) return;
var _props4 = _this8.props, var _props4 = _this7.props,
clsPrefix = _props4.clsPrefix, clsPrefix = _props4.clsPrefix,
dragborder = _props4.dragborder, dragborder = _props4.dragborder,
contentDomWidth = _props4.contentDomWidth, contentDomWidth = _props4.contentDomWidth,
@ -677,20 +730,26 @@ var _initialiseProps = function _initialiseProps() {
!eventNoStop && _utils.Event.stopPropagation(e); !eventNoStop && _utils.Event.stopPropagation(e);
var event = _utils.Event.getEvent(e); var event = _utils.Event.getEvent(e);
if (_this8.props.dragborder && _this8.drag.option == "border") { if (_this7.props.dragborder && _this7.drag.option == "border") {
//移动改变宽度 //移动改变宽度
var currentCols = _this8.table.cols[_this8.drag.currIndex];
var diff = event.clientX - _this8.drag.oldLeft; var isMoveToRight = _this7.drag.currentLeft < event.clientX;
var newWidth = _this8.drag.oldWidth + diff; if (_this7.drag.fixedType === 'left' && isMoveToRight && _this7.drag.fixedRightBodyTableLeft) {
_this8.drag.newWidth = newWidth > 0 ? newWidth : _this8.minWidth; if (_this7.drag.fixedRightBodyTableLeft - event.clientX < 100) {
if (newWidth > _this8.minWidth) { return; // 拖动左侧固定列离右侧固定列距离小于100时禁止拖动
currentCols.style.width = newWidth + 'px'; }
}
var currentCols = _this7.table.cols[_this7.drag.currIndex];
var diff = event.clientX - _this7.drag.oldLeft;
var newWidth = _this7.drag.oldWidth + diff;
_this7.drag.newWidth = newWidth > 0 ? newWidth : _this7.minWidth;
_this7.drag.currentLeft = event.clientX;
// displayinrow 判断、 固定行高判断 // displayinrow 判断、 固定行高判断
if (!bodyDisplayInRow) { if (!bodyDisplayInRow) {
_this8.table.bodyRows.forEach(function (row, index) { _this7.table.bodyRows.forEach(function (row, index) {
var leftRow = _this8.table.fixedLeftBodyRows[index]; var leftRow = _this7.table.fixedLeftBodyRows[index];
var rightRow = _this8.table.fixedRightBodyRows[index]; var rightRow = _this7.table.fixedRightBodyRows[index];
if (leftRow || rightRow) { if (leftRow || rightRow) {
var height = row.getBoundingClientRect().height; var height = row.getBoundingClientRect().height;
leftRow && (leftRow.style.height = height + "px"); leftRow && (leftRow.style.height = height + "px");
@ -699,75 +758,148 @@ var _initialiseProps = function _initialiseProps() {
}); });
} }
if (newWidth > _this7.minWidth) {
currentCols.style.width = newWidth + 'px';
//hao 支持固定表头拖拽 修改表体的width //hao 支持固定表头拖拽 修改表体的width
if (_this8.fixedTable.cols) { if (_this7.fixedTable.cols) {
_this8.fixedTable.cols[_this8.drag.currIndex].style.width = newWidth + "px"; _this7.fixedTable.cols[_this7.drag.currIndex].style.width = newWidth + "px";
} }
var newDiff = parseInt(currentCols.style.minWidth) - parseInt(currentCols.style.width); var contentTableSWidth = _this7.drag.contentTableSWidth - _this7.drag.contentTableCWidth;
if (newDiff > 0) { // console.log('contentTableSWidth+diff',contentTableSWidth+diff,'diff',diff);
//缩小 if (diff < 0 && contentTableSWidth + diff < 0) {
var lastWidth = _this8.lastColumWidth + newDiff; var headerCols = _this7.table.tableHeaderCols || _this7.table.cols;
_this8.table.cols[lastShowIndex].style.width = lastWidth + "px"; //同步表头 var lastWidth = _this7.lastColumWidth - (contentTableSWidth + diff);
_this8.table.tableBodyCols[lastShowIndex].style.width = lastWidth + "px"; //同步表体 // console.log('lastWidth',lastWidth,'lastShowIndex',lastShowIndex);
headerCols[lastShowIndex].style.width = lastWidth + "px"; //同步表头
_this7.table.tableBodyCols[lastShowIndex].style.width = lastWidth + "px"; //同步表体
} }
var showScroll = contentDomWidth - (leftFixedWidth + rightFixedWidth) - (_this8.drag.tableWidth + diff) - scrollbarWidth; // 内容区非固定列场景拖拽
if (!_this7.drag.fixedType) {
// let newDiff = (parseInt(currentCols.style.minWidth) - parseInt(currentCols.style.width));
// if(newDiff > 0){//缩小
// let lastWidth = this.lastColumWidth + newDiff;
// this.table.cols[lastShowIndex].style.width = lastWidth +"px";//同步表头
// this.table.tableBodyCols[lastShowIndex].style.width = lastWidth + "px";//同步表体
// }
var showScroll = contentDomWidth - (leftFixedWidth + rightFixedWidth) - (_this7.drag.tableWidth + diff) - scrollbarWidth;
//表头滚动条处理 //表头滚动条处理
if (headerScroll) { if (headerScroll) {
if (showScroll < 0) { if (showScroll < 0) {
//小于 0 出现滚动条 //小于 0 出现滚动条
//找到固定列表格设置表头的marginBottom值为scrollbarWidth; //找到固定列表格设置表头的marginBottom值为scrollbarWidth;
_this8.table.contentTableHeader.style.overflowX = 'scroll'; _this7.table.contentTableHeader.style.overflowX = 'scroll';
_this8.optTableMargin(_this8.table.fixedLeftHeaderTable, scrollbarWidth); _this7.optTableMargin(_this7.table.fixedLeftHeaderTable, scrollbarWidth);
_this8.optTableMargin(_this8.table.fixedRighHeadertTable, scrollbarWidth); _this7.optTableMargin(_this7.table.fixedRightHeaderTable, scrollbarWidth);
} else { } else {
//大于 0 不显示滚动条 //大于 0 不显示滚动条
_this8.table.contentTableHeader.style.overflowX = 'hidden'; _this7.table.contentTableHeader.style.overflowX = 'hidden';
_this8.optTableMargin(_this8.table.fixedLeftHeaderTable, 0); _this7.optTableMargin(_this7.table.fixedLeftHeaderTable, 0);
_this8.optTableMargin(_this8.table.fixedRighHeadertTable, 0); _this7.optTableMargin(_this7.table.fixedRightHeaderTable, 0);
} }
} else { } else {
var scrollContainers = _this7.table.tableBody.querySelectorAll('.scroll-container') || [];
if (showScroll < 0) { if (showScroll < 0) {
_this8.table.tableBody.style.overflowX = 'auto'; scrollContainers[0] ? scrollContainers[0].style.overflowX = 'auto' : null;
_this8.optTableMargin(_this8.table.fixedLeftBodyTable, '-' + scrollbarWidth); _this7.optTableMargin(_this7.table.fixedLeftBodyTable, '-' + scrollbarWidth);
_this8.optTableMargin(_this8.table.fixedRightBodyTable, '-' + scrollbarWidth); _this7.optTableMargin(_this7.table.fixedRightBodyTable, '-' + scrollbarWidth);
_this8.optTableScroll(_this8.table.fixedLeftBodyTable, { x: 'scroll' }); _this7.optTableScroll(_this7.table.fixedLeftBodyTable, { x: 'scroll' });
_this8.optTableScroll(_this8.table.fixedRightBodyTable, { x: 'scroll' }); _this7.optTableScroll(_this7.table.fixedRightBodyTable, { x: 'scroll' });
} else { } else {
_this8.table.tableBody.style.overflowX = 'hidden'; scrollContainers[0] ? scrollContainers[0].style.overflowX = 'hidden' : null;
_this8.optTableMargin(_this8.table.fixedLeftBodyTable, 0); _this7.optTableMargin(_this7.table.fixedLeftBodyTable, 0);
_this8.optTableMargin(_this8.table.fixedRightBodyTable, 0); _this7.optTableMargin(_this7.table.fixedRightBodyTable, 0);
_this8.optTableScroll(_this8.table.fixedLeftBodyTable, { x: 'auto' }); _this7.optTableScroll(_this7.table.fixedLeftBodyTable, { x: 'auto' });
_this8.optTableScroll(_this8.table.fixedRightBodyTable, { x: 'auto' }); _this7.optTableScroll(_this7.table.fixedRightBodyTable, { x: 'auto' });
}
}
} else if (_this7.drag.fixedType) {
if (_this7.table.ths[_this7.drag.currIndex]) {
_this7.table.ths[_this7.drag.currIndex].width = newWidth;
}
// console.log('this.drag.contentTableML',this.drag.contentTableML,'diff',diff);
// debugger
_this7.syncFixedBodyTableWidth(); // 同步body中table的宽度
var contentTablePar = _this7.table.contentTableHeader.parentNode;
// left、right缩小的内容在没有滚动条时需要将宽度同步到到最后一列
// diff<0 往里拖,
// const contentTableSWidth = this.drag.contentTableSWidth - this.drag.contentTableCWidth;
// console.log('contentTableSWidth+diff',contentTableSWidth+diff,'diff',diff);
// if(diff<0 && contentTableSWidth+diff < 0) {
// const headerCols = this.table.tableHeaderCols || this.table.cols;
// const lastWidth =this.lastColumWidth - (contentTableSWidth+diff);
// console.log('lastWidth',lastWidth,'lastShowIndex',lastShowIndex);
// headerCols[lastShowIndex].style.width = lastWidth +"px";//同步表头
// this.table.tableBodyCols[lastShowIndex].style.width = lastWidth + "px";//同步表体
// }
if (_this7.drag.fixedType == 'left') {
contentTablePar.style.marginLeft = _this7.drag.contentTableML + diff + 'px';
} else {
contentTablePar.style.marginRight = _this7.drag.contentTableMR + diff + 'px';
}
var containerWidth = contentTablePar.getBoundingClientRect().width;
var tableWidth = _this7.table.innerTableBody.getBoundingClientRect().width;
var _scrollContainers = _this7.table.tableBody.querySelectorAll('.scroll-container') || [];
if (tableWidth > containerWidth) {
_scrollContainers[0] ? _scrollContainers[0].style.overflowX = 'auto' : null;
_this7.optTableMargin(_this7.table.fixedLeftBodyTable, '-' + scrollbarWidth);
_this7.optTableMargin(_this7.table.fixedRightBodyTable, '-' + scrollbarWidth);
_this7.optTableScroll(_this7.table.fixedLeftBodyTable, { x: 'scroll' });
_this7.optTableScroll(_this7.table.fixedRightBodyTable, { x: 'scroll' });
} else {
_scrollContainers[0] ? _scrollContainers[0].style.overflowX = 'hidden' : null;
_this7.optTableMargin(_this7.table.fixedLeftBodyTable, 0);
_this7.optTableMargin(_this7.table.fixedRightBodyTable, 0);
_this7.optTableScroll(_this7.table.fixedLeftBodyTable, { x: 'auto' });
_this7.optTableScroll(_this7.table.fixedRightBodyTable, { x: 'auto' });
} }
} }
} else { } else {
_this8.drag.newWidth = _this8.minWidth; _this7.drag.newWidth = _this7.minWidth;
} }
} }
// 增加拖拽列宽动作的回调函数 // 增加拖拽列宽动作的回调函数
_this8.drag.newWidth && onDraggingBorder && onDraggingBorder(event, _this8.drag.newWidth); _this7.drag.newWidth && onDraggingBorder && onDraggingBorder(event, _this7.drag.newWidth);
};
this.syncFixedBodyTableWidth = function () {
var _table = _this7.table,
fixedLeftHeaderTableBody = _table.fixedLeftHeaderTableBody,
fixedLeftInnerTableBody = _table.fixedLeftInnerTableBody,
fixedRightHeaderTableBody = _table.fixedRightHeaderTableBody,
fixedRightInnerTableBody = _table.fixedRightInnerTableBody;
if (fixedLeftHeaderTableBody && fixedLeftInnerTableBody) {
fixedLeftInnerTableBody.style.width = fixedLeftHeaderTableBody.getBoundingClientRect().width + 'px';
}
if (fixedRightHeaderTableBody && fixedRightInnerTableBody) {
fixedRightInnerTableBody.style.width = fixedRightHeaderTableBody.getBoundingClientRect().width + 'px';
}
}; };
this.onTrMouseUp = function (e) { this.onTrMouseUp = function (e) {
var event = _utils.Event.getEvent(e); var event = _utils.Event.getEvent(e);
var width = _this8.drag.newWidth; var width = _this7.drag.newWidth;
var opt = _this8.drag.option; var opt = _this7.drag.option;
_this8.mouseClear(); _this7.mouseClear();
if (opt !== "border") return; // fix:点击表头会触发onDropBorder事件的问题 if (opt !== "border") return; // fix:点击表头会触发onDropBorder事件的问题
_this8.props.onDropBorder && _this8.props.onDropBorder(event, width); _this7.props.onDropBorder && _this7.props.onDropBorder(event, width);
}; };
this.clearThsDr = function () { this.clearThsDr = function () {
var ths = _this8.table.ths; var ths = _this7.table.ths;
for (var index = 0; index < ths.length; index++) { for (var index = 0; index < ths.length; index++) {
ths[index].setAttribute('draggable', false); //去掉交换列效果 ths[index].setAttribute('draggable', false); //去掉交换列效果
} }
}; };
this.bodyonLineMouseUp = function (events, type) { this.bodyonLineMouseUp = function (events, type) {
if (!_this8.drag || !_this8.drag.option) return; if (!_this7.drag || !_this7.drag.option) return;
_this8.mouseClear(); _this7.mouseClear();
}; };
this.optTableMargin = function (table, scrollbarWidth) { this.optTableMargin = function (table, scrollbarWidth) {
@ -783,38 +915,44 @@ var _initialiseProps = function _initialiseProps() {
var innerTable = table.querySelector('.u-table-body-inner'); var innerTable = table.querySelector('.u-table-body-inner');
if (innerTable) { if (innerTable) {
//fixbug: 拖拽列宽后,滚动条滚到表格底部,会导致固定列和非固定列错行 //fixbug: 拖拽列宽后,滚动条滚到表格底部,会导致固定列和非固定列错行
overflow.x && (innerTable.style.overflowX = overflow.x); if (overflow.x) {
var fixedScrollContainers = innerTable.querySelectorAll('.fixed-scroll-container');
if (fixedScrollContainers && fixedScrollContainers.length) {
fixedScrollContainers[0] && (fixedScrollContainers[0].style.overflowX = overflow.x);
fixedScrollContainers[1] && (fixedScrollContainers[1].style.overflowX = overflow.x);
}
}
overflow.y && (innerTable.style.overflowY = overflow.y); overflow.y && (innerTable.style.overflowY = overflow.y);
} }
} }
}; };
this.onDragStart = function (e) { this.onDragStart = function (e) {
if (!_this8.props.draggable) return; if (!_this7.props.draggable) return;
if (_this8.drag && _this8.drag.option != 'dragAble') { if (_this7.drag && _this7.drag.option != 'dragAble') {
return; return;
} }
var event = _utils.Event.getEvent(e), var event = _utils.Event.getEvent(e),
// target = Event.getTarget(event); // target = Event.getTarget(event);
target = _this8.getTargetToTh(_utils.Event.getTarget(event)); target = _this7.getTargetToTh(_utils.Event.getTarget(event));
var currentIndex = parseInt(target.getAttribute("data-line-index")); var currentIndex = parseInt(target.getAttribute("data-line-index"));
var currentKey = target.getAttribute('data-line-key'); var currentKey = target.getAttribute('data-line-key');
if (event.dataTransfer.setDragImage) { if (event.dataTransfer.setDragImage) {
var crt = target.cloneNode(true); var crt = target.cloneNode(true);
crt.style.backgroundColor = "#ebecf0"; crt.style.backgroundColor = "#ebecf0";
crt.style.width = _this8.table.cols[currentIndex].style.width; //拖动后再交换列的时候,阴影效果可同步 crt.style.width = _this7.table.cols[currentIndex].style.width; //拖动后再交换列的时候,阴影效果可同步
crt.style.height = "40px"; crt.style.height = "40px";
// crt.style['line-height'] = "40px"; // crt.style['line-height'] = "40px";
// document.body.appendChild(crt); // document.body.appendChild(crt);
document.getElementById(_this8._table_none_cont_id).appendChild(crt); document.getElementById(_this7._table_none_cont_id).appendChild(crt);
event.dataTransfer.setDragImage(crt, 0, 0); event.dataTransfer.setDragImage(crt, 0, 0);
} }
event.dataTransfer.effectAllowed = "move"; event.dataTransfer.effectAllowed = "move";
event.dataTransfer.setData("Text", currentKey); event.dataTransfer.setData("Text", currentKey);
_this8.currentObj = _this8.props.rows[0][currentIndex]; _this7.currentObj = _this7.props.rows[0][currentIndex];
}; };
this.onDragOver = function (e) { this.onDragOver = function (e) {
@ -823,34 +961,34 @@ var _initialiseProps = function _initialiseProps() {
}; };
this.onDrop = function (e) { this.onDrop = function (e) {
if (!_this8.props.draggable) return; if (!_this7.props.draggable) return;
var props = _this8.getCurrentEventData(_this8._dragCurrent); var props = _this7.getCurrentEventData(_this7._dragCurrent);
e.column = { props: props }; e.column = { props: props };
if (_this8.drag && _this8.drag.option != 'dragAble') { if (_this7.drag && _this7.drag.option != 'dragAble') {
_this8.props.onDrop(e); _this7.props.onDrop(e);
return; return;
} }
var event = _utils.Event.getEvent(e), var event = _utils.Event.getEvent(e),
target = _utils.Event.getTarget(event); target = _utils.Event.getTarget(event);
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
_this8.currentDome.setAttribute('draggable', false); //添加交换列效果 _this7.currentDome.setAttribute('draggable', false); //添加交换列效果
// let data = this.getCurrentEventData(this._dragCurrent); // let data = this.getCurrentEventData(this._dragCurrent);
// if(!data){ // if(!data){
// this.props.onDrop(e); // this.props.onDrop(e);
// return; // return;
// } // }
if (!_this8.props.onDrop) return; if (!_this7.props.onDrop) return;
// this.props.onDrop(event,target); // this.props.onDrop(event,target);
_this8.props.onDrop(event, { dragSource: _this8.currentObj, dragTarg: e.column }); _this7.props.onDrop(event, { dragSource: _this7.currentObj, dragTarg: e.column });
}; };
this.onDragEnter = function (e) { this.onDragEnter = function (e) {
var event = _utils.Event.getEvent(e), var event = _utils.Event.getEvent(e),
target = _utils.Event.getTarget(event); target = _utils.Event.getTarget(event);
_this8._dragCurrent = target; _this7._dragCurrent = target;
var currentIndex = target.getAttribute("data-line-index"); var currentIndex = target.getAttribute("data-line-index");
if (!currentIndex || parseInt(currentIndex) === _this8.drag.currIndex) return; if (!currentIndex || parseInt(currentIndex) === _this7.drag.currIndex) return;
if (target.nodeName.toUpperCase() === "TH") { if (target.nodeName.toUpperCase() === "TH") {
// target.style.border = "2px dashed rgba(5,0,0,0.25)"; // target.style.border = "2px dashed rgba(5,0,0,0.25)";
target.setAttribute("style", "border-right:2px dashed rgb(30, 136, 229)"); target.setAttribute("style", "border-right:2px dashed rgb(30, 136, 229)");
@ -861,24 +999,24 @@ var _initialiseProps = function _initialiseProps() {
this.onDragEnd = function (e) { this.onDragEnd = function (e) {
var event = _utils.Event.getEvent(e), var event = _utils.Event.getEvent(e),
target = _utils.Event.getTarget(event); target = _utils.Event.getTarget(event);
_this8._dragCurrent.setAttribute("style", ""); _this7._dragCurrent.setAttribute("style", "");
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
// this._dragCurrent.style = ""; // this._dragCurrent.style = "";
document.getElementById(_this8._table_none_cont_id).innerHTML = ""; document.getElementById(_this7._table_none_cont_id).innerHTML = "";
var data = _this8.getCurrentEventData(_this8._dragCurrent); var data = _this7.getCurrentEventData(_this7._dragCurrent);
if (!data) return; if (!data) return;
if (!_this8.currentObj || _this8.currentObj.key == data.key) return; if (!_this7.currentObj || _this7.currentObj.key == data.key) return;
if (!_this8.props.onDragEnd) return; if (!_this7.props.onDragEnd) return;
_this8.props.onDragEnd(event, { dragSource: _this8.currentObj, dragTarg: data }); _this7.props.onDragEnd(event, { dragSource: _this7.currentObj, dragTarg: data });
}; };
this.onDragLeave = function (e) { this.onDragLeave = function (e) {
var event = _utils.Event.getEvent(e), var event = _utils.Event.getEvent(e),
target = _utils.Event.getTarget(event); target = _utils.Event.getTarget(event);
var currentIndex = target.getAttribute("data-line-index"); var currentIndex = target.getAttribute("data-line-index");
if (!currentIndex || parseInt(currentIndex) === _this8.drag.currIndex) return; if (!currentIndex || parseInt(currentIndex) === _this7.drag.currIndex) return;
if (target.nodeName.toUpperCase() === "TH") { if (target.nodeName.toUpperCase() === "TH") {
target.setAttribute("style", ""); target.setAttribute("style", "");
// this._dragCurrent.style = ""; // this._dragCurrent.style = "";
@ -886,7 +1024,7 @@ var _initialiseProps = function _initialiseProps() {
}; };
this.handlerFilterChange = function (key, value, condition) { this.handlerFilterChange = function (key, value, condition) {
var onFilterChange = _this8.props.onFilterChange; var onFilterChange = _this7.props.onFilterChange;
if (onFilterChange) { if (onFilterChange) {
onFilterChange(key, value, condition); onFilterChange(key, value, condition);
@ -894,7 +1032,7 @@ var _initialiseProps = function _initialiseProps() {
}; };
this.handlerFilterClear = function (field) { this.handlerFilterClear = function (field) {
var onFilterClear = _this8.props.onFilterClear; var onFilterClear = _this7.props.onFilterClear;
if (onFilterClear) { if (onFilterClear) {
onFilterClear(field); onFilterClear(field);
@ -902,7 +1040,7 @@ var _initialiseProps = function _initialiseProps() {
}; };
this.filterRenderType = function (type, dataIndex, index) { this.filterRenderType = function (type, dataIndex, index) {
var _props5 = _this8.props, var _props5 = _this7.props,
clsPrefix = _props5.clsPrefix, clsPrefix = _props5.clsPrefix,
rows = _props5.rows, rows = _props5.rows,
filterDelay = _props5.filterDelay, filterDelay = _props5.filterDelay,
@ -917,8 +1055,8 @@ var _initialiseProps = function _initialiseProps() {
, clsPrefix: clsPrefix //css前缀 , clsPrefix: clsPrefix //css前缀
, className: clsPrefix + " filter-text", , className: clsPrefix + " filter-text",
dataIndex: dataIndex //字段 dataIndex: dataIndex //字段
, onFilterChange: (0, _throttleDebounce.debounce)(filterDelay || 300, _this8.handlerFilterChange) //输入框回调 , onFilterChange: (0, _throttleDebounce.debounce)(filterDelay || 300, _this7.handlerFilterChange) //输入框回调
, onFilterClear: _this8.handlerFilterClear //清除回调 , onFilterClear: _this7.handlerFilterClear //清除回调
, filterDropdown: rows[1][index]["filterdropdown"] //是否显示下拉条件 , filterDropdown: rows[1][index]["filterdropdown"] //是否显示下拉条件
, filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number , filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number
, filterDropdownIncludeKeys: rows[1][index]["filterdropdownincludekeys"] //下拉条件按照指定的keys去显示 , filterDropdownIncludeKeys: rows[1][index]["filterdropdownincludekeys"] //下拉条件按照指定的keys去显示
@ -931,8 +1069,8 @@ var _initialiseProps = function _initialiseProps() {
clsPrefix: clsPrefix, clsPrefix: clsPrefix,
className: clsPrefix + " filter-text", className: clsPrefix + " filter-text",
dataIndex: dataIndex //字段 dataIndex: dataIndex //字段
, onFilterChange: (0, _throttleDebounce.debounce)(filterDelay || 300, _this8.handlerFilterChange) //输入框回调并且函数防抖动 , onFilterChange: (0, _throttleDebounce.debounce)(filterDelay || 300, _this7.handlerFilterChange) //输入框回调并且函数防抖动
, onFilterClear: _this8.handlerFilterClear //清除回调 , onFilterClear: _this7.handlerFilterClear //清除回调
, filterDropdown: rows[1][index]["filterdropdown"], , filterDropdown: rows[1][index]["filterdropdown"],
filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number
, filterDropdownIncludeKeys: rows[1][index]["filterdropdownincludekeys"] //下拉条件按照指定的keys去显示 , filterDropdownIncludeKeys: rows[1][index]["filterdropdownincludekeys"] //下拉条件按照指定的keys去显示
@ -966,8 +1104,8 @@ var _initialiseProps = function _initialiseProps() {
data: selectDataSource, data: selectDataSource,
notFoundContent: "Loading" //没有数据显示的默认字 notFoundContent: "Loading" //没有数据显示的默认字
, dataIndex: dataIndex //字段 , dataIndex: dataIndex //字段
, onFilterChange: _this8.handlerFilterChange //输入框回调 , onFilterChange: _this7.handlerFilterChange //输入框回调
, onFilterClear: _this8.handlerFilterClear //清除回调 , onFilterClear: _this7.handlerFilterClear //清除回调
, filterDropdown: rows[1][index]["filterdropdown"], , filterDropdown: rows[1][index]["filterdropdown"],
onFocus: rows[1][index]["filterdropdownfocus"], onFocus: rows[1][index]["filterdropdownfocus"],
filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number
@ -982,8 +1120,8 @@ var _initialiseProps = function _initialiseProps() {
onClick: function onClick() {}, onClick: function onClick() {},
format: rows[1][index]["format"] || "YYYY-MM-DD", format: rows[1][index]["format"] || "YYYY-MM-DD",
dataIndex: dataIndex //字段 dataIndex: dataIndex //字段
, onFilterChange: _this8.handlerFilterChange //输入框回调 , onFilterChange: _this7.handlerFilterChange //输入框回调
, onFilterClear: _this8.handlerFilterClear //清除回调 , onFilterClear: _this7.handlerFilterClear //清除回调
, filterDropdown: rows[1][index]["filterdropdown"], , filterDropdown: rows[1][index]["filterdropdown"],
filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number
, filterDropdownIncludeKeys: rows[1][index]["filterdropdownincludekeys"] //下拉条件按照指定的keys去显示 , filterDropdownIncludeKeys: rows[1][index]["filterdropdownincludekeys"] //下拉条件按照指定的keys去显示
@ -997,8 +1135,8 @@ var _initialiseProps = function _initialiseProps() {
onClick: function onClick() {}, onClick: function onClick() {},
format: rows[1][index]["format"] || "YYYY", format: rows[1][index]["format"] || "YYYY",
dataIndex: dataIndex //字段 dataIndex: dataIndex //字段
, onFilterChange: _this8.handlerFilterChange //输入框回调 , onFilterChange: _this7.handlerFilterChange //输入框回调
, onFilterClear: _this8.handlerFilterClear //清除回调 , onFilterClear: _this7.handlerFilterClear //清除回调
, filterDropdown: rows[1][index]["filterdropdown"], , filterDropdown: rows[1][index]["filterdropdown"],
filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number
, filterDropdownIncludeKeys: rows[1][index]["filterdropdownincludekeys"] //下拉条件按照指定的keys去显示 , filterDropdownIncludeKeys: rows[1][index]["filterdropdownincludekeys"] //下拉条件按照指定的keys去显示
@ -1012,8 +1150,8 @@ var _initialiseProps = function _initialiseProps() {
onClick: function onClick() {}, onClick: function onClick() {},
format: rows[1][index]["format"] || "YYYY-MM", format: rows[1][index]["format"] || "YYYY-MM",
dataIndex: dataIndex //字段 dataIndex: dataIndex //字段
, onFilterChange: _this8.handlerFilterChange //输入框回调 , onFilterChange: _this7.handlerFilterChange //输入框回调
, onFilterClear: _this8.handlerFilterClear //清除回调 , onFilterClear: _this7.handlerFilterClear //清除回调
, filterDropdown: rows[1][index]["filterdropdown"], , filterDropdown: rows[1][index]["filterdropdown"],
filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number
, filterDropdownIncludeKeys: rows[1][index]["filterdropdownincludekeys"] //下拉条件按照指定的keys去显示 , filterDropdownIncludeKeys: rows[1][index]["filterdropdownincludekeys"] //下拉条件按照指定的keys去显示
@ -1027,8 +1165,8 @@ var _initialiseProps = function _initialiseProps() {
onClick: function onClick() {}, onClick: function onClick() {},
format: rows[1][index]["format"] || "YYYY-Wo", format: rows[1][index]["format"] || "YYYY-Wo",
dataIndex: dataIndex //字段 dataIndex: dataIndex //字段
, onFilterChange: _this8.handlerFilterChange //输入框回调 , onFilterChange: _this7.handlerFilterChange //输入框回调
, onFilterClear: _this8.handlerFilterClear //清除回调 , onFilterClear: _this7.handlerFilterClear //清除回调
, filterDropdown: rows[1][index]["filterdropdown"], , filterDropdown: rows[1][index]["filterdropdown"],
filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number
, filterDropdownIncludeKeys: rows[1][index]["filterdropdownincludekeys"] //下拉条件按照指定的keys去显示 , filterDropdownIncludeKeys: rows[1][index]["filterdropdownincludekeys"] //下拉条件按照指定的keys去显示
@ -1042,8 +1180,8 @@ var _initialiseProps = function _initialiseProps() {
onClick: function onClick() {}, onClick: function onClick() {},
format: rows[1][index]["format"] || "YYYY-MM-DD", format: rows[1][index]["format"] || "YYYY-MM-DD",
dataIndex: dataIndex //字段 dataIndex: dataIndex //字段
, onFilterChange: _this8.handlerFilterChange //输入框回调 , onFilterChange: _this7.handlerFilterChange //输入框回调
, onFilterClear: _this8.handlerFilterClear //清除回调 , onFilterClear: _this7.handlerFilterClear //清除回调
, filterDropdown: rows[1][index]["filterdropdown"], , filterDropdown: rows[1][index]["filterdropdown"],
filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number filterDropdownType: rows[1][index]["filterdropdowntype"] //下拉的条件类型为string,number
, filterDropdownIncludeKeys: rows[1][index]["filterdropdownincludekeys"] //下拉条件按照指定的keys去显示 , filterDropdownIncludeKeys: rows[1][index]["filterdropdownincludekeys"] //下拉条件按照指定的keys去显示
@ -1055,8 +1193,8 @@ var _initialiseProps = function _initialiseProps() {
}; };
this.onCopy = function (data, index, event) { this.onCopy = function (data, index, event) {
if (_this8.props.onCopy) { if (_this7.props.onCopy) {
_this8.props.onCopy(_extends(data, { col: index }), event); _this7.props.onCopy(_extends(data, { col: index }), event);
} }
}; };
}; };

View File

@ -122,6 +122,9 @@ var TableRow = function (_Component) {
target = target.parentNode; target = target.parentNode;
} }
_this.currentIndex = target.getAttribute("data-row-key"); _this.currentIndex = target.getAttribute("data-row-key");
// 拖拽其实index
_this.props.contentTable.startI = target.getAttribute("data-row-index");
_this._dragCurrent = target; _this._dragCurrent = target;
event.dataTransfer.effectAllowed = "move"; event.dataTransfer.effectAllowed = "move";
event.dataTransfer.setData("Text", _this.currentIndex); event.dataTransfer.setData("Text", _this.currentIndex);
@ -134,7 +137,9 @@ var TableRow = function (_Component) {
}; };
_this.onDrop = function (e) { _this.onDrop = function (e) {
var onDragRow = _this.props.onDragRow; var _this$props = _this.props,
onDragRow = _this$props.onDragRow,
contentTable = _this$props.contentTable;
var event = _utils.Event.getEvent(e), var event = _utils.Event.getEvent(e),
_target = _utils.Event.getTarget(event), _target = _utils.Event.getTarget(event),
@ -224,9 +229,9 @@ var TableRow = function (_Component) {
}; };
_this.synchronizeTableTrShadow = function () { _this.synchronizeTableTrShadow = function () {
var _this$props = _this.props, var _this$props2 = _this.props,
contentTable = _this$props.contentTable, contentTable = _this$props2.contentTable,
index = _this$props.index; index = _this$props2.index;
var cont = contentTable.querySelector('.u-table-scroll table tbody').getElementsByTagName("tr")[index], var cont = contentTable.querySelector('.u-table-scroll table tbody').getElementsByTagName("tr")[index],
@ -277,21 +282,29 @@ var TableRow = function (_Component) {
currentObj = element; currentObj = element;
} }
} }
if (type) { if (type == 'down') {
currentObj && currentObj.setAttribute("style", "border-bottom:2px solid #02B1FD"); currentObj && currentObj.setAttribute("style", "border-bottom:2px solid #02B1FD");
} else if (type) {
currentObj && currentObj.setAttribute("style", "border-top:2px solid #02B1FD");
} else { } else {
currentObj && currentObj.setAttribute("style", ""); currentObj && currentObj.setAttribute("style", "");
} }
}; };
_this.onDragEnter = function (e) { _this.onDragEnter = function (e) {
var contentTable = _this.props.contentTable;
var event = _utils.Event.getEvent(e), var event = _utils.Event.getEvent(e),
_target = _utils.Event.getTarget(event), _target = _utils.Event.getTarget(event),
target = _target.parentNode; target = _target.parentNode;
var currentIndex = target.getAttribute("data-row-key"); var currentIndex = target.getAttribute("data-row-key");
var dragEnterIndex = target.getAttribute("data-row-index");
if (!currentIndex || currentIndex === _this.currentIndex) return; if (!currentIndex || currentIndex === _this.currentIndex) return;
var dragType = parseInt(dragEnterIndex) > parseInt(contentTable.startI) ? 'down' : 'top';
contentTable.dragType = dragType;
if (target.nodeName.toUpperCase() === "TR") { if (target.nodeName.toUpperCase() === "TR") {
_this.synchronizeTableTr(currentIndex, true); _this.synchronizeTableTr(currentIndex, dragType);
} }
}; };
@ -332,6 +345,15 @@ var TableRow = function (_Component) {
_this.element = el; _this.element = el;
}; };
_this.getLoadingStyle = function (isPre, isSuf) {
if (isPre) {
return _this.element && _this.element.nextSibling ? _this.element.nextSibling.getBoundingClientRect() : {};
}
if (isSuf) {
return _this.element && _this.element.previousSibling ? _this.element.previousSibling.getBoundingClientRect() : {};
}
};
_this._timeout = null; _this._timeout = null;
_this.state = { _this.state = {
hovered: false hovered: false
@ -570,6 +592,9 @@ var TableRow = function (_Component) {
visible = _props10.visible, visible = _props10.visible,
index = _props10.index, index = _props10.index,
onPaste = _props10.onPaste, onPaste = _props10.onPaste,
isPre = _props10.isPre,
isSuf = _props10.isSuf,
containerWidth = _props10.containerWidth,
expandIconColumnIndex = _props10.expandIconColumnIndex, expandIconColumnIndex = _props10.expandIconColumnIndex,
expandIconAsCell = _props10.expandIconAsCell, expandIconAsCell = _props10.expandIconAsCell,
expanded = _props10.expanded, expanded = _props10.expanded,
@ -592,6 +617,7 @@ var TableRow = function (_Component) {
getCellClassName = _props10.getCellClassName; getCellClassName = _props10.getCellClassName;
var notRowDrag = this.state.notRowDrag; var notRowDrag = this.state.notRowDrag;
var isEmptyTr = isPre || isSuf;
var showSum = false; var showSum = false;
var className = this.props.className; var className = this.props.className;
@ -667,7 +693,7 @@ var TableRow = function (_Component) {
if (rowDraggAble && !useDragHandle && !notRowDrag) { if (rowDraggAble && !useDragHandle && !notRowDrag) {
className += ' row-dragg-able'; className += ' row-dragg-able';
} }
var tdStyle = !isEmptyTr ? {} : this.getLoadingStyle(isPre, isSuf);
return _react2["default"].createElement( return _react2["default"].createElement(
'tr', 'tr',
{ {
@ -678,11 +704,13 @@ var TableRow = function (_Component) {
onMouseLeave: this.onMouseLeave, onMouseLeave: this.onMouseLeave,
className: clsPrefix + ' ' + className + ' ' + clsPrefix + '-level-' + indent, className: clsPrefix + ' ' + className + ' ' + clsPrefix + '-level-' + indent,
style: style, style: style,
'data-row-key': record && record.key ? record.key : hoverKey 'data-row-key': record && record.key ? record.key : hoverKey,
'data-row-index': this.props.index
// key={hoverKey} // key={hoverKey}
, ref: this.bindElement , ref: this.bindElement
}, },
cells.length > 0 ? cells : _react2["default"].createElement('td', { style: { width: 0, padding: 0 } }) cells.length > 0 ? cells : isEmptyTr ? // loading暂时去掉
_react2["default"].createElement('td', { style: { width: 0, padding: 0 } }) : _react2["default"].createElement('td', { style: { width: 0, padding: 0 } })
); );
}; };

View File

@ -321,6 +321,8 @@ function bigData(Table) {
}; };
BigData.prototype.render = function render() { BigData.prototype.render = function render() {
var _this4 = this;
var data = this.props.data; var data = this.props.data;
var scrollTop = this.scrollTop; var scrollTop = this.scrollTop;
var endIndex = this.endIndex, var endIndex = this.endIndex,
@ -356,6 +358,9 @@ function bigData(Table) {
return _react2["default"].createElement(Table, _extends({}, this.props, { return _react2["default"].createElement(Table, _extends({}, this.props, {
data: dataSource, data: dataSource,
lazyLoad: lazyLoad, lazyLoad: lazyLoad,
ref: function ref(el) {
return _this4.table = el;
},
handleScrollY: this.handleScrollY, handleScrollY: this.handleScrollY,
scrollTop: scrollTop, scrollTop: scrollTop,
setRowHeight: this.setRowHeight, setRowHeight: this.setRowHeight,
@ -380,28 +385,28 @@ function bigData(Table) {
}, _class.propTypes = { }, _class.propTypes = {
loadBuffer: _propTypes2["default"].number loadBuffer: _propTypes2["default"].number
}, _initialiseProps = function _initialiseProps() { }, _initialiseProps = function _initialiseProps() {
var _this4 = this; var _this5 = this;
this.getTreeData = function (expandedKeys, newData) { this.getTreeData = function (expandedKeys, newData) {
var startIndex = _this4.startIndex, var startIndex = _this5.startIndex,
endIndex = _this4.endIndex; endIndex = _this5.endIndex;
var data = newData ? newData : _this4.props.data; var data = newData ? newData : _this5.props.data;
_this4.cacheExpandedKeys = expandedKeys && new Set(expandedKeys); _this5.cacheExpandedKeys = expandedKeys && new Set(expandedKeys);
// 深递归 data截取可视区 data 数组,再将扁平结构转换成嵌套结构 // 深递归 data截取可视区 data 数组,再将扁平结构转换成嵌套结构
var sliceTreeList = []; var sliceTreeList = [];
var flatTreeData = _this4.deepTraversal(data); var flatTreeData = _this5.deepTraversal(data);
_this4.flatTreeData = flatTreeData; _this5.flatTreeData = flatTreeData;
sliceTreeList = flatTreeData.slice(startIndex, endIndex); sliceTreeList = flatTreeData.slice(startIndex, endIndex);
_this4.handleTreeListChange(sliceTreeList); _this5.handleTreeListChange(sliceTreeList);
_this4.cacheExpandedKeys = expandedKeys && null; _this5.cacheExpandedKeys = expandedKeys && null;
}; };
this.deepTraversal = function (treeData) { this.deepTraversal = function (treeData) {
var parentKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var parentKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
var _this = _this4; var _this = _this5;
var cacheExpandedKeys = _this.cacheExpandedKeys, var cacheExpandedKeys = _this.cacheExpandedKeys,
_this$expandedRowKeys = _this.expandedRowKeys, _this$expandedRowKeys = _this.expandedRowKeys,
expandedRowKeys = _this$expandedRowKeys === undefined ? [] : _this$expandedRowKeys, expandedRowKeys = _this$expandedRowKeys === undefined ? [] : _this$expandedRowKeys,
@ -415,7 +420,7 @@ function bigData(Table) {
var _dataCopy$i = dataCopy[i], var _dataCopy$i = dataCopy[i],
children = _dataCopy$i.children, children = _dataCopy$i.children,
props = _objectWithoutProperties(_dataCopy$i, ["children"]), props = _objectWithoutProperties(_dataCopy$i, ["children"]),
key = _this4.getRowKey(dataCopy[i], i), key = _this5.getRowKey(dataCopy[i], i),
dataCopyI = new Object(), dataCopyI = new Object(),
_isLeaf = children && children.length > 0 ? false : true, _isLeaf = children && children.length > 0 ? false : true,
isExpanded = parentKey === null || expandedKeysSet.has(parentKey) ? expandedKeysSet.has(key) : false; isExpanded = parentKey === null || expandedKeysSet.has(parentKey) ? expandedKeysSet.has(key) : false;
@ -433,7 +438,7 @@ function bigData(Table) {
// 优化递归逻辑,如果当前节点是收起状态,则不遍历其子节点 // 优化递归逻辑,如果当前节点是收起状态,则不遍历其子节点
if (Array.isArray(children) && children.length > 0 && isExpanded) { if (Array.isArray(children) && children.length > 0 && isExpanded) {
flatTreeData = flatTreeData.concat(_this4.deepTraversal(children, key)); flatTreeData = flatTreeData.concat(_this5.deepTraversal(children, key));
} }
} }
} }
@ -448,28 +453,28 @@ function bigData(Table) {
rootId: null, rootId: null,
_isLeaf: '_isLeaf' _isLeaf: '_isLeaf'
}; };
var treeData = (0, _utils.convertListToTree)(treeList, attr, _this4.flatTreeKeysMap); var treeData = (0, _utils.convertListToTree)(treeList, attr, _this5.flatTreeKeysMap);
_this4.startIndex = typeof startIndex !== "undefined" ? startIndex : _this4.startIndex; _this5.startIndex = typeof startIndex !== "undefined" ? startIndex : _this5.startIndex;
_this4.endIndex = typeof endIndex !== "undefined" ? endIndex : _this4.endIndex; _this5.endIndex = typeof endIndex !== "undefined" ? endIndex : _this5.endIndex;
_this4.treeData = treeData; _this5.treeData = treeData;
}; };
this.computeCachedRowParentIndex = function (data) { this.computeCachedRowParentIndex = function (data) {
var isTree = _this4.props.isTree; var isTree = _this5.props.isTree;
var isTreeType = isTree ? true : _this4.checkIsTreeType(); var isTreeType = isTree ? true : _this5.checkIsTreeType();
treeTypeIndex = 0; treeTypeIndex = 0;
if (isTreeType) { if (isTreeType) {
data.forEach(function (item, index) { data.forEach(function (item, index) {
_this4.firstLevelKey[index] = _this4.getRowKey(item, index); _this5.firstLevelKey[index] = _this5.getRowKey(item, index);
_this4.cachedRowParentIndex[treeTypeIndex] = index; _this5.cachedRowParentIndex[treeTypeIndex] = index;
//保存所有的keys跟小标对应起来 //保存所有的keys跟小标对应起来
_this4.keys[treeTypeIndex] = _this4.getRowKey(item, index); _this5.keys[treeTypeIndex] = _this5.getRowKey(item, index);
treeTypeIndex++; treeTypeIndex++;
if (item.children) { if (item.children) {
_this4.getData(item.children, index); _this5.getData(item.children, index);
} }
}); });
} }
@ -480,7 +485,7 @@ function bigData(Table) {
// 关键点是动态的获取startIndex和endIndex // 关键点是动态的获取startIndex和endIndex
// 法子一子节点也看成普通tr最开始需要设置一共有多少行哪行显示哪行不显示如何确定 // 法子一子节点也看成普通tr最开始需要设置一共有多少行哪行显示哪行不显示如何确定
// 动态取start = current+buffer对应的父节点、end = start+loadCount+row的height为0的行数 展开节点的下一个节点作为end值 // 动态取start = current+buffer对应的父节点、end = start+loadCount+row的height为0的行数 展开节点的下一个节点作为end值
var _this = _this4; var _this = _this5;
var _this$props = _this.props, var _this$props = _this.props,
data = _this$props.data, data = _this$props.data,
height = _this$props.height, height = _this$props.height,
@ -506,13 +511,13 @@ function bigData(Table) {
var temp = nextScrollTop; var temp = nextScrollTop;
var currentKey = void 0; var currentKey = void 0;
while (temp > 0) { while (temp > 0) {
var currentRowHeight = _this4.cachedRowHeight[index]; var currentRowHeight = _this5.cachedRowHeight[index];
if (currentRowHeight === undefined) { if (currentRowHeight === undefined) {
if (_this4.treeType) { if (_this5.treeType) {
// currentKey = this.keys[index]; // currentKey = this.keys[index];
currentKey = _this4.flatTreeData[index].key; currentKey = _this5.flatTreeData[index].key;
currentRowHeight = 0; currentRowHeight = 0;
if (_this4.flatTreeKeysMap.hasOwnProperty(currentKey)) { if (_this5.flatTreeKeysMap.hasOwnProperty(currentKey)) {
currentRowHeight = rowHeight; currentRowHeight = rowHeight;
} }
} else { } else {
@ -537,9 +542,9 @@ function bigData(Table) {
if (viewHeight) { if (viewHeight) {
//有时滚动过快时this.cachedRowHeight[rowsInView + index]为undifined //有时滚动过快时this.cachedRowHeight[rowsInView + index]为undifined
while (rowsHeight < viewHeight && tempIndex < _this4.cachedRowHeight.length) { while (rowsHeight < viewHeight && tempIndex < _this5.cachedRowHeight.length) {
if (_this4.cachedRowHeight[tempIndex]) { if (_this5.cachedRowHeight[tempIndex]) {
rowsHeight += _this4.cachedRowHeight[tempIndex]; rowsHeight += _this5.cachedRowHeight[tempIndex];
// if ( // if (
// (treeType && // (treeType &&
// _this.cachedRowParentIndex[tempIndex] !== tempIndex) || // _this.cachedRowParentIndex[tempIndex] !== tempIndex) ||
@ -569,13 +574,13 @@ function bigData(Table) {
if (treeType && endIndex > flatTreeData.length || !treeType && endIndex > data.length) { if (treeType && endIndex > flatTreeData.length || !treeType && endIndex > data.length) {
endIndex = treeType ? flatTreeData.length : data.length; endIndex = treeType ? flatTreeData.length : data.length;
} }
if (endIndex > _this4.endIndex) { if (endIndex > _this5.endIndex) {
_this4.startIndex = startIndex; _this5.startIndex = startIndex;
_this4.endIndex = endIndex; _this5.endIndex = endIndex;
if (treeType) { if (treeType) {
_this4.handleTreeListChange(flatTreeData.slice(startIndex, endIndex), startIndex, endIndex); _this5.handleTreeListChange(flatTreeData.slice(startIndex, endIndex), startIndex, endIndex);
} }
_this4.setState({ needRender: !needRender }); _this5.setState({ needRender: !needRender });
callback(parseInt(currentIndex + rowsInView)); callback(parseInt(currentIndex + rowsInView));
} }
} }
@ -585,13 +590,13 @@ function bigData(Table) {
if (startIndex < 0) { if (startIndex < 0) {
startIndex = 0; startIndex = 0;
} }
if (startIndex < _this4.startIndex) { if (startIndex < _this5.startIndex) {
_this4.startIndex = startIndex; _this5.startIndex = startIndex;
_this4.endIndex = _this4.startIndex + loadCount; _this5.endIndex = _this5.startIndex + loadCount;
if (treeType) { if (treeType) {
_this4.handleTreeListChange(flatTreeData.slice(startIndex, _this4.endIndex), startIndex, _this4.endIndex); _this5.handleTreeListChange(flatTreeData.slice(startIndex, _this5.endIndex), startIndex, _this5.endIndex);
} }
_this4.setState({ needRender: !needRender }); _this5.setState({ needRender: !needRender });
callback(parseInt(currentIndex + rowsInView)); callback(parseInt(currentIndex + rowsInView));
} }
// console.log( // console.log(
@ -605,7 +610,7 @@ function bigData(Table) {
}; };
this.onExpand = function (expandState, record, index) { this.onExpand = function (expandState, record, index) {
var _this = _this4; var _this = _this5;
var _this$expandedRowKeys2 = _this.expandedRowKeys, var _this$expandedRowKeys2 = _this.expandedRowKeys,
expandedRowKeys = _this$expandedRowKeys2 === undefined ? [] : _this$expandedRowKeys2; expandedRowKeys = _this$expandedRowKeys2 === undefined ? [] : _this$expandedRowKeys2;
var needRender = _this.state.needRender; var needRender = _this.state.needRender;
@ -632,7 +637,7 @@ function bigData(Table) {
if (!_this.props.expandedRowKeys) { if (!_this.props.expandedRowKeys) {
if (expandState) { if (expandState) {
expandedRowKeys.push(rowKey); expandedRowKeys.push(rowKey);
_this4.setState({ needRender: !needRender }); _this5.setState({ needRender: !needRender });
} else { } else {
var _index = -1; var _index = -1;
expandedRowKeys.forEach(function (r, i) { expandedRowKeys.forEach(function (r, i) {
@ -642,7 +647,7 @@ function bigData(Table) {
}); });
if (_index !== -1) { if (_index !== -1) {
expandedRowKeys.splice(_index, 1); expandedRowKeys.splice(_index, 1);
_this4.setState({ needRender: !needRender }); _this5.setState({ needRender: !needRender });
} }
} }
} }
@ -650,7 +655,7 @@ function bigData(Table) {
// expandState为true时记录下 // expandState为true时记录下
_this.props.onExpand(expandState, record); _this.props.onExpand(expandState, record);
if (_this4.treeType) { if (_this5.treeType) {
//收起和展开时,缓存 expandedKeys //收起和展开时,缓存 expandedKeys
_this.cacheExpandedKeys = new Set(expandedRowKeys); _this.cacheExpandedKeys = new Set(expandedRowKeys);
//重新递归数据 //重新递归数据

View File

@ -126,6 +126,8 @@ function dragColumn(Table) {
}); });
DragColumn.prototype.render = function render() { DragColumn.prototype.render = function render() {
var _this2 = this;
var _props = this.props, var _props = this.props,
data = _props.data, data = _props.data,
dragborder = _props.dragborder, dragborder = _props.dragborder,
@ -136,6 +138,9 @@ function dragColumn(Table) {
return _react2["default"].createElement(Table, _extends({}, others, { return _react2["default"].createElement(Table, _extends({}, others, {
columns: this.state.columns, columns: this.state.columns,
data: data, data: data,
ref: function ref(el) {
return _this2.table = el;
},
className: className + ' u-table-drag-border', className: className + ' u-table-drag-border',
onDragEnd: this.onDragEnd, onDragEnd: this.onDragEnd,
draggable: draggable, draggable: draggable,

View File

@ -228,8 +228,13 @@ function sort(Table, Icon) {
this._sortBy = function (pre, after, orderCols, orderColslen, currentIndex) { this._sortBy = function (pre, after, orderCols, orderColslen, currentIndex) {
var currentCol = orderCols[currentIndex]; var currentCol = orderCols[currentIndex];
var getMultiSorterValueFunc = currentCol.getMultiSorterValue;
var preKey = pre[currentCol.key]; var preKey = pre[currentCol.key];
var afterKey = after[currentCol.key]; var afterKey = after[currentCol.key];
if (getMultiSorterValueFunc) {
preKey = getMultiSorterValueFunc(pre, currentCol);
afterKey = getMultiSorterValueFunc(after, currentCol);
}
var colSortFun = currentCol.sorter; var colSortFun = currentCol.sorter;
if (typeof colSortFun !== 'function') { if (typeof colSortFun !== 'function') {
colSortFun = function colSortFun() { colSortFun = function colSortFun() {
@ -281,7 +286,7 @@ function sort(Table, Icon) {
var sort = _this3.props.sort; var sort = _this3.props.sort;
var seleObj = void 0; var seleObj = void 0;
if (!oldData) { if (!oldData.length) {
oldData = data.concat(); oldData = data.concat();
} }
var sortCol = void 0; var sortCol = void 0;

View File

@ -8,6 +8,7 @@ exports.Event = exports.EventUtil = exports.tryParseInt = undefined;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports.measureScrollbar = measureScrollbar; exports.measureScrollbar = measureScrollbar;
exports.myBrowser = myBrowser;
exports.debounce = debounce; exports.debounce = debounce;
exports.warningOnce = warningOnce; exports.warningOnce = warningOnce;
exports.getOffset = getOffset; exports.getOffset = getOffset;
@ -75,6 +76,30 @@ function measureScrollbar() {
return scrollbarSize; return scrollbarSize;
} }
function myBrowser() {
var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
var isOpera = userAgent.indexOf("Opera") > -1;
if (isOpera) {
//判断是否Opera浏览器
return "Opera";
}
if (userAgent.indexOf("Firefox") > -1) {
//判断是否Firefox浏览器
return "FF";
}
if (userAgent.indexOf("Chrome") > -1) {
return "Chrome";
}
if (userAgent.indexOf("Safari") > -1) {
//判断是否Safari浏览器
return "Safari";
}
if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera) {
//判断是否IE浏览器
return "IE";
}
}
function debounce(func, wait, immediate) { function debounce(func, wait, immediate) {
var timeout = void 0; var timeout = void 0;
return function debounceFunc() { return function debounceFunc() {

View File

@ -33,6 +33,7 @@ const columns = [
{ {
title: "联系人", title: "联系人",
dataIndex: "d", dataIndex: "d",
fixed: 'right',
key: "d", key: "d",
width: 500, width: 500,
} }

File diff suppressed because one or more lines are too long

14
dist/demo.css vendored
View File

@ -894,6 +894,20 @@
.u-dropdown ul.u-table-inline-op-dropdowm li.u-dropdown-menu-item i.uf { .u-dropdown ul.u-table-inline-op-dropdowm li.u-dropdown-menu-item i.uf {
font-size: 12px; } font-size: 12px; }
.loading-td {
position: relative !important;
display: block !important; }
.loading-td.pre-td {
bottom: 0; }
.loading-div {
position: absolute;
border: none !important; }
.loading-div.pre {
bottom: 0; }
.loading-div.suf {
top: 0; }
.selected { .selected {
background: #FFF7E7; } background: #FFF7E7; }

2
dist/demo.css.map vendored

File diff suppressed because one or more lines are too long

4250
dist/demo.js vendored

File diff suppressed because one or more lines are too long

2
dist/demo.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -76,6 +76,7 @@ import 'bee-table/build/Table.css';
| loadBuffer | 使用BigData高阶组件实现大数据加载时上下加载的缓存 | number| 5 | loadBuffer | 使用BigData高阶组件实现大数据加载时上下加载的缓存 | number| 5
| hoverContent | hover某行时动态渲染行菜单元素此方法需返回行菜单元素的内容 | Function| | hoverContent | hover某行时动态渲染行菜单元素此方法需返回行菜单元素的内容 | Function|
| heightConsistent | 当固定列内容高度超出非固定列时内容互错行当此属性为true会将高度同步当行过多时会有性能影响所以建议非固定高度如果过高时超出内容可以显示成省略号 | bool|false | heightConsistent | 当固定列内容高度超出非固定列时内容互错行当此属性为true会将高度同步当行过多时会有性能影响所以建议非固定高度如果过高时超出内容可以显示成省略号 | bool|false
| syncFixedRowHeight | 当bodyDisplayInRow为false的时候同步固定列的高度 | bool | - |
| height | 自定义表格行高 | number | - | | height | 自定义表格行高 | number | - |
| headerHeight | 自定义表头行高 | number | - | | headerHeight | 自定义表头行高 | number | - |
| headerDisplayInRow | 设置表头的内容显示一行,超出显示省略号 | bool | true | | headerDisplayInRow | 设置表头的内容显示一行,超出显示省略号 | bool | true |

View File

@ -1,6 +1,6 @@
{ {
"name": "bee-table", "name": "bee-table",
"version": "2.3.14", "version": "2.3.15-beta.24",
"description": "Table ui component for react", "description": "Table ui component for react",
"keywords": [ "keywords": [
"react", "react",

View File

@ -103,6 +103,7 @@ const defaultProps = {
setRowParentIndex:()=>{}, setRowParentIndex:()=>{},
tabIndex:'0', tabIndex:'0',
heightConsistent:false, heightConsistent:false,
syncFixedRowHeight: false,
size: 'md', size: 'md',
rowDraggAble:false, rowDraggAble:false,
hideDragHandle:false, hideDragHandle:false,
@ -164,6 +165,7 @@ class Table extends Component {
this.getFooter = this.getFooter.bind(this); this.getFooter = this.getFooter.bind(this);
this.getEmptyText = this.getEmptyText.bind(this); this.getEmptyText = this.getEmptyText.bind(this);
this.getHeaderRowStyle = this.getHeaderRowStyle.bind(this); this.getHeaderRowStyle = this.getHeaderRowStyle.bind(this);
this.manualSyncFixedTableRowHeight = this.manualSyncFixedTableRowHeight.bind(this)
this.syncFixedTableRowHeight = this.syncFixedTableRowHeight.bind(this); this.syncFixedTableRowHeight = this.syncFixedTableRowHeight.bind(this);
this.resetScrollX = this.resetScrollX.bind(this); this.resetScrollX = this.resetScrollX.bind(this);
this.findExpandedRow = this.findExpandedRow.bind(this); this.findExpandedRow = this.findExpandedRow.bind(this);
@ -178,6 +180,7 @@ class Table extends Component {
this.leftColumnsLength //左侧固定列的长度 this.leftColumnsLength //左侧固定列的长度
this.centerColumnsLength //非固定列的长度 this.centerColumnsLength //非固定列的长度
this.columnsChildrenList = [];//复杂表头、所有叶子节点 this.columnsChildrenList = [];//复杂表头、所有叶子节点
this.dataChanged = false; // 数据是否改变
} }
componentWillMount() { componentWillMount() {
this.centerColumnsLength = this.columnManager.centerColumns().length this.centerColumnsLength = this.columnManager.centerColumns().length
@ -275,16 +278,52 @@ class Table extends Component {
const currentScrollY = this.props.scroll.y const currentScrollY = this.props.scroll.y
if (prevScrollY && currentScrollY && (prevScrollY !== currentScrollY) && this.props.lazyLoad && !this.props.ignoreScrollYChange) { if (prevScrollY && currentScrollY && (prevScrollY !== currentScrollY) && this.props.lazyLoad && !this.props.ignoreScrollYChange) {
this.bodyTable.scrollTop = 0 this.bodyTable.scrollTop = 0
} else if (this.props.ignoreScrollYChange && currentScrollY && prevScrollY && (prevScrollY !== currentScrollY)) { } else if (this.props.ignoreScrollYChange && currentScrollY && prevScrollY) {
const distance = this.bodyTable.scrollTop + (currentScrollY - prevScrollY) if (prevScrollY !== currentScrollY) {
if (distance < 0) { const bodyScrollTop = this.bodyTable.scrollTop
this.bodyTable.scrollTop = 0 if (bodyScrollTop === 0) { // 在顶部的时候,滚动条不用动
this.bodyTable.scrollTop = 0;
} else { } else {
this.bodyTable.scrollTop = distance const distance = bodyScrollTop + currentScrollY - prevScrollY;
if (distance < 0) {
this.bodyTable.scrollTop = 0;
} else {
const { scrollHeight, scrollTop } = this.bodyTable
const bottomDistance = Math.abs(scrollHeight - scrollTop - prevScrollY) // 在最底部的时候也不用滚动滚动条
if (bottomDistance < 5) { // 有些dom计算不是十分精确设置一个值来缓冲一下
this.bodyTable.scrollTop = scrollTop + prevScrollY - currentScrollY
} else {
this.bodyTable.scrollTop = distance;
}
}
}
} else {
this.bodyTable.scrollTop += 1
} }
} }
// 是否传入 scroll中的y属性如果传入判断是否是整数如果是则进行比较 。bodyTable 的clientHeight进行判断 // 是否传入 scroll中的y属性如果传入判断是否是整数如果是则进行比较 。bodyTable 的clientHeight进行判断
this.isShowScrollY(); this.isShowScrollY();
if (this.bodyTable) {
const currentOverflowX = window.getComputedStyle(this.bodyTable).overflowX;
if (!this.props.scroll.x && currentOverflowX === 'scroll') {
this.bodyTable.style.overflowX = 'hidden';
}
if (this.props.scroll.x && currentOverflowX !== 'scroll') {
// 此处应该对比一下实际的
if (this.computeWidth > this.contentDomWidth) {
this.bodyTable.style.overflowX = 'scroll';
}
}
}
if (this.bodyTableOuter) { // 隐藏几个不需要真正滚动的父元素的滚动条
this.bodyTableOuter.style.overflowY = 'hidden'
}
if (this.fixedColumnsBodyLeftOuter) {
this.fixedColumnsBodyLeftOuter.style.overflowY = 'hidden'
}
if (this.fixedColumnsBodyRightOuter) {
this.fixedColumnsBodyRightOuter.style.overflowY = 'hidden'
}
} }
componentWillUnmount() { componentWillUnmount() {
@ -746,7 +785,7 @@ class Table extends Component {
const expandIconColumnIndex = props.expandIconColumnIndex const expandIconColumnIndex = props.expandIconColumnIndex
if(props.lazyLoad && props.lazyLoad.preHeight && indent == 0){ if(props.lazyLoad && props.lazyLoad.preHeight && indent == 0){
rst.push( rst.push(
<TableRow onPaste={onPaste} height={props.lazyLoad.preHeight} columns={[]} className='' key={'table_row_first'} store={this.store} visible = {true}/> <TableRow onPaste={onPaste} containerWidth={this.contentDomWidth} isPre height={props.lazyLoad.preHeight} columns={[]} className='' key={'table_row_first'} store={this.store} visible = {true}/>
) )
} }
const lazyCurrentIndex = props.lazyLoad && props.lazyLoad.startIndex ?props.lazyLoad.startIndex :0; const lazyCurrentIndex = props.lazyLoad && props.lazyLoad.startIndex ?props.lazyLoad.startIndex :0;
@ -757,7 +796,7 @@ class Table extends Component {
const record = data[i]; const record = data[i];
const key = this.getRowKey(record, i); const key = this.getRowKey(record, i);
// 兼容 NCC 以前的业务逻辑,支持外部通过 record 中的 isleaf 字段,判断是否为叶子节点 // 兼容 NCC 以前的业务逻辑,支持外部通过 record 中的 isleaf 字段,判断是否为叶子节点
record['_isLeaf'] = typeof record['isleaf'] === 'boolean' ? record['isleaf'] : record['_isLeaf']; typeof record['isleaf'] === 'boolean' && (record['_isLeaf'] = record['isleaf']);
// _isLeaf 字段是在 bigData 里添加的,只有层级树大数据场景需要该字段 // _isLeaf 字段是在 bigData 里添加的,只有层级树大数据场景需要该字段
// _isLeaf 有三种取值情况true / false / null。Table内部字段 // _isLeaf 有三种取值情况true / false / null。Table内部字段
const _isLeaf = typeof record['_isLeaf'] === 'boolean' ? record['_isLeaf'] : null; const _isLeaf = typeof record['_isLeaf'] === 'boolean' ? record['_isLeaf'] : null;
@ -889,7 +928,7 @@ class Table extends Component {
if(props.lazyLoad && props.lazyLoad.sufHeight && indent == 0){ if(props.lazyLoad && props.lazyLoad.sufHeight && indent == 0){
rst.push( rst.push(
<TableRow onPaste={onPaste} height={props.lazyLoad.sufHeight} key={'table_row_end'} columns={[]} className='' store={this.store} visible = {true}/> <TableRow onPaste={onPaste} containerWidth={this.contentDomWidth} isSuf height={props.lazyLoad.sufHeight} key={'table_row_end'} columns={[]} className='' store={this.store} visible = {true}/>
) )
} }
if (!this.isTreeType) { if (!this.isTreeType) {
@ -995,7 +1034,7 @@ class Table extends Component {
if(this.props.data.length == 0 && this.props.headerScroll ){ if(this.props.data.length == 0 && this.props.headerScroll ){
bodyStyle.overflowX = 'hidden'; bodyStyle.overflowX = 'hidden';
} }
if (!footerScroll) { if (!footerScroll && this.computeWidth > this.contentDomWidth) {
bodyStyle.overflowX = bodyStyle.overflowX || 'auto'; bodyStyle.overflowX = bodyStyle.overflowX || 'auto';
} }
} }
@ -1007,6 +1046,11 @@ class Table extends Component {
// bodyStyle.height = bodyStyle.height || scroll.y; // bodyStyle.height = bodyStyle.height || scroll.y;
innerBodyStyle.maxHeight = bodyStyle.maxHeight || scroll.y; innerBodyStyle.maxHeight = bodyStyle.maxHeight || scroll.y;
innerBodyStyle.overflowY = bodyStyle.overflowY || 'scroll'; innerBodyStyle.overflowY = bodyStyle.overflowY || 'scroll';
if (this.computeWidth > this.contentDomWidth) {
innerBodyStyle.overflowX = 'scroll';
} else if (this.contentWidth === this.contentDomWidth) {
innerBodyStyle.overflowX = 'hidden';
}
} else { } else {
bodyStyle.maxHeight = bodyStyle.maxHeight || scroll.y; bodyStyle.maxHeight = bodyStyle.maxHeight || scroll.y;
} }
@ -1040,7 +1084,15 @@ class Table extends Component {
headStyle.overflow = 'hidden'; headStyle.overflow = 'hidden';
innerBodyStyle.overflowX = 'auto'; //兼容expand场景、子表格含有固定列的场景 innerBodyStyle.overflowX = 'auto'; //兼容expand场景、子表格含有固定列的场景
}else{ }else{
bodyStyle.marginBottom = `-${scrollbarWidth}px`; if (this.computeWidth > this.contentDomWidth) {
bodyStyle.marginBottom = '-' + scrollbarWidth + 'px';
let userAgent = navigator.userAgent; // 火狐浏览器固定表格跟随resize事件产生的滚动条隐藏
let isFF = userAgent.indexOf("Firefox") > -1;
if (isFF) {
// innerBodyStyle.overflowX = 'hidden';
delete innerBodyStyle.overflowX
}
}
} }
}else{ }else{
@ -1076,6 +1128,9 @@ class Table extends Component {
if ( !fixed && this.contentDomWidth < this.contentWidth) { if ( !fixed && this.contentDomWidth < this.contentWidth) {
tableStyle.width = this.contentWidth - this.columnManager.getLeftColumnsWidth(this.contentWidth) - this.columnManager.getRightColumnsWidth(this.contentWidth); tableStyle.width = this.contentWidth - this.columnManager.getLeftColumnsWidth(this.contentWidth) - this.columnManager.getRightColumnsWidth(this.contentWidth);
} }
if (this.bodyTable && !fixed && this.contentDomWidth === this.contentWidth) {
tableStyle.width = this.bodyTable.clientWidth
}
const tableBody = hasBody ? getBodyWrapper( const tableBody = hasBody ? getBodyWrapper(
<tbody className={`${clsPrefix}-tbody`} onMouseLeave={this.onBodyMouseLeave}> <tbody className={`${clsPrefix}-tbody`} onMouseLeave={this.onBodyMouseLeave}>
{this.getRows(columns, fixed)} {this.getRows(columns, fixed)}
@ -1093,7 +1148,6 @@ class Table extends Component {
}; };
let headTable; let headTable;
if (useFixedHeader) { if (useFixedHeader) {
headTable = ( headTable = (
<div <div
@ -1112,15 +1166,16 @@ class Table extends Component {
<div <div
className={`${clsPrefix}-body`} className={`${clsPrefix}-body`}
style={bodyStyle} style={bodyStyle}
ref={(el)=>{this.bodyTable = el}}
onMouseOver={this.detectScrollTarget} onMouseOver={this.detectScrollTarget}
onTouchStart={this.detectScrollTarget} onTouchStart={this.detectScrollTarget}
onScroll={this.handleBodyScroll} ref={(el)=>{this.bodyTableOuter = el}}
onMouseLeave={this.onBodyMouseLeave} onMouseLeave={this.onBodyMouseLeave}
> >
{this.renderDragHideTable()} {this.renderDragHideTable()}
<div className="scroll-container" onScroll={this.handleBodyScroll} ref={(el)=>{this.bodyTable = el}} style={{...bodyStyle}}>
{renderTable(!useFixedHeader)} {renderTable(!useFixedHeader)}
</div> </div>
</div>
); );
if (fixed && columns.length) { if (fixed && columns.length) {
@ -1140,13 +1195,13 @@ class Table extends Component {
<div <div
style={{...innerBodyStyle}} style={{...innerBodyStyle}}
className={`${clsPrefix}-body-inner`} className={`${clsPrefix}-body-inner`}
ref={refName} ref={el => this[`${refName}Outer`] = el}
onMouseOver={this.detectScrollTarget} onMouseOver={this.detectScrollTarget}
onTouchStart={this.detectScrollTarget} onTouchStart={this.detectScrollTarget}
onScroll={this.handleBodyScroll}
> >
<div className="fixed-scroll-container" ref={refName} style={{...innerBodyStyle}} onScroll={this.handleBodyScroll}>
{renderTable(!useFixedHeader)} {renderTable(!useFixedHeader)}
{/* <div className="scroll-dom" style={{height:`${this.scrollbarWidth}px`}}></div> */} </div>
</div> </div>
</div> </div>
); );
@ -1218,16 +1273,33 @@ class Table extends Component {
} }
getFlatRecords = data => {
var result = []
for (var i = 0; i < data.length; i++) {
result.push(data[i])
if ((data[i].children || []).length) {
result = result.concat(this.getFlatRecords(data[i].children))
}
}
return result
};
manualSyncFixedTableRowHeight() {
this.dataChanged = true
this.syncFixedTableRowHeight()
}
syncFixedTableRowHeight() { syncFixedTableRowHeight() {
//this.props.height、headerHeight分别为用户传入的行高和表头高度如果有值所有行的高度都是固定的主要为了避免在千行数据中有固定列时获取行高度有问题 //this.props.height、headerHeight分别为用户传入的行高和表头高度如果有值所有行的高度都是固定的主要为了避免在千行数据中有固定列时获取行高度有问题
const { clsPrefix, height, headerHeight,columns,heightConsistent, bodyDisplayInRow } = this.props; const { clsPrefix, height, headerHeight,columns,heightConsistent, bodyDisplayInRow, lazyLoad, syncFixedRowHeight } = this.props;
const headRows = this.headTable ? const headRows = this.headTable ?
this.headTable.querySelectorAll('thead') : this.headTable.querySelectorAll('thead') :
this.bodyTable.querySelectorAll('thead'); this.bodyTable.querySelectorAll('thead');
const expandedRows = this.bodyTable.querySelectorAll(`.${clsPrefix}-expanded-row`) || []; const expandedRows = this.bodyTable.querySelectorAll(`.${clsPrefix}-expanded-row`) || [];
const bodyRows = this.bodyTable.querySelectorAll(`.${clsPrefix}-row`) || []; const bodyRows = this.bodyTable.querySelectorAll(`.${clsPrefix}-row`) || [];
const leftBodyRows = this.refs.fixedColumnsBodyLeft && this.refs.fixedColumnsBodyLeft.querySelectorAll(`.${clsPrefix}-row`) || []; const leftBodyRows = !this.dataChanged && this.refs.fixedColumnsBodyLeft && this.refs.fixedColumnsBodyLeft.querySelectorAll(`.${clsPrefix}-row`) || [];
const rightBodyRows = this.refs.fixedColumnsBodyRight && this.refs.fixedColumnsBodyRight.querySelectorAll(`.${clsPrefix}-row`) || []; const rightBodyRows = !this.dataChanged && this.refs.fixedColumnsBodyRight && this.refs.fixedColumnsBodyRight.querySelectorAll(`.${clsPrefix}-row`) || [];
this.dataChanged = false
const fixedColumnsHeadRowsHeight = [].map.call( const fixedColumnsHeadRowsHeight = [].map.call(
headRows, row =>{ headRows, row =>{
let height = headerHeight; let height = headerHeight;
@ -1236,15 +1308,23 @@ class Table extends Component {
} }
return headerHeight ? height : (parseInt(row.getBoundingClientRect().height) || 'auto')} return headerHeight ? height : (parseInt(row.getBoundingClientRect().height) || 'auto')}
); );
const flatRecords = this.getFlatRecords(this.props.data || [])
const fixedColumnsBodyRowsHeight = [].map.call( const fixedColumnsBodyRowsHeight = [].map.call(
bodyRows, (row,index) =>{ bodyRows, (row,index) =>{
let rsHeight = height; let rsHeight = height;
if(bodyDisplayInRow && rsHeight){ if(bodyDisplayInRow && rsHeight){
return rsHeight; return rsHeight;
}else{ }else{
const rowKey = row.getAttribute('data-row-key')
const record = flatRecords.find(record => record.key === rowKey) || {}
const leafKey = 'isleaf' in record ? 'isleaf' : '_isLeaf' in record ? '_isLeaf' : null // ncc传递这俩属性区分是否是子节点
const isLeaf = leafKey && record[leafKey] === true
if (isLeaf) {
return Number((Number(row.getBoundingClientRect().height)).toFixed(2)) || 'auto';
}
// 为了提高性能,默认获取主表的高度,但是有的场景中固定列的高度比主表的高度高,所以提供此属性,会统计所有列的高度取最大的,设置 // 为了提高性能,默认获取主表的高度,但是有的场景中固定列的高度比主表的高度高,所以提供此属性,会统计所有列的高度取最大的,设置
// 内容折行显示,并又设置了 height 的情况下,也要获取主表高度 // 内容折行显示,并又设置了 height 的情况下,也要获取主表高度
if(heightConsistent || (!bodyDisplayInRow && rsHeight)){ if(heightConsistent || (!bodyDisplayInRow && rsHeight && syncFixedRowHeight)){
let leftHeight,rightHeight,currentHeight,maxHeight; let leftHeight,rightHeight,currentHeight,maxHeight;
leftHeight = leftBodyRows[index]?Number(leftBodyRows[index].getBoundingClientRect().height).toFixed(2):0; // 有些浏览器中取到的高度是小数直接parseInt有问题保留两位小数处理 leftHeight = leftBodyRows[index]?Number(leftBodyRows[index].getBoundingClientRect().height).toFixed(2):0; // 有些浏览器中取到的高度是小数直接parseInt有问题保留两位小数处理
rightHeight = rightBodyRows[index]?Number(rightBodyRows[index].getBoundingClientRect().height).toFixed(2):0; rightHeight = rightBodyRows[index]?Number(rightBodyRows[index].getBoundingClientRect().height).toFixed(2):0;

View File

@ -1139,3 +1139,22 @@ $icon-color:#505F79;
} }
} }
} }
.loading-td {
position: relative !important;
display: block !important;
&.pre-td {
bottom: 0;
}
}
.loading-div {
position: absolute;
border: none !important;
&.pre {
bottom: 0;
}
&.suf {
top: 0;
}
}

View File

@ -106,7 +106,7 @@ class TableHeader extends Component {
table.bodyRows = table.tableBody && table.tableBody.querySelectorAll('tr') || []; table.bodyRows = table.tableBody && table.tableBody.querySelectorAll('tr') || [];
table.fixedLeftHeaderTable = contentTable.querySelector('.u-table-fixed-left .u-table-header') ; table.fixedLeftHeaderTable = contentTable.querySelector('.u-table-fixed-left .u-table-header') ;
table.fixedRighHeadertTable = contentTable.querySelector('.u-table-fixed-right .u-table-header'); table.fixedRightHeaderTable = contentTable.querySelector('.u-table-fixed-right .u-table-header');
table.contentTableHeader = contentTable.querySelector('.u-table-scroll .u-table-header'); table.contentTableHeader = contentTable.querySelector('.u-table-scroll .u-table-header');
table.fixedLeftBodyTable = contentTable.querySelectorAll('.u-table-fixed-left .u-table-body-outer') ; table.fixedLeftBodyTable = contentTable.querySelectorAll('.u-table-fixed-left .u-table-body-outer') ;
if (table.fixedLeftBodyTable) { if (table.fixedLeftBodyTable) {
@ -121,6 +121,10 @@ class TableHeader extends Component {
} }
table.innerTableBody= contentTable.querySelector('.u-table-scroll .u-table-body table'); table.innerTableBody= contentTable.querySelector('.u-table-scroll .u-table-body table');
table.fixedLeftHeaderTableBody = table.fixedLeftHeaderTable && table.fixedLeftHeaderTable.querySelector('table') || null;
table.fixedRightHeaderTableBody = table.fixedRightHeaderTable && table.fixedRightHeaderTable.querySelector('table') || null;
table.fixedLeftInnerTableBody = table.fixedLeftBodyTable && table.fixedLeftBodyTable.querySelector('table') || null;
table.fixedRightInnerTableBody = table.fixedRightBodyTable && table.fixedRightBodyTable.querySelector('table') || null;
table.fixedLeftBodyRows = table.fixedLeftBodyTable && table.fixedLeftBodyTable.querySelectorAll('tr') || []; table.fixedLeftBodyRows = table.fixedLeftBodyTable && table.fixedLeftBodyTable.querySelectorAll('tr') || [];
table.fixedRightBodyRows = table.fixedRightBodyTable && table.fixedRightBodyTable.querySelectorAll('tr') || []; table.fixedRightBodyRows = table.fixedRightBodyTable && table.fixedRightBodyTable.querySelectorAll('tr') || [];
} }
@ -171,10 +175,12 @@ class TableHeader extends Component {
doEventList(trs,action){ doEventList(trs,action){
if (trs && HTMLCollection.prototype.isPrototypeOf(trs) && action) {
for (let index = 0; index < trs.length; index++) { for (let index = 0; index < trs.length; index++) {
action(trs[index]); action(trs[index]);
} }
} }
}
/** /**
* 拖拽列宽事件的监听 * 拖拽列宽事件的监听
@ -204,10 +210,12 @@ class TableHeader extends Component {
{key:'mousemove', fun:this.onTrMouseMove}, {key:'mousemove', fun:this.onTrMouseMove},
]; ];
// this.eventListen(events,'remove',this.table.tr[0]); // this.eventListen(events,'remove',this.table.tr[0]);
if(this.table && this.table.tr){
this.doEventList(this.table.tr,(tr)=>{ this.doEventList(this.table.tr,(tr)=>{
this.eventListen(events,'remove',this.table.tr); this.eventListen(events,'remove',this.table.tr);
}) })
} }
}
eventListen(events,type,eventSource){ eventListen(events,type,eventSource){
if(!this.table)return; if(!this.table)return;
@ -279,6 +287,7 @@ class TableHeader extends Component {
let currentObj = this.table.cols[currentIndex]; let currentObj = this.table.cols[currentIndex];
this.drag.currIndex = currentIndex; this.drag.currIndex = currentIndex;
this.drag.oldLeft = event.clientX; this.drag.oldLeft = event.clientX;
this.drag.currentLeft = event.clientX;
this.drag.oldWidth = parseInt((currentObj).style.width); this.drag.oldWidth = parseInt((currentObj).style.width);
this.drag.minWidth = currentObj.style.minWidth != ""?parseInt(currentObj.style.minWidth):defaultWidth; this.drag.minWidth = currentObj.style.minWidth != ""?parseInt(currentObj.style.minWidth):defaultWidth;
this.drag.tableWidth = parseInt(this.table.table.style.width ?this.table.table.style.width:this.table.table.scrollWidth); this.drag.tableWidth = parseInt(this.table.table.style.width ?this.table.table.style.width:this.table.table.scrollWidth);
@ -305,6 +314,11 @@ class TableHeader extends Component {
} }
} }
this.drag.fixedType = fixedType; this.drag.fixedType = fixedType;
if (fixedType === 'left' && this.table.fixedRightBodyTable) {
this.drag.fixedRightBodyTableLeft = this.table.fixedRightBodyTable.getBoundingClientRect().left
} else {
this.drag.fixedRightBodyTableLeft = null
}
}else if(type != 'online' && this.props.draggable){ }else if(type != 'online' && this.props.draggable){
// if (!this.props.draggable || targetEvent.nodeName.toUpperCase() != "TH") return; // if (!this.props.draggable || targetEvent.nodeName.toUpperCase() != "TH") return;
if (!this.props.draggable) return; if (!this.props.draggable) return;
@ -365,12 +379,18 @@ class TableHeader extends Component {
let event = Event.getEvent(e); let event = Event.getEvent(e);
if(this.props.dragborder && this.drag.option == "border"){ if(this.props.dragborder && this.drag.option == "border"){
//移动改变宽度 //移动改变宽度
const isMoveToRight = this.drag.currentLeft < event.clientX
if (this.drag.fixedType === 'left' && isMoveToRight && this.drag.fixedRightBodyTableLeft) {
if (this.drag.fixedRightBodyTableLeft - event.clientX < 100) {
return // 拖动左侧固定列离右侧固定列距离小于100时禁止拖动
}
}
let currentCols = this.table.cols[this.drag.currIndex]; let currentCols = this.table.cols[this.drag.currIndex];
let diff = (event.clientX - this.drag.oldLeft); let diff = (event.clientX - this.drag.oldLeft);
let newWidth = this.drag.oldWidth + diff; let newWidth = this.drag.oldWidth + diff;
this.drag.newWidth = newWidth > 0 ? newWidth : this.minWidth; this.drag.newWidth = newWidth > 0 ? newWidth : this.minWidth;
if(newWidth > this.minWidth){ this.drag.currentLeft = event.clientX;
currentCols.style.width = newWidth +'px';
// displayinrow 判断、 固定行高判断 // displayinrow 判断、 固定行高判断
if(!bodyDisplayInRow) { if(!bodyDisplayInRow) {
@ -385,6 +405,8 @@ class TableHeader extends Component {
}) })
} }
if(newWidth > this.minWidth){
currentCols.style.width = newWidth +'px';
//hao 支持固定表头拖拽 修改表体的width //hao 支持固定表头拖拽 修改表体的width
if(this.fixedTable.cols){ if(this.fixedTable.cols){
this.fixedTable.cols[this.drag.currIndex].style.width = newWidth + "px"; this.fixedTable.cols[this.drag.currIndex].style.width = newWidth + "px";
@ -418,21 +440,22 @@ class TableHeader extends Component {
//找到固定列表格设置表头的marginBottom值为scrollbarWidth; //找到固定列表格设置表头的marginBottom值为scrollbarWidth;
this.table.contentTableHeader.style.overflowX = 'scroll'; this.table.contentTableHeader.style.overflowX = 'scroll';
this.optTableMargin( this.table.fixedLeftHeaderTable,scrollbarWidth); this.optTableMargin( this.table.fixedLeftHeaderTable,scrollbarWidth);
this.optTableMargin( this.table.fixedRighHeadertTable,scrollbarWidth); this.optTableMargin( this.table.fixedRightHeaderTable,scrollbarWidth);
}else{ //大于 0 不显示滚动条 }else{ //大于 0 不显示滚动条
this.table.contentTableHeader.style.overflowX = 'hidden'; this.table.contentTableHeader.style.overflowX = 'hidden';
this.optTableMargin( this.table.fixedLeftHeaderTable,0); this.optTableMargin( this.table.fixedLeftHeaderTable,0);
this.optTableMargin( this.table.fixedRighHeadertTable,0); this.optTableMargin( this.table.fixedRightHeaderTable,0);
} }
}else{ }else{
const scrollContainers = this.table.tableBody.querySelectorAll('.scroll-container') || []
if(showScroll < 0){ if(showScroll < 0){
this.table.tableBody.style.overflowX = 'auto'; scrollContainers[0] ? scrollContainers[0].style.overflowX = 'auto' : null
this.optTableMargin( this.table.fixedLeftBodyTable,'-'+scrollbarWidth); this.optTableMargin( this.table.fixedLeftBodyTable,'-'+scrollbarWidth);
this.optTableMargin( this.table.fixedRightBodyTable,'-'+scrollbarWidth); this.optTableMargin( this.table.fixedRightBodyTable,'-'+scrollbarWidth);
this.optTableScroll( this.table.fixedLeftBodyTable,{x:'scroll'}); this.optTableScroll( this.table.fixedLeftBodyTable,{x:'scroll'});
this.optTableScroll( this.table.fixedRightBodyTable,{x:'scroll'}); this.optTableScroll( this.table.fixedRightBodyTable,{x:'scroll'});
}else{ }else{
this.table.tableBody.style.overflowX = 'hidden'; scrollContainers[0] ? scrollContainers[0].style.overflowX = 'hidden' : null
this.optTableMargin( this.table.fixedLeftBodyTable,0); this.optTableMargin( this.table.fixedLeftBodyTable,0);
this.optTableMargin( this.table.fixedRightBodyTable,0); this.optTableMargin( this.table.fixedRightBodyTable,0);
this.optTableScroll( this.table.fixedLeftBodyTable,{x:'auto'}); this.optTableScroll( this.table.fixedLeftBodyTable,{x:'auto'});
@ -445,7 +468,7 @@ class TableHeader extends Component {
} }
// console.log('this.drag.contentTableML',this.drag.contentTableML,'diff',diff); // console.log('this.drag.contentTableML',this.drag.contentTableML,'diff',diff);
// debugger // debugger
this.syncFixedBodyTableWidth() // 同步body中table的宽度
const contentTablePar = this.table.contentTableHeader.parentNode; const contentTablePar = this.table.contentTableHeader.parentNode;
// left、right缩小的内容在没有滚动条时需要将宽度同步到到最后一列 // left、right缩小的内容在没有滚动条时需要将宽度同步到到最后一列
// diff<0 往里拖, // diff<0 往里拖,
@ -460,12 +483,25 @@ class TableHeader extends Component {
// } // }
if(this.drag.fixedType == 'left') { if(this.drag.fixedType == 'left') {
contentTablePar.style.marginLeft = this.drag.contentTableML + diff + 'px' contentTablePar.style.marginLeft = this.drag.contentTableML + diff + 'px'
}else { }else {
contentTablePar.style.marginRight = this.drag.contentTableMR + diff + 'px' contentTablePar.style.marginRight = this.drag.contentTableMR + diff + 'px'
} }
const containerWidth = contentTablePar.getBoundingClientRect().width
const tableWidth = this.table.innerTableBody.getBoundingClientRect().width
const scrollContainers = this.table.tableBody.querySelectorAll('.scroll-container') || []
if (tableWidth > containerWidth) {
scrollContainers[0] ? scrollContainers[0].style.overflowX = 'auto' : null
this.optTableMargin( this.table.fixedLeftBodyTable,'-'+scrollbarWidth);
this.optTableMargin( this.table.fixedRightBodyTable,'-'+scrollbarWidth);
this.optTableScroll( this.table.fixedLeftBodyTable,{x:'scroll'});
this.optTableScroll( this.table.fixedRightBodyTable,{x:'scroll'});
} else {
scrollContainers[0] ? scrollContainers[0].style.overflowX = 'hidden' : null
this.optTableMargin( this.table.fixedLeftBodyTable,0);
this.optTableMargin( this.table.fixedRightBodyTable,0);
this.optTableScroll( this.table.fixedLeftBodyTable,{x:'auto'});
this.optTableScroll( this.table.fixedRightBodyTable,{x:'auto'});
}
} }
}else { }else {
@ -476,6 +512,16 @@ class TableHeader extends Component {
this.drag.newWidth && onDraggingBorder && onDraggingBorder(event, this.drag.newWidth); this.drag.newWidth && onDraggingBorder && onDraggingBorder(event, this.drag.newWidth);
} }
syncFixedBodyTableWidth = () => {
let { fixedLeftHeaderTableBody, fixedLeftInnerTableBody, fixedRightHeaderTableBody, fixedRightInnerTableBody } = this.table
if (fixedLeftHeaderTableBody && fixedLeftInnerTableBody) {
fixedLeftInnerTableBody.style.width = fixedLeftHeaderTableBody.getBoundingClientRect().width + 'px'
}
if (fixedRightHeaderTableBody && fixedRightInnerTableBody) {
fixedRightInnerTableBody.style.width = fixedRightHeaderTableBody.getBoundingClientRect().width + 'px'
}
}
/** /**
* 调整列宽的up事件 * 调整列宽的up事件
* @memberof TableHeader * @memberof TableHeader
@ -536,7 +582,13 @@ class TableHeader extends Component {
const innerTable = table.querySelector('.u-table-body-inner'); const innerTable = table.querySelector('.u-table-body-inner');
if(innerTable){ if(innerTable){
//fixbug: 拖拽列宽后,滚动条滚到表格底部,会导致固定列和非固定列错行 //fixbug: 拖拽列宽后,滚动条滚到表格底部,会导致固定列和非固定列错行
overflow.x && (innerTable.style.overflowX = overflow.x); if (overflow.x) {
const fixedScrollContainers = innerTable.querySelectorAll('.fixed-scroll-container')
if (fixedScrollContainers && fixedScrollContainers.length) {
fixedScrollContainers[0] && (fixedScrollContainers[0].style.overflowX = overflow.x);
fixedScrollContainers[1] && (fixedScrollContainers[1].style.overflowX = overflow.x);
}
}
overflow.y && (innerTable.style.overflowY = overflow.y); overflow.y && (innerTable.style.overflowY = overflow.y);
} }

View File

@ -467,14 +467,24 @@ class TableRow extends Component{
this.element = el this.element = el
} }
getLoadingStyle = (isPre, isSuf) => {
if (isPre) {
return this.element && this.element.nextSibling ? this.element.nextSibling .getBoundingClientRect() : {}
}
if (isSuf) {
return this.element && this.element.previousSibling ? this.element.previousSibling.getBoundingClientRect() : {}
}
}
render() { render() {
const { const {
clsPrefix, columns, record, height, visible, index,onPaste, clsPrefix, columns, record, height, visible, index,onPaste, isPre, isSuf, containerWidth,
expandIconColumnIndex, expandIconAsCell, expanded, useDragHandle,rowDraggAble, expandIconColumnIndex, expandIconAsCell, expanded, useDragHandle,rowDraggAble,
expandable, onExpand, needIndentSpaced, indent, indentSize,isHiddenExpandIcon,fixed,bodyDisplayInRow expandable, onExpand, needIndentSpaced, indent, indentSize,isHiddenExpandIcon,fixed,bodyDisplayInRow
,expandedIcon,collapsedIcon, hoverKey,lazyStartIndex,lazyEndIndex, expandIconCellWidth, getCellClassName ,expandedIcon,collapsedIcon, hoverKey,lazyStartIndex,lazyEndIndex, expandIconCellWidth, getCellClassName
} = this.props; } = this.props;
const {notRowDrag} = this.state; const {notRowDrag} = this.state;
const isEmptyTr = isPre || isSuf
let showSum = false; let showSum = false;
let { className } = this.props; let { className } = this.props;
if (this.state.hovered) { if (this.state.hovered) {
@ -555,7 +565,7 @@ class TableRow extends Component{
if(rowDraggAble && !useDragHandle && !notRowDrag) { if(rowDraggAble && !useDragHandle && !notRowDrag) {
className += ' row-dragg-able' className += ' row-dragg-able'
} }
const tdStyle = !isEmptyTr ? {} : this.getLoadingStyle(isPre, isSuf)
return ( return (
<tr <tr
draggable={rowDraggAble && !useDragHandle && !notRowDrag} draggable={rowDraggAble && !useDragHandle && !notRowDrag}
@ -570,7 +580,10 @@ class TableRow extends Component{
// key={hoverKey} // key={hoverKey}
ref={this.bindElement} ref={this.bindElement}
> >
{cells.length>0?cells:<td style={{width:0,padding:0}}></td>} {cells.length > 0 ? cells : isEmptyTr ? // loading暂时去掉
<td style={{width: 0,padding: 0}}>
</td> : <td style={{width: 0,padding: 0}}>
</td>}
</tr> </tr>
); );
} }

View File

@ -573,6 +573,7 @@ export default function bigData(Table) {
{...this.props} {...this.props}
data={dataSource} data={dataSource}
lazyLoad={lazyLoad} lazyLoad={lazyLoad}
ref={el => this.table = el}
handleScrollY={this.handleScrollY} handleScrollY={this.handleScrollY}
scrollTop={scrollTop} scrollTop={scrollTop}
setRowHeight={this.setRowHeight} setRowHeight={this.setRowHeight}

View File

@ -90,6 +90,7 @@ export default function dragColumn(Table) {
{...others} {...others}
columns={this.state.columns} columns={this.state.columns}
data={data} data={data}
ref={el => this.table = el}
className={`${className} u-table-drag-border`} className={`${className} u-table-drag-border`}
onDragEnd={this.onDragEnd} onDragEnd={this.onDragEnd}
draggable={draggable} draggable={draggable}

View File

@ -188,7 +188,7 @@ export default function sort(Table, Icon) {
let { data, oldData = [], flatColumns } = this.state; let { data, oldData = [], flatColumns } = this.state;
let { sort } = this.props; let { sort } = this.props;
let seleObj; let seleObj;
if (!oldData) { if (!oldData.length) {
oldData = data.concat(); oldData = data.concat();
} }
let sortCol ; let sortCol ;

View File

@ -41,6 +41,25 @@ export function measureScrollbar(direction = 'vertical') {
return scrollbarSize; return scrollbarSize;
} }
export function myBrowser() {
var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
var isOpera = userAgent.indexOf("Opera") > -1;
if (isOpera) { //判断是否Opera浏览器
return "Opera"
}
if (userAgent.indexOf("Firefox") > -1) { //判断是否Firefox浏览器
return "FF";
}
if (userAgent.indexOf("Chrome") > -1) {
return "Chrome";
}
if (userAgent.indexOf("Safari") > -1) { //判断是否Safari浏览器
return "Safari";
}
if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera) { //判断是否IE浏览器
return "IE";
}
}
export function debounce(func, wait, immediate) { export function debounce(func, wait, immediate) {
let timeout; let timeout;