forked from anjoy8/Blog.Core
-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathRecursionHelper.cs
More file actions
131 lines (110 loc) · 3.91 KB
/
RecursionHelper.cs
File metadata and controls
131 lines (110 loc) · 3.91 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
126
127
128
129
130
131
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 bool IsHide { get; set; } = false;
public bool IsButton { get; set; } = false;
public string path { get; set; }
public string Func { 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;
public bool NoTabPage { get; set; } = false;
public bool keepAlive { get; set; } = false;
}
}