@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.
- package/dist/index.esm.js +125 -92
- package/dist/index.system.min.js +1 -1
- package/dist/index.system.min.js.map +1 -1
- package/out/command/app/app-func/app-func.js +2 -2
- package/out/controller/common/control/control.controller.d.ts.map +1 -1
- package/out/controller/common/control/control.controller.js +1 -0
- package/out/controller/common/control/md-control.controller.d.ts +20 -1
- package/out/controller/common/control/md-control.controller.d.ts.map +1 -1
- package/out/controller/common/control/md-control.controller.js +21 -2
- package/out/controller/common/editor/editor.controller.js +2 -2
- package/out/controller/common/view/view.controller.js +2 -2
- 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 -1
- package/out/controller/control/form/form-detail/form-druipart/form-druipart.controller.js +2 -2
- package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.js +2 -2
- package/out/controller/control/pickup-view-panel/pickup-view-panel.controller.js +2 -2
- package/out/de-logic/de-logic.d.ts +9 -0
- package/out/de-logic/de-logic.d.ts.map +1 -1
- package/out/de-logic/de-logic.js +14 -0
- package/out/logic-scheduler/executor/app-ui-logic-executor.js +4 -4
- package/out/service/dto/method.dto.d.ts.map +1 -1
- package/out/service/dto/method.dto.js +4 -3
- package/out/service/service/entity/method/method.d.ts.map +1 -1
- package/out/service/service/entity/method/method.js +0 -1
- package/out/service/vo/control.vo.d.ts.map +1 -1
- package/out/service/vo/control.vo.js +1 -1
- package/out/ui-action/provider/ui-action-provider-base.js +2 -2
- package/out/utils/nav-params/calc-nav-params.js +2 -2
- package/out/utils/nav-params/nav-params.d.ts +11 -25
- package/out/utils/nav-params/nav-params.d.ts.map +1 -1
- package/out/utils/nav-params/nav-params.js +79 -84
- package/out/utils/open-redirect-view/open-redirect-view.js +2 -2
- package/package.json +3 -3
- package/src/command/app/app-func/app-func.ts +2 -2
- package/src/controller/common/control/control.controller.ts +1 -0
- package/src/controller/common/control/md-control.controller.ts +34 -3
- package/src/controller/common/editor/editor.controller.ts +2 -2
- package/src/controller/common/view/view.controller.ts +2 -2
- package/src/controller/control/form/edit-form/edit-form.controller.ts +11 -1
- package/src/controller/control/form/form-detail/form-druipart/form-druipart.controller.ts +3 -3
- package/src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts +2 -2
- package/src/controller/control/pickup-view-panel/pickup-view-panel.controller.ts +2 -2
- package/src/de-logic/de-logic.ts +24 -0
- package/src/logic-scheduler/executor/app-ui-logic-executor.ts +4 -4
- package/src/service/dto/method.dto.ts +3 -3
- package/src/service/service/entity/method/method.ts +0 -1
- package/src/service/vo/control.vo.ts +2 -1
- package/src/ui-action/provider/ui-action-provider-base.ts +4 -4
- package/src/utils/nav-params/calc-nav-params.ts +2 -2
- package/src/utils/nav-params/nav-params.ts +86 -91
- 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[]}
|
|
40
|
+
* @param {INavigateParam[]} navParams 导航参数
|
|
14
41
|
* @param {...IData[]} origins 转换数据来源集合
|
|
15
42
|
*/
|
|
16
|
-
export function convertNavData(
|
|
43
|
+
export function convertNavData(navParams, ...origins) {
|
|
17
44
|
// 如果导航参数不存在或者为空对象,返回{}
|
|
18
|
-
if (!
|
|
45
|
+
if (!navParams || isEmpty(navParams)) {
|
|
19
46
|
return {};
|
|
20
47
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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 (
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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,
|
|
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,
|
|
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.
|
|
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.
|
|
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": "
|
|
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,
|
|
56
|
-
const _params = convertNavData(navigateParams,
|
|
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':
|
|
@@ -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
|
-
|
|
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!,
|
|
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!,
|
|
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.
|
|
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.
|
|
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
|
|
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) {
|
package/src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts
CHANGED
|
@@ -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!,
|
|
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!,
|
|
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.
|
|
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.
|
|
74
|
+
convertNavData(navigateParams, this.params, this.context),
|
|
75
75
|
);
|
|
76
76
|
}
|
|
77
77
|
this.state.context = context;
|
package/src/de-logic/de-logic.ts
CHANGED
|
@@ -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!,
|
|
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
|
|
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!,
|
|
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
|
|
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
|
-
|
|
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++) {
|
|
@@ -196,7 +196,8 @@ export class ControlVO {
|
|
|
196
196
|
},
|
|
197
197
|
set(val) {
|
|
198
198
|
// 非空且强制转数值时,转换值的类型
|
|
199
|
-
let val2 =
|
|
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,
|
|
65
|
-
const tempParams = convertNavData(navParams,
|
|
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
|
|