基于廊坊系统为基础,国防科技大学系统演示Demo
lixuliang
2024-04-30 30aa689d25497aacd71b6b9719ca9cb5fd034666
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
 
 
var num = -1;
var tree = [];
//获取目录树数据
export function getTreeData(result) {
 
    tree = [];
    num = -1
    var val = JSON.parse(JSON.stringify(result));
    //获取一级菜单
    var fdata = getFatherData(val);
    //获取一级菜单下所有子级菜单
    var cdata = getChildData(val, fdata);
 
    for (var i in fdata) {
        tree.push(fdata[i])
    }
    for (var i in cdata) {
        tree.push(cdata[i])
    }
    var tree_Data = [];
    for (var i in cdata) {
        for (var j in val) {
            if (val[j].bak == cdata[i].bak) {
                num++;
                val[j].label = val[j].tabDesc;
                val[j].pid = cdata[i].id;
                val[j].id = num;
                var valData = tree_Data.filter(rs => {
                    if (rs.label == val[j].label && rs.bak == val[j].bak) {
                        return rs
                    }
                })
                if (valData.length == 0) {
                    tree_Data.push(val[j])
                }
            }
        }
    }
    for (var i in tree_Data) {
        tree.push(tree_Data[i])
    }
 
    var tree_data = setTreeData(tree);
 
    return tree_data
 
 
}
//生成递归数据
function setTreeData(source) {
    let cloneData = JSON.parse(JSON.stringify(source));// 对源数据深度克隆
 
    return cloneData.filter((father) => {
        // 循环所有项
 
        let branchArr = cloneData.filter((child) => father.id === child.pid); // 对比ID,分别上下级菜单,并返回数据
        branchArr.length > 0 ? (father.children = branchArr) : ''; // 给父级添加一个children属性,并赋值
        // 属于同一对象问题,例如:令 a=b、c=1 ,然后再令 b.c=c , 那么 a.c=b.c=c=1 ;同理,后续令 c.d=2 ,那么 a.c.d 也是=2;
        // 由此循环多次后,就能形成相应的树形数据结构
        return father.pid == -1; // 返回一级菜单
    });
 
}
//获取一级菜单下子级菜单
function getChildData(result, res) {
    var std = [];
 
    for (var i in result) {
        let dir = result[i].bak;
        let c_filter = dataFilter(std, dir);
        if (c_filter.length == 0) {
            std.push(dir);
        }
    }
    var str = [];
 
    for (var i in std) {
        let dir = std[i].split('/');
        for (var j = 1; j < dir.length; j++) {
            if (j == 1) {
                var clabel = dir[0] + "/" + dir[j]
                let f_val = res.filter((rs) => {
                    if (rs.label === dir[j - 1]) {
                        return rs;
                    }
                })
                var c_Data = str.filter(rs => {
                    if (rs.bak == clabel) {
                        return rs;
                    }
                })
                if (f_val.length != 0 && c_Data.length == 0) {
                    num++;
                    var val = {
                        id: num,
                        pid: f_val[0].id,
                        label: dir[j],
                        bak: clabel
                    }
                    str.push(val)
                }
 
            } else {
                var clabel1 = dir[0]
                for (var k = 1; k < j; k++) {
                    clabel1 = clabel1 + "/" + dir[k];
                }
                var f_val = [];
                for (var w in str) {
                    if (str[w].label == dir[j - 1]) {
                        if (str[w].bak == clabel1) {
                            f_val.push(str[w])
                        }
                    }
                }
                var clabel2 = clabel1 + "/" + dir[j]
                var c_Data = str.filter(rs => {
                    if (rs.bak == clabel2) {
                        return rs;
                    }
                })
                if (f_val.length != 0 && c_Data.length == 0) {
                    num++;
                    var val = {
                        id: num,
                        pid: f_val[0].id,
                        label: dir[j],
                        bak: clabel2
                    }
                    str.push(val)
                }
            }
        }
    }
 
    return str
 
 
}
 
//获取一级节点Data
function getFatherData(result) {
    var std = [];
    var str = [];
    for (var i in result) {
        var dir = result[i].bak.split('/');
        var f_filter = dataFilter(std, dir[0]);
        if (f_filter.length == 0) {
            std.push(dir[0])
            num++
            str.push({
                id: num,
                pid: -1,
                label: dir[0]
            })
        }
    }
    return str;
}
//遍历匹配获取数据
function dataFilter(result, bak) {
    let val = result.filter(res => {
        if (res == bak) {
            return res;
        }
    })
    return val;
}