@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.
Files changed (103) hide show
  1. package/dist/index.esm.js +654 -355
  2. package/dist/index.system.min.js +1 -1
  3. package/dist/index.system.min.js.map +1 -1
  4. package/out/controller/common/control/md-control.controller.d.ts +1 -0
  5. package/out/controller/common/control/md-control.controller.d.ts.map +1 -1
  6. package/out/controller/common/control/md-control.controller.js +7 -0
  7. package/out/controller/control/data-view/data-view.controller.d.ts +42 -1
  8. package/out/controller/control/data-view/data-view.controller.d.ts.map +1 -1
  9. package/out/controller/control/data-view/data-view.controller.js +131 -4
  10. package/out/controller/control/exp-bar/exp-bar.controller.d.ts.map +1 -1
  11. package/out/controller/control/exp-bar/exp-bar.controller.js +4 -1
  12. package/out/controller/control/form/edit-form/edit-form.controller.d.ts +1 -0
  13. package/out/controller/control/form/edit-form/edit-form.controller.d.ts.map +1 -1
  14. package/out/controller/control/form/edit-form/edit-form.controller.js +7 -0
  15. package/out/controller/control/form/form-detail/form-item/form-item.controller.d.ts.map +1 -1
  16. package/out/controller/control/form/form-detail/form-item/form-item.controller.js +10 -68
  17. package/out/controller/control/form/search-form/search-form.controller.d.ts +1 -0
  18. package/out/controller/control/form/search-form/search-form.controller.d.ts.map +1 -1
  19. package/out/controller/control/form/search-form/search-form.controller.js +7 -0
  20. package/out/controller/control/grid/grid/grid-row.state.d.ts +1 -0
  21. package/out/controller/control/grid/grid/grid-row.state.d.ts.map +1 -1
  22. package/out/controller/control/grid/grid/grid.controller.d.ts +10 -0
  23. package/out/controller/control/grid/grid/grid.controller.d.ts.map +1 -1
  24. package/out/controller/control/grid/grid/grid.controller.js +61 -17
  25. package/out/controller/control/kanban/kanban.controller.d.ts +1 -34
  26. package/out/controller/control/kanban/kanban.controller.d.ts.map +1 -1
  27. package/out/controller/control/kanban/kanban.controller.js +0 -83
  28. package/out/controller/control/panel/panel/panel-item.controller.d.ts +34 -2
  29. package/out/controller/control/panel/panel/panel-item.controller.d.ts.map +1 -1
  30. package/out/controller/control/panel/panel/panel-item.controller.js +84 -5
  31. package/out/controller/control/panel/panel/panel.controller.d.ts +2 -1
  32. package/out/controller/control/panel/panel/panel.controller.d.ts.map +1 -1
  33. package/out/controller/control/panel/panel/panel.controller.js +11 -1
  34. package/out/controller/control/tab-exp-panel/tab-exp-panel.controller.d.ts +20 -0
  35. package/out/controller/control/tab-exp-panel/tab-exp-panel.controller.d.ts.map +1 -1
  36. package/out/controller/control/tab-exp-panel/tab-exp-panel.controller.js +45 -0
  37. package/out/controller/control/toolbar/toolbar.controllerr.d.ts.map +1 -1
  38. package/out/controller/control/toolbar/toolbar.controllerr.js +33 -21
  39. package/out/controller/utils/index.d.ts +1 -0
  40. package/out/controller/utils/index.d.ts.map +1 -1
  41. package/out/controller/utils/index.js +1 -0
  42. package/out/controller/utils/value-default/value-default.d.ts +37 -0
  43. package/out/controller/utils/value-default/value-default.d.ts.map +1 -0
  44. package/out/controller/utils/value-default/value-default.js +65 -0
  45. package/out/de-logic/de-logic-node/end-node/end-node.d.ts.map +1 -1
  46. package/out/de-logic/de-logic-node/end-node/end-node.js +4 -0
  47. package/out/engine/md-view.engine.d.ts.map +1 -1
  48. package/out/engine/md-view.engine.js +7 -0
  49. package/out/interface/controller/controller/control/panel-item/i-panel-item.controller.d.ts +2 -2
  50. package/out/interface/controller/controller/control/panel-item/i-panel-item.controller.d.ts.map +1 -1
  51. package/out/interface/controller/state/control/i-control.state.d.ts +7 -0
  52. package/out/interface/controller/state/control/i-control.state.d.ts.map +1 -1
  53. package/out/interface/controller/state/control/i-data-view-control.state.d.ts +8 -0
  54. package/out/interface/controller/state/control/i-data-view-control.state.d.ts.map +1 -1
  55. package/out/interface/controller/state/control/i-grid.state.d.ts +7 -0
  56. package/out/interface/controller/state/control/i-grid.state.d.ts.map +1 -1
  57. package/out/interface/controller/state/control/i-kanban.state.d.ts +0 -8
  58. package/out/interface/controller/state/control/i-kanban.state.d.ts.map +1 -1
  59. package/out/interface/controller/state/control/i-md-control.state.d.ts +14 -0
  60. package/out/interface/controller/state/control/i-md-control.state.d.ts.map +1 -1
  61. package/out/interface/controller/state/control/i-tab-exp-panel.state.d.ts +8 -0
  62. package/out/interface/controller/state/control/i-tab-exp-panel.state.d.ts.map +1 -1
  63. package/out/logic-scheduler/trigger/item-dyna-logic-trigger.d.ts.map +1 -1
  64. package/out/logic-scheduler/trigger/item-dyna-logic-trigger.js +4 -1
  65. package/out/model/layout/layout.d.ts.map +1 -1
  66. package/out/model/layout/layout.js +17 -1
  67. package/out/service/service/entity/method/method.d.ts.map +1 -1
  68. package/out/service/service/entity/method/method.js +2 -2
  69. package/out/service/utils/dynamic-code-list/dynamic-code-list.js +4 -4
  70. package/out/ui-logic/ui-logic-node/end-node/end-node.d.ts.map +1 -1
  71. package/out/ui-logic/ui-logic-node/end-node/end-node.js +4 -0
  72. package/out/utils/wf-helper/wf-helper.js +2 -2
  73. package/package.json +5 -5
  74. package/src/controller/common/control/md-control.controller.ts +9 -0
  75. package/src/controller/control/data-view/data-view.controller.ts +152 -4
  76. package/src/controller/control/exp-bar/exp-bar.controller.ts +5 -1
  77. package/src/controller/control/form/edit-form/edit-form.controller.ts +9 -0
  78. package/src/controller/control/form/form-detail/form-item/form-item.controller.ts +13 -67
  79. package/src/controller/control/form/search-form/search-form.controller.ts +9 -0
  80. package/src/controller/control/grid/grid/grid-row.state.ts +2 -0
  81. package/src/controller/control/grid/grid/grid.controller.ts +69 -18
  82. package/src/controller/control/kanban/kanban.controller.ts +1 -98
  83. package/src/controller/control/panel/panel/panel-item.controller.ts +105 -5
  84. package/src/controller/control/panel/panel/panel.controller.ts +17 -1
  85. package/src/controller/control/tab-exp-panel/tab-exp-panel.controller.ts +45 -0
  86. package/src/controller/control/toolbar/toolbar.controllerr.ts +40 -24
  87. package/src/controller/utils/index.ts +1 -0
  88. package/src/controller/utils/value-default/value-default.ts +110 -0
  89. package/src/de-logic/de-logic-node/end-node/end-node.ts +6 -0
  90. package/src/engine/md-view.engine.ts +8 -0
  91. package/src/interface/controller/controller/control/panel-item/i-panel-item.controller.ts +2 -2
  92. package/src/interface/controller/state/control/i-control.state.ts +8 -0
  93. package/src/interface/controller/state/control/i-data-view-control.state.ts +10 -1
  94. package/src/interface/controller/state/control/i-grid.state.ts +8 -0
  95. package/src/interface/controller/state/control/i-kanban.state.ts +0 -9
  96. package/src/interface/controller/state/control/i-md-control.state.ts +16 -0
  97. package/src/interface/controller/state/control/i-tab-exp-panel.state.ts +9 -0
  98. package/src/logic-scheduler/trigger/item-dyna-logic-trigger.ts +5 -1
  99. package/src/model/layout/layout.ts +16 -2
  100. package/src/service/service/entity/method/method.ts +5 -2
  101. package/src/service/utils/dynamic-code-list/dynamic-code-list.ts +4 -4
  102. package/src/ui-logic/ui-logic-node/end-node/end-node.ts +6 -0
  103. 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
- throw new RuntimeModelError(this.model, '分组代码表没有配置');
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 (!this.groupCodeListItems) {
256
- await this.initGroupCodeListItems();
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 { createUUID, isNilOrEmpty } from 'qx-util';
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
- if (this.value) {
355
- return;
356
- }
357
- // 没有配置默认值
358
- if (isNilOrEmpty(valueType) && isNilOrEmpty(defaultValue)) {
359
- return;
360
- }
361
- // 没有配类型,配了默认值的直接赋值默认值
362
- if (!valueType && defaultValue) {
363
- data[this.name] = defaultValue;
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
  *
@@ -13,6 +13,8 @@ import { GridController } from './grid.controller';
13
13
  export class GridRowState implements IGridRowState {
14
14
  data: ControlVO;
15
15
 
16
+ cacheData?: ControlVO;
17
+
16
18
  /**
17
19
  * 错误信息集合,p是对应属性名称
18
20
  *
@@ -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, this.params);
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(res.data);
446
- const newRow = new GridRowState(res.data, this);
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: res.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
- // eslint-disable-next-line no-lonely-if
764
- if (row.data.srfuf === Srfuf.CREATE) {
765
- row.showRowEdit = false;
766
- this.evt.emit('onRowEditChange', { row });
767
- return this.remove({ data: [row.data], silent: true });
768
- }
769
- // todo 不保存的时候还原已经修改的数据
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, IUIActionGroupDetail } from '@ibiz/model-core';
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
  }