@ibiz-template/runtime 0.7.41-alpha.113 → 0.7.41-alpha.114

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 (62) hide show
  1. package/dist/index.esm.js +180 -19
  2. package/dist/index.system.min.js +1 -1
  3. package/out/config/global-config.d.ts.map +1 -1
  4. package/out/config/global-config.js +1 -0
  5. package/out/controller/common/control/md-control.controller.js +1 -1
  6. package/out/controller/control/form/form/form.controller.d.ts +9 -1
  7. package/out/controller/control/form/form/form.controller.d.ts.map +1 -1
  8. package/out/controller/control/form/form/form.controller.js +54 -5
  9. package/out/controller/control/form/form-detail/form-druipart/form-druipart.controller.d.ts.map +1 -1
  10. package/out/controller/control/form/form-detail/form-druipart/form-druipart.controller.js +5 -0
  11. package/out/controller/control/grid/grid/grid.controller.d.ts.map +1 -1
  12. package/out/controller/control/grid/grid/grid.controller.js +10 -2
  13. package/out/controller/control/md-ctrl/md-ctrl.controller.d.ts.map +1 -1
  14. package/out/controller/control/md-ctrl/md-ctrl.controller.js +10 -2
  15. package/out/controller/control/medit-view-panel/medit-view-panel.controller.d.ts +16 -1
  16. package/out/controller/control/medit-view-panel/medit-view-panel.controller.d.ts.map +1 -1
  17. package/out/controller/control/medit-view-panel/medit-view-panel.controller.js +31 -0
  18. package/out/interface/api/call/i-api-medit-view9.call.d.ts +20 -0
  19. package/out/interface/api/call/i-api-medit-view9.call.d.ts.map +1 -1
  20. package/out/interface/api/common/global-config/i-api-global-common-config.d.ts +9 -0
  21. package/out/interface/api/common/global-config/i-api-global-common-config.d.ts.map +1 -1
  22. package/out/interface/api/controller/control/i-api-medit-view-panel.controller.d.ts +9 -0
  23. package/out/interface/api/controller/control/i-api-medit-view-panel.controller.d.ts.map +1 -1
  24. package/out/interface/controller/state/control/i-tree.state.d.ts +12 -0
  25. package/out/interface/controller/state/control/i-tree.state.d.ts.map +1 -1
  26. package/out/locale/en/index.d.ts +3 -0
  27. package/out/locale/en/index.d.ts.map +1 -1
  28. package/out/locale/en/index.js +3 -0
  29. package/out/locale/zh-CN/index.d.ts +3 -0
  30. package/out/locale/zh-CN/index.d.ts.map +1 -1
  31. package/out/locale/zh-CN/index.js +3 -0
  32. package/out/service/vo/tree-node-data/tree-code-list-node-data.d.ts.map +1 -1
  33. package/out/service/vo/tree-node-data/tree-code-list-node-data.js +2 -0
  34. package/out/service/vo/tree-node-data/tree-data-set-node-data.d.ts +14 -0
  35. package/out/service/vo/tree-node-data/tree-data-set-node-data.d.ts.map +1 -1
  36. package/out/service/vo/tree-node-data/tree-data-set-node-data.js +33 -0
  37. package/out/service/vo/tree-node-data/tree-node-data.d.ts +16 -0
  38. package/out/service/vo/tree-node-data/tree-node-data.d.ts.map +1 -1
  39. package/out/service/vo/tree-node-data/tree-node-data.js +25 -0
  40. package/out/service/vo/tree-node-data/tree-static-node-data.d.ts.map +1 -1
  41. package/out/service/vo/tree-node-data/tree-static-node-data.js +2 -0
  42. package/out/ui-action/provider/front-ui-action-provider.d.ts.map +1 -1
  43. package/out/ui-action/provider/front-ui-action-provider.js +3 -1
  44. package/package.json +2 -2
  45. package/src/config/global-config.ts +1 -0
  46. package/src/controller/common/control/md-control.controller.ts +1 -1
  47. package/src/controller/control/form/form/form.controller.ts +58 -11
  48. package/src/controller/control/form/form-detail/form-druipart/form-druipart.controller.ts +3 -0
  49. package/src/controller/control/grid/grid/grid.controller.ts +12 -2
  50. package/src/controller/control/md-ctrl/md-ctrl.controller.ts +12 -2
  51. package/src/controller/control/medit-view-panel/medit-view-panel.controller.ts +39 -1
  52. package/src/interface/api/call/i-api-medit-view9.call.ts +21 -0
  53. package/src/interface/api/common/global-config/i-api-global-common-config.ts +10 -0
  54. package/src/interface/api/controller/control/i-api-medit-view-panel.controller.ts +10 -0
  55. package/src/interface/controller/state/control/i-tree.state.ts +14 -0
  56. package/src/locale/en/index.ts +4 -0
  57. package/src/locale/zh-CN/index.ts +3 -0
  58. package/src/service/vo/tree-node-data/tree-code-list-node-data.ts +2 -0
  59. package/src/service/vo/tree-node-data/tree-data-set-node-data.ts +35 -0
  60. package/src/service/vo/tree-node-data/tree-node-data.ts +33 -0
  61. package/src/service/vo/tree-node-data/tree-static-node-data.ts +2 -0
  62. package/src/ui-action/provider/front-ui-action-provider.ts +3 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tree-data-set-node-data.d.ts","sourceRoot":"","sources":["../../../../src/service/vo/tree-node-data/tree-data-set-node-data.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG3E,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAahD;;;;;;;GAOG;AACH,qBAAa,mBAAoB,SAAQ,YAAa,YAAW,aAAa;IACpE,KAAK,EAAE,MAAM,CAAC;IAEd,GAAG,EAAE,MAAM,CAAC;IAEZ,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,KAAK,CAAC;IAEf,UAAU,EAAE,KAAK,CAAC;IAE1B;;;;OAIG;IACK,KAAK,EAAE,MAAM,mBAAmB,CAAC;gBAGvC,KAAK,EAAE,kBAAkB,EACzB,cAAc,EAAE,aAAa,GAAG,SAAS,EACzC,IAAI,EAAE;QACJ,IAAI,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC;QACd,aAAa,EAAE,OAAO,CAAC;QACvB,OAAO,CAAC,EAAE,QAAQ,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB;IAkNH;;;OAGG;IACU,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpE;;;;;;;OAOG;cACa,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC;IAWvE;;;;;;;OAOG;cACa,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC;IAI3E,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,KAAK,GAAG,SAAS;IAmBhE;;;;;;;OAOG;cACa,kBAAkB,CAChC,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAoB9B;;;;;;;OAOG;cACa,YAAY,CAC1B,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAU9B;;OAEG;IACH,SAAS,IAAI,KAAK;CAGnB"}
1
+ {"version":3,"file":"tree-data-set-node-data.d.ts","sourceRoot":"","sources":["../../../../src/service/vo/tree-node-data/tree-data-set-node-data.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG3E,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAahD;;;;;;;GAOG;AACH,qBAAa,mBAAoB,SAAQ,YAAa,YAAW,aAAa;IACpE,KAAK,EAAE,MAAM,CAAC;IAEd,GAAG,EAAE,MAAM,CAAC;IAEZ,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,KAAK,CAAC;IAEf,UAAU,EAAE,KAAK,CAAC;IAE1B;;;;OAIG;IACK,KAAK,EAAE,MAAM,mBAAmB,CAAC;gBAGvC,KAAK,EAAE,kBAAkB,EACzB,cAAc,EAAE,aAAa,GAAG,SAAS,EACzC,IAAI,EAAE;QACJ,IAAI,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC;QACd,aAAa,EAAE,OAAO,CAAC;QACvB,OAAO,CAAC,EAAE,QAAQ,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB;IAqNH;;;OAGG;IACU,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpE;;;;;;;OAOG;cACa,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC;IAWvE;;;;;;;OAOG;cACa,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC;IAI3E,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,KAAK,GAAG,SAAS;IAmBhE;;;;;OAKG;IACH,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAUxD;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAU7D;;;;;;;OAOG;cACa,kBAAkB,CAChC,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAoB9B;;;;;;;OAOG;cACa,YAAY,CAC1B,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAU9B;;OAEG;IACH,SAAS,IAAI,KAAK;CAGnB"}
@@ -88,6 +88,9 @@ export class TreeDataSetNodeData extends TreeNodeData {
88
88
  else if (model.childCntAppDEFieldId) {
89
89
  this._leaf = !fieldValueToBoolean(data[model.childCntAppDEFieldId]);
90
90
  }
91
+ // 计算动态样式表
92
+ this.calcDynaClass(model);
93
+ this.calcShapeDynaClass(model);
91
94
  /** 数据项和实体属性映射 */
92
95
  const dataItemKeyMap = new Map();
93
96
  const dataItemDefaultMap = new Map();
@@ -274,6 +277,36 @@ export class TreeDataSetNodeData extends TreeNodeData {
274
277
  }
275
278
  return Object.values(icon).length > 0 ? icon : undefined;
276
279
  }
280
+ /**
281
+ * @description 计算动态样式表(附加实体节点样式表属性)
282
+ * @protected
283
+ * @param {IDETreeDataSetNode} model
284
+ * @memberof TreeDataSetNodeData
285
+ */
286
+ calcDynaClass(model) {
287
+ super.calcDynaClass(model);
288
+ const { clsAppDEFieldId } = model;
289
+ if (clsAppDEFieldId && this._deData[clsAppDEFieldId]) {
290
+ const fieldValue = this._deData[clsAppDEFieldId];
291
+ this._dynaClass || (this._dynaClass = []);
292
+ this._dynaClass.push(String(fieldValue));
293
+ }
294
+ }
295
+ /**
296
+ * @description 计算图形动态样式表(附加实体节点图形样式表属性)
297
+ * @protected
298
+ * @param {IDETreeDataSetNode} model
299
+ * @memberof TreeDataSetNodeData
300
+ */
301
+ calcShapeDynaClass(model) {
302
+ super.calcShapeDynaClass(model);
303
+ const { shapeClsAppDEFieldId } = model;
304
+ if (shapeClsAppDEFieldId && this._deData[shapeClsAppDEFieldId]) {
305
+ const fieldValue = this._deData[shapeClsAppDEFieldId];
306
+ this._shapeDynaClass || (this._shapeDynaClass = []);
307
+ this._shapeDynaClass.push(String(fieldValue));
308
+ }
309
+ }
277
310
  /**
278
311
  * 计算节点数据项的自定义脚本内容
279
312
  * @author lxm
@@ -34,6 +34,8 @@ export declare abstract class TreeNodeData implements ITreeNodeData {
34
34
  srfcollapsestate: -1 | 0 | 1;
35
35
  _fullContext?: IContext;
36
36
  _fullParams?: IParams;
37
+ _dynaClass?: string[];
38
+ _shapeDynaClass?: string[];
37
39
  constructor(model: IDETreeNode, parentNodeData: ITreeNodeData | undefined, opts: {
38
40
  leaf: boolean;
39
41
  defaultExpand: boolean;
@@ -57,5 +59,19 @@ export declare abstract class TreeNodeData implements ITreeNodeData {
57
59
  * @memberof TreeNodeData
58
60
  */
59
61
  getDiffData(): IData | undefined;
62
+ /**
63
+ * @description 计算动态样式表
64
+ * @protected
65
+ * @param {IDETreeNode} model
66
+ * @memberof TreeNodeData
67
+ */
68
+ protected calcDynaClass(model: IDETreeNode): void;
69
+ /**
70
+ * @description 计算图形动态样式表
71
+ * @protected
72
+ * @param {IDETreeNode} model
73
+ * @memberof TreeNodeData
74
+ */
75
+ protected calcShapeDynaClass(model: IDETreeNode): void;
60
76
  }
61
77
  //# sourceMappingURL=tree-node-data.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tree-node-data.d.ts","sourceRoot":"","sources":["../../../../src/service/vo/tree-node-data/tree-node-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;;;;GAMG;AACH,8BAAsB,YAAa,YAAW,aAAa;IACzD,KAAK,EAAE,MAAM,CAAgB;IAE7B,SAAS,EAAE,MAAM,CAAC;IAElB,GAAG,EAAG,MAAM,CAAC;IAEb,SAAS,EAAG,MAAM,CAAC;IAEnB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,KAAK,EAAG,MAAM,CAAC;IAEf,SAAS,CAAC,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAExC,OAAO,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAE5B,UAAU,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAE/B,YAAY,EAAE,OAAO,CAAC;IAEtB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,OAAO,EAAE,MAAM,CAAC;IAEhB,KAAK,EAAE,OAAO,CAAS;IAEvB,cAAc,EAAE,OAAO,CAAS;IAEhC,UAAU,EAAE,OAAO,CAAS;IAE5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,gBAAgB,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAM;IAElC,YAAY,CAAC,EAAE,QAAQ,CAAC;IAExB,WAAW,CAAC,EAAE,OAAO,CAAC;gBAGpB,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,aAAa,GAAG,SAAS,EACzC,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO,CAAC;QACd,aAAa,EAAE,OAAO,CAAC;QACvB,OAAO,CAAC,EAAE,QAAQ,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB;IAiEH;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAChB,KAAK,EAAE,WAAW,EAClB,SAAS,CAAC,EAAE,SAAS,GACpB,KAAK,GAAG,SAAS;IA4BpB;;;;;;OAMG;IACH,WAAW,IAAI,KAAK,GAAG,SAAS;CAiBjC"}
1
+ {"version":3,"file":"tree-node-data.d.ts","sourceRoot":"","sources":["../../../../src/service/vo/tree-node-data/tree-node-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG1D;;;;;;GAMG;AACH,8BAAsB,YAAa,YAAW,aAAa;IACzD,KAAK,EAAE,MAAM,CAAgB;IAE7B,SAAS,EAAE,MAAM,CAAC;IAElB,GAAG,EAAG,MAAM,CAAC;IAEb,SAAS,EAAG,MAAM,CAAC;IAEnB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,KAAK,EAAG,MAAM,CAAC;IAEf,SAAS,CAAC,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAExC,OAAO,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAE5B,UAAU,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAE/B,YAAY,EAAE,OAAO,CAAC;IAEtB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,OAAO,EAAE,MAAM,CAAC;IAEhB,KAAK,EAAE,OAAO,CAAS;IAEvB,cAAc,EAAE,OAAO,CAAS;IAEhC,UAAU,EAAE,OAAO,CAAS;IAE5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,gBAAgB,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAM;IAElC,YAAY,CAAC,EAAE,QAAQ,CAAC;IAExB,WAAW,CAAC,EAAE,OAAO,CAAC;IAGtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAGtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;gBAGzB,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,aAAa,GAAG,SAAS,EACzC,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO,CAAC;QACd,aAAa,EAAE,OAAO,CAAC;QACvB,OAAO,CAAC,EAAE,QAAQ,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB;IAiEH;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAChB,KAAK,EAAE,WAAW,EAClB,SAAS,CAAC,EAAE,SAAS,GACpB,KAAK,GAAG,SAAS;IA4BpB;;;;;;OAMG;IACH,WAAW,IAAI,KAAK,GAAG,SAAS;IAkBhC;;;;;OAKG;IACH,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAOjD;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;CAMvD"}
@@ -1,5 +1,6 @@
1
1
  import { createUUID } from 'qx-util';
2
2
  import { isBase64Image } from '@ibiz-template/core';
3
+ import { calcDynaClass } from '../../../model';
3
4
  /**
4
5
  * 树节点数据基类
5
6
  *
@@ -121,4 +122,28 @@ export class TreeNodeData {
121
122
  }
122
123
  return this._deData;
123
124
  }
125
+ /**
126
+ * @description 计算动态样式表
127
+ * @protected
128
+ * @param {IDETreeNode} model
129
+ * @memberof TreeNodeData
130
+ */
131
+ calcDynaClass(model) {
132
+ const data = this._deData || {};
133
+ if (model.dynaClass) {
134
+ this._dynaClass = calcDynaClass(model.dynaClass, data);
135
+ }
136
+ }
137
+ /**
138
+ * @description 计算图形动态样式表
139
+ * @protected
140
+ * @param {IDETreeNode} model
141
+ * @memberof TreeNodeData
142
+ */
143
+ calcShapeDynaClass(model) {
144
+ const data = this._deData || {};
145
+ if (model.shapeDynaClass) {
146
+ this._shapeDynaClass = calcDynaClass(model.shapeDynaClass, data);
147
+ }
148
+ }
124
149
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tree-static-node-data.d.ts","sourceRoot":"","sources":["../../../../src/service/vo/tree-node-data/tree-static-node-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,YAAa,YAAW,aAAa;IAC3E,KAAK,EAAE,MAAM,CAAC;IAEd,GAAG,EAAG,MAAM,CAAC;IAEb,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,EAAE,KAAK,CAAC;gBAGd,KAAK,EAAE,iBAAiB,EACxB,cAAc,EAAE,aAAa,GAAG,SAAS,EACzC,IAAI,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE;CAuC7E"}
1
+ {"version":3,"file":"tree-static-node-data.d.ts","sourceRoot":"","sources":["../../../../src/service/vo/tree-node-data/tree-static-node-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,YAAa,YAAW,aAAa;IAC3E,KAAK,EAAE,MAAM,CAAC;IAEd,GAAG,EAAG,MAAM,CAAC;IAEb,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,EAAE,KAAK,CAAC;gBAGd,KAAK,EAAE,iBAAiB,EACxB,cAAc,EAAE,aAAa,GAAG,SAAS,EACzC,IAAI,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE;CAyC7E"}
@@ -40,5 +40,7 @@ export class TreeStaticNodeData extends TreeNodeData {
40
40
  this.srfkey = ((_a = this._deData) === null || _a === void 0 ? void 0 : _a.srfkey) || this._value;
41
41
  this.srfmajortext = ((_b = this._deData) === null || _b === void 0 ? void 0 : _b.srfmajortext) || this._text;
42
42
  this._icon = this.calcIcon(model);
43
+ this.calcDynaClass(model);
44
+ this.calcShapeDynaClass(model);
43
45
  }
44
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"front-ui-action-provider.d.ts","sourceRoot":"","sources":["../../../src/ui-action/provider/front-ui-action-provider.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,WAAW,EAEX,aAAa,EACb,cAAc,EACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAIL,cAAc,EACd,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAKjE;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,oBAAoB;IACvD,UAAU,CACd,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IAgG3B;;;;;;;;OAQG;cACa,OAAO,CACrB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IAkC3B;;;;;;OAMG;cACa,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC;IAkEhB;;;;;;OAMG;cACa,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IA6B3B;;;;;;OAMG;cACa,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC;IA0EhB;;;;;;;;OAQG;cACa,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IA+D3B;;;;;;;;OAQG;cACa,aAAa,CAC3B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IAuD3B;;;;;;;;OAQG;IACH,SAAS,CAAC,kBAAkB,CAC1B,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,WAAW,CAAC,EAAE,aAAa,GAC1B,WAAW,GAAG,SAAS;IAc1B;;;;;;;;OAQG;cACa,UAAU,CACxB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;CA0B5B"}
1
+ {"version":3,"file":"front-ui-action-provider.d.ts","sourceRoot":"","sources":["../../../src/ui-action/provider/front-ui-action-provider.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,WAAW,EAEX,aAAa,EACb,cAAc,EACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAIL,cAAc,EACd,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAKjE;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,oBAAoB;IACvD,UAAU,CACd,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IAgG3B;;;;;;;;OAQG;cACa,OAAO,CACrB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IAkC3B;;;;;;OAMG;cACa,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC;IAkEhB;;;;;;OAMG;cACa,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IA6B3B;;;;;;OAMG;cACa,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC;IA4EhB;;;;;;;;OAQG;cACa,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IA+D3B;;;;;;;;OAQG;cACa,aAAa,CAC3B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IAuD3B;;;;;;;;OAQG;IACH,SAAS,CAAC,kBAAkB,CAC1B,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,WAAW,CAAC,EAAE,aAAa,GAC1B,WAAW,GAAG,SAAS;IAc1B;;;;;;;;OAQG;cACa,UAAU,CACxB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;CA0B5B"}
@@ -240,7 +240,9 @@ export class FrontUIActionProvider extends UIActionProviderBase {
240
240
  Object.assign(queryParam, { srfdatatype: resultContext.srfdatatype });
241
241
  }
242
242
  // 参数
243
- const params = Object.assign(Object.assign({ page: 0, size: appDEDataExport.maxRowCount ? appDEDataExport.maxRowCount : 1000 }, args.params), resultParams);
243
+ const params = Object.assign(Object.assign({ page: 0, size: appDEDataExport.maxRowCount
244
+ ? appDEDataExport.maxRowCount
245
+ : ibiz.config.common.maxExportRowsDefault }, args.params), resultParams);
244
246
  // 异步导出时只发消息不下载
245
247
  if (isAsyncAction) {
246
248
  const app = await ibiz.hub.getAppAsync(action.appId);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/runtime",
3
- "version": "0.7.41-alpha.113",
3
+ "version": "0.7.41-alpha.114",
4
4
  "description": "运行时逻辑库",
5
5
  "type": "module",
6
6
  "main": "out/index.js",
@@ -70,5 +70,5 @@
70
70
  "qx-util": "^0.4.8",
71
71
  "ramda": "^0.29.0"
72
72
  },
73
- "gitHead": "74e0e6c2da67e6310ccca411945b5cf172a77955"
73
+ "gitHead": "bb921e3d86b25ee998088e744d6d47fb5fedc45c"
74
74
  }
@@ -130,6 +130,7 @@ export class GlobalConfig implements IGlobalConfig {
130
130
  aiChunkEntity: '',
131
131
  counterMaxValue: 99,
132
132
  enhancedUI: false,
133
+ maxExportRowsDefault: 1000,
133
134
  };
134
135
 
135
136
  // 全局分页流布局配置
@@ -890,7 +890,7 @@ export class MDControlController<
890
890
  // 'DataExport',
891
891
  // {
892
892
  // dismiss: (result: unknown) => popover.dismiss(result),
893
- // maxRowCount: dataExport.maxRowCount || 1000,
893
+ // maxRowCount: dataExport.maxRowCount || ibiz.config.common.maxExportRowsDefault,
894
894
  // pageSize: this.state.size,
895
895
  // },
896
896
  // { autoClose: true, placement: 'bottom-end' },
@@ -562,12 +562,19 @@ export abstract class FormController<
562
562
  * @returns {*} {Promise<boolean>}
563
563
  */
564
564
  async validate(): Promise<boolean> {
565
- const values = await Promise.all(
566
- [...this.formItems, ...this.formMDCtrls, ...this.formDruipart].map(
567
- formItem => formItem.validate(),
568
- ),
569
- );
570
- return values.findIndex(value => !value) === -1;
565
+ const details = [
566
+ ...this.formItems,
567
+ ...this.formMDCtrls,
568
+ ...this.formDruipart,
569
+ ];
570
+ const values = await Promise.all(details.map(detail => detail.validate()));
571
+ const result = values.findIndex(value => !value) === -1;
572
+ if (!result) {
573
+ // 收集校验失败的成员并输出错误日志
574
+ const failedDetails = details.filter((_, index) => !values[index]);
575
+ this.logValidateFail(failedDetails);
576
+ }
577
+ return result;
571
578
  }
572
579
 
573
580
  /**
@@ -605,14 +612,47 @@ export abstract class FormController<
605
612
  * @memberof FormController
606
613
  */
607
614
  async silentValidate(): Promise<boolean> {
615
+ const details = [
616
+ ...this.formItems,
617
+ ...this.formMDCtrls,
618
+ ...this.formDruipart,
619
+ ];
608
620
  const values = await Promise.all(
609
- [...this.formItems, ...this.formMDCtrls, ...this.formDruipart].map(
610
- formItem => formItem.silentValidate(),
611
- ),
621
+ details.map(detail => detail.silentValidate()),
612
622
  );
613
623
 
614
624
  // 找不到value为false即全部是true
615
- return values.findIndex(value => !value) === -1;
625
+ const result = values.findIndex(value => !value) === -1;
626
+ if (!result) {
627
+ // 收集校验失败的成员并输出错误日志
628
+ const failedDetails = details.filter((_, index) => !values[index]);
629
+ this.logValidateFail(failedDetails);
630
+ }
631
+ return result;
632
+ }
633
+
634
+ /**
635
+ * 输出校验失败的错误日志
636
+ * @description 收集校验失败的表单成员名称,通过 ibiz.log.error 输出。名称使用表单成员标识
637
+ * @protected
638
+ * @param {FormDetailController[]} failedDetails 校验失败的表单成员集合
639
+ * @memberof FormController
640
+ */
641
+ protected logValidateFail(failedDetails: FormDetailController[]): void {
642
+ const separator = ibiz.i18n.t(
643
+ 'runtime.controller.control.form.validateFailSeparator',
644
+ );
645
+ const names = failedDetails
646
+ .map(detail => detail.model.id || '')
647
+ .filter(name => !!name);
648
+ if (names.length === 0) {
649
+ return;
650
+ }
651
+ ibiz.log.error(
652
+ ibiz.i18n.t('runtime.controller.control.form.validateFail', {
653
+ names: names.join(separator),
654
+ }),
655
+ );
616
656
  }
617
657
 
618
658
  /**
@@ -710,7 +750,14 @@ export abstract class FormController<
710
750
  * @memberof FormController
711
751
  */
712
752
  setDetailError(name: string, message: string): void {
713
- const detail = this.details[name];
753
+ let detail: IFormDetailController | undefined = this.details[name];
754
+ // 界面表单项标识和属性标识可能不一致,尝试通过属性标识找下表单项,后台返回错误信息是以属性标识返回
755
+ if (!detail) {
756
+ detail = Object.values(this.details).find((item: IData) => {
757
+ const fieldId = item?.model?.appDEFieldId;
758
+ return !!fieldId && fieldId === name;
759
+ });
760
+ }
714
761
  const state = detail?.state as FormItemState;
715
762
  if (state) {
716
763
  state.error = message;
@@ -129,6 +129,9 @@ export class FormDRUIPartController
129
129
  if (this.isNeedSyncEmbed && this.embedView && this.embedDataService) {
130
130
  await this.saveEmbedViewData();
131
131
  await this.SyncEmbedDataToForm();
132
+ } else if (this.model.needSave && this.embedView) {
133
+ // 常规子视图保存
134
+ await this.embedView?.call(SysUIActionTag.SAVE);
132
135
  }
133
136
  });
134
137
  }
@@ -1780,7 +1780,12 @@ export class GridController<
1780
1780
  offset: (startPage! - 1) * size,
1781
1781
  size: (endPage! - startPage! + 1) * size,
1782
1782
  }
1783
- : { size: this.dataExport?.maxRowCount || 1000, page: 0 };
1783
+ : {
1784
+ size:
1785
+ this.dataExport?.maxRowCount ||
1786
+ ibiz.config.common.maxExportRowsDefault,
1787
+ page: 0,
1788
+ };
1784
1789
  data = await this.loadData({ viewParam });
1785
1790
  } else if (type === 'selectedRows') {
1786
1791
  data = this.getData();
@@ -1829,7 +1834,12 @@ export class GridController<
1829
1834
  offset: (startPage! - 1) * size,
1830
1835
  size: (endPage! - startPage! + 1) * size,
1831
1836
  }
1832
- : { size: this.dataExport?.maxRowCount || 1000, page: 0 };
1837
+ : {
1838
+ size:
1839
+ this.dataExport?.maxRowCount ||
1840
+ ibiz.config.common.maxExportRowsDefault,
1841
+ page: 0,
1842
+ };
1833
1843
  }
1834
1844
  Object.assign(fetchParams, tempParams);
1835
1845
  // 执行导出
@@ -685,7 +685,12 @@ export class MDCtrlController
685
685
  offset: (startPage - 1) * size,
686
686
  size: (endPage - startPage + 1) * size,
687
687
  }
688
- : { size: this.dataExport?.maxRowCount || 1000, page: 0 };
688
+ : {
689
+ size:
690
+ this.dataExport?.maxRowCount ||
691
+ ibiz.config.common.maxExportRowsDefault,
692
+ page: 0,
693
+ };
689
694
  data = await this.loadData({ viewParam });
690
695
  } else if (type === 'selectedRows') {
691
696
  data = this.getData();
@@ -786,7 +791,12 @@ export class MDCtrlController
786
791
  offset: (startPage - 1) * size,
787
792
  size: (endPage - startPage + 1) * size,
788
793
  }
789
- : { size: this.dataExport?.maxRowCount || 1000, page: 0 };
794
+ : {
795
+ size:
796
+ this.dataExport?.maxRowCount ||
797
+ ibiz.config.common.maxExportRowsDefault,
798
+ page: 0,
799
+ };
790
800
  }
791
801
  Object.assign(fetchParams, tempParams);
792
802
  // 执行导出
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable no-shadow */
2
- import { RuntimeError } from '@ibiz-template/core';
2
+ import { IApiData, IPortalMessage, RuntimeError } from '@ibiz-template/core';
3
3
  import { IDEMultiEditViewPanel } from '@ibiz/model-core';
4
4
  import { createUUID } from 'qx-util';
5
5
  import {
@@ -11,10 +11,12 @@ import {
11
11
  DataChangeEvent,
12
12
  EventBase,
13
13
  IViewController,
14
+ IApiFormSaveParams,
14
15
  } from '../../../interface';
15
16
  import { ControlVO } from '../../../service';
16
17
  import { MDControlController } from '../../common';
17
18
  import { MEditViewPanelService } from './medit-view-panel.service';
19
+ import { SysUIActionTag } from '../../../constant';
18
20
 
19
21
  /**
20
22
  * 多编辑视图面板部件控制器
@@ -328,4 +330,40 @@ export class MEditViewPanelController
328
330
  getActiveView(): IViewController | undefined {
329
331
  return this.embedViews.get(this.state.activeTab);
330
332
  }
333
+
334
+ /**
335
+ * @description 检测实体数据变更,子视图数据变更不应该触发列表加载
336
+ * @protected
337
+ * @param {IPortalMessage} _msg
338
+ * @memberof MEditViewPanelController
339
+ */
340
+ protected onDEDataChange(_msg: IPortalMessage): void {
341
+ ibiz.log.debug(
342
+ ibiz.i18n.t('runtime.controller.control.meditViewPanel.ignoreDataChange'),
343
+ );
344
+ }
345
+
346
+ /**
347
+ * @description 保存数据
348
+ * @param {IApiFormSaveParams} [args]
349
+ * @returns {*} {Promise<IApiData[]>}
350
+ * @memberof MEditViewPanelController
351
+ */
352
+ async save(args: IApiFormSaveParams = { silent: true }): Promise<IApiData[]> {
353
+ if (this.state.panelUiItems.length === 0) {
354
+ return [];
355
+ }
356
+ const allViews = this.state.panelUiItems.map(item => {
357
+ return this.embedViews.get(item.id);
358
+ });
359
+ if (allViews.length === 0) {
360
+ return [];
361
+ }
362
+ const result = await Promise.all(
363
+ allViews.map(async view => {
364
+ return view?.call(SysUIActionTag.SAVE, args);
365
+ }),
366
+ );
367
+ return result.flatMap(r => r?.data ?? []);
368
+ }
331
369
  }
@@ -27,4 +27,25 @@ export interface IApiMEditView9Call extends Omit<IApiMDViewCall, 'New'> {
27
27
  Refresh: {
28
28
  args: undefined;
29
29
  };
30
+
31
+ /**
32
+ * @description 保存
33
+ * @type {{
34
+ * args: undefined;
35
+ * }}
36
+ * @memberof IApiMEditView9Call
37
+ */
38
+ Save: {
39
+ args: undefined;
40
+ };
41
+ /**
42
+ * @description 保存并关闭
43
+ * @type {{
44
+ * args: undefined;
45
+ * }}
46
+ * @memberof IApiMEditView9Call
47
+ */
48
+ SaveAndExit: {
49
+ args: undefined;
50
+ };
30
51
  }
@@ -241,4 +241,14 @@ export interface IApiGlobalCommonConfig {
241
241
  * @memberof IApiGlobalCommonConfig
242
242
  */
243
243
  enhancedUI: boolean;
244
+
245
+ /**
246
+ * @description 导出最大行数默认值
247
+ * @type {number}
248
+ * @default 1000
249
+ * @platform web
250
+ * @platform mob
251
+ * @memberof IApiGlobalCommonConfig
252
+ */
253
+ maxExportRowsDefault: number;
244
254
  }
@@ -1,7 +1,9 @@
1
1
  import { IDEMultiEditViewPanel } from '@ibiz/model-core';
2
+ import { IApiData } from '@ibiz-template/core';
2
3
  import { IApiMEditViewPanelState, IApiPanelUiItem } from '../../state';
3
4
  import { IApiMDControlController } from './i-api-md-control.controller';
4
5
  import { IApiViewController } from '../view';
6
+ import { IApiFormSaveParams } from './i-api-edit-form.controller';
5
7
 
6
8
  /**
7
9
  * 多编辑视图面板
@@ -45,4 +47,12 @@ export interface IApiMEditViewPanelController<
45
47
  * @memberof IApiMEditViewPanelController
46
48
  */
47
49
  getActiveView(): IApiViewController | undefined;
50
+
51
+ /**
52
+ * @description 保存表单数据
53
+ * @param {IApiFormSaveParams} [args] 保存参数
54
+ * @returns {*} {Promise<IApiData[]>}
55
+ * @memberof IApiMEditViewPanelController
56
+ */
57
+ save(args?: IApiFormSaveParams): Promise<IApiData[]>;
48
58
  }
@@ -101,6 +101,20 @@ export interface ITreeNodeData extends IApiTreeNodeData {
101
101
  */
102
102
  _parentValue?: string | undefined;
103
103
 
104
+ /**
105
+ * @description 动态样式表
106
+ * @type {string[]}
107
+ * @memberof ITreeNodeData
108
+ */
109
+ _dynaClass?: string[];
110
+
111
+ /**
112
+ * @description 图形动态样式表
113
+ * @type {string[]}
114
+ * @memberof ITreeNodeData
115
+ */
116
+ _shapeDynaClass?: string[];
117
+
104
118
  /**
105
119
  * @description 获取改变数据
106
120
  * @returns {*} {(IData | undefined)}
@@ -120,6 +120,9 @@ export const en = {
120
120
  },
121
121
  form: {
122
122
  formCompletion: 'Please check the form completion!',
123
+ validateFail:
124
+ 'Form validation failed, failed fields include: {names}',
125
+ validateFailSeparator: ', ',
123
126
  savedSuccessfully: '{srfmajortext}Saved successfully!',
124
127
  prompt: 'prompt',
125
128
  deletion: 'Confirm deletion?',
@@ -197,6 +200,7 @@ export const en = {
197
200
  meditViewPanel: {
198
201
  DraftNew: 'Draft - New',
199
202
  dataExist: 'Edit View Panel widget UI data does not exist',
203
+ ignoreDataChange: 'Ignore data changes in the multi-edit panel',
200
204
  },
201
205
  panel: {
202
206
  panelData: 'Panel data not captured',
@@ -103,6 +103,8 @@ export const zhCn = {
103
103
  },
104
104
  form: {
105
105
  formCompletion: '请检查表单填写!',
106
+ validateFail: '表单校验失败,失败表单成员包含: {names}',
107
+ validateFailSeparator: '、',
106
108
  savedSuccessfully: '{srfmajortext}保存成功',
107
109
  prompt: '提示',
108
110
  deletion: '确认删除吗?',
@@ -163,6 +165,7 @@ export const zhCn = {
163
165
  meditViewPanel: {
164
166
  DraftNew: '草稿--新建',
165
167
  dataExist: '编辑视图面板部件UI数据不存在',
168
+ ignoreDataChange: '多编辑面板忽略数据变更',
166
169
  },
167
170
  panel: {
168
171
  panelData: '未获取到面板数据',
@@ -66,6 +66,8 @@ export class TreeCodeListNodeData
66
66
  this.srfkey = this._value;
67
67
  this.srfmajortext = this._text;
68
68
  this._icon = this.calcIcon(model, data.sysImage);
69
+ this.calcDynaClass(model);
70
+ this.calcShapeDynaClass(model);
69
71
 
70
72
  const getDeKey = (key: string | symbol): string | symbol | undefined => {
71
73
  // deData属性上可枚举的属性,返回该属性名称
@@ -124,6 +124,9 @@ export class TreeDataSetNodeData extends TreeNodeData implements ITreeNodeData {
124
124
  } else if (model.childCntAppDEFieldId) {
125
125
  this._leaf = !fieldValueToBoolean(data[model.childCntAppDEFieldId]);
126
126
  }
127
+ // 计算动态样式表
128
+ this.calcDynaClass(model);
129
+ this.calcShapeDynaClass(model);
127
130
 
128
131
  /** 数据项和实体属性映射 */
129
132
  const dataItemKeyMap = new Map<string | symbol, string | symbol>();
@@ -324,6 +327,38 @@ export class TreeDataSetNodeData extends TreeNodeData implements ITreeNodeData {
324
327
  return Object.values(icon).length > 0 ? icon : undefined;
325
328
  }
326
329
 
330
+ /**
331
+ * @description 计算动态样式表(附加实体节点样式表属性)
332
+ * @protected
333
+ * @param {IDETreeDataSetNode} model
334
+ * @memberof TreeDataSetNodeData
335
+ */
336
+ protected calcDynaClass(model: IDETreeDataSetNode): void {
337
+ super.calcDynaClass(model);
338
+ const { clsAppDEFieldId } = model;
339
+ if (clsAppDEFieldId && this._deData[clsAppDEFieldId]) {
340
+ const fieldValue = this._deData[clsAppDEFieldId];
341
+ this._dynaClass ||= [];
342
+ this._dynaClass.push(String(fieldValue));
343
+ }
344
+ }
345
+
346
+ /**
347
+ * @description 计算图形动态样式表(附加实体节点图形样式表属性)
348
+ * @protected
349
+ * @param {IDETreeDataSetNode} model
350
+ * @memberof TreeDataSetNodeData
351
+ */
352
+ protected calcShapeDynaClass(model: IDETreeDataSetNode): void {
353
+ super.calcShapeDynaClass(model);
354
+ const { shapeClsAppDEFieldId } = model;
355
+ if (shapeClsAppDEFieldId && this._deData[shapeClsAppDEFieldId]) {
356
+ const fieldValue = this._deData[shapeClsAppDEFieldId];
357
+ this._shapeDynaClass ||= [];
358
+ this._shapeDynaClass.push(String(fieldValue));
359
+ }
360
+ }
361
+
327
362
  /**
328
363
  * 计算节点数据项的自定义脚本内容
329
364
  * @author lxm
@@ -2,6 +2,7 @@ import { IDETreeNode, ISysImage } from '@ibiz/model-core';
2
2
  import { createUUID } from 'qx-util';
3
3
  import { isBase64Image } from '@ibiz-template/core';
4
4
  import { IIcon, ITreeNodeData } from '../../../interface';
5
+ import { calcDynaClass } from '../../../model';
5
6
 
6
7
  /**
7
8
  * 树节点数据基类
@@ -63,6 +64,12 @@ export abstract class TreeNodeData implements ITreeNodeData {
63
64
 
64
65
  _fullParams?: IParams;
65
66
 
67
+ // 动态样式表
68
+ _dynaClass?: string[];
69
+
70
+ // 图形动态样式表
71
+ _shapeDynaClass?: string[];
72
+
66
73
  constructor(
67
74
  model: IDETreeNode,
68
75
  parentNodeData: ITreeNodeData | undefined,
@@ -199,4 +206,30 @@ export abstract class TreeNodeData implements ITreeNodeData {
199
206
  }
200
207
  return this._deData;
201
208
  }
209
+
210
+ /**
211
+ * @description 计算动态样式表
212
+ * @protected
213
+ * @param {IDETreeNode} model
214
+ * @memberof TreeNodeData
215
+ */
216
+ protected calcDynaClass(model: IDETreeNode): void {
217
+ const data = this._deData || {};
218
+ if (model.dynaClass) {
219
+ this._dynaClass = calcDynaClass(model.dynaClass, data);
220
+ }
221
+ }
222
+
223
+ /**
224
+ * @description 计算图形动态样式表
225
+ * @protected
226
+ * @param {IDETreeNode} model
227
+ * @memberof TreeNodeData
228
+ */
229
+ protected calcShapeDynaClass(model: IDETreeNode): void {
230
+ const data = this._deData || {};
231
+ if (model.shapeDynaClass) {
232
+ this._shapeDynaClass = calcDynaClass(model.shapeDynaClass, data);
233
+ }
234
+ }
202
235
  }