@ibiz-template/vue3-components 0.1.2 → 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 (116) hide show
  1. package/dist/{chart-efad8ee0.js → chart-0d4e59ff.js} +2 -2
  2. package/dist/chart-0d4e59ff.js.map +1 -0
  3. package/dist/ibiz-markdown-editor-3745dfd5.js.map +1 -1
  4. package/dist/index.min.css +1 -1
  5. package/dist/index.system.min.js +3 -3
  6. package/dist/index.system.min.js.map +1 -1
  7. package/dist/wang-editor-675011c6.js.map +1 -1
  8. package/dist/xlsx-util-fac1c045.js.map +1 -1
  9. package/es/common/icon/icon.d.ts +1 -3
  10. package/es/common/index.d.ts +0 -2
  11. package/es/common/index.mjs +1 -5
  12. package/es/common/router-view/router-view.d.ts +1 -3
  13. package/es/control/app-menu/app-menu.css +1 -1
  14. package/es/control/app-menu-icon-view/app-menu-icon-view.d.ts +3 -3
  15. package/es/control/app-menu-icon-view/index.d.ts +6 -2
  16. package/es/control/chart/generator/chart-options-generator.mjs +1 -1
  17. package/es/control/chart/generator/funnel-series-generator.d.ts +1 -1
  18. package/es/control/chart/generator/pie-series-generator.d.ts +1 -1
  19. package/es/control/dashboard/dashboard.css +1 -0
  20. package/es/control/dashboard/dashboard.d.ts +1 -0
  21. package/es/control/dashboard/dashboard.mjs +1 -0
  22. package/es/control/dashboard/portlet/portlet-layout/portlet-layout.d.ts +1 -0
  23. package/es/control/dashboard/portlet/portlet-layout/portlet-layout.mjs +1 -0
  24. package/es/control/dashboard/portlet/portlet-part/portlet-part.controller.mjs +1 -1
  25. package/es/control/data-view/data-view.controller.mjs +0 -1
  26. package/es/control/data-view/data-view.css +1 -1
  27. package/es/control/drbar/drbar.controller.d.ts +2 -5
  28. package/es/control/drbar/drbar.d.ts +2 -2
  29. package/es/control/drbar/index.d.ts +3 -1
  30. package/es/control/drtab/drtab.controller.d.ts +2 -5
  31. package/es/control/exp-bar/tree-exp-bar/tree-exp-bar.controller.d.ts +8 -0
  32. package/es/control/exp-bar/tree-exp-bar/tree-exp-bar.controller.mjs +22 -9
  33. package/es/control/exp-bar/tree-exp-bar/tree-exp-bar.mjs +2 -1
  34. package/es/control/form/form/form.d.ts +1 -5
  35. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-form/form-mdctrl-form.mjs +4 -3
  36. package/es/control/form/form-detail/form-page/form-page.mjs +2 -2
  37. package/es/control/grid/grid/grid-control.util.d.ts +2 -1
  38. package/es/control/grid/grid/grid.controller.d.ts +73 -5
  39. package/es/control/grid/grid/grid.controller.mjs +201 -6
  40. package/es/control/grid/grid/grid.css +1 -1
  41. package/es/control/grid/grid/grid.d.ts +6 -1
  42. package/es/control/grid/grid/grid.mjs +62 -10
  43. package/es/control/grid/grid/index.d.ts +5 -1
  44. package/es/control/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts +11 -2
  45. package/es/control/grid/grid-column/grid-field-column/grid-field-column.controller.mjs +53 -0
  46. package/es/control/grid/grid-column/grid-field-column/grid-field-column.css +1 -1
  47. package/es/control/grid/grid-column/grid-field-edit-column/grid-edit-item/grid-edit-item.css +1 -1
  48. package/es/control/toolbar/index.d.ts +6 -2
  49. package/es/control/toolbar/toolbar.d.ts +3 -3
  50. package/es/control/tree/index.d.ts +7 -1
  51. package/es/control/tree/tree.controller.d.ts +0 -10
  52. package/es/control/tree/tree.controller.mjs +4 -18
  53. package/es/control/tree/tree.d.ts +7 -1
  54. package/es/control/tree/tree.mjs +23 -8
  55. package/es/control/tree/tree.service.d.ts +9 -2
  56. package/es/control/tree/tree.service.mjs +20 -1
  57. package/es/editor/autocomplete/ibiz-autocomplete/ibiz-autocomplete.d.ts +1 -1
  58. package/es/editor/cascader/ibiz-cascader/ibiz-cascader.d.ts +1 -1
  59. package/es/editor/code/code-editor.controller.d.ts +2 -2
  60. package/es/editor/data-picker/ibiz-picker/ibiz-picker.d.ts +1 -1
  61. package/es/editor/html/wang-editor/wang-editor.d.ts +1 -1
  62. package/es/editor/upload/use/use-ibiz-upload.d.ts +2 -2
  63. package/es/editor/upload/use/use-iview-upload.d.ts +2 -2
  64. package/es/index.mjs +0 -1
  65. package/es/panel-component/nav-pos/nav-pos.mjs +6 -4
  66. package/es/panel-component/nav-pos-index/nav-pos-index.controller.mjs +1 -2
  67. package/es/panel-component/nav-pos-index/nav-pos-index.mjs +3 -2
  68. package/es/panel-component/nav-pos-index/nav-pos-index.state.mjs +1 -1
  69. package/es/panel-component/panel-app-title/panel-app-title.css +1 -1
  70. package/es/panel-component/panel-app-title/panel-app-title.mjs +1 -1
  71. package/es/panel-component/panel-field/panel-field.controller.d.ts +1 -1
  72. package/es/view/portal-view/portal-view.mjs +1 -18
  73. package/es/view-engine/grid-view.engine.mjs +1 -1
  74. package/es/view-engine/wf-dyna-action-view.engine.mjs +1 -1
  75. package/es/view-engine/wf-dyna-start-view.engine.mjs +1 -1
  76. package/lib/common/index.cjs +0 -13
  77. package/lib/control/app-menu/app-menu.css +1 -1
  78. package/lib/control/chart/generator/chart-options-generator.cjs +1 -1
  79. package/lib/control/dashboard/dashboard.cjs +1 -0
  80. package/lib/control/dashboard/dashboard.css +1 -0
  81. package/lib/control/dashboard/portlet/portlet-layout/portlet-layout.cjs +1 -0
  82. package/lib/control/dashboard/portlet/portlet-part/portlet-part.controller.cjs +1 -1
  83. package/lib/control/data-view/data-view.controller.cjs +0 -1
  84. package/lib/control/data-view/data-view.css +1 -1
  85. package/lib/control/exp-bar/tree-exp-bar/tree-exp-bar.cjs +2 -1
  86. package/lib/control/exp-bar/tree-exp-bar/tree-exp-bar.controller.cjs +22 -9
  87. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-form/form-mdctrl-form.cjs +4 -3
  88. package/lib/control/form/form-detail/form-page/form-page.cjs +2 -2
  89. package/lib/control/grid/grid/grid.cjs +62 -10
  90. package/lib/control/grid/grid/grid.controller.cjs +200 -5
  91. package/lib/control/grid/grid/grid.css +1 -1
  92. package/lib/control/grid/grid-column/grid-field-column/grid-field-column.controller.cjs +53 -0
  93. package/lib/control/grid/grid-column/grid-field-column/grid-field-column.css +1 -1
  94. package/lib/control/grid/grid-column/grid-field-edit-column/grid-edit-item/grid-edit-item.css +1 -1
  95. package/lib/control/tree/tree.cjs +23 -8
  96. package/lib/control/tree/tree.controller.cjs +4 -18
  97. package/lib/control/tree/tree.service.cjs +20 -1
  98. package/lib/index.cjs +0 -11
  99. package/lib/panel-component/nav-pos/nav-pos.cjs +6 -4
  100. package/lib/panel-component/nav-pos-index/nav-pos-index.cjs +3 -2
  101. package/lib/panel-component/nav-pos-index/nav-pos-index.controller.cjs +1 -2
  102. package/lib/panel-component/nav-pos-index/nav-pos-index.state.cjs +1 -1
  103. package/lib/panel-component/panel-app-title/panel-app-title.cjs +1 -1
  104. package/lib/panel-component/panel-app-title/panel-app-title.css +1 -1
  105. package/lib/view/portal-view/portal-view.cjs +1 -18
  106. package/lib/view-engine/grid-view.engine.cjs +1 -1
  107. package/lib/view-engine/wf-dyna-action-view.engine.cjs +1 -1
  108. package/lib/view-engine/wf-dyna-start-view.engine.cjs +1 -1
  109. package/package.json +10 -10
  110. package/dist/chart-efad8ee0.js.map +0 -1
  111. package/es/common/keep-alive/keep-alive.d.ts +0 -45
  112. package/es/common/keep-alive/keep-alive.mjs +0 -293
  113. package/es/common/keep-alive/scheduler.d.ts +0 -41
  114. package/es/common/keep-alive/scheduler.mjs +0 -168
  115. package/lib/common/keep-alive/keep-alive.cjs +0 -304
  116. package/lib/common/keep-alive/scheduler.cjs +0 -178
@@ -1,4 +1,4 @@
1
- import { debounceAndAsyncMerge, RuntimeError, awaitTimeout } from '@ibiz-template/core';
1
+ import { debounceAndAsyncMerge, RuntimeModelError, RuntimeError, awaitTimeout } from '@ibiz-template/core';
2
2
  import { MDControlController, GridNotifyState, Srfuf, calcDeCodeNameById, getGridColumnProvider, isValueChange } from '@ibiz-template/runtime';
3
3
  import { clone } from 'ramda';
4
4
  import { GridRowState } from './grid-row.state.mjs';
@@ -13,6 +13,20 @@ var __publicField = (obj, key, value) => {
13
13
  class GridController extends MDControlController {
14
14
  constructor() {
15
15
  super(...arguments);
16
+ /**
17
+ * 是否有配置宽度自适应列
18
+ *
19
+ * @type {boolean}
20
+ * @memberof GridController
21
+ */
22
+ __publicField(this, "hasAdaptiveColumn", false);
23
+ /**
24
+ * 是否有多级表头
25
+ * @author lxm
26
+ * @date 2023-08-07 02:26:16
27
+ * @type {boolean}
28
+ */
29
+ __publicField(this, "isMultistageHeader", false);
16
30
  /**
17
31
  * 所有表格列控制器集合
18
32
  *
@@ -54,12 +68,39 @@ class GridController extends MDControlController {
54
68
  */
55
69
  __publicField(this, "providers", {});
56
70
  /**
57
- * 是否有配置宽度自适应列
58
- *
59
- * @type {boolean}
60
- * @memberof GridController
71
+ * 分组属性列控制器
72
+ * @author lxm
73
+ * @date 2023-08-07 09:45:30
74
+ * @type {string}
61
75
  */
62
- __publicField(this, "hasAdaptiveColumn", false);
76
+ __publicField(this, "groupFieldColumn");
77
+ /**
78
+ * 聚合行标题
79
+ * @author lxm
80
+ * @date 2023-08-07 04:11:00
81
+ * @type {string}
82
+ */
83
+ __publicField(this, "aggTitle", "\u5408\u8BA1");
84
+ }
85
+ /**
86
+ * 分组代码表项集合
87
+ * @author lxm
88
+ * @date 2023-08-07 09:09:42
89
+ * @type {readonly}
90
+ */
91
+ get groupCodeListItems() {
92
+ var _a;
93
+ return (_a = this.groupFieldColumn) == null ? void 0 : _a.codeListItems;
94
+ }
95
+ /**
96
+ * 是否启用表格聚合
97
+ * @author lxm
98
+ * @date 2023-08-07 04:10:55
99
+ * @readonly
100
+ * @type {boolean}
101
+ */
102
+ get enableAgg() {
103
+ return this.model.aggMode !== "NONE";
63
104
  }
64
105
  initState() {
65
106
  super.initState();
@@ -67,6 +108,8 @@ class GridController extends MDControlController {
67
108
  this.state.noSort = this.model.noSort === true;
68
109
  this.state.size = this.model.pagingSize || 20;
69
110
  this.state.singleSelect = this.model.singleSelect === true;
111
+ this.state.columnStates = [];
112
+ this.state.aggResult = {};
70
113
  }
71
114
  /**
72
115
  * 初始化方法
@@ -89,6 +132,57 @@ class GridController extends MDControlController {
89
132
  200
90
133
  );
91
134
  this.setSort();
135
+ await this.initGroup();
136
+ }
137
+ /**
138
+ * 初始化表格分组
139
+ * @author lxm
140
+ * @date 2023-08-07 09:10:17
141
+ * @protected
142
+ * @return {*} {Promise<void>}
143
+ */
144
+ async initGroup() {
145
+ if (!this.model.enableGroup) {
146
+ return;
147
+ }
148
+ const { groupAppDEFieldId, groupCodeListId, groupMode } = this.model;
149
+ this.groupFieldColumn = Object.values(this.fieldColumns).find(
150
+ (item) => item.model.appDEFieldId === groupAppDEFieldId
151
+ );
152
+ if (!this.groupFieldColumn) {
153
+ throw new RuntimeModelError(this.model, "\u6CA1\u6709\u914D\u7F6E\u5206\u7EC4\u5C5E\u6027\u7684\u5C5E\u6027\u5217");
154
+ }
155
+ const groupFieldName = this.groupFieldColumn.model.id;
156
+ if (!this.groupFieldColumn.model.appCodeListId) {
157
+ throw new RuntimeModelError(
158
+ this.groupFieldColumn.model,
159
+ `\u5206\u7EC4\u5C5E\u6027\u7684\u5C5E\u6027\u5217${groupFieldName}\u6CA1\u6709\u914D\u7F6E\u4EE3\u7801\u8868`
160
+ );
161
+ }
162
+ const index = this.state.columnStates.findIndex(
163
+ (item) => item.key === this.groupFieldColumn.model.codeName
164
+ );
165
+ if (index !== -1 && index !== 0) {
166
+ if (this.isMultistageHeader) {
167
+ throw new RuntimeModelError(
168
+ this.model,
169
+ `\u8BF7\u5C06\u5206\u7EC4\u5C5E\u6027\u5217${groupFieldName}\u914D\u7F6E\u4E3A\u7B2C\u4E00\u5217`
170
+ );
171
+ }
172
+ const removeEls = this.state.columnStates.splice(index, 1);
173
+ this.state.columnStates.unshift(...removeEls);
174
+ }
175
+ if (groupMode === "CODELIST") {
176
+ if (!groupCodeListId) {
177
+ throw new RuntimeModelError(this.model, "\u4EE3\u7801\u8868\u5206\u7EC4\u6A21\u5F0F\u9700\u8981\u914D\u7F6E\u4EE3\u7801\u8868");
178
+ }
179
+ if (this.groupFieldColumn.model.appCodeListId !== groupCodeListId) {
180
+ throw new RuntimeModelError(
181
+ this.model,
182
+ `\u5206\u7EC4\u4EE3\u7801\u8868\u4E0E\u5C5E\u6027\u5217${groupFieldName}\u7684\u4EE3\u7801\u8868\u4E0D\u4E00\u81F4`
183
+ );
184
+ }
185
+ }
92
186
  }
93
187
  async afterLoad(args, items) {
94
188
  await super.afterLoad(args, items);
@@ -107,8 +201,92 @@ class GridController extends MDControlController {
107
201
  uaState.update(row.data.getOrigin(), this.model.appDataEntityId);
108
202
  });
109
203
  });
204
+ this.calcGroupData(items);
205
+ this.calcAggResult(items);
110
206
  return items;
111
207
  }
208
+ /**
209
+ * 计算分组数据
210
+ * @author lxm
211
+ * @date 2023-08-07 02:16:39
212
+ * @protected
213
+ * @param {IData[]} items
214
+ */
215
+ calcGroupData(items) {
216
+ const { enableGroup, groupMode } = this.model;
217
+ if (enableGroup) {
218
+ const groupMap = /* @__PURE__ */ new Map();
219
+ const codeListGroup = groupMode === "CODELIST";
220
+ const groupFiledName = this.groupFieldColumn.model.id;
221
+ if (codeListGroup) {
222
+ this.groupCodeListItems.forEach((item) => {
223
+ groupMap.set(item.value, []);
224
+ });
225
+ }
226
+ items.forEach((item) => {
227
+ const groupFieldValue = item[groupFiledName];
228
+ if (!codeListGroup && !groupMap.has(groupFieldValue)) {
229
+ groupMap.set(groupFieldValue, []);
230
+ }
231
+ if (groupMap.has(groupFieldValue)) {
232
+ groupMap.get(groupFieldValue).push(item);
233
+ }
234
+ });
235
+ this.state.groups = [];
236
+ groupMap.forEach((value, key) => {
237
+ const codeListItem = this.groupCodeListItems.find(
238
+ (item) => item.value === key
239
+ );
240
+ this.state.groups.push({
241
+ caption: (codeListItem == null ? void 0 : codeListItem.text) || `${key}`,
242
+ children: value
243
+ });
244
+ });
245
+ }
246
+ }
247
+ /**
248
+ * 加载远程聚合数据
249
+ * @author lxm
250
+ * @date 2023-08-07 05:35:36
251
+ * @protected
252
+ * @return {*} {Promise<void>}
253
+ */
254
+ async loadRemoteAgg() {
255
+ const { aggMode, aggAppDataEntityId, aggAppDEDataSetId } = this.model;
256
+ if (aggMode !== "ALL") {
257
+ return;
258
+ }
259
+ if (!aggAppDEDataSetId || !aggAppDataEntityId) {
260
+ throw new RuntimeModelError(this.model, "\u7F3A\u5C11\u914D\u7F6E\u805A\u5408\u5B9E\u4F53\u6216\u805A\u5408\u6570\u636E\u96C6");
261
+ }
262
+ const params = await this.getFetchParams();
263
+ const app = ibiz.hub.getApp(this.context.srfappid);
264
+ const res = await app.deService.exec(
265
+ aggAppDataEntityId,
266
+ aggAppDEDataSetId,
267
+ this.context,
268
+ void 0,
269
+ params
270
+ );
271
+ if (res.data.length) {
272
+ this.state.remoteAggResult = res.data[0];
273
+ }
274
+ }
275
+ /**
276
+ * 计算当前页的聚合数据
277
+ * @author lxm
278
+ * @date 2023-08-07 04:22:09
279
+ * @protected
280
+ * @param {IData[]} items
281
+ */
282
+ calcAggResult(items) {
283
+ Object.values(this.fieldColumns).forEach((column) => {
284
+ const result = column.calcFieldAgg(items);
285
+ if (result) {
286
+ this.state.aggResult[column.model.id] = result;
287
+ }
288
+ });
289
+ }
112
290
  /**
113
291
  * 后台删除结束后界面删除逻辑
114
292
  *
@@ -122,6 +300,16 @@ class GridController extends MDControlController {
122
300
  (item) => item.data.srfkey === data.srfkey
123
301
  );
124
302
  this.state.rows.splice(index, 1);
303
+ this.state.groups.forEach((item) => {
304
+ if (item.children.length) {
305
+ const findIndex = item.children.findIndex(
306
+ (item2) => item2.srfkey === data.srfkey
307
+ );
308
+ if (findIndex !== -1) {
309
+ item.children.splice(findIndex, 1);
310
+ }
311
+ }
312
+ });
125
313
  }
126
314
  /**
127
315
  * 新建行
@@ -160,6 +348,7 @@ class GridController extends MDControlController {
160
348
  }
161
349
  if (rowState.processing) {
162
350
  await awaitTimeout(500, this.save.bind(this), [data]);
351
+ return;
163
352
  }
164
353
  const isValid = await this.validate(rowState);
165
354
  if (!isValid) {
@@ -207,9 +396,15 @@ class GridController extends MDControlController {
207
396
  if (column.enableRowEdit) {
208
397
  this.editColumns[column.codeName] = controller;
209
398
  }
399
+ this.state.columnStates.push({
400
+ key: column.codeName,
401
+ caption: column.caption,
402
+ hidden: !!column.hideDefault
403
+ });
210
404
  } else if (column.columnType === "UAGRIDCOLUMN") {
211
405
  this.uaColumns[column.codeName] = controller;
212
406
  } else if (column.columnType === "GROUPGRIDCOLUMN") {
407
+ this.isMultistageHeader = true;
213
408
  await Promise.all(
214
409
  ((_a = column.degridColumns) == null ? void 0 : _a.map(async (childColumn) => {
215
410
  await this.initColumnsController(childColumn);
@@ -1 +1 @@
1
- .ibiz-control-grid{--ibiz-control-grid-text-color:var(--ibiz-color-text-0);--ibiz-control-grid-bg-color:transparent;--ibiz-control-grid-padding:0;--ibiz-control-grid-cell-padding:var(--ibiz-spacing-tight);--ibiz-control-grid-selection-padding:var(--ibiz-spacing-base-loose);--ibiz-control-grid-header-text-color:var(--ibiz-color-text-2);--ibiz-control-grid-header-cell-padding:var(--ibiz-control-grid-cell-padding);--ibiz-control-grid-header-height:auto;--ibiz-control-grid-content-text-color:var(--ibiz-control-grid-text-color);--ibiz-control-grid-content-item-hover-bg-color:var(--ibiz-color-fill-0);--ibiz-control-grid-content-row-height:48px;--ibiz-control-grid-page-text-color:var(--ibiz-control-grid-text-color);--ibiz-control-grid-page-height:50px;--ibiz-control-grid-page-padding:0 var(--ibiz-spacing-base-tight);width:100%;height:100%;padding:var(--ibiz-control-grid-padding);background-color:var(--ibiz-control-grid-bg-color)}.ibiz-control-grid.is-enable-page .ibiz-control-grid__table{height:calc(100% - var(--ibiz-control-grid-page-height))}.ibiz-control-grid__table{width:100%;height:100%}.ibiz-control-grid__table .caret-wrapper{gap:3px;justify-content:center}.ibiz-control-grid__table .sort-caret{position:initial}.ibiz-control-grid__table.el-table .el-table__cell{padding:0}.ibiz-control-grid__table .el-table__header-wrapper .cell{height:var(--ibiz-control-grid-header-height);padding:var(--ibiz-control-grid-header-cell-padding);color:var(--ibiz-control-grid-header-text-color);word-break:break-word;white-space:pre-wrap}.ibiz-control-grid__table .el-table__header-wrapper .el-table-column--selection .cell{padding:var(--ibiz-control-grid-selection-padding)}.ibiz-control-grid__table .el-table__header-wrapper .is-sortable.el-table__cell .cell{display:flex;align-items:center;justify-content:var(--ibiz-grid-column-justify-content)}.ibiz-control-grid__table .el-table__body-wrapper{color:var(--ibiz-control-grid-content-text-color);border-bottom:.1px solid var(--ibiz-color-border)}.ibiz-control-grid__table .el-table__body-wrapper .el-table__row{height:var(--ibiz-control-grid-content-row-height);cursor:pointer}.ibiz-control-grid__table .el-table__body-wrapper .el-table__row>td{height:0}@-moz-document url-prefix(){.ibiz-control-grid__table .el-table__body-wrapper .el-table__row>td{height:100%}}.ibiz-control-grid__table .el-table__body-wrapper .cell{height:100%;padding:0}.ibiz-control-grid__table .el-table__body-wrapper .el-table-column--selection .cell{padding:var(--ibiz-control-grid-selection-padding)}.ibiz-control-grid__table .el-table__cell.is-center{--ibiz-grid-column-text-align:center;--ibiz-grid-column-justify-content:center}.ibiz-control-grid__table .el-table__cell.is-left{--ibiz-grid-column-text-align:left;--ibiz-grid-column-justify-content:flex-start}.ibiz-control-grid__table .el-table__cell.is-right{--ibiz-grid-column-text-align:right;--ibiz-grid-column-justify-content:flex-end}.ibiz-control-grid .ibiz-grid-page{display:flex;justify-content:flex-end;height:var(--ibiz-control-grid-page-height);padding:var(--ibiz-control-grid-page-padding)}.ibiz-control-grid .ibiz-grid-page .el-pagination{overflow:auto}
1
+ .ibiz-control-grid{--ibiz-control-grid-text-color:var(--ibiz-color-text-0);--ibiz-control-grid-bg-color:transparent;--ibiz-control-grid-padding:0;--ibiz-control-grid-cell-padding:var(--ibiz-spacing-tight);--ibiz-control-grid-selection-padding:var(--ibiz-spacing-base-loose);--ibiz-control-grid-header-text-color:var(--ibiz-color-text-2);--ibiz-control-grid-header-cell-padding:var(--ibiz-control-grid-cell-padding);--ibiz-control-grid-header-height:auto;--ibiz-control-grid-content-text-color:var(--ibiz-control-grid-text-color);--ibiz-control-grid-content-item-hover-bg-color:var(--ibiz-color-fill-0);--ibiz-control-grid-content-row-height:48px;--ibiz-control-grid-page-text-color:var(--ibiz-control-grid-text-color);--ibiz-control-grid-page-height:50px;--ibiz-control-grid-page-padding:0 var(--ibiz-spacing-base-tight);width:100%;height:100%;padding:var(--ibiz-control-grid-padding);background-color:var(--ibiz-control-grid-bg-color)}.ibiz-control-grid.is-enable-page .ibiz-control-grid__table{height:calc(100% - var(--ibiz-control-grid-page-height))}.ibiz-control-grid.is-enable-group .el-table__indent{display:none}.ibiz-control-grid__table{width:100%;height:100%}.ibiz-control-grid__table .caret-wrapper{gap:3px;justify-content:center}.ibiz-control-grid__table .sort-caret{position:initial}.ibiz-control-grid__table.el-table .el-table__cell{padding:0}.ibiz-control-grid__table .el-table__header-wrapper .cell{height:var(--ibiz-control-grid-header-height);padding:var(--ibiz-control-grid-header-cell-padding);color:var(--ibiz-control-grid-header-text-color);word-break:break-word;white-space:pre-wrap}.ibiz-control-grid__table .el-table__header-wrapper .el-table-column--selection .cell{padding:var(--ibiz-control-grid-selection-padding)}.ibiz-control-grid__table .el-table__header-wrapper .is-sortable.el-table__cell .cell{display:flex;align-items:center;justify-content:var(--ibiz-grid-column-justify-content)}.ibiz-control-grid__table .el-table__body-wrapper{color:var(--ibiz-control-grid-content-text-color);border-bottom:.1px solid var(--ibiz-color-border)}.ibiz-control-grid__table .el-table__body-wrapper .el-table__row{height:var(--ibiz-control-grid-content-row-height);cursor:pointer}.ibiz-control-grid__table .el-table__body-wrapper .el-table__row>td{height:0}@-moz-document url-prefix(){.ibiz-control-grid__table .el-table__body-wrapper .el-table__row>td{height:100%}}.ibiz-control-grid__table .el-table__body-wrapper .cell{display:flex;align-items:center;height:100%;padding:0}.ibiz-control-grid__table .el-table__body-wrapper .el-table-column--selection .cell{padding:var(--ibiz-control-grid-selection-padding)}.ibiz-control-grid__table .el-table__cell.is-center{--ibiz-grid-column-text-align:center;--ibiz-grid-column-justify-content:center}.ibiz-control-grid__table .el-table__cell.is-left{--ibiz-grid-column-text-align:left;--ibiz-grid-column-justify-content:flex-start}.ibiz-control-grid__table .el-table__cell.is-right{--ibiz-grid-column-text-align:right;--ibiz-grid-column-justify-content:flex-end}.ibiz-control-grid .ibiz-grid-page{display:flex;justify-content:flex-end;height:var(--ibiz-control-grid-page-height);padding:var(--ibiz-control-grid-page-padding)}.ibiz-control-grid .ibiz-grid-page .el-pagination{overflow:auto}
@@ -1,4 +1,5 @@
1
1
  import { PropType, VNode } from 'vue';
2
+ import { TableColumnCtx } from 'element-plus';
2
3
  import { IDEGrid, IDEGridColumn } from '@ibiz/model-core';
3
4
  import { ControlVO } from '@ibiz-template/runtime';
4
5
  import './grid.scss';
@@ -57,7 +58,7 @@ export declare const GridControl: import("vue").DefineComponent<{
57
58
  c: GridController;
58
59
  ns: import("@ibiz-template/core").Namespace;
59
60
  tableRef: import("vue").Ref<IData | undefined>;
60
- tableData: import("vue").ComputedRef<ControlVO[]>;
61
+ tableData: import("vue").ComputedRef<IData[]>;
61
62
  renderColumns: import("vue").ComputedRef<IDEGridColumn[]>;
62
63
  onDbRowClick: (data: ControlVO) => void;
63
64
  onRowClick: (data: ControlVO) => void;
@@ -74,6 +75,10 @@ export declare const GridControl: import("vue").DefineComponent<{
74
75
  row: IData;
75
76
  }) => string;
76
77
  renderNoData: () => VNode | false;
78
+ summaryMethod: ({ columns, data, }: {
79
+ columns: TableColumnCtx<IData>[];
80
+ data: IData[];
81
+ }) => string[];
77
82
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
78
83
  modelData: {
79
84
  type: PropType<IDEGrid>;
@@ -87,11 +87,41 @@ const GridControl = /* @__PURE__ */ defineComponent({
87
87
  });
88
88
  const tableData = computed(() => {
89
89
  const state = c.state;
90
+ if (c.model.enableGroup) {
91
+ const result = [];
92
+ state.groups.forEach((item) => {
93
+ if (!item.children.length) {
94
+ return;
95
+ }
96
+ const children = [...item.children];
97
+ const first = children.shift();
98
+ result.push({
99
+ srfkey: (first == null ? void 0 : first.srfkey) || item.caption,
100
+ isGroupData: true,
101
+ caption: item.caption,
102
+ first,
103
+ children
104
+ });
105
+ });
106
+ return result;
107
+ }
90
108
  return state.rows.map((row) => row.data);
91
109
  });
92
110
  const renderColumns = computed(() => {
93
- var _a;
94
- return ((_a = c.model.degridColumns) == null ? void 0 : _a.filter((item) => !item.hideDefault)) || [];
111
+ if (c.isMultistageHeader) {
112
+ return c.model.degridColumns || [];
113
+ }
114
+ const columns = [];
115
+ c.state.columnStates.forEach((item) => {
116
+ if (item.hidden) {
117
+ return;
118
+ }
119
+ const columnModel = c.fieldColumns[item.key].model;
120
+ if (columnModel) {
121
+ columns.push(columnModel);
122
+ }
123
+ });
124
+ return columns;
95
125
  });
96
126
  const renderNoData = () => {
97
127
  const {
@@ -99,6 +129,18 @@ const GridControl = /* @__PURE__ */ defineComponent({
99
129
  } = c.state;
100
130
  return isLoaded && createVNode(resolveComponent("iBizNoData"), null, null);
101
131
  };
132
+ const summaryMethod = ({
133
+ columns,
134
+ data
135
+ }) => {
136
+ console.log(columns, data);
137
+ return columns.map((item, index) => {
138
+ if (index === 0) {
139
+ return c.aggTitle;
140
+ }
141
+ return c.state.aggResult[item.property];
142
+ });
143
+ };
102
144
  return {
103
145
  c,
104
146
  ns,
@@ -113,7 +155,8 @@ const GridControl = /* @__PURE__ */ defineComponent({
113
155
  onPageSizeChange,
114
156
  onPageRefresh,
115
157
  handleRowClassName,
116
- renderNoData
158
+ renderNoData,
159
+ summaryMethod
117
160
  };
118
161
  },
119
162
  render() {
@@ -126,6 +169,9 @@ const GridControl = /* @__PURE__ */ defineComponent({
126
169
  } = this.c.model;
127
170
  const renderColumn = (model, index) => {
128
171
  var _a;
172
+ if (model.hideDefault) {
173
+ return null;
174
+ }
129
175
  const {
130
176
  codeName: columnName,
131
177
  width
@@ -144,16 +190,19 @@ const GridControl = /* @__PURE__ */ defineComponent({
144
190
  "align": ((_a = model.align) == null ? void 0 : _a.toLowerCase()) || "center"
145
191
  }), {
146
192
  default: ({
147
- row,
148
- $index
193
+ row
149
194
  }) => {
150
- const rowController = state.rows[$index];
151
- if (rowController) {
195
+ let elRow = row;
196
+ if (row.isGroupData) {
197
+ elRow = row.first;
198
+ }
199
+ const rowState = state.rows.find((item) => item.data.srfkey === elRow.srfkey);
200
+ if (rowState) {
152
201
  const comp = resolveComponent(this.c.providers[columnName].component);
153
202
  return h(comp, {
154
203
  controller: columnC,
155
- row: rowController,
156
- key: row.srfkey + columnName
204
+ row: rowState,
205
+ key: elRow.srfkey + columnName
157
206
  });
158
207
  }
159
208
  return null;
@@ -183,7 +232,7 @@ const GridControl = /* @__PURE__ */ defineComponent({
183
232
  return renderColumn(model, index);
184
233
  };
185
234
  return createVNode(resolveComponent("iBizControlBase"), {
186
- "class": [this.ns.is("show-header", !hideHeader), this.ns.is("enable-page", enablePagingBar)],
235
+ "class": [this.ns.is("show-header", !hideHeader), this.ns.is("enable-page", enablePagingBar), this.ns.is("enable-group", this.c.model.enableGroup)],
187
236
  "controller": this.c
188
237
  }, {
189
238
  default: () => [createVNode(resolveComponent("el-table"), {
@@ -195,8 +244,11 @@ const GridControl = /* @__PURE__ */ defineComponent({
195
244
  },
196
245
  "border": true,
197
246
  "show-header": !hideHeader,
247
+ "show-summary": this.c.enableAgg,
248
+ "summary-method": this.summaryMethod,
198
249
  "highlight-current-row": state.singleSelect,
199
250
  "row-class-name": this.handleRowClassName,
251
+ "row-key": "srfkey",
200
252
  "data": this.tableData,
201
253
  "onRowClick": this.onRowClick,
202
254
  "onRowDblclick": this.onDbRowClick,
@@ -50,7 +50,7 @@ export declare const IBizGridControl: import("@ibiz-template/vue3-util").TypeWit
50
50
  c: import("./grid.controller").GridController;
51
51
  ns: import("@ibiz-template/core").Namespace;
52
52
  tableRef: import("vue").Ref<IData | undefined>;
53
- tableData: import("vue").ComputedRef<import("@ibiz-template/runtime").ControlVO[]>;
53
+ tableData: import("vue").ComputedRef<IData[]>;
54
54
  renderColumns: import("vue").ComputedRef<import("@ibiz/model-core").IDEGridColumn[]>;
55
55
  onDbRowClick: (data: import("@ibiz-template/runtime").ControlVO) => void;
56
56
  onRowClick: (data: import("@ibiz-template/runtime").ControlVO) => void;
@@ -69,6 +69,10 @@ export declare const IBizGridControl: import("@ibiz-template/vue3-util").TypeWit
69
69
  renderNoData: () => false | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
70
70
  [key: string]: any;
71
71
  }>;
72
+ summaryMethod: ({ columns, data, }: {
73
+ columns: import("element-plus/es/components/table/src/table-column/defaults").TableColumnCtx<IData>[];
74
+ data: IData[];
75
+ }) => string[];
72
76
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
73
77
  modelData: {
74
78
  type: import("vue").PropType<import("@ibiz/model-core").IDEGrid>;
@@ -48,7 +48,7 @@ export declare class GridFieldColumnController extends GridColumnController<IDEG
48
48
  * @date 2022-12-08 15:12:58
49
49
  * @readonly
50
50
  */
51
- clickable(row: GridRowState): any;
51
+ clickable(row: GridRowState): boolean;
52
52
  /**
53
53
  * 公共参数处理,计算上下文和视图参数
54
54
  * @return {*}
@@ -86,5 +86,14 @@ export declare class GridFieldColumnController extends GridColumnController<IDEG
86
86
  * @date 2022-09-28 15:09:38
87
87
  * @returns {*}
88
88
  */
89
- loadCodeList(): Promise<readonly CodeListItem[] | undefined>;
89
+ loadCodeList(): Promise<Readonly<CodeListItem[]> | undefined>;
90
+ /**
91
+ * 计算聚合属性列的值
92
+ * 无配置返回undefined
93
+ * @author lxm
94
+ * @date 2023-08-07 04:50:47
95
+ * @param {IData[]} items
96
+ * @return {*} {(string | undefined)}
97
+ */
98
+ calcFieldAgg(items: IData[]): string | undefined;
90
99
  }
@@ -164,6 +164,59 @@ class GridFieldColumnController extends GridColumnController {
164
164
  this.codeListItems = dataItems;
165
165
  return dataItems;
166
166
  }
167
+ /**
168
+ * 计算聚合属性列的值
169
+ * 无配置返回undefined
170
+ * @author lxm
171
+ * @date 2023-08-07 04:50:47
172
+ * @param {IData[]} items
173
+ * @return {*} {(string | undefined)}
174
+ */
175
+ calcFieldAgg(items) {
176
+ const { aggField, aggMode, aggValueFormat } = this.model;
177
+ if (aggMode === "NONE") {
178
+ return;
179
+ }
180
+ const fieldName = aggField || this.model.id;
181
+ let aggValue;
182
+ if (this.grid.model.aggMode === "PAGE") {
183
+ switch (aggMode) {
184
+ case "SUM":
185
+ aggValue = items.map((item) => item[fieldName]).reduce((a, b) => a + b, 0);
186
+ break;
187
+ case "AVG":
188
+ aggValue = items.map((item) => item[fieldName]).reduce((a, b) => a + b, 0) / items.length;
189
+ break;
190
+ case "MAX":
191
+ aggValue = Math.max(...items.map((item) => item[fieldName]));
192
+ break;
193
+ case "MIN":
194
+ aggValue = Math.min(...items.map((item) => item[fieldName]));
195
+ break;
196
+ default:
197
+ throw new ModelError(this.model, `\u6682\u672A\u652F\u6301\u5C5E\u6027\u5217\u805A\u5408\u6A21\u5F0F${aggMode}`);
198
+ }
199
+ } else if (this.grid.model.aggMode === "ALL") {
200
+ throw new ModelError(this.model, `\u8FDC\u7A0B\u805A\u5408\u6682\u672A\u652F\u6301`);
201
+ } else {
202
+ throw new ModelError(
203
+ this.grid.model,
204
+ `\u6682\u672A\u652F\u6301\u805A\u5408\u6A21\u5F0F${this.grid.model.aggMode}`
205
+ );
206
+ }
207
+ if (!aggValueFormat) {
208
+ return `${aggValue}`;
209
+ }
210
+ const formatValue = "";
211
+ switch (aggValueFormat) {
212
+ default:
213
+ throw new ModelError(
214
+ this.model,
215
+ `\u6682\u672A\u652F\u6301${aggValueFormat}\u7684\u805A\u5408\u503C\u683C\u5F0F\u5316`
216
+ );
217
+ }
218
+ return formatValue;
219
+ }
167
220
  }
168
221
 
169
222
  export { GridFieldColumnController };
@@ -1 +1 @@
1
- .ibiz-grid-field-column{--ibiz-grid-field-column-cell-padding:var(--ibiz-spacing-tight);--ibiz-grid-field-column-text-color:var(--ibiz-color-primary);display:flex;align-items:center;justify-content:var(--ibiz-grid-column-justify-content);width:100%;height:100%;padding:var(--ibiz-grid-field-column-cell-padding)}.ibiz-grid-field-column__text{word-break:break-word;white-space:pre-wrap}.ibiz-grid-field-column--clickable{color:var(--ibiz-grid-field-column-text-color);cursor:pointer}
1
+ .ibiz-grid-field-column{--ibiz-grid-field-column-cell-padding:var(--ibiz-spacing-tight);--ibiz-grid-field-column-text-color:var(--ibiz-color-primary);display:inline-flex;align-items:center;justify-content:var(--ibiz-grid-column-justify-content);width:auto;height:100%;padding:var(--ibiz-grid-field-column-cell-padding)}.ibiz-grid-field-column__text{word-break:break-word;white-space:pre-wrap}.ibiz-grid-field-column--clickable{color:var(--ibiz-grid-field-column-text-color);cursor:pointer}
@@ -1 +1 @@
1
- .ibiz-grid-edit-item{--ibiz-grid-edit-item-cell-hover-bg-color:var(--ibiz-color-fill-0);width:100%;height:100%}.ibiz-grid-edit-item.is-error .ibiz-grid-edit-item__tooltip{border:1px solid red}.ibiz-grid-edit-item__tooltip{display:flex;align-items:center;justify-content:var(--ibiz-grid-column-justify-content);width:100%;height:100%;text-align:var(--ibiz-grid-column-text-align)}.ibiz-grid-edit-item .ibiz-checkbox--readonly,.ibiz-grid-edit-item .ibiz-date-picker--readonly,.ibiz-grid-edit-item .ibiz-dropdown--readonly,.ibiz-grid-edit-item .ibiz-input--readonly,.ibiz-grid-edit-item .ibiz-mpicker--readonly,.ibiz-grid-edit-item .ibiz-picker--readonly,.ibiz-grid-edit-item .ibiz-picker-dropdown--readonly,.ibiz-grid-edit-item .ibiz-radio--readonly{color:var(--ibiz-color-text-0)}.ibiz-grid-edit-item--show-mask:hover{cursor:pointer;background-color:var(--ibiz-grid-edit-item-cell-hover-bg-color)}
1
+ .ibiz-grid-edit-item{--ibiz-grid-edit-item-cell-hover-bg-color:var(--ibiz-color-fill-0);width:100%;height:100%}.ibiz-grid-edit-item.is-error .ibiz-grid-edit-item__tooltip{border:1px solid red}.ibiz-grid-edit-item__tooltip{display:flex;align-items:center;justify-content:var(--ibiz-grid-column-justify-content);width:100%;height:100%;padding:var(--ibiz-spacing-tight);text-align:var(--ibiz-grid-column-text-align)}.ibiz-grid-edit-item .ibiz-checkbox--readonly,.ibiz-grid-edit-item .ibiz-date-picker--readonly,.ibiz-grid-edit-item .ibiz-dropdown--readonly,.ibiz-grid-edit-item .ibiz-input--readonly,.ibiz-grid-edit-item .ibiz-mpicker--readonly,.ibiz-grid-edit-item .ibiz-picker--readonly,.ibiz-grid-edit-item .ibiz-picker-dropdown--readonly,.ibiz-grid-edit-item .ibiz-radio--readonly{color:var(--ibiz-color-text-0)}.ibiz-grid-edit-item--show-mask:hover{cursor:pointer;background-color:var(--ibiz-grid-edit-item-cell-hover-bg-color)}
@@ -16,8 +16,12 @@ export declare const IBizToolbarControl: import("@ibiz-template/vue3-util").Type
16
16
  btnSize: import("vue").ComputedRef<"small" | "default">;
17
17
  ns: import("@ibiz-template/core").Namespace;
18
18
  handleClick: (item: import("@ibiz/model-core").IDEToolbarItem, event: MouseEvent, params?: IData | undefined) => Promise<void>;
19
- renderExtraButtons: (extraButtons: import("@ibiz-template/runtime").IExtraButton[]) => JSX.Element[];
20
- renderToolbarItem: (item: import("@ibiz/model-core").IDEToolbarItem) => JSX.Element | null;
19
+ renderExtraButtons: (extraButtons: import("@ibiz-template/runtime").IExtraButton[]) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
20
+ [key: string]: any;
21
+ }>[];
22
+ renderToolbarItem: (item: import("@ibiz/model-core").IDEToolbarItem) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
23
+ [key: string]: any;
24
+ }> | null;
21
25
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
22
26
  modelData: {
23
27
  type: import("vue").PropType<import("@ibiz/model-core").IDEToolbar>;
@@ -1,4 +1,4 @@
1
- import { PropType } from 'vue';
1
+ import { PropType, VNode } from 'vue';
2
2
  import { IDEToolbar, IDEToolbarItem } from '@ibiz/model-core';
3
3
  import { IExtraButton } from '@ibiz-template/runtime';
4
4
  import { ToolbarController } from './toolbar.controllerr';
@@ -21,8 +21,8 @@ export declare const ToolbarControl: import("vue").DefineComponent<{
21
21
  btnSize: import("vue").ComputedRef<"small" | "default">;
22
22
  ns: import("@ibiz-template/core").Namespace;
23
23
  handleClick: (item: IDEToolbarItem, event: MouseEvent, params?: IData) => Promise<void>;
24
- renderExtraButtons: (extraButtons: IExtraButton[]) => JSX.Element[];
25
- renderToolbarItem: (item: IDEToolbarItem) => JSX.Element | null;
24
+ renderExtraButtons: (extraButtons: IExtraButton[]) => VNode[];
25
+ renderToolbarItem: (item: IDEToolbarItem) => VNode | null;
26
26
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
27
27
  modelData: {
28
28
  type: PropType<IDEToolbar>;
@@ -21,11 +21,14 @@ export declare const IBizTreeControl: import("@ibiz-template/vue3-util").TypeWit
21
21
  type: BooleanConstructor;
22
22
  default: boolean;
23
23
  };
24
+ defaultExpandedKeys: {
25
+ type: import("vue").PropType<string[]>;
26
+ };
24
27
  }, {
25
28
  c: import("./tree.controller").TreeController;
26
29
  ns: import("@ibiz-template/core").Namespace;
27
30
  treeRef: import("vue").Ref<IData | undefined>;
28
- treeData: import("vue").ComputedRef<import("@ibiz-template/runtime").ITreeNodeData | import("@ibiz-template/runtime").ITreeNodeData[] | undefined>;
31
+ treeData: import("vue").ComputedRef<import("@ibiz-template/runtime").ITreeNodeData[]>;
29
32
  onCheck: (nodeData: import("@ibiz-template/runtime").ITreeNodeData, opts: {
30
33
  checkedNodes: import("@ibiz-template/runtime").ITreeNodeData[];
31
34
  }) => void;
@@ -55,6 +58,9 @@ export declare const IBizTreeControl: import("@ibiz-template/vue3-util").TypeWit
55
58
  type: BooleanConstructor;
56
59
  default: boolean;
57
60
  };
61
+ defaultExpandedKeys: {
62
+ type: import("vue").PropType<string[]>;
63
+ };
58
64
  }>>, {
59
65
  params: IParams;
60
66
  mdctrlActiveMode: number;
@@ -46,16 +46,6 @@ export declare class TreeController extends MDControlController<IDETree, ITreeSt
46
46
  */
47
47
  onDbTreeNodeClick(nodeData: ITreeNodeData): Promise<void>;
48
48
  setSelection(selection: IData[]): void;
49
- /**
50
- * 设置展开节点
51
- *
52
- * @author zk
53
- * @date 2023-07-10 08:07:29
54
- * @param {string[]} nodeKeys
55
- * @param {boolean} [isReplace=false]
56
- * @memberof TreeController
57
- */
58
- setExpandedKeys(nodeKeys: string[], isReplace?: boolean): void;
59
49
  /**
60
50
  * 获取节点模型
61
51
  * @author lxm