@ibiz-template/runtime 0.5.3-beta.0 → 0.5.3-beta.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 (214) hide show
  1. package/dist/index.esm.js +2191 -1020
  2. package/dist/index.system.min.js +1 -1
  3. package/out/app-hub.d.ts +24 -3
  4. package/out/app-hub.d.ts.map +1 -1
  5. package/out/app-hub.js +36 -2
  6. package/out/application.js +1 -1
  7. package/out/command/app/open-app-view/open-app-view.d.ts.map +1 -1
  8. package/out/command/app/open-app-view/open-app-view.js +8 -1
  9. package/out/constant/control-type.d.ts +5 -1
  10. package/out/constant/control-type.d.ts.map +1 -1
  11. package/out/constant/control-type.js +4 -0
  12. package/out/controller/common/editor/editor.controller.d.ts +24 -0
  13. package/out/controller/common/editor/editor.controller.d.ts.map +1 -1
  14. package/out/controller/common/editor/editor.controller.js +50 -0
  15. package/out/controller/common/view/view.controller.d.ts.map +1 -1
  16. package/out/controller/common/view/view.controller.js +3 -2
  17. package/out/controller/constant/control/index.d.ts +1 -0
  18. package/out/controller/constant/control/index.d.ts.map +1 -1
  19. package/out/controller/constant/control/index.js +1 -0
  20. package/out/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.d.ts +5 -0
  21. package/out/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.d.ts.map +1 -0
  22. package/out/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.js +6 -0
  23. package/out/controller/control/chart/chart.controller.js +1 -1
  24. package/out/controller/control/form/form/form.controller.d.ts.map +1 -1
  25. package/out/controller/control/form/form/form.controller.js +4 -1
  26. package/out/controller/control/form/form-detail/form-detail/form-detail.controller.d.ts.map +1 -1
  27. package/out/controller/control/form/form-detail/form-detail/form-detail.controller.js +4 -0
  28. package/out/controller/control/form/form-detail/form-tab-page/form-tab-page.controller.d.ts +8 -0
  29. package/out/controller/control/form/form-detail/form-tab-page/form-tab-page.controller.d.ts.map +1 -1
  30. package/out/controller/control/form/form-detail/form-tab-page/form-tab-page.controller.js +10 -0
  31. package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.controller.d.ts +8 -0
  32. package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.controller.d.ts.map +1 -1
  33. package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.controller.js +15 -0
  34. package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.state.d.ts +7 -0
  35. package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.state.d.ts.map +1 -1
  36. package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.state.js +10 -0
  37. package/out/controller/control/grid/grid/grid.controller.js +1 -1
  38. package/out/controller/control/grid/grid/grid.service.d.ts.map +1 -1
  39. package/out/controller/control/grid/grid/grid.service.js +1 -10
  40. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts +7 -0
  41. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts.map +1 -1
  42. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.js +11 -2
  43. package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.d.ts +0 -7
  44. package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.d.ts.map +1 -1
  45. package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.js +0 -9
  46. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.d.ts +1 -0
  47. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.d.ts.map +1 -1
  48. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.js +1 -0
  49. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.d.ts +10 -0
  50. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.d.ts.map +1 -1
  51. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.js +12 -0
  52. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.d.ts +34 -0
  53. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.d.ts.map +1 -1
  54. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.js +68 -0
  55. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-node-column.controller.d.ts +205 -0
  56. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-node-column.controller.d.ts.map +1 -0
  57. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-node-column.controller.js +345 -0
  58. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.d.ts +3 -0
  59. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.d.ts.map +1 -1
  60. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.js +14 -1
  61. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.d.ts +16 -8
  62. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.d.ts.map +1 -1
  63. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.js +26 -12
  64. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.d.ts +59 -0
  65. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.d.ts.map +1 -1
  66. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.js +238 -1
  67. package/out/de-logic/utils/handle-src-val.d.ts +15 -0
  68. package/out/de-logic/utils/handle-src-val.d.ts.map +1 -1
  69. package/out/de-logic/utils/handle-src-val.js +10 -1
  70. package/out/interface/common/i-app-hub-service/i-app-hub-service.d.ts +16 -4
  71. package/out/interface/common/i-app-hub-service/i-app-hub-service.d.ts.map +1 -1
  72. package/out/interface/controller/controller/control/i-tree-grid-ex.controller.d.ts +23 -1
  73. package/out/interface/controller/controller/control/i-tree-grid-ex.controller.d.ts.map +1 -1
  74. package/out/interface/controller/event/control/i-tree-grid-ex.event.d.ts +17 -0
  75. package/out/interface/controller/event/control/i-tree-grid-ex.event.d.ts.map +1 -1
  76. package/out/interface/controller/state/control/i-tree-grid-ex.state.d.ts +60 -2
  77. package/out/interface/controller/state/control/i-tree-grid-ex.state.d.ts.map +1 -1
  78. package/out/interface/provider/i-async-action.provider.d.ts +3 -2
  79. package/out/interface/provider/i-async-action.provider.d.ts.map +1 -1
  80. package/out/interface/service/i-transaction/i-transaction.d.ts +83 -0
  81. package/out/interface/service/i-transaction/i-transaction.d.ts.map +1 -0
  82. package/out/interface/service/index.d.ts +1 -1
  83. package/out/interface/service/index.d.ts.map +1 -1
  84. package/out/interface/service/service/i-app-de.service.d.ts +23 -0
  85. package/out/interface/service/service/i-app-de.service.d.ts.map +1 -1
  86. package/out/interface/service/service/i-wf.service.d.ts +5 -4
  87. package/out/interface/service/service/i-wf.service.d.ts.map +1 -1
  88. package/out/plugin/index.d.ts +1 -1
  89. package/out/plugin/index.d.ts.map +1 -1
  90. package/out/plugin/remote-plugin-item/remote-plugin-item.d.ts +46 -0
  91. package/out/plugin/remote-plugin-item/remote-plugin-item.d.ts.map +1 -1
  92. package/out/register/helper/app-menu-item-register.d.ts.map +1 -1
  93. package/out/register/helper/app-menu-item-register.js +1 -6
  94. package/out/register/helper/panel-item-register.d.ts.map +1 -1
  95. package/out/register/helper/panel-item-register.js +36 -30
  96. package/out/service/dto/method.dto.d.ts +1 -22
  97. package/out/service/dto/method.dto.d.ts.map +1 -1
  98. package/out/service/dto/method.dto.js +43 -59
  99. package/out/service/mqtt/mqtt.service.js +2 -2
  100. package/out/service/service/auth/v7-auth.service.d.ts.map +1 -1
  101. package/out/service/service/auth/v7-auth.service.js +2 -0
  102. package/out/service/service/entity/de.service.d.ts +6 -10
  103. package/out/service/service/entity/de.service.d.ts.map +1 -1
  104. package/out/service/service/entity/de.service.js +8 -11
  105. package/out/service/service/entity/method/de-action.d.ts +13 -1
  106. package/out/service/service/entity/method/de-action.d.ts.map +1 -1
  107. package/out/service/service/entity/method/de-action.js +169 -61
  108. package/out/service/service/entity/method/fetch.d.ts.map +1 -1
  109. package/out/service/service/entity/method/fetch.js +40 -41
  110. package/out/service/service/entity/method/method-input.d.ts.map +1 -1
  111. package/out/service/service/entity/method/method-input.js +3 -2
  112. package/out/service/service/entity/method/method-renturn.d.ts.map +1 -1
  113. package/out/service/service/entity/method/method-renturn.js +9 -2
  114. package/out/service/service/work-flow/work-flow.service.d.ts +1 -1
  115. package/out/service/service/work-flow/work-flow.service.d.ts.map +1 -1
  116. package/out/service/service/work-flow/work-flow.service.js +2 -2
  117. package/out/service/utils/de-cache/de-cache.d.ts +11 -11
  118. package/out/service/utils/de-cache/de-cache.d.ts.map +1 -1
  119. package/out/service/utils/de-cache/de-cache.js +123 -96
  120. package/out/service/utils/de-dq-cond/ps-model-cond-engine-base.d.ts.map +1 -1
  121. package/out/service/utils/de-dq-cond/ps-model-cond-engine-base.js +4 -0
  122. package/out/service/utils/de-dq-cond-util/de-dq-cond-util.d.ts.map +1 -1
  123. package/out/service/utils/de-dq-cond-util/de-dq-cond-util.js +16 -9
  124. package/out/service/utils/dynamic-code-list/dynamic-code-list.d.ts +1 -1
  125. package/out/service/utils/dynamic-code-list/dynamic-code-list.d.ts.map +1 -1
  126. package/out/service/utils/dynamic-code-list/dynamic-code-list.js +25 -26
  127. package/out/service/utils/res-path/res-path.d.ts +2 -2
  128. package/out/service/utils/res-path/res-path.d.ts.map +1 -1
  129. package/out/service/utils/res-path/res-path.js +1 -1
  130. package/out/service/utils/search-filter/search-filter.d.ts +0 -14
  131. package/out/service/utils/search-filter/search-filter.d.ts.map +1 -1
  132. package/out/service/utils/search-filter/search-filter.js +0 -8
  133. package/out/service/vo/tree-node-data/tree-data-set-node-data.d.ts +6 -0
  134. package/out/service/vo/tree-node-data/tree-data-set-node-data.d.ts.map +1 -1
  135. package/out/service/vo/tree-node-data/tree-data-set-node-data.js +93 -41
  136. package/out/ui-action/provider/front-ui-action-provider.d.ts +1 -1
  137. package/out/ui-action/provider/front-ui-action-provider.d.ts.map +1 -1
  138. package/out/ui-action/provider/front-ui-action-provider.js +5 -1
  139. package/out/ui-logic/ui-logic-node/debug-param-node/debug-param-node.js +1 -1
  140. package/out/ui-logic/ui-logic-node/raw-js-code-node/raw-js-code-node.d.ts.map +1 -1
  141. package/out/ui-logic/ui-logic-node/raw-js-code-node/raw-js-code-node.js +0 -1
  142. package/out/utils/script/script-function.js +1 -1
  143. package/out/utils/ui-domain/transaction.d.ts +66 -0
  144. package/out/utils/ui-domain/transaction.d.ts.map +1 -0
  145. package/out/utils/ui-domain/transaction.js +94 -0
  146. package/out/utils/ui-domain/ui-domain.d.ts +54 -10
  147. package/out/utils/ui-domain/ui-domain.d.ts.map +1 -1
  148. package/out/utils/ui-domain/ui-domain.js +70 -15
  149. package/package.json +5 -5
  150. package/src/app-hub.ts +52 -3
  151. package/src/application.ts +1 -1
  152. package/src/command/app/open-app-view/open-app-view.ts +8 -1
  153. package/src/constant/control-type.ts +5 -0
  154. package/src/controller/common/editor/editor.controller.ts +54 -0
  155. package/src/controller/common/view/view.controller.ts +3 -2
  156. package/src/controller/constant/control/index.ts +1 -0
  157. package/src/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.ts +5 -0
  158. package/src/controller/control/chart/chart.controller.ts +1 -1
  159. package/src/controller/control/form/form/form.controller.ts +11 -1
  160. package/src/controller/control/form/form-detail/form-detail/form-detail.controller.ts +4 -0
  161. package/src/controller/control/form/form-detail/form-tab-page/form-tab-page.controller.ts +14 -0
  162. package/src/controller/control/form/form-detail/form-tab-panel/form-tab-panel.controller.ts +16 -0
  163. package/src/controller/control/form/form-detail/form-tab-panel/form-tab-panel.state.ts +9 -1
  164. package/src/controller/control/grid/grid/grid.controller.ts +1 -1
  165. package/src/controller/control/grid/grid/grid.service.ts +1 -11
  166. package/src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts +12 -2
  167. package/src/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.ts +0 -10
  168. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/index.ts +1 -0
  169. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.ts +22 -0
  170. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.ts +88 -2
  171. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-node-column.controller.ts +522 -0
  172. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.ts +18 -1
  173. package/src/controller/control/tree-grid-ex/tree-grid-ex-row.state.ts +43 -12
  174. package/src/controller/control/tree-grid-ex/tree-grid-ex.controller.ts +296 -1
  175. package/src/de-logic/utils/handle-src-val.ts +29 -1
  176. package/src/interface/common/i-app-hub-service/i-app-hub-service.ts +21 -4
  177. package/src/interface/controller/controller/control/i-tree-grid-ex.controller.ts +27 -2
  178. package/src/interface/controller/event/control/i-tree-grid-ex.event.ts +15 -1
  179. package/src/interface/controller/state/control/i-tree-grid-ex.state.ts +64 -2
  180. package/src/interface/provider/i-async-action.provider.ts +3 -2
  181. package/src/interface/service/i-transaction/i-transaction.ts +88 -0
  182. package/src/interface/service/index.ts +4 -1
  183. package/src/interface/service/service/i-app-de.service.ts +28 -0
  184. package/src/interface/service/service/i-wf.service.ts +5 -4
  185. package/src/plugin/index.ts +4 -1
  186. package/src/plugin/remote-plugin-item/remote-plugin-item.ts +43 -0
  187. package/src/register/helper/app-menu-item-register.ts +1 -5
  188. package/src/register/helper/panel-item-register.ts +43 -37
  189. package/src/service/dto/method.dto.ts +55 -65
  190. package/src/service/mqtt/mqtt.service.ts +2 -2
  191. package/src/service/service/auth/v7-auth.service.ts +2 -0
  192. package/src/service/service/entity/de.service.ts +21 -16
  193. package/src/service/service/entity/method/de-action.ts +188 -66
  194. package/src/service/service/entity/method/fetch.ts +44 -49
  195. package/src/service/service/entity/method/method-input.ts +3 -1
  196. package/src/service/service/entity/method/method-renturn.ts +9 -1
  197. package/src/service/service/work-flow/work-flow.service.ts +8 -2
  198. package/src/service/utils/de-cache/de-cache.ts +129 -97
  199. package/src/service/utils/de-dq-cond/ps-model-cond-engine-base.ts +4 -0
  200. package/src/service/utils/de-dq-cond-util/de-dq-cond-util.ts +14 -9
  201. package/src/service/utils/dynamic-code-list/dynamic-code-list.ts +24 -32
  202. package/src/service/utils/res-path/res-path.ts +2 -2
  203. package/src/service/utils/search-filter/search-filter.ts +0 -24
  204. package/src/service/vo/tree-node-data/tree-data-set-node-data.ts +111 -46
  205. package/src/ui-action/provider/front-ui-action-provider.ts +10 -1
  206. package/src/ui-logic/ui-logic-node/debug-param-node/debug-param-node.ts +1 -1
  207. package/src/ui-logic/ui-logic-node/raw-js-code-node/raw-js-code-node.ts +0 -1
  208. package/src/utils/script/script-function.ts +1 -1
  209. package/src/utils/ui-domain/transaction.ts +100 -0
  210. package/src/utils/ui-domain/ui-domain.ts +77 -17
  211. package/out/interface/service/i-parent-config/i-parent-config.d.ts +0 -67
  212. package/out/interface/service/i-parent-config/i-parent-config.d.ts.map +0 -1
  213. package/src/interface/service/i-parent-config/i-parent-config.ts +0 -66
  214. /package/out/interface/service/{i-parent-config/i-parent-config.js → i-transaction/i-transaction.js} +0 -0
@@ -7,9 +7,11 @@ import {
7
7
  } from '@ibiz-template/core';
8
8
  import { IAppDEAction } from '@ibiz/model-core';
9
9
  import { isArray, isNil } from 'lodash-es';
10
+ import { ascSort } from 'qx-util';
11
+ import { clone } from 'ramda';
10
12
  import { Method } from './method';
11
13
  import { IDataEntity } from '../../../../interface';
12
- import { findDELogic } from '../../../../model';
14
+ import { calcDeCodeNameById, findDELogic } from '../../../../model';
13
15
  import { execDELogicAction, execFieldLogics } from '../../../../de-logic';
14
16
 
15
17
  /**
@@ -48,7 +50,10 @@ export class DEActionMethod extends Method {
48
50
  data?: IData | IData[],
49
51
  params?: IParams,
50
52
  ): Promise<HttpResponse<IData>> {
51
- if (data) {
53
+ let result: IHttpResponse<IData>;
54
+
55
+ // 执行变更属性逻辑
56
+ if (data && !['READ', 'GETDRAFT'].includes(this.method.actionMode!)) {
52
57
  await execFieldLogics(this.entity, 'change', context, data, params);
53
58
  }
54
59
 
@@ -58,64 +63,57 @@ export class DEActionMethod extends Method {
58
63
  if (!deLogic) {
59
64
  throw new RuntimeModelError(this.method, '缺少实体处理逻辑');
60
65
  }
61
- return execDELogicAction(deLogic, context, data, params);
62
- }
63
-
64
- if (data && !this.isLocalMode) {
65
- data = await this.inputHandle(context, data);
66
- }
67
-
68
- // 执行变更属性逻辑
69
- if (data && !['READ', 'GETDRAFT'].includes(this.method.actionMode!)) {
70
- await execFieldLogics(this.entity, 'change', context, data, params);
71
- }
72
-
73
- let result: IHttpResponse<IData>;
74
- switch (this.method.codeName) {
75
- case 'Create':
76
- result = await this.create(context, data!, params || {});
77
- break;
78
- case 'Get':
79
- result = await this.get(context, params);
80
- break;
81
- case 'GetDraft':
82
- result = await this.getDraft(context, params);
83
- break;
84
- case 'Remove':
85
- result = await this.remove(context, params);
86
- break;
87
- case 'Update':
88
- result = await this.update(context, data!, params);
89
- break;
90
- case 'CreateTemp':
91
- result = await this.createTemp(context, data!);
92
- break;
93
- case 'GetTemp':
94
- result = await this.getTemp(context, data);
95
- break;
96
- case 'GetDraftTemp':
97
- result = await this.getDraftTemp(context, params);
98
- break;
99
- case 'RemoveTemp':
100
- result = await this.removeTemp(context, data);
101
- break;
102
- case 'UpdateTemp':
103
- result = await this.updateTemp(context, data!);
104
- break;
105
- default: {
106
- let path = this.calcPath(context);
107
- if (this.method.needResourceKey) {
108
- let srfkey = context[this.entity.codeName!.toLowerCase()];
109
- if (isNil(srfkey)) {
110
- srfkey = isArray(data)
111
- ? null
112
- : data?.[this.entity.keyAppDEFieldId!];
66
+ result = await execDELogicAction(deLogic, context, data, params);
67
+ } else {
68
+ if (data && !this.isLocalMode) {
69
+ data = await this.inputHandle(context, data);
70
+ }
71
+ switch (this.method.codeName) {
72
+ case 'Create':
73
+ result = await this.create(context, data!, params || {});
74
+ break;
75
+ case 'Get':
76
+ result = await this.get(context, params);
77
+ break;
78
+ case 'GetDraft':
79
+ result = await this.getDraft(context, params);
80
+ break;
81
+ case 'Remove':
82
+ result = await this.remove(context, params);
83
+ break;
84
+ case 'Update':
85
+ result = await this.update(context, data!, params);
86
+ break;
87
+ case 'CreateTemp':
88
+ result = await this.createTemp(context, data!);
89
+ break;
90
+ case 'GetTemp':
91
+ result = await this.getTemp(context, data);
92
+ break;
93
+ case 'GetDraftTemp':
94
+ result = await this.getDraftTemp(context, params);
95
+ break;
96
+ case 'RemoveTemp':
97
+ result = await this.removeTemp(context, data);
98
+ break;
99
+ case 'UpdateTemp':
100
+ result = await this.updateTemp(context, data!);
101
+ break;
102
+ default: {
103
+ let path = this.calcPath(context);
104
+ if (this.method.needResourceKey) {
105
+ let srfkey = context[this.entity.codeName!.toLowerCase()];
106
+ if (isNil(srfkey)) {
107
+ srfkey = isArray(data)
108
+ ? null
109
+ : data?.[this.entity.keyAppDEFieldId!];
110
+ }
111
+ path = `${path}/${srfkey}`;
113
112
  }
114
- path = `${path}/${srfkey}`;
113
+ const res = await this.request(path, context, data, params);
114
+ res.data = await this.result.handle(context, res.data);
115
+ result = res;
115
116
  }
116
- const res = await this.request(path, context, data, params);
117
- res.data = await this.result.handle(context, res.data);
118
- result = res;
119
117
  }
120
118
  }
121
119
 
@@ -342,6 +340,13 @@ export class DEActionMethod extends Method {
342
340
  if (!key && context) {
343
341
  key = context[this.entity.codeName!.toLowerCase()];
344
342
  }
343
+ try {
344
+ await this.associationDeletion(key, context, params);
345
+ } catch (error) {
346
+ throw new HttpError({
347
+ response: new HttpResponse(null, 500, (error as IData).message),
348
+ } as unknown as Error);
349
+ }
345
350
  const data = this.service.local.delete(context, key)!;
346
351
  if (data) {
347
352
  return new HttpResponse(data);
@@ -352,6 +357,124 @@ export class DEActionMethod extends Method {
352
357
  }
353
358
  }
354
359
 
360
+ /**
361
+ * 关联删除
362
+ *
363
+ * @author chitanda
364
+ * @date 2024-01-17 16:01:47
365
+ * @protected
366
+ * @param {string} key
367
+ * @param {IContext} context
368
+ * @param {IParams} [params]
369
+ * @return {*} {Promise<void>}
370
+ */
371
+ protected async associationDeletion(
372
+ key: string,
373
+ context: IContext,
374
+ _params?: IParams,
375
+ ): Promise<void> {
376
+ // 当前执行界面域
377
+ const uiDomain = ibiz.uiDomainManager.get(context.srfsessionid);
378
+
379
+ // 当前事务
380
+ const t = uiDomain.transaction;
381
+ let selfOpenTransaction = false;
382
+ // 由第一层触发关联删除的位置来打开事务,后续子的关联删除不需要再次打开事务
383
+ if (t.state.isOpen === false) {
384
+ t.open();
385
+ selfOpenTransaction = true;
386
+ }
387
+
388
+ try {
389
+ let configs = uiDomain.getDERConfigByMajor(this.entity.id!);
390
+ if (configs.length > 0) {
391
+ // 当前主数据
392
+ const data = this.service.local.get(context, key)!;
393
+
394
+ // 根据删除顺序排序
395
+ configs = ascSort(configs, 'removeOrder');
396
+
397
+ // 根据关系进行关联删除
398
+ for (const config of configs) {
399
+ if (config.rstype !== 'DER1N') {
400
+ throw new RuntimeModelError(
401
+ config,
402
+ '目前只支持[DER1N]关系类型关联删除删除',
403
+ );
404
+ }
405
+ const {
406
+ removeActionType,
407
+ removeRejectMsg,
408
+ minorAppDataEntityId,
409
+ nestedAppDEDataSetId = 'FetchDefault',
410
+ } = config;
411
+ // 获取当前应用域下的子实体服务
412
+ const app = ibiz.hub.getApp(this.entity.appId!);
413
+ const minorService = await app.deService.getService(
414
+ context,
415
+ minorAppDataEntityId!,
416
+ );
417
+ // 克隆上下文,防止污染。并设置当前实体的主键上下文
418
+ const _context = clone(context);
419
+ _context[this.entity.codeName!.toLowerCase()] = key;
420
+ // 查询出关联的子实体数据
421
+ const res = await minorService.exec(nestedAppDEDataSetId, _context);
422
+ const items = (res.data || []) as IDataEntity[];
423
+ switch (removeActionType) {
424
+ // 同时删除
425
+ case 1: {
426
+ for (let i = 0; i < items.length; i++) {
427
+ const item = items[i];
428
+ _context[minorService.model.codeName!.toLowerCase()] =
429
+ item.srfkey;
430
+ const res2 = await minorService.remove(_context, item);
431
+ if (res2.ok === false) {
432
+ throw new Error(res2.statusText);
433
+ }
434
+ }
435
+ break;
436
+ }
437
+ // 置空
438
+ case 2:
439
+ for (let i = 0; i < items.length; i++) {
440
+ const item = items[i];
441
+ _context[minorService.model.codeName!.toLowerCase()] =
442
+ item.srfkey;
443
+ item[config.parentAppDEFieldId!.toLowerCase()] = undefined;
444
+ const res2 = await minorService.updateTemp(_context, item);
445
+ if (res2.ok === false) {
446
+ throw new Error(res2.statusText);
447
+ }
448
+ }
449
+ break;
450
+ // 限制删除
451
+ case 3:
452
+ if (items.length > 0) {
453
+ const msg = items.map(item => item.srfmajortext).join('、');
454
+ const message = `无法删除[${this.entity.logicName}-${data.srfmajortext}], 数据被[${minorService.model.logicName}-${msg}]引用`;
455
+ throw new Error(removeRejectMsg || message);
456
+ }
457
+ break;
458
+ default:
459
+ }
460
+ }
461
+ }
462
+ // 谁打开的事务,由谁来提交和关闭
463
+ if (selfOpenTransaction && t.state.isOpen) {
464
+ t.commit();
465
+ }
466
+ } catch (error) {
467
+ if (selfOpenTransaction && t.state.isOpen) {
468
+ t.rollback();
469
+ }
470
+ throw error;
471
+ } finally {
472
+ if (selfOpenTransaction && t.state.isOpen) {
473
+ t.close();
474
+ }
475
+ }
476
+ }
477
+
355
478
  /**
356
479
  * 更新临时数据
357
480
  *
@@ -412,7 +535,6 @@ export class DEActionMethod extends Method {
412
535
  key = context[this.entity.codeName!.toLowerCase()];
413
536
  }
414
537
  const data = this.service.local.get(context, key);
415
- // await this.executeDEFelidLogic(context, data);
416
538
  if (data) {
417
539
  return new HttpResponse(data);
418
540
  }
@@ -430,15 +552,14 @@ export class DEActionMethod extends Method {
430
552
  * @return {*} {Promise<IHttpResponse>}
431
553
  */
432
554
  async removeBatchTemp(
433
- _context: IParams,
555
+ _context: IContext,
434
556
  _params?: IParams,
435
557
  ): Promise<IHttpResponse> {
436
558
  // if (params) {
437
559
  // const keys: string[] = params[this.entity.keyName];
438
560
  // if (keys) {
439
561
  // try {
440
- // const s = await this.getService();
441
- // await s.local.deleteBatch(context, keys);
562
+ // await this.service.local.deleteBatch(context, keys);
442
563
  // } catch (err) {
443
564
  // return new HttpResponse(err, 500);
444
565
  // }
@@ -463,10 +584,11 @@ export class DEActionMethod extends Method {
463
584
  const configs = uiDomain.getDERConfig(this.entity.id!);
464
585
  if (configs.length > 0) {
465
586
  configs.forEach(config => {
466
- if (config.pickupDEFName) {
467
- const { majorDECodeName, pickupDEFName } = config;
468
- const majorLowerCodeName = majorDECodeName.toLowerCase();
469
- const pickupLowerDEFName = pickupDEFName.toLowerCase();
587
+ if (config.parentAppDEFieldId) {
588
+ const { majorAppDataEntityId, parentAppDEFieldId } = config;
589
+ const majorDECodeName = calcDeCodeNameById(majorAppDataEntityId!);
590
+ const majorLowerCodeName = majorDECodeName;
591
+ const pickupLowerDEFName = parentAppDEFieldId.toLowerCase();
470
592
  const majorkey = context[majorLowerCodeName];
471
593
  // 父主键不能是自身,否则自关系的时候就改错了
472
594
  if (majorkey && majorkey !== data.srfkey) {
@@ -7,7 +7,7 @@ import { IAppDEDataSet } from '@ibiz/model-core';
7
7
  import { isArray } from 'lodash-es';
8
8
  import { clone, isEmpty, isNil } from 'ramda';
9
9
  import { ascSort, descSort } from 'qx-util';
10
- import { PSDEDQCondEngine, SearchFilter } from '../../../utils';
10
+ import { DEDQCondUtil, PSDEDQCondEngine, SearchFilter } from '../../../utils';
11
11
  import { Method } from './method';
12
12
  import { IDataEntity } from '../../../../interface';
13
13
  import { execFieldLogics } from '../../../../de-logic';
@@ -32,39 +32,38 @@ export class FetchMethod extends Method {
32
32
  // 过滤参数,必须是对象
33
33
  const searchParams = params && !isArray(params) ? params : params2 || {};
34
34
 
35
- if (this.isLocalMode) {
36
- // 临时数据
37
- const items = await this.searchLocal(
38
- null,
39
- new SearchFilter(context, searchParams),
40
- );
41
- return new HttpResponse<IDataEntity[]>(items, 200);
42
- }
43
-
44
35
  // 根据数据集合来源查询数据
45
36
  let res: HttpResponse<IData[]>;
46
- switch (this.method.dataSetType) {
47
- case 'INDEXDE':
48
- case 'CODELIST':
49
- case 'MULTIFORM':
50
- res = await this.fetchCodeListSet(context, searchParams);
51
- break;
52
- case 'REMOTE':
53
- {
54
- const path = this.calcPath(context);
55
- res = await this.request(path, context, params, params2);
56
- }
57
- break;
58
- default:
59
- throw new ModelError(
60
- this.method,
61
- `数据来源类型${this.method.dataSetType}暂未支持`,
62
- );
63
- }
64
37
 
65
- // 转换实体对象
66
- const items: IData[] = res.data || [];
67
- res.data = items.map(item => this.createEntity(item));
38
+ if (this.isLocalMode) {
39
+ const cond = DEDQCondUtil.getCond(this.method);
40
+ const filter = new SearchFilter(context, searchParams);
41
+ const items = await this.searchLocal(cond, filter);
42
+ res = new HttpResponse<IDataEntity[]>(items, 200);
43
+ } else {
44
+ switch (this.method.dataSetType) {
45
+ case 'INDEXDE':
46
+ case 'CODELIST':
47
+ case 'MULTIFORM':
48
+ res = await this.fetchCodeListSet(context, searchParams);
49
+ break;
50
+ case 'REMOTE':
51
+ {
52
+ const path = this.calcPath(context);
53
+ res = await this.request(path, context, params, params2);
54
+ }
55
+ break;
56
+ default:
57
+ throw new ModelError(
58
+ this.method,
59
+ `数据来源类型${this.method.dataSetType}暂未支持`,
60
+ );
61
+ }
62
+
63
+ // 转换实体对象
64
+ const items: IData[] = res.data || [];
65
+ res.data = items.map(item => this.createEntity(item));
66
+ }
68
67
 
69
68
  // 计算属性逻辑,每条数据走一遍
70
69
  if (res.data) {
@@ -95,30 +94,26 @@ export class FetchMethod extends Method {
95
94
  filter: SearchFilter,
96
95
  queryParamKeys: string[] = this.entity.quickSearchAppDEFieldIds!,
97
96
  ): Promise<IDataEntity[]> {
98
- let list: IDataEntity[] = [];
97
+ let list: IDataEntity[] = this.service.local.getList();
99
98
  // 走查询条件
100
99
  if (cond) {
101
- list = this.service.local.getList();
102
100
  if (list.length > 0) {
103
101
  list = list.filter(obj => cond.test(obj, filter));
104
102
  }
105
- } else {
106
- list = await this.service.local.select(filter.context, filter.data);
107
- if (list.length > 0) {
108
- if (filter.query && filter.query !== '') {
109
- if (queryParamKeys) {
110
- list = list.filter(obj => {
111
- const reg = new RegExp(filter.query);
112
- for (let i = 0; i < queryParamKeys.length; i += 1) {
113
- const key = queryParamKeys[i];
114
- const val: string = obj[key];
115
- if (reg.test(val)) {
116
- return true;
117
- }
103
+ } else if (list.length > 0) {
104
+ if (filter.query && filter.query !== '') {
105
+ if (queryParamKeys) {
106
+ list = list.filter(obj => {
107
+ const reg = new RegExp(filter.query);
108
+ for (let i = 0; i < queryParamKeys.length; i += 1) {
109
+ const key = queryParamKeys[i];
110
+ const val: string = obj[key];
111
+ if (reg.test(val)) {
112
+ return true;
118
113
  }
119
- return false;
120
- });
121
- }
114
+ }
115
+ return false;
116
+ });
122
117
  }
123
118
  }
124
119
  }
@@ -37,7 +37,9 @@ export class MethodInput {
37
37
  input.appDEMethodDTOId!,
38
38
  );
39
39
  if (methodDto) {
40
- this.dto = new MethodDto(service, entity, this.isLocalMode, methodDto);
40
+ this.dto = service.createMethodDto(methodDto, {
41
+ isLocalMode: this.isLocalMode,
42
+ });
41
43
  }
42
44
  }
43
45
  }
@@ -39,7 +39,9 @@ export class MethodReturn {
39
39
  output.appDEMethodDTOId!,
40
40
  );
41
41
  if (methodDto) {
42
- this.dto = new MethodDto(service, entity, this.isLocalMode, methodDto);
42
+ this.dto = service.createMethodDto(methodDto, {
43
+ isLocalMode: this.isLocalMode,
44
+ });
43
45
  }
44
46
  }
45
47
  }
@@ -55,6 +57,12 @@ export class MethodReturn {
55
57
  */
56
58
  async handle(context: IContext, data: IData): Promise<IDataEntity> {
57
59
  if (this.dto) {
60
+ const app = ibiz.hub.getApp(this.entity.appId);
61
+ // 设置之前清理掉当前界面域下的数据缓存
62
+ app.deService.clearTempCache({
63
+ srfappid: app.appId,
64
+ srfsessionid: context.srfsessionid,
65
+ });
58
66
  const items = await this.dto.sets(context, [data]);
59
67
  return items[0];
60
68
  }
@@ -161,8 +161,14 @@ export class WorkFlowService implements IWorkFlowService {
161
161
  * @date 2022-09-29 14:09:45
162
162
  * @returns {*} {Promise<IHttpResponse<IData>>}
163
163
  */
164
- async getWFVersion(): Promise<IHttpResponse<IData>> {
165
- return this.app.net.get(`${this.getBaseUrl()}/process-definitions2`);
164
+ async getWFVersion(srfWFTag?: string): Promise<IHttpResponse<IData>> {
165
+ return this.app.net.get(
166
+ `/wfcore/${
167
+ ibiz.appData!.context.srfsystemid
168
+ }-app-${this.app.model.codeName!.toLowerCase()}/${this.model.name!.toLowerCase()}${
169
+ srfWFTag ? `-${srfWFTag}` : ''
170
+ }/process-definitions2`,
171
+ );
166
172
  }
167
173
 
168
174
  /**