@gingkoo/base-server 0.0.4-alpha.42 → 0.0.4-alpha.44

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 (48) hide show
  1. package/backend/common/page_engine.js +13 -31
  2. package/backend/common/services/user.js +14 -10
  3. package/backend/common/wechat/routers/auth.js +4 -2
  4. package/backend/routers/idm.js +7 -6
  5. package/backend/routers/team/routers/membermanage.js +28 -34
  6. package/backend/views/members_manage/index.xml +17 -17
  7. package/dist/base-assets/css/index-cef99094.css.gz +0 -0
  8. package/dist/base-assets/js/blockDiagram-38ab4fdb-bc9e873e.js.gz +0 -0
  9. package/dist/base-assets/js/c4Diagram-3d4e48cf-78beb511.js.gz +0 -0
  10. package/dist/base-assets/js/clike-18da258f.js.gz +0 -0
  11. package/dist/base-assets/js/clojure-95e5d8b6.js.gz +0 -0
  12. package/dist/base-assets/js/css-1962435d.js.gz +0 -0
  13. package/dist/base-assets/js/edges-e0da2a9e-afcbcc02.js.gz +0 -0
  14. package/dist/base-assets/js/erDiagram-9861fffd-3bbaf02b.js.gz +0 -0
  15. package/dist/base-assets/js/flowDb-956e92f1-eb71c116.js.gz +0 -0
  16. package/dist/base-assets/js/flowDiagram-66a62f08-0638f338.js.gz +0 -0
  17. package/dist/base-assets/js/flowchart-elk-definition-4a651766-c40d3260.js.gz +0 -0
  18. package/dist/base-assets/js/ganttDiagram-c361ad54-c6068d28.js.gz +0 -0
  19. package/dist/base-assets/js/gherkin-11c8171e.js.gz +0 -0
  20. package/dist/base-assets/js/gitGraphDiagram-72cf32ee-af757237.js.gz +0 -0
  21. package/dist/base-assets/js/graph-b6648ef9.js.gz +0 -0
  22. package/dist/base-assets/js/idl-217b7099.js.gz +0 -0
  23. package/dist/base-assets/js/index-2df38d93.js.gz +0 -0
  24. package/dist/base-assets/js/index-3862675e-afad9ad1.js.gz +0 -0
  25. package/dist/base-assets/js/index-813f1f5c.js.gz +0 -0
  26. package/dist/base-assets/js/javascript-d3264b01.js.gz +0 -0
  27. package/dist/base-assets/js/journeyDiagram-49397b02-098f1f31.js.gz +0 -0
  28. package/dist/base-assets/js/katex-bdfb938e.js.gz +0 -0
  29. package/dist/base-assets/js/layout-8db5bba1.js.gz +0 -0
  30. package/dist/base-assets/js/markdown-4d4d4726.js.gz +0 -0
  31. package/dist/base-assets/js/mermaid.core-29700be8.js.gz +0 -0
  32. package/dist/base-assets/js/mindmap-definition-fc14e90a-ddbeea5b.js.gz +0 -0
  33. package/dist/base-assets/js/perl-eb9263df.js.gz +0 -0
  34. package/dist/base-assets/js/php-9649f957.js.gz +0 -0
  35. package/dist/base-assets/js/pieDiagram-8a3498a8-8b0d9a47.js.gz +0 -0
  36. package/dist/base-assets/js/quadrantDiagram-120e2f19-72c91a15.js.gz +0 -0
  37. package/dist/base-assets/js/react-cropper.es-3391d3b8.js.gz +0 -0
  38. package/dist/base-assets/js/requirementDiagram-deff3bca-2b7c51a8.js.gz +0 -0
  39. package/dist/base-assets/js/sankeyDiagram-04a897e0-96658954.js.gz +0 -0
  40. package/dist/base-assets/js/sequenceDiagram-704730f1-3b8a4b2e.js.gz +0 -0
  41. package/dist/base-assets/js/soy-d7291f57.js.gz +0 -0
  42. package/dist/base-assets/js/styles-6aaf32cf-8b01e7c3.js.gz +0 -0
  43. package/dist/base-assets/js/styles-9a916d00-6c10757a.js.gz +0 -0
  44. package/dist/base-assets/js/stylus-e695a28b.js.gz +0 -0
  45. package/dist/base-assets/js/timeline-definition-85554ec2-2969d5a0.js.gz +0 -0
  46. package/dist/base-assets/js/verilog-6026db83.js.gz +0 -0
  47. package/dist/base-assets/js/xychartDiagram-e933f94c-a111880f.js.gz +0 -0
  48. package/package.json +1 -1
@@ -59,42 +59,24 @@ function splitStr(str, delimiter = ',') {
59
59
  function handleFields(fields) {
60
60
  if (!Array.isArray(fields)) return [];
61
61
  return fields.map((item) => {
62
- let {
63
- id,
64
- component,
65
- clearable,
66
- required,
67
- multiple,
68
- searchable,
69
- showValue,
70
- block,
71
- isFilter,
72
- ...rest
73
- } = item.attributes();
62
+ let { id, component, isFilter, ...rest } = item.attributes();
63
+
64
+ // 处理 rest boolean 类型
65
+ let restData = {};
66
+ Object.keys(rest).forEach((key) => {
67
+ let val = rest[key];
68
+ if (val && typeof val === 'string' && ['true', 'false'].includes(val)) {
69
+ restData[key] = isbool(val);
70
+ } else {
71
+ restData[key] = val;
72
+ }
73
+ });
74
74
 
75
75
  let field = {
76
76
  type: typeMap[component] || component,
77
77
  name: id,
78
- ...rest,
78
+ ...restData,
79
79
  };
80
- if (clearable) {
81
- field.clearable = isbool(clearable);
82
- }
83
- if (required) {
84
- field.required = isbool(required);
85
- }
86
- if (multiple) {
87
- field.multiple = isbool(multiple);
88
- }
89
- if (searchable) {
90
- field.searchable = isbool(searchable);
91
- }
92
- if (block) {
93
- field.block = isbool(block);
94
- }
95
- if (showValue) {
96
- field.showValue = isbool(showValue);
97
- }
98
80
 
99
81
  // 是否支持搜索
100
82
  if (isFilter) {
@@ -125,8 +125,8 @@ const userService = {
125
125
  * @param {*} sqlParams
126
126
  */
127
127
  async getUsersBySql(filters, pageInfo, sql, sqlParams) {
128
- let pageSize = pageInfo.pageSize;
129
- let pageIndex = pageInfo.pageIndex;
128
+ let { pageSize, pageIndex, orderBy, orderDir } = pageInfo;
129
+
130
130
  let spSqlOps = {};
131
131
  if (filters['USER_NAME']) {
132
132
  spSqlOps['USER_NAME'] = 'like';
@@ -138,7 +138,12 @@ const userService = {
138
138
  sqlParams = sqlParams.concat(queryParam.params);
139
139
  }
140
140
 
141
- sql = sql + ' order by a.USER_ID DESC';
141
+ if (orderBy) {
142
+ sql += ` order by a.${orderBy} ${orderDir.toLocaleUpperCase()}`;
143
+ } else {
144
+ sql += ' order by DATA_CRT_TIME DESC';
145
+ }
146
+
142
147
  let dbResult = await pageQuery(sql, sqlParams, pageSize, pageIndex);
143
148
 
144
149
  return dbResult;
@@ -154,8 +159,7 @@ const userService = {
154
159
  async getUserList(filters, pageInfo) {
155
160
  //查询用列表最多20条
156
161
  pageInfo.pageSize = 20;
157
- let sql =
158
- "select USER_ID, USER_NAME, DEPT_NO, AVATAR from IDM_USERS a where a.ORG_ID=? and STATUS='00'";
162
+ let sql = `select * from ${entity.IDM_USERS} a where a.ORG_ID=? and USER_STATUS='normal'`;
159
163
  let dbResult = await this.getUsersBySql(filters, pageInfo, sql, [global.orgid]);
160
164
  return dbResult;
161
165
  },
@@ -169,7 +173,7 @@ const userService = {
169
173
  */
170
174
  async getTeamUsers(userid, filters, pageInfo) {
171
175
  let sql =
172
- "select USER_ID, USER_NAME, USER_TYPE, EN_NAME, NIKE_NAME, GENDER, DEPT_NO, AVATAR, ADDR, POSITION, STATUS, EDUCATION, ADMISSION_DATE, JOINED_DATE from IDM_USERS a where a.ORG_ID=? and STATUS='00' and USER_STATUS='normal'";
176
+ "select USER_ID, USER_NAME, USER_TYPE, EN_NAME, NIKE_NAME, GENDER, DEPT_NO, AVATAR, ADDR, POSITION, STATUS, EDUCATION, ADMISSION_DATE, JOINED_DATE from IDM_USERS a where a.ORG_ID=? and USER_STATUS='normal'";
173
177
  sql =
174
178
  sql +
175
179
  ' and ((a.DEPT_NO in (select DEPT_NO from IDM_DEPTS y where y.ORG_ID=a.ORG_ID and y.DEPT_LEADER=?))';
@@ -280,13 +284,13 @@ const userService = {
280
284
  let params =
281
285
  memberType[1] === 'GROUP_ID'
282
286
  ? { ORG_ID: global.orgid, GROUP_ID: teamId, USER_ID: userid, STATUS: '00' }
283
- : { ORG_ID: global.orgid, DEPT_ID: teamId, USER_ID: userid, STATUS: 'normal' };
287
+ : { ORG_ID: global.orgid, DEPT_ID: teamId, USER_ID: userid, STATUS: '00' };
284
288
  sqlResult = insertSqlBuilder(memberType[0], params);
285
289
  } else {
286
290
  let params =
287
291
  memberType[1] === 'GROUP_ID'
288
292
  ? { GROUP_ID: teamId, STATUS: '00' }
289
- : { DEPT_ID: teamId, STAUTS: 'normal' };
293
+ : { DEPT_ID: teamId, STAUTS: '00' };
290
294
  sqlResult = updateSqlBuilder(memberType[0], params, {
291
295
  ORG_ID: global.orgid,
292
296
  USER_ID: userid,
@@ -354,7 +358,7 @@ const userService = {
354
358
 
355
359
  async getMember(memberType, id, filters, pageInfo) {
356
360
  let { orderBy, orderDir, pageSize, pageIndex } = pageInfo;
357
- let sql = `select * from ${entity.IDM_USERS} a where USER_ID in (select USER_ID from ${memberType[0]} where ${memberType[1]}=? and STATUS ='00 '`;
361
+ let sql = `select * from ${entity.IDM_USERS} a where a.USER_ID in (select USER_ID from ${memberType[0]} where ${memberType[1]}=? and STATUS ='00 '`;
358
362
  let sqlParams = [id];
359
363
  delete filters['cat'];
360
364
  let spSqlOps = {};
@@ -435,7 +439,7 @@ const userService = {
435
439
 
436
440
  async getMemberlist(memberType, id, filters, pageInfo) {
437
441
  let { orderBy, orderDir, pageSize, pageIndex } = pageInfo;
438
- let sql = `select * from ${entity.IDM_USERS} a where USER_ID in (select USER_ID from ${memberType[0]} where ${memberType[1]}=? and STATUS in ('00', 'normal')) and USER_STATUS='normal'`;
442
+ let sql = `select * from ${entity.IDM_USERS} a where a.USER_ID in (select USER_ID from ${memberType[0]} where ${memberType[1]}=?) and USER_STATUS='normal'`;
439
443
  let sqlParams = [id];
440
444
  delete filters['cat'];
441
445
  delete filters['type'];
@@ -170,7 +170,8 @@ router.get('/oauth/qywx/callback', async function (req, res) {
170
170
  USER_ID: userinfo['USER_NAME'],
171
171
  USER_NAME: userinfo['STAFF_NAME'],
172
172
  DEPT_NO: userinfo['GROUP_ID'],
173
- STATUS: 'normal',
173
+ STATUS: '00',
174
+ USER_STATUS: 'normal',
174
175
  };
175
176
  let oauth = {
176
177
  USER_ID: userinfo['USER_NAME'],
@@ -203,7 +204,8 @@ router.get('/gettoken', async function (req, res) {
203
204
  USER_ID: userinfo['USER_NAME'],
204
205
  USER_NAME: userinfo['STAFF_NAME'],
205
206
  DEPT_NO: userinfo['GROUP_ID'],
206
- STATUS: 'normal',
207
+ STATUS: '00',
208
+ USER_STATUS: 'normal',
207
209
  };
208
210
  let oauth = {
209
211
  USER_ID: userinfo['USER_NAME'],
@@ -101,7 +101,6 @@ function renderGroup(data, idmGroupData) {
101
101
  creatable: false,
102
102
  removable: true,
103
103
  editable: true,
104
- icon: 'teams',
105
104
  });
106
105
  });
107
106
  }
@@ -112,6 +111,7 @@ function renderGroup(data, idmGroupData) {
112
111
  newData.push({
113
112
  ...cur,
114
113
  children: renderGroupTree(cur.children, idmGroupData, DEPT_NO),
114
+ icon: 'Folder2Open',
115
115
  });
116
116
  } else {
117
117
  if (filter.length > 0) {
@@ -122,15 +122,16 @@ function renderGroup(data, idmGroupData) {
122
122
  creatable: false,
123
123
  removable: true,
124
124
  editable: true,
125
- icon: 'teams',
125
+ icon: 'UserTeams',
126
126
  };
127
127
  });
128
128
  newData.push({
129
129
  ...cur,
130
130
  children: filterChildren,
131
+ icon: 'Folder2Open',
131
132
  });
132
133
  } else {
133
- newData.push({ ...cur });
134
+ newData.push({ ...cur, icon: 'Folder2Open' });
134
135
  }
135
136
  }
136
137
  });
@@ -148,7 +149,7 @@ function renderGroupTree(data, idmGroupData, DEPTNO) {
148
149
  creatable: false,
149
150
  removable: true,
150
151
  editable: true,
151
- icon: 'teams',
152
+ icon: 'UserTeams',
152
153
  };
153
154
  });
154
155
  newData = newData.concat(childrenFilter);
@@ -167,7 +168,7 @@ function renderGroupTree(data, idmGroupData, DEPTNO) {
167
168
  creatable: false,
168
169
  removable: true,
169
170
  editable: true,
170
- icon: 'teams',
171
+ icon: 'UserTeams',
171
172
  };
172
173
  });
173
174
  return newData.push({
@@ -200,7 +201,7 @@ router.get('/api/orgs', async function (req, res) {
200
201
  creatable: true,
201
202
  removable: false,
202
203
  editable: false,
203
- cannotSelect: true,
204
+ cannotSelect: false,
204
205
  children: Tree(deptData, false),
205
206
  },
206
207
  ],
@@ -9,48 +9,42 @@ const memberService = require('../services/member');
9
9
  const router = express.Router();
10
10
 
11
11
  /**
12
- * @api {get} /team/member 获取团队成员
13
- * @apiName GetProject
14
- * @apiGroup team
15
- * @apiDescription 获取团队成员
16
- * @apiVersion 1.0.0
17
- *
12
+ * 获取团队成员
13
+ * @query {
14
+ * cat: string; BR01
15
+ * type: string; 部门 DEPT 用户组 GROUP
16
+ * parentId: string; /1
17
+ * }
18
18
  */
19
19
  router.get('/', async function (req, res) {
20
20
  let queryParams = parseQueryParams(req.query, ['ORG_ID', 'RANGE'], true, 50);
21
21
  let params = queryParams.params;
22
22
  const { cat, type } = req.query;
23
23
  if (!cat || !type) return res.sendErr('参数错误');
24
- let realType =
25
- type === idmLevelType.IDM_LENVEL_TYPE.DEPT
26
- ? [entity.IDM_USERS, 'DEPT_NO']
27
- : [entity.IDM_GROUP_MEMBERS, 'GROUP_ID'];
28
- let team =
29
- type === idmLevelType.IDM_LENVEL_TYPE.DEPT
30
- ? [entity.IDM_DEPTS, 'DEPT_NO']
31
- : [entity.IDM_GROUPS, 'GROUP_ID'];
24
+ let result = {};
25
+ if (cat !== 'GINGKOO') {
26
+ let realType =
27
+ type === idmLevelType.IDM_LENVEL_TYPE.DEPT
28
+ ? [entity.IDM_USERS, 'DEPT_NO']
29
+ : [entity.IDM_GROUP_MEMBERS, 'GROUP_ID'];
30
+ let team =
31
+ type === idmLevelType.IDM_LENVEL_TYPE.DEPT
32
+ ? [entity.IDM_DEPTS, 'DEPT_NO']
33
+ : [entity.IDM_GROUPS, 'GROUP_ID'];
32
34
 
33
- let teamInfo = await userService.getTeamInfo(team, cat);
34
- let isHasLeader = params.LEADER;
35
- delete params.LEADER;
36
- let result = await userService.getMemberlist(realType, cat, params, queryParams.pageInfo);
37
- if (!teamInfo) return res.sendErr('没有找到数据');
38
- let leader = teamInfo['DEPT_LEADER'] || teamInfo['GROUP_LEADER'];
39
- result.content = result.content.map((user) => {
40
- return { ...user, LEADER: user.USER_ID === leader ? '负责人' : '' };
41
- });
42
- if (isHasLeader) {
43
- let results = [];
44
- result.content.map((user) => {
45
- if (user.LEADER == '负责人') {
46
- result.content.map((user) => {
47
- if (user.USER_NAME.indexOf(isHasLeader) > -1) {
48
- results.push(user);
49
- }
50
- });
51
- }
35
+ let teamInfo = await userService.getTeamInfo(team, cat);
36
+ if (!teamInfo) return res.sendErr('没有找到数据');
37
+ let leader = teamInfo['DEPT_LEADER'] || teamInfo['GROUP_LEADER'];
38
+
39
+ result = await userService.getMemberlist(realType, cat, params, queryParams.pageInfo);
40
+ result.content = result.content.map((user) => {
41
+ return { ...user, LEADER: user.USER_ID === leader ? '负责人' : '' };
52
42
  });
53
- result.content = results;
43
+ } else {
44
+ delete params['cat'];
45
+ delete params['type'];
46
+ delete params['parentId'];
47
+ result = await userService.getUserList(params, queryParams.pageInfo);
54
48
  }
55
49
 
56
50
  res.sendOk(result);
@@ -3,37 +3,37 @@
3
3
  <Fields>
4
4
  <element id="USER_ID" component="dropdown" label="成员ID" source="$dict.USER_LIST" clearable="true" size="sm" multiple="true" labelTpl="${label}"/>
5
5
  <element id="USER_NAME" component="text" label="姓名" disabled="true" />
6
- <element id="LEADER" component="text" label="负责人" />
6
+ <element id="LEADER" component="text" label="负责人" isFilter="false" />
7
7
  <element id="POSITION" component="dropdown" label="职务" source="$dict.IDM_USER_POSITION" />
8
8
  <element id="DEPT_NO" component="dropdown" label="部门" searchable="true" source="$dict.DEPT_LIST" />
9
9
  <element id="MOBILE" component="text" label="手机" />
10
10
  <element id="EMAIL" component="text" label="邮箱" />
11
11
  <element id="USER_TYPE" component="dropdown" label="成员类型" source="$dict.IDM_USER_TYPE" />
12
12
  <element id="EN_NAME" component="text" label="英文名称" />
13
- <element id="PASSWD" component="text" label="密码" />
14
- <element id="NIKE_NAME" component="text" label="昵称" />
13
+ <element id="PASSWD" component="text" label="密码" isFilter="false" />
14
+ <element id="NIKE_NAME" component="text" label="昵称" />
15
15
  <element id="GENDER" component="dropdown" label="性别" source="$dict.IDM_USER_GENDER" />
16
- <element id="MOBILE" component="text" label="手机号" />
17
- <element id="TEL" component="text" label="电话号" />
18
- <element id="TITLE" component="text" label="头衔" />
19
- <element id="AVATAR" component="input-image" label="头像" accept=".jpg,.png,.jpeg" action='/fss/upload/attachment' />
20
- <element id="ADDR" component="text" label="地址" />
21
- <element id="STAFF_NO" component="text" label="员工编号" />
16
+ <element id="MOBILE" component="text" label="手机号" />
17
+ <element id="TEL" component="text" label="电话号" />
18
+ <element id="TITLE" component="text" label="头衔" />
19
+ <element id="AVATAR" component="input-image" label="头像" accept=".jpg,.png,.jpeg" action='/fss/upload/attachment' isFilter="false"/>
20
+ <element id="ADDR" component="text" label="地址" isFilter="false" />
21
+ <element id="STAFF_NO" component="text" label="员工编号" />
22
22
  <element id="USER_STATUS" component="dropdown" label="状态" source="$dict.IDM_USER_STATUS" />
23
- <element id="USER_GID" component="text" label="成员全局ID" />
23
+ <element id="USER_GID" component="text" label="成员全局ID" isFilter="false" />
24
24
  <element id="EDUCATION" component="dropdown" label="学历" source="$dict.IDM_EDUCATION" />
25
- <element id="SCHOOL" component="text" label="毕业学校" />
26
- <element id="ADMISSION_DATE" component="date" label="毕业日期" />
27
- <element id="JOINED_DATE" component="date" label="入职日期" />
28
- <element id="LEAVE_DATE" component="date" label="离职日期" />
25
+ <element id="SCHOOL" component="text" label="毕业学校" />
26
+ <element id="ADMISSION_DATE" component="date" label="毕业日期" isFilter="false"/>
27
+ <element id="JOINED_DATE" component="date" label="入职日期" />
28
+ <element id="LEAVE_DATE" component="date" label="离职日期" />
29
29
  </Fields>
30
30
 
31
31
  <Operations>
32
32
  <!-- <element id="BTN_ADD" type="button" label="新增团队成员" level="primary" actionType="add" icon="plus" size="sm" title="新增成员"/> -->
33
33
  <!-- <element id="BTN_DEL" type="button" label="删除" level="danger" actionType="del" /> -->
34
34
  <element id="BTN_MOD" type="button" label="修改" level="" actionType="edit" title="成员修改" feature="edit" />
35
- <element id="BTN_BATCHDEL" type="button" label="批量删除" actionType="batch" size="sm" api="put:/space/team/membermanage/batchdel" feature="del" />
36
- <element id="BTN_LEADER" type="button" label="设置负责人" actionType="batch" size="sm" api="post:/space/team/membermanage/api/group/leader" feature="edit" />
35
+ <element id="BTN_BATCHDEL" type="button" label="批量删除" actionType="batch" size="sm" api="put:/space/team/membermanage/batchdel" feature="del" visibleOn="'${cat}' !== 'GINGKOO'"/>
36
+ <element id="BTN_LEADER" type="button" label="设置负责人" actionType="batch" size="sm" api="post:/space/team/membermanage/api/group/leader" feature="edit" visibleOn="'${cat}' !== 'GINGKOO'"/>
37
37
  </Operations>
38
38
 
39
39
  <Table rowKey="USER_ID" autoFillHeight="true"
@@ -56,7 +56,7 @@
56
56
  <TableBody>
57
57
  <column id="__check" />
58
58
  <column id="USER_NAME" width="90"/>
59
- <column id="LEADER" width="60" sortable="true" filterable="true"/>
59
+ <column id="LEADER" width="60" />
60
60
  <column id="DEPT_NO" width="90" sortable="true" filterable="true"/>
61
61
  <column id="MOBILE" width="120"/>
62
62
  <column id="EMAIL" width="120"/>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gingkoo/base-server",
3
- "version": "0.0.4-alpha.42",
3
+ "version": "0.0.4-alpha.44",
4
4
  "description": "",
5
5
  "main": "app.js",
6
6
  "scripts": {