@ibiz-template/runtime 0.1.30 → 0.1.32

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.
@@ -17,6 +17,10 @@ export declare enum ViewCallTag {
17
17
  /**
18
18
  * 获取所有数据(多数据专用,获取全部数据)
19
19
  */
20
- 'GET_ALL_DATA' = "GetAllData"
20
+ 'GET_ALL_DATA' = "GetAllData",
21
+ /**
22
+ * 校验数据(编辑视图才用)
23
+ */
24
+ 'VALIDATE' = "Validate"
21
25
  }
22
26
  //# sourceMappingURL=view-call-tag.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"view-call-tag.d.ts","sourceRoot":"","sources":["../../src/constant/view-call-tag.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AACH,oBAAY,WAAW;IACrB;;OAEG;IACH,MAAM,SAAS;IACf;;OAEG;IACH,UAAU,YAAY;IACtB;;OAEG;IACH,cAAc,eAAe;CAC9B"}
1
+ {"version":3,"file":"view-call-tag.d.ts","sourceRoot":"","sources":["../../src/constant/view-call-tag.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AACH,oBAAY,WAAW;IACrB;;OAEG;IACH,MAAM,SAAS;IACf;;OAEG;IACH,UAAU,YAAY;IACtB;;OAEG;IACH,cAAc,eAAe;IAC7B;;OAEG;IACH,UAAU,aAAa;CACxB"}
@@ -20,4 +20,8 @@ export var ViewCallTag;
20
20
  * 获取所有数据(多数据专用,获取全部数据)
21
21
  */
22
22
  ViewCallTag["GET_ALL_DATA"] = "GetAllData";
23
+ /**
24
+ * 校验数据(编辑视图才用)
25
+ */
26
+ ViewCallTag["VALIDATE"] = "Validate";
23
27
  })(ViewCallTag || (ViewCallTag = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"grid-field-column.controller.d.ts","sourceRoot":"","sources":["../../../../../../src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAIpE,OAAO,EAAE,YAAY,EAAc,MAAM,0BAA0B,CAAC;AAKpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;;;;GAKG;AACH,qBAAa,yBAA0B,SAAQ,oBAAoB,CAAC,kBAAkB,CAAC;IACrF;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAExC;;;;;OAKG;IACH,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAa;IAE/C;;;;;;OAMG;IACH,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED;;;;;;;OAOG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;;;;;OAMG;IACH,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO;IAKrC;;;;;OAKG;IACI,kBAAkB,CACvB,IAAI,EAAE,KAAK,EACX,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,OAAO,GACd;QAAE,OAAO,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE;IAoBzC;;;;;;;;OAQG;IACG,YAAY,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAuCvE;;;;;;;;OAQG;IACG,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxE;;;;;;OAMG;IACG,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,GAAG,SAAS,CAAC;IAqBnE;;;;;;;OAOG;IACH,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,SAAS;IAiEhD;;;;;;OAMG;IACH,WAAW,CAAC,KAAK,GAAE,OAAY,GAAG,MAAM;CAiBzC"}
1
+ {"version":3,"file":"grid-field-column.controller.d.ts","sourceRoot":"","sources":["../../../../../../src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAIpE,OAAO,EAAE,YAAY,EAAc,MAAM,0BAA0B,CAAC;AAKpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;;;;GAKG;AACH,qBAAa,yBAA0B,SAAQ,oBAAoB,CAAC,kBAAkB,CAAC;IACrF;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAExC;;;;;OAKG;IACH,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAa;IAE/C;;;;;;OAMG;IACH,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED;;;;;;;OAOG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;;;;;OAMG;IACH,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO;IAKrC;;;;;OAKG;IACI,kBAAkB,CACvB,IAAI,EAAE,KAAK,EACX,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,OAAO,GACd;QAAE,OAAO,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE;IAoBzC;;;;;;;;OAQG;IACG,YAAY,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAuCvE;;;;;;;;OAQG;IACG,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxE;;;;;;OAMG;IACG,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,GAAG,SAAS,CAAC;IAqBnE;;;;;;;OAOG;IACH,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,SAAS;IAqEhD;;;;;;OAMG;IACH,WAAW,CAAC,KAAK,GAAE,OAAY,GAAG,MAAM;CAiBzC"}
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-vars */
2
2
  import { DataTypes, ModelError } from '@ibiz-template/core';
3
3
  import dayjs from 'dayjs';
4
- import { clone } from 'ramda';
4
+ import { clone, isNil } from 'ramda';
5
5
  import { OpenAppViewCommand } from '../../../../../command';
6
6
  import { parseUserParams } from '../../../../../model';
7
7
  import { UIActionUtil } from '../../../../../ui-action';
@@ -171,6 +171,8 @@ export class GridFieldColumnController extends GridColumnController {
171
171
  return;
172
172
  }
173
173
  const fieldName = aggField || this.model.id;
174
+ // 排除属性无值的数据,不纳入统计
175
+ items = items.filter(item => !isNil(item[fieldName]));
174
176
  let aggValue;
175
177
  if (this.grid.model.aggMode === 'PAGE') {
176
178
  switch (aggMode) {
@@ -48,6 +48,14 @@ export declare class TreeController extends MDControlController<IDETree, ITreeSt
48
48
  * @memberof TreeController
49
49
  */
50
50
  onTreeNodeClick(nodeData: ITreeNodeData): Promise<void>;
51
+ /**
52
+ * 树节点数据变更事件处理
53
+ * @author lxm
54
+ * @date 2023-09-28 01:48:05
55
+ * @param {ITreeNodeData} nodeData
56
+ * @param {boolean} isExpand true为展开,false为折叠
57
+ */
58
+ onExpandChange(nodeData: ITreeNodeData, isExpand: boolean): void;
51
59
  /**
52
60
  * 树节点双击事件
53
61
  * @author lxm
@@ -89,7 +97,7 @@ export declare class TreeController extends MDControlController<IDETree, ITreeSt
89
97
  params: IParams;
90
98
  };
91
99
  /**
92
- * 计算展开节点集合
100
+ * 计算展开节点集合(根据加载的子节点计算所有的展开节点标识集合)
93
101
  * @author lxm
94
102
  * @date 2023-08-09 05:19:36
95
103
  * @param {ITreeNodeData[]} nodes
@@ -1 +1 @@
1
- {"version":3,"file":"tree.controller.d.ts","sourceRoot":"","sources":["../../../../src/controller/control/tree/tree.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,UAAU,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACd,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;;;;;GAQG;AACH,qBAAa,cACX,SAAQ,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAC3D,YAAW,eAAe;IAElB,OAAO,EAAE,WAAW,CAAC;IAE7B;;;;;OAKG;IACH,YAAY,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,qBAAqB,CAAA;KAAE,CAAM;IAE1D,SAAS,CAAC,SAAS,IAAI,IAAI;cAOX,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB1C;;;;;OAKG;IACG,IAAI,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAajE;;;;;;OAMG;IACG,SAAS,CAAC,UAAU,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAyCrE;;;;;;OAMG;IACG,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB7D;;;;;;OAMG;IACG,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/D,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7C,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI;IAWtC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIjD;;;;;;;;OAQG;IACG,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,IAAI,CAAC;IA6BhB;;;;;;OAMG;IACH,SAAS,CAAC,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG;QACpD,IAAI,EAAE,KAAK,EAAE,CAAC;QACd,OAAO,EAAE,QAAQ,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;KACjB;IAQD;;;;;;;OAOG;IACH,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE;IAclD;;;;;;;OAOG;IACG,mBAAmB,CACvB,QAAQ,EAAE,aAAa,GAAG,KAAK,EAC/B,aAAa,UAAQ,GACpB,OAAO,CAAC,IAAI,CAAC;CA+BjB"}
1
+ {"version":3,"file":"tree.controller.d.ts","sourceRoot":"","sources":["../../../../src/controller/control/tree/tree.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,UAAU,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACd,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;;;;;GAQG;AACH,qBAAa,cACX,SAAQ,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAC3D,YAAW,eAAe;IAElB,OAAO,EAAE,WAAW,CAAC;IAE7B;;;;;OAKG;IACH,YAAY,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,qBAAqB,CAAA;KAAE,CAAM;IAE1D,SAAS,CAAC,SAAS,IAAI,IAAI;cAQX,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B1C;;;;;OAKG;IACG,IAAI,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAsBjE;;;;;;OAMG;IACG,SAAS,CAAC,UAAU,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAkCrE;;;;;;OAMG;IACG,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB7D;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAYhE;;;;;;OAMG;IACG,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/D,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7C,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI;IAWtC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIjD;;;;;;;;OAQG;IACG,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,IAAI,CAAC;IA6BhB;;;;;;OAMG;IACH,SAAS,CAAC,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG;QACpD,IAAI,EAAE,KAAK,EAAE,CAAC;QACd,OAAO,EAAE,QAAQ,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;KACjB;IAQD;;;;;;;OAOG;IACH,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE;IAgBlD;;;;;;;OAOG;IACG,mBAAmB,CACvB,QAAQ,EAAE,aAAa,GAAG,KAAK,EAC/B,aAAa,UAAQ,GACpB,OAAO,CAAC,IAAI,CAAC;CA+BjB"}
@@ -28,10 +28,12 @@ export class TreeController extends MDControlController {
28
28
  super.initState();
29
29
  // 根节点初始化
30
30
  this.state.defaultExpandedKeys = [];
31
+ this.state.expandedKeys = [];
31
32
  this.state.size = 0;
32
33
  }
33
34
  async onCreated() {
34
35
  await super.onCreated();
36
+ this.state.expandedKeys = [...this.state.defaultExpandedKeys];
35
37
  this.service = new TreeService(this.model);
36
38
  await this.service.init(this.context);
37
39
  // 初始化上下文菜单控制器
@@ -52,8 +54,18 @@ export class TreeController extends MDControlController {
52
54
  */
53
55
  async load(args = {}) {
54
56
  const isInitialLoad = args.isInitialLoad === true;
55
- const nodes = await this.loadNodes();
56
- this.state.expandedKeys = this.calcExpandedKeys(nodes);
57
+ if (isInitialLoad) {
58
+ await this.startLoading();
59
+ }
60
+ let nodes;
61
+ try {
62
+ nodes = await this.loadNodes();
63
+ }
64
+ finally {
65
+ if (isInitialLoad) {
66
+ await this.endLoading();
67
+ }
68
+ }
57
69
  await this.afterLoad(args, nodes);
58
70
  this.state.isLoaded = true;
59
71
  await this.evt.emit('onLoadSuccess', {
@@ -71,24 +83,13 @@ export class TreeController extends MDControlController {
71
83
  async loadNodes(parentNode) {
72
84
  const params = await this.getFetchParams();
73
85
  const hasQuery = !!params.query;
74
- const defaultExpandedKeys = !parentNode
75
- ? this.state.defaultExpandedKeys
76
- : undefined;
77
86
  // 请求服务获取子节点数据
78
- await this.startLoading();
79
- let nodes;
80
- try {
81
- nodes =
82
- (await this.service.fetchChildNodes(parentNode, {
83
- context: this.context.clone(),
84
- params,
85
- hasQuery,
86
- defaultExpandedKeys,
87
- })) || [];
88
- }
89
- finally {
90
- await this.endLoading();
91
- }
87
+ const nodes = (await this.service.fetchChildNodes(parentNode, {
88
+ context: this.context.clone(),
89
+ params,
90
+ hasQuery,
91
+ defaultExpandedKeys: this.state.expandedKeys,
92
+ })) || [];
92
93
  // 有父节点绑定到父节点数据上,无父节点替换rootNodes
93
94
  if (parentNode) {
94
95
  parentNode.children = nodes;
@@ -101,6 +102,7 @@ export class TreeController extends MDControlController {
101
102
  recursiveIterate({ children: this.state.rootNodes }, (node) => {
102
103
  this.state.items.push(node);
103
104
  });
105
+ this.state.expandedKeys = this.calcExpandedKeys(nodes);
104
106
  return nodes;
105
107
  }
106
108
  /**
@@ -131,6 +133,25 @@ export class TreeController extends MDControlController {
131
133
  await this.setActive(nodeData);
132
134
  }
133
135
  }
136
+ /**
137
+ * 树节点数据变更事件处理
138
+ * @author lxm
139
+ * @date 2023-09-28 01:48:05
140
+ * @param {ITreeNodeData} nodeData
141
+ * @param {boolean} isExpand true为展开,false为折叠
142
+ */
143
+ onExpandChange(nodeData, isExpand) {
144
+ const hasKey = this.state.expandedKeys.includes(nodeData.id);
145
+ if (isExpand && !hasKey) {
146
+ this.state.expandedKeys.push(nodeData.id);
147
+ }
148
+ else if (!isExpand && hasKey) {
149
+ const index = this.state.expandedKeys.indexOf(nodeData.id);
150
+ if (index !== -1) {
151
+ this.state.expandedKeys.splice(index, 1);
152
+ }
153
+ }
154
+ }
134
155
  /**
135
156
  * 树节点双击事件
136
157
  * @author lxm
@@ -214,7 +235,7 @@ export class TreeController extends MDControlController {
214
235
  };
215
236
  }
216
237
  /**
217
- * 计算展开节点集合
238
+ * 计算展开节点集合(根据加载的子节点计算所有的展开节点标识集合)
218
239
  * @author lxm
219
240
  * @date 2023-08-09 05:19:36
220
241
  * @param {ITreeNodeData[]} nodes
@@ -222,17 +243,17 @@ export class TreeController extends MDControlController {
222
243
  * @return {*} {string[]}
223
244
  */
224
245
  calcExpandedKeys(nodes) {
225
- let expandedKeys = [];
246
+ // 用户操作的添加的要保留
247
+ let expandedKeys = [...this.state.expandedKeys];
248
+ // 计算加载回来的里面带的默认展开
226
249
  recursiveIterate({ children: nodes }, (node) => {
227
250
  var _a;
228
251
  if ((_a = node.children) === null || _a === void 0 ? void 0 : _a.length) {
229
252
  expandedKeys.push(node.id);
230
253
  }
231
254
  });
232
- if (this.state.defaultExpandedKeys.length) {
233
- expandedKeys.push(...this.state.defaultExpandedKeys);
234
- expandedKeys = Array.from(new Set(expandedKeys));
235
- }
255
+ // 去重
256
+ expandedKeys = Array.from(new Set(expandedKeys));
236
257
  return expandedKeys;
237
258
  }
238
259
  /**
@@ -37,5 +37,12 @@ export interface CodeListItem {
37
37
  * @type {string}
38
38
  */
39
39
  textCls?: string;
40
+ /**
41
+ * 禁止选择
42
+ * @author lxm
43
+ * @date 2023-10-08 03:49:40
44
+ * @type {boolean}
45
+ */
46
+ disableSelect?: boolean;
40
47
  }
41
48
  //# sourceMappingURL=code-list-item.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-list-item.d.ts","sourceRoot":"","sources":["../../../../src/interface/service/code-list-item/code-list-item.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAE1B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"code-list-item.d.ts","sourceRoot":"","sources":["../../../../src/interface/service/code-list-item/code-list-item.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAE1B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"code-list.service.d.ts","sourceRoot":"","sources":["../../../../src/service/service/code-list/code-list.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;;;GAOG;AACH,qBAAa,eAAe;IAoBd,SAAS,CAAC,QAAQ,EAAE,YAAY;IAnB5C;;;;;OAKG;IACH,SAAS,CAAC,YAAY,4BAAmC;IAEzD;;;;;;;OAOG;IACH,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,oBAAoB,CAAC,CAChE;gBAEU,QAAQ,EAAE,YAAY;IAE5C;;;;;;;OAOG;IACH,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,EAAE;IAc3D;;;;;;;;OAQG;IACH,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAMzC;;;;;;;;OAQG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIlD;;;;;;;;;OASG;IACH,SAAS,CAAC,iBAAiB,CACzB,SAAS,EAAE,SAAS,EAAE,EACtB,aAAa,EAAE,OAAO,GACrB,QAAQ,CAAC,YAAY,CAAC,EAAE;IAwB3B;;;;;;;;OAQG;cACa,kBAAkB,CAChC,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,OAAY,EACrB,MAAM,GAAE,OAAY,GACnB,OAAO,CAAC,YAAY,EAAE,CAAC;IAa1B;;;;;;;;;OASG;IACG,GAAG,CACP,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,EACjB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC;CAcpC"}
1
+ {"version":3,"file":"code-list.service.d.ts","sourceRoot":"","sources":["../../../../src/service/service/code-list/code-list.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;;;GAOG;AACH,qBAAa,eAAe;IAoBd,SAAS,CAAC,QAAQ,EAAE,YAAY;IAnB5C;;;;;OAKG;IACH,SAAS,CAAC,YAAY,4BAAmC;IAEzD;;;;;;;OAOG;IACH,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,oBAAoB,CAAC,CAChE;gBAEU,QAAQ,EAAE,YAAY;IAE5C;;;;;;;OAOG;IACH,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,EAAE;IAc3D;;;;;;;;OAQG;IACH,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAMzC;;;;;;;;OAQG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIlD;;;;;;;;;OASG;IACH,SAAS,CAAC,iBAAiB,CACzB,SAAS,EAAE,SAAS,EAAE,EACtB,aAAa,EAAE,OAAO,GACrB,QAAQ,CAAC,YAAY,CAAC,EAAE;IAyB3B;;;;;;;;OAQG;cACa,kBAAkB,CAChC,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,OAAY,EACrB,MAAM,GAAE,OAAY,GACnB,OAAO,CAAC,YAAY,EAAE,CAAC;IAa1B;;;;;;;;;OASG;IACG,GAAG,CACP,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,EACjB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC;CAcpC"}
@@ -99,6 +99,7 @@ export class CodeListService {
99
99
  color: codeItem.color,
100
100
  id: codeItem.codeName,
101
101
  textCls: codeItem.textCls,
102
+ disableSelect: codeItem.disableSelect,
102
103
  };
103
104
  if ((_a = codeItem.codeItems) === null || _a === void 0 ? void 0 : _a.length) {
104
105
  _codeItem.children = this.formatStaticItems(codeItem.codeItems, isValueNumber);
@@ -1 +1 @@
1
- {"version":3,"file":"uiaction-util.d.ts","sourceRoot":"","sources":["../../src/ui-action/uiaction-util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAI/D;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB;;;;;;;;;OASG;WACU,IAAI,CACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,eAAe,CAAC;IAS3B;;;;;;;OAOG;WACU,eAAe,CAC1B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC;CAoBjB"}
1
+ {"version":3,"file":"uiaction-util.d.ts","sourceRoot":"","sources":["../../src/ui-action/uiaction-util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAI/D;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB;;;;;;;;;OASG;WACU,IAAI,CACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,eAAe,CAAC;IAgB3B;;;;;;;OAOG;WACU,eAAe,CAC1B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC;CAoBjB"}
@@ -1,5 +1,5 @@
1
1
  import { RuntimeError } from '@ibiz-template/core';
2
- import { SysUIActionTag } from '../constant';
2
+ import { SysUIActionTag, ViewCallTag } from '../constant';
3
3
  import { getUIActionById } from '../model';
4
4
  import { getUIActionProvider } from '../register';
5
5
  /**
@@ -26,6 +26,13 @@ export class UIActionUtil {
26
26
  if (!action) {
27
27
  throw new RuntimeError(`没找到${actionId}的界面行为模型`);
28
28
  }
29
+ // 单项数据的界面行为执行前校验表单的数据,不通过则拦截
30
+ if (action.actionTarget === 'SINGLEDATA') {
31
+ const validateResult = await params.view.call(ViewCallTag.VALIDATE);
32
+ if (validateResult === false) {
33
+ return { cancel: true };
34
+ }
35
+ }
29
36
  const provider = await getUIActionProvider(action);
30
37
  return provider.exec(action, params);
31
38
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/runtime",
3
- "version": "0.1.30",
3
+ "version": "0.1.32",
4
4
  "description": "控制器包",
5
5
  "type": "module",
6
6
  "main": "out/index.js",
@@ -29,11 +29,11 @@
29
29
  "author": "chitanda",
30
30
  "license": "MIT",
31
31
  "devDependencies": {
32
- "@ibiz-template/core": "^0.1.24",
32
+ "@ibiz-template/core": "^0.1.32",
33
33
  "@ibiz/model-core": "^0.0.18",
34
34
  "@types/path-browserify": "^1.0.0",
35
35
  "@types/qs": "^6.9.8",
36
- "@types/systemjs": "^6.13.2",
36
+ "@types/systemjs": "^6.13.3",
37
37
  "async-validator": "^4.2.5",
38
38
  "dayjs": "^1.11.10",
39
39
  "echarts": "^5.4.3",
@@ -42,7 +42,7 @@
42
42
  "path-browserify": "^1.0.1",
43
43
  "qs": "^6.11.2",
44
44
  "qx-util": "^0.4.8",
45
- "ramda": "^0.29.0"
45
+ "ramda": "^0.29.1"
46
46
  },
47
47
  "peerDependencies": {
48
48
  "@ibiz-template/core": "^0.1.0",
@@ -57,5 +57,5 @@
57
57
  "qx-util": "^0.4.8",
58
58
  "ramda": "^0.29.0"
59
59
  },
60
- "gitHead": "882d7335b02b0ada912b08bfc81debc91f48ff49"
60
+ "gitHead": "594d722ab71f8c9e5fa88e685597b221c70e56e0"
61
61
  }
@@ -19,4 +19,8 @@ export enum ViewCallTag {
19
19
  * 获取所有数据(多数据专用,获取全部数据)
20
20
  */
21
21
  'GET_ALL_DATA' = 'GetAllData',
22
+ /**
23
+ * 校验数据(编辑视图才用)
24
+ */
25
+ 'VALIDATE' = 'Validate',
22
26
  }
@@ -2,7 +2,7 @@
2
2
  import { DataTypes, ModelError } from '@ibiz-template/core';
3
3
  import { IAppCodeList, IDEGridFieldColumn } from '@ibiz/model-core';
4
4
  import dayjs from 'dayjs';
5
- import { clone } from 'ramda';
5
+ import { clone, isNil } from 'ramda';
6
6
  import { OpenAppViewCommand } from '../../../../../command';
7
7
  import { CodeListItem, IModalData } from '../../../../../interface';
8
8
  import { parseUserParams } from '../../../../../model';
@@ -212,6 +212,10 @@ export class GridFieldColumnController extends GridColumnController<IDEGridField
212
212
  return;
213
213
  }
214
214
  const fieldName = aggField || this.model.id!;
215
+
216
+ // 排除属性无值的数据,不纳入统计
217
+ items = items.filter(item => !isNil(item[fieldName]));
218
+
215
219
  let aggValue: number;
216
220
  if (this.grid.model.aggMode === 'PAGE') {
217
221
  switch (aggMode) {
@@ -40,11 +40,15 @@ export class TreeController
40
40
  super.initState();
41
41
  // 根节点初始化
42
42
  this.state.defaultExpandedKeys = [];
43
+ this.state.expandedKeys = [];
43
44
  this.state.size = 0;
44
45
  }
45
46
 
46
47
  protected async onCreated(): Promise<void> {
47
48
  await super.onCreated();
49
+
50
+ this.state.expandedKeys = [...this.state.defaultExpandedKeys];
51
+
48
52
  this.service = new TreeService(this.model);
49
53
  await this.service.init(this.context);
50
54
 
@@ -74,8 +78,17 @@ export class TreeController
74
78
  */
75
79
  async load(args: MDCtrlLoadParams = {}): Promise<ITreeNodeData[]> {
76
80
  const isInitialLoad = args.isInitialLoad === true;
77
- const nodes = await this.loadNodes();
78
- this.state.expandedKeys = this.calcExpandedKeys(nodes);
81
+ if (isInitialLoad) {
82
+ await this.startLoading();
83
+ }
84
+ let nodes;
85
+ try {
86
+ nodes = await this.loadNodes();
87
+ } finally {
88
+ if (isInitialLoad) {
89
+ await this.endLoading();
90
+ }
91
+ }
79
92
  await this.afterLoad(args, nodes);
80
93
  this.state.isLoaded = true;
81
94
  await this.evt.emit('onLoadSuccess', {
@@ -95,24 +108,15 @@ export class TreeController
95
108
  async loadNodes(parentNode?: ITreeNodeData): Promise<ITreeNodeData[]> {
96
109
  const params = await this.getFetchParams();
97
110
  const hasQuery = !!params.query;
98
- const defaultExpandedKeys = !parentNode
99
- ? this.state.defaultExpandedKeys
100
- : undefined;
101
111
 
102
112
  // 请求服务获取子节点数据
103
- await this.startLoading();
104
- let nodes;
105
- try {
106
- nodes =
107
- (await this.service.fetchChildNodes(parentNode, {
108
- context: this.context.clone(),
109
- params,
110
- hasQuery,
111
- defaultExpandedKeys,
112
- })) || [];
113
- } finally {
114
- await this.endLoading();
115
- }
113
+ const nodes =
114
+ (await this.service.fetchChildNodes(parentNode, {
115
+ context: this.context.clone(),
116
+ params,
117
+ hasQuery,
118
+ defaultExpandedKeys: this.state.expandedKeys,
119
+ })) || [];
116
120
 
117
121
  // 有父节点绑定到父节点数据上,无父节点替换rootNodes
118
122
  if (parentNode) {
@@ -130,6 +134,8 @@ export class TreeController
130
134
  },
131
135
  );
132
136
 
137
+ this.state.expandedKeys = this.calcExpandedKeys(nodes);
138
+
133
139
  return nodes;
134
140
  }
135
141
 
@@ -164,6 +170,25 @@ export class TreeController
164
170
  }
165
171
  }
166
172
 
173
+ /**
174
+ * 树节点数据变更事件处理
175
+ * @author lxm
176
+ * @date 2023-09-28 01:48:05
177
+ * @param {ITreeNodeData} nodeData
178
+ * @param {boolean} isExpand true为展开,false为折叠
179
+ */
180
+ onExpandChange(nodeData: ITreeNodeData, isExpand: boolean): void {
181
+ const hasKey = this.state.expandedKeys.includes(nodeData.id);
182
+ if (isExpand && !hasKey) {
183
+ this.state.expandedKeys.push(nodeData.id);
184
+ } else if (!isExpand && hasKey) {
185
+ const index = this.state.expandedKeys.indexOf(nodeData.id);
186
+ if (index !== -1) {
187
+ this.state.expandedKeys.splice(index, 1);
188
+ }
189
+ }
190
+ }
191
+
167
192
  /**
168
193
  * 树节点双击事件
169
194
  * @author lxm
@@ -266,7 +291,7 @@ export class TreeController
266
291
  }
267
292
 
268
293
  /**
269
- * 计算展开节点集合
294
+ * 计算展开节点集合(根据加载的子节点计算所有的展开节点标识集合)
270
295
  * @author lxm
271
296
  * @date 2023-08-09 05:19:36
272
297
  * @param {ITreeNodeData[]} nodes
@@ -274,16 +299,18 @@ export class TreeController
274
299
  * @return {*} {string[]}
275
300
  */
276
301
  calcExpandedKeys(nodes: ITreeNodeData[]): string[] {
277
- let expandedKeys: string[] = [];
302
+ // 用户操作的添加的要保留
303
+ let expandedKeys: string[] = [...this.state.expandedKeys];
304
+
305
+ // 计算加载回来的里面带的默认展开
278
306
  recursiveIterate({ children: nodes }, (node: ITreeNodeData) => {
279
307
  if (node.children?.length) {
280
308
  expandedKeys.push(node.id);
281
309
  }
282
310
  });
283
- if (this.state.defaultExpandedKeys.length) {
284
- expandedKeys.push(...this.state.defaultExpandedKeys);
285
- expandedKeys = Array.from(new Set(expandedKeys));
286
- }
311
+
312
+ // 去重
313
+ expandedKeys = Array.from(new Set(expandedKeys));
287
314
  return expandedKeys;
288
315
  }
289
316
 
@@ -42,4 +42,12 @@ export interface CodeListItem {
42
42
  * @type {string}
43
43
  */
44
44
  textCls?: string;
45
+
46
+ /**
47
+ * 禁止选择
48
+ * @author lxm
49
+ * @date 2023-10-08 03:49:40
50
+ * @type {boolean}
51
+ */
52
+ disableSelect?: boolean;
45
53
  }
@@ -109,6 +109,7 @@ export class CodeListService {
109
109
  color: codeItem.color,
110
110
  id: codeItem.codeName!,
111
111
  textCls: codeItem.textCls,
112
+ disableSelect: codeItem.disableSelect,
112
113
  };
113
114
  if (codeItem.codeItems?.length) {
114
115
  _codeItem.children = this.formatStaticItems(
@@ -1,5 +1,5 @@
1
1
  import { RuntimeError } from '@ibiz-template/core';
2
- import { SysUIActionTag } from '../constant';
2
+ import { SysUIActionTag, ViewCallTag } from '../constant';
3
3
  import { IUILogicParams, IUIActionResult } from '../interface';
4
4
  import { getUIActionById } from '../model';
5
5
  import { getUIActionProvider } from '../register';
@@ -31,6 +31,13 @@ export class UIActionUtil {
31
31
  if (!action) {
32
32
  throw new RuntimeError(`没找到${actionId}的界面行为模型`);
33
33
  }
34
+ // 单项数据的界面行为执行前校验表单的数据,不通过则拦截
35
+ if (action.actionTarget === 'SINGLEDATA') {
36
+ const validateResult = await params.view.call(ViewCallTag.VALIDATE);
37
+ if (validateResult === false) {
38
+ return { cancel: true };
39
+ }
40
+ }
34
41
  const provider = await getUIActionProvider(action);
35
42
  return provider.exec(action, params);
36
43
  }