@ibiz-template/model-helper 0.7.41-alpha.3 → 0.7.41-alpha.31

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.
@@ -1 +1 @@
1
- {"version":3,"file":"model-helper.d.ts","sourceRoot":"","sources":["../src/model-helper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-helper.d.ts","sourceRoot":"","sources":["../src/model-helper.ts"],"names":[],"mappings":"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"}
@@ -156,7 +156,7 @@ export class ModelHelper {
156
156
  }
157
157
  // 模型扩展标准视图布局面板
158
158
  const subViewRefs = app.model.appSubViewTypeRefs || [];
159
- subViewRefs.forEach(item => {
159
+ subViewRefs.forEach((item) => {
160
160
  if (item.replaceDefault) {
161
161
  ibiz.util.layoutPanel.register(`${item.viewType}_DEFAULT`, item.viewLayoutPanel);
162
162
  }
@@ -168,8 +168,18 @@ export class ModelHelper {
168
168
  for (let i = 0; i < subAppRefs.length; i++) {
169
169
  const subApp = subAppRefs[i];
170
170
  const sourceSubApp = getAllPSSubAppRefs[i];
171
- // eslint-disable-next-line no-await-in-loop
172
- await this.initSubApp(app, subApp, sourceSubApp);
171
+ // 控制插件应用访问权限、通过应用样式参数SUBAPPACCESSKEY定义权限标识
172
+ if (subApp.accessKey) {
173
+ const mianApp = await ibiz.hub.getApp(ibiz.env.appId);
174
+ await mianApp.authority.init();
175
+ const permitted = mianApp.authority.calcByResCode(subApp.accessKey);
176
+ if (permitted) {
177
+ await this.initSubApp(app, subApp, sourceSubApp);
178
+ }
179
+ }
180
+ else {
181
+ await this.initSubApp(app, subApp, sourceSubApp);
182
+ }
173
183
  }
174
184
  }
175
185
  }
@@ -389,6 +399,8 @@ export class ModelHelper {
389
399
  this.merge.mergeSubAppGridCloumnActionGroup(view, controls, this.subAppRefs);
390
400
  // 合并树视图部件
391
401
  this.merge.mergeSubAppTreeView(view, controls, this.subAppRefs);
402
+ // 合并子应用表单部件
403
+ this.merge.mergeSubAppForm(view, controls, this.subAppRefs);
392
404
  }
393
405
  /**
394
406
  * 根据应用视图 codeName 获取应用视图模型
@@ -1,3 +1,10 @@
1
1
  import { IUIActionGroup } from '@ibiz/model-core';
2
+ /**
3
+ * 合并两个界面行为组
4
+ *
5
+ * @param dst 目标界面行为组,用于接收合并结果
6
+ * @param src 源界面行为组,提供要合并的数据
7
+ * @returns 无返回值,直接修改目标对象
8
+ */
2
9
  export declare function mergeAppDEUIActionGroup(dst: IUIActionGroup | undefined, src: IUIActionGroup | undefined): void;
3
10
  //# sourceMappingURL=merge-app-uiaction-group.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge-app-uiaction-group.d.ts","sourceRoot":"","sources":["../../../src/utils/merge-model/merge-app-uiaction-group.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAwB,MAAM,kBAAkB,CAAC;AAExE,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,cAAc,GAAG,SAAS,EAC/B,GAAG,EAAE,cAAc,GAAG,SAAS,GAC9B,IAAI,CAaN"}
1
+ {"version":3,"file":"merge-app-uiaction-group.d.ts","sourceRoot":"","sources":["../../../src/utils/merge-model/merge-app-uiaction-group.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAwB,MAAM,kBAAkB,CAAC;AAwBxE;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,cAAc,GAAG,SAAS,EAC/B,GAAG,EAAE,cAAc,GAAG,SAAS,GAC9B,IAAI,CAiDN"}
@@ -1,14 +1,66 @@
1
+ // dynamic_overlay:before|after|replace|delete:detailid
2
+ /**
3
+ * 解析动态覆盖标签字符串,提取位置信息和目标ID
4
+ *
5
+ * @param tag - 要解析的标签字符串,格式应为 "dynamic_overlay:position:targetId"
6
+ * @returns 如果解析成功,返回包含position和targetId的对象;否则返回null
7
+ */
8
+ function parseDynamicOverlay(tag) {
9
+ if (!tag) {
10
+ return null;
11
+ }
12
+ const match = tag.match(/^dynamic_overlay:(before|after|replace|delete):(.+)$/);
13
+ if (match) {
14
+ return { position: match[1], targetId: match[2] };
15
+ }
16
+ return null;
17
+ }
18
+ /**
19
+ * 合并两个界面行为组
20
+ *
21
+ * @param dst 目标界面行为组,用于接收合并结果
22
+ * @param src 源界面行为组,提供要合并的数据
23
+ * @returns 无返回值,直接修改目标对象
24
+ */
1
25
  export function mergeAppDEUIActionGroup(dst, src) {
2
26
  if (!dst || !src) {
3
27
  return;
4
28
  }
5
- // 合并界面行为组项
29
+ // 合并界面行为组项,根据界面行为组成员用户标记(格式如:dynamic_overlay:before|after|replace|delete:detailid)进行合并,如格式不满足则添加到末尾,如没有用户标记,则直接添加到末尾
6
30
  if (src.uiactionGroupDetails) {
7
31
  if (!dst.uiactionGroupDetails) {
8
32
  dst.uiactionGroupDetails = [];
9
33
  }
10
34
  src.uiactionGroupDetails.forEach((item) => {
11
- dst.uiactionGroupDetails.push(item);
35
+ const overlayInfo = parseDynamicOverlay(item.userTag);
36
+ if (overlayInfo && overlayInfo.position && overlayInfo.targetId) {
37
+ const targetIndex = dst.uiactionGroupDetails.findIndex((x) => x.id === overlayInfo.targetId);
38
+ if (targetIndex !== -1) {
39
+ switch (overlayInfo.position) {
40
+ case 'before':
41
+ dst.uiactionGroupDetails.splice(targetIndex, 0, item);
42
+ break;
43
+ case 'after':
44
+ dst.uiactionGroupDetails.splice(targetIndex + 1, 0, item);
45
+ break;
46
+ case 'replace':
47
+ dst.uiactionGroupDetails[targetIndex] = item;
48
+ break;
49
+ case 'delete':
50
+ dst.uiactionGroupDetails.splice(targetIndex, 1);
51
+ break;
52
+ default:
53
+ dst.uiactionGroupDetails.push(item);
54
+ break;
55
+ }
56
+ }
57
+ else {
58
+ dst.uiactionGroupDetails.push(item);
59
+ }
60
+ }
61
+ else {
62
+ dst.uiactionGroupDetails.push(item);
63
+ }
12
64
  });
13
65
  }
14
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"merge-de-drcontrol.d.ts","sourceRoot":"","sources":["../../../src/utils/merge-model/merge-de-drcontrol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CA4E3E"}
1
+ {"version":3,"file":"merge-de-drcontrol.d.ts","sourceRoot":"","sources":["../../../src/utils/merge-model/merge-de-drcontrol.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAsH3E"}
@@ -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
- // 合并分组(相同name替换,没有则附加)
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
- const [targetPosition, targetTag] = item1.itemTag.split(':');
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
  }
@@ -0,0 +1,60 @@
1
+ import { IDEForm } from '@ibiz/model-core';
2
+ /** 默认配置参数 */
3
+ declare const IterateOpts: {
4
+ /** 子集合属性数组 */
5
+ childrenFields: string[];
6
+ };
7
+ /**
8
+ * @description 递归遍历子元素,递归遍历子元素 用法:传入数组和回调函数 无返回值
9
+ * @example
10
+ * ```
11
+ * const parent = {
12
+ * name: 'parent',
13
+ * children: [
14
+ * {
15
+ * name: 'child1',
16
+ * children: [{ name: 'grandchild1' }, { name: 'grandchild2' }],
17
+ * },
18
+ * { name: 'child2', children: [{ name: 'grandchild3' }] },
19
+ * ],
20
+ * };
21
+ *
22
+ * const result: string[] = [];
23
+ *
24
+ * recursiveIterate(parent, item => {
25
+ * result.push(item.name);
26
+ * });
27
+ *
28
+ * result // => ['child1', 'grandchild1', 'grandchild2', 'child2', 'grandchild3']
29
+ * ```
30
+ * @export
31
+ * @param {IData} parent 父元素
32
+ * @param {(item: any) => boolean} callback 每一个子元素的回调
33
+ * @param {Partial<typeof IterateOpts>} [opts]
34
+ */
35
+ export declare function recursiveIterate(parent: IData, callback: (item: any, _parent: any) => boolean | void, opts?: Partial<typeof IterateOpts>): void;
36
+ /**
37
+ * @description 合并子应用表单
38
+ * @export
39
+ * @param {(IDEForm | undefined)} dst 主应用表单模型
40
+ * @param {(IDEForm | undefined)} src 子应用表单模型
41
+ * @returns {*} {void}
42
+ */
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;
59
+ export {};
60
+ //# sourceMappingURL=merge-de-form.d.ts.map
@@ -0,0 +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;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"}
@@ -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 { 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,13 @@ 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;
90
106
  }
91
107
  //# 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,EAEL,QAAQ,EACR,QAAQ,EASR,UAAU,EAEX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAO/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;IAcP;;;;;;;;OAQG;IACH,uBAAuB,CACrB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI;IAuBP;;;;;;;;OAQG;IACH,iBAAiB,CACf,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI;IAiBP;;;;;;;;OAQG;IACH,6BAA6B,CAC3B,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI;IAiDP;;;;;;;;OAQG;IACH,qCAAqC,CACnC,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,EAChC,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI;IAuEP,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;CAoCR"}
1
+ {"version":3,"file":"merge-model-helper.d.ts","sourceRoot":"","sources":["../../../src/utils/merge-model/merge-model-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EACR,QAAQ,EASR,cAAc,EAEd,UAAU,EAEX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAY/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;IAiBP;;;;;;;;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;CAuCR"}