@ibiz-template/model-helper 0.7.41-alpha.13 → 0.7.41-alpha.131
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 +9770 -3196
- package/dist/index.system.min.js +1 -1
- package/out/index.d.ts +2 -1
- package/out/index.d.ts.map +1 -1
- package/out/index.js +1 -1
- package/out/interface/i-model-handler.d.ts +20 -0
- package/out/interface/i-model-handler.d.ts.map +1 -0
- package/out/interface/i-model-handler.js +1 -0
- package/out/interface/index.d.ts +2 -0
- package/out/interface/index.d.ts.map +1 -0
- package/out/interface/index.js +1 -0
- package/out/locale/en/index.d.ts +4 -0
- package/out/locale/en/index.d.ts.map +1 -1
- package/out/locale/en/index.js +4 -0
- package/out/locale/zh-CN/index.d.ts +4 -0
- package/out/locale/zh-CN/index.d.ts.map +1 -1
- package/out/locale/zh-CN/index.js +4 -0
- 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 +3 -2
- package/out/model-util.d.ts.map +1 -1
- package/out/model-util.js +28 -20
- package/out/utils/index.d.ts +3 -0
- package/out/utils/index.d.ts.map +1 -1
- package/out/utils/index.js +3 -0
- 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/out/utils/model-transformer/model-handler.d.ts +32 -0
- package/out/utils/model-transformer/model-handler.d.ts.map +1 -0
- package/out/utils/model-transformer/model-handler.js +24 -0
- package/out/utils/model-transformer/model-register.d.ts +9 -0
- package/out/utils/model-transformer/model-register.d.ts.map +1 -0
- package/out/utils/model-transformer/model-register.js +10 -0
- package/out/utils/model-transformer/model-transformer.d.ts +63 -0
- package/out/utils/model-transformer/model-transformer.d.ts.map +1 -0
- package/out/utils/model-transformer/model-transformer.js +125 -0
- package/package.json +8 -6
- package/src/index.ts +12 -0
- package/src/interface/i-model-handler.ts +19 -0
- package/src/interface/index.ts +1 -0
- package/src/locale/en/index.ts +24 -0
- package/src/locale/index.ts +2 -0
- package/src/locale/zh-CN/index.ts +20 -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 +483 -0
- package/src/utils/format-path/format-path.ts +9 -0
- package/src/utils/index.ts +12 -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/model-transformer/model-handler.ts +36 -0
- package/src/utils/model-transformer/model-register.ts +15 -0
- package/src/utils/model-transformer/model-transformer.ts +147 -0
- package/src/utils/plural/plural.ts +30 -0
- package/src/utils/service-path-util/service-path-util.ts +361 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ITabExpPanel } from '@ibiz/model-core';
|
|
1
2
|
/**
|
|
2
3
|
* 合并DrCtrl控件
|
|
3
4
|
*
|
|
@@ -9,4 +10,11 @@
|
|
|
9
10
|
* @return {*} {void}
|
|
10
11
|
*/
|
|
11
12
|
export declare function mergeDEDrControl(dstDRCtrl: IModel, srcDRCtrl: IModel): void;
|
|
13
|
+
/**
|
|
14
|
+
* 合并分页导航面板
|
|
15
|
+
* @param dstTabExpPanel
|
|
16
|
+
* @param srcTabExpPanel
|
|
17
|
+
* @returns
|
|
18
|
+
*/
|
|
19
|
+
export declare function mergeDETabExpPanel(dstTabExpPanel: ITabExpPanel, srcTabExpPanel: ITabExpPanel): void;
|
|
12
20
|
//# sourceMappingURL=merge-de-drcontrol.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-de-drcontrol.d.ts","sourceRoot":"","sources":["../../../src/utils/merge-model/merge-de-drcontrol.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merge-de-drcontrol.d.ts","sourceRoot":"","sources":["../../../src/utils/merge-model/merge-de-drcontrol.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEvE;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAsH3E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,YAAY,EAC5B,cAAc,EAAE,YAAY,GAC3B,IAAI,CA8BN"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/* eslint-disable prefer-destructuring */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
1
3
|
/**
|
|
2
4
|
* 合并DrCtrl控件
|
|
3
5
|
*
|
|
@@ -12,7 +14,7 @@ export function mergeDEDrControl(dstDRCtrl, srcDRCtrl) {
|
|
|
12
14
|
if (!srcDRCtrl) {
|
|
13
15
|
return;
|
|
14
16
|
}
|
|
15
|
-
// 合并分组(相同
|
|
17
|
+
// 合并分组(相同id替换,如果分组项定义用户标记(格式如:dynamic_overlay:BEFORE/AFTER:目标分组id),则需要找到目标分组,则根据位置在目标项前后附加,没有则附加)
|
|
16
18
|
if (srcDRCtrl.dedrbarGroups) {
|
|
17
19
|
srcDRCtrl.dedrbarGroups.forEach((item1) => {
|
|
18
20
|
var _a;
|
|
@@ -24,12 +26,30 @@ export function mergeDEDrControl(dstDRCtrl, srcDRCtrl) {
|
|
|
24
26
|
if (result) {
|
|
25
27
|
dstDRCtrl.dedrbarGroups[index] = item1;
|
|
26
28
|
}
|
|
29
|
+
else if (item1.userTag && item1.userTag.startsWith('dynamic_overlay')) {
|
|
30
|
+
const [dynaTag, targetPosition, targetTag] = item1.userTag.split(':');
|
|
31
|
+
const targetIndex = dstDRCtrl.dedrbarGroups.findIndex((item3) => item3.id === targetTag);
|
|
32
|
+
if (targetIndex !== -1) {
|
|
33
|
+
if (targetPosition === 'BEFORE') {
|
|
34
|
+
dstDRCtrl.dedrbarGroups.splice(targetIndex, 0, item1);
|
|
35
|
+
}
|
|
36
|
+
else if (targetPosition === 'AFTER') {
|
|
37
|
+
dstDRCtrl.dedrbarGroups.splice(targetIndex + 1, 0, item1);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
dstDRCtrl.dedrbarGroups.push(item1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
dstDRCtrl.dedrbarGroups.push(item1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
27
47
|
else {
|
|
28
48
|
dstDRCtrl.dedrbarGroups.push(item1);
|
|
29
49
|
}
|
|
30
50
|
});
|
|
31
51
|
}
|
|
32
|
-
// 合并分组项(相同id
|
|
52
|
+
// 合并分组项(相同id替换,如果项成员项定义成员标记(格式如:dynamic_overlay:BEFORE/AFTER:目标项id),则需要找到目标项,则根据位置在目标项前后附加,没有则附加)
|
|
33
53
|
if (srcDRCtrl.dedrctrlItems) {
|
|
34
54
|
srcDRCtrl.dedrctrlItems.forEach((item1) => {
|
|
35
55
|
let index = 0;
|
|
@@ -40,12 +60,30 @@ export function mergeDEDrControl(dstDRCtrl, srcDRCtrl) {
|
|
|
40
60
|
if (result) {
|
|
41
61
|
dstDRCtrl.dedrctrlItems[index] = item1;
|
|
42
62
|
}
|
|
63
|
+
else if (item1.itemTag && item1.itemTag.startsWith('dynamic_overlay')) {
|
|
64
|
+
const [dynaTag, targetPosition, targetTag] = item1.itemTag.split(':');
|
|
65
|
+
const targetIndex = dstDRCtrl.dedrctrlItems.findIndex((item3) => item3.id === targetTag);
|
|
66
|
+
if (targetIndex !== -1) {
|
|
67
|
+
if (targetPosition === 'BEFORE') {
|
|
68
|
+
dstDRCtrl.dedrctrlItems.splice(targetIndex, 0, item1);
|
|
69
|
+
}
|
|
70
|
+
else if (targetPosition === 'AFTER') {
|
|
71
|
+
dstDRCtrl.dedrctrlItems.splice(targetIndex + 1, 0, item1);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
dstDRCtrl.dedrctrlItems.push(item1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
dstDRCtrl.dedrctrlItems.push(item1);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
43
81
|
else {
|
|
44
82
|
dstDRCtrl.dedrctrlItems.push(item1);
|
|
45
83
|
}
|
|
46
84
|
});
|
|
47
85
|
}
|
|
48
|
-
// 合并分组项(相同id替换,如果tab成员项定义成员标记(格式如:BEFORE/AFTER:目标项id),则需要找到目标项,则根据位置在目标项前后附加),没有则附加到尾部
|
|
86
|
+
// 合并分组项(相同id替换,如果tab成员项定义成员标记(格式如:BEFORE/AFTER:目标项id或者dynamic_overlay:BEFORE/AFTER:目标项id),则需要找到目标项,则根据位置在目标项前后附加),没有则附加到尾部
|
|
49
87
|
if (srcDRCtrl.dedrtabPages) {
|
|
50
88
|
srcDRCtrl.dedrtabPages.forEach((item1) => {
|
|
51
89
|
let index = 0;
|
|
@@ -57,7 +95,15 @@ export function mergeDEDrControl(dstDRCtrl, srcDRCtrl) {
|
|
|
57
95
|
dstDRCtrl.dedrtabPages[index] = item1;
|
|
58
96
|
}
|
|
59
97
|
else if (item1.itemTag) {
|
|
60
|
-
|
|
98
|
+
// 兼容BEFORE/AFTER:目标项id或者dynamic_overlay:BEFORE/AFTER:目标项id2种格式
|
|
99
|
+
const splitTags = item1.itemTag.split(':');
|
|
100
|
+
let targetPosition = '';
|
|
101
|
+
let targetTag = '';
|
|
102
|
+
// 只处理符合预期格式的情况
|
|
103
|
+
if (splitTags.length === 2 || splitTags.length === 3) {
|
|
104
|
+
targetPosition = splitTags[splitTags.length === 2 ? 0 : 1];
|
|
105
|
+
targetTag = splitTags[splitTags.length === 2 ? 1 : 2];
|
|
106
|
+
}
|
|
61
107
|
if (!targetTag || !targetPosition) {
|
|
62
108
|
dstDRCtrl.dedrtabPages.push(item1);
|
|
63
109
|
}
|
|
@@ -85,3 +131,40 @@ export function mergeDEDrControl(dstDRCtrl, srcDRCtrl) {
|
|
|
85
131
|
});
|
|
86
132
|
}
|
|
87
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* 合并分页导航面板
|
|
136
|
+
* @param dstTabExpPanel
|
|
137
|
+
* @param srcTabExpPanel
|
|
138
|
+
* @returns
|
|
139
|
+
*/
|
|
140
|
+
export function mergeDETabExpPanel(dstTabExpPanel, srcTabExpPanel) {
|
|
141
|
+
if (!srcTabExpPanel || !dstTabExpPanel) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// 无数据时初始化
|
|
145
|
+
if (!dstTabExpPanel.tabExpPageIds) {
|
|
146
|
+
dstTabExpPanel.tabExpPageIds = [];
|
|
147
|
+
}
|
|
148
|
+
if (!dstTabExpPanel.appViewRefs) {
|
|
149
|
+
dstTabExpPanel.appViewRefs = [];
|
|
150
|
+
}
|
|
151
|
+
if (!dstTabExpPanel.controls) {
|
|
152
|
+
dstTabExpPanel.controls = [];
|
|
153
|
+
}
|
|
154
|
+
// 合并子应用分页导航面板
|
|
155
|
+
if (srcTabExpPanel.tabExpPageIds) {
|
|
156
|
+
srcTabExpPanel.tabExpPageIds.forEach((id1) => {
|
|
157
|
+
dstTabExpPanel.tabExpPageIds.push(id1);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
if (srcTabExpPanel.appViewRefs) {
|
|
161
|
+
srcTabExpPanel.appViewRefs.forEach((item1) => {
|
|
162
|
+
dstTabExpPanel.appViewRefs.push(item1);
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
if (srcTabExpPanel.controls) {
|
|
166
|
+
srcTabExpPanel.controls.forEach((item1) => {
|
|
167
|
+
dstTabExpPanel.controls.push(item1);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
@@ -41,5 +41,20 @@ export declare function recursiveIterate(parent: IData, callback: (item: any, _p
|
|
|
41
41
|
* @returns {*} {void}
|
|
42
42
|
*/
|
|
43
43
|
export declare function mergeAppDEForm(dst: IDEForm | undefined, src: IDEForm | undefined): void;
|
|
44
|
+
/**
|
|
45
|
+
* 获取存在基于数据关系部件构建的分页部件的数据关系标识
|
|
46
|
+
* @param form 表单模型
|
|
47
|
+
* @returns 数据关系标识集合
|
|
48
|
+
*/
|
|
49
|
+
export declare function getFormdataRelationTags(form: IDEForm | undefined): string[];
|
|
50
|
+
/**
|
|
51
|
+
* @description 合并存在数据关系标识的表单分页部件,子应用表单codename和主应用表单表单分页部件数据关系标识相同
|
|
52
|
+
* @export
|
|
53
|
+
* @param {string} dataRelationTag 数据关系标识
|
|
54
|
+
* @param {(IDEForm | undefined)} dst 主应用表单模型
|
|
55
|
+
* @param {(IDEForm | undefined)} src 子应用表单模型
|
|
56
|
+
* @returns {*} {void}
|
|
57
|
+
*/
|
|
58
|
+
export declare function mergeFormDRTabpanel(dataRelationTag: string, dst: IDEForm | undefined, src: IDEForm | undefined): void;
|
|
44
59
|
export {};
|
|
45
60
|
//# sourceMappingURL=merge-de-form.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-de-form.d.ts","sourceRoot":"","sources":["../../../src/utils/merge-model/merge-de-form.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAU3C,aAAa;AACb,QAAA,MAAM,WAAW;IACf,cAAc;;CAEf,CAAC;AAiCF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,KAAK,EACb,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,OAAO,GAAG,IAAI,EACrD,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,WAAW,CAAC,GACjC,IAAI,CAaN;AA2ID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,GAAG,SAAS,EACxB,GAAG,EAAE,OAAO,GAAG,SAAS,GACvB,IAAI,CAKN"}
|
|
1
|
+
{"version":3,"file":"merge-de-form.d.ts","sourceRoot":"","sources":["../../../src/utils/merge-model/merge-de-form.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAU3C,aAAa;AACb,QAAA,MAAM,WAAW;IACf,cAAc;;CAEf,CAAC;AAiCF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,KAAK,EACb,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,OAAO,GAAG,IAAI,EACrD,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,WAAW,CAAC,GACjC,IAAI,CAaN;AA2ID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,GAAG,SAAS,EACxB,GAAG,EAAE,OAAO,GAAG,SAAS,GACvB,IAAI,CAKN;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,EAAE,CAe3E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,OAAO,GAAG,SAAS,EACxB,GAAG,EAAE,OAAO,GAAG,SAAS,GACvB,IAAI,CAwCN"}
|
|
@@ -217,3 +217,59 @@ export function mergeAppDEForm(dst, src) {
|
|
|
217
217
|
return;
|
|
218
218
|
mergeSubAppFormItems(dst, subAppMergeItems);
|
|
219
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, IDEToolbarItem, 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
|
* 子应用模型合并对象
|
|
@@ -103,5 +103,19 @@ export declare class MergeSubModelHelper {
|
|
|
103
103
|
* @memberof MergeSubModelHelper
|
|
104
104
|
*/
|
|
105
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;
|
|
106
120
|
}
|
|
107
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,10 +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 { mergeAppDEForm } from './merge-de-form';
|
|
8
|
+
import { getFormdataRelationTags, mergeAppDEForm, mergeFormDRTabpanel, } from './merge-de-form';
|
|
9
|
+
import { mergeAppCodeList } from './merge-app-codelist';
|
|
9
10
|
/**
|
|
10
11
|
* 子应用模型合并对象
|
|
11
12
|
*
|
|
@@ -34,6 +35,11 @@ export class MergeSubModelHelper {
|
|
|
34
35
|
* @param {ISubAppRef[]} subAppRefs
|
|
35
36
|
*/
|
|
36
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
|
+
}
|
|
37
43
|
const dstAppMenu = controls === null || controls === void 0 ? void 0 : controls.find(item => {
|
|
38
44
|
return item.controlType === 'APPMENU' && item.name === 'appmenu';
|
|
39
45
|
});
|
|
@@ -41,6 +47,23 @@ export class MergeSubModelHelper {
|
|
|
41
47
|
for (let i = 0; i < subAppRefs.length; i++) {
|
|
42
48
|
const srcAppMenu = subAppRefs[i].appMenuModel;
|
|
43
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
|
+
}
|
|
44
67
|
mergeAppMenu(dstAppMenu, srcAppMenu);
|
|
45
68
|
}
|
|
46
69
|
}
|
|
@@ -56,6 +79,11 @@ export class MergeSubModelHelper {
|
|
|
56
79
|
* @return {*} {void}
|
|
57
80
|
*/
|
|
58
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
|
+
}
|
|
59
87
|
if (view.viewType !== 'APPINDEXVIEW' || !controls)
|
|
60
88
|
return;
|
|
61
89
|
const dstAppMenus = controls.filter(item => {
|
|
@@ -86,13 +114,25 @@ export class MergeSubModelHelper {
|
|
|
86
114
|
*/
|
|
87
115
|
mergeSubAppDRCtrl(view, controls, subAppRefs) {
|
|
88
116
|
const dstDRCtrl = controls === null || controls === void 0 ? void 0 : controls.find(item => {
|
|
89
|
-
return item.controlType === 'DRBAR' ||
|
|
117
|
+
return (item.controlType === 'DRBAR' ||
|
|
118
|
+
item.controlType === 'DRTAB' ||
|
|
119
|
+
item.controlType === 'TABEXPPANEL');
|
|
90
120
|
});
|
|
91
121
|
if (dstDRCtrl) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
+
}
|
|
96
136
|
}
|
|
97
137
|
}
|
|
98
138
|
}
|
|
@@ -330,13 +370,65 @@ export class MergeSubModelHelper {
|
|
|
330
370
|
if (forms.length === 0)
|
|
331
371
|
return;
|
|
332
372
|
forms.forEach(dstForm => {
|
|
333
|
-
|
|
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);
|
|
334
378
|
for (let i = 0; i < subAppRefs.length; i++) {
|
|
335
|
-
const srcForm = ibiz.hub.getSubAppControl(
|
|
379
|
+
const srcForm = ibiz.hub.getSubAppControl(appDataEntityId + codeName, subAppRefs[i].appId);
|
|
380
|
+
// 常规表单合并
|
|
336
381
|
if (srcForm) {
|
|
337
382
|
mergeAppDEForm(dstForm, srcForm);
|
|
338
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
|
+
}
|
|
339
394
|
}
|
|
340
395
|
});
|
|
341
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
|
+
}
|
|
342
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"}
|
|
@@ -17,10 +17,10 @@ export function mergeTreeView(dst, source) {
|
|
|
17
17
|
}
|
|
18
18
|
source.detreeNodes.forEach(sourceNode => {
|
|
19
19
|
var _a;
|
|
20
|
-
const
|
|
20
|
+
const item = dst.detreeNodes.find(dstNode => {
|
|
21
21
|
return dstNode.id === sourceNode.id;
|
|
22
22
|
});
|
|
23
|
-
if (!
|
|
23
|
+
if (!item) {
|
|
24
24
|
(_a = dst.detreeNodes) === null || _a === void 0 ? void 0 : _a.push(sourceNode);
|
|
25
25
|
}
|
|
26
26
|
});
|
|
@@ -32,13 +32,149 @@ export function mergeTreeView(dst, source) {
|
|
|
32
32
|
}
|
|
33
33
|
source.detreeNodeRSs.forEach(sourceNodeRs => {
|
|
34
34
|
var _a;
|
|
35
|
-
|
|
35
|
+
// 若配置了用户标记(dynamic_overlay:before|after|replace|delete|start|end:noderesid),则需根据用户标记进行合并,否则原始数据没有则直接附加末尾
|
|
36
|
+
if (sourceNodeRs.userTag &&
|
|
37
|
+
sourceNodeRs.userTag.startsWith('dynamic_overlay') &&
|
|
38
|
+
sourceNodeRs.userTag.split(':').length === 3) {
|
|
39
|
+
mergeSubAppTreeNodeResToDst(dst, sourceNodeRs);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
const itemIndex = dst.detreeNodeRSs.findIndex(dstNodeRs => {
|
|
43
|
+
return (dstNodeRs.parentDETreeNodeId === sourceNodeRs.parentDETreeNodeId &&
|
|
44
|
+
dstNodeRs.childDETreeNodeId === sourceNodeRs.childDETreeNodeId);
|
|
45
|
+
});
|
|
46
|
+
// 若存在end标记,则需要添加到第一个end标记节点关系前面,保证end标记节点关系始终添加到最后
|
|
47
|
+
const endIndex = dst.detreeNodeRSs.findIndex(dstNodeRs => {
|
|
48
|
+
var _a;
|
|
49
|
+
if (dstNodeRs.parentDETreeNodeId === sourceNodeRs.parentDETreeNodeId) {
|
|
50
|
+
const tags = (_a = sourceNodeRs.userTag) === null || _a === void 0 ? void 0 : _a.split(':');
|
|
51
|
+
if (!tags || tags.length !== 3 || tags[1] !== 'end')
|
|
52
|
+
return false;
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
});
|
|
57
|
+
if (itemIndex === -1) {
|
|
58
|
+
if (endIndex === -1) {
|
|
59
|
+
(_a = dst.detreeNodeRSs) === null || _a === void 0 ? void 0 : _a.push(sourceNodeRs);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
dst.detreeNodeRSs.splice(endIndex, 0, sourceNodeRs);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 合并指定子应用树节点关系到主应用树指定位置
|
|
71
|
+
* @param dst 原始树
|
|
72
|
+
* @param sourceNode 子应用树节点关系
|
|
73
|
+
*/
|
|
74
|
+
function mergeSubAppTreeNodeResToDst(dst, sourceNodeRs) {
|
|
75
|
+
var _a;
|
|
76
|
+
// dynamic_overlay:before|after|replace|delete|start|end:nodeid 定义附加位置
|
|
77
|
+
const [dynamicOverlay, targetPosition, targetTag] = sourceNodeRs.userTag.split(':');
|
|
78
|
+
if (!dynamicOverlay || !targetPosition || !targetTag)
|
|
79
|
+
return;
|
|
80
|
+
switch (targetPosition) {
|
|
81
|
+
case 'before':
|
|
82
|
+
// 在目标节点之前,dynamic_overlay:before:childnodeid,这儿最后一节拼接的是子节点标识
|
|
83
|
+
const beforeIndex = dst.detreeNodeRSs.findIndex(dstNode => {
|
|
84
|
+
return (dstNode.childDETreeNodeId === targetTag &&
|
|
85
|
+
dstNode.parentDETreeNodeId === sourceNodeRs.parentDETreeNodeId);
|
|
86
|
+
});
|
|
87
|
+
if (beforeIndex !== -1) {
|
|
88
|
+
dst.detreeNodeRSs.splice(beforeIndex, 0, sourceNodeRs);
|
|
89
|
+
}
|
|
90
|
+
break;
|
|
91
|
+
case 'after':
|
|
92
|
+
// 在目标节点之后,格式如:dynamic_overlay:after:childnodeid,最后一节拼接的是子节点标识
|
|
93
|
+
const afterIndex = dst.detreeNodeRSs.findIndex(dstNode => {
|
|
94
|
+
return (dstNode.childDETreeNodeId === targetTag &&
|
|
95
|
+
dstNode.parentDETreeNodeId === sourceNodeRs.parentDETreeNodeId);
|
|
96
|
+
});
|
|
97
|
+
if (afterIndex !== -1) {
|
|
98
|
+
dst.detreeNodeRSs.splice(afterIndex + 1, 0, sourceNodeRs);
|
|
99
|
+
}
|
|
100
|
+
break;
|
|
101
|
+
case 'replace':
|
|
102
|
+
// 替换目标节点,格式如:dynamic_overlay:replace:childnodeid,最后一节拼接的是子节点标识
|
|
103
|
+
const replaceIndex = dst.detreeNodeRSs.findIndex(dstNode => {
|
|
104
|
+
return (dstNode.childDETreeNodeId === targetTag &&
|
|
105
|
+
dstNode.parentDETreeNodeId === sourceNodeRs.parentDETreeNodeId);
|
|
106
|
+
});
|
|
107
|
+
if (replaceIndex !== -1) {
|
|
108
|
+
dst.detreeNodeRSs.splice(replaceIndex, 1, sourceNodeRs);
|
|
109
|
+
}
|
|
110
|
+
break;
|
|
111
|
+
case 'delete':
|
|
112
|
+
// 删除目标节点,格式如:dynamic_overlay:delete:childnodeid,最后一节拼接的是子节点标识
|
|
113
|
+
const deleteIndex = dst.detreeNodeRSs.findIndex(dstNode => {
|
|
114
|
+
return (dstNode.childDETreeNodeId === targetTag &&
|
|
115
|
+
dstNode.parentDETreeNodeId === sourceNodeRs.parentDETreeNodeId);
|
|
116
|
+
});
|
|
117
|
+
if (deleteIndex !== -1) {
|
|
118
|
+
dst.detreeNodeRSs.splice(deleteIndex, 1);
|
|
119
|
+
}
|
|
120
|
+
break;
|
|
121
|
+
case 'start':
|
|
122
|
+
// 在目标节点内部开始,格式如:dynamic_overlay:start:随机字符,最后一节拼接的是随机字符,读的是当前节点关系的父节点标识
|
|
123
|
+
const startIndex = dst.detreeNodeRSs.findIndex(dstNode => {
|
|
124
|
+
return dstNode.parentDETreeNodeId === sourceNodeRs.parentDETreeNodeId;
|
|
125
|
+
});
|
|
126
|
+
if (startIndex !== -1) {
|
|
127
|
+
dst.detreeNodeRSs.splice(startIndex, 0, sourceNodeRs);
|
|
128
|
+
}
|
|
129
|
+
break;
|
|
130
|
+
case 'end':
|
|
131
|
+
// 在目标节点内部结束,格式如:dynamic_overlay:end:随机字符,最后一节拼接的是随机字符,读的是当前节点关系的父节点标识
|
|
132
|
+
const endIndex = getLastIndex(dst.detreeNodeRSs, dstNode => {
|
|
133
|
+
return dstNode.parentDETreeNodeId === sourceNodeRs.parentDETreeNodeId;
|
|
134
|
+
});
|
|
135
|
+
if (endIndex !== -1) {
|
|
136
|
+
dst.detreeNodeRSs.splice(endIndex + 1, 0, sourceNodeRs);
|
|
137
|
+
}
|
|
138
|
+
break;
|
|
139
|
+
default:
|
|
140
|
+
// 未识别位置,若源树不存在该关系,则直接附加到最后
|
|
141
|
+
const defaultIndex = dst.detreeNodeRSs.findIndex(dstNodeRs => {
|
|
36
142
|
return (dstNodeRs.parentDETreeNodeId === sourceNodeRs.parentDETreeNodeId &&
|
|
37
143
|
dstNodeRs.childDETreeNodeId === sourceNodeRs.childDETreeNodeId);
|
|
38
144
|
});
|
|
39
|
-
|
|
40
|
-
|
|
145
|
+
// 若存在end标记,则需要添加到第一个end标记节点关系前面,保证end标记节点关系始终添加到最后
|
|
146
|
+
const defaultEndIndex = dst.detreeNodeRSs.findIndex(dstNodeRs => {
|
|
147
|
+
var _a;
|
|
148
|
+
if (dstNodeRs.parentDETreeNodeId === sourceNodeRs.parentDETreeNodeId) {
|
|
149
|
+
const tags = (_a = sourceNodeRs.userTag) === null || _a === void 0 ? void 0 : _a.split(':');
|
|
150
|
+
if (!tags || tags.length !== 3 || tags[1] !== 'end')
|
|
151
|
+
return false;
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
return false;
|
|
155
|
+
});
|
|
156
|
+
if (defaultIndex === -1) {
|
|
157
|
+
if (defaultEndIndex === -1) {
|
|
158
|
+
(_a = dst.detreeNodeRSs) === null || _a === void 0 ? void 0 : _a.push(sourceNodeRs);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
dst.detreeNodeRSs.splice(defaultEndIndex, 0, sourceNodeRs);
|
|
162
|
+
}
|
|
41
163
|
}
|
|
42
|
-
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* 获取指定数组中满足条件的最后一个元素
|
|
169
|
+
* @param arr 指定数组
|
|
170
|
+
* @param predicate 过滤条件
|
|
171
|
+
* @returns 找到则返回指定元素下标,反之返回-1
|
|
172
|
+
*/
|
|
173
|
+
function getLastIndex(arr, predicate) {
|
|
174
|
+
for (let i = arr.length - 1; i >= 0; i--) {
|
|
175
|
+
if (predicate(arr[i])) {
|
|
176
|
+
return i;
|
|
177
|
+
}
|
|
43
178
|
}
|
|
179
|
+
return -1;
|
|
44
180
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { IModelHandler } from '../../interface';
|
|
2
|
+
/**
|
|
3
|
+
* @description 模型变换处理器
|
|
4
|
+
* @export
|
|
5
|
+
* @abstract
|
|
6
|
+
* @class ModelHandler
|
|
7
|
+
* @implements {IModelHandler}
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class ModelHandler implements IModelHandler {
|
|
10
|
+
/**
|
|
11
|
+
* @description 优先级,默认值为1
|
|
12
|
+
* @public
|
|
13
|
+
* @type {number}
|
|
14
|
+
* @memberof ModelHandler
|
|
15
|
+
*/
|
|
16
|
+
priority: number;
|
|
17
|
+
/**
|
|
18
|
+
* Creates an instance of ModelHandler.
|
|
19
|
+
* @param {number} [priority=1] 优先级,数值越小越先执行
|
|
20
|
+
* @memberof ModelHandler
|
|
21
|
+
*/
|
|
22
|
+
constructor(priority?: number);
|
|
23
|
+
/**
|
|
24
|
+
* @description 执行器
|
|
25
|
+
* @abstract
|
|
26
|
+
* @param {IModel} model
|
|
27
|
+
* @returns {*} {IModel}
|
|
28
|
+
* @memberof ModelHandler
|
|
29
|
+
*/
|
|
30
|
+
abstract execute(model: IModel): IModel;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=model-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-handler.d.ts","sourceRoot":"","sources":["../../../src/utils/model-transformer/model-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;GAMG;AACH,8BAAsB,YAAa,YAAW,aAAa;IACzD;;;;;OAKG;IACI,QAAQ,EAAE,MAAM,CAAK;IAE5B;;;;OAIG;gBACS,QAAQ,GAAE,MAAU;IAIhC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CACxC"}
|