wangzhibo
6 天以前 7bd866831780abcf5a59c4cbb7d1be456eea7c99
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
import { ElMessage } from 'element-plus';
import { service } from '/@/cool';
 
export function useMenu() {
    // 根据 router 删除菜单
    async function del(router: string) {
        const menus = await service.base.sys.menu.list();
        const item = menus.find(e => e.router == router);
        if (item) {
            await service.base.sys.menu.delete({ ids: [item.id] });
        }
    }
 
    // 创建菜单、权限、文件
    function create(data: EpsModule): Promise<() => void> {
        return new Promise(async (resolve, reject) => {
            // 视图文件路径
            data.viewPath = `modules/${data.module}/views${data.router?.replace(
                `/${data.module}`,
                ''
            )}.vue`;
 
            // 删除原菜单
            await del(data.router);
 
            // 添加新菜单
            service.base.sys.menu
                .add({
                    type: 1,
                    isShow: true,
                    keepAlive: true,
                    ...data,
                    api: undefined,
                    code: undefined
                })
                .then(res => {
                    // 权限列表
                    const perms = data.api?.map(e => {
                        const d = {
                            type: 2,
                            parentId: res.id,
                            name: e.summary || e.path,
                            perms: [e.path]
                        };
 
                        if (e.path == '/update') {
                            if (data.api?.find(a => a.path == '/info')) {
                                d.perms.push('/info');
                            }
                        }
 
                        return {
                            ...d,
                            perms: d.perms
                                .map(e =>
                                    (data.prefix?.replace('/admin/', '') + e).replace(/\//g, ':')
                                )
                                .join(',')
                        };
                    });
 
                    // 批量插入权限
                    service.base.sys.menu.add(perms).then(() => {
                        resolve(() => {
                            // 创建文件
                            service
                                .request({
                                    url: '/__cool_createFile',
                                    method: 'POST',
                                    proxy: false,
                                    data: {
                                        code: data.code,
                                        path: data.viewPath
                                    }
                                })
                                .then(() => {
                                    location.reload();
                                });
                        });
                    });
                })
                .catch(err => {
                    ElMessage.error(err.message);
                    reject();
                });
        });
    }
 
    return {
        del,
        create
    };
}