@ibiz-template/runtime 0.1.12-dev.0 → 0.1.12
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 +452 -311
- package/dist/index.system.min.js +1 -1
- package/dist/index.system.min.js.map +1 -1
- package/out/controller/common/control/md-control.controller.d.ts.map +1 -1
- package/out/controller/common/control/md-control.controller.js +9 -0
- package/out/controller/control/app-menu/app-menu.controller.d.ts +1 -1
- package/out/controller/control/app-menu/app-menu.controller.d.ts.map +1 -1
- package/out/controller/control/app-menu/app-menu.controller.js +2 -2
- package/out/controller/control/caption-bar/caption-bar.controller.d.ts.map +1 -1
- package/out/controller/control/caption-bar/caption-bar.controller.js +1 -2
- package/out/controller/control/chart/generator/chart-options-generator.d.ts.map +1 -1
- package/out/controller/control/chart/generator/chart-options-generator.js +5 -0
- package/out/controller/control/exp-bar/exp-bar.controller.d.ts.map +1 -1
- package/out/controller/control/exp-bar/exp-bar.controller.js +19 -0
- package/out/controller/control/form/edit-form/edit-form.controller.d.ts +7 -0
- package/out/controller/control/form/edit-form/edit-form.controller.d.ts.map +1 -1
- package/out/controller/control/form/edit-form/edit-form.controller.js +55 -19
- package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-item.controller.d.ts +4 -2
- package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-item.controller.d.ts.map +1 -1
- package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-item.controller.js +22 -2
- package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.controller.d.ts +3 -62
- package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.controller.d.ts.map +1 -1
- package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.controller.js +7 -97
- package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.controller.d.ts +2 -48
- package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.controller.d.ts.map +1 -1
- package/out/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.controller.js +2 -94
- package/out/controller/control/form/search-form/search-form.controller.js +1 -0
- package/out/controller/control/form/search-form/search-form.service.d.ts +1 -1
- package/out/controller/control/form/search-form/search-form.service.d.ts.map +1 -1
- package/out/controller/control/form/search-form/search-form.service.js +2 -3
- package/out/controller/control/grid/grid/grid-column.controller.d.ts +16 -0
- package/out/controller/control/grid/grid/grid-column.controller.d.ts.map +1 -1
- package/out/controller/control/grid/grid/grid-column.controller.js +22 -0
- package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts +8 -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 +20 -1
- 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/index.d.ts +4 -0
- package/out/controller/control/md-ctrl/index.d.ts.map +1 -0
- package/out/controller/control/md-ctrl/index.js +3 -0
- package/out/controller/control/md-ctrl/md-ctrl-row.state.d.ts +34 -0
- package/out/controller/control/md-ctrl/md-ctrl-row.state.d.ts.map +1 -0
- package/out/controller/control/md-ctrl/md-ctrl-row.state.js +31 -0
- package/out/controller/control/md-ctrl/md-ctrl.controller.d.ts +77 -0
- package/out/controller/control/md-ctrl/md-ctrl.controller.d.ts.map +1 -0
- package/out/controller/control/md-ctrl/md-ctrl.controller.js +160 -0
- package/out/controller/control/md-ctrl/md-ctrl.service.d.ts +21 -0
- package/out/controller/control/md-ctrl/md-ctrl.service.d.ts.map +1 -0
- package/out/controller/control/md-ctrl/md-ctrl.service.js +40 -0
- package/out/controller/control/panel/panel/panel-item.controller.js +1 -1
- package/out/controller/control/panel/panel/panel.controller.d.ts.map +1 -1
- package/out/controller/control/panel/panel/panel.controller.js +4 -2
- package/out/controller/control/search-bar/search-bar.controller.d.ts.map +1 -1
- package/out/controller/control/search-bar/search-bar.controller.js +15 -6
- package/out/engine/md-view.engine.d.ts.map +1 -1
- package/out/engine/md-view.engine.js +9 -3
- package/out/interface/controller/event/control/i-edit-form.event.d.ts +48 -3
- package/out/interface/controller/event/control/i-edit-form.event.d.ts.map +1 -1
- package/out/interface/controller/event/control/i-form.event.d.ts +27 -0
- package/out/interface/controller/event/control/i-form.event.d.ts.map +1 -1
- package/out/interface/controller/event/control/i-md-control.event.d.ts +57 -14
- package/out/interface/controller/event/control/i-md-control.event.d.ts.map +1 -1
- package/out/interface/controller/state/control/i-exp-bar-control.state.d.ts +7 -0
- package/out/interface/controller/state/control/i-exp-bar-control.state.d.ts.map +1 -1
- package/out/interface/controller/state/control/i-search-bar.state.d.ts +7 -0
- package/out/interface/controller/state/control/i-search-bar.state.d.ts.map +1 -1
- package/out/logic-scheduler/executor/app-ui-logic-executor.d.ts +3 -3
- package/out/logic-scheduler/executor/app-ui-logic-executor.d.ts.map +1 -1
- package/out/logic-scheduler/executor/app-ui-logic-executor.js +3 -3
- package/out/service/service/code-list/code-list.service.d.ts.map +1 -1
- package/out/service/service/code-list/code-list.service.js +1 -1
- package/out/service/utils/dynamic-code-list/dynamic-code-list.js +1 -1
- package/out/ui-action/uiaction-util.js +1 -1
- package/out/utils/script/script-function.d.ts.map +1 -1
- package/out/utils/script/script-function.js +3 -0
- package/package.json +3 -3
- package/src/controller/common/control/md-control.controller.ts +7 -0
- package/src/controller/control/app-menu/app-menu.controller.ts +6 -3
- package/src/controller/control/caption-bar/caption-bar.controller.ts +1 -2
- package/src/controller/control/chart/generator/chart-options-generator.ts +4 -0
- package/src/controller/control/exp-bar/exp-bar.controller.ts +25 -0
- package/src/controller/control/form/edit-form/edit-form.controller.ts +57 -24
- package/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-item.controller.ts +41 -4
- package/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.controller.ts +11 -159
- package/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.controller.ts +2 -140
- package/src/controller/control/form/search-form/search-form.controller.ts +1 -1
- package/src/controller/control/form/search-form/search-form.service.ts +2 -3
- package/src/controller/control/grid/grid/grid-column.controller.ts +22 -0
- package/src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts +21 -1
- package/src/controller/control/index.ts +1 -0
- package/src/controller/control/md-ctrl/index.ts +3 -0
- package/src/controller/control/md-ctrl/md-ctrl-row.state.ts +40 -0
- package/src/controller/control/md-ctrl/md-ctrl.controller.ts +199 -0
- package/src/controller/control/md-ctrl/md-ctrl.service.ts +40 -0
- package/src/controller/control/panel/panel/panel-item.controller.ts +1 -1
- package/src/controller/control/panel/panel/panel.controller.ts +6 -2
- package/src/controller/control/search-bar/search-bar.controller.ts +21 -8
- package/src/engine/md-view.engine.ts +7 -3
- package/src/interface/controller/event/control/i-edit-form.event.ts +53 -3
- package/src/interface/controller/event/control/i-form.event.ts +30 -0
- package/src/interface/controller/event/control/i-md-control.event.ts +63 -15
- package/src/interface/controller/state/control/i-exp-bar-control.state.ts +8 -0
- package/src/interface/controller/state/control/i-search-bar.state.ts +8 -0
- package/src/logic-scheduler/executor/app-ui-logic-executor.ts +5 -5
- package/src/service/service/code-list/code-list.service.ts +1 -4
- package/src/service/utils/dynamic-code-list/dynamic-code-list.ts +1 -1
- package/src/ui-action/uiaction-util.ts +1 -1
- package/src/utils/script/script-function.ts +3 -0
|
@@ -1,15 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { IDEFormDetail } from '@ibiz/model-core';
|
|
3
|
-
// import { reactive } from 'vue';
|
|
4
|
-
import { FormController } from '../../../../form';
|
|
5
|
-
import { FormGroupPanelController } from '../../../form-group-panel';
|
|
6
|
-
import { FormMDCtrlContentTypeController } from '../../form-mdctrl-content-type.controller';
|
|
7
|
-
import { FormMDCtrlItemController } from '../form-mdctrl-repeater-form/form-mdctrl-repeater-form-item.controller';
|
|
8
|
-
import { FormItemController } from '../../../form-item';
|
|
9
|
-
import { IFormDetailController } from '../../../../../../../interface';
|
|
10
|
-
import { findChildFormDetails } from '../../../../../../../model';
|
|
11
|
-
import { getFormDetailProvider } from '../../../../../../../register';
|
|
12
|
-
import { CTX } from '../../../../../../ctx';
|
|
1
|
+
import { FormMDCtrlRepeaterFormController } from '../form-mdctrl-repeater-form/form-mdctrl-repeater-form.controller';
|
|
13
2
|
|
|
14
3
|
/**
|
|
15
4
|
* 表单多数据部件表格类型控制器
|
|
@@ -21,7 +10,7 @@ import { CTX } from '../../../../../../ctx';
|
|
|
21
10
|
* @extends {EditFormController}
|
|
22
11
|
* @implements {IFormController}
|
|
23
12
|
*/
|
|
24
|
-
export class FormMDCtrlRepeaterFormOneController extends
|
|
13
|
+
export class FormMDCtrlRepeaterFormOneController extends FormMDCtrlRepeaterFormController {
|
|
25
14
|
/**
|
|
26
15
|
* 数据
|
|
27
16
|
*
|
|
@@ -35,112 +24,6 @@ export class FormMDCtrlRepeaterFormOneController extends FormMDCtrlContentTypeCo
|
|
|
35
24
|
return this.parent.state.contentCtrlData as IData[];
|
|
36
25
|
}
|
|
37
26
|
|
|
38
|
-
/**
|
|
39
|
-
* 表单项控制器的集合(二维数组)
|
|
40
|
-
*
|
|
41
|
-
* @author zk
|
|
42
|
-
* @date 2023-07-25 05:07:56
|
|
43
|
-
* @type {Array<Array<FormItemController>>}
|
|
44
|
-
* @memberof FormMDCtrlController
|
|
45
|
-
*/
|
|
46
|
-
formDetail: Array<{
|
|
47
|
-
name: string;
|
|
48
|
-
detailType: string;
|
|
49
|
-
c: IFormDetailController;
|
|
50
|
-
}> = [];
|
|
51
|
-
|
|
52
|
-
private formCtx!: CTX;
|
|
53
|
-
|
|
54
|
-
state: { isInit: boolean } = { isInit: false };
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* 初始化表单成员控制器
|
|
58
|
-
*
|
|
59
|
-
* @author lxm
|
|
60
|
-
* @date 2022-08-24 21:08:48
|
|
61
|
-
* @protected
|
|
62
|
-
*/
|
|
63
|
-
protected async initFormMDCtrlItemControllers(
|
|
64
|
-
details: IDEFormDetail[],
|
|
65
|
-
form: FormController = this.parent.form,
|
|
66
|
-
data: IData = {},
|
|
67
|
-
parent: FormGroupPanelController | undefined = undefined,
|
|
68
|
-
): Promise<IData> {
|
|
69
|
-
const formData = data;
|
|
70
|
-
// const formData = reactive(data);
|
|
71
|
-
|
|
72
|
-
const formController = new FormMDCtrlItemController(
|
|
73
|
-
this.model,
|
|
74
|
-
this.parent.form.context,
|
|
75
|
-
this.parent.form.params,
|
|
76
|
-
this.formCtx,
|
|
77
|
-
formData,
|
|
78
|
-
);
|
|
79
|
-
await formController.onInit();
|
|
80
|
-
formController.evt.on('onFormDataChange', arg => {
|
|
81
|
-
if (arg.data.length > 0) {
|
|
82
|
-
this.onDataItemChange(arg.data[0]);
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
formController.state.isLoaded = true;
|
|
87
|
-
await Promise.all(
|
|
88
|
-
details.map(async detail => {
|
|
89
|
-
// 生成表单成员控制器
|
|
90
|
-
const detailProvider = await getFormDetailProvider(detail);
|
|
91
|
-
if (!detailProvider) {
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
form.providers[detail.id!] = detailProvider;
|
|
95
|
-
const detailController = await detailProvider.createController(
|
|
96
|
-
detail,
|
|
97
|
-
formController,
|
|
98
|
-
parent,
|
|
99
|
-
);
|
|
100
|
-
if (!this.formDetail) {
|
|
101
|
-
this.formDetail = [];
|
|
102
|
-
}
|
|
103
|
-
this.formDetail.push({
|
|
104
|
-
name: detail.id!,
|
|
105
|
-
detailType: detail.detailType!,
|
|
106
|
-
c: detailController,
|
|
107
|
-
});
|
|
108
|
-
// 有子成员的生成子控制器
|
|
109
|
-
const childDetails = findChildFormDetails(detail);
|
|
110
|
-
if (childDetails.length) {
|
|
111
|
-
await this.initFormMDCtrlItemControllers(
|
|
112
|
-
childDetails,
|
|
113
|
-
formController,
|
|
114
|
-
data,
|
|
115
|
-
detailController as FormGroupPanelController,
|
|
116
|
-
);
|
|
117
|
-
}
|
|
118
|
-
}),
|
|
119
|
-
);
|
|
120
|
-
return data;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* 初始化formCtx
|
|
125
|
-
*
|
|
126
|
-
* @author zk
|
|
127
|
-
* @date 2023-07-29 05:07:21
|
|
128
|
-
* @memberof FormMDCtrlRepeaterFormController
|
|
129
|
-
*/
|
|
130
|
-
useFormMdCtrlCtx(): void {
|
|
131
|
-
// this.formCtx = useCtx();
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
async initData(): Promise<void> {
|
|
135
|
-
super.initData();
|
|
136
|
-
await this.initFormMDCtrlItemControllers(
|
|
137
|
-
this.model.deformDetails!,
|
|
138
|
-
this.parent.form,
|
|
139
|
-
this.data,
|
|
140
|
-
);
|
|
141
|
-
this.state.isInit = true;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
27
|
/**
|
|
145
28
|
* 内部表单项数据发生改变,同步contentCtrlData并设置外部表单值
|
|
146
29
|
*
|
|
@@ -154,25 +37,4 @@ export class FormMDCtrlRepeaterFormOneController extends FormMDCtrlContentTypeCo
|
|
|
154
37
|
this.parent.state.contentCtrlData = data;
|
|
155
38
|
this.parent.setFormDataValue();
|
|
156
39
|
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* 表单值校验
|
|
160
|
-
*
|
|
161
|
-
* @author zzq
|
|
162
|
-
* @date 2023-08-23 19:07:11
|
|
163
|
-
* @memberof FormMDCtrlController
|
|
164
|
-
*/
|
|
165
|
-
async validate(): Promise<boolean> {
|
|
166
|
-
const values: Promise<boolean>[] = [];
|
|
167
|
-
this.formDetail.forEach(detail => {
|
|
168
|
-
if (detail.detailType === 'FORMITEM') {
|
|
169
|
-
const c = detail.c as FormItemController;
|
|
170
|
-
values.push(c.validate());
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
const results = await Promise.all(values);
|
|
175
|
-
// 找不到value为false即全部是true
|
|
176
|
-
return results.findIndex(value => !value) === -1;
|
|
177
|
-
}
|
|
178
40
|
}
|
|
@@ -54,7 +54,7 @@ export class SearchFormController
|
|
|
54
54
|
// 新建默认值给到graft接口,接口会回来
|
|
55
55
|
const params = await this.getDraftParams();
|
|
56
56
|
Object.assign(queryParams, params);
|
|
57
|
-
|
|
57
|
+
await this.evt.emit('onBeforeLoadDraft', { params: queryParams });
|
|
58
58
|
const res = await this.service.getDraft(this.context, queryParams);
|
|
59
59
|
this.state.data = res.data;
|
|
60
60
|
mergeDefaultInLeft(this.data, params);
|
|
@@ -26,10 +26,9 @@ export class SearchFormService<
|
|
|
26
26
|
*/
|
|
27
27
|
async getDraft(
|
|
28
28
|
_context: IParams,
|
|
29
|
-
|
|
29
|
+
params: IParams = {},
|
|
30
30
|
): Promise<IHttpResponse<ControlVO>> {
|
|
31
|
-
|
|
32
|
-
let res = { ok: true, status: 200, data: {} } as IHttpResponse;
|
|
31
|
+
let res = { ok: true, status: 200, data: { ...params } } as IHttpResponse;
|
|
33
32
|
res = this.handleResponse(res);
|
|
34
33
|
return res as IHttpResponse<ControlVO>;
|
|
35
34
|
}
|
|
@@ -91,6 +91,28 @@ export class GridColumnController<T extends IDEGridColumn = IDEGridColumn> {
|
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
+
/**
|
|
95
|
+
* 值格式化
|
|
96
|
+
* @author lxm
|
|
97
|
+
* @date 2023-08-25 05:03:07
|
|
98
|
+
* @readonly
|
|
99
|
+
* @type {(string | undefined)}
|
|
100
|
+
*/
|
|
101
|
+
get valueFormat(): string | undefined {
|
|
102
|
+
return this.deGridDataItem?.format;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* 数据类型(数值)
|
|
107
|
+
* @author lxm
|
|
108
|
+
* @date 2023-08-25 05:03:07
|
|
109
|
+
* @readonly
|
|
110
|
+
* @type {(string | undefined)}
|
|
111
|
+
*/
|
|
112
|
+
get dataType(): number | undefined {
|
|
113
|
+
return this.deGridDataItem?.dataType;
|
|
114
|
+
}
|
|
115
|
+
|
|
94
116
|
/**
|
|
95
117
|
* Creates an instance of GridFieldColumnController.
|
|
96
118
|
* @author lxm
|
package/src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
-
import { ModelError } from '@ibiz-template/core';
|
|
2
|
+
import { DataTypes, ModelError } from '@ibiz-template/core';
|
|
3
3
|
import { IAppCodeList, IDEGridFieldColumn } from '@ibiz/model-core';
|
|
4
|
+
import dayjs from 'dayjs';
|
|
4
5
|
import { clone } from 'ramda';
|
|
5
6
|
import { OpenAppViewCommand } from '../../../../../command';
|
|
6
7
|
import { CodeListItem, IModalData } from '../../../../../interface';
|
|
@@ -267,4 +268,23 @@ export class GridFieldColumnController extends GridColumnController<IDEGridField
|
|
|
267
268
|
}
|
|
268
269
|
return formatValue;
|
|
269
270
|
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* 值格式化
|
|
274
|
+
* @author lxm
|
|
275
|
+
* @date 2023-08-25 05:18:11
|
|
276
|
+
* @param {unknown} value
|
|
277
|
+
* @return {*} {string}
|
|
278
|
+
*/
|
|
279
|
+
formatValue(value: unknown = ''): string {
|
|
280
|
+
const strVal = `${value}`;
|
|
281
|
+
if (!this.valueFormat) {
|
|
282
|
+
return strVal;
|
|
283
|
+
}
|
|
284
|
+
const isDate = DataTypes.isDate(this.dataType!);
|
|
285
|
+
if (isDate) {
|
|
286
|
+
return dayjs(strVal).format(this.valueFormat);
|
|
287
|
+
}
|
|
288
|
+
return ibiz.util.text.format(strVal, this.valueFormat);
|
|
289
|
+
}
|
|
270
290
|
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IButtonContainerState,
|
|
3
|
+
IMobMDCtrlController,
|
|
4
|
+
IMobMDCtrlRowState,
|
|
5
|
+
} from '../../../interface';
|
|
6
|
+
import { ControlVO } from '../../../service';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 多数据部件行状态
|
|
10
|
+
*
|
|
11
|
+
* @author chitanda
|
|
12
|
+
* @date 2023-06-19 18:06:44
|
|
13
|
+
* @export
|
|
14
|
+
* @class MobMDCtrlRowState
|
|
15
|
+
*/
|
|
16
|
+
export class MobMDCtrlRowState implements IMobMDCtrlRowState {
|
|
17
|
+
/**
|
|
18
|
+
* 行为状态
|
|
19
|
+
*
|
|
20
|
+
* @author chitanda
|
|
21
|
+
* @date 2023-06-19 18:06:27
|
|
22
|
+
* @type {{ [p: string]: IButtonContainerState }}
|
|
23
|
+
*/
|
|
24
|
+
readonly uaColStates: { [p: string]: IButtonContainerState } = {};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Creates an instance of MDCtrlRowState.
|
|
28
|
+
*
|
|
29
|
+
* @author chitanda
|
|
30
|
+
* @date 2023-06-19 18:06:12
|
|
31
|
+
* @param {ControlVO} data 行数据
|
|
32
|
+
* @param {IMobMDCtrlController} controller 多数据部件控制器
|
|
33
|
+
*/
|
|
34
|
+
constructor(
|
|
35
|
+
public data: ControlVO,
|
|
36
|
+
public controller: IMobMDCtrlController,
|
|
37
|
+
) {
|
|
38
|
+
this.data = data;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IDEMobMDCtrl,
|
|
3
|
+
IUIActionGroup,
|
|
4
|
+
IUIActionGroupDetail,
|
|
5
|
+
} from '@ibiz/model-core';
|
|
6
|
+
import {
|
|
7
|
+
IMobMDCtrlEvent,
|
|
8
|
+
IMobMDCtrlController,
|
|
9
|
+
IMobMdCtrlState,
|
|
10
|
+
IMobMDCtrlRowState,
|
|
11
|
+
MDCtrlLoadParams,
|
|
12
|
+
} from '../../../interface';
|
|
13
|
+
import { MDCtrlService } from './md-ctrl.service';
|
|
14
|
+
import { MobMDCtrlRowState } from './md-ctrl-row.state';
|
|
15
|
+
import { MDControlController } from '../../common';
|
|
16
|
+
import { ControlVO } from '../../../service';
|
|
17
|
+
import { UIActionUtil } from '../../../ui-action';
|
|
18
|
+
import { ButtonContainerState, UIActionButtonState } from '../../utils';
|
|
19
|
+
|
|
20
|
+
export class MDCtrlController
|
|
21
|
+
extends MDControlController<IDEMobMDCtrl, IMobMdCtrlState, IMobMDCtrlEvent>
|
|
22
|
+
implements IMobMDCtrlController
|
|
23
|
+
{
|
|
24
|
+
declare service: MDCtrlService;
|
|
25
|
+
|
|
26
|
+
protected initState(): void {
|
|
27
|
+
super.initState();
|
|
28
|
+
this.state.rows = [];
|
|
29
|
+
this.state.noSort = this.model.noSort === true;
|
|
30
|
+
// 多数据默认激活值为1
|
|
31
|
+
this.state.mdctrlActiveMode = 1;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
protected async onCreated(): Promise<void> {
|
|
35
|
+
await super.onCreated();
|
|
36
|
+
this.service = new MDCtrlService(this.model);
|
|
37
|
+
await this.service.init(this.context);
|
|
38
|
+
// 设置默认排序
|
|
39
|
+
this.setSort();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* 设置排序
|
|
44
|
+
*
|
|
45
|
+
* @author lxm
|
|
46
|
+
* @date 2022-09-28 13:09:44
|
|
47
|
+
* @param {string} key 排序字段
|
|
48
|
+
* @param {string} order 排序顺序
|
|
49
|
+
*/
|
|
50
|
+
setSort(key?: string, order?: 'asc' | 'desc'): void {
|
|
51
|
+
if (key && order) {
|
|
52
|
+
super.setSort(key, order);
|
|
53
|
+
} else {
|
|
54
|
+
// 设置默认排序或者置空
|
|
55
|
+
const { minorSortAppDEFieldId, minorSortDir } = this.model;
|
|
56
|
+
if (minorSortAppDEFieldId && minorSortDir) {
|
|
57
|
+
this.state.sortQuery = `${minorSortAppDEFieldId.toLowerCase()},${minorSortDir.toLowerCase()}`;
|
|
58
|
+
} else {
|
|
59
|
+
this.state.sortQuery = '';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* 加载更多
|
|
66
|
+
* @author lxm
|
|
67
|
+
* @date 2023-05-22 07:33:59
|
|
68
|
+
* @return {*} {Promise<void>}
|
|
69
|
+
*/
|
|
70
|
+
async loadMore(): Promise<void> {
|
|
71
|
+
// 修复加载更多时,数据未加载成功 但是还是会继续加载的问题
|
|
72
|
+
if (this.state.total > this.state.items.length && !this.state.isLoading) {
|
|
73
|
+
await this.load({ isLoadMore: true });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* 列表多数据刷新 需重置分页
|
|
79
|
+
*
|
|
80
|
+
* @author zk
|
|
81
|
+
* @date 2023-08-11 05:08:20
|
|
82
|
+
* @return {*} {Promise<void>}
|
|
83
|
+
* @memberof MDCtrlController
|
|
84
|
+
*/
|
|
85
|
+
async refresh(): Promise<void> {
|
|
86
|
+
await this.load({ isInitialLoad: true });
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
afterLoad(args: MDCtrlLoadParams, items: ControlVO[]): Promise<IData[]> {
|
|
90
|
+
if (args.isInitialLoad) {
|
|
91
|
+
this.state.rows = [];
|
|
92
|
+
}
|
|
93
|
+
if (items && items.length > 0) {
|
|
94
|
+
this.state.rows.push(
|
|
95
|
+
...items.map(item => {
|
|
96
|
+
const row = new MobMDCtrlRowState(item, this);
|
|
97
|
+
this.initActionStates(row);
|
|
98
|
+
return row;
|
|
99
|
+
}),
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
return super.afterLoad(args, items);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* 设置列表数据
|
|
107
|
+
*
|
|
108
|
+
* @author zk
|
|
109
|
+
* @date 2023-05-26 02:05:46
|
|
110
|
+
* @param {IData[]} items
|
|
111
|
+
* @memberof ListController
|
|
112
|
+
*/
|
|
113
|
+
setData(items: IData[]): void {
|
|
114
|
+
const rows = items.map(item => {
|
|
115
|
+
const row = new MobMDCtrlRowState(item as ControlVO, this);
|
|
116
|
+
return row;
|
|
117
|
+
});
|
|
118
|
+
this.state.rows = rows;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* 获取列表数据
|
|
123
|
+
*
|
|
124
|
+
* @author zk
|
|
125
|
+
* @date 2023-05-26 02:05:35
|
|
126
|
+
* @return {*} {IData[]}
|
|
127
|
+
* @memberof ListController
|
|
128
|
+
*/
|
|
129
|
+
getAllData(): IData[] {
|
|
130
|
+
return this.state.rows.map(row => row.data);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* 界面行为组项点击
|
|
135
|
+
*
|
|
136
|
+
* @author chitanda
|
|
137
|
+
* @date 2023-06-19 18:06:18
|
|
138
|
+
* @param {IUIActionGroupDetail} detail
|
|
139
|
+
* @param {MDCtrlRowState} row
|
|
140
|
+
* @param {MouseEvent} event
|
|
141
|
+
* @return {*} {Promise<void>}
|
|
142
|
+
*/
|
|
143
|
+
async onActionClick(
|
|
144
|
+
detail: IUIActionGroupDetail,
|
|
145
|
+
row: IMobMDCtrlRowState,
|
|
146
|
+
event: MouseEvent,
|
|
147
|
+
): Promise<void> {
|
|
148
|
+
const actionId = detail.uiactionId;
|
|
149
|
+
await UIActionUtil.execAndResolved(actionId!, {
|
|
150
|
+
context: this.context,
|
|
151
|
+
params: this.params,
|
|
152
|
+
data: [row.data],
|
|
153
|
+
view: this.view,
|
|
154
|
+
event,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* 初始化按钮状态
|
|
160
|
+
*
|
|
161
|
+
* @author chitanda
|
|
162
|
+
* @date 2023-06-21 16:06:55
|
|
163
|
+
* @protected
|
|
164
|
+
* @param {MobMDCtrlRowState} row
|
|
165
|
+
*/
|
|
166
|
+
protected initActionStates(row: MobMDCtrlRowState): void {
|
|
167
|
+
const { deuiactionGroup, deuiactionGroup2 } = this.model;
|
|
168
|
+
if (deuiactionGroup) {
|
|
169
|
+
this.initUIActionGroup(row, deuiactionGroup);
|
|
170
|
+
}
|
|
171
|
+
if (deuiactionGroup2) {
|
|
172
|
+
this.initUIActionGroup(row, deuiactionGroup2);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
protected initUIActionGroup(
|
|
177
|
+
row: MobMDCtrlRowState,
|
|
178
|
+
group: IUIActionGroup,
|
|
179
|
+
): void {
|
|
180
|
+
if (!group!.uiactionGroupDetails?.length) {
|
|
181
|
+
ibiz.log.debug('操作列界面行为组没有配置界面行为');
|
|
182
|
+
}
|
|
183
|
+
const containerState = new ButtonContainerState();
|
|
184
|
+
const details = group!.uiactionGroupDetails || [];
|
|
185
|
+
details.forEach(detail => {
|
|
186
|
+
const actionid = detail.uiactionId;
|
|
187
|
+
if (actionid) {
|
|
188
|
+
const buttonState = new UIActionButtonState(
|
|
189
|
+
detail.id!,
|
|
190
|
+
this.context.srfappid!,
|
|
191
|
+
actionid,
|
|
192
|
+
);
|
|
193
|
+
containerState.addState(detail.id!, buttonState);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
containerState.update(row.data.getOrigin());
|
|
197
|
+
row.uaColStates[group.id!] = containerState;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { IDEMobMDCtrl } from '@ibiz/model-core';
|
|
2
|
+
import { MDControlService, UIMapField } from '../../../service';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 多数据部件服务
|
|
6
|
+
*
|
|
7
|
+
* @author lxm
|
|
8
|
+
* @date 2023-05-15 09:53:35
|
|
9
|
+
* @export
|
|
10
|
+
* @class MDCtrlService
|
|
11
|
+
* @extends {MDControlService<IDEMobMDCtrl>}
|
|
12
|
+
*/
|
|
13
|
+
export class MDCtrlService extends MDControlService<IDEMobMDCtrl> {
|
|
14
|
+
/**
|
|
15
|
+
* 初始化属性映射
|
|
16
|
+
*
|
|
17
|
+
* @author lxm
|
|
18
|
+
* @date 2022-08-31 18:08:37
|
|
19
|
+
*/
|
|
20
|
+
initUIDataMap(): void {
|
|
21
|
+
super.initUIDataMap();
|
|
22
|
+
// *初始化表格数据项的属性映射
|
|
23
|
+
this.model.delistDataItems?.forEach(item => {
|
|
24
|
+
const uiKey = item.id!.toLowerCase();
|
|
25
|
+
const deField = item.appDEFieldId;
|
|
26
|
+
let mapField: UIMapField;
|
|
27
|
+
// 后台实体属性
|
|
28
|
+
if (deField) {
|
|
29
|
+
const deFieldKey = deField.toLowerCase();
|
|
30
|
+
mapField = new UIMapField(uiKey, deFieldKey, {
|
|
31
|
+
isOriginField: true,
|
|
32
|
+
});
|
|
33
|
+
} else {
|
|
34
|
+
// 前台属性
|
|
35
|
+
mapField = new UIMapField(uiKey, uiKey);
|
|
36
|
+
}
|
|
37
|
+
this.dataUIMap.set(uiKey, mapField);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -178,7 +178,7 @@ export class PanelItemController<T extends IPanelItem = IPanelItem>
|
|
|
178
178
|
// name是动态逻辑涉及到的时或state存在时
|
|
179
179
|
if (mustCalc || isOverlap(relatedNames, names)) {
|
|
180
180
|
try {
|
|
181
|
-
const ok = verifyPanelGroupLogic(this.
|
|
181
|
+
const ok = verifyPanelGroupLogic(this.data, logic);
|
|
182
182
|
switch (logic.logicCat) {
|
|
183
183
|
// 动态空输入,不满足则必填
|
|
184
184
|
case 'ITEMBLANK':
|
|
@@ -123,8 +123,12 @@ export class PanelController<
|
|
|
123
123
|
parent,
|
|
124
124
|
);
|
|
125
125
|
panel.panelItems[panelItem.id!] = panelItemController;
|
|
126
|
-
//
|
|
127
|
-
if (
|
|
126
|
+
// 有子成员的,且不是数据容器的。生成子控制器
|
|
127
|
+
if (
|
|
128
|
+
(panelItem as IPanelContainer).panelItems?.length &&
|
|
129
|
+
!(panelItemController as IPanelItemContainerController)
|
|
130
|
+
.isDataContainer
|
|
131
|
+
) {
|
|
128
132
|
await this.initPanelItemControllers(
|
|
129
133
|
(panelItem as IPanelContainer).panelItems,
|
|
130
134
|
panel,
|
|
@@ -30,6 +30,11 @@ export class SearchBarController
|
|
|
30
30
|
protected initState(): void {
|
|
31
31
|
super.initState();
|
|
32
32
|
this.state.query = '';
|
|
33
|
+
this.state.visible = !!(
|
|
34
|
+
this.model.enableQuickSearch ||
|
|
35
|
+
this.model.enableGroup ||
|
|
36
|
+
this.model.enableFilter
|
|
37
|
+
);
|
|
33
38
|
}
|
|
34
39
|
|
|
35
40
|
protected async onCreated(): Promise<void> {
|
|
@@ -39,16 +44,24 @@ export class SearchBarController
|
|
|
39
44
|
this.context.srfappid,
|
|
40
45
|
)!;
|
|
41
46
|
if (appDataEntity) {
|
|
42
|
-
const
|
|
47
|
+
const searchFields = appDataEntity.appDEFields?.filter(field => {
|
|
43
48
|
return field.enableQuickSearch;
|
|
44
49
|
});
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
const placeHolders: string[] = [];
|
|
51
|
+
searchFields?.forEach(searchField => {
|
|
52
|
+
if (searchField?.lnlanguageRes && searchField.lnlanguageRes.lanResTag) {
|
|
53
|
+
placeHolders.push(
|
|
54
|
+
ibiz.i18n.t(
|
|
55
|
+
searchField.lnlanguageRes.lanResTag,
|
|
56
|
+
searchField.logicName,
|
|
57
|
+
),
|
|
58
|
+
);
|
|
59
|
+
} else if (searchField?.logicName) {
|
|
60
|
+
placeHolders.push(searchField.logicName);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
if (placeHolders.length > 0) {
|
|
64
|
+
this.placeHolder = placeHolders.join('、');
|
|
52
65
|
}
|
|
53
66
|
}
|
|
54
67
|
}
|
|
@@ -213,7 +213,9 @@ export class MDViewEngine extends ViewEngineBase {
|
|
|
213
213
|
view: this.view,
|
|
214
214
|
});
|
|
215
215
|
|
|
216
|
-
if (result
|
|
216
|
+
if (result instanceof Object && result.ok) {
|
|
217
|
+
this.refresh();
|
|
218
|
+
} else if (result === -1) {
|
|
217
219
|
ibiz.log.warn(`视图[${this.view.model.codeName}],未配置编辑打开视图`);
|
|
218
220
|
}
|
|
219
221
|
}
|
|
@@ -253,7 +255,9 @@ export class MDViewEngine extends ViewEngineBase {
|
|
|
253
255
|
view: this.view,
|
|
254
256
|
});
|
|
255
257
|
|
|
256
|
-
if (result
|
|
258
|
+
if (result instanceof Object && result.ok) {
|
|
259
|
+
this.refresh();
|
|
260
|
+
} else if (result === -1) {
|
|
257
261
|
throw new RuntimeModelError(this.view.model, `缺少newdata的视图逻辑`);
|
|
258
262
|
}
|
|
259
263
|
}
|
|
@@ -356,7 +360,7 @@ export class MDViewEngine extends ViewEngineBase {
|
|
|
356
360
|
protected calcViewHeaderVisible(): boolean {
|
|
357
361
|
let showHeader = super.calcViewHeaderVisible();
|
|
358
362
|
// 搜索栏
|
|
359
|
-
if (!this.searchBar) {
|
|
363
|
+
if (!this.searchBar || !this.searchBar.state.visible) {
|
|
360
364
|
const controller = this.viewLayoutPanel!.panelItems.view_searchbar;
|
|
361
365
|
if (controller) {
|
|
362
366
|
controller.state.visible = false;
|