@ibiz-template/runtime 0.7.41-alpha.136 → 0.7.41-alpha.138

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 (103) hide show
  1. package/dist/index.esm.js +57021 -56927
  2. package/dist/index.system.min.js +1 -1
  3. package/out/app-hub.d.ts.map +1 -1
  4. package/out/app-hub.js +47 -21
  5. package/out/config/global-config.d.ts.map +1 -1
  6. package/out/config/global-config.js +1 -0
  7. package/out/de-logic/de-logic-node/append-param-node/append-param-node.d.ts +2 -2
  8. package/out/de-logic/de-logic-node/append-param-node/append-param-node.d.ts.map +1 -1
  9. package/out/de-logic/de-logic-node/append-param-node/append-param-node.js +2 -2
  10. package/out/de-logic/de-logic-node/bind-param-node/bind-param-node.d.ts +2 -2
  11. package/out/de-logic/de-logic-node/bind-param-node/bind-param-node.d.ts.map +1 -1
  12. package/out/de-logic/de-logic-node/bind-param-node/bind-param-node.js +2 -2
  13. package/out/de-logic/de-logic-node/copy-param-node/copy-param-node.d.ts +2 -2
  14. package/out/de-logic/de-logic-node/copy-param-node/copy-param-node.d.ts.map +1 -1
  15. package/out/de-logic/de-logic-node/copy-param-node/copy-param-node.js +2 -2
  16. package/out/de-logic/de-logic-node/data-set-node/data-set-node.d.ts +2 -2
  17. package/out/de-logic/de-logic-node/data-set-node/data-set-node.d.ts.map +1 -1
  18. package/out/de-logic/de-logic-node/data-set-node/data-set-node.js +2 -2
  19. package/out/de-logic/de-logic-node/de-action-node/de-action-node.d.ts +2 -2
  20. package/out/de-logic/de-logic-node/de-action-node/de-action-node.d.ts.map +1 -1
  21. package/out/de-logic/de-logic-node/de-action-node/de-action-node.js +2 -2
  22. package/out/de-logic/de-logic-node/debug-param-node/debug-param-node.d.ts +2 -2
  23. package/out/de-logic/de-logic-node/debug-param-node/debug-param-node.d.ts.map +1 -1
  24. package/out/de-logic/de-logic-node/debug-param-node/debug-param-node.js +2 -2
  25. package/out/de-logic/de-logic-node/end-node/end-node.d.ts +2 -2
  26. package/out/de-logic/de-logic-node/end-node/end-node.d.ts.map +1 -1
  27. package/out/de-logic/de-logic-node/end-node/end-node.js +2 -2
  28. package/out/de-logic/de-logic-node/index.d.ts +13 -13
  29. package/out/de-logic/de-logic-node/index.d.ts.map +1 -1
  30. package/out/de-logic/de-logic-node/index.js +13 -13
  31. package/out/de-logic/de-logic-node/prepare-param-node/prepare-param-node.d.ts +2 -2
  32. package/out/de-logic/de-logic-node/prepare-param-node/prepare-param-node.d.ts.map +1 -1
  33. package/out/de-logic/de-logic-node/prepare-param-node/prepare-param-node.js +2 -2
  34. package/out/de-logic/de-logic-node/renew-param-node/renew-param-node.d.ts +2 -2
  35. package/out/de-logic/de-logic-node/renew-param-node/renew-param-node.d.ts.map +1 -1
  36. package/out/de-logic/de-logic-node/renew-param-node/renew-param-node.js +2 -2
  37. package/out/de-logic/de-logic-node/reset-param-node/reset-param-node.d.ts +2 -2
  38. package/out/de-logic/de-logic-node/reset-param-node/reset-param-node.d.ts.map +1 -1
  39. package/out/de-logic/de-logic-node/reset-param-node/reset-param-node.js +2 -2
  40. package/out/de-logic/de-logic-node/sort-param-node/sort-param-node.d.ts +2 -2
  41. package/out/de-logic/de-logic-node/sort-param-node/sort-param-node.d.ts.map +1 -1
  42. package/out/de-logic/de-logic-node/sort-param-node/sort-param-node.js +2 -2
  43. package/out/de-logic/de-logic-node/start-node/start-node.d.ts +2 -2
  44. package/out/de-logic/de-logic-node/start-node/start-node.d.ts.map +1 -1
  45. package/out/de-logic/de-logic-node/start-node/start-node.js +2 -2
  46. package/out/de-logic/de-logic-node/throw-exception-node/throw-exception-node.d.ts +2 -2
  47. package/out/de-logic/de-logic-node/throw-exception-node/throw-exception-node.d.ts.map +1 -1
  48. package/out/de-logic/de-logic-node/throw-exception-node/throw-exception-node.js +2 -2
  49. package/out/de-logic/index.d.ts +2 -0
  50. package/out/de-logic/index.d.ts.map +1 -1
  51. package/out/de-logic/index.js +2 -0
  52. package/out/de-logic/provider.d.ts.map +1 -1
  53. package/out/de-logic/provider.js +14 -14
  54. package/out/interface/api/common/global-config/i-api-global-common-config.d.ts +6 -0
  55. package/out/interface/api/common/global-config/i-api-global-common-config.d.ts.map +1 -1
  56. package/out/interface/api/util/i-api-app-util.d.ts +6 -0
  57. package/out/interface/api/util/i-api-app-util.d.ts.map +1 -1
  58. package/out/interface/service/service/i-app-de.service.d.ts +9 -0
  59. package/out/interface/service/service/i-app-de.service.d.ts.map +1 -1
  60. package/out/interface/util/i-app-util/i-app-util.d.ts +7 -0
  61. package/out/interface/util/i-app-util/i-app-util.d.ts.map +1 -1
  62. package/out/service/service/entity/de.service.d.ts +9 -0
  63. package/out/service/service/entity/de.service.d.ts.map +1 -1
  64. package/out/service/service/entity/de.service.js +16 -0
  65. package/out/ui-action/provider/front-ui-action-provider.d.ts.map +1 -1
  66. package/out/ui-action/provider/front-ui-action-provider.js +5 -1
  67. package/out/ui-logic/index.d.ts +1 -0
  68. package/out/ui-logic/index.d.ts.map +1 -1
  69. package/out/ui-logic/index.js +1 -0
  70. package/out/utils/index.d.ts +1 -0
  71. package/out/utils/index.d.ts.map +1 -1
  72. package/out/utils/index.js +1 -0
  73. package/out/utils/task-util/task-util.d.ts +8 -0
  74. package/out/utils/task-util/task-util.d.ts.map +1 -0
  75. package/out/utils/task-util/task-util.js +38 -0
  76. package/package.json +3 -3
  77. package/src/app-hub.ts +51 -22
  78. package/src/config/global-config.ts +1 -0
  79. package/src/de-logic/de-logic-node/append-param-node/append-param-node.ts +2 -2
  80. package/src/de-logic/de-logic-node/bind-param-node/bind-param-node.ts +2 -2
  81. package/src/de-logic/de-logic-node/copy-param-node/copy-param-node.ts +2 -2
  82. package/src/de-logic/de-logic-node/data-set-node/data-set-node.ts +2 -2
  83. package/src/de-logic/de-logic-node/de-action-node/de-action-node.ts +2 -2
  84. package/src/de-logic/de-logic-node/debug-param-node/debug-param-node.ts +2 -2
  85. package/src/de-logic/de-logic-node/end-node/end-node.ts +2 -2
  86. package/src/de-logic/de-logic-node/index.ts +13 -13
  87. package/src/de-logic/de-logic-node/prepare-param-node/prepare-param-node.ts +2 -2
  88. package/src/de-logic/de-logic-node/renew-param-node/renew-param-node.ts +2 -2
  89. package/src/de-logic/de-logic-node/reset-param-node/reset-param-node.ts +2 -2
  90. package/src/de-logic/de-logic-node/sort-param-node/sort-param-node.ts +2 -2
  91. package/src/de-logic/de-logic-node/start-node/start-node.ts +2 -2
  92. package/src/de-logic/de-logic-node/throw-exception-node/throw-exception-node.ts +2 -2
  93. package/src/de-logic/index.ts +3 -0
  94. package/src/de-logic/provider.ts +29 -26
  95. package/src/interface/api/common/global-config/i-api-global-common-config.ts +7 -0
  96. package/src/interface/api/util/i-api-app-util.ts +7 -0
  97. package/src/interface/service/service/i-app-de.service.ts +14 -0
  98. package/src/interface/util/i-app-util/i-app-util.ts +9 -1
  99. package/src/service/service/entity/de.service.ts +21 -0
  100. package/src/ui-action/provider/front-ui-action-provider.ts +7 -1
  101. package/src/ui-logic/index.ts +1 -0
  102. package/src/utils/index.ts +1 -0
  103. package/src/utils/task-util/task-util.ts +45 -0
@@ -6,10 +6,10 @@ import { DELogicNode } from '../de-logic-node';
6
6
  /**
7
7
  * @description 调试逻辑参数节点
8
8
  * @export
9
- * @class DebugParamNode
9
+ * @class DebugParamDELogicNode
10
10
  * @extends {DELogicNode}
11
11
  */
12
- export class DebugParamNode extends DELogicNode {
12
+ export class DebugParamDELogicNode extends DELogicNode {
13
13
  declare model: IDEDebugParamLogic;
14
14
 
15
15
  async exec(ctx: DELogicContext): Promise<void> {
@@ -9,10 +9,10 @@ import { DELogicNode } from '../de-logic-node';
9
9
  * @author lxm
10
10
  * @date 2023-02-09 21:02:00
11
11
  * @export
12
- * @class EndNode
12
+ * @class EndDELogicNode
13
13
  * @extends {DELogicNode}
14
14
  */
15
- export class EndNode extends DELogicNode {
15
+ export class EndDELogicNode extends DELogicNode {
16
16
  declare model: IDEEndLogic;
17
17
 
18
18
  async exec(ctx: DELogicContext): Promise<void> {
@@ -1,14 +1,14 @@
1
- export { DEActionNode } from './de-action-node/de-action-node';
2
- export { StartNode } from './start-node/start-node';
3
- export { EndNode } from './end-node/end-node';
4
- export { PrepareParamNode } from './prepare-param-node/prepare-param-node';
1
+ export { DEActionDELogicNode } from './de-action-node/de-action-node';
2
+ export { StartDELogicNode } from './start-node/start-node';
3
+ export { EndDELogicNode } from './end-node/end-node';
4
+ export { PrepareParamDELogicNode } from './prepare-param-node/prepare-param-node';
5
5
  export { DELogicNode } from './de-logic-node';
6
- export { DataSetNode } from './data-set-node/data-set-node';
7
- export { BindParamNode } from './bind-param-node/bind-param-node';
8
- export { ResetParamNode } from './reset-param-node/reset-param-node';
9
- export { RenewParamNode } from './renew-param-node/renew-param-node';
10
- export { CopyParamNode } from './copy-param-node/copy-param-node';
11
- export { SortParamNode } from './sort-param-node/sort-param-node';
12
- export { AppendParamNode } from './append-param-node/append-param-node';
13
- export { DebugParamNode } from './debug-param-node/debug-param-node';
14
- export { ThrowExceptionNode } from './throw-exception-node/throw-exception-node';
6
+ export { DataSetDELogicNode } from './data-set-node/data-set-node';
7
+ export { BindParamDELogicNode } from './bind-param-node/bind-param-node';
8
+ export { ResetParamDELogicNode } from './reset-param-node/reset-param-node';
9
+ export { RenewParamDELogicNode } from './renew-param-node/renew-param-node';
10
+ export { CopyParamDELogicNode } from './copy-param-node/copy-param-node';
11
+ export { SortParamDELogicNode } from './sort-param-node/sort-param-node';
12
+ export { AppendParamDELogicNode } from './append-param-node/append-param-node';
13
+ export { DebugParamDELogicNode } from './debug-param-node/debug-param-node';
14
+ export { ThrowExceptionDELogicNode } from './throw-exception-node/throw-exception-node';
@@ -11,10 +11,10 @@ import { DELogicNode } from '../de-logic-node';
11
11
  * @author lxm
12
12
  * @date 2023-02-09 21:02:20
13
13
  * @export
14
- * @class PrepareParamNode
14
+ * @class PrepareParamDELogicNode
15
15
  * @extends {DELogicNode}
16
16
  */
17
- export class PrepareParamNode extends DELogicNode {
17
+ export class PrepareParamDELogicNode extends DELogicNode {
18
18
  async exec(ctx: DELogicContext): Promise<void> {
19
19
  const nodeParams = this.model.delogicNodeParams;
20
20
  if (nodeParams?.length) {
@@ -9,10 +9,10 @@ import { DELogicNode } from '../de-logic-node';
9
9
  * @author lxm
10
10
  * @date 2023-02-09 21:02:20
11
11
  * @export
12
- * @class RenewParamNode
12
+ * @class RenewParamDELogicNode
13
13
  * @extends {DELogicNode}
14
14
  */
15
- export class RenewParamNode extends DELogicNode {
15
+ export class RenewParamDELogicNode extends DELogicNode {
16
16
  declare model: IDERenewParamLogic;
17
17
 
18
18
  async exec(ctx: DELogicContext): Promise<void> {
@@ -9,10 +9,10 @@ import { DELogicNode } from '../de-logic-node';
9
9
  * @author lxm
10
10
  * @date 2023-02-09 21:02:20
11
11
  * @export
12
- * @class ResetParamNode
12
+ * @class ResetParamDELogicNode
13
13
  * @extends {DELogicNode}
14
14
  */
15
- export class ResetParamNode extends DELogicNode {
15
+ export class ResetParamDELogicNode extends DELogicNode {
16
16
  declare model: IDEResetParamLogic;
17
17
 
18
18
  async exec(ctx: DELogicContext): Promise<void> {
@@ -10,9 +10,9 @@ import { DELogicNode } from '../de-logic-node';
10
10
  * @date 2023-02-09 21:02:20
11
11
  * @export
12
12
  * @class SortParamNode
13
- * @extends {DELogicNode}
13
+ * @extends {DELogicDELogicNode}
14
14
  */
15
- export class SortParamNode extends DELogicNode {
15
+ export class SortParamDELogicNode extends DELogicNode {
16
16
  declare model: IDESortParamLogic;
17
17
 
18
18
  async exec(ctx: DELogicContext): Promise<void> {
@@ -7,10 +7,10 @@ import { DELogicNode } from '../de-logic-node';
7
7
  * @author lxm
8
8
  * @date 2023-02-09 21:02:30
9
9
  * @export
10
- * @class StartNode
10
+ * @class StartDELogicNode
11
11
  * @extends {DELogicNode}
12
12
  */
13
- export class StartNode extends DELogicNode {
13
+ export class StartDELogicNode extends DELogicNode {
14
14
  async exec(_ctx: DELogicContext): Promise<void> {
15
15
  // 启动节点,无任何操作
16
16
  ibiz.log.debug(
@@ -9,10 +9,10 @@ import { DELogicNode } from '../de-logic-node';
9
9
  * @author lxm
10
10
  * @date 2023-02-09 21:02:00
11
11
  * @export
12
- * @class ThrowExceptionNode
12
+ * @class ThrowExceptionDELogicNode
13
13
  * @extends {DELogicNode}
14
14
  */
15
- export class ThrowExceptionNode extends DELogicNode {
15
+ export class ThrowExceptionDELogicNode extends DELogicNode {
16
16
  declare model: IDEThrowExceptionLogic;
17
17
 
18
18
  async exec(_ctx: DELogicContext): Promise<void> {
@@ -6,6 +6,9 @@ import { IDELogicProvider } from '../interface';
6
6
  import { getDELogicProvider } from '../register';
7
7
  import { filterFieldLogics, findDELogic } from '../model';
8
8
 
9
+ export * from './de-logic-node';
10
+ export { DELogic } from './de-logic';
11
+
9
12
  /**
10
13
  * 实体处理逻辑实例缓存
11
14
  */
@@ -5,19 +5,19 @@ import {
5
5
  } from '../register';
6
6
  import { DELogic } from './de-logic';
7
7
  import {
8
- EndNode,
9
- StartNode,
10
- DataSetNode,
11
- DEActionNode,
12
- SortParamNode,
13
- BindParamNode,
14
- CopyParamNode,
15
- RenewParamNode,
16
- ResetParamNode,
17
- DebugParamNode,
18
- AppendParamNode,
19
- PrepareParamNode,
20
- ThrowExceptionNode,
8
+ EndDELogicNode,
9
+ StartDELogicNode,
10
+ DataSetDELogicNode,
11
+ DEActionDELogicNode,
12
+ SortParamDELogicNode,
13
+ BindParamDELogicNode,
14
+ CopyParamDELogicNode,
15
+ RenewParamDELogicNode,
16
+ ResetParamDELogicNode,
17
+ DebugParamDELogicNode,
18
+ AppendParamDELogicNode,
19
+ PrepareParamDELogicNode,
20
+ ThrowExceptionDELogicNode,
21
21
  } from './de-logic-node';
22
22
 
23
23
  /**
@@ -33,51 +33,54 @@ export function presetDELogicProvider(): void {
33
33
  // 注册界面逻辑节点
34
34
  registerDELogicNodeProvider(
35
35
  'BEGIN',
36
- (node: IDELogicNode) => new StartNode(node),
36
+ (node: IDELogicNode) => new StartDELogicNode(node),
37
+ );
38
+ registerDELogicNodeProvider(
39
+ 'END',
40
+ (node: IDELogicNode) => new EndDELogicNode(node),
37
41
  );
38
- registerDELogicNodeProvider('END', (node: IDELogicNode) => new EndNode(node));
39
42
  registerDELogicNodeProvider(
40
43
  'DEACTION',
41
- (node: IDELogicNode) => new DEActionNode(node),
44
+ (node: IDELogicNode) => new DEActionDELogicNode(node),
42
45
  );
43
46
  registerDELogicNodeProvider(
44
47
  'PREPAREPARAM',
45
- (node: IDELogicNode) => new PrepareParamNode(node),
48
+ (node: IDELogicNode) => new PrepareParamDELogicNode(node),
46
49
  );
47
50
  registerDELogicNodeProvider(
48
51
  'RESETPARAM',
49
- (node: IDELogicNode) => new ResetParamNode(node),
52
+ (node: IDELogicNode) => new ResetParamDELogicNode(node),
50
53
  );
51
54
  registerDELogicNodeProvider(
52
55
  'COPYPARAM',
53
- (node: IDELogicNode) => new CopyParamNode(node),
56
+ (node: IDELogicNode) => new CopyParamDELogicNode(node),
54
57
  );
55
58
  registerDELogicNodeProvider(
56
59
  'BINDPARAM',
57
- (node: IDELogicNode) => new BindParamNode(node),
60
+ (node: IDELogicNode) => new BindParamDELogicNode(node),
58
61
  );
59
62
  registerDELogicNodeProvider(
60
63
  'DEBUGPARAM',
61
- (node: IDELogicNode) => new DebugParamNode(node),
64
+ (node: IDELogicNode) => new DebugParamDELogicNode(node),
62
65
  );
63
66
  registerDELogicNodeProvider(
64
67
  'APPENDPARAM',
65
- (node: IDELogicNode) => new AppendParamNode(node),
68
+ (node: IDELogicNode) => new AppendParamDELogicNode(node),
66
69
  );
67
70
  registerDELogicNodeProvider(
68
71
  'SORTPARAM',
69
- (node: IDELogicNode) => new SortParamNode(node),
72
+ (node: IDELogicNode) => new SortParamDELogicNode(node),
70
73
  );
71
74
  registerDELogicNodeProvider(
72
75
  'RENEWPARAM',
73
- (node: IDELogicNode) => new RenewParamNode(node),
76
+ (node: IDELogicNode) => new RenewParamDELogicNode(node),
74
77
  );
75
78
  registerDELogicNodeProvider(
76
79
  'DEDATASET',
77
- (node: IDELogicNode) => new DataSetNode(node),
80
+ (node: IDELogicNode) => new DataSetDELogicNode(node),
78
81
  );
79
82
  registerDELogicNodeProvider(
80
83
  'THROWEXCEPTION',
81
- (node: IDELogicNode) => new ThrowExceptionNode(node),
84
+ (node: IDELogicNode) => new ThrowExceptionDELogicNode(node),
82
85
  );
83
86
  }
@@ -316,4 +316,11 @@ export interface IApiGlobalCommonConfig {
316
316
  * @memberof IApiGlobalCommonConfig
317
317
  */
318
318
  aiTopicStorageMode: 'DEFAULT' | 'REMOTESESSION';
319
+
320
+ /**
321
+ * @description AI输入框空白占位
322
+ * @type {''}
323
+ * @memberof IApiGlobalCommonConfig
324
+ */
325
+ aiInputPlaceholder: '';
319
326
  }
@@ -277,4 +277,11 @@ export interface IApiAppUtil {
277
277
  * @memberof IApiAppUtil
278
278
  */
279
279
  resolveI18nText(text: string): string;
280
+
281
+ /**
282
+ * @description 获取运行时开发工具配置
283
+ * @returns {*} {IApiData}
284
+ * @memberof IApiAppUtil
285
+ */
286
+ getRuntimeDevToolConfig(): IApiData;
280
287
  }
@@ -138,6 +138,20 @@ export interface IAppDEService extends IApiAppDEService {
138
138
  data: IData,
139
139
  ): Promise<IHttpResponse>;
140
140
 
141
+ /**
142
+ * @description 调整 AI 聊天会话方向
143
+ * @param {IContext} context
144
+ * @param {IParams} params
145
+ * @param {IData} data
146
+ * @returns {*} {Promise<IHttpResponse>}
147
+ * @memberof IAppDEService
148
+ */
149
+ aiChatSupplement(
150
+ context: IContext,
151
+ params: IParams,
152
+ data: IData,
153
+ ): Promise<IHttpResponse>;
154
+
141
155
  /**
142
156
  * @description 创建当前数据对象实例
143
157
  * @param {(IData[] | IDataEntity[] | IData | IDataEntity)} data
@@ -1,3 +1,4 @@
1
+ import { IDevToolConfig } from '@ibiz-template/core';
1
2
  import { IApiAiChatParam, IApiAppUtil } from '../../api';
2
3
 
3
4
  /**
@@ -14,4 +15,11 @@ export interface IAiChatParam extends IApiAiChatParam {}
14
15
  * @interface IAppUtil
15
16
  * @extends {IApiAppUtil}
16
17
  */
17
- export interface IAppUtil extends IApiAppUtil {}
18
+ export interface IAppUtil extends IApiAppUtil {
19
+ /**
20
+ * @description 获取运行时开发工具配置
21
+ * @returns {*} {IDevToolConfig}
22
+ * @memberof IAppUtil
23
+ */
24
+ getRuntimeDevToolConfig(): IDevToolConfig;
25
+ }
@@ -523,6 +523,27 @@ export class DEService implements IAppDEService {
523
523
  return app.net.post(path, data, { srfactag: 'AIChat', ...params });
524
524
  }
525
525
 
526
+ /**
527
+ * @description 调整 AI 聊天会话方向
528
+ * @param {IContext} context
529
+ * @param {IParams} [params={}]
530
+ * @param {IData} [data={}]
531
+ * @returns {*} {Promise<IHttpResponse>}
532
+ * @memberof DEService
533
+ */
534
+ aiChatSupplement(
535
+ context: IContext,
536
+ params: IParams = {},
537
+ data: IData = {},
538
+ ): Promise<IHttpResponse> {
539
+ const app = ibiz.hub.getApp(this.model.appId);
540
+ const srfkey = context[this.model.codeName!.toLowerCase()];
541
+ const curPath = `/${this.model.deapicodeName2}/ssechatcompletion/supplement${srfkey ? `/${srfkey}` : ''}`;
542
+ const resPath = calcResPath(context, this.model);
543
+ const path = resPath ? `/${resPath}${curPath}` : `${curPath}`;
544
+ return app.net.post(path, data, { srfactag: 'AIChat', ...params });
545
+ }
546
+
526
547
  /**
527
548
  * 计算 AI 请求路径
528
549
  *
@@ -76,7 +76,13 @@ export class FrontUIActionProvider extends UIActionProviderBase {
76
76
  resultContext.srfnavctrlid = xdataControl.ctrlId;
77
77
  }
78
78
  // 解析自定义 视图 option 参数
79
- const options = this.handleViewOptionParams(resultParams);
79
+ const options = this.handleViewOptionParams(resultParams) || {};
80
+ if (
81
+ options.modalOption &&
82
+ Object.keys(options.modalOption).length > 0
83
+ ) {
84
+ Object.assign(options, { ...options.modalOption });
85
+ }
80
86
  const res: IModalData | undefined = await ibiz.commands.execute(
81
87
  OpenAppViewCommand.TAG,
82
88
  frontPSAppView,
@@ -4,6 +4,7 @@ import { IUILogicParams, IUILogicProvider } from '../interface';
4
4
  import { getUILogicProvider } from '../register';
5
5
 
6
6
  export * from './ui-logic-node';
7
+ export { UILogic } from './ui-logic';
7
8
 
8
9
  /**
9
10
  * 界面逻辑实例缓存
@@ -37,6 +37,7 @@ export * from './date-util';
37
37
  export { ChangeTracker } from './change-tracker/change-tracker';
38
38
  export { ViewShellHooks } from './view-shell-hooks/view-shell-hooks';
39
39
  export { WaterMarkUtil } from './water-mark-util/water-mark-util';
40
+ export { runWithConcurrency } from './task-util/task-util';
40
41
  export * from './map-util/map-util';
41
42
  export * from './wechat-util/wechat-util';
42
43
  export * from './json-util/json-util';
@@ -0,0 +1,45 @@
1
+ /* eslint-disable no-plusplus */
2
+ /**
3
+ * 并发控制函数
4
+ * @param tasks 需要执行的任务数组
5
+ * @param concurrency 最大并发数量
6
+ * @returns 所有任务执行结果的数组(保持与输入顺序一致)
7
+ */
8
+ export async function runWithConcurrency<T>(
9
+ tasks: (() => Promise<T>)[],
10
+ concurrency: number,
11
+ ): Promise<T[]> {
12
+ const results: T[] = new Array(tasks.length);
13
+ // 使用 Map 记录正在执行的任务,防止重复领取
14
+ const executing = new Map<number, Promise<void>>();
15
+ let currentIndex = 0;
16
+
17
+ const runTask = async (index: number): Promise<void> => {
18
+ try {
19
+ const data = await tasks[index]();
20
+ results[index] = data;
21
+ } finally {
22
+ // 任务完成后,从执行池中移除
23
+ executing.delete(index);
24
+ }
25
+ };
26
+
27
+ // 只要还有待处理的任务,就持续调度
28
+ while (currentIndex < tasks.length) {
29
+ // 如果当前并发数已满,等待最先完成的一个任务
30
+ if (executing.size >= concurrency) {
31
+ await Promise.race(executing.values());
32
+ continue;
33
+ }
34
+
35
+ // 领取任务并加入执行池
36
+ const index = currentIndex++;
37
+ const taskPromise = runTask(index);
38
+ executing.set(index, taskPromise);
39
+ }
40
+
41
+ // 等待所有剩余的执行中任务完成
42
+ await Promise.all(executing.values());
43
+
44
+ return results;
45
+ }