@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
package/src/app-hub.ts CHANGED
@@ -1,7 +1,12 @@
1
1
  import { IAppDataEntity, IAppView, IApplication } from '@ibiz/model-core';
2
2
  import { RuntimeError } from '@ibiz-template/core';
3
3
  import { Application } from './application';
4
- import { IAppHubService, IAppService, ModelLoaderProvider } from './interface';
4
+ import {
5
+ IAppDEService,
6
+ IAppHubService,
7
+ IAppService,
8
+ ModelLoaderProvider,
9
+ } from './interface';
5
10
  import { AppConfigService, Convert } from './hub';
6
11
  import { HubController } from './controller';
7
12
  import { ConfigService } from './service';
@@ -61,6 +66,16 @@ export class AppHub implements IAppHubService {
61
66
  */
62
67
  protected view2appMap: Map<string, string> = new Map();
63
68
 
69
+ /**
70
+ * 当前注册的应用视图优先级
71
+ *
72
+ * @author chitanda
73
+ * @date 2024-01-15 15:01:57
74
+ * @protected
75
+ * @type {Map<string, number>}
76
+ */
77
+ protected view2appPriorityMap: Map<string, number> = new Map();
78
+
64
79
  /**
65
80
  * 实例化的应用视图模型
66
81
  *
@@ -171,13 +186,28 @@ export class AppHub implements IAppHubService {
171
186
  * 设置应用视图所属应用
172
187
  *
173
188
  * @author chitanda
174
- * @date 2023-04-17 23:04:37
189
+ * @date 2024-01-15 15:01:41
175
190
  * @param {string} tag 视图 codeName 或者视图 id
176
191
  * @param {string} [appId=ibiz.env.appId]
192
+ * @param {number} [priority=-1] 视图的优先级,值越小优先级越高。1为最高优先级
177
193
  */
178
- setAppView(tag: string, appId: string = ibiz.env.appId): void {
194
+ setAppView(
195
+ tag: string,
196
+ appId: string = ibiz.env.appId,
197
+ priority: number = -1,
198
+ ): void {
179
199
  const id = this.calcAppViewId(tag);
200
+ if (this.view2appMap.has(id)) {
201
+ const _priority = this.view2appPriorityMap.get(id);
202
+ // 已经存在优先级高的视图直接跳过,若优先级相同或更高则覆盖
203
+ if (_priority && _priority < priority) {
204
+ return;
205
+ }
206
+ }
180
207
  this.view2appMap.set(id, appId);
208
+ if (priority !== -1) {
209
+ this.view2appPriorityMap.set(id, priority);
210
+ }
181
211
  }
182
212
 
183
213
  /**
@@ -372,6 +402,25 @@ export class AppHub implements IAppHubService {
372
402
  return [];
373
403
  }
374
404
 
405
+ /**
406
+ * 获取应用实体服务
407
+ *
408
+ * @author chitanda
409
+ * @date 2024-01-10 13:01:01
410
+ * @param {string} appId
411
+ * @param {string} entityId
412
+ * @param {IContext} context
413
+ * @return {*} {Promise<IAppDEService>}
414
+ */
415
+ async getAppDEService(
416
+ appId: string,
417
+ entityId: string,
418
+ context: IContext,
419
+ ): Promise<IAppDEService> {
420
+ const app = await this.getAppAsync(appId);
421
+ return app.deService.getService(context, entityId);
422
+ }
423
+
375
424
  reset(): void {
376
425
  this.appMap.clear();
377
426
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -130,7 +130,7 @@ export class Application implements IAppService {
130
130
  async init(): Promise<void> {
131
131
  await this.authority.init();
132
132
  await this.loadAppModelStyle();
133
- if (ibiz.env.enableMqtt && ibiz.appData) {
133
+ if (ibiz.env.enableMqtt && ibiz.appData && ibiz.auth.isAnonymous !== true) {
134
134
  this.mqtt = new MqttService(
135
135
  ibiz.appData.mqtttopic,
136
136
  getToken()!,
@@ -71,7 +71,14 @@ export class OpenAppViewCommand {
71
71
  );
72
72
  }
73
73
  const { openMode = 'INDEXVIEWTAB' } = appView;
74
- switch (opts.openMode || openMode) {
74
+ const viewOpenMode = opts.openMode || openMode;
75
+ if (viewOpenMode !== undefined && viewOpenMode !== 'INDEXVIEWTAB') {
76
+ // 除了走路由的,其他情况toRouteDepth转为undefined,避免影响后续操作
77
+ if (context.toRouteDepth) {
78
+ context.toRouteDepth = undefined;
79
+ }
80
+ }
81
+ switch (viewOpenMode) {
75
82
  case 'INDEXVIEWTAB':
76
83
  if (opts.noWaitRoute) {
77
84
  this.openIndexViewTab(appView, context, params);
@@ -213,4 +213,9 @@ export enum ControlType {
213
213
  * 标题栏
214
214
  */
215
215
  CAPTIONBAR = 'CAPTIONBAR',
216
+
217
+ /**
218
+ * 上下文菜单
219
+ */
220
+ CONTEXT_MENU = 'CONTEXTMENU',
216
221
  }
@@ -1,10 +1,13 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { IEditor, INavigateParamContainer } from '@ibiz/model-core';
3
+ import { DataTypes } from '@ibiz-template/core';
4
+ import dayjs from 'dayjs';
3
5
  import { convertNavData } from '../../../utils';
4
6
  import {
5
7
  IEditorContainerController,
6
8
  IEditorController,
7
9
  } from '../../../interface/controller';
10
+ import { ValueExUtil } from '../../utils';
8
11
 
9
12
  /**
10
13
  * 编辑器控制器基类
@@ -88,6 +91,28 @@ export class EditorController<T extends IEditor = IEditor>
88
91
  return !!this.model.readOnly;
89
92
  }
90
93
 
94
+ /**
95
+ * 值格式化
96
+ * @author lxm
97
+ * @date 2024-01-11 10:18:33
98
+ * @readonly
99
+ * @type {(string | undefined)}
100
+ */
101
+ get valueFormat(): string | undefined {
102
+ return this.parent.valueFormat;
103
+ }
104
+
105
+ /**
106
+ * 数据类型
107
+ * @author lxm
108
+ * @date 2024-01-11 10:18:55
109
+ * @readonly
110
+ * @type {(number | undefined)}
111
+ */
112
+ get dataType(): number | undefined {
113
+ return this.parent.dataType;
114
+ }
115
+
91
116
  /**
92
117
  * Creates an instance of EditorController.
93
118
  * @author lxm
@@ -195,4 +220,33 @@ export class EditorController<T extends IEditor = IEditor>
195
220
  toBoolean(value: string): boolean {
196
221
  return Object.is('true', value);
197
222
  }
223
+
224
+ /**
225
+ * 值格式化
226
+ * @author lxm
227
+ * @date 2023-08-25 05:18:11
228
+ * @param {unknown} value
229
+ * @return {*} {string}
230
+ */
231
+ formatValue(value: unknown = ''): string {
232
+ // 根据数据类型增强转换显示文本
233
+ if (this.model.valueType !== 'SIMPLE') {
234
+ return ValueExUtil.toText(this.model, value);
235
+ }
236
+
237
+ // 根据格式化配置格式化显示
238
+ const strVal = `${value}`;
239
+ if (!this.valueFormat) {
240
+ return strVal;
241
+ }
242
+ const isDate = DataTypes.isDate(this.dataType!);
243
+ if (isDate) {
244
+ const formatVal = dayjs(strVal).format(this.valueFormat);
245
+ if (formatVal !== 'Invalid Date') {
246
+ return formatVal;
247
+ }
248
+ return strVal;
249
+ }
250
+ return ibiz.util.text.format(strVal, this.valueFormat);
251
+ }
198
252
  }
@@ -314,6 +314,7 @@ export class ViewController<
314
314
  }
315
315
 
316
316
  protected async onDestroyed(): Promise<void> {
317
+ const srfSessionId = this.context.srfsessionid;
317
318
  await super.onDestroyed();
318
319
  // 执行视图引擎的doDestroyed
319
320
  if (this.engines.length) {
@@ -325,8 +326,8 @@ export class ViewController<
325
326
  this.scheduler.destroy();
326
327
  }
327
328
  // 销毁界面域,谁创建谁销毁
328
- if (this.id === this.context.srfsessionid) {
329
- ibiz.uiDomainManager.destroy(this.context.srfsessionid);
329
+ if (this.id === srfSessionId) {
330
+ ibiz.uiDomainManager.destroy(srfSessionId);
330
331
  }
331
332
  this.context.destroy();
332
333
  ibiz.log.debug(`视图[${this.model.name}](${this.model.id})销毁`);
@@ -1,3 +1,4 @@
1
1
  export * from './form/form-notify.state';
2
2
  export * from './grid/grid-notify.state';
3
3
  export * from './panel/panel-notify.state';
4
+ export * from './tree-grid-ex/tree-grid-ex-notify.state';
@@ -0,0 +1,5 @@
1
+ /* eslint-disable no-shadow */
2
+ export enum TreeGridExNotifyState {
3
+ LOAD = 'LOAD',
4
+ SAVE = 'SAVE',
5
+ }
@@ -107,7 +107,7 @@ export class ChartController
107
107
  if (!this.options) {
108
108
  throw new RuntimeError('options还没计算');
109
109
  }
110
- this.chart.setOption(this.options);
110
+ this.chart.setOption(this.options, { notMerge: true });
111
111
  this.resizeChart();
112
112
  }
113
113
 
@@ -1,5 +1,9 @@
1
1
  /* eslint-disable no-param-reassign */
2
- import { debounceAndAsyncMerge, recursiveIterate } from '@ibiz-template/core';
2
+ import {
3
+ RuntimeModelError,
4
+ debounceAndAsyncMerge,
5
+ recursiveIterate,
6
+ } from '@ibiz-template/core';
3
7
  import { IControlLogic, IDEForm, IDEFormDetail } from '@ibiz/model-core';
4
8
  import {
5
9
  IFormState,
@@ -177,6 +181,12 @@ export abstract class FormController<
177
181
  if (!detailProvider) {
178
182
  return;
179
183
  }
184
+ if (form.details[detail.id!]) {
185
+ throw new RuntimeModelError(
186
+ detail,
187
+ `初始化异常: 表单成员[${detail.id}](${detail.detailType})已存在,表单项标识重复请检查配置`,
188
+ );
189
+ }
180
190
  form.providers[detail.id!] = detailProvider;
181
191
  const detailController = await detailProvider.createController(
182
192
  detail,
@@ -389,6 +389,10 @@ export class FormDetailController<T extends IDEFormDetail = IDEFormDetail>
389
389
  * @date 2023-10-11 05:03:26
390
390
  */
391
391
  async onClick(event?: MouseEvent): Promise<void> {
392
+ if (event) {
393
+ // 阻止冒泡
394
+ event.stopPropagation();
395
+ }
392
396
  this.form.evt.emit('onFormDetailEvent', {
393
397
  formDetailName: this.model.id!,
394
398
  formDetailEventName: FormDetailEventName.CLICK,
@@ -2,6 +2,7 @@ import { IDEFormTabPage } from '@ibiz/model-core';
2
2
  import { IFormDetailContainerController } from '../../../../../interface';
3
3
  import { FormDetailController } from '../form-detail';
4
4
  import { FormTabPageState } from './form-tab-page.state';
5
+ import { FormTabPanelController } from '../form-tab-panel';
5
6
 
6
7
  /**
7
8
  * 表单分页部件分页控制器
@@ -21,4 +22,17 @@ export class FormTabPageController
21
22
  protected createState(): FormTabPageState {
22
23
  return new FormTabPageState(this.parent?.state);
23
24
  }
25
+
26
+ /**
27
+ * 是否激活的分页
28
+ * @author lxm
29
+ * @date 2024-01-17 03:16:24
30
+ * @readonly
31
+ * @type {boolean}
32
+ */
33
+ get isActive(): boolean {
34
+ return (
35
+ (this.parent as FormTabPanelController).state.activeTab === this.model.id
36
+ );
37
+ }
24
38
  }
@@ -21,4 +21,20 @@ export class FormTabPanelController
21
21
  protected createState(): FormTabPanelState {
22
22
  return new FormTabPanelState(this.parent?.state);
23
23
  }
24
+
25
+ protected async onInit(): Promise<void> {
26
+ await super.onInit();
27
+ // 初始化默认的激活分页
28
+ this.state.activeTab = this.model.deformTabPages?.[0].id || '';
29
+ }
30
+
31
+ /**
32
+ * 分页点击切换处理
33
+ * @author lxm
34
+ * @date 2024-01-17 02:59:38
35
+ * @param {string} tabId
36
+ */
37
+ onTabChange(tabId: string): void {
38
+ this.state.activeTab = tabId;
39
+ }
24
40
  }
@@ -6,4 +6,12 @@ import { FormDetailState } from '../form-detail';
6
6
  * @author: zhujiamin
7
7
  * @Date: 2023-01-04 10:26:34
8
8
  */
9
- export class FormTabPanelState extends FormDetailState {}
9
+ export class FormTabPanelState extends FormDetailState {
10
+ /**
11
+ * 当前激活的分页
12
+ * @author lxm
13
+ * @date 2024-01-17 02:05:58
14
+ * @type {string}
15
+ */
16
+ activeTab: string = '';
17
+ }
@@ -724,7 +724,7 @@ export class GridController<
724
724
  this.state.columnStates.push({
725
725
  key: column.codeName!,
726
726
  caption: column.caption!,
727
- hidden: !!column.hideDefault,
727
+ hidden: !!column.hideDefault || !!column.hiddenDataItem,
728
728
  uaColumn: column.columnType === 'UAGRIDCOLUMN',
729
729
  });
730
730
  }
@@ -21,7 +21,7 @@ export class GridService extends MDControlService<IDEGrid> {
21
21
  super.initUIDataMap();
22
22
  if (this.model.degridColumns) {
23
23
  const dataItems = this.model.degridDataItems || [];
24
- // *初始化表格数据项的属性映射
24
+ // *初始化表格属性列和实体数据的属性映射
25
25
  this.model.degridColumns?.forEach((column: IDEGridFieldColumn) => {
26
26
  const uiKey = column.id!.toLowerCase();
27
27
  // 列映射应用实体属性
@@ -51,16 +51,6 @@ export class GridService extends MDControlService<IDEGrid> {
51
51
  this.dataUIMap.set(uiKey, mapField);
52
52
  });
53
53
  }
54
-
55
- //* 如果属性列和表格数据列名称不一致,补充不一致的属性列的名称映射
56
- // this.model.fieldColumns.forEach(fieldColumn => {
57
- // if (fieldColumn.source.dataItemName !== fieldColumn.codeName) {
58
- // const value = this.dataUIMap.get(fieldColumn.source.dataItemName);
59
- // if (value) {
60
- // this.dataUIMap.set(fieldColumn.codeName, value);
61
- // }
62
- // }
63
- // });
64
54
  }
65
55
 
66
56
  /**
@@ -68,6 +68,16 @@ export class GridFieldColumnController extends GridColumnController<IDEGridField
68
68
  return !!this.model.deuiactionId;
69
69
  }
70
70
 
71
+ /**
72
+ * 属性列对应值在数据里的属性字段名称
73
+ * @author lxm
74
+ * @date 2023-06-25 09:26:04
75
+ * @readonly
76
+ */
77
+ get fieldName(): string {
78
+ return this.model.id!.toLowerCase();
79
+ }
80
+
71
81
  protected async onInit(): Promise<void> {
72
82
  await super.onInit();
73
83
 
@@ -116,7 +126,7 @@ export class GridFieldColumnController extends GridColumnController<IDEGridField
116
126
  * @readonly
117
127
  */
118
128
  clickable(row: GridRowState): boolean {
119
- const value = row.data[this.model.codeName!];
129
+ const value = row.data[this.fieldName!];
120
130
  return (this.isLinkColumn || this.hasAction) && value;
121
131
  }
122
132
 
@@ -160,7 +170,7 @@ export class GridFieldColumnController extends GridColumnController<IDEGridField
160
170
  * @returns {*} {Promise<void>}
161
171
  */
162
172
  async openLinkView(row: GridRowState, event: MouseEvent): Promise<void> {
163
- const curValue = row.data[this.model.codeName!];
173
+ const curValue = row.data[this.fieldName!];
164
174
  if (!curValue) {
165
175
  // 当前值不存在,不继续走打开链接视图逻辑
166
176
  return;
@@ -109,16 +109,6 @@ export class GridFieldEditColumnController
109
109
  return undefined;
110
110
  }
111
111
 
112
- /**
113
- * 列数据属性字段名称
114
- * @author lxm
115
- * @date 2023-06-25 09:26:04
116
- * @readonly
117
- */
118
- get fieldName(): string {
119
- return this.model.dataItemName!;
120
- }
121
-
122
112
  /**
123
113
  * 初始化方法,生成表格编辑项控制器
124
114
  *
@@ -1,3 +1,4 @@
1
1
  export { TreeGridExColumnController } from './tree-grid-ex-column/tree-grid-ex-column.controller';
2
2
  export { TreeGridExFieldColumnController } from './tree-grid-ex-field-column/tree-grid-ex-field-column.controller';
3
+ export { TreeGridExNodeColumnController } from './tree-grid-ex-field-column/tree-grid-ex-node-column.controller';
3
4
  export { TreeGridExUAColumnController } from './tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller';
@@ -1,5 +1,7 @@
1
1
  import { IDETreeColumn } from '@ibiz/model-core';
2
2
  import { TreeGridExController } from '../../tree-grid-ex.controller';
3
+ import { TreeGridExNotifyState } from '../../../../constant';
4
+ import { TreeGridExRowState } from '../../tree-grid-ex-row.state';
3
5
 
4
6
  /**
5
7
  * 树表格(增强)列控制器
@@ -118,4 +120,24 @@ export class TreeGridExColumnController<
118
120
  protected async onInit(): Promise<void> {
119
121
  // 初始化操作
120
122
  }
123
+
124
+ /**
125
+ * 表格状态变更通知
126
+ *
127
+ * @author lxm
128
+ * @date 2022-09-20 18:09:07
129
+ */
130
+ gridStateNotify(
131
+ _row: TreeGridExRowState,
132
+ _state: TreeGridExNotifyState,
133
+ ): void {
134
+ // 子类实现具体逻辑
135
+ }
136
+
137
+ async dataChangeNotify(
138
+ _row: TreeGridExRowState,
139
+ _names: string[],
140
+ ): Promise<void> {
141
+ // 子类实现具体逻辑
142
+ }
121
143
  }
@@ -1,6 +1,9 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-vars */
2
- import { IDETreeDEFColumn } from '@ibiz/model-core';
2
+ import { IDETreeDEFColumn, IDETreeNodeColumn } from '@ibiz/model-core';
3
3
  import { TreeGridExColumnController } from '../tree-grid-ex-column/tree-grid-ex-column.controller';
4
+ import { TreeGridExNodeColumnController } from './tree-grid-ex-node-column.controller';
5
+ import { TreeGridExNotifyState } from '../../../../constant';
6
+ import { ITreeGridExRowState } from '../../../../../interface';
4
7
 
5
8
  /**
6
9
  * 树表格(增强)属性列控制器
@@ -10,4 +13,87 @@ import { TreeGridExColumnController } from '../tree-grid-ex-column/tree-grid-ex-
10
13
  * @class TreeGridExFieldColumnController
11
14
  * @extends {TreeGridExColumnController<IDETreeDEFColumn>}
12
15
  */
13
- export class TreeGridExFieldColumnController extends TreeGridExColumnController<IDETreeDEFColumn> {}
16
+ export class TreeGridExFieldColumnController extends TreeGridExColumnController<IDETreeDEFColumn> {
17
+ /**
18
+ * 树表格列标识(用于取数和各种比较判断)
19
+ * @author lxm
20
+ * @date 2024-01-09 11:33:37
21
+ * @readonly
22
+ * @type {string}
23
+ */
24
+ get name(): string {
25
+ return this.model.id!;
26
+ }
27
+
28
+ /**
29
+ * 该树表格列对应不同节点模型的节点列控制器
30
+ * @author lxm
31
+ * @date 2024-01-08 05:40:56
32
+ * @type {Map<string, IDETreeNodeColumn>}
33
+ */
34
+ nodeColumnControllerMap: Map<string, TreeGridExNodeColumnController> =
35
+ new Map();
36
+
37
+ async init(): Promise<void> {
38
+ await this.onInit();
39
+ await this.initNodeColumnController();
40
+ }
41
+
42
+ /**
43
+ * 解析模型并初始化相关属性
44
+ * @author lxm
45
+ * @date 2024-01-08 05:59:12
46
+ * @return {*} {Promise<void>}
47
+ */
48
+ async initNodeColumnController(): Promise<void> {
49
+ this.treeGrid.model.detreeNodes?.forEach(node => {
50
+ if (node.treeNodeType !== 'DE') {
51
+ return;
52
+ }
53
+ const nodeColumn = node.detreeNodeColumns?.find(
54
+ (column: IDETreeNodeColumn) => {
55
+ return column.detreeColumnId === this.model.id;
56
+ },
57
+ );
58
+
59
+ // 没有指定树表格列的不创建
60
+ if (nodeColumn) {
61
+ this.nodeColumnControllerMap.set(
62
+ node.id!,
63
+ new TreeGridExNodeColumnController(this, node),
64
+ );
65
+ }
66
+ });
67
+
68
+ // 都走一遍初始化
69
+ await Promise.all(
70
+ Array.from(this.nodeColumnControllerMap.values()).map(controller =>
71
+ controller.init(),
72
+ ),
73
+ );
74
+ }
75
+
76
+ /**
77
+ * 初始化属性列界面行为组按钮状态
78
+ * @author lxm
79
+ * @date 2024-01-11 01:48:38
80
+ * @param {ITreeGridExRowState} row
81
+ */
82
+ initActionStates(row: ITreeGridExRowState): void {
83
+ const nodeColumn = this.nodeColumnControllerMap.get(row.data._nodeId);
84
+ if (nodeColumn) {
85
+ nodeColumn.initActionStates(row);
86
+ }
87
+ }
88
+
89
+ gridStateNotify(
90
+ row: ITreeGridExRowState,
91
+ state: TreeGridExNotifyState,
92
+ ): void {
93
+ super.gridStateNotify(row, state);
94
+ const nodeColumn = this.nodeColumnControllerMap.get(row.data._nodeId);
95
+ if (nodeColumn) {
96
+ nodeColumn.gridStateNotify(row, state);
97
+ }
98
+ }
99
+ }