@ibiz-template/runtime 0.1.35 → 0.1.37

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 (117) hide show
  1. package/dist/index.esm.js +799 -130
  2. package/dist/index.system.min.js +1 -1
  3. package/dist/index.system.min.js.map +1 -1
  4. package/out/constant/index.d.ts +1 -0
  5. package/out/constant/index.d.ts.map +1 -1
  6. package/out/constant/index.js +1 -0
  7. package/out/constant/value-op.d.ts +82 -0
  8. package/out/constant/value-op.d.ts.map +1 -0
  9. package/out/constant/value-op.js +83 -0
  10. package/out/constant/view-call-tag.d.ts +5 -1
  11. package/out/constant/view-call-tag.d.ts.map +1 -1
  12. package/out/constant/view-call-tag.js +4 -0
  13. package/out/controller/control/dashboard/portlet/portlet-part/portlet-part.controller.d.ts.map +1 -1
  14. package/out/controller/control/dashboard/portlet/portlet-part/portlet-part.controller.js +1 -0
  15. package/out/controller/control/form/form-detail/form-item/form-item.controller.d.ts +3 -3
  16. package/out/controller/control/form/form-detail/form-item/form-item.controller.d.ts.map +1 -1
  17. package/out/controller/control/form/form-detail/form-item/form-item.controller.js +13 -8
  18. package/out/controller/control/form/search-form/search-form.controller.d.ts +2 -2
  19. package/out/controller/control/form/search-form/search-form.controller.d.ts.map +1 -1
  20. package/out/controller/control/form/search-form/search-form.controller.js +11 -3
  21. package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.d.ts +3 -3
  22. package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.d.ts.map +1 -1
  23. package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.js +13 -8
  24. package/out/controller/control/index.d.ts +1 -0
  25. package/out/controller/control/index.d.ts.map +1 -1
  26. package/out/controller/control/index.js +1 -0
  27. package/out/controller/control/md-ctrl/md-ctrl.controller.d.ts +38 -3
  28. package/out/controller/control/md-ctrl/md-ctrl.controller.d.ts.map +1 -1
  29. package/out/controller/control/md-ctrl/md-ctrl.controller.js +110 -3
  30. package/out/controller/control/medit-view-panel/index.d.ts +3 -0
  31. package/out/controller/control/medit-view-panel/index.d.ts.map +1 -0
  32. package/out/controller/control/medit-view-panel/index.js +2 -0
  33. package/out/controller/control/medit-view-panel/medit-view-panel.controller.d.ts +119 -0
  34. package/out/controller/control/medit-view-panel/medit-view-panel.controller.d.ts.map +1 -0
  35. package/out/controller/control/medit-view-panel/medit-view-panel.controller.js +320 -0
  36. package/out/controller/control/medit-view-panel/medit-view-panel.service.d.ts +11 -0
  37. package/out/controller/control/medit-view-panel/medit-view-panel.service.d.ts.map +1 -0
  38. package/out/controller/control/medit-view-panel/medit-view-panel.service.js +9 -0
  39. package/out/controller/control/search-bar/search-bar-filter.controller.d.ts +65 -0
  40. package/out/controller/control/search-bar/search-bar-filter.controller.d.ts.map +1 -0
  41. package/out/controller/control/search-bar/search-bar-filter.controller.js +48 -0
  42. package/out/controller/control/search-bar/search-bar.controller.d.ts +63 -4
  43. package/out/controller/control/search-bar/search-bar.controller.d.ts.map +1 -1
  44. package/out/controller/control/search-bar/search-bar.controller.js +143 -9
  45. package/out/controller/utils/value-rule/value-rule.d.ts +10 -1
  46. package/out/controller/utils/value-rule/value-rule.d.ts.map +1 -1
  47. package/out/controller/utils/value-rule/value-rule.js +64 -1
  48. package/out/engine/md-view.engine.d.ts.map +1 -1
  49. package/out/engine/md-view.engine.js +2 -23
  50. package/out/interface/controller/controller/control/i-medit-view-panel.controller.d.ts +14 -0
  51. package/out/interface/controller/controller/control/i-medit-view-panel.controller.d.ts.map +1 -0
  52. package/out/interface/controller/controller/control/i-medit-view-panel.controller.js +1 -0
  53. package/out/interface/controller/controller/control/i-search-bar.controller.d.ts +8 -0
  54. package/out/interface/controller/controller/control/i-search-bar.controller.d.ts.map +1 -1
  55. package/out/interface/controller/controller/control/i-search-form.controller.d.ts +2 -2
  56. package/out/interface/controller/controller/control/i-search-form.controller.d.ts.map +1 -1
  57. package/out/interface/controller/controller/control/index.d.ts +1 -0
  58. package/out/interface/controller/controller/control/index.d.ts.map +1 -1
  59. package/out/interface/controller/controller/control/index.js +1 -0
  60. package/out/interface/controller/event/control/i-medit-view-panel.event.d.ts +9 -0
  61. package/out/interface/controller/event/control/i-medit-view-panel.event.d.ts.map +1 -0
  62. package/out/interface/controller/event/control/i-medit-view-panel.event.js +1 -0
  63. package/out/interface/controller/event/control/index.d.ts +1 -0
  64. package/out/interface/controller/event/control/index.d.ts.map +1 -1
  65. package/out/interface/controller/event/control/index.js +1 -0
  66. package/out/interface/controller/event/view/i-medit-view9.event.d.ts +10 -0
  67. package/out/interface/controller/event/view/i-medit-view9.event.d.ts.map +1 -0
  68. package/out/interface/controller/event/view/i-medit-view9.event.js +1 -0
  69. package/out/interface/controller/event/view/index.d.ts +1 -0
  70. package/out/interface/controller/event/view/index.d.ts.map +1 -1
  71. package/out/interface/controller/event/view/index.js +1 -0
  72. package/out/interface/controller/state/control/i-medit-view-panel.state.d.ts +29 -0
  73. package/out/interface/controller/state/control/i-medit-view-panel.state.d.ts.map +1 -0
  74. package/out/interface/controller/state/control/i-medit-view-panel.state.js +1 -0
  75. package/out/interface/controller/state/control/i-search-bar.state.d.ts +75 -0
  76. package/out/interface/controller/state/control/i-search-bar.state.d.ts.map +1 -1
  77. package/out/interface/controller/state/control/index.d.ts +1 -0
  78. package/out/interface/controller/state/control/index.d.ts.map +1 -1
  79. package/out/interface/controller/state/control/index.js +1 -0
  80. package/out/interface/controller/state/view/i-medit-view9.state.d.ts +11 -0
  81. package/out/interface/controller/state/view/i-medit-view9.state.d.ts.map +1 -0
  82. package/out/interface/controller/state/view/i-medit-view9.state.js +1 -0
  83. package/out/interface/controller/state/view/index.d.ts +1 -0
  84. package/out/interface/controller/state/view/index.d.ts.map +1 -1
  85. package/out/interface/controller/state/view/index.js +1 -0
  86. package/out/service/service/entity/method/method.js +2 -2
  87. package/package.json +3 -3
  88. package/src/constant/index.ts +1 -0
  89. package/src/constant/value-op.ts +82 -0
  90. package/src/constant/view-call-tag.ts +4 -0
  91. package/src/controller/control/dashboard/portlet/portlet-part/portlet-part.controller.ts +2 -0
  92. package/src/controller/control/form/form-detail/form-item/form-item.controller.ts +22 -9
  93. package/src/controller/control/form/search-form/search-form.controller.ts +11 -3
  94. package/src/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.ts +18 -13
  95. package/src/controller/control/index.ts +1 -0
  96. package/src/controller/control/md-ctrl/md-ctrl.controller.ts +136 -3
  97. package/src/controller/control/medit-view-panel/index.ts +2 -0
  98. package/src/controller/control/medit-view-panel/medit-view-panel.controller.ts +375 -0
  99. package/src/controller/control/medit-view-panel/medit-view-panel.service.ts +10 -0
  100. package/src/controller/control/search-bar/search-bar-filter.controller.ts +112 -0
  101. package/src/controller/control/search-bar/search-bar.controller.ts +165 -9
  102. package/src/controller/utils/value-rule/value-rule.ts +97 -2
  103. package/src/engine/md-view.engine.ts +2 -27
  104. package/src/interface/controller/controller/control/i-medit-view-panel.controller.ts +17 -0
  105. package/src/interface/controller/controller/control/i-search-bar.controller.ts +10 -1
  106. package/src/interface/controller/controller/control/i-search-form.controller.ts +2 -2
  107. package/src/interface/controller/controller/control/index.ts +1 -0
  108. package/src/interface/controller/event/control/i-medit-view-panel.event.ts +9 -0
  109. package/src/interface/controller/event/control/index.ts +1 -0
  110. package/src/interface/controller/event/view/i-medit-view9.event.ts +10 -0
  111. package/src/interface/controller/event/view/index.ts +1 -0
  112. package/src/interface/controller/state/control/i-medit-view-panel.state.ts +36 -0
  113. package/src/interface/controller/state/control/i-search-bar.state.ts +86 -0
  114. package/src/interface/controller/state/control/index.ts +1 -0
  115. package/src/interface/controller/state/view/i-medit-view9.state.ts +10 -0
  116. package/src/interface/controller/state/view/index.ts +1 -0
  117. package/src/service/service/entity/method/method.ts +2 -2
@@ -1,10 +1,14 @@
1
- import { ISearchBar } from '@ibiz/model-core';
1
+ import { recursiveIterate } from '@ibiz-template/core';
2
+ import { IAppDataEntity, ISearchBar } from '@ibiz/model-core';
3
+ import { isNil } from 'ramda';
2
4
  import {
3
5
  ISearchBarState,
4
6
  ISearchBarEvent,
5
7
  ISearchBarController,
8
+ IFilterNode,
6
9
  } from '../../../interface';
7
10
  import { ControlController } from '../../common';
11
+ import { SearchBarFilterController } from './search-bar-filter.controller';
8
12
 
9
13
  /**
10
14
  * 搜索栏控制器
@@ -20,13 +24,29 @@ export class SearchBarController
20
24
  implements ISearchBarController
21
25
  {
22
26
  /**
23
- * 占位符
27
+ * 快速搜索占位符
24
28
  * @return {*}
25
29
  * @author: zhujiamin
26
30
  * @Date: 2023-08-11 14:13:10
27
31
  */
28
32
  placeHolder = '';
29
33
 
34
+ /**
35
+ * 过滤项控制器集合
36
+ * @author lxm
37
+ * @date 2023-10-13 03:31:26
38
+ * @type {SearchBarFilterController[]}
39
+ */
40
+ filterControllers: SearchBarFilterController[] = [];
41
+
42
+ /**
43
+ * 实体模型
44
+ * @author lxm
45
+ * @date 2023-10-13 02:49:59
46
+ * @type {IAppDataEntity}
47
+ */
48
+ appDataEntity!: IAppDataEntity;
49
+
30
50
  protected initState(): void {
31
51
  super.initState();
32
52
  this.state.query = '';
@@ -36,6 +56,9 @@ export class SearchBarController
36
56
  this.model.enableGroup ||
37
57
  this.model.enableFilter
38
58
  );
59
+ if (this.model.enableFilter) {
60
+ this.resetFilter();
61
+ }
39
62
  }
40
63
 
41
64
  protected async onCreated(): Promise<void> {
@@ -45,19 +68,38 @@ export class SearchBarController
45
68
  this.context.srfappid,
46
69
  )!;
47
70
  if (appDataEntity) {
48
- const searchFields = appDataEntity.appDEFields?.filter(field => {
49
- return field.enableQuickSearch;
50
- });
71
+ this.appDataEntity = appDataEntity;
72
+ this.calcQuickSearchPlaceholder();
73
+ }
74
+
75
+ await this.initSearchBarFilters();
76
+ }
77
+
78
+ /**
79
+ * 计算快速搜索的占位
80
+ * @author lxm
81
+ * @date 2023-10-16 03:49:47
82
+ * @protected
83
+ * @return {*} {void}
84
+ */
85
+ protected calcQuickSearchPlaceholder(): void {
86
+ if (!this.appDataEntity) {
87
+ return;
88
+ }
89
+ const searchFields = this.appDataEntity.appDEFields!.filter(field => {
90
+ return field.enableQuickSearch;
91
+ });
92
+ if (searchFields.length) {
51
93
  const placeHolders: string[] = [];
52
- searchFields?.forEach(searchField => {
53
- if (searchField?.lnlanguageRes && searchField.lnlanguageRes.lanResTag) {
94
+ searchFields.forEach(searchField => {
95
+ if (searchField.lnlanguageRes && searchField.lnlanguageRes.lanResTag) {
54
96
  placeHolders.push(
55
97
  ibiz.i18n.t(
56
98
  searchField.lnlanguageRes.lanResTag,
57
99
  searchField.logicName,
58
100
  ),
59
101
  );
60
- } else if (searchField?.logicName) {
102
+ } else if (searchField.logicName) {
61
103
  placeHolders.push(searchField.logicName);
62
104
  }
63
105
  });
@@ -84,7 +126,121 @@ export class SearchBarController
84
126
  * @author: zhujiamin
85
127
  * @Date: 2023-06-01 18:08:18
86
128
  */
87
- handleSearch(): void {
129
+ onSearch(): void {
88
130
  this.evt.emit('onSearch', undefined);
89
131
  }
132
+
133
+ /**
134
+ * 获取搜索栏的过滤参数(包括快速搜索,快速分组和过滤器的参数)
135
+ * @author lxm
136
+ * @date 2023-10-16 03:54:07
137
+ * @return {*} {IParams}
138
+ */
139
+ getFilterParams(): IParams {
140
+ const params: IParams = {};
141
+ // 快速搜索
142
+ if (this.state.query) {
143
+ params.query = this.state.query;
144
+ }
145
+ // 快速分组
146
+ if (this.state.selectedGroupItem?.data) {
147
+ // eslint-disable-next-line no-new-func
148
+ const func = new Function(
149
+ `return (${this.state.selectedGroupItem.data});`,
150
+ );
151
+ const addParams = func() as IData;
152
+ Object.assign(params, addParams);
153
+ }
154
+
155
+ // 搜索过滤器
156
+ const filters = this.calcFilters();
157
+ if (filters) {
158
+ params.filters = filters;
159
+ }
160
+ return params;
161
+ }
162
+
163
+ /**
164
+ * 重置过滤器
165
+ * @author lxm
166
+ * @date 2023-10-16 03:52:44
167
+ */
168
+ resetFilter(): void {
169
+ this.state.filterNodes = [
170
+ {
171
+ leaf: false,
172
+ logicType: 'AND',
173
+ children: [{ leaf: true, field: null, valueOP: null, value: null }],
174
+ },
175
+ ];
176
+ }
177
+
178
+ /**
179
+ * 初始化过滤项控制器
180
+ * @author lxm
181
+ * @date 2023-10-13 03:33:17
182
+ * @protected
183
+ * @return {*} {Promise<void>}
184
+ */
185
+ protected async initSearchBarFilters(): Promise<void> {
186
+ if (this.model.searchBarFilters?.length) {
187
+ this.model.searchBarFilters.forEach(item => {
188
+ const filterController = new SearchBarFilterController(item, this);
189
+ this.filterControllers.push(filterController);
190
+ });
191
+ await Promise.all(
192
+ this.filterControllers.map(controller => controller.init()),
193
+ );
194
+ }
195
+ }
196
+
197
+ /**
198
+ * 计算过滤项参数
199
+ * @author lxm
200
+ * @date 2023-10-13 05:53:35
201
+ * @return {*} {IData}
202
+ */
203
+ calcFilters(): IData | undefined {
204
+ if (!this.model.enableFilter) {
205
+ return;
206
+ }
207
+ let hasFilter = false; // 是否有过滤项
208
+ let hasError = false; // 是否有过滤项格式不正确
209
+ recursiveIterate(this.state.filterNodes[0], (node: IFilterNode) => {
210
+ if (node.leaf) {
211
+ if (node.field && node.valueOP && !isNil(node.value)) {
212
+ hasFilter = true;
213
+ } else {
214
+ // 如果过滤项不给
215
+ hasError = true;
216
+ }
217
+ }
218
+ });
219
+ if (hasFilter && !hasError) {
220
+ const filter = this.formatFilters(this.state.filterNodes[0]);
221
+ return filter;
222
+ }
223
+ }
224
+
225
+ /**
226
+ * 格式化过滤项
227
+ * @author lxm
228
+ * @date 2023-10-16 03:45:41
229
+ * @param {IFilterNode} node
230
+ * @return {*} {IData}
231
+ */
232
+ formatFilters(node: IFilterNode): IData {
233
+ if (!node.leaf) {
234
+ return {
235
+ [`$${node.logicType.toLowerCase()}`]: node.children.map(item =>
236
+ this.formatFilters(item),
237
+ ),
238
+ };
239
+ }
240
+ return {
241
+ [`${node.field}`]: {
242
+ [`$${node.valueOP!.toLowerCase()}`]: node.value,
243
+ },
244
+ };
245
+ }
90
246
  }
@@ -1,7 +1,14 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-vars */
2
2
  import { RuntimeError } from '@ibiz-template/core';
3
- import { IDEFormItemVR, IDEGridEditItemVR } from '@ibiz/model-core';
4
- import { isNilOrEmpty } from 'qx-util';
3
+ import {
4
+ IDEFormItemVR,
5
+ IDEGridEditItemVR,
6
+ IEditor,
7
+ INumberEditor,
8
+ ITextEditor,
9
+ } from '@ibiz/model-core';
10
+ import { isNilOrEmpty, isNumber } from 'qx-util';
11
+ import { isNil } from 'ramda';
5
12
  import { ScriptFactory, verifyDeRules } from '../../../utils';
6
13
 
7
14
  /**
@@ -93,3 +100,91 @@ export function generateRules(
93
100
  });
94
101
  return rules;
95
102
  }
103
+
104
+ /**
105
+ * 生成编辑器相关的值规则
106
+ * @author lxm
107
+ * @date 2023-10-18 03:36:39
108
+ * @export
109
+ * @param {IEditor} editor
110
+ * @return {*} {IData[]}
111
+ */
112
+ export function generateEditorRules(editor: IEditor): IData[] {
113
+ const rules: IData[] = [];
114
+ const { maxLength, minLength } = editor as ITextEditor;
115
+ const { maxValue, minValue } = editor as INumberEditor;
116
+
117
+ if (maxLength) {
118
+ rules.push({
119
+ validator: (
120
+ rule: IData,
121
+ value: IData,
122
+ callback: (params: Error[] | Error) => boolean,
123
+ ) => {
124
+ if (!isNil(value) && value.length > maxLength) {
125
+ callback(
126
+ new Error(
127
+ `内容长度必须小于等于${maxLength},当前长度为${value.length}`,
128
+ ),
129
+ );
130
+ } else {
131
+ return true;
132
+ }
133
+ },
134
+ });
135
+ }
136
+
137
+ if (minLength) {
138
+ rules.push({
139
+ validator: (
140
+ rule: IData,
141
+ value: IData,
142
+ callback: (params: Error[] | Error) => boolean,
143
+ ) => {
144
+ if (!isNil(value) && value.length < minLength) {
145
+ callback(
146
+ new Error(
147
+ `内容长度必须大于等于${minLength},当前长度为${value.length}`,
148
+ ),
149
+ );
150
+ } else {
151
+ return true;
152
+ }
153
+ },
154
+ });
155
+ }
156
+
157
+ if (!isNil(maxValue)) {
158
+ rules.push({
159
+ validator: (
160
+ rule: IData,
161
+ value: number,
162
+ callback: (params: Error[] | Error) => boolean,
163
+ ) => {
164
+ if (!isNil(value) && isNumber(value) && value > maxValue) {
165
+ callback(new Error(`值必须小于等于${maxValue}`));
166
+ } else {
167
+ return true;
168
+ }
169
+ },
170
+ });
171
+ }
172
+
173
+ if (!isNil(minValue)) {
174
+ rules.push({
175
+ validator: (
176
+ rule: IData,
177
+ value: number,
178
+ callback: (params: Error[] | Error) => boolean,
179
+ ) => {
180
+ if (!isNil(value) && isNumber(value) && value < minValue) {
181
+ callback(new Error(`值必须大于等于${minValue}`));
182
+ } else {
183
+ return true;
184
+ }
185
+ },
186
+ });
187
+ }
188
+
189
+ return rules;
190
+ }
@@ -334,36 +334,11 @@ export class MDViewEngine extends ViewEngineBase {
334
334
  const params: IParams = {};
335
335
  // 有搜索表单的整合相关参数
336
336
  if (this.searchForm) {
337
- const addParams = this.searchForm.getData()[0];
338
- const filteredParams = Object.entries(addParams).reduce(
339
- (result: IData, [key, value]) => {
340
- if (value !== null && value !== undefined && value !== '') {
341
- result[key] = value;
342
- }
343
- return result;
344
- },
345
- {},
346
- );
347
- Object.assign(params, filteredParams);
337
+ Object.assign(params, this.searchForm.getFilterParams());
348
338
  }
349
339
  // 有搜索栏的整合相关参数
350
340
  if (this.searchBar) {
351
- // 快速搜索
352
- if (this.searchBar.state.query) {
353
- const addParams = {
354
- query: this.searchBar.state.query,
355
- };
356
- Object.assign(params, addParams);
357
- }
358
- // 快速分组
359
- if (this.searchBar.state.selectedGroupItem?.data) {
360
- // eslint-disable-next-line no-new-func
361
- const func = new Function(
362
- `return (${this.searchBar.state.selectedGroupItem.data});`,
363
- );
364
- const addParams = func() as IData;
365
- Object.assign(params, addParams);
366
- }
341
+ Object.assign(params, this.searchBar.getFilterParams());
367
342
  }
368
343
  return params;
369
344
  }
@@ -0,0 +1,17 @@
1
+ import { IDEMultiEditViewPanel } from '@ibiz/model-core';
2
+ import { IMEditViewPanelEvent } from '../../event';
3
+ import { IMEditViewPanelState } from '../../state';
4
+ import { IMDControlController } from './i-md-control.controller';
5
+
6
+ /**
7
+ * 多编辑视图面板控制器
8
+ *
9
+ * @export
10
+ * @interface IMEditViewPanelController
11
+ * @extends {IMDControlController<IDEMultiEditViewPanel, IMEditViewPanelState, IMEditViewPanelEvent>}
12
+ */
13
+ export interface IMEditViewPanelController<
14
+ T extends IDEMultiEditViewPanel = IDEMultiEditViewPanel,
15
+ S extends IMEditViewPanelState = IMEditViewPanelState,
16
+ E extends IMEditViewPanelEvent = IMEditViewPanelEvent,
17
+ > extends IMDControlController<T, S, E> {}
@@ -12,4 +12,13 @@ import { IControlController } from './i-control.controller';
12
12
  * @extends {IControlController}
13
13
  */
14
14
  export interface ISearchBarController
15
- extends IControlController<ISearchBar, ISearchBarState, ISearchBarEvent> {}
15
+ extends IControlController<ISearchBar, ISearchBarState, ISearchBarEvent> {
16
+ /**
17
+ * 获取搜索栏的过滤参数
18
+ *
19
+ * @author lxm
20
+ * @date 2022-09-22 17:09:21
21
+ * @returns {*} {IParams}
22
+ */
23
+ getFilterParams(): IParams;
24
+ }
@@ -22,13 +22,13 @@ export interface ISearchFormController
22
22
  load(): Promise<IData>;
23
23
 
24
24
  /**
25
- * 获取搜索表单的视图过滤参数
25
+ * 获取搜索表单的过滤参数
26
26
  *
27
27
  * @author lxm
28
28
  * @date 2022-09-22 17:09:21
29
29
  * @returns {*} {IParams}
30
30
  */
31
- getParams(): IParams;
31
+ getFilterParams(): IParams;
32
32
 
33
33
  /**
34
34
  * 执行搜索行为
@@ -33,3 +33,4 @@ export * from './i-context-menu.controller';
33
33
  export * from './i-kanban.controller';
34
34
  export * from './i-tree-grid.controller';
35
35
  export * from './i-tree-grid-ex.controller';
36
+ export * from './i-medit-view-panel.controller';
@@ -0,0 +1,9 @@
1
+ import { IMDControlEvent } from './i-md-control.event';
2
+
3
+ /**
4
+ * 多编辑视图面板部件事件
5
+ *
6
+ * @export
7
+ * @interface IMDControlEvent
8
+ */
9
+ export type IMEditViewPanelEvent = IMDControlEvent;
@@ -29,3 +29,4 @@ export * from './i-calendar-exp-bar.event';
29
29
  export * from './i-context-menu.event';
30
30
  export * from './i-tree-grid.event';
31
31
  export * from './i-tree-grid-ex.event';
32
+ export * from './i-medit-view-panel.event';
@@ -0,0 +1,10 @@
1
+ import { IMDViewEvent } from './i-md-view.event';
2
+
3
+ /**
4
+ * 多表单编辑视图事件
5
+ *
6
+ * @export
7
+ * @interface IMEditView9Event
8
+ * @extends {IMDViewEvent}
9
+ */
10
+ export type IMEditView9Event = IMDViewEvent;
@@ -39,3 +39,4 @@ export * from './i-pickup-md-view.event';
39
39
  export * from './i-form-pickup-data-view.event';
40
40
  export * from './i-tree-grid-view.event';
41
41
  export * from './i-tree-grid-ex-view.event';
42
+ export * from './i-medit-view9.event';
@@ -0,0 +1,36 @@
1
+ import { ControlVO } from '../../../../service';
2
+ import { IMDControlState } from './i-md-control.state';
3
+
4
+ export interface IPanelUiItem {
5
+ // 唯一主键
6
+ id: string;
7
+ // 视图上下文
8
+ context: IData;
9
+ // 视图参数
10
+ params: IData;
11
+ // 该项数据
12
+ data: ControlVO;
13
+ // 主信息
14
+ srfmajortext: string;
15
+ }
16
+
17
+ /**
18
+ * 多编辑视图面板部件状态
19
+ *
20
+ * @export
21
+ * @interface IMEditViewPanelState
22
+ * @extends {IMDControlState}
23
+ */
24
+ export interface IMEditViewPanelState extends IMDControlState {
25
+ /**
26
+ * 编辑视图面板部件UI数据集合
27
+ * @type {IPanelUiItem[]}
28
+ */
29
+ panelUiItems: IPanelUiItem[];
30
+
31
+ /**
32
+ * 当前激活分页(上分页时启用)
33
+ *
34
+ */
35
+ activeTab: string;
36
+ }
@@ -1,6 +1,84 @@
1
1
  import { ISearchBarGroup } from '@ibiz/model-core';
2
2
  import { IControlState } from './i-control.state';
3
3
 
4
+ export interface IFilterBranchNode {
5
+ /**
6
+ * 是否是叶子节点
7
+ * @author lxm
8
+ * @date 2023-10-12 05:14:28
9
+ * @type {boolean}
10
+ */
11
+ leaf: false;
12
+
13
+ /**
14
+ * 父节点的逻辑类型
15
+ * @author lxm
16
+ * @date 2023-10-12 05:21:18
17
+ * @type {('AND' | 'OR')}
18
+ */
19
+ logicType: 'AND' | 'OR';
20
+
21
+ /**
22
+ * 过滤项值
23
+ * @author lxm
24
+ * @date 2023-10-12 05:16:52
25
+ * @type {unknown}
26
+ */
27
+ value?: unknown;
28
+
29
+ /**
30
+ * 值操作类型
31
+ * @author lxm
32
+ * @date 2023-10-12 05:27:07
33
+ * @type {string}
34
+ */
35
+ valueOP?: string;
36
+
37
+ /**
38
+ * 子节点数据集合
39
+ * @author lxm
40
+ * @date 2023-10-12 05:18:19
41
+ * @type {IFilterTreeNode[]}
42
+ */
43
+ children: IFilterNode[];
44
+ }
45
+
46
+ export interface IFilterLeafNode {
47
+ /**
48
+ * 是否是叶子节点
49
+ * @author lxm
50
+ * @date 2023-10-12 05:14:28
51
+ * @type {boolean}
52
+ */
53
+ leaf: true;
54
+
55
+ /**
56
+ * 实体属性名称
57
+ * @author lxm
58
+ * @date 2023-10-13 02:35:42
59
+ * @type {string}
60
+ */
61
+ field: string | null;
62
+
63
+ /**
64
+ * 过滤项值
65
+ * @author lxm
66
+ * @date 2023-10-12 05:16:52
67
+ * @type {unknown}
68
+ */
69
+ value: unknown | null;
70
+
71
+ /**
72
+ * 值操作类型
73
+ * @author lxm
74
+ * @date 2023-10-12 05:27:07
75
+ * @type {string}
76
+ */
77
+ valueOP: string | null;
78
+ }
79
+
80
+ export type IFilterNode = IFilterBranchNode | IFilterLeafNode;
81
+
4
82
  export interface ISearchBarState extends IControlState {
5
83
  /**
6
84
  * 快速搜索字符串
@@ -25,4 +103,12 @@ export interface ISearchBarState extends IControlState {
25
103
  * @type {boolean}
26
104
  */
27
105
  selectedGroupItem: ISearchBarGroup | null;
106
+
107
+ /**
108
+ * 过滤项树节点数据集合
109
+ * @author lxm
110
+ * @date 2023-10-12 05:16:12
111
+ * @type {IFilterNode[]}
112
+ */
113
+ filterNodes: IFilterNode[];
28
114
  }
@@ -35,3 +35,4 @@ export * from './i-context-menu.state';
35
35
  export * from './i-kanban.state';
36
36
  export * from './i-tree-grid.state';
37
37
  export * from './i-tree-grid-ex.state';
38
+ export * from './i-medit-view-panel.state';
@@ -0,0 +1,10 @@
1
+ import { IMDViewState } from './i-md-view.state';
2
+
3
+ /**
4
+ * 多表单编辑视图UI状态
5
+ *
6
+ * @export
7
+ * @class IMEditView9State
8
+ * @extends {IMDViewState}
9
+ */
10
+ export interface IMEditView9State extends IMDViewState {}
@@ -40,3 +40,4 @@ export * from './i-kanban-view.state';
40
40
  export * from './i-form-pickup-data-view.state';
41
41
  export * from './i-tree-grid-view.state';
42
42
  export * from './i-tree-grid-ex-view.state';
43
+ export * from './i-medit-view9.state';
@@ -111,7 +111,7 @@ export abstract class Method {
111
111
  case 'POST':
112
112
  res = await this.app.net.post(
113
113
  this.mergeRequestPath(path, methodName),
114
- notNilEmpty(data) ? data! : params!,
114
+ notNilEmpty(data) ? data! : params || {},
115
115
  );
116
116
  break;
117
117
  case 'GET':
@@ -123,7 +123,7 @@ export abstract class Method {
123
123
  case 'PUT': {
124
124
  res = await this.app.net.put(
125
125
  this.mergeRequestPath(path, methodName),
126
- notNilEmpty(data) ? data! : params!,
126
+ notNilEmpty(data) ? data! : params || {},
127
127
  );
128
128
  break;
129
129
  }