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

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 +7 -0
  2. package/app.js +36 -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 +98 -0
  19. package/backend/common/middleware/auth.js +97 -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 +487 -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 +63 -0
  46. package/backend/config/path.js +3 -0
  47. package/backend/router.js +96 -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 +15 -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/common-assets/css/index-05a08720.css +3 -0
  109. package/dist/common-assets/css/index-05a08720.css.gz +0 -0
  110. package/dist/common-assets/js/index-2e8c7128.js +762 -0
  111. package/dist/common-assets/js/index-2e8c7128.js.gz +0 -0
  112. package/dist/common-assets/js/react-cropper.es-19c27537.js +10 -0
  113. package/dist/common-assets/js/react-cropper.es-19c27537.js.gz +0 -0
  114. package/dist/common-assets/png/u9-2348c304.png +0 -0
  115. package/dist/common-assets/woff2/materialicons-83be7b2f.woff2 +0 -0
  116. package/dist/index.html +162 -0
  117. package/package.json +61 -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,487 @@
1
+ 'use strict';
2
+ const {
3
+ sqlExecutor,
4
+ queryBaseSqlBuilder,
5
+ insertSqlBuilder,
6
+ deleteSqlBuilder,
7
+ updateSqlBuilder,
8
+ pageQuery,
9
+ queryParamsBuilder,
10
+ } = require('@gingkoo/node-tools');
11
+ const { logger } = require('../logger/index');
12
+ const entity = require('../entity');
13
+
14
+ const dictService = {
15
+ /**
16
+ * 获取字典按 码表分组
17
+ * @param {string[]} dictList? 指定码表查询
18
+ */
19
+ async getDicts(dictList) {
20
+ dictList = Array.isArray(dictList) ? dictList : [];
21
+ let dictids = `'${dictList.join("','")}'`;
22
+
23
+ let { error, results } = await sqlExecutor(
24
+ `select * from ${entity.BASE_DICT_ITEMS} where ORG_ID=? ${
25
+ dictList.length ? `and DICT_ID in (${dictids})` : ''
26
+ } order by ORD_NO asc`,
27
+ [global.orgid],
28
+ );
29
+
30
+ if (error) {
31
+ logger.error(error);
32
+ return null;
33
+ }
34
+
35
+ let data = {};
36
+
37
+ results.forEach((element) => {
38
+ if (!data.hasOwnProperty(element.DICT_ID)) {
39
+ data[element.DICT_ID] = [];
40
+ }
41
+ data[element.DICT_ID].push({
42
+ value: element.ITEM_ID,
43
+ label: element.ITEM_VALUE,
44
+ icon: element.ITEM_ICON || '',
45
+ style: element.ITEM_STYLE || '',
46
+ color: element.ITEM_COLOR || '',
47
+ });
48
+ });
49
+
50
+ return data;
51
+ },
52
+ /**
53
+ * 获取字典按 码表分组
54
+ * @param {string[]} dictList? 指定码表查询
55
+ * 返回数据为 所有字段
56
+ */
57
+ async getDictsAll(dictList) {
58
+ dictList = Array.isArray(dictList) ? dictList : [];
59
+ let dictids = `'${dictList.join("','")}'`;
60
+
61
+ let { error, results } = await sqlExecutor(
62
+ `select * from ${entity.BASE_DICT_ITEMS} where ORG_ID=? ${
63
+ dictList.length ? `and DICT_ID in (${dictids})` : ''
64
+ } order by ORD_NO asc`,
65
+ [global.orgid],
66
+ );
67
+
68
+ if (error) {
69
+ logger.error(error);
70
+ return null;
71
+ }
72
+
73
+ let data = {};
74
+
75
+ results.forEach((element) => {
76
+ if (!data.hasOwnProperty(element.DICT_ID)) {
77
+ data[element.DICT_ID] = [];
78
+ }
79
+ data[element.DICT_ID].push({
80
+ value: element.ITEM_ID,
81
+ label: element.ITEM_VALUE,
82
+ icon: element.ITEM_ICON || '',
83
+ style: element.ITEM_STYLE || '',
84
+ color: element.ITEM_COLOR || '',
85
+ desc: element.ITEM_DESC || '',
86
+ parent: element.ITEM_PARENT || '',
87
+ });
88
+ });
89
+
90
+ return data;
91
+ },
92
+
93
+ /**
94
+ * 获取字典模块
95
+ * @param {object} filter
96
+ */
97
+ getModules: async function (filter) {
98
+ filter = filter || {};
99
+ filter.ORG_ID = global.orgid;
100
+ let { sql, params } = await queryBaseSqlBuilder(entity.BASE_DICT_MODULE, filter);
101
+
102
+ let { error, results } = await sqlExecutor(sql, params);
103
+ if (error) {
104
+ logger.error(error);
105
+ return null;
106
+ }
107
+
108
+ return results;
109
+ },
110
+
111
+ /**
112
+ * 获取分类
113
+ * @param {object} filter
114
+ */
115
+ getGroups: async function (filter) {
116
+ filter = filter || {};
117
+ let { sql, params } = await queryBaseSqlBuilder(entity.BASE_DICT, filter);
118
+
119
+ let { error, results } = await sqlExecutor(sql, params);
120
+ if (error) {
121
+ logger.error(error);
122
+ return null;
123
+ }
124
+
125
+ return results;
126
+ },
127
+
128
+ /**
129
+ * 获取码值
130
+ * @param {object} filter
131
+ * @returns
132
+ */
133
+ getDictItems: async function (filter, pageInfo) {
134
+ let pageSize = pageInfo.pageSize;
135
+ let pageIndex = pageInfo.pageIndex;
136
+ let searchParam = {};
137
+ let pops = {};
138
+ for (let v in filter) {
139
+ if (v !== 'DICT_ID') {
140
+ searchParam[v] = filter[v];
141
+ pops[v] = 'like';
142
+ Reflect.deleteProperty(filter, v);
143
+ }
144
+ }
145
+ filter = filter || {};
146
+ filter.ORG_ID = global.orgid;
147
+ let sql = '';
148
+ let params = {};
149
+ const dbResult = await queryBaseSqlBuilder(entity.BASE_DICT_ITEMS, filter);
150
+ sql += dbResult.sql;
151
+ params = dbResult.params;
152
+ if (Object.keys(searchParam).length > 0) {
153
+ const result = await queryParamsBuilder(searchParam, null, null, pops);
154
+ sql += ' and ' + result.sql;
155
+ }
156
+ sql += ' order by ISNULL(ORD_NO), ORD_NO';
157
+ let results = await pageQuery(sql, params, pageSize, pageIndex);
158
+ if (!results) {
159
+ logger.error(results.error);
160
+ return null;
161
+ }
162
+
163
+ return results;
164
+ },
165
+
166
+ /**
167
+ * 获取排序过后的字典模块
168
+ */
169
+ getOrderBaseDictModule: async function () {
170
+ let sql = `SELECT MODULE_ID,DICT_ID,DICT_NAME FROM ${entity.BASE_DICT} ORDER BY ISNULL(DATA_CRT_TIME),DATA_CRT_TIME DESC`;
171
+ let { error, results } = await sqlExecutor(sql);
172
+ if (error) {
173
+ logger.error(error);
174
+ return null;
175
+ }
176
+
177
+ return results;
178
+ },
179
+
180
+ /***
181
+ * 获取排序过后的字典信息
182
+ */
183
+ getOrderModules: async function () {
184
+ let sql = `SELECT MODULE_ID,MODULE_NAME FROM ${entity.BASE_DICT_MODULE} WHERE ORG_ID=? ORDER BY DATA_CRT_TIME DESC`;
185
+ let { error, results } = await sqlExecutor(sql, [global.orgid]);
186
+ if (error) {
187
+ logger.error(error);
188
+ return null;
189
+ }
190
+
191
+ return results;
192
+ },
193
+
194
+ /**
195
+ * 创建字典模块
196
+ * @param {object} insertParams 插入的数据对象
197
+ * @param {array?} rawParams 不需要将值通过=? 方式引入的 列字段key集合
198
+ */
199
+ createModule: async function (insertParams, rawParams) {
200
+ let { sql, params } = insertSqlBuilder(entity.BASE_DICT_MODULE, insertParams, rawParams);
201
+
202
+ let { error, results } = await sqlExecutor(sql, params);
203
+ if (error) {
204
+ logger.error(error);
205
+ return null;
206
+ }
207
+
208
+ return results;
209
+ },
210
+
211
+ /**
212
+ * 创建字典分组
213
+ * @param {object} insertParams 插入的数据对象
214
+ * @param {array?} rawParams 不需要将值通过=? 方式引入的 列字段key集合
215
+ */
216
+ createDict: async function (insertParams, rawParams) {
217
+ let { sql, params } = insertSqlBuilder(entity.BASE_DICT, insertParams, rawParams);
218
+
219
+ let { error, results } = await sqlExecutor(sql, params);
220
+ if (error) {
221
+ logger.error(error);
222
+ return null;
223
+ }
224
+
225
+ return results;
226
+ },
227
+
228
+ /**
229
+ * 创建代码
230
+ * @param {object} insertParams 插入的数据对象
231
+ * @param {array?} rawParams 不需要将值通过=? 方式引入的 列字段key集合
232
+ * @returns
233
+ */
234
+ createDictItem: async function (insertParams, rawParams) {
235
+ const { DICT_ID } = insertParams;
236
+ let data = await this.getSortDictItem(DICT_ID);
237
+ if (!data) return null;
238
+ let orderNo = 1;
239
+ if (data.length > 0) {
240
+ for (let i = 0; i < data.length; i++) {
241
+ if (data[i].ORD_NO !== null) {
242
+ orderNo = data[i].ORD_NO;
243
+ break;
244
+ }
245
+ }
246
+ }
247
+
248
+ let { sql, params } = insertSqlBuilder(
249
+ entity.BASE_DICT_ITEMS,
250
+ {
251
+ ...insertParams,
252
+ ORD_NO: orderNo - 1,
253
+ },
254
+ rawParams,
255
+ );
256
+
257
+ let { error, results } = await sqlExecutor(sql, params);
258
+ if (error) {
259
+ logger.error(error);
260
+ return null;
261
+ }
262
+
263
+ return results;
264
+ },
265
+
266
+ /**
267
+ * 删除字典模块
268
+ * @param {object} filter 删除条件
269
+ * @returns
270
+ */
271
+ deleteModule: async function (filter) {
272
+ filter = filter || {};
273
+ filter.ORG_ID = global.orgid;
274
+
275
+ let { sql, params } = deleteSqlBuilder(entity.BASE_DICT_MODULE, filter);
276
+
277
+ let { error, results } = await sqlExecutor(sql, params);
278
+ if (error) {
279
+ logger.error(error);
280
+ return null;
281
+ }
282
+
283
+ return results;
284
+ },
285
+
286
+ /**
287
+ * 删除字典分组
288
+ * @param {object} filter 删除条件
289
+ * @returns
290
+ */
291
+ deleteDict: async function (filter) {
292
+ filter = filter || {};
293
+ filter.ORG_ID = global.orgid;
294
+
295
+ let { sql, params } = deleteSqlBuilder(entity.BASE_DICT, filter);
296
+
297
+ let { error, results } = await sqlExecutor(sql, params);
298
+ if (error) {
299
+ logger.error(error);
300
+ return null;
301
+ }
302
+
303
+ return results;
304
+ },
305
+
306
+ /**
307
+ * 删除字典代码
308
+ * @param {string[]} ids 需要删除的代码id ITEM_ID
309
+ * @param string DICT_ID 需要删除代码的DICT_ID
310
+ * @returns
311
+ */
312
+ deleteDictItem: async function (ids, DICT_ID) {
313
+ let params = [];
314
+ let itemIds = ids
315
+ .map((v) => {
316
+ params.push(v);
317
+ return '?';
318
+ })
319
+ .join(',');
320
+
321
+ params.push(global.orgid);
322
+ params.push(DICT_ID);
323
+
324
+ let sql = `DELETE from ${entity.BASE_DICT_ITEMS} where ITEM_ID in (${itemIds}) and ORG_ID = ? and DICT_ID =?`;
325
+
326
+ let { error, results } = await sqlExecutor(sql, params);
327
+ if (error) {
328
+ logger.error(error);
329
+ return null;
330
+ }
331
+
332
+ return results;
333
+ },
334
+
335
+ /**
336
+ * 更新字典模块
337
+ * @param {object} updateParams 更新的新值
338
+ * @param {object} filter 更新条件
339
+ */
340
+ updateModule: async function (updateParams, filter) {
341
+ filter = filter || {};
342
+ filter.ORG_ID = global.orgid;
343
+
344
+ let { sql, params } = updateSqlBuilder(entity.BASE_DICT_MODULE, updateParams, filter);
345
+
346
+ let { error, results } = await sqlExecutor(sql, params);
347
+ if (error) {
348
+ logger.error(error);
349
+ return null;
350
+ }
351
+
352
+ return results;
353
+ },
354
+
355
+ /**
356
+ * 更新字典分类
357
+ * @param {object} updateParams 更新的新值
358
+ * @param {object} filter 更新条件
359
+ */
360
+ updateDict: async function (updateParams, filter) {
361
+ filter = filter || {};
362
+ filter.ORG_ID = global.orgid;
363
+
364
+ let { sql, params } = updateSqlBuilder(entity.BASE_DICT, updateParams, filter);
365
+
366
+ let { error, results } = await sqlExecutor(sql, params);
367
+ if (error) {
368
+ logger.error(error);
369
+ return null;
370
+ }
371
+
372
+ return results;
373
+ },
374
+
375
+ /**
376
+ * 更新字典代码
377
+ * @param {object} updateParams 更新的新值
378
+ * @param {object} filter 更新条件
379
+ */
380
+ updateDictItem: async function (updateParams, filter) {
381
+ filter = filter || {};
382
+ filter.ORG_ID = global.orgid;
383
+
384
+ let { sql, params } = updateSqlBuilder(entity.BASE_DICT_ITEMS, updateParams, filter);
385
+
386
+ let { error, results } = await sqlExecutor(sql, params);
387
+ if (error) {
388
+ logger.error(error);
389
+ return null;
390
+ }
391
+
392
+ return results;
393
+ },
394
+
395
+ /**
396
+ * 获取排序后的码值
397
+ * @param {string} DICT 码值
398
+ * @returns
399
+ */
400
+ getSortDictItem: async function (DICT) {
401
+ const sql = `SELECT * FROM ${entity.BASE_DICT_ITEMS} WHERE DICT_ID=? AND ORG_ID=? ORDER BY ISNULL(ORD_NO),ORD_NO `;
402
+ const { results, error } = await sqlExecutor(sql, [DICT, global.orgid]);
403
+ if (error) {
404
+ return null;
405
+ }
406
+
407
+ return results;
408
+ },
409
+
410
+ /****
411
+ * 批量更新字典
412
+ * @param {array} orderArr {ITEM_ID,}
413
+ * */
414
+ batchUpdateItem: async function (orderArr, DICT_ID) {
415
+ let sql = `UPDATE ${entity.BASE_DICT_ITEMS} SET ORD_NO = CASE ITEM_ID `;
416
+ orderArr.map((v, i) => {
417
+ const { ITEM_ID } = v;
418
+ sql += ` WHEN '${ITEM_ID}' THEN ${i} `;
419
+ });
420
+ sql += ` END WHERE DICT_ID='${DICT_ID}' AND ORG_ID = '${global.orgid}'`;
421
+ const results = await sqlExecutor(sql);
422
+ return results;
423
+ },
424
+
425
+ // 判断字典的DICT_ID是否重复
426
+ isExistDictId: async function (DICT_ID) {
427
+ const { sql, params } = await queryBaseSqlBuilder(entity.BASE_DICT, { DICT_ID });
428
+ let result = await sqlExecutor(sql, params);
429
+ return result;
430
+ },
431
+ // 添加字典信息
432
+ addBaseDict: async function (MODULE_ID, DICT_NAME, DICT_ID) {
433
+ const { sql, params } = await insertSqlBuilder(entity.BASE_DICT, {
434
+ MODULE_ID,
435
+ DICT_NAME,
436
+ DICT_ID,
437
+ });
438
+ let result = await sqlExecutor(sql, params);
439
+ return result;
440
+ },
441
+ // 删除字典信息
442
+ delBaseDict: async function (filter = {}) {
443
+ const { sql, params } = await deleteSqlBuilder(entity.BASE_DICT, filter);
444
+ let result = await sqlExecutor(sql, params);
445
+ return result;
446
+ },
447
+
448
+ //删除字典项
449
+ deleteDictItems: async function (filter = {}) {
450
+ filter.ORG_ID = global.orgid;
451
+ const { sql, params } = await deleteSqlBuilder(entity.BASE_DICT_ITEMS, filter);
452
+ let result = await sqlExecutor(sql, params);
453
+ return result;
454
+ },
455
+
456
+ // 修改字典
457
+ modifyBaseDict: async function (DICT_ID, DICT_NAME) {
458
+ const { sql, params } = await updateSqlBuilder(
459
+ entity.BASE_DICT,
460
+ {
461
+ DICT_NAME,
462
+ },
463
+ { DICT_ID },
464
+ );
465
+ let result = await sqlExecutor(sql, params);
466
+ return result;
467
+ },
468
+
469
+ // 查询MODULE_ID
470
+ searchDICTModuleId: async function (DICT_ID) {
471
+ const sql = `SELECT MODULE_ID FROM ${entity.BASE_DICT} WHERE DICT_ID = '${DICT_ID}'`;
472
+ let result = await sqlExecutor(sql);
473
+ return result;
474
+ },
475
+
476
+ //查询字典模块表
477
+ getBaseDictModule: async function (filter) {
478
+ let filters = filter || {};
479
+ filters.ORG_ID = global.orgid;
480
+ const { sql, params } = await queryBaseSqlBuilder(entity.BASE_DICT_MODULE, filters);
481
+ let result = await sqlExecutor(sql, params);
482
+ if (result.error) return null;
483
+ return result;
484
+ },
485
+ };
486
+
487
+ module.exports = dictService;
@@ -0,0 +1,49 @@
1
+ 'use strict';
2
+
3
+ const {
4
+ sqlExecutor,
5
+ insertSqlBuilder,
6
+ updateSqlBuilder,
7
+ queryParamsBuilder,
8
+ } = require('@gingkoo/node-tools');
9
+ const entity = require('../entity');
10
+
11
+ module.exports = {
12
+ /**
13
+ * 通用 获取邮件模版
14
+ * @returns any[]
15
+ */
16
+ getTempateInfo: async function (filters) {
17
+ let sql = `select * from ${entity.BASE_EMAIL_TEMPLATE} where `;
18
+ let params = queryParamsBuilder(filters);
19
+ let { error, results } = await sqlExecutor(sql + params.sql, params.params);
20
+ if (error) {
21
+ return null;
22
+ }
23
+ return results;
24
+ },
25
+ getEmailTempate: async function () {
26
+ let sql = `select * from ${entity.BASE_EMAIL_TEMPLATE} WHERE STATUS ='00' ORDER BY DATA_CRT_TIME `;
27
+ let { error, results } = await sqlExecutor(sql, []);
28
+ if (error) {
29
+ return [];
30
+ }
31
+ return results;
32
+ },
33
+ postEailTempate: async function (props) {
34
+ let param = insertSqlBuilder(entity.BASE_EMAIL_TEMPLATE, props);
35
+ let { error, results } = await sqlExecutor(param.sql, param.params);
36
+ if (error) {
37
+ return null;
38
+ }
39
+ return results;
40
+ },
41
+ putEailTempate: async function (filter, props) {
42
+ let param = updateSqlBuilder(entity.BASE_EMAIL_TEMPLATE, props, filter);
43
+ let { error, results } = await sqlExecutor(param.sql, param.params);
44
+ if (error) {
45
+ return null;
46
+ }
47
+ return results;
48
+ },
49
+ };
@@ -0,0 +1,137 @@
1
+ 'use strict';
2
+
3
+ const {
4
+ sqlExecutor,
5
+ insertSqlBuilder,
6
+ updateSqlBuilder,
7
+ queryParamsBuilder,
8
+ } = require('@gingkoo/node-tools');
9
+ const entity = require('../entity');
10
+
11
+ module.exports = {
12
+ /**
13
+ * 通用一般配置查询
14
+ * @param {*} filters
15
+ * @returns
16
+ */
17
+ getConfigInfo: async function (filters) {
18
+ if (!filters) return;
19
+ let sql = `select * from ${entity.BASE_CONFIG} where `;
20
+ let params = queryParamsBuilder(filters);
21
+ sql = sql + params.sql + ` ORDER BY DATA_CRT_TIME`;
22
+ let { error, results } = await sqlExecutor(sql, params.params);
23
+ if (error) {
24
+ return null;
25
+ }
26
+ return results;
27
+ },
28
+ /**
29
+ * 获取查询 所有配置信息
30
+ * @returns any[]
31
+ */
32
+ getConfig: async function () {
33
+ let sql = `select * from ${entity.BASE_CONFIG} WHERE STATUS ='00' ORDER BY DATA_CRT_TIME `;
34
+ let { error, results } = await sqlExecutor(sql, []);
35
+ if (error) {
36
+ return [];
37
+ }
38
+ return results;
39
+ },
40
+
41
+ /**
42
+ *
43
+ * @param {*} filters
44
+ * @returns
45
+ */
46
+ getFromConfig: async function (filters) {
47
+ if (!filters) return null;
48
+ let results = await this.getConfigInfo(filters);
49
+ let data = null;
50
+ if (Array.isArray(results)) {
51
+ data = results.reduce((x, y) => {
52
+ return {
53
+ ...x,
54
+ [y.CONFIG_ID]: y.CONFIG_VALUE,
55
+ };
56
+ }, {});
57
+ }
58
+ return data;
59
+ },
60
+
61
+ /**
62
+ * @param {*} props
63
+ * @param {*} props
64
+ * @returns
65
+ */
66
+ postConfig: async function (props) {
67
+ let param = insertSqlBuilder(entity.BASE_CONFIG, props);
68
+ let { error } = await sqlExecutor(param.sql, param.params);
69
+ if (error) {
70
+ return null;
71
+ }
72
+ return true;
73
+ },
74
+
75
+ /**
76
+ * 修改 一般配置配置信息
77
+ * 表:base_config
78
+ * @param {*} filter 筛洗条件
79
+ * @param {*} props 修改过内容
80
+ * @returns true |null
81
+ */
82
+ putConfig: async function (filter, props) {
83
+ if (!filter || !props) return null;
84
+ let param = updateSqlBuilder(entity.BASE_CONFIG, props, filter);
85
+ let { error } = await sqlExecutor(param.sql, param.params);
86
+ if (error) {
87
+ console.log(error, 'error');
88
+ return null;
89
+ }
90
+ return true;
91
+ },
92
+
93
+ getGroupInfo: async function (filters) {
94
+ if (!filters) return;
95
+ let sql = `select * from ${entity.BASE_CONFIG_GROUP} where `;
96
+ let params = queryParamsBuilder(filters);
97
+ let { error, results } = await sqlExecutor(sql + params.sql, params.params);
98
+ if (error) {
99
+ return [];
100
+ }
101
+ return results;
102
+ },
103
+
104
+ getGroup: async function () {
105
+ let sql = `select * from ${entity.BASE_CONFIG_GROUP} WHERE STATUS ='00' ORDER BY DATA_CRT_TIME`;
106
+ let { error, results } = await sqlExecutor(sql, []);
107
+ if (error) {
108
+ return [];
109
+ }
110
+ return results;
111
+ },
112
+
113
+ postGroup: async function (props) {
114
+ let param = insertSqlBuilder(entity.BASE_CONFIG_GROUP, props);
115
+ let { error } = await sqlExecutor(param.sql, param.params);
116
+ if (error) {
117
+ return null;
118
+ }
119
+ return true;
120
+ },
121
+
122
+ /**
123
+ * 修改一般配置分组
124
+ * 表:base_config_groups
125
+ * @param {*} filter 筛洗条件
126
+ * @param {*} props 修改内容
127
+ * @returns true|null
128
+ */
129
+ putGroup: async function (filter, props) {
130
+ let param = updateSqlBuilder(entity.BASE_CONFIG_GROUP, props, filter);
131
+ let { error } = await sqlExecutor(param.sql, param.params);
132
+ if (error) {
133
+ return null;
134
+ }
135
+ return true;
136
+ },
137
+ };
@@ -0,0 +1,18 @@
1
+ const generalConfigServices = require('./generalConfig');
2
+
3
+ const loginType = {
4
+ wechat: 'wechat',
5
+ account: 'account',
6
+ };
7
+
8
+ const getLoginMethod = async () => {
9
+ let res = await generalConfigServices.getConfigInfo({
10
+ CONFIG_ID: 'qywx_LOGIN',
11
+ });
12
+ if (res?.[0]?.CONFIG_VALUE === '1') {
13
+ return loginType.wechat;
14
+ }
15
+ return loginType.account;
16
+ };
17
+
18
+ module.exports = { loginType, getLoginMethod };