@ibiz-template/runtime 0.0.2-beta.0 → 0.0.3-beta.0

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 (76) hide show
  1. package/dist/system/index.system.js +1 -1
  2. package/out/controller/control/grid/grid-field-column.d.ts.map +1 -1
  3. package/out/controller/control/grid/grid-field-column.js +7 -1
  4. package/out/controller/control/tree.d.ts +8 -1
  5. package/out/controller/control/tree.d.ts.map +1 -1
  6. package/out/controller/control/tree.js +18 -2
  7. package/out/controller/control/view-panel.d.ts.map +1 -1
  8. package/out/controller/control/view-panel.js +0 -1
  9. package/out/controller/interface/ability/view/i-tab-exp-view-ability.d.ts +12 -0
  10. package/out/controller/interface/ability/view/i-tab-exp-view-ability.d.ts.map +1 -0
  11. package/out/controller/interface/ability/view/i-tab-exp-view-ability.js +1 -0
  12. package/out/controller/interface/ability/view/index.d.ts +1 -0
  13. package/out/controller/interface/ability/view/index.d.ts.map +1 -1
  14. package/out/controller/interface/ability/view/index.js +1 -0
  15. package/out/controller/interface/event/view/i-tab-exp-view-event.d.ts +12 -0
  16. package/out/controller/interface/event/view/i-tab-exp-view-event.d.ts.map +1 -0
  17. package/out/controller/interface/event/view/i-tab-exp-view-event.js +1 -0
  18. package/out/controller/interface/event/view/index.d.ts +1 -0
  19. package/out/controller/interface/event/view/index.d.ts.map +1 -1
  20. package/out/controller/interface/event/view/index.js +1 -0
  21. package/out/controller/neuron/nerve/view/index.d.ts +1 -0
  22. package/out/controller/neuron/nerve/view/index.d.ts.map +1 -1
  23. package/out/controller/neuron/nerve/view/index.js +1 -0
  24. package/out/controller/neuron/nerve/view/tab-exp-view-nerve.d.ts +26 -0
  25. package/out/controller/neuron/nerve/view/tab-exp-view-nerve.d.ts.map +1 -0
  26. package/out/controller/neuron/nerve/view/tab-exp-view-nerve.js +46 -0
  27. package/out/controller/neuron/neuron/view.d.ts +4 -2
  28. package/out/controller/neuron/neuron/view.d.ts.map +1 -1
  29. package/out/controller/neuron/neuron/view.js +2 -0
  30. package/out/controller/utils/code-list/code-list.d.ts +1 -1
  31. package/out/controller/utils/code-list/code-list.d.ts.map +1 -1
  32. package/out/controller/utils/code-list/code-list.js +7 -1
  33. package/out/controller/view/edit-view.d.ts +3 -11
  34. package/out/controller/view/edit-view.d.ts.map +1 -1
  35. package/out/controller/view/edit-view.js +3 -23
  36. package/out/controller/view/index.d.ts +2 -0
  37. package/out/controller/view/index.d.ts.map +1 -1
  38. package/out/controller/view/index.js +2 -0
  39. package/out/controller/view/main-view.d.ts +45 -0
  40. package/out/controller/view/main-view.d.ts.map +1 -0
  41. package/out/controller/view/main-view.js +50 -0
  42. package/out/controller/view/tab-exp-view.d.ts +28 -0
  43. package/out/controller/view/tab-exp-view.d.ts.map +1 -0
  44. package/out/controller/view/tab-exp-view.js +44 -0
  45. package/out/controller/view/view.d.ts.map +1 -1
  46. package/out/controller/view/view.js +3 -3
  47. package/out/interface/i-modal/i-modal.d.ts +7 -0
  48. package/out/interface/i-modal/i-modal.d.ts.map +1 -1
  49. package/out/service/service/widget/tree-service.d.ts +38 -5
  50. package/out/service/service/widget/tree-service.d.ts.map +1 -1
  51. package/out/service/service/widget/tree-service.js +43 -20
  52. package/out/service/vo/tree-node-data.d.ts +1 -1
  53. package/out/service/vo/tree-node-data.d.ts.map +1 -1
  54. package/out/utils/app-de-ui-action-util/handler/front-ui-action-handler.d.ts.map +1 -1
  55. package/out/utils/app-de-ui-action-util/handler/front-ui-action-handler.js +19 -7
  56. package/package.json +6 -6
  57. package/src/controller/control/grid/grid-field-column.ts +7 -1
  58. package/src/controller/control/tree.ts +19 -3
  59. package/src/controller/control/view-panel.ts +0 -1
  60. package/src/controller/interface/ability/view/i-tab-exp-view-ability.ts +12 -0
  61. package/src/controller/interface/ability/view/index.ts +1 -0
  62. package/src/controller/interface/event/view/i-tab-exp-view-event.ts +12 -0
  63. package/src/controller/interface/event/view/index.ts +1 -0
  64. package/src/controller/neuron/nerve/view/index.ts +1 -0
  65. package/src/controller/neuron/nerve/view/tab-exp-view-nerve.ts +52 -0
  66. package/src/controller/neuron/neuron/view.ts +6 -0
  67. package/src/controller/utils/code-list/code-list.ts +7 -2
  68. package/src/controller/view/edit-view.ts +3 -23
  69. package/src/controller/view/index.ts +2 -0
  70. package/src/controller/view/main-view.ts +76 -0
  71. package/src/controller/view/tab-exp-view.ts +55 -0
  72. package/src/controller/view/view.ts +6 -3
  73. package/src/interface/i-modal/i-modal.ts +8 -0
  74. package/src/service/service/widget/tree-service.ts +76 -23
  75. package/src/service/vo/tree-node-data.ts +3 -1
  76. package/src/utils/app-de-ui-action-util/handler/front-ui-action-handler.ts +33 -20
@@ -0,0 +1,76 @@
1
+ import { ViewModel } from '@ibiz-template/model';
2
+ import { EntityService } from '../../service';
3
+ import { ViewController } from './view';
4
+
5
+ /**
6
+ * 主数据视图控制器
7
+ *
8
+ * @export
9
+ * @class MainViewController
10
+ * @extends {ViewController<T>}
11
+ * @template T
12
+ */
13
+ export class MainViewController<
14
+ T extends ViewModel = ViewModel,
15
+ > extends ViewController<T> {
16
+ /**
17
+ * 实体服务
18
+ *
19
+ * @author lxm
20
+ * @date 2022-09-29 15:09:46
21
+ * @protected
22
+ * @type {EntityService}
23
+ */
24
+ protected entityService?: EntityService;
25
+
26
+ /**
27
+ * 主数据
28
+ *
29
+ * @type {IData}
30
+ * @memberof TabExpViewController
31
+ */
32
+ mainData?: IData;
33
+
34
+ /**
35
+ * 加载主数据
36
+ *
37
+ * @returns {*} {Promise<IData>}
38
+ * @memberof TabExpViewController
39
+ */
40
+ public async load(): Promise<IData> {
41
+ // 初始化实体服务
42
+ if (!this.entityService) {
43
+ this.entityService = await this.app.es.getService(
44
+ this.model.appEntity.codeName,
45
+ this.context,
46
+ );
47
+ }
48
+ const res = await this.entityService.exec('Get', this.context, this.params);
49
+ this.mainData = res.data;
50
+ this.calcCaption(res.data);
51
+ if (this.toolbarState) {
52
+ this.toolbarState.update(res.data);
53
+ }
54
+ return res.data;
55
+ }
56
+
57
+ /**
58
+ * 设置视图标题
59
+ *
60
+ * @author lxm
61
+ * @date 2022-08-31 16:08:49
62
+ * @param {string} caption
63
+ */
64
+ calcCaption(data: IData): void {
65
+ // 全局关闭信息栏或者全局开启信息栏但是视图不显示信息栏时,不设置信息栏标题
66
+ if (!ibiz.config.enableDataInfoBar || !this.model.showDataInfoBar) {
67
+ return;
68
+ }
69
+ const majorText = data[this.model.appEntity.textName];
70
+ if (majorText) {
71
+ this.setCaption(`${this.model.caption} - ${majorText}`);
72
+ } else if (!this.context[this.model.appEntity.deName]) {
73
+ this.setCaption(`${this.model.caption} - 新建`);
74
+ }
75
+ }
76
+ }
@@ -0,0 +1,55 @@
1
+ import { TabExpViewModel } from '@ibiz-template/model';
2
+ import { createUUID } from 'qx-util';
3
+ import { ViewMode } from '../../constant';
4
+ import { TabExpViewNerve } from '../neuron';
5
+ import { MainViewController } from './main-view';
6
+
7
+ /**
8
+ * 分页导航视图控制器
9
+ *
10
+ * @author lxm
11
+ * @date 2022-09-08 16:09:49
12
+ * @export
13
+ * @class TabExpViewController
14
+ * @extends {MainViewController}
15
+ */
16
+ export class TabExpViewController<
17
+ T extends TabExpViewModel = TabExpViewModel,
18
+ > extends MainViewController<T> {
19
+ declare nerve: TabExpViewNerve;
20
+
21
+ /**
22
+ * 分页面板绘制参数
23
+ *
24
+ * @memberof TabExpViewController
25
+ */
26
+ tabExpPages: {
27
+ [key: string]: {
28
+ key: string;
29
+ };
30
+ } = {};
31
+
32
+ protected createNerve(): TabExpViewNerve {
33
+ return new TabExpViewNerve(this);
34
+ }
35
+
36
+ protected async onInit(): Promise<void> {
37
+ await super.onInit();
38
+
39
+ // 初始化drPages
40
+ const { tabExpPages } = this.model.tabExpPanel;
41
+ if (tabExpPages.length) {
42
+ tabExpPages.forEach(page => {
43
+ this.tabExpPages[page.name] = {
44
+ key: createUUID(),
45
+ };
46
+ });
47
+ }
48
+
49
+ this.nerve.self.evt.on('mounted', () => {
50
+ if (this.modal.mode !== ViewMode.EMBED && this.model.source.loadDefault) {
51
+ this.load();
52
+ }
53
+ });
54
+ }
55
+ }
@@ -1,4 +1,4 @@
1
- import { IBizContext, RuntimeError } from '@ibiz-template/core';
1
+ import { IBizContext } from '@ibiz-template/core';
2
2
  import {
3
3
  DefectModelError,
4
4
  IPSAppViewLogic,
@@ -347,12 +347,15 @@ export class ViewController<T extends ViewModel = ViewModel> {
347
347
  event: MouseEvent,
348
348
  ): Promise<void> {
349
349
  if (!item.getPSAppViewUIAction()) {
350
- throw new DefectModelError(item, '菜单项没有配置界面行为!');
350
+ throw new DefectModelError(item, '没有配置界面行为!');
351
351
  }
352
352
  const viewLogicKey = `${item.getPSAppViewUIAction()!.name}_click`;
353
353
  const appViewLogic = this.model.source.findPSAppViewLogic(viewLogicKey);
354
354
  if (!appViewLogic) {
355
- throw new RuntimeError('没有找到对应的视图逻辑');
355
+ throw new DefectModelError(
356
+ item.getPSAppViewUIAction()!,
357
+ '没有找到对应的视图逻辑',
358
+ );
356
359
  }
357
360
  return this.executeViewLogic(appViewLogic, this.getData(), event);
358
361
  }
@@ -18,6 +18,14 @@ export interface IModal {
18
18
  */
19
19
  mode: ViewMode;
20
20
 
21
+ /**
22
+ * 路由层级
23
+ *
24
+ * @type {number}
25
+ * @memberof IModal
26
+ */
27
+ level?: number;
28
+
21
29
  /**
22
30
  * 关闭模态窗
23
31
  *
@@ -1,12 +1,37 @@
1
1
  import {
2
2
  IPSDETreeCodeListNode,
3
3
  IPSDETreeDataSetNode,
4
+ IPSDETreeNode,
4
5
  IPSDETreeStaticNode,
5
6
  TreeModel,
6
7
  } from '@ibiz-template/model';
7
8
  import { TreeNodeData } from '../../vo/tree-node-data';
8
9
  import { MDControlService } from './md-control-service';
9
10
 
11
+ interface TreeFetchOpts {
12
+ /**
13
+ * 是否有过滤搜索
14
+ *
15
+ * @type {boolean}
16
+ * @memberof TreeFetchOpts
17
+ */
18
+ hasQuery: boolean;
19
+ /**
20
+ * 上下文
21
+ *
22
+ * @type {IContext}
23
+ * @memberof TreeFetchOpts
24
+ */
25
+ context: IContext;
26
+ /**
27
+ * 视图参数
28
+ *
29
+ * @type {IParams}
30
+ * @memberof TreeFetchOpts
31
+ */
32
+ params: IParams;
33
+ }
34
+
10
35
  /**
11
36
  * 树部件服务
12
37
  *
@@ -36,10 +61,13 @@ export class TreeService extends MDControlService<TreeModel> {
36
61
  * @returns {*}
37
62
  * @memberof TreeService
38
63
  */
39
- async fetchChildNodes(parentNode?: TreeNodeData, hasQuery: boolean = false) {
64
+ async fetchChildNodes(
65
+ parentNode: TreeNodeData | undefined,
66
+ opts: TreeFetchOpts,
67
+ ) {
40
68
  const childNodeModels = this.model.getChildNodes(
41
69
  parentNode?.nodeId || this.model.rootNode.id,
42
- hasQuery,
70
+ opts.hasQuery,
43
71
  );
44
72
 
45
73
  if (childNodeModels.length === 0) {
@@ -50,20 +78,21 @@ export class TreeService extends MDControlService<TreeModel> {
50
78
  childNodeModels.map(async childNode => {
51
79
  if (childNode.treeNodeType === 'STATIC') {
52
80
  const nodeData = await this.getStaticNodeData(
53
- childNode as IPSDETreeStaticNode,
81
+ childNode.source as IPSDETreeStaticNode,
82
+ opts,
54
83
  );
55
84
  return [nodeData];
56
85
  }
57
86
  if (childNode.treeNodeType === 'DE') {
58
87
  return this.getDENodeDatas(
59
- childNode as IPSDETreeDataSetNode,
60
- hasQuery,
88
+ childNode.source as IPSDETreeDataSetNode,
89
+ opts,
61
90
  );
62
91
  }
63
92
  if (childNode.treeNodeType === 'CODELIST') {
64
93
  return this.getCodeListNodeDatas(
65
- childNode as IPSDETreeCodeListNode,
66
- hasQuery,
94
+ childNode.source as IPSDETreeCodeListNode,
95
+ opts,
67
96
  );
68
97
  }
69
98
  return null;
@@ -82,6 +111,22 @@ export class TreeService extends MDControlService<TreeModel> {
82
111
  // todo 查询回来之后,看是否默认打开,默认展开继续递归加载子节点。
83
112
  }
84
113
 
114
+ getBaseNodeData(nodeModel: IPSDETreeNode, opts: TreeFetchOpts) {
115
+ const nodeData: TreeNodeData = {
116
+ nodeId: nodeModel.nodeType,
117
+ id: nodeModel.nodeType,
118
+ text: '',
119
+ leaf:
120
+ this.model.getChildNodes(nodeModel.nodeType, opts.hasQuery).length ===
121
+ 0,
122
+ };
123
+ if (nodeData.leaf === false) {
124
+ nodeData.children = [];
125
+ // nodeData.loading = false;
126
+ }
127
+ return nodeData;
128
+ }
129
+
85
130
  /**
86
131
  * 获取静态节点数据
87
132
  *
@@ -93,24 +138,17 @@ export class TreeService extends MDControlService<TreeModel> {
93
138
  */
94
139
  protected async getStaticNodeData(
95
140
  nodeModel: IPSDETreeStaticNode,
96
- hasQuery: boolean = false,
141
+ opts: TreeFetchOpts,
97
142
  ): Promise<TreeNodeData> {
98
- const treeData: TreeNodeData = {
99
- nodeId: nodeModel.nodeType,
100
- id: nodeModel.nodeType,
101
- text: nodeModel.text,
102
- leaf: true,
103
- };
104
-
105
- treeData.leaf =
106
- this.model.getChildNodes(treeData.nodeId, hasQuery).length === 0;
143
+ const nodeData: TreeNodeData = this.getBaseNodeData(nodeModel, opts);
144
+ nodeData.text = nodeModel.text;
107
145
 
108
146
  // todo 仅展开首节点
109
147
  if (nodeModel.expanded) {
110
- treeData.children = await this.fetchChildNodes(treeData, hasQuery);
148
+ nodeData.children = await this.fetchChildNodes(nodeData, opts);
111
149
  }
112
150
 
113
- return treeData;
151
+ return nodeData;
114
152
  }
115
153
 
116
154
  /**
@@ -123,20 +161,35 @@ export class TreeService extends MDControlService<TreeModel> {
123
161
  */
124
162
  protected async getDENodeDatas(
125
163
  nodeModel: IPSDETreeDataSetNode,
126
- _hasQuery: boolean = false,
164
+ opts: TreeFetchOpts,
127
165
  ) {
128
166
  const appde = nodeModel.getPSAppDataEntity();
129
167
  await appde!.fill();
130
168
  const methodName = nodeModel.getPSAppDEDataSet()!.codeName;
131
169
 
132
170
  const service = await this.app.es.getService(appde!.codeName);
133
- const response = await service.exec(methodName, {});
134
- console.log(response);
171
+ const response = await service.exec(methodName, opts.context, opts.params);
172
+ const baseNodeData: TreeNodeData = this.getBaseNodeData(nodeModel, opts);
173
+ if (response.data.length) {
174
+ const nodeDatas = response.data.map((item: IData) => {
175
+ return { ...baseNodeData, id: item.srfkey, text: item.srfmajortext };
176
+ });
177
+ return nodeDatas;
178
+ }
179
+ return [];
135
180
  }
136
181
 
182
+ /**
183
+ * 获取代码表节点数据
184
+ *
185
+ * @protected
186
+ * @param {IPSDETreeCodeListNode} _nodeModel
187
+ * @param {TreeFetchOpts} _opts
188
+ * @memberof TreeService
189
+ */
137
190
  protected async getCodeListNodeDatas(
138
191
  _nodeModel: IPSDETreeCodeListNode,
139
- _hasQuery: boolean = false,
192
+ _opts: TreeFetchOpts,
140
193
  ) {
141
194
  // todo 代码表查询
142
195
  }
@@ -30,7 +30,7 @@ export interface TreeNodeData {
30
30
  text: string;
31
31
 
32
32
  /**
33
- * 是否没有子节点
33
+ * 是否是叶子节点(没有子节点的节点)
34
34
  *
35
35
  * @type {boolean}
36
36
  * @memberof TreeNodeData
@@ -44,4 +44,6 @@ export interface TreeNodeData {
44
44
  * @memberof TreeNodeData
45
45
  */
46
46
  children?: TreeNodeData[];
47
+
48
+ // todo 其他界面绘制相关属性
47
49
  }
@@ -1,5 +1,5 @@
1
1
  import { IBizContext } from '@ibiz-template/core';
2
- import { IPSAppDEUIAction } from '@ibiz-template/model';
2
+ import { IPSAppDEUIAction, UnsupportedModelError } from '@ibiz-template/model';
3
3
  import { OpenAppViewCommand } from '../../../command';
4
4
  import { IUIActionResult } from '../../../interface';
5
5
  import { UIActionHandler } from './ui-action-handler';
@@ -21,26 +21,39 @@ export class FrontUIActionHandler extends UIActionHandler {
21
21
  params: IParams,
22
22
  opts?: IData | undefined,
23
23
  ): Promise<IUIActionResult> {
24
- const frontPSAppView = action.getFrontPSAppView();
25
- if (!frontPSAppView) {
26
- throw new Error('未配置打开视图');
24
+ switch (action.frontProcessType) {
25
+ case 'OPENHTMLPAGE':
26
+ window.open(action.htmlPageUrl, '_blank');
27
+ break;
28
+ case 'TOP':
29
+ case 'WIZARD': {
30
+ const frontPSAppView = action.getFrontPSAppView();
31
+ if (!frontPSAppView) {
32
+ throw new Error('未配置打开视图');
33
+ }
34
+ await frontPSAppView.fill(true);
35
+ // 处理参数
36
+ const { resultContext, resultParams } = await this.handleParams(
37
+ action,
38
+ context,
39
+ data,
40
+ params,
41
+ );
42
+ await ibiz.commands.execute(
43
+ OpenAppViewCommand.TAG,
44
+ frontPSAppView,
45
+ resultContext,
46
+ resultParams,
47
+ opts,
48
+ );
49
+ break;
50
+ }
51
+ default:
52
+ throw new UnsupportedModelError(
53
+ action,
54
+ `未支持的前台处理模式[${action.frontProcessType}]`,
55
+ );
27
56
  }
28
- await frontPSAppView.fill(true);
29
- // 处理参数
30
- const { resultContext, resultParams } = await this.handleParams(
31
- action,
32
- context,
33
- data,
34
- params,
35
- );
36
- await ibiz.commands.execute(
37
- OpenAppViewCommand.TAG,
38
- frontPSAppView,
39
- resultContext,
40
- resultParams,
41
- opts,
42
- );
43
-
44
57
  return {};
45
58
  }
46
59
  }