@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
@@ -1,15 +1,4 @@
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
- import { FormMDCtrlContentTypeController } from '../../form-mdctrl-content-type.controller';
7
- import { FormMDCtrlItemController } from '../form-mdctrl-repeater-form/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';
1
+ import { FormMDCtrlRepeaterFormController } from '../form-mdctrl-repeater-form/form-mdctrl-repeater-form.controller';
13
2
 
14
3
  /**
15
4
  * 表单多数据部件表格类型控制器
@@ -21,7 +10,7 @@ import { CTX } from '../../../../../../ctx';
21
10
  * @extends {EditFormController}
22
11
  * @implements {IFormController}
23
12
  */
24
- export class FormMDCtrlRepeaterFormOneController extends FormMDCtrlContentTypeController {
13
+ export class FormMDCtrlRepeaterFormOneController extends FormMDCtrlRepeaterFormController {
25
14
  /**
26
15
  * 数据
27
16
  *
@@ -35,112 +24,6 @@ export class FormMDCtrlRepeaterFormOneController extends FormMDCtrlContentTypeCo
35
24
  return this.parent.state.contentCtrlData as IData[];
36
25
  }
37
26
 
38
- /**
39
- * 表单项控制器的集合(二维数组)
40
- *
41
- * @author zk
42
- * @date 2023-07-25 05:07:56
43
- * @type {Array<Array<FormItemController>>}
44
- * @memberof FormMDCtrlController
45
- */
46
- formDetail: Array<{
47
- name: string;
48
- detailType: string;
49
- c: IFormDetailController;
50
- }> = [];
51
-
52
- private formCtx!: CTX;
53
-
54
- state: { isInit: boolean } = { isInit: false };
55
-
56
- /**
57
- * 初始化表单成员控制器
58
- *
59
- * @author lxm
60
- * @date 2022-08-24 21:08:48
61
- * @protected
62
- */
63
- protected async initFormMDCtrlItemControllers(
64
- details: IDEFormDetail[],
65
- form: FormController = this.parent.form,
66
- data: IData = {},
67
- parent: FormGroupPanelController | undefined = undefined,
68
- ): Promise<IData> {
69
- const formData = data;
70
- // const formData = reactive(data);
71
-
72
- const formController = new FormMDCtrlItemController(
73
- this.model,
74
- this.parent.form.context,
75
- this.parent.form.params,
76
- this.formCtx,
77
- formData,
78
- );
79
- await formController.onInit();
80
- formController.evt.on('onFormDataChange', arg => {
81
- if (arg.data.length > 0) {
82
- this.onDataItemChange(arg.data[0]);
83
- }
84
- });
85
-
86
- formController.state.isLoaded = true;
87
- await Promise.all(
88
- details.map(async detail => {
89
- // 生成表单成员控制器
90
- const detailProvider = await getFormDetailProvider(detail);
91
- if (!detailProvider) {
92
- return;
93
- }
94
- form.providers[detail.id!] = detailProvider;
95
- const detailController = await detailProvider.createController(
96
- detail,
97
- formController,
98
- parent,
99
- );
100
- if (!this.formDetail) {
101
- this.formDetail = [];
102
- }
103
- this.formDetail.push({
104
- name: detail.id!,
105
- detailType: detail.detailType!,
106
- c: detailController,
107
- });
108
- // 有子成员的生成子控制器
109
- const childDetails = findChildFormDetails(detail);
110
- if (childDetails.length) {
111
- await this.initFormMDCtrlItemControllers(
112
- childDetails,
113
- formController,
114
- data,
115
- detailController as FormGroupPanelController,
116
- );
117
- }
118
- }),
119
- );
120
- return data;
121
- }
122
-
123
- /**
124
- * 初始化formCtx
125
- *
126
- * @author zk
127
- * @date 2023-07-29 05:07:21
128
- * @memberof FormMDCtrlRepeaterFormController
129
- */
130
- useFormMdCtrlCtx(): void {
131
- // this.formCtx = useCtx();
132
- }
133
-
134
- async initData(): Promise<void> {
135
- super.initData();
136
- await this.initFormMDCtrlItemControllers(
137
- this.model.deformDetails!,
138
- this.parent.form,
139
- this.data,
140
- );
141
- this.state.isInit = true;
142
- }
143
-
144
27
  /**
145
28
  * 内部表单项数据发生改变,同步contentCtrlData并设置外部表单值
146
29
  *
@@ -154,25 +37,4 @@ export class FormMDCtrlRepeaterFormOneController extends FormMDCtrlContentTypeCo
154
37
  this.parent.state.contentCtrlData = data;
155
38
  this.parent.setFormDataValue();
156
39
  }
157
-
158
- /**
159
- * 表单值校验
160
- *
161
- * @author zzq
162
- * @date 2023-08-23 19:07:11
163
- * @memberof FormMDCtrlController
164
- */
165
- async validate(): Promise<boolean> {
166
- const values: Promise<boolean>[] = [];
167
- this.formDetail.forEach(detail => {
168
- if (detail.detailType === 'FORMITEM') {
169
- const c = detail.c as FormItemController;
170
- values.push(c.validate());
171
- }
172
- });
173
-
174
- const results = await Promise.all(values);
175
- // 找不到value为false即全部是true
176
- return results.findIndex(value => !value) === -1;
177
- }
178
40
  }
@@ -54,7 +54,7 @@ export class SearchFormController
54
54
  // 新建默认值给到graft接口,接口会回来
55
55
  const params = await this.getDraftParams();
56
56
  Object.assign(queryParams, params);
57
-
57
+ await this.evt.emit('onBeforeLoadDraft', { params: queryParams });
58
58
  const res = await this.service.getDraft(this.context, queryParams);
59
59
  this.state.data = res.data;
60
60
  mergeDefaultInLeft(this.data, params);
@@ -26,10 +26,9 @@ export class SearchFormService<
26
26
  */
27
27
  async getDraft(
28
28
  _context: IParams,
29
- _params: IParams = {},
29
+ params: IParams = {},
30
30
  ): Promise<IHttpResponse<ControlVO>> {
31
- // let res = await this.exec(this.model.getDraftAction, context, params);
32
- let res = { ok: true, status: 200, data: {} } as IHttpResponse;
31
+ let res = { ok: true, status: 200, data: { ...params } } as IHttpResponse;
33
32
  res = this.handleResponse(res);
34
33
  return res as IHttpResponse<ControlVO>;
35
34
  }
@@ -91,6 +91,28 @@ export class GridColumnController<T extends IDEGridColumn = IDEGridColumn> {
91
91
  });
92
92
  }
93
93
 
94
+ /**
95
+ * 值格式化
96
+ * @author lxm
97
+ * @date 2023-08-25 05:03:07
98
+ * @readonly
99
+ * @type {(string | undefined)}
100
+ */
101
+ get valueFormat(): string | undefined {
102
+ return this.deGridDataItem?.format;
103
+ }
104
+
105
+ /**
106
+ * 数据类型(数值)
107
+ * @author lxm
108
+ * @date 2023-08-25 05:03:07
109
+ * @readonly
110
+ * @type {(string | undefined)}
111
+ */
112
+ get dataType(): number | undefined {
113
+ return this.deGridDataItem?.dataType;
114
+ }
115
+
94
116
  /**
95
117
  * Creates an instance of GridFieldColumnController.
96
118
  * @author lxm
@@ -3,6 +3,7 @@ import {
3
3
  awaitTimeout,
4
4
  debounceAndAsyncMerge,
5
5
  HttpResponse,
6
+ recursiveIterate,
6
7
  RuntimeError,
7
8
  RuntimeModelError,
8
9
  } from '@ibiz-template/core';
@@ -186,6 +187,7 @@ export class GridController
186
187
 
187
188
  this.service = new GridService(this.model);
188
189
  await this.service.init(this.context);
190
+ this.initColumnStates();
189
191
  await this.initGridColumns();
190
192
 
191
193
  // !数据变更通知防抖,且合并参数,如果有同一批触发不同行的值变更则该方法需要重写
@@ -528,13 +530,6 @@ export class GridController
528
530
  // 初始化表格列控制器
529
531
  const controller = await provider.createController(column, this);
530
532
  this.columns[column.codeName!] = controller as GridColumnController;
531
- if (column.columnType !== 'GROUPGRIDCOLUMN') {
532
- this.state.columnStates.push({
533
- key: column.codeName!,
534
- caption: column.caption!,
535
- hidden: !!column.hideDefault,
536
- });
537
- }
538
533
  // 分类存放控制器
539
534
  if (column.columnType === 'DEFGRIDCOLUMN') {
540
535
  this.fieldColumns[column.codeName!] =
@@ -556,6 +551,29 @@ export class GridController
556
551
  }
557
552
  }
558
553
 
554
+ /**
555
+ * 初始化表格列状态
556
+ * @author lxm
557
+ * @date 2023-08-28 02:53:12
558
+ * @protected
559
+ * @return {*} {Promise<void>}
560
+ */
561
+ protected initColumnStates(): void {
562
+ recursiveIterate(
563
+ this.model,
564
+ (column: IDEGridColumn) => {
565
+ if (column.columnType !== 'GROUPGRIDCOLUMN') {
566
+ this.state.columnStates.push({
567
+ key: column.codeName!,
568
+ caption: column.caption!,
569
+ hidden: !!column.hideDefault,
570
+ });
571
+ }
572
+ },
573
+ { childrenFields: ['degridColumns'] },
574
+ );
575
+ }
576
+
559
577
  /**
560
578
  * 初始化表格属性列,操作列,编辑项控制器
561
579
  *
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-vars */
2
- import { ModelError } from '@ibiz-template/core';
2
+ import { DataTypes, ModelError } from '@ibiz-template/core';
3
3
  import { IAppCodeList, IDEGridFieldColumn } from '@ibiz/model-core';
4
+ import dayjs from 'dayjs';
4
5
  import { clone } from 'ramda';
5
6
  import { OpenAppViewCommand } from '../../../../../command';
6
7
  import { CodeListItem, IModalData } from '../../../../../interface';
@@ -267,4 +268,23 @@ export class GridFieldColumnController extends GridColumnController<IDEGridField
267
268
  }
268
269
  return formatValue;
269
270
  }
271
+
272
+ /**
273
+ * 值格式化
274
+ * @author lxm
275
+ * @date 2023-08-25 05:18:11
276
+ * @param {unknown} value
277
+ * @return {*} {string}
278
+ */
279
+ formatValue(value: unknown = ''): string {
280
+ const strVal = `${value}`;
281
+ if (!this.valueFormat) {
282
+ return strVal;
283
+ }
284
+ const isDate = DataTypes.isDate(this.dataType!);
285
+ if (isDate) {
286
+ return dayjs(strVal).format(this.valueFormat);
287
+ }
288
+ return ibiz.util.text.format(strVal, this.valueFormat);
289
+ }
270
290
  }
@@ -17,3 +17,4 @@ export * from './tab-exp-panel/index';
17
17
  export * from './toolbar/index';
18
18
  export * from './tree/index';
19
19
  export * from './wizard-panel/index';
20
+ export * from './md-ctrl/index';
@@ -0,0 +1,3 @@
1
+ export * from './md-ctrl.controller';
2
+ export * from './md-ctrl-row.state';
3
+ export * from './md-ctrl.service';
@@ -0,0 +1,40 @@
1
+ import {
2
+ IButtonContainerState,
3
+ IMobMDCtrlController,
4
+ IMobMDCtrlRowState,
5
+ } from '../../../interface';
6
+ import { ControlVO } from '../../../service';
7
+
8
+ /**
9
+ * 多数据部件行状态
10
+ *
11
+ * @author chitanda
12
+ * @date 2023-06-19 18:06:44
13
+ * @export
14
+ * @class MobMDCtrlRowState
15
+ */
16
+ export class MobMDCtrlRowState implements IMobMDCtrlRowState {
17
+ /**
18
+ * 行为状态
19
+ *
20
+ * @author chitanda
21
+ * @date 2023-06-19 18:06:27
22
+ * @type {{ [p: string]: IButtonContainerState }}
23
+ */
24
+ readonly uaColStates: { [p: string]: IButtonContainerState } = {};
25
+
26
+ /**
27
+ * Creates an instance of MDCtrlRowState.
28
+ *
29
+ * @author chitanda
30
+ * @date 2023-06-19 18:06:12
31
+ * @param {ControlVO} data 行数据
32
+ * @param {IMobMDCtrlController} controller 多数据部件控制器
33
+ */
34
+ constructor(
35
+ public data: ControlVO,
36
+ public controller: IMobMDCtrlController,
37
+ ) {
38
+ this.data = data;
39
+ }
40
+ }
@@ -0,0 +1,199 @@
1
+ import {
2
+ IDEMobMDCtrl,
3
+ IUIActionGroup,
4
+ IUIActionGroupDetail,
5
+ } from '@ibiz/model-core';
6
+ import {
7
+ IMobMDCtrlEvent,
8
+ IMobMDCtrlController,
9
+ IMobMdCtrlState,
10
+ IMobMDCtrlRowState,
11
+ MDCtrlLoadParams,
12
+ } from '../../../interface';
13
+ import { MDCtrlService } from './md-ctrl.service';
14
+ import { MobMDCtrlRowState } from './md-ctrl-row.state';
15
+ import { MDControlController } from '../../common';
16
+ import { ControlVO } from '../../../service';
17
+ import { UIActionUtil } from '../../../ui-action';
18
+ import { ButtonContainerState, UIActionButtonState } from '../../utils';
19
+
20
+ export class MDCtrlController
21
+ extends MDControlController<IDEMobMDCtrl, IMobMdCtrlState, IMobMDCtrlEvent>
22
+ implements IMobMDCtrlController
23
+ {
24
+ declare service: MDCtrlService;
25
+
26
+ protected initState(): void {
27
+ super.initState();
28
+ this.state.rows = [];
29
+ this.state.noSort = this.model.noSort === true;
30
+ // 多数据默认激活值为1
31
+ this.state.mdctrlActiveMode = 1;
32
+ }
33
+
34
+ protected async onCreated(): Promise<void> {
35
+ await super.onCreated();
36
+ this.service = new MDCtrlService(this.model);
37
+ await this.service.init(this.context);
38
+ // 设置默认排序
39
+ this.setSort();
40
+ }
41
+
42
+ /**
43
+ * 设置排序
44
+ *
45
+ * @author lxm
46
+ * @date 2022-09-28 13:09:44
47
+ * @param {string} key 排序字段
48
+ * @param {string} order 排序顺序
49
+ */
50
+ setSort(key?: string, order?: 'asc' | 'desc'): void {
51
+ if (key && order) {
52
+ super.setSort(key, order);
53
+ } else {
54
+ // 设置默认排序或者置空
55
+ const { minorSortAppDEFieldId, minorSortDir } = this.model;
56
+ if (minorSortAppDEFieldId && minorSortDir) {
57
+ this.state.sortQuery = `${minorSortAppDEFieldId.toLowerCase()},${minorSortDir.toLowerCase()}`;
58
+ } else {
59
+ this.state.sortQuery = '';
60
+ }
61
+ }
62
+ }
63
+
64
+ /**
65
+ * 加载更多
66
+ * @author lxm
67
+ * @date 2023-05-22 07:33:59
68
+ * @return {*} {Promise<void>}
69
+ */
70
+ async loadMore(): Promise<void> {
71
+ // 修复加载更多时,数据未加载成功 但是还是会继续加载的问题
72
+ if (this.state.total > this.state.items.length && !this.state.isLoading) {
73
+ await this.load({ isLoadMore: true });
74
+ }
75
+ }
76
+
77
+ /**
78
+ * 列表多数据刷新 需重置分页
79
+ *
80
+ * @author zk
81
+ * @date 2023-08-11 05:08:20
82
+ * @return {*} {Promise<void>}
83
+ * @memberof MDCtrlController
84
+ */
85
+ async refresh(): Promise<void> {
86
+ await this.load({ isInitialLoad: true });
87
+ }
88
+
89
+ afterLoad(args: MDCtrlLoadParams, items: ControlVO[]): Promise<IData[]> {
90
+ if (args.isInitialLoad) {
91
+ this.state.rows = [];
92
+ }
93
+ if (items && items.length > 0) {
94
+ this.state.rows.push(
95
+ ...items.map(item => {
96
+ const row = new MobMDCtrlRowState(item, this);
97
+ this.initActionStates(row);
98
+ return row;
99
+ }),
100
+ );
101
+ }
102
+ return super.afterLoad(args, items);
103
+ }
104
+
105
+ /**
106
+ * 设置列表数据
107
+ *
108
+ * @author zk
109
+ * @date 2023-05-26 02:05:46
110
+ * @param {IData[]} items
111
+ * @memberof ListController
112
+ */
113
+ setData(items: IData[]): void {
114
+ const rows = items.map(item => {
115
+ const row = new MobMDCtrlRowState(item as ControlVO, this);
116
+ return row;
117
+ });
118
+ this.state.rows = rows;
119
+ }
120
+
121
+ /**
122
+ * 获取列表数据
123
+ *
124
+ * @author zk
125
+ * @date 2023-05-26 02:05:35
126
+ * @return {*} {IData[]}
127
+ * @memberof ListController
128
+ */
129
+ getAllData(): IData[] {
130
+ return this.state.rows.map(row => row.data);
131
+ }
132
+
133
+ /**
134
+ * 界面行为组项点击
135
+ *
136
+ * @author chitanda
137
+ * @date 2023-06-19 18:06:18
138
+ * @param {IUIActionGroupDetail} detail
139
+ * @param {MDCtrlRowState} row
140
+ * @param {MouseEvent} event
141
+ * @return {*} {Promise<void>}
142
+ */
143
+ async onActionClick(
144
+ detail: IUIActionGroupDetail,
145
+ row: IMobMDCtrlRowState,
146
+ event: MouseEvent,
147
+ ): Promise<void> {
148
+ const actionId = detail.uiactionId;
149
+ await UIActionUtil.execAndResolved(actionId!, {
150
+ context: this.context,
151
+ params: this.params,
152
+ data: [row.data],
153
+ view: this.view,
154
+ event,
155
+ });
156
+ }
157
+
158
+ /**
159
+ * 初始化按钮状态
160
+ *
161
+ * @author chitanda
162
+ * @date 2023-06-21 16:06:55
163
+ * @protected
164
+ * @param {MobMDCtrlRowState} row
165
+ */
166
+ protected initActionStates(row: MobMDCtrlRowState): void {
167
+ const { deuiactionGroup, deuiactionGroup2 } = this.model;
168
+ if (deuiactionGroup) {
169
+ this.initUIActionGroup(row, deuiactionGroup);
170
+ }
171
+ if (deuiactionGroup2) {
172
+ this.initUIActionGroup(row, deuiactionGroup2);
173
+ }
174
+ }
175
+
176
+ protected initUIActionGroup(
177
+ row: MobMDCtrlRowState,
178
+ group: IUIActionGroup,
179
+ ): void {
180
+ if (!group!.uiactionGroupDetails?.length) {
181
+ ibiz.log.debug('操作列界面行为组没有配置界面行为');
182
+ }
183
+ const containerState = new ButtonContainerState();
184
+ const details = group!.uiactionGroupDetails || [];
185
+ details.forEach(detail => {
186
+ const actionid = detail.uiactionId;
187
+ if (actionid) {
188
+ const buttonState = new UIActionButtonState(
189
+ detail.id!,
190
+ this.context.srfappid!,
191
+ actionid,
192
+ );
193
+ containerState.addState(detail.id!, buttonState);
194
+ }
195
+ });
196
+ containerState.update(row.data.getOrigin());
197
+ row.uaColStates[group.id!] = containerState;
198
+ }
199
+ }
@@ -0,0 +1,40 @@
1
+ import { IDEMobMDCtrl } from '@ibiz/model-core';
2
+ import { MDControlService, UIMapField } from '../../../service';
3
+
4
+ /**
5
+ * 多数据部件服务
6
+ *
7
+ * @author lxm
8
+ * @date 2023-05-15 09:53:35
9
+ * @export
10
+ * @class MDCtrlService
11
+ * @extends {MDControlService<IDEMobMDCtrl>}
12
+ */
13
+ export class MDCtrlService extends MDControlService<IDEMobMDCtrl> {
14
+ /**
15
+ * 初始化属性映射
16
+ *
17
+ * @author lxm
18
+ * @date 2022-08-31 18:08:37
19
+ */
20
+ initUIDataMap(): void {
21
+ super.initUIDataMap();
22
+ // *初始化表格数据项的属性映射
23
+ this.model.delistDataItems?.forEach(item => {
24
+ const uiKey = item.id!.toLowerCase();
25
+ const deField = item.appDEFieldId;
26
+ let mapField: UIMapField;
27
+ // 后台实体属性
28
+ if (deField) {
29
+ const deFieldKey = deField.toLowerCase();
30
+ mapField = new UIMapField(uiKey, deFieldKey, {
31
+ isOriginField: true,
32
+ });
33
+ } else {
34
+ // 前台属性
35
+ mapField = new UIMapField(uiKey, uiKey);
36
+ }
37
+ this.dataUIMap.set(uiKey, mapField);
38
+ });
39
+ }
40
+ }
@@ -178,7 +178,7 @@ export class PanelItemController<T extends IPanelItem = IPanelItem>
178
178
  // name是动态逻辑涉及到的时或state存在时
179
179
  if (mustCalc || isOverlap(relatedNames, names)) {
180
180
  try {
181
- const ok = verifyPanelGroupLogic(this.panel.data, logic);
181
+ const ok = verifyPanelGroupLogic(this.data, logic);
182
182
  switch (logic.logicCat) {
183
183
  // 动态空输入,不满足则必填
184
184
  case 'ITEMBLANK':
@@ -123,8 +123,12 @@ export class PanelController<
123
123
  parent,
124
124
  );
125
125
  panel.panelItems[panelItem.id!] = panelItemController;
126
- // 有子成员的生成子控制器
127
- if ((panelItem as IPanelContainer).panelItems?.length) {
126
+ // 有子成员的,且不是数据容器的。生成子控制器
127
+ if (
128
+ (panelItem as IPanelContainer).panelItems?.length &&
129
+ !(panelItemController as IPanelItemContainerController)
130
+ .isDataContainer
131
+ ) {
128
132
  await this.initPanelItemControllers(
129
133
  (panelItem as IPanelContainer).panelItems,
130
134
  panel,
@@ -30,6 +30,11 @@ export class SearchBarController
30
30
  protected initState(): void {
31
31
  super.initState();
32
32
  this.state.query = '';
33
+ this.state.visible = !!(
34
+ this.model.enableQuickSearch ||
35
+ this.model.enableGroup ||
36
+ this.model.enableFilter
37
+ );
33
38
  }
34
39
 
35
40
  protected async onCreated(): Promise<void> {
@@ -39,16 +44,24 @@ export class SearchBarController
39
44
  this.context.srfappid,
40
45
  )!;
41
46
  if (appDataEntity) {
42
- const searchField = appDataEntity.appDEFields?.find(field => {
47
+ const searchFields = appDataEntity.appDEFields?.filter(field => {
43
48
  return field.enableQuickSearch;
44
49
  });
45
- if (searchField?.lnlanguageRes && searchField.lnlanguageRes.lanResTag) {
46
- this.placeHolder = ibiz.i18n.t(
47
- searchField.lnlanguageRes.lanResTag,
48
- searchField.lnlanguageRes.defaultContent,
49
- );
50
- } else if (searchField?.logicName) {
51
- this.placeHolder = searchField.logicName;
50
+ const placeHolders: string[] = [];
51
+ searchFields?.forEach(searchField => {
52
+ if (searchField?.lnlanguageRes && searchField.lnlanguageRes.lanResTag) {
53
+ placeHolders.push(
54
+ ibiz.i18n.t(
55
+ searchField.lnlanguageRes.lanResTag,
56
+ searchField.logicName,
57
+ ),
58
+ );
59
+ } else if (searchField?.logicName) {
60
+ placeHolders.push(searchField.logicName);
61
+ }
62
+ });
63
+ if (placeHolders.length > 0) {
64
+ this.placeHolder = placeHolders.join('、');
52
65
  }
53
66
  }
54
67
  }