Просмотр исходного кода

数据资源功能,添加可以通过根节点和节点名称获取对应节点的树状结数据方法

kenny 3 лет назад
Родитель
Сommit
7e72f11b44

+ 17 - 0
Admin.NET/Admin.NET.Core/Service/DataResources/Dto/DataResourceInput.cs

@@ -1,5 +1,22 @@
 namespace Admin.NET.Core.Service;
 
+public class DataResourcesTreeInput
+{
+    /// <summary>
+    /// 根节点值
+    /// </summary>
+    public string RootValue { get; set; }
+    /// <summary>
+    /// 对应根节点下的名称
+    /// </summary>
+    public string ChildName { get; set; }
+
+    /// <summary>
+    /// 是否包含自己,默认不包含
+    /// </summary>
+    public bool IsContainSelf { get; set; } = false;
+}
+
 public class DataResourceInput : BaseIdInput
 {
     /// <summary>

+ 53 - 1
Admin.NET/Admin.NET.Core/Service/DataResources/SysDataResourceService.cs

@@ -13,6 +13,58 @@ public class SysDataResourceService : IDynamicApiController, ITransient
         _sysDataResourceRep = sysDataResourceRep;
     }
 
+    /// <summary>
+    /// 获取数据资源树结构列表
+    /// </summary>
+    /// <returns></returns>
+    [HttpGet("/sysDataResource/tree")]
+    public async Task<List<SysDataResource>> GetDataResourceTree([FromQuery] DataResourcesTreeInput input)
+    {
+        //通过根节点值来获取当前节点下的树结构数据
+        var rootValue = !string.IsNullOrEmpty(input.RootValue?.Trim());
+        SysDataResource rootDataTree = null;
+        if (rootValue)
+        {
+            rootDataTree = await _sysDataResourceRep.AsQueryable().Where(u => u.Value == input.RootValue && u.Pid == 0)
+              .Where(u => u.Status == StatusEnum.Enable).FirstAsync();
+
+            var childName = !string.IsNullOrEmpty(input.ChildName?.Trim());
+            //获取根节点下对应的子节点名称id
+            if (childName && rootDataTree != null)
+            {
+                rootDataTree = await _sysDataResourceRep.AsQueryable()
+               .Where(u => u.Code.Contains(rootDataTree.Code))
+               .Where(u => u.Name == input.ChildName)
+               .Where(u => u.Status == StatusEnum.Enable).FirstAsync();
+            }
+        }
+
+        if (rootDataTree == null)
+        {
+            return null;
+        }
+
+        var idList = rootDataTree.Id > 0 ? await GetChildIdListWithSelfById(rootDataTree.Id) : new List<long>();
+
+
+        var iSugarQueryable = _sysDataResourceRep.AsQueryable().OrderBy(u => u.Order)
+            .WhereIF(idList.Count > 0, u => idList.Contains(u.Id))
+            .Where(u => u.Status == StatusEnum.Enable); // 非超级管理员限制
+        var tree = await iSugarQueryable.ToTreeAsync(u => u.Children, u => u.Pid, rootDataTree.Id > 0 ? rootDataTree.Id : 0);
+
+        //如果包含自己,则添加自己信息
+        if (input.IsContainSelf)
+        {
+            rootDataTree.Children = new List<SysDataResource>();
+            rootDataTree.Children.AddRange(tree);
+            var list = new List<SysDataResource>();
+            list.Add(rootDataTree);
+            return list;
+        }
+        return tree;
+    }
+
+
     /// <summary>
     /// 获取数据资源列表
     /// </summary>
@@ -84,7 +136,7 @@ public class SysDataResourceService : IDynamicApiController, ITransient
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost("/sysDataResource/update")]
-    [UnitOfWork]
+    [SqlSugarUnitOfWork]
     public async Task UpdateDataResource(UpdateDataResourceInput input)
     {
         if (input.Pid != 0)