@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.
- package/dist/index.esm.js +799 -130
- package/dist/index.system.min.js +1 -1
- package/dist/index.system.min.js.map +1 -1
- package/out/constant/index.d.ts +1 -0
- package/out/constant/index.d.ts.map +1 -1
- package/out/constant/index.js +1 -0
- package/out/constant/value-op.d.ts +82 -0
- package/out/constant/value-op.d.ts.map +1 -0
- package/out/constant/value-op.js +83 -0
- package/out/constant/view-call-tag.d.ts +5 -1
- package/out/constant/view-call-tag.d.ts.map +1 -1
- package/out/constant/view-call-tag.js +4 -0
- package/out/controller/control/dashboard/portlet/portlet-part/portlet-part.controller.d.ts.map +1 -1
- package/out/controller/control/dashboard/portlet/portlet-part/portlet-part.controller.js +1 -0
- package/out/controller/control/form/form-detail/form-item/form-item.controller.d.ts +3 -3
- package/out/controller/control/form/form-detail/form-item/form-item.controller.d.ts.map +1 -1
- package/out/controller/control/form/form-detail/form-item/form-item.controller.js +13 -8
- package/out/controller/control/form/search-form/search-form.controller.d.ts +2 -2
- package/out/controller/control/form/search-form/search-form.controller.d.ts.map +1 -1
- package/out/controller/control/form/search-form/search-form.controller.js +11 -3
- package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.d.ts +3 -3
- package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.d.ts.map +1 -1
- package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.js +13 -8
- package/out/controller/control/index.d.ts +1 -0
- package/out/controller/control/index.d.ts.map +1 -1
- package/out/controller/control/index.js +1 -0
- package/out/controller/control/md-ctrl/md-ctrl.controller.d.ts +38 -3
- package/out/controller/control/md-ctrl/md-ctrl.controller.d.ts.map +1 -1
- package/out/controller/control/md-ctrl/md-ctrl.controller.js +110 -3
- package/out/controller/control/medit-view-panel/index.d.ts +3 -0
- package/out/controller/control/medit-view-panel/index.d.ts.map +1 -0
- package/out/controller/control/medit-view-panel/index.js +2 -0
- package/out/controller/control/medit-view-panel/medit-view-panel.controller.d.ts +119 -0
- package/out/controller/control/medit-view-panel/medit-view-panel.controller.d.ts.map +1 -0
- package/out/controller/control/medit-view-panel/medit-view-panel.controller.js +320 -0
- package/out/controller/control/medit-view-panel/medit-view-panel.service.d.ts +11 -0
- package/out/controller/control/medit-view-panel/medit-view-panel.service.d.ts.map +1 -0
- package/out/controller/control/medit-view-panel/medit-view-panel.service.js +9 -0
- package/out/controller/control/search-bar/search-bar-filter.controller.d.ts +65 -0
- package/out/controller/control/search-bar/search-bar-filter.controller.d.ts.map +1 -0
- package/out/controller/control/search-bar/search-bar-filter.controller.js +48 -0
- package/out/controller/control/search-bar/search-bar.controller.d.ts +63 -4
- package/out/controller/control/search-bar/search-bar.controller.d.ts.map +1 -1
- package/out/controller/control/search-bar/search-bar.controller.js +143 -9
- package/out/controller/utils/value-rule/value-rule.d.ts +10 -1
- package/out/controller/utils/value-rule/value-rule.d.ts.map +1 -1
- package/out/controller/utils/value-rule/value-rule.js +64 -1
- package/out/engine/md-view.engine.d.ts.map +1 -1
- package/out/engine/md-view.engine.js +2 -23
- package/out/interface/controller/controller/control/i-medit-view-panel.controller.d.ts +14 -0
- package/out/interface/controller/controller/control/i-medit-view-panel.controller.d.ts.map +1 -0
- package/out/interface/controller/controller/control/i-medit-view-panel.controller.js +1 -0
- package/out/interface/controller/controller/control/i-search-bar.controller.d.ts +8 -0
- package/out/interface/controller/controller/control/i-search-bar.controller.d.ts.map +1 -1
- package/out/interface/controller/controller/control/i-search-form.controller.d.ts +2 -2
- package/out/interface/controller/controller/control/i-search-form.controller.d.ts.map +1 -1
- package/out/interface/controller/controller/control/index.d.ts +1 -0
- package/out/interface/controller/controller/control/index.d.ts.map +1 -1
- package/out/interface/controller/controller/control/index.js +1 -0
- package/out/interface/controller/event/control/i-medit-view-panel.event.d.ts +9 -0
- package/out/interface/controller/event/control/i-medit-view-panel.event.d.ts.map +1 -0
- package/out/interface/controller/event/control/i-medit-view-panel.event.js +1 -0
- package/out/interface/controller/event/control/index.d.ts +1 -0
- package/out/interface/controller/event/control/index.d.ts.map +1 -1
- package/out/interface/controller/event/control/index.js +1 -0
- package/out/interface/controller/event/view/i-medit-view9.event.d.ts +10 -0
- package/out/interface/controller/event/view/i-medit-view9.event.d.ts.map +1 -0
- package/out/interface/controller/event/view/i-medit-view9.event.js +1 -0
- package/out/interface/controller/event/view/index.d.ts +1 -0
- package/out/interface/controller/event/view/index.d.ts.map +1 -1
- package/out/interface/controller/event/view/index.js +1 -0
- package/out/interface/controller/state/control/i-medit-view-panel.state.d.ts +29 -0
- package/out/interface/controller/state/control/i-medit-view-panel.state.d.ts.map +1 -0
- package/out/interface/controller/state/control/i-medit-view-panel.state.js +1 -0
- package/out/interface/controller/state/control/i-search-bar.state.d.ts +75 -0
- package/out/interface/controller/state/control/i-search-bar.state.d.ts.map +1 -1
- package/out/interface/controller/state/control/index.d.ts +1 -0
- package/out/interface/controller/state/control/index.d.ts.map +1 -1
- package/out/interface/controller/state/control/index.js +1 -0
- package/out/interface/controller/state/view/i-medit-view9.state.d.ts +11 -0
- package/out/interface/controller/state/view/i-medit-view9.state.d.ts.map +1 -0
- package/out/interface/controller/state/view/i-medit-view9.state.js +1 -0
- package/out/interface/controller/state/view/index.d.ts +1 -0
- package/out/interface/controller/state/view/index.d.ts.map +1 -1
- package/out/interface/controller/state/view/index.js +1 -0
- package/out/service/service/entity/method/method.js +2 -2
- package/package.json +3 -3
- package/src/constant/index.ts +1 -0
- package/src/constant/value-op.ts +82 -0
- package/src/constant/view-call-tag.ts +4 -0
- package/src/controller/control/dashboard/portlet/portlet-part/portlet-part.controller.ts +2 -0
- package/src/controller/control/form/form-detail/form-item/form-item.controller.ts +22 -9
- package/src/controller/control/form/search-form/search-form.controller.ts +11 -3
- package/src/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.ts +18 -13
- package/src/controller/control/index.ts +1 -0
- package/src/controller/control/md-ctrl/md-ctrl.controller.ts +136 -3
- package/src/controller/control/medit-view-panel/index.ts +2 -0
- package/src/controller/control/medit-view-panel/medit-view-panel.controller.ts +375 -0
- package/src/controller/control/medit-view-panel/medit-view-panel.service.ts +10 -0
- package/src/controller/control/search-bar/search-bar-filter.controller.ts +112 -0
- package/src/controller/control/search-bar/search-bar.controller.ts +165 -9
- package/src/controller/utils/value-rule/value-rule.ts +97 -2
- package/src/engine/md-view.engine.ts +2 -27
- package/src/interface/controller/controller/control/i-medit-view-panel.controller.ts +17 -0
- package/src/interface/controller/controller/control/i-search-bar.controller.ts +10 -1
- package/src/interface/controller/controller/control/i-search-form.controller.ts +2 -2
- package/src/interface/controller/controller/control/index.ts +1 -0
- package/src/interface/controller/event/control/i-medit-view-panel.event.ts +9 -0
- package/src/interface/controller/event/control/index.ts +1 -0
- package/src/interface/controller/event/view/i-medit-view9.event.ts +10 -0
- package/src/interface/controller/event/view/index.ts +1 -0
- package/src/interface/controller/state/control/i-medit-view-panel.state.ts +36 -0
- package/src/interface/controller/state/control/i-search-bar.state.ts +86 -0
- package/src/interface/controller/state/control/index.ts +1 -0
- package/src/interface/controller/state/view/i-medit-view9.state.ts +10 -0
- package/src/interface/controller/state/view/index.ts +1 -0
- package/src/service/service/entity/method/method.ts +2 -2
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { RuntimeModelError } from '@ibiz-template/core';
|
|
2
|
+
import { isNil } from 'ramda';
|
|
1
3
|
import { MDCtrlService } from './md-ctrl.service';
|
|
2
4
|
import { MobMDCtrlRowState } from './md-ctrl-row.state';
|
|
3
5
|
import { MDControlController } from '../../common';
|
|
@@ -64,7 +66,7 @@ export class MDCtrlController extends MDControlController {
|
|
|
64
66
|
async refresh() {
|
|
65
67
|
await this.load({ isInitialLoad: true });
|
|
66
68
|
}
|
|
67
|
-
afterLoad(args, items) {
|
|
69
|
+
async afterLoad(args, items) {
|
|
68
70
|
if (args.isInitialLoad) {
|
|
69
71
|
this.state.rows = [];
|
|
70
72
|
}
|
|
@@ -75,6 +77,8 @@ export class MDCtrlController extends MDControlController {
|
|
|
75
77
|
return row;
|
|
76
78
|
}));
|
|
77
79
|
}
|
|
80
|
+
await this.initGroupCodeListItems();
|
|
81
|
+
await this.handleDataGroup();
|
|
78
82
|
return super.afterLoad(args, items);
|
|
79
83
|
}
|
|
80
84
|
/**
|
|
@@ -83,7 +87,7 @@ export class MDCtrlController extends MDControlController {
|
|
|
83
87
|
* @author zk
|
|
84
88
|
* @date 2023-05-26 02:05:46
|
|
85
89
|
* @param {IData[]} items
|
|
86
|
-
* @memberof
|
|
90
|
+
* @memberof MDCtrlController
|
|
87
91
|
*/
|
|
88
92
|
setData(items) {
|
|
89
93
|
const rows = items.map(item => {
|
|
@@ -98,7 +102,7 @@ export class MDCtrlController extends MDControlController {
|
|
|
98
102
|
* @author zk
|
|
99
103
|
* @date 2023-05-26 02:05:35
|
|
100
104
|
* @return {*} {IData[]}
|
|
101
|
-
* @memberof
|
|
105
|
+
* @memberof MDCtrlController
|
|
102
106
|
*/
|
|
103
107
|
getAllData() {
|
|
104
108
|
return this.state.rows.map(row => row.data);
|
|
@@ -157,4 +161,107 @@ export class MDCtrlController extends MDControlController {
|
|
|
157
161
|
containerState.update(row.data.getOrigin());
|
|
158
162
|
row.uaColStates[group.id] = containerState;
|
|
159
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* 处理数据分组
|
|
166
|
+
*
|
|
167
|
+
* @memberof MDCtrlController
|
|
168
|
+
*/
|
|
169
|
+
async handleDataGroup() {
|
|
170
|
+
const { enableGroup, groupMode, groupAppDEFieldId } = this.model;
|
|
171
|
+
if (enableGroup && groupMode) {
|
|
172
|
+
if (!groupAppDEFieldId) {
|
|
173
|
+
throw new RuntimeModelError(this.model, '分组属性没有配置');
|
|
174
|
+
}
|
|
175
|
+
if (groupMode === 'AUTO') {
|
|
176
|
+
this.handleAutoGroup();
|
|
177
|
+
}
|
|
178
|
+
else if (groupMode === 'CODELIST') {
|
|
179
|
+
await this.handleCodeListGroup();
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* 处理自动分组
|
|
185
|
+
*
|
|
186
|
+
* @memberof MDCtrlController
|
|
187
|
+
*/
|
|
188
|
+
handleAutoGroup() {
|
|
189
|
+
const { groupAppDEFieldId } = this.model;
|
|
190
|
+
if (groupAppDEFieldId) {
|
|
191
|
+
const { items } = this.state;
|
|
192
|
+
const groupMap = new Map();
|
|
193
|
+
items.forEach((item) => {
|
|
194
|
+
const groupVal = item[groupAppDEFieldId];
|
|
195
|
+
if (isNil(groupVal)) {
|
|
196
|
+
// 分组无值的不显示
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (!groupMap.has(groupVal)) {
|
|
200
|
+
groupMap.set(groupVal, []);
|
|
201
|
+
}
|
|
202
|
+
groupMap
|
|
203
|
+
.get(groupVal)
|
|
204
|
+
.push(new MobMDCtrlRowState(item, this));
|
|
205
|
+
});
|
|
206
|
+
const groups = [];
|
|
207
|
+
groupMap.forEach((value, key) => {
|
|
208
|
+
groups.push({
|
|
209
|
+
caption: key,
|
|
210
|
+
key,
|
|
211
|
+
children: [...value],
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
this.state.groups = groups;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* 加载并初始化分组代码表项集合
|
|
219
|
+
* @author lxm
|
|
220
|
+
* @date 2023-08-29 05:11:39
|
|
221
|
+
* @protected
|
|
222
|
+
* @return {*} {Promise<void>}
|
|
223
|
+
*/
|
|
224
|
+
async initGroupCodeListItems() {
|
|
225
|
+
const { groupCodeListId } = this.model;
|
|
226
|
+
if (!groupCodeListId) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const app = ibiz.hub.getApp(this.context.srfappid);
|
|
230
|
+
this.groupCodeListItems = await app.codeList.get(groupCodeListId, this.context, this.params);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* 处理代码表分组
|
|
234
|
+
*
|
|
235
|
+
* @memberof MDCtrlController
|
|
236
|
+
*/
|
|
237
|
+
async handleCodeListGroup() {
|
|
238
|
+
const { groupAppDEFieldId, groupCodeListId } = this.model;
|
|
239
|
+
if (!groupCodeListId) {
|
|
240
|
+
throw new RuntimeModelError(this.model, '分组代码表没有配置');
|
|
241
|
+
}
|
|
242
|
+
const { items } = this.state;
|
|
243
|
+
const groupMap = new Map();
|
|
244
|
+
this.groupCodeListItems.forEach(item => {
|
|
245
|
+
groupMap.set(item.value, []);
|
|
246
|
+
});
|
|
247
|
+
items.forEach((item) => {
|
|
248
|
+
const groupVal = item[groupAppDEFieldId];
|
|
249
|
+
const groupArr = groupMap.get(groupVal);
|
|
250
|
+
if (groupArr) {
|
|
251
|
+
groupArr.push(new MobMDCtrlRowState(item, this));
|
|
252
|
+
}
|
|
253
|
+
// 不在代码表里数据忽略
|
|
254
|
+
});
|
|
255
|
+
const groups = [];
|
|
256
|
+
groupMap.forEach((arr, key) => {
|
|
257
|
+
// 标题
|
|
258
|
+
const codeListItem = this.groupCodeListItems.find(item => item.value === key);
|
|
259
|
+
groups.push({
|
|
260
|
+
caption: codeListItem.text,
|
|
261
|
+
key: codeListItem.value,
|
|
262
|
+
children: arr,
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
this.state.groups = groups;
|
|
266
|
+
}
|
|
160
267
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/controller/control/medit-view-panel/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { IAppDERS, IDEMultiEditViewPanel } from '@ibiz/model-core';
|
|
2
|
+
import { IMEditViewPanelState, IMEditViewPanelEvent, IMEditViewPanelController, MDCtrlLoadParams, IPanelUiItem, DataChangeEvent } from '../../../interface';
|
|
3
|
+
import { ControlVO } from '../../../service';
|
|
4
|
+
import { MDControlController } from '../../common';
|
|
5
|
+
import { MEditViewPanelService } from './medit-view-panel.service';
|
|
6
|
+
/**
|
|
7
|
+
* 多编辑视图面板部件控制器
|
|
8
|
+
* @export
|
|
9
|
+
* @class MEditViewPanelController
|
|
10
|
+
* @extends {MDControlController<IDEMultiEditViewPanel, IMEditViewPanelState, IMEditViewPanelEvent>}
|
|
11
|
+
* @implements {IMEditViewPanelController}
|
|
12
|
+
*/
|
|
13
|
+
export declare class MEditViewPanelController extends MDControlController<IDEMultiEditViewPanel, IMEditViewPanelState, IMEditViewPanelEvent> implements IMEditViewPanelController {
|
|
14
|
+
service: MEditViewPanelService;
|
|
15
|
+
/**
|
|
16
|
+
* 是否显示底部按钮
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
19
|
+
showButton: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* 关系实体参数对象
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
deResParameters: IData[];
|
|
25
|
+
/**
|
|
26
|
+
* 当前应用视图参数对象
|
|
27
|
+
*
|
|
28
|
+
*/
|
|
29
|
+
parameters: IData[];
|
|
30
|
+
protected onCreated(): Promise<void>;
|
|
31
|
+
protected initState(): void;
|
|
32
|
+
/**
|
|
33
|
+
* 格式化视图关系参数
|
|
34
|
+
*
|
|
35
|
+
* @param {IContext} context 应用上下文数据
|
|
36
|
+
* @param {IAppDERS[][]} appDERSPaths 关系路径数据
|
|
37
|
+
*/
|
|
38
|
+
formatAppDERSPath(context: IContext, appDERSPaths: IAppDERS[][]): Promise<IData[]>;
|
|
39
|
+
/**
|
|
40
|
+
* 初始化嵌入应用视图及实体参数对象
|
|
41
|
+
* @return {*}
|
|
42
|
+
* @author: zhujiamin
|
|
43
|
+
* @Date: 2023-10-16 13:56:56
|
|
44
|
+
*/
|
|
45
|
+
initParameters(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* 部件加载后处理
|
|
48
|
+
*
|
|
49
|
+
* @author chitanda
|
|
50
|
+
* @date 2023-06-21 15:06:44
|
|
51
|
+
* @param {MDCtrlLoadParams} args 本次请求参数
|
|
52
|
+
* @param {IData[]} items 上游处理的数据(默认是后台数据)
|
|
53
|
+
* @return {*} {Promise<IData[]>} 返回给后续处理的数据
|
|
54
|
+
*/
|
|
55
|
+
afterLoad(args: MDCtrlLoadParams, items: ControlVO[]): Promise<ControlVO[]>;
|
|
56
|
+
/**
|
|
57
|
+
* 处理UI所需数据
|
|
58
|
+
* @param {ControlVO} arg
|
|
59
|
+
* @return {*}
|
|
60
|
+
* @author: zhujiamin
|
|
61
|
+
* @Date: 2023-10-16 17:55:31
|
|
62
|
+
*/
|
|
63
|
+
handlePanelItemParams(arg: ControlVO): IPanelUiItem;
|
|
64
|
+
/**
|
|
65
|
+
* 处理数据
|
|
66
|
+
* @param {ControlVO} datas
|
|
67
|
+
* @return {*}
|
|
68
|
+
* @author: zhujiamin
|
|
69
|
+
* @Date: 2023-10-16 15:00:02
|
|
70
|
+
*/
|
|
71
|
+
doItems(datas: ControlVO[]): void;
|
|
72
|
+
/**
|
|
73
|
+
* 处理添加
|
|
74
|
+
* @return {*}
|
|
75
|
+
* @author: zhujiamin
|
|
76
|
+
* @Date: 2023-10-16 15:18:01
|
|
77
|
+
*/
|
|
78
|
+
handleAdd(): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* 处理删除
|
|
81
|
+
* @param {IPanelUiItem} item
|
|
82
|
+
* @return {*}
|
|
83
|
+
* @author: zhujiamin
|
|
84
|
+
* @Date: 2023-10-16 15:23:59
|
|
85
|
+
*/
|
|
86
|
+
handleDelete(item: IPanelUiItem): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* 处理tab删除
|
|
89
|
+
* @param {IPanelUiItem} item
|
|
90
|
+
* @return {*}
|
|
91
|
+
* @author: zhujiamin
|
|
92
|
+
* @Date: 2023-10-17 14:21:57
|
|
93
|
+
*/
|
|
94
|
+
handleTabDelete(item: IPanelUiItem, index: number): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* 后台删除结束后界面删除逻辑
|
|
97
|
+
*
|
|
98
|
+
* @author lxm
|
|
99
|
+
* @date 2022-09-06 19:09:10
|
|
100
|
+
* @param {IData} data
|
|
101
|
+
*/
|
|
102
|
+
afterRemove(data: IData): void;
|
|
103
|
+
/**
|
|
104
|
+
* 视图数据变化
|
|
105
|
+
* @param {DataChangeEvent} args
|
|
106
|
+
* @return {*}
|
|
107
|
+
* @author: zhujiamin
|
|
108
|
+
* @Date: 2023-10-16 17:20:45
|
|
109
|
+
*/
|
|
110
|
+
onViewDataChange(args: DataChangeEvent, id: string): void;
|
|
111
|
+
/**
|
|
112
|
+
* 保存
|
|
113
|
+
*
|
|
114
|
+
* @param {ControlVO} data
|
|
115
|
+
* @returns {*} {Promise<void>}
|
|
116
|
+
*/
|
|
117
|
+
save(data: ControlVO, id: string): Promise<void>;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=medit-view-panel.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"medit-view-panel.controller.d.ts","sourceRoot":"","sources":["../../../../src/controller/control/medit-view-panel/medit-view-panel.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAc,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAS,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE;;;;;;GAMG;AACH,qBAAa,wBACX,SAAQ,mBAAmB,CACzB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,CAEtB,YAAW,yBAAyB;IAE5B,OAAO,EAAE,qBAAqB,CAAC;IAEvC;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAQ;IAE3B;;;OAGG;IACH,eAAe,EAAE,KAAK,EAAE,CAAM;IAE9B;;;OAGG;IACH,UAAU,EAAE,KAAK,EAAE,CAAM;cAET,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAO1C,SAAS,CAAC,SAAS,IAAI,IAAI;IAO3B;;;;;OAKG;IACG,iBAAiB,CACrB,OAAO,EAAE,QAAQ,EACjB,YAAY,EAAE,QAAQ,EAAE,EAAE,GACzB,OAAO,CAAC,KAAK,EAAE,CAAC;IAkCnB;;;;;OAKG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BrC;;;;;;;;OAQG;IACG,SAAS,CACb,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,SAAS,EAAE,GACjB,OAAO,CAAC,SAAS,EAAE,CAAC;IAcvB;;;;;;OAMG;IACH,qBAAqB,CAAC,GAAG,EAAE,SAAS,GAAG,YAAY;IA8CnD;;;;;;OAMG;IACH,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI;IAOjC;;;;;OAKG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAShC;;;;;;OAMG;IACG,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAarD;;;;;;OAMG;IACG,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBvE;;;;;;OAMG;IACH,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI;IAW9B;;;;;;OAMG;IACH,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAOzD;;;;;OAKG;IACG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAuCvD"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/* eslint-disable no-shadow */
|
|
2
|
+
import { RuntimeError } from '@ibiz-template/core';
|
|
3
|
+
import { createUUID } from 'qx-util';
|
|
4
|
+
import { calcDeCodeNameById } from '../../../model';
|
|
5
|
+
import { Srfuf } from '../../../service';
|
|
6
|
+
import { MDControlController } from '../../common';
|
|
7
|
+
import { MEditViewPanelService } from './medit-view-panel.service';
|
|
8
|
+
/**
|
|
9
|
+
* 多编辑视图面板部件控制器
|
|
10
|
+
* @export
|
|
11
|
+
* @class MEditViewPanelController
|
|
12
|
+
* @extends {MDControlController<IDEMultiEditViewPanel, IMEditViewPanelState, IMEditViewPanelEvent>}
|
|
13
|
+
* @implements {IMEditViewPanelController}
|
|
14
|
+
*/
|
|
15
|
+
export class MEditViewPanelController extends MDControlController {
|
|
16
|
+
constructor() {
|
|
17
|
+
super(...arguments);
|
|
18
|
+
/**
|
|
19
|
+
* 是否显示底部按钮
|
|
20
|
+
*
|
|
21
|
+
*/
|
|
22
|
+
this.showButton = true;
|
|
23
|
+
/**
|
|
24
|
+
* 关系实体参数对象
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
this.deResParameters = [];
|
|
28
|
+
/**
|
|
29
|
+
* 当前应用视图参数对象
|
|
30
|
+
*
|
|
31
|
+
*/
|
|
32
|
+
this.parameters = [];
|
|
33
|
+
}
|
|
34
|
+
async onCreated() {
|
|
35
|
+
await super.onCreated();
|
|
36
|
+
this.service = new MEditViewPanelService(this.model);
|
|
37
|
+
await this.service.init(this.context);
|
|
38
|
+
await this.initParameters();
|
|
39
|
+
}
|
|
40
|
+
initState() {
|
|
41
|
+
super.initState();
|
|
42
|
+
this.state.panelUiItems = [];
|
|
43
|
+
this.state.activeTab = '';
|
|
44
|
+
this.state.size = 1000;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 格式化视图关系参数
|
|
48
|
+
*
|
|
49
|
+
* @param {IContext} context 应用上下文数据
|
|
50
|
+
* @param {IAppDERS[][]} appDERSPaths 关系路径数据
|
|
51
|
+
*/
|
|
52
|
+
async formatAppDERSPath(context, appDERSPaths) {
|
|
53
|
+
var _a, _b;
|
|
54
|
+
if (!appDERSPaths || appDERSPaths.length === 0) {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
let counter = 0;
|
|
58
|
+
for (const appDERSPath of appDERSPaths) {
|
|
59
|
+
const tempData = { isInclude: true, data: [] };
|
|
60
|
+
for (const singleAppDERSPath of appDERSPath) {
|
|
61
|
+
// eslint-disable-next-line no-await-in-loop
|
|
62
|
+
const majorPSAppDataEntity = await ibiz.hub.getAppDataEntity(singleAppDERSPath.majorAppDataEntityId);
|
|
63
|
+
if (majorPSAppDataEntity && majorPSAppDataEntity.codeName) {
|
|
64
|
+
tempData.isInclude =
|
|
65
|
+
context[majorPSAppDataEntity.codeName.toLowerCase()] &&
|
|
66
|
+
tempData.isInclude;
|
|
67
|
+
tempData.data.push({
|
|
68
|
+
parameterName: (_a = majorPSAppDataEntity.keyAppDEFieldId) === null || _a === void 0 ? void 0 : _a.toLowerCase(),
|
|
69
|
+
pathName: (_b = majorPSAppDataEntity.codeName) === null || _b === void 0 ? void 0 : _b.toLowerCase(),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// eslint-disable-next-line no-plusplus
|
|
74
|
+
counter++;
|
|
75
|
+
if (tempData.isInclude) {
|
|
76
|
+
return tempData.data;
|
|
77
|
+
}
|
|
78
|
+
if (counter === appDERSPaths.length) {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 初始化嵌入应用视图及实体参数对象
|
|
86
|
+
* @return {*}
|
|
87
|
+
* @author: zhujiamin
|
|
88
|
+
* @Date: 2023-10-16 13:56:56
|
|
89
|
+
*/
|
|
90
|
+
async initParameters() {
|
|
91
|
+
var _a, _b;
|
|
92
|
+
if (this.controlParams.SHOWBUTTON) {
|
|
93
|
+
this.showButton = !Object.is(this.controlParams.SHOWBUTTON, 'false');
|
|
94
|
+
}
|
|
95
|
+
if (this.model.embeddedAppViewId) {
|
|
96
|
+
const embedView = await ibiz.hub.getAppView(this.model.embeddedAppViewId);
|
|
97
|
+
if (embedView.appDataEntityId) {
|
|
98
|
+
const embedViewEntity = await ibiz.hub.getAppDataEntity(embedView.appDataEntityId);
|
|
99
|
+
if (embedView && embedViewEntity) {
|
|
100
|
+
this.deResParameters = await this.formatAppDERSPath(this.context, embedView.appDERSPaths);
|
|
101
|
+
this.parameters = [
|
|
102
|
+
{
|
|
103
|
+
parameterName: (_a = embedViewEntity.keyAppDEFieldId) === null || _a === void 0 ? void 0 : _a.toLowerCase(),
|
|
104
|
+
pathName: (_b = embedViewEntity.codeName) === null || _b === void 0 ? void 0 : _b.toLowerCase(),
|
|
105
|
+
},
|
|
106
|
+
];
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
this.deResParameters = [];
|
|
110
|
+
this.parameters = [];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 部件加载后处理
|
|
117
|
+
*
|
|
118
|
+
* @author chitanda
|
|
119
|
+
* @date 2023-06-21 15:06:44
|
|
120
|
+
* @param {MDCtrlLoadParams} args 本次请求参数
|
|
121
|
+
* @param {IData[]} items 上游处理的数据(默认是后台数据)
|
|
122
|
+
* @return {*} {Promise<IData[]>} 返回给后续处理的数据
|
|
123
|
+
*/
|
|
124
|
+
async afterLoad(args, items) {
|
|
125
|
+
await super.afterLoad(args, items);
|
|
126
|
+
this.state.panelUiItems = [];
|
|
127
|
+
this.doItems(items);
|
|
128
|
+
// 设置默认激活
|
|
129
|
+
if (this.model.panelStyle === 'TAB_TOP' &&
|
|
130
|
+
this.state.panelUiItems.length > 0) {
|
|
131
|
+
this.state.activeTab = this.state.panelUiItems[0].id;
|
|
132
|
+
}
|
|
133
|
+
return items;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* 处理UI所需数据
|
|
137
|
+
* @param {ControlVO} arg
|
|
138
|
+
* @return {*}
|
|
139
|
+
* @author: zhujiamin
|
|
140
|
+
* @Date: 2023-10-16 17:55:31
|
|
141
|
+
*/
|
|
142
|
+
handlePanelItemParams(arg) {
|
|
143
|
+
const [{ parameterName }] = this.parameters;
|
|
144
|
+
const id = arg[parameterName]
|
|
145
|
+
? arg[parameterName]
|
|
146
|
+
: `mockId:${createUUID()}`;
|
|
147
|
+
const item = { id, context: {}, params: {}, data: arg, srfmajortext: '' };
|
|
148
|
+
Object.assign(item.context, this.context);
|
|
149
|
+
// 关系应用实体参数
|
|
150
|
+
this.deResParameters.forEach(deResParameter => {
|
|
151
|
+
const { parameterName, pathName } = deResParameter;
|
|
152
|
+
if (this.context[parameterName] &&
|
|
153
|
+
!Object.is(this.context[parameterName], '')) {
|
|
154
|
+
Object.assign(item.context, {
|
|
155
|
+
[pathName]: this.context[parameterName],
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
else if (arg[parameterName] && !Object.is(arg[parameterName], '')) {
|
|
159
|
+
Object.assign(item.context, {
|
|
160
|
+
[pathName]: arg[parameterName],
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
// 当前视图参数(应用实体视图)
|
|
165
|
+
this.parameters.forEach(parameter => {
|
|
166
|
+
const { parameterName, pathName } = parameter;
|
|
167
|
+
if (arg[parameterName] && !Object.is(arg[parameterName], '')) {
|
|
168
|
+
Object.assign(item.context, {
|
|
169
|
+
[pathName]: arg[parameterName],
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
// 当前页面实体主信息
|
|
173
|
+
if (arg.srfmajortext && !Object.is(arg.srfmajortext, '')) {
|
|
174
|
+
Object.assign(item, { srfmajortext: arg.srfmajortext });
|
|
175
|
+
}
|
|
176
|
+
else if (arg.srfuf === 0) {
|
|
177
|
+
Object.assign(item, { srfmajortext: '草稿--新建' });
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
// 合并视图参数
|
|
181
|
+
Object.assign(item.params, this.params);
|
|
182
|
+
return item;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* 处理数据
|
|
186
|
+
* @param {ControlVO} datas
|
|
187
|
+
* @return {*}
|
|
188
|
+
* @author: zhujiamin
|
|
189
|
+
* @Date: 2023-10-16 15:00:02
|
|
190
|
+
*/
|
|
191
|
+
doItems(datas) {
|
|
192
|
+
datas.forEach((arg) => {
|
|
193
|
+
const item = this.handlePanelItemParams(arg);
|
|
194
|
+
this.state.panelUiItems.push(item);
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* 处理添加
|
|
199
|
+
* @return {*}
|
|
200
|
+
* @author: zhujiamin
|
|
201
|
+
* @Date: 2023-10-16 15:18:01
|
|
202
|
+
*/
|
|
203
|
+
async handleAdd() {
|
|
204
|
+
this.doItems([{ srfuf: 0 }]);
|
|
205
|
+
if (this.model.panelStyle === 'TAB_TOP') {
|
|
206
|
+
// 上分页添加后激活最后一个
|
|
207
|
+
this.state.activeTab =
|
|
208
|
+
this.state.panelUiItems[this.state.panelUiItems.length - 1].id;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* 处理删除
|
|
213
|
+
* @param {IPanelUiItem} item
|
|
214
|
+
* @return {*}
|
|
215
|
+
* @author: zhujiamin
|
|
216
|
+
* @Date: 2023-10-16 15:23:59
|
|
217
|
+
*/
|
|
218
|
+
async handleDelete(item) {
|
|
219
|
+
// 新建的界面上删除即可
|
|
220
|
+
if (item.data.srfuf === 0) {
|
|
221
|
+
// 删除items中已删除的项
|
|
222
|
+
const index = this.state.panelUiItems.findIndex(value => {
|
|
223
|
+
return value === item;
|
|
224
|
+
});
|
|
225
|
+
this.state.panelUiItems.splice(index, 1);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
await this.remove({ data: [item.data] });
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* 处理tab删除
|
|
233
|
+
* @param {IPanelUiItem} item
|
|
234
|
+
* @return {*}
|
|
235
|
+
* @author: zhujiamin
|
|
236
|
+
* @Date: 2023-10-17 14:21:57
|
|
237
|
+
*/
|
|
238
|
+
async handleTabDelete(item, index) {
|
|
239
|
+
let isBackToEnd = false;
|
|
240
|
+
// 如果删除的是激活项,且为最后一项,设置激活项为前一项
|
|
241
|
+
if (item.id === this.state.activeTab &&
|
|
242
|
+
index === this.state.panelUiItems.length - 1) {
|
|
243
|
+
if (index > 0) {
|
|
244
|
+
isBackToEnd = true;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
await this.handleDelete(item);
|
|
248
|
+
if (isBackToEnd) {
|
|
249
|
+
this.state.activeTab =
|
|
250
|
+
this.state.panelUiItems[this.state.panelUiItems.length - 1].id;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* 后台删除结束后界面删除逻辑
|
|
255
|
+
*
|
|
256
|
+
* @author lxm
|
|
257
|
+
* @date 2022-09-06 19:09:10
|
|
258
|
+
* @param {IData} data
|
|
259
|
+
*/
|
|
260
|
+
afterRemove(data) {
|
|
261
|
+
super.afterRemove(data);
|
|
262
|
+
// 删除this.items里的数据
|
|
263
|
+
const index = this.state.panelUiItems.findIndex(item => item.data.srfkey === data.srfkey);
|
|
264
|
+
if (index !== -1) {
|
|
265
|
+
this.state.panelUiItems.splice(index, 1);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* 视图数据变化
|
|
270
|
+
* @param {DataChangeEvent} args
|
|
271
|
+
* @return {*}
|
|
272
|
+
* @author: zhujiamin
|
|
273
|
+
* @Date: 2023-10-16 17:20:45
|
|
274
|
+
*/
|
|
275
|
+
onViewDataChange(args, id) {
|
|
276
|
+
// 新建的保存成功后该部件需要保存来更新数据
|
|
277
|
+
if (args.eventName === 'onSaveSuccess') {
|
|
278
|
+
this.save(args.data[0], id);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* 保存
|
|
283
|
+
*
|
|
284
|
+
* @param {ControlVO} data
|
|
285
|
+
* @returns {*} {Promise<void>}
|
|
286
|
+
*/
|
|
287
|
+
async save(data, id) {
|
|
288
|
+
const panelUiItemIndex = this.state.panelUiItems.findIndex(item => item.id === id);
|
|
289
|
+
if (!panelUiItemIndex) {
|
|
290
|
+
throw new RuntimeError('编辑视图面板部件UI数据不存在');
|
|
291
|
+
}
|
|
292
|
+
await this.startLoading();
|
|
293
|
+
let res;
|
|
294
|
+
const isCreate = data.srfuf === Srfuf.CREATE;
|
|
295
|
+
const deName = calcDeCodeNameById(this.model.appDataEntityId);
|
|
296
|
+
const tempContext = this.context.clone();
|
|
297
|
+
tempContext[deName] = data.srfkey;
|
|
298
|
+
try {
|
|
299
|
+
res = isCreate
|
|
300
|
+
? await this.service.create(tempContext, data)
|
|
301
|
+
: await this.service.update(tempContext, data);
|
|
302
|
+
}
|
|
303
|
+
catch (error) {
|
|
304
|
+
await this.evt.emit('onSaveError', undefined);
|
|
305
|
+
this.actionNotification(`${isCreate ? 'CREATE' : 'UPDATE'}ERROR`, {
|
|
306
|
+
error: error,
|
|
307
|
+
data: this.state.panelUiItems[panelUiItemIndex].data,
|
|
308
|
+
});
|
|
309
|
+
throw error;
|
|
310
|
+
}
|
|
311
|
+
finally {
|
|
312
|
+
await this.endLoading();
|
|
313
|
+
}
|
|
314
|
+
// 后续处理
|
|
315
|
+
const index = this.state.items.findIndex(item => item.srfkey === data.srfkey);
|
|
316
|
+
this.state.items.splice(index, 1, res.data);
|
|
317
|
+
this.state.panelUiItems.splice(panelUiItemIndex, 1, this.handlePanelItemParams(res.data));
|
|
318
|
+
await this.evt.emit('onSaveSuccess', undefined);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IDEMultiEditViewPanel } from '@ibiz/model-core';
|
|
2
|
+
import { MDControlService } from '../../../service';
|
|
3
|
+
/**
|
|
4
|
+
* 多编辑视图面板部件服务
|
|
5
|
+
*
|
|
6
|
+
* @export
|
|
7
|
+
* @extends {MDControlService<IDEMultiEditViewPanel>}
|
|
8
|
+
*/
|
|
9
|
+
export declare class MEditViewPanelService extends MDControlService<IDEMultiEditViewPanel> {
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=medit-view-panel.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"medit-view-panel.service.d.ts","sourceRoot":"","sources":["../../../../src/controller/control/medit-view-panel/medit-view-panel.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,gBAAgB,CAAC,qBAAqB,CAAC;CAAG"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ISearchBarFilter } from '@ibiz/model-core';
|
|
2
|
+
import { IEditorContainerController, IEditorController, IEditorProvider } from '../../../interface';
|
|
3
|
+
import { SearchBarController } from './search-bar.controller';
|
|
4
|
+
/**
|
|
5
|
+
* 搜索栏过滤项控制器
|
|
6
|
+
* @author lxm
|
|
7
|
+
* @date 2023-10-12 05:49:19
|
|
8
|
+
* @export
|
|
9
|
+
* @class SearchBarFilterController
|
|
10
|
+
* @implements {IEditorContainerController}
|
|
11
|
+
*/
|
|
12
|
+
export declare class SearchBarFilterController implements IEditorContainerController {
|
|
13
|
+
model: ISearchBarFilter;
|
|
14
|
+
searchBar: SearchBarController;
|
|
15
|
+
unitName: string | undefined;
|
|
16
|
+
valueFormat: string | undefined;
|
|
17
|
+
get context(): IContext;
|
|
18
|
+
get params(): IParams;
|
|
19
|
+
dataType: number | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* 编辑器控制器
|
|
22
|
+
*
|
|
23
|
+
* @author lxm
|
|
24
|
+
* @date 2022-08-24 20:08:42
|
|
25
|
+
* @type {IEditorController}
|
|
26
|
+
*/
|
|
27
|
+
editor?: IEditorController;
|
|
28
|
+
/**
|
|
29
|
+
* 编辑器适配器
|
|
30
|
+
*
|
|
31
|
+
* @author lxm
|
|
32
|
+
* @date 2022-08-24 20:08:42
|
|
33
|
+
*/
|
|
34
|
+
editorProvider?: IEditorProvider;
|
|
35
|
+
/**
|
|
36
|
+
* 过滤的属性名称(有实体属性的是属性codeName小写,没有就是项名称)
|
|
37
|
+
* @author lxm
|
|
38
|
+
* @date 2023-10-13 02:51:39
|
|
39
|
+
* @type {string}
|
|
40
|
+
*/
|
|
41
|
+
fieldName: string;
|
|
42
|
+
/**
|
|
43
|
+
* 属性显示的标题
|
|
44
|
+
* @author lxm
|
|
45
|
+
* @date 2023-10-13 03:02:42
|
|
46
|
+
* @type {string}
|
|
47
|
+
*/
|
|
48
|
+
label: string;
|
|
49
|
+
/**
|
|
50
|
+
* 配置的属性搜索模式对应的值操作
|
|
51
|
+
* @author lxm
|
|
52
|
+
* @date 2023-10-13 03:22:10
|
|
53
|
+
* @type {string}
|
|
54
|
+
*/
|
|
55
|
+
valueOP?: string;
|
|
56
|
+
constructor(model: ISearchBarFilter, searchBar: SearchBarController);
|
|
57
|
+
/**
|
|
58
|
+
* 初始化
|
|
59
|
+
* @author lxm
|
|
60
|
+
* @date 2023-10-12 05:47:19
|
|
61
|
+
* @return {*} {Promise<void>}
|
|
62
|
+
*/
|
|
63
|
+
init(): Promise<void>;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=search-bar-filter.controller.d.ts.map
|