|
|
@@ -11,7 +11,7 @@ export default {
|
|
|
header: { label: '未命名' },
|
|
|
baseConfig: { dataSource: '', viewType: '' },
|
|
|
preparing: { groupBy: {} },
|
|
|
- aggregateTableConfig: {},
|
|
|
+ aggregateTableConfig: { targetColumn: {}, statistics: [] },
|
|
|
dataViewConfig: {},
|
|
|
barConfig: { xAxis: { column: {}, granularity: {} }, yAxis: { column: {}, gauge: {} } },
|
|
|
lineConfig: { xAxis: { column: {}, granularity: {} }, yAxis: { column: {}, gauge: {} } },
|
|
|
@@ -38,7 +38,8 @@ export default {
|
|
|
groupBy: []
|
|
|
},
|
|
|
aggregateTableConfig: {
|
|
|
-
|
|
|
+ targetColumn: {},
|
|
|
+ statistics: []
|
|
|
},
|
|
|
dataViewConfig: {
|
|
|
viewColumns: [],
|
|
|
@@ -231,6 +232,7 @@ export default {
|
|
|
if(!res.err && res.data.data > 0) {
|
|
|
yield put({ type: 'chart/fetchList', mandatory: true });
|
|
|
yield put({ type: 'main/redirect', path: '/chart/' + res.data.data });
|
|
|
+ // yield put({ type: 'chart/remoteDetail', code: res.data.data });
|
|
|
}else {
|
|
|
message.error('新增失败');
|
|
|
}
|
|
|
@@ -239,6 +241,64 @@ export default {
|
|
|
message.error('新增失败');
|
|
|
}
|
|
|
},
|
|
|
+ /**
|
|
|
+ * 复制新增
|
|
|
+ */
|
|
|
+ *remoteCopyAdd(action, { select, call, put }) {
|
|
|
+ try{
|
|
|
+ yield put({ type: 'chart/remoteModify' });
|
|
|
+ const { newHeaderLabel } = action;
|
|
|
+ const chartDesigner = yield select(state => state.present.chartDesigner);
|
|
|
+ const { baseConfig, pieConfig, lineConfig, preparing,
|
|
|
+ barConfig, scatterConfig, aggregateTableConfig, dataViewConfig, otherConfig, description, group } = chartDesigner;
|
|
|
+ let body = {
|
|
|
+ chartName: newHeaderLabel,
|
|
|
+ dataId: baseConfig.dataSource,
|
|
|
+ groupBy: preparing.groupBy ? [{
|
|
|
+ columnName: preparing.groupBy.key,
|
|
|
+ columnRamane: preparing.groupBy.label
|
|
|
+ }] : [],
|
|
|
+ createBy: 'zhuth',
|
|
|
+ describes: description || '',
|
|
|
+ style: '',
|
|
|
+ otherConfig: JSON.stringify(otherConfig),
|
|
|
+ chartsGroup: group ? group : '-1',
|
|
|
+ }; // 基本属性
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ const res = yield call(service.fetch, {
|
|
|
+ url: URLS.CHART_ADD,
|
|
|
+ body: body
|
|
|
+ })
|
|
|
+ console.log('复制新增', body, res);
|
|
|
+ if(!res.err && res.data.code > 0) {
|
|
|
+ yield put({ type: 'chart/fetchList', mandatory: true });
|
|
|
+ yield put({ type: 'main/redirect', path: '/chart/' + res.data.data , reload: true});
|
|
|
+ }else {
|
|
|
+ message.error('创建副本失败');
|
|
|
+ }
|
|
|
+ }catch(e) {
|
|
|
+ console.error(e);
|
|
|
+ message.error('创建副本失败');
|
|
|
+ }
|
|
|
+ },
|
|
|
*remoteDataColumn(action, { select, call, put }) {
|
|
|
const code = action.code;
|
|
|
try {
|
|
|
@@ -246,7 +306,7 @@ export default {
|
|
|
url: URLS.DATASOURCE_QUERY_DATACOLUMNS,
|
|
|
body: code
|
|
|
});
|
|
|
- console.log(code, res);
|
|
|
+ console.log('获得图表管理数据源列数据', code, res);
|
|
|
if(!res.err && res.data.code > 0) {
|
|
|
let resData = res.data.data;
|
|
|
|
|
|
@@ -485,50 +545,72 @@ export default {
|
|
|
try {
|
|
|
const chartDesigner = yield select(state => state.present.chartDesigner);
|
|
|
const { code, aggregateTableConfig, preparing } = chartDesigner;
|
|
|
-
|
|
|
const { targetColumn, statistics } = aggregateTableConfig;
|
|
|
+ const { groupBy } = preparing;
|
|
|
+
|
|
|
const body = {
|
|
|
id: code,
|
|
|
- columnName: "Y_",
|
|
|
+ columnName: targetColumn.name,
|
|
|
operatorList: statistics,
|
|
|
- groupByList: preparing.groupBy && preparing.groupBy.key ? [preparing.groupBy.key] : [],
|
|
|
+ groupByList: groupBy && groupBy.length > 0 ? groupBy.map(g => g.key) : [],
|
|
|
};
|
|
|
let res = yield call(service.fetch, {
|
|
|
url: URLS.CHART_AGGREGATETABLE_OPTION,
|
|
|
body: body
|
|
|
});
|
|
|
- console.log(body, res);return;
|
|
|
+ console.log('获得总体统计数据', body, res);
|
|
|
if(!res.err && res.data.code > 0) {
|
|
|
- let c = chartDesigner.columns.filter(c => c.name === targetColumn)[0];
|
|
|
const resData = res.data.data;
|
|
|
|
|
|
let stypes = STATISTICS_OPTION.filter(o => statistics.indexOf(o.value) !== -1);
|
|
|
|
|
|
- let columns = [{
|
|
|
+ let column = {
|
|
|
title: '分析目标',
|
|
|
dataIndex: 'targetColumn'
|
|
|
- }].concat(stypes.map(st => {
|
|
|
- return {
|
|
|
- title: st.label,
|
|
|
- dataIndex: st.value
|
|
|
- }
|
|
|
- }));
|
|
|
- let data = {
|
|
|
- targetColumn: c.label
|
|
|
- }
|
|
|
+ };
|
|
|
+ let data = { targetColumn: targetColumn.label };
|
|
|
+ let columns = [column];
|
|
|
+ let dataSource = [data]
|
|
|
|
|
|
- let d = resData.valueList;
|
|
|
- for(let k in d) {
|
|
|
- data[k] = d[k]
|
|
|
+ if(groupBy && groupBy.length > 0) {
|
|
|
+ columns = columns.concat(groupBy.map(g => {
|
|
|
+ return {
|
|
|
+ title: g.label,
|
|
|
+ dataIndex: g.key
|
|
|
+ }
|
|
|
+ })).concat(stypes.map(st => {
|
|
|
+ return {
|
|
|
+ title: st.label,
|
|
|
+ dataIndex: st.value
|
|
|
+ }
|
|
|
+ }));
|
|
|
+ dataSource = resData.map(d => {
|
|
|
+ let obj = {};
|
|
|
+ stypes.map(st => obj[st.value] = d[st.value.toUpperCase()]);
|
|
|
+ groupBy.map(g => obj[g.key] = d[g.key])
|
|
|
+ return { ...data, ...obj };
|
|
|
+ });
|
|
|
+ }else {
|
|
|
+ columns = columns.concat(stypes.map(st => {
|
|
|
+ dataSource = dataSource.map(d => {
|
|
|
+ d[st.value] = resData[st.value.toUpperCase()]
|
|
|
+ return d
|
|
|
+ });
|
|
|
+ return {
|
|
|
+ title: st.label,
|
|
|
+ dataIndex: st.value
|
|
|
+ }
|
|
|
+ }));
|
|
|
}
|
|
|
|
|
|
let config = {
|
|
|
viewType: 'aggregateTable',
|
|
|
option: {
|
|
|
columns: columns,
|
|
|
- data: [data]
|
|
|
+ data: dataSource
|
|
|
}
|
|
|
}
|
|
|
+ console.log(config);
|
|
|
yield put({ type: 'silentSetField', name: 'chartOption', value: config });
|
|
|
}else {
|
|
|
yield put({ type: 'silentSetField', name: 'chartOption', value: {} });
|