@ibiz-template/runtime 0.0.3-beta.3 → 0.0.3-beta.4

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 (228) hide show
  1. package/dist/system/index.system.js +1 -1
  2. package/out/config/global-config.d.ts +3 -0
  3. package/out/config/global-config.d.ts.map +1 -1
  4. package/out/config/global-config.js +3 -0
  5. package/out/controller/control/form/edit-form.d.ts.map +1 -1
  6. package/out/controller/control/form/edit-form.js +6 -1
  7. package/out/controller/control/form/form-button.d.ts.map +1 -1
  8. package/out/controller/control/form/form-button.js +1 -1
  9. package/out/controller/control/form/form-detail.d.ts +2 -2
  10. package/out/controller/control/form/form-detail.d.ts.map +1 -1
  11. package/out/controller/control/form/form-detail.js +2 -2
  12. package/out/controller/control/form/form-druipart.d.ts +2 -2
  13. package/out/controller/control/form/form-druipart.d.ts.map +1 -1
  14. package/out/controller/control/form/form-druipart.js +4 -4
  15. package/out/controller/control/form/form-item.d.ts +2 -2
  16. package/out/controller/control/form/form-item.d.ts.map +1 -1
  17. package/out/controller/control/form/form-item.js +4 -4
  18. package/out/controller/control/form/form.d.ts +1 -1
  19. package/out/controller/control/form/form.d.ts.map +1 -1
  20. package/out/controller/control/form/form.js +19 -7
  21. package/out/controller/control/form/search-form.d.ts +1 -1
  22. package/out/controller/control/form/search-form.d.ts.map +1 -1
  23. package/out/controller/control/form/search-form.js +2 -2
  24. package/out/controller/control/grid/grid-field-column.d.ts +1 -1
  25. package/out/controller/control/grid/grid-field-column.d.ts.map +1 -1
  26. package/out/controller/control/grid/grid-field-column.js +8 -2
  27. package/out/controller/control/grid/grid-row.d.ts +8 -0
  28. package/out/controller/control/grid/grid-row.d.ts.map +1 -1
  29. package/out/controller/control/grid/grid-row.js +8 -0
  30. package/out/controller/control/grid/grid.d.ts +1 -1
  31. package/out/controller/control/grid/grid.d.ts.map +1 -1
  32. package/out/controller/control/grid/grid.js +27 -8
  33. package/out/controller/control/portlet/portlet-part.js +3 -4
  34. package/out/controller/editor/autocomplete.d.ts +73 -0
  35. package/out/controller/editor/autocomplete.d.ts.map +1 -0
  36. package/out/controller/editor/autocomplete.js +117 -0
  37. package/out/controller/editor/check-box.d.ts +12 -0
  38. package/out/controller/editor/check-box.d.ts.map +1 -0
  39. package/out/controller/editor/check-box.js +10 -0
  40. package/out/controller/editor/code-list-editor.d.ts.map +1 -1
  41. package/out/controller/editor/code-list-editor.js +1 -1
  42. package/out/controller/editor/editor.d.ts +1 -1
  43. package/out/controller/editor/editor.d.ts.map +1 -1
  44. package/out/controller/editor/editor.js +6 -6
  45. package/out/controller/editor/index.d.ts +4 -0
  46. package/out/controller/editor/index.d.ts.map +1 -1
  47. package/out/controller/editor/index.js +4 -0
  48. package/out/controller/editor/list-box-picker.d.ts +42 -0
  49. package/out/controller/editor/list-box-picker.d.ts.map +1 -0
  50. package/out/controller/editor/list-box-picker.js +67 -0
  51. package/out/controller/editor/list-box.d.ts +11 -0
  52. package/out/controller/editor/list-box.d.ts.map +1 -0
  53. package/out/controller/editor/list-box.js +9 -0
  54. package/out/controller/editor/picker.d.ts +6 -2
  55. package/out/controller/editor/picker.d.ts.map +1 -1
  56. package/out/controller/editor/picker.js +20 -10
  57. package/out/controller/interface/register/i-view-register.d.ts +2 -2
  58. package/out/controller/interface/register/i-view-register.d.ts.map +1 -1
  59. package/out/controller/neuron/nerve/view/grid-exp-view-nerve.d.ts.map +1 -1
  60. package/out/controller/neuron/nerve/view/grid-exp-view-nerve.js +1 -0
  61. package/out/controller/neuron/nerve/view/kanban-view-nerve.d.ts.map +1 -1
  62. package/out/controller/neuron/nerve/view/kanban-view-nerve.js +1 -0
  63. package/out/controller/neuron/nerve/view/list-exp-view-nerve.d.ts.map +1 -1
  64. package/out/controller/neuron/nerve/view/list-exp-view-nerve.js +1 -0
  65. package/out/controller/register/control-register.d.ts.map +1 -1
  66. package/out/controller/register/control-register.js +1 -0
  67. package/out/controller/register/editor-register.d.ts.map +1 -1
  68. package/out/controller/register/editor-register.js +2 -0
  69. package/out/controller/register/view-register.d.ts +2 -2
  70. package/out/controller/register/view-register.d.ts.map +1 -1
  71. package/out/controller/register/view-register.js +10 -12
  72. package/out/controller/state/control/form/form-state.d.ts +8 -0
  73. package/out/controller/state/control/form/form-state.d.ts.map +1 -1
  74. package/out/controller/state/control/form/form-state.js +8 -0
  75. package/out/controller/view/md-view.d.ts +0 -27
  76. package/out/controller/view/md-view.d.ts.map +1 -1
  77. package/out/controller/view/md-view.js +1 -28
  78. package/out/controller/view/pickup-grid-view.js +1 -1
  79. package/out/de-logic/de-logic-context.d.ts +28 -0
  80. package/out/de-logic/de-logic-context.d.ts.map +1 -0
  81. package/out/de-logic/de-logic-context.js +29 -0
  82. package/out/de-logic/de-logic-link/de-logic-link-cond/de-logic-link-cond.d.ts +11 -0
  83. package/out/de-logic/de-logic-link/de-logic-link-cond/de-logic-link-cond.d.ts.map +1 -0
  84. package/out/de-logic/de-logic-link/de-logic-link-cond/de-logic-link-cond.js +10 -0
  85. package/out/de-logic/de-logic-link/de-logic-link-group-cond/de-logic-link-group-cond.d.ts +58 -0
  86. package/out/de-logic/de-logic-link/de-logic-link-group-cond/de-logic-link-group-cond.d.ts.map +1 -0
  87. package/out/de-logic/de-logic-link/de-logic-link-group-cond/de-logic-link-group-cond.js +79 -0
  88. package/out/de-logic/de-logic-link/de-logic-link-single-cond/de-logic-link-single-cond.d.ts +48 -0
  89. package/out/de-logic/de-logic-link/de-logic-link-single-cond/de-logic-link-single-cond.d.ts.map +1 -0
  90. package/out/de-logic/de-logic-link/de-logic-link-single-cond/de-logic-link-single-cond.js +65 -0
  91. package/out/de-logic/de-logic-link/de-logic-link.d.ts +59 -0
  92. package/out/de-logic/de-logic-link/de-logic-link.d.ts.map +1 -0
  93. package/out/de-logic/de-logic-link/de-logic-link.js +67 -0
  94. package/out/de-logic/de-logic-node/bind-param-node/bind-param-node.d.ts +15 -0
  95. package/out/de-logic/de-logic-node/bind-param-node/bind-param-node.d.ts.map +1 -0
  96. package/out/de-logic/de-logic-node/bind-param-node/bind-param-node.js +25 -0
  97. package/out/de-logic/de-logic-node/data-set-node/data-set-node.d.ts +15 -0
  98. package/out/de-logic/de-logic-node/data-set-node/data-set-node.d.ts.map +1 -0
  99. package/out/de-logic/de-logic-node/data-set-node/data-set-node.js +29 -0
  100. package/out/de-logic/de-logic-node/de-action-node/de-action-node.d.ts +15 -0
  101. package/out/de-logic/de-logic-node/de-action-node/de-action-node.d.ts.map +1 -0
  102. package/out/de-logic/de-logic-node/de-action-node/de-action-node.js +36 -0
  103. package/out/de-logic/de-logic-node/de-logic-node.d.ts +43 -0
  104. package/out/de-logic/de-logic-node/de-logic-node.d.ts.map +1 -0
  105. package/out/de-logic/de-logic-node/de-logic-node.js +22 -0
  106. package/out/de-logic/de-logic-node/end-node/end-node.d.ts +15 -0
  107. package/out/de-logic/de-logic-node/end-node/end-node.d.ts.map +1 -0
  108. package/out/de-logic/de-logic-node/end-node/end-node.js +37 -0
  109. package/out/de-logic/de-logic-node/index.d.ts +8 -0
  110. package/out/de-logic/de-logic-node/index.d.ts.map +1 -0
  111. package/out/de-logic/de-logic-node/index.js +7 -0
  112. package/out/de-logic/de-logic-node/prepare-param-node/prepare-param-node.d.ts +15 -0
  113. package/out/de-logic/de-logic-node/prepare-param-node/prepare-param-node.d.ts.map +1 -0
  114. package/out/de-logic/de-logic-node/prepare-param-node/prepare-param-node.js +15 -0
  115. package/out/de-logic/de-logic-node/start-node/start-node.d.ts +15 -0
  116. package/out/de-logic/de-logic-node/start-node/start-node.d.ts.map +1 -0
  117. package/out/de-logic/de-logic-node/start-node/start-node.js +15 -0
  118. package/out/de-logic/de-logic-node/throw-exception-node/throw-exception-node.d.ts +15 -0
  119. package/out/de-logic/de-logic-node/throw-exception-node/throw-exception-node.d.ts.map +1 -0
  120. package/out/de-logic/de-logic-node/throw-exception-node/throw-exception-node.js +23 -0
  121. package/out/de-logic/de-logic-param/de-logic-param.d.ts +33 -0
  122. package/out/de-logic/de-logic-param/de-logic-param.d.ts.map +1 -0
  123. package/out/de-logic/de-logic-param/de-logic-param.js +93 -0
  124. package/out/de-logic/de-logic.d.ts +79 -0
  125. package/out/de-logic/de-logic.d.ts.map +1 -0
  126. package/out/de-logic/de-logic.js +157 -0
  127. package/out/de-logic/index.d.ts +17 -0
  128. package/out/de-logic/index.d.ts.map +1 -0
  129. package/out/de-logic/index.js +38 -0
  130. package/out/interface/i-global-config/i-global-config.d.ts +31 -0
  131. package/out/interface/i-global-config/i-global-config.d.ts.map +1 -1
  132. package/out/interface/i-plugin-factory/i-plugin-factory.d.ts +8 -23
  133. package/out/interface/i-plugin-factory/i-plugin-factory.d.ts.map +1 -1
  134. package/out/interface/i-plugin-item/i-plugin-item.d.ts +1 -8
  135. package/out/interface/i-plugin-item/i-plugin-item.d.ts.map +1 -1
  136. package/out/service/dto/method.dto.d.ts +3 -3
  137. package/out/service/dto/method.dto.d.ts.map +1 -1
  138. package/out/service/dto/method.dto.js +22 -22
  139. package/out/service/entity/entity.d.ts +9 -0
  140. package/out/service/entity/entity.d.ts.map +1 -1
  141. package/out/service/entity/entity.js +11 -2
  142. package/out/service/service/entity/method/de-action.d.ts.map +1 -1
  143. package/out/service/service/entity/method/de-action.js +12 -4
  144. package/out/service/service/entity/method/method-renturn.js +2 -2
  145. package/out/service/service/entity/method/method.d.ts +1 -1
  146. package/out/service/service/entity/method/method.d.ts.map +1 -1
  147. package/out/service/service/entity/method/method.js +28 -25
  148. package/out/service/service/widget/control-service.d.ts +1 -1
  149. package/out/service/service/widget/control-service.d.ts.map +1 -1
  150. package/out/service/service/widget/control-service.js +2 -2
  151. package/out/service/service/widget/edit-form-service.d.ts.map +1 -1
  152. package/out/service/service/widget/edit-form-service.js +3 -3
  153. package/out/service/service/widget/md-control-service.d.ts.map +1 -1
  154. package/out/service/service/widget/md-control-service.js +3 -3
  155. package/out/service/service/widget/wizard-panel-service.d.ts +2 -2
  156. package/out/service/service/widget/wizard-panel-service.d.ts.map +1 -1
  157. package/out/service/service/widget/wizard-panel-service.js +4 -4
  158. package/out/service/utils/dynamic-code-list/dynamic-code-list.d.ts.map +1 -1
  159. package/out/service/utils/dynamic-code-list/dynamic-code-list.js +5 -2
  160. package/out/service/vo/tree-node-data/tree-data-set-node-data.js +2 -2
  161. package/out/ui-logic/ui-logic.d.ts +1 -1
  162. package/out/ui-logic/ui-logic.d.ts.map +1 -1
  163. package/out/utils/app-de-ui-action-util/handler/backend-ui-action-handler.d.ts.map +1 -1
  164. package/out/utils/app-de-ui-action-util/handler/backend-ui-action-handler.js +4 -0
  165. package/package.json +6 -6
  166. package/src/config/global-config.ts +6 -0
  167. package/src/controller/control/form/edit-form.ts +7 -1
  168. package/src/controller/control/form/form-button.ts +4 -1
  169. package/src/controller/control/form/form-detail.ts +2 -2
  170. package/src/controller/control/form/form-druipart.ts +4 -4
  171. package/src/controller/control/form/form-item.ts +7 -4
  172. package/src/controller/control/form/form.ts +21 -7
  173. package/src/controller/control/form/search-form.ts +2 -2
  174. package/src/controller/control/grid/grid-field-column.ts +8 -2
  175. package/src/controller/control/grid/grid-row.ts +9 -0
  176. package/src/controller/control/grid/grid.ts +32 -9
  177. package/src/controller/control/portlet/portlet-part.ts +3 -3
  178. package/src/controller/editor/autocomplete.ts +138 -0
  179. package/src/controller/editor/check-box.ts +11 -0
  180. package/src/controller/editor/code-list-editor.ts +5 -1
  181. package/src/controller/editor/editor.ts +10 -16
  182. package/src/controller/editor/index.ts +4 -0
  183. package/src/controller/editor/list-box-picker.ts +78 -0
  184. package/src/controller/editor/list-box.ts +10 -0
  185. package/src/controller/editor/picker.ts +33 -10
  186. package/src/controller/interface/register/i-view-register.ts +2 -2
  187. package/src/controller/neuron/nerve/view/grid-exp-view-nerve.ts +4 -0
  188. package/src/controller/neuron/nerve/view/kanban-view-nerve.ts +4 -0
  189. package/src/controller/neuron/nerve/view/list-exp-view-nerve.ts +4 -0
  190. package/src/controller/register/control-register.ts +5 -0
  191. package/src/controller/register/editor-register.ts +6 -0
  192. package/src/controller/register/view-register.ts +14 -14
  193. package/src/controller/state/control/form/form-state.ts +9 -0
  194. package/src/controller/view/md-view.ts +1 -31
  195. package/src/controller/view/pickup-grid-view.ts +1 -1
  196. package/src/de-logic/de-logic-context.ts +28 -0
  197. package/src/de-logic/de-logic-link/de-logic-link-cond/de-logic-link-cond.ts +9 -0
  198. package/src/de-logic/de-logic-link/de-logic-link-group-cond/de-logic-link-group-cond.ts +97 -0
  199. package/src/de-logic/de-logic-link/de-logic-link-single-cond/de-logic-link-single-cond.ts +96 -0
  200. package/src/de-logic/de-logic-link/de-logic-link.ts +80 -0
  201. package/src/de-logic/de-logic-node/bind-param-node/bind-param-node.ts +33 -0
  202. package/src/de-logic/de-logic-node/data-set-node/data-set-node.ts +42 -0
  203. package/src/de-logic/de-logic-node/de-action-node/de-action-node.ts +49 -0
  204. package/src/de-logic/de-logic-node/de-logic-node.ts +52 -0
  205. package/src/de-logic/de-logic-node/end-node/end-node.ts +49 -0
  206. package/src/de-logic/de-logic-node/index.ts +7 -0
  207. package/src/de-logic/de-logic-node/prepare-param-node/prepare-param-node.ts +23 -0
  208. package/src/de-logic/de-logic-node/start-node/start-node.ts +23 -0
  209. package/src/de-logic/de-logic-node/throw-exception-node/throw-exception-node.ts +32 -0
  210. package/src/de-logic/de-logic-param/de-logic-param.ts +90 -0
  211. package/src/de-logic/de-logic.ts +190 -0
  212. package/src/de-logic/index.ts +45 -0
  213. package/src/interface/i-global-config/i-global-config.ts +34 -0
  214. package/src/interface/i-plugin-factory/i-plugin-factory.ts +8 -23
  215. package/src/interface/i-plugin-item/i-plugin-item.ts +1 -8
  216. package/src/service/dto/method.dto.ts +25 -23
  217. package/src/service/entity/entity.ts +12 -2
  218. package/src/service/service/entity/method/de-action.ts +13 -4
  219. package/src/service/service/entity/method/method-renturn.ts +2 -2
  220. package/src/service/service/entity/method/method.ts +33 -26
  221. package/src/service/service/widget/control-service.ts +7 -1
  222. package/src/service/service/widget/edit-form-service.ts +13 -3
  223. package/src/service/service/widget/md-control-service.ts +13 -3
  224. package/src/service/service/widget/wizard-panel-service.ts +4 -2
  225. package/src/service/utils/dynamic-code-list/dynamic-code-list.ts +6 -2
  226. package/src/service/vo/tree-node-data/tree-data-set-node-data.ts +2 -2
  227. package/src/ui-logic/ui-logic.ts +1 -1
  228. package/src/utils/app-de-ui-action-util/handler/backend-ui-action-handler.ts +6 -0
@@ -0,0 +1,190 @@
1
+ /* eslint-disable no-await-in-loop */
2
+ import { DELogicModel, UnsupportedModelError } from '@ibiz-template/model';
3
+ import { DELogicContext } from './de-logic-context';
4
+ import {
5
+ DEActionNode,
6
+ EndNode,
7
+ PrepareParamNode,
8
+ StartNode,
9
+ DELogicNode,
10
+ DataSetNode,
11
+ BindParamNode,
12
+ } from './de-logic-node';
13
+ import { ThrowExceptionNode } from './de-logic-node/throw-exception-node/throw-exception-node';
14
+ import { DELogicParam } from './de-logic-param/de-logic-param';
15
+
16
+ /**
17
+ * 界面逻辑
18
+ *
19
+ * @author lxm
20
+ * @date 2023-02-07 16:02:48
21
+ * @export
22
+ * @class DELogic
23
+ */
24
+ export class DELogic {
25
+ /**
26
+ * 所有节点实例
27
+ *
28
+ * @author lxm
29
+ * @date 2023-02-08 21:02:38
30
+ * @protected
31
+ * @type {Map<string, DELogicNode>}
32
+ */
33
+ protected nodes: Map<string, DELogicNode> = new Map();
34
+
35
+ /**
36
+ * 所有参数实例
37
+ *
38
+ * @author lxm
39
+ * @date 2023-02-08 21:02:25
40
+ * @protected
41
+ * @type {Map<string, DELogicParam>}
42
+ */
43
+ protected params: Map<string, DELogicParam> = new Map();
44
+
45
+ /**
46
+ * Creates an instance of DELogic.
47
+ * @author lxm
48
+ * @date 2023-02-08 17:02:26
49
+ * @param {DELogicModel} model
50
+ */
51
+ constructor(protected model: DELogicModel) {
52
+ model.nodes.forEach(node => {
53
+ const { logicNodeType } = node.source;
54
+ let logicNode;
55
+ switch (logicNodeType) {
56
+ case 'BEGIN': // 开始
57
+ logicNode = new StartNode(node);
58
+ break;
59
+ case 'END': // 结束
60
+ logicNode = new EndNode(node);
61
+ break;
62
+ case 'DEACTION': // 实体行为
63
+ logicNode = new DEActionNode(node);
64
+ break;
65
+ case 'PREPAREPARAM': // 准备参数
66
+ logicNode = new PrepareParamNode(node);
67
+ break;
68
+ case 'DEDATASET': // 实体数据集
69
+ logicNode = new DataSetNode(node);
70
+ break;
71
+ case 'THROWEXCEPTION': // 抛出异常
72
+ logicNode = new ThrowExceptionNode(node);
73
+ break;
74
+ case 'BINDPARAM': // 绑定参数
75
+ logicNode = new BindParamNode(node);
76
+ break;
77
+ default:
78
+ throw new UnsupportedModelError(
79
+ node.source,
80
+ `未支持的逻辑节点类型: ${logicNodeType}`,
81
+ );
82
+ }
83
+ this.nodes.set(node.codeName, logicNode);
84
+ });
85
+ model.params.forEach(param => {
86
+ this.params.set(param.codeName, new DELogicParam(param));
87
+ });
88
+ // 将已经实例化的逻辑节点挂载到逻辑连接上
89
+ this.nodes.forEach(node => {
90
+ node.links.forEach(link => {
91
+ const { srcNode, dstNode } = link.model;
92
+ if (this.nodes.has(srcNode.codeName)) {
93
+ link.srcNode = this.nodes.get(srcNode.codeName)!;
94
+ }
95
+ if (this.nodes.has(dstNode.codeName)) {
96
+ link.dstNode = this.nodes.get(dstNode.codeName)!;
97
+ }
98
+ });
99
+ });
100
+ }
101
+
102
+ /**
103
+ * 初始化逻辑参数
104
+ *
105
+ * @author lxm
106
+ * @date 2023-02-08 21:02:58
107
+ * @protected
108
+ * @param {DELogicContext} ctx
109
+ * @param {IContext} context
110
+ * @param {IData} data
111
+ * @param {IParams} [opt]
112
+ */
113
+ protected initLogicParams(
114
+ ctx: DELogicContext,
115
+ context: IContext,
116
+ data: IData | null,
117
+ params: IParams,
118
+ opt?: IParams,
119
+ ): void {
120
+ this.params.forEach(param => {
121
+ param.calc(ctx, context, data, params, opt);
122
+ });
123
+ }
124
+
125
+ /**
126
+ * 执行逻辑
127
+ *
128
+ * @author lxm
129
+ * @date 2023-02-08 21:02:09
130
+ * @param {IContext} context
131
+ * @param {IData} data
132
+ * @param {IParams} [opt]
133
+ * @return {*} {Promise<IData>}
134
+ */
135
+ async exec(
136
+ context: IContext,
137
+ data: IData | null,
138
+ params: IParams,
139
+ opt?: IParams,
140
+ ): Promise<unknown> {
141
+ const ctx = new DELogicContext();
142
+ this.initLogicParams(ctx, context, data, params, opt);
143
+ if (this.model.startNode && this.nodes.has(this.model.startNode.codeName)) {
144
+ const start = this.nodes.get(this.model.startNode.codeName)!;
145
+ await this.deepExec(start, ctx, context, data, params, opt);
146
+ } else {
147
+ throw new UnsupportedModelError(this.model.source, `未设置起始节点`);
148
+ }
149
+ return ctx.result || ctx.params.default || null;
150
+ }
151
+
152
+ /**
153
+ * 开始根据连线递归执行逻辑
154
+ *
155
+ * @author lxm
156
+ * @date 2023-02-09 15:02:32
157
+ * @protected
158
+ * @param {DELogicNode} node
159
+ * @param {DELogicContext} ctx
160
+ * @param {IContext} context
161
+ * @param {(IData | null)} data
162
+ * @param {IParams} params
163
+ * @param {IParams} [opt]
164
+ * @return {*} {(Promise<IData | null>)}
165
+ */
166
+ protected async deepExec(
167
+ node: DELogicNode,
168
+ ctx: DELogicContext,
169
+ context: IContext,
170
+ data: IData | null,
171
+ params: IParams,
172
+ opt?: IParams,
173
+ ): Promise<void> {
174
+ // 执行逻辑节点
175
+ await node.exec(ctx, context, data, params, opt);
176
+ const { links } = node;
177
+ // 遍历所有节点连接,递归执行下级连接节点
178
+ for (let index = 0; index < links.length; index++) {
179
+ const link = links[index];
180
+ const bol = await link.exec(ctx, context, data, params, opt);
181
+ if (bol && link.dstNode) {
182
+ await this.deepExec(link.dstNode, ctx, context, data, params, opt);
183
+ // 平行输出: 在满足连接条件并逻辑执行完毕后若是非平行输出则执行完成
184
+ if (node.model.parallel === false) {
185
+ break;
186
+ }
187
+ }
188
+ }
189
+ }
190
+ }
@@ -0,0 +1,45 @@
1
+ import { HttpError, HttpResponse } from '@ibiz-template/core';
2
+ import { IPSDELogic, DELogicModel } from '@ibiz-template/model';
3
+ import { DELogic } from './de-logic';
4
+
5
+ /**
6
+ * 实体处理逻辑实例缓存
7
+ */
8
+ const deLogicMap: WeakMap<IPSDELogic, DELogic> = new Map();
9
+
10
+ /**
11
+ * 执行实体处理逻辑
12
+ *
13
+ * @author lxm
14
+ * @date 2023-02-09 11:02:23
15
+ * @export
16
+ * @param {IPSDELogic} deDELogic
17
+ * @param {IContext} context
18
+ * @param {(IData | null)} data
19
+ * @param {IParams} params
20
+ * @param {IParams} [opt]
21
+ * @return {*} {Promise<HttpResponse<IData>>}
22
+ */
23
+ export async function execDELogic(
24
+ deDELogic: IPSDELogic,
25
+ context: IContext,
26
+ data: IData | null,
27
+ params: IParams,
28
+ opt?: IParams,
29
+ ): Promise<HttpResponse<IData>> {
30
+ if (!deLogicMap.has(deDELogic)) {
31
+ const deLogicModel = new DELogicModel(deDELogic);
32
+ await deLogicModel.init();
33
+ deLogicMap.set(deDELogic, new DELogic(deLogicModel));
34
+ }
35
+ const deLogic = deLogicMap.get(deDELogic)!;
36
+ try {
37
+ const result = await deLogic.exec(context, data, params, opt);
38
+ return new HttpResponse(result);
39
+ } catch (err) {
40
+ if (err instanceof HttpError) {
41
+ return new HttpResponse(err, 500);
42
+ }
43
+ throw err;
44
+ }
45
+ }
@@ -17,4 +17,38 @@ export interface IGlobalConfig {
17
17
  * @type {boolean}
18
18
  */
19
19
  enableDataInfoBar: boolean;
20
+
21
+ /**
22
+ * 默认代码表超时时间(单位:毫秒)
23
+ *
24
+ * @author lxm
25
+ * @date 2023-03-08 03:12:28
26
+ * @type {number}
27
+ * @memberof IGlobalConfig
28
+ */
29
+ defaultCodeListCacheTimeout: number;
30
+
31
+ /**
32
+ * 表格行编辑呈现模式
33
+ * - cell 每次只呈现悬浮点击之后的一个单元格的编辑态
34
+ * - row 每次呈现编辑中的那一行所有单元格的编辑态 TODO
35
+ * - all 呈现所有编辑项的编辑态
36
+ * @author lxm
37
+ * @date 2023-03-06 09:42:44
38
+ * @type {('cell' | 'row' | 'all')}
39
+ * @memberof IGlobalConfig
40
+ */
41
+ gridEditShowMode: 'cell' | 'row' | 'all';
42
+
43
+ /**
44
+ * 表格行编辑保存模式
45
+ * - cell-blur 单元格失焦时保存整行数据
46
+ * - auto 自动保存,值变更之后一段时间保存整行数据
47
+ * - manual 手动保存,由界面行为调用表格整体保存或行保存。
48
+ * @author lxm
49
+ * @date 2023-03-06 03:33:35
50
+ * @type {('cell-blur' | 'auto' | 'manual')}
51
+ * @memberof IGlobalConfig
52
+ */
53
+ gridEditSaveMode: 'cell-blur' | 'auto' | 'manual';
20
54
  }
@@ -39,7 +39,7 @@ export interface IPluginFactory {
39
39
  */
40
40
  loadPluginRef(rtObjectName: string, rtObjectRepo: string): Promise<boolean>;
41
41
  /**
42
- * 注册插件
42
+ * 给入应用实例,将已经加载的过插件注入。主要用于多实例的情况
43
43
  *
44
44
  * @author chitanda
45
45
  * @date 2023-02-02 16:02:39
@@ -51,31 +51,16 @@ export interface IPluginFactory {
51
51
  *
52
52
  * @author chitanda
53
53
  * @date 2023-02-06 21:02:06
54
- * @param {IPluginItem} plugin
54
+ * @param {IPluginItem} plugin 其中 Name 将作为插件标识
55
55
  */
56
- registerViewPlugin(plugin: IPluginItem): void;
56
+ registerPredefinedPlugin(plugin: IPluginItem): void;
57
57
  /**
58
- * 注册默认部件插件
58
+ * 加载指定标识视图插件
59
59
  *
60
60
  * @author chitanda
61
- * @date 2023-02-06 21:02:24
62
- * @param {IPluginItem} plugin
61
+ * @date 2023-03-09 18:03:44
62
+ * @param {string} name 插件标识
63
+ * @return {*} {Promise<void>}
63
64
  */
64
- registerControlPlugin(plugin: IPluginItem): void;
65
- /**
66
- * 注册默认编辑器插件
67
- *
68
- * @author chitanda
69
- * @date 2023-02-06 21:02:30
70
- * @param {IPluginItem} plugin
71
- */
72
- registerEditorPlugin(plugin: IPluginItem): void;
73
- /**
74
- * 获取所有的默认编辑器插件
75
- *
76
- * @author chitanda
77
- * @date 2023-02-06 21:02:15
78
- * @return {*} {IPluginItem[]}
79
- */
80
- getAllDefaultPlugins(): IPluginItem[];
65
+ loadPredefinedPlugin(name: string): Promise<void>;
81
66
  }
@@ -7,17 +7,10 @@
7
7
  * @interface IPluginItem
8
8
  */
9
9
  export interface IPluginItem {
10
- /**
11
- * 用于标识类型,具体的类型解释归具体的插件识别对象解释。例如此插件用于视图,那么由视图的注册机制做解释。其他类似
12
- *
13
- * @author chitanda
14
- * @date 2023-02-06 21:02:54
15
- * @type {string}
16
- */
17
- type: string;
18
10
  /**
19
11
  * 插件名称,对应模型 rtObjectName
20
12
  *
13
+ * @description 预置插件类型名称规则: 视图(VIEW_${视图类型}_DEFAULT)、部件(CONTROL_${部件类型}_DEFAULT)、编辑器(EDITOR_${编辑器类型}_DEFAULT)
21
14
  * @author chitanda
22
15
  * @date 2023-02-06 21:02:21
23
16
  * @type {string}
@@ -108,32 +108,34 @@ export class MethodDto {
108
108
  * @author chitanda
109
109
  * @date 2022-10-10 23:10:50
110
110
  * @param {IContext} context
111
- * @param {IData} data
112
- * @return {*} {Promise<IData>}
111
+ * @param {IData[]} data
112
+ * @return {*} {Promise<Entity[]>}
113
113
  */
114
- async set(context: IContext, data: IData): Promise<Entity> {
114
+ async sets(context: IContext, data: IData[]): Promise<Entity[]> {
115
115
  const service = await this.app!.es.getService(this.entity.codeName);
116
- const all = await this.fields
117
- .filter(field => field.type === 'DTOS')
118
- .map(async field => {
119
- const key = field.codeName.toLowerCase();
120
- const dto = await this.getFieldDto(field);
121
- const items: IData[] = data[key];
122
- if (items) {
123
- for (let i = 0; i < items.length; i++) {
124
- const item = items[i];
125
- await dto.set(context, item);
126
- }
116
+ service.local.clear(context);
117
+ return Promise.all(
118
+ data.map(async datum => {
119
+ const all = this.fields
120
+ .filter(field => field.type === 'DTOS')
121
+ .map(async field => {
122
+ const key = field.codeName.toLowerCase();
123
+ const dto = await this.getFieldDto(field);
124
+ const items: IData[] = datum[key];
125
+ if (items) {
126
+ await dto.sets(context, items);
127
+ }
128
+ });
129
+ for (let i = 0; i < all.length; i++) {
130
+ await all[i];
127
131
  }
128
- });
129
- for (let i = 0; i < all.length; i++) {
130
- await all[i];
131
- }
132
- const entityData = new Entity(this.entity.source, data);
133
- if (this.entity.isLocalMode) {
134
- await service.local.add(context, entityData);
135
- }
136
- return entityData;
132
+ const entityData = new Entity(this.entity.source, datum);
133
+ if (this.entity.isLocalMode) {
134
+ await service.local.add(context, entityData);
135
+ }
136
+ return entityData;
137
+ }),
138
+ );
137
139
  }
138
140
 
139
141
  /**
@@ -20,6 +20,16 @@ export class Entity {
20
20
 
21
21
  protected declare entity: IPSAppDataEntity;
22
22
 
23
+ /**
24
+ * 前端临时主键
25
+ *
26
+ * @author chitanda
27
+ * @date 2023-03-08 17:03:12
28
+ * @protected
29
+ * @type {string}
30
+ */
31
+ protected _srfkey: string = '';
32
+
23
33
  declare srfdename: string;
24
34
 
25
35
  declare srfkey: string;
@@ -58,10 +68,10 @@ export class Entity {
58
68
  });
59
69
  Object.defineProperty(this, 'srfkey', {
60
70
  set(val: unknown) {
61
- this.data[key] = val;
71
+ this._srfkey = val;
62
72
  },
63
73
  get() {
64
- return this.data[key];
74
+ return this.data[key] || this._srfkey;
65
75
  },
66
76
  });
67
77
  Object.defineProperty(this, 'srfmajortext', {
@@ -1,4 +1,5 @@
1
1
  import { HttpResponse, IHttpResponse } from '@ibiz-template/core';
2
+ import { execDELogic } from '../../../../de-logic';
2
3
  import { Entity } from '../../../entity/entity';
3
4
  import { Method } from './method';
4
5
 
@@ -17,6 +18,14 @@ export class DEActionMethod extends Method {
17
18
  data: IData,
18
19
  params: IParams,
19
20
  ): Promise<HttpResponse<IData>> {
21
+ // 实体逻辑处理
22
+ if (this.method.actionType === 'DELOGIC') {
23
+ const deLogic = this.method.getPSAppDELogic();
24
+ if (deLogic?.enableFront) {
25
+ return execDELogic(deLogic, context, data, params);
26
+ }
27
+ }
28
+
20
29
  if (!this.entity.isLocalMode) {
21
30
  data = await this.input.handle(context, data);
22
31
  }
@@ -30,11 +39,11 @@ export class DEActionMethod extends Method {
30
39
  case 'Create':
31
40
  return this.create(context, data, params);
32
41
  case 'Get':
33
- return this.get(context, data);
42
+ return this.get(context, params);
34
43
  case 'GetDraft':
35
- return this.getDraft(context, data);
44
+ return this.getDraft(context, params);
36
45
  case 'Remove':
37
- return this.remove(context, data);
46
+ return this.remove(context, params);
38
47
  case 'Update':
39
48
  return this.update(context, data, params);
40
49
  case 'CreateTemp':
@@ -42,7 +51,7 @@ export class DEActionMethod extends Method {
42
51
  case 'GetTemp':
43
52
  return this.getTemp(context, data);
44
53
  case 'GetDraftTemp':
45
- return this.getDraftTemp(context, data);
54
+ return this.getDraftTemp(context, params);
46
55
  case 'RemoveTemp':
47
56
  return this.removeTemp(context, data);
48
57
  case 'UpdateTemp':
@@ -46,8 +46,8 @@ export class MethodReturn {
46
46
  */
47
47
  async handle(context: IContext, data: IData): Promise<Entity> {
48
48
  if (this.dto) {
49
- this.app.es.clearTempCache(context);
50
- return this.dto.set(context, data);
49
+ const items = await this.dto.sets(context, [data]);
50
+ return items[0];
51
51
  }
52
52
  return new Entity(this.entity.source, data);
53
53
  }
@@ -101,38 +101,45 @@ export abstract class Method {
101
101
  */
102
102
  protected async request(
103
103
  path: string,
104
- _context: IContext,
104
+ context: IContext,
105
105
  data: IData,
106
106
  params: IParams,
107
107
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
108
108
  ): Promise<HttpResponse<any>> {
109
- const requestType = this.method.requestMethod;
110
- const methodName = this.method.codeName.toLowerCase();
111
- let res: HttpResponse | null = null;
112
- switch (requestType) {
113
- case 'POST':
114
- res = await this.app.net.post(`${path}/${methodName}`, data, params);
115
- break;
116
- case 'GET':
117
- res = await this.app.net.get(`${path}/${methodName}`, data, params);
118
- break;
119
- case 'PUT':
120
- res = await this.app.net.put(`${path}/${methodName}`, data, params);
121
- break;
122
- case 'DELETE':
123
- res = await this.app.net.delete(`${path}/${methodName}`, data, params);
124
- break;
125
- default:
126
- if (requestType) {
127
- throw new DefectModelError(
128
- this.method,
129
- `未支持的请求方式: ${requestType}`,
109
+ const { actionType, requestMethod } = this.method;
110
+ if (actionType === 'REMOTE') {
111
+ const methodName = this.method.codeName.toLowerCase();
112
+ let res: HttpResponse | null = null;
113
+ switch (requestMethod) {
114
+ case 'POST':
115
+ res = await this.app.net.post(`${path}/${methodName}`, data, params);
116
+ break;
117
+ case 'GET':
118
+ res = await this.app.net.get(`${path}/${methodName}`, data, params);
119
+ break;
120
+ case 'PUT':
121
+ res = await this.app.net.put(`${path}/${methodName}`, data, params);
122
+ break;
123
+ case 'DELETE':
124
+ res = await this.app.net.delete(
125
+ `${path}/${methodName}`,
126
+ data,
127
+ params,
130
128
  );
131
- } else {
132
- throw new DefectModelError(this.method, '未配置请求方式');
133
- }
129
+ break;
130
+ default:
131
+ if (requestMethod) {
132
+ throw new DefectModelError(
133
+ this.method,
134
+ `未支持的请求方式: ${requestMethod}`,
135
+ );
136
+ } else {
137
+ throw new DefectModelError(this.method, '未配置请求方式');
138
+ }
139
+ }
140
+ return res;
134
141
  }
135
- return res;
142
+ throw new DefectModelError(this.method, `未支持的行为类型[${actionType}]`);
136
143
  }
137
144
 
138
145
  /**
@@ -108,9 +108,15 @@ export class ControlService<T extends ControlModel = ControlModel> {
108
108
  async exec(
109
109
  methodName: string,
110
110
  context: IContext,
111
+ data: IData = {},
111
112
  params: IParams = {},
112
113
  ): Promise<IHttpResponse> {
113
- const res = await this.entityService.exec(methodName, context, params);
114
+ const res = await this.entityService.exec(
115
+ methodName,
116
+ context,
117
+ data,
118
+ params,
119
+ );
114
120
  return res;
115
121
  }
116
122
 
@@ -20,7 +20,7 @@ export class EditFormService<
20
20
  context: IContext,
21
21
  params: IParams = {},
22
22
  ): Promise<IHttpResponse<ControlVO>> {
23
- let res = await this.exec(this.model.getAction, context, params);
23
+ let res = await this.exec(this.model.getAction, context, undefined, params);
24
24
  res = this.handleResponse(res);
25
25
  return res as IHttpResponse<ControlVO>;
26
26
  }
@@ -38,7 +38,12 @@ export class EditFormService<
38
38
  context: IContext,
39
39
  params: IParams = {},
40
40
  ): Promise<IHttpResponse<ControlVO>> {
41
- let res = await this.exec(this.model.getDraftAction, context, params);
41
+ let res = await this.exec(
42
+ this.model.getDraftAction,
43
+ context,
44
+ undefined,
45
+ params,
46
+ );
42
47
  res = this.handleResponse(res);
43
48
  return res as IHttpResponse<ControlVO>;
44
49
  }
@@ -56,7 +61,12 @@ export class EditFormService<
56
61
  context: IContext,
57
62
  params: IParams = {},
58
63
  ): Promise<IHttpResponse> {
59
- const res = await this.exec(this.model.removeAction, context, params);
64
+ const res = await this.exec(
65
+ this.model.removeAction,
66
+ context,
67
+ undefined,
68
+ params,
69
+ );
60
70
  return res;
61
71
  }
62
72
 
@@ -38,7 +38,7 @@ export class MDControlService<
38
38
  context: IContext,
39
39
  params: IParams = {},
40
40
  ): Promise<IHttpResponse<ControlVO>> {
41
- let res = await this.exec(this.model.getAction, context, params);
41
+ let res = await this.exec(this.model.getAction, context, undefined, params);
42
42
  res = this.handleResponse(res);
43
43
  return res as IHttpResponse<ControlVO>;
44
44
  }
@@ -56,7 +56,12 @@ export class MDControlService<
56
56
  context: IContext,
57
57
  params: IParams = {},
58
58
  ): Promise<IHttpResponse<ControlVO>> {
59
- let res = await this.exec(this.model.getDraftAction, context, params);
59
+ let res = await this.exec(
60
+ this.model.getDraftAction,
61
+ context,
62
+ undefined,
63
+ params,
64
+ );
60
65
  res = this.handleResponse(res);
61
66
  return res as IHttpResponse<ControlVO>;
62
67
  }
@@ -74,7 +79,12 @@ export class MDControlService<
74
79
  context: IContext,
75
80
  params: IParams = {},
76
81
  ): Promise<IHttpResponse> {
77
- const res = await this.exec(this.model.removeAction, context, params);
82
+ const res = await this.exec(
83
+ this.model.removeAction,
84
+ context,
85
+ undefined,
86
+ params,
87
+ );
78
88
  return res;
79
89
  }
80
90
 
@@ -27,9 +27,10 @@ export class WizardPanelService<
27
27
  */
28
28
  async initialize(
29
29
  context: IContext,
30
+ data: IData = {},
30
31
  params: IParams = {},
31
32
  ): Promise<IHttpResponse<IData>> {
32
- let res = await this.exec(this.model.initAction!, context, params);
33
+ let res = await this.exec(this.model.initAction!, context, data, params);
33
34
  res = this.handleResponse(res);
34
35
  return res as IHttpResponse<IData>;
35
36
  }
@@ -45,9 +46,10 @@ export class WizardPanelService<
45
46
  */
46
47
  async finish(
47
48
  context: IContext,
49
+ data: IData = {},
48
50
  params: IParams = {},
49
51
  ): Promise<IHttpResponse<IData>> {
50
- let res = await this.exec(this.model.finishAction, context, params);
52
+ let res = await this.exec(this.model.finishAction, context, data, params);
51
53
  res = this.handleResponse(res);
52
54
  return res as IHttpResponse<IData>;
53
55
  }