@ibiz-template/runtime 0.1.26 → 0.1.28
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 +654 -355
- 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 +1 -0
- package/out/controller/common/control/md-control.controller.d.ts.map +1 -1
- package/out/controller/common/control/md-control.controller.js +7 -0
- package/out/controller/control/data-view/data-view.controller.d.ts +42 -1
- package/out/controller/control/data-view/data-view.controller.d.ts.map +1 -1
- package/out/controller/control/data-view/data-view.controller.js +131 -4
- package/out/controller/control/exp-bar/exp-bar.controller.d.ts.map +1 -1
- package/out/controller/control/exp-bar/exp-bar.controller.js +4 -1
- package/out/controller/control/form/edit-form/edit-form.controller.d.ts +1 -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 +7 -0
- 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 +10 -68
- package/out/controller/control/form/search-form/search-form.controller.d.ts +1 -0
- 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 +7 -0
- package/out/controller/control/grid/grid/grid-row.state.d.ts +1 -0
- package/out/controller/control/grid/grid/grid-row.state.d.ts.map +1 -1
- package/out/controller/control/grid/grid/grid.controller.d.ts +10 -0
- package/out/controller/control/grid/grid/grid.controller.d.ts.map +1 -1
- package/out/controller/control/grid/grid/grid.controller.js +61 -17
- package/out/controller/control/kanban/kanban.controller.d.ts +1 -34
- package/out/controller/control/kanban/kanban.controller.d.ts.map +1 -1
- package/out/controller/control/kanban/kanban.controller.js +0 -83
- package/out/controller/control/panel/panel/panel-item.controller.d.ts +34 -2
- package/out/controller/control/panel/panel/panel-item.controller.d.ts.map +1 -1
- package/out/controller/control/panel/panel/panel-item.controller.js +84 -5
- package/out/controller/control/panel/panel/panel.controller.d.ts +2 -1
- package/out/controller/control/panel/panel/panel.controller.d.ts.map +1 -1
- package/out/controller/control/panel/panel/panel.controller.js +11 -1
- package/out/controller/control/tab-exp-panel/tab-exp-panel.controller.d.ts +20 -0
- package/out/controller/control/tab-exp-panel/tab-exp-panel.controller.d.ts.map +1 -1
- package/out/controller/control/tab-exp-panel/tab-exp-panel.controller.js +45 -0
- package/out/controller/control/toolbar/toolbar.controllerr.d.ts.map +1 -1
- package/out/controller/control/toolbar/toolbar.controllerr.js +33 -21
- package/out/controller/utils/index.d.ts +1 -0
- package/out/controller/utils/index.d.ts.map +1 -1
- package/out/controller/utils/index.js +1 -0
- package/out/controller/utils/value-default/value-default.d.ts +37 -0
- package/out/controller/utils/value-default/value-default.d.ts.map +1 -0
- package/out/controller/utils/value-default/value-default.js +65 -0
- package/out/de-logic/de-logic-node/end-node/end-node.d.ts.map +1 -1
- package/out/de-logic/de-logic-node/end-node/end-node.js +4 -0
- package/out/engine/md-view.engine.d.ts.map +1 -1
- package/out/engine/md-view.engine.js +7 -0
- package/out/interface/controller/controller/control/panel-item/i-panel-item.controller.d.ts +2 -2
- package/out/interface/controller/controller/control/panel-item/i-panel-item.controller.d.ts.map +1 -1
- package/out/interface/controller/state/control/i-control.state.d.ts +7 -0
- package/out/interface/controller/state/control/i-control.state.d.ts.map +1 -1
- package/out/interface/controller/state/control/i-data-view-control.state.d.ts +8 -0
- package/out/interface/controller/state/control/i-data-view-control.state.d.ts.map +1 -1
- package/out/interface/controller/state/control/i-grid.state.d.ts +7 -0
- package/out/interface/controller/state/control/i-grid.state.d.ts.map +1 -1
- package/out/interface/controller/state/control/i-kanban.state.d.ts +0 -8
- package/out/interface/controller/state/control/i-kanban.state.d.ts.map +1 -1
- package/out/interface/controller/state/control/i-md-control.state.d.ts +14 -0
- package/out/interface/controller/state/control/i-md-control.state.d.ts.map +1 -1
- package/out/interface/controller/state/control/i-tab-exp-panel.state.d.ts +8 -0
- package/out/interface/controller/state/control/i-tab-exp-panel.state.d.ts.map +1 -1
- package/out/logic-scheduler/trigger/item-dyna-logic-trigger.d.ts.map +1 -1
- package/out/logic-scheduler/trigger/item-dyna-logic-trigger.js +4 -1
- package/out/model/layout/layout.d.ts.map +1 -1
- package/out/model/layout/layout.js +17 -1
- package/out/service/service/entity/method/method.d.ts.map +1 -1
- package/out/service/service/entity/method/method.js +2 -2
- package/out/service/utils/dynamic-code-list/dynamic-code-list.js +4 -4
- package/out/ui-logic/ui-logic-node/end-node/end-node.d.ts.map +1 -1
- package/out/ui-logic/ui-logic-node/end-node/end-node.js +4 -0
- package/out/utils/wf-helper/wf-helper.js +2 -2
- package/package.json +5 -5
- package/src/controller/common/control/md-control.controller.ts +9 -0
- package/src/controller/control/data-view/data-view.controller.ts +152 -4
- package/src/controller/control/exp-bar/exp-bar.controller.ts +5 -1
- package/src/controller/control/form/edit-form/edit-form.controller.ts +9 -0
- package/src/controller/control/form/form-detail/form-item/form-item.controller.ts +13 -67
- package/src/controller/control/form/search-form/search-form.controller.ts +9 -0
- package/src/controller/control/grid/grid/grid-row.state.ts +2 -0
- package/src/controller/control/grid/grid/grid.controller.ts +69 -18
- package/src/controller/control/kanban/kanban.controller.ts +1 -98
- package/src/controller/control/panel/panel/panel-item.controller.ts +105 -5
- package/src/controller/control/panel/panel/panel.controller.ts +17 -1
- package/src/controller/control/tab-exp-panel/tab-exp-panel.controller.ts +45 -0
- package/src/controller/control/toolbar/toolbar.controllerr.ts +40 -24
- package/src/controller/utils/index.ts +1 -0
- package/src/controller/utils/value-default/value-default.ts +110 -0
- package/src/de-logic/de-logic-node/end-node/end-node.ts +6 -0
- package/src/engine/md-view.engine.ts +8 -0
- package/src/interface/controller/controller/control/panel-item/i-panel-item.controller.ts +2 -2
- package/src/interface/controller/state/control/i-control.state.ts +8 -0
- package/src/interface/controller/state/control/i-data-view-control.state.ts +10 -1
- package/src/interface/controller/state/control/i-grid.state.ts +8 -0
- package/src/interface/controller/state/control/i-kanban.state.ts +0 -9
- package/src/interface/controller/state/control/i-md-control.state.ts +16 -0
- package/src/interface/controller/state/control/i-tab-exp-panel.state.ts +9 -0
- package/src/logic-scheduler/trigger/item-dyna-logic-trigger.ts +5 -1
- package/src/model/layout/layout.ts +16 -2
- package/src/service/service/entity/method/method.ts +5 -2
- package/src/service/utils/dynamic-code-list/dynamic-code-list.ts +4 -4
- package/src/ui-logic/ui-logic-node/end-node/end-node.ts +6 -0
- package/src/utils/wf-helper/wf-helper.ts +2 -2
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
IMDControlGroupState,
|
|
14
14
|
CodeListItem,
|
|
15
15
|
} from '../../../interface';
|
|
16
|
+
import { ControlVO } from '../../../service';
|
|
16
17
|
import { UIActionUtil } from '../../../ui-action';
|
|
17
18
|
import { MDControlController } from '../../common';
|
|
18
19
|
import { ButtonContainerState, UIActionButtonState } from '../../utils';
|
|
@@ -42,6 +43,17 @@ export class DataViewControlController<
|
|
|
42
43
|
*/
|
|
43
44
|
groupCodeListItems?: readonly CodeListItem[];
|
|
44
45
|
|
|
46
|
+
/**
|
|
47
|
+
* 是否允许新建
|
|
48
|
+
* @author lxm
|
|
49
|
+
* @date 2023-09-11 04:05:25
|
|
50
|
+
* @readonly
|
|
51
|
+
* @type {boolean}
|
|
52
|
+
*/
|
|
53
|
+
get enableNew(): boolean {
|
|
54
|
+
return this.model.enableCardNew === true;
|
|
55
|
+
}
|
|
56
|
+
|
|
45
57
|
/**
|
|
46
58
|
* 初始化State
|
|
47
59
|
*
|
|
@@ -52,6 +64,7 @@ export class DataViewControlController<
|
|
|
52
64
|
super.initState();
|
|
53
65
|
this.state.noSort = this.model.noSort === true;
|
|
54
66
|
this.state.size = this.model.pagingSize || 20;
|
|
67
|
+
this.state.singleSelect = this.model.singleSelect === true;
|
|
55
68
|
}
|
|
56
69
|
|
|
57
70
|
/**
|
|
@@ -78,6 +91,97 @@ export class DataViewControlController<
|
|
|
78
91
|
await this.service.init(this.context);
|
|
79
92
|
}
|
|
80
93
|
|
|
94
|
+
/**
|
|
95
|
+
* 初始化分组右侧界面行为按钮的状态
|
|
96
|
+
*
|
|
97
|
+
* @author chitanda
|
|
98
|
+
* @date 2023-08-02 17:08:04
|
|
99
|
+
* @return {*} {Promise<void>}
|
|
100
|
+
*/
|
|
101
|
+
async initGroupActionStates(): Promise<void> {
|
|
102
|
+
const { groupUIActionGroup } = this.model;
|
|
103
|
+
if (!groupUIActionGroup?.uiactionGroupDetails?.length) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
this.state.groups.forEach(async group => {
|
|
107
|
+
const containerState = new ButtonContainerState();
|
|
108
|
+
groupUIActionGroup.uiactionGroupDetails!.forEach(detail => {
|
|
109
|
+
const actionid = detail.uiactionId;
|
|
110
|
+
if (actionid) {
|
|
111
|
+
const buttonState = new UIActionButtonState(
|
|
112
|
+
detail.id!,
|
|
113
|
+
this.context.srfappid!,
|
|
114
|
+
actionid,
|
|
115
|
+
);
|
|
116
|
+
containerState.addState(detail.id!, buttonState);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
await containerState.update();
|
|
120
|
+
group.groupActionGroupState = containerState;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* 行单击事件
|
|
126
|
+
*
|
|
127
|
+
* @author lxm
|
|
128
|
+
* @date 2022-08-18 22:08:16
|
|
129
|
+
* @param {IData} data 选中的单条数据
|
|
130
|
+
*/
|
|
131
|
+
async onRowClick(data: IData): Promise<void> {
|
|
132
|
+
super.onRowClick(data);
|
|
133
|
+
const { groupAppDEFieldId } = this.model;
|
|
134
|
+
if (groupAppDEFieldId) {
|
|
135
|
+
// 根据selectedData填充分组的选中数据
|
|
136
|
+
this.state.groups.forEach(group => {
|
|
137
|
+
group.selectedData = [];
|
|
138
|
+
});
|
|
139
|
+
this.state.selectedData.forEach(select => {
|
|
140
|
+
const groupVal = select[groupAppDEFieldId];
|
|
141
|
+
const selectGroup = this.state.groups.find(
|
|
142
|
+
group => group.key === groupVal,
|
|
143
|
+
);
|
|
144
|
+
if (selectGroup) {
|
|
145
|
+
selectGroup.selectedData!.push(select);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
// 根据分组选中的数据更新分组的按钮状态
|
|
149
|
+
if (this.state.singleSelect) {
|
|
150
|
+
// 单选情况下只有点击的分组的按钮会激活
|
|
151
|
+
this.state.groups.forEach(group => {
|
|
152
|
+
let tempData = data;
|
|
153
|
+
if (group.selectedData!.indexOf(tempData) !== -1) {
|
|
154
|
+
if (tempData && tempData instanceof ControlVO) {
|
|
155
|
+
tempData = tempData.getOrigin();
|
|
156
|
+
}
|
|
157
|
+
if (tempData) {
|
|
158
|
+
group.groupActionGroupState!.update(
|
|
159
|
+
tempData,
|
|
160
|
+
this.model.appDataEntityId!,
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
} else {
|
|
164
|
+
group.groupActionGroupState!.update(
|
|
165
|
+
undefined,
|
|
166
|
+
this.model.appDataEntityId!,
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
} else {
|
|
171
|
+
// 多选情况下可能有多组分组按钮会激活
|
|
172
|
+
const actionGroup = this.state.groups.find(group => {
|
|
173
|
+
return group.children.indexOf(data) !== -1;
|
|
174
|
+
});
|
|
175
|
+
if (actionGroup) {
|
|
176
|
+
actionGroup.groupActionGroupState!.update(
|
|
177
|
+
actionGroup.selectedData![0],
|
|
178
|
+
this.model.appDataEntityId!,
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
81
185
|
/**
|
|
82
186
|
* 加载更多
|
|
83
187
|
*
|
|
@@ -91,7 +195,9 @@ export class DataViewControlController<
|
|
|
91
195
|
}
|
|
92
196
|
|
|
93
197
|
async afterLoad(args: MDCtrlLoadParams, items: IData[]): Promise<IData[]> {
|
|
198
|
+
await this.initGroupCodeListItems();
|
|
94
199
|
await this.handleDataGroup();
|
|
200
|
+
await this.initGroupActionStates();
|
|
95
201
|
return items;
|
|
96
202
|
}
|
|
97
203
|
|
|
@@ -235,7 +341,7 @@ export class DataViewControlController<
|
|
|
235
341
|
protected async initGroupCodeListItems(): Promise<void> {
|
|
236
342
|
const { groupCodeListId } = this.model;
|
|
237
343
|
if (!groupCodeListId) {
|
|
238
|
-
|
|
344
|
+
return;
|
|
239
345
|
}
|
|
240
346
|
const app = ibiz.hub.getApp(this.context.srfappid);
|
|
241
347
|
this.groupCodeListItems = await app.codeList.get(
|
|
@@ -251,9 +357,9 @@ export class DataViewControlController<
|
|
|
251
357
|
* @memberof DataViewControlController
|
|
252
358
|
*/
|
|
253
359
|
async handleCodeListGroup(): Promise<void> {
|
|
254
|
-
const { groupAppDEFieldId } = this.model;
|
|
255
|
-
if (!
|
|
256
|
-
|
|
360
|
+
const { groupAppDEFieldId, groupCodeListId } = this.model;
|
|
361
|
+
if (!groupCodeListId) {
|
|
362
|
+
throw new RuntimeModelError(this.model, '分组代码表没有配置');
|
|
257
363
|
}
|
|
258
364
|
const { items } = this.state;
|
|
259
365
|
const groupMap: Map<string | number, IData[]> = new Map();
|
|
@@ -306,4 +412,46 @@ export class DataViewControlController<
|
|
|
306
412
|
}
|
|
307
413
|
}
|
|
308
414
|
}
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* 点击新建
|
|
418
|
+
* @author lxm
|
|
419
|
+
* @date 2023-09-11 07:22:33
|
|
420
|
+
* @param {MouseEvent} event
|
|
421
|
+
* @param {(string | number)} group 分组标识
|
|
422
|
+
*/
|
|
423
|
+
onClickNew(event: MouseEvent, group: string | number): void {
|
|
424
|
+
const params = { ...this.params, srfgroup: group };
|
|
425
|
+
UIActionUtil.execAndResolved('new', {
|
|
426
|
+
context: this.context,
|
|
427
|
+
params,
|
|
428
|
+
data: [],
|
|
429
|
+
view: this.view,
|
|
430
|
+
event,
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* 分组工具栏点击处理回调
|
|
436
|
+
* @author lxm
|
|
437
|
+
* @date 2023-09-11 04:48:06
|
|
438
|
+
* @param {IUIActionGroupDetail} detail
|
|
439
|
+
* @param {MouseEvent} event
|
|
440
|
+
* @return {*} {Promise<void>}
|
|
441
|
+
*/
|
|
442
|
+
async onGroupToolbarClick(
|
|
443
|
+
detail: IUIActionGroupDetail,
|
|
444
|
+
event: MouseEvent,
|
|
445
|
+
group: IMDControlGroupState,
|
|
446
|
+
): Promise<void> {
|
|
447
|
+
const actionId = detail.uiactionId;
|
|
448
|
+
const params = { ...this.params, srfgroup: group.key };
|
|
449
|
+
await UIActionUtil.execAndResolved(actionId!, {
|
|
450
|
+
context: this.context,
|
|
451
|
+
params,
|
|
452
|
+
data: group.selectedData || [],
|
|
453
|
+
view: this.view,
|
|
454
|
+
event,
|
|
455
|
+
});
|
|
456
|
+
}
|
|
309
457
|
}
|
|
@@ -223,6 +223,11 @@ export class ExpBarControlController<
|
|
|
223
223
|
);
|
|
224
224
|
});
|
|
225
225
|
}
|
|
226
|
+
|
|
227
|
+
// 如果外面没有配置默认不加载的话,默认部件自己加载
|
|
228
|
+
if (this.state.loadDefault) {
|
|
229
|
+
this.load();
|
|
230
|
+
}
|
|
226
231
|
}
|
|
227
232
|
|
|
228
233
|
/**
|
|
@@ -261,7 +266,6 @@ export class ExpBarControlController<
|
|
|
261
266
|
const routeAndHasSub =
|
|
262
267
|
this.routeDepth &&
|
|
263
268
|
window.location.hash.split('/').length > this.routeDepth * 2 + 2;
|
|
264
|
-
console.log('routeAndHasSub', routeAndHasSub);
|
|
265
269
|
|
|
266
270
|
if (routeAndHasSub) {
|
|
267
271
|
if (selectItem) {
|
|
@@ -60,6 +60,15 @@ export class EditFormController
|
|
|
60
60
|
}) as () => Promise<void>;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
protected async onMounted(): Promise<void> {
|
|
64
|
+
await super.onMounted();
|
|
65
|
+
|
|
66
|
+
// 如果外面没有配置默认不加载的话,默认部件自己加载
|
|
67
|
+
if (this.state.loadDefault) {
|
|
68
|
+
this.load();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
63
72
|
/**
|
|
64
73
|
* 加载草稿行为
|
|
65
74
|
* @author lxm
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
/* eslint-disable no-param-reassign */
|
|
2
2
|
import { IDEFormItem, IValueItemEditor } from '@ibiz/model-core';
|
|
3
3
|
import Schema from 'async-validator';
|
|
4
|
-
import {
|
|
5
|
-
import { ModelError, RuntimeError } from '@ibiz-template/core';
|
|
6
|
-
import dayjs from 'dayjs';
|
|
4
|
+
import { isNilOrEmpty } from 'qx-util';
|
|
7
5
|
import { EditFormController } from '../../edit-form';
|
|
8
6
|
import { FormController } from '../../form/form.controller';
|
|
9
7
|
import { FormDetailController } from '../form-detail/form-detail.controller';
|
|
@@ -18,7 +16,7 @@ import { getEditorProvider } from '../../../../../register';
|
|
|
18
16
|
import { Srfuf } from '../../../../../service';
|
|
19
17
|
import { filterValueRules } from '../../../../../utils';
|
|
20
18
|
import { FormNotifyState } from '../../../../constant';
|
|
21
|
-
import { generateRules } from '../../../../utils';
|
|
19
|
+
import { generateRules, getDefaultValue } from '../../../../utils';
|
|
22
20
|
|
|
23
21
|
export class FormItemController
|
|
24
22
|
extends FormDetailController<IDEFormItem>
|
|
@@ -344,70 +342,18 @@ export class FormItemController
|
|
|
344
342
|
const { createDVT, createDV, updateDVT, updateDV } = this.model;
|
|
345
343
|
const valueType = isCreate ? createDVT : updateDVT;
|
|
346
344
|
const defaultValue = isCreate ? createDV : updateDV;
|
|
347
|
-
// 置空
|
|
348
|
-
if (valueType === 'RESET') {
|
|
349
|
-
data[this.name] = null;
|
|
350
|
-
return;
|
|
351
|
-
}
|
|
352
345
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
if (
|
|
363
|
-
data[this.name] =
|
|
364
|
-
return;
|
|
365
|
-
}
|
|
366
|
-
switch (valueType) {
|
|
367
|
-
// 当前应用数据,优先取视图参数,视图参数没有取上下文
|
|
368
|
-
case 'APPDATA':
|
|
369
|
-
if (Object.prototype.hasOwnProperty.call(this.params, defaultValue!)) {
|
|
370
|
-
data[this.name] = this.params[defaultValue!];
|
|
371
|
-
}
|
|
372
|
-
if (Object.prototype.hasOwnProperty.call(this.context, defaultValue!)) {
|
|
373
|
-
data[this.name] = this.context[defaultValue!];
|
|
374
|
-
}
|
|
375
|
-
break;
|
|
376
|
-
// 当前操作用户(名称)
|
|
377
|
-
case 'OPERATORNAME':
|
|
378
|
-
data[this.name] = this.context.srfusername;
|
|
379
|
-
break;
|
|
380
|
-
// 当前操作用户(编号)
|
|
381
|
-
case 'OPERATOR':
|
|
382
|
-
data[this.name] = this.context.srfuserid;
|
|
383
|
-
break;
|
|
384
|
-
// 当前时间
|
|
385
|
-
case 'CURTIME':
|
|
386
|
-
data[this.name] = dayjs().format(this.model.valueFormat);
|
|
387
|
-
break;
|
|
388
|
-
// 数据对象属性
|
|
389
|
-
case 'PARAM':
|
|
390
|
-
data[this.name] = this.data[defaultValue!];
|
|
391
|
-
break;
|
|
392
|
-
case 'SESSION': // 用户全局对象
|
|
393
|
-
case 'APPLICATION': // 系统数据对象
|
|
394
|
-
// 取appData里的上下文
|
|
395
|
-
if (!ibiz.appData?.context) {
|
|
396
|
-
throw new RuntimeError('appdata.context不存在');
|
|
397
|
-
}
|
|
398
|
-
data[this.name] = ibiz.appData.context[defaultValue!];
|
|
399
|
-
break;
|
|
400
|
-
// 网页请求用视图参数
|
|
401
|
-
case 'CONTEXT':
|
|
402
|
-
data[this.name] = this.params[defaultValue!];
|
|
403
|
-
break;
|
|
404
|
-
// 唯一编码
|
|
405
|
-
case 'UNIQUEID':
|
|
406
|
-
data[this.name] = createUUID();
|
|
407
|
-
break;
|
|
408
|
-
default:
|
|
409
|
-
// 未支持类型: SESSION:用户全局对象、 APPLICATION:系统全局对象、 CONTEXT:网页请求。这些应该是后台的模式,前台暂不处理
|
|
410
|
-
throw new ModelError(this.model, `默认值类型[${valueType}]未支持`);
|
|
346
|
+
const defaultVal = getDefaultValue(
|
|
347
|
+
{
|
|
348
|
+
name: this.name,
|
|
349
|
+
valueType,
|
|
350
|
+
defaultValue,
|
|
351
|
+
valueFormat: this.model.valueFormat,
|
|
352
|
+
},
|
|
353
|
+
{ data, context: this.context, params: this.params },
|
|
354
|
+
);
|
|
355
|
+
if (defaultVal !== undefined) {
|
|
356
|
+
data[this.name] = defaultVal;
|
|
411
357
|
}
|
|
412
358
|
}
|
|
413
359
|
}
|
|
@@ -41,6 +41,15 @@ export class SearchFormController
|
|
|
41
41
|
await this.load();
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
protected async onMounted(): Promise<void> {
|
|
45
|
+
await super.onMounted();
|
|
46
|
+
|
|
47
|
+
// 如果外面没有配置默认不加载的话,默认部件自己加载
|
|
48
|
+
if (this.state.loadDefault) {
|
|
49
|
+
this.load();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
44
53
|
/**
|
|
45
54
|
* 加载草稿
|
|
46
55
|
*
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
awaitTimeout,
|
|
4
4
|
debounceAndAsyncMerge,
|
|
5
5
|
HttpResponse,
|
|
6
|
+
mergeDefaultInLeft,
|
|
6
7
|
recursiveIterate,
|
|
7
8
|
RuntimeError,
|
|
8
9
|
RuntimeModelError,
|
|
@@ -30,7 +31,7 @@ import { getGridColumnProvider } from '../../../../register';
|
|
|
30
31
|
import { ControlVO, Srfuf } from '../../../../service';
|
|
31
32
|
import { MDControlController } from '../../../common';
|
|
32
33
|
import { GridNotifyState } from '../../../constant';
|
|
33
|
-
import { isValueChange } from '../../../utils';
|
|
34
|
+
import { getDefaultValue, isValueChange } from '../../../utils';
|
|
34
35
|
import { ScriptFactory } from '../../../../utils';
|
|
35
36
|
|
|
36
37
|
/**
|
|
@@ -431,9 +432,13 @@ export class GridController
|
|
|
431
432
|
throw new RuntimeError('请先完成当前行编辑中的行的操作');
|
|
432
433
|
}
|
|
433
434
|
|
|
435
|
+
const queryParams = { ...this.params };
|
|
436
|
+
const defaultData = this.calcDefaultValue({}, true); // 新建默认值
|
|
437
|
+
Object.assign(queryParams, defaultData);
|
|
438
|
+
|
|
434
439
|
let res;
|
|
435
440
|
try {
|
|
436
|
-
res = await this.service.getDraft(this.context,
|
|
441
|
+
res = await this.service.getDraft(this.context, queryParams);
|
|
437
442
|
} catch (error) {
|
|
438
443
|
this.actionNotification('GETDRAFTERROR', {
|
|
439
444
|
error: error as Error,
|
|
@@ -441,13 +446,17 @@ export class GridController
|
|
|
441
446
|
throw error;
|
|
442
447
|
}
|
|
443
448
|
|
|
449
|
+
const draftData = res.data;
|
|
450
|
+
// 处理后台导致的新建默认值丢失
|
|
451
|
+
mergeDefaultInLeft(draftData, defaultData);
|
|
452
|
+
|
|
444
453
|
// 加载完后续处理
|
|
445
|
-
this.state.items.unshift(
|
|
446
|
-
const newRow = new GridRowState(
|
|
454
|
+
this.state.items.unshift(draftData);
|
|
455
|
+
const newRow = new GridRowState(draftData, this);
|
|
447
456
|
this.state.rows.unshift(newRow);
|
|
448
457
|
this.gridStateNotify(newRow, GridNotifyState.DRAFT);
|
|
449
458
|
this.switchRowEdit(this.state.rows[0], true);
|
|
450
|
-
this.actionNotification('GETDRAFTSUCCESS', { data:
|
|
459
|
+
this.actionNotification('GETDRAFTSUCCESS', { data: draftData });
|
|
451
460
|
}
|
|
452
461
|
|
|
453
462
|
/**
|
|
@@ -755,27 +764,38 @@ export class GridController
|
|
|
755
764
|
if (row.showRowEdit === toState) {
|
|
756
765
|
return;
|
|
757
766
|
}
|
|
767
|
+
|
|
758
768
|
if (toState === false) {
|
|
759
|
-
//
|
|
769
|
+
// * 处理关闭行编辑
|
|
760
770
|
if (isSave) {
|
|
771
|
+
// 校验并保存
|
|
761
772
|
await this.save(row.data);
|
|
762
|
-
} else {
|
|
763
|
-
//
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
773
|
+
} else if (row.data.srfuf === Srfuf.CREATE) {
|
|
774
|
+
// 新建的行取消时删除这一行的数据
|
|
775
|
+
row.showRowEdit = false;
|
|
776
|
+
this.evt.emit('onRowEditChange', { row });
|
|
777
|
+
return this.remove({ data: [row.data], silent: true });
|
|
778
|
+
} else if (row.cacheData) {
|
|
779
|
+
// 取消的时候,还原编辑前的数据
|
|
780
|
+
row.data = row.cacheData;
|
|
781
|
+
delete row.cacheData;
|
|
770
782
|
}
|
|
771
|
-
}
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
if (toState === true) {
|
|
783
|
+
} else {
|
|
784
|
+
// * 处理显示行编辑
|
|
785
|
+
// 如果已经有一行处于行编辑了,不开起另一行。
|
|
775
786
|
const editingRow = this.state.rows.find(item => item.showRowEdit);
|
|
776
787
|
if (editingRow) {
|
|
777
788
|
throw new RuntimeError('同时只能有一行开启行编辑');
|
|
778
789
|
}
|
|
790
|
+
|
|
791
|
+
if (row.data.srfuf === Srfuf.UPDATE) {
|
|
792
|
+
// 打开时先缓存一下
|
|
793
|
+
row.cacheData = clone(row.data);
|
|
794
|
+
// 填充更新默认值
|
|
795
|
+
|
|
796
|
+
const defaultVal = this.calcDefaultValue(row.data, false);
|
|
797
|
+
Object.assign(row.data, defaultVal);
|
|
798
|
+
}
|
|
779
799
|
}
|
|
780
800
|
|
|
781
801
|
// 修改行的编辑状态和编辑列的编辑状态。
|
|
@@ -988,4 +1008,35 @@ export class GridController
|
|
|
988
1008
|
autoWidth: true, // 单元格是否自适应
|
|
989
1009
|
});
|
|
990
1010
|
}
|
|
1011
|
+
|
|
1012
|
+
/**
|
|
1013
|
+
* 计算默认值并返回一个对象,对象里的属性就是要填充的默认值
|
|
1014
|
+
* 没有的属性就是不需要填充默认值的属性
|
|
1015
|
+
* @author lxm
|
|
1016
|
+
* @date 2023-09-18 04:01:06
|
|
1017
|
+
* @param {IData} data
|
|
1018
|
+
* @param {boolean} isCreate
|
|
1019
|
+
* @return {*} {IData}
|
|
1020
|
+
*/
|
|
1021
|
+
calcDefaultValue(data: IData, isCreate: boolean): IData {
|
|
1022
|
+
const result: IData = {};
|
|
1023
|
+
Object.values(this.editColumns).forEach(c => {
|
|
1024
|
+
const { createDV, createDVT, updateDV, updateDVT } = c.editItem;
|
|
1025
|
+
const valueType = isCreate ? createDVT : updateDVT;
|
|
1026
|
+
const defaultValue = isCreate ? createDV : updateDV;
|
|
1027
|
+
const defaultVal = getDefaultValue(
|
|
1028
|
+
{
|
|
1029
|
+
name: c.fieldName,
|
|
1030
|
+
valueType,
|
|
1031
|
+
defaultValue,
|
|
1032
|
+
valueFormat: c.valueFormat,
|
|
1033
|
+
},
|
|
1034
|
+
{ data, context: this.context, params: this.params },
|
|
1035
|
+
);
|
|
1036
|
+
if (defaultVal !== undefined) {
|
|
1037
|
+
result[c.fieldName] = defaultVal;
|
|
1038
|
+
}
|
|
1039
|
+
});
|
|
1040
|
+
return result;
|
|
1041
|
+
}
|
|
991
1042
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RuntimeError, RuntimeModelError } from '@ibiz-template/core';
|
|
2
|
-
import { IDEKanban
|
|
2
|
+
import { IDEKanban } from '@ibiz/model-core';
|
|
3
3
|
import { isNil } from 'ramda';
|
|
4
4
|
import {
|
|
5
5
|
IDragChangeInfo,
|
|
@@ -10,8 +10,6 @@ import {
|
|
|
10
10
|
} from '../../../interface';
|
|
11
11
|
import { calcDeCodeNameById } from '../../../model';
|
|
12
12
|
import { ControlVO } from '../../../service';
|
|
13
|
-
import { UIActionUtil } from '../../../ui-action';
|
|
14
|
-
import { ButtonContainerState, UIActionButtonState } from '../../utils';
|
|
15
13
|
import { DataViewControlController } from '../data-view';
|
|
16
14
|
import { KanbanService } from './kanban.service';
|
|
17
15
|
|
|
@@ -49,17 +47,6 @@ export class KanbanController
|
|
|
49
47
|
return this.model.enableCardEditGroup === true;
|
|
50
48
|
}
|
|
51
49
|
|
|
52
|
-
/**
|
|
53
|
-
* 是否允许新建
|
|
54
|
-
* @author lxm
|
|
55
|
-
* @date 2023-09-11 04:05:25
|
|
56
|
-
* @readonly
|
|
57
|
-
* @type {boolean}
|
|
58
|
-
*/
|
|
59
|
-
get enableNew(): boolean {
|
|
60
|
-
return this.model.enableCardNew === true;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
50
|
protected async initControlService(): Promise<void> {
|
|
64
51
|
this.service = new KanbanService(this.model);
|
|
65
52
|
await this.service.init(this.context);
|
|
@@ -82,48 +69,6 @@ export class KanbanController
|
|
|
82
69
|
*/
|
|
83
70
|
protected async onCreated(): Promise<void> {
|
|
84
71
|
await super.onCreated();
|
|
85
|
-
await this.initGroupActionStates();
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* 初始化分组右侧界面行为按钮的状态
|
|
90
|
-
*
|
|
91
|
-
* @author chitanda
|
|
92
|
-
* @date 2023-08-02 17:08:04
|
|
93
|
-
* @return {*} {Promise<void>}
|
|
94
|
-
*/
|
|
95
|
-
async initGroupActionStates(): Promise<void> {
|
|
96
|
-
const { groupUIActionGroup } = this.model;
|
|
97
|
-
if (!groupUIActionGroup?.uiactionGroupDetails?.length) {
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
const containerState = new ButtonContainerState();
|
|
101
|
-
groupUIActionGroup.uiactionGroupDetails.forEach(detail => {
|
|
102
|
-
const actionid = detail.uiactionId;
|
|
103
|
-
if (actionid) {
|
|
104
|
-
const buttonState = new UIActionButtonState(
|
|
105
|
-
detail.id!,
|
|
106
|
-
this.context.srfappid!,
|
|
107
|
-
actionid,
|
|
108
|
-
);
|
|
109
|
-
containerState.addState(detail.id!, buttonState);
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
await containerState.update();
|
|
113
|
-
this.state.groupActionGroupState = containerState;
|
|
114
|
-
|
|
115
|
-
this.evt.on('onSelectionChange', event => {
|
|
116
|
-
let data = event.data[0];
|
|
117
|
-
if (data && data instanceof ControlVO) {
|
|
118
|
-
data = data.getOrigin();
|
|
119
|
-
}
|
|
120
|
-
if (data) {
|
|
121
|
-
this.state.groupActionGroupState!.update(
|
|
122
|
-
data,
|
|
123
|
-
this.model.appDataEntityId!,
|
|
124
|
-
);
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
72
|
}
|
|
128
73
|
|
|
129
74
|
/**
|
|
@@ -325,46 +270,4 @@ export class KanbanController
|
|
|
325
270
|
await this.afterLoad({}, this.state.items);
|
|
326
271
|
}
|
|
327
272
|
}
|
|
328
|
-
|
|
329
|
-
/**
|
|
330
|
-
* 点击新建
|
|
331
|
-
* @author lxm
|
|
332
|
-
* @date 2023-09-11 07:22:33
|
|
333
|
-
* @param {MouseEvent} event
|
|
334
|
-
* @param {(string | number)} group 分组标识
|
|
335
|
-
*/
|
|
336
|
-
onClickNew(event: MouseEvent, group: string | number): void {
|
|
337
|
-
const params = { ...this.params, srfgroup: group };
|
|
338
|
-
UIActionUtil.execAndResolved('new', {
|
|
339
|
-
context: this.context,
|
|
340
|
-
params,
|
|
341
|
-
data: [],
|
|
342
|
-
view: this.view,
|
|
343
|
-
event,
|
|
344
|
-
});
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
/**
|
|
348
|
-
* 分组工具栏点击处理回调
|
|
349
|
-
* @author lxm
|
|
350
|
-
* @date 2023-09-11 04:48:06
|
|
351
|
-
* @param {IUIActionGroupDetail} detail
|
|
352
|
-
* @param {MouseEvent} event
|
|
353
|
-
* @return {*} {Promise<void>}
|
|
354
|
-
*/
|
|
355
|
-
async onGroupToolbarClick(
|
|
356
|
-
detail: IUIActionGroupDetail,
|
|
357
|
-
event: MouseEvent,
|
|
358
|
-
group: string | number,
|
|
359
|
-
): Promise<void> {
|
|
360
|
-
const actionId = detail.uiactionId;
|
|
361
|
-
const params = { ...this.params, srfgroup: group };
|
|
362
|
-
await UIActionUtil.execAndResolved(actionId!, {
|
|
363
|
-
context: this.context,
|
|
364
|
-
params,
|
|
365
|
-
data: this.state.selectedData,
|
|
366
|
-
view: this.view,
|
|
367
|
-
event,
|
|
368
|
-
});
|
|
369
|
-
}
|
|
370
273
|
}
|