|
|
@@ -190,27 +190,33 @@ export default {
|
|
|
return Object.assign({}, state, {items, chartCodes, dataSources, dirty: true});
|
|
|
},
|
|
|
deleteItem(state, action) {
|
|
|
- let { items, chartCodes, dataSources, relationColumns, dirty } = state;
|
|
|
+ let { items, chartCodes, dataSources, relationColumns, dirty, filters } = state;
|
|
|
const { item } = action;
|
|
|
|
|
|
+ let targetDataSourceCode = item.dataSourceCode;
|
|
|
let count = 0;
|
|
|
let targetIndex = -1;
|
|
|
for(let i = 0; i < items.length; i++) {
|
|
|
let tempItem = items[i];
|
|
|
- if(item.viewType === 'chart' && tempItem.dataSourceCode === item.dataSourceCode) {
|
|
|
- count++;
|
|
|
- }
|
|
|
if(tempItem.code === item.code) {
|
|
|
targetIndex = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for(let i = 0; i < items.length; i++) {
|
|
|
+ if(targetDataSourceCode && items[i].dataSourceCode === targetDataSourceCode) {
|
|
|
+ count++;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 如果删除图表的数据源是同类数据源的最后一个
|
|
|
if(count === 1) {
|
|
|
let idx = dataSources.findIndex(d => d.code === item.dataSourceCode);
|
|
|
let idx2 = chartCodes.findIndex(c => c === item.chartCode);
|
|
|
dataSources.splice(idx, 1);
|
|
|
chartCodes.splice(idx2, 1);
|
|
|
- // 同时删除已定义的关联字段
|
|
|
+ // 删除已定义的关联字段
|
|
|
relationColumns.forEach(rc => {
|
|
|
rc.relations.forEach((r, x) => {
|
|
|
if(r.dataSourceCode === item.dataSourceCode) {
|
|
|
@@ -218,11 +224,33 @@ export default {
|
|
|
}
|
|
|
})
|
|
|
});
|
|
|
+ for(let i = relationColumns.length - 1; i >= 0; i--) {
|
|
|
+ let r = relationColumns[i];
|
|
|
+ let l = r.relations;
|
|
|
+ // 自定义关联条件关联了一个以上数据源,则只删除与该数据源相等的关联数据源列
|
|
|
+ for(let j = l.length - 1; j >= 0; j--) {
|
|
|
+ if(l[j].dataSource.code === targetDataSourceCode) {
|
|
|
+ l.splice(j, 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(l.length === 0) {
|
|
|
+ // 自定义关联条件只关联了这一个数据源则直接删除该自定义关联条件
|
|
|
+ relationColumns.splice(i, 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 删除过滤条件
|
|
|
+ for(let i = filters.length - 1; i >= 0; i--) {
|
|
|
+ let f = filters[i];
|
|
|
+ if((f.combined && (f.dataSource.length === 1 && f.dataSource[0].dataSource.code === targetDataSourceCode || f.dataSource.length === 0)) ||
|
|
|
+ (!f.combined && f.dataSource.code === targetDataSourceCode)) {
|
|
|
+ filters.splice(i, 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
if(targetIndex !== -1) {
|
|
|
items.splice(targetIndex, 1);
|
|
|
}
|
|
|
- return { ...state, dirty: dirty, items, dataSources };
|
|
|
+ return { ...state, dirty: dirty, items, dataSources, relationColumns, filters };
|
|
|
},
|
|
|
addRichText(state, action) {
|
|
|
let { items, defaultLayout } = state;
|