@ibiz-template/runtime 0.1.1 → 0.1.3

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 (43) hide show
  1. package/dist/index.esm.js +122 -92
  2. package/dist/index.system.min.js +1 -1
  3. package/dist/index.system.min.js.map +1 -1
  4. package/out/controller/common/control/md-control.controller.d.ts.map +1 -1
  5. package/out/controller/common/control/md-control.controller.js +25 -26
  6. package/out/de-logic/index.d.ts +13 -0
  7. package/out/de-logic/index.d.ts.map +1 -1
  8. package/out/de-logic/index.js +34 -2
  9. package/out/engine/md-view.engine.d.ts +2 -2
  10. package/out/engine/md-view.engine.d.ts.map +1 -1
  11. package/out/engine/md-view.engine.js +7 -3
  12. package/out/index.d.ts +2 -0
  13. package/out/index.d.ts.map +1 -1
  14. package/out/index.js +2 -0
  15. package/out/interface/controller/controller/control/i-pickup-view-panel.controller.d.ts +10 -0
  16. package/out/interface/controller/controller/control/i-pickup-view-panel.controller.d.ts.map +1 -1
  17. package/out/interface/controller/controller/control/i-tree-exp-bar.controller.d.ts +11 -0
  18. package/out/interface/controller/controller/control/i-tree-exp-bar.controller.d.ts.map +1 -1
  19. package/out/interface/controller/controller/control/i-tree.controller.d.ts +0 -10
  20. package/out/interface/controller/controller/control/i-tree.controller.d.ts.map +1 -1
  21. package/out/interface/controller/event/control/i-pickup-view-panel.event.d.ts +15 -0
  22. package/out/interface/controller/event/control/i-pickup-view-panel.event.d.ts.map +1 -1
  23. package/out/interface/controller/state/control/i-grid.state.d.ts +52 -0
  24. package/out/interface/controller/state/control/i-grid.state.d.ts.map +1 -1
  25. package/out/interface/controller/state/control/i-tree.state.d.ts +2 -2
  26. package/out/interface/controller/state/control/i-tree.state.d.ts.map +1 -1
  27. package/out/model/layout/layout.d.ts.map +1 -1
  28. package/out/model/layout/layout.js +8 -2
  29. package/out/utils/open-redirect-view/open-redirect-view.d.ts.map +1 -1
  30. package/out/utils/open-redirect-view/open-redirect-view.js +18 -16
  31. package/package.json +4 -3
  32. package/src/controller/common/control/md-control.controller.ts +28 -29
  33. package/src/de-logic/index.ts +50 -2
  34. package/src/engine/md-view.engine.ts +8 -3
  35. package/src/index.ts +2 -0
  36. package/src/interface/controller/controller/control/i-pickup-view-panel.controller.ts +10 -0
  37. package/src/interface/controller/controller/control/i-tree-exp-bar.controller.ts +13 -1
  38. package/src/interface/controller/controller/control/i-tree.controller.ts +0 -11
  39. package/src/interface/controller/event/control/i-pickup-view-panel.event.ts +16 -0
  40. package/src/interface/controller/state/control/i-grid.state.ts +58 -0
  41. package/src/interface/controller/state/control/i-tree.state.ts +2 -2
  42. package/src/model/layout/layout.ts +6 -2
  43. package/src/utils/open-redirect-view/open-redirect-view.ts +18 -16
@@ -57,6 +57,7 @@ export class MDControlController<
57
57
  this.state.isLoaded = false;
58
58
  this.state.singleSelect = true;
59
59
  this.state.mdctrlActiveMode = 0;
60
+ this.state.groups = [];
60
61
  }
61
62
 
62
63
  /**
@@ -114,44 +115,42 @@ export class MDControlController<
114
115
  * @date 2022-08-19 14:08:50
115
116
  */
116
117
  async load(args: MDCtrlLoadParams = {}): Promise<IData[]> {
117
- // *初始加载需要重置分页
118
- const isInitialLoad = args.isInitialLoad === true;
119
- const isLoadMore = args.isLoadMore === true;
120
- if (isInitialLoad) {
121
- this.state.curPage = 1;
122
- } else if (isLoadMore) {
123
- this.state.curPage += 1;
124
- }
125
-
126
- // *查询参数处理
127
- const { context } = this.handlerAbilityParams(args);
128
- const params = await this.getFetchParams(args?.params);
129
-
130
- // *发起请求
131
118
  await this.startLoading();
132
- let res;
133
119
  try {
134
- res = await this.service.fetch(context, params);
120
+ // *初始加载需要重置分页
121
+ const isInitialLoad = args.isInitialLoad === true;
122
+ const isLoadMore = args.isLoadMore === true;
123
+ if (isInitialLoad) {
124
+ this.state.curPage = 1;
125
+ } else if (isLoadMore) {
126
+ this.state.curPage += 1;
127
+ }
128
+
129
+ // *查询参数处理
130
+ const { context } = this.handlerAbilityParams(args);
131
+ const params = await this.getFetchParams(args?.params);
132
+
133
+ const res = await this.service.fetch(context, params);
135
134
  // 更新分页数据总条数
136
135
  if (typeof res.total === 'number') {
137
136
  this.state.total = res.total;
138
137
  }
139
- } finally {
140
- await this.endLoading();
141
- }
142
138
 
143
- if (isLoadMore) {
144
- this.state.items.push(...res.data);
145
- } else {
146
- this.state.items = res.data;
147
- }
139
+ if (isLoadMore) {
140
+ this.state.items.push(...res.data);
141
+ } else {
142
+ this.state.items = res.data;
143
+ }
148
144
 
149
- await this.afterLoad(args, res.data);
145
+ await this.afterLoad(args, res.data);
150
146
 
151
- this.state.isLoaded = true;
152
- await this._evt.emit('onLoadSuccess', {
153
- isInitialLoad,
154
- });
147
+ this.state.isLoaded = true;
148
+ await this._evt.emit('onLoadSuccess', {
149
+ isInitialLoad,
150
+ });
151
+ } finally {
152
+ await this.endLoading();
153
+ }
155
154
 
156
155
  return this.state.items;
157
156
  }
@@ -1,6 +1,6 @@
1
- import { HttpError, HttpResponse } from '@ibiz-template/core';
1
+ import { HttpError, HttpResponse, RuntimeError } from '@ibiz-template/core';
2
2
  import { IAppDataEntity, IAppDELogic } from '@ibiz/model-core';
3
- import { filterFieldLogics } from '../model';
3
+ import { filterFieldLogics, findDELogic } from '../model';
4
4
  import { DELogic } from './de-logic';
5
5
 
6
6
  /**
@@ -8,6 +8,24 @@ import { DELogic } from './de-logic';
8
8
  */
9
9
  const deLogicMap: WeakMap<IAppDELogic, DELogic> = new Map();
10
10
 
11
+ /**
12
+ * 找到实体逻辑模型
13
+ * @author lxm
14
+ * @date 2023-08-04 02:47:16
15
+ * @param {string} deDELogicId
16
+ * @param {string} dataEntityId
17
+ * @param {string} [appId]
18
+ * @return {*} {(Promise<IAppDELogic | undefined>)}
19
+ */
20
+ async function findDeLogic(
21
+ deDELogicId: string,
22
+ dataEntityId: string,
23
+ appId?: string,
24
+ ): Promise<IAppDELogic | undefined> {
25
+ const appDataEntity = await ibiz.hub.getAppDataEntity(dataEntityId, appId);
26
+ return findDELogic(deDELogicId, appDataEntity);
27
+ }
28
+
11
29
  /**
12
30
  * 执行实体处理逻辑
13
31
  *
@@ -34,6 +52,36 @@ export async function execDELogic(
34
52
  return deLogic.exec(context, data, params);
35
53
  }
36
54
 
55
+ /**
56
+ * 通过id执行实体逻辑
57
+ * @author lxm
58
+ * @date 2023-08-04 02:49:44
59
+ * @export
60
+ * @param {string} deDELogicId
61
+ * @param {string} dataEntityId
62
+ * @param {IParams} context
63
+ * @param {IData} data
64
+ * @param {IParams} params
65
+ * @return {*} {Promise<unknown>}
66
+ */
67
+ export async function execDELogicById(
68
+ deDELogicId: string,
69
+ dataEntityId: string,
70
+ context: IParams,
71
+ data: IData,
72
+ params: IParams,
73
+ ): Promise<unknown> {
74
+ const deLogic = await findDeLogic(
75
+ deDELogicId,
76
+ dataEntityId,
77
+ context.srfappid,
78
+ );
79
+ if (!deLogic) {
80
+ throw new RuntimeError(`${dataEntityId}找不到实体逻辑${deDELogicId}`);
81
+ }
82
+ return execDELogic(deLogic, context, data, params);
83
+ }
84
+
37
85
  /**
38
86
  * 执行实体方法的实体逻辑并返回对应的response
39
87
  * @author lxm
@@ -9,6 +9,7 @@ import {
9
9
  ISearchFormController,
10
10
  MDCtrlRemoveParams,
11
11
  ISearchBarController,
12
+ MDCtrlLoadParams,
12
13
  } from '../interface';
13
14
  import { calcDeCodeNameById } from '../model';
14
15
  import { ViewEngineBase } from './view-base.engine';
@@ -168,6 +169,10 @@ export class MDViewEngine extends ViewEngineBase {
168
169
  this.copy(args);
169
170
  return null;
170
171
  }
172
+ if (key === 'load') {
173
+ this.load(args);
174
+ return null;
175
+ }
171
176
  return super.call(key, args);
172
177
  }
173
178
 
@@ -206,7 +211,7 @@ export class MDViewEngine extends ViewEngineBase {
206
211
  });
207
212
 
208
213
  if (result === -1) {
209
- throw new RuntimeModelError(this.view.model, `缺少opendata的视图逻辑`);
214
+ ibiz.log.warn(`视图[${this.view.model.codeName}],未配置编辑打开视图`);
210
215
  }
211
216
  }
212
217
 
@@ -267,8 +272,8 @@ export class MDViewEngine extends ViewEngineBase {
267
272
  * @date 2023-05-22 03:17:33
268
273
  * @return {*} {Promise<void>}
269
274
  */
270
- protected async load(): Promise<void> {
271
- await this.xdataControl.load({ isInitialLoad: true });
275
+ protected async load(args: MDCtrlLoadParams = {}): Promise<void> {
276
+ await this.xdataControl.load({ isInitialLoad: true, ...args });
272
277
  }
273
278
 
274
279
  /**
package/src/index.ts CHANGED
@@ -10,6 +10,8 @@ export * from './service';
10
10
  export * from './utils';
11
11
  export * from './controller';
12
12
  export * from './ui-action';
13
+ export * from './ui-logic';
14
+ export * from './de-logic';
13
15
  export * from './engine';
14
16
  export * from './model';
15
17
  export { Application } from './application';
@@ -1,6 +1,7 @@
1
1
  import { IDEPickupViewPanel } from '@ibiz/model-core';
2
2
  import { IPickupViewPanelEvent } from '../../event';
3
3
  import { IPickupViewPanelState } from '../../state';
4
+ import { IViewController } from '../view';
4
5
  import { IControlController } from './i-control.controller';
5
6
 
6
7
  /**
@@ -16,6 +17,15 @@ export interface IPickupViewPanelController
16
17
  IPickupViewPanelState,
17
18
  IPickupViewPanelEvent
18
19
  > {
20
+ /**
21
+ * 选择视图嵌入视图控制器
22
+ *
23
+ * @author zk
24
+ * @date 2023-08-04 08:08:43
25
+ * @type {IViewController}
26
+ * @memberof IPickupViewPanelController
27
+ */
28
+ embedView: IViewController;
19
29
  /**
20
30
  * 获取选中数据
21
31
  *
@@ -2,6 +2,7 @@ import { ITreeExpBar } from '@ibiz/model-core';
2
2
  import { ITreeExpBarEvent } from '../../event';
3
3
  import { ITreeExpBarState } from '../../state';
4
4
  import { IExpBarControlController } from './i-exp-bar-control.controller';
5
+ import { INavViewMsg } from './panel-item';
5
6
 
6
7
  /**
7
8
  * 树导航栏控制器
@@ -15,4 +16,15 @@ export interface ITreeExpBarController
15
16
  ITreeExpBar,
16
17
  ITreeExpBarState,
17
18
  ITreeExpBarEvent
18
- > {}
19
+ > {
20
+ /**
21
+ * 获取导航视图消息
22
+ *
23
+ * @author zk
24
+ * @date 2023-08-04 08:08:27
25
+ * @param {IData[]} data
26
+ * @return {*} {(INavViewMsg | undefined)}
27
+ * @memberof ITreeExpBarController
28
+ */
29
+ getNavViewMsg(data: IData[]): INavViewMsg | undefined;
30
+ }
@@ -13,17 +13,6 @@ import { IMDControlController } from './i-md-control.controller';
13
13
  */
14
14
  export interface ITreeController
15
15
  extends IMDControlController<IDETree, ITreeState, ITreeEvent> {
16
- /**
17
- * 设置展开节点
18
- *
19
- * @author zk
20
- * @date 2023-07-10 08:07:36
21
- * @param {string[]} nodeKey
22
- * @param {boolean} isExpanded
23
- * @memberof ITreeController
24
- */
25
- setExpandedKeys(nodeKeys: string[], isReplace?: boolean): void;
26
-
27
16
  /**
28
17
  * 树节点点击事件
29
18
  *
@@ -38,4 +38,20 @@ export interface IPickupViewPanelEvent extends IControlEvent {
38
38
  event: EventBase;
39
39
  emitArgs: { data: IData[] };
40
40
  };
41
+
42
+ /**
43
+ * 选择视图初始化
44
+ *
45
+ * @author zk
46
+ * @date 2023-08-04 05:08:37
47
+ * @type {{
48
+ * event: EventBase;
49
+ * emitArgs: { data: IViewController };
50
+ * }}
51
+ * @memberof IPickupViewPanelEvent
52
+ */
53
+ onPickUpViewMounted: {
54
+ event: EventBase;
55
+ emitArgs: undefined;
56
+ };
41
57
  }
@@ -11,6 +11,31 @@ export interface IGridState extends IMDControlState {
11
11
  * @type {IGridRowState[]}
12
12
  */
13
13
  rows: IGridRowState[];
14
+
15
+ /**
16
+ * 表格列状态数组
17
+ * 顺序就是列的排序
18
+ * @author lxm
19
+ * @date 2023-08-04 07:08:16
20
+ * @type {IColumnState[]}
21
+ */
22
+ columnStates: IColumnState[];
23
+
24
+ /**
25
+ * 聚合计算的结果
26
+ * @author lxm
27
+ * @date 2023-08-07 04:09:08
28
+ * @type {IData}
29
+ */
30
+ aggResult: IData;
31
+
32
+ /**
33
+ * 远程聚合计算结果
34
+ * @author lxm
35
+ * @date 2023-08-07 05:36:54
36
+ * @type {IData}
37
+ */
38
+ remoteAggResult?: IData;
14
39
  }
15
40
 
16
41
  export interface IGridRowState {
@@ -82,3 +107,36 @@ export interface IGridRowState {
82
107
  */
83
108
  processing: boolean;
84
109
  }
110
+
111
+ /**
112
+ * 表格列状态
113
+ * @author lxm
114
+ * @date 2023-08-04 07:19:02
115
+ * @export
116
+ * @interface IColumnState
117
+ */
118
+ export interface IColumnState {
119
+ /**
120
+ * 列标识,是列模型的codeName
121
+ * @author lxm
122
+ * @date 2023-08-04 07:16:07
123
+ * @type {string}
124
+ */
125
+ key: string;
126
+
127
+ /**
128
+ * 列的中文标题
129
+ * @author lxm
130
+ * @date 2023-08-04 07:17:57
131
+ * @type {string}
132
+ */
133
+ caption: string;
134
+
135
+ /**
136
+ * 显示隐藏
137
+ * @author lxm
138
+ * @date 2023-08-04 07:18:47
139
+ * @type {boolean}
140
+ */
141
+ hidden: boolean;
142
+ }
@@ -19,14 +19,14 @@ export interface ITreeState extends IMDControlState {
19
19
  rootNode: ITreeNodeData;
20
20
 
21
21
  /**
22
- * 展开的节点集合
22
+ * 默认展开的节点集合
23
23
  *
24
24
  * @author zk
25
25
  * @date 2023-07-10 08:07:25
26
26
  * @type {string[]}
27
27
  * @memberof ITreeState
28
28
  */
29
- expandedKeys: string[];
29
+ defaultExpandedKeys: string[];
30
30
 
31
31
  /**
32
32
  * 右键上下文菜单状态
@@ -19,7 +19,9 @@ export function calcLayoutHeightWidth(layoutPos: ILayoutPos): {
19
19
  if (widthMode === 'FULL') {
20
20
  result.width = '100%';
21
21
  } else if (width && width > 0) {
22
- if (widthMode === 'PERCENTAGE') {
22
+ if (width > 0 && width <= 1) {
23
+ result.width = `${width * 100}%`;
24
+ } else if (widthMode === 'PERCENTAGE') {
23
25
  result.width = `${width}%`;
24
26
  } else {
25
27
  result.width = `${width}px`;
@@ -28,7 +30,9 @@ export function calcLayoutHeightWidth(layoutPos: ILayoutPos): {
28
30
  if (heightMode === 'FULL') {
29
31
  result.height = '100%';
30
32
  } else if (height && height > 0) {
31
- if (heightMode === 'PERCENTAGE') {
33
+ if (height > 0 && height <= 1) {
34
+ result.height = `${height * 100}%`;
35
+ } else if (heightMode === 'PERCENTAGE') {
32
36
  result.height = `${height}%`;
33
37
  } else {
34
38
  result.height = `${height}px`;
@@ -223,7 +223,7 @@ export async function openDERedirectView(
223
223
  );
224
224
  throw new RuntimeModelError(
225
225
  appView,
226
- `未找到重定向标识[${rdTag}]或[${deRdTag}][${wfRdTag}]对应视图`,
226
+ `未找到重定向标识[${rdTag}]或[${deRdTag}]或工作流[${wfRdTag}]对应视图`,
227
227
  );
228
228
  }
229
229
  return { ok: true, data: [] };
@@ -248,16 +248,6 @@ export async function calcDERdTag(
248
248
  data: IData,
249
249
  ): Promise<string> {
250
250
  let rdTag = '';
251
- // 重定向视图自定义类别属性
252
- const typeFieldId = rdView.typeAppDEFieldId;
253
- // 自定义重定向
254
- if (typeFieldId) {
255
- const { codeName } = findFieldById(entity, typeFieldId)!;
256
- const value = data[codeName!.toLowerCase()];
257
- if (notNilEmpty(value)) {
258
- return value;
259
- }
260
- }
261
251
  const defView = `${ibiz.env.isMob ? 'MOB' : ''}EDITVIEW`;
262
252
  // 如果流程步骤存在,按照工作流优先
263
253
  const srfWf = params.srfwf;
@@ -268,10 +258,22 @@ export async function calcDERdTag(
268
258
  return `${defView}:${srfWf.toUpperCase()}`;
269
259
  }
270
260
  let typeValue = '';
271
- // 从索引属性获取重定向视图类型
272
- if (entity.indexTypeAppDEFieldId) {
273
- const { codeName } = findFieldById(entity, entity.indexTypeAppDEFieldId)!;
274
- typeValue = data[codeName!.toLowerCase()];
261
+ // 重定向视图自定义类别属性
262
+ const typeFieldId = rdView.typeAppDEFieldId;
263
+ // 自定义重定向
264
+ if (typeFieldId) {
265
+ const { codeName } = findFieldById(entity, typeFieldId)!;
266
+ const value = data[codeName!.toLowerCase()];
267
+ if (notNilEmpty(value)) {
268
+ typeValue = value;
269
+ }
270
+ }
271
+ if (isNilOrEmpty(typeValue)) {
272
+ // 从索引属性获取重定向视图类型
273
+ if (entity.indexTypeAppDEFieldId) {
274
+ const { codeName } = findFieldById(entity, entity.indexTypeAppDEFieldId)!;
275
+ typeValue = data[codeName!.toLowerCase()];
276
+ }
275
277
  }
276
278
  if (isNilOrEmpty(typeValue)) {
277
279
  // 从多表单属性判断重定向视图类型
@@ -281,7 +283,7 @@ export async function calcDERdTag(
281
283
  }
282
284
  }
283
285
  if (notNilEmpty(typeValue)) {
284
- rdTag = `${defView}:${typeValue}`;
286
+ rdTag = `${defView}:${typeValue.toUpperCase()}`;
285
287
  } else {
286
288
  rdTag = `${defView}`;
287
289
  }