zhaoxiaoqiang
2023-08-31 1e49e17d482e3a3e67108bdffa4ae5f374e26cb8
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
/*
 * @Author: your name
 * @Date: 2021-09-13 14:28:39
 * @LastEditTime: 2023-08-24 17:30:55
 * @LastEditors: zhaoxiaoqiang 287285524@qq.com
 * @Description: In User Settings Edit
 * @FilePath: \cw_plat\src\utils\MenuUtils.js
 */
 
// import Main from '../views/Main.vue';
import Layout from '@/layout'
export default (arr) => {
    // 这里之所以要重新遍历一下,是因为,通常我们动态路由的时候,是获取服务端数据,
    // 这个component属性是一个字符串,或者可能连字段名都是其他的key
    // 所以这里要做一些转换
    // 结构创建
    let data = arr ? arr : [];
    for (let i = 0, j = data.length; i < j; i++) {
        if (data[i].childPowerInfos == null || data[i].childPowerInfos.length == 0) {
            data[i].childPowerInfos = [{
                "childPowerInfos": [],
                "btnInfos": data[i].btnInfos,
                "powerId": data[i].powerId,
                "powerName": data[i].powerName,
                "routePath": data[i].routePath,
                "routeName": data[i].routeName,
                "routeComp": data[i].routeComp,
                "iconPath": data[i].iconPath
            }];
            data[i].routePath = data[i].routePath.split('-')[0];
            data[i].routeName =data[i].routeName?data[i].routeName.split('-')[0]:"";
            data[i].routeComp = null;
        } else if (data[i].childPowerInfos.length == 1) {
            data[i].powerName = data[i].powerName;
            data[i].iconPath = data[i].iconPath;
        }
    }
    return generaMenu(data,false);
};
 
/**
 *  将登陆后返回的菜单目录结构转化为当前的所需要的目录结构
 * @param routers  转化后的菜单数组
 * @param data     菜单数据源
 */
function generaMenu(data) {
    let routers = [];
    let arr = data ? data : []
 
    arr.forEach(item => {
        let menu = {};
        menu.path = item.routePath;
        menu.name = item.routeName;
        menu.meta ={icon: item.iconPath,title:item.powerName}
        if (item.routeComp) {
            menu.component = resolve => {require(['@/views' + item.routeComp + '.vue'], resolve); };
        } else {
            menu.component = Layout;
        }
        if (item.childPowerInfos instanceof Array && item.childPowerInfos.length) {
            menu.children = generaMenu(item.childPowerInfos,true);
        } else {
            // debugger
            // menu.children = [];
        }
        routers.push(menu);
    });
    return routers;
}