@ibiz-template/runtime 0.4.17-dev.0 → 0.5.0-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 (146) hide show
  1. package/dist/index.esm.js +972 -529
  2. package/dist/index.system.min.js +2 -2
  3. package/out/controller/common/control/md-control.controller.d.ts.map +1 -1
  4. package/out/controller/common/control/md-control.controller.js +7 -2
  5. package/out/controller/control/form/form-detail/form-detail/form-detail.controller.d.ts.map +1 -1
  6. package/out/controller/control/form/form-detail/form-detail/form-detail.controller.js +2 -6
  7. package/out/controller/control/grid/grid/grid-column.controller.d.ts +2 -1
  8. package/out/controller/control/grid/grid/grid-column.controller.d.ts.map +1 -1
  9. package/out/controller/control/grid/grid/grid.controller.d.ts +17 -1
  10. package/out/controller/control/grid/grid/grid.controller.d.ts.map +1 -1
  11. package/out/controller/control/grid/grid/grid.controller.js +32 -0
  12. package/out/controller/control/kanban/kanban.controller.d.ts +2 -2
  13. package/out/controller/control/kanban/kanban.controller.d.ts.map +1 -1
  14. package/out/controller/control/kanban/kanban.controller.js +1 -1
  15. package/out/controller/control/md-ctrl/md-ctrl.controller.js +1 -1
  16. package/out/controller/control/search-bar/index.d.ts +1 -0
  17. package/out/controller/control/search-bar/index.d.ts.map +1 -1
  18. package/out/controller/control/search-bar/index.js +1 -0
  19. package/out/controller/control/search-bar/search-bar.controller.d.ts +59 -2
  20. package/out/controller/control/search-bar/search-bar.controller.d.ts.map +1 -1
  21. package/out/controller/control/search-bar/search-bar.controller.js +142 -9
  22. package/out/controller/control/search-bar/search-bar.service.d.ts +78 -0
  23. package/out/controller/control/search-bar/search-bar.service.d.ts.map +1 -0
  24. package/out/controller/control/search-bar/search-bar.service.js +130 -0
  25. package/out/controller/control/tree/tree.controller.d.ts +27 -1
  26. package/out/controller/control/tree/tree.controller.d.ts.map +1 -1
  27. package/out/controller/control/tree/tree.controller.js +45 -7
  28. package/out/controller/control/tree/tree.service.d.ts +1 -1
  29. package/out/controller/control/tree/tree.service.d.ts.map +1 -1
  30. package/out/controller/control/tree-grid-ex/index.d.ts +2 -0
  31. package/out/controller/control/tree-grid-ex/index.d.ts.map +1 -1
  32. package/out/controller/control/tree-grid-ex/index.js +2 -0
  33. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.d.ts +4 -0
  34. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.d.ts.map +1 -0
  35. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.js +3 -0
  36. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.d.ts +93 -0
  37. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.d.ts.map +1 -0
  38. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.js +89 -0
  39. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.d.ts +13 -0
  40. 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 -0
  41. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.js +11 -0
  42. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.d.ts +31 -0
  43. 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 -0
  44. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.js +61 -0
  45. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.d.ts +26 -0
  46. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.d.ts.map +1 -0
  47. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.js +26 -0
  48. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.d.ts +48 -46
  49. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.d.ts.map +1 -1
  50. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.js +85 -115
  51. package/out/controller/control/tree-grid-ex/tree-grid-ex.service.d.ts +8 -58
  52. package/out/controller/control/tree-grid-ex/tree-grid-ex.service.d.ts.map +1 -1
  53. package/out/controller/control/tree-grid-ex/tree-grid-ex.service.js +5 -135
  54. package/out/interface/controller/controller/control/i-grid.controller.d.ts +8 -0
  55. package/out/interface/controller/controller/control/i-grid.controller.d.ts.map +1 -1
  56. package/out/interface/controller/controller/control/i-tree-grid-ex.controller.d.ts +7 -7
  57. package/out/interface/controller/controller/control/i-tree-grid-ex.controller.d.ts.map +1 -1
  58. package/out/interface/controller/controller/control/i-tree.controller.d.ts +1 -1
  59. package/out/interface/controller/controller/control/i-tree.controller.d.ts.map +1 -1
  60. package/out/interface/controller/controller/control/index.d.ts +1 -0
  61. package/out/interface/controller/controller/control/index.d.ts.map +1 -1
  62. package/out/interface/controller/controller/control/index.js +1 -0
  63. package/out/interface/controller/controller/control/tree-grid-ex-column/i-tree-grid-ex-column.controller.d.ts +12 -0
  64. package/out/interface/controller/controller/control/tree-grid-ex-column/i-tree-grid-ex-column.controller.d.ts.map +1 -0
  65. package/out/interface/controller/controller/control/tree-grid-ex-column/i-tree-grid-ex-column.controller.js +1 -0
  66. package/out/interface/controller/controller/control/tree-grid-ex-column/index.d.ts +2 -0
  67. package/out/interface/controller/controller/control/tree-grid-ex-column/index.d.ts.map +1 -0
  68. package/out/interface/controller/controller/control/tree-grid-ex-column/index.js +1 -0
  69. package/out/interface/controller/event/control/i-tree-grid-ex.event.d.ts +2 -2
  70. package/out/interface/controller/event/control/i-tree-grid-ex.event.d.ts.map +1 -1
  71. package/out/interface/controller/state/control/i-search-bar.state.d.ts +64 -0
  72. package/out/interface/controller/state/control/i-search-bar.state.d.ts.map +1 -1
  73. package/out/interface/controller/state/control/i-tree-grid-ex.state.d.ts +31 -23
  74. package/out/interface/controller/state/control/i-tree-grid-ex.state.d.ts.map +1 -1
  75. package/out/interface/controller/state/control/i-tree.state.d.ts +8 -1
  76. package/out/interface/controller/state/control/i-tree.state.d.ts.map +1 -1
  77. package/out/interface/provider/i-tree-grid-ex-column.provider.d.ts +31 -0
  78. package/out/interface/provider/i-tree-grid-ex-column.provider.d.ts.map +1 -0
  79. package/out/interface/provider/i-tree-grid-ex-column.provider.js +1 -0
  80. package/out/interface/provider/index.d.ts +1 -0
  81. package/out/interface/provider/index.d.ts.map +1 -1
  82. package/out/interface/service/service/i-app-de.service.d.ts +10 -0
  83. package/out/interface/service/service/i-app-de.service.d.ts.map +1 -1
  84. package/out/register/helper/index.d.ts +1 -0
  85. package/out/register/helper/index.d.ts.map +1 -1
  86. package/out/register/helper/index.js +1 -0
  87. package/out/register/helper/tree-grid-ex-column-register.d.ts +23 -0
  88. package/out/register/helper/tree-grid-ex-column-register.d.ts.map +1 -0
  89. package/out/register/helper/tree-grid-ex-column-register.js +50 -0
  90. package/out/service/de-service-util.d.ts +3 -2
  91. package/out/service/de-service-util.d.ts.map +1 -1
  92. package/out/service/de-service-util.js +11 -10
  93. package/out/service/dto/method.dto.d.ts +2 -3
  94. package/out/service/dto/method.dto.d.ts.map +1 -1
  95. package/out/service/dto/method.dto.js +3 -4
  96. package/out/service/service/entity/de.service.d.ts +10 -0
  97. package/out/service/service/entity/de.service.d.ts.map +1 -1
  98. package/out/service/service/entity/de.service.js +22 -1
  99. package/out/service/service/entity/method/method.d.ts.map +1 -1
  100. package/out/service/service/entity/method/method.js +1 -12
  101. package/out/service/vo/tree-node-data/tree-data-set-node-data.d.ts.map +1 -1
  102. package/out/service/vo/tree-node-data/tree-data-set-node-data.js +51 -0
  103. package/out/service/vo/tree-node-data/tree-node-data.d.ts +2 -0
  104. package/out/service/vo/tree-node-data/tree-node-data.d.ts.map +1 -1
  105. package/out/service/vo/tree-node-data/tree-node-data.js +1 -0
  106. package/package.json +3 -3
  107. package/src/controller/common/control/md-control.controller.ts +7 -2
  108. package/src/controller/control/form/form-detail/form-detail/form-detail.controller.ts +2 -6
  109. package/src/controller/control/grid/grid/grid-column.controller.ts +4 -1
  110. package/src/controller/control/grid/grid/grid.controller.ts +34 -0
  111. package/src/controller/control/kanban/kanban.controller.ts +2 -2
  112. package/src/controller/control/md-ctrl/md-ctrl.controller.ts +1 -1
  113. package/src/controller/control/search-bar/index.ts +1 -0
  114. package/src/controller/control/search-bar/search-bar.controller.ts +178 -10
  115. package/src/controller/control/search-bar/search-bar.service.ts +161 -0
  116. package/src/controller/control/tree/tree.controller.ts +58 -11
  117. package/src/controller/control/tree/tree.service.ts +3 -1
  118. package/src/controller/control/tree-grid-ex/index.ts +2 -0
  119. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/index.ts +3 -0
  120. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.ts +121 -0
  121. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.ts +13 -0
  122. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.ts +76 -0
  123. package/src/controller/control/tree-grid-ex/tree-grid-ex-row.state.ts +37 -0
  124. package/src/controller/control/tree-grid-ex/tree-grid-ex.controller.ts +116 -140
  125. package/src/controller/control/tree-grid-ex/tree-grid-ex.service.ts +10 -165
  126. package/src/interface/controller/controller/control/i-grid.controller.ts +9 -0
  127. package/src/interface/controller/controller/control/i-tree-grid-ex.controller.ts +11 -12
  128. package/src/interface/controller/controller/control/i-tree.controller.ts +5 -2
  129. package/src/interface/controller/controller/control/index.ts +1 -0
  130. package/src/interface/controller/controller/control/tree-grid-ex-column/i-tree-grid-ex-column.controller.ts +12 -0
  131. package/src/interface/controller/controller/control/tree-grid-ex-column/index.ts +1 -0
  132. package/src/interface/controller/event/control/i-tree-grid-ex.event.ts +2 -2
  133. package/src/interface/controller/state/control/i-search-bar.state.ts +73 -0
  134. package/src/interface/controller/state/control/i-tree-grid-ex.state.ts +27 -24
  135. package/src/interface/controller/state/control/i-tree.state.ts +9 -1
  136. package/src/interface/provider/i-tree-grid-ex-column.provider.ts +39 -0
  137. package/src/interface/provider/index.ts +1 -0
  138. package/src/interface/service/service/i-app-de.service.ts +13 -0
  139. package/src/register/helper/index.ts +1 -0
  140. package/src/register/helper/tree-grid-ex-column-register.ts +67 -0
  141. package/src/service/de-service-util.ts +6 -4
  142. package/src/service/dto/method.dto.ts +4 -5
  143. package/src/service/service/entity/de.service.ts +26 -1
  144. package/src/service/service/entity/method/method.ts +1 -13
  145. package/src/service/vo/tree-node-data/tree-data-set-node-data.ts +53 -0
  146. package/src/service/vo/tree-node-data/tree-node-data.ts +6 -0
@@ -581,10 +581,10 @@ export class KanbanController
581
581
  /**
582
582
  * 打开批操作工具栏
583
583
  *
584
- * @param {string} groupKey
584
+ * @param {string | number} groupKey
585
585
  * @memberof KanbanController
586
586
  */
587
- openBatch(groupKey: string): void {
587
+ openBatch(groupKey: string | number): void {
588
588
  this.state.selectGroupKey = groupKey;
589
589
  this.state.batching = true;
590
590
  this.state.selectedData = [];
@@ -84,7 +84,7 @@ export class MDCtrlController
84
84
  async loadMore(): Promise<void> {
85
85
  // 修复加载更多时,数据未加载成功 但是还是会继续加载的问题
86
86
  if (this.state.total > this.state.items.length && !this.state.isLoading) {
87
- await this.load({ isLoadMore: true });
87
+ await this.load({ isLoadMore: true, silent: true });
88
88
  }
89
89
  }
90
90
 
@@ -1 +1,2 @@
1
1
  export * from './search-bar.controller';
2
+ export { SearchBarFilterController } from './search-bar-filter.controller';
@@ -1,4 +1,4 @@
1
- import { recursiveIterate } from '@ibiz-template/core';
1
+ import { mergeInLeft, recursiveIterate } from '@ibiz-template/core';
2
2
  import { IAppDataEntity, ISearchBar } from '@ibiz/model-core';
3
3
  import { isNil } from 'ramda';
4
4
  import {
@@ -6,10 +6,13 @@ import {
6
6
  ISearchBarEvent,
7
7
  ISearchBarController,
8
8
  IFilterNode,
9
+ IBackendSearchBarGroup,
10
+ IGridController,
9
11
  } from '../../../interface';
10
12
  import { convertNavData, ScriptFactory } from '../../../utils';
11
13
  import { ControlController } from '../../common';
12
14
  import { SearchBarFilterController } from './search-bar-filter.controller';
15
+ import { SearchBarService } from './search-bar.service';
13
16
 
14
17
  /**
15
18
  * 搜索栏控制器
@@ -40,6 +43,40 @@ export class SearchBarController
40
43
  */
41
44
  filterControllers: SearchBarFilterController[] = [];
42
45
 
46
+ /**
47
+ * 搜索栏服务
48
+ * @author lxm
49
+ * @date 2023-05-15 11:03:34
50
+ * @type {EditFormService}
51
+ */
52
+ service!: SearchBarService;
53
+
54
+ /**
55
+ * 当前编辑的分组
56
+ * @return {*}
57
+ * @author: zhujiamin
58
+ * @Date: 2023-12-20 18:06:37
59
+ */
60
+ currentEditGroup: IBackendSearchBarGroup | null = null;
61
+
62
+ /**
63
+ * 是否为后台分组
64
+ * @return {*}
65
+ * @author: zhujiamin
66
+ * @Date: 2023-12-21 10:17:43
67
+ */
68
+ isBackendSearchGroup = true;
69
+
70
+ /**
71
+ * 表格控制器
72
+ * @return {*}
73
+ * @author: zhujiamin
74
+ * @Date: 2023-12-22 13:50:16
75
+ */
76
+ get grid(): IGridController | undefined {
77
+ return this.ctx.getController('grid') as IGridController;
78
+ }
79
+
43
80
  /**
44
81
  * 实体模型
45
82
  * @author lxm
@@ -60,6 +97,8 @@ export class SearchBarController
60
97
  if (this.model.enableFilter) {
61
98
  this.resetFilter();
62
99
  }
100
+ this.state.searchBarGroups = [];
101
+ this.state.selectedSearchGroupItem = null;
63
102
  }
64
103
 
65
104
  protected async onCreated(): Promise<void> {
@@ -73,7 +112,14 @@ export class SearchBarController
73
112
  this.calcQuickSearchPlaceholder();
74
113
  }
75
114
 
115
+ // 实例部件服务
116
+ if (this.isBackendSearchGroup && this.view.model.codeName) {
117
+ this.service = new SearchBarService(this.model, this.view.model.codeName);
118
+ await this.service.init(this.context);
119
+ }
120
+
76
121
  await this.initSearchBarFilters();
122
+ await this.initSearBarGroups();
77
123
  }
78
124
 
79
125
  /**
@@ -144,7 +190,10 @@ export class SearchBarController
144
190
  params.query = this.state.query;
145
191
  }
146
192
  // 快速分组
147
- if (this.state.selectedGroupItem?.data) {
193
+ if (
194
+ this.state.selectedGroupItem?.data &&
195
+ typeof this.state.selectedGroupItem.data === 'string'
196
+ ) {
148
197
  const navParams = ScriptFactory.execSingleLine(
149
198
  this.state.selectedGroupItem.data,
150
199
  ) as IData;
@@ -167,13 +216,7 @@ export class SearchBarController
167
216
  * @date 2023-10-16 03:52:44
168
217
  */
169
218
  resetFilter(): void {
170
- this.state.filterNodes = [
171
- {
172
- leaf: false,
173
- logicType: 'AND',
174
- children: [{ leaf: true, field: null, valueOP: null, value: null }],
175
- },
176
- ];
219
+ this.state.filterNodes = this.getOriginFilterNodes();
177
220
  this.evt.emit('onSearch', undefined);
178
221
  }
179
222
 
@@ -202,7 +245,7 @@ export class SearchBarController
202
245
  * @date 2023-10-13 05:53:35
203
246
  * @return {*} {IData}
204
247
  */
205
- calcFilters(): IData | undefined {
248
+ calcFilters(): IData[] | undefined {
206
249
  if (!this.model.enableFilter) {
207
250
  return;
208
251
  }
@@ -248,4 +291,129 @@ export class SearchBarController
248
291
  value: node.value,
249
292
  };
250
293
  }
294
+
295
+ /**
296
+ * 获取初始过滤项树节点数据集合
297
+ * @return {*}
298
+ * @author: zhujiamin
299
+ * @Date: 2023-12-21 17:29:47
300
+ */
301
+ protected getOriginFilterNodes(): IFilterNode[] {
302
+ return [
303
+ {
304
+ leaf: false,
305
+ logicType: 'AND',
306
+ children: [{ leaf: true, field: null, valueOP: null, value: null }],
307
+ },
308
+ ];
309
+ }
310
+
311
+ /**
312
+ * 初始化搜索栏分组项(获取后台分组清单并合并模型)
313
+ * @return {*}
314
+ * @author: zhujiamin
315
+ * @Date: 2023-12-19 14:43:46
316
+ */
317
+ async initSearBarGroups(): Promise<void> {
318
+ this.state.searchBarGroups = [];
319
+ if (this.isBackendSearchGroup) {
320
+ if (this.model.searchBarGroups && this.model.searchBarGroups.length > 0) {
321
+ this.state.searchBarGroups = this.model.searchBarGroups.map(item => ({
322
+ ...item,
323
+ show: true,
324
+ saved: false,
325
+ searchGroupData: {},
326
+ }));
327
+ }
328
+ // 请求并合并searchBarGroups ,这里只能拿到清单
329
+ const res = await this.service.fetch();
330
+ if (res.ok) {
331
+ res.data.forEach((group: IData) => {
332
+ // 已经存在的覆盖,否则新增
333
+ const existGroup = this.state.searchBarGroups.find(
334
+ item => item.id === group.id,
335
+ );
336
+ if (existGroup) {
337
+ mergeInLeft(existGroup, group);
338
+ existGroup.saved = true;
339
+ } else {
340
+ this.state.searchBarGroups.push({
341
+ ...group,
342
+ appId: this.context.srfappid,
343
+ show: true,
344
+ saved: true,
345
+ searchGroupData: {},
346
+ } as IBackendSearchBarGroup);
347
+ }
348
+ });
349
+ }
350
+ }
351
+ }
352
+
353
+ /**
354
+ * 处理保存
355
+ * @return {*}
356
+ * @author: zhujiamin
357
+ * @Date: 2023-12-19 16:17:15
358
+ */
359
+ async handleSave(): Promise<void> {
360
+ if (this.grid && this.state.selectedSearchGroupItem) {
361
+ const filters = this.calcFilters();
362
+ const saveParams = {
363
+ filternodes: this.state.filterNodes,
364
+ searchconds: filters,
365
+ sort: this.grid.state.sortQuery,
366
+ columnstates: this.grid.state.columnStates,
367
+ show: this.state.selectedSearchGroupItem.show,
368
+ };
369
+ // 根据是否保存过决定是更新还是新建
370
+ if (this.state.selectedSearchGroupItem.saved) {
371
+ await this.service.update(this.state.selectedSearchGroupItem.id!, {
372
+ theme_model: saveParams,
373
+ show: this.state.selectedSearchGroupItem.show,
374
+ });
375
+ ibiz.message.success('保存成功');
376
+ } else {
377
+ const res = await this.service.createWithParams(
378
+ this.state.selectedSearchGroupItem.id!,
379
+ saveParams,
380
+ );
381
+ if (res.ok) {
382
+ const savedGroup = this.state.searchBarGroups.find(
383
+ group => group.id === res.data.id,
384
+ );
385
+ if (savedGroup) {
386
+ savedGroup.saved = true;
387
+ }
388
+ ibiz.message.success('保存成功');
389
+ }
390
+ }
391
+ }
392
+ }
393
+
394
+ /**
395
+ * 处理点击后台分组
396
+ * @return {*}
397
+ * @author: zhujiamin
398
+ * @Date: 2023-12-21 10:29:24
399
+ */
400
+ async handleGroupClick(groupItem: IBackendSearchBarGroup): Promise<void> {
401
+ this.state.selectedSearchGroupItem = groupItem;
402
+ if (groupItem.saved) {
403
+ // 请求获取到搜索分组数据
404
+ const res = await this.service.get(groupItem.id!);
405
+ if (res.ok) {
406
+ mergeInLeft(groupItem, res.data);
407
+ }
408
+ }
409
+ if (groupItem.searchGroupData && groupItem.searchGroupData.filternodes) {
410
+ this.state.filterNodes = groupItem.searchGroupData.filternodes;
411
+ } else {
412
+ this.state.filterNodes = this.getOriginFilterNodes();
413
+ }
414
+ if (this.grid && groupItem && groupItem.searchGroupData) {
415
+ this.grid.setGroupParams(groupItem.searchGroupData);
416
+ await this.grid.load({ isInitialLoad: true });
417
+ }
418
+ }
251
419
  }
@@ -0,0 +1,161 @@
1
+ import { IHttpResponse } from '@ibiz-template/core';
2
+ import { ISearchBar } from '@ibiz/model-core';
3
+ import { IAppService } from '../../../interface';
4
+
5
+ /**
6
+ * 搜索栏服务
7
+ * @return {*}
8
+ * @author: zhujiamin
9
+ * @Date: 2023-12-22 10:28:32
10
+ */
11
+ export class SearchBarService {
12
+ /**
13
+ * 应用
14
+ *
15
+ */
16
+ app!: IAppService;
17
+
18
+ /**
19
+ * 视图标识
20
+ *
21
+ */
22
+ viewTag!: string;
23
+
24
+ /**
25
+ * 部件模型
26
+ *
27
+ */
28
+ readonly model: ISearchBar;
29
+
30
+ /**
31
+ * Creates an instance of ControlService.
32
+ *
33
+ */
34
+ constructor(model: ISearchBar, viewTag: string) {
35
+ this.model = model;
36
+ this.viewTag = viewTag;
37
+ }
38
+
39
+ async init(_context?: IContext): Promise<void> {
40
+ this.app = ibiz.hub.getApp(this.model.appId);
41
+ }
42
+
43
+ /**
44
+ * 主题管理URL
45
+ * @return {*}
46
+ * @author: zhujiamin
47
+ * @Date: 2023-12-22 10:51:49
48
+ */
49
+ themeUrl = '/extension/app_view_themes';
50
+
51
+ /**
52
+ * 执行查询多条数据的方法
53
+ *
54
+ */
55
+ async fetch(): Promise<IHttpResponse> {
56
+ const res = await this.app.net.post(`${this.themeUrl}/fetch_default`, {
57
+ app_view_tag: this.viewTag,
58
+ sort: 'create_time,asc',
59
+ });
60
+ if (res.ok) {
61
+ res.data = this.convertBackDataToFront(res.data as IData[]);
62
+ }
63
+ return res;
64
+ }
65
+
66
+ /**
67
+ * 执行获取单条数据方法
68
+ *
69
+ */
70
+ async get(id: string): Promise<IHttpResponse> {
71
+ const res = await this.app.net.get(`${this.themeUrl}/${id}`, {
72
+ app_view_tag: this.viewTag,
73
+ });
74
+ if (res.ok) {
75
+ [res.data] = this.convertBackDataToFront([res.data] as IData[]);
76
+ }
77
+ return res;
78
+ }
79
+
80
+ /**
81
+ * 删除单条数据
82
+ *
83
+ */
84
+ async remove(id: string): Promise<IHttpResponse> {
85
+ const res = await this.app.net.delete(`${this.themeUrl}/${id}`, {
86
+ app_view_tag: this.viewTag,
87
+ });
88
+ return res;
89
+ }
90
+
91
+ /**
92
+ * 新建数据
93
+ *
94
+ */
95
+ async create(caption: string): Promise<IHttpResponse> {
96
+ const res = await this.app.net.post(`${this.themeUrl}`, {
97
+ name: caption,
98
+ app_view_tag: this.viewTag,
99
+ });
100
+ return res;
101
+ }
102
+
103
+ /**
104
+ * 新建数据(带参数,给平台配置建立的分组用)
105
+ *
106
+ */
107
+ async createWithParams(id: string, data: IData): Promise<IHttpResponse> {
108
+ const res = await this.app.net.post(`${this.themeUrl}`, {
109
+ id,
110
+ theme_model: JSON.stringify(data),
111
+ app_view_tag: this.viewTag,
112
+ show: data.show,
113
+ });
114
+ return res;
115
+ }
116
+
117
+ /**
118
+ * 更新数据
119
+ *
120
+ */
121
+ async update(id: string, data: IData): Promise<IHttpResponse> {
122
+ const updateParams = { app_view_tag: this.viewTag };
123
+ if (data.theme_model) {
124
+ Object.assign(updateParams, {
125
+ theme_model: JSON.stringify(data.theme_model),
126
+ });
127
+ }
128
+ if (data.caption) {
129
+ Object.assign(updateParams, {
130
+ name: data.caption,
131
+ });
132
+ }
133
+ if (typeof data.show === 'boolean') {
134
+ Object.assign(updateParams, {
135
+ show: data.show,
136
+ });
137
+ }
138
+ const res = await this.app.net.put(`${this.themeUrl}/${id}`, updateParams);
139
+ return res;
140
+ }
141
+
142
+ /**
143
+ * 转换后台数据成前端需要的格式
144
+ * @param {IData} data
145
+ * @return {*}
146
+ * @author: zhujiamin
147
+ * @Date: 2023-12-22 11:19:50
148
+ */
149
+ convertBackDataToFront(data: IData[]): IData[] {
150
+ return data.map(item => {
151
+ const tempItem = { ...item };
152
+ if (item.name) {
153
+ tempItem.caption = item.name;
154
+ }
155
+ if (item.theme_model) {
156
+ tempItem.searchGroupData = JSON.parse(item.theme_model);
157
+ }
158
+ return tempItem;
159
+ });
160
+ }
161
+ }
@@ -26,6 +26,7 @@ import {
26
26
  getChildNodeRSs,
27
27
  getUIActionItemsByActionLevel,
28
28
  } from '../../../model';
29
+ import { ControllerEvent } from '../../utils';
29
30
 
30
31
  export type DropNodeRS = {
31
32
  minorEntityId: string;
@@ -42,12 +43,20 @@ export type DropNodeRS = {
42
43
  * @extends {MDControlController<IDETree, ITreeState, ITreeEvent>}
43
44
  * @implements {ITreeController}
44
45
  */
45
- export class TreeController
46
- extends MDControlController<IDETree, ITreeState, ITreeEvent>
47
- implements ITreeController
46
+ export class TreeController<
47
+ T extends IDETree = IDETree,
48
+ S extends ITreeState = ITreeState,
49
+ E extends ITreeEvent = ITreeEvent,
50
+ >
51
+ extends MDControlController<T, S, E>
52
+ implements ITreeController<T, S, E>
48
53
  {
49
54
  declare service: TreeService;
50
55
 
56
+ protected get _evt(): ControllerEvent<ITreeEvent> {
57
+ return this.evt;
58
+ }
59
+
51
60
  /**
52
61
  * 上下文菜单控制器
53
62
  * @author lxm
@@ -124,8 +133,7 @@ export class TreeController
124
133
  this.initDropNodeRss();
125
134
  this.initNodeClickTBUIActionItem();
126
135
 
127
- this.service = new TreeService(this.model);
128
- await this.service.init(this.context);
136
+ await this.initService();
129
137
 
130
138
  // 初始化上下文菜单控制器
131
139
  this.model.detreeNodes!.forEach(node => {
@@ -145,6 +153,18 @@ export class TreeController
145
153
  );
146
154
  }
147
155
 
156
+ /**
157
+ * 初始化对应类型的部件服务
158
+ * @author lxm
159
+ * @date 2023-12-21 11:25:33
160
+ * @protected
161
+ * @return {*} {Promise<void>}
162
+ */
163
+ protected async initService(): Promise<void> {
164
+ this.service = new TreeService(this.model);
165
+ await this.service.init(this.context);
166
+ }
167
+
148
168
  /**
149
169
  * 初始化节点拖入关系处理
150
170
  * @author lxm
@@ -218,7 +238,7 @@ export class TreeController
218
238
  }
219
239
  await this.afterLoad(args, nodes);
220
240
  this.state.isLoaded = true;
221
- await this.evt.emit('onLoadSuccess', {
241
+ await this._evt.emit('onLoadSuccess', {
222
242
  isInitialLoad,
223
243
  });
224
244
 
@@ -267,6 +287,19 @@ export class TreeController
267
287
  this.state.rootNodes = nodes;
268
288
  }
269
289
 
290
+ await this.afterLoadNodes(nodes);
291
+
292
+ return nodes;
293
+ }
294
+
295
+ /**
296
+ * loadNodes加载完子数据之后的处理
297
+ * @author lxm
298
+ * @date 2023-12-22 02:37:50
299
+ * @param {ITreeNodeData[]} nodes 加载回来的子数据
300
+ * @return {*} {Promise<void>}
301
+ */
302
+ async afterLoadNodes(nodes: ITreeNodeData[]): Promise<void> {
270
303
  // 更新items
271
304
  this.state.items = [];
272
305
  recursiveIterate(
@@ -276,9 +309,8 @@ export class TreeController
276
309
  },
277
310
  );
278
311
 
312
+ // 重新计算展开节点标识
279
313
  this.state.expandedKeys = this.calcExpandedKeys(nodes);
280
-
281
- return nodes;
282
314
  }
283
315
 
284
316
  /**
@@ -363,7 +395,7 @@ export class TreeController
363
395
 
364
396
  setActive(item: ITreeNodeData): Promise<void> {
365
397
  const nodeParams = this.parseTreeNodeData(item);
366
- return this.evt.emit('onActive', { ...nodeParams, nodeData: item });
398
+ return this._evt.emit('onActive', { ...nodeParams, nodeData: item });
367
399
  }
368
400
 
369
401
  setSelection(selection: IData[]): void {
@@ -388,6 +420,21 @@ export class TreeController
388
420
  return this.model.detreeNodes?.find(item => item.id === id);
389
421
  }
390
422
 
423
+ /**
424
+ * 通过标识获取节点数据
425
+ * @author lxm
426
+ * @date 2023-12-22 02:21:38
427
+ * @param {string} id 可以是节点id也可以是_uuid
428
+ * @return {*} {(ITreeNodeData | undefined)}
429
+ */
430
+ getNodeData(key: string): ITreeNodeData | undefined {
431
+ const find = this.state.items.find(item => item.id === key);
432
+ if (find) {
433
+ return find;
434
+ }
435
+ return this.state.items.find(item => item._uuid === key);
436
+ }
437
+
391
438
  /**
392
439
  * 执行界面行为
393
440
  *
@@ -517,7 +564,7 @@ export class TreeController
517
564
  const targetNode = refreshParent ? currentNode.parent! : currentNode;
518
565
 
519
566
  const nodes = await this.loadNodes(targetNode);
520
- this.evt.emit('onAfterRefreshParent', {
567
+ this._evt.emit('onAfterRefreshParent', {
521
568
  parentNode: targetNode,
522
569
  children: nodes,
523
570
  });
@@ -761,7 +808,7 @@ export class TreeController
761
808
  await this.updateDeNodeData(modifiedNodeDatas);
762
809
 
763
810
  // *通知界面修改移入的父节点的子节点数据
764
- this.evt.emit('onAfterNodeDrop', { isChangedParent });
811
+ this._evt.emit('onAfterNodeDrop', { isChangedParent });
765
812
  }
766
813
 
767
814
  /**
@@ -69,7 +69,9 @@ export interface TreeFetchOpts {
69
69
  * @class GridService
70
70
  * @extends {MDControlService<IDETree>}
71
71
  */
72
- export class TreeService extends MDControlService<IDETree> {
72
+ export class TreeService<
73
+ T extends IDETree = IDETree,
74
+ > extends MDControlService<T> {
73
75
  /**
74
76
  * 获取子节点数据
75
77
  *
@@ -1,2 +1,4 @@
1
1
  export * from './tree-grid-ex.controller';
2
2
  export * from './tree-grid-ex.service';
3
+ export * from './tree-grid-ex-column/index';
4
+ export * from './tree-grid-ex-row.state';
@@ -0,0 +1,3 @@
1
+ export { TreeGridExColumnController } from './tree-grid-ex-column/tree-grid-ex-column.controller';
2
+ export { TreeGridExFieldColumnController } from './tree-grid-ex-field-column/tree-grid-ex-field-column.controller';
3
+ export { TreeGridExUAColumnController } from './tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller';