@ibiz-template/runtime 0.1.12-dev.0 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/dist/index.esm.js +6294 -371
  2. package/dist/index.system.min.js +1 -1
  3. package/dist/index.system.min.js.map +1 -1
  4. package/out/controller/common/control/md-control.controller.d.ts.map +1 -1
  5. package/out/controller/common/control/md-control.controller.js +9 -0
  6. package/out/controller/common/editor/editor.controller.d.ts +1 -1
  7. package/out/controller/common/editor/editor.controller.d.ts.map +1 -1
  8. package/out/controller/common/editor/editor.controller.js +2 -4
  9. package/out/controller/control/app-menu/app-menu.controller.d.ts +1 -1
  10. package/out/controller/control/app-menu/app-menu.controller.d.ts.map +1 -1
  11. package/out/controller/control/app-menu/app-menu.controller.js +2 -2
  12. package/out/controller/control/caption-bar/caption-bar.controller.d.ts.map +1 -1
  13. package/out/controller/control/caption-bar/caption-bar.controller.js +1 -2
  14. package/out/controller/control/chart/chart.controller.js +1 -1
  15. package/out/controller/control/chart/generator/base-series-generator.d.ts.map +1 -1
  16. package/out/controller/control/chart/generator/base-series-generator.js +5 -4
  17. package/out/controller/control/chart/generator/chart-options-generator.d.ts +25 -1
  18. package/out/controller/control/chart/generator/chart-options-generator.d.ts.map +1 -1
  19. package/out/controller/control/chart/generator/chart-options-generator.js +29 -1
  20. package/out/controller/control/exp-bar/exp-bar.controller.d.ts.map +1 -1
  21. package/out/controller/control/exp-bar/exp-bar.controller.js +19 -0
  22. package/out/controller/control/form/edit-form/edit-form.controller.d.ts +7 -0
  23. package/out/controller/control/form/edit-form/edit-form.controller.d.ts.map +1 -1
  24. package/out/controller/control/form/edit-form/edit-form.controller.js +54 -19
  25. package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-item.controller.d.ts +4 -2
  26. package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-item.controller.d.ts.map +1 -1
  27. package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-item.controller.js +22 -2
  28. package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.controller.d.ts +3 -62
  29. package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.controller.d.ts.map +1 -1
  30. package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.controller.js +7 -97
  31. package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.controller.d.ts +2 -48
  32. package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.controller.d.ts.map +1 -1
  33. package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.controller.js +2 -94
  34. package/out/controller/control/form/search-form/search-form.controller.js +1 -0
  35. package/out/controller/control/form/search-form/search-form.service.d.ts +1 -1
  36. package/out/controller/control/form/search-form/search-form.service.d.ts.map +1 -1
  37. package/out/controller/control/form/search-form/search-form.service.js +2 -3
  38. package/out/controller/control/grid/grid/grid-column.controller.d.ts +16 -0
  39. package/out/controller/control/grid/grid/grid-column.controller.d.ts.map +1 -1
  40. package/out/controller/control/grid/grid/grid-column.controller.js +22 -0
  41. package/out/controller/control/grid/grid/grid.controller.d.ts +8 -0
  42. package/out/controller/control/grid/grid/grid.controller.d.ts.map +1 -1
  43. package/out/controller/control/grid/grid/grid.controller.js +20 -8
  44. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts +8 -0
  45. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts.map +1 -1
  46. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.js +20 -1
  47. package/out/controller/control/index.d.ts +1 -0
  48. package/out/controller/control/index.d.ts.map +1 -1
  49. package/out/controller/control/index.js +1 -0
  50. package/out/controller/control/md-ctrl/index.d.ts +4 -0
  51. package/out/controller/control/md-ctrl/index.d.ts.map +1 -0
  52. package/out/controller/control/md-ctrl/index.js +3 -0
  53. package/out/controller/control/md-ctrl/md-ctrl-row.state.d.ts +34 -0
  54. package/out/controller/control/md-ctrl/md-ctrl-row.state.d.ts.map +1 -0
  55. package/out/controller/control/md-ctrl/md-ctrl-row.state.js +31 -0
  56. package/out/controller/control/md-ctrl/md-ctrl.controller.d.ts +77 -0
  57. package/out/controller/control/md-ctrl/md-ctrl.controller.d.ts.map +1 -0
  58. package/out/controller/control/md-ctrl/md-ctrl.controller.js +160 -0
  59. package/out/controller/control/md-ctrl/md-ctrl.service.d.ts +21 -0
  60. package/out/controller/control/md-ctrl/md-ctrl.service.d.ts.map +1 -0
  61. package/out/controller/control/md-ctrl/md-ctrl.service.js +40 -0
  62. package/out/controller/control/panel/panel/panel-item.controller.js +1 -1
  63. package/out/controller/control/panel/panel/panel.controller.d.ts.map +1 -1
  64. package/out/controller/control/panel/panel/panel.controller.js +4 -2
  65. package/out/controller/control/search-bar/search-bar.controller.d.ts.map +1 -1
  66. package/out/controller/control/search-bar/search-bar.controller.js +15 -6
  67. package/out/engine/md-view.engine.d.ts.map +1 -1
  68. package/out/engine/md-view.engine.js +9 -3
  69. package/out/global/global-util/global-util.d.ts +8 -1
  70. package/out/global/global-util/global-util.d.ts.map +1 -1
  71. package/out/global/global-util/global-util.js +8 -1
  72. package/out/hub/config/app-view-config-service.d.ts.map +1 -1
  73. package/out/hub/config/app-view-config-service.js +1 -0
  74. package/out/interface/common/i-app-view-config-service/i-app-view-config-service.d.ts +4 -0
  75. package/out/interface/common/i-app-view-config-service/i-app-view-config-service.d.ts.map +1 -1
  76. package/out/interface/controller/event/control/i-edit-form.event.d.ts +48 -3
  77. package/out/interface/controller/event/control/i-edit-form.event.d.ts.map +1 -1
  78. package/out/interface/controller/event/control/i-form.event.d.ts +27 -0
  79. package/out/interface/controller/event/control/i-form.event.d.ts.map +1 -1
  80. package/out/interface/controller/event/control/i-md-control.event.d.ts +57 -14
  81. package/out/interface/controller/event/control/i-md-control.event.d.ts.map +1 -1
  82. package/out/interface/controller/state/control/i-exp-bar-control.state.d.ts +7 -0
  83. package/out/interface/controller/state/control/i-exp-bar-control.state.d.ts.map +1 -1
  84. package/out/interface/controller/state/control/i-search-bar.state.d.ts +7 -0
  85. package/out/interface/controller/state/control/i-search-bar.state.d.ts.map +1 -1
  86. package/out/logic-scheduler/executor/app-ui-logic-executor.d.ts +3 -3
  87. package/out/logic-scheduler/executor/app-ui-logic-executor.d.ts.map +1 -1
  88. package/out/logic-scheduler/executor/app-ui-logic-executor.js +3 -3
  89. package/out/service/service/code-list/code-list.service.d.ts.map +1 -1
  90. package/out/service/service/code-list/code-list.service.js +1 -1
  91. package/out/service/service/entity/method/method.d.ts.map +1 -1
  92. package/out/service/service/entity/method/method.js +4 -4
  93. package/out/service/utils/dynamic-code-list/dynamic-code-list.js +1 -1
  94. package/out/service/utils/index.d.ts +0 -1
  95. package/out/service/utils/index.d.ts.map +1 -1
  96. package/out/service/utils/index.js +0 -1
  97. package/out/ui-action/provider/backend-ui-action-provider.d.ts.map +1 -1
  98. package/out/ui-action/provider/backend-ui-action-provider.js +2 -3
  99. package/out/ui-action/uiaction-util.js +1 -1
  100. package/out/utils/handlebars/handlebars.d.ts +50 -0
  101. package/out/utils/handlebars/handlebars.d.ts.map +1 -0
  102. package/out/utils/handlebars/handlebars.js +64 -0
  103. package/out/utils/index.d.ts +1 -0
  104. package/out/utils/index.d.ts.map +1 -1
  105. package/out/utils/index.js +1 -0
  106. package/out/utils/script/script-function.d.ts.map +1 -1
  107. package/out/utils/script/script-function.js +3 -0
  108. package/out/utils/text-util/text-util.d.ts +9 -0
  109. package/out/utils/text-util/text-util.d.ts.map +1 -1
  110. package/out/utils/text-util/text-util.js +11 -0
  111. package/package.json +5 -3
  112. package/src/controller/common/control/md-control.controller.ts +7 -0
  113. package/src/controller/common/editor/editor.controller.ts +3 -6
  114. package/src/controller/control/app-menu/app-menu.controller.ts +6 -3
  115. package/src/controller/control/caption-bar/caption-bar.controller.ts +1 -2
  116. package/src/controller/control/chart/chart.controller.ts +1 -1
  117. package/src/controller/control/chart/generator/base-series-generator.ts +5 -3
  118. package/src/controller/control/chart/generator/chart-options-generator.ts +39 -1
  119. package/src/controller/control/exp-bar/exp-bar.controller.ts +25 -0
  120. package/src/controller/control/form/edit-form/edit-form.controller.ts +55 -24
  121. package/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-item.controller.ts +41 -4
  122. package/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.controller.ts +11 -159
  123. package/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.controller.ts +2 -140
  124. package/src/controller/control/form/search-form/search-form.controller.ts +1 -1
  125. package/src/controller/control/form/search-form/search-form.service.ts +2 -3
  126. package/src/controller/control/grid/grid/grid-column.controller.ts +22 -0
  127. package/src/controller/control/grid/grid/grid.controller.ts +25 -7
  128. package/src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts +21 -1
  129. package/src/controller/control/index.ts +1 -0
  130. package/src/controller/control/md-ctrl/index.ts +3 -0
  131. package/src/controller/control/md-ctrl/md-ctrl-row.state.ts +40 -0
  132. package/src/controller/control/md-ctrl/md-ctrl.controller.ts +199 -0
  133. package/src/controller/control/md-ctrl/md-ctrl.service.ts +40 -0
  134. package/src/controller/control/panel/panel/panel-item.controller.ts +1 -1
  135. package/src/controller/control/panel/panel/panel.controller.ts +6 -2
  136. package/src/controller/control/search-bar/search-bar.controller.ts +21 -8
  137. package/src/engine/md-view.engine.ts +7 -3
  138. package/src/global/global-util/global-util.ts +9 -1
  139. package/src/hub/config/app-view-config-service.ts +1 -0
  140. package/src/interface/common/i-app-view-config-service/i-app-view-config-service.ts +4 -0
  141. package/src/interface/controller/event/control/i-edit-form.event.ts +53 -3
  142. package/src/interface/controller/event/control/i-form.event.ts +30 -0
  143. package/src/interface/controller/event/control/i-md-control.event.ts +63 -15
  144. package/src/interface/controller/state/control/i-exp-bar-control.state.ts +8 -0
  145. package/src/interface/controller/state/control/i-search-bar.state.ts +8 -0
  146. package/src/logic-scheduler/executor/app-ui-logic-executor.ts +5 -5
  147. package/src/service/service/code-list/code-list.service.ts +1 -4
  148. package/src/service/service/entity/method/method.ts +4 -8
  149. package/src/service/utils/dynamic-code-list/dynamic-code-list.ts +1 -1
  150. package/src/service/utils/index.ts +0 -1
  151. package/src/ui-action/provider/backend-ui-action-provider.ts +2 -3
  152. package/src/ui-action/uiaction-util.ts +1 -1
  153. package/src/utils/handlebars/handlebars.ts +70 -0
  154. package/src/utils/index.ts +1 -0
  155. package/src/utils/script/script-function.ts +3 -0
  156. package/src/utils/text-util/text-util.ts +12 -0
  157. package/out/service/utils/route-context/route-context.d.ts +0 -20
  158. package/out/service/utils/route-context/route-context.d.ts.map +0 -1
  159. package/out/service/utils/route-context/route-context.js +0 -71
  160. package/src/service/utils/route-context/route-context.ts +0 -75
@@ -157,6 +157,9 @@ export class MDControlController<
157
157
  await this._evt.emit('onLoadSuccess', {
158
158
  isInitialLoad,
159
159
  });
160
+ } catch (error) {
161
+ await this._evt.emit('onLoadError', undefined);
162
+ throw error;
160
163
  } finally {
161
164
  await this.endLoading();
162
165
  }
@@ -210,6 +213,7 @@ export class MDControlController<
210
213
  }
211
214
  }
212
215
 
216
+ await this._evt.emit('onBeforeRemove', undefined);
213
217
  await this.startLoading();
214
218
  let needRefresh = false;
215
219
  try {
@@ -241,6 +245,9 @@ export class MDControlController<
241
245
  if (needRefresh) {
242
246
  this.refresh();
243
247
  }
248
+ } catch (error) {
249
+ await this._evt.emit('onRemoveError', undefined);
250
+ throw error;
244
251
  } finally {
245
252
  await this.endLoading();
246
253
  }
@@ -110,7 +110,7 @@ export class EditorController<T extends IEditor = IEditor>
110
110
  }
111
111
  if (this.model.editorParams) {
112
112
  Object.keys(this.model.editorParams).forEach(key => {
113
- this.editorParams[key.toLowerCase()] = this.model.editorParams![key];
113
+ this.editorParams[key] = this.model.editorParams![key];
114
114
  });
115
115
  }
116
116
  }
@@ -126,21 +126,18 @@ export class EditorController<T extends IEditor = IEditor>
126
126
  data: IData,
127
127
  context: IContext,
128
128
  params: IParams,
129
- ): { context: IContext; params: IParams } {
129
+ ): { context: IData; params: IParams } {
130
130
  const { navigateContexts, navigateParams } = this
131
131
  .model as INavigateParamContainer;
132
132
  let selfContext = {};
133
133
  if (navigateContexts && data) {
134
134
  selfContext = convertNavData(navigateContexts!, context, params, data);
135
135
  }
136
- const _context = Object.assign(context.clone(), selfContext);
137
-
138
136
  let selfParams = {};
139
137
  if (navigateParams && data) {
140
138
  selfParams = convertNavData(navigateParams!, context, params, data);
141
139
  }
142
- const _params: IParams = { ...params, ...selfParams };
143
- return { context: _context, params: _params };
140
+ return { context: selfContext, params: selfParams };
144
141
  }
145
142
 
146
143
  /**
@@ -64,7 +64,11 @@ export class AppMenuController
64
64
  * @param {string} id
65
65
  * @return {*} {Promise<void>}
66
66
  */
67
- async onClickMenuItem(id: string, event?: MouseEvent): Promise<void> {
67
+ async onClickMenuItem(
68
+ id: string,
69
+ event?: MouseEvent,
70
+ useDepth: boolean = true,
71
+ ): Promise<void> {
68
72
  const menuItem = findRecursiveChild(this.model, id, {
69
73
  compareField: 'id',
70
74
  childrenFields: ['appMenuItems'],
@@ -83,8 +87,7 @@ export class AppMenuController
83
87
  }
84
88
 
85
89
  const tempContext = this.context.clone();
86
-
87
- if (this.routeDepth) {
90
+ if (this.routeDepth && useDepth) {
88
91
  Object.assign(tempContext, {
89
92
  toRouteDepth: this.routeDepth + 1,
90
93
  });
@@ -24,8 +24,7 @@ export class CaptionBarController
24
24
  if (this.view.model.capLanguageRes) {
25
25
  this.state.caption = ibiz.i18n.t(
26
26
  this.view.model.capLanguageRes.lanResTag!,
27
- this.view.model.capLanguageRes.defaultContent ||
28
- this.view.model.caption,
27
+ this.view.model.caption,
29
28
  );
30
29
  } else {
31
30
  this.state.caption = this.view.model.caption!;
@@ -45,7 +45,7 @@ export class ChartController
45
45
  this.service = new ChartService(this.model);
46
46
  await this.service.init(this.context);
47
47
  this.generator = new ChartOptionsGenerator(this.model);
48
- await this.generator.loadCodeList(this.context, this.params);
48
+ await this.generator.init(this.context, this.params);
49
49
 
50
50
  // 监听resize调整图表大小
51
51
  window.addEventListener('resize', this.resizeChart);
@@ -147,9 +147,11 @@ export class BaseSeriesGenerator<T extends IDEChartSeries = IDEChartSeries> {
147
147
  if (!model.valueField) {
148
148
  throw new RuntimeModelError(model, '缺少值属性配置');
149
149
  }
150
- this.catalogField = model.catalogField!.toLowerCase();
151
- this.valueField = model.valueField!.toLowerCase();
152
- this.groupField = model.seriesField?.toLowerCase();
150
+ this.catalogField = chartGenerator.getFieldKey(model.catalogField);
151
+ this.valueField = chartGenerator.getFieldKey(model.valueField);
152
+ this.groupField = model.seriesField
153
+ ? chartGenerator.getFieldKey(model.seriesField)
154
+ : undefined;
153
155
 
154
156
  const { chartXAxisId, chartYAxisId } = (chartSeriesEncode ||
155
157
  {}) as IChartSeriesCSCartesian2DEncode;
@@ -6,6 +6,7 @@ import type {
6
6
  ECElementEvent,
7
7
  } from 'echarts';
8
8
  import {
9
+ IAppDataEntity,
9
10
  IChartXAxis,
10
11
  IChartYAxis,
11
12
  IDEChart,
@@ -54,6 +55,14 @@ export function parseUserParams(userParams: Record<string, string>): IData {
54
55
  }
55
56
 
56
57
  export class ChartOptionsGenerator {
58
+ /**
59
+ * 实体模型
60
+ * @author lxm
61
+ * @date 2023-08-29 06:39:01
62
+ * @type {IAppDataEntity}
63
+ */
64
+ entity!: IAppDataEntity;
65
+
57
66
  /**
58
67
  * 根据模型配置算出来的静态echarts配置
59
68
  * @author lxm
@@ -106,7 +115,6 @@ export class ChartOptionsGenerator {
106
115
  codeListMap: Map<string, Readonly<CodeListItem[]>> = new Map();
107
116
 
108
117
  constructor(private model: IDEChart) {
109
- this.initSeriesGenerators();
110
118
  const {
111
119
  dechartTitle,
112
120
  dechartLegend,
@@ -199,6 +207,10 @@ export class ChartOptionsGenerator {
199
207
  const { showLegend, legendPos } = chartLegend;
200
208
  const legendOption: EChartsOption['legend'] = {};
201
209
  legendOption.show = showLegend;
210
+ // 图表单序列不应出图例
211
+ if (this.model.dechartSerieses?.length === 1) {
212
+ legendOption.show = false;
213
+ }
202
214
  const position = legendPos?.toLowerCase();
203
215
  if (position === 'left' || position === 'right') {
204
216
  legendOption.left = position;
@@ -252,6 +264,32 @@ export class ChartOptionsGenerator {
252
264
  return AxisOption;
253
265
  }
254
266
 
267
+ /**
268
+ * 初始化
269
+ * @author lxm
270
+ * @date 2023-08-29 06:34:04
271
+ * @param {IContext} context
272
+ * @param {IParams} params
273
+ * @return {*} {Promise<void>}
274
+ */
275
+ async init(context: IContext, params: IParams): Promise<void> {
276
+ await this.loadCodeList(context, params);
277
+ this.entity = await ibiz.hub.getAppDataEntity(this.model.appDataEntityId!);
278
+ this.initSeriesGenerators();
279
+ }
280
+
281
+ /**
282
+ * 找到实体属性的codeName小写
283
+ * @author lxm
284
+ * @date 2023-08-29 06:42:06
285
+ * @param {string} fieldName 属性的name
286
+ * @return {*} {string}
287
+ */
288
+ getFieldKey(fieldName: string): string {
289
+ const find = this.entity.appDEFields!.find(item => item.name === fieldName);
290
+ return find ? find.codeName!.toLowerCase() : fieldName.toLowerCase();
291
+ }
292
+
255
293
  /**
256
294
  * 加载代码表,
257
295
  * - 如果已经加载过会清空缓存重新加载
@@ -164,6 +164,31 @@ export class ExpBarControlController<
164
164
  protected async onCreated(): Promise<void> {
165
165
  await super.onCreated();
166
166
  this.childNames.push(this.model.xdataControlName!);
167
+ const appDataEntity = await ibiz.hub.getAppDataEntity(
168
+ this.model.appDataEntityId!,
169
+ this.context.srfappid,
170
+ )!;
171
+ if (appDataEntity) {
172
+ const searchFields = appDataEntity.appDEFields?.filter(field => {
173
+ return field.enableQuickSearch;
174
+ });
175
+ const placeHolders: string[] = [];
176
+ searchFields?.forEach(searchField => {
177
+ if (searchField?.lnlanguageRes && searchField.lnlanguageRes.lanResTag) {
178
+ placeHolders.push(
179
+ ibiz.i18n.t(
180
+ searchField.lnlanguageRes.lanResTag,
181
+ searchField.logicName,
182
+ ),
183
+ );
184
+ } else if (searchField?.logicName) {
185
+ placeHolders.push(searchField.logicName);
186
+ }
187
+ });
188
+ if (placeHolders.length > 0) {
189
+ this.state.placeHolder = placeHolders.join('、');
190
+ }
191
+ }
167
192
  }
168
193
 
169
194
  /**
@@ -59,6 +59,41 @@ export class EditFormController
59
59
  }) as () => Promise<void>;
60
60
  }
61
61
 
62
+ /**
63
+ * 加载草稿行为
64
+ * @author lxm
65
+ * @date 2023-08-25 02:45:11
66
+ * @return {*} {Promise<IData>}
67
+ */
68
+ async loadDraft(): Promise<IData> {
69
+ const queryParams = { ...this.params };
70
+ // 新建默认值给到graft接口,接口会回来
71
+ const params = await this.getDraftParams(); // 新建默认值
72
+ Object.assign(queryParams, params);
73
+
74
+ let res;
75
+ try {
76
+ await this.startLoading();
77
+ await this.evt.emit('onBeforeLoadDraft', { params: queryParams });
78
+ res = await this.service.getDraft(this.context, queryParams);
79
+ } catch (error) {
80
+ await this.evt.emit('onLoadDraftError', undefined);
81
+ throw error;
82
+ } finally {
83
+ await this.endLoading();
84
+ }
85
+
86
+ this.state.data = res.data;
87
+ // 处理后台导致的新建默认值丢失
88
+ mergeDefaultInLeft(this.data, params);
89
+
90
+ this.formStateNotify(FormNotifyState.DRAFT);
91
+
92
+ await this.evt.emit('onLoadDraftSuccess', undefined);
93
+ this.state.isLoaded = true;
94
+ return this.data;
95
+ }
96
+
62
97
  /**
63
98
  * 部件加载数据行为
64
99
  *
@@ -70,42 +105,30 @@ export class EditFormController
70
105
  this.context,
71
106
  this.model.appDataEntityId!,
72
107
  );
73
- const queryParams = { ...this.params };
74
-
75
- // 新建默认值给到graft接口,接口会回来
76
- let params: IData = {};
108
+ // 加载草稿单独走一个方法
77
109
  if (isLoadDraft) {
78
- params = await this.getDraftParams();
79
- Object.assign(queryParams, params);
110
+ return this.loadDraft();
80
111
  }
81
112
 
82
- await this.startLoading();
113
+ const queryParams = { ...this.params };
114
+
83
115
  let res;
84
116
  try {
85
- res = isLoadDraft
86
- ? await this.service.getDraft(this.context, queryParams)
87
- : await this.service.get(this.context, queryParams);
117
+ await this.startLoading();
118
+ await this.evt.emit('onBeforeLoad', undefined);
119
+ res = await this.service.get(this.context, queryParams);
120
+ } catch (error) {
121
+ await this.evt.emit('onLoadError', undefined);
122
+ throw error;
88
123
  } finally {
89
124
  await this.endLoading();
90
125
  }
91
126
 
92
- if (isLoadDraft) {
93
- // !getDraft的时候不替换,进行合并,空值不覆盖
94
- mergeInLeft(this.data, res.data);
95
- } else {
96
- this.state.data = res.data;
97
- }
98
127
  this.state.modified = false;
99
128
  this.state.data = res.data;
100
- mergeDefaultInLeft(this.data, params);
101
- this.formStateNotify(
102
- isLoadDraft ? FormNotifyState.DRAFT : FormNotifyState.LOAD,
103
- );
129
+ this.formStateNotify(FormNotifyState.LOAD);
104
130
 
105
- await this.evt.emit(
106
- isLoadDraft ? 'onLoadDraftSuccess' : 'onLoadSuccess',
107
- undefined,
108
- );
131
+ await this.evt.emit('onLoadSuccess', undefined);
109
132
  this.state.isLoaded = true;
110
133
  return this.data;
111
134
  }
@@ -128,12 +151,16 @@ export class EditFormController
128
151
  throw new RuntimeError('请检查表单填写!');
129
152
  }
130
153
  await this.startLoading();
154
+ await this.evt.emit('onBeforeSave', undefined);
131
155
  let res;
132
156
  try {
133
157
  res =
134
158
  this.data.srfuf === Srfuf.CREATE
135
159
  ? await this.service.create(this.context, this.data)
136
160
  : await this.service.update(this.context, this.data);
161
+ } catch (error) {
162
+ await this.evt.emit('onSaveError', undefined);
163
+ throw error;
137
164
  } finally {
138
165
  await this.endLoading();
139
166
  }
@@ -159,6 +186,7 @@ export class EditFormController
159
186
  // 新建数据清空数据
160
187
  let res: IHttpResponse | undefined;
161
188
  let ok: boolean = false;
189
+ await this.evt.emit('onBeforeRemove', undefined);
162
190
  // 新建的数据不用进行后台删除
163
191
  if (this.data.srfuf === Srfuf.UPDATE) {
164
192
  ok = await ibiz.modal.confirm({
@@ -172,6 +200,9 @@ export class EditFormController
172
200
  await this.startLoading();
173
201
  try {
174
202
  res = await this.service.remove(this.context, this.params);
203
+ } catch (error) {
204
+ await this.evt.emit('onRemoveError', undefined);
205
+ throw error;
175
206
  } finally {
176
207
  await this.endLoading();
177
208
  }
@@ -1,7 +1,12 @@
1
- import { IControl, IDEFormMDCtrl } from '@ibiz/model-core';
1
+ import { IControl, IDEFormDetail, IDEFormMDCtrl } from '@ibiz/model-core';
2
2
  import { IFormController } from '../../../../../../../interface';
3
+ import { findChildFormDetails } from '../../../../../../../model';
4
+ import { getFormDetailProvider } from '../../../../../../../register';
3
5
  import { CTX } from '../../../../../../ctx';
4
6
  import { EditFormController } from '../../../../edit-form';
7
+ import { FormController } from '../../../../form';
8
+ import { FormGroupPanelController } from '../../../form-group-panel';
9
+ import { FormItemController } from '../../../form-item';
5
10
 
6
11
  /**
7
12
  * 表单多数据部件项控制器
@@ -28,9 +33,41 @@ export class FormMDCtrlItemController
28
33
  this.state.isSimple = true;
29
34
  }
30
35
 
31
- public async onInit(): Promise<void> {
32
- await this.initDetailControllers(
33
- (this.model as IDEFormMDCtrl).deformDetails,
36
+ protected async initDetailControllers(
37
+ details: IDEFormDetail[] = (this.model as IDEFormMDCtrl).deformDetails!,
38
+ form: FormController = this,
39
+ parent: FormGroupPanelController | undefined = undefined,
40
+ ): Promise<void> {
41
+ await Promise.all(
42
+ details.map(async detail => {
43
+ // 生成表单成员控制器
44
+ const detailProvider = await getFormDetailProvider(detail);
45
+ if (!detailProvider) {
46
+ return;
47
+ }
48
+ form.providers[detail.id!] = detailProvider;
49
+ const detailController = await detailProvider.createController(
50
+ detail,
51
+ form,
52
+ parent,
53
+ );
54
+ form.details[detail.id!] = detailController;
55
+ if (
56
+ detail.detailType === 'FORMITEM' ||
57
+ detail.detailType === 'MDCTRL'
58
+ ) {
59
+ form.formItems.push(detailController as FormItemController);
60
+ }
61
+ // 有子成员的生成子控制器
62
+ const childDetails = findChildFormDetails(detail);
63
+ if (childDetails.length) {
64
+ await this.initDetailControllers(
65
+ childDetails,
66
+ form,
67
+ detailController as FormGroupPanelController,
68
+ );
69
+ }
70
+ }),
34
71
  );
35
72
  }
36
73
  }
@@ -1,15 +1,5 @@
1
- // import { useCtx } from '@ibiz-template/vue3-util';
2
- import { IDEFormDetail } from '@ibiz/model-core';
3
- // import { reactive } from 'vue';
4
- import { FormController } from '../../../../form';
5
- import { FormGroupPanelController } from '../../../form-group-panel';
6
1
  import { FormMDCtrlContentTypeController } from '../../form-mdctrl-content-type.controller';
7
2
  import { FormMDCtrlItemController } from './form-mdctrl-repeater-form-item.controller';
8
- import { FormItemController } from '../../../form-item';
9
- import { IFormDetailController } from '../../../../../../../interface';
10
- import { findChildFormDetails } from '../../../../../../../model';
11
- import { getFormDetailProvider } from '../../../../../../../register';
12
- import { CTX } from '../../../../../../ctx';
13
3
 
14
4
  /**
15
5
  * 表单多数据部件表格类型控制器
@@ -22,108 +12,6 @@ import { CTX } from '../../../../../../ctx';
22
12
  * @implements {IFormController}
23
13
  */
24
14
  export class FormMDCtrlRepeaterFormController extends FormMDCtrlContentTypeController {
25
- /**
26
- * 表单项控制器的集合(二维数组)
27
- *
28
- * @author zk
29
- * @date 2023-07-25 05:07:56
30
- * @type {Array<Array<FormItemController>>}
31
- * @memberof FormMDCtrlController
32
- */
33
- formDetails: Array<
34
- Array<{ name: string; detailType: string; c: IFormDetailController }>
35
- > = [];
36
-
37
- /**
38
- * 表单ctx
39
- *
40
- * @author zk
41
- * @date 2023-07-31 12:07:00
42
- * @private
43
- * @type {CTX}
44
- * @memberof FormMDCtrlRepeaterFormController
45
- */
46
- private formCtx!: CTX;
47
-
48
- /**
49
- * uiState
50
- *
51
- * @author zk
52
- * @date 2023-07-31 12:07:07
53
- * @type {{ isInit: boolean }}
54
- * @memberof FormMDCtrlRepeaterFormController
55
- */
56
- state: { isInit: boolean } = { isInit: false };
57
-
58
- /**
59
- * 初始化表单成员控制器
60
- *
61
- * @author lxm
62
- * @date 2022-08-24 21:08:48
63
- * @protected
64
- */
65
- protected async initFormMDCtrlItemControllers(
66
- details: IDEFormDetail[],
67
- index: number,
68
- form: FormController = this.parent.form,
69
- data: IData = {},
70
- parent: FormGroupPanelController | undefined = undefined,
71
- ): Promise<IData> {
72
- const formData = data;
73
- // const formData = reactive(data);
74
-
75
- const formController = new FormMDCtrlItemController(
76
- this.model,
77
- this.parent.form.context,
78
- this.parent.form.params,
79
- this.formCtx,
80
- formData,
81
- );
82
- await formController.onInit();
83
- formController.evt.on('onFormDataChange', arg => {
84
- if (arg.data.length > 0) {
85
- this.onDataItemChange(arg.data[0], index);
86
- }
87
- });
88
-
89
- formController.state.isLoaded = true;
90
- await Promise.all(
91
- details.map(async detail => {
92
- // 生成表单成员控制器
93
- const detailProvider = await getFormDetailProvider(detail);
94
- if (!detailProvider) {
95
- return;
96
- }
97
- form.providers[detail.id!] = detailProvider;
98
- const detailController = await detailProvider.createController(
99
- detail,
100
- formController,
101
- parent,
102
- );
103
- if (!this.formDetails[index]) {
104
- this.formDetails[index] = [];
105
- }
106
- this.formDetails[index].push({
107
- name: detail.id!,
108
- detailType: detail.detailType!,
109
- c: detailController,
110
- });
111
- // 有子成员的生成子控制器
112
- const childDetails = findChildFormDetails(detail);
113
- if (childDetails.length) {
114
- await this.initFormMDCtrlItemControllers(
115
- childDetails,
116
- index,
117
- formController,
118
- data,
119
- detailController as FormGroupPanelController,
120
- );
121
- }
122
- }),
123
- );
124
- return data;
125
- }
126
-
127
15
  /**
128
16
  * 数据插入
129
17
  *
@@ -132,10 +20,7 @@ export class FormMDCtrlRepeaterFormController extends FormMDCtrlContentTypeContr
132
20
  * @memberof FormMDCtrlRepeaterFormController
133
21
  */
134
22
  async onDataInsert(): Promise<void> {
135
- const data = await this.initFormMDCtrlItemControllers(
136
- this.model.deformDetails!,
137
- this.data.length,
138
- );
23
+ const data = {};
139
24
  super.onDataInsert(data);
140
25
  }
141
26
 
@@ -152,41 +37,9 @@ export class FormMDCtrlRepeaterFormController extends FormMDCtrlContentTypeContr
152
37
  return;
153
38
  }
154
39
  super.onDataRemove(index);
155
- this.formDetails.splice(index, 1);
156
40
  }
157
41
 
158
- /**
159
- * 初始化formCtx
160
- *
161
- * @author zk
162
- * @date 2023-07-29 05:07:21
163
- * @memberof FormMDCtrlRepeaterFormController
164
- */
165
- useFormMdCtrlCtx(): void {
166
- // this.formCtx = useCtx();
167
- }
168
-
169
- /**
170
- * 初始化数据
171
- *
172
- * @author zk
173
- * @date 2023-07-31 12:07:37
174
- * @memberof FormMDCtrlRepeaterFormController
175
- */
176
- async initData(): Promise<void> {
177
- super.initData();
178
- await Promise.all(
179
- this.data.map(async (item, index) => {
180
- await this.initFormMDCtrlItemControllers(
181
- this.model.deformDetails!,
182
- index,
183
- this.parent.form,
184
- item,
185
- );
186
- }),
187
- );
188
- this.state.isInit = true;
189
- }
42
+ formControllerArray: Array<FormMDCtrlItemController> = [];
190
43
 
191
44
  /**
192
45
  * 表单项值规则校验
@@ -196,18 +49,17 @@ export class FormMDCtrlRepeaterFormController extends FormMDCtrlContentTypeContr
196
49
  * @memberof FormMDCtrlRepeaterFormController
197
50
  */
198
51
  async validate(): Promise<boolean> {
199
- const values: Promise<boolean>[] = [];
200
- this.formDetails.forEach(details => {
201
- details.forEach(detail => {
202
- if (detail.detailType === 'FORMITEM') {
203
- const c = detail.c as FormItemController;
204
- values.push(c.validate());
205
- }
206
- });
207
- });
208
-
52
+ const values: Promise<boolean>[] = this.formControllerArray.map(
53
+ (c: FormMDCtrlItemController) => {
54
+ return c.validate();
55
+ },
56
+ );
209
57
  const results = await Promise.all(values);
210
58
  // 找不到value为false即全部是true
211
59
  return results.findIndex(value => !value) === -1;
212
60
  }
61
+
62
+ setFromController(c: FormMDCtrlItemController): void {
63
+ this.formControllerArray.push(c);
64
+ }
213
65
  }