@ibiz-template/runtime 0.5.3-beta.4 → 0.5.3-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/index.esm.js +1079 -284
  2. package/dist/index.system.min.js +1 -1
  3. package/out/app-hub.d.ts +12 -2
  4. package/out/app-hub.d.ts.map +1 -1
  5. package/out/app-hub.js +22 -2
  6. package/out/command/app/open-app-view/open-app-view.js +2 -2
  7. package/out/controller/constant/control/index.d.ts +1 -0
  8. package/out/controller/constant/control/index.d.ts.map +1 -1
  9. package/out/controller/constant/control/index.js +1 -0
  10. package/out/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.d.ts +5 -0
  11. package/out/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.d.ts.map +1 -0
  12. package/out/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.js +6 -0
  13. package/out/controller/control/form/form/form.controller.d.ts.map +1 -1
  14. package/out/controller/control/form/form/form.controller.js +4 -1
  15. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.d.ts +1 -0
  16. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.d.ts.map +1 -1
  17. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.js +1 -0
  18. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.d.ts +10 -0
  19. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.d.ts.map +1 -1
  20. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.js +12 -0
  21. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.d.ts +34 -0
  22. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.d.ts.map +1 -1
  23. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.js +68 -0
  24. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-node-column.controller.d.ts +205 -0
  25. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-node-column.controller.d.ts.map +1 -0
  26. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-node-column.controller.js +345 -0
  27. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.d.ts +3 -0
  28. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.d.ts.map +1 -1
  29. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.js +14 -1
  30. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.d.ts +16 -8
  31. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.d.ts.map +1 -1
  32. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.js +26 -12
  33. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.d.ts +59 -0
  34. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.d.ts.map +1 -1
  35. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.js +238 -1
  36. package/out/interface/common/i-app-hub-service/i-app-hub-service.d.ts +4 -3
  37. package/out/interface/common/i-app-hub-service/i-app-hub-service.d.ts.map +1 -1
  38. package/out/interface/controller/controller/control/i-tree-grid-ex.controller.d.ts +23 -1
  39. package/out/interface/controller/controller/control/i-tree-grid-ex.controller.d.ts.map +1 -1
  40. package/out/interface/controller/event/control/i-tree-grid-ex.event.d.ts +17 -0
  41. package/out/interface/controller/event/control/i-tree-grid-ex.event.d.ts.map +1 -1
  42. package/out/interface/controller/state/control/i-tree-grid-ex.state.d.ts +60 -2
  43. package/out/interface/controller/state/control/i-tree-grid-ex.state.d.ts.map +1 -1
  44. package/out/interface/provider/i-async-action.provider.d.ts +3 -2
  45. package/out/interface/provider/i-async-action.provider.d.ts.map +1 -1
  46. package/out/register/helper/app-menu-item-register.d.ts.map +1 -1
  47. package/out/register/helper/app-menu-item-register.js +1 -6
  48. package/out/register/helper/panel-item-register.d.ts.map +1 -1
  49. package/out/register/helper/panel-item-register.js +36 -30
  50. package/out/service/dto/method.dto.d.ts +0 -9
  51. package/out/service/dto/method.dto.d.ts.map +1 -1
  52. package/out/service/dto/method.dto.js +8 -13
  53. package/out/service/service/entity/method/fetch.d.ts.map +1 -1
  54. package/out/service/service/entity/method/fetch.js +22 -20
  55. package/out/service/utils/dynamic-code-list/dynamic-code-list.d.ts +1 -1
  56. package/out/service/utils/dynamic-code-list/dynamic-code-list.d.ts.map +1 -1
  57. package/out/service/utils/dynamic-code-list/dynamic-code-list.js +25 -26
  58. package/out/service/vo/tree-node-data/tree-data-set-node-data.d.ts +6 -0
  59. package/out/service/vo/tree-node-data/tree-data-set-node-data.d.ts.map +1 -1
  60. package/out/service/vo/tree-node-data/tree-data-set-node-data.js +93 -41
  61. package/out/utils/ui-domain/ui-domain.d.ts +32 -6
  62. package/out/utils/ui-domain/ui-domain.d.ts.map +1 -1
  63. package/out/utils/ui-domain/ui-domain.js +46 -9
  64. package/package.json +4 -4
  65. package/src/app-hub.ts +27 -2
  66. package/src/command/app/open-app-view/open-app-view.ts +2 -2
  67. package/src/controller/constant/control/index.ts +1 -0
  68. package/src/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.ts +5 -0
  69. package/src/controller/control/form/form/form.controller.ts +11 -1
  70. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/index.ts +1 -0
  71. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.ts +22 -0
  72. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.ts +88 -2
  73. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-node-column.controller.ts +522 -0
  74. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.ts +18 -1
  75. package/src/controller/control/tree-grid-ex/tree-grid-ex-row.state.ts +43 -12
  76. package/src/controller/control/tree-grid-ex/tree-grid-ex.controller.ts +296 -1
  77. package/src/interface/common/i-app-hub-service/i-app-hub-service.ts +4 -3
  78. package/src/interface/controller/controller/control/i-tree-grid-ex.controller.ts +27 -2
  79. package/src/interface/controller/event/control/i-tree-grid-ex.event.ts +15 -1
  80. package/src/interface/controller/state/control/i-tree-grid-ex.state.ts +64 -2
  81. package/src/interface/provider/i-async-action.provider.ts +3 -2
  82. package/src/register/helper/app-menu-item-register.ts +1 -5
  83. package/src/register/helper/panel-item-register.ts +43 -37
  84. package/src/service/dto/method.dto.ts +8 -14
  85. package/src/service/service/entity/method/fetch.ts +26 -25
  86. package/src/service/utils/dynamic-code-list/dynamic-code-list.ts +24 -32
  87. package/src/service/vo/tree-node-data/tree-data-set-node-data.ts +111 -46
  88. package/src/utils/ui-domain/ui-domain.ts +49 -9
@@ -27,15 +27,6 @@ export class MethodDto {
27
27
  this.dto = dto;
28
28
  this.inSelfLoop = inSelfLoop;
29
29
  this.dtoMap = new Map();
30
- /**
31
- * 当前 DTO 是否已经计算过关系相关逻辑
32
- *
33
- * @link this.calcRs
34
- * @author chitanda
35
- * @date 2023-12-26 16:12:18
36
- * @protected
37
- */
38
- this.isCalcRs = false;
39
30
  if (dto) {
40
31
  this.app = ibiz.hub.getApp(entity.appId);
41
32
  this.fields = dto.appDEMethodDTOFields || [];
@@ -168,7 +159,12 @@ export class MethodDto {
168
159
  if (this.isLocalMode && !this.inSelfLoop) {
169
160
  this.service.local.clear();
170
161
  }
171
- await this.calcRs(context);
162
+ const uiDomain = ibiz.uiDomainManager.get(context.srfsessionid);
163
+ if (uiDomain && uiDomain.state.rsInit !== true) {
164
+ await this.calcRs(context);
165
+ uiDomain.calcParentRs();
166
+ uiDomain.state.rsInit = true;
167
+ }
172
168
  return Promise.all(data.map(async (datum) => {
173
169
  const all = this.fields
174
170
  .filter(field => field.type === 'DTOS')
@@ -184,7 +180,7 @@ export class MethodDto {
184
180
  }
185
181
  const dto = await this.getFieldDto(context, field);
186
182
  const items = datum[key];
187
- if (items) {
183
+ if (items && items.length > 0) {
188
184
  const pKey = datum[this.entity.keyAppDEFieldId];
189
185
  if (field.refPickupAppDEFieldId) {
190
186
  // 特殊处理,在子包内设置父对象标识
@@ -222,10 +218,9 @@ export class MethodDto {
222
218
  * @return {*} {Promise<void>}
223
219
  */
224
220
  async calcRs(context, depth = 0) {
225
- if (this.isCalcRs || depth > 10) {
221
+ if (depth > 10) {
226
222
  return;
227
223
  }
228
- this.isCalcRs = true;
229
224
  depth += 1;
230
225
  const uiDomain = ibiz.uiDomainManager.get(context.srfsessionid);
231
226
  const dtoFields = this.fields.filter(field => field.type === 'DTOS');
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../../../src/service/service/entity/method/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAGb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,EAAgB,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD;;;;;;;;GAQG;AACH,qBAAa,WAAY,SAAQ,MAAM;IAC7B,MAAM,EAAE,aAAa,CAAC;IAExB,IAAI,CACR,OAAO,EAAE,QAAQ,EACjB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,EACxB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAoDvC;;;;;;;;;OASG;IACG,WAAW,CACf,IAAI,EAAE,gBAAgB,GAAG,IAAI,EAC7B,MAAM,EAAE,YAAY,EACpB,cAAc,GAAE,MAAM,EAA0C,GAC/D,OAAO,CAAC,WAAW,EAAE,CAAC;IAwCzB;;;;;;;OAOG;cACa,gBAAgB,CAC9B,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;CAkBlC"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../../../src/service/service/entity/method/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAGb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,EAAgB,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD;;;;;;;;GAQG;AACH,qBAAa,WAAY,SAAQ,MAAM;IAC7B,MAAM,EAAE,aAAa,CAAC;IAExB,IAAI,CACR,OAAO,EAAE,QAAQ,EACjB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,EACxB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAqDvC;;;;;;;;;OASG;IACG,WAAW,CACf,IAAI,EAAE,gBAAgB,GAAG,IAAI,EAC7B,MAAM,EAAE,YAAY,EACpB,cAAc,GAAE,MAAM,EAA0C,GAC/D,OAAO,CAAC,WAAW,EAAE,CAAC;IAwCzB;;;;;;;OAOG;cACa,gBAAgB,CAC9B,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;CAkBlC"}
@@ -18,31 +18,33 @@ export class FetchMethod extends Method {
18
18
  async exec(context, params, params2) {
19
19
  // 过滤参数,必须是对象
20
20
  const searchParams = params && !isArray(params) ? params : params2 || {};
21
+ // 根据数据集合来源查询数据
22
+ let res;
21
23
  if (this.isLocalMode) {
22
24
  const cond = DEDQCondUtil.getCond(this.method);
23
25
  const items = await this.searchLocal(cond, new SearchFilter(context, searchParams));
24
- return new HttpResponse(items, 200);
26
+ res = new HttpResponse(items, 200);
25
27
  }
26
- // 根据数据集合来源查询数据
27
- let res;
28
- switch (this.method.dataSetType) {
29
- case 'INDEXDE':
30
- case 'CODELIST':
31
- case 'MULTIFORM':
32
- res = await this.fetchCodeListSet(context, searchParams);
33
- break;
34
- case 'REMOTE':
35
- {
36
- const path = this.calcPath(context);
37
- res = await this.request(path, context, params, params2);
38
- }
39
- break;
40
- default:
41
- throw new ModelError(this.method, `数据来源类型${this.method.dataSetType}暂未支持`);
28
+ else {
29
+ switch (this.method.dataSetType) {
30
+ case 'INDEXDE':
31
+ case 'CODELIST':
32
+ case 'MULTIFORM':
33
+ res = await this.fetchCodeListSet(context, searchParams);
34
+ break;
35
+ case 'REMOTE':
36
+ {
37
+ const path = this.calcPath(context);
38
+ res = await this.request(path, context, params, params2);
39
+ }
40
+ break;
41
+ default:
42
+ throw new ModelError(this.method, `数据来源类型${this.method.dataSetType}暂未支持`);
43
+ }
44
+ // 转换实体对象
45
+ const items = res.data || [];
46
+ res.data = items.map(item => this.createEntity(item));
42
47
  }
43
- // 转换实体对象
44
- const items = res.data || [];
45
- res.data = items.map(item => this.createEntity(item));
46
48
  // 计算属性逻辑,每条数据走一遍
47
49
  if (res.data) {
48
50
  await execFieldLogics(this.entity, 'compute', context, res.data, searchParams);
@@ -112,7 +112,7 @@ export declare class DynamicCodeListCache {
112
112
  *
113
113
  * @return {codeListItem[] | undefined}
114
114
  */
115
- protected prepareTreeData(items: IData[], pValue?: string | number): CodeListItem[] | undefined;
115
+ protected prepareTreeData(items: IData[]): CodeListItem[] | undefined;
116
116
  /**
117
117
  * 获取动态的代码项
118
118
  *
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-code-list.d.ts","sourceRoot":"","sources":["../../../../src/service/utils/dynamic-code-list/dynamic-code-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD;;;;;;GAMG;AACH,KAAK,SAAS,GAAG;IACf;;;;;;OAMG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IAEvB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CACnC,CAAC;AAEF;;;;;;;GAOG;AACH,qBAAa,oBAAoB;IAC/B,SAAS,CAAC,GAAG,EAAG,WAAW,CAAC;IAE5B;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC;IAEjC;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,yBAAgC;IAE/C;;;;;;;OAOG;IACH,SAAS,CAAC,YAAY,EAAE,OAAO,CAAS;IAExC;;;;;;OAMG;IACH,SAAS,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAE1B,QAAQ,EAAE,YAAY;IAIlC;;;;;;OAMG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB3B;;;;;;;OAOG;IACH,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,YAAY;IA6DhD;;;;;;;;;OASG;cACa,IAAI,CAClB,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,GACnB,OAAO,CAAC,YAAY,EAAE,CAAC;IAuE1B;;;;OAIG;IACH,SAAS,CAAC,eAAe,CACvB,KAAK,EAAE,KAAK,EAAE,EACd,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GACvB,YAAY,EAAE,GAAG,SAAS;IAwB7B;;;;;;;;OAQG;IACG,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAE,OAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAyC5E"}
1
+ {"version":3,"file":"dynamic-code-list.d.ts","sourceRoot":"","sources":["../../../../src/service/utils/dynamic-code-list/dynamic-code-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD;;;;;;GAMG;AACH,KAAK,SAAS,GAAG;IACf;;;;;;OAMG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IAEvB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CACnC,CAAC;AAEF;;;;;;;GAOG;AACH,qBAAa,oBAAoB;IAC/B,SAAS,CAAC,GAAG,EAAG,WAAW,CAAC;IAE5B;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC;IAEjC;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,yBAAgC;IAE/C;;;;;;;OAOG;IACH,SAAS,CAAC,YAAY,EAAE,OAAO,CAAS;IAExC;;;;;;OAMG;IACH,SAAS,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAE1B,QAAQ,EAAE,YAAY;IAIlC;;;;;;OAMG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB3B;;;;;;;OAOG;IACH,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,YAAY;IA6DhD;;;;;;;;;OASG;cACa,IAAI,CAClB,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,GACnB,OAAO,CAAC,YAAY,EAAE,CAAC;IAuE1B;;;;OAIG;IACH,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,GAAG,SAAS;IAmBrE;;;;;;;;OAQG;IACG,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAE,OAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAyC5E"}
@@ -154,17 +154,17 @@ export class DynamicCodeListCache {
154
154
  const res = await app.deService.exec(appDataEntityId, appDEDataSetId, context, undefined, tempParams);
155
155
  let resultItems = [];
156
156
  if (res.data.length) {
157
- res.data.forEach((item) => {
158
- if (pvalueAppDEFieldId) {
159
- const tempItems = this.prepareTreeData(res.data);
160
- if (tempItems) {
161
- resultItems = tempItems;
162
- }
157
+ if (pvalueAppDEFieldId) {
158
+ const tempItems = this.prepareTreeData(res.data);
159
+ if (tempItems) {
160
+ resultItems = tempItems;
163
161
  }
164
- else {
162
+ }
163
+ else {
164
+ res.data.forEach((item) => {
165
165
  resultItems.push(this.convertData(item));
166
- }
167
- });
166
+ });
167
+ }
168
168
  }
169
169
  return Object.freeze(resultItems);
170
170
  }
@@ -173,25 +173,24 @@ export class DynamicCodeListCache {
173
173
  *
174
174
  * @return {codeListItem[] | undefined}
175
175
  */
176
- prepareTreeData(items, pValue) {
177
- const { pvalueAppDEFieldId } = this.codeList;
178
- let filteredData = [];
179
- filteredData = items.filter(item => {
180
- if (pValue) {
181
- // 有传父value去后台数据里找出来子项pValue等于父value的
182
- return item[pvalueAppDEFieldId] === pValue;
183
- }
184
- // 没有传父value,只需要找出来没有父值属性的
185
- return !item[pvalueAppDEFieldId];
176
+ prepareTreeData(items) {
177
+ const { valueAppDEFieldId, pvalueAppDEFieldId } = this.codeList;
178
+ const map = {};
179
+ const nestedList = [];
180
+ items.forEach((data) => {
181
+ map[data[valueAppDEFieldId]] = this.convertData(data);
186
182
  });
187
- if (filteredData.length === 0) {
188
- return;
189
- }
190
- return filteredData.map(data => {
191
- const tempCodeListItem = this.convertData(data);
192
- tempCodeListItem.children = this.prepareTreeData(items, tempCodeListItem.value);
193
- return tempCodeListItem;
183
+ items.forEach((data) => {
184
+ const parent = map[data[pvalueAppDEFieldId]];
185
+ if (parent) {
186
+ parent.children = parent.children || [];
187
+ parent.children.push(map[data[valueAppDEFieldId]]);
188
+ }
189
+ else {
190
+ nestedList.push(map[data[valueAppDEFieldId]]);
191
+ }
194
192
  });
193
+ return nestedList;
195
194
  }
196
195
  /**
197
196
  * 获取动态的代码项
@@ -14,6 +14,12 @@ export declare class TreeDataSetNodeData extends TreeNodeData implements ITreeNo
14
14
  _id: string;
15
15
  _value: string;
16
16
  _deData: IData;
17
+ /**
18
+ * 克隆方法
19
+ * @author lxm
20
+ * @date 2024-01-12 02:37:46
21
+ */
22
+ clone: () => TreeDataSetNodeData;
17
23
  constructor(model: IDETreeDataSetNode, parentNodeData: ITreeNodeData | undefined, opts: {
18
24
  data: IData;
19
25
  leaf: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"tree-data-set-node-data.d.ts","sourceRoot":"","sources":["../../../../src/service/vo/tree-node-data/tree-data-set-node-data.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG3E,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD;;;;;;;GAOG;AACH,qBAAa,mBAAoB,SAAQ,YAAa,YAAW,aAAa;IAC5E,KAAK,EAAE,MAAM,CAAC;IAEd,GAAG,EAAG,MAAM,CAAC;IAEb,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,KAAK,CAAC;gBAGb,KAAK,EAAE,kBAAkB,EACzB,cAAc,EAAE,aAAa,GAAG,SAAS,EACzC,IAAI,EAAE;QACJ,IAAI,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC;QACd,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB;IAqHH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,KAAK,GAAG,SAAS;IAiBhE;;;;;;;OAOG;IACH,SAAS,CAAC,kBAAkB,CAC1B,QAAQ,EAAE,mBAAmB,GAC5B,MAAM,GAAG,SAAS;IAYrB;;;;;;;OAOG;IACH,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,GAAG,SAAS;CAStE"}
1
+ {"version":3,"file":"tree-data-set-node-data.d.ts","sourceRoot":"","sources":["../../../../src/service/vo/tree-node-data/tree-data-set-node-data.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG3E,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMhD;;;;;;;GAOG;AACH,qBAAa,mBAAoB,SAAQ,YAAa,YAAW,aAAa;IACpE,KAAK,EAAE,MAAM,CAAC;IAEd,GAAG,EAAE,MAAM,CAAC;IAEZ,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,KAAK,CAAC;IAEvB;;;;OAIG;IACK,KAAK,EAAE,MAAM,mBAAmB,CAAC;gBAGvC,KAAK,EAAE,kBAAkB,EACzB,cAAc,EAAE,aAAa,GAAG,SAAS,EACzC,IAAI,EAAE;QACJ,IAAI,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC;QACd,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB;IA4KH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,KAAK,GAAG,SAAS;IAiBhE;;;;;;;OAOG;IACH,SAAS,CAAC,kBAAkB,CAC1B,QAAQ,EAAE,mBAAmB,GAC5B,MAAM,GAAG,SAAS;IAYrB;;;;;;;OAOG;IACH,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,GAAG,SAAS;CAStE"}
@@ -1,9 +1,11 @@
1
1
  import { updateKeyDefine } from '@ibiz-template/core';
2
- import { isNil } from 'ramda';
2
+ import { clone, isNil } from 'ramda';
3
3
  import { calcDeCodeNameById } from '../../../model';
4
4
  import { ScriptFactory } from '../../../utils';
5
5
  import { TreeNodeData } from './tree-node-data';
6
6
  import { fieldValueToBoolean } from '../../utils';
7
+ /** 克隆时赋值排除的字段 */
8
+ const CloneExcludeKeys = ['_id', '_value', '_text', '_deData', 'clone'];
7
9
  /**
8
10
  * 实体数据集树节点数据
9
11
  *
@@ -18,12 +20,6 @@ export class TreeDataSetNodeData extends TreeNodeData {
18
20
  super(model, parentNodeData, opts);
19
21
  const { data } = opts;
20
22
  this._deData = data;
21
- this._text = model.textAppDEFieldId
22
- ? data[model.textAppDEFieldId]
23
- : data.srfmajortext;
24
- this._value = model.idAppDEFieldId
25
- ? data[model.idAppDEFieldId]
26
- : data.srfkey;
27
23
  // id小写
28
24
  const selfId = `${model.id}@${data.srfkey}`.toLowerCase();
29
25
  Object.defineProperty(this, '_id', {
@@ -33,6 +29,24 @@ export class TreeDataSetNodeData extends TreeNodeData {
33
29
  enumerable: true,
34
30
  configurable: true,
35
31
  });
32
+ // 文本值
33
+ Object.defineProperty(this, '_text', {
34
+ get() {
35
+ return model.textAppDEFieldId
36
+ ? data[model.textAppDEFieldId]
37
+ : data.srfmajortext;
38
+ },
39
+ enumerable: true,
40
+ configurable: true,
41
+ });
42
+ // value值
43
+ Object.defineProperty(this, '_value', {
44
+ get() {
45
+ return model.idAppDEFieldId ? data[model.idAppDEFieldId] : data.srfkey;
46
+ },
47
+ enumerable: true,
48
+ configurable: true,
49
+ });
36
50
  // 实体节点额外添加上自己的实体上下文
37
51
  if (model.appDataEntityId) {
38
52
  const deName = calcDeCodeNameById(model.appDataEntityId);
@@ -48,19 +62,18 @@ export class TreeDataSetNodeData extends TreeNodeData {
48
62
  }
49
63
  /** 数据项和实体属性映射 */
50
64
  const dataItemKeyMap = new Map();
51
- dataItemKeyMap.set('srfkey', 'srfkey');
52
- dataItemKeyMap.set('srfmajortext', 'srfmajortext');
65
+ const dataItemDefaultMap = new Map();
53
66
  (_a = model.detreeNodeDataItems) === null || _a === void 0 ? void 0 : _a.forEach(dataItem => {
54
- const uiKey = dataItem.id.toLowerCase();
55
- // 后台实体属性
67
+ const dataItemKey = dataItem.id.toLowerCase();
68
+ // *后台实体属性
56
69
  const deFieldKey = dataItem.appDEFieldId.toLowerCase();
57
- dataItemKeyMap.set(uiKey, deFieldKey);
70
+ dataItemKeyMap.set(dataItemKey, deFieldKey);
58
71
  // *设置默认值
59
- if (dataItem.defaultValue && isNil(data[deFieldKey])) {
60
- data[deFieldKey] = dataItem.defaultValue;
72
+ if (dataItem.defaultValue) {
73
+ dataItemDefaultMap.set(dataItemKey, dataItem.defaultValue);
61
74
  }
62
75
  });
63
- /** 表格列和数据项的映射从而算出实体属性的映射 */
76
+ /** 表格列和数据项的映射 */
64
77
  const nodeColumnKeyMap = new Map();
65
78
  (_b = model.detreeNodeColumns) === null || _b === void 0 ? void 0 : _b.forEach(column => {
66
79
  const columnKey = column.detreeColumnId; // 不配树表格列不会有这个模型
@@ -69,22 +82,69 @@ export class TreeDataSetNodeData extends TreeNodeData {
69
82
  ibiz.log.error('模型异常缺少detreeColumnId或者dataItemName', column);
70
83
  }
71
84
  else {
72
- nodeColumnKeyMap.set(columnKey, dataItemKeyMap.get(dataItemKey));
85
+ nodeColumnKeyMap.set(columnKey, dataItemKey);
73
86
  }
74
87
  });
88
+ /**
89
+ * 获取对应key最终映射的实体属性字段,undefined就是没有映射实体属性
90
+ * @author lxm
91
+ * @date 2024-01-12 01:48:09
92
+ * @param {(string | symbol)} key
93
+ * @return {*} {(string | symbol | undefined)}
94
+ */
95
+ const getDeKey = (key) => {
96
+ // 表格列映射的实体数据属性名称
97
+ if (nodeColumnKeyMap.has(key)) {
98
+ return dataItemKeyMap.get(nodeColumnKeyMap.get(key));
99
+ }
100
+ // 数据项映射的实体数据属性名称
101
+ if (dataItemKeyMap.has(key)) {
102
+ return dataItemKeyMap.get(key);
103
+ }
104
+ // 实体属性上可枚举的属性,返回该属性名称
105
+ if (Object.prototype.hasOwnProperty.call(this._deData, key)) {
106
+ return key;
107
+ }
108
+ };
109
+ /**
110
+ * 获取对应属性的默认值,纯显示用的
111
+ * @author lxm
112
+ * @date 2024-01-12 02:36:53
113
+ * @param {(string | symbol)} key
114
+ * @return {*} {unknown}
115
+ */
116
+ const getKeyDefault = (key) => {
117
+ // 表格列映射的数据项的默认值
118
+ if (nodeColumnKeyMap.has(key)) {
119
+ return dataItemDefaultMap.get(nodeColumnKeyMap.get(key));
120
+ }
121
+ // 数据项映射的默认值
122
+ if (dataItemDefaultMap.has(key)) {
123
+ return dataItemDefaultMap.get(key);
124
+ }
125
+ };
126
+ this.clone = () => {
127
+ const cloneData = clone(this._deData);
128
+ const cloneNodeData = new TreeDataSetNodeData(model, this._parent, {
129
+ data: cloneData,
130
+ leaf: this._leaf,
131
+ navContext: this._context,
132
+ navParams: this._params,
133
+ });
134
+ Object.keys(this).forEach(key => {
135
+ const deKey = getDeKey(key);
136
+ // 非实体的映射属性,且不是排除的属性时,从原来那边赋值过来
137
+ if (isNil(deKey) && !CloneExcludeKeys.includes(key)) {
138
+ cloneNodeData[key] = this[key];
139
+ }
140
+ });
141
+ return cloneNodeData;
142
+ };
75
143
  return new Proxy(this, {
76
144
  set(target, p, value) {
77
- if (nodeColumnKeyMap.has(p)) {
78
- // 通过树表格列标识设置
79
- target._deData[nodeColumnKeyMap.get(p)] = value;
80
- }
81
- else if (dataItemKeyMap.has(p)) {
82
- // 通过树节点数据项标识设置
83
- target._deData[dataItemKeyMap.get(p)] = value;
84
- }
85
- else if (Object.prototype.hasOwnProperty.call(target._deData, p)) {
86
- // 通过实体数据属性标识设置
87
- target._deData[p] = value;
145
+ const deKey = getDeKey(p);
146
+ if (!isNil(deKey)) {
147
+ target._deData[deKey] = value;
88
148
  }
89
149
  else {
90
150
  target[p] = value;
@@ -92,21 +152,13 @@ export class TreeDataSetNodeData extends TreeNodeData {
92
152
  return true;
93
153
  },
94
154
  get(target, p, _receiver) {
95
- if (target[p] !== undefined) {
96
- return target[p];
97
- }
98
- // 通过树表格列标识获取
99
- if (nodeColumnKeyMap.has(p)) {
100
- return target._deData[nodeColumnKeyMap.get(p)];
101
- }
102
- // 通过树节点数据项标识获取
103
- if (dataItemKeyMap.has(p)) {
104
- return target._deData[dataItemKeyMap.get(p)];
105
- }
106
- // 通过实体数据属性标识获取
107
- if (target._deData[p] !== undefined) {
108
- return target._deData[p];
155
+ const deKey = getDeKey(p);
156
+ if (!isNil(deKey)) {
157
+ return isNil(target._deData[deKey])
158
+ ? getKeyDefault(p)
159
+ : target._deData[deKey];
109
160
  }
161
+ return target[p];
110
162
  },
111
163
  ownKeys(target) {
112
164
  // 整合所有并排除重复
@@ -17,14 +17,33 @@ export declare class UIDomain {
17
17
  */
18
18
  readonly id: string;
19
19
  /**
20
- * DTO 父子关系映射
20
+ * 状态
21
+ *
22
+ * @author chitanda
23
+ * @date 2024-01-15 19:01:51
24
+ * @type {{ rsInit: boolean }} 关系是否已经初始化
25
+ */
26
+ readonly state: {
27
+ rsInit: boolean;
28
+ };
29
+ /**
30
+ * DTO 子父关系映射
21
31
  *
22
32
  * @author chitanda
23
33
  * @date 2023-12-26 15:12:13
24
34
  * @protected
25
- * @type {Map<string, IAppDERS[]>}
35
+ * @type {Map<string, IAppDERS[]>} Map<子实体, 当前实体的父关系>
26
36
  */
27
37
  protected rsMap: Map<string, IAppDERS[]>;
38
+ /**
39
+ * DTO 父子关系映射
40
+ *
41
+ * @author chitanda
42
+ * @date 2024-01-15 17:01:42
43
+ * @protected
44
+ * @type {Map<string, IAppDERS[]>}
45
+ */
46
+ protected rs2Map: Map<string, IAppDERS[]>;
28
47
  /**
29
48
  * Creates an instance of UIDomain.
30
49
  *
@@ -39,19 +58,26 @@ export declare class UIDomain {
39
58
  *
40
59
  * @author chitanda
41
60
  * @date 2023-12-26 15:12:31
42
- * @param {string} entity
61
+ * @param {string} appDataEntityId
43
62
  * @param {IAppDERS} configs
44
63
  */
45
- setDERConfig(deCodeName: string, configs: IAppDERS[]): void;
64
+ setDERConfig(appDataEntityId: string, configs: IAppDERS[]): void;
46
65
  /**
47
66
  * 获取当前界面域下,具体实体的关系(在数据加载完成之后才有值)
48
67
  *
49
68
  * @author chitanda
50
69
  * @date 2023-12-26 16:12:07
51
- * @param {string} deCodeName
70
+ * @param {string} appDataEntityId
52
71
  * @return {*} {IAppDERS[]}
53
72
  */
54
- getDERConfig(deCodeName: string): IAppDERS[];
73
+ getDERConfig(appDataEntityId: string): IAppDERS[];
74
+ /**
75
+ * 根据模型给的子实体中的父关系模型,计算每个实体的子关系模型
76
+ *
77
+ * @author chitanda
78
+ * @date 2024-01-15 19:01:49
79
+ */
80
+ calcParentRs(): void;
55
81
  /**
56
82
  * 界面域销毁
57
83
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ui-domain.d.ts","sourceRoot":"","sources":["../../../src/utils/ui-domain/ui-domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C;;;;;;;GAOG;AACH,qBAAa,QAAQ;IACnB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB;;;;;;;OAOG;IACH,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAa;IAErD;;;;;;;OAOG;gBACS,EAAE,CAAC,EAAE,MAAM;IAQvB;;;;;;;OAOG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI;IAI3D;;;;;;;OAOG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,EAAE;IAO5C;;;;;OAKG;IACH,OAAO,IAAI,IAAI;CAWhB"}
1
+ {"version":3,"file":"ui-domain.d.ts","sourceRoot":"","sources":["../../../src/utils/ui-domain/ui-domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C;;;;;;;GAOG;AACH,qBAAa,QAAQ;IACnB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAqB;IAExD;;;;;;;OAOG;IACH,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAa;IAErD;;;;;;;OAOG;IACH,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAa;IAEtD;;;;;;;OAOG;gBACS,EAAE,CAAC,EAAE,MAAM;IAQvB;;;;;;;OAOG;IACH,YAAY,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI;IAIhE;;;;;;;OAOG;IACH,YAAY,CAAC,eAAe,EAAE,MAAM,GAAG,QAAQ,EAAE;IAOjD;;;;;OAKG;IACH,YAAY,IAAI,IAAI;IAepB;;;;;OAKG;IACH,OAAO,IAAI,IAAI;CAWhB"}
@@ -18,14 +18,31 @@ export class UIDomain {
18
18
  */
19
19
  constructor(id) {
20
20
  /**
21
- * DTO 父子关系映射
21
+ * 状态
22
+ *
23
+ * @author chitanda
24
+ * @date 2024-01-15 19:01:51
25
+ * @type {{ rsInit: boolean }} 关系是否已经初始化
26
+ */
27
+ this.state = { rsInit: false };
28
+ /**
29
+ * DTO 子父关系映射
22
30
  *
23
31
  * @author chitanda
24
32
  * @date 2023-12-26 15:12:13
25
33
  * @protected
26
- * @type {Map<string, IAppDERS[]>}
34
+ * @type {Map<string, IAppDERS[]>} Map<子实体, 当前实体的父关系>
27
35
  */
28
36
  this.rsMap = new Map();
37
+ /**
38
+ * DTO 父子关系映射
39
+ *
40
+ * @author chitanda
41
+ * @date 2024-01-15 17:01:42
42
+ * @protected
43
+ * @type {Map<string, IAppDERS[]>}
44
+ */
45
+ this.rs2Map = new Map();
29
46
  if (id) {
30
47
  this.id = id;
31
48
  }
@@ -38,26 +55,46 @@ export class UIDomain {
38
55
  *
39
56
  * @author chitanda
40
57
  * @date 2023-12-26 15:12:31
41
- * @param {string} entity
58
+ * @param {string} appDataEntityId
42
59
  * @param {IAppDERS} configs
43
60
  */
44
- setDERConfig(deCodeName, configs) {
45
- this.rsMap.set(deCodeName, configs);
61
+ setDERConfig(appDataEntityId, configs) {
62
+ this.rsMap.set(appDataEntityId, configs);
46
63
  }
47
64
  /**
48
65
  * 获取当前界面域下,具体实体的关系(在数据加载完成之后才有值)
49
66
  *
50
67
  * @author chitanda
51
68
  * @date 2023-12-26 16:12:07
52
- * @param {string} deCodeName
69
+ * @param {string} appDataEntityId
53
70
  * @return {*} {IAppDERS[]}
54
71
  */
55
- getDERConfig(deCodeName) {
56
- if (this.rsMap.has(deCodeName)) {
57
- return this.rsMap.get(deCodeName);
72
+ getDERConfig(appDataEntityId) {
73
+ if (this.rsMap.has(appDataEntityId)) {
74
+ return this.rsMap.get(appDataEntityId);
58
75
  }
59
76
  return [];
60
77
  }
78
+ /**
79
+ * 根据模型给的子实体中的父关系模型,计算每个实体的子关系模型
80
+ *
81
+ * @author chitanda
82
+ * @date 2024-01-15 19:01:49
83
+ */
84
+ calcParentRs() {
85
+ this.rs2Map.clear();
86
+ this.rsMap.forEach((configs, appDataEntityId) => {
87
+ configs.forEach(config => {
88
+ config.minorAppDataEntityId = appDataEntityId;
89
+ const major = config.majorAppDataEntityId;
90
+ if (!this.rs2Map.has(major)) {
91
+ this.rs2Map.set(major, []);
92
+ }
93
+ this.rs2Map.get(major).push(config);
94
+ });
95
+ });
96
+ console.log(Array.from(this.rs2Map.values()));
97
+ }
61
98
  /**
62
99
  * 界面域销毁
63
100
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/runtime",
3
- "version": "0.5.3-beta.4",
3
+ "version": "0.5.3-beta.6",
4
4
  "description": "控制器包",
5
5
  "type": "module",
6
6
  "main": "out/index.js",
@@ -30,7 +30,7 @@
30
30
  "license": "MIT",
31
31
  "devDependencies": {
32
32
  "@ibiz-template/core": "^0.5.2",
33
- "@ibiz/model-core": "^0.1.2",
33
+ "@ibiz/model-core": "^0.1.3",
34
34
  "@types/path-browserify": "^1.0.2",
35
35
  "@types/qs": "^6.9.11",
36
36
  "@types/systemjs": "^6.13.5",
@@ -47,7 +47,7 @@
47
47
  },
48
48
  "peerDependencies": {
49
49
  "@ibiz-template/core": "^0.5.0-beta.0",
50
- "@ibiz/model-core": "^0.1.2",
50
+ "@ibiz/model-core": "^0.1.3",
51
51
  "async-validator": "^4.2.5",
52
52
  "dayjs": "^1.11.7",
53
53
  "echarts": "^5.4.3",
@@ -59,5 +59,5 @@
59
59
  "qx-util": "^0.4.8",
60
60
  "ramda": "^0.29.0"
61
61
  },
62
- "gitHead": "ed060fe1367c03eb252f52ac33a93ee7350733e3"
62
+ "gitHead": "fd9a03832183acb0fbdfc3592b1ff820257c2783"
63
63
  }
package/src/app-hub.ts CHANGED
@@ -66,6 +66,16 @@ export class AppHub implements IAppHubService {
66
66
  */
67
67
  protected view2appMap: Map<string, string> = new Map();
68
68
 
69
+ /**
70
+ * 当前注册的应用视图优先级
71
+ *
72
+ * @author chitanda
73
+ * @date 2024-01-15 15:01:57
74
+ * @protected
75
+ * @type {Map<string, number>}
76
+ */
77
+ protected view2appPriorityMap: Map<string, number> = new Map();
78
+
69
79
  /**
70
80
  * 实例化的应用视图模型
71
81
  *
@@ -176,13 +186,28 @@ export class AppHub implements IAppHubService {
176
186
  * 设置应用视图所属应用
177
187
  *
178
188
  * @author chitanda
179
- * @date 2023-04-17 23:04:37
189
+ * @date 2024-01-15 15:01:41
180
190
  * @param {string} tag 视图 codeName 或者视图 id
181
191
  * @param {string} [appId=ibiz.env.appId]
192
+ * @param {number} [priority=-1] 视图的优先级,值越小优先级越高。1为最高优先级
182
193
  */
183
- setAppView(tag: string, appId: string = ibiz.env.appId): void {
194
+ setAppView(
195
+ tag: string,
196
+ appId: string = ibiz.env.appId,
197
+ priority: number = -1,
198
+ ): void {
184
199
  const id = this.calcAppViewId(tag);
200
+ if (this.view2appMap.has(id)) {
201
+ const _priority = this.view2appPriorityMap.get(id);
202
+ // 已经存在优先级高的视图直接跳过,若优先级相同或更高则覆盖
203
+ if (_priority && _priority < priority) {
204
+ return;
205
+ }
206
+ }
185
207
  this.view2appMap.set(id, appId);
208
+ if (priority !== -1) {
209
+ this.view2appPriorityMap.set(id, priority);
210
+ }
186
211
  }
187
212
 
188
213
  /**
@@ -73,9 +73,9 @@ export class OpenAppViewCommand {
73
73
  const { openMode = 'INDEXVIEWTAB' } = appView;
74
74
  const viewOpenMode = opts.openMode || openMode;
75
75
  if (viewOpenMode !== undefined && viewOpenMode !== 'INDEXVIEWTAB') {
76
- // 除了走路由的,其他情况全删了toRouteDepth,避免影响后续操作
76
+ // 除了走路由的,其他情况toRouteDepth转为undefined,避免影响后续操作
77
77
  if (context.toRouteDepth) {
78
- delete context.toRouteDepth;
78
+ context.toRouteDepth = undefined;
79
79
  }
80
80
  }
81
81
  switch (viewOpenMode) {