@ibiz-template/model-helper 0.7.41-alpha.1 → 0.7.41-alpha.100
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 +1777 -3088
- 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 +49 -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-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 +60 -0
- package/out/utils/merge-model/merge-de-form.d.ts.map +1 -0
- package/out/utils/merge-model/merge-de-form.js +275 -0
- package/out/utils/merge-model/merge-model-helper.d.ts +31 -1
- package/out/utils/merge-model/merge-model-helper.d.ts.map +1 -1
- package/out/utils/merge-model/merge-model-helper.js +164 -30
- 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 +6 -6
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { mergeDeepRight } from 'ramda';
|
|
2
|
+
// 表单子属性集合(常量)
|
|
3
|
+
const CHILDRENFIELDS = [
|
|
4
|
+
'deformPages',
|
|
5
|
+
'deformTabPages',
|
|
6
|
+
'deformDetails',
|
|
7
|
+
];
|
|
8
|
+
/** 默认配置参数 */
|
|
9
|
+
const IterateOpts = {
|
|
10
|
+
/** 子集合属性数组 */
|
|
11
|
+
childrenFields: ['children'],
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* @description 获取表单成员匹配属性标识
|
|
15
|
+
* @param {IModel} model 指定模型数据
|
|
16
|
+
* @param {string[]} fields 属性集合
|
|
17
|
+
* @returns {*} {(string | undefined)}
|
|
18
|
+
*/
|
|
19
|
+
function getFormDetailMatchField(model, fields) {
|
|
20
|
+
var _a;
|
|
21
|
+
for (const field of fields) {
|
|
22
|
+
if ((_a = model[field]) === null || _a === void 0 ? void 0 : _a.length) {
|
|
23
|
+
return field;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* @description 获取子属性集合
|
|
29
|
+
* @param {IData} parent
|
|
30
|
+
* @param {string[]} fields 子集合可能的属性名称
|
|
31
|
+
* @returns {*} {(IData[] | undefined)}
|
|
32
|
+
*/
|
|
33
|
+
function getChildField(parent, fields) {
|
|
34
|
+
var _a;
|
|
35
|
+
for (const field of fields) {
|
|
36
|
+
if ((_a = parent[field]) === null || _a === void 0 ? void 0 : _a.length) {
|
|
37
|
+
return parent[field];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @description 递归遍历子元素,递归遍历子元素 用法:传入数组和回调函数 无返回值
|
|
43
|
+
* @example
|
|
44
|
+
* ```
|
|
45
|
+
* const parent = {
|
|
46
|
+
* name: 'parent',
|
|
47
|
+
* children: [
|
|
48
|
+
* {
|
|
49
|
+
* name: 'child1',
|
|
50
|
+
* children: [{ name: 'grandchild1' }, { name: 'grandchild2' }],
|
|
51
|
+
* },
|
|
52
|
+
* { name: 'child2', children: [{ name: 'grandchild3' }] },
|
|
53
|
+
* ],
|
|
54
|
+
* };
|
|
55
|
+
*
|
|
56
|
+
* const result: string[] = [];
|
|
57
|
+
*
|
|
58
|
+
* recursiveIterate(parent, item => {
|
|
59
|
+
* result.push(item.name);
|
|
60
|
+
* });
|
|
61
|
+
*
|
|
62
|
+
* result // => ['child1', 'grandchild1', 'grandchild2', 'child2', 'grandchild3']
|
|
63
|
+
* ```
|
|
64
|
+
* @export
|
|
65
|
+
* @param {IData} parent 父元素
|
|
66
|
+
* @param {(item: any) => boolean} callback 每一个子元素的回调
|
|
67
|
+
* @param {Partial<typeof IterateOpts>} [opts]
|
|
68
|
+
*/
|
|
69
|
+
export function recursiveIterate(parent, callback, opts) {
|
|
70
|
+
const { childrenFields } = mergeDeepRight(IterateOpts, opts || {});
|
|
71
|
+
const children = getChildField(parent, childrenFields);
|
|
72
|
+
if (children === null || children === void 0 ? void 0 : children.length) {
|
|
73
|
+
for (const child of children) {
|
|
74
|
+
// 递归自身的子成员
|
|
75
|
+
const isBreak = callback(child, parent);
|
|
76
|
+
// 如果回调返回true则不循环子数据
|
|
77
|
+
if (!isBreak) {
|
|
78
|
+
recursiveIterate(child, callback, opts);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* @description 计算子应用表单合并项(仅合并类型为用户标记为dynamic_overlay:before|after|inside|replace:formitemname)
|
|
85
|
+
* @param {IDEForm} src 子应用表单模型
|
|
86
|
+
* @returns {*} {Map<string, IData>} key值为关联主表单项标识;value为{position:before|after|inside|replace,model:IModel}对象
|
|
87
|
+
*/
|
|
88
|
+
function computeSubAppFormItems(src) {
|
|
89
|
+
const subAppMergeItemsMap = new Map();
|
|
90
|
+
recursiveIterate(src, (item, parent) => {
|
|
91
|
+
// 用户标记为dynamic_overlay:开始的才识别为需覆盖到主应用表单
|
|
92
|
+
if (item.userTag &&
|
|
93
|
+
item.userTag.startsWith('dynamic_overlay:') &&
|
|
94
|
+
item.userTag.split(':').length === 3) {
|
|
95
|
+
// before|after|inside|replace + ':formitemname' 定义附加位置
|
|
96
|
+
const tags = item.userTag.split(':');
|
|
97
|
+
if (tags[1] && tags[2]) {
|
|
98
|
+
if (!subAppMergeItemsMap.get(tags[2])) {
|
|
99
|
+
subAppMergeItemsMap.set(tags[2], []);
|
|
100
|
+
}
|
|
101
|
+
const tempItem = {
|
|
102
|
+
position: tags[1],
|
|
103
|
+
model: item,
|
|
104
|
+
// 定义当前项是否已经被合并
|
|
105
|
+
merge: false,
|
|
106
|
+
};
|
|
107
|
+
const targetMergeArray = subAppMergeItemsMap.get(tags[2]);
|
|
108
|
+
targetMergeArray.push(tempItem);
|
|
109
|
+
}
|
|
110
|
+
// 退出当前子的循环,父已经合并,无需管子的合并
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
}, {
|
|
114
|
+
childrenFields: CHILDRENFIELDS,
|
|
115
|
+
});
|
|
116
|
+
return subAppMergeItemsMap;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* @description 合并指定表单成员到主表表单指定位置
|
|
120
|
+
* @param {IModel} item 当前表单成员
|
|
121
|
+
* @param {IModel} parent 当前表单成员父成员
|
|
122
|
+
* @param {IData} mergeItem 子应用表单合并项
|
|
123
|
+
* @returns {*} {void}
|
|
124
|
+
*/
|
|
125
|
+
function mergeSubAppFormItemToDst(item, parent, mergeItem) {
|
|
126
|
+
const { position, model } = mergeItem;
|
|
127
|
+
const formMatchField = getFormDetailMatchField(parent, CHILDRENFIELDS);
|
|
128
|
+
if (!formMatchField)
|
|
129
|
+
return;
|
|
130
|
+
const curIndex = parent[formMatchField].findIndex((parentItem) => {
|
|
131
|
+
return parentItem.codeName === item.codeName;
|
|
132
|
+
});
|
|
133
|
+
switch (position) {
|
|
134
|
+
// 附加至目标之前(before)
|
|
135
|
+
case 'before':
|
|
136
|
+
if (curIndex !== -1) {
|
|
137
|
+
parent[formMatchField].splice(curIndex, 0, model);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
parent[formMatchField].push(model);
|
|
141
|
+
}
|
|
142
|
+
break;
|
|
143
|
+
// 附加至目标内部(inside)
|
|
144
|
+
case 'inside':
|
|
145
|
+
const itemMatchField = getFormDetailMatchField(item, CHILDRENFIELDS);
|
|
146
|
+
if (itemMatchField) {
|
|
147
|
+
item[itemMatchField].push(model);
|
|
148
|
+
}
|
|
149
|
+
break;
|
|
150
|
+
// 替换目标(replace)
|
|
151
|
+
case 'replace':
|
|
152
|
+
if (curIndex !== -1) {
|
|
153
|
+
parent[formMatchField].splice(curIndex, 1, model);
|
|
154
|
+
}
|
|
155
|
+
break;
|
|
156
|
+
// 附加至目标之后(after)
|
|
157
|
+
case 'after':
|
|
158
|
+
if (curIndex !== -1) {
|
|
159
|
+
parent[formMatchField].splice(curIndex + 1, 0, model);
|
|
160
|
+
}
|
|
161
|
+
break;
|
|
162
|
+
// 附加至目标之后(默认)
|
|
163
|
+
default:
|
|
164
|
+
if (curIndex !== -1) {
|
|
165
|
+
parent[formMatchField].splice(curIndex + 1, 0, model);
|
|
166
|
+
}
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
// 标记当前项已被合并
|
|
170
|
+
mergeItem.merge = true;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* @description 合并子应用表单表单项
|
|
174
|
+
* @param {IDEForm} dst 目标表单模型
|
|
175
|
+
* @param {Map<string, IData>} subAppMergeItems 子应用需合并项数据
|
|
176
|
+
* @returns {*} {void}
|
|
177
|
+
*/
|
|
178
|
+
function mergeSubAppFormItems(dst, subAppMergeItems) {
|
|
179
|
+
if (!dst || !subAppMergeItems)
|
|
180
|
+
return;
|
|
181
|
+
if (subAppMergeItems.size === 0)
|
|
182
|
+
return;
|
|
183
|
+
recursiveIterate(dst, (item, parent) => {
|
|
184
|
+
// 通过关联主表单项标识进行合并
|
|
185
|
+
const mergeItems = subAppMergeItems.get(item.codeName);
|
|
186
|
+
if (mergeItems && mergeItems.length > 0) {
|
|
187
|
+
mergeItems.forEach((mergeItem) => {
|
|
188
|
+
// 判断当前项是否已经被合并,若已经被合并则不再处理
|
|
189
|
+
if (!mergeItem.merge) {
|
|
190
|
+
mergeSubAppFormItemToDst(item, parent, mergeItem);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}, {
|
|
195
|
+
childrenFields: CHILDRENFIELDS,
|
|
196
|
+
});
|
|
197
|
+
// 矫正合并后主表单模型数据
|
|
198
|
+
if (dst.deformPages && dst.deformPages.length > 1) {
|
|
199
|
+
dst.noTabHeader = false;
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
dst.noTabHeader = true;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* @description 合并子应用表单
|
|
207
|
+
* @export
|
|
208
|
+
* @param {(IDEForm | undefined)} dst 主应用表单模型
|
|
209
|
+
* @param {(IDEForm | undefined)} src 子应用表单模型
|
|
210
|
+
* @returns {*} {void}
|
|
211
|
+
*/
|
|
212
|
+
export function mergeAppDEForm(dst, src) {
|
|
213
|
+
if (!dst || !src)
|
|
214
|
+
return;
|
|
215
|
+
const subAppMergeItems = computeSubAppFormItems(src);
|
|
216
|
+
if (subAppMergeItems.size === 0)
|
|
217
|
+
return;
|
|
218
|
+
mergeSubAppFormItems(dst, subAppMergeItems);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* 获取存在基于数据关系部件构建的分页部件的数据关系标识
|
|
222
|
+
* @param form 表单模型
|
|
223
|
+
* @returns 数据关系标识集合
|
|
224
|
+
*/
|
|
225
|
+
export function getFormdataRelationTags(form) {
|
|
226
|
+
const dataRelationTags = [];
|
|
227
|
+
if (!form)
|
|
228
|
+
return dataRelationTags;
|
|
229
|
+
recursiveIterate(form, (item) => {
|
|
230
|
+
if (item.detailType === 'TABPANEL' && item.dataRelationTag) {
|
|
231
|
+
dataRelationTags.push(item.dataRelationTag);
|
|
232
|
+
}
|
|
233
|
+
}, {
|
|
234
|
+
childrenFields: CHILDRENFIELDS,
|
|
235
|
+
});
|
|
236
|
+
return dataRelationTags;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* @description 合并存在数据关系标识的表单分页部件,子应用表单codename和主应用表单表单分页部件数据关系标识相同
|
|
240
|
+
* @export
|
|
241
|
+
* @param {string} dataRelationTag 数据关系标识
|
|
242
|
+
* @param {(IDEForm | undefined)} dst 主应用表单模型
|
|
243
|
+
* @param {(IDEForm | undefined)} src 子应用表单模型
|
|
244
|
+
* @returns {*} {void}
|
|
245
|
+
*/
|
|
246
|
+
export function mergeFormDRTabpanel(dataRelationTag, dst, src) {
|
|
247
|
+
if (!dataRelationTag || !dst || !src)
|
|
248
|
+
return;
|
|
249
|
+
// 基于数据标识获取子应用表单分页部件
|
|
250
|
+
let srcTabpanel;
|
|
251
|
+
recursiveIterate(src, (item) => {
|
|
252
|
+
if (item.detailType === 'TABPANEL' &&
|
|
253
|
+
item.dataRelationTag === dataRelationTag) {
|
|
254
|
+
srcTabpanel = item;
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
}, {
|
|
258
|
+
childrenFields: CHILDRENFIELDS,
|
|
259
|
+
});
|
|
260
|
+
// 将子应用表单分页部件合并到主应用表单分页部件中
|
|
261
|
+
if (srcTabpanel) {
|
|
262
|
+
recursiveIterate(dst, (item) => {
|
|
263
|
+
if (item.detailType === 'TABPANEL' &&
|
|
264
|
+
item.dataRelationTag === dataRelationTag) {
|
|
265
|
+
const detailName = getFormDetailMatchField(item, CHILDRENFIELDS);
|
|
266
|
+
if (detailName && item[detailName] && srcTabpanel[detailName]) {
|
|
267
|
+
item[detailName].push(...srcTabpanel[detailName]);
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}, {
|
|
272
|
+
childrenFields: CHILDRENFIELDS,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IAppView, IControl, ISubAppRef } from '@ibiz/model-core';
|
|
1
|
+
import { IAppCodeList, IAppDEACMode, IAppView, IControl, IDEToolbarItem, ISubAppRef } from '@ibiz/model-core';
|
|
2
2
|
import { DSLHelper } from '@ibiz/rt-model-api';
|
|
3
3
|
/**
|
|
4
4
|
* 子应用模型合并对象
|
|
@@ -56,6 +56,14 @@ export declare class MergeSubModelHelper {
|
|
|
56
56
|
* @param {ISubAppRef[]} subAppRefs
|
|
57
57
|
*/
|
|
58
58
|
mergeSubAppToolbarActionGroup(view: IAppView, controls: IControl[] | undefined, subAppRefs: ISubAppRef[]): void;
|
|
59
|
+
/**
|
|
60
|
+
* @description 递归合并工具项界面行为组
|
|
61
|
+
* @param {IDEToolbarItem[]} dstToolBarItems
|
|
62
|
+
* @param {IAppView} view
|
|
63
|
+
* @param {ISubAppRef[]} subAppRefs
|
|
64
|
+
* @memberof MergeSubModelHelper
|
|
65
|
+
*/
|
|
66
|
+
recursiveMergeSubAppToolbarItemActionGroup(dstToolBarItems: IDEToolbarItem[], view: IAppView, subAppRefs: ISubAppRef[]): void;
|
|
59
67
|
/**
|
|
60
68
|
* 合并树上下文菜单
|
|
61
69
|
*
|
|
@@ -87,5 +95,27 @@ export declare class MergeSubModelHelper {
|
|
|
87
95
|
* @param {ISubAppRef[]} subAppRefs
|
|
88
96
|
*/
|
|
89
97
|
mergeSubAppGridCloumnActionGroup(view: IAppView, controls: IControl[] | undefined, subAppRefs: ISubAppRef[]): void;
|
|
98
|
+
/**
|
|
99
|
+
* @description 合并子应用表单(实体代码标识和表单代码标识一致)
|
|
100
|
+
* @param {IAppView} view
|
|
101
|
+
* @param {(IControl[] | undefined)} controls
|
|
102
|
+
* @param {ISubAppRef[]} subAppRefs
|
|
103
|
+
* @memberof MergeSubModelHelper
|
|
104
|
+
*/
|
|
105
|
+
mergeSubAppForm(view: IAppView, controls: IControl[] | undefined, subAppRefs: ISubAppRef[]): void;
|
|
106
|
+
/**
|
|
107
|
+
* @description 合并子应用代码表(子应用代码表标识和主应用代码表标识一致,包含模块、代码表代码名称2部分内容保持一致)
|
|
108
|
+
* @param codelist
|
|
109
|
+
* @param subAppRefs
|
|
110
|
+
*/
|
|
111
|
+
mergeSubAppCodeList(codelist: IAppCodeList, subAppRefs: ISubAppRef[]): void;
|
|
112
|
+
/**
|
|
113
|
+
* @description 合并子应用AC自填模式界面行为组
|
|
114
|
+
* @param {(IAppDEACMode[] | undefined)} acModes
|
|
115
|
+
* @param {ISubAppRef[]} subAppRefs
|
|
116
|
+
* @returns {*} {void}
|
|
117
|
+
* @memberof MergeSubModelHelper
|
|
118
|
+
*/
|
|
119
|
+
mergeSubAppDEACModesActionGroup(acModes: IAppDEACMode[] | undefined, subAppRefs: ISubAppRef[]): void;
|
|
90
120
|
}
|
|
91
121
|
//# sourceMappingURL=merge-model-helper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-model-helper.d.ts","sourceRoot":"","sources":["../../../src/utils/merge-model/merge-model-helper.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"merge-model-helper.d.ts","sourceRoot":"","sources":["../../../src/utils/merge-model/merge-model-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,YAAY,EAEZ,QAAQ,EACR,QAAQ,EASR,cAAc,EAEd,UAAU,EAGX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAa/C;;;;;;;GAOG;AACH,qBAAa,mBAAmB;IAC9B;;;;;;OAMG;IACH,SAAS,CAAC,GAAG,YAAmB;IAEhC;;;;;;;OAOG;IACH,gBAAgB,CACd,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI;IAuCP;;;;;;;;OAQG;IACH,uBAAuB,CACrB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI;IA8BP;;;;;;;;OAQG;IACH,iBAAiB,CACf,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI;IAoCP;;;;;;;;OAQG;IACH,6BAA6B,CAC3B,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI;IAwBP;;;;;;OAMG;IACH,0CAA0C,CACxC,eAAe,EAAE,cAAc,EAAE,EACjC,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI;IAwCP;;;;;;;;OAQG;IACH,qCAAqC,CACnC,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI;IAyEP,mBAAmB,CACjB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI;IAwBP;;;;;;;;OAQG;IACH,0BAA0B,CACxB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI;IAuCP;;;;;;;;OAQG;IACH,gCAAgC,CAC9B,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI;IAqCP;;;;;;OAMG;IACH,eAAe,CACb,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI;IA2CP;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI;IAa3E;;;;;;OAMG;IACH,+BAA+B,CAC7B,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,EACnC,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI;CAqBR"}
|
|
@@ -2,9 +2,11 @@ import { DSLHelper } from '@ibiz/rt-model-api';
|
|
|
2
2
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
3
3
|
import { recursiveIterate } from '@ibiz-template/core';
|
|
4
4
|
import { mergeAppMenu } from './merge-app-menu';
|
|
5
|
-
import { mergeDEDrControl } from './merge-de-drcontrol';
|
|
5
|
+
import { mergeDEDrControl, mergeDETabExpPanel } from './merge-de-drcontrol';
|
|
6
6
|
import { mergeAppDEUIActionGroup } from './merge-app-uiaction-group';
|
|
7
7
|
import { mergeTreeView } from './merge-treeview';
|
|
8
|
+
import { getFormdataRelationTags, mergeAppDEForm, mergeFormDRTabpanel, } from './merge-de-form';
|
|
9
|
+
import { mergeAppCodeList } from './merge-app-codelist';
|
|
8
10
|
/**
|
|
9
11
|
* 子应用模型合并对象
|
|
10
12
|
*
|
|
@@ -33,6 +35,11 @@ export class MergeSubModelHelper {
|
|
|
33
35
|
* @param {ISubAppRef[]} subAppRefs
|
|
34
36
|
*/
|
|
35
37
|
mergeAppMainMenu(view, controls, subAppRefs) {
|
|
38
|
+
// config.common.mergeAppMenu参数值为disable,不处理该应用的菜单合并
|
|
39
|
+
if (ibiz.config.common.mergeAppMenu &&
|
|
40
|
+
ibiz.config.common.mergeAppMenu === 'disable') {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
36
43
|
const dstAppMenu = controls === null || controls === void 0 ? void 0 : controls.find(item => {
|
|
37
44
|
return item.controlType === 'APPMENU' && item.name === 'appmenu';
|
|
38
45
|
});
|
|
@@ -40,6 +47,23 @@ export class MergeSubModelHelper {
|
|
|
40
47
|
for (let i = 0; i < subAppRefs.length; i++) {
|
|
41
48
|
const srcAppMenu = subAppRefs[i].appMenuModel;
|
|
42
49
|
if (srcAppMenu) {
|
|
50
|
+
const { userTag } = srcAppMenu;
|
|
51
|
+
if (userTag) {
|
|
52
|
+
const [userKey, userValue] = userTag.split(':');
|
|
53
|
+
// mergemenutag: 目标菜单代码名称,目标菜单代码名称建议识别正则缺省配置以匹配更多目标
|
|
54
|
+
if (userKey === 'mergemenutag') {
|
|
55
|
+
try {
|
|
56
|
+
const userValueReg = new RegExp(userValue);
|
|
57
|
+
if (!userValueReg.test(dstAppMenu.codeName)) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
ibiz.log.warn(`[菜单合并]:无效的正则表达式${userValue},忽略处理`);
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
43
67
|
mergeAppMenu(dstAppMenu, srcAppMenu);
|
|
44
68
|
}
|
|
45
69
|
}
|
|
@@ -55,6 +79,11 @@ export class MergeSubModelHelper {
|
|
|
55
79
|
* @return {*} {void}
|
|
56
80
|
*/
|
|
57
81
|
mergeSubAppExtendedMenu(view, controls, subAppRefs) {
|
|
82
|
+
// config.common.mergeAppMenu参数值为disable,不处理该应用的菜单合并
|
|
83
|
+
if (ibiz.config.common.mergeAppMenu &&
|
|
84
|
+
ibiz.config.common.mergeAppMenu === 'disable') {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
58
87
|
if (view.viewType !== 'APPINDEXVIEW' || !controls)
|
|
59
88
|
return;
|
|
60
89
|
const dstAppMenus = controls.filter(item => {
|
|
@@ -85,13 +114,25 @@ export class MergeSubModelHelper {
|
|
|
85
114
|
*/
|
|
86
115
|
mergeSubAppDRCtrl(view, controls, subAppRefs) {
|
|
87
116
|
const dstDRCtrl = controls === null || controls === void 0 ? void 0 : controls.find(item => {
|
|
88
|
-
return item.controlType === 'DRBAR' ||
|
|
117
|
+
return (item.controlType === 'DRBAR' ||
|
|
118
|
+
item.controlType === 'DRTAB' ||
|
|
119
|
+
item.controlType === 'TABEXPPANEL');
|
|
89
120
|
});
|
|
90
121
|
if (dstDRCtrl) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
122
|
+
if (dstDRCtrl.controlType === 'TABEXPPANEL') {
|
|
123
|
+
for (let i = 0; i < subAppRefs.length; i++) {
|
|
124
|
+
const srcDRCtrl = ibiz.hub.getSubAppTabExpPanel(dstDRCtrl.uniqueTag, subAppRefs[i].appId);
|
|
125
|
+
if (srcDRCtrl) {
|
|
126
|
+
mergeDETabExpPanel(dstDRCtrl, srcDRCtrl);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
for (let i = 0; i < subAppRefs.length; i++) {
|
|
132
|
+
const srcDRCtrl = ibiz.hub.getSubAppDrControl(`${dstDRCtrl.appDataEntityId.split('.')[1]}_${dstDRCtrl.modelType}_${dstDRCtrl.dataRelationTag}`.toLowerCase(), subAppRefs[i].appId);
|
|
133
|
+
if (srcDRCtrl) {
|
|
134
|
+
mergeDEDrControl(dstDRCtrl, srcDRCtrl);
|
|
135
|
+
}
|
|
95
136
|
}
|
|
96
137
|
}
|
|
97
138
|
}
|
|
@@ -113,27 +154,7 @@ export class MergeSubModelHelper {
|
|
|
113
154
|
});
|
|
114
155
|
if (dstToolBar && dstToolBar.detoolbarItems) {
|
|
115
156
|
const dstToolBarItems = dstToolBar.detoolbarItems;
|
|
116
|
-
|
|
117
|
-
for (let i = 0; i < dstToolBarItems.length; i++) {
|
|
118
|
-
const dstToolBarItem = dstToolBarItems[i];
|
|
119
|
-
if (dstToolBarItem &&
|
|
120
|
-
dstToolBarItem.uiactionGroup) {
|
|
121
|
-
const dstUIActionGroup = dstToolBarItem
|
|
122
|
-
.uiactionGroup;
|
|
123
|
-
if (dstUIActionGroup) {
|
|
124
|
-
for (let j = 0; j < subAppRefs.length; j++) {
|
|
125
|
-
if (subAppRefs[j].appId === view.appId) {
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
const srcAppDEUIActionGroup = ibiz.hub.getSubAppDEUIActionGroups(dstUIActionGroup.uniqueTag, subAppRefs[j].appId);
|
|
129
|
-
if (srcAppDEUIActionGroup) {
|
|
130
|
-
mergeAppDEUIActionGroup(dstToolBarItems[i].uiactionGroup, srcAppDEUIActionGroup);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
157
|
+
this.recursiveMergeSubAppToolbarItemActionGroup(dstToolBarItems, view, subAppRefs);
|
|
137
158
|
}
|
|
138
159
|
controls.forEach(control => {
|
|
139
160
|
if (control && control.controls) {
|
|
@@ -141,6 +162,40 @@ export class MergeSubModelHelper {
|
|
|
141
162
|
}
|
|
142
163
|
});
|
|
143
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* @description 递归合并工具项界面行为组
|
|
167
|
+
* @param {IDEToolbarItem[]} dstToolBarItems
|
|
168
|
+
* @param {IAppView} view
|
|
169
|
+
* @param {ISubAppRef[]} subAppRefs
|
|
170
|
+
* @memberof MergeSubModelHelper
|
|
171
|
+
*/
|
|
172
|
+
recursiveMergeSubAppToolbarItemActionGroup(dstToolBarItems, view, subAppRefs) {
|
|
173
|
+
if (dstToolBarItems && dstToolBarItems.length > 0) {
|
|
174
|
+
for (let i = 0; i < dstToolBarItems.length; i++) {
|
|
175
|
+
const dstToolBarItem = dstToolBarItems[i];
|
|
176
|
+
if (dstToolBarItem &&
|
|
177
|
+
dstToolBarItem.uiactionGroup) {
|
|
178
|
+
const dstUIActionGroup = dstToolBarItem
|
|
179
|
+
.uiactionGroup;
|
|
180
|
+
if (dstUIActionGroup) {
|
|
181
|
+
for (let j = 0; j < subAppRefs.length; j++) {
|
|
182
|
+
if (subAppRefs[j].appId === view.appId) {
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
const srcAppDEUIActionGroup = ibiz.hub.getSubAppDEUIActionGroups(dstUIActionGroup.uniqueTag, subAppRefs[j].appId);
|
|
186
|
+
if (srcAppDEUIActionGroup) {
|
|
187
|
+
mergeAppDEUIActionGroup(dstToolBarItems[i].uiactionGroup, srcAppDEUIActionGroup);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (dstToolBarItem.detoolbarItems) {
|
|
193
|
+
this.recursiveMergeSubAppToolbarItemActionGroup(dstToolBarItem
|
|
194
|
+
.detoolbarItems, view, subAppRefs);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
144
199
|
/**
|
|
145
200
|
* 合并树上下文菜单
|
|
146
201
|
*
|
|
@@ -179,13 +234,15 @@ export class MergeSubModelHelper {
|
|
|
179
234
|
if (srcAppDEUIActionGroup) {
|
|
180
235
|
mergeAppDEUIActionGroup(dstContextMenuItems[i]
|
|
181
236
|
.uiactionGroup, srcAppDEUIActionGroup);
|
|
182
|
-
const
|
|
237
|
+
const targetDeTreeNodes = (_b = dstTree.detreeNodes) === null || _b === void 0 ? void 0 : _b.filter(treeNode => {
|
|
183
238
|
return (treeNode.decontextMenu &&
|
|
184
239
|
treeNode.decontextMenu.modelId ===
|
|
185
240
|
dstContextMenu.modelId);
|
|
186
241
|
});
|
|
187
|
-
if (
|
|
188
|
-
targetDeTreeNode
|
|
242
|
+
if (targetDeTreeNodes && targetDeTreeNodes.length > 0) {
|
|
243
|
+
targetDeTreeNodes.forEach(targetDeTreeNode => {
|
|
244
|
+
targetDeTreeNode.decontextMenu = dstContextMenu;
|
|
245
|
+
});
|
|
189
246
|
}
|
|
190
247
|
}
|
|
191
248
|
}
|
|
@@ -297,4 +354,81 @@ export class MergeSubModelHelper {
|
|
|
297
354
|
});
|
|
298
355
|
}
|
|
299
356
|
}
|
|
357
|
+
/**
|
|
358
|
+
* @description 合并子应用表单(实体代码标识和表单代码标识一致)
|
|
359
|
+
* @param {IAppView} view
|
|
360
|
+
* @param {(IControl[] | undefined)} controls
|
|
361
|
+
* @param {ISubAppRef[]} subAppRefs
|
|
362
|
+
* @memberof MergeSubModelHelper
|
|
363
|
+
*/
|
|
364
|
+
mergeSubAppForm(view, controls, subAppRefs) {
|
|
365
|
+
if (!controls)
|
|
366
|
+
return;
|
|
367
|
+
const forms = controls.filter(item => {
|
|
368
|
+
return item.controlType === 'FORM';
|
|
369
|
+
});
|
|
370
|
+
if (forms.length === 0)
|
|
371
|
+
return;
|
|
372
|
+
forms.forEach(dstForm => {
|
|
373
|
+
var _a, _b;
|
|
374
|
+
const appDataEntityId = (_b = (_a = dstForm.appDataEntityId) === null || _a === void 0 ? void 0 : _a.split('.')) === null || _b === void 0 ? void 0 : _b[1];
|
|
375
|
+
const { codeName } = dstForm;
|
|
376
|
+
// 查找源表单存在基于数据关系部件构建的分页部件的数据关系标识
|
|
377
|
+
const dataRelationTags = getFormdataRelationTags(dstForm);
|
|
378
|
+
for (let i = 0; i < subAppRefs.length; i++) {
|
|
379
|
+
const srcForm = ibiz.hub.getSubAppControl(appDataEntityId + codeName, subAppRefs[i].appId);
|
|
380
|
+
// 常规表单合并
|
|
381
|
+
if (srcForm) {
|
|
382
|
+
mergeAppDEForm(dstForm, srcForm);
|
|
383
|
+
}
|
|
384
|
+
// 表单分页部件合并(数据关系部件)
|
|
385
|
+
if (dataRelationTags && dataRelationTags.length > 0) {
|
|
386
|
+
for (let j = 0; j < dataRelationTags.length; j++) {
|
|
387
|
+
const dataRelationTag = dataRelationTags[j];
|
|
388
|
+
const dataRelationForm = ibiz.hub.getSubAppControl(appDataEntityId + dataRelationTag, subAppRefs[i].appId);
|
|
389
|
+
if (dataRelationForm) {
|
|
390
|
+
mergeFormDRTabpanel(dataRelationTag, dstForm, dataRelationForm);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* @description 合并子应用代码表(子应用代码表标识和主应用代码表标识一致,包含模块、代码表代码名称2部分内容保持一致)
|
|
399
|
+
* @param codelist
|
|
400
|
+
* @param subAppRefs
|
|
401
|
+
*/
|
|
402
|
+
mergeSubAppCodeList(codelist, subAppRefs) {
|
|
403
|
+
if (!codelist || !subAppRefs || subAppRefs.length === 0)
|
|
404
|
+
return;
|
|
405
|
+
for (let i = 0; i < subAppRefs.length; i++) {
|
|
406
|
+
const subCodeList = ibiz.hub.getSubAppCodeList(codelist.codeListTag, subAppRefs[i].appId);
|
|
407
|
+
if (subCodeList) {
|
|
408
|
+
mergeAppCodeList(codelist, subCodeList);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* @description 合并子应用AC自填模式界面行为组
|
|
414
|
+
* @param {(IAppDEACMode[] | undefined)} acModes
|
|
415
|
+
* @param {ISubAppRef[]} subAppRefs
|
|
416
|
+
* @returns {*} {void}
|
|
417
|
+
* @memberof MergeSubModelHelper
|
|
418
|
+
*/
|
|
419
|
+
mergeSubAppDEACModesActionGroup(acModes, subAppRefs) {
|
|
420
|
+
if (!acModes || !acModes.length || !subAppRefs || !subAppRefs.length)
|
|
421
|
+
return;
|
|
422
|
+
for (let index = 0; index < acModes.length; index++) {
|
|
423
|
+
const { deuiactionGroup } = acModes[index];
|
|
424
|
+
if (deuiactionGroup) {
|
|
425
|
+
for (let j = 0; j < subAppRefs.length; j++) {
|
|
426
|
+
const srcAppDEUIActionGroup = ibiz.hub.getSubAppDEUIActionGroups(deuiactionGroup.uniqueTag, subAppRefs[j].appId);
|
|
427
|
+
if (srcAppDEUIActionGroup) {
|
|
428
|
+
mergeAppDEUIActionGroup(deuiactionGroup, srcAppDEUIActionGroup);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
300
434
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-treeview.d.ts","sourceRoot":"","sources":["../../../src/utils/merge-model/merge-treeview.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merge-treeview.d.ts","sourceRoot":"","sources":["../../../src/utils/merge-model/merge-treeview.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAiB,MAAM,kBAAkB,CAAC;AAE1D;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAyDjE"}
|