update:treenode remove empty children

This commit is contained in:
2021-06-29 11:08:46 +08:00
parent a0c98b5014
commit 056445db89
2 changed files with 26 additions and 13 deletions

View File

@@ -176,9 +176,9 @@ namespace Ewide.Core.Service
if (isExist) throw Oops.Oh(ErrorCode.D1003); if (isExist) throw Oops.Oh(ErrorCode.D1003);
var user = input.Adapt<SysUser>(); var user = input.Adapt<SysUser>();
await user.UpdateIncludeAsync(new[] { await user.UpdateIncludeAsync(new[] {
nameof(SysUser.Account), nameof(SysUser.Account),
nameof(SysUser.NickName), nameof(SysUser.NickName),
nameof(SysUser.Name), nameof(SysUser.Name),
nameof(SysUser.Birthday), nameof(SysUser.Birthday),
nameof(SysUser.Sex), nameof(SysUser.Sex),
@@ -671,13 +671,13 @@ namespace Ewide.Core.Service
[HttpPost("/sysUser/GetOrgUserTree")] [HttpPost("/sysUser/GetOrgUserTree")]
public async Task<dynamic> GetOrgUserTree(OrgUserInput input) public async Task<dynamic> GetOrgUserTree(OrgUserInput input)
{ {
var list = await (from u in _sysUserRep.DetachedEntities var list = await (from u in _sysUserRep.DetachedEntities
join e in _sysEmpRep.DetachedEntities on u.Id equals e.Id join e in _sysEmpRep.DetachedEntities on u.Id equals e.Id
select new OrgUserTreeNode { Id = u.Id, ParentId = e.OrgId,Type=1,Name=u.Name }).Union( select new OrgUserTreeNode { Id = u.Id, ParentId = e.OrgId, Type = 1, Name = u.Name }).Union(
from o in _sysOrgRep.DetachedEntities from o in _sysOrgRep.DetachedEntities
select new OrgUserTreeNode { Id = o.Id, ParentId = o.Pid ,Type=0,Name=o.Name}).ToListAsync(); select new OrgUserTreeNode { Id = o.Id, ParentId = o.Pid, Type = 0, Name = o.Name }).ToListAsync();
return new TreeBuildUtil<OrgUserTreeNode>().DoTreeBuild(list); return new TreeBuildUtil<OrgUserTreeNode>(new TreeBuildSetting { AddEmptyChildren = false }).DoTreeBuild(list);
} }
} }
} }

View File

@@ -27,6 +27,10 @@ namespace Ewide.Core
/// <param name="children"></param> /// <param name="children"></param>
void SetChildren(IList children); void SetChildren(IList children);
} }
public class TreeBuildSetting
{
public bool AddEmptyChildren { get; set; } = true;
}
/// <summary> /// <summary>
/// 递归工具类,用于遍历有父子关系的节点,例如菜单树,字典树等等 /// 递归工具类,用于遍历有父子关系的节点,例如菜单树,字典树等等
@@ -34,10 +38,15 @@ namespace Ewide.Core
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
public class TreeBuildUtil<T> where T : ITreeNode public class TreeBuildUtil<T> where T : ITreeNode
{ {
TreeBuildSetting _setting;
public TreeBuildUtil(TreeBuildSetting setting = null)
{
_setting = setting ?? new TreeBuildSetting();
}
/// <summary> /// <summary>
/// 顶级节点的父节点Id(默认0) /// 顶级节点的父节点Id(默认0)
/// </summary> /// </summary>
private readonly List<string> _rootParentIds = new List<string> {string.Empty,Guid.Empty.ToString() }; private readonly List<string> _rootParentIds = new List<string> { string.Empty, Guid.Empty.ToString() };
/// <summary> /// <summary>
/// 构造树节点 /// 构造树节点
@@ -59,7 +68,8 @@ namespace Ewide.Core
if (results.Count < 1) if (results.Count < 1)
{ {
var ids = new List<string>(); var ids = new List<string>();
nodes.ForEach(u => { nodes.ForEach(u =>
{
ids.Add(u.GetId()); ids.Add(u.GetId());
}); });
@@ -89,7 +99,10 @@ namespace Ewide.Core
}); });
nodeSubLists.ForEach(u => BuildChildNodes(totalNodes, u, new List<T>())); nodeSubLists.ForEach(u => BuildChildNodes(totalNodes, u, new List<T>()));
childNodeLists.AddRange(nodeSubLists); childNodeLists.AddRange(nodeSubLists);
node.SetChildren(childNodeLists); if (childNodeLists.Count > 0 || _setting.AddEmptyChildren)
{
node.SetChildren(childNodeLists);
}
} }
} }
} }