@befly-addon/admin 1.1.28 → 1.1.30

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.
Files changed (60) hide show
  1. package/apis/admin/cacheRefresh.ts +1 -4
  2. package/apis/admin/del.ts +4 -4
  3. package/apis/admin/detail.ts +8 -40
  4. package/apis/admin/ins.ts +21 -14
  5. package/apis/admin/list.ts +3 -3
  6. package/apis/admin/upd.ts +43 -8
  7. package/apis/api/all.ts +7 -3
  8. package/apis/api/list.ts +8 -17
  9. package/apis/auth/login.ts +19 -16
  10. package/apis/dict/all.ts +21 -4
  11. package/apis/dict/del.ts +7 -15
  12. package/apis/dict/detail.ts +28 -14
  13. package/apis/dict/ins.ts +34 -16
  14. package/apis/dict/items.ts +27 -0
  15. package/apis/dict/list.ts +30 -5
  16. package/apis/dict/upd.ts +51 -17
  17. package/apis/dictType/all.ts +11 -0
  18. package/apis/dictType/del.ts +32 -0
  19. package/apis/dictType/detail.ts +17 -0
  20. package/apis/dictType/ins.ts +30 -0
  21. package/apis/dictType/list.ts +24 -0
  22. package/apis/dictType/upd.ts +42 -0
  23. package/apis/email/logList.ts +2 -2
  24. package/apis/loginLog/list.ts +2 -2
  25. package/apis/menu/all.ts +1 -2
  26. package/apis/menu/list.ts +0 -1
  27. package/apis/operateLog/list.ts +2 -2
  28. package/apis/role/apiSave.ts +4 -3
  29. package/apis/role/{apiDetail.ts → apis.ts} +8 -3
  30. package/apis/role/del.ts +18 -10
  31. package/apis/role/detail.ts +0 -1
  32. package/apis/role/menuSave.ts +4 -3
  33. package/apis/role/{menuDetail.ts → menus.ts} +8 -3
  34. package/apis/role/save.ts +2 -3
  35. package/apis/sysConfig/all.ts +0 -1
  36. package/apis/sysConfig/del.ts +1 -1
  37. package/apis/sysConfig/get.ts +1 -2
  38. package/apis/sysConfig/upd.ts +1 -1
  39. package/package.json +4 -4
  40. package/tables/admin.json +0 -6
  41. package/tables/dict.json +13 -19
  42. package/tables/dictType.json +28 -0
  43. package/views/config/dict/components/edit.vue +76 -122
  44. package/views/config/dict/index.vue +76 -54
  45. package/views/config/dict/meta.json +1 -1
  46. package/views/config/dictType/components/edit.vue +106 -0
  47. package/views/config/dictType/index.vue +206 -0
  48. package/views/config/dictType/meta.json +4 -0
  49. package/views/login_1/index.vue +184 -2
  50. package/views/people/admin/components/edit.vue +5 -5
  51. package/views/permission/role/components/api.vue +3 -3
  52. package/views/permission/role/components/menu.vue +4 -4
  53. package/apis/admin/roleDetail.ts +0 -29
  54. package/apis/admin/roleSave.ts +0 -39
  55. package/apis/auth/logout.ts +0 -17
  56. package/apis/auth/register.ts +0 -43
  57. package/apis/dashboard/changelog.ts +0 -31
  58. package/views/login_1/components/emailLoginForm.vue +0 -174
  59. package/views/login_1/components/registerForm.vue +0 -175
  60. package/views/login_1/components/welcomePanel.vue +0 -61
@@ -28,7 +28,6 @@ export default {
28
28
  try {
29
29
  const apis = await befly.db.getAll({
30
30
  table: 'addon_admin_api',
31
- fields: ['id', 'name', 'path', 'method', 'description', 'addonName', 'addonTitle'],
32
31
  orderBy: ['addonName#ASC', 'path#ASC']
33
32
  });
34
33
 
@@ -43,7 +42,6 @@ export default {
43
42
  try {
44
43
  const menus = await befly.db.getAll({
45
44
  table: 'addon_admin_menu',
46
- fields: ['id', 'pid', 'name', 'path', 'icon', 'type', 'sort'],
47
45
  orderBy: ['sort#ASC', 'id#ASC']
48
46
  });
49
47
 
@@ -66,8 +64,7 @@ export default {
66
64
  // 3. 刷新角色权限缓存
67
65
  try {
68
66
  const roles = await befly.db.getAll({
69
- table: 'addon_admin_role',
70
- fields: ['id', 'name', 'code', 'menus', 'apis']
67
+ table: 'addon_admin_role'
71
68
  });
72
69
 
73
70
  // 使用 setBatch 批量缓存所有角色
package/apis/admin/del.ts CHANGED
@@ -6,18 +6,18 @@
6
6
  required: ['id'],
7
7
  handler: async (befly, ctx) => {
8
8
  // 检查管理员是否存在
9
- const admin = await befly.db.getOne({
9
+ const adminData = await befly.db.getOne({
10
10
  table: 'addon_admin_admin',
11
11
  where: { id: ctx.body.id }
12
12
  });
13
13
 
14
- if (!admin) {
14
+ if (!adminData?.id) {
15
15
  return befly.tool.No('管理员不存在');
16
16
  }
17
17
 
18
18
  // 不能删除 dev 角色的管理员
19
- if (admin.roleCode === 'dev') {
20
- return befly.tool.No('不能删除开发者账号');
19
+ if (adminData.roleCode === 'dev') {
20
+ return befly.tool.No('不能删除开发管理员');
21
21
  }
22
22
 
23
23
  // 删除管理员
@@ -1,51 +1,19 @@
1
- /**
2
- * 获取用户信息接口
3
- *
4
- * @returns 返回 admin 表的字段(不含 password)以及关联的角色信息(小驼峰格式):
5
- * - id, name, email, phone, roleId, roleCode, state
6
- * - lastLoginTime, lastLoginIp
7
- * - createdAt, updatedAt
8
- * - role: 角色完整信息(包含 menus 和 apis 权限)
9
- */
10
-
11
- export default {
12
- name: '获取用户信息',
1
+ export default {
2
+ name: '获取管理员信息',
13
3
  fields: {
14
4
  id: '@id'
15
5
  },
16
6
  handler: async (befly, ctx) => {
17
- // JWT token 中获取用户ID
18
- const userId = ctx.user?.id;
19
-
20
- if (!userId) {
21
- return befly.tool.No('未授权');
22
- }
23
-
24
- // 查询用户信息(框架自动转换为小驼峰)
25
- const admin = await befly.db.getOne({
7
+ const adminData = await befly.db.getOne({
26
8
  table: 'addon_admin_admin',
27
- where: { id: userId }
9
+ fields: ['!password'],
10
+ where: { id: ctx.user?.id }
28
11
  });
29
12
 
30
- if (!admin) {
31
- return befly.tool.No('用户不存在');
13
+ if (!adminData?.id) {
14
+ return befly.tool.No('管理员不存在');
32
15
  }
33
16
 
34
- // 查询角色信息(使用 roleCode 而非 roleId,框架自动转换为小驼峰)
35
- let roleInfo = null;
36
- if (admin.roleCode) {
37
- roleInfo = await befly.db.getOne({
38
- table: 'addon_admin_role',
39
- where: { code: admin.roleCode }
40
- });
41
- }
42
-
43
- // 返回用户信息(不包含密码,字段已是小驼峰格式)
44
- const { password: _, ...userWithoutPassword } = admin;
45
-
46
- return befly.tool.Yes('获取成功', {
47
- ...userWithoutPassword,
48
- role: roleInfo
49
- });
17
+ return befly.tool.Yes('查询成功', adminData);
50
18
  }
51
19
  };
package/apis/admin/ins.ts CHANGED
@@ -3,28 +3,37 @@
3
3
  export default {
4
4
  name: '添加管理员',
5
5
  fields: adminTable,
6
- required: ['username', 'password', 'roleId'],
6
+ required: ['username', 'password', 'roleCode'],
7
7
  handler: async (befly, ctx) => {
8
8
  // 检查用户名是否已存在
9
- if (ctx.body.username) {
10
- const existingByUsername = await befly.db.getOne({
9
+ const existingByUsername = await befly.db.getOne({
10
+ table: 'addon_admin_admin',
11
+ where: { username: ctx.body.username }
12
+ });
13
+
14
+ if (existingByUsername?.id) {
15
+ return befly.tool.No('用户名已被使用');
16
+ }
17
+
18
+ // 检查昵称是否已存在
19
+ if (ctx.body.nickname) {
20
+ const existingByNickname = await befly.db.getOne({
11
21
  table: 'addon_admin_admin',
12
- where: { username: ctx.body.username }
22
+ where: { nickname: ctx.body.nickname }
13
23
  });
14
24
 
15
- if (existingByUsername) {
16
- return befly.tool.No('用户名已被使用');
25
+ if (existingByNickname?.id) {
26
+ return befly.tool.No('昵称已被使用');
17
27
  }
18
28
  }
19
29
 
20
30
  // 查询角色信息
21
- const role = await befly.db.getOne({
31
+ const roleData = await befly.db.getOne({
22
32
  table: 'addon_admin_role',
23
- where: { id: ctx.body.roleId },
24
- columns: ['code']
33
+ where: { code: ctx.body.roleCode }
25
34
  });
26
35
 
27
- if (!role?.code) {
36
+ if (!roleData?.id) {
28
37
  return befly.tool.No('角色不存在');
29
38
  }
30
39
 
@@ -38,14 +47,12 @@ export default {
38
47
  username: ctx.body.username,
39
48
  password: hashedPassword,
40
49
  nickname: ctx.body.nickname,
41
- roleId: ctx.body.roleId,
42
- roleCode: role.code
50
+ roleCode: ctx.body.roleCode
43
51
  }
44
52
  });
45
53
 
46
54
  return befly.tool.Yes('添加成功', {
47
- id: adminId,
48
- username: ctx.body.username
55
+ id: adminId
49
56
  });
50
57
  }
51
58
  };
@@ -1,5 +1,5 @@
1
1
  export default {
2
- name: '获取管理员列表',
2
+ name: '查询管理员列表',
3
3
  fields: {
4
4
  page: '@page',
5
5
  limit: '@limit',
@@ -9,8 +9,8 @@
9
9
  handler: async (befly, ctx) => {
10
10
  const result = await befly.db.getList({
11
11
  table: 'addon_admin_admin',
12
- page: ctx.body.page || 1,
13
- limit: ctx.body.limit || 10,
12
+ page: ctx.body.page,
13
+ limit: ctx.body.limit,
14
14
  where: {
15
15
  roleCode: {
16
16
  $ne: 'dev'
package/apis/admin/upd.ts CHANGED
@@ -1,15 +1,11 @@
1
- /**
2
- * 更新管理员信息
3
- */
4
-
5
- import adminTable from '../../tables/admin.json';
1
+ import adminTable from '../../tables/admin.json';
6
2
 
7
3
  export default {
8
4
  name: '更新管理员',
9
- fields: adminTable,
5
+ fields: { id: '@id', ...adminTable },
10
6
  required: ['id'],
11
7
  handler: async (befly, ctx) => {
12
- const { id, ...updateData } = ctx.body;
8
+ const { id, username, nickname, roleCode, ...updateData } = ctx.body;
13
9
 
14
10
  // 检查管理员是否存在
15
11
  const admin = await befly.db.getOne({
@@ -21,10 +17,49 @@ export default {
21
17
  return befly.tool.No('管理员不存在');
22
18
  }
23
19
 
20
+ // 检查用户名是否已被其他管理员使用
21
+ if (username && username !== admin.username) {
22
+ const existingUsername = await befly.db.getOne({
23
+ table: 'addon_admin_admin',
24
+ where: { username, id: { $ne: id } }
25
+ });
26
+ if (existingUsername?.id) {
27
+ return befly.tool.No('用户名已被使用');
28
+ }
29
+ }
30
+
31
+ // 检查昵称是否已被其他管理员使用
32
+ if (nickname && nickname !== admin.nickname) {
33
+ const existingNickname = await befly.db.getOne({
34
+ table: 'addon_admin_admin',
35
+ where: { nickname, id: { $ne: id } }
36
+ });
37
+ if (existingNickname?.id) {
38
+ return befly.tool.No('昵称已被使用');
39
+ }
40
+ }
41
+
42
+ // 检查角色是否存在
43
+ if (roleCode && roleCode !== admin.roleCode) {
44
+ const role = await befly.db.getOne({
45
+ table: 'addon_admin_role',
46
+ where: { code: roleCode }
47
+ });
48
+ if (!role?.id) {
49
+ return befly.tool.No('角色不存在');
50
+ }
51
+ }
52
+
53
+ // 构建更新数据
54
+ const dataToUpdate: Record<string, any> = { ...updateData };
55
+ if (username) dataToUpdate.username = username;
56
+ if (nickname) dataToUpdate.nickname = nickname;
57
+ if (roleCode) dataToUpdate.roleCode = roleCode;
58
+
24
59
  // 更新管理员信息
25
60
  await befly.db.updData({
26
61
  table: 'addon_admin_admin',
27
- data: updateData,
62
+ data: dataToUpdate,
28
63
  where: { id }
29
64
  });
30
65
 
package/apis/api/all.ts CHANGED
@@ -5,14 +5,18 @@
5
5
  // 从缓存获取所有接口
6
6
  let allApis = await befly.cache.getApis();
7
7
 
8
- // 如果缓存不存在,从数据库查询
8
+ // 如果缓存不存在,从数据库查询并缓存
9
9
  if (allApis.length === 0) {
10
10
  const result = await befly.db.getAll({
11
11
  table: 'addon_admin_api',
12
- fields: ['id', 'name', 'path', 'method', 'description', 'addonName', 'addonTitle'],
13
- orderBy: ['addonName#ASC', 'path#ASC']
12
+ orderBy: ['id#ASC']
14
13
  });
15
14
  allApis = result.lists;
15
+
16
+ // 缓存到 Redis
17
+ if (allApis.length > 0) {
18
+ await befly.cache.cacheApis();
19
+ }
16
20
  }
17
21
 
18
22
  return befly.tool.Yes('操作成功', { lists: allApis });
package/apis/api/list.ts CHANGED
@@ -1,7 +1,5 @@
1
- import type { ApiRoute } from 'befly';
2
-
3
1
  export default {
4
- name: '获取接口列表(分页)',
2
+ name: '获取接口列表',
5
3
  fields: {
6
4
  page: '@page',
7
5
  limit: '@limit',
@@ -10,21 +8,14 @@ export default {
10
8
  },
11
9
  handler: async (befly, ctx) => {
12
10
  try {
13
- const { page = 1, limit = 30, keyword = '' } = ctx.body;
14
-
15
- // 构建查询条件
16
- const where: Record<string, any> = {};
17
- if (keyword) {
18
- where.$or = [{ name: { $like: `%${keyword}%` } }, { path: { $like: `%${keyword}%` } }];
19
- }
20
-
21
11
  const result = await befly.db.getList({
22
12
  table: 'addon_admin_api',
23
- fields: ['id', 'name', 'path', 'method', 'description', 'addon_name', 'addon_title'],
24
- where: where,
25
- orderBy: ['addon_name#ASC', 'path#ASC'],
26
- page: page,
27
- limit: limit
13
+ where: {
14
+ $or: ctx.body.keyword ? [{ name$like: `%${ctx.body.keyword}%` }, { path$like: `%${ctx.body.keyword}%` }] : undefined
15
+ },
16
+ orderBy: ['id#ASC'],
17
+ page: ctx.body.page,
18
+ limit: ctx.body.limit
28
19
  });
29
20
 
30
21
  return befly.tool.Yes('操作成功', result);
@@ -33,4 +24,4 @@ export default {
33
24
  return befly.tool.No('获取接口列表失败');
34
25
  }
35
26
  }
36
- } as ApiRoute;
27
+ };
@@ -12,9 +12,14 @@ export default {
12
12
  min: 3,
13
13
  max: 100
14
14
  },
15
- password: adminTable.password
15
+ password: adminTable.password,
16
+ loginType: {
17
+ name: '登录类型',
18
+ type: 'string',
19
+ regexp: '^(username|email|phone)$'
20
+ }
16
21
  },
17
- required: ['account', 'password'],
22
+ required: ['account', 'password', 'loginType'],
18
23
  handler: async (befly, ctx) => {
19
24
  // 解析 User-Agent
20
25
  const userAgent = ctx.req.headers.get('user-agent') || '';
@@ -41,12 +46,20 @@ export default {
41
46
  failReason: ''
42
47
  };
43
48
 
44
- // 查询管理员(account 匹配 username 或 email)
49
+ // 根据登录类型构建查询条件
50
+ const whereCondition: Record<string, any> = {};
51
+ if (ctx.body.loginType === 'username') {
52
+ whereCondition.username = ctx.body.account;
53
+ } else if (ctx.body.loginType === 'email') {
54
+ whereCondition.email = ctx.body.account;
55
+ } else if (ctx.body.loginType === 'phone') {
56
+ whereCondition.phone = ctx.body.account;
57
+ }
58
+
59
+ // 查询管理员
45
60
  const admin = await befly.db.getOne({
46
61
  table: 'addon_admin_admin',
47
- where: {
48
- $or: [{ username: ctx.body.account }, { email: ctx.body.account }]
49
- }
62
+ where: whereCondition
50
63
  });
51
64
 
52
65
  if (!admin?.id) {
@@ -86,16 +99,6 @@ export default {
86
99
  logData.loginResult = 1;
87
100
  await befly.db.insData({ table: 'addon_admin_login_log', data: logData });
88
101
 
89
- // 更新最后登录信息
90
- await befly.db.updData({
91
- table: 'addon_admin_admin',
92
- where: { id: admin.id },
93
- data: {
94
- lastLoginTime: Date.now(),
95
- lastLoginIp: ctx.ip || 'unknown'
96
- }
97
- });
98
-
99
102
  // 生成 JWT Token(包含核心身份信息)
100
103
  const token = await befly.jwt.sign(
101
104
  {
package/apis/dict/all.ts CHANGED
@@ -1,12 +1,29 @@
1
1
  export default {
2
2
  name: '获取所有字典',
3
3
  handler: async (befly) => {
4
- const dicts = await befly.db.getAll({
4
+ const result = await befly.db.getAll({
5
5
  table: 'addon_admin_dict',
6
- fields: ['id', 'code', 'name', 'value'],
7
- orderBy: ['id#ASC']
6
+ joins: [
7
+ {
8
+ table: 'addon_admin_dict_type',
9
+ on: 'addon_admin_dict.type_code = addon_admin_dict_type.code'
10
+ }
11
+ ],
12
+ fields: [
13
+ //
14
+ 'addon_admin_dict.id',
15
+ 'addon_admin_dict.typeCode',
16
+ 'addon_admin_dict.key',
17
+ 'addon_admin_dict.label',
18
+ 'addon_admin_dict.sort',
19
+ 'addon_admin_dict.remark',
20
+ 'addon_admin_dict.createdAt',
21
+ 'addon_admin_dict.updatedAt',
22
+ 'addon_admin_dict_type.name AS typeName'
23
+ ],
24
+ orderBy: ['addon_admin_dict.sort#ASC', 'addon_admin_dict.id#ASC']
8
25
  });
9
26
 
10
- return befly.tool.Yes('操作成功', { lists: dicts.lists });
27
+ return befly.tool.Yes('获取成功', result);
11
28
  }
12
29
  };
package/apis/dict/del.ts CHANGED
@@ -1,21 +1,13 @@
1
1
  export default {
2
2
  name: '删除字典',
3
- fields: {
4
- id: '@id'
5
- },
3
+ fields: { '@id': true },
4
+ required: ['id'],
6
5
  handler: async (befly, ctx) => {
7
- try {
8
- await befly.db.delData({
9
- table: 'addon_admin_dict',
10
- where: {
11
- id: ctx.body.id
12
- }
13
- });
6
+ await befly.db.delData({
7
+ table: 'addon_admin_dict',
8
+ where: { id: ctx.body.id }
9
+ });
14
10
 
15
- return befly.tool.Yes('操作成功');
16
- } catch (error) {
17
- befly.logger.error({ err: error }, '删除字典失败');
18
- return befly.tool.No('操作失败');
19
- }
11
+ return befly.tool.Yes('删除成功');
20
12
  }
21
13
  };
@@ -1,22 +1,36 @@
1
1
  export default {
2
2
  name: '获取字典详情',
3
- fields: {
4
- id: '@id'
5
- },
3
+ fields: { '@id': true },
4
+ required: ['id'],
6
5
  handler: async (befly, ctx) => {
7
- try {
8
- const dict = await befly.db.getDetail({
9
- table: 'addon_admin_dict',
10
- fields: ['id', 'name', 'code', 'value', 'sort', 'pid', 'description', 'state', 'created_at', 'updated_at'],
11
- where: {
12
- id: ctx.body.id
6
+ const dict = await befly.db.getOne({
7
+ table: 'addon_admin_dict',
8
+ joins: [
9
+ //
10
+ {
11
+ table: 'addon_admin_dict_type',
12
+ on: 'addon_admin_dict.type_code = addon_admin_dict_type.code'
13
13
  }
14
- });
14
+ ],
15
+ fields: [
16
+ //
17
+ 'addon_admin_dict.id',
18
+ 'addon_admin_dict.typeCode',
19
+ 'addon_admin_dict.key',
20
+ 'addon_admin_dict.label',
21
+ 'addon_admin_dict.sort',
22
+ 'addon_admin_dict.remark',
23
+ 'addon_admin_dict.createdAt',
24
+ 'addon_admin_dict.updatedAt',
25
+ 'addon_admin_dict_type.name AS typeName'
26
+ ],
27
+ where: { 'addon_admin_dict.id': ctx.body.id }
28
+ });
15
29
 
16
- return befly.tool.Yes('操作成功', dict);
17
- } catch (error: any) {
18
- befly.logger.error({ err: error }, '获取字典详情失败');
19
- return befly.tool.No('操作失败');
30
+ if (!dict?.id) {
31
+ return befly.tool.No('字典项不存在');
20
32
  }
33
+
34
+ return befly.tool.Yes('获取成功', dict);
21
35
  }
22
36
  };
package/apis/dict/ins.ts CHANGED
@@ -3,24 +3,42 @@
3
3
  export default {
4
4
  name: '添加字典',
5
5
  fields: adminDictTable,
6
+ required: ['typeCode', 'key', 'label'],
6
7
  handler: async (befly, ctx) => {
7
- try {
8
- const dictId = await befly.db.insData({
9
- table: 'addon_admin_dict',
10
- data: {
11
- name: ctx.body.name,
12
- code: ctx.body.code,
13
- value: ctx.body.value,
14
- sort: ctx.body.sort,
15
- pid: ctx.body.pid,
16
- description: ctx.body.description
17
- }
18
- });
8
+ // 验证 typeCode 是否存在
9
+ const dictType = await befly.db.getOne({
10
+ table: 'addon_admin_dict_type',
11
+ where: { code: ctx.body.typeCode }
12
+ });
19
13
 
20
- return befly.tool.Yes('操作成功', { id: dictId });
21
- } catch (error) {
22
- befly.logger.error({ err: error }, '添加字典失败');
23
- return befly.tool.No('操作失败');
14
+ if (!dictType?.id) {
15
+ return befly.tool.No('字典类型不存在');
24
16
  }
17
+
18
+ // 检查 typeCode+key 是否已存在
19
+ const existing = await befly.db.getOne({
20
+ table: 'addon_admin_dict',
21
+ where: {
22
+ typeCode: ctx.body.typeCode,
23
+ key: ctx.body.key
24
+ }
25
+ });
26
+
27
+ if (existing?.id) {
28
+ return befly.tool.No('该类型下已存在相同的键名');
29
+ }
30
+
31
+ const dictId = await befly.db.insData({
32
+ table: 'addon_admin_dict',
33
+ data: {
34
+ typeCode: ctx.body.typeCode,
35
+ key: ctx.body.key,
36
+ label: ctx.body.label,
37
+ sort: ctx.body.sort,
38
+ remark: ctx.body.remark
39
+ }
40
+ });
41
+
42
+ return befly.tool.Yes('添加成功', { id: dictId });
25
43
  }
26
44
  };
@@ -0,0 +1,27 @@
1
+ export default {
2
+ name: '获取字典项列表',
3
+ fields: {
4
+ typeCode: { type: 'string', label: '类型代码', required: true }
5
+ },
6
+ required: ['typeCode'],
7
+ handler: async (befly, ctx) => {
8
+ // 验证 typeCode 是否存在
9
+ const dictType = await befly.db.getOne({
10
+ table: 'addon_admin_dict_type',
11
+ where: { code: ctx.body.typeCode }
12
+ });
13
+
14
+ if (!dictType?.id) {
15
+ return befly.tool.No('字典类型不存在');
16
+ }
17
+
18
+ // 获取该类型下的所有字典项
19
+ const items = await befly.db.getAll({
20
+ table: 'addon_admin_dict',
21
+ where: { typeCode: ctx.body.typeCode },
22
+ orderBy: ['sort#ASC', 'id#ASC']
23
+ });
24
+
25
+ return befly.tool.Yes('获取成功', items);
26
+ }
27
+ };
package/apis/dict/list.ts CHANGED
@@ -3,18 +3,43 @@
3
3
  fields: {
4
4
  page: '@page',
5
5
  limit: '@limit',
6
- keyword: '@keyword',
7
- state: '@state'
6
+ typeCode: { type: 'string', label: '类型代码' },
7
+ keyword: '@keyword'
8
8
  },
9
9
  handler: async (befly, ctx) => {
10
+ const where: any = {};
11
+ if (ctx.body.typeCode) where['addon_admin_dict.typeCode'] = ctx.body.typeCode;
12
+ if (ctx.body.keyword) {
13
+ where.$or = [{ 'addon_admin_dict.key$like': `%${ctx.body.keyword}%` }, { 'addon_admin_dict.label$like': `%${ctx.body.keyword}%` }];
14
+ }
15
+
10
16
  const result = await befly.db.getList({
11
17
  table: 'addon_admin_dict',
12
- fields: ['id', 'name', 'code', 'value', 'sort', 'pid', 'description', 'state', 'created_at', 'updated_at'],
18
+ joins: [
19
+ //
20
+ {
21
+ table: 'addon_admin_dict_type',
22
+ on: 'addon_admin_dict.type_code = addon_admin_dict_type.code'
23
+ }
24
+ ],
25
+ fields: [
26
+ //
27
+ 'addon_admin_dict.id',
28
+ 'addon_admin_dict.typeCode',
29
+ 'addon_admin_dict.key',
30
+ 'addon_admin_dict.label',
31
+ 'addon_admin_dict.sort',
32
+ 'addon_admin_dict.remark',
33
+ 'addon_admin_dict.createdAt',
34
+ 'addon_admin_dict.updatedAt',
35
+ 'addon_admin_dict_type.name AS typeName'
36
+ ],
37
+ where: where,
13
38
  page: ctx.body.page,
14
39
  limit: ctx.body.limit,
15
- orderBy: ['sort#ASC', 'id#ASC']
40
+ orderBy: ['addon_admin_dict.sort#ASC', 'addon_admin_dict.id#ASC']
16
41
  });
17
42
 
18
- return befly.tool.Yes('操作成功', result);
43
+ return befly.tool.Yes('获取成功', result);
19
44
  }
20
45
  };