@ibiz-template/runtime 0.1.29-dev.0 → 0.1.30

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 (123) hide show
  1. package/dist/index.esm.js +866 -603
  2. package/dist/index.system.min.js +1 -1
  3. package/dist/index.system.min.js.map +1 -1
  4. package/out/command/app/open-app-view/open-app-view.d.ts +1 -1
  5. package/out/command/app/open-app-view/open-app-view.d.ts.map +1 -1
  6. package/out/command/app/open-app-view/open-app-view.js +16 -5
  7. package/out/config/global-config.js +1 -1
  8. package/out/controller/common/control/control.controller.d.ts +18 -0
  9. package/out/controller/common/control/control.controller.d.ts.map +1 -1
  10. package/out/controller/common/control/control.controller.js +29 -1
  11. package/out/controller/common/control/md-control.controller.d.ts.map +1 -1
  12. package/out/controller/common/control/md-control.controller.js +2 -1
  13. package/out/controller/control/dashboard/dashboard.controller.d.ts.map +1 -1
  14. package/out/controller/control/dashboard/dashboard.controller.js +2 -6
  15. package/out/controller/control/dashboard/portlet/index.d.ts +1 -0
  16. package/out/controller/control/dashboard/portlet/index.d.ts.map +1 -1
  17. package/out/controller/control/dashboard/portlet/index.js +1 -0
  18. package/out/controller/control/dashboard/portlet/menu-portlet/index.d.ts +2 -0
  19. package/out/controller/control/dashboard/portlet/menu-portlet/index.d.ts.map +1 -0
  20. package/out/controller/control/dashboard/portlet/menu-portlet/index.js +1 -0
  21. package/out/controller/control/dashboard/portlet/menu-portlet/menu-portlet.controller.d.ts +5 -0
  22. package/out/controller/control/dashboard/portlet/menu-portlet/menu-portlet.controller.d.ts.map +1 -0
  23. package/out/controller/control/dashboard/portlet/menu-portlet/menu-portlet.controller.js +3 -0
  24. package/out/controller/control/exp-bar/exp-bar.controller.d.ts +10 -0
  25. package/out/controller/control/exp-bar/exp-bar.controller.d.ts.map +1 -1
  26. package/out/controller/control/exp-bar/exp-bar.controller.js +29 -2
  27. package/out/controller/control/exp-bar/tree-exp-bar.controller.d.ts.map +1 -1
  28. package/out/controller/control/exp-bar/tree-exp-bar.controller.js +1 -1
  29. package/out/controller/control/form/edit-form/edit-form.controller.d.ts +11 -2
  30. package/out/controller/control/form/edit-form/edit-form.controller.d.ts.map +1 -1
  31. package/out/controller/control/form/edit-form/edit-form.controller.js +56 -2
  32. package/out/controller/control/form/edit-form/edit-form.service.js +1 -1
  33. package/out/controller/control/form/form/form.controller.d.ts.map +1 -1
  34. package/out/controller/control/form/form/form.controller.js +2 -6
  35. package/out/controller/control/grid/grid/grid.controller.d.ts.map +1 -1
  36. package/out/controller/control/grid/grid/grid.controller.js +5 -10
  37. package/out/controller/control/tab-exp-panel/tab-exp-panel.controller.d.ts +10 -0
  38. package/out/controller/control/tab-exp-panel/tab-exp-panel.controller.d.ts.map +1 -1
  39. package/out/controller/control/tab-exp-panel/tab-exp-panel.controller.js +19 -0
  40. package/out/controller/control/toolbar/toolbar.controllerr.d.ts.map +1 -1
  41. package/out/controller/control/toolbar/toolbar.controllerr.js +8 -8
  42. package/out/controller/control/tree/tree.service.d.ts.map +1 -1
  43. package/out/controller/control/tree/tree.service.js +6 -11
  44. package/out/engine/md-view.engine.d.ts.map +1 -1
  45. package/out/engine/md-view.engine.js +5 -4
  46. package/out/global/global-util/global-util.d.ts +8 -0
  47. package/out/global/global-util/global-util.d.ts.map +1 -1
  48. package/out/global/global-util/global-util.js +8 -0
  49. package/out/interface/common/i-error-handler/i-error-handler.d.ts +17 -0
  50. package/out/interface/common/i-error-handler/i-error-handler.d.ts.map +1 -0
  51. package/out/interface/common/i-error-handler/i-error-handler.js +1 -0
  52. package/out/interface/common/i-global-config/i-global-view-config.d.ts +5 -3
  53. package/out/interface/common/i-global-config/i-global-view-config.d.ts.map +1 -1
  54. package/out/interface/common/index.d.ts +1 -0
  55. package/out/interface/common/index.d.ts.map +1 -1
  56. package/out/interface/controller/common/i-nav-view-msg/i-nav-view-msg.d.ts +9 -0
  57. package/out/interface/controller/common/i-nav-view-msg/i-nav-view-msg.d.ts.map +1 -1
  58. package/out/interface/controller/state/view/i-edit-view.state.d.ts +8 -0
  59. package/out/interface/controller/state/view/i-edit-view.state.d.ts.map +1 -1
  60. package/out/logic-scheduler/executor/app-ui-logic-executor.d.ts.map +1 -1
  61. package/out/logic-scheduler/executor/app-ui-logic-executor.js +10 -4
  62. package/out/logic-scheduler/trigger/item-dyna-logic-trigger.d.ts.map +1 -1
  63. package/out/logic-scheduler/trigger/item-dyna-logic-trigger.js +1 -4
  64. package/out/model/data-entity/data-entity.js +2 -2
  65. package/out/register/helper/control-register.d.ts.map +1 -1
  66. package/out/register/helper/control-register.js +6 -1
  67. package/out/service/app-data-entity/app-data-entity.d.ts.map +1 -1
  68. package/out/service/app-data-entity/app-data-entity.js +4 -0
  69. package/out/service/service/entity/method/method-renturn.d.ts.map +1 -1
  70. package/out/service/service/entity/method/method-renturn.js +4 -0
  71. package/out/ui-action/provider/ui-action-provider-base.js +1 -1
  72. package/out/utils/error-handler/default-error-handler.d.ts +13 -0
  73. package/out/utils/error-handler/default-error-handler.d.ts.map +1 -0
  74. package/out/utils/error-handler/default-error-handler.js +36 -0
  75. package/out/utils/error-handler/error-handler-center.d.ts +41 -0
  76. package/out/utils/error-handler/error-handler-center.d.ts.map +1 -0
  77. package/out/utils/error-handler/error-handler-center.js +59 -0
  78. package/out/utils/error-handler/index.d.ts +3 -0
  79. package/out/utils/error-handler/index.d.ts.map +1 -0
  80. package/out/utils/error-handler/index.js +2 -0
  81. package/out/utils/index.d.ts +1 -0
  82. package/out/utils/index.d.ts.map +1 -1
  83. package/out/utils/index.js +1 -0
  84. package/out/utils/promise/promise.d.ts +15 -0
  85. package/out/utils/promise/promise.d.ts.map +1 -0
  86. package/out/utils/promise/promise.js +38 -0
  87. package/package.json +2 -2
  88. package/src/command/app/open-app-view/open-app-view.ts +18 -5
  89. package/src/config/global-config.ts +1 -1
  90. package/src/controller/common/control/control.controller.ts +31 -2
  91. package/src/controller/common/control/md-control.controller.ts +2 -1
  92. package/src/controller/control/dashboard/dashboard.controller.ts +2 -6
  93. package/src/controller/control/dashboard/portlet/index.ts +1 -0
  94. package/src/controller/control/dashboard/portlet/menu-portlet/index.ts +1 -0
  95. package/src/controller/control/dashboard/portlet/menu-portlet/menu-portlet.controller.ts +4 -0
  96. package/src/controller/control/exp-bar/exp-bar.controller.ts +30 -2
  97. package/src/controller/control/exp-bar/tree-exp-bar.controller.ts +1 -0
  98. package/src/controller/control/form/edit-form/edit-form.controller.ts +71 -3
  99. package/src/controller/control/form/edit-form/edit-form.service.ts +1 -1
  100. package/src/controller/control/form/form/form.controller.ts +2 -6
  101. package/src/controller/control/grid/grid/grid.controller.ts +5 -9
  102. package/src/controller/control/tab-exp-panel/tab-exp-panel.controller.ts +20 -0
  103. package/src/controller/control/toolbar/toolbar.controllerr.ts +14 -8
  104. package/src/controller/control/tree/tree.service.ts +8 -9
  105. package/src/engine/md-view.engine.ts +6 -4
  106. package/src/global/global-util/global-util.ts +15 -0
  107. package/src/interface/common/i-error-handler/i-error-handler.ts +16 -0
  108. package/src/interface/common/i-global-config/i-global-view-config.ts +5 -3
  109. package/src/interface/common/index.ts +1 -0
  110. package/src/interface/controller/common/i-nav-view-msg/i-nav-view-msg.ts +10 -0
  111. package/src/interface/controller/state/view/i-edit-view.state.ts +10 -1
  112. package/src/logic-scheduler/executor/app-ui-logic-executor.ts +13 -4
  113. package/src/logic-scheduler/trigger/item-dyna-logic-trigger.ts +1 -4
  114. package/src/model/data-entity/data-entity.ts +2 -2
  115. package/src/register/helper/control-register.ts +6 -1
  116. package/src/service/app-data-entity/app-data-entity.ts +5 -0
  117. package/src/service/service/entity/method/method-renturn.ts +4 -0
  118. package/src/ui-action/provider/ui-action-provider-base.ts +1 -1
  119. package/src/utils/error-handler/default-error-handler.ts +40 -0
  120. package/src/utils/error-handler/error-handler-center.ts +61 -0
  121. package/src/utils/error-handler/index.ts +2 -0
  122. package/src/utils/index.ts +1 -0
  123. package/src/utils/promise/promise.ts +41 -0
@@ -0,0 +1,59 @@
1
+ /**
2
+ * 事件处理工具
3
+ *
4
+ * @author lxm
5
+ * @date 2022-09-21 18:09:31
6
+ * @export
7
+ * @class ErrorHandler
8
+ */
9
+ export class ErrorHandlerCenter {
10
+ constructor() {
11
+ /**
12
+ * 处理器集合
13
+ * @author lxm
14
+ * @date 2023-09-26 04:56:29
15
+ * @type {IErrorHandler[]}
16
+ */
17
+ this.handlers = [];
18
+ }
19
+ /**
20
+ * 注册处理器(后注册的优先级更高)
21
+ * @author lxm
22
+ * @date 2023-09-26 04:59:06
23
+ * @param {IErrorHandler} handler
24
+ */
25
+ register(handler) {
26
+ this.handlers.unshift(handler);
27
+ }
28
+ /**
29
+ * 处理单个报错
30
+ * @author lxm
31
+ * @date 2023-09-26 05:18:18
32
+ * @protected
33
+ * @param {unknown} error
34
+ */
35
+ handleSingle(error) {
36
+ const find = this.handlers.find(item => {
37
+ return !!item.handle(error);
38
+ });
39
+ if (!find) {
40
+ ibiz.log.error('没有找到能处理该错误的处理器', error);
41
+ }
42
+ }
43
+ /**
44
+ * 按顺序检测处理器,最先满足条件的处理该异常
45
+ * @author lxm
46
+ * @date 2023-09-26 05:01:08
47
+ * @param {unknown} error
48
+ */
49
+ handle(error) {
50
+ if (error instanceof Array) {
51
+ error.forEach(item => {
52
+ this.handleSingle(item);
53
+ });
54
+ }
55
+ else {
56
+ this.handleSingle(error);
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,3 @@
1
+ export { DefaultErrorHandler } from './default-error-handler';
2
+ export { ErrorHandlerCenter } from './error-handler-center';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/error-handler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { DefaultErrorHandler } from './default-error-handler';
2
+ export { ErrorHandlerCenter } from './error-handler-center';
@@ -10,4 +10,5 @@ export * from './value-rule/value-rule';
10
10
  export * from './script/index';
11
11
  export { TextUtil } from './text-util/text-util';
12
12
  export { RawValueUtil } from './raw-value-util/raw-value-util';
13
+ export { handleAllSettled } from './promise/promise';
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,cAAc,yBAAyB,CAAC;AACxC,OAAO,EACL,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,yCAAyC,CAAC;AACjD,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,cAAc,yBAAyB,CAAC;AACxC,OAAO,EACL,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,yCAAyC,CAAC;AACjD,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -10,3 +10,4 @@ export * from './value-rule/value-rule';
10
10
  export * from './script/index';
11
11
  export { TextUtil } from './text-util/text-util';
12
12
  export { RawValueUtil } from './raw-value-util/raw-value-util';
13
+ export { handleAllSettled } from './promise/promise';
@@ -0,0 +1,15 @@
1
+ /**
2
+ * 异步等待所有promise完成后才会结束异步
3
+ * 只返回成功的promise的返回值集合
4
+ * - 如果isThrow为true,有异常时抛出异常
5
+ * - 如果isThrow为false,有异常时用全局异常处理弹提示,逻辑不会中断
6
+ * @author lxm
7
+ * @date 2023-09-26 06:57:33
8
+ * @export
9
+ * @template T
10
+ * @param {(Iterable<T | PromiseLike<T>>)} values
11
+ * @param {boolean} [isThrow=true]
12
+ * @return {*} {Promise<Awaited<T>[]>}
13
+ */
14
+ export declare function handleAllSettled<T>(values: Iterable<T | PromiseLike<T>>, isThrow?: boolean): Promise<Awaited<T>[]>;
15
+ //# sourceMappingURL=promise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../src/utils/promise/promise.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,EACpC,OAAO,UAAO,GACb,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAwBvB"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * 异步等待所有promise完成后才会结束异步
3
+ * 只返回成功的promise的返回值集合
4
+ * - 如果isThrow为true,有异常时抛出异常
5
+ * - 如果isThrow为false,有异常时用全局异常处理弹提示,逻辑不会中断
6
+ * @author lxm
7
+ * @date 2023-09-26 06:57:33
8
+ * @export
9
+ * @template T
10
+ * @param {(Iterable<T | PromiseLike<T>>)} values
11
+ * @param {boolean} [isThrow=true]
12
+ * @return {*} {Promise<Awaited<T>[]>}
13
+ */
14
+ export async function handleAllSettled(values, isThrow = true) {
15
+ const allResults = await Promise.allSettled(values);
16
+ const successResult = [];
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+ const errorResult = [];
19
+ allResults.forEach(item => {
20
+ if (item.status === 'fulfilled') {
21
+ successResult.push(item.value);
22
+ }
23
+ else {
24
+ errorResult.push(item.reason);
25
+ }
26
+ });
27
+ // 有报错时根据是否抛出处理,抛出就抛,不抛就拿全局的异常处理弹提示。
28
+ if (errorResult.length > 0) {
29
+ const error = errorResult.length === 1 ? errorResult[0] : errorResult;
30
+ if (isThrow) {
31
+ throw error;
32
+ }
33
+ else {
34
+ ibiz.util.error.handle(error);
35
+ }
36
+ }
37
+ return successResult;
38
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/runtime",
3
- "version": "0.1.29-dev.0",
3
+ "version": "0.1.30",
4
4
  "description": "控制器包",
5
5
  "type": "module",
6
6
  "main": "out/index.js",
@@ -57,5 +57,5 @@
57
57
  "qx-util": "^0.4.8",
58
58
  "ramda": "^0.29.0"
59
59
  },
60
- "gitHead": "d3a7353b58db8101b0f237ae3f7b759b270c650c"
60
+ "gitHead": "882d7335b02b0ada912b08bfc81debc91f48ff49"
61
61
  }
@@ -1,8 +1,10 @@
1
1
  import { ModelError, RuntimeError } from '@ibiz-template/core';
2
2
  import { IAppRedirectView } from '@ibiz/model-core';
3
+ import { clone } from 'ramda';
3
4
  import { IModalData, IOpenViewOptions, IViewConfig } from '../../../interface';
4
5
  import { calcDeCodeNameById } from '../../../model';
5
6
  import { openRedirectView } from '../../../utils';
7
+ import { Srfuf } from '../../../service';
6
8
 
7
9
  /**
8
10
  * 打开应用视图
@@ -32,20 +34,31 @@ export class OpenAppViewCommand {
32
34
  */
33
35
  async exec(
34
36
  appViewId: string,
35
- context: IContext,
37
+ _context: IContext,
36
38
  params: IParams = {},
37
39
  opts: IOpenViewOptions = {},
38
40
  ): Promise<IModalData | void> {
41
+ const context = clone(_context);
39
42
  const appView = await ibiz.hub.config.view.get(appViewId!);
40
43
  if (!appView) {
41
44
  throw new RuntimeError(`应用视图[${appViewId}]不存在`);
42
45
  }
43
46
 
44
- // 识别上下文的srfkey并转成对应视图实体名称,然后置空srfkey
45
- if (context.srfkey && appView.appDataEntityId) {
47
+ if (
48
+ (context.srfkey || params.srfuf === Srfuf.CREATE) &&
49
+ appView.appDataEntityId
50
+ ) {
46
51
  const deName = calcDeCodeNameById(appView.appDataEntityId);
47
- context[deName] = context.srfkey;
48
- context.srfkey = undefined;
52
+ // 识别上下文的srfkey并转成对应视图实体名称,然后置空srfkey
53
+ if (context.srfkey) {
54
+ context[deName] = context.srfkey;
55
+ context.srfkey = undefined;
56
+ }
57
+ // 识别参数的 srfuf=0 时为新建。置空和当前要打开视图同实体的主键,避免同上下文导致后一个页面识别为了编辑。然后置空srfuf
58
+ if (params.srfuf === Srfuf.CREATE) {
59
+ context[deName] = undefined;
60
+ delete params.srfuf;
61
+ }
49
62
  }
50
63
 
51
64
  if (appView.redirectView) {
@@ -19,7 +19,7 @@ export class GlobalConfig implements IGlobalConfig {
19
19
  // 全局视图配置
20
20
  view: IGlobalViewConfig = {
21
21
  enableDataInfoBar: true,
22
- enableExpCache: true,
22
+ expCacheMode: 'TABEXPPANEL:',
23
23
  };
24
24
 
25
25
  // 全局表格配置
@@ -1,6 +1,7 @@
1
1
  import { IControl, IControlLogic, IViewLayoutPanel } from '@ibiz/model-core';
2
2
  import { NoticeError } from '@ibiz-template/core';
3
3
  import { isNil } from 'ramda';
4
+ import { notNilEmpty } from 'qx-util';
4
5
  import { BaseController } from '..';
5
6
  import { CTX } from '../../ctx';
6
7
  import {
@@ -19,7 +20,7 @@ import {
19
20
  } from '../../../interface';
20
21
  import { ControlLogicScheduler } from '../../../logic-scheduler';
21
22
  import { getControlProvider } from '../../../register';
22
- import { ScriptFactory } from '../../../utils';
23
+ import { convertNavData, ScriptFactory } from '../../../utils';
23
24
 
24
25
  /**
25
26
  * 部件控制器
@@ -63,6 +64,16 @@ export class ControlController<
63
64
 
64
65
  layoutPanel?: IViewLayoutPanelController;
65
66
 
67
+ /**
68
+ * 部件参数
69
+ *
70
+ * @author zk
71
+ * @date 2023-09-26 03:09:21
72
+ * @type {IData}
73
+ * @memberof ControlController
74
+ */
75
+ controlParams: IData = {};
76
+
66
77
  /**
67
78
  * 子适配器
68
79
  * @author lxm
@@ -130,7 +141,8 @@ export class ControlController<
130
141
  const provider = await getControlProvider(this.controlPanel);
131
142
  this.providers[this.controlPanel.name!] = provider!;
132
143
  }
133
-
144
+ // 处理上下文和导航参数
145
+ this.handleControlParams();
134
146
  // 部件逻辑初始化
135
147
  this.initControlScheduler(this.model.controlLogics);
136
148
  }
@@ -222,6 +234,23 @@ export class ControlController<
222
234
  }
223
235
  }
224
236
 
237
+ /**
238
+ * 部件参数解析
239
+ *
240
+ * @author zk
241
+ * @date 2023-09-27 07:09:08
242
+ * @protected
243
+ * @memberof ControlController
244
+ */
245
+ protected handleControlParams(): void {
246
+ const { ctrlParams } = this.model.controlParam!;
247
+ let params = {};
248
+ if (notNilEmpty(ctrlParams)) {
249
+ params = convertNavData(ctrlParams!, this.params, this.context);
250
+ }
251
+ Object.assign(this.controlParams, params);
252
+ }
253
+
225
254
  /**
226
255
  * 初始化部件逻辑调度器
227
256
  * @author lxm
@@ -10,6 +10,7 @@ import {
10
10
  } from '../../../interface';
11
11
  import { calcDeCodeNameById } from '../../../model';
12
12
  import { MDControlService, Srfuf } from '../../../service';
13
+ import { handleAllSettled } from '../../../utils';
13
14
  import { ControllerEvent } from '../../utils';
14
15
  import { ControlController } from './control.controller';
15
16
 
@@ -282,7 +283,7 @@ export class MDControlController<
282
283
  let needRefresh = false;
283
284
  try {
284
285
  const deName = calcDeCodeNameById(this.model.appDataEntityId!);
285
- await Promise.allSettled(
286
+ await handleAllSettled(
286
287
  data.map(async item => {
287
288
  // 新建未保存的数据直接走后续删除处理逻辑
288
289
  if (item.srfuf !== Srfuf.CREATE) {
@@ -12,6 +12,7 @@ import {
12
12
  IPortletContainerController,
13
13
  } from '../../../interface';
14
14
  import { getPortletProvider } from '../../../register';
15
+ import { handleAllSettled } from '../../../utils';
15
16
  import { ControlController } from '../../common';
16
17
  import { getOriginData } from '../../utils';
17
18
 
@@ -113,15 +114,10 @@ export class DashboardController
113
114
  */
114
115
  async dataChangeNotify(data: IData): Promise<void> {
115
116
  // 通知所有成员项去处理成员项相关逻辑
116
- const values = await Promise.allSettled(
117
+ await handleAllSettled(
117
118
  Object.values(this.portlets).map(async portlet => {
118
119
  return portlet.dataChangeNotify(data);
119
120
  }),
120
121
  );
121
- const rejectedValue = values.find(item => item.status === 'rejected');
122
- if (rejectedValue) {
123
- ibiz.log.error('dataChangeNotify报错', values);
124
- throw (rejectedValue as PromiseRejectedResult).reason;
125
- }
126
122
  }
127
123
  }
@@ -1,3 +1,4 @@
1
1
  export * from './portlet-part';
2
2
  export * from './container-portlet';
3
3
  export * from './view-portlet';
4
+ export * from './menu-portlet';
@@ -0,0 +1 @@
1
+ export * from './menu-portlet.controller';
@@ -0,0 +1,4 @@
1
+ import { IDBAppMenuPortletPart } from '@ibiz/model-core';
2
+ import { PortletPartController } from '../portlet-part/portlet-part.controller';
3
+
4
+ export class MenuPortletController extends PortletPartController<IDBAppMenuPortletPart> {}
@@ -152,6 +152,25 @@ export class ExpBarControlController<
152
152
  return control;
153
153
  }
154
154
 
155
+ /**
156
+ * 是否缓存
157
+ *
158
+ * @author zk
159
+ * @date 2023-09-27 09:09:59
160
+ * @readonly
161
+ * @type {boolean}
162
+ * @memberof ExpBarControlController
163
+ */
164
+ get isCache(): boolean {
165
+ if (this.controlParams.expcache === 'CACHE') {
166
+ return true;
167
+ }
168
+ if (this.controlParams.expcache === 'NO_CACHE') {
169
+ return false;
170
+ }
171
+ return ibiz.config.view.expCacheMode.includes(this.model.controlType!);
172
+ }
173
+
155
174
  /**
156
175
  * 创建完成
157
176
  *
@@ -274,7 +293,10 @@ export class ExpBarControlController<
274
293
  }
275
294
  // 此时不需要导航占位push路由,只要有个key触发绘制下级视图就行。
276
295
  this._evt.emit('onNavViewChange', {
277
- navViewMsg: { key: this.state.srfnav },
296
+ navViewMsg: {
297
+ key: this.state.srfnav,
298
+ isCache: this.isCache,
299
+ },
278
300
  context: this.context,
279
301
  });
280
302
  } else if (selectItem) {
@@ -297,7 +319,12 @@ export class ExpBarControlController<
297
319
  if (!data) {
298
320
  // 导航视图传空让他导航占位绘制空界面
299
321
  this.state.srfnav = '';
300
- this._evt.emit('onNavViewChange', { navViewMsg: { key: '' } });
322
+ this._evt.emit('onNavViewChange', {
323
+ navViewMsg: {
324
+ key: '',
325
+ isCache: this.isCache,
326
+ },
327
+ });
301
328
  return;
302
329
  }
303
330
  // 默认选中并激活第一项
@@ -401,6 +428,7 @@ export class ExpBarControlController<
401
428
  context: result.context,
402
429
  params: result.params,
403
430
  viewId: viewModelId,
431
+ isCache: this.isCache,
404
432
  };
405
433
  }
406
434
 
@@ -123,6 +123,7 @@ export class TreeExpBarController
123
123
  return {
124
124
  key: nodeId,
125
125
  viewId: nodeModel.navAppViewId,
126
+ isCache: this.isCache,
126
127
  ...result,
127
128
  };
128
129
  }
@@ -5,14 +5,18 @@ import {
5
5
  RuntimeError,
6
6
  mergeDefaultInLeft,
7
7
  } from '@ibiz-template/core';
8
- import { IDEEditForm } from '@ibiz/model-core';
8
+ import { IAppDEEditView, IDEEditForm } from '@ibiz/model-core';
9
9
  import { debounce } from 'lodash-es';
10
+ import { clone } from 'ramda';
10
11
  import {
11
12
  IEditFormState,
12
13
  IEditFormEvent,
13
14
  IEditFormController,
15
+ IViewController,
16
+ IEditViewState,
17
+ IEditViewEvent,
14
18
  } from '../../../../interface';
15
- import { hasDeCodeName } from '../../../../model';
19
+ import { calcDeCodeNameById, hasDeCodeName } from '../../../../model';
16
20
  import { Srfuf, ControlVO } from '../../../../service';
17
21
  import { ScriptFactory } from '../../../../utils';
18
22
  import { FormNotifyState } from '../../../constant';
@@ -40,6 +44,14 @@ export class EditFormController
40
44
  */
41
45
  service!: EditFormService;
42
46
 
47
+ get view(): IViewController<IAppDEEditView, IEditViewState, IEditViewEvent> {
48
+ return this.ctx.view as IViewController<
49
+ IAppDEEditView,
50
+ IEditViewState,
51
+ IEditViewEvent
52
+ >;
53
+ }
54
+
43
55
  /**
44
56
  * 初始化方法
45
57
  *
@@ -108,6 +120,57 @@ export class EditFormController
108
120
  return this.data;
109
121
  }
110
122
 
123
+ /**
124
+ * 拷贝模式加载数据
125
+ *
126
+ * @author chitanda
127
+ * @date 2023-09-26 19:09:21
128
+ * @return {*} {Promise<IData>}
129
+ */
130
+ protected async copy(): Promise<IData> {
131
+ const context = clone(this.context);
132
+ const queryParams: IParams = clone(this.params);
133
+
134
+ const appDataEntity = await ibiz.hub.getAppDataEntity(
135
+ this.model.appDataEntityId!,
136
+ );
137
+ const key = appDataEntity.keyAppDEFieldId;
138
+ if (key && this.params[key]) {
139
+ const deCodeName = calcDeCodeNameById(this.model.appDataEntityId!);
140
+ context[deCodeName] = this.params[key];
141
+ delete queryParams[key];
142
+ delete this.params[key];
143
+ delete queryParams.srfcopymode;
144
+ delete this.params.srfcopymode;
145
+ }
146
+
147
+ let res;
148
+ try {
149
+ await this.startLoading();
150
+ await this.evt.emit('onBeforeLoad', undefined);
151
+ res = await this.service.get(context, queryParams);
152
+ } catch (error) {
153
+ await this.evt.emit('onLoadError', undefined);
154
+ this.actionNotification('GETERROR', {
155
+ error: error as Error,
156
+ });
157
+ throw error;
158
+ } finally {
159
+ await this.endLoading();
160
+ }
161
+
162
+ res.data.$origin.srfsourcekey = undefined;
163
+
164
+ this.state.modified = false;
165
+ this.state.data = res.data;
166
+ this.formStateNotify(FormNotifyState.LOAD);
167
+
168
+ await this.evt.emit('onLoadSuccess', undefined);
169
+ this.actionNotification('GETSUCCESS');
170
+ this.state.isLoaded = true;
171
+ return this.data;
172
+ }
173
+
111
174
  /**
112
175
  * 部件加载数据行为
113
176
  *
@@ -115,6 +178,11 @@ export class EditFormController
115
178
  * @date 2022-08-19 14:08:50
116
179
  */
117
180
  async load(): Promise<IData> {
181
+ // 复制模式独立处理
182
+ const copyMode = this.params.srfcopymode;
183
+ if (copyMode) {
184
+ return this.copy();
185
+ }
118
186
  const isLoadDraft = !hasDeCodeName(
119
187
  this.context,
120
188
  this.model.appDataEntityId!,
@@ -124,7 +192,7 @@ export class EditFormController
124
192
  return this.loadDraft();
125
193
  }
126
194
 
127
- const queryParams = { ...this.params };
195
+ const queryParams = clone(this.params);
128
196
 
129
197
  let res;
130
198
  try {
@@ -285,7 +285,7 @@ export class EditFormService<
285
285
  }
286
286
  },
287
287
  {
288
- childrenFields: ['deformPages', 'deformDetails'],
288
+ childrenFields: ['deformPages', 'deformTabPages', 'deformDetails'],
289
289
  },
290
290
  );
291
291
  }
@@ -11,6 +11,7 @@ import {
11
11
  import { findChildFormDetails } from '../../../../model';
12
12
  import { getFormDetailProvider } from '../../../../register';
13
13
  import { ControlVO } from '../../../../service';
14
+ import { handleAllSettled } from '../../../../utils';
14
15
  import { ControlController } from '../../../common';
15
16
  import { FormNotifyState } from '../../../constant';
16
17
  import { ControllerEvent, isValueChange } from '../../../utils';
@@ -97,16 +98,11 @@ export abstract class FormController<
97
98
  */
98
99
  async dataChangeNotify(names: string[]): Promise<void> {
99
100
  // 通知所有成员项去处理成员项相关逻辑
100
- const values = await Promise.allSettled(
101
+ await handleAllSettled(
101
102
  Object.values(this.details).map(async detail => {
102
103
  return detail.dataChangeNotify(names);
103
104
  }),
104
105
  );
105
- const rejectedValue = values.find(item => item.status === 'rejected');
106
- if (rejectedValue) {
107
- ibiz.log.error('dataChangeNotify报错', values);
108
- throw (rejectedValue as PromiseRejectedResult).reason;
109
- }
110
106
  }
111
107
 
112
108
  /**
@@ -32,7 +32,7 @@ import { ControlVO, Srfuf } from '../../../../service';
32
32
  import { MDControlController } from '../../../common';
33
33
  import { GridNotifyState } from '../../../constant';
34
34
  import { getDefaultValue, isValueChange } from '../../../utils';
35
- import { ScriptFactory } from '../../../../utils';
35
+ import { handleAllSettled, ScriptFactory } from '../../../../utils';
36
36
 
37
37
  /**
38
38
  * 表格控制器
@@ -267,10 +267,11 @@ export class GridController
267
267
  ): Promise<ControlVO[]> {
268
268
  await super.afterLoad(args, items);
269
269
  // 每次表格刷新时通知表格属性列,加载代码表,避免动态代码表更新不及时
270
- await Promise.allSettled(
270
+ await handleAllSettled(
271
271
  Object.values(this.fieldColumns).map(async fieldColumn => {
272
272
  await fieldColumn.loadCodeList();
273
273
  }),
274
+ false,
274
275
  );
275
276
 
276
277
  // 生成表格row对象
@@ -536,7 +537,7 @@ export class GridController
536
537
  return;
537
538
  }
538
539
 
539
- Promise.allSettled(
540
+ await handleAllSettled(
540
541
  needSaveData.map(data => {
541
542
  return this.save(data);
542
543
  }),
@@ -695,16 +696,11 @@ export class GridController
695
696
  */
696
697
  async dataChangeNotify(row: GridRowState, names: string[]): Promise<void> {
697
698
  // 通知所有编辑项去处理编辑项相关逻辑
698
- const values = await Promise.allSettled(
699
+ await handleAllSettled(
699
700
  Object.values(this.editColumns).map(async column => {
700
701
  return column.dataChangeNotify(row, names);
701
702
  }),
702
703
  );
703
- const rejectedValue = values.find(item => item.status === 'rejected');
704
- if (rejectedValue) {
705
- ibiz.log.error('dataChangeNotify报错', values);
706
- throw (rejectedValue as PromiseRejectedResult).reason;
707
- }
708
704
  }
709
705
 
710
706
  /**
@@ -38,6 +38,25 @@ export class TabExpPanelController
38
38
  */
39
39
  isShowIcon = false;
40
40
 
41
+ /**
42
+ * 是否缓存
43
+ *
44
+ * @author zk
45
+ * @date 2023-09-27 09:09:59
46
+ * @readonly
47
+ * @type {boolean}
48
+ * @memberof ExpBarControlController
49
+ */
50
+ get isCache(): boolean {
51
+ if (this.controlParams.expcache === 'CACHE') {
52
+ return true;
53
+ }
54
+ if (this.controlParams.expcache === 'NO_CACHE') {
55
+ return false;
56
+ }
57
+ return ibiz.config.view.expCacheMode.includes(this.model.controlType!);
58
+ }
59
+
41
60
  /**
42
61
  * 初始化state的属性
43
62
  *
@@ -235,6 +254,7 @@ export class TabExpPanelController
235
254
  context,
236
255
  params,
237
256
  viewId: tabViewPanel.embeddedAppDEViewId,
257
+ isCache: this.isCache,
238
258
  };
239
259
  }
240
260
  }