@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.
- package/dist/index.esm.js +1492 -3001
- package/dist/index.system.min.js +1 -1
- package/out/model-helper.d.ts +13 -1
- package/out/model-helper.d.ts.map +1 -1
- package/out/model-helper.js +47 -4
- package/out/model-loader.d.ts +3 -1
- package/out/model-loader.d.ts.map +1 -1
- package/out/model-loader.js +6 -0
- package/out/model-util.d.ts.map +1 -1
- package/out/model-util.js +8 -8
- package/out/utils/merge-model/merge-app-codelist.d.ts +8 -0
- package/out/utils/merge-model/merge-app-codelist.d.ts.map +1 -0
- package/out/utils/merge-model/merge-app-codelist.js +35 -0
- package/out/utils/merge-model/merge-app-menu.d.ts.map +1 -1
- package/out/utils/merge-model/merge-app-menu.js +8 -3
- package/out/utils/merge-model/merge-app-uiaction-group.d.ts +7 -0
- package/out/utils/merge-model/merge-app-uiaction-group.d.ts.map +1 -1
- package/out/utils/merge-model/merge-app-uiaction-group.js +54 -2
- package/out/utils/merge-model/merge-de-drcontrol.d.ts +8 -0
- package/out/utils/merge-model/merge-de-drcontrol.d.ts.map +1 -1
- package/out/utils/merge-model/merge-de-drcontrol.js +87 -4
- package/out/utils/merge-model/merge-de-form.d.ts +15 -0
- package/out/utils/merge-model/merge-de-form.d.ts.map +1 -1
- package/out/utils/merge-model/merge-de-form.js +56 -0
- package/out/utils/merge-model/merge-model-helper.d.ts +15 -1
- package/out/utils/merge-model/merge-model-helper.d.ts.map +1 -1
- package/out/utils/merge-model/merge-model-helper.js +101 -9
- package/out/utils/merge-model/merge-treeview.d.ts.map +1 -1
- package/out/utils/merge-model/merge-treeview.js +142 -6
- package/package.json +7 -6
- package/src/index.ts +7 -0
- package/src/locale/en/index.ts +16 -0
- package/src/locale/index.ts +2 -0
- package/src/locale/zh-CN/index.ts +14 -0
- package/src/model/PSSYSAPP.ts +12 -0
- package/src/model-helper.ts +804 -0
- package/src/model-loader.ts +95 -0
- package/src/model-util.ts +467 -0
- package/src/utils/format-path/format-path.ts +9 -0
- package/src/utils/index.ts +9 -0
- package/src/utils/merge-model/merge-app-codelist.ts +42 -0
- package/src/utils/merge-model/merge-app-menu.ts +136 -0
- package/src/utils/merge-model/merge-app-uiaction-group.ts +85 -0
- package/src/utils/merge-model/merge-de-drcontrol.ts +175 -0
- package/src/utils/merge-model/merge-de-form.ts +326 -0
- package/src/utils/merge-model/merge-model-helper.ts +602 -0
- package/src/utils/merge-model/merge-model.ts +20 -0
- package/src/utils/merge-model/merge-treeview.ts +197 -0
- package/src/utils/plural/plural.ts +30 -0
- 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
|
+
}
|