@ibiz-template/runtime 0.1.37 → 0.1.38

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 (136) hide show
  1. package/dist/index.esm.js +12603 -539
  2. package/dist/index.system.min.js +1 -1
  3. package/dist/index.system.min.js.map +1 -1
  4. package/out/application.d.ts +9 -1
  5. package/out/application.d.ts.map +1 -1
  6. package/out/application.js +9 -2
  7. package/out/controller/control/exp-bar/chart-exp-bar.controller.d.ts +24 -0
  8. package/out/controller/control/exp-bar/chart-exp-bar.controller.d.ts.map +1 -0
  9. package/out/controller/control/exp-bar/chart-exp-bar.controller.js +32 -0
  10. package/out/controller/control/exp-bar/index.d.ts +1 -0
  11. package/out/controller/control/exp-bar/index.d.ts.map +1 -1
  12. package/out/controller/control/exp-bar/index.js +1 -0
  13. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts +1 -0
  14. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts.map +1 -1
  15. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.js +8 -0
  16. package/out/controller/control/medit-view-panel/medit-view-panel.controller.d.ts +1 -13
  17. package/out/controller/control/medit-view-panel/medit-view-panel.controller.d.ts.map +1 -1
  18. package/out/controller/control/medit-view-panel/medit-view-panel.controller.js +7 -67
  19. package/out/controller/control/search-bar/search-bar.controller.d.ts.map +1 -1
  20. package/out/controller/control/search-bar/search-bar.controller.js +3 -3
  21. package/out/de-logic/de-logic-context.d.ts +4 -4
  22. package/out/de-logic/de-logic-context.d.ts.map +1 -1
  23. package/out/de-logic/de-logic-context.js +2 -1
  24. package/out/de-logic/de-logic-link/de-logic-link.js +1 -1
  25. package/out/de-logic/de-logic-param/de-logic-param.d.ts.map +1 -1
  26. package/out/de-logic/de-logic-param/de-logic-param.js +7 -1
  27. package/out/de-logic/de-logic.d.ts +1 -1
  28. package/out/de-logic/de-logic.d.ts.map +1 -1
  29. package/out/de-logic/index.d.ts +5 -5
  30. package/out/de-logic/index.d.ts.map +1 -1
  31. package/out/de-logic/index.js +32 -5
  32. package/out/engine/md-view.engine.d.ts +3 -3
  33. package/out/engine/md-view.engine.d.ts.map +1 -1
  34. package/out/engine/md-view.engine.js +14 -12
  35. package/out/hub/config/app-view-config-service.d.ts +3 -1
  36. package/out/hub/config/app-view-config-service.d.ts.map +1 -1
  37. package/out/hub/config/app-view-config-service.js +9 -0
  38. package/out/interface/common/i-app-view-config-service/i-app-view-config-service.d.ts +20 -2
  39. package/out/interface/common/i-app-view-config-service/i-app-view-config-service.d.ts.map +1 -1
  40. package/out/interface/controller/controller/control/i-chart-exp-bar.controller.d.ts +15 -0
  41. package/out/interface/controller/controller/control/i-chart-exp-bar.controller.d.ts.map +1 -0
  42. package/out/interface/controller/controller/control/i-chart-exp-bar.controller.js +1 -0
  43. package/out/interface/controller/controller/control/index.d.ts +1 -0
  44. package/out/interface/controller/controller/control/index.d.ts.map +1 -1
  45. package/out/interface/controller/controller/control/index.js +1 -0
  46. package/out/interface/controller/event/control/i-chart-exp-bar.event.d.ts +11 -0
  47. package/out/interface/controller/event/control/i-chart-exp-bar.event.d.ts.map +1 -0
  48. package/out/interface/controller/event/control/i-chart-exp-bar.event.js +1 -0
  49. package/out/interface/controller/event/control/index.d.ts +1 -0
  50. package/out/interface/controller/event/control/index.d.ts.map +1 -1
  51. package/out/interface/controller/event/control/index.js +1 -0
  52. package/out/interface/controller/event/view/i-chart-exp-view.event.d.ts +11 -0
  53. package/out/interface/controller/event/view/i-chart-exp-view.event.d.ts.map +1 -0
  54. package/out/interface/controller/event/view/i-chart-exp-view.event.js +1 -0
  55. package/out/interface/controller/event/view/index.d.ts +1 -0
  56. package/out/interface/controller/event/view/index.d.ts.map +1 -1
  57. package/out/interface/controller/event/view/index.js +1 -0
  58. package/out/interface/controller/state/control/i-chart-exp-bar.state.d.ts +11 -0
  59. package/out/interface/controller/state/control/i-chart-exp-bar.state.d.ts.map +1 -0
  60. package/out/interface/controller/state/control/i-chart-exp-bar.state.js +1 -0
  61. package/out/interface/controller/state/control/index.d.ts +1 -0
  62. package/out/interface/controller/state/control/index.d.ts.map +1 -1
  63. package/out/interface/controller/state/control/index.js +1 -0
  64. package/out/interface/controller/state/view/i-chart-exp-view.state.d.ts +11 -0
  65. package/out/interface/controller/state/view/i-chart-exp-view.state.d.ts.map +1 -0
  66. package/out/interface/controller/state/view/i-chart-exp-view.state.js +1 -0
  67. package/out/interface/controller/state/view/index.d.ts +1 -0
  68. package/out/interface/controller/state/view/index.d.ts.map +1 -1
  69. package/out/interface/controller/state/view/index.js +1 -0
  70. package/out/interface/service/code-list-item/code-list-item.d.ts +16 -0
  71. package/out/interface/service/code-list-item/code-list-item.d.ts.map +1 -1
  72. package/out/service/index.d.ts +1 -0
  73. package/out/service/index.d.ts.map +1 -1
  74. package/out/service/index.js +1 -0
  75. package/out/service/mqtt/mqtt.service.d.ts +66 -0
  76. package/out/service/mqtt/mqtt.service.d.ts.map +1 -0
  77. package/out/service/mqtt/mqtt.service.js +95 -0
  78. package/out/service/service/code-list/code-list.service.d.ts.map +1 -1
  79. package/out/service/service/code-list/code-list.service.js +12 -1
  80. package/out/service/service/entity/de.service.d.ts +2 -2
  81. package/out/service/service/entity/de.service.d.ts.map +1 -1
  82. package/out/service/service/entity/method/de-action.d.ts +14 -5
  83. package/out/service/service/entity/method/de-action.d.ts.map +1 -1
  84. package/out/service/service/entity/method/de-action.js +56 -15
  85. package/out/service/service/entity/method/fetch.d.ts +1 -1
  86. package/out/service/service/entity/method/fetch.d.ts.map +1 -1
  87. package/out/service/service/entity/method/fetch.js +9 -6
  88. package/out/service/service/entity/method/method.d.ts +13 -13
  89. package/out/service/service/entity/method/method.d.ts.map +1 -1
  90. package/out/service/service/entity/method/method.js +16 -11
  91. package/out/service/utils/dynamic-code-list/dynamic-code-list.d.ts +7 -1
  92. package/out/service/utils/dynamic-code-list/dynamic-code-list.d.ts.map +1 -1
  93. package/out/service/utils/dynamic-code-list/dynamic-code-list.js +76 -8
  94. package/out/ui-action/uiaction-util.js +3 -3
  95. package/out/ui-logic/ui-logic-param/ui-logic-param.d.ts.map +1 -1
  96. package/out/ui-logic/ui-logic-param/ui-logic-param.js +7 -1
  97. package/out/utils/script/script-factory.d.ts +10 -0
  98. package/out/utils/script/script-factory.d.ts.map +1 -1
  99. package/out/utils/script/script-factory.js +15 -0
  100. package/package.json +5 -3
  101. package/src/application.ts +22 -1
  102. package/src/controller/control/exp-bar/chart-exp-bar.controller.ts +51 -0
  103. package/src/controller/control/exp-bar/index.ts +1 -0
  104. package/src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts +14 -0
  105. package/src/controller/control/medit-view-panel/medit-view-panel.controller.ts +8 -78
  106. package/src/controller/control/search-bar/search-bar.controller.ts +6 -5
  107. package/src/de-logic/de-logic-context.ts +6 -5
  108. package/src/de-logic/de-logic-link/de-logic-link.ts +1 -1
  109. package/src/de-logic/de-logic-param/de-logic-param.ts +6 -1
  110. package/src/de-logic/de-logic.ts +5 -1
  111. package/src/de-logic/index.ts +49 -8
  112. package/src/engine/md-view.engine.ts +16 -13
  113. package/src/hub/config/app-view-config-service.ts +12 -1
  114. package/src/interface/common/i-app-view-config-service/i-app-view-config-service.ts +22 -4
  115. package/src/interface/controller/controller/control/i-chart-exp-bar.controller.ts +19 -0
  116. package/src/interface/controller/controller/control/index.ts +1 -0
  117. package/src/interface/controller/event/control/i-chart-exp-bar.event.ts +10 -0
  118. package/src/interface/controller/event/control/index.ts +1 -0
  119. package/src/interface/controller/event/view/i-chart-exp-view.event.ts +11 -0
  120. package/src/interface/controller/event/view/index.ts +1 -0
  121. package/src/interface/controller/state/control/i-chart-exp-bar.state.ts +10 -0
  122. package/src/interface/controller/state/control/index.ts +1 -0
  123. package/src/interface/controller/state/view/i-chart-exp-view.state.ts +10 -0
  124. package/src/interface/controller/state/view/index.ts +1 -0
  125. package/src/interface/service/code-list-item/code-list-item.ts +20 -0
  126. package/src/service/index.ts +1 -0
  127. package/src/service/mqtt/mqtt.service.ts +117 -0
  128. package/src/service/service/code-list/code-list.service.ts +15 -1
  129. package/src/service/service/entity/de.service.ts +2 -2
  130. package/src/service/service/entity/method/de-action.ts +74 -33
  131. package/src/service/service/entity/method/fetch.ts +12 -11
  132. package/src/service/service/entity/method/method.ts +28 -19
  133. package/src/service/utils/dynamic-code-list/dynamic-code-list.ts +103 -10
  134. package/src/ui-action/uiaction-util.ts +3 -3
  135. package/src/ui-logic/ui-logic-param/ui-logic-param.ts +6 -1
  136. package/src/utils/script/script-factory.ts +16 -0
@@ -0,0 +1,19 @@
1
+ import { IChartExpBar } from '@ibiz/model-core';
2
+ import { IExpBarControlController } from './i-exp-bar-control.controller';
3
+ import { IChartExpBarState } from '../../state';
4
+ import { IChartExpBarEvent } from '../../event';
5
+
6
+ /**
7
+ * 图表导航栏部件控制器
8
+ * @author lxm
9
+ * @date 2023-05-04 01:47:16
10
+ * @export
11
+ * @interface ICalendarController
12
+ * @extends {IMDControlController}
13
+ */
14
+ export interface IChartExpBarController
15
+ extends IExpBarControlController<
16
+ IChartExpBar,
17
+ IChartExpBarState,
18
+ IChartExpBarEvent
19
+ > {}
@@ -34,3 +34,4 @@ export * from './i-kanban.controller';
34
34
  export * from './i-tree-grid.controller';
35
35
  export * from './i-tree-grid-ex.controller';
36
36
  export * from './i-medit-view-panel.controller';
37
+ export * from './i-chart-exp-bar.controller';
@@ -0,0 +1,10 @@
1
+ import { IExpBarControlEvent } from './i-exp-bar-control.event';
2
+
3
+ /**
4
+ * 图表导航栏事件
5
+ *
6
+ * @export
7
+ * @interface IChartExpBarEvent
8
+ * @extends {IExpBarControlEvent}
9
+ */
10
+ export interface IChartExpBarEvent extends IExpBarControlEvent {}
@@ -30,3 +30,4 @@ export * from './i-context-menu.event';
30
30
  export * from './i-tree-grid.event';
31
31
  export * from './i-tree-grid-ex.event';
32
32
  export * from './i-medit-view-panel.event';
33
+ export * from './i-chart-exp-bar.event';
@@ -0,0 +1,11 @@
1
+ import { IExpViewEvent } from './i-exp-view.event';
2
+
3
+ /**
4
+ * 图表导航视图事件
5
+ *
6
+ * @author zk
7
+ * @export
8
+ * @interface IChartViewEvent
9
+ * @extends {IMDViewEvent}
10
+ */
11
+ export type IChartExpViewEvent = IExpViewEvent;
@@ -40,3 +40,4 @@ export * from './i-form-pickup-data-view.event';
40
40
  export * from './i-tree-grid-view.event';
41
41
  export * from './i-tree-grid-ex-view.event';
42
42
  export * from './i-medit-view9.event';
43
+ export * from './i-chart-exp-view.event';
@@ -0,0 +1,10 @@
1
+ import { IExpBarControlState } from './i-exp-bar-control.state';
2
+
3
+ /**
4
+ * 图表导航栏部件状态
5
+ * @author zk
6
+ * @export
7
+ * @interface IChartExpBarState
8
+ * @extends {IExpBarControlState}
9
+ */
10
+ export interface IChartExpBarState extends IExpBarControlState {}
@@ -36,3 +36,4 @@ export * from './i-kanban.state';
36
36
  export * from './i-tree-grid.state';
37
37
  export * from './i-tree-grid-ex.state';
38
38
  export * from './i-medit-view-panel.state';
39
+ export * from './i-chart-exp-bar.state';
@@ -0,0 +1,10 @@
1
+ import { IExpViewState } from './i-exp-view.state';
2
+
3
+ /**
4
+ * 图表导航视图UI状态
5
+ *
6
+ * @export
7
+ * @class IChartExpViewState
8
+ * @extends {IExpViewState}
9
+ */
10
+ export interface IChartExpViewState extends IExpViewState {}
@@ -41,3 +41,4 @@ export * from './i-form-pickup-data-view.state';
41
41
  export * from './i-tree-grid-view.state';
42
42
  export * from './i-tree-grid-ex-view.state';
43
43
  export * from './i-medit-view9.state';
44
+ export * from './i-chart-exp-view.state';
@@ -1,3 +1,5 @@
1
+ import { ISysImage } from '@ibiz/model-core';
2
+
1
3
  /**
2
4
  * 返回的代码项格式
3
5
  *
@@ -50,4 +52,22 @@ export interface CodeListItem {
50
52
  * @type {boolean}
51
53
  */
52
54
  disableSelect?: boolean;
55
+
56
+ /**
57
+ * 图标对象
58
+ * @type {ISysImage}
59
+ */
60
+ sysImage?: ISysImage;
61
+
62
+ /**
63
+ * 代码项数据
64
+ * @type {String}
65
+ */
66
+ data?: IData;
67
+
68
+ /**
69
+ * 提示信息
70
+ * @type {String}
71
+ */
72
+ tooltip?: string;
53
73
  }
@@ -4,6 +4,7 @@ export * from './constant';
4
4
  export * from './vo';
5
5
  export * from './constant';
6
6
  export * from './dto/method.dto';
7
+ export { MqttService } from './mqtt/mqtt.service';
7
8
  export * from './app-data-entity/app-data-entity';
8
9
 
9
10
  export { DEServiceUtil } from './de-service-util';
@@ -0,0 +1,117 @@
1
+ import { IPortalMessage } from '@ibiz-template/core';
2
+ import { MqttClient, IClientOptions } from 'mqtt';
3
+ import { QXEvent, createUUID, isNilOrEmpty } from 'qx-util';
4
+
5
+ /**
6
+ * mqtt 连接服务
7
+ *
8
+ * @author chitanda
9
+ * @date 2023-10-20 14:10:40
10
+ * @export
11
+ * @class MqttService
12
+ */
13
+ export class MqttService {
14
+ /**
15
+ * 接受消息通知
16
+ *
17
+ * @author chitanda
18
+ * @date 2023-10-23 15:10:06
19
+ */
20
+ readonly evt: QXEvent<{ message: (msg: IPortalMessage) => void }> =
21
+ new QXEvent();
22
+
23
+ /**
24
+ * mqtt 连接实例
25
+ *
26
+ * @author chitanda
27
+ * @date 2023-10-20 20:10:44
28
+ * @type {MqttClient}
29
+ */
30
+ client?: MqttClient;
31
+
32
+ /**
33
+ * 连接选项
34
+ *
35
+ * @author chitanda
36
+ * @date 2023-10-20 14:10:25
37
+ * @protected
38
+ * @type {IClientOptions}
39
+ */
40
+ protected options: IClientOptions = {
41
+ // 超时时间
42
+ connectTimeout: 6000,
43
+ // 认证信息
44
+ clientId: createUUID(),
45
+ username: '',
46
+ password: '',
47
+ // 心跳时间
48
+ keepalive: 60,
49
+ clean: true,
50
+ };
51
+
52
+ /**
53
+ * Creates an instance of MqttService.
54
+ *
55
+ * @author chitanda
56
+ * @date 2023-10-23 15:10:06
57
+ * @param {string} mqttTopic
58
+ * @param {string} token
59
+ * @param {string} appId
60
+ */
61
+ constructor(
62
+ mqttTopic: string,
63
+ token: string,
64
+ protected appId: string,
65
+ ) {
66
+ if (isNilOrEmpty(mqttTopic) || isNilOrEmpty(token)) {
67
+ throw new Error('mqttTopic or token is empty');
68
+ }
69
+ this.options.username = mqttTopic;
70
+ this.options.password = token;
71
+ }
72
+
73
+ /**
74
+ * mqtt 连接
75
+ *
76
+ * @author chitanda
77
+ * @date 2023-10-23 15:10:58
78
+ * @return {*} {Promise<void>}
79
+ */
80
+ async connect(): Promise<void> {
81
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
82
+ // @ts-ignore
83
+ const module = await import('mqtt/dist/mqtt.min');
84
+ const mqtt = module.default ? module.default : module;
85
+ const { location } = window;
86
+ this.client = mqtt.connect(
87
+ `ws://${location.host}${ibiz.env.baseUrl}/${this.appId}${ibiz.env.mqttUrl}`,
88
+ this.options,
89
+ ) as MqttClient;
90
+ this.client.on('connect', () => {
91
+ ibiz.log.debug('mqtt connect');
92
+ });
93
+ this.client.on('error', error => {
94
+ ibiz.log.error('mqtt error', error);
95
+ });
96
+ this.client.on('message', (topic, payload) => {
97
+ this.evt.emit('message', JSON.parse(payload.toString()));
98
+ ibiz.log.debug('mqtt message', topic, payload.toString());
99
+ });
100
+ this.client.on('reconnect', () => {
101
+ ibiz.log.debug('mqtt reconnect');
102
+ });
103
+ this.client.on('close', () => {
104
+ console.debug('mqtt close');
105
+ });
106
+ }
107
+
108
+ /**
109
+ * 结束 mqtt 连接
110
+ *
111
+ * @author chitanda
112
+ * @date 2023-10-23 15:10:37
113
+ */
114
+ close(): void {
115
+ this.client?.end();
116
+ }
117
+ }
@@ -1,6 +1,7 @@
1
1
  import { RuntimeError } from '@ibiz-template/core';
2
2
  import { IAppCodeList, IApplication, ICodeItem } from '@ibiz/model-core';
3
3
  import { CodeListItem } from '../../../interface';
4
+ import { ScriptFactory } from '../../../utils';
4
5
  import { DynamicCodeListCache } from '../../utils';
5
6
 
6
7
  /**
@@ -98,11 +99,18 @@ export class CodeListService {
98
99
  isValueNumber: boolean,
99
100
  ): Readonly<CodeListItem>[] {
100
101
  return codeItems.map(codeItem => {
101
- // todo代码项其他属性,表单数据
102
102
  let text = codeItem.text!;
103
103
  if (codeItem.textLanguageRes) {
104
104
  text = ibiz.i18n.t(codeItem.textLanguageRes.lanResTag!, codeItem.text);
105
105
  }
106
+ // 提示信息
107
+ let { tooltip } = codeItem;
108
+ if (codeItem.tooltipLanguageRes) {
109
+ tooltip = ibiz.i18n.t(
110
+ codeItem.tooltipLanguageRes.lanResTag!,
111
+ codeItem.tooltip,
112
+ );
113
+ }
106
114
  const _codeItem: CodeListItem = {
107
115
  text,
108
116
  value: isValueNumber ? Number(codeItem.value) : codeItem.value!,
@@ -110,6 +118,12 @@ export class CodeListService {
110
118
  id: codeItem.codeName!,
111
119
  textCls: codeItem.textCls,
112
120
  disableSelect: codeItem.disableSelect,
121
+ tooltip,
122
+ // 代码项数据
123
+ data: codeItem.data
124
+ ? (ScriptFactory.execSingleLine(codeItem.data) as IData)
125
+ : undefined,
126
+ sysImage: codeItem.sysImage,
113
127
  };
114
128
  if (codeItem.codeItems?.length) {
115
129
  _codeItem.children = this.formatStaticItems(
@@ -141,7 +141,7 @@ export class DEService implements IAppDEService {
141
141
  exec(
142
142
  id: string,
143
143
  context: IParams,
144
- params?: IData,
144
+ params?: IData | IData[],
145
145
  params2?: IParams,
146
146
  ): Promise<IHttpResponse> {
147
147
  const method = this.getMethod(id);
@@ -165,7 +165,7 @@ export class DEService implements IAppDEService {
165
165
  execAc(
166
166
  id: string,
167
167
  context: IParams,
168
- params?: IData,
168
+ params?: IData | IData[],
169
169
  params2: IParams = {},
170
170
  ): Promise<IHttpResponse> {
171
171
  const method = this.getMethod(id, true);
@@ -1,10 +1,11 @@
1
1
  import {
2
2
  HttpResponse,
3
3
  IHttpResponse,
4
+ RuntimeError,
4
5
  RuntimeModelError,
5
6
  } from '@ibiz-template/core';
6
7
  import { IAppDEAction } from '@ibiz/model-core';
7
- import { clone } from 'ramda';
8
+ import { isArray, isNil } from 'lodash-es';
8
9
  import { Method } from './method';
9
10
  import { IDataEntity } from '../../../../interface';
10
11
  import { findDELogic } from '../../../../model';
@@ -36,9 +37,27 @@ export class DEActionMethod extends Method {
36
37
  return isLocalMode(this.method);
37
38
  }
38
39
 
40
+ /**
41
+ * 处理请求发送参数
42
+ * @author lxm
43
+ * @date 2023-10-19 02:50:36
44
+ * @param {IParams} context 上下文
45
+ * @param {(IData | IData[])} data 数据对象
46
+ * @return {*} {(Promise<IData | IData[]>)}
47
+ */
48
+ async inputHandle(
49
+ context: IParams,
50
+ data: IData | IData[],
51
+ ): Promise<IData | IData[]> {
52
+ if (isArray(data)) {
53
+ return Promise.all(data.map(item => this.input.handle(context, item)));
54
+ }
55
+ return this.input.handle(context, data);
56
+ }
57
+
39
58
  async exec(
40
59
  context: IParams,
41
- data?: IData,
60
+ data?: IData | IData[],
42
61
  params?: IParams,
43
62
  ): Promise<HttpResponse<IData>> {
44
63
  // 实体逻辑处理
@@ -48,21 +67,16 @@ export class DEActionMethod extends Method {
48
67
  if (!deLogic) {
49
68
  throw new RuntimeModelError(this.method, '缺少实体处理逻辑');
50
69
  }
51
- return execDELogicAction(
52
- deLogic,
53
- clone(context),
54
- data ? clone(data) : {},
55
- params ? clone(params) : {},
56
- );
70
+ return execDELogicAction(deLogic, context, data, params);
57
71
  }
58
72
 
59
73
  if (data && !this.isLocalMode) {
60
- data = await this.input.handle(context, data);
74
+ data = await this.inputHandle(context, data);
61
75
  }
62
76
 
63
77
  // 执行变更属性逻辑
64
78
  if (data && !['READ', 'GETDRAFT'].includes(this.method.actionMode!)) {
65
- await execFieldLogics(this.entity, 'change', context, data, params || {});
79
+ await execFieldLogics(this.entity, 'change', context, data, params);
66
80
  }
67
81
 
68
82
  let result: IHttpResponse<IData>;
@@ -100,10 +114,13 @@ export class DEActionMethod extends Method {
100
114
  default: {
101
115
  let path = this.calcPath(context);
102
116
  if (this.method.needResourceKey) {
103
- path = `${path}/${
104
- context[this.entity.codeName!.toLowerCase()] ||
105
- data?.[this.entity.keyAppDEFieldId!]
106
- }`;
117
+ let srfkey = context[this.entity.codeName!.toLowerCase()];
118
+ if (isNil(srfkey)) {
119
+ srfkey = isArray(data)
120
+ ? null
121
+ : data?.[this.entity.keyAppDEFieldId!];
122
+ }
123
+ path = `${path}/${srfkey}`;
107
124
  }
108
125
  const res = await this.request(path, context, data, params);
109
126
  res.data = await this.result.handle(context, res.data);
@@ -112,13 +129,15 @@ export class DEActionMethod extends Method {
112
129
  }
113
130
 
114
131
  // 计算属性逻辑
115
- await execFieldLogics(
116
- this.entity,
117
- 'compute',
118
- context,
119
- result.data,
120
- params || {},
121
- );
132
+ if (result.data) {
133
+ await execFieldLogics(
134
+ this.entity,
135
+ 'compute',
136
+ context,
137
+ result.data,
138
+ params,
139
+ );
140
+ }
122
141
 
123
142
  return result;
124
143
  }
@@ -134,9 +153,12 @@ export class DEActionMethod extends Method {
134
153
  */
135
154
  async create(
136
155
  context: IParams,
137
- data: IData,
138
- params: IParams,
156
+ data?: IData | IData[],
157
+ params?: IParams,
139
158
  ): Promise<IHttpResponse<IDataEntity>> {
159
+ if (!data) {
160
+ throw new RuntimeError('create行为没有传data');
161
+ }
140
162
  if (this.isLocalMode) {
141
163
  return this.createTemp(context, this.createEntity(data));
142
164
  }
@@ -182,9 +204,12 @@ export class DEActionMethod extends Method {
182
204
  */
183
205
  async update(
184
206
  context: IParams,
185
- data: IData | IDataEntity,
186
- params: IParams = {},
207
+ data?: IData | IData[],
208
+ params?: IParams,
187
209
  ): Promise<IHttpResponse<IDataEntity>> {
210
+ if (!data) {
211
+ throw new RuntimeError('update行为没有传data');
212
+ }
188
213
  if (this.isLocalMode) {
189
214
  return this.updateTemp(context, this.createEntity(data));
190
215
  }
@@ -256,12 +281,20 @@ export class DEActionMethod extends Method {
256
281
  */
257
282
  async createTemp(
258
283
  context: IParams,
259
- entity: IData,
284
+ entity: IData | IData[],
260
285
  ): Promise<IHttpResponse<IDataEntity>> {
261
286
  try {
262
287
  const s = await this.getService();
263
- const data = await s.local.add(context, this.createEntity(entity));
264
- return new HttpResponse(data);
288
+ const addData = this.createEntity(entity);
289
+ let resultData: IDataEntity | IDataEntity[];
290
+ if (isArray(addData)) {
291
+ resultData = await Promise.all(
292
+ addData.map(item => s.local.add(context, item)!),
293
+ );
294
+ } else {
295
+ resultData = await s.local.add(context, addData)!;
296
+ }
297
+ return new HttpResponse(resultData);
265
298
  } catch (err) {
266
299
  return new HttpResponse(err, 500);
267
300
  }
@@ -335,15 +368,23 @@ export class DEActionMethod extends Method {
335
368
  */
336
369
  async updateTemp(
337
370
  context: IParams,
338
- entity: IData,
371
+ entity: IData | IData[],
339
372
  ): Promise<IHttpResponse<IDataEntity>> {
340
373
  try {
341
374
  const s = await this.getService();
342
- const data = s.local.update(context, this.createEntity(entity))!;
343
- if (data) {
344
- return new HttpResponse(data);
375
+ const updateData = this.createEntity(entity);
376
+ let resultData: IDataEntity | IDataEntity[];
377
+ if (isArray(updateData)) {
378
+ resultData = await Promise.all(
379
+ updateData.map(item => s.local.update(context, item)!),
380
+ );
381
+ } else {
382
+ resultData = await s.local.update(context, updateData)!;
345
383
  }
346
- return new HttpResponse(data, 500);
384
+ if (resultData) {
385
+ return new HttpResponse(resultData);
386
+ }
387
+ return new HttpResponse(resultData, 500);
347
388
  } catch (err) {
348
389
  return new HttpResponse(err, 500);
349
390
  }
@@ -6,6 +6,7 @@ import {
6
6
  import { ascSort, descSort } from 'qx-util';
7
7
  import { clone, equals, isEmpty, isNil, where } from 'ramda';
8
8
  import { IAppDEDataSet } from '@ibiz/model-core';
9
+ import { isArray } from 'lodash-es';
9
10
  import { PSDEDQCondEngine, SearchFilter } from '../../../utils';
10
11
  import { Method } from './method';
11
12
  import { IDataEntity } from '../../../../interface';
@@ -30,14 +31,17 @@ export class FetchMethod extends Method {
30
31
 
31
32
  async exec(
32
33
  context: IParams,
33
- data: IData,
34
- params: IParams,
34
+ params?: IData | IData[],
35
+ params2?: IParams,
35
36
  ): Promise<HttpResponse<IDataEntity[]>> {
37
+ // 过滤参数,必须是对象
38
+ const searchParams = params && isArray(params) ? params : params2 || {};
39
+
36
40
  if (this.isLocalMode) {
37
41
  // 临时数据
38
42
  const items = await this.searchLocal(
39
43
  null,
40
- new SearchFilter(context, data),
44
+ new SearchFilter(context, searchParams),
41
45
  );
42
46
  return new HttpResponse<IDataEntity[]>(items, 200);
43
47
  }
@@ -48,12 +52,12 @@ export class FetchMethod extends Method {
48
52
  case 'INDEXDE':
49
53
  case 'CODELIST':
50
54
  case 'MULTIFORM':
51
- res = await this.fetchCodeListSet(context, params);
55
+ res = await this.fetchCodeListSet(context, searchParams);
52
56
  break;
53
57
  case 'REMOTE':
54
58
  {
55
59
  const path = this.calcPath(context);
56
- res = await this.request(path, context, data, params);
60
+ res = await this.request(path, context, params, params2);
57
61
  }
58
62
  break;
59
63
  default:
@@ -68,13 +72,10 @@ export class FetchMethod extends Method {
68
72
  res.data = items.map(item => this.createEntity(item));
69
73
 
70
74
  // 计算属性逻辑,每条数据走一遍
71
- if (res.data.length) {
72
- await Promise.all(
73
- res.data.map((item: IData) =>
74
- execFieldLogics(this.entity, 'compute', context, item, params),
75
- ),
76
- );
75
+ if (res.data) {
76
+ execFieldLogics(this.entity, 'compute', context, res.data, searchParams);
77
77
  }
78
+
78
79
  return res as HttpResponse<IDataEntity[]>;
79
80
  }
80
81
 
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-vars */
2
2
  import { HttpResponse, RuntimeModelError } from '@ibiz-template/core';
3
3
  import { IAppDataEntity, IAppDEMethod } from '@ibiz/model-core';
4
- import { notNilEmpty } from 'qx-util';
4
+ import { isArray } from 'lodash-es';
5
5
  import { Application } from '../../../../application';
6
6
  import { AppDataEntity } from '../../../app-data-entity/app-data-entity';
7
7
  import { calcResPath } from '../../../utils';
@@ -71,16 +71,17 @@ export abstract class Method {
71
71
  /**
72
72
  * 执行行为
73
73
  *
74
- * @author chitanda
75
- * @date 2022-10-10 14:10:42
76
- * @param {IParams} context
77
- * @param {IData} [params={}]
78
- * @param {IParams} [params2={}]
74
+ * @author lxm
75
+ * @date 2023-10-19 02:42:49
76
+ * @abstract
77
+ * @param {IParams} context 上下文
78
+ * @param {(IData | IData[])} [params] 请求参数
79
+ * @param {IParams} [params2] 查询参数
79
80
  * @return {*} {Promise<HttpResponse>}
80
81
  */
81
82
  abstract exec(
82
83
  context: IParams,
83
- params?: IData,
84
+ params?: IData | IData[],
84
85
  params2?: IParams,
85
86
  ): Promise<HttpResponse>;
86
87
 
@@ -99,7 +100,7 @@ export abstract class Method {
99
100
  protected async request(
100
101
  path: string,
101
102
  context: IParams,
102
- data?: IData,
103
+ data?: IData | IData[],
103
104
  params?: IParams,
104
105
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
105
106
  ): Promise<HttpResponse<any>> {
@@ -111,7 +112,7 @@ export abstract class Method {
111
112
  case 'POST':
112
113
  res = await this.app.net.post(
113
114
  this.mergeRequestPath(path, methodName),
114
- notNilEmpty(data) ? data! : params || {},
115
+ data || params || {},
115
116
  );
116
117
  break;
117
118
  case 'GET':
@@ -123,7 +124,7 @@ export abstract class Method {
123
124
  case 'PUT': {
124
125
  res = await this.app.net.put(
125
126
  this.mergeRequestPath(path, methodName),
126
- notNilEmpty(data) ? data! : params || {},
127
+ data || params || {},
127
128
  );
128
129
  break;
129
130
  }
@@ -184,17 +185,25 @@ export abstract class Method {
184
185
 
185
186
  /**
186
187
  * 创建实体
187
- *
188
- * @author chitanda
189
- * @date 2022-10-11 22:10:05
188
+ * @author lxm
189
+ * @date 2023-10-19 03:22:00
190
190
  * @protected
191
- * @param {(IData | IDataEntity)} data
192
- * @return {*} {IDataEntity}
191
+ * @param {(IData[] | IDataEntity[] | IData | IDataEntity)} data
192
+ * @return {*} {(IDataEntity | IDataEntity[])}
193
193
  */
194
- protected createEntity(data: IData | IDataEntity): IDataEntity {
195
- if (data instanceof AppDataEntity) {
196
- return data.clone();
194
+ protected createEntity(
195
+ data: IData[] | IDataEntity[] | IData | IDataEntity,
196
+ ): IDataEntity | IDataEntity[] {
197
+ const toEntity = (single: IData | IDataEntity): IDataEntity => {
198
+ if (single instanceof AppDataEntity) {
199
+ return single.clone();
200
+ }
201
+ return new AppDataEntity(this.entity, single);
202
+ };
203
+
204
+ if (isArray(data)) {
205
+ return data.map(item => toEntity(item));
197
206
  }
198
- return new AppDataEntity(this.entity, data);
207
+ return toEntity(data);
199
208
  }
200
209
  }