forked from anjoy8/Blog.Core
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRecursionHelper.cs
More file actions
125 lines (105 loc) · 3.67 KB
/
RecursionHelper.cs
File metadata and controls
125 lines (105 loc) · 3.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Blog.Core.Common.Helper
{
/// <summary>
/// 泛型递归求树形结构
/// </summary>
public static class RecursionHelper
{
public static void LoopToAppendChildren(List<PermissionTree> all, PermissionTree curItem, int pid, bool needbtn)
{
var subItems = all.Where(ee => ee.Pid == curItem.value).ToList();
var btnItems = subItems.Where(ss => ss.isbtn == true).ToList();
if (subItems.Count > 0)
{
curItem.btns = new List<PermissionTree>();
curItem.btns.AddRange(btnItems);
}
else
{
curItem.btns = null;
}
if (!needbtn)
{
subItems = subItems.Where(ss => ss.isbtn == false).ToList();
}
if (subItems.Count > 0)
{
curItem.children = new List<PermissionTree>();
curItem.children.AddRange(subItems);
}
else
{
curItem.children = null;
}
if (curItem.isbtn)
{
//curItem.label += "按钮";
}
foreach (var subItem in subItems)
{
if (subItem.value == pid && pid > 0)
{
//subItem.disabled = true;//禁用当前节点
}
LoopToAppendChildren(all, subItem, pid, needbtn);
}
}
public static void LoopNaviBarAppendChildren(List<NavigationBar> all, NavigationBar curItem)
{
var subItems = all.Where(ee => ee.pid == curItem.id).ToList();
if (subItems.Count > 0)
{
curItem.children = new List<NavigationBar>();
curItem.children.AddRange(subItems);
}
else
{
curItem.children = null;
}
foreach (var subItem in subItems)
{
LoopNaviBarAppendChildren(all, subItem);
}
}
public static void LoopToAppendChildrenT<T>(List<T> all, T curItem, string parentIdName = "Pid", string idName = "value", string childrenName = "children")
{
var subItems = all.Where(ee => ee.GetType().GetProperty(parentIdName).GetValue(ee, null).ToString() == curItem.GetType().GetProperty(idName).GetValue(curItem, null).ToString()).ToList();
if (subItems.Count > 0) curItem.GetType().GetField(childrenName).SetValue(curItem, subItems);
foreach (var subItem in subItems)
{
LoopToAppendChildrenT(all, subItem);
}
}
}
public class PermissionTree
{
public int value { get; set; }
public int Pid { get; set; }
public string label { get; set; }
public int order { get; set; }
public bool isbtn { get; set; }
public bool disabled { get; set; }
public List<PermissionTree> children { get; set; }
public List<PermissionTree> btns { get; set; }
}
public class NavigationBar
{
public int id { get; set; }
public int pid { get; set; }
public int order { get; set; }
public string name { get; set; }
public string path { get; set; }
public string iconCls { get; set; }
public NavigationBarMeta meta { get; set; }
public List<NavigationBar> children { get; set; }
}
public class NavigationBarMeta
{
public string title { get; set; }
public bool requireAuth { get; set; } = true;
}
}