@ibiz-template/runtime 0.4.11 → 0.4.13

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 (192) hide show
  1. package/dist/index.esm.js +1190 -282
  2. package/dist/index.system.min.js +2 -2
  3. package/out/config/global-config.d.ts.map +1 -1
  4. package/out/config/global-config.js +1 -0
  5. package/out/controller/common/base.controller.d.ts +7 -0
  6. package/out/controller/common/base.controller.d.ts.map +1 -1
  7. package/out/controller/common/base.controller.js +10 -0
  8. package/out/controller/common/control/control.controller.d.ts +14 -0
  9. package/out/controller/common/control/control.controller.d.ts.map +1 -1
  10. package/out/controller/common/control/control.controller.js +21 -0
  11. package/out/controller/common/control/md-control.controller.d.ts +9 -0
  12. package/out/controller/common/control/md-control.controller.d.ts.map +1 -1
  13. package/out/controller/common/control/md-control.controller.js +20 -0
  14. package/out/controller/common/view/view.controller.d.ts +15 -1
  15. package/out/controller/common/view/view.controller.d.ts.map +1 -1
  16. package/out/controller/common/view/view.controller.js +23 -4
  17. package/out/controller/control/app-menu/app-menu.controller.d.ts +7 -0
  18. package/out/controller/control/app-menu/app-menu.controller.d.ts.map +1 -1
  19. package/out/controller/control/app-menu/app-menu.controller.js +22 -0
  20. package/out/controller/control/caption-bar/caption-bar.controller.d.ts.map +1 -1
  21. package/out/controller/control/caption-bar/caption-bar.controller.js +1 -6
  22. package/out/controller/control/form/edit-form/edit-form.controller.d.ts.map +1 -1
  23. package/out/controller/control/form/edit-form/edit-form.controller.js +9 -22
  24. package/out/controller/control/form/edit-form/edit-form.service.d.ts +3 -2
  25. package/out/controller/control/form/edit-form/edit-form.service.d.ts.map +1 -1
  26. package/out/controller/control/form/edit-form/edit-form.service.js +11 -2
  27. package/out/controller/control/form/form/form.controller.d.ts +0 -7
  28. package/out/controller/control/form/form/form.controller.d.ts.map +1 -1
  29. package/out/controller/control/form/form/form.controller.js +0 -11
  30. package/out/controller/control/form/form/form.service.d.ts +24 -0
  31. package/out/controller/control/form/form/form.service.d.ts.map +1 -0
  32. package/out/controller/control/form/form/form.service.js +45 -0
  33. package/out/controller/control/form/form-detail/form-detail/form-detail.controller.d.ts.map +1 -1
  34. package/out/controller/control/form/form-detail/form-detail/form-detail.controller.js +5 -1
  35. package/out/controller/control/form/form-detail/form-item/form-item.controller.d.ts.map +1 -1
  36. package/out/controller/control/form/form-detail/form-item/form-item.controller.js +0 -5
  37. package/out/controller/control/form/search-form/search-form.controller.d.ts.map +1 -1
  38. package/out/controller/control/form/search-form/search-form.controller.js +1 -5
  39. package/out/controller/control/form/search-form/search-form.service.d.ts +4 -3
  40. package/out/controller/control/form/search-form/search-form.service.d.ts.map +1 -1
  41. package/out/controller/control/form/search-form/search-form.service.js +8 -3
  42. package/out/controller/control/gantt/gantt.controller.d.ts +146 -2
  43. package/out/controller/control/gantt/gantt.controller.d.ts.map +1 -1
  44. package/out/controller/control/gantt/gantt.controller.js +270 -0
  45. package/out/controller/control/grid/grid/grid-row.state.d.ts +11 -0
  46. package/out/controller/control/grid/grid/grid-row.state.d.ts.map +1 -1
  47. package/out/controller/control/grid/grid/grid-row.state.js +13 -0
  48. package/out/controller/control/grid/grid/grid.controller.d.ts +7 -0
  49. package/out/controller/control/grid/grid/grid.controller.d.ts.map +1 -1
  50. package/out/controller/control/grid/grid/grid.controller.js +27 -0
  51. package/out/controller/control/grid/grid/grid.service.d.ts.map +1 -1
  52. package/out/controller/control/grid/grid/grid.service.js +30 -20
  53. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts +21 -1
  54. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts.map +1 -1
  55. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.js +44 -1
  56. package/out/controller/control/kanban/kanban.controller.d.ts +13 -0
  57. package/out/controller/control/kanban/kanban.controller.d.ts.map +1 -1
  58. package/out/controller/control/kanban/kanban.controller.js +72 -0
  59. package/out/controller/control/report-panel/generator/user-generator.js +1 -1
  60. package/out/controller/control/search-bar/search-bar.controller.d.ts.map +1 -1
  61. package/out/controller/control/search-bar/search-bar.controller.js +11 -6
  62. package/out/controller/control/toolbar/toolbar.controllerr.d.ts +7 -0
  63. package/out/controller/control/toolbar/toolbar.controllerr.d.ts.map +1 -1
  64. package/out/controller/control/toolbar/toolbar.controllerr.js +22 -0
  65. package/out/controller/control/tree/tree.controller.d.ts +75 -0
  66. package/out/controller/control/tree/tree.controller.d.ts.map +1 -1
  67. package/out/controller/control/tree/tree.controller.js +264 -1
  68. package/out/interface/common/i-global-config/i-global-view-config.d.ts +7 -0
  69. package/out/interface/common/i-global-config/i-global-view-config.d.ts.map +1 -1
  70. package/out/interface/controller/controller/control/i-control.controller.d.ts +14 -0
  71. package/out/interface/controller/controller/control/i-control.controller.d.ts.map +1 -1
  72. package/out/interface/controller/controller/view/i-view.controller.d.ts +14 -0
  73. package/out/interface/controller/controller/view/i-view.controller.d.ts.map +1 -1
  74. package/out/interface/controller/event/control/i-gantt.event.d.ts +42 -0
  75. package/out/interface/controller/event/control/i-gantt.event.d.ts.map +1 -1
  76. package/out/interface/controller/event/control/i-tree.event.d.ts +17 -0
  77. package/out/interface/controller/event/control/i-tree.event.d.ts.map +1 -1
  78. package/out/interface/controller/state/control/i-control.state.d.ts +8 -0
  79. package/out/interface/controller/state/control/i-control.state.d.ts.map +1 -1
  80. package/out/interface/controller/state/control/i-gantt.state.d.ts +22 -0
  81. package/out/interface/controller/state/control/i-gantt.state.d.ts.map +1 -1
  82. package/out/interface/controller/state/control/i-grid.state.d.ts +11 -0
  83. package/out/interface/controller/state/control/i-grid.state.d.ts.map +1 -1
  84. package/out/interface/controller/state/control/i-kanban.state.d.ts +24 -0
  85. package/out/interface/controller/state/control/i-kanban.state.d.ts.map +1 -1
  86. package/out/interface/controller/state/control/i-tree.state.d.ts +7 -0
  87. package/out/interface/controller/state/control/i-tree.state.d.ts.map +1 -1
  88. package/out/interface/controller/state/view/i-view.state.d.ts +8 -0
  89. package/out/interface/controller/state/view/i-view.state.d.ts.map +1 -1
  90. package/out/interface/provider/i-grid-column.provider.d.ts +2 -2
  91. package/out/interface/provider/i-grid-column.provider.d.ts.map +1 -1
  92. package/out/interface/service/i-data-entity/i-data-entity.d.ts +8 -0
  93. package/out/interface/service/i-data-entity/i-data-entity.d.ts.map +1 -1
  94. package/out/interface/service/service/i-app-de.service.d.ts +11 -0
  95. package/out/interface/service/service/i-app-de.service.d.ts.map +1 -1
  96. package/out/interface/service/service/i-auth.service.d.ts +3 -2
  97. package/out/interface/service/service/i-auth.service.d.ts.map +1 -1
  98. package/out/logic-scheduler/executor/app-ui-logic-executor.d.ts.map +1 -1
  99. package/out/logic-scheduler/executor/app-ui-logic-executor.js +4 -2
  100. package/out/register/helper/grid-column-register.d.ts +2 -2
  101. package/out/register/helper/grid-column-register.d.ts.map +1 -1
  102. package/out/register/helper/grid-column-register.js +14 -0
  103. package/out/service/dto/method.dto.d.ts.map +1 -1
  104. package/out/service/dto/method.dto.js +8 -1
  105. package/out/service/service/auth/v7-auth.service.d.ts +1 -1
  106. package/out/service/service/auth/v7-auth.service.d.ts.map +1 -1
  107. package/out/service/service/auth/v7-auth.service.js +12 -7
  108. package/out/service/service/entity/de.service.d.ts +9 -1
  109. package/out/service/service/entity/de.service.d.ts.map +1 -1
  110. package/out/service/service/entity/de.service.js +69 -0
  111. package/out/service/service/entity/method/fetch.d.ts +5 -12
  112. package/out/service/service/entity/method/fetch.d.ts.map +1 -1
  113. package/out/service/service/entity/method/fetch.js +7 -74
  114. package/out/service/utils/de-cache/de-cache.js +2 -2
  115. package/out/service/vo/gantt-node-data/gantt-code-list-node-data.d.ts +1 -0
  116. package/out/service/vo/gantt-node-data/gantt-code-list-node-data.d.ts.map +1 -1
  117. package/out/service/vo/gantt-node-data/gantt-data-set-node-data.d.ts +2 -0
  118. package/out/service/vo/gantt-node-data/gantt-data-set-node-data.d.ts.map +1 -1
  119. package/out/service/vo/gantt-node-data/gantt-data-set-node-data.js +2 -1
  120. package/out/service/vo/gantt-node-data/gantt-node-data-util.d.ts +7 -0
  121. package/out/service/vo/gantt-node-data/gantt-node-data-util.d.ts.map +1 -1
  122. package/out/service/vo/gantt-node-data/gantt-node-data-util.js +18 -0
  123. package/out/service/vo/gantt-node-data/gantt-static-node-data.d.ts +1 -0
  124. package/out/service/vo/gantt-node-data/gantt-static-node-data.d.ts.map +1 -1
  125. package/out/service/vo/tree-node-data/tree-code-list-node-data.d.ts.map +1 -1
  126. package/out/service/vo/tree-node-data/tree-code-list-node-data.js +8 -4
  127. package/out/service/vo/tree-node-data/tree-data-set-node-data.d.ts.map +1 -1
  128. package/out/service/vo/tree-node-data/tree-data-set-node-data.js +8 -4
  129. package/out/service/vo/tree-node-data/tree-node-data.d.ts +1 -0
  130. package/out/service/vo/tree-node-data/tree-node-data.d.ts.map +1 -1
  131. package/out/service/vo/tree-node-data/tree-node-data.js +2 -0
  132. package/out/service/vo/tree-node-data/tree-static-node-data.d.ts.map +1 -1
  133. package/out/service/vo/tree-node-data/tree-static-node-data.js +8 -2
  134. package/out/utils/layout-panel-util/layout-panel-util.d.ts.map +1 -1
  135. package/out/utils/layout-panel-util/layout-panel-util.js +16 -2
  136. package/package.json +3 -3
  137. package/src/config/global-config.ts +1 -0
  138. package/src/controller/common/base.controller.ts +11 -0
  139. package/src/controller/common/control/control.controller.ts +23 -0
  140. package/src/controller/common/control/md-control.controller.ts +21 -0
  141. package/src/controller/common/view/view.controller.ts +27 -5
  142. package/src/controller/control/app-menu/app-menu.controller.ts +25 -0
  143. package/src/controller/control/caption-bar/caption-bar.controller.ts +1 -8
  144. package/src/controller/control/form/edit-form/edit-form.controller.ts +11 -26
  145. package/src/controller/control/form/edit-form/edit-form.service.ts +11 -2
  146. package/src/controller/control/form/form/form.controller.ts +0 -14
  147. package/src/controller/control/form/form/form.service.ts +63 -0
  148. package/src/controller/control/form/form-detail/form-detail/form-detail.controller.ts +9 -1
  149. package/src/controller/control/form/form-detail/form-item/form-item.controller.ts +0 -5
  150. package/src/controller/control/form/search-form/search-form.controller.ts +1 -5
  151. package/src/controller/control/form/search-form/search-form.service.ts +8 -3
  152. package/src/controller/control/gantt/gantt.controller.ts +331 -1
  153. package/src/controller/control/grid/grid/grid-row.state.ts +15 -0
  154. package/src/controller/control/grid/grid/grid.controller.ts +34 -0
  155. package/src/controller/control/grid/grid/grid.service.ts +34 -21
  156. package/src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts +67 -2
  157. package/src/controller/control/kanban/kanban.controller.ts +81 -0
  158. package/src/controller/control/report-panel/generator/user-generator.ts +1 -1
  159. package/src/controller/control/search-bar/search-bar.controller.ts +12 -8
  160. package/src/controller/control/toolbar/toolbar.controllerr.ts +29 -0
  161. package/src/controller/control/tree/tree.controller.ts +327 -2
  162. package/src/interface/common/i-global-config/i-global-view-config.ts +8 -0
  163. package/src/interface/controller/controller/control/i-control.controller.ts +16 -0
  164. package/src/interface/controller/controller/view/i-view.controller.ts +16 -0
  165. package/src/interface/controller/event/control/i-gantt.event.ts +37 -1
  166. package/src/interface/controller/event/control/i-tree.event.ts +14 -0
  167. package/src/interface/controller/state/control/i-control.state.ts +9 -0
  168. package/src/interface/controller/state/control/i-gantt.state.ts +25 -0
  169. package/src/interface/controller/state/control/i-grid.state.ts +10 -0
  170. package/src/interface/controller/state/control/i-kanban.state.ts +26 -0
  171. package/src/interface/controller/state/control/i-tree.state.ts +8 -0
  172. package/src/interface/controller/state/view/i-view.state.ts +9 -0
  173. package/src/interface/provider/i-grid-column.provider.ts +2 -2
  174. package/src/interface/service/i-data-entity/i-data-entity.ts +9 -0
  175. package/src/interface/service/service/i-app-de.service.ts +12 -0
  176. package/src/interface/service/service/i-auth.service.ts +3 -2
  177. package/src/logic-scheduler/executor/app-ui-logic-executor.ts +8 -2
  178. package/src/register/helper/grid-column-register.ts +17 -2
  179. package/src/service/dto/method.dto.ts +8 -1
  180. package/src/service/service/auth/v7-auth.service.ts +18 -8
  181. package/src/service/service/entity/de.service.ts +74 -1
  182. package/src/service/service/entity/method/fetch.ts +8 -79
  183. package/src/service/utils/de-cache/de-cache.ts +2 -2
  184. package/src/service/vo/gantt-node-data/gantt-code-list-node-data.ts +2 -0
  185. package/src/service/vo/gantt-node-data/gantt-data-set-node-data.ts +6 -1
  186. package/src/service/vo/gantt-node-data/gantt-node-data-util.ts +21 -0
  187. package/src/service/vo/gantt-node-data/gantt-static-node-data.ts +2 -0
  188. package/src/service/vo/tree-node-data/tree-code-list-node-data.ts +10 -5
  189. package/src/service/vo/tree-node-data/tree-data-set-node-data.ts +10 -5
  190. package/src/service/vo/tree-node-data/tree-node-data.ts +3 -0
  191. package/src/service/vo/tree-node-data/tree-static-node-data.ts +10 -3
  192. package/src/utils/layout-panel-util/layout-panel-util.ts +17 -2
@@ -1,16 +1,24 @@
1
1
  /* eslint-disable no-param-reassign */
2
2
  import { recursiveIterate } from '@ibiz-template/core';
3
- import { IDEGantt } from '@ibiz/model-core';
3
+ import { IDEGantt, IDETreeColumn, IDETreeNode } from '@ibiz/model-core';
4
4
  import {
5
5
  IGanttController,
6
6
  IGanttEvent,
7
7
  IGanttNodeData,
8
8
  IGanttState,
9
+ IGridColumnProvider,
9
10
  MDCtrlLoadParams,
10
11
  } from '../../../interface';
11
12
  import { MDControlController } from '../../common';
12
13
  import { GanttService } from './gantt.service';
13
14
  import { ContextMenuController } from '../context-menu';
15
+ import {
16
+ GridColumnController,
17
+ GridFieldColumnController,
18
+ GridUAColumnController,
19
+ } from '../grid';
20
+ import { getGridColumnProvider } from '../../../register';
21
+ import { UIActionUtil } from '../../../ui-action';
14
22
 
15
23
  /**
16
24
  * 甘特图控制器
@@ -28,6 +36,38 @@ export class GanttController
28
36
  {
29
37
  declare service: GanttService;
30
38
 
39
+ /**
40
+ * 表格列适配器
41
+ *
42
+ * @type {{ [key: string]: IGridColumnProvider }}
43
+ * @memberof GanttController
44
+ */
45
+ providers: { [key: string]: IGridColumnProvider } = {};
46
+
47
+ /**
48
+ * 所有表格列控制器集合
49
+ *
50
+ * @type {{ [key: string]: GridColumnController }}
51
+ * @memberof GanttController
52
+ */
53
+ columns: { [key: string]: GridColumnController } = {};
54
+
55
+ /**
56
+ * 所有表格属性列的控制器
57
+ *
58
+ * @type {{ [key: string]: GridFieldColumnController }}
59
+ * @memberof GanttController
60
+ */
61
+ fieldColumns: { [key: string]: GridFieldColumnController } = {};
62
+
63
+ /**
64
+ * 所有表格操作列的控制器
65
+ *
66
+ * @type {{ [key: string]: GridUAColumnController }}
67
+ * @memberof GanttController
68
+ */
69
+ uaColumns: { [key: string]: GridUAColumnController } = {};
70
+
31
71
  /**
32
72
  * 上下文菜单控制器
33
73
  *
@@ -57,10 +97,14 @@ export class GanttController
57
97
  super.initState();
58
98
  this.state.size = 0;
59
99
  this.state.query = '';
100
+ this.state.columnStates = [];
101
+ this.state.rootNodes = [];
60
102
  }
61
103
 
62
104
  protected async onCreated(): Promise<void> {
63
105
  await super.onCreated();
106
+ await this.initGridColumns();
107
+ this.initColumnStates();
64
108
 
65
109
  // 快速搜索
66
110
  if (this.model.detreeNodes?.[0].enableQuickSearch) {
@@ -111,6 +155,95 @@ export class GanttController
111
155
  );
112
156
  }
113
157
 
158
+ /**
159
+ * 初始化表格列
160
+ *
161
+ * @protected
162
+ * @return {*} {Promise<void>}
163
+ * @memberof GanttController
164
+ */
165
+ protected async initGridColumns(): Promise<void> {
166
+ if (this.model.detreeColumns) {
167
+ await Promise.all(
168
+ this.model.detreeColumns.map(async column =>
169
+ this.initColumnsController(column),
170
+ ),
171
+ );
172
+ }
173
+ }
174
+
175
+ /**
176
+ * 初始化表格属性列,操作列,编辑项控制器
177
+ *
178
+ * @protected
179
+ * @param {IDETreeColumn} column
180
+ * @return {*} {Promise<void>}
181
+ * @memberof GanttController
182
+ */
183
+ protected async initColumnsController(column: IDETreeColumn): Promise<void> {
184
+ // 初始化适配器
185
+ const provider = await getGridColumnProvider(column);
186
+ if (!provider) {
187
+ return;
188
+ }
189
+ this.providers[column.codeName!] = provider;
190
+
191
+ // 初始化表格列控制器
192
+ const controller = await provider.createController(column, this);
193
+ this.columns[column.codeName!] = controller as GridColumnController;
194
+ // 分类存放控制器
195
+ if (column.columnType === 'DEFGRIDCOLUMN') {
196
+ this.fieldColumns[column.codeName!] =
197
+ controller as GridFieldColumnController;
198
+ } else if (column.columnType === 'UAGRIDCOLUMN') {
199
+ this.uaColumns[column.codeName!] = controller as GridUAColumnController;
200
+ }
201
+ }
202
+
203
+ /**
204
+ * 初始化表格列状态
205
+ *
206
+ * @protected
207
+ * @memberof GanttController
208
+ */
209
+ protected initColumnStates(): void {
210
+ recursiveIterate(
211
+ this.model,
212
+ (column: IDETreeColumn) => {
213
+ if (column.columnType !== 'GROUPGRIDCOLUMN') {
214
+ this.state.columnStates.push({
215
+ key: column.codeName!,
216
+ caption: column.caption!,
217
+ hidden: !!column.hideDefault,
218
+ uaColumn: column.columnType === 'UAGRIDCOLUMN',
219
+ });
220
+ }
221
+ },
222
+ { childrenFields: ['detreeColumns'] },
223
+ );
224
+ this.calcColumnFixed();
225
+ }
226
+
227
+ /**
228
+ * 计算列的固定状态
229
+ *
230
+ * @protected
231
+ * @memberof GanttController
232
+ */
233
+ protected calcColumnFixed(): void {
234
+ const showColumns = this.state.columnStates.filter(
235
+ column => !column.hidden,
236
+ );
237
+ const allNum = showColumns.length;
238
+ showColumns.forEach((column, index) => {
239
+ if (column.uaColumn) {
240
+ column.fixed = index + 1 <= Math.floor(allNum / 2) ? 'left' : 'right';
241
+ } else {
242
+ column.fixed = 'right';
243
+ }
244
+ });
245
+ }
246
+
114
247
  /**
115
248
  * 加载
116
249
  *
@@ -141,6 +274,17 @@ export class GanttController
141
274
  return nodes;
142
275
  }
143
276
 
277
+ /**
278
+ * 获取节点模型
279
+ *
280
+ * @param {string} id
281
+ * @return {*} {(IDETreeNode | undefined)}
282
+ * @memberof GanttController
283
+ */
284
+ getNodeModel(id: string): IDETreeNode | undefined {
285
+ return this.model.detreeNodes?.find(item => item.id === id);
286
+ }
287
+
144
288
  /**
145
289
  * 获取查询参数
146
290
  *
@@ -202,4 +346,190 @@ export class GanttController
202
346
  );
203
347
  return nodes;
204
348
  }
349
+
350
+ /**
351
+ * 甘特节点点击事件
352
+ *
353
+ * @param {IGanttNodeData} nodeData
354
+ * @return {*} {Promise<void>}
355
+ * @memberof GanttController
356
+ */
357
+ async onGanttNodeClick(nodeData: IGanttNodeData): Promise<void> {
358
+ // 单选时,单击才会触发选中逻辑
359
+ if (this.state.singleSelect) {
360
+ // 选中相关处理
361
+ const { selectedData } = this.state;
362
+ // 选中里没有则添加,有则删除
363
+ const filterArr = selectedData.filter(item => item.id !== nodeData.id);
364
+ if (filterArr.length === selectedData.length) {
365
+ this.setSelection(
366
+ this.state.singleSelect
367
+ ? [nodeData]
368
+ : selectedData.concat([nodeData]),
369
+ );
370
+ } else {
371
+ this.setSelection(filterArr);
372
+ }
373
+ }
374
+
375
+ // 激活事件
376
+ if (this.state.mdctrlActiveMode === 1) {
377
+ await this.setActive(nodeData);
378
+ }
379
+ }
380
+
381
+ /**
382
+ * 甘特节点双击事件
383
+ *
384
+ * @param {IGanttNodeData} nodeData
385
+ * @return {*} {Promise<void>}
386
+ * @memberof GanttController
387
+ */
388
+ async onDbGanttNodeClick(nodeData: IGanttNodeData): Promise<void> {
389
+ if (this.state.mdctrlActiveMode === 2) {
390
+ await this.setActive(nodeData);
391
+ }
392
+ }
393
+
394
+ /**
395
+ * 设置激活
396
+ *
397
+ * @param {IGanttNodeData} item
398
+ * @return {*} {Promise<void>}
399
+ * @memberof GanttController
400
+ */
401
+ setActive(item: IGanttNodeData): Promise<void> {
402
+ const nodeParams = this.parseGanttNodeData(item);
403
+ return this.evt.emit('onActive', { ...nodeParams, nodeData: item });
404
+ }
405
+
406
+ /**
407
+ * 设置选中
408
+ *
409
+ * @param {IData[]} selection
410
+ * @memberof GanttController
411
+ */
412
+ setSelection(selection: IData[]): void {
413
+ // 通过id过滤出原始的树节点数据,避免外部使用的时候传入的选中数据有问题。
414
+ const selectionIds = selection.map(item => item.id);
415
+ const filterArr = this.state.items.filter(item =>
416
+ selectionIds.includes(item.id),
417
+ );
418
+ super.setSelection(filterArr);
419
+ }
420
+
421
+ /**
422
+ * 执行界面行为
423
+ *
424
+ * @param {string} uiActionId
425
+ * @param {IGanttNodeData} nodeData
426
+ * @param {MouseEvent} event
427
+ * @param {string} appId
428
+ * @return {*} {Promise<void>}
429
+ * @memberof GanttController
430
+ */
431
+ async doUIAction(
432
+ uiActionId: string,
433
+ nodeData: IGanttNodeData,
434
+ event: MouseEvent,
435
+ appId: string,
436
+ ): Promise<void> {
437
+ const eventArgs = this.getEventArgs();
438
+ const nodeParams = this.parseGanttNodeData(nodeData);
439
+ const result = await UIActionUtil.exec(
440
+ uiActionId!,
441
+ {
442
+ ...eventArgs,
443
+ ...nodeParams,
444
+ event,
445
+ },
446
+ appId,
447
+ );
448
+ if (result.closeView) {
449
+ this.view.closeView();
450
+ } else if (result.refresh) {
451
+ switch (result.refreshMode) {
452
+ // 刷新当前节点的子
453
+ case 1:
454
+ this.refreshNodeChildren(nodeData);
455
+ break;
456
+ // 刷新当前节点的父节点的子
457
+ case 2:
458
+ this.refreshNodeChildren(nodeData, true);
459
+ break;
460
+ // 刷新所有节点数据
461
+ case 3:
462
+ this.refresh();
463
+ break;
464
+ default:
465
+ }
466
+ }
467
+ }
468
+
469
+ /**
470
+ * 解析甘特节点获取通用数据,和完整的上下文和视图参数。
471
+ *
472
+ * @protected
473
+ * @param {IGanttNodeData} nodeData
474
+ * @return {*} {{
475
+ * data: IData[];
476
+ * context: IContext;
477
+ * params: IParams;
478
+ * }}
479
+ * @memberof GanttController
480
+ */
481
+ protected parseGanttNodeData(nodeData: IGanttNodeData): {
482
+ data: IData[];
483
+ context: IContext;
484
+ params: IParams;
485
+ } {
486
+ return {
487
+ data: [{ ...nodeData, ...(nodeData.deData || {}) }],
488
+ context: Object.assign(this.context.clone(), nodeData.context || {}),
489
+ params: { ...this.params, ...(nodeData.params || {}) },
490
+ };
491
+ }
492
+
493
+ /**
494
+ * 刷新指定树节点的子节点数据
495
+ *
496
+ * @param {(IGanttNodeData | IData)} nodeData 指定树节点数据,可以是节点数据,也可以是对应的实体数据
497
+ * @param {boolean} [refreshParent=false] 是否是刷新给定节点数据的父节点的子节点数据
498
+ * @return {*} {Promise<void>}
499
+ * @memberof GanttController
500
+ */
501
+ async refreshNodeChildren(
502
+ nodeData: IGanttNodeData | IData,
503
+ refreshParent = false,
504
+ ): Promise<void> {
505
+ const key = nodeData.srfkey ? 'srfkey' : 'id';
506
+ const currentNode = this.state.items.find(
507
+ item => item[key] === nodeData[key],
508
+ );
509
+ if (!currentNode) {
510
+ ibiz.log.error('找不到对应的树节点数据', nodeData);
511
+ return;
512
+ }
513
+
514
+ // 刷新父,但是没父,刷新根
515
+ if (refreshParent) {
516
+ const { parent } = currentNode;
517
+ // 没有父,或者父是不显示的根节点,那么刷新所有
518
+ if (
519
+ !parent ||
520
+ (!this.model.rootVisible && this.state.rootNodes.includes(parent))
521
+ ) {
522
+ this.refresh();
523
+ return;
524
+ }
525
+ }
526
+
527
+ const targetNode = refreshParent ? currentNode.parent! : currentNode;
528
+
529
+ const nodes = await this.loadNodes(targetNode);
530
+ this.evt.emit('onAfterRefreshParent', {
531
+ parentNode: targetNode,
532
+ children: nodes,
533
+ });
534
+ }
205
535
  }
@@ -49,6 +49,16 @@ export class GridRowState implements IGridRowState {
49
49
  };
50
50
  } = {};
51
51
 
52
+ /**
53
+ * 界面行为组状态(p是界面行为的标识)
54
+ *
55
+ * @author zk
56
+ * @date 2023-12-15 10:12:42
57
+ * @type {{ [p: string]: IButtonContainerState }}
58
+ * @memberof IGridRowState
59
+ */
60
+ uiActionGroupStates: { [p: string]: IButtonContainerState } = {};
61
+
52
62
  /**
53
63
  * 是否显示行编辑
54
64
  *
@@ -91,6 +101,11 @@ export class GridRowState implements IGridRowState {
91
101
  column.initActionStates(this);
92
102
  });
93
103
 
104
+ // 初始化属性列状态
105
+ Object.values(grid.fieldColumns).forEach(column => {
106
+ column.initActionStates(this);
107
+ });
108
+
94
109
  // 初始化编辑项状态
95
110
  Object.values(grid.editColumns).forEach(editColumn => {
96
111
  this.editColStates[editColumn.fieldName] = {
@@ -322,6 +322,12 @@ export class GridController
322
322
  });
323
323
  });
324
324
 
325
+ this.state.rows.forEach(row => {
326
+ Object.values(row.uiActionGroupStates).forEach(uaState => {
327
+ uaState.update(row.data.getOrigin(), this.model.appDataEntityId);
328
+ });
329
+ });
330
+
325
331
  this.calcGroupData(items);
326
332
  // await this.loadRemoteAgg();
327
333
  this.calcAggResult(items);
@@ -1161,4 +1167,32 @@ export class GridController
1161
1167
  await this.setActive(data);
1162
1168
  }
1163
1169
  }
1170
+
1171
+ /**
1172
+ * 转换各类多语言
1173
+ *
1174
+ * @date 2023-05-18 02:57:00
1175
+ * @protected
1176
+ */
1177
+ protected convertMultipleLanguages(): void {
1178
+ const convertColumnCaption = (columns: IDEGridColumn[]): void => {
1179
+ columns.forEach((column: IDEGridColumn) => {
1180
+ if (column.capLanguageRes && column.capLanguageRes.lanResTag) {
1181
+ column.caption = ibiz.i18n.t(
1182
+ column.capLanguageRes.lanResTag,
1183
+ column.caption,
1184
+ );
1185
+ }
1186
+ if (
1187
+ column.columnType === 'GROUPGRIDCOLUMN' &&
1188
+ (column as IDEGridGroupColumn).degridColumns
1189
+ ) {
1190
+ convertColumnCaption((column as IDEGridGroupColumn).degridColumns!);
1191
+ }
1192
+ });
1193
+ };
1194
+ if (this.model.degridColumns && this.model.degridColumns.length > 0) {
1195
+ convertColumnCaption(this.model.degridColumns);
1196
+ }
1197
+ }
1164
1198
  }
@@ -1,5 +1,5 @@
1
- import { IHttpResponse } from '@ibiz-template/core';
2
- import { IDEGrid } from '@ibiz/model-core';
1
+ import { IHttpResponse, RuntimeModelError } from '@ibiz-template/core';
2
+ import { IDEGrid, IDEGridFieldColumn } from '@ibiz/model-core';
3
3
  import { MDControlService, UIMapField, ControlVO } from '../../../../service';
4
4
 
5
5
  /**
@@ -19,25 +19,38 @@ export class GridService extends MDControlService<IDEGrid> {
19
19
  */
20
20
  initUIDataMap(): void {
21
21
  super.initUIDataMap();
22
- // *初始化表格数据项的属性映射
23
- this.model.degridDataItems?.forEach(column => {
24
- const uiKey = column.id!.toLowerCase();
25
- // todo
26
- const deField = column.appDEFieldId;
27
- let mapField: UIMapField;
28
- // 后台实体属性
29
- if (deField) {
30
- const deFieldKey = deField.toLowerCase();
31
- mapField = new UIMapField(uiKey, deFieldKey, {
32
- isOriginField: true,
33
- dataType: column.dataType,
34
- });
35
- } else {
36
- // 前台属性
37
- mapField = new UIMapField(uiKey, uiKey);
38
- }
39
- this.dataUIMap.set(uiKey, mapField);
40
- });
22
+ if (this.model.degridColumns) {
23
+ const dataItems = this.model.degridDataItems || [];
24
+ // *初始化表格数据项的属性映射
25
+ this.model.degridColumns?.forEach((column: IDEGridFieldColumn) => {
26
+ const uiKey = column.id!.toLowerCase();
27
+ // 列映射应用实体属性
28
+ const deField = column.appDEFieldId;
29
+ let mapField: UIMapField;
30
+ // 后台实体属性
31
+ if (deField) {
32
+ const deFieldKey = deField.toLowerCase();
33
+ const dataItem = dataItems.find(
34
+ item => item.appDEFieldId === deField,
35
+ );
36
+ if (dataItem) {
37
+ mapField = new UIMapField(uiKey, deFieldKey, {
38
+ isOriginField: true,
39
+ dataType: dataItem.dataType,
40
+ });
41
+ } else {
42
+ throw new RuntimeModelError(
43
+ column,
44
+ `未找到对应的表格数据项[${deField}]`,
45
+ );
46
+ }
47
+ } else {
48
+ // 前台属性
49
+ mapField = new UIMapField(uiKey, uiKey);
50
+ }
51
+ this.dataUIMap.set(uiKey, mapField);
52
+ });
53
+ }
41
54
 
42
55
  //* 如果属性列和表格数据列名称不一致,补充不一致的属性列的名称映射
43
56
  // this.model.fieldColumns.forEach(fieldColumn => {
@@ -1,6 +1,10 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-vars */
2
2
  import { DataTypes, ModelError, plus } from '@ibiz-template/core';
3
- import { IAppCodeList, IDEGridFieldColumn } from '@ibiz/model-core';
3
+ import {
4
+ IAppCodeList,
5
+ IDEGridFieldColumn,
6
+ IUIActionGroupDetail,
7
+ } from '@ibiz/model-core';
4
8
  import dayjs from 'dayjs';
5
9
  import { debounce } from 'lodash-es';
6
10
  import { clone, isNil } from 'ramda';
@@ -9,7 +13,11 @@ import { CodeListItem, IModalData } from '../../../../../interface';
9
13
  import { parseUserParams } from '../../../../../model';
10
14
  import { UIActionUtil } from '../../../../../ui-action';
11
15
  import { convertNavData, getWFContext } from '../../../../../utils';
12
- import { ValueExUtil } from '../../../../utils';
16
+ import {
17
+ ButtonContainerState,
18
+ UIActionButtonState,
19
+ ValueExUtil,
20
+ } from '../../../../utils';
13
21
  import { GridColumnController } from '../../grid/grid-column.controller';
14
22
  import { GridRowState } from '../../grid/grid-row.state';
15
23
 
@@ -73,6 +81,33 @@ export class GridFieldColumnController extends GridColumnController<IDEGridField
73
81
  this.loadCodeList();
74
82
  }
75
83
 
84
+ /**
85
+ * 初始化属性列界面行为组按钮状态
86
+ *
87
+ * @author lxm
88
+ * @date 2022-09-07 21:09:43
89
+ * @param {GridRowState} row
90
+ */
91
+ initActionStates(row: GridRowState): void {
92
+ // 属性列界面行为按钮状态
93
+ const { deuiactionGroup } = this.model;
94
+ if (deuiactionGroup && deuiactionGroup.uiactionGroupDetails) {
95
+ const containerState = new ButtonContainerState();
96
+ deuiactionGroup.uiactionGroupDetails.forEach(detail => {
97
+ const actionid = detail.uiactionId;
98
+ if (actionid) {
99
+ const buttonState = new UIActionButtonState(
100
+ detail.id!,
101
+ this.grid.context.srfappid!,
102
+ actionid,
103
+ );
104
+ containerState.addState(detail.id!, buttonState);
105
+ }
106
+ });
107
+ row.uiActionGroupStates[this.model.codeName!] = containerState;
108
+ }
109
+ }
110
+
76
111
  /**
77
112
  * 行是否可点击(影响列的界面样式)
78
113
  *
@@ -320,4 +355,34 @@ export class GridFieldColumnController extends GridColumnController<IDEGridField
320
355
  }
321
356
  return ibiz.util.text.format(strVal, this.valueFormat);
322
357
  }
358
+
359
+ /**
360
+ * 触发界面行为组点击事件
361
+ *
362
+ * @author zk
363
+ * @date 2023-12-15 11:12:01
364
+ * @param {IUIActionGroupDetail} detail
365
+ * @param {GridRowState} row
366
+ * @param {MouseEvent} event
367
+ * @return {*} {Promise<void>}
368
+ * @memberof GridFieldColumnController
369
+ */
370
+ async onActionClick(
371
+ detail: IUIActionGroupDetail,
372
+ row: GridRowState,
373
+ event: MouseEvent,
374
+ ): Promise<void> {
375
+ const actionId = detail.uiactionId;
376
+ await UIActionUtil.execAndResolved(
377
+ actionId!,
378
+ {
379
+ context: this.context,
380
+ params: this.params,
381
+ data: [row.data],
382
+ view: this.grid.view,
383
+ event,
384
+ },
385
+ detail.appId,
386
+ );
387
+ }
323
388
  }
@@ -5,6 +5,7 @@ import {
5
5
  IDragChangeInfo,
6
6
  IKanbanController,
7
7
  IKanbanEvent,
8
+ IKanbanGroupState,
8
9
  IKanbanState,
9
10
  MDCtrlLoadParams,
10
11
  } from '../../../interface';
@@ -122,6 +123,86 @@ export class KanbanController
122
123
  return super.handleDataGroup();
123
124
  }
124
125
 
126
+ /**
127
+ * 处理自动分组
128
+ *
129
+ * @memberof KanbanController
130
+ */
131
+ handleAutoGroup(): void {
132
+ const { groupAppDEFieldId } = this.model;
133
+ if (groupAppDEFieldId) {
134
+ const { items } = this.state;
135
+ const groupMap: Map<string, IData[]> = new Map();
136
+ items.forEach((item: IData) => {
137
+ const groupVal = item[groupAppDEFieldId];
138
+ if (isNil(groupVal)) {
139
+ // 分组无值的不显示
140
+ return;
141
+ }
142
+
143
+ if (!groupMap.has(groupVal)) {
144
+ groupMap.set(groupVal, []);
145
+ }
146
+ groupMap.get(groupVal)!.push(item);
147
+ });
148
+ const groups: IKanbanGroupState[] = [];
149
+ groupMap.forEach((value: IData[], key: string) => {
150
+ // 标题
151
+ const codeListItem = this.groupCodeListItems!.find(
152
+ item => item.value === key,
153
+ )!;
154
+ groups.push({
155
+ caption: codeListItem.text,
156
+ color: codeListItem.color,
157
+ key: codeListItem.value,
158
+ children: [...value],
159
+ });
160
+ });
161
+ this.state.groups = groups;
162
+ }
163
+ }
164
+
165
+ /**
166
+ * 处理代码表分组
167
+ *
168
+ * @return {*} {Promise<void>}
169
+ * @memberof KanbanController
170
+ */
171
+ async handleCodeListGroup(): Promise<void> {
172
+ const { groupAppDEFieldId, groupCodeListId } = this.model;
173
+ if (!groupCodeListId) {
174
+ throw new RuntimeModelError(this.model, '分组代码表没有配置');
175
+ }
176
+ const { items } = this.state;
177
+ const groupMap: Map<string | number, IData[]> = new Map();
178
+ this.groupCodeListItems!.forEach(item => {
179
+ groupMap.set(item.value, []);
180
+ });
181
+ items.forEach((item: IData) => {
182
+ const groupVal = item[groupAppDEFieldId!];
183
+ const groupArr = groupMap.get(groupVal);
184
+ if (groupArr) {
185
+ groupArr.push(item);
186
+ }
187
+ // 不在代码表里数据忽略
188
+ });
189
+
190
+ const groups: IKanbanGroupState[] = [];
191
+ groupMap.forEach((arr, key) => {
192
+ // 标题
193
+ const codeListItem = this.groupCodeListItems!.find(
194
+ item => item.value === key,
195
+ )!;
196
+ groups.push({
197
+ caption: codeListItem.text,
198
+ color: codeListItem.color,
199
+ key: codeListItem.value,
200
+ children: arr,
201
+ });
202
+ });
203
+ this.state.groups = groups;
204
+ }
205
+
125
206
  /**
126
207
  * 拖拽变更事件处理回调
127
208
  * @author lxm