@ibiz-template/model-helper 0.7.41-alpha.11 → 0.7.41-alpha.110

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 (50) hide show
  1. package/dist/index.esm.js +1492 -3001
  2. package/dist/index.system.min.js +1 -1
  3. package/out/model-helper.d.ts +13 -1
  4. package/out/model-helper.d.ts.map +1 -1
  5. package/out/model-helper.js +47 -4
  6. package/out/model-loader.d.ts +3 -1
  7. package/out/model-loader.d.ts.map +1 -1
  8. package/out/model-loader.js +6 -0
  9. package/out/model-util.d.ts.map +1 -1
  10. package/out/model-util.js +8 -8
  11. package/out/utils/merge-model/merge-app-codelist.d.ts +8 -0
  12. package/out/utils/merge-model/merge-app-codelist.d.ts.map +1 -0
  13. package/out/utils/merge-model/merge-app-codelist.js +35 -0
  14. package/out/utils/merge-model/merge-app-menu.d.ts.map +1 -1
  15. package/out/utils/merge-model/merge-app-menu.js +8 -3
  16. package/out/utils/merge-model/merge-app-uiaction-group.d.ts +7 -0
  17. package/out/utils/merge-model/merge-app-uiaction-group.d.ts.map +1 -1
  18. package/out/utils/merge-model/merge-app-uiaction-group.js +54 -2
  19. package/out/utils/merge-model/merge-de-drcontrol.d.ts +8 -0
  20. package/out/utils/merge-model/merge-de-drcontrol.d.ts.map +1 -1
  21. package/out/utils/merge-model/merge-de-drcontrol.js +87 -4
  22. package/out/utils/merge-model/merge-de-form.d.ts +15 -0
  23. package/out/utils/merge-model/merge-de-form.d.ts.map +1 -1
  24. package/out/utils/merge-model/merge-de-form.js +56 -0
  25. package/out/utils/merge-model/merge-model-helper.d.ts +15 -1
  26. package/out/utils/merge-model/merge-model-helper.d.ts.map +1 -1
  27. package/out/utils/merge-model/merge-model-helper.js +101 -9
  28. package/out/utils/merge-model/merge-treeview.d.ts.map +1 -1
  29. package/out/utils/merge-model/merge-treeview.js +142 -6
  30. package/package.json +7 -6
  31. package/src/index.ts +7 -0
  32. package/src/locale/en/index.ts +16 -0
  33. package/src/locale/index.ts +2 -0
  34. package/src/locale/zh-CN/index.ts +14 -0
  35. package/src/model/PSSYSAPP.ts +12 -0
  36. package/src/model-helper.ts +804 -0
  37. package/src/model-loader.ts +95 -0
  38. package/src/model-util.ts +467 -0
  39. package/src/utils/format-path/format-path.ts +9 -0
  40. package/src/utils/index.ts +9 -0
  41. package/src/utils/merge-model/merge-app-codelist.ts +42 -0
  42. package/src/utils/merge-model/merge-app-menu.ts +136 -0
  43. package/src/utils/merge-model/merge-app-uiaction-group.ts +85 -0
  44. package/src/utils/merge-model/merge-de-drcontrol.ts +175 -0
  45. package/src/utils/merge-model/merge-de-form.ts +326 -0
  46. package/src/utils/merge-model/merge-model-helper.ts +602 -0
  47. package/src/utils/merge-model/merge-model.ts +20 -0
  48. package/src/utils/merge-model/merge-treeview.ts +197 -0
  49. package/src/utils/plural/plural.ts +30 -0
  50. package/src/utils/service-path-util/service-path-util.ts +361 -0
@@ -0,0 +1,602 @@
1
+ import {
2
+ IAppCodeList,
3
+ IAppDEACMode,
4
+ IAppMenuModel,
5
+ IAppView,
6
+ IControl,
7
+ IDEDRBar,
8
+ IDEForm,
9
+ IDEFormButtonList,
10
+ IDEFormDetail,
11
+ IDEGrid,
12
+ IDEGridFieldColumn,
13
+ IDETBGroupItem,
14
+ IDEToolbar,
15
+ IDEToolbarItem,
16
+ IDETree,
17
+ ISubAppRef,
18
+ ITabExpPanel,
19
+ IUIActionGroup,
20
+ } from '@ibiz/model-core';
21
+ import { DSLHelper } from '@ibiz/rt-model-api';
22
+ // eslint-disable-next-line import/no-extraneous-dependencies
23
+ import { recursiveIterate } from '@ibiz-template/core';
24
+ import { mergeAppMenu } from './merge-app-menu';
25
+ import { mergeDEDrControl, mergeDETabExpPanel } from './merge-de-drcontrol';
26
+ import { mergeAppDEUIActionGroup } from './merge-app-uiaction-group';
27
+ import { mergeTreeView } from './merge-treeview';
28
+ import {
29
+ getFormdataRelationTags,
30
+ mergeAppDEForm,
31
+ mergeFormDRTabpanel,
32
+ } from './merge-de-form';
33
+ import { mergeAppCodeList } from './merge-app-codelist';
34
+ /**
35
+ * 子应用模型合并对象
36
+ *
37
+ * @author tony001
38
+ * @date 2024-09-26 16:09:56
39
+ * @export
40
+ * @class MergeSubModelHelper
41
+ */
42
+ export class MergeSubModelHelper {
43
+ /**
44
+ * dsl解析包
45
+ *
46
+ * @author tony001
47
+ * @date 2024-09-26 16:09:48
48
+ * @protected
49
+ */
50
+ protected dsl = new DSLHelper();
51
+
52
+ /**
53
+ * 合并应用主菜单
54
+ *
55
+ * @author tony001
56
+ * @date 2024-09-26 16:09:03
57
+ * @param {(IControl[] | undefined)} controls
58
+ * @param {ISubAppRef[]} subAppRefs
59
+ */
60
+ mergeAppMainMenu(
61
+ view: IAppView,
62
+ controls: IControl[] | undefined,
63
+ subAppRefs: ISubAppRef[],
64
+ ): void {
65
+ // config.common.mergeAppMenu参数值为disable,不处理该应用的菜单合并
66
+ if (
67
+ ibiz.config.common.mergeAppMenu &&
68
+ ibiz.config.common.mergeAppMenu === 'disable'
69
+ ) {
70
+ return;
71
+ }
72
+ const dstAppMenu = controls?.find(item => {
73
+ return item.controlType === 'APPMENU' && item.name === 'appmenu';
74
+ });
75
+ if (dstAppMenu) {
76
+ for (let i = 0; i < subAppRefs.length; i++) {
77
+ const srcAppMenu = subAppRefs[i].appMenuModel;
78
+ if (srcAppMenu) {
79
+ const { userTag } = srcAppMenu as IModel;
80
+ if (userTag) {
81
+ const [userKey, userValue] = userTag.split(':');
82
+ // mergemenutag: 目标菜单代码名称,目标菜单代码名称建议识别正则缺省配置以匹配更多目标
83
+ if (userKey === 'mergemenutag') {
84
+ try {
85
+ const userValueReg = new RegExp(userValue);
86
+ if (!userValueReg.test(dstAppMenu.codeName!)) {
87
+ continue;
88
+ }
89
+ } catch (error) {
90
+ ibiz.log.warn(
91
+ `[菜单合并]:无效的正则表达式${userValue},忽略处理`,
92
+ );
93
+ continue;
94
+ }
95
+ }
96
+ }
97
+ mergeAppMenu(dstAppMenu, srcAppMenu);
98
+ }
99
+ }
100
+ }
101
+ }
102
+
103
+ /**
104
+ * 合并扩展菜单
105
+ *
106
+ * @author tony001
107
+ * @date 2024-09-26 16:09:27
108
+ * @param {(IControl[] | undefined)} controls
109
+ * @param {ISubAppRef[]} subAppRefs
110
+ * @return {*} {void}
111
+ */
112
+ mergeSubAppExtendedMenu(
113
+ view: IAppView,
114
+ controls: IControl[] | undefined,
115
+ subAppRefs: ISubAppRef[],
116
+ ): void {
117
+ // config.common.mergeAppMenu参数值为disable,不处理该应用的菜单合并
118
+ if (
119
+ ibiz.config.common.mergeAppMenu &&
120
+ ibiz.config.common.mergeAppMenu === 'disable'
121
+ ) {
122
+ return;
123
+ }
124
+ if (view.viewType !== 'APPINDEXVIEW' || !controls) return;
125
+ const dstAppMenus = controls!.filter(item => {
126
+ return item.controlType === 'APPMENU' && item.name !== 'appmenu';
127
+ });
128
+ if (dstAppMenus && dstAppMenus.length > 0) {
129
+ for (let i = 0; i < dstAppMenus.length; i++) {
130
+ const dstAppMenu = dstAppMenus[i];
131
+ if (dstAppMenu && dstAppMenu.name) {
132
+ for (let j = 0; j < subAppRefs.length; j++) {
133
+ const srcAppMenu = ibiz.hub.getSubAppMenuModel(
134
+ dstAppMenu.name,
135
+ subAppRefs[j].appId,
136
+ );
137
+ if (srcAppMenu) {
138
+ mergeAppMenu(dstAppMenu, srcAppMenu as IAppMenuModel);
139
+ }
140
+ }
141
+ }
142
+ }
143
+ }
144
+ }
145
+
146
+ /**
147
+ * 合并DRCtrl
148
+ *
149
+ * @author tony001
150
+ * @date 2024-09-26 16:09:01
151
+ * @param {IAppView} view
152
+ * @param {(IControl[] | undefined)} controls
153
+ * @param {ISubAppRef[]} subAppRefs
154
+ */
155
+ mergeSubAppDRCtrl(
156
+ view: IAppView,
157
+ controls: IControl[] | undefined,
158
+ subAppRefs: ISubAppRef[],
159
+ ): void {
160
+ const dstDRCtrl = controls?.find(item => {
161
+ return (
162
+ item.controlType === 'DRBAR' ||
163
+ item.controlType === 'DRTAB' ||
164
+ item.controlType === 'TABEXPPANEL'
165
+ );
166
+ });
167
+ if (dstDRCtrl) {
168
+ if (dstDRCtrl.controlType === 'TABEXPPANEL') {
169
+ for (let i = 0; i < subAppRefs.length; i++) {
170
+ const srcDRCtrl = ibiz.hub.getSubAppTabExpPanel(
171
+ (dstDRCtrl as ITabExpPanel).uniqueTag!,
172
+ subAppRefs[i].appId,
173
+ );
174
+ if (srcDRCtrl) {
175
+ mergeDETabExpPanel(
176
+ dstDRCtrl as ITabExpPanel,
177
+ srcDRCtrl as ITabExpPanel,
178
+ );
179
+ }
180
+ }
181
+ } else {
182
+ for (let i = 0; i < subAppRefs.length; i++) {
183
+ const srcDRCtrl = ibiz.hub.getSubAppDrControl(
184
+ `${dstDRCtrl.appDataEntityId!.split('.')[1]}_${dstDRCtrl.modelType}_${(dstDRCtrl as IDEDRBar).dataRelationTag}`.toLowerCase(),
185
+ subAppRefs[i].appId,
186
+ );
187
+ if (srcDRCtrl) {
188
+ mergeDEDrControl(dstDRCtrl, srcDRCtrl);
189
+ }
190
+ }
191
+ }
192
+ }
193
+ }
194
+
195
+ /**
196
+ * 合并工具栏界面行为组项
197
+ *
198
+ * @author tony001
199
+ * @date 2024-09-26 16:09:23
200
+ * @param {IAppView} view
201
+ * @param {(IControl[] | undefined)} controls
202
+ * @param {ISubAppRef[]} subAppRefs
203
+ */
204
+ mergeSubAppToolbarActionGroup(
205
+ view: IAppView,
206
+ controls: IControl[] | undefined,
207
+ subAppRefs: ISubAppRef[],
208
+ ): void {
209
+ if (!controls) return;
210
+ const dstToolBar = controls.find(item => {
211
+ return item.controlType === 'TOOLBAR';
212
+ });
213
+ if (dstToolBar && (dstToolBar as IDEToolbar).detoolbarItems) {
214
+ const dstToolBarItems = (dstToolBar as IDEToolbar).detoolbarItems;
215
+ this.recursiveMergeSubAppToolbarItemActionGroup(
216
+ dstToolBarItems as IDEToolbarItem[],
217
+ view,
218
+ subAppRefs,
219
+ );
220
+ }
221
+ controls.forEach(control => {
222
+ if (control && (control as IData).controls) {
223
+ this.mergeSubAppToolbarActionGroup(
224
+ view,
225
+ (control as IData).controls,
226
+ subAppRefs,
227
+ );
228
+ }
229
+ });
230
+ }
231
+
232
+ /**
233
+ * @description 递归合并工具项界面行为组
234
+ * @param {IDEToolbarItem[]} dstToolBarItems
235
+ * @param {IAppView} view
236
+ * @param {ISubAppRef[]} subAppRefs
237
+ * @memberof MergeSubModelHelper
238
+ */
239
+ recursiveMergeSubAppToolbarItemActionGroup(
240
+ dstToolBarItems: IDEToolbarItem[],
241
+ view: IAppView,
242
+ subAppRefs: ISubAppRef[],
243
+ ): void {
244
+ if (dstToolBarItems && dstToolBarItems.length > 0) {
245
+ for (let i = 0; i < dstToolBarItems.length; i++) {
246
+ const dstToolBarItem = dstToolBarItems[i];
247
+ if (
248
+ dstToolBarItem &&
249
+ (dstToolBarItem as IDETBGroupItem).uiactionGroup
250
+ ) {
251
+ const dstUIActionGroup: IModel = (dstToolBarItem as IDETBGroupItem)
252
+ .uiactionGroup!;
253
+ if (dstUIActionGroup) {
254
+ for (let j = 0; j < subAppRefs.length; j++) {
255
+ if (subAppRefs[j].appId === view.appId) {
256
+ continue;
257
+ }
258
+ const srcAppDEUIActionGroup = ibiz.hub.getSubAppDEUIActionGroups(
259
+ dstUIActionGroup.uniqueTag,
260
+ subAppRefs[j].appId,
261
+ );
262
+ if (srcAppDEUIActionGroup) {
263
+ mergeAppDEUIActionGroup(
264
+ (dstToolBarItems[i] as IDETBGroupItem).uiactionGroup,
265
+ srcAppDEUIActionGroup as IUIActionGroup,
266
+ );
267
+ }
268
+ }
269
+ }
270
+ }
271
+ if ((dstToolBarItem as IDETBGroupItem).detoolbarItems) {
272
+ this.recursiveMergeSubAppToolbarItemActionGroup(
273
+ (dstToolBarItem as IDETBGroupItem)
274
+ .detoolbarItems as IDEToolbarItem[],
275
+ view,
276
+ subAppRefs,
277
+ );
278
+ }
279
+ }
280
+ }
281
+ }
282
+
283
+ /**
284
+ * 合并树上下文菜单
285
+ *
286
+ * @author tony001
287
+ * @date 2024-09-26 16:09:02
288
+ * @param {IAppView} view
289
+ * @param {(IControl[] | undefined)} controls
290
+ * @param {ISubAppRef[]} subAppRefs
291
+ */
292
+ mergeSubAppTreeContextMenuActionGroup(
293
+ view: IAppView,
294
+ controls: IControl[] | undefined,
295
+ subAppRefs: ISubAppRef[],
296
+ ): void {
297
+ if (!controls) return;
298
+ const dstTree: IDETree | undefined = controls.find(item => {
299
+ return item.controlType === 'TREEVIEW';
300
+ });
301
+ if (dstTree && dstTree.controls && dstTree.controls.length > 0) {
302
+ const dstContextMenus = dstTree.controls?.filter(item => {
303
+ return item.controlType === 'CONTEXTMENU';
304
+ });
305
+ if (dstContextMenus && dstContextMenus.length > 0) {
306
+ for (let k = 0; k < dstContextMenus.length; k++) {
307
+ const dstContextMenu = dstContextMenus[k];
308
+ if (dstContextMenu && (dstContextMenu as IDEToolbar).detoolbarItems) {
309
+ const dstContextMenuItems = (dstContextMenu as IDEToolbar)
310
+ .detoolbarItems;
311
+ if (dstContextMenuItems && dstContextMenuItems.length > 0) {
312
+ for (let i = 0; i < dstContextMenuItems.length; i++) {
313
+ const dstContextMenuItem = dstContextMenuItems[i];
314
+ if (
315
+ dstContextMenuItem &&
316
+ (dstContextMenuItem as IDETBGroupItem).uiactionGroup
317
+ ) {
318
+ const dstUIActionGroup: IModel = (
319
+ dstContextMenuItem as IDETBGroupItem
320
+ ).uiactionGroup!;
321
+ if (dstUIActionGroup) {
322
+ for (let j = 0; j < subAppRefs.length; j++) {
323
+ const srcAppDEUIActionGroup =
324
+ ibiz.hub.getSubAppDEUIActionGroups(
325
+ dstUIActionGroup.uniqueTag,
326
+ subAppRefs[j].appId,
327
+ );
328
+ if (srcAppDEUIActionGroup) {
329
+ mergeAppDEUIActionGroup(
330
+ (dstContextMenuItems[i] as IDETBGroupItem)
331
+ .uiactionGroup,
332
+ srcAppDEUIActionGroup as IUIActionGroup,
333
+ );
334
+ const targetDeTreeNodes = dstTree.detreeNodes?.filter(
335
+ treeNode => {
336
+ return (
337
+ treeNode.decontextMenu &&
338
+ treeNode.decontextMenu.modelId ===
339
+ dstContextMenu.modelId
340
+ );
341
+ },
342
+ );
343
+ if (targetDeTreeNodes && targetDeTreeNodes.length > 0) {
344
+ targetDeTreeNodes.forEach(targetDeTreeNode => {
345
+ targetDeTreeNode.decontextMenu = dstContextMenu;
346
+ });
347
+ }
348
+ }
349
+ }
350
+ }
351
+ }
352
+ }
353
+ }
354
+ }
355
+ }
356
+ }
357
+ }
358
+ controls.forEach(control => {
359
+ if (control && (control as IData).controls) {
360
+ this.mergeSubAppTreeContextMenuActionGroup(
361
+ view,
362
+ (control as IData).controls,
363
+ subAppRefs,
364
+ );
365
+ }
366
+ });
367
+ }
368
+
369
+ mergeSubAppTreeView(
370
+ view: IAppView,
371
+ controls: IControl[] | undefined,
372
+ subAppRefs: ISubAppRef[],
373
+ ): void {
374
+ if (!controls) return;
375
+ const dstTree: IDETree | undefined = controls.find(item => {
376
+ return item.controlType === 'TREEVIEW';
377
+ });
378
+ if (dstTree) {
379
+ const ids: string[] = dstTree.id!.split('.');
380
+ for (let i = 0; i < subAppRefs.length; i++) {
381
+ const srcTree = ibiz.hub.getSubAppControl(
382
+ ids[1] + ids[2],
383
+ subAppRefs[i].appId,
384
+ );
385
+ if (srcTree) {
386
+ mergeTreeView(dstTree, srcTree as IDETree);
387
+ }
388
+ }
389
+ }
390
+ controls.forEach(control => {
391
+ if (control && (control as IData).controls) {
392
+ this.mergeSubAppTreeView(view, (control as IData).controls, subAppRefs);
393
+ }
394
+ });
395
+ }
396
+
397
+ /**
398
+ * 合并表单行为组(按钮组)
399
+ *
400
+ * @author tony001
401
+ * @date 2025-02-10 21:02:47
402
+ * @param {IAppView} view
403
+ * @param {(IControl[] | undefined)} controls
404
+ * @param {ISubAppRef[]} subAppRefs
405
+ */
406
+ mergeSubAppFormActionGroup(
407
+ view: IAppView,
408
+ controls: IControl[] | undefined,
409
+ subAppRefs: ISubAppRef[],
410
+ ): void {
411
+ if (!controls) return;
412
+ const form = controls.find(item => {
413
+ return item.controlType === 'FORM';
414
+ });
415
+ if (form) {
416
+ recursiveIterate(
417
+ form,
418
+ (item: IDEFormDetail) => {
419
+ if (
420
+ item.detailType === 'BUTTONLIST' &&
421
+ (item as IDEFormButtonList).uiactionGroup
422
+ ) {
423
+ const dstUIActionGroup: IModel = (item as IDEFormButtonList)
424
+ .uiactionGroup!;
425
+ for (let j = 0; j < subAppRefs.length; j++) {
426
+ if (subAppRefs[j].appId === view.appId) {
427
+ continue;
428
+ }
429
+ const srcAppDEUIActionGroup = ibiz.hub.getSubAppDEUIActionGroups(
430
+ dstUIActionGroup.uniqueTag,
431
+ subAppRefs[j].appId,
432
+ );
433
+ if (srcAppDEUIActionGroup) {
434
+ mergeAppDEUIActionGroup(
435
+ (item as IDEFormButtonList).uiactionGroup,
436
+ srcAppDEUIActionGroup as IUIActionGroup,
437
+ );
438
+ }
439
+ }
440
+ }
441
+ },
442
+ {
443
+ childrenFields: ['deformPages', 'deformTabPages', 'deformDetails'],
444
+ },
445
+ );
446
+ }
447
+ }
448
+
449
+ /**
450
+ * 合并表格列行为组
451
+ *
452
+ * @author tony001
453
+ * @date 2025-02-11 18:02:21
454
+ * @param {IAppView} view
455
+ * @param {(IControl[] | undefined)} controls
456
+ * @param {ISubAppRef[]} subAppRefs
457
+ */
458
+ mergeSubAppGridCloumnActionGroup(
459
+ view: IAppView,
460
+ controls: IControl[] | undefined,
461
+ subAppRefs: ISubAppRef[],
462
+ ): void {
463
+ if (!controls) return;
464
+ const grids = controls.filter(item => {
465
+ return item.controlType === 'GRID';
466
+ });
467
+ if (grids && grids.length > 0) {
468
+ grids.forEach((grid: IDEGrid) => {
469
+ if (grid.degridColumns && grid.degridColumns.length > 0) {
470
+ for (let i = 0; i < grid.degridColumns.length; i++) {
471
+ if ((grid.degridColumns[i] as IDEGridFieldColumn).deuiactionGroup) {
472
+ const dstUIActionGroup: IModel = (
473
+ grid.degridColumns[i] as IDEGridFieldColumn
474
+ ).deuiactionGroup!;
475
+ for (let j = 0; j < subAppRefs.length; j++) {
476
+ if (subAppRefs[j].appId === view.appId) {
477
+ continue;
478
+ }
479
+ const srcAppDEUIActionGroup =
480
+ ibiz.hub.getSubAppDEUIActionGroups(
481
+ dstUIActionGroup.uniqueTag,
482
+ subAppRefs[j].appId,
483
+ );
484
+ if (srcAppDEUIActionGroup) {
485
+ mergeAppDEUIActionGroup(
486
+ (grid.degridColumns[i] as IDEGridFieldColumn)
487
+ .deuiactionGroup,
488
+ srcAppDEUIActionGroup as IUIActionGroup,
489
+ );
490
+ }
491
+ }
492
+ }
493
+ }
494
+ }
495
+ });
496
+ }
497
+ }
498
+
499
+ /**
500
+ * @description 合并子应用表单(实体代码标识和表单代码标识一致)
501
+ * @param {IAppView} view
502
+ * @param {(IControl[] | undefined)} controls
503
+ * @param {ISubAppRef[]} subAppRefs
504
+ * @memberof MergeSubModelHelper
505
+ */
506
+ mergeSubAppForm(
507
+ view: IAppView,
508
+ controls: IControl[] | undefined,
509
+ subAppRefs: ISubAppRef[],
510
+ ): void {
511
+ if (!controls) return;
512
+ const forms = controls.filter(item => {
513
+ return item.controlType === 'FORM';
514
+ });
515
+ if (forms.length === 0) return;
516
+ forms.forEach(dstForm => {
517
+ const appDataEntityId = (dstForm as IDEForm).appDataEntityId?.split(
518
+ '.',
519
+ )?.[1];
520
+ const { codeName } = dstForm as IDEForm;
521
+ // 查找源表单存在基于数据关系部件构建的分页部件的数据关系标识
522
+ const dataRelationTags = getFormdataRelationTags(dstForm);
523
+ for (let i = 0; i < subAppRefs.length; i++) {
524
+ const srcForm = ibiz.hub.getSubAppControl(
525
+ appDataEntityId + codeName!,
526
+ subAppRefs[i].appId,
527
+ );
528
+ // 常规表单合并
529
+ if (srcForm) {
530
+ mergeAppDEForm(dstForm, srcForm as IDEForm);
531
+ }
532
+ // 表单分页部件合并(数据关系部件)
533
+ if (dataRelationTags && dataRelationTags.length > 0) {
534
+ for (let j = 0; j < dataRelationTags.length; j++) {
535
+ const dataRelationTag = dataRelationTags[j];
536
+ const dataRelationForm = ibiz.hub.getSubAppControl(
537
+ appDataEntityId + dataRelationTag,
538
+ subAppRefs[i].appId,
539
+ );
540
+ if (dataRelationForm) {
541
+ mergeFormDRTabpanel(
542
+ dataRelationTag,
543
+ dstForm,
544
+ dataRelationForm as IDEForm,
545
+ );
546
+ }
547
+ }
548
+ }
549
+ }
550
+ });
551
+ }
552
+
553
+ /**
554
+ * @description 合并子应用代码表(子应用代码表标识和主应用代码表标识一致,包含模块、代码表代码名称2部分内容保持一致)
555
+ * @param codelist
556
+ * @param subAppRefs
557
+ */
558
+ mergeSubAppCodeList(codelist: IAppCodeList, subAppRefs: ISubAppRef[]): void {
559
+ if (!codelist || !subAppRefs || subAppRefs.length === 0) return;
560
+ for (let i = 0; i < subAppRefs.length; i++) {
561
+ const subCodeList = ibiz.hub.getSubAppCodeList(
562
+ codelist.codeListTag!,
563
+ subAppRefs[i].appId,
564
+ );
565
+ if (subCodeList) {
566
+ mergeAppCodeList(codelist, subCodeList);
567
+ }
568
+ }
569
+ }
570
+
571
+ /**
572
+ * @description 合并子应用AC自填模式界面行为组
573
+ * @param {(IAppDEACMode[] | undefined)} acModes
574
+ * @param {ISubAppRef[]} subAppRefs
575
+ * @returns {*} {void}
576
+ * @memberof MergeSubModelHelper
577
+ */
578
+ mergeSubAppDEACModesActionGroup(
579
+ acModes: IAppDEACMode[] | undefined,
580
+ subAppRefs: ISubAppRef[],
581
+ ): void {
582
+ if (!acModes || !acModes.length || !subAppRefs || !subAppRefs.length)
583
+ return;
584
+ for (let index = 0; index < acModes.length; index++) {
585
+ const { deuiactionGroup } = acModes[index];
586
+ if (deuiactionGroup) {
587
+ for (let j = 0; j < subAppRefs.length; j++) {
588
+ const srcAppDEUIActionGroup = ibiz.hub.getSubAppDEUIActionGroups(
589
+ (deuiactionGroup as IModel).uniqueTag,
590
+ subAppRefs[j].appId,
591
+ );
592
+ if (srcAppDEUIActionGroup) {
593
+ mergeAppDEUIActionGroup(
594
+ deuiactionGroup as IUIActionGroup,
595
+ srcAppDEUIActionGroup as IUIActionGroup,
596
+ );
597
+ }
598
+ }
599
+ }
600
+ }
601
+ }
602
+ }
@@ -0,0 +1,20 @@
1
+ import { mergeDeepLeft } from 'ramda';
2
+
3
+ /**
4
+ * 将预置的模型合并到当前模型中
5
+ *
6
+ * @author chitanda
7
+ * @date 2023-09-22 10:09:10
8
+ * @export
9
+ * @param {IModel[]} models
10
+ * @param {IModel} m
11
+ * @param {string} tag
12
+ */
13
+ export function mergeModel(models: IModel[], m: IModel, tag: string): void {
14
+ models.forEach(model => {
15
+ const item = m[model[tag]];
16
+ if (item) {
17
+ Object.assign(model, mergeDeepLeft(model, item));
18
+ }
19
+ });
20
+ }