@ibiz-template/runtime 0.1.23 → 0.1.24

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 (51) hide show
  1. package/dist/index.esm.js +125 -92
  2. package/dist/index.system.min.js +1 -1
  3. package/dist/index.system.min.js.map +1 -1
  4. package/out/command/app/app-func/app-func.js +2 -2
  5. package/out/controller/common/control/control.controller.d.ts.map +1 -1
  6. package/out/controller/common/control/control.controller.js +1 -0
  7. package/out/controller/common/control/md-control.controller.d.ts +20 -1
  8. package/out/controller/common/control/md-control.controller.d.ts.map +1 -1
  9. package/out/controller/common/control/md-control.controller.js +21 -2
  10. package/out/controller/common/editor/editor.controller.js +2 -2
  11. package/out/controller/common/view/view.controller.js +2 -2
  12. package/out/controller/control/form/edit-form/edit-form.controller.d.ts.map +1 -1
  13. package/out/controller/control/form/edit-form/edit-form.controller.js +7 -1
  14. package/out/controller/control/form/form-detail/form-druipart/form-druipart.controller.js +2 -2
  15. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.js +2 -2
  16. package/out/controller/control/pickup-view-panel/pickup-view-panel.controller.js +2 -2
  17. package/out/de-logic/de-logic.d.ts +9 -0
  18. package/out/de-logic/de-logic.d.ts.map +1 -1
  19. package/out/de-logic/de-logic.js +14 -0
  20. package/out/logic-scheduler/executor/app-ui-logic-executor.js +4 -4
  21. package/out/service/dto/method.dto.d.ts.map +1 -1
  22. package/out/service/dto/method.dto.js +4 -3
  23. package/out/service/service/entity/method/method.d.ts.map +1 -1
  24. package/out/service/service/entity/method/method.js +0 -1
  25. package/out/service/vo/control.vo.d.ts.map +1 -1
  26. package/out/service/vo/control.vo.js +1 -1
  27. package/out/ui-action/provider/ui-action-provider-base.js +2 -2
  28. package/out/utils/nav-params/calc-nav-params.js +2 -2
  29. package/out/utils/nav-params/nav-params.d.ts +11 -25
  30. package/out/utils/nav-params/nav-params.d.ts.map +1 -1
  31. package/out/utils/nav-params/nav-params.js +79 -84
  32. package/out/utils/open-redirect-view/open-redirect-view.js +2 -2
  33. package/package.json +3 -3
  34. package/src/command/app/app-func/app-func.ts +2 -2
  35. package/src/controller/common/control/control.controller.ts +1 -0
  36. package/src/controller/common/control/md-control.controller.ts +34 -3
  37. package/src/controller/common/editor/editor.controller.ts +2 -2
  38. package/src/controller/common/view/view.controller.ts +2 -2
  39. package/src/controller/control/form/edit-form/edit-form.controller.ts +11 -1
  40. package/src/controller/control/form/form-detail/form-druipart/form-druipart.controller.ts +3 -3
  41. package/src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts +2 -2
  42. package/src/controller/control/pickup-view-panel/pickup-view-panel.controller.ts +2 -2
  43. package/src/de-logic/de-logic.ts +24 -0
  44. package/src/logic-scheduler/executor/app-ui-logic-executor.ts +4 -4
  45. package/src/service/dto/method.dto.ts +3 -3
  46. package/src/service/service/entity/method/method.ts +0 -1
  47. package/src/service/vo/control.vo.ts +2 -1
  48. package/src/ui-action/provider/ui-action-provider-base.ts +4 -4
  49. package/src/utils/nav-params/calc-nav-params.ts +2 -2
  50. package/src/utils/nav-params/nav-params.ts +86 -91
  51. package/src/utils/open-redirect-view/open-redirect-view.ts +2 -2
@@ -1,5 +1,32 @@
1
1
  import { isEmpty } from 'lodash-es';
2
2
  import { isNilOrEmpty, notNilEmpty } from 'qx-util';
3
+ /**
4
+ * 把对象格式的导航参数转换成数组格式的导航参数
5
+ * @author lxm
6
+ * @date 2023-07-10 03:33:14
7
+ * @export
8
+ * @param {IData} navParams
9
+ * @return {*} {IPSNavigateParam[]}
10
+ */
11
+ export function convertObjectToNavParams(navParams) {
12
+ const result = [];
13
+ const reg = /^%(.+)%$/;
14
+ // eslint-disable-next-line guard-for-in
15
+ for (const key in navParams) {
16
+ let rawValue = true;
17
+ let value = navParams[key];
18
+ if (notNilEmpty(navParams[key]) && reg.test(navParams[key])) {
19
+ rawValue = false;
20
+ value = navParams[key].substring(1, navParams[key].length - 1);
21
+ }
22
+ result.push({
23
+ key: key.toLowerCase(),
24
+ rawValue,
25
+ value,
26
+ });
27
+ }
28
+ return result;
29
+ }
3
30
  /**
4
31
  * 转换导航数据(如导航上下文,导航视图参数)
5
32
  * - 把%xxx%,转换成origins元素里对应叫xxx的值
@@ -10,21 +37,42 @@ import { isNilOrEmpty, notNilEmpty } from 'qx-util';
10
37
  * @author lxm
11
38
  * @date 2022-08-22 11:08:18
12
39
  * @export
13
- * @param {INavigateParam[]} naviDatas 导航参数
40
+ * @param {INavigateParam[]} navParams 导航参数
14
41
  * @param {...IData[]} origins 转换数据来源集合
15
42
  */
16
- export function convertNavData(naviDatas, ...origins) {
43
+ export function convertNavData(navParams, ...origins) {
17
44
  // 如果导航参数不存在或者为空对象,返回{}
18
- if (!naviDatas || isEmpty(naviDatas)) {
45
+ if (!navParams || isEmpty(navParams)) {
19
46
  return {};
20
47
  }
21
- if (Object.prototype.toString.call(naviDatas) === '[object Array]') {
22
- return convertNavDataByArray(naviDatas, ...origins);
23
- }
24
- if (Object.prototype.toString.call(naviDatas) === '[object Object]') {
25
- return convertNavDataByObject(naviDatas, ...origins);
26
- }
27
- return {};
48
+ // 把对象形式的导航参数转换成INavigateParam[]形式
49
+ const navParamsArr = Array.isArray(navParams)
50
+ ? navParams
51
+ : convertObjectToNavParams(navParams);
52
+ return convertNavDataByArray(navParamsArr, ...origins);
53
+ }
54
+ /**
55
+ * 从origins每个元素里找到对应属性key的值
56
+ * 如果都找不到抛异常。
57
+ * @author lxm
58
+ * @date 2023-09-13 11:38:43
59
+ * @param {IData[]} origins 来源数据集合
60
+ * @param {string} key 属性标识
61
+ * @return {*} {{ find: boolean; value: unknown }} 返回find是否找到值,value为找到的值,可以是空值
62
+ */
63
+ function getVal(origins, key) {
64
+ // 找到origins里第一个有该属性的的项
65
+ const findOrigin = origins.find(item => {
66
+ if (isNilOrEmpty(item)) {
67
+ return false;
68
+ }
69
+ return (
70
+ // proxy数据判断是否能拿到值
71
+ item[key] ||
72
+ // 上下文等判断是否有这个属性,如果有且值为空,则赋该空值
73
+ Object.prototype.hasOwnProperty.call(item, key));
74
+ });
75
+ return { find: !!findOrigin, value: findOrigin === null || findOrigin === void 0 ? void 0 : findOrigin[key] };
28
76
  }
29
77
  /**
30
78
  * 通过模型中的导航数组 转换导航数据(如导航上下文,导航视图参数)
@@ -40,91 +88,38 @@ export function convertNavData(naviDatas, ...origins) {
40
88
  * @param {...IData[]} origins 转换数据来源集合
41
89
  */
42
90
  export function convertNavDataByArray(naviDatas, ...origins) {
91
+ const regex = /\$\{[^}]*\}/g; // 匹配${xxx}格式字符串
43
92
  const result = {};
44
93
  for (const naviData of naviDatas) {
45
- if (notNilEmpty(naviData.value) && !naviData.rawValue) {
46
- // 找到origins里第一个有该属性的的项
47
- const findOrigin = origins.find(item => {
48
- if (isNilOrEmpty(item)) {
49
- return false;
94
+ if (!naviData.rawValue) {
95
+ const matchArr = naviData.value.match(regex);
96
+ if (matchArr !== null) {
97
+ // 有${xxx}的找每一个xxx的值,替换原始字符串里的值,最后赋值处理过的字符串
98
+ let valueStr = naviData.value;
99
+ matchArr.forEach(key => {
100
+ // 没有${xxx}
101
+ const { find, value } = getVal(origins, key.slice(2, -1));
102
+ if (find) {
103
+ valueStr = valueStr.replace(key, `${value}`);
104
+ }
105
+ });
106
+ result[naviData.key.toLowerCase()] = valueStr;
107
+ }
108
+ else {
109
+ // 没有${xxx}
110
+ const { find, value } = getVal(origins, naviData.value);
111
+ if (find) {
112
+ result[naviData.key.toLowerCase()] = value;
50
113
  }
51
- return (
52
- // proxy数据判断是否能拿到值
53
- item[naviData.value] ||
54
- // 上下文等判断是否有这个属性,如果有且值为空,则赋该空值
55
- Object.prototype.hasOwnProperty.call(item, naviData.value));
56
- });
57
- if (findOrigin) {
58
- result[naviData.key.toLowerCase()] = findOrigin[naviData.value];
59
114
  }
60
115
  }
61
116
  else {
117
+ // 直接值,空值时赋null
62
118
  result[naviData.key.toLowerCase()] = naviData.value || null;
63
119
  }
64
120
  }
65
121
  return result;
66
122
  }
67
- /**
68
- * 通过对象 转换导航数据(如导航上下文,导航视图参数)
69
- * - 把%xxx%,转换成origins元素里对应叫xxx的值
70
- * - 按顺序查找origins的元素,且只要有xxx的属性就算找到,不管值是否为空。
71
- * - naviData里{a:%xxx%},origins里找不到xxx则返回值里不存在a属性
72
- * - naviData里非%xxx%形式的,都当成直接值原样返回,包括空值。
73
- *
74
- * @author lxm
75
- * @date 2022-08-22 11:08:18
76
- * @export
77
- * @param {IData} naviData
78
- * @param {...IData[]} origins
79
- */
80
- export function convertNavDataByObject(naviData, ...origins) {
81
- const result = {};
82
- const reg = /^%(.+)%$/;
83
- for (const key in naviData) {
84
- if (notNilEmpty(naviData[key]) && reg.test(naviData[key])) {
85
- // 获取值的属性名称
86
- const valueKey = naviData[key].substring(1, naviData[key].length - 1);
87
- // 找到origins里第一个有该属性的的项
88
- const findOrigin = origins.find(item => {
89
- return Object.prototype.hasOwnProperty.call(item, valueKey);
90
- });
91
- if (findOrigin) {
92
- result[key.toLowerCase()] = findOrigin[valueKey];
93
- }
94
- }
95
- else {
96
- result[key.toLowerCase()] = naviData[key] || null;
97
- }
98
- }
99
- return result;
100
- }
101
- /**
102
- * 把对象格式的导航参数转换成数组格式的导航参数
103
- * @author lxm
104
- * @date 2023-07-10 03:33:14
105
- * @export
106
- * @param {IData} naviData
107
- * @return {*} {IPSNavigateParam[]}
108
- */
109
- export function convertObjectToNavParams(naviData) {
110
- const result = [];
111
- const reg = /^%(.+)%$/;
112
- // eslint-disable-next-line guard-for-in
113
- for (const key in naviData) {
114
- let rawValue = true;
115
- let value = naviData[key];
116
- if (notNilEmpty(naviData[key]) && reg.test(naviData[key])) {
117
- rawValue = false;
118
- value = naviData[key].substring(1, naviData[key].length - 1);
119
- }
120
- result.push({
121
- key: key.toLowerCase(),
122
- rawValue,
123
- value,
124
- });
125
- }
126
- return result;
127
- }
128
123
  /**
129
124
  * 根据导航参数把多条数据转换成单条数据,用;分隔
130
125
  * @author lxm
@@ -83,11 +83,11 @@ export async function openDERedirectView(appView, context, params = {}, opts = {
83
83
  var _a;
84
84
  // 计算重定向视图上下文参数转换
85
85
  const navContext = appView.appViewNavContexts || [];
86
- const navContextData = convertNavData(navContext, context, params);
86
+ const navContextData = convertNavData(navContext, params, context);
87
87
  context = Object.assign(context.clone(), navContextData);
88
88
  // 计算重定向视图视图参数转换
89
89
  const navParams = appView.appViewNavParams || [];
90
- const navParamsData = convertNavData(navParams, context, params);
90
+ const navParamsData = convertNavData(navParams, params, context);
91
91
  Object.assign(params, navParamsData);
92
92
  // 重定向视图对应应用实体
93
93
  const entityId = appView.appDataEntityId;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/runtime",
3
- "version": "0.1.23",
3
+ "version": "0.1.24",
4
4
  "description": "控制器包",
5
5
  "type": "module",
6
6
  "main": "out/index.js",
@@ -29,7 +29,7 @@
29
29
  "author": "chitanda",
30
30
  "license": "MIT",
31
31
  "devDependencies": {
32
- "@ibiz-template/core": "^0.1.23",
32
+ "@ibiz-template/core": "^0.1.24",
33
33
  "@ibiz/model-core": "^0.0.16",
34
34
  "@types/path-browserify": "^1.0.0",
35
35
  "@types/qs": "^6.9.8",
@@ -57,5 +57,5 @@
57
57
  "qx-util": "^0.4.8",
58
58
  "ramda": "^0.29.0"
59
59
  },
60
- "gitHead": "7a5c053d7e48ffc3f6e38d84ef07f2aa1df007a4"
60
+ "gitHead": "b1d394ad9b4d7e81e607054c31f056e8299855b9"
61
61
  }
@@ -52,8 +52,8 @@ export class AppFuncCommand {
52
52
  // 导航参数转换
53
53
  const { navigateContexts, navigateParams, appFuncType } = appFunc;
54
54
  const _context = context.clone();
55
- Object.assign(_context, convertNavData(navigateContexts, context, params));
56
- const _params = convertNavData(navigateParams, context, params);
55
+ Object.assign(_context, convertNavData(navigateContexts, params, context));
56
+ const _params = convertNavData(navigateParams, params, context);
57
57
 
58
58
  switch (appFuncType) {
59
59
  case 'APPVIEW':
@@ -296,6 +296,7 @@ export class ControlController<
296
296
  }
297
297
 
298
298
  if (opts?.error) {
299
+ ibiz.log.error(opts.error);
299
300
  // 报错时抛错误
300
301
  throw new NoticeError(message, duration);
301
302
  } else {
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable max-classes-per-file */
2
2
  import { isElementSame, RuntimeError } from '@ibiz-template/core';
3
- import { IMDControl } from '@ibiz/model-core';
3
+ import { IAppDataEntity, IMDControl } from '@ibiz/model-core';
4
4
  import {
5
5
  IMDControlController,
6
6
  IMDControlEvent,
@@ -68,21 +68,52 @@ export class MDControlController<
68
68
  */
69
69
  protected fieldIdNameMap = new Map<string, string>();
70
70
 
71
+ /**
72
+ * 当前多数据部件对应的应用实体对象
73
+ *
74
+ * @author chitanda
75
+ * @date 2023-09-13 17:09:32
76
+ * @protected
77
+ * @type {IAppDataEntity}
78
+ */
79
+ protected dataEntity!: IAppDataEntity;
80
+
71
81
  protected async onCreated(): Promise<void> {
72
82
  await super.onCreated();
73
83
 
74
84
  // 初始化实体属性id和name的映射
75
- const dataEntity = await ibiz.hub.getAppDataEntity(
85
+ this.dataEntity = await ibiz.hub.getAppDataEntity(
76
86
  this.model.appDataEntityId!,
77
87
  );
78
- dataEntity.appDEFields?.forEach(field => {
88
+ this.dataEntity.appDEFields?.forEach(field => {
79
89
  this.fieldIdNameMap.set(field.id!, field.name!);
80
90
  });
91
+ this.onDataChange = this.onDataChange.bind(this);
92
+ ibiz.mc.command.change.on(this.onDataChange);
81
93
 
82
94
  // 设置默认排序
83
95
  this.setSort();
84
96
  }
85
97
 
98
+ protected onDestroyed(): Promise<void> {
99
+ ibiz.mc.command.change.off(this.onDataChange);
100
+ return super.onDestroyed();
101
+ }
102
+
103
+ /**
104
+ * 当数据放生变更时,若为当前应用实体数据。则多数据部件进行刷新
105
+ *
106
+ * @author chitanda
107
+ * @date 2023-09-13 17:09:04
108
+ * @protected
109
+ * @param {IData} msg
110
+ */
111
+ protected onDataChange(msg: IData): void {
112
+ if (msg.data && msg.data.srfdecodename === this.dataEntity.codeName) {
113
+ this.refresh();
114
+ }
115
+ }
116
+
86
117
  /**
87
118
  * 设置排序
88
119
  * 无参数时设置的是默认排序。
@@ -156,13 +156,13 @@ export class EditorController<T extends IEditor = IEditor>
156
156
  .model as INavigateParamContainer;
157
157
  let selfContext = {};
158
158
  if (navigateContexts && data) {
159
- selfContext = convertNavData(navigateContexts!, context, params, data);
159
+ selfContext = convertNavData(navigateContexts!, data, params, context);
160
160
  }
161
161
  const _context = Object.assign(context.clone(), selfContext);
162
162
 
163
163
  let selfParams = {};
164
164
  if (navigateParams && data) {
165
- selfParams = convertNavData(navigateParams!, context, params, data);
165
+ selfParams = convertNavData(navigateParams!, data, params, context);
166
166
  }
167
167
  const _params: IParams = { ...params, ...selfParams };
168
168
  return { context: _context, params: _params };
@@ -321,7 +321,7 @@ export class ViewController<
321
321
  const navContexts = this.model.appViewNavContexts;
322
322
  let context = {};
323
323
  if (notNilEmpty(navContexts)) {
324
- context = convertNavData(navContexts!, this.context, this.params);
324
+ context = convertNavData(navContexts!, this.params, this.context);
325
325
  }
326
326
  Object.assign(this.context, context);
327
327
 
@@ -329,7 +329,7 @@ export class ViewController<
329
329
  const navParams = this.model.appViewNavParams;
330
330
  let params = {};
331
331
  if (notNilEmpty(navParams)) {
332
- params = convertNavData(navParams!, this.context, this.params);
332
+ params = convertNavData(navParams!, this.params, this.context);
333
333
  }
334
334
  Object.assign(this.params, params);
335
335
 
@@ -186,6 +186,12 @@ export class EditFormController
186
186
  this.actionNotification(`${isCreate ? 'CREATE' : 'UPDATE'}SUCCESS`, {
187
187
  default: `${this.data.srfmajortext || ''}保存成功`,
188
188
  });
189
+ if (this.view.modal.mode === 'ROUTE') {
190
+ ibiz.mc.command.send(
191
+ this.data.$origin,
192
+ isCreate ? 'OBJECTCREATED' : 'OBJECTUPDATED',
193
+ );
194
+ }
189
195
  return this.data;
190
196
  }
191
197
 
@@ -232,6 +238,10 @@ export class EditFormController
232
238
  await this.evt.emit('onRemoveSuccess', undefined);
233
239
  this.actionNotification('REMOVESUCCESS');
234
240
 
241
+ if (this.view.modal.mode === 'ROUTE') {
242
+ ibiz.mc.command.send(this.data.$origin, 'OBJECTREMOVED');
243
+ }
244
+
235
245
  return ok;
236
246
  }
237
247
 
@@ -275,7 +285,7 @@ export class EditFormController
275
285
 
276
286
  const { appDEMethodId, defiupdateDetails, customCode, scriptCode } =
277
287
  formItemUpdate;
278
- const updateItems = defiupdateDetails!.map(item => item.id!);
288
+ const updateItems = defiupdateDetails?.map(item => item.id!);
279
289
 
280
290
  let updateData: IData; // 要修改的数据
281
291
  if (customCode && scriptCode) {
@@ -146,9 +146,9 @@ export class FormDRUIPartController extends FormDetailController<IDEFormDRUIPart
146
146
  newContext,
147
147
  convertNavData(
148
148
  navContexts!,
149
- this.form.context,
150
- this.form.params,
151
149
  this.form.data,
150
+ this.form.params,
151
+ this.form.context,
152
152
  ),
153
153
  );
154
154
  }
@@ -156,9 +156,9 @@ export class FormDRUIPartController extends FormDetailController<IDEFormDRUIPart
156
156
  // 处理导航视图参数
157
157
  const newParams = convertNavData(
158
158
  this.model.navigateParams!,
159
+ this.form.data,
159
160
  this.form.params,
160
161
  this.form.context,
161
- this.form.data,
162
162
  );
163
163
 
164
164
  if (!this.state.viewComponentKey) {
@@ -90,12 +90,12 @@ export class GridFieldColumnController extends GridColumnController<IDEGridField
90
90
  const { navigateContexts, navigateParams } = parseUserParams(userParam);
91
91
  let selfContext = {};
92
92
  if (navigateContexts && data) {
93
- selfContext = convertNavData(navigateContexts!, context, params, data);
93
+ selfContext = convertNavData(navigateContexts!, data, params, context);
94
94
  }
95
95
  const _context = Object.assign(context.clone(), selfContext);
96
96
  let selfParams = {};
97
97
  if (navigateParams && data) {
98
- selfParams = convertNavData(navigateParams!, context, params, data);
98
+ selfParams = convertNavData(navigateParams!, data, params, context);
99
99
  }
100
100
  const _params: IParams = { ...params, ...selfParams };
101
101
  return { context: _context, params: _params };
@@ -65,13 +65,13 @@ export class PickupViewPanelController
65
65
  if (navigateContexts) {
66
66
  Object.assign(
67
67
  context,
68
- convertNavData(navigateContexts, this.context, this.params),
68
+ convertNavData(navigateContexts, this.params, this.context),
69
69
  );
70
70
  }
71
71
  if (navigateParams) {
72
72
  Object.assign(
73
73
  params,
74
- convertNavData(navigateParams, this.context, this.params),
74
+ convertNavData(navigateParams, this.params, this.context),
75
75
  );
76
76
  }
77
77
  this.state.context = context;
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable no-await-in-loop */
2
2
  import { ModelError, RuntimeModelError } from '@ibiz-template/core';
3
3
  import { IAppDELogic } from '@ibiz/model-core';
4
+ import { ScriptFactory, ScriptFunction } from '../utils';
4
5
  import { DELogicContext } from './de-logic-context';
5
6
  import {
6
7
  AppendParamNode,
@@ -48,6 +49,15 @@ export class DELogic {
48
49
  */
49
50
  protected params: Map<string, DELogicParam> = new Map();
50
51
 
52
+ /**
53
+ * 脚本函数
54
+ * @author lxm
55
+ * @date 2023-09-13 04:25:27
56
+ * @protected
57
+ * @type {ScriptFunction}
58
+ */
59
+ protected scriptFn?: ScriptFunction;
60
+
51
61
  /**
52
62
  * Creates an instance of DELogic.
53
63
  * @author lxm
@@ -55,6 +65,17 @@ export class DELogic {
55
65
  * @param {IAppDELogic} model
56
66
  */
57
67
  constructor(protected model: IAppDELogic) {
68
+ // 脚本代码模式
69
+ if (model.customCode) {
70
+ if (!model.scriptCode) {
71
+ throw new RuntimeModelError(model, '脚本代码模式没有配置脚本代码');
72
+ }
73
+ this.scriptFn = ScriptFactory.createScriptFn([], model.scriptCode, {
74
+ isAsync: true,
75
+ });
76
+ return;
77
+ }
78
+
58
79
  if (!model.delogicNodes?.length) {
59
80
  throw new RuntimeModelError(model, '实体逻辑没有配置逻辑节点');
60
81
  }
@@ -148,6 +169,9 @@ export class DELogic {
148
169
  * @return {*} {Promise<IData>}
149
170
  */
150
171
  async exec(context: IParams, data: IData, params: IParams): Promise<unknown> {
172
+ if (this.scriptFn) {
173
+ return this.scriptFn.exec({ context, data, params });
174
+ }
151
175
  const ctx = new DELogicContext(this.params, context, data, params);
152
176
  this.initLogicParams(ctx);
153
177
  const { startDELogicNodeId } = this.model;
@@ -93,14 +93,14 @@ export class AppUILogicExecutor extends LogicExecutor {
93
93
  const navContexts: INavigateParam[] = openViewRef.navigateContexts || [];
94
94
  const tempContext = Object.assign(
95
95
  context,
96
- convertNavData(navContexts!, context, params, data[0]),
96
+ convertNavData(navContexts!, data[0], params, context),
97
97
  );
98
98
 
99
99
  // 处理导航视图参数
100
100
  let tempParams: IData = {};
101
101
  const navParams = openViewRef.navigateParams;
102
102
  if (notNilEmpty(navParams)) {
103
- tempParams = convertNavData(navParams!, params, context, data[0]);
103
+ tempParams = convertNavData(navParams!, data[0], params, context);
104
104
  }
105
105
 
106
106
  // 打开视图
@@ -164,13 +164,13 @@ export class AppUILogicExecutor extends LogicExecutor {
164
164
  const _data = data?.[0] || {};
165
165
  const navContexts = newViewRef.navigateContexts;
166
166
  if (notNilEmpty(navContexts)) {
167
- tempContext = convertNavData(navContexts!, context, params, _data);
167
+ tempContext = convertNavData(navContexts!, _data, params, context);
168
168
  }
169
169
  tempContext = Object.assign(context, tempContext);
170
170
 
171
171
  const navParams = newViewRef.navigateParams;
172
172
  if (notNilEmpty(navParams)) {
173
- tempParams = convertNavData(navParams!, params, context, _data);
173
+ tempParams = convertNavData(navParams!, _data, params, context);
174
174
  }
175
175
 
176
176
  // 拷贝数据处理
@@ -74,9 +74,7 @@ export class MethodDto {
74
74
  for (let j = 0; j < items.length; j++) {
75
75
  arr.push(await dto.get(context, items[j]));
76
76
  }
77
- if (arr.length > 0) {
78
- params[key] = arr;
79
- }
77
+ params[key] = arr;
80
78
  }
81
79
  break;
82
80
  }
@@ -119,6 +117,8 @@ export class MethodDto {
119
117
  const items: IData[] = datum[key];
120
118
  if (items) {
121
119
  await dto.sets(context, items);
120
+ } else {
121
+ await dto.sets(context, []);
122
122
  }
123
123
  });
124
124
  for (let i = 0; i < all.length; i++) {
@@ -122,7 +122,6 @@ export abstract class Method {
122
122
  `${path}/${methodName}`,
123
123
  notNilEmpty(data) ? data : params,
124
124
  );
125
- const entity = this.createEntity(data);
126
125
  break;
127
126
  }
128
127
  case 'DELETE':
@@ -196,7 +196,8 @@ export class ControlVO {
196
196
  },
197
197
  set(val) {
198
198
  // 非空且强制转数值时,转换值的类型
199
- let val2 = forceNumber && !isNil(val) ? Number(val) : val;
199
+ let val2 =
200
+ forceNumber && !isNil(val) && val !== '' ? Number(val) : val;
200
201
  if (Number.isNaN(val2)) {
201
202
  val2 = val; // NaN时还原值
202
203
  ibiz.log.error(`${val}不能转换成数字`);
@@ -249,9 +249,9 @@ export abstract class UIActionProviderBase implements IUIActionProvider {
249
249
  // 处理自定义导航上下文
250
250
  const tempContext = convertNavData(
251
251
  navContexts,
252
- context,
253
- params,
254
252
  isMultiData ? formatMultiData(navContexts, data) : data[0] || {},
253
+ params,
254
+ context,
255
255
  );
256
256
  Object.assign(resultContext, tempContext);
257
257
 
@@ -259,9 +259,9 @@ export abstract class UIActionProviderBase implements IUIActionProvider {
259
259
  const navParams = action.navigateParams;
260
260
  const resultParams = convertNavData(
261
261
  navParams,
262
- resultContext,
263
- params,
264
262
  isMultiData ? formatMultiData(navParams, data) : data[0] || {},
263
+ params,
264
+ resultContext,
265
265
  );
266
266
  return { resultContext, resultData, resultParams };
267
267
  }
@@ -61,8 +61,8 @@ export function calcNavParams(
61
61
  }
62
62
 
63
63
  // 自定义导航视图参数和上下文
64
- const tempContext = convertNavData(navContexts, context, params, data);
65
- const tempParams = convertNavData(navParams, context, params, data);
64
+ const tempContext = convertNavData(navContexts, data, params, context);
65
+ const tempParams = convertNavData(navParams, data, params, context);
66
66
  Object.assign(resultContext, tempContext);
67
67
  Object.assign(resultParams, tempParams);
68
68