|
@@ -55,6 +55,7 @@ export default {
|
|
|
defaultLineThreshold: 200,
|
|
defaultLineThreshold: 200,
|
|
|
defaultPieThreshold: 20,
|
|
defaultPieThreshold: 20,
|
|
|
defaultScatterThreshold: 1000,
|
|
defaultScatterThreshold: 1000,
|
|
|
|
|
+ defaultIndicatorThreshold: 5,
|
|
|
baseConfig: { dataSource: { code: '' }, viewType: '' },
|
|
baseConfig: { dataSource: { code: '' }, viewType: '' },
|
|
|
aggregateTableConfig: { targetColumn: {}, statistics: [], groupBy: [] },
|
|
aggregateTableConfig: { targetColumn: {}, statistics: [], groupBy: [] },
|
|
|
dataViewConfig: { viewColumns: [], sortColumn: {key: ''}, sortType: 'asc' },
|
|
dataViewConfig: { viewColumns: [], sortColumn: {key: ''}, sortType: 'asc' },
|
|
@@ -62,6 +63,7 @@ export default {
|
|
|
lineConfig: { xAxis: { column: {}, granularity: {} }, yAxis: { column: {}, gauge: {} }, groupBy: {key:''}, threshold: 200 },
|
|
lineConfig: { xAxis: { column: {}, granularity: {} }, yAxis: { column: {}, gauge: {} }, groupBy: {key:''}, threshold: 200 },
|
|
|
pieConfig: { xAxis: { column: {}, granularity: {} }, yAxis: { column: {}, gauge: {} }, threshold: 20 },
|
|
pieConfig: { xAxis: { column: {}, granularity: {} }, yAxis: { column: {}, gauge: {} }, threshold: 20 },
|
|
|
scatterConfig: { xAxis: { column: {}, granularity: {} }, yAxis: { column: {}, gauge: {} }, groupBy: {key:''}, threshold: 1000 },
|
|
scatterConfig: { xAxis: { column: {}, granularity: {} }, yAxis: { column: {}, gauge: {} }, groupBy: {key:''}, threshold: 1000 },
|
|
|
|
|
+ indicatorConfig: { xAxis: { column: {} }, yAxis: { column: {} }, threshold: 5 },
|
|
|
theme: 'default',
|
|
theme: 'default',
|
|
|
styleConfig: {},
|
|
styleConfig: {},
|
|
|
otherConfig:{},
|
|
otherConfig:{},
|
|
@@ -208,8 +210,7 @@ export default {
|
|
|
yield put({ type: 'chart/remoteModify' });
|
|
yield put({ type: 'chart/remoteModify' });
|
|
|
const { newHeaderLabel } = action;
|
|
const { newHeaderLabel } = action;
|
|
|
const chartDesigner = yield select(state => state.present.chartDesigner);
|
|
const chartDesigner = yield select(state => state.present.chartDesigner);
|
|
|
- const { filters, baseConfig, pieConfig, lineConfig, aggregateTableConfig, dataViewConfig,
|
|
|
|
|
- barConfig, scatterConfig, otherConfig, description, group, chartOption, fetchConfig, styleConfig } = chartDesigner;
|
|
|
|
|
|
|
+ const { filters, baseConfig, otherConfig, description, group, chartOption, fetchConfig, styleConfig } = chartDesigner;
|
|
|
let body = {
|
|
let body = {
|
|
|
filters: JSON.stringify(filters),
|
|
filters: JSON.stringify(filters),
|
|
|
chartName: newHeaderLabel,
|
|
chartName: newHeaderLabel,
|
|
@@ -221,28 +222,11 @@ export default {
|
|
|
chartOption: JSON.stringify(chartOption),
|
|
chartOption: JSON.stringify(chartOption),
|
|
|
fetchConfig: JSON.stringify(fetchConfig),
|
|
fetchConfig: JSON.stringify(fetchConfig),
|
|
|
}; // 基本属性
|
|
}; // 基本属性
|
|
|
- if(baseConfig.viewType === 'bar') {
|
|
|
|
|
- body.chartType = 'Histogram';
|
|
|
|
|
- body.chartConfig = JSON.stringify(barConfig);
|
|
|
|
|
- }else if(baseConfig.viewType === 'pie') {
|
|
|
|
|
- body.chartType = 'Pie';
|
|
|
|
|
- body.chartConfig = JSON.stringify(pieConfig);
|
|
|
|
|
- }else if(baseConfig.viewType === 'line') {
|
|
|
|
|
- body.chartType = 'Line';
|
|
|
|
|
- body.chartConfig = JSON.stringify(lineConfig);
|
|
|
|
|
- }else if(baseConfig.viewType === 'scatter') {
|
|
|
|
|
- body.chartType = 'scatter';
|
|
|
|
|
- body.chartConfig = JSON.stringify(scatterConfig);
|
|
|
|
|
- }else if(baseConfig.viewType === 'aggregateTable') {
|
|
|
|
|
- body.chartType = 'population';
|
|
|
|
|
- body.chartConfig = JSON.stringify(aggregateTableConfig);
|
|
|
|
|
- }else if(baseConfig.viewType === 'dataView') {
|
|
|
|
|
- body.chartType = 'individual';
|
|
|
|
|
- body.chartConfig = JSON.stringify(dataViewConfig);;
|
|
|
|
|
- }else {
|
|
|
|
|
- body.chartType = '';
|
|
|
|
|
- body.chartConfig = JSON.stringify({});
|
|
|
|
|
|
|
+ if(!!baseConfig.viewType) {
|
|
|
|
|
+ body.chartType = baseConfig.viewType;
|
|
|
|
|
+ body.chartConfig = JSON.stringify(chartDesigner[`${baseConfig.viewType}Config`]);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
const res = yield call(service.fetch, {
|
|
const res = yield call(service.fetch, {
|
|
|
url: URLS.CHART_ADD,
|
|
url: URLS.CHART_ADD,
|
|
|
body: body
|
|
body: body
|
|
@@ -424,6 +408,13 @@ export default {
|
|
|
}else {
|
|
}else {
|
|
|
yield put({ type: 'silentSetField', name: 'chartOption', value: {} });
|
|
yield put({ type: 'silentSetField', name: 'chartOption', value: {} });
|
|
|
}
|
|
}
|
|
|
|
|
+ }else if(viewType === 'indicator') {
|
|
|
|
|
+ const { indicatorConfig } = chartDesigner;
|
|
|
|
|
+ if(indicatorConfig.xAxis.column.name && indicatorConfig.yAxis.column.name) {
|
|
|
|
|
+ yield put({ type: 'fetchIndicatorData' });
|
|
|
|
|
+ }else {
|
|
|
|
|
+ yield put({ type: 'silentSetField', name: 'chartOption', value: {} });
|
|
|
|
|
+ }
|
|
|
}else {
|
|
}else {
|
|
|
console.log('no viewType......')
|
|
console.log('no viewType......')
|
|
|
}
|
|
}
|
|
@@ -660,6 +651,41 @@ export default {
|
|
|
message.error('请求统计数据失败: ' + e.message);
|
|
message.error('请求统计数据失败: ' + e.message);
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
|
|
+ *fetchIndicatorData(action, { select, call, put }) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const chartDesigner = yield select(state => state.present.chartDesigner);
|
|
|
|
|
+ const { code, indicatorConfig, filters, theme, styleConfig, defaultIndicatorThreshold } = chartDesigner;
|
|
|
|
|
+ const { xAxis, yAxis, sortColumn, sortType, threshold } = indicatorConfig;
|
|
|
|
|
+ const body = {
|
|
|
|
|
+ id: code,
|
|
|
|
|
+ columnListName: [xAxis.column.name, yAxis.column.name],
|
|
|
|
|
+ sortColumn: sortColumn ? sortColumn.key : xAxis.column.name,
|
|
|
|
|
+ sort: sortType || 'asc',
|
|
|
|
|
+ filters: getBodyFilters(filters),
|
|
|
|
|
+ testPage: {
|
|
|
|
|
+ pageNum: 1,
|
|
|
|
|
+ pageSize: threshold || defaultIndicatorThreshold,
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ let res = yield call(service.fetch, {
|
|
|
|
|
+ url: URLS.CHART_DATAVIEW_OPTION,
|
|
|
|
|
+ body: body,
|
|
|
|
|
+ timeout: 30000
|
|
|
|
|
+ });
|
|
|
|
|
+ if(res.code > 0) {
|
|
|
|
|
+ let option = parseChartOption('indicator', res.data, indicatorConfig, theme, styleConfig.indicator);
|
|
|
|
|
+ yield put({ type: 'silentSetField', name: 'chartOption', value: option });
|
|
|
|
|
+ }else {
|
|
|
|
|
+ message.error('请求指标数据失败: ' + res.msg);
|
|
|
|
|
+ yield put({ type: 'silentSetField', name: 'chartOption', value: {} });
|
|
|
|
|
+ }
|
|
|
|
|
+ yield put({ type: 'silentSetField', name: 'fetchConfig', value: body });
|
|
|
|
|
+ }catch(e) {
|
|
|
|
|
+ yield put({ type: 'silentSetField', name: 'chartOption', value: {} });
|
|
|
|
|
+ message.error('请求指标数据失败: ' + e.message);
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
/**
|
|
/**
|
|
|
* 将图表数据以表格的方式作为预览
|
|
* 将图表数据以表格的方式作为预览
|
|
|
*/
|
|
*/
|