Эх сурвалжийг харах

角色权限驾驶舱数据加载

车车 2 сар өмнө
parent
commit
854a3d3bcc

+ 40 - 2
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/homepage/PageUiComponentServiceImpl.java

@@ -18,7 +18,9 @@ import org.springframework.util.Assert;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * iscs驾驶舱页面和组件关联 Service 实现类
  * iscs驾驶舱页面和组件关联 Service 实现类
@@ -94,14 +96,50 @@ public class PageUiComponentServiceImpl extends ServiceImpl<PageUiComponentMappe
         }
         }
         // 开始查询sys_page_ui_component
         // 开始查询sys_page_ui_component
         List<Long> pageIds = rolePageDOList.stream().map(RolePageDO::getId).toList();
         List<Long> pageIds = rolePageDOList.stream().map(RolePageDO::getId).toList();
-        return list(new MPJLambdaWrapperX<PageUiComponentDO>()
+        List<PageUiComponentDO> list = list(new MPJLambdaWrapperX<PageUiComponentDO>()
                 .leftJoin(UiComponentDO.class, UiComponentDO::getId, PageUiComponentDO::getComponentId)
                 .leftJoin(UiComponentDO.class, UiComponentDO::getId, PageUiComponentDO::getComponentId)
                 .in(PageUiComponentDO::getPageId, pageIds)
                 .in(PageUiComponentDO::getPageId, pageIds)
                 .selectAll(PageUiComponentDO.class)
                 .selectAll(PageUiComponentDO.class)
                 .selectAs(UiComponentDO::getComponentName, "componentName")
                 .selectAs(UiComponentDO::getComponentName, "componentName")
                 .selectAs(UiComponentDO::getComponentCategory, "componentCategory")
                 .selectAs(UiComponentDO::getComponentCategory, "componentCategory")
                 .selectAs(UiComponentDO::getComponentThumbnail, "componentThumbnail")
                 .selectAs(UiComponentDO::getComponentThumbnail, "componentThumbnail")
-                .selectAs(UiComponentDO::getComponentFilePath, "componentFilePath"));
+                .selectAs(UiComponentDO::getComponentFilePath, "componentFilePath")
+                .orderByAsc(PageUiComponentDO::getComponentRow));
+        // 开始过滤删除,考虑到不同的page可能有重复的UiComponent,需要把低等级的UiComponent去除,防止重复显示
+        List<PageUiComponentDO> result = filterMinComponentRowByComponentId(list);
+        return result;
+    }
+
+
+    public static List<PageUiComponentDO> filterMinComponentRowByComponentId(List<PageUiComponentDO> list) {
+        if (list == null || list.isEmpty()) {
+            return new ArrayList<>();
+        }
+
+        // 使用 LinkedHashMap 保持插入顺序(可选)
+        Map<Long, PageUiComponentDO> map = new HashMap<>();
+
+        for (PageUiComponentDO item : list) {
+            Long componentId = item.getComponentId(); // 假设有 getter 方法
+            String componentRow = item.getComponentRow(); // 同上
+
+            // 如果 Map 中不存在该 componentId,直接放入
+            if (!map.containsKey(componentId)) {
+                map.put(componentId, item);
+            } else {
+                // 获取已存在的条目
+                PageUiComponentDO existingItem = map.get(componentId);
+                String existingRow = existingItem.getComponentRow();
+
+                // 比较 componentRow 的字典序,取较小者
+                if (componentRow.compareTo(existingRow) < 0) {
+                    map.put(componentId, item); // 替换为当前更小的条目
+                }
+            }
+        }
+
+        // 将 Map 的值转为 List
+        return new ArrayList<>(map.values());
     }
     }
 
 
     @Override
     @Override