Browse Source

报表中图表删除后检查过滤条件是否存在无效项,删除无效过滤条件

zhuth 6 years ago
parent
commit
04159406a6
1 changed files with 34 additions and 6 deletions
  1. 34 6
      src/models/dashboardDesigner.js

+ 34 - 6
src/models/dashboardDesigner.js

@@ -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;