@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
@@ -12,6 +12,13 @@ var __publicField = (obj, key, value) => {
12
12
  class TreeExpBarController extends expBar_controller.ExpBarControlController {
13
13
  constructor() {
14
14
  super(...arguments);
15
+ /**
16
+ * 默认展开节点集合
17
+ * @author lxm
18
+ * @date 2023-08-08 05:35:12
19
+ * @type {string[]}
20
+ */
21
+ __publicField(this, "defaultExpandedKeys");
15
22
  /**
16
23
  * 导航栏key
17
24
  *
@@ -92,18 +99,24 @@ class TreeExpBarController extends expBar_controller.ExpBarControlController {
92
99
  * @memberof ExpBarControlController
93
100
  */
94
101
  setNavPosDefaultOpenView() {
95
- const expandedNode = [];
96
- this.state.srfnav.split(":").forEach((item, index) => {
97
- if (index === 0) {
98
- expandedNode.push(item);
99
- } else {
100
- expandedNode.push(`${expandedNode[index - 1]}:${item}`);
101
- }
102
- });
103
- this.xDataController.setExpandedKeys(expandedNode);
104
102
  this.setDefaultXDataSelect({ [this.navKeyName]: this.state.srfnav });
105
103
  this.setDefaultOpenView([{ [this.navKeyName]: this.state.srfnav }]);
106
104
  }
105
+ async onCreated() {
106
+ await super.onCreated();
107
+ if (this.state.srfnav) {
108
+ const expandedKeys = [];
109
+ this.state.srfnav.split(":").forEach((item, index) => {
110
+ if (index === 0) {
111
+ expandedKeys.push(item);
112
+ } else {
113
+ expandedKeys.push(`${expandedKeys[index - 1]}:${item}`);
114
+ }
115
+ });
116
+ expandedKeys.pop();
117
+ this.defaultExpandedKeys = expandedKeys;
118
+ }
119
+ }
107
120
  }
108
121
 
109
122
  exports.TreeExpBarController = TreeExpBarController;
@@ -34,10 +34,11 @@ const FormMDCtrlForm = /* @__PURE__ */ vue.defineComponent({
34
34
  const renderContent = () => {
35
35
  if (c.controlModel && c.provider) {
36
36
  return c.state.data.map((item, index) => {
37
- var _a;
38
37
  const tempContext = c.parent.form.context.clone();
39
- const codeName = runtime.calcDeCodeNameById((_a = c.model.contentControl) == null ? void 0 : _a.appDataEntityId);
40
- tempContext[codeName] = item.srfkey;
38
+ if (c.model.contentControl) {
39
+ const codeName = runtime.calcDeCodeNameById(c.model.contentControl.appDataEntityId);
40
+ tempContext[codeName] = item.srfkey;
41
+ }
41
42
  const controlProps = {
42
43
  modelData: c.controlModel,
43
44
  context: tempContext,
@@ -56,9 +56,9 @@ const FormPage = /* @__PURE__ */ vue.defineComponent({
56
56
  label: () => {
57
57
  return vue.createVNode("span", {
58
58
  "class": c.labelClass
59
- }, [c.model.sysImage && vue.createVNode(vue.resolveComponent("iBizIcon"), {
59
+ }, [c.model.sysImage ? vue.createVNode(vue.resolveComponent("iBizIcon"), {
60
60
  "icon": c.model.sysImage
61
- }, null), c.model.showCaption && c.model.caption]);
61
+ }, null) : null, c.model.caption]);
62
62
  }
63
63
  });
64
64
  })) ? _slot : {
@@ -89,11 +89,41 @@ const GridControl = /* @__PURE__ */ vue.defineComponent({
89
89
  });
90
90
  const tableData = vue.computed(() => {
91
91
  const state = c.state;
92
+ if (c.model.enableGroup) {
93
+ const result = [];
94
+ state.groups.forEach((item) => {
95
+ if (!item.children.length) {
96
+ return;
97
+ }
98
+ const children = [...item.children];
99
+ const first = children.shift();
100
+ result.push({
101
+ srfkey: (first == null ? void 0 : first.srfkey) || item.caption,
102
+ isGroupData: true,
103
+ caption: item.caption,
104
+ first,
105
+ children
106
+ });
107
+ });
108
+ return result;
109
+ }
92
110
  return state.rows.map((row) => row.data);
93
111
  });
94
112
  const renderColumns = vue.computed(() => {
95
- var _a;
96
- return ((_a = c.model.degridColumns) == null ? void 0 : _a.filter((item) => !item.hideDefault)) || [];
113
+ if (c.isMultistageHeader) {
114
+ return c.model.degridColumns || [];
115
+ }
116
+ const columns = [];
117
+ c.state.columnStates.forEach((item) => {
118
+ if (item.hidden) {
119
+ return;
120
+ }
121
+ const columnModel = c.fieldColumns[item.key].model;
122
+ if (columnModel) {
123
+ columns.push(columnModel);
124
+ }
125
+ });
126
+ return columns;
97
127
  });
98
128
  const renderNoData = () => {
99
129
  const {
@@ -101,6 +131,18 @@ const GridControl = /* @__PURE__ */ vue.defineComponent({
101
131
  } = c.state;
102
132
  return isLoaded && vue.createVNode(vue.resolveComponent("iBizNoData"), null, null);
103
133
  };
134
+ const summaryMethod = ({
135
+ columns,
136
+ data
137
+ }) => {
138
+ console.log(columns, data);
139
+ return columns.map((item, index) => {
140
+ if (index === 0) {
141
+ return c.aggTitle;
142
+ }
143
+ return c.state.aggResult[item.property];
144
+ });
145
+ };
104
146
  return {
105
147
  c,
106
148
  ns,
@@ -115,7 +157,8 @@ const GridControl = /* @__PURE__ */ vue.defineComponent({
115
157
  onPageSizeChange,
116
158
  onPageRefresh,
117
159
  handleRowClassName,
118
- renderNoData
160
+ renderNoData,
161
+ summaryMethod
119
162
  };
120
163
  },
121
164
  render() {
@@ -128,6 +171,9 @@ const GridControl = /* @__PURE__ */ vue.defineComponent({
128
171
  } = this.c.model;
129
172
  const renderColumn = (model, index) => {
130
173
  var _a;
174
+ if (model.hideDefault) {
175
+ return null;
176
+ }
131
177
  const {
132
178
  codeName: columnName,
133
179
  width
@@ -146,16 +192,19 @@ const GridControl = /* @__PURE__ */ vue.defineComponent({
146
192
  "align": ((_a = model.align) == null ? void 0 : _a.toLowerCase()) || "center"
147
193
  }), {
148
194
  default: ({
149
- row,
150
- $index
195
+ row
151
196
  }) => {
152
- const rowController = state.rows[$index];
153
- if (rowController) {
197
+ let elRow = row;
198
+ if (row.isGroupData) {
199
+ elRow = row.first;
200
+ }
201
+ const rowState = state.rows.find((item) => item.data.srfkey === elRow.srfkey);
202
+ if (rowState) {
154
203
  const comp = vue.resolveComponent(this.c.providers[columnName].component);
155
204
  return vue.h(comp, {
156
205
  controller: columnC,
157
- row: rowController,
158
- key: row.srfkey + columnName
206
+ row: rowState,
207
+ key: elRow.srfkey + columnName
159
208
  });
160
209
  }
161
210
  return null;
@@ -185,7 +234,7 @@ const GridControl = /* @__PURE__ */ vue.defineComponent({
185
234
  return renderColumn(model, index);
186
235
  };
187
236
  return vue.createVNode(vue.resolveComponent("iBizControlBase"), {
188
- "class": [this.ns.is("show-header", !hideHeader), this.ns.is("enable-page", enablePagingBar)],
237
+ "class": [this.ns.is("show-header", !hideHeader), this.ns.is("enable-page", enablePagingBar), this.ns.is("enable-group", this.c.model.enableGroup)],
189
238
  "controller": this.c
190
239
  }, {
191
240
  default: () => [vue.createVNode(vue.resolveComponent("el-table"), {
@@ -197,8 +246,11 @@ const GridControl = /* @__PURE__ */ vue.defineComponent({
197
246
  },
198
247
  "border": true,
199
248
  "show-header": !hideHeader,
249
+ "show-summary": this.c.enableAgg,
250
+ "summary-method": this.summaryMethod,
200
251
  "highlight-current-row": state.singleSelect,
201
252
  "row-class-name": this.handleRowClassName,
253
+ "row-key": "srfkey",
202
254
  "data": this.tableData,
203
255
  "onRowClick": this.onRowClick,
204
256
  "onRowDblclick": this.onDbRowClick,
@@ -15,6 +15,20 @@ var __publicField = (obj, key, value) => {
15
15
  class GridController extends runtime.MDControlController {
16
16
  constructor() {
17
17
  super(...arguments);
18
+ /**
19
+ * 是否有配置宽度自适应列
20
+ *
21
+ * @type {boolean}
22
+ * @memberof GridController
23
+ */
24
+ __publicField(this, "hasAdaptiveColumn", false);
25
+ /**
26
+ * 是否有多级表头
27
+ * @author lxm
28
+ * @date 2023-08-07 02:26:16
29
+ * @type {boolean}
30
+ */
31
+ __publicField(this, "isMultistageHeader", false);
18
32
  /**
19
33
  * 所有表格列控制器集合
20
34
  *
@@ -56,12 +70,39 @@ class GridController extends runtime.MDControlController {
56
70
  */
57
71
  __publicField(this, "providers", {});
58
72
  /**
59
- * 是否有配置宽度自适应列
60
- *
61
- * @type {boolean}
62
- * @memberof GridController
73
+ * 分组属性列控制器
74
+ * @author lxm
75
+ * @date 2023-08-07 09:45:30
76
+ * @type {string}
63
77
  */
64
- __publicField(this, "hasAdaptiveColumn", false);
78
+ __publicField(this, "groupFieldColumn");
79
+ /**
80
+ * 聚合行标题
81
+ * @author lxm
82
+ * @date 2023-08-07 04:11:00
83
+ * @type {string}
84
+ */
85
+ __publicField(this, "aggTitle", "\u5408\u8BA1");
86
+ }
87
+ /**
88
+ * 分组代码表项集合
89
+ * @author lxm
90
+ * @date 2023-08-07 09:09:42
91
+ * @type {readonly}
92
+ */
93
+ get groupCodeListItems() {
94
+ var _a;
95
+ return (_a = this.groupFieldColumn) == null ? void 0 : _a.codeListItems;
96
+ }
97
+ /**
98
+ * 是否启用表格聚合
99
+ * @author lxm
100
+ * @date 2023-08-07 04:10:55
101
+ * @readonly
102
+ * @type {boolean}
103
+ */
104
+ get enableAgg() {
105
+ return this.model.aggMode !== "NONE";
65
106
  }
66
107
  initState() {
67
108
  super.initState();
@@ -69,6 +110,8 @@ class GridController extends runtime.MDControlController {
69
110
  this.state.noSort = this.model.noSort === true;
70
111
  this.state.size = this.model.pagingSize || 20;
71
112
  this.state.singleSelect = this.model.singleSelect === true;
113
+ this.state.columnStates = [];
114
+ this.state.aggResult = {};
72
115
  }
73
116
  /**
74
117
  * 初始化方法
@@ -91,6 +134,57 @@ class GridController extends runtime.MDControlController {
91
134
  200
92
135
  );
93
136
  this.setSort();
137
+ await this.initGroup();
138
+ }
139
+ /**
140
+ * 初始化表格分组
141
+ * @author lxm
142
+ * @date 2023-08-07 09:10:17
143
+ * @protected
144
+ * @return {*} {Promise<void>}
145
+ */
146
+ async initGroup() {
147
+ if (!this.model.enableGroup) {
148
+ return;
149
+ }
150
+ const { groupAppDEFieldId, groupCodeListId, groupMode } = this.model;
151
+ this.groupFieldColumn = Object.values(this.fieldColumns).find(
152
+ (item) => item.model.appDEFieldId === groupAppDEFieldId
153
+ );
154
+ if (!this.groupFieldColumn) {
155
+ throw new core.RuntimeModelError(this.model, "\u6CA1\u6709\u914D\u7F6E\u5206\u7EC4\u5C5E\u6027\u7684\u5C5E\u6027\u5217");
156
+ }
157
+ const groupFieldName = this.groupFieldColumn.model.id;
158
+ if (!this.groupFieldColumn.model.appCodeListId) {
159
+ throw new core.RuntimeModelError(
160
+ this.groupFieldColumn.model,
161
+ `\u5206\u7EC4\u5C5E\u6027\u7684\u5C5E\u6027\u5217${groupFieldName}\u6CA1\u6709\u914D\u7F6E\u4EE3\u7801\u8868`
162
+ );
163
+ }
164
+ const index = this.state.columnStates.findIndex(
165
+ (item) => item.key === this.groupFieldColumn.model.codeName
166
+ );
167
+ if (index !== -1 && index !== 0) {
168
+ if (this.isMultistageHeader) {
169
+ throw new core.RuntimeModelError(
170
+ this.model,
171
+ `\u8BF7\u5C06\u5206\u7EC4\u5C5E\u6027\u5217${groupFieldName}\u914D\u7F6E\u4E3A\u7B2C\u4E00\u5217`
172
+ );
173
+ }
174
+ const removeEls = this.state.columnStates.splice(index, 1);
175
+ this.state.columnStates.unshift(...removeEls);
176
+ }
177
+ if (groupMode === "CODELIST") {
178
+ if (!groupCodeListId) {
179
+ throw new core.RuntimeModelError(this.model, "\u4EE3\u7801\u8868\u5206\u7EC4\u6A21\u5F0F\u9700\u8981\u914D\u7F6E\u4EE3\u7801\u8868");
180
+ }
181
+ if (this.groupFieldColumn.model.appCodeListId !== groupCodeListId) {
182
+ throw new core.RuntimeModelError(
183
+ this.model,
184
+ `\u5206\u7EC4\u4EE3\u7801\u8868\u4E0E\u5C5E\u6027\u5217${groupFieldName}\u7684\u4EE3\u7801\u8868\u4E0D\u4E00\u81F4`
185
+ );
186
+ }
187
+ }
94
188
  }
95
189
  async afterLoad(args, items) {
96
190
  await super.afterLoad(args, items);
@@ -109,8 +203,92 @@ class GridController extends runtime.MDControlController {
109
203
  uaState.update(row.data.getOrigin(), this.model.appDataEntityId);
110
204
  });
111
205
  });
206
+ this.calcGroupData(items);
207
+ this.calcAggResult(items);
112
208
  return items;
113
209
  }
210
+ /**
211
+ * 计算分组数据
212
+ * @author lxm
213
+ * @date 2023-08-07 02:16:39
214
+ * @protected
215
+ * @param {IData[]} items
216
+ */
217
+ calcGroupData(items) {
218
+ const { enableGroup, groupMode } = this.model;
219
+ if (enableGroup) {
220
+ const groupMap = /* @__PURE__ */ new Map();
221
+ const codeListGroup = groupMode === "CODELIST";
222
+ const groupFiledName = this.groupFieldColumn.model.id;
223
+ if (codeListGroup) {
224
+ this.groupCodeListItems.forEach((item) => {
225
+ groupMap.set(item.value, []);
226
+ });
227
+ }
228
+ items.forEach((item) => {
229
+ const groupFieldValue = item[groupFiledName];
230
+ if (!codeListGroup && !groupMap.has(groupFieldValue)) {
231
+ groupMap.set(groupFieldValue, []);
232
+ }
233
+ if (groupMap.has(groupFieldValue)) {
234
+ groupMap.get(groupFieldValue).push(item);
235
+ }
236
+ });
237
+ this.state.groups = [];
238
+ groupMap.forEach((value, key) => {
239
+ const codeListItem = this.groupCodeListItems.find(
240
+ (item) => item.value === key
241
+ );
242
+ this.state.groups.push({
243
+ caption: (codeListItem == null ? void 0 : codeListItem.text) || `${key}`,
244
+ children: value
245
+ });
246
+ });
247
+ }
248
+ }
249
+ /**
250
+ * 加载远程聚合数据
251
+ * @author lxm
252
+ * @date 2023-08-07 05:35:36
253
+ * @protected
254
+ * @return {*} {Promise<void>}
255
+ */
256
+ async loadRemoteAgg() {
257
+ const { aggMode, aggAppDataEntityId, aggAppDEDataSetId } = this.model;
258
+ if (aggMode !== "ALL") {
259
+ return;
260
+ }
261
+ if (!aggAppDEDataSetId || !aggAppDataEntityId) {
262
+ throw new core.RuntimeModelError(this.model, "\u7F3A\u5C11\u914D\u7F6E\u805A\u5408\u5B9E\u4F53\u6216\u805A\u5408\u6570\u636E\u96C6");
263
+ }
264
+ const params = await this.getFetchParams();
265
+ const app = ibiz.hub.getApp(this.context.srfappid);
266
+ const res = await app.deService.exec(
267
+ aggAppDataEntityId,
268
+ aggAppDEDataSetId,
269
+ this.context,
270
+ void 0,
271
+ params
272
+ );
273
+ if (res.data.length) {
274
+ this.state.remoteAggResult = res.data[0];
275
+ }
276
+ }
277
+ /**
278
+ * 计算当前页的聚合数据
279
+ * @author lxm
280
+ * @date 2023-08-07 04:22:09
281
+ * @protected
282
+ * @param {IData[]} items
283
+ */
284
+ calcAggResult(items) {
285
+ Object.values(this.fieldColumns).forEach((column) => {
286
+ const result = column.calcFieldAgg(items);
287
+ if (result) {
288
+ this.state.aggResult[column.model.id] = result;
289
+ }
290
+ });
291
+ }
114
292
  /**
115
293
  * 后台删除结束后界面删除逻辑
116
294
  *
@@ -124,6 +302,16 @@ class GridController extends runtime.MDControlController {
124
302
  (item) => item.data.srfkey === data.srfkey
125
303
  );
126
304
  this.state.rows.splice(index, 1);
305
+ this.state.groups.forEach((item) => {
306
+ if (item.children.length) {
307
+ const findIndex = item.children.findIndex(
308
+ (item2) => item2.srfkey === data.srfkey
309
+ );
310
+ if (findIndex !== -1) {
311
+ item.children.splice(findIndex, 1);
312
+ }
313
+ }
314
+ });
127
315
  }
128
316
  /**
129
317
  * 新建行
@@ -162,6 +350,7 @@ class GridController extends runtime.MDControlController {
162
350
  }
163
351
  if (rowState.processing) {
164
352
  await core.awaitTimeout(500, this.save.bind(this), [data]);
353
+ return;
165
354
  }
166
355
  const isValid = await this.validate(rowState);
167
356
  if (!isValid) {
@@ -209,9 +398,15 @@ class GridController extends runtime.MDControlController {
209
398
  if (column.enableRowEdit) {
210
399
  this.editColumns[column.codeName] = controller;
211
400
  }
401
+ this.state.columnStates.push({
402
+ key: column.codeName,
403
+ caption: column.caption,
404
+ hidden: !!column.hideDefault
405
+ });
212
406
  } else if (column.columnType === "UAGRIDCOLUMN") {
213
407
  this.uaColumns[column.codeName] = controller;
214
408
  } else if (column.columnType === "GROUPGRIDCOLUMN") {
409
+ this.isMultistageHeader = true;
215
410
  await Promise.all(
216
411
  ((_a = column.degridColumns) == null ? void 0 : _a.map(async (childColumn) => {
217
412
  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}
@@ -166,6 +166,59 @@ class GridFieldColumnController extends gridColumn_controller.GridColumnControll
166
166
  this.codeListItems = dataItems;
167
167
  return dataItems;
168
168
  }
169
+ /**
170
+ * 计算聚合属性列的值
171
+ * 无配置返回undefined
172
+ * @author lxm
173
+ * @date 2023-08-07 04:50:47
174
+ * @param {IData[]} items
175
+ * @return {*} {(string | undefined)}
176
+ */
177
+ calcFieldAgg(items) {
178
+ const { aggField, aggMode, aggValueFormat } = this.model;
179
+ if (aggMode === "NONE") {
180
+ return;
181
+ }
182
+ const fieldName = aggField || this.model.id;
183
+ let aggValue;
184
+ if (this.grid.model.aggMode === "PAGE") {
185
+ switch (aggMode) {
186
+ case "SUM":
187
+ aggValue = items.map((item) => item[fieldName]).reduce((a, b) => a + b, 0);
188
+ break;
189
+ case "AVG":
190
+ aggValue = items.map((item) => item[fieldName]).reduce((a, b) => a + b, 0) / items.length;
191
+ break;
192
+ case "MAX":
193
+ aggValue = Math.max(...items.map((item) => item[fieldName]));
194
+ break;
195
+ case "MIN":
196
+ aggValue = Math.min(...items.map((item) => item[fieldName]));
197
+ break;
198
+ default:
199
+ throw new core.ModelError(this.model, `\u6682\u672A\u652F\u6301\u5C5E\u6027\u5217\u805A\u5408\u6A21\u5F0F${aggMode}`);
200
+ }
201
+ } else if (this.grid.model.aggMode === "ALL") {
202
+ throw new core.ModelError(this.model, `\u8FDC\u7A0B\u805A\u5408\u6682\u672A\u652F\u6301`);
203
+ } else {
204
+ throw new core.ModelError(
205
+ this.grid.model,
206
+ `\u6682\u672A\u652F\u6301\u805A\u5408\u6A21\u5F0F${this.grid.model.aggMode}`
207
+ );
208
+ }
209
+ if (!aggValueFormat) {
210
+ return `${aggValue}`;
211
+ }
212
+ const formatValue = "";
213
+ switch (aggValueFormat) {
214
+ default:
215
+ throw new core.ModelError(
216
+ this.model,
217
+ `\u6682\u672A\u652F\u6301${aggValueFormat}\u7684\u805A\u5408\u503C\u683C\u5F0F\u5316`
218
+ );
219
+ }
220
+ return formatValue;
221
+ }
169
222
  }
170
223
 
171
224
  exports.GridFieldColumnController = 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)}
@@ -2,6 +2,7 @@
2
2
 
3
3
  var vue = require('vue');
4
4
  var vue3Util = require('@ibiz-template/vue3-util');
5
+ var runtime = require('@ibiz-template/runtime');
5
6
  var tree_controller = require('./tree.controller.cjs');
6
7
  require('./tree.css');
7
8
 
@@ -42,6 +43,9 @@ const TreeControl = /* @__PURE__ */ vue.defineComponent({
42
43
  singleSelect: {
43
44
  type: Boolean,
44
45
  default: true
46
+ },
47
+ defaultExpandedKeys: {
48
+ type: Array
45
49
  }
46
50
  },
47
51
  setup() {
@@ -58,16 +62,28 @@ const TreeControl = /* @__PURE__ */ vue.defineComponent({
58
62
  };
59
63
  const treeData = vue.computed(() => {
60
64
  if (!c.state.isLoaded) {
61
- return void 0;
65
+ return [];
62
66
  }
63
- return c.model.rootVisible ? c.state.rootNode : c.state.rootNode.children;
67
+ return c.model.rootVisible ? [c.state.rootNode] : c.state.rootNode.children;
64
68
  });
65
69
  const loadData = async (item, callback) => {
66
- if (!c.state.isLoaded) {
70
+ let nodes;
71
+ if (item.level === 0) {
72
+ nodes = treeData.value;
73
+ ibiz.log.debug("\u521D\u59CB\u52A0\u8F7D");
74
+ } else if (item.data instanceof runtime.TreeNodeData) {
75
+ if (item.data.children) {
76
+ ibiz.log.debug("\u8282\u70B9\u5C55\u5F00\u52A0\u8F7D-\u672C\u5730", item.data);
77
+ nodes = item.data.children;
78
+ } else {
79
+ ibiz.log.debug("\u8282\u70B9\u5C55\u5F00\u52A0\u8F7D-\u8FDC\u7A0B", item.data);
80
+ nodes = await c.loadNodes(item.data);
81
+ }
82
+ } else {
83
+ ibiz.log.error("\u672A\u8003\u8651\u5230\u7684\u60C5\u51B5", item, item.data);
67
84
  return;
68
85
  }
69
- const nodes = await c.loadNodes(item.data);
70
- setCheckedNodes();
86
+ ibiz.log.debug("\u7ED9\u6811\u8FD4\u56DE\u503C", nodes);
71
87
  callback(nodes);
72
88
  };
73
89
  let selectionWait = false;
@@ -218,14 +234,13 @@ const TreeControl = /* @__PURE__ */ vue.defineComponent({
218
234
  return vue.createVNode(vue.resolveComponent("iBizControlBase"), {
219
235
  "controller": this.c
220
236
  }, {
221
- default: () => [this.c.state.isCreated && vue.createVNode(vue.resolveComponent("el-tree"), {
237
+ default: () => [this.c.state.isLoaded && vue.createVNode(vue.resolveComponent("el-tree"), {
222
238
  "ref": "treeRef",
223
- "data": this.treeData,
224
239
  "node-key": "id",
225
240
  "highlight-current": true,
226
241
  "expand-on-click-node": false,
227
242
  "show-checkbox": !this.c.state.singleSelect,
228
- "default-expanded-keys": this.c.state.expandedKeys,
243
+ "default-expanded-keys": this.c.state.defaultExpandedKeys,
229
244
  "props": {
230
245
  label: "text",
231
246
  children: "children",
@@ -12,7 +12,7 @@ class TreeController extends runtime.MDControlController {
12
12
  void 0,
13
13
  { leaf: false }
14
14
  );
15
- this.state.expandedKeys = [];
15
+ this.state.defaultExpandedKeys = [];
16
16
  this.state.size = 0;
17
17
  this.state.contextMenus = {};
18
18
  }
@@ -59,6 +59,7 @@ class TreeController extends runtime.MDControlController {
59
59
  async loadNodes(parentNode) {
60
60
  const params = await this.getFetchParams();
61
61
  const hasQuery = !!params.query;
62
+ const defaultExpandedKeys = !parentNode ? this.state.defaultExpandedKeys : void 0;
62
63
  if (!parentNode) {
63
64
  parentNode = this.state.rootNode;
64
65
  }
@@ -68,7 +69,8 @@ class TreeController extends runtime.MDControlController {
68
69
  nodes = await this.service.fetchChildNodes(parentNode, {
69
70
  context: this.context.clone(),
70
71
  params,
71
- hasQuery
72
+ hasQuery,
73
+ defaultExpandedKeys
72
74
  }) || [];
73
75
  } finally {
74
76
  await this.endLoading();
@@ -114,22 +116,6 @@ class TreeController extends runtime.MDControlController {
114
116
  setSelection(selection) {
115
117
  super.setSelection(selection);
116
118
  }
117
- /**
118
- * 设置展开节点
119
- *
120
- * @author zk
121
- * @date 2023-07-10 08:07:29
122
- * @param {string[]} nodeKeys
123
- * @param {boolean} [isReplace=false]
124
- * @memberof TreeController
125
- */
126
- setExpandedKeys(nodeKeys, isReplace = false) {
127
- if (isReplace) {
128
- this.state.expandedKeys = nodeKeys;
129
- } else {
130
- this.state.expandedKeys.push(...nodeKeys);
131
- }
132
- }
133
119
  /**
134
120
  * 获取节点模型
135
121
  * @author lxm