|
|
@@ -0,0 +1,94 @@
|
|
|
+/**
|
|
|
+ * 指标板
|
|
|
+ */
|
|
|
+import React from 'react'
|
|
|
+import EmptyContent from '../../common/emptyContent/index'
|
|
|
+import './indicatorView.less'
|
|
|
+class IndicatorView extends React.Component {
|
|
|
+ constructor(props) {
|
|
|
+ super(props);
|
|
|
+ this.state = {}
|
|
|
+ }
|
|
|
+
|
|
|
+ componentDidMount() {
|
|
|
+ this.autoLayout()
|
|
|
+ window.addEventListener('resize', this.autoLayout);
|
|
|
+ }
|
|
|
+
|
|
|
+ componentWillUnmount() {
|
|
|
+ window.removeEventListener('resize', this.autoLayout);
|
|
|
+ }
|
|
|
+
|
|
|
+ autoLayout = () => {
|
|
|
+ let container = this.containerRef;
|
|
|
+ if(!container) return;
|
|
|
+ let body = container.getElementsByClassName('indicator-body')[0];
|
|
|
+ let cards = body.getElementsByClassName('indicator-box');
|
|
|
+ let cardCount = cards.length;
|
|
|
+ let bodyBox = body.getBoundingClientRect();
|
|
|
+
|
|
|
+ let maxColNum = cardCount < 4 ? cardCount : 4; // 行数
|
|
|
+ let maxRowNum = Math.ceil(cardCount / maxColNum); // 列数
|
|
|
+ let cardHeight = bodyBox.height / maxRowNum - 8;
|
|
|
+ let cardWidth = (bodyBox.width - 18) / maxColNum - 8;
|
|
|
+ while(cardWidth < 180 && maxColNum > 1) {
|
|
|
+ maxColNum--;
|
|
|
+ maxRowNum = Math.ceil(cardCount / maxColNum);
|
|
|
+ cardHeight = bodyBox.height / maxRowNum - 8;
|
|
|
+ cardWidth = (bodyBox.width - 18) / maxColNum - 8;
|
|
|
+ }
|
|
|
+ cardHeight = cardHeight < 100 ? 100 : cardHeight;
|
|
|
+
|
|
|
+ if(cardCount === 1) {
|
|
|
+ cards[0].style.border = 'none';
|
|
|
+ }
|
|
|
+ for(let i = 0; i < cards.length; i++) {
|
|
|
+ cards[i].style.width = cardWidth + 'px';
|
|
|
+ cards[i].style.height = cardHeight + 'px';
|
|
|
+ let cells = cards[i].getElementsByClassName('cell');
|
|
|
+ for(let j = 0; j < cells.length; j++) {
|
|
|
+ let wrap = cells[j].getElementsByClassName('over-wrapper')[0];
|
|
|
+ wrap.style.width = cardWidth - 8 * 2 + 'px';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ render() {
|
|
|
+ const { chartOption } = this.props;
|
|
|
+ const { data } = chartOption;
|
|
|
+ if(!chartOption || !chartOption.data || !chartOption.data.length === 0) {
|
|
|
+ return <div className='indicator-container empty' ref={ node => this.containerRef = node }>
|
|
|
+ <div className='indicator-body'>
|
|
|
+ <EmptyContent />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ }
|
|
|
+ return <div className='indicator-container' ref={ node => this.containerRef = node }>
|
|
|
+ <div className='indicator-body'>
|
|
|
+ {
|
|
|
+ data.map((d, i) => (
|
|
|
+ <div className={`indicator-box`} key={i}>
|
|
|
+ <div className='row indicator-name'>
|
|
|
+ <div className='cell rc-name'>
|
|
|
+ <div className='over-wrapper' title={d.name}>{d.name}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div className='row indicator-key'>
|
|
|
+ <div className='cell rc-key'>
|
|
|
+ <div className='over-wrapper' title={d.key}>{d.key}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div className='row indicator-value'>
|
|
|
+ <div className='cell rc-value'>
|
|
|
+ <div className='over-wrapper' title={d.value}>{(d.value === undefined || d.value === null) ? '--' : d.value}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ ))
|
|
|
+ }
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+export default IndicatorView
|