@ibiz-template/runtime 0.1.36 → 0.1.38
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 +13465 -1025
- package/dist/index.system.min.js +1 -1
- package/dist/index.system.min.js.map +1 -1
- package/out/application.d.ts +9 -1
- package/out/application.d.ts.map +1 -1
- package/out/application.js +9 -2
- 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/exp-bar/chart-exp-bar.controller.d.ts +24 -0
- package/out/controller/control/exp-bar/chart-exp-bar.controller.d.ts.map +1 -0
- package/out/controller/control/exp-bar/chart-exp-bar.controller.js +32 -0
- package/out/controller/control/exp-bar/index.d.ts +1 -0
- package/out/controller/control/exp-bar/index.d.ts.map +1 -1
- package/out/controller/control/exp-bar/index.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/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts +1 -0
- package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts.map +1 -1
- package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.js +8 -0
- 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/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 +107 -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 +260 -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.controller.d.ts.map +1 -1
- package/out/controller/control/search-bar/search-bar.controller.js +3 -3
- 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/de-logic/de-logic-context.d.ts +4 -4
- package/out/de-logic/de-logic-context.d.ts.map +1 -1
- package/out/de-logic/de-logic-context.js +2 -1
- package/out/de-logic/de-logic-link/de-logic-link.js +1 -1
- package/out/de-logic/de-logic-param/de-logic-param.d.ts.map +1 -1
- package/out/de-logic/de-logic-param/de-logic-param.js +7 -1
- package/out/de-logic/de-logic.d.ts +1 -1
- package/out/de-logic/de-logic.d.ts.map +1 -1
- package/out/de-logic/index.d.ts +5 -5
- package/out/de-logic/index.d.ts.map +1 -1
- package/out/de-logic/index.js +32 -5
- package/out/engine/md-view.engine.d.ts +3 -3
- package/out/engine/md-view.engine.d.ts.map +1 -1
- package/out/engine/md-view.engine.js +14 -12
- package/out/hub/config/app-view-config-service.d.ts +3 -1
- package/out/hub/config/app-view-config-service.d.ts.map +1 -1
- package/out/hub/config/app-view-config-service.js +9 -0
- package/out/interface/common/i-app-view-config-service/i-app-view-config-service.d.ts +20 -2
- package/out/interface/common/i-app-view-config-service/i-app-view-config-service.d.ts.map +1 -1
- package/out/interface/controller/controller/control/i-chart-exp-bar.controller.d.ts +15 -0
- package/out/interface/controller/controller/control/i-chart-exp-bar.controller.d.ts.map +1 -0
- package/out/interface/controller/controller/control/i-chart-exp-bar.controller.js +1 -0
- 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/index.d.ts +2 -0
- package/out/interface/controller/controller/control/index.d.ts.map +1 -1
- package/out/interface/controller/controller/control/index.js +2 -0
- package/out/interface/controller/event/control/i-chart-exp-bar.event.d.ts +11 -0
- package/out/interface/controller/event/control/i-chart-exp-bar.event.d.ts.map +1 -0
- package/out/interface/controller/event/control/i-chart-exp-bar.event.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 +2 -0
- package/out/interface/controller/event/control/index.d.ts.map +1 -1
- package/out/interface/controller/event/control/index.js +2 -0
- package/out/interface/controller/event/view/i-chart-exp-view.event.d.ts +11 -0
- package/out/interface/controller/event/view/i-chart-exp-view.event.d.ts.map +1 -0
- package/out/interface/controller/event/view/i-chart-exp-view.event.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 +2 -0
- package/out/interface/controller/event/view/index.d.ts.map +1 -1
- package/out/interface/controller/event/view/index.js +2 -0
- package/out/interface/controller/state/control/i-chart-exp-bar.state.d.ts +11 -0
- package/out/interface/controller/state/control/i-chart-exp-bar.state.d.ts.map +1 -0
- package/out/interface/controller/state/control/i-chart-exp-bar.state.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/index.d.ts +2 -0
- package/out/interface/controller/state/control/index.d.ts.map +1 -1
- package/out/interface/controller/state/control/index.js +2 -0
- package/out/interface/controller/state/view/i-chart-exp-view.state.d.ts +11 -0
- package/out/interface/controller/state/view/i-chart-exp-view.state.d.ts.map +1 -0
- package/out/interface/controller/state/view/i-chart-exp-view.state.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 +2 -0
- package/out/interface/controller/state/view/index.d.ts.map +1 -1
- package/out/interface/controller/state/view/index.js +2 -0
- package/out/interface/service/code-list-item/code-list-item.d.ts +16 -0
- package/out/interface/service/code-list-item/code-list-item.d.ts.map +1 -1
- package/out/service/index.d.ts +1 -0
- package/out/service/index.d.ts.map +1 -1
- package/out/service/index.js +1 -0
- package/out/service/mqtt/mqtt.service.d.ts +66 -0
- package/out/service/mqtt/mqtt.service.d.ts.map +1 -0
- package/out/service/mqtt/mqtt.service.js +95 -0
- package/out/service/service/code-list/code-list.service.d.ts.map +1 -1
- package/out/service/service/code-list/code-list.service.js +12 -1
- package/out/service/service/entity/de.service.d.ts +2 -2
- package/out/service/service/entity/de.service.d.ts.map +1 -1
- package/out/service/service/entity/method/de-action.d.ts +14 -5
- package/out/service/service/entity/method/de-action.d.ts.map +1 -1
- package/out/service/service/entity/method/de-action.js +56 -15
- package/out/service/service/entity/method/fetch.d.ts +1 -1
- package/out/service/service/entity/method/fetch.d.ts.map +1 -1
- package/out/service/service/entity/method/fetch.js +9 -6
- package/out/service/service/entity/method/method.d.ts +13 -13
- package/out/service/service/entity/method/method.d.ts.map +1 -1
- package/out/service/service/entity/method/method.js +16 -11
- package/out/service/utils/dynamic-code-list/dynamic-code-list.d.ts +7 -1
- package/out/service/utils/dynamic-code-list/dynamic-code-list.d.ts.map +1 -1
- package/out/service/utils/dynamic-code-list/dynamic-code-list.js +76 -8
- package/out/ui-action/uiaction-util.js +3 -3
- package/out/ui-logic/ui-logic-param/ui-logic-param.d.ts.map +1 -1
- package/out/ui-logic/ui-logic-param/ui-logic-param.js +7 -1
- package/out/utils/script/script-factory.d.ts +10 -0
- package/out/utils/script/script-factory.d.ts.map +1 -1
- package/out/utils/script/script-factory.js +15 -0
- package/package.json +5 -3
- package/src/application.ts +22 -1
- 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/exp-bar/chart-exp-bar.controller.ts +51 -0
- package/src/controller/control/exp-bar/index.ts +1 -0
- package/src/controller/control/form/form-detail/form-item/form-item.controller.ts +22 -9
- package/src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts +14 -0
- 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/medit-view-panel/index.ts +2 -0
- package/src/controller/control/medit-view-panel/medit-view-panel.controller.ts +305 -0
- package/src/controller/control/medit-view-panel/medit-view-panel.service.ts +10 -0
- package/src/controller/control/search-bar/search-bar.controller.ts +6 -5
- package/src/controller/utils/value-rule/value-rule.ts +97 -2
- package/src/de-logic/de-logic-context.ts +6 -5
- package/src/de-logic/de-logic-link/de-logic-link.ts +1 -1
- package/src/de-logic/de-logic-param/de-logic-param.ts +6 -1
- package/src/de-logic/de-logic.ts +5 -1
- package/src/de-logic/index.ts +49 -8
- package/src/engine/md-view.engine.ts +16 -13
- package/src/hub/config/app-view-config-service.ts +12 -1
- package/src/interface/common/i-app-view-config-service/i-app-view-config-service.ts +22 -4
- package/src/interface/controller/controller/control/i-chart-exp-bar.controller.ts +19 -0
- package/src/interface/controller/controller/control/i-medit-view-panel.controller.ts +17 -0
- package/src/interface/controller/controller/control/index.ts +2 -0
- package/src/interface/controller/event/control/i-chart-exp-bar.event.ts +10 -0
- package/src/interface/controller/event/control/i-medit-view-panel.event.ts +9 -0
- package/src/interface/controller/event/control/index.ts +2 -0
- package/src/interface/controller/event/view/i-chart-exp-view.event.ts +11 -0
- package/src/interface/controller/event/view/i-medit-view9.event.ts +10 -0
- package/src/interface/controller/event/view/index.ts +2 -0
- package/src/interface/controller/state/control/i-chart-exp-bar.state.ts +10 -0
- package/src/interface/controller/state/control/i-medit-view-panel.state.ts +36 -0
- package/src/interface/controller/state/control/index.ts +2 -0
- package/src/interface/controller/state/view/i-chart-exp-view.state.ts +10 -0
- package/src/interface/controller/state/view/i-medit-view9.state.ts +10 -0
- package/src/interface/controller/state/view/index.ts +2 -0
- package/src/interface/service/code-list-item/code-list-item.ts +20 -0
- package/src/service/index.ts +1 -0
- package/src/service/mqtt/mqtt.service.ts +117 -0
- package/src/service/service/code-list/code-list.service.ts +15 -1
- package/src/service/service/entity/de.service.ts +2 -2
- package/src/service/service/entity/method/de-action.ts +74 -33
- package/src/service/service/entity/method/fetch.ts +12 -11
- package/src/service/service/entity/method/method.ts +28 -19
- package/src/service/utils/dynamic-code-list/dynamic-code-list.ts +103 -10
- package/src/ui-action/uiaction-util.ts +3 -3
- package/src/ui-logic/ui-logic-param/ui-logic-param.ts +6 -1
- package/src/utils/script/script-factory.ts +16 -0
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/* eslint-disable no-shadow */
|
|
2
|
+
import { RuntimeError } from '@ibiz-template/core';
|
|
3
|
+
import { 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
|
+
parameters: IData[] = [];
|
|
46
|
+
|
|
47
|
+
protected async onCreated(): Promise<void> {
|
|
48
|
+
await super.onCreated();
|
|
49
|
+
this.service = new MEditViewPanelService(this.model);
|
|
50
|
+
await this.service.init(this.context);
|
|
51
|
+
await this.initParameters();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
protected initState(): void {
|
|
55
|
+
super.initState();
|
|
56
|
+
this.state.panelUiItems = [];
|
|
57
|
+
this.state.activeTab = '';
|
|
58
|
+
this.state.size = 1000;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* 初始化嵌入应用视图及实体参数对象
|
|
63
|
+
* @return {*}
|
|
64
|
+
* @author: zhujiamin
|
|
65
|
+
* @Date: 2023-10-16 13:56:56
|
|
66
|
+
*/
|
|
67
|
+
async initParameters(): Promise<void> {
|
|
68
|
+
if (this.model.embeddedAppViewId) {
|
|
69
|
+
const embedView = await ibiz.hub.getAppView(this.model.embeddedAppViewId);
|
|
70
|
+
if (embedView.appDataEntityId) {
|
|
71
|
+
const embedViewEntity = await ibiz.hub.getAppDataEntity(
|
|
72
|
+
embedView.appDataEntityId,
|
|
73
|
+
);
|
|
74
|
+
if (embedView && embedViewEntity) {
|
|
75
|
+
this.parameters = [
|
|
76
|
+
{
|
|
77
|
+
parameterName: embedViewEntity.keyAppDEFieldId?.toLowerCase(),
|
|
78
|
+
pathName: embedViewEntity.codeName?.toLowerCase(),
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
} else {
|
|
82
|
+
this.parameters = [];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* 部件加载后处理
|
|
90
|
+
*
|
|
91
|
+
* @author chitanda
|
|
92
|
+
* @date 2023-06-21 15:06:44
|
|
93
|
+
* @param {MDCtrlLoadParams} args 本次请求参数
|
|
94
|
+
* @param {IData[]} items 上游处理的数据(默认是后台数据)
|
|
95
|
+
* @return {*} {Promise<IData[]>} 返回给后续处理的数据
|
|
96
|
+
*/
|
|
97
|
+
async afterLoad(
|
|
98
|
+
args: MDCtrlLoadParams,
|
|
99
|
+
items: ControlVO[],
|
|
100
|
+
): Promise<ControlVO[]> {
|
|
101
|
+
await super.afterLoad(args, items);
|
|
102
|
+
this.state.panelUiItems = [];
|
|
103
|
+
this.doItems(items);
|
|
104
|
+
// 设置默认激活
|
|
105
|
+
if (
|
|
106
|
+
this.model.panelStyle === 'TAB_TOP' &&
|
|
107
|
+
this.state.panelUiItems.length > 0
|
|
108
|
+
) {
|
|
109
|
+
this.state.activeTab = this.state.panelUiItems[0].id;
|
|
110
|
+
}
|
|
111
|
+
return items;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* 处理UI所需数据
|
|
116
|
+
* @param {ControlVO} arg
|
|
117
|
+
* @return {*}
|
|
118
|
+
* @author: zhujiamin
|
|
119
|
+
* @Date: 2023-10-16 17:55:31
|
|
120
|
+
*/
|
|
121
|
+
handlePanelItemParams(arg: ControlVO): IPanelUiItem {
|
|
122
|
+
const [{ parameterName }] = this.parameters;
|
|
123
|
+
const id: string = arg[parameterName]
|
|
124
|
+
? arg[parameterName]
|
|
125
|
+
: `mockId:${createUUID()}`;
|
|
126
|
+
const item = {
|
|
127
|
+
id,
|
|
128
|
+
context: this.context.clone(),
|
|
129
|
+
params: {},
|
|
130
|
+
data: arg,
|
|
131
|
+
srfmajortext: '',
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
// 当前视图参数(应用实体视图)
|
|
135
|
+
this.parameters.forEach(parameter => {
|
|
136
|
+
const { parameterName, pathName } = parameter;
|
|
137
|
+
if (arg[parameterName] && !Object.is(arg[parameterName], '')) {
|
|
138
|
+
Object.assign(item.context, {
|
|
139
|
+
[pathName]: arg[parameterName],
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// 当前页面实体主信息
|
|
144
|
+
if (arg.srfmajortext && !Object.is(arg.srfmajortext, '')) {
|
|
145
|
+
Object.assign(item, { srfmajortext: arg.srfmajortext });
|
|
146
|
+
} else if (arg.srfuf === 0) {
|
|
147
|
+
Object.assign(item, { srfmajortext: '草稿--新建' });
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
return item;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* 处理数据
|
|
156
|
+
* @param {ControlVO} datas
|
|
157
|
+
* @return {*}
|
|
158
|
+
* @author: zhujiamin
|
|
159
|
+
* @Date: 2023-10-16 15:00:02
|
|
160
|
+
*/
|
|
161
|
+
doItems(datas: ControlVO[]): void {
|
|
162
|
+
datas.forEach((arg: ControlVO) => {
|
|
163
|
+
const item = this.handlePanelItemParams(arg);
|
|
164
|
+
this.state.panelUiItems.push(item);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* 处理添加
|
|
170
|
+
* @return {*}
|
|
171
|
+
* @author: zhujiamin
|
|
172
|
+
* @Date: 2023-10-16 15:18:01
|
|
173
|
+
*/
|
|
174
|
+
async handleAdd(): Promise<void> {
|
|
175
|
+
this.doItems([{ srfuf: 0 } as ControlVO]);
|
|
176
|
+
if (this.model.panelStyle === 'TAB_TOP') {
|
|
177
|
+
// 上分页添加后激活最后一个
|
|
178
|
+
this.state.activeTab =
|
|
179
|
+
this.state.panelUiItems[this.state.panelUiItems.length - 1].id;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* 处理删除
|
|
185
|
+
* @param {IPanelUiItem} item
|
|
186
|
+
* @return {*}
|
|
187
|
+
* @author: zhujiamin
|
|
188
|
+
* @Date: 2023-10-16 15:23:59
|
|
189
|
+
*/
|
|
190
|
+
async handleDelete(item: IPanelUiItem): Promise<void> {
|
|
191
|
+
// 新建的界面上删除即可
|
|
192
|
+
if (item.data.srfuf === 0) {
|
|
193
|
+
// 删除items中已删除的项
|
|
194
|
+
const index = this.state.panelUiItems.findIndex(value => {
|
|
195
|
+
return value === item;
|
|
196
|
+
});
|
|
197
|
+
this.state.panelUiItems.splice(index, 1);
|
|
198
|
+
} else {
|
|
199
|
+
await this.remove({ data: [item.data] });
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* 处理tab删除
|
|
205
|
+
* @param {IPanelUiItem} item
|
|
206
|
+
* @return {*}
|
|
207
|
+
* @author: zhujiamin
|
|
208
|
+
* @Date: 2023-10-17 14:21:57
|
|
209
|
+
*/
|
|
210
|
+
async handleTabDelete(item: IPanelUiItem, index: number): Promise<void> {
|
|
211
|
+
let isBackToEnd = false;
|
|
212
|
+
// 如果删除的是激活项,且为最后一项,设置激活项为前一项
|
|
213
|
+
if (
|
|
214
|
+
item.id === this.state.activeTab &&
|
|
215
|
+
index === this.state.panelUiItems.length - 1
|
|
216
|
+
) {
|
|
217
|
+
if (index > 0) {
|
|
218
|
+
isBackToEnd = true;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
await this.handleDelete(item);
|
|
222
|
+
if (isBackToEnd) {
|
|
223
|
+
this.state.activeTab =
|
|
224
|
+
this.state.panelUiItems[this.state.panelUiItems.length - 1].id;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* 后台删除结束后界面删除逻辑
|
|
230
|
+
*
|
|
231
|
+
* @author lxm
|
|
232
|
+
* @date 2022-09-06 19:09:10
|
|
233
|
+
* @param {IData} data
|
|
234
|
+
*/
|
|
235
|
+
afterRemove(data: IData): void {
|
|
236
|
+
super.afterRemove(data);
|
|
237
|
+
// 删除this.items里的数据
|
|
238
|
+
const index = this.state.panelUiItems.findIndex(
|
|
239
|
+
item => item.data.srfkey === data.srfkey,
|
|
240
|
+
);
|
|
241
|
+
if (index !== -1) {
|
|
242
|
+
this.state.panelUiItems.splice(index, 1);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* 视图数据变化
|
|
248
|
+
* @param {DataChangeEvent} args
|
|
249
|
+
* @return {*}
|
|
250
|
+
* @author: zhujiamin
|
|
251
|
+
* @Date: 2023-10-16 17:20:45
|
|
252
|
+
*/
|
|
253
|
+
onViewDataChange(args: DataChangeEvent, id: string): void {
|
|
254
|
+
// 新建的保存成功后该部件需要保存来更新数据
|
|
255
|
+
if (args.eventName === 'onSaveSuccess') {
|
|
256
|
+
this.save(args.data[0] as ControlVO, id);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* 保存
|
|
262
|
+
*
|
|
263
|
+
* @param {ControlVO} data
|
|
264
|
+
* @returns {*} {Promise<void>}
|
|
265
|
+
*/
|
|
266
|
+
async save(data: ControlVO, id: string): Promise<void> {
|
|
267
|
+
const panelUiItemIndex = this.state.panelUiItems.findIndex(
|
|
268
|
+
item => item.id === id,
|
|
269
|
+
);
|
|
270
|
+
if (!panelUiItemIndex) {
|
|
271
|
+
throw new RuntimeError('编辑视图面板部件UI数据不存在');
|
|
272
|
+
}
|
|
273
|
+
await this.startLoading();
|
|
274
|
+
let res;
|
|
275
|
+
const isCreate = data.srfuf === Srfuf.CREATE;
|
|
276
|
+
const deName = calcDeCodeNameById(this.model.appDataEntityId!);
|
|
277
|
+
const tempContext = this.context.clone();
|
|
278
|
+
tempContext[deName] = data.srfkey;
|
|
279
|
+
try {
|
|
280
|
+
res = isCreate
|
|
281
|
+
? await this.service.create(tempContext, data)
|
|
282
|
+
: await this.service.update(tempContext, data);
|
|
283
|
+
} catch (error) {
|
|
284
|
+
await this.evt.emit('onSaveError', undefined);
|
|
285
|
+
this.actionNotification(`${isCreate ? 'CREATE' : 'UPDATE'}ERROR`, {
|
|
286
|
+
error: error as Error,
|
|
287
|
+
data: this.state.panelUiItems[panelUiItemIndex].data,
|
|
288
|
+
});
|
|
289
|
+
throw error;
|
|
290
|
+
} finally {
|
|
291
|
+
await this.endLoading();
|
|
292
|
+
}
|
|
293
|
+
// 后续处理
|
|
294
|
+
const index = this.state.items.findIndex(
|
|
295
|
+
item => item.srfkey === data.srfkey,
|
|
296
|
+
);
|
|
297
|
+
this.state.items.splice(index, 1, res.data);
|
|
298
|
+
this.state.panelUiItems.splice(
|
|
299
|
+
panelUiItemIndex,
|
|
300
|
+
1,
|
|
301
|
+
this.handlePanelItemParams(res.data),
|
|
302
|
+
);
|
|
303
|
+
await this.evt.emit('onSaveSuccess', undefined);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
@@ -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> {}
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
ISearchBarController,
|
|
8
8
|
IFilterNode,
|
|
9
9
|
} from '../../../interface';
|
|
10
|
+
import { convertNavData, ScriptFactory } from '../../../utils';
|
|
10
11
|
import { ControlController } from '../../common';
|
|
11
12
|
import { SearchBarFilterController } from './search-bar-filter.controller';
|
|
12
13
|
|
|
@@ -144,11 +145,11 @@ export class SearchBarController
|
|
|
144
145
|
}
|
|
145
146
|
// 快速分组
|
|
146
147
|
if (this.state.selectedGroupItem?.data) {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
const addParams =
|
|
148
|
+
const navParams = ScriptFactory.execSingleLine(
|
|
149
|
+
this.state.selectedGroupItem.data,
|
|
150
|
+
) as IData;
|
|
151
|
+
|
|
152
|
+
const addParams = convertNavData(navParams, this.params, this.context);
|
|
152
153
|
Object.assign(params, addParams);
|
|
153
154
|
}
|
|
154
155
|
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
2
|
import { RuntimeError } from '@ibiz-template/core';
|
|
3
|
-
import {
|
|
4
|
-
|
|
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
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isArray } from 'lodash-es';
|
|
1
2
|
import { DELogicParam } from './de-logic-param/de-logic-param';
|
|
2
3
|
|
|
3
4
|
/**
|
|
@@ -21,9 +22,9 @@ export class DELogicContext {
|
|
|
21
22
|
* 实体逻辑执行参数
|
|
22
23
|
* @author lxm
|
|
23
24
|
* @date 2023-10-16 02:22:31
|
|
24
|
-
* @type {{ context: IParams; data: IData; params: IParams }}
|
|
25
|
+
* @type {{ context: IParams; data: IData[]; params: IParams }}
|
|
25
26
|
*/
|
|
26
|
-
parameters: { context: IParams; data: IData; params: IParams };
|
|
27
|
+
parameters: { context: IParams; data: IData[]; params: IParams };
|
|
27
28
|
|
|
28
29
|
/**
|
|
29
30
|
* 上下文
|
|
@@ -38,7 +39,7 @@ export class DELogicContext {
|
|
|
38
39
|
/**
|
|
39
40
|
* 数据
|
|
40
41
|
*/
|
|
41
|
-
get data(): IData {
|
|
42
|
+
get data(): IData[] {
|
|
42
43
|
return this.parameters.data;
|
|
43
44
|
}
|
|
44
45
|
|
|
@@ -64,10 +65,10 @@ export class DELogicContext {
|
|
|
64
65
|
constructor(
|
|
65
66
|
private deLogicParams: Map<string, DELogicParam>,
|
|
66
67
|
context: IParams,
|
|
67
|
-
data: IData,
|
|
68
|
+
data: IData | IData[],
|
|
68
69
|
params: IParams,
|
|
69
70
|
) {
|
|
70
|
-
this.parameters = { context, data, params };
|
|
71
|
+
this.parameters = { context, data: isArray(data) ? data : [data], params };
|
|
71
72
|
}
|
|
72
73
|
|
|
73
74
|
/**
|
|
@@ -35,7 +35,12 @@ export class DELogicParam {
|
|
|
35
35
|
const tag = this.model.id!;
|
|
36
36
|
const m = this.model;
|
|
37
37
|
if (m.default) {
|
|
38
|
-
|
|
38
|
+
// 配置了列表的拿数组数据
|
|
39
|
+
if (m.entityListParam) {
|
|
40
|
+
ctx.params[tag] = ctx.data || [];
|
|
41
|
+
} else {
|
|
42
|
+
ctx.params[tag] = ctx.data[0] || {};
|
|
43
|
+
}
|
|
39
44
|
} else if (m.appGlobalParam) {
|
|
40
45
|
// 应用全局变量
|
|
41
46
|
ctx.params[tag] = clone(ibiz.env);
|
package/src/de-logic/de-logic.ts
CHANGED
|
@@ -168,7 +168,11 @@ export class DELogic {
|
|
|
168
168
|
* @param {IParams} [opt]
|
|
169
169
|
* @return {*} {Promise<IData>}
|
|
170
170
|
*/
|
|
171
|
-
async exec(
|
|
171
|
+
async exec(
|
|
172
|
+
context: IParams,
|
|
173
|
+
data: IData | IData[],
|
|
174
|
+
params: IParams,
|
|
175
|
+
): Promise<unknown> {
|
|
172
176
|
if (this.scriptFn) {
|
|
173
177
|
return this.scriptFn.exec({ context, data, params });
|
|
174
178
|
}
|
package/src/de-logic/index.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { HttpError, HttpResponse, RuntimeError } from '@ibiz-template/core';
|
|
2
2
|
import { IAppDataEntity, IAppDELogic } from '@ibiz/model-core';
|
|
3
|
+
import { isArray } from 'lodash-es';
|
|
4
|
+
import { clone } from 'ramda';
|
|
3
5
|
import { filterFieldLogics, findDELogic } from '../model';
|
|
4
6
|
import { DELogic } from './de-logic';
|
|
5
7
|
|
|
@@ -42,12 +44,13 @@ async function findDeLogic(
|
|
|
42
44
|
export async function execDELogic(
|
|
43
45
|
deDELogic: IAppDELogic,
|
|
44
46
|
context: IParams,
|
|
45
|
-
data: IData,
|
|
46
|
-
params: IParams,
|
|
47
|
+
data: IData | IData[] = {},
|
|
48
|
+
params: IParams = {},
|
|
47
49
|
): Promise<unknown> {
|
|
48
50
|
if (!deLogicMap.has(deDELogic)) {
|
|
49
51
|
deLogicMap.set(deDELogic, new DELogic(deDELogic));
|
|
50
52
|
}
|
|
53
|
+
|
|
51
54
|
const deLogic = deLogicMap.get(deDELogic)!;
|
|
52
55
|
return deLogic.exec(context, data, params);
|
|
53
56
|
}
|
|
@@ -97,11 +100,15 @@ export async function execDELogicById(
|
|
|
97
100
|
export async function execDELogicAction(
|
|
98
101
|
deDELogic: IAppDELogic,
|
|
99
102
|
context: IParams,
|
|
100
|
-
data
|
|
101
|
-
params
|
|
103
|
+
data?: IData | IData[],
|
|
104
|
+
params?: IParams,
|
|
102
105
|
): Promise<HttpResponse<IData>> {
|
|
106
|
+
const _context = clone(context);
|
|
107
|
+
const _data = data ? clone(data) : data;
|
|
108
|
+
const _params = params ? clone(params) : params;
|
|
109
|
+
|
|
103
110
|
try {
|
|
104
|
-
const result = await execDELogic(deDELogic,
|
|
111
|
+
const result = await execDELogic(deDELogic, _context, _data, _params);
|
|
105
112
|
return new HttpResponse(result);
|
|
106
113
|
} catch (err) {
|
|
107
114
|
if (err instanceof HttpError) {
|
|
@@ -112,9 +119,9 @@ export async function execDELogicAction(
|
|
|
112
119
|
}
|
|
113
120
|
|
|
114
121
|
/**
|
|
115
|
-
*
|
|
122
|
+
* 执行属性实体逻辑(单条数据)
|
|
116
123
|
* @author lxm
|
|
117
|
-
* @date 2023-
|
|
124
|
+
* @date 2023-10-19 04:00:15
|
|
118
125
|
* @export
|
|
119
126
|
* @param {IAppDataEntity} entity
|
|
120
127
|
* @param {('compute' | 'change' | 'default')} type
|
|
@@ -123,7 +130,7 @@ export async function execDELogicAction(
|
|
|
123
130
|
* @param {IParams} params
|
|
124
131
|
* @return {*} {Promise<void>}
|
|
125
132
|
*/
|
|
126
|
-
|
|
133
|
+
async function execSingleFieldLogics(
|
|
127
134
|
entity: IAppDataEntity,
|
|
128
135
|
type: 'compute' | 'change' | 'default',
|
|
129
136
|
context: IParams,
|
|
@@ -142,3 +149,37 @@ export async function execFieldLogics(
|
|
|
142
149
|
});
|
|
143
150
|
}
|
|
144
151
|
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* 执行属性实体逻辑(单条或者多条)
|
|
155
|
+
* @author lxm
|
|
156
|
+
* @date 2023-06-14 12:29:56
|
|
157
|
+
* @export
|
|
158
|
+
* @param {IAppDataEntity} entity
|
|
159
|
+
* @param {('compute' | 'change' | 'default')} type
|
|
160
|
+
* @param {IParams} context
|
|
161
|
+
* @param {IData | IData[]} data 单条或多条数据
|
|
162
|
+
* @param {IParams} params
|
|
163
|
+
* @return {*} {Promise<void>}
|
|
164
|
+
*/
|
|
165
|
+
export async function execFieldLogics(
|
|
166
|
+
entity: IAppDataEntity,
|
|
167
|
+
type: 'compute' | 'change' | 'default',
|
|
168
|
+
context: IParams,
|
|
169
|
+
data: IData | IData[],
|
|
170
|
+
params: IParams = {},
|
|
171
|
+
): Promise<void> {
|
|
172
|
+
if (!data) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (isArray(data)) {
|
|
177
|
+
await Promise.all(
|
|
178
|
+
data.map(item =>
|
|
179
|
+
execSingleFieldLogics(entity, type, context, item, params),
|
|
180
|
+
),
|
|
181
|
+
);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
return execSingleFieldLogics(entity, type, context, data, params);
|
|
185
|
+
}
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
ISearchBarController,
|
|
13
13
|
MDCtrlLoadParams,
|
|
14
14
|
EventBase,
|
|
15
|
+
IUIActionResult,
|
|
15
16
|
} from '../interface';
|
|
16
17
|
import { calcDeCodeNameById } from '../model';
|
|
17
18
|
import { ViewEngineBase } from './view-base.engine';
|
|
@@ -162,12 +163,10 @@ export class MDViewEngine extends ViewEngineBase {
|
|
|
162
163
|
return null;
|
|
163
164
|
}
|
|
164
165
|
if (key === SysUIActionTag.EDIT || key === SysUIActionTag.VIEW) {
|
|
165
|
-
|
|
166
|
-
return null;
|
|
166
|
+
return this.openData(args!);
|
|
167
167
|
}
|
|
168
168
|
if (key === SysUIActionTag.NEW) {
|
|
169
|
-
|
|
170
|
-
return null;
|
|
169
|
+
return this.newData(args!);
|
|
171
170
|
}
|
|
172
171
|
if (key === SysUIActionTag.REMOVE) {
|
|
173
172
|
await this.remove(args);
|
|
@@ -214,7 +213,7 @@ export class MDViewEngine extends ViewEngineBase {
|
|
|
214
213
|
event?: MouseEvent;
|
|
215
214
|
context?: IContext;
|
|
216
215
|
params?: IParams;
|
|
217
|
-
}): Promise<
|
|
216
|
+
}): Promise<IUIActionResult> {
|
|
218
217
|
const { data, event } = args;
|
|
219
218
|
|
|
220
219
|
// 添加选中数据的主键
|
|
@@ -233,10 +232,12 @@ export class MDViewEngine extends ViewEngineBase {
|
|
|
233
232
|
view: this.view,
|
|
234
233
|
});
|
|
235
234
|
|
|
236
|
-
if (result
|
|
237
|
-
this.
|
|
238
|
-
} else
|
|
239
|
-
|
|
235
|
+
if (result === -1) {
|
|
236
|
+
throw new RuntimeModelError(this.view.model, `缺少newdata的视图逻辑`);
|
|
237
|
+
} else {
|
|
238
|
+
return {
|
|
239
|
+
cancel: !result.ok,
|
|
240
|
+
};
|
|
240
241
|
}
|
|
241
242
|
}
|
|
242
243
|
|
|
@@ -253,7 +254,7 @@ export class MDViewEngine extends ViewEngineBase {
|
|
|
253
254
|
data: IData[];
|
|
254
255
|
event?: MouseEvent;
|
|
255
256
|
copyMode?: boolean;
|
|
256
|
-
}): Promise<
|
|
257
|
+
}): Promise<IUIActionResult> {
|
|
257
258
|
const { data, event, copyMode } = args;
|
|
258
259
|
const openAppViewLogic =
|
|
259
260
|
this.view.model.viewLayoutPanel?.appViewLogics?.find(
|
|
@@ -276,10 +277,12 @@ export class MDViewEngine extends ViewEngineBase {
|
|
|
276
277
|
view: this.view,
|
|
277
278
|
});
|
|
278
279
|
|
|
279
|
-
if (result
|
|
280
|
-
this.refresh();
|
|
281
|
-
} else if (result === -1) {
|
|
280
|
+
if (result === -1) {
|
|
282
281
|
throw new RuntimeModelError(this.view.model, `缺少newdata的视图逻辑`);
|
|
282
|
+
} else {
|
|
283
|
+
return {
|
|
284
|
+
cancel: !result.ok,
|
|
285
|
+
};
|
|
283
286
|
}
|
|
284
287
|
}
|
|
285
288
|
|