浏览代码

Merge branch 'sync_sci' into debug

Roc 2 周之前
父节点
当前提交
7229e7595b
共有 1 个文件被更改,包括 67 次插入51 次删除
  1. 67 51
      controllers/sys_department.go

+ 67 - 51
controllers/sys_department.go

@@ -370,60 +370,14 @@ func (this *SysDepartmentController) DepartmentUserTree() {
 		}
 	}
 
-	// 小组
-	groupTeams := make(map[int][]*system.DepartmentUserTree, 0)
-	for _, v := range groups {
-		if v.ParentId == 0 {
-			continue
-		}
-		// 关键词查询时不显示空组
-		if keywords != "" && groupAdmins[v.GroupId] == nil {
-			continue
-		}
-		t := new(system.DepartmentUserTree)
-		t.NodeId = v.GroupId
-		t.NodeName = v.GroupName
-		t.NodeType = 2
-		t.Children = make([]*system.DepartmentUserTree, 0)
-		t.Children = groupAdmins[v.GroupId]
-		if groupTeams[v.ParentId] == nil {
-			groupTeams[v.ParentId] = make([]*system.DepartmentUserTree, 0)
-		}
-		groupTeams[v.ParentId] = append(groupTeams[v.ParentId], t)
-	}
-
-	// 大组
-	departmentGroups := make(map[int][]*system.DepartmentUserTree, 0)
-	for _, v := range groups {
-		if v.ParentId > 0 {
-			continue
-		}
-		// 关键词查询时不显示空组
-		if keywords != "" && groupAdmins[v.GroupId] == nil && groupTeams[v.GroupId] == nil {
-			continue
-		}
-		t := new(system.DepartmentUserTree)
-		t.NodeId = v.GroupId
-		t.NodeName = v.GroupName
-		t.NodeType = 2
-		t.Children = make([]*system.DepartmentUserTree, 0)
-		if groupTeams[v.GroupId] != nil {
-			t.Children = append(t.Children, groupTeams[v.GroupId]...)
-		}
-		if groupAdmins[v.GroupId] != nil {
-			t.Children = append(t.Children, groupAdmins[v.GroupId]...)
-		}
-		if departmentGroups[v.DepartmentId] == nil {
-			departmentGroups[v.DepartmentId] = make([]*system.DepartmentUserTree, 0)
-		}
-		departmentGroups[v.DepartmentId] = append(departmentGroups[v.DepartmentId], t)
-	}
+	// 构建分组树
+	groupTree := buildGroupTree(groups, groupAdmins, keywords)
 
 	// 部门
 	list := make([]*system.DepartmentUserTree, 0)
 	for _, v := range departments {
 		// 关键词查询时不显示空部门
-		if keywords != "" && departmentGroups[v.DepartmentId] == nil && departmentAdmins[v.DepartmentId] == nil {
+		if keywords != "" && groupTree[v.DepartmentId] == nil && departmentAdmins[v.DepartmentId] == nil {
 			continue
 		}
 		t := new(system.DepartmentUserTree)
@@ -431,8 +385,8 @@ func (this *SysDepartmentController) DepartmentUserTree() {
 		t.NodeType = 1
 		t.NodeName = v.DepartmentName
 		t.Children = make([]*system.DepartmentUserTree, 0)
-		if departmentGroups[v.DepartmentId] != nil {
-			t.Children = append(t.Children, departmentGroups[v.DepartmentId]...)
+		if groupTree[v.DepartmentId] != nil {
+			t.Children = append(t.Children, groupTree[v.DepartmentId]...)
 		}
 		if departmentAdmins[v.DepartmentId] != nil {
 			t.Children = append(t.Children, departmentAdmins[v.DepartmentId]...)
@@ -445,3 +399,65 @@ func (this *SysDepartmentController) DepartmentUserTree() {
 	br.Msg = "获取成功"
 	br.Data = list
 }
+
+// 构建分组树
+func buildGroupTree(groups []*system.SysFullGroup, groupAdmins map[int][]*system.DepartmentUserTree, keywords string) map[int][]*system.DepartmentUserTree {
+	groupMap := make(map[int]*system.DepartmentUserTree)
+
+	// 第一次遍历:构建所有分组节点
+	for _, group := range groups {
+		if _, exists := groupMap[group.GroupId]; !exists {
+			groupMap[group.GroupId] = &system.DepartmentUserTree{
+				NodeId:   group.GroupId,
+				NodeName: group.GroupName,
+				NodeType: 2,
+				Children: make([]*system.DepartmentUserTree, 0),
+			}
+		}
+	}
+
+	// 第二次遍历:将子节点挂载到父节点上
+	for _, group := range groups {
+		if group.ParentId == 0 {
+			continue
+		}
+		if parent, exists := groupMap[group.ParentId]; exists {
+			parent.Children = append(parent.Children, groupMap[group.GroupId])
+		}
+	}
+
+	// 添加用户到分组
+	for groupId, users := range groupAdmins {
+		if group, exists := groupMap[groupId]; exists {
+			group.Children = append(group.Children, users...)
+		}
+	}
+
+	// 过滤关键词
+	filteredGroupTree := make(map[int][]*system.DepartmentUserTree)
+	for _, group := range groupMap {
+		if keywords != "" {
+			// 如果关键词不为空,仅保留符合条件的分组及其子节点
+			if strings.Contains(strings.ToLower(group.NodeName), strings.ToLower(keywords)) {
+				filteredGroupTree[group.NodeId] = []*system.DepartmentUserTree{group}
+			} else {
+				// 检查子节点是否包含关键词
+				hasMatchingChild := false
+				for _, child := range group.Children {
+					if strings.Contains(strings.ToLower(child.NodeName), strings.ToLower(keywords)) {
+						hasMatchingChild = true
+						break
+					}
+				}
+				if hasMatchingChild {
+					filteredGroupTree[group.NodeId] = []*system.DepartmentUserTree{group}
+				}
+			}
+		} else {
+			// 如果关键词为空,保留所有分组
+			filteredGroupTree[group.NodeId] = []*system.DepartmentUserTree{group}
+		}
+	}
+
+	return filteredGroupTree
+}