|
@@ -10,6 +10,8 @@ moment.locale('zh-cn');
|
|
|
class EchartsView extends Component {
|
|
class EchartsView extends Component {
|
|
|
render() {
|
|
render() {
|
|
|
const { chartOption, inDashBoard, item } = this.props;
|
|
const { chartOption, inDashBoard, item } = this.props;
|
|
|
|
|
+ const { themeConfig } = chartOption;
|
|
|
|
|
+ const { name: themeName } = themeConfig || {};
|
|
|
if(!chartOption || ((!chartOption.series || chartOption.series.length === 0) && (!chartOption.baseOption || !chartOption.baseOption.series || chartOption.baseOption.series.length === 0))) {
|
|
if(!chartOption || ((!chartOption.series || chartOption.series.length === 0) && (!chartOption.baseOption || !chartOption.baseOption.series || chartOption.baseOption.series.length === 0))) {
|
|
|
return <EmptyContent />
|
|
return <EmptyContent />
|
|
|
}else {
|
|
}else {
|
|
@@ -46,7 +48,7 @@ class EchartsView extends Component {
|
|
|
* 在钻取开启后 drillDown会生成钻取数组 默认为第一层
|
|
* 在钻取开启后 drillDown会生成钻取数组 默认为第一层
|
|
|
* DrillDownBar组件为钻取层级工具栏
|
|
* DrillDownBar组件为钻取层级工具栏
|
|
|
*/
|
|
*/
|
|
|
- <DrillDownBar inDashBoard={inDashBoard} item={item} key={hashcode(drillDown)} drillDown={drillDown}></DrillDownBar>
|
|
|
|
|
|
|
+ <DrillDownBar className={`drilldownbar ${themeName}`} inDashBoard={inDashBoard} item={item} key={hashcode(drillDown)} drillDown={drillDown}></DrillDownBar>
|
|
|
}
|
|
}
|
|
|
</div>
|
|
</div>
|
|
|
)
|
|
)
|
|
@@ -54,19 +56,41 @@ class EchartsView extends Component {
|
|
|
<Echarts
|
|
<Echarts
|
|
|
key={hashcode(chartOption)}
|
|
key={hashcode(chartOption)}
|
|
|
option={chartOption}
|
|
option={chartOption}
|
|
|
- onEvents={drillable?this.onClickByModelEvents:null}
|
|
|
|
|
|
|
+ events={drillable?this.getEvents:{}}
|
|
|
/>
|
|
/>
|
|
|
</Fragment>
|
|
</Fragment>
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- onByModelClick(e){
|
|
|
|
|
|
|
+
|
|
|
|
|
+ //加入事件
|
|
|
|
|
+ getEvents = {
|
|
|
|
|
+ 'click': this.onEchartClick.bind(this)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ onEchartClick(e,echart){
|
|
|
|
|
+ let index = -1;
|
|
|
|
|
+ //判断是否点击了图表
|
|
|
|
|
+ if( echart ){
|
|
|
|
|
+ const echartInstance = echart.getEchartsInstance();
|
|
|
|
|
+ const pointInPixel = [e.offsetX, e.offsetY];
|
|
|
|
|
+ if( echartInstance.containPixel('grid',pointInPixel) ){
|
|
|
|
|
+ //获取点击的X轴的索引
|
|
|
|
|
+ index = echartInstance.convertFromPixel({seriesIndex:0},pointInPixel)[0];
|
|
|
|
|
+ }else{
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 钻取(下钻)
|
|
// 钻取(下钻)
|
|
|
const { chartOption, dispatch, inDashBoard, item } = this.props;
|
|
const { chartOption, dispatch, inDashBoard, item } = this.props;
|
|
|
let { drillDown } = chartOption;
|
|
let { drillDown } = chartOption;
|
|
|
const { baseOption } = chartOption;
|
|
const { baseOption } = chartOption;
|
|
|
const { originConfig } = baseOption;
|
|
const { originConfig } = baseOption;
|
|
|
const { drillList } = originConfig;
|
|
const { drillList } = originConfig;
|
|
|
|
|
+ let xType = e.componentSubType || (baseOption.bar?'bar':null) ||
|
|
|
|
|
+ (baseOption.line?'line':null) || (baseOption.pie?'pie':null);
|
|
|
|
|
+ let xValue = index>-1?baseOption.xAxis[0].data[index]:e.name;
|
|
|
// 若下钻层级已到达钻取配置最后一层 提示信息
|
|
// 若下钻层级已到达钻取配置最后一层 提示信息
|
|
|
if( drillList.length === drillDown.length ){
|
|
if( drillList.length === drillDown.length ){
|
|
|
message.warning('已经钻取到最后一层了!');
|
|
message.warning('已经钻取到最后一层了!');
|
|
@@ -77,14 +101,14 @@ class EchartsView extends Component {
|
|
|
//拿到当前层级的钻取配置
|
|
//拿到当前层级的钻取配置
|
|
|
let curDrill = drillList.slice(drillDown.length,drillDown.length+1)[0];
|
|
let curDrill = drillList.slice(drillDown.length,drillDown.length+1)[0];
|
|
|
//将本次钻取的数据加入drillDown中
|
|
//将本次钻取的数据加入drillDown中
|
|
|
- switch(e.componentSubType){
|
|
|
|
|
|
|
+ switch(xType){
|
|
|
case 'bar':{
|
|
case 'bar':{
|
|
|
drillDown.push({
|
|
drillDown.push({
|
|
|
label : curDrill.column.label,
|
|
label : curDrill.column.label,
|
|
|
field : curDrill.column.value,
|
|
field : curDrill.column.value,
|
|
|
type : curDrill.column.type,
|
|
type : curDrill.column.type,
|
|
|
- filter : this.getFilter(preDrill,e),
|
|
|
|
|
- value : e.name,
|
|
|
|
|
|
|
+ filter : this.getFilter(preDrill,xValue),
|
|
|
|
|
+ value : xValue,
|
|
|
showDataType : curDrill.column.type==='time'?curDrill.granularity.value:''
|
|
showDataType : curDrill.column.type==='time'?curDrill.granularity.value:''
|
|
|
});
|
|
});
|
|
|
break;
|
|
break;
|
|
@@ -94,15 +118,15 @@ class EchartsView extends Component {
|
|
|
label : curDrill.column.label,
|
|
label : curDrill.column.label,
|
|
|
field : curDrill.column.value,
|
|
field : curDrill.column.value,
|
|
|
type : curDrill.column.type,
|
|
type : curDrill.column.type,
|
|
|
- filter : this.getFilter(preDrill,e),
|
|
|
|
|
- value : e.name,
|
|
|
|
|
|
|
+ filter : this.getFilter(preDrill,xValue),
|
|
|
|
|
+ value : xValue,
|
|
|
showDataType : curDrill.column.type==='time'?curDrill.granularity.value:''
|
|
showDataType : curDrill.column.type==='time'?curDrill.granularity.value:''
|
|
|
});
|
|
});
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
case 'pie':{
|
|
case 'pie':{
|
|
|
//饼图如果是其它 并且tooMany(后台判断有 其他 部分) 为 true 时 不能下钻
|
|
//饼图如果是其它 并且tooMany(后台判断有 其他 部分) 为 true 时 不能下钻
|
|
|
- if( e.name==='其它' && chartOption.baseOption.originConfig.tooMany ){
|
|
|
|
|
|
|
+ if( xValue==='其它' && chartOption.baseOption.originConfig.tooMany ){
|
|
|
message.warning('其它类型无法钻取');
|
|
message.warning('其它类型无法钻取');
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
@@ -110,8 +134,8 @@ class EchartsView extends Component {
|
|
|
label : curDrill.column.label,
|
|
label : curDrill.column.label,
|
|
|
field : curDrill.column.value,
|
|
field : curDrill.column.value,
|
|
|
type : curDrill.column.type,
|
|
type : curDrill.column.type,
|
|
|
- filter : this.getFilter(preDrill,e),
|
|
|
|
|
- value : e.name,
|
|
|
|
|
|
|
+ filter : this.getFilter(preDrill,xValue),
|
|
|
|
|
+ value : xValue,
|
|
|
showDataType : curDrill.column.type==='time'?curDrill.granularity.value:''
|
|
showDataType : curDrill.column.type==='time'?curDrill.granularity.value:''
|
|
|
});
|
|
});
|
|
|
break;
|
|
break;
|
|
@@ -147,21 +171,17 @@ class EchartsView extends Component {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- onClickByModelEvents = {
|
|
|
|
|
- 'click': this.onByModelClick.bind(this)
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- getFilter(curDrill,e){
|
|
|
|
|
|
|
+ getFilter(curDrill,xValue){
|
|
|
const { column } = curDrill;
|
|
const { column } = curDrill;
|
|
|
- if( e.name === '空'){
|
|
|
|
|
|
|
+ if( xValue === '空'){
|
|
|
return {
|
|
return {
|
|
|
name: column.value,
|
|
name: column.value,
|
|
|
label: column.label,
|
|
label: column.label,
|
|
|
type: column.type,
|
|
type: column.type,
|
|
|
operator: 'isNull',
|
|
operator: 'isNull',
|
|
|
operatorLabel: '为空',
|
|
operatorLabel: '为空',
|
|
|
- value1: e.name,
|
|
|
|
|
- value2: e.name,
|
|
|
|
|
|
|
+ value1: xValue,
|
|
|
|
|
+ value2: xValue,
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
switch(column.type){
|
|
switch(column.type){
|
|
@@ -172,14 +192,14 @@ class EchartsView extends Component {
|
|
|
type: column.type,
|
|
type: column.type,
|
|
|
operator: '=',
|
|
operator: '=',
|
|
|
operatorLabel: '等于',
|
|
operatorLabel: '等于',
|
|
|
- value1: e.name,
|
|
|
|
|
- value2: e.name,
|
|
|
|
|
|
|
+ value1: xValue,
|
|
|
|
|
+ value2: xValue,
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
case 'time':{
|
|
case 'time':{
|
|
|
//解析时间
|
|
//解析时间
|
|
|
const { granularity } = curDrill;
|
|
const { granularity } = curDrill;
|
|
|
- let values = this.getTimeByType(granularity,e.name);
|
|
|
|
|
|
|
+ let values = this.getTimeByType(granularity,xValue);
|
|
|
return {
|
|
return {
|
|
|
name: column.value,
|
|
name: column.value,
|
|
|
label: column.label,
|
|
label: column.label,
|