|
|
@@ -89,6 +89,7 @@ export default {
|
|
|
originData: {
|
|
|
code: null,
|
|
|
name: '无标题',
|
|
|
+ minLayoutHeight: 40,
|
|
|
defaultLayout: { x: 0, y: 50, w: 12, h: 6, minW: 2, maxW: 12, minH: 1 },
|
|
|
items: [],
|
|
|
chartCodes: [], // 报表包含的所有图表
|
|
|
@@ -151,7 +152,7 @@ export default {
|
|
|
return Object.assign({}, state, {filterLabel: label});
|
|
|
},
|
|
|
addChart(state, action) {
|
|
|
- let { items, dataSources, chartCodes, defaultLayout } = state;
|
|
|
+ let { items, dataSources, chartCodes, defaultLayout, minLayoutHeight } = state;
|
|
|
const { chart } = action;
|
|
|
|
|
|
items = items.concat([{
|
|
|
@@ -168,6 +169,14 @@ export default {
|
|
|
chartType: chart.type,
|
|
|
filters: chart.filters,
|
|
|
layout: defaultLayout,
|
|
|
+ styleConfig: chart.styleConfig,
|
|
|
+ chartOption: chart.type === 'dataView' ? {
|
|
|
+ total: 0,
|
|
|
+ page: 1,
|
|
|
+ pageSize: 0, // 设为0以保证在tableView组件渲染时getTableLayout方法中总能触发取数
|
|
|
+ columns: [],
|
|
|
+ dataSource: []
|
|
|
+ } : null
|
|
|
}]);
|
|
|
chartCodes.push(chart.code);
|
|
|
dataSources.findIndex(d => d.code === chart.dataSourceCode+'') === -1 && dataSources.push({
|
|
|
@@ -223,7 +232,7 @@ export default {
|
|
|
},
|
|
|
changeLayout(state, action) {
|
|
|
const { layout } = action;
|
|
|
- let { items, dirty } = state;
|
|
|
+ let { items, dirty, minLayoutHeight } = state;
|
|
|
const ly = ['x', 'y', 'w', 'h'];
|
|
|
for(let i = 0; i < items.length; i++) {
|
|
|
if(layout[i]) { // 非删除引起
|
|
|
@@ -233,6 +242,12 @@ export default {
|
|
|
items[i].layout[ly[j]] = layout[i][ly[j]];
|
|
|
}
|
|
|
}
|
|
|
+ if(items[i].chartOption) {
|
|
|
+ items[i].chartOption = { ...items[i].chartOption,
|
|
|
+ page: 1,
|
|
|
+ pageSize: (~~((layout[i][ly[3]] * minLayoutHeight + (layout[i][ly[3]] - 1) * 12 - 20 - 40 - 24 - 8 * 2)/38) + 1)
|
|
|
+ }
|
|
|
+ }
|
|
|
}else { // 删除引起
|
|
|
dirty = true;
|
|
|
}
|
|
|
@@ -337,12 +352,14 @@ export default {
|
|
|
*/
|
|
|
*refresh(action, { call, put, select }) {
|
|
|
const dashboardDesigner = yield select(state => state.present.dashboardDesigner);
|
|
|
- const { items } = dashboardDesigner;
|
|
|
+ const { items, minLayoutHeight } = dashboardDesigner;
|
|
|
|
|
|
for(let i = 0; i < items.length; i++) {
|
|
|
let item = items[i];
|
|
|
if(item.viewType === 'chart') {
|
|
|
- yield put({ type:'fetchChartData', item: items[i], mandatory: true });
|
|
|
+ let page = item.chartOption ? item.chartOption.page : 1;
|
|
|
+ let pageSize = item.chartOption ? item.chartOption.pageSize : (~~((item.layout.h * minLayoutHeight + (item.layout.h - 1) * 12 - 20 - 40 - 24 - 8 * 2)/38) + 1)
|
|
|
+ yield put({ type:'fetchChartData', item: items[i], mandatory: true, page, pageSize });
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
@@ -395,12 +412,14 @@ export default {
|
|
|
try {
|
|
|
const { filters } = action;
|
|
|
const dashboardDesigner = yield select(state => state.present.dashboardDesigner);
|
|
|
- const { items } = dashboardDesigner;
|
|
|
+ const { items, minLayoutHeight } = dashboardDesigner;
|
|
|
|
|
|
yield put({ type: 'silentSetField', name: 'filters', value: filters });
|
|
|
|
|
|
for(let i = 0; i < items.length; i++) {
|
|
|
- yield put({ type:'fetchChartData', item: items[i], mandatory: true });
|
|
|
+ let page = items[i].chartOption ? items[i].chartOption.page : 1;
|
|
|
+ let pageSize = items[i].chartOption ? items[i].chartOption.pageSize : (~~((items[i].layout.h * minLayoutHeight + (items[i].layout.h - 1) * 12 - 20 - 40 - 24 - 8 * 2)/38) + 1)
|
|
|
+ yield put({ type:'fetchChartData', item: items[i], mandatory: true, page, pageSize });
|
|
|
}
|
|
|
}catch(e) {
|
|
|
message.error('更改过滤条件失败: ' + e.message);
|
|
|
@@ -412,7 +431,7 @@ export default {
|
|
|
*changeFilter(action, { put, call, select }) {
|
|
|
const { filter } = action;
|
|
|
const dashboardDesigner = yield select(state => state.present.dashboardDesigner);
|
|
|
- let { filters, items } = dashboardDesigner;
|
|
|
+ let { filters, items, minLayoutHeight } = dashboardDesigner;
|
|
|
let targetDataSourceCodes = [];
|
|
|
|
|
|
filters = filters.map(f => {
|
|
|
@@ -435,7 +454,9 @@ export default {
|
|
|
yield put({ type: 'silentSetField', name: 'filters', value: filters });
|
|
|
|
|
|
for(let i = 0; i < targetItems.length; i++) {
|
|
|
- yield put({ type:'fetchChartData', item: targetItems[i], mandatory: true });
|
|
|
+ let page = targetItems[i].chartOption ? targetItems[i].chartOption.page : 1;
|
|
|
+ let pageSize = targetItems[i].chartOption ? targetItems[i].chartOption.pageSize : (~~((targetItems[i].layout.h * minLayoutHeight + (targetItems[i].layout.h - 1) * 12 - 20 - 40 - 24 - 8 * 2)/38) + 1)
|
|
|
+ yield put({ type:'fetchChartData', item: targetItems[i], mandatory: true, page, pageSize });
|
|
|
}
|
|
|
},
|
|
|
*fetchChartData(action, { put, call, select }) {
|
|
|
@@ -456,7 +477,7 @@ export default {
|
|
|
filters: getBodyFilters(getTrueFilters(item, filters)),
|
|
|
testPage: {
|
|
|
pageNum: page|| 1,
|
|
|
- pageSize: pageSize || 25,
|
|
|
+ pageSize: pageSize || 99,
|
|
|
}
|
|
|
};
|
|
|
const res = yield call(service.fetch, {
|
|
|
@@ -536,7 +557,7 @@ export default {
|
|
|
const { relationColumns } = action;
|
|
|
let targetDataSourceCodes = []; // 记录有改动的数据源code
|
|
|
const dashboardDesigner = yield select(state => state.present.dashboardDesigner);
|
|
|
- let { filters, items } = dashboardDesigner;
|
|
|
+ let { filters, items, minLayoutHeight } = dashboardDesigner;
|
|
|
for(let i = filters.length - 1; i >= 0; i--) {
|
|
|
let f = filters[i];
|
|
|
let idx = relationColumns.findIndex(rc => rc.code === f.name);
|
|
|
@@ -583,7 +604,9 @@ export default {
|
|
|
yield put({ type: 'silentSetField', name: 'filters', value: filters });
|
|
|
|
|
|
for(let i = 0; i < targetItems.length; i++) {
|
|
|
- yield put({ type:'fetchChartData', item: targetItems[i], mandatory: true });
|
|
|
+ let page = 1;
|
|
|
+ let pageSize = targetItems[i].chartOption ? targetItems[i].chartOption.pageSize : (~~((targetItems[i].layout.h * minLayoutHeight + (targetItems[i].layout.h - 1) * 12 - 20 - 40 - 24 - 8 * 2)/38) + 1)
|
|
|
+ yield put({ type:'fetchChartData', item: targetItems[i], mandatory: true, page, pageSize });
|
|
|
}
|
|
|
},
|
|
|
*modifyItem(action, { select, call, put }) {
|
|
|
@@ -599,6 +622,55 @@ export default {
|
|
|
}catch(e) {
|
|
|
message.error('修改失败: ' + e.message);
|
|
|
}
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * dataView预览窗口取数
|
|
|
+ */
|
|
|
+ *fetchDataList(action, { select, call, put }) {
|
|
|
+ const { item, page, pageSize } = action;
|
|
|
+ const dashboardDesigner = yield select(state => state.present.dashboardDesigner);
|
|
|
+ const { creatorCode, filters } = dashboardDesigner;
|
|
|
+ const { chartCode } = item;
|
|
|
+
|
|
|
+ try {
|
|
|
+ yield put({ type: 'dataList/setField', name: 'loading', value: true });
|
|
|
+ const body = {
|
|
|
+ dashboardCreatorId: creatorCode,
|
|
|
+ chartId: chartCode,
|
|
|
+ filters: getBodyFilters(getTrueFilters(item, filters)),
|
|
|
+ testPage: {
|
|
|
+ pageNum: page || 1,
|
|
|
+ pageSize: pageSize || 25,
|
|
|
+ }
|
|
|
+ };
|
|
|
+ const res = yield call(service.fetch, {
|
|
|
+ url: URLS.CHART_OPTION,
|
|
|
+ allow: true,
|
|
|
+ body,
|
|
|
+ timeout: 30000
|
|
|
+ });
|
|
|
+ if(!res.err && res.data.code > 0) {
|
|
|
+ const { chartsColumnConfig, valueList } = res.data.data;
|
|
|
+ const { list, pageSize, total } = valueList;
|
|
|
+ const chartConfig = JSON.parse(chartsColumnConfig.chartConfig);
|
|
|
+ const columns = chartConfig.viewColumns;
|
|
|
+
|
|
|
+ yield put({ type: 'dataList/setFields', fields: [
|
|
|
+ { name: 'columns', value: columns },
|
|
|
+ { name: 'dataSource', value: list },
|
|
|
+ { name: 'pageSize', value: pageSize },
|
|
|
+ { name: 'total', value: total }
|
|
|
+ ] });
|
|
|
+ }else {
|
|
|
+ message.error('请求图表展示数据失败: ' + (res.err || res.data.msg));
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }catch(e) {
|
|
|
+ message.error('请求图表展示数据错误: ' + e.message);
|
|
|
+ return false;
|
|
|
+ }finally {
|
|
|
+ yield put({ type: 'dataList/setField', name: 'loading', value: false });
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
subscriptions: {
|