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
| };
| }
|
|