@gingkoo/base-server 0.0.1-alpha.0 → 0.0.1-alpha.10

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 (122) hide show
  1. package/README.md +4 -0
  2. package/app.js +41 -40
  3. package/backend/common/entity.js +55 -0
  4. package/backend/common/enum.js +247 -0
  5. package/backend/common/fss/index.js +18 -0
  6. package/backend/common/fss/routers/attachment.js +45 -0
  7. package/backend/common/fss/routers/download.js +43 -0
  8. package/backend/common/fss/routers/import_export.js +113 -0
  9. package/backend/common/fss/routers/resources.js +149 -0
  10. package/backend/common/fss/routers/upload.js +81 -0
  11. package/backend/common/fss/services/import_export.js +159 -0
  12. package/backend/common/fss/services/index.js +92 -0
  13. package/backend/common/fss/utils.js +39 -0
  14. package/backend/common/ginfo/config.js +5 -0
  15. package/backend/common/ginfo/index.js +62 -0
  16. package/backend/common/index_template.html +28 -0
  17. package/backend/common/logger/index.js +96 -0
  18. package/backend/common/mapping.js +128 -0
  19. package/backend/common/middleware/auth.js +109 -0
  20. package/backend/common/middleware/cors.js +13 -0
  21. package/backend/common/middleware/response.js +25 -0
  22. package/backend/common/page_engine.js +487 -0
  23. package/backend/common/schedule.js +45 -0
  24. package/backend/common/services/dataCombine.js +67 -0
  25. package/backend/common/services/dept.js +37 -0
  26. package/backend/common/services/dict.js +488 -0
  27. package/backend/common/services/email.js +49 -0
  28. package/backend/common/services/generalConfig.js +137 -0
  29. package/backend/common/services/login.js +18 -0
  30. package/backend/common/services/notice.js +260 -0
  31. package/backend/common/services/permission.js +500 -0
  32. package/backend/common/services/roles.js +57 -0
  33. package/backend/common/services/send-notice.js +86 -0
  34. package/backend/common/services/task.js +259 -0
  35. package/backend/common/services/user.js +673 -0
  36. package/backend/common/socket.js +18 -0
  37. package/backend/common/sse/index.js +81 -0
  38. package/backend/common/sse/router.js +30 -0
  39. package/backend/common/task.js +75 -0
  40. package/backend/common/wechat/index.js +9 -0
  41. package/backend/common/wechat/routers/auth.js +238 -0
  42. package/{modules/user/frontend → backend/common/wechat/routers}/index.html +14 -7
  43. package/backend/common/wechat/services/auth.js +209 -0
  44. package/backend/common/wechat/services/notice.js +171 -0
  45. package/backend/config/index.js +61 -0
  46. package/backend/config/path.js +3 -0
  47. package/backend/router.js +100 -0
  48. package/backend/routers/app.js +222 -0
  49. package/backend/routers/automate.js +276 -0
  50. package/backend/routers/dict.js +370 -0
  51. package/backend/routers/email.js +85 -0
  52. package/backend/routers/generalConfig.js +276 -0
  53. package/backend/routers/idm.js +245 -0
  54. package/backend/routers/module.js +357 -0
  55. package/backend/routers/notice.js +138 -0
  56. package/backend/routers/pages.js +46 -0
  57. package/backend/routers/permission.js +985 -0
  58. package/backend/routers/setting.js +184 -0
  59. package/backend/routers/team/index.js +22 -0
  60. package/backend/routers/team/routers/mapping.js +29 -0
  61. package/backend/routers/team/routers/member.js +72 -0
  62. package/backend/routers/team/routers/membermanage.js +289 -0
  63. package/backend/routers/team/routers/pages.js +47 -0
  64. package/backend/routers/team/routers/roles.js +92 -0
  65. package/backend/routers/team/routers/teaminfo.js +27 -0
  66. package/backend/routers/team/routers/usergroup.js +213 -0
  67. package/backend/routers/team/services/mapping.js +101 -0
  68. package/backend/routers/team/services/member.js +206 -0
  69. package/backend/routers/team/services/roles.js +71 -0
  70. package/backend/routers/team/services/teaminfo.js +20 -0
  71. package/backend/routers/team/services/usergroup.js +128 -0
  72. package/backend/routers/user.js +436 -0
  73. package/backend/services/automate.js +60 -0
  74. package/backend/services/config.js +14 -0
  75. package/backend/services/module.js +298 -0
  76. package/backend/services/permission.js +192 -0
  77. package/backend/services/services.js +115 -0
  78. package/backend/services/setting.js +190 -0
  79. package/backend/services/token.js +42 -0
  80. package/backend/space.js +52 -0
  81. package/backend/space_mapping.js +22 -0
  82. package/backend/utils/avatar.js +48 -0
  83. package/backend/utils/color_gen_helper.js +20 -0
  84. package/backend/utils/date.js +66 -0
  85. package/backend/utils/excel.js +446 -0
  86. package/backend/utils/fs/doc.md +64 -0
  87. package/backend/utils/fs/index.js +127 -0
  88. package/backend/utils/jwt.js +54 -0
  89. package/backend/utils/modules/sequence.js +93 -0
  90. package/backend/utils/object.js +31 -0
  91. package/backend/utils/page-query-helper/index.js +61 -0
  92. package/backend/utils/path.js +123 -0
  93. package/backend/utils/run.js +25 -0
  94. package/backend/utils/tokenize.js +82 -0
  95. package/backend/utils/typeof.js +5 -0
  96. package/backend/utils/util.js +153 -0
  97. package/backend/views/api/index.js +32 -0
  98. package/backend/views/api/index.xml +49 -0
  99. package/backend/views/dict/index.js +80 -0
  100. package/backend/views/dict/index.xml +52 -0
  101. package/backend/views/index.js +32 -0
  102. package/backend/views/members_manage/index.js +68 -0
  103. package/backend/views/members_manage/index.xml +68 -0
  104. package/backend/views/roles/index.js +17 -0
  105. package/backend/views/roles/index.xml +47 -0
  106. package/backend/views/usergroup/index.js +68 -0
  107. package/backend/views/usergroup/index.xml +65 -0
  108. package/dist/base-assets/css/index-ffdb55a5.css +3 -0
  109. package/dist/base-assets/css/index-ffdb55a5.css.gz +0 -0
  110. package/dist/base-assets/js/index-b3998a47.js +762 -0
  111. package/dist/base-assets/js/index-b3998a47.js.gz +0 -0
  112. package/dist/base-assets/js/react-cropper.es-d5f06996.js +10 -0
  113. package/dist/base-assets/js/react-cropper.es-d5f06996.js.gz +0 -0
  114. package/dist/base-assets/png/u9-2348c304.png +0 -0
  115. package/dist/base-assets/woff2/materialicons-83be7b2f.woff2 +0 -0
  116. package/dist/index.html +162 -0
  117. package/package.json +62 -5
  118. package/common/router.js +0 -42
  119. package/modules/user/backend/index.js +0 -19
  120. package/modules/user/backend/routers/user.js +0 -11
  121. package/modules/user/frontend/index.js +0 -1
  122. package/serve.js +0 -9
@@ -0,0 +1,357 @@
1
+ 'use strict';
2
+ var express = require('express');
3
+ const { permission: permissionConstant } = require('../common/enum');
4
+ const servicesServices = require('../services/services');
5
+ const moduleServices = require('../services/module');
6
+ const permissionService = require('../services/permission');
7
+ var router = express.Router();
8
+
9
+ async function userPermissionModules(userId) {
10
+ let userPerms = await permissionService.checkOperPermission('user', userId, null, {
11
+ RES_KIND: permissionConstant.RES_KIND.PAGE,
12
+ RES_TYPE: permissionConstant.RES_TYPE.MODULE,
13
+ });
14
+ if (!Array.isArray(userPerms) || !userPerms.length) return [];
15
+ let modules = userPerms.reduce(
16
+ (mo, perm) => {
17
+ let ms = perm.RES_RANGE?.split(',').filter((v) => !mo.includes(v));
18
+ mo = mo.concat(ms);
19
+ return mo;
20
+ },
21
+ ['teams-my'],
22
+ );
23
+ return modules;
24
+ }
25
+
26
+ const NAV_TYPE = {
27
+ FRAME: 'frame',
28
+ WINDOW: 'window',
29
+ SPA: 'spa',
30
+ STATIC: 'static',
31
+ DYNAMIC: 'dynamic',
32
+ CUSTOM: 'custom',
33
+ };
34
+
35
+ /**
36
+ * 导航查询
37
+ * 查询系统管理权限
38
+ * 返回看模块信息模块
39
+ */
40
+ router.get('/getMenu', async function (req, res) {
41
+ let userid = req.get('X-UserId');
42
+ let modules = await moduleServices.getAllModules();
43
+ if (!modules) {
44
+ return res.sendErr();
45
+ }
46
+ if (!Array.isArray(modules)) {
47
+ return res.sendOk([]);
48
+ }
49
+ let member = await servicesServices.getSystemPower();
50
+
51
+ if (!Array.isArray(member)) member = [];
52
+
53
+ member = member.filter((v) => v?.userid);
54
+ // modules = modules.filter((v) => member.includes(userid) || v.MODULE_ID !== 'teams-system');
55
+
56
+ // 先过滤掉权限
57
+ // let permissionModules = await userPermissionModules(userid);
58
+ // modules = modules.filter((v) => permissionModules.includes(v.MODULE_ID));
59
+
60
+ let data = await Promise.all(
61
+ modules.map(async (v) => {
62
+ let navs = [];
63
+
64
+ if (~[NAV_TYPE.STATIC].indexOf(v.NAV_TYPE)) {
65
+ navs = await moduleServices.getModuleNavs(v.MODULE_ID);
66
+ navs = Array.isArray(navs) ? navs : [];
67
+ navs = navs.map((o) => {
68
+ return { id: o.NAV_ID, name: o.NAV_NAME, type: o.NAV_TYPE, url: o.URL, icon: o.NAV_ICON };
69
+ });
70
+ }
71
+ return {
72
+ id: v.MODULE_ID, // 模块ID required
73
+ name: v.MODULE_NAME, // 模块名称 required
74
+ icon: v.MODULE_ICON, // 模块图标 required
75
+ url: v.URL, // 地址 只有当 navType = frame 或 navType = window 才需要
76
+ desc: v.MODULE_DESC, // 模块描述
77
+ size: v.ICON_SIZE, // 图标大小 (没用了)
78
+ viewSize: v.VIEW_SIZE, // 弹框大小 只有当 viewType = dialog 才需要
79
+ dyn_api: v.DYN_API, // 动态导航地址 只有当 navType = dynamic 或 navType = custom 才需要
80
+ // 暂时不用
81
+ moduleType: v.MODULE_TYPE,
82
+
83
+ // 1、nav 放上面
84
+ // 2、usercenter 放下面
85
+ position: v.NAV_POSITION, // 模块位置
86
+
87
+ // 控制加载导航方式
88
+ // 1、frame 没有导航,直接内部打开url( 表示不加载子导航 直接用url打开模块,)
89
+ // 2、window 没有导航,新窗口打开url (表示不加载子导航 直接用url外部窗口打开)
90
+ // 3、spa space模块内部页面
91
+ // 4、static 加载子导航 (直接用子导航数据)
92
+ // 5、dynamic 通过dyn_api请求menu菜单,再通过菜单查询子导航需要的数据
93
+ // 6、custom 通过dyn_api 请求子导航
94
+ navType: v.NAV_TYPE, // 导航类型
95
+
96
+ // 1、view 普通视图
97
+ // 2、dialog 弹框
98
+ // 3、menu 菜单
99
+ // 4、drawer 抽屉
100
+ viewType: v.VIEW_TYPE, // 打开方式
101
+ navs, // 二级导航 navType = static 才有
102
+ };
103
+ }),
104
+ );
105
+
106
+ res.sendOk(data);
107
+ });
108
+
109
+ /**
110
+ * 导航查询
111
+ * 返回 所有的模块和 导航 信息
112
+ * 返回格式 {modules:any[],navs:any[]}
113
+ */
114
+ router.get('/allinfo', async function (req, res) {
115
+ let modules = await moduleServices.getAllModules();
116
+ if (!modules || !Array.isArray(modules)) {
117
+ return res.sendErr('');
118
+ }
119
+ let navs = await moduleServices.getAllNavs();
120
+ if (!modules || !Array.isArray(modules)) {
121
+ navs = [];
122
+ }
123
+ let data = {
124
+ modules,
125
+ navs,
126
+ };
127
+ res.sendOk(data);
128
+ });
129
+
130
+ /**
131
+ * 导航排序
132
+ *@body any[] content 格式{id,sore}
133
+ *@body nav|usercenter filter 过滤条件
134
+ */
135
+ router.post('/menuSort', async function (req, res) {
136
+ const { content } = req.body;
137
+ await Promise.all(
138
+ content.map(async (v) => {
139
+ let data = await moduleServices.putModules({ ORDER_NO: v.sort }, { MODULE_ID: v.id });
140
+ if (data) {
141
+ return true;
142
+ } else {
143
+ return true;
144
+ }
145
+ }),
146
+ );
147
+ return res.sendOk('修改成功');
148
+ });
149
+
150
+ /**
151
+ * 创建模块
152
+ * 页面: 系统管理 -> 应用管理
153
+ */
154
+ router.post('/', async function (req, res) {
155
+ const {
156
+ MODULE_ID,
157
+ MODULE_NAME,
158
+ NAV_POSITION,
159
+ VIEW_TYPE,
160
+ MODULE_ICON,
161
+ MODULE_DESC,
162
+ MODULE_TYPE,
163
+ URL,
164
+ NAV_TYPE,
165
+ DYN_API,
166
+ ORDER_NO,
167
+ } = req.body;
168
+ if (!MODULE_ID || !MODULE_NAME) {
169
+ return res.sendErr('缺少参数');
170
+ }
171
+ let module = await moduleServices.getHesModules(MODULE_ID);
172
+ if (module) {
173
+ return res.sendErr('当前ID已存在');
174
+ }
175
+
176
+ let content = {
177
+ MODULE_ID,
178
+ MODULE_NAME,
179
+ MODULE_ICON,
180
+ MODULE_TYPE,
181
+ MODULE_DESC,
182
+ NAV_POSITION,
183
+ VIEW_TYPE,
184
+ URL,
185
+ NAV_TYPE,
186
+ DYN_API,
187
+ ORDER_NO,
188
+ STATUS: '00',
189
+ };
190
+ let data = await moduleServices.postModule(content);
191
+ if (!data) {
192
+ return res.sendErr('创建失败');
193
+ }
194
+ res.sendOk('创建成功');
195
+ });
196
+
197
+ /**
198
+ * 修改模块
199
+ * 页面: 系统管理 -> 应用管理
200
+ */
201
+ router.put('/:moduleId', async function (req, res) {
202
+ let { moduleId } = req.params;
203
+ const {
204
+ MODULE_NAME,
205
+ MODULE_ICON,
206
+ MODULE_DESC,
207
+ URL,
208
+ DYN_API,
209
+ NAV_POSITION,
210
+ NAV_TYPE,
211
+ ORDER_NO,
212
+ VIEW_TYPE,
213
+ STATUS,
214
+ } = req.body;
215
+ if (!moduleId) {
216
+ return res.sendErr('缺少参数');
217
+ }
218
+ let content = {
219
+ MODULE_NAME,
220
+ MODULE_ICON,
221
+ MODULE_DESC,
222
+ NAV_POSITION,
223
+ NAV_TYPE,
224
+ VIEW_TYPE,
225
+ URL,
226
+ DYN_API,
227
+ ORDER_NO,
228
+ STATUS,
229
+ };
230
+ let data = await moduleServices.putModules(content, { MODULE_ID: moduleId });
231
+ if (!data) {
232
+ return res.sendErr('修改失败');
233
+ }
234
+ res.sendOk('修改成功');
235
+ });
236
+
237
+ /**
238
+ * 删除 模块信息
239
+ * 页面: 系统管理 -> 应用管理
240
+ * 逻辑删除
241
+ */
242
+ router.delete('/', async function (req, res) {
243
+ const { MODULE_ID } = req.body;
244
+ if (!MODULE_ID) {
245
+ return res.sendErr('缺少参数');
246
+ }
247
+ let data = await moduleServices.putModules({ STATUS: '01' }, { MODULE_ID });
248
+ if (!data) {
249
+ return res.sendErr('删除失败');
250
+ }
251
+ res.sendOk('删除成功');
252
+ });
253
+
254
+ /**
255
+ * 创建 导航信息
256
+ * 页面: 系统管理 -> 应用管理
257
+ * MODULE_ID, NAV_ID, NAV_NAME, NAV_ICON, NAV_DESC, NAV_TYPE, URL, ORDER_NO 字段信息
258
+ */
259
+ router.post('/nav', async function (req, res) {
260
+ const { MODULE_ID, NAV_ID, NAV_NAME, NAV_ICON, NAV_DESC, NAV_TYPE, URL, ORDER_NO } = req.body;
261
+ if (!NAV_ID || !NAV_NAME || !MODULE_ID) {
262
+ return res.sendErr('缺少参数');
263
+ }
264
+ let module = await moduleServices.getHesNavs(MODULE_ID, NAV_ID);
265
+ if (module) {
266
+ return res.sendErr('当前ID已存在');
267
+ }
268
+
269
+ let content = {
270
+ NAV_ID,
271
+ MODULE_ID,
272
+ NAV_NAME,
273
+ NAV_ICON,
274
+ NAV_TYPE,
275
+ NAV_DESC,
276
+ URL,
277
+ ORDER_NO,
278
+ };
279
+ let data = await moduleServices.postNavs(content);
280
+ if (!data) {
281
+ return res.sendErr('创建失败');
282
+ }
283
+ res.sendOk('创建成功');
284
+ });
285
+
286
+ /**
287
+ * 修改导航信息
288
+ * 页面: 系统管理 -> 应用管理
289
+ * MODULE_ID, NAV_ID, NAV_NAME, NAV_ICON, NAV_DESC, NAV_TYPE, URL, ORDER_NO 字段信息
290
+ */
291
+ router.put('/nav/:moduleId/:navId', async function (req, res) {
292
+ let { moduleId, navId } = req.params;
293
+ const { NAV_NAME, NAV_ICON, NAV_DESC, NAV_TYPE, URL, ORDER_NO } = req.body;
294
+ if (!NAV_NAME || !moduleId || !navId) {
295
+ return res.sendErr('缺少参数');
296
+ }
297
+ let content = {
298
+ NAV_NAME,
299
+ NAV_ICON,
300
+ NAV_TYPE,
301
+ NAV_DESC,
302
+ URL,
303
+ ORDER_NO,
304
+ };
305
+ let data = await moduleServices.putNavs(content, { MODULE_ID: moduleId, NAV_ID: navId });
306
+ if (!data) {
307
+ return res.sendErr('修改失败');
308
+ }
309
+ res.sendOk('修改成功');
310
+ });
311
+
312
+ /**
313
+ * 导航排序
314
+ *@body any[] content 格式{id:NAV_ID ,sore}
315
+ *@body steing moduleid 过滤条件
316
+ */
317
+
318
+ router.post('/navSort', async function (req, res) {
319
+ const { content, moduleid } = req.body;
320
+ if (!moduleid) {
321
+ return res.sendErr('缺少参数');
322
+ }
323
+ await Promise.all(
324
+ content.map(async (v) => {
325
+ let data = await moduleServices.putNavs(
326
+ { ORDER_NO: v.sort },
327
+ { MODULE_ID: moduleid, NAV_ID: v.id },
328
+ );
329
+ if (data) {
330
+ return true;
331
+ } else {
332
+ return false;
333
+ }
334
+ }),
335
+ );
336
+ return res.sendOk('修改成功');
337
+ });
338
+
339
+ /**
340
+ * 删除导航信息
341
+ * 页面: 系统管理 -> 应用管理
342
+ * @body MODULE_ID 模块ID,
343
+ * @body NAV_ID 导航ID,
344
+ */
345
+ router.delete('/nav', async function (req, res) {
346
+ const { MODULE_ID, NAV_ID } = req.body;
347
+ if (!NAV_ID || !MODULE_ID) {
348
+ return res.sendErr('缺少参数');
349
+ }
350
+ let data = await moduleServices.delNavs(MODULE_ID, NAV_ID);
351
+ if (!data) {
352
+ return res.sendErr('删除失败');
353
+ }
354
+ res.sendOk('删除成功');
355
+ });
356
+
357
+ module.exports = router;
@@ -0,0 +1,138 @@
1
+ 'use strict';
2
+ var express = require('express');
3
+ const isPlainObject = require('lodash/isPlainObject');
4
+ const { checkLogin } = require('../common/middleware/auth');
5
+ const noticeServices = require('../common/services/notice');
6
+
7
+ var router = express.Router();
8
+
9
+ /**
10
+ * 修改通知数据
11
+ * NOT_ID: 修改单个通知数据
12
+ * ALL_READ: 修改用户所有通知数据状态为已读
13
+ * IS_READ: 通知数据状态 已读或未读
14
+ */
15
+ router.put('/', checkLogin, async function (req, res) {
16
+ let userid = req.get('X-UserId');
17
+ const { NOT_ID, ALL_READ, IS_READ } = req.body;
18
+ // 判断是修改单个通知数据还是修改多个通知数据
19
+ if (ALL_READ) {
20
+ let notices = await noticeServices.updateNotice(
21
+ { IS_READ: 'Y' },
22
+ { RECEIVE_USER: userid, IS_READ: 'N' },
23
+ );
24
+ if (!notices) return res.sendErr(null);
25
+ return res.sendOk('修改成功');
26
+ } else {
27
+ if (!NOT_ID) return res.sendErr('缺少参数');
28
+ let notices = await noticeServices.updateNotice({ IS_READ: IS_READ }, { NOT_ID: NOT_ID });
29
+ if (!notices) return res.sendErr(null);
30
+ return res.sendOk('修改成功');
31
+ }
32
+ });
33
+
34
+ /**
35
+ * 删除通知数据
36
+ * NOT_ID: 删除单个通知数据
37
+ * ALL_DEL: 删除用户所有通知数据
38
+ */
39
+ router.delete('/', checkLogin, async function (req, res) {
40
+ let userid = req.get('X-UserId');
41
+ const { NOT_ID, ALL_DEL } = req.body;
42
+ // 判断是修改单个通知数据还是修改多个通知数据
43
+ if (ALL_DEL) {
44
+ let notices = await noticeServices.deleteNotice({ RECEIVE_USER: userid });
45
+ if (!notices) return res.sendErr(null);
46
+ return res.sendOk('删除成功');
47
+ } else {
48
+ if (!NOT_ID) return res.sendErr('缺少参数');
49
+ let notices = await noticeServices.deleteNotice({ NOT_ID: NOT_ID });
50
+ if (!notices) return res.sendErr(null);
51
+ return res.sendOk('删除成功');
52
+ }
53
+ });
54
+
55
+ // 获取用户通知数据
56
+ router.get('/notices', checkLogin, async function (req, res) {
57
+ let userId = req.get('X-UserId');
58
+ if (!userId) return res.sendErr('缺少用户ID');
59
+
60
+ let notices = await noticeServices.getNotices(userId);
61
+ if (!notices) return res.sendErr('查询失败');
62
+
63
+ return res.sendOk(notices);
64
+ });
65
+
66
+ // 获取用户通知权限
67
+ router.get('/permission', checkLogin, async function (req, res) {
68
+ let userId = req.get('X-UserId');
69
+ if (!userId) return res.sendErr('缺少用户ID');
70
+ let notices = await noticeServices.getUserPermission({ IS_NOTICE: '01', USER_ID: userId });
71
+ if (!notices) return res.sendErr('查询失败');
72
+ return res.sendOk(notices);
73
+ });
74
+ // 修改用户通知权限
75
+ router.put('/permission', checkLogin, async function (req, res) {
76
+ let userId = req.get('X-UserId');
77
+ const { IS_NOTICE, NOT_TYPE, NOT_GROUP, CHANNEL } = req.body;
78
+ if (!userId) return res.sendErr('缺少用户ID');
79
+ //查看是否存在
80
+ let notice = await noticeServices.getUserPermission({
81
+ NOT_TYPE,
82
+ CHANNEL,
83
+ NOT_GROUP: NOT_GROUP || null,
84
+ USER_ID: userId,
85
+ });
86
+ if (notice?.length) {
87
+ //有就修改
88
+ let is = await noticeServices.putUserPermission(
89
+ { IS_NOTICE: IS_NOTICE },
90
+ { NOT_TYPE, NOT_GROUP: NOT_GROUP || null, CHANNEL, USER_ID: userId },
91
+ );
92
+ if (!is) {
93
+ return res.sendErr('修改失败');
94
+ }
95
+ return res.sendOk('修改成功');
96
+ }
97
+ //没有就创建
98
+ let is = await noticeServices.postUserPermission({
99
+ IS_NOTICE: IS_NOTICE,
100
+ NOT_TYPE,
101
+ NOT_GROUP: NOT_GROUP || null,
102
+ CHANNEL,
103
+ USER_ID: userId,
104
+ });
105
+
106
+ if (!is) {
107
+ return res.sendErr('修改失败');
108
+ }
109
+ return res.sendOk('修改成功');
110
+ });
111
+
112
+ router.get('/dict', checkLogin, async function (req, res) {
113
+ const DICT_GROUPS = [
114
+ 'NOTICE_TYPE', //通知类型
115
+ 'CHANNEL', //渠道
116
+ 'NOTICE_CONTENT',
117
+ ];
118
+ let dicts = await noticeServices.getNoticeDict(DICT_GROUPS);
119
+ let data = {};
120
+ if (isPlainObject(dicts)) {
121
+ Object.entries(dicts).forEach((dict) => {
122
+ let [key, value] = dict;
123
+ if (Array.isArray(value) && value.length) {
124
+ data[key] = value.reduce((mo, item) => {
125
+ let { value } = item;
126
+ mo[value] = item;
127
+ return mo;
128
+ }, {});
129
+ }
130
+ });
131
+ } else {
132
+ return res.sendErr('查询失败');
133
+ }
134
+
135
+ return res.sendOk(data);
136
+ });
137
+
138
+ module.exports = router;
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+ const express = require('express');
3
+ const PageEngine = require('../common/page_engine');
4
+ const permissionService = require('../common/services/permission');
5
+ const views = require('../views');
6
+
7
+ const router = express.Router();
8
+
9
+ /**
10
+ * @api {get} /team/pages/:PROJECT_ID/:pageId 获取html页面
11
+ * @apiName GetProject
12
+ * @apiGroup team
13
+ * @apiDescription 返回团队指定页面
14
+ * @apiVersion 1.0.0
15
+ *
16
+ * @apiParam {members} pageId 页面id.
17
+ *
18
+ */
19
+ router.get('/:pageId', async function (req, res) {
20
+ let { pageId } = req.params;
21
+ let module = views(pageId);
22
+
23
+ if (!module) {
24
+ return res.sendErr('页面不存在');
25
+ }
26
+
27
+ // xml替换占位参数
28
+ let data = { pageId };
29
+ let ISSUE_CLASS = { issues: 'Issue', requirement: 'Requirement' };
30
+ if (!Reflect.has(ISSUE_CLASS, pageId)) {
31
+ data.ISSUE_CLASS = ISSUE_CLASS[pageId];
32
+ }
33
+ let pageEngine = new PageEngine(module, data);
34
+ let schema = pageEngine.generateSchema();
35
+ schema = await permissionService.formatPermHtml(
36
+ req.get('X-UserId'),
37
+ req.query['NAV_ID'],
38
+ schema,
39
+ req.query['RES_TYPE'],
40
+ );
41
+ let htmlContent = pageEngine.renderHtml(schema);
42
+
43
+ res.type('text/html; charset=UTF-8');
44
+ res.send(htmlContent);
45
+ });
46
+ module.exports = router;