@befly-addon/admin 1.1.29 → 1.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apis/admin/cacheRefresh.ts +29 -24
- package/apis/admin/del.ts +12 -12
- package/apis/admin/detail.ts +9 -41
- package/apis/admin/ins.ts +28 -21
- package/apis/admin/list.ts +12 -12
- package/apis/admin/upd.ts +49 -14
- package/apis/api/all.ts +14 -10
- package/apis/api/list.ts +16 -25
- package/apis/auth/login.ts +55 -52
- package/apis/auth/sendSmsCode.ts +6 -6
- package/apis/dashboard/configStatus.ts +18 -18
- package/apis/dashboard/environmentInfo.ts +12 -12
- package/apis/dashboard/performanceMetrics.ts +5 -5
- package/apis/dashboard/permissionStats.ts +7 -7
- package/apis/dashboard/serviceStatus.ts +29 -29
- package/apis/dashboard/systemInfo.ts +5 -5
- package/apis/dashboard/systemOverview.ts +7 -7
- package/apis/dashboard/systemResources.ts +8 -8
- package/apis/dict/all.ts +24 -7
- package/apis/dict/del.ts +9 -17
- package/apis/dict/detail.ts +30 -16
- package/apis/dict/ins.ts +36 -18
- package/apis/dict/items.ts +27 -0
- package/apis/dict/list.ts +35 -10
- package/apis/dict/upd.ts +54 -20
- package/apis/dictType/all.ts +11 -0
- package/apis/dictType/del.ts +32 -0
- package/apis/dictType/detail.ts +17 -0
- package/apis/dictType/ins.ts +30 -0
- package/apis/dictType/list.ts +22 -0
- package/apis/dictType/upd.ts +42 -0
- package/apis/email/config.ts +4 -4
- package/apis/email/logList.ts +10 -10
- package/apis/email/send.ts +18 -18
- package/apis/email/verify.ts +5 -5
- package/apis/loginLog/list.ts +10 -10
- package/apis/menu/all.ts +17 -20
- package/apis/menu/list.ts +12 -13
- package/apis/operateLog/list.ts +10 -10
- package/apis/role/all.ts +7 -7
- package/apis/role/apiSave.ts +14 -16
- package/apis/role/apis.ts +24 -0
- package/apis/role/del.ts +27 -19
- package/apis/role/detail.ts +6 -7
- package/apis/role/ins.ts +10 -10
- package/apis/role/list.ts +11 -11
- package/apis/role/menuSave.ts +12 -14
- package/apis/role/menus.ts +24 -0
- package/apis/role/save.ts +14 -15
- package/apis/role/upd.ts +10 -10
- package/apis/sysConfig/all.ts +5 -6
- package/apis/sysConfig/del.ts +10 -10
- package/apis/sysConfig/get.ts +10 -11
- package/apis/sysConfig/ins.ts +11 -11
- package/apis/sysConfig/list.ts +9 -9
- package/apis/sysConfig/upd.ts +11 -11
- package/libs/emailHelper.ts +7 -7
- package/package.json +46 -34
- package/plugins/email.ts +9 -9
- package/tables/admin.json +0 -6
- package/tables/dict.json +13 -19
- package/tables/dictType.json +28 -0
- package/tables/role.json +4 -2
- package/views/403_1/index.vue +19 -3
- package/views/config/dict/components/edit.vue +76 -124
- package/views/config/dict/index.vue +142 -84
- package/views/config/dictType/components/edit.vue +105 -0
- package/views/config/dictType/index.vue +242 -0
- package/views/config/index.vue +12 -0
- package/views/config/system/components/edit.vue +36 -36
- package/views/config/system/index.vue +79 -50
- package/views/index/components/addonList.vue +3 -3
- package/views/index/components/environmentInfo.vue +10 -10
- package/views/index/components/operationLogs.vue +10 -10
- package/views/index/components/performanceMetrics.vue +8 -8
- package/views/index/components/quickActions.vue +3 -3
- package/views/index/components/serviceStatus.vue +19 -19
- package/views/index/components/systemNotifications.vue +12 -12
- package/views/index/components/systemOverview.vue +7 -7
- package/views/index/components/systemResources.vue +11 -11
- package/views/index/components/userInfo.vue +20 -19
- package/views/index/index.vue +12 -5
- package/views/log/email/index.vue +58 -51
- package/views/log/index.vue +12 -0
- package/views/log/login/index.vue +45 -38
- package/views/log/operate/index.vue +55 -48
- package/views/login_1/index.vue +191 -2
- package/views/people/admin/components/edit.vue +28 -29
- package/views/people/admin/index.vue +76 -40
- package/views/people/index.vue +12 -0
- package/views/permission/api/index.vue +21 -15
- package/views/permission/index.vue +12 -0
- package/views/permission/menu/index.vue +31 -16
- package/views/permission/role/components/api.vue +23 -23
- package/views/permission/role/components/edit.vue +18 -18
- package/views/permission/role/components/menu.vue +17 -19
- package/views/permission/role/index.vue +84 -49
- package/apis/admin/roleDetail.ts +0 -29
- package/apis/admin/roleSave.ts +0 -39
- package/apis/auth/logout.ts +0 -17
- package/apis/auth/register.ts +0 -43
- package/apis/dashboard/changelog.ts +0 -31
- package/apis/role/apiDetail.ts +0 -24
- package/apis/role/menuDetail.ts +0 -24
- package/views/403_1/meta.json +0 -4
- package/views/config/dict/meta.json +0 -4
- package/views/config/meta.json +0 -4
- package/views/config/system/meta.json +0 -4
- package/views/index/meta.json +0 -4
- package/views/log/email/meta.json +0 -4
- package/views/log/login/meta.json +0 -4
- package/views/log/meta.json +0 -4
- package/views/log/operate/meta.json +0 -4
- package/views/login_1/components/emailLoginForm.vue +0 -174
- package/views/login_1/components/registerForm.vue +0 -175
- package/views/login_1/components/welcomePanel.vue +0 -61
- package/views/login_1/meta.json +0 -4
- package/views/people/admin/meta.json +0 -4
- package/views/people/meta.json +0 -4
- package/views/permission/api/meta.json +0 -4
- package/views/permission/menu/meta.json +0 -4
- package/views/permission/meta.json +0 -4
- package/views/permission/role/meta.json +0 -4
package/apis/menu/all.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
2
|
* 获取当前用户的菜单权限
|
|
3
3
|
* 说明:
|
|
4
4
|
* 1. 从 Redis 缓存读取所有菜单(如果缓存不存在则从数据库查询并缓存)
|
|
@@ -8,27 +8,25 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
export default {
|
|
11
|
-
name:
|
|
11
|
+
name: "获取用户菜单",
|
|
12
12
|
handler: async (befly, ctx) => {
|
|
13
13
|
try {
|
|
14
14
|
// 2. 查询角色信息获取菜单权限(使用 roleCode 而非 roleId)
|
|
15
15
|
const role = await befly.db.getOne({
|
|
16
|
-
table:
|
|
16
|
+
table: "addon_admin_role",
|
|
17
17
|
where: { code: ctx.user.roleCode }
|
|
18
18
|
});
|
|
19
19
|
|
|
20
|
-
if (!role) {
|
|
21
|
-
return befly.tool.No(
|
|
20
|
+
if (!role?.id) {
|
|
21
|
+
return befly.tool.No("角色不存在", { lists: [] });
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
// 3. 解析菜单ID
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
.map((id: string) => parseInt(id.trim()))
|
|
28
|
-
.filter((id: number) => !isNaN(id));
|
|
24
|
+
// 3. 解析菜单ID列表(数组,数据库字段已改为 array 存储)
|
|
25
|
+
const rawMenuIds = Array.isArray(role.menus) ? role.menus : [];
|
|
26
|
+
const menuIds = rawMenuIds.map((id: any) => Number(id)).filter((id: number) => Number.isFinite(id));
|
|
29
27
|
|
|
30
28
|
if (menuIds.length === 0) {
|
|
31
|
-
return befly.tool.Yes(
|
|
29
|
+
return befly.tool.Yes("菜单为空", { lists: [] });
|
|
32
30
|
}
|
|
33
31
|
|
|
34
32
|
// 4. 从缓存获取所有菜单
|
|
@@ -37,26 +35,25 @@ export default {
|
|
|
37
35
|
// 如果缓存不存在,从数据库查询
|
|
38
36
|
if (allMenus.length === 0) {
|
|
39
37
|
const result = await befly.db.getAll({
|
|
40
|
-
table:
|
|
41
|
-
|
|
42
|
-
orderBy: ['sort#ASC', 'id#ASC']
|
|
38
|
+
table: "addon_admin_menu",
|
|
39
|
+
orderBy: ["sort#ASC", "id#ASC"]
|
|
43
40
|
});
|
|
44
41
|
allMenus = result.lists;
|
|
45
42
|
}
|
|
46
43
|
|
|
47
44
|
if (allMenus.length === 0) {
|
|
48
|
-
return befly.tool.Yes(
|
|
45
|
+
return befly.tool.Yes("菜单为空", { lists: [] });
|
|
49
46
|
}
|
|
50
47
|
|
|
51
48
|
// 5. 根据角色权限过滤菜单
|
|
52
|
-
const menuIdSet = new Set(menuIds
|
|
53
|
-
const authorizedMenus = allMenus.filter((menu: any) => menuIdSet.has(
|
|
49
|
+
const menuIdSet = new Set<number>(menuIds);
|
|
50
|
+
const authorizedMenus = allMenus.filter((menu: any) => menuIdSet.has(Number(menu.id)));
|
|
54
51
|
|
|
55
52
|
// 6. 返回一维数组(由前端构建树形结构)
|
|
56
|
-
return befly.tool.Yes(
|
|
53
|
+
return befly.tool.Yes("获取菜单成功", { lists: authorizedMenus });
|
|
57
54
|
} catch (error: any) {
|
|
58
|
-
befly.logger.error({ err: error },
|
|
59
|
-
return befly.tool.No(
|
|
55
|
+
befly.logger.error({ err: error }, "获取用户菜单失败");
|
|
56
|
+
return befly.tool.No("获取菜单失败");
|
|
60
57
|
}
|
|
61
58
|
}
|
|
62
59
|
};
|
package/apis/menu/list.ts
CHANGED
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
name:
|
|
1
|
+
export default {
|
|
2
|
+
name: "获取菜单列表",
|
|
3
3
|
fields: {
|
|
4
|
-
page:
|
|
5
|
-
limit:
|
|
6
|
-
keyword:
|
|
7
|
-
state:
|
|
4
|
+
page: "@page",
|
|
5
|
+
limit: "@limit",
|
|
6
|
+
keyword: "@keyword",
|
|
7
|
+
state: "@state"
|
|
8
8
|
},
|
|
9
|
-
handler: async (befly
|
|
9
|
+
handler: async (befly) => {
|
|
10
10
|
try {
|
|
11
11
|
const menus = await befly.db.getAll({
|
|
12
|
-
table:
|
|
13
|
-
|
|
14
|
-
orderBy: ['sort#ASC', 'id#ASC']
|
|
12
|
+
table: "addon_admin_menu",
|
|
13
|
+
orderBy: ["sort#ASC", "id#ASC"]
|
|
15
14
|
});
|
|
16
15
|
|
|
17
|
-
return befly.tool.Yes(
|
|
16
|
+
return befly.tool.Yes("操作成功", { lists: menus.lists });
|
|
18
17
|
} catch (error) {
|
|
19
|
-
befly.logger.error({ err: error },
|
|
20
|
-
return befly.tool.No(
|
|
18
|
+
befly.logger.error({ err: error }, "获取菜单列表失败");
|
|
19
|
+
return befly.tool.No("操作失败");
|
|
21
20
|
}
|
|
22
21
|
}
|
|
23
22
|
};
|
package/apis/operateLog/list.ts
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
export default {
|
|
2
|
-
name:
|
|
2
|
+
name: "获取操作日志列表",
|
|
3
3
|
fields: {
|
|
4
|
-
page:
|
|
5
|
-
limit:
|
|
6
|
-
keyword:
|
|
7
|
-
state:
|
|
4
|
+
page: "@page",
|
|
5
|
+
limit: "@limit",
|
|
6
|
+
keyword: "@keyword",
|
|
7
|
+
state: "@state"
|
|
8
8
|
},
|
|
9
9
|
handler: async (befly, ctx) => {
|
|
10
10
|
const result = await befly.db.getList({
|
|
11
|
-
table:
|
|
12
|
-
page: ctx.body.page
|
|
13
|
-
limit: ctx.body.limit
|
|
14
|
-
orderBy: [
|
|
11
|
+
table: "addon_admin_operate_log",
|
|
12
|
+
page: ctx.body.page,
|
|
13
|
+
limit: ctx.body.limit,
|
|
14
|
+
orderBy: ["operateTime#DESC"]
|
|
15
15
|
});
|
|
16
16
|
|
|
17
|
-
return befly.tool.Yes(
|
|
17
|
+
return befly.tool.Yes("获取成功", result);
|
|
18
18
|
}
|
|
19
19
|
};
|
package/apis/role/all.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
name:
|
|
3
|
-
handler: async (befly
|
|
1
|
+
export default {
|
|
2
|
+
name: "获取所有角色",
|
|
3
|
+
handler: async (befly) => {
|
|
4
4
|
const roles = await befly.db.getAll({
|
|
5
|
-
table:
|
|
5
|
+
table: "addon_admin_role",
|
|
6
6
|
where: {
|
|
7
7
|
code: {
|
|
8
|
-
$ne:
|
|
8
|
+
$ne: "dev"
|
|
9
9
|
}
|
|
10
10
|
},
|
|
11
|
-
orderBy: [
|
|
11
|
+
orderBy: ["sort#ASC", "id#ASC"]
|
|
12
12
|
});
|
|
13
13
|
|
|
14
|
-
return befly.tool.Yes(
|
|
14
|
+
return befly.tool.Yes("操作成功", { lists: roles.lists, total: roles.total });
|
|
15
15
|
}
|
|
16
16
|
};
|
package/apis/role/apiSave.ts
CHANGED
|
@@ -1,36 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
import adminRoleTable from "../../tables/role.json";
|
|
2
2
|
|
|
3
3
|
export default {
|
|
4
|
-
name:
|
|
4
|
+
name: "保存角色接口权限",
|
|
5
5
|
fields: {
|
|
6
|
+
roleCode: adminRoleTable.code,
|
|
6
7
|
apiIds: adminRoleTable.apis
|
|
7
8
|
},
|
|
8
9
|
handler: async (befly, ctx) => {
|
|
9
10
|
// 查询角色是否存在
|
|
10
11
|
const role = await befly.db.getOne({
|
|
11
|
-
table:
|
|
12
|
-
where: {
|
|
12
|
+
table: "addon_admin_role",
|
|
13
|
+
where: { code: ctx.body.roleCode }
|
|
13
14
|
});
|
|
14
15
|
|
|
15
|
-
if (!role) {
|
|
16
|
-
return befly.tool.No(
|
|
16
|
+
if (!role?.id) {
|
|
17
|
+
return befly.tool.No("角色不存在");
|
|
17
18
|
}
|
|
18
19
|
|
|
19
|
-
//
|
|
20
|
-
const apiIdsStr = Array.isArray(ctx.body.apiIds) ? ctx.body.apiIds.join(',') : '';
|
|
21
|
-
|
|
22
|
-
// 更新角色的接口权限
|
|
20
|
+
// 直接使用数组,数据库会自动处理存储
|
|
23
21
|
await befly.db.updData({
|
|
24
|
-
table:
|
|
25
|
-
where: {
|
|
22
|
+
table: "addon_admin_role",
|
|
23
|
+
where: { code: ctx.body.roleCode },
|
|
26
24
|
data: {
|
|
27
|
-
apis:
|
|
25
|
+
apis: ctx.body.apiIds
|
|
28
26
|
}
|
|
29
27
|
});
|
|
30
28
|
|
|
31
|
-
//
|
|
32
|
-
await befly.cache.
|
|
29
|
+
// 增量刷新 Redis 权限缓存
|
|
30
|
+
await befly.cache.refreshRoleApiPermissions(role.code, ctx.body.apiIds || []);
|
|
33
31
|
|
|
34
|
-
return befly.tool.Yes(
|
|
32
|
+
return befly.tool.Yes("操作成功");
|
|
35
33
|
}
|
|
36
34
|
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import adminRoleTable from "../../tables/role.json";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
name: "获取角色接口权限",
|
|
5
|
+
fields: {
|
|
6
|
+
roleCode: adminRoleTable.code
|
|
7
|
+
},
|
|
8
|
+
handler: async (befly, ctx) => {
|
|
9
|
+
// 查询角色信息
|
|
10
|
+
const role = await befly.db.getOne({
|
|
11
|
+
table: "addon_admin_role",
|
|
12
|
+
where: { code: ctx.body.roleCode }
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
if (!role?.id) {
|
|
16
|
+
return befly.tool.No("角色不存在");
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// 数据库自动将 array_number_string 转换为数组
|
|
20
|
+
const apiIds = role.apis || [];
|
|
21
|
+
|
|
22
|
+
return befly.tool.Yes("操作成功", { apiIds });
|
|
23
|
+
}
|
|
24
|
+
};
|
package/apis/role/del.ts
CHANGED
|
@@ -1,41 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
name:
|
|
1
|
+
export default {
|
|
2
|
+
name: "删除角色",
|
|
3
3
|
fields: {
|
|
4
|
-
id:
|
|
4
|
+
id: "@id"
|
|
5
5
|
},
|
|
6
6
|
handler: async (befly, ctx) => {
|
|
7
7
|
try {
|
|
8
8
|
// 检查是否有用户使用此角色(使用 getList 代替 getAll)
|
|
9
|
-
const
|
|
10
|
-
table:
|
|
11
|
-
where: {
|
|
9
|
+
const role = await befly.db.getOne({
|
|
10
|
+
table: "addon_admin_role",
|
|
11
|
+
where: { id: ctx.body.id },
|
|
12
|
+
fields: ["code"]
|
|
12
13
|
});
|
|
13
14
|
|
|
14
|
-
if (
|
|
15
|
-
return befly.tool.No(
|
|
15
|
+
if (!role?.code) {
|
|
16
|
+
return befly.tool.No("角色不存在");
|
|
16
17
|
}
|
|
17
18
|
|
|
18
|
-
//
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
// 禁止删除系统角色
|
|
20
|
+
const systemRoles = ["dev", "user", "admin", "guest"];
|
|
21
|
+
if (systemRoles.includes(role.code)) {
|
|
22
|
+
return befly.tool.No(`系统角色 [${role.code}] 不允许删除`);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const adminList = await befly.db.getList({
|
|
26
|
+
table: "addon_admin_admin",
|
|
27
|
+
where: { roleCode: role.code }
|
|
22
28
|
});
|
|
23
29
|
|
|
30
|
+
if (adminList.total > 0) {
|
|
31
|
+
return befly.tool.No("该角色已分配给用户,无法删除");
|
|
32
|
+
}
|
|
33
|
+
|
|
24
34
|
// 删除角色
|
|
25
35
|
await befly.db.delData({
|
|
26
|
-
table:
|
|
36
|
+
table: "addon_admin_role",
|
|
27
37
|
where: { id: ctx.body.id }
|
|
28
38
|
});
|
|
29
39
|
|
|
30
40
|
// 删除角色权限缓存
|
|
31
|
-
|
|
32
|
-
await befly.cache.deleteRolePermissions(befly, role.code);
|
|
33
|
-
}
|
|
41
|
+
await befly.cache.deleteRolePermissions(role.code);
|
|
34
42
|
|
|
35
|
-
return befly.tool.Yes(
|
|
43
|
+
return befly.tool.Yes("操作成功");
|
|
36
44
|
} catch (error: any) {
|
|
37
|
-
befly.logger.error({ err: error },
|
|
38
|
-
return befly.tool.No(
|
|
45
|
+
befly.logger.error({ err: error }, "删除角色失败");
|
|
46
|
+
return befly.tool.No("操作失败");
|
|
39
47
|
}
|
|
40
48
|
}
|
|
41
49
|
};
|
package/apis/role/detail.ts
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
name:
|
|
1
|
+
export default {
|
|
2
|
+
name: "获取用户角色",
|
|
3
3
|
fields: {
|
|
4
|
-
id:
|
|
4
|
+
id: "@id"
|
|
5
5
|
},
|
|
6
6
|
handler: async (befly, ctx) => {
|
|
7
7
|
let roleInfo = null;
|
|
8
|
-
if (ctx.body.id && ctx.user.roleType ===
|
|
8
|
+
if (ctx.body.id && ctx.user.roleType === "admin") {
|
|
9
9
|
roleInfo = await befly.db.getOne({
|
|
10
|
-
table:
|
|
10
|
+
table: "addon_admin_role",
|
|
11
11
|
where: { code: ctx.body.id }
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
return befly.tool.Yes(
|
|
16
|
-
roleId: ctx.body.id,
|
|
15
|
+
return befly.tool.Yes("操作成功", {
|
|
17
16
|
roleCode: ctx.body.id,
|
|
18
17
|
role: roleInfo
|
|
19
18
|
});
|
package/apis/role/ins.ts
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
import adminRoleTable from "../../tables/role.json";
|
|
2
2
|
|
|
3
3
|
export default {
|
|
4
|
-
name:
|
|
4
|
+
name: "创建角色",
|
|
5
5
|
fields: adminRoleTable,
|
|
6
6
|
handler: async (befly, ctx) => {
|
|
7
7
|
// 检查角色代码是否已存在
|
|
8
8
|
const existing = await befly.db.getOne({
|
|
9
|
-
table:
|
|
9
|
+
table: "addon_admin_role",
|
|
10
10
|
where: { code: ctx.body.code }
|
|
11
11
|
});
|
|
12
12
|
|
|
13
13
|
if (existing) {
|
|
14
|
-
return befly.tool.No(
|
|
14
|
+
return befly.tool.No("角色代码已存在");
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
const roleId = await befly.db.insData({
|
|
18
|
-
table:
|
|
18
|
+
table: "addon_admin_role",
|
|
19
19
|
data: {
|
|
20
20
|
name: ctx.body.name,
|
|
21
21
|
code: ctx.body.code,
|
|
22
22
|
description: ctx.body.description,
|
|
23
|
-
menus: ctx.body.menus ||
|
|
24
|
-
apis: ctx.body.apis ||
|
|
23
|
+
menus: ctx.body.menus || [],
|
|
24
|
+
apis: ctx.body.apis || [],
|
|
25
25
|
sort: ctx.body.sort
|
|
26
26
|
// state 由框架自动设置为 1
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
29
|
|
|
30
|
-
//
|
|
31
|
-
await befly.cache.
|
|
30
|
+
// 增量刷新角色权限缓存
|
|
31
|
+
await befly.cache.refreshRoleApiPermissions(ctx.body.code, ctx.body.apis || []);
|
|
32
32
|
|
|
33
|
-
return befly.tool.Yes(
|
|
33
|
+
return befly.tool.Yes("操作成功", { id: roleId });
|
|
34
34
|
}
|
|
35
35
|
};
|
package/apis/role/list.ts
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
name:
|
|
1
|
+
export default {
|
|
2
|
+
name: "获取角色列表",
|
|
3
3
|
fields: {
|
|
4
|
-
page:
|
|
5
|
-
limit:
|
|
6
|
-
keyword:
|
|
7
|
-
state:
|
|
4
|
+
page: "@page",
|
|
5
|
+
limit: "@limit",
|
|
6
|
+
keyword: "@keyword",
|
|
7
|
+
state: "@state"
|
|
8
8
|
},
|
|
9
|
-
handler: async (befly
|
|
9
|
+
handler: async (befly) => {
|
|
10
10
|
const roles = await befly.db.getList({
|
|
11
11
|
limit: 30,
|
|
12
|
-
table:
|
|
12
|
+
table: "addon_admin_role",
|
|
13
13
|
where: {
|
|
14
14
|
code: {
|
|
15
|
-
$ne:
|
|
15
|
+
$ne: "dev"
|
|
16
16
|
}
|
|
17
17
|
},
|
|
18
|
-
orderBy: [
|
|
18
|
+
orderBy: ["sort#ASC", "id#ASC"]
|
|
19
19
|
});
|
|
20
20
|
|
|
21
|
-
return befly.tool.Yes(
|
|
21
|
+
return befly.tool.Yes("操作成功", roles);
|
|
22
22
|
}
|
|
23
23
|
};
|
package/apis/role/menuSave.ts
CHANGED
|
@@ -1,33 +1,31 @@
|
|
|
1
|
-
|
|
1
|
+
import adminRoleTable from "../../tables/role.json";
|
|
2
2
|
|
|
3
3
|
export default {
|
|
4
|
-
name:
|
|
4
|
+
name: "保存角色菜单权限",
|
|
5
5
|
fields: {
|
|
6
|
+
roleCode: adminRoleTable.code,
|
|
6
7
|
menuIds: adminRoleTable.menus
|
|
7
8
|
},
|
|
8
9
|
handler: async (befly, ctx) => {
|
|
9
10
|
// 查询角色是否存在
|
|
10
11
|
const role = await befly.db.getOne({
|
|
11
|
-
table:
|
|
12
|
-
where: {
|
|
12
|
+
table: "addon_admin_role",
|
|
13
|
+
where: { code: ctx.body.roleCode }
|
|
13
14
|
});
|
|
14
15
|
|
|
15
|
-
if (!role) {
|
|
16
|
-
return befly.tool.No(
|
|
16
|
+
if (!role?.id) {
|
|
17
|
+
return befly.tool.No("角色不存在");
|
|
17
18
|
}
|
|
18
19
|
|
|
19
|
-
//
|
|
20
|
-
const menuIdsStr = Array.isArray(ctx.body.menuIds) ? ctx.body.menuIds.join(',') : '';
|
|
21
|
-
|
|
22
|
-
// 更新角色的菜单权限
|
|
20
|
+
// 直接使用数组,数据库会自动处理存储
|
|
23
21
|
await befly.db.updData({
|
|
24
|
-
table:
|
|
25
|
-
where: {
|
|
22
|
+
table: "addon_admin_role",
|
|
23
|
+
where: { code: ctx.body.roleCode },
|
|
26
24
|
data: {
|
|
27
|
-
menus:
|
|
25
|
+
menus: ctx.body.menuIds
|
|
28
26
|
}
|
|
29
27
|
});
|
|
30
28
|
|
|
31
|
-
return befly.tool.Yes(
|
|
29
|
+
return befly.tool.Yes("操作成功");
|
|
32
30
|
}
|
|
33
31
|
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import adminRoleTable from "../../tables/role.json";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
name: "获取角色菜单权限",
|
|
5
|
+
fields: {
|
|
6
|
+
roleCode: adminRoleTable.code
|
|
7
|
+
},
|
|
8
|
+
handler: async (befly, ctx) => {
|
|
9
|
+
// 查询角色信息
|
|
10
|
+
const role = await befly.db.getOne({
|
|
11
|
+
table: "addon_admin_role",
|
|
12
|
+
where: { code: ctx.body.roleCode }
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
if (!role?.id) {
|
|
16
|
+
return befly.tool.No("角色不存在");
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// 数据库自动将 array_number_string 转换为数组
|
|
20
|
+
const menuIds = role.menus || [];
|
|
21
|
+
|
|
22
|
+
return befly.tool.Yes("操作成功", menuIds);
|
|
23
|
+
}
|
|
24
|
+
};
|
package/apis/role/save.ts
CHANGED
|
@@ -1,44 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
name:
|
|
1
|
+
export default {
|
|
2
|
+
name: "角色保存",
|
|
3
3
|
fields: {
|
|
4
4
|
roleCode: {
|
|
5
|
-
name:
|
|
6
|
-
type:
|
|
5
|
+
name: "角色编码",
|
|
6
|
+
type: "string",
|
|
7
7
|
min: 2,
|
|
8
8
|
max: 50,
|
|
9
|
-
regexp:
|
|
9
|
+
regexp: "^[a-zA-Z0-9_]+$"
|
|
10
10
|
}
|
|
11
11
|
},
|
|
12
12
|
handler: async (befly, ctx) => {
|
|
13
13
|
try {
|
|
14
14
|
// 查询角色是否存在(使用 roleCode 而非 roleId)
|
|
15
15
|
const role = await befly.db.getOne({
|
|
16
|
-
table:
|
|
16
|
+
table: "addon_admin_role",
|
|
17
17
|
where: { code: ctx.body.roleCode }
|
|
18
18
|
});
|
|
19
19
|
|
|
20
|
-
if (!role) {
|
|
21
|
-
return befly.tool.No(
|
|
20
|
+
if (!role?.id) {
|
|
21
|
+
return befly.tool.No("角色不存在");
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
// 根据角色编码判断角色类型(硬编码规则)
|
|
25
|
-
const roleType = role.code ===
|
|
25
|
+
const roleType = role.code === "dev" || role.code === "admin" ? "admin" : "user";
|
|
26
26
|
|
|
27
|
-
//
|
|
27
|
+
// 更新管理员的角色编码和角色类型
|
|
28
28
|
await befly.db.updData({
|
|
29
|
-
table:
|
|
29
|
+
table: "addon_admin_admin",
|
|
30
30
|
where: { id: ctx.body.adminId },
|
|
31
31
|
data: {
|
|
32
|
-
roleId: role.id,
|
|
33
32
|
roleCode: role.code,
|
|
34
33
|
roleType: roleType
|
|
35
34
|
}
|
|
36
35
|
});
|
|
37
36
|
|
|
38
|
-
return befly.tool.Yes(
|
|
37
|
+
return befly.tool.Yes("操作成功");
|
|
39
38
|
} catch (error: any) {
|
|
40
|
-
befly.logger.error({ err: error },
|
|
41
|
-
return befly.tool.No(
|
|
39
|
+
befly.logger.error({ err: error }, "保存用户角色失败");
|
|
40
|
+
return befly.tool.No("操作失败");
|
|
42
41
|
}
|
|
43
42
|
}
|
|
44
43
|
};
|
package/apis/role/upd.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
import adminRoleTable from "../../tables/role.json";
|
|
2
2
|
|
|
3
3
|
export default {
|
|
4
|
-
name:
|
|
4
|
+
name: "更新角色",
|
|
5
5
|
fields: adminRoleTable,
|
|
6
6
|
handler: async (befly, ctx) => {
|
|
7
7
|
// 检查角色代码是否被其他角色占用
|
|
8
8
|
const existing = await befly.db.getList({
|
|
9
|
-
table:
|
|
9
|
+
table: "addon_admin_role",
|
|
10
10
|
where: {
|
|
11
11
|
code: ctx.body.code,
|
|
12
12
|
id$ne: ctx.body.id
|
|
@@ -14,26 +14,26 @@ export default {
|
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
if (existing.total > 0) {
|
|
17
|
-
return befly.tool.No(
|
|
17
|
+
return befly.tool.No("角色代码已被其他角色使用");
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
await befly.db.updData({
|
|
21
|
-
table:
|
|
21
|
+
table: "addon_admin_role",
|
|
22
22
|
where: { id: ctx.body.id },
|
|
23
23
|
data: {
|
|
24
24
|
name: ctx.body.name,
|
|
25
25
|
code: ctx.body.code,
|
|
26
26
|
description: ctx.body.description,
|
|
27
|
-
menus: ctx.body.menus ||
|
|
28
|
-
apis: ctx.body.apis ||
|
|
27
|
+
menus: ctx.body.menus || [],
|
|
28
|
+
apis: ctx.body.apis || [],
|
|
29
29
|
sort: ctx.body.sort
|
|
30
30
|
// state 字段不在此处更新,需要禁用/启用时单独处理
|
|
31
31
|
}
|
|
32
32
|
});
|
|
33
33
|
|
|
34
|
-
//
|
|
35
|
-
await befly.cache.
|
|
34
|
+
// 增量刷新角色权限缓存
|
|
35
|
+
await befly.cache.refreshRoleApiPermissions(ctx.body.code, ctx.body.apis || []);
|
|
36
36
|
|
|
37
|
-
return befly.tool.Yes(
|
|
37
|
+
return befly.tool.Yes("操作成功");
|
|
38
38
|
}
|
|
39
39
|
};
|
package/apis/sysConfig/all.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
export default {
|
|
2
|
-
name:
|
|
3
|
-
handler: async (befly
|
|
2
|
+
name: "获取所有系统配置",
|
|
3
|
+
handler: async (befly) => {
|
|
4
4
|
const result = await befly.db.getAll({
|
|
5
|
-
table:
|
|
6
|
-
|
|
7
|
-
orderBy: ['id#ASC']
|
|
5
|
+
table: "addon_admin_sys_config",
|
|
6
|
+
orderBy: ["id#ASC"]
|
|
8
7
|
});
|
|
9
8
|
|
|
10
|
-
return befly.tool.Yes(
|
|
9
|
+
return befly.tool.Yes("操作成功", { lists: result.lists });
|
|
11
10
|
}
|
|
12
11
|
};
|