@ibiz-template/runtime 0.1.36 → 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 (79) hide show
  1. package/dist/index.esm.js +442 -66
  2. package/dist/index.system.min.js +1 -1
  3. package/dist/index.system.min.js.map +1 -1
  4. package/out/constant/view-call-tag.d.ts +5 -1
  5. package/out/constant/view-call-tag.d.ts.map +1 -1
  6. package/out/constant/view-call-tag.js +4 -0
  7. package/out/controller/control/dashboard/portlet/portlet-part/portlet-part.controller.d.ts.map +1 -1
  8. package/out/controller/control/dashboard/portlet/portlet-part/portlet-part.controller.js +1 -0
  9. package/out/controller/control/form/form-detail/form-item/form-item.controller.d.ts +3 -3
  10. package/out/controller/control/form/form-detail/form-item/form-item.controller.d.ts.map +1 -1
  11. package/out/controller/control/form/form-detail/form-item/form-item.controller.js +13 -8
  12. package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.d.ts +3 -3
  13. package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.d.ts.map +1 -1
  14. package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.js +13 -8
  15. package/out/controller/control/index.d.ts +1 -0
  16. package/out/controller/control/index.d.ts.map +1 -1
  17. package/out/controller/control/index.js +1 -0
  18. package/out/controller/control/medit-view-panel/index.d.ts +3 -0
  19. package/out/controller/control/medit-view-panel/index.d.ts.map +1 -0
  20. package/out/controller/control/medit-view-panel/index.js +2 -0
  21. package/out/controller/control/medit-view-panel/medit-view-panel.controller.d.ts +119 -0
  22. package/out/controller/control/medit-view-panel/medit-view-panel.controller.d.ts.map +1 -0
  23. package/out/controller/control/medit-view-panel/medit-view-panel.controller.js +320 -0
  24. package/out/controller/control/medit-view-panel/medit-view-panel.service.d.ts +11 -0
  25. package/out/controller/control/medit-view-panel/medit-view-panel.service.d.ts.map +1 -0
  26. package/out/controller/control/medit-view-panel/medit-view-panel.service.js +9 -0
  27. package/out/controller/utils/value-rule/value-rule.d.ts +10 -1
  28. package/out/controller/utils/value-rule/value-rule.d.ts.map +1 -1
  29. package/out/controller/utils/value-rule/value-rule.js +64 -1
  30. package/out/interface/controller/controller/control/i-medit-view-panel.controller.d.ts +14 -0
  31. package/out/interface/controller/controller/control/i-medit-view-panel.controller.d.ts.map +1 -0
  32. package/out/interface/controller/controller/control/i-medit-view-panel.controller.js +1 -0
  33. package/out/interface/controller/controller/control/index.d.ts +1 -0
  34. package/out/interface/controller/controller/control/index.d.ts.map +1 -1
  35. package/out/interface/controller/controller/control/index.js +1 -0
  36. package/out/interface/controller/event/control/i-medit-view-panel.event.d.ts +9 -0
  37. package/out/interface/controller/event/control/i-medit-view-panel.event.d.ts.map +1 -0
  38. package/out/interface/controller/event/control/i-medit-view-panel.event.js +1 -0
  39. package/out/interface/controller/event/control/index.d.ts +1 -0
  40. package/out/interface/controller/event/control/index.d.ts.map +1 -1
  41. package/out/interface/controller/event/control/index.js +1 -0
  42. package/out/interface/controller/event/view/i-medit-view9.event.d.ts +10 -0
  43. package/out/interface/controller/event/view/i-medit-view9.event.d.ts.map +1 -0
  44. package/out/interface/controller/event/view/i-medit-view9.event.js +1 -0
  45. package/out/interface/controller/event/view/index.d.ts +1 -0
  46. package/out/interface/controller/event/view/index.d.ts.map +1 -1
  47. package/out/interface/controller/event/view/index.js +1 -0
  48. package/out/interface/controller/state/control/i-medit-view-panel.state.d.ts +29 -0
  49. package/out/interface/controller/state/control/i-medit-view-panel.state.d.ts.map +1 -0
  50. package/out/interface/controller/state/control/i-medit-view-panel.state.js +1 -0
  51. package/out/interface/controller/state/control/index.d.ts +1 -0
  52. package/out/interface/controller/state/control/index.d.ts.map +1 -1
  53. package/out/interface/controller/state/control/index.js +1 -0
  54. package/out/interface/controller/state/view/i-medit-view9.state.d.ts +11 -0
  55. package/out/interface/controller/state/view/i-medit-view9.state.d.ts.map +1 -0
  56. package/out/interface/controller/state/view/i-medit-view9.state.js +1 -0
  57. package/out/interface/controller/state/view/index.d.ts +1 -0
  58. package/out/interface/controller/state/view/index.d.ts.map +1 -1
  59. package/out/interface/controller/state/view/index.js +1 -0
  60. package/package.json +2 -2
  61. package/src/constant/view-call-tag.ts +4 -0
  62. package/src/controller/control/dashboard/portlet/portlet-part/portlet-part.controller.ts +2 -0
  63. package/src/controller/control/form/form-detail/form-item/form-item.controller.ts +22 -9
  64. package/src/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.ts +18 -13
  65. package/src/controller/control/index.ts +1 -0
  66. package/src/controller/control/medit-view-panel/index.ts +2 -0
  67. package/src/controller/control/medit-view-panel/medit-view-panel.controller.ts +375 -0
  68. package/src/controller/control/medit-view-panel/medit-view-panel.service.ts +10 -0
  69. package/src/controller/utils/value-rule/value-rule.ts +97 -2
  70. package/src/interface/controller/controller/control/i-medit-view-panel.controller.ts +17 -0
  71. package/src/interface/controller/controller/control/index.ts +1 -0
  72. package/src/interface/controller/event/control/i-medit-view-panel.event.ts +9 -0
  73. package/src/interface/controller/event/control/index.ts +1 -0
  74. package/src/interface/controller/event/view/i-medit-view9.event.ts +10 -0
  75. package/src/interface/controller/event/view/index.ts +1 -0
  76. package/src/interface/controller/state/control/i-medit-view-panel.state.ts +36 -0
  77. package/src/interface/controller/state/control/index.ts +1 -0
  78. package/src/interface/controller/state/view/i-medit-view9.state.ts +10 -0
  79. package/src/interface/controller/state/view/index.ts +1 -0
@@ -0,0 +1,375 @@
1
+ /* eslint-disable no-shadow */
2
+ import { RuntimeError } from '@ibiz-template/core';
3
+ import { IAppDERS, IAppDEView, IDEMultiEditViewPanel } from '@ibiz/model-core';
4
+ import { createUUID } from 'qx-util';
5
+ import {
6
+ IMEditViewPanelState,
7
+ IMEditViewPanelEvent,
8
+ IMEditViewPanelController,
9
+ MDCtrlLoadParams,
10
+ IPanelUiItem,
11
+ DataChangeEvent,
12
+ } from '../../../interface';
13
+ import { calcDeCodeNameById } from '../../../model';
14
+ import { ControlVO, Srfuf } from '../../../service';
15
+ import { MDControlController } from '../../common';
16
+ import { MEditViewPanelService } from './medit-view-panel.service';
17
+
18
+ /**
19
+ * 多编辑视图面板部件控制器
20
+ * @export
21
+ * @class MEditViewPanelController
22
+ * @extends {MDControlController<IDEMultiEditViewPanel, IMEditViewPanelState, IMEditViewPanelEvent>}
23
+ * @implements {IMEditViewPanelController}
24
+ */
25
+ export class MEditViewPanelController
26
+ extends MDControlController<
27
+ IDEMultiEditViewPanel,
28
+ IMEditViewPanelState,
29
+ IMEditViewPanelEvent
30
+ >
31
+ implements IMEditViewPanelController
32
+ {
33
+ declare service: MEditViewPanelService;
34
+
35
+ /**
36
+ * 是否显示底部按钮
37
+ *
38
+ */
39
+ showButton: boolean = true;
40
+
41
+ /**
42
+ * 关系实体参数对象
43
+ *
44
+ */
45
+ deResParameters: IData[] = [];
46
+
47
+ /**
48
+ * 当前应用视图参数对象
49
+ *
50
+ */
51
+ parameters: IData[] = [];
52
+
53
+ protected async onCreated(): Promise<void> {
54
+ await super.onCreated();
55
+ this.service = new MEditViewPanelService(this.model);
56
+ await this.service.init(this.context);
57
+ await this.initParameters();
58
+ }
59
+
60
+ protected initState(): void {
61
+ super.initState();
62
+ this.state.panelUiItems = [];
63
+ this.state.activeTab = '';
64
+ this.state.size = 1000;
65
+ }
66
+
67
+ /**
68
+ * 格式化视图关系参数
69
+ *
70
+ * @param {IContext} context 应用上下文数据
71
+ * @param {IAppDERS[][]} appDERSPaths 关系路径数据
72
+ */
73
+ async formatAppDERSPath(
74
+ context: IContext,
75
+ appDERSPaths: IAppDERS[][],
76
+ ): Promise<IData[]> {
77
+ if (!appDERSPaths || appDERSPaths.length === 0) {
78
+ return [];
79
+ }
80
+ let counter: number = 0;
81
+ for (const appDERSPath of appDERSPaths) {
82
+ const tempData: IData = { isInclude: true, data: [] };
83
+ for (const singleAppDERSPath of appDERSPath) {
84
+ // eslint-disable-next-line no-await-in-loop
85
+ const majorPSAppDataEntity = await ibiz.hub.getAppDataEntity(
86
+ singleAppDERSPath.majorAppDataEntityId!,
87
+ );
88
+ if (majorPSAppDataEntity && majorPSAppDataEntity.codeName) {
89
+ tempData.isInclude =
90
+ context[majorPSAppDataEntity.codeName.toLowerCase()] &&
91
+ tempData.isInclude;
92
+ tempData.data.push({
93
+ parameterName: majorPSAppDataEntity.keyAppDEFieldId?.toLowerCase(),
94
+ pathName: majorPSAppDataEntity.codeName?.toLowerCase(),
95
+ });
96
+ }
97
+ }
98
+ // eslint-disable-next-line no-plusplus
99
+ counter++;
100
+ if (tempData.isInclude) {
101
+ return tempData.data;
102
+ }
103
+ if (counter === appDERSPaths.length) {
104
+ return [];
105
+ }
106
+ }
107
+ return [];
108
+ }
109
+
110
+ /**
111
+ * 初始化嵌入应用视图及实体参数对象
112
+ * @return {*}
113
+ * @author: zhujiamin
114
+ * @Date: 2023-10-16 13:56:56
115
+ */
116
+ async initParameters(): Promise<void> {
117
+ if (this.controlParams.SHOWBUTTON) {
118
+ this.showButton = !Object.is(this.controlParams.SHOWBUTTON, 'false');
119
+ }
120
+ if (this.model.embeddedAppViewId) {
121
+ const embedView = await ibiz.hub.getAppView(this.model.embeddedAppViewId);
122
+ if (embedView.appDataEntityId) {
123
+ const embedViewEntity = await ibiz.hub.getAppDataEntity(
124
+ embedView.appDataEntityId,
125
+ );
126
+ if (embedView && embedViewEntity) {
127
+ this.deResParameters = await this.formatAppDERSPath(
128
+ this.context,
129
+ (embedView as IAppDEView).appDERSPaths,
130
+ );
131
+ this.parameters = [
132
+ {
133
+ parameterName: embedViewEntity.keyAppDEFieldId?.toLowerCase(),
134
+ pathName: embedViewEntity.codeName?.toLowerCase(),
135
+ },
136
+ ];
137
+ } else {
138
+ this.deResParameters = [];
139
+ this.parameters = [];
140
+ }
141
+ }
142
+ }
143
+ }
144
+
145
+ /**
146
+ * 部件加载后处理
147
+ *
148
+ * @author chitanda
149
+ * @date 2023-06-21 15:06:44
150
+ * @param {MDCtrlLoadParams} args 本次请求参数
151
+ * @param {IData[]} items 上游处理的数据(默认是后台数据)
152
+ * @return {*} {Promise<IData[]>} 返回给后续处理的数据
153
+ */
154
+ async afterLoad(
155
+ args: MDCtrlLoadParams,
156
+ items: ControlVO[],
157
+ ): Promise<ControlVO[]> {
158
+ await super.afterLoad(args, items);
159
+ this.state.panelUiItems = [];
160
+ this.doItems(items);
161
+ // 设置默认激活
162
+ if (
163
+ this.model.panelStyle === 'TAB_TOP' &&
164
+ this.state.panelUiItems.length > 0
165
+ ) {
166
+ this.state.activeTab = this.state.panelUiItems[0].id;
167
+ }
168
+ return items;
169
+ }
170
+
171
+ /**
172
+ * 处理UI所需数据
173
+ * @param {ControlVO} arg
174
+ * @return {*}
175
+ * @author: zhujiamin
176
+ * @Date: 2023-10-16 17:55:31
177
+ */
178
+ handlePanelItemParams(arg: ControlVO): IPanelUiItem {
179
+ const [{ parameterName }] = this.parameters;
180
+ const id: string = arg[parameterName]
181
+ ? arg[parameterName]
182
+ : `mockId:${createUUID()}`;
183
+ const item = { id, context: {}, params: {}, data: arg, srfmajortext: '' };
184
+ Object.assign(item.context, this.context);
185
+ // 关系应用实体参数
186
+ this.deResParameters.forEach(deResParameter => {
187
+ const { parameterName, pathName } = deResParameter;
188
+ if (
189
+ this.context[parameterName] &&
190
+ !Object.is(this.context[parameterName], '')
191
+ ) {
192
+ Object.assign(item.context, {
193
+ [pathName]: this.context[parameterName],
194
+ });
195
+ } else if (arg[parameterName] && !Object.is(arg[parameterName], '')) {
196
+ Object.assign(item.context, {
197
+ [pathName]: arg[parameterName],
198
+ });
199
+ }
200
+ });
201
+
202
+ // 当前视图参数(应用实体视图)
203
+ this.parameters.forEach(parameter => {
204
+ const { parameterName, pathName } = parameter;
205
+ if (arg[parameterName] && !Object.is(arg[parameterName], '')) {
206
+ Object.assign(item.context, {
207
+ [pathName]: arg[parameterName],
208
+ });
209
+ }
210
+
211
+ // 当前页面实体主信息
212
+ if (arg.srfmajortext && !Object.is(arg.srfmajortext, '')) {
213
+ Object.assign(item, { srfmajortext: arg.srfmajortext });
214
+ } else if (arg.srfuf === 0) {
215
+ Object.assign(item, { srfmajortext: '草稿--新建' });
216
+ }
217
+ });
218
+
219
+ // 合并视图参数
220
+ Object.assign(item.params, this.params);
221
+ return item;
222
+ }
223
+
224
+ /**
225
+ * 处理数据
226
+ * @param {ControlVO} datas
227
+ * @return {*}
228
+ * @author: zhujiamin
229
+ * @Date: 2023-10-16 15:00:02
230
+ */
231
+ doItems(datas: ControlVO[]): void {
232
+ datas.forEach((arg: ControlVO) => {
233
+ const item = this.handlePanelItemParams(arg);
234
+ this.state.panelUiItems.push(item);
235
+ });
236
+ }
237
+
238
+ /**
239
+ * 处理添加
240
+ * @return {*}
241
+ * @author: zhujiamin
242
+ * @Date: 2023-10-16 15:18:01
243
+ */
244
+ async handleAdd(): Promise<void> {
245
+ this.doItems([{ srfuf: 0 } as ControlVO]);
246
+ if (this.model.panelStyle === 'TAB_TOP') {
247
+ // 上分页添加后激活最后一个
248
+ this.state.activeTab =
249
+ this.state.panelUiItems[this.state.panelUiItems.length - 1].id;
250
+ }
251
+ }
252
+
253
+ /**
254
+ * 处理删除
255
+ * @param {IPanelUiItem} item
256
+ * @return {*}
257
+ * @author: zhujiamin
258
+ * @Date: 2023-10-16 15:23:59
259
+ */
260
+ async handleDelete(item: IPanelUiItem): Promise<void> {
261
+ // 新建的界面上删除即可
262
+ if (item.data.srfuf === 0) {
263
+ // 删除items中已删除的项
264
+ const index = this.state.panelUiItems.findIndex(value => {
265
+ return value === item;
266
+ });
267
+ this.state.panelUiItems.splice(index, 1);
268
+ } else {
269
+ await this.remove({ data: [item.data] });
270
+ }
271
+ }
272
+
273
+ /**
274
+ * 处理tab删除
275
+ * @param {IPanelUiItem} item
276
+ * @return {*}
277
+ * @author: zhujiamin
278
+ * @Date: 2023-10-17 14:21:57
279
+ */
280
+ async handleTabDelete(item: IPanelUiItem, index: number): Promise<void> {
281
+ let isBackToEnd = false;
282
+ // 如果删除的是激活项,且为最后一项,设置激活项为前一项
283
+ if (
284
+ item.id === this.state.activeTab &&
285
+ index === this.state.panelUiItems.length - 1
286
+ ) {
287
+ if (index > 0) {
288
+ isBackToEnd = true;
289
+ }
290
+ }
291
+ await this.handleDelete(item);
292
+ if (isBackToEnd) {
293
+ this.state.activeTab =
294
+ this.state.panelUiItems[this.state.panelUiItems.length - 1].id;
295
+ }
296
+ }
297
+
298
+ /**
299
+ * 后台删除结束后界面删除逻辑
300
+ *
301
+ * @author lxm
302
+ * @date 2022-09-06 19:09:10
303
+ * @param {IData} data
304
+ */
305
+ afterRemove(data: IData): void {
306
+ super.afterRemove(data);
307
+ // 删除this.items里的数据
308
+ const index = this.state.panelUiItems.findIndex(
309
+ item => item.data.srfkey === data.srfkey,
310
+ );
311
+ if (index !== -1) {
312
+ this.state.panelUiItems.splice(index, 1);
313
+ }
314
+ }
315
+
316
+ /**
317
+ * 视图数据变化
318
+ * @param {DataChangeEvent} args
319
+ * @return {*}
320
+ * @author: zhujiamin
321
+ * @Date: 2023-10-16 17:20:45
322
+ */
323
+ onViewDataChange(args: DataChangeEvent, id: string): void {
324
+ // 新建的保存成功后该部件需要保存来更新数据
325
+ if (args.eventName === 'onSaveSuccess') {
326
+ this.save(args.data[0] as ControlVO, id);
327
+ }
328
+ }
329
+
330
+ /**
331
+ * 保存
332
+ *
333
+ * @param {ControlVO} data
334
+ * @returns {*} {Promise<void>}
335
+ */
336
+ async save(data: ControlVO, id: string): Promise<void> {
337
+ const panelUiItemIndex = this.state.panelUiItems.findIndex(
338
+ item => item.id === id,
339
+ );
340
+ if (!panelUiItemIndex) {
341
+ throw new RuntimeError('编辑视图面板部件UI数据不存在');
342
+ }
343
+ await this.startLoading();
344
+ let res;
345
+ const isCreate = data.srfuf === Srfuf.CREATE;
346
+ const deName = calcDeCodeNameById(this.model.appDataEntityId!);
347
+ const tempContext = this.context.clone();
348
+ tempContext[deName] = data.srfkey;
349
+ try {
350
+ res = isCreate
351
+ ? await this.service.create(tempContext, data)
352
+ : await this.service.update(tempContext, data);
353
+ } catch (error) {
354
+ await this.evt.emit('onSaveError', undefined);
355
+ this.actionNotification(`${isCreate ? 'CREATE' : 'UPDATE'}ERROR`, {
356
+ error: error as Error,
357
+ data: this.state.panelUiItems[panelUiItemIndex].data,
358
+ });
359
+ throw error;
360
+ } finally {
361
+ await this.endLoading();
362
+ }
363
+ // 后续处理
364
+ const index = this.state.items.findIndex(
365
+ item => item.srfkey === data.srfkey,
366
+ );
367
+ this.state.items.splice(index, 1, res.data);
368
+ this.state.panelUiItems.splice(
369
+ panelUiItemIndex,
370
+ 1,
371
+ this.handlePanelItemParams(res.data),
372
+ );
373
+ await this.evt.emit('onSaveSuccess', undefined);
374
+ }
375
+ }
@@ -0,0 +1,10 @@
1
+ import { IDEMultiEditViewPanel } from '@ibiz/model-core';
2
+ import { MDControlService } from '../../../service';
3
+
4
+ /**
5
+ * 多编辑视图面板部件服务
6
+ *
7
+ * @export
8
+ * @extends {MDControlService<IDEMultiEditViewPanel>}
9
+ */
10
+ export class MEditViewPanelService extends MDControlService<IDEMultiEditViewPanel> {}
@@ -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
+ }
@@ -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> {}
@@ -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
+ }
@@ -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';