|
@@ -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)
|
|
list := make([]*system.DepartmentUserTree, 0)
|
|
for _, v := range departments {
|
|
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
|
|
continue
|
|
}
|
|
}
|
|
t := new(system.DepartmentUserTree)
|
|
t := new(system.DepartmentUserTree)
|
|
@@ -431,8 +385,8 @@ func (this *SysDepartmentController) DepartmentUserTree() {
|
|
t.NodeType = 1
|
|
t.NodeType = 1
|
|
t.NodeName = v.DepartmentName
|
|
t.NodeName = v.DepartmentName
|
|
t.Children = make([]*system.DepartmentUserTree, 0)
|
|
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 {
|
|
if departmentAdmins[v.DepartmentId] != nil {
|
|
t.Children = append(t.Children, departmentAdmins[v.DepartmentId]...)
|
|
t.Children = append(t.Children, departmentAdmins[v.DepartmentId]...)
|
|
@@ -445,3 +399,65 @@ func (this *SysDepartmentController) DepartmentUserTree() {
|
|
br.Msg = "获取成功"
|
|
br.Msg = "获取成功"
|
|
br.Data = list
|
|
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
|
|
|
|
+}
|