@befly-addon/admin 1.1.30 → 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 -21
- package/apis/admin/del.ts +10 -10
- package/apis/admin/detail.ts +7 -7
- package/apis/admin/ins.ts +11 -11
- package/apis/admin/list.ts +10 -10
- package/apis/admin/upd.ts +14 -14
- package/apis/api/all.ts +8 -8
- package/apis/api/list.ts +10 -10
- package/apis/auth/login.ts +43 -43
- 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 +16 -16
- package/apis/dict/del.ts +6 -6
- package/apis/dict/detail.ts +19 -19
- package/apis/dict/ins.ts +9 -9
- package/apis/dict/items.ts +8 -8
- package/apis/dict/list.ts +22 -22
- package/apis/dict/upd.ts +11 -11
- package/apis/dictType/all.ts +5 -5
- package/apis/dictType/del.ts +8 -8
- package/apis/dictType/detail.ts +6 -6
- package/apis/dictType/ins.ts +7 -7
- package/apis/dictType/list.ts +8 -10
- package/apis/dictType/upd.ts +8 -8
- package/apis/email/config.ts +4 -4
- package/apis/email/logList.ts +8 -8
- package/apis/email/send.ts +18 -18
- package/apis/email/verify.ts +5 -5
- package/apis/loginLog/list.ts +8 -8
- package/apis/menu/all.ts +16 -18
- package/apis/menu/list.ts +12 -12
- package/apis/operateLog/list.ts +8 -8
- package/apis/role/all.ts +7 -7
- package/apis/role/apiSave.ts +10 -13
- package/apis/role/apis.ts +7 -12
- package/apis/role/del.ts +14 -14
- package/apis/role/detail.ts +6 -6
- package/apis/role/ins.ts +10 -10
- package/apis/role/list.ts +11 -11
- package/apis/role/menuSave.ts +8 -11
- package/apis/role/menus.ts +7 -12
- package/apis/role/save.ts +12 -12
- package/apis/role/upd.ts +10 -10
- package/apis/sysConfig/all.ts +5 -5
- package/apis/sysConfig/del.ts +9 -9
- package/apis/sysConfig/get.ts +9 -9
- package/apis/sysConfig/ins.ts +11 -11
- package/apis/sysConfig/list.ts +9 -9
- package/apis/sysConfig/upd.ts +10 -10
- package/libs/emailHelper.ts +7 -7
- package/package.json +46 -34
- package/plugins/email.ts +9 -9
- package/tables/role.json +4 -2
- package/views/403_1/index.vue +19 -3
- package/views/config/dict/components/edit.vue +26 -28
- package/views/config/dict/index.vue +88 -52
- package/views/config/dictType/components/edit.vue +22 -23
- package/views/config/dictType/index.vue +82 -46
- 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 +25 -18
- package/views/people/admin/components/edit.vue +25 -26
- 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 +21 -21
- package/views/permission/role/components/edit.vue +18 -18
- package/views/permission/role/components/menu.vue +14 -16
- package/views/permission/role/index.vue +84 -49
- package/views/403_1/meta.json +0 -4
- package/views/config/dict/meta.json +0 -4
- package/views/config/dictType/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/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/dict/upd.ts
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
|
|
1
|
+
import adminDictTable from "../../tables/dict.json";
|
|
2
2
|
|
|
3
3
|
export default {
|
|
4
|
-
name:
|
|
4
|
+
name: "更新字典",
|
|
5
5
|
fields: {
|
|
6
6
|
...adminDictTable,
|
|
7
|
-
|
|
7
|
+
"@id": true
|
|
8
8
|
},
|
|
9
|
-
required: [
|
|
9
|
+
required: ["id"],
|
|
10
10
|
handler: async (befly, ctx) => {
|
|
11
11
|
const { id, typeCode, key, label, sort, remark } = ctx.body;
|
|
12
12
|
|
|
13
13
|
// 如果更新了 typeCode,验证其是否存在
|
|
14
14
|
if (typeCode) {
|
|
15
15
|
const dictType = await befly.db.getOne({
|
|
16
|
-
table:
|
|
16
|
+
table: "addon_admin_dict_type",
|
|
17
17
|
where: { code: typeCode }
|
|
18
18
|
});
|
|
19
19
|
|
|
20
20
|
if (!dictType?.id) {
|
|
21
|
-
return befly.tool.No(
|
|
21
|
+
return befly.tool.No("字典类型不存在");
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
// 如果更新了 typeCode 或 key,检查唯一性
|
|
26
26
|
if (typeCode || key) {
|
|
27
27
|
const current = await befly.db.getOne({
|
|
28
|
-
table:
|
|
28
|
+
table: "addon_admin_dict",
|
|
29
29
|
where: { id: id }
|
|
30
30
|
});
|
|
31
31
|
|
|
@@ -33,7 +33,7 @@ export default {
|
|
|
33
33
|
const checkKey = key || current?.key;
|
|
34
34
|
|
|
35
35
|
const existing = await befly.db.getOne({
|
|
36
|
-
table:
|
|
36
|
+
table: "addon_admin_dict",
|
|
37
37
|
where: {
|
|
38
38
|
typeCode: checkTypeCode,
|
|
39
39
|
key: checkKey,
|
|
@@ -42,7 +42,7 @@ export default {
|
|
|
42
42
|
});
|
|
43
43
|
|
|
44
44
|
if (existing?.id) {
|
|
45
|
-
return befly.tool.No(
|
|
45
|
+
return befly.tool.No("该类型下已存在相同的键名");
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -54,11 +54,11 @@ export default {
|
|
|
54
54
|
if (remark !== undefined) updateData.remark = remark;
|
|
55
55
|
|
|
56
56
|
await befly.db.updData({
|
|
57
|
-
table:
|
|
57
|
+
table: "addon_admin_dict",
|
|
58
58
|
data: updateData,
|
|
59
59
|
where: { id: id }
|
|
60
60
|
});
|
|
61
61
|
|
|
62
|
-
return befly.tool.Yes(
|
|
62
|
+
return befly.tool.Yes("更新成功");
|
|
63
63
|
}
|
|
64
64
|
};
|
package/apis/dictType/all.ts
CHANGED
|
@@ -1,11 +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
|
-
orderBy: [
|
|
5
|
+
table: "addon_admin_dict_type",
|
|
6
|
+
orderBy: ["sort#ASC", "id#ASC"]
|
|
7
7
|
});
|
|
8
8
|
|
|
9
|
-
return befly.tool.Yes(
|
|
9
|
+
return befly.tool.Yes("操作成功", { lists: result.lists });
|
|
10
10
|
}
|
|
11
11
|
};
|
package/apis/dictType/del.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
export default {
|
|
2
|
-
name:
|
|
3
|
-
fields: {
|
|
4
|
-
required: [
|
|
2
|
+
name: "删除字典类型",
|
|
3
|
+
fields: { "@id": true },
|
|
4
|
+
required: ["id"],
|
|
5
5
|
handler: async (befly, ctx) => {
|
|
6
6
|
const { id } = ctx.body;
|
|
7
7
|
|
|
8
8
|
// 检查是否有字典项引用此类型
|
|
9
9
|
const dictItems = await befly.db.getOne({
|
|
10
|
-
table:
|
|
10
|
+
table: "addon_admin_dict",
|
|
11
11
|
where: {
|
|
12
12
|
typeCode: (
|
|
13
13
|
await befly.db.getOne({
|
|
14
|
-
table:
|
|
14
|
+
table: "addon_admin_dict_type",
|
|
15
15
|
where: { id: id }
|
|
16
16
|
})
|
|
17
17
|
)?.code
|
|
@@ -19,14 +19,14 @@ export default {
|
|
|
19
19
|
});
|
|
20
20
|
|
|
21
21
|
if (dictItems?.id) {
|
|
22
|
-
return befly.tool.No(
|
|
22
|
+
return befly.tool.No("该类型下存在字典项,无法删除");
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
await befly.db.delData({
|
|
26
|
-
table:
|
|
26
|
+
table: "addon_admin_dict_type",
|
|
27
27
|
where: { id: id }
|
|
28
28
|
});
|
|
29
29
|
|
|
30
|
-
return befly.tool.Yes(
|
|
30
|
+
return befly.tool.Yes("删除成功");
|
|
31
31
|
}
|
|
32
32
|
};
|
package/apis/dictType/detail.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
export default {
|
|
2
|
-
name:
|
|
3
|
-
fields: {
|
|
4
|
-
required: [
|
|
2
|
+
name: "字典类型详情",
|
|
3
|
+
fields: { "@id": true },
|
|
4
|
+
required: ["id"],
|
|
5
5
|
handler: async (befly, ctx) => {
|
|
6
6
|
const detail = await befly.db.getDetail({
|
|
7
|
-
table:
|
|
7
|
+
table: "addon_admin_dict_type",
|
|
8
8
|
where: { id: ctx.body.id }
|
|
9
9
|
});
|
|
10
10
|
|
|
11
11
|
if (!detail?.id) {
|
|
12
|
-
return befly.tool.No(
|
|
12
|
+
return befly.tool.No("字典类型不存在");
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
return befly.tool.Yes(
|
|
15
|
+
return befly.tool.Yes("获取成功", detail);
|
|
16
16
|
}
|
|
17
17
|
};
|
package/apis/dictType/ins.ts
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import dictTypeTable from
|
|
1
|
+
import dictTypeTable from "../../tables/dictType.json";
|
|
2
2
|
|
|
3
3
|
export default {
|
|
4
|
-
name:
|
|
4
|
+
name: "添加字典类型",
|
|
5
5
|
fields: dictTypeTable,
|
|
6
|
-
required: [
|
|
6
|
+
required: ["code", "name"],
|
|
7
7
|
handler: async (befly, ctx) => {
|
|
8
8
|
// 检查代码是否已存在
|
|
9
9
|
const existing = await befly.db.getOne({
|
|
10
|
-
table:
|
|
10
|
+
table: "addon_admin_dict_type",
|
|
11
11
|
where: { code: ctx.body.code }
|
|
12
12
|
});
|
|
13
13
|
|
|
14
14
|
if (existing?.id) {
|
|
15
|
-
return befly.tool.No(
|
|
15
|
+
return befly.tool.No("类型代码已存在");
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
const typeId = await befly.db.insData({
|
|
19
|
-
table:
|
|
19
|
+
table: "addon_admin_dict_type",
|
|
20
20
|
data: {
|
|
21
21
|
code: ctx.body.code,
|
|
22
22
|
name: ctx.body.name,
|
|
@@ -25,6 +25,6 @@ export default {
|
|
|
25
25
|
}
|
|
26
26
|
});
|
|
27
27
|
|
|
28
|
-
return befly.tool.Yes(
|
|
28
|
+
return befly.tool.Yes("添加成功", { id: typeId });
|
|
29
29
|
}
|
|
30
30
|
};
|
package/apis/dictType/list.ts
CHANGED
|
@@ -1,24 +1,22 @@
|
|
|
1
|
-
import dictTypeTable from '../../tables/dictType.json';
|
|
2
|
-
|
|
3
1
|
export default {
|
|
4
|
-
name:
|
|
2
|
+
name: "获取字典类型列表",
|
|
5
3
|
fields: {
|
|
6
|
-
page:
|
|
7
|
-
limit:
|
|
8
|
-
keyword:
|
|
9
|
-
state:
|
|
4
|
+
page: "@page",
|
|
5
|
+
limit: "@limit",
|
|
6
|
+
keyword: "@keyword",
|
|
7
|
+
state: "@state"
|
|
10
8
|
},
|
|
11
9
|
handler: async (befly, ctx) => {
|
|
12
10
|
const result = await befly.db.getList({
|
|
13
|
-
table:
|
|
11
|
+
table: "addon_admin_dict_type",
|
|
14
12
|
where: {
|
|
15
13
|
name$like: ctx.body.keyword ? `%${ctx.body.keyword}%` : undefined
|
|
16
14
|
},
|
|
17
|
-
orderBy: [
|
|
15
|
+
orderBy: ["sort#ASC", "id#ASC"],
|
|
18
16
|
page: ctx.body.page,
|
|
19
17
|
limit: ctx.body.limit
|
|
20
18
|
});
|
|
21
19
|
|
|
22
|
-
return befly.tool.Yes(
|
|
20
|
+
return befly.tool.Yes("操作成功", result);
|
|
23
21
|
}
|
|
24
22
|
};
|
package/apis/dictType/upd.ts
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import dictTypeTable from
|
|
1
|
+
import dictTypeTable from "../../tables/dictType.json";
|
|
2
2
|
|
|
3
3
|
export default {
|
|
4
|
-
name:
|
|
4
|
+
name: "更新字典类型",
|
|
5
5
|
fields: {
|
|
6
6
|
...dictTypeTable,
|
|
7
|
-
|
|
7
|
+
"@id": true
|
|
8
8
|
},
|
|
9
|
-
required: [
|
|
9
|
+
required: ["id"],
|
|
10
10
|
handler: async (befly, ctx) => {
|
|
11
11
|
const { id, code, name, description, sort } = ctx.body;
|
|
12
12
|
|
|
13
13
|
// 如果更新了 code,需要检查是否已被使用
|
|
14
14
|
if (code) {
|
|
15
15
|
const existing = await befly.db.getOne({
|
|
16
|
-
table:
|
|
16
|
+
table: "addon_admin_dict_type",
|
|
17
17
|
where: {
|
|
18
18
|
code: code,
|
|
19
19
|
id$ne: id
|
|
@@ -21,7 +21,7 @@ export default {
|
|
|
21
21
|
});
|
|
22
22
|
|
|
23
23
|
if (existing?.id) {
|
|
24
|
-
return befly.tool.No(
|
|
24
|
+
return befly.tool.No("类型代码已被使用");
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -32,11 +32,11 @@ export default {
|
|
|
32
32
|
if (sort !== undefined) updateData.sort = sort;
|
|
33
33
|
|
|
34
34
|
await befly.db.updData({
|
|
35
|
-
table:
|
|
35
|
+
table: "addon_admin_dict_type",
|
|
36
36
|
data: updateData,
|
|
37
37
|
where: { id: id }
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
-
return befly.tool.Yes(
|
|
40
|
+
return befly.tool.Yes("更新成功");
|
|
41
41
|
}
|
|
42
42
|
};
|
package/apis/email/config.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
export default {
|
|
2
|
-
name:
|
|
3
|
-
handler: async (befly
|
|
2
|
+
name: "获取邮件配置",
|
|
3
|
+
handler: async (befly) => {
|
|
4
4
|
if (!(befly as any).addon_admin_email) {
|
|
5
|
-
return befly.tool.No(
|
|
5
|
+
return befly.tool.No("邮件插件未加载,请检查配置");
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
const config = (befly as any).addon_admin_email.getConfig();
|
|
9
9
|
|
|
10
|
-
return befly.tool.Yes(
|
|
10
|
+
return befly.tool.Yes("获取成功", {
|
|
11
11
|
host: config.host,
|
|
12
12
|
port: config.port,
|
|
13
13
|
secure: config.secure,
|
package/apis/email/logList.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:
|
|
11
|
+
table: "addon_admin_email_log",
|
|
12
12
|
page: ctx.body.page,
|
|
13
13
|
limit: ctx.body.limit,
|
|
14
|
-
orderBy: [
|
|
14
|
+
orderBy: ["sendTime#DESC"]
|
|
15
15
|
});
|
|
16
16
|
|
|
17
|
-
return befly.tool.Yes(
|
|
17
|
+
return befly.tool.Yes("获取成功", result);
|
|
18
18
|
}
|
|
19
19
|
};
|
package/apis/email/send.ts
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import emailLogTable from
|
|
1
|
+
import emailLogTable from "../../tables/emailLog.json";
|
|
2
2
|
|
|
3
3
|
export default {
|
|
4
|
-
name:
|
|
4
|
+
name: "发送邮件",
|
|
5
5
|
fields: {
|
|
6
6
|
to: emailLogTable.toEmail,
|
|
7
7
|
subject: emailLogTable.subject,
|
|
8
8
|
content: {
|
|
9
|
-
name:
|
|
10
|
-
type:
|
|
9
|
+
name: "邮件内容",
|
|
10
|
+
type: "string",
|
|
11
11
|
min: 1,
|
|
12
12
|
max: 50000
|
|
13
13
|
},
|
|
14
14
|
cc: emailLogTable.ccEmail,
|
|
15
15
|
bcc: emailLogTable.bccEmail,
|
|
16
16
|
isHtml: {
|
|
17
|
-
name:
|
|
18
|
-
type:
|
|
17
|
+
name: "是否HTML",
|
|
18
|
+
type: "boolean",
|
|
19
19
|
default: true
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
|
-
required: [
|
|
22
|
+
required: ["to", "subject", "content"],
|
|
23
23
|
handler: async (befly, ctx) => {
|
|
24
24
|
if (!(befly as any).addon_admin_email) {
|
|
25
|
-
return befly.tool.No(
|
|
25
|
+
return befly.tool.No("邮件插件未加载,请检查配置");
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
const startTime = Date.now();
|
|
@@ -40,30 +40,30 @@ export default {
|
|
|
40
40
|
// 记录邮件发送日志
|
|
41
41
|
try {
|
|
42
42
|
await befly.db.insData({
|
|
43
|
-
table:
|
|
43
|
+
table: "addon_admin_email_log",
|
|
44
44
|
data: {
|
|
45
45
|
adminId: ctx.user?.id || 0,
|
|
46
|
-
username: ctx.user?.username ||
|
|
47
|
-
nickname: ctx.user?.nickname ||
|
|
46
|
+
username: ctx.user?.username || "",
|
|
47
|
+
nickname: ctx.user?.nickname || "",
|
|
48
48
|
toEmail: ctx.body.to,
|
|
49
49
|
subject: ctx.body.subject,
|
|
50
50
|
content: ctx.body.content,
|
|
51
|
-
ccEmail: ctx.body.cc ||
|
|
52
|
-
bccEmail: ctx.body.bcc ||
|
|
51
|
+
ccEmail: ctx.body.cc || "",
|
|
52
|
+
bccEmail: ctx.body.bcc || "",
|
|
53
53
|
sendTime: startTime,
|
|
54
54
|
sendResult: result.success ? 1 : 0,
|
|
55
|
-
messageId: result.messageId ||
|
|
56
|
-
failReason: result.error ||
|
|
55
|
+
messageId: result.messageId || "",
|
|
56
|
+
failReason: result.error || ""
|
|
57
57
|
}
|
|
58
58
|
});
|
|
59
59
|
} catch (logError: any) {
|
|
60
|
-
befly.logger.error({ err: logError },
|
|
60
|
+
befly.logger.error({ err: logError }, "记录邮件日志失败");
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
if (result.success) {
|
|
64
|
-
return befly.tool.Yes(
|
|
64
|
+
return befly.tool.Yes("发送成功", { messageId: result.messageId });
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
return befly.tool.No(result.error ||
|
|
67
|
+
return befly.tool.No(result.error || "发送失败");
|
|
68
68
|
}
|
|
69
69
|
};
|
package/apis/email/verify.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
export default {
|
|
2
|
-
name:
|
|
3
|
-
handler: async (befly
|
|
2
|
+
name: "验证邮件配置",
|
|
3
|
+
handler: async (befly) => {
|
|
4
4
|
if (!(befly as any).addon_admin_email) {
|
|
5
|
-
return befly.tool.No(
|
|
5
|
+
return befly.tool.No("邮件插件未加载,请检查配置");
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
const isValid = await (befly as any).addon_admin_email.verify();
|
|
9
9
|
|
|
10
10
|
if (isValid) {
|
|
11
|
-
return befly.tool.Yes(
|
|
11
|
+
return befly.tool.Yes("邮件服务配置正常");
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
return befly.tool.No(
|
|
14
|
+
return befly.tool.No("邮件服务配置异常,请检查 SMTP 设置");
|
|
15
15
|
}
|
|
16
16
|
};
|
package/apis/loginLog/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:
|
|
11
|
+
table: "addon_admin_login_log",
|
|
12
12
|
page: ctx.body.page,
|
|
13
13
|
limit: ctx.body.limit,
|
|
14
|
-
orderBy: [
|
|
14
|
+
orderBy: ["loginTime#DESC"]
|
|
15
15
|
});
|
|
16
16
|
|
|
17
|
-
return befly.tool.Yes(
|
|
17
|
+
return befly.tool.Yes("获取成功", result);
|
|
18
18
|
}
|
|
19
19
|
};
|
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
20
|
if (!role?.id) {
|
|
21
|
-
return befly.tool.No(
|
|
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,25 +35,25 @@ export default {
|
|
|
37
35
|
// 如果缓存不存在,从数据库查询
|
|
38
36
|
if (allMenus.length === 0) {
|
|
39
37
|
const result = await befly.db.getAll({
|
|
40
|
-
table:
|
|
41
|
-
orderBy: [
|
|
38
|
+
table: "addon_admin_menu",
|
|
39
|
+
orderBy: ["sort#ASC", "id#ASC"]
|
|
42
40
|
});
|
|
43
41
|
allMenus = result.lists;
|
|
44
42
|
}
|
|
45
43
|
|
|
46
44
|
if (allMenus.length === 0) {
|
|
47
|
-
return befly.tool.Yes(
|
|
45
|
+
return befly.tool.Yes("菜单为空", { lists: [] });
|
|
48
46
|
}
|
|
49
47
|
|
|
50
48
|
// 5. 根据角色权限过滤菜单
|
|
51
|
-
const menuIdSet = new Set(menuIds
|
|
52
|
-
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)));
|
|
53
51
|
|
|
54
52
|
// 6. 返回一维数组(由前端构建树形结构)
|
|
55
|
-
return befly.tool.Yes(
|
|
53
|
+
return befly.tool.Yes("获取菜单成功", { lists: authorizedMenus });
|
|
56
54
|
} catch (error: any) {
|
|
57
|
-
befly.logger.error({ err: error },
|
|
58
|
-
return befly.tool.No(
|
|
55
|
+
befly.logger.error({ err: error }, "获取用户菜单失败");
|
|
56
|
+
return befly.tool.No("获取菜单失败");
|
|
59
57
|
}
|
|
60
58
|
}
|
|
61
59
|
};
|
package/apis/menu/list.ts
CHANGED
|
@@ -1,22 +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
|
-
orderBy: [
|
|
12
|
+
table: "addon_admin_menu",
|
|
13
|
+
orderBy: ["sort#ASC", "id#ASC"]
|
|
14
14
|
});
|
|
15
15
|
|
|
16
|
-
return befly.tool.Yes(
|
|
16
|
+
return befly.tool.Yes("操作成功", { lists: menus.lists });
|
|
17
17
|
} catch (error) {
|
|
18
|
-
befly.logger.error({ err: error },
|
|
19
|
-
return befly.tool.No(
|
|
18
|
+
befly.logger.error({ err: error }, "获取菜单列表失败");
|
|
19
|
+
return befly.tool.No("操作失败");
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
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:
|
|
11
|
+
table: "addon_admin_operate_log",
|
|
12
12
|
page: ctx.body.page,
|
|
13
13
|
limit: ctx.body.limit,
|
|
14
|
-
orderBy: [
|
|
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
|
};
|