@ibiz-template/runtime 0.5.3-beta.1 → 0.5.3-beta.10
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 +1855 -648
- package/dist/index.system.min.js +1 -1
- package/out/app-hub.d.ts +12 -2
- package/out/app-hub.d.ts.map +1 -1
- package/out/app-hub.js +22 -2
- package/out/application.js +1 -1
- package/out/command/app/open-app-view/open-app-view.d.ts.map +1 -1
- package/out/command/app/open-app-view/open-app-view.js +8 -1
- package/out/controller/common/editor/editor.controller.d.ts +24 -0
- package/out/controller/common/editor/editor.controller.d.ts.map +1 -1
- package/out/controller/common/editor/editor.controller.js +50 -0
- package/out/controller/common/view/view.controller.d.ts.map +1 -1
- package/out/controller/common/view/view.controller.js +3 -2
- package/out/controller/constant/control/index.d.ts +1 -0
- package/out/controller/constant/control/index.d.ts.map +1 -1
- package/out/controller/constant/control/index.js +1 -0
- package/out/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.d.ts +5 -0
- package/out/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.d.ts.map +1 -0
- package/out/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.js +6 -0
- package/out/controller/control/chart/chart.controller.js +1 -1
- package/out/controller/control/form/form/form.controller.d.ts.map +1 -1
- package/out/controller/control/form/form/form.controller.js +4 -1
- package/out/controller/control/form/form-detail/form-detail/form-detail.controller.d.ts.map +1 -1
- package/out/controller/control/form/form-detail/form-detail/form-detail.controller.js +4 -0
- package/out/controller/control/form/form-detail/form-tab-page/form-tab-page.controller.d.ts +8 -0
- package/out/controller/control/form/form-detail/form-tab-page/form-tab-page.controller.d.ts.map +1 -1
- package/out/controller/control/form/form-detail/form-tab-page/form-tab-page.controller.js +10 -0
- package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.controller.d.ts +8 -0
- package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.controller.d.ts.map +1 -1
- package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.controller.js +15 -0
- package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.state.d.ts +7 -0
- package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.state.d.ts.map +1 -1
- package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.state.js +10 -0
- package/out/controller/control/grid/grid/grid.service.d.ts.map +1 -1
- package/out/controller/control/grid/grid/grid.service.js +1 -10
- package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts +7 -0
- package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts.map +1 -1
- package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.js +11 -2
- package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.d.ts +0 -7
- package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.d.ts.map +1 -1
- package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.js +0 -9
- package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.d.ts +1 -0
- package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.d.ts.map +1 -1
- package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.js +1 -0
- package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.d.ts +10 -0
- package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.d.ts.map +1 -1
- package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.js +12 -0
- package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.d.ts +34 -0
- package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.d.ts.map +1 -1
- package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.js +68 -0
- package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-node-column.controller.d.ts +205 -0
- package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-node-column.controller.d.ts.map +1 -0
- package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-node-column.controller.js +345 -0
- package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.d.ts +3 -0
- package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.d.ts.map +1 -1
- package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.js +14 -1
- package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.d.ts +16 -8
- package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.d.ts.map +1 -1
- package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.js +26 -12
- package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.d.ts +59 -0
- package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.d.ts.map +1 -1
- package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.js +238 -1
- package/out/de-logic/utils/handle-src-val.d.ts +15 -0
- package/out/de-logic/utils/handle-src-val.d.ts.map +1 -1
- package/out/de-logic/utils/handle-src-val.js +10 -1
- package/out/interface/common/i-app-hub-service/i-app-hub-service.d.ts +4 -3
- package/out/interface/common/i-app-hub-service/i-app-hub-service.d.ts.map +1 -1
- package/out/interface/controller/controller/control/i-tree-grid-ex.controller.d.ts +23 -1
- package/out/interface/controller/controller/control/i-tree-grid-ex.controller.d.ts.map +1 -1
- package/out/interface/controller/event/control/i-tree-grid-ex.event.d.ts +17 -0
- package/out/interface/controller/event/control/i-tree-grid-ex.event.d.ts.map +1 -1
- package/out/interface/controller/state/control/i-tree-grid-ex.state.d.ts +60 -2
- package/out/interface/controller/state/control/i-tree-grid-ex.state.d.ts.map +1 -1
- package/out/interface/provider/i-async-action.provider.d.ts +3 -2
- package/out/interface/provider/i-async-action.provider.d.ts.map +1 -1
- package/out/interface/service/i-transaction/i-transaction.d.ts +83 -0
- package/out/interface/service/i-transaction/i-transaction.d.ts.map +1 -0
- package/out/interface/service/i-transaction/i-transaction.js +1 -0
- package/out/interface/service/index.d.ts +1 -0
- package/out/interface/service/index.d.ts.map +1 -1
- package/out/interface/service/service/i-app-de.service.d.ts +9 -3
- package/out/interface/service/service/i-app-de.service.d.ts.map +1 -1
- package/out/plugin/index.d.ts +1 -1
- package/out/plugin/index.d.ts.map +1 -1
- package/out/plugin/remote-plugin-item/remote-plugin-item.d.ts +46 -0
- package/out/plugin/remote-plugin-item/remote-plugin-item.d.ts.map +1 -1
- package/out/register/helper/app-menu-item-register.d.ts.map +1 -1
- package/out/register/helper/app-menu-item-register.js +1 -6
- package/out/register/helper/panel-item-register.d.ts.map +1 -1
- package/out/register/helper/panel-item-register.js +36 -30
- package/out/service/dto/method.dto.d.ts +1 -12
- package/out/service/dto/method.dto.d.ts.map +1 -1
- package/out/service/dto/method.dto.js +8 -20
- package/out/service/mqtt/mqtt.service.js +2 -2
- package/out/service/service/auth/v7-auth.service.d.ts.map +1 -1
- package/out/service/service/auth/v7-auth.service.js +2 -0
- package/out/service/service/entity/de.service.d.ts +1 -2
- package/out/service/service/entity/de.service.d.ts.map +1 -1
- package/out/service/service/entity/de.service.js +5 -2
- package/out/service/service/entity/method/de-action.d.ts +13 -1
- package/out/service/service/entity/method/de-action.d.ts.map +1 -1
- package/out/service/service/entity/method/de-action.js +167 -59
- package/out/service/service/entity/method/fetch.d.ts.map +1 -1
- package/out/service/service/entity/method/fetch.js +24 -21
- package/out/service/service/entity/method/method-renturn.d.ts.map +1 -1
- package/out/service/service/entity/method/method-renturn.js +6 -0
- package/out/service/utils/de-cache/de-cache.d.ts +11 -1
- package/out/service/utils/de-cache/de-cache.d.ts.map +1 -1
- package/out/service/utils/de-cache/de-cache.js +122 -18
- package/out/service/utils/de-dq-cond/ps-model-cond-engine-base.d.ts.map +1 -1
- package/out/service/utils/de-dq-cond/ps-model-cond-engine-base.js +4 -0
- package/out/service/utils/dynamic-code-list/dynamic-code-list.d.ts +1 -1
- package/out/service/utils/dynamic-code-list/dynamic-code-list.d.ts.map +1 -1
- package/out/service/utils/dynamic-code-list/dynamic-code-list.js +25 -26
- package/out/service/utils/res-path/res-path.d.ts +2 -2
- package/out/service/utils/res-path/res-path.d.ts.map +1 -1
- package/out/service/utils/res-path/res-path.js +1 -1
- package/out/service/vo/tree-node-data/tree-data-set-node-data.d.ts +6 -0
- package/out/service/vo/tree-node-data/tree-data-set-node-data.d.ts.map +1 -1
- package/out/service/vo/tree-node-data/tree-data-set-node-data.js +93 -41
- package/out/ui-action/provider/front-ui-action-provider.d.ts +1 -1
- package/out/ui-action/provider/front-ui-action-provider.d.ts.map +1 -1
- package/out/ui-action/provider/front-ui-action-provider.js +5 -1
- package/out/ui-logic/ui-logic-node/debug-param-node/debug-param-node.js +1 -1
- package/out/ui-logic/ui-logic-node/raw-js-code-node/raw-js-code-node.d.ts.map +1 -1
- package/out/ui-logic/ui-logic-node/raw-js-code-node/raw-js-code-node.js +0 -1
- package/out/utils/script/script-function.js +1 -1
- package/out/utils/ui-domain/transaction.d.ts +66 -0
- package/out/utils/ui-domain/transaction.d.ts.map +1 -0
- package/out/utils/ui-domain/transaction.js +94 -0
- package/out/utils/ui-domain/ui-domain.d.ts +50 -6
- package/out/utils/ui-domain/ui-domain.d.ts.map +1 -1
- package/out/utils/ui-domain/ui-domain.js +68 -9
- package/package.json +5 -5
- package/src/app-hub.ts +27 -2
- package/src/application.ts +1 -1
- package/src/command/app/open-app-view/open-app-view.ts +8 -1
- package/src/controller/common/editor/editor.controller.ts +54 -0
- package/src/controller/common/view/view.controller.ts +3 -2
- package/src/controller/constant/control/index.ts +1 -0
- package/src/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.ts +5 -0
- package/src/controller/control/chart/chart.controller.ts +1 -1
- package/src/controller/control/form/form/form.controller.ts +11 -1
- package/src/controller/control/form/form-detail/form-detail/form-detail.controller.ts +4 -0
- package/src/controller/control/form/form-detail/form-tab-page/form-tab-page.controller.ts +14 -0
- package/src/controller/control/form/form-detail/form-tab-panel/form-tab-panel.controller.ts +16 -0
- package/src/controller/control/form/form-detail/form-tab-panel/form-tab-panel.state.ts +9 -1
- package/src/controller/control/grid/grid/grid.service.ts +1 -11
- package/src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts +12 -2
- package/src/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.ts +0 -10
- package/src/controller/control/tree-grid-ex/tree-grid-ex-column/index.ts +1 -0
- package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.ts +22 -0
- package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.ts +88 -2
- package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-node-column.controller.ts +522 -0
- package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.ts +18 -1
- package/src/controller/control/tree-grid-ex/tree-grid-ex-row.state.ts +43 -12
- package/src/controller/control/tree-grid-ex/tree-grid-ex.controller.ts +296 -1
- package/src/de-logic/utils/handle-src-val.ts +29 -1
- package/src/interface/common/i-app-hub-service/i-app-hub-service.ts +4 -3
- package/src/interface/controller/controller/control/i-tree-grid-ex.controller.ts +27 -2
- package/src/interface/controller/event/control/i-tree-grid-ex.event.ts +15 -1
- package/src/interface/controller/state/control/i-tree-grid-ex.state.ts +64 -2
- package/src/interface/provider/i-async-action.provider.ts +3 -2
- package/src/interface/service/i-transaction/i-transaction.ts +88 -0
- package/src/interface/service/index.ts +4 -0
- package/src/interface/service/service/i-app-de.service.ts +10 -3
- package/src/plugin/index.ts +4 -1
- package/src/plugin/remote-plugin-item/remote-plugin-item.ts +43 -0
- package/src/register/helper/app-menu-item-register.ts +1 -5
- package/src/register/helper/panel-item-register.ts +43 -37
- package/src/service/dto/method.dto.ts +7 -20
- package/src/service/mqtt/mqtt.service.ts +2 -2
- package/src/service/service/auth/v7-auth.service.ts +2 -0
- package/src/service/service/entity/de.service.ts +7 -9
- package/src/service/service/entity/method/de-action.ts +186 -64
- package/src/service/service/entity/method/fetch.ts +28 -29
- package/src/service/service/entity/method/method-renturn.ts +6 -0
- package/src/service/utils/de-cache/de-cache.ts +128 -19
- package/src/service/utils/de-dq-cond/ps-model-cond-engine-base.ts +4 -0
- package/src/service/utils/dynamic-code-list/dynamic-code-list.ts +24 -32
- package/src/service/utils/res-path/res-path.ts +2 -2
- package/src/service/vo/tree-node-data/tree-data-set-node-data.ts +111 -46
- package/src/ui-action/provider/front-ui-action-provider.ts +10 -1
- package/src/ui-logic/ui-logic-node/debug-param-node/debug-param-node.ts +1 -1
- package/src/ui-logic/ui-logic-node/raw-js-code-node/raw-js-code-node.ts +0 -1
- package/src/utils/script/script-function.ts +1 -1
- package/src/utils/ui-domain/transaction.ts +100 -0
- package/src/utils/ui-domain/ui-domain.ts +73 -9
|
@@ -1,3 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* systemjs importmap 配置定义
|
|
3
|
+
*
|
|
4
|
+
* @author chitanda
|
|
5
|
+
* @date 2024-01-11 20:01:45
|
|
6
|
+
* @export
|
|
7
|
+
* @interface ISystemImportMap
|
|
8
|
+
*/
|
|
9
|
+
export interface ISystemImportMap {
|
|
10
|
+
/**
|
|
11
|
+
* 基础路径
|
|
12
|
+
*
|
|
13
|
+
* @author chitanda
|
|
14
|
+
* @date 2024-01-11 20:01:53
|
|
15
|
+
* @type {string}
|
|
16
|
+
*/
|
|
17
|
+
baseUrl?: string;
|
|
18
|
+
/**
|
|
19
|
+
* 脚本
|
|
20
|
+
*
|
|
21
|
+
* @author chitanda
|
|
22
|
+
* @date 2024-01-11 20:01:57
|
|
23
|
+
* @type {{ [key: string]: string }}
|
|
24
|
+
*/
|
|
25
|
+
imports: { [key: string]: string };
|
|
26
|
+
/**
|
|
27
|
+
* 样式
|
|
28
|
+
*
|
|
29
|
+
* @author chitanda
|
|
30
|
+
* @date 2024-01-11 20:01:38
|
|
31
|
+
* @type {({ [key: string]: string | string[] })}
|
|
32
|
+
*/
|
|
33
|
+
styles: { [key: string]: string | string[] };
|
|
34
|
+
}
|
|
35
|
+
|
|
1
36
|
/**
|
|
2
37
|
* 远程插件配置
|
|
3
38
|
*
|
|
@@ -63,6 +98,14 @@ export interface RemotePluginConfig {
|
|
|
63
98
|
* @type {boolean}
|
|
64
99
|
*/
|
|
65
100
|
app?: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* 额外的 systemjs 模块声明
|
|
103
|
+
*
|
|
104
|
+
* @author chitanda
|
|
105
|
+
* @date 2024-01-11 20:01:37
|
|
106
|
+
* @type {ISystemImportMap}
|
|
107
|
+
*/
|
|
108
|
+
'systemjs-importmap'?: ISystemImportMap;
|
|
66
109
|
}
|
|
67
110
|
|
|
68
111
|
/**
|
|
@@ -46,7 +46,8 @@ export async function getPanelItemProvider(
|
|
|
46
46
|
model: IPanelItem,
|
|
47
47
|
): Promise<IPanelItemProvider | undefined> {
|
|
48
48
|
let provider: IPanelItemProvider | undefined;
|
|
49
|
-
const { itemType, sysPFPluginId, appId } =
|
|
49
|
+
const { itemType, sysPFPluginId, appId, controlRenders } =
|
|
50
|
+
model as Required<IPanelItem>;
|
|
50
51
|
|
|
51
52
|
// 找插件适配器
|
|
52
53
|
if (sysPFPluginId) {
|
|
@@ -60,50 +61,55 @@ export async function getPanelItemProvider(
|
|
|
60
61
|
return provider;
|
|
61
62
|
}
|
|
62
63
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
)
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
if (itemType === 'RAWITEM') {
|
|
81
|
-
const predefinedType =
|
|
82
|
-
(model as IPanelRawItem).rawItem?.predefinedType || 'DEFAULT';
|
|
83
|
-
const key = `RAWITEM_${predefinedType}`;
|
|
84
|
-
provider = getProvider(key);
|
|
85
|
-
if (!provider) {
|
|
86
|
-
ibiz.log.error(
|
|
87
|
-
`找不到面板成员直接内容预置类型为${predefinedType}的适配器,注册key为${key}`,
|
|
88
|
-
);
|
|
89
|
-
} else {
|
|
90
|
-
return provider;
|
|
64
|
+
if (controlRenders && controlRenders.length > 0) {
|
|
65
|
+
// 默认预定义 绘制器
|
|
66
|
+
provider = getProvider('PREDEFINE_RENDER');
|
|
67
|
+
} else {
|
|
68
|
+
// 特殊容器类型
|
|
69
|
+
if (itemType === 'CONTAINER') {
|
|
70
|
+
const predefinedType =
|
|
71
|
+
(model as IPanelContainer).predefinedType || 'DEFAULT';
|
|
72
|
+
const key = `CONTAINER_${predefinedType}`;
|
|
73
|
+
provider = getProvider(key);
|
|
74
|
+
if (!provider) {
|
|
75
|
+
ibiz.log.error(
|
|
76
|
+
`找不到面板容器预置类型为${predefinedType}的适配器,注册key为${key}`,
|
|
77
|
+
);
|
|
78
|
+
} else {
|
|
79
|
+
return provider;
|
|
80
|
+
}
|
|
91
81
|
}
|
|
92
|
-
}
|
|
93
82
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
83
|
+
// 特殊直接内容类型
|
|
84
|
+
if (itemType === 'RAWITEM') {
|
|
85
|
+
const predefinedType =
|
|
86
|
+
(model as IPanelRawItem).rawItem?.predefinedType || 'DEFAULT';
|
|
87
|
+
const key = `RAWITEM_${predefinedType}`;
|
|
98
88
|
provider = getProvider(key);
|
|
99
|
-
if (provider) {
|
|
89
|
+
if (!provider) {
|
|
90
|
+
ibiz.log.error(
|
|
91
|
+
`找不到面板成员直接内容预置类型为${predefinedType}的适配器,注册key为${key}`,
|
|
92
|
+
);
|
|
93
|
+
} else {
|
|
100
94
|
return provider;
|
|
101
95
|
}
|
|
102
96
|
}
|
|
97
|
+
|
|
98
|
+
if (itemType === 'FIELD') {
|
|
99
|
+
const { editor } = model as IPanelField;
|
|
100
|
+
if (editor && editor.predefinedType) {
|
|
101
|
+
const key = `FIELD_${editor.predefinedType.toUpperCase()}`;
|
|
102
|
+
provider = getProvider(key);
|
|
103
|
+
if (provider) {
|
|
104
|
+
return provider;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// 找面板成员类型
|
|
110
|
+
provider = getProvider(itemType);
|
|
103
111
|
}
|
|
104
112
|
|
|
105
|
-
// 找面板成员类型
|
|
106
|
-
provider = getProvider(itemType);
|
|
107
113
|
if (!provider) {
|
|
108
114
|
ibiz.log.error(`找不到面板成员类型${itemType}对应的适配器`);
|
|
109
115
|
} else {
|
|
@@ -28,16 +28,6 @@ export class MethodDto {
|
|
|
28
28
|
|
|
29
29
|
protected dtoMap: Map<string, MethodDto> = new Map();
|
|
30
30
|
|
|
31
|
-
/**
|
|
32
|
-
* 当前 DTO 是否已经计算过关系相关逻辑
|
|
33
|
-
*
|
|
34
|
-
* @link this.calcRs
|
|
35
|
-
* @author chitanda
|
|
36
|
-
* @date 2023-12-26 16:12:18
|
|
37
|
-
* @protected
|
|
38
|
-
*/
|
|
39
|
-
protected isCalcRs = false;
|
|
40
|
-
|
|
41
31
|
/**
|
|
42
32
|
* Creates an instance of MethodDto.
|
|
43
33
|
* @author lxm
|
|
@@ -46,14 +36,12 @@ export class MethodDto {
|
|
|
46
36
|
* @param {IAppDataEntity} entity
|
|
47
37
|
* @param {boolean} [isLocalMode]
|
|
48
38
|
* @param {IAppDEMethodDTO} [dto]
|
|
49
|
-
* @param {boolean} [inSelfLoop] 是否在自关系循环中
|
|
50
39
|
*/
|
|
51
40
|
constructor(
|
|
52
41
|
protected service: IAppDEService,
|
|
53
42
|
protected entity: IAppDataEntity,
|
|
54
43
|
protected isLocalMode?: boolean,
|
|
55
44
|
protected dto?: IAppDEMethodDTO,
|
|
56
|
-
protected inSelfLoop?: boolean,
|
|
57
45
|
) {
|
|
58
46
|
if (dto) {
|
|
59
47
|
this.app = ibiz.hub.getApp(entity.appId);
|
|
@@ -205,10 +193,12 @@ export class MethodDto {
|
|
|
205
193
|
* @return {*} {Promise<IDataEntity[]>}
|
|
206
194
|
*/
|
|
207
195
|
async sets(context: IContext, data: IData[]): Promise<IDataEntity[]> {
|
|
208
|
-
|
|
209
|
-
|
|
196
|
+
const uiDomain = ibiz.uiDomainManager.get(context.srfsessionid);
|
|
197
|
+
if (uiDomain && uiDomain.state.rsInit !== true) {
|
|
198
|
+
await this.calcRs(context);
|
|
199
|
+
uiDomain.calcParentRs();
|
|
200
|
+
uiDomain.state.rsInit = true;
|
|
210
201
|
}
|
|
211
|
-
await this.calcRs(context);
|
|
212
202
|
return Promise.all(
|
|
213
203
|
data.map(async datum => {
|
|
214
204
|
const all = this.fields
|
|
@@ -224,7 +214,7 @@ export class MethodDto {
|
|
|
224
214
|
}
|
|
225
215
|
const dto = await this.getFieldDto(context, field);
|
|
226
216
|
const items: IData[] = datum[key];
|
|
227
|
-
if (items) {
|
|
217
|
+
if (items && items.length > 0) {
|
|
228
218
|
const pKey = datum[this.entity.keyAppDEFieldId!];
|
|
229
219
|
if (field.refPickupAppDEFieldId) {
|
|
230
220
|
// 特殊处理,在子包内设置父对象标识
|
|
@@ -263,10 +253,9 @@ export class MethodDto {
|
|
|
263
253
|
* @return {*} {Promise<void>}
|
|
264
254
|
*/
|
|
265
255
|
protected async calcRs(context: IContext, depth: number = 0): Promise<void> {
|
|
266
|
-
if (
|
|
256
|
+
if (depth > 10) {
|
|
267
257
|
return;
|
|
268
258
|
}
|
|
269
|
-
this.isCalcRs = true;
|
|
270
259
|
depth += 1;
|
|
271
260
|
|
|
272
261
|
const uiDomain = ibiz.uiDomainManager.get(context.srfsessionid);
|
|
@@ -316,12 +305,10 @@ export class MethodDto {
|
|
|
316
305
|
entity.appDEMethodDTOs || [],
|
|
317
306
|
field.refAppDEMethodDTOId!,
|
|
318
307
|
)!;
|
|
319
|
-
const inSelfLoop = this.entity.codeName === entity.codeName;
|
|
320
308
|
const service = await this.app!.deService.getService(context, entity.id!);
|
|
321
309
|
service.isLocalMode = true;
|
|
322
310
|
const dto = service.createMethodDto(methodDto, {
|
|
323
311
|
isLocalMode: true,
|
|
324
|
-
inSelfLoop,
|
|
325
312
|
});
|
|
326
313
|
this.dtoMap.set(field.codeName!, dto);
|
|
327
314
|
return dto;
|
|
@@ -99,10 +99,10 @@ export class MqttService {
|
|
|
99
99
|
ibiz.log.debug('mqtt message', topic, payload.toString());
|
|
100
100
|
});
|
|
101
101
|
this.client.on('reconnect', () => {
|
|
102
|
-
ibiz.log.
|
|
102
|
+
ibiz.log.warn('mqtt reconnect');
|
|
103
103
|
});
|
|
104
104
|
this.client.on('close', () => {
|
|
105
|
-
|
|
105
|
+
ibiz.log.warn('mqtt close');
|
|
106
106
|
});
|
|
107
107
|
}
|
|
108
108
|
|
|
@@ -82,6 +82,8 @@ export class V7AuthService implements IAuthService {
|
|
|
82
82
|
clearCookie(CoreConst.TOKEN_EXPIRES);
|
|
83
83
|
clearCookie(CoreConst.TOKEN_REMEMBER);
|
|
84
84
|
clearCookie(CoreConst.IS_ANONYMOUS);
|
|
85
|
+
ibiz.appData = undefined;
|
|
86
|
+
ibiz.orgData = undefined;
|
|
85
87
|
return true;
|
|
86
88
|
} catch (err: unknown) {
|
|
87
89
|
ibiz.notification.error({
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
IPortalAsyncAction,
|
|
9
9
|
ModelError,
|
|
10
10
|
RuntimeError,
|
|
11
|
+
RuntimeModelError,
|
|
11
12
|
} from '@ibiz-template/core';
|
|
12
13
|
import { DECache, calcResPath } from '../../utils';
|
|
13
14
|
import { WorkFlowService } from '../work-flow/work-flow.service';
|
|
@@ -94,7 +95,7 @@ export class DEService implements IAppDEService {
|
|
|
94
95
|
*/
|
|
95
96
|
constructor(
|
|
96
97
|
protected srfSessionId: string,
|
|
97
|
-
|
|
98
|
+
public readonly model: IAppDataEntity,
|
|
98
99
|
) {
|
|
99
100
|
this.local = new DECache(model);
|
|
100
101
|
this.configCache = new ConfigService(
|
|
@@ -126,6 +127,10 @@ export class DEService implements IAppDEService {
|
|
|
126
127
|
}
|
|
127
128
|
const model = findModelChild(this.model.appDEMethods!, id) as IAppDEMethod;
|
|
128
129
|
|
|
130
|
+
if (!model) {
|
|
131
|
+
throw new RuntimeModelError(this.model, `未找到服务方法: ${id}`);
|
|
132
|
+
}
|
|
133
|
+
|
|
129
134
|
// 获取适配器
|
|
130
135
|
const provider = await getDEMethodProvider(model);
|
|
131
136
|
if (!provider) {
|
|
@@ -409,15 +414,8 @@ export class DEService implements IAppDEService {
|
|
|
409
414
|
dto?: IAppDEMethodDTO,
|
|
410
415
|
opts?: {
|
|
411
416
|
isLocalMode?: boolean;
|
|
412
|
-
inSelfLoop?: boolean;
|
|
413
417
|
},
|
|
414
418
|
): MethodDto {
|
|
415
|
-
return new MethodDto(
|
|
416
|
-
this,
|
|
417
|
-
this.model,
|
|
418
|
-
opts?.isLocalMode,
|
|
419
|
-
dto,
|
|
420
|
-
opts?.inSelfLoop,
|
|
421
|
-
);
|
|
419
|
+
return new MethodDto(this, this.model, opts?.isLocalMode, dto);
|
|
422
420
|
}
|
|
423
421
|
}
|
|
@@ -7,9 +7,11 @@ import {
|
|
|
7
7
|
} from '@ibiz-template/core';
|
|
8
8
|
import { IAppDEAction } from '@ibiz/model-core';
|
|
9
9
|
import { isArray, isNil } from 'lodash-es';
|
|
10
|
+
import { ascSort } from 'qx-util';
|
|
11
|
+
import { clone } from 'ramda';
|
|
10
12
|
import { Method } from './method';
|
|
11
13
|
import { IDataEntity } from '../../../../interface';
|
|
12
|
-
import { findDELogic } from '../../../../model';
|
|
14
|
+
import { calcDeCodeNameById, findDELogic } from '../../../../model';
|
|
13
15
|
import { execDELogicAction, execFieldLogics } from '../../../../de-logic';
|
|
14
16
|
|
|
15
17
|
/**
|
|
@@ -48,7 +50,10 @@ export class DEActionMethod extends Method {
|
|
|
48
50
|
data?: IData | IData[],
|
|
49
51
|
params?: IParams,
|
|
50
52
|
): Promise<HttpResponse<IData>> {
|
|
51
|
-
|
|
53
|
+
let result: IHttpResponse<IData>;
|
|
54
|
+
|
|
55
|
+
// 执行变更属性逻辑
|
|
56
|
+
if (data && !['READ', 'GETDRAFT'].includes(this.method.actionMode!)) {
|
|
52
57
|
await execFieldLogics(this.entity, 'change', context, data, params);
|
|
53
58
|
}
|
|
54
59
|
|
|
@@ -58,64 +63,57 @@ export class DEActionMethod extends Method {
|
|
|
58
63
|
if (!deLogic) {
|
|
59
64
|
throw new RuntimeModelError(this.method, '缺少实体处理逻辑');
|
|
60
65
|
}
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
if (this.method.needResourceKey) {
|
|
108
|
-
let srfkey = context[this.entity.codeName!.toLowerCase()];
|
|
109
|
-
if (isNil(srfkey)) {
|
|
110
|
-
srfkey = isArray(data)
|
|
111
|
-
? null
|
|
112
|
-
: data?.[this.entity.keyAppDEFieldId!];
|
|
66
|
+
result = await execDELogicAction(deLogic, context, data, params);
|
|
67
|
+
} else {
|
|
68
|
+
if (data && !this.isLocalMode) {
|
|
69
|
+
data = await this.inputHandle(context, data);
|
|
70
|
+
}
|
|
71
|
+
switch (this.method.codeName) {
|
|
72
|
+
case 'Create':
|
|
73
|
+
result = await this.create(context, data!, params || {});
|
|
74
|
+
break;
|
|
75
|
+
case 'Get':
|
|
76
|
+
result = await this.get(context, params);
|
|
77
|
+
break;
|
|
78
|
+
case 'GetDraft':
|
|
79
|
+
result = await this.getDraft(context, params);
|
|
80
|
+
break;
|
|
81
|
+
case 'Remove':
|
|
82
|
+
result = await this.remove(context, params);
|
|
83
|
+
break;
|
|
84
|
+
case 'Update':
|
|
85
|
+
result = await this.update(context, data!, params);
|
|
86
|
+
break;
|
|
87
|
+
case 'CreateTemp':
|
|
88
|
+
result = await this.createTemp(context, data!);
|
|
89
|
+
break;
|
|
90
|
+
case 'GetTemp':
|
|
91
|
+
result = await this.getTemp(context, data);
|
|
92
|
+
break;
|
|
93
|
+
case 'GetDraftTemp':
|
|
94
|
+
result = await this.getDraftTemp(context, params);
|
|
95
|
+
break;
|
|
96
|
+
case 'RemoveTemp':
|
|
97
|
+
result = await this.removeTemp(context, data);
|
|
98
|
+
break;
|
|
99
|
+
case 'UpdateTemp':
|
|
100
|
+
result = await this.updateTemp(context, data!);
|
|
101
|
+
break;
|
|
102
|
+
default: {
|
|
103
|
+
let path = this.calcPath(context);
|
|
104
|
+
if (this.method.needResourceKey) {
|
|
105
|
+
let srfkey = context[this.entity.codeName!.toLowerCase()];
|
|
106
|
+
if (isNil(srfkey)) {
|
|
107
|
+
srfkey = isArray(data)
|
|
108
|
+
? null
|
|
109
|
+
: data?.[this.entity.keyAppDEFieldId!];
|
|
110
|
+
}
|
|
111
|
+
path = `${path}/${srfkey}`;
|
|
113
112
|
}
|
|
114
|
-
|
|
113
|
+
const res = await this.request(path, context, data, params);
|
|
114
|
+
res.data = await this.result.handle(context, res.data);
|
|
115
|
+
result = res;
|
|
115
116
|
}
|
|
116
|
-
const res = await this.request(path, context, data, params);
|
|
117
|
-
res.data = await this.result.handle(context, res.data);
|
|
118
|
-
result = res;
|
|
119
117
|
}
|
|
120
118
|
}
|
|
121
119
|
|
|
@@ -342,6 +340,13 @@ export class DEActionMethod extends Method {
|
|
|
342
340
|
if (!key && context) {
|
|
343
341
|
key = context[this.entity.codeName!.toLowerCase()];
|
|
344
342
|
}
|
|
343
|
+
try {
|
|
344
|
+
await this.associationDeletion(key, context, params);
|
|
345
|
+
} catch (error) {
|
|
346
|
+
throw new HttpError({
|
|
347
|
+
response: new HttpResponse(null, 500, (error as IData).message),
|
|
348
|
+
} as unknown as Error);
|
|
349
|
+
}
|
|
345
350
|
const data = this.service.local.delete(context, key)!;
|
|
346
351
|
if (data) {
|
|
347
352
|
return new HttpResponse(data);
|
|
@@ -352,6 +357,124 @@ export class DEActionMethod extends Method {
|
|
|
352
357
|
}
|
|
353
358
|
}
|
|
354
359
|
|
|
360
|
+
/**
|
|
361
|
+
* 关联删除
|
|
362
|
+
*
|
|
363
|
+
* @author chitanda
|
|
364
|
+
* @date 2024-01-17 16:01:47
|
|
365
|
+
* @protected
|
|
366
|
+
* @param {string} key
|
|
367
|
+
* @param {IContext} context
|
|
368
|
+
* @param {IParams} [params]
|
|
369
|
+
* @return {*} {Promise<void>}
|
|
370
|
+
*/
|
|
371
|
+
protected async associationDeletion(
|
|
372
|
+
key: string,
|
|
373
|
+
context: IContext,
|
|
374
|
+
_params?: IParams,
|
|
375
|
+
): Promise<void> {
|
|
376
|
+
// 当前执行界面域
|
|
377
|
+
const uiDomain = ibiz.uiDomainManager.get(context.srfsessionid);
|
|
378
|
+
|
|
379
|
+
// 当前事务
|
|
380
|
+
const t = uiDomain.transaction;
|
|
381
|
+
let selfOpenTransaction = false;
|
|
382
|
+
// 由第一层触发关联删除的位置来打开事务,后续子的关联删除不需要再次打开事务
|
|
383
|
+
if (t.state.isOpen === false) {
|
|
384
|
+
t.open();
|
|
385
|
+
selfOpenTransaction = true;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
try {
|
|
389
|
+
let configs = uiDomain.getDERConfigByMajor(this.entity.id!);
|
|
390
|
+
if (configs.length > 0) {
|
|
391
|
+
// 当前主数据
|
|
392
|
+
const data = this.service.local.get(context, key)!;
|
|
393
|
+
|
|
394
|
+
// 根据删除顺序排序
|
|
395
|
+
configs = ascSort(configs, 'removeOrder');
|
|
396
|
+
|
|
397
|
+
// 根据关系进行关联删除
|
|
398
|
+
for (const config of configs) {
|
|
399
|
+
if (config.rstype !== 'DER1N') {
|
|
400
|
+
throw new RuntimeModelError(
|
|
401
|
+
config,
|
|
402
|
+
'目前只支持[DER1N]关系类型关联删除删除',
|
|
403
|
+
);
|
|
404
|
+
}
|
|
405
|
+
const {
|
|
406
|
+
removeActionType,
|
|
407
|
+
removeRejectMsg,
|
|
408
|
+
minorAppDataEntityId,
|
|
409
|
+
nestedAppDEDataSetId = 'FetchDefault',
|
|
410
|
+
} = config;
|
|
411
|
+
// 获取当前应用域下的子实体服务
|
|
412
|
+
const app = ibiz.hub.getApp(this.entity.appId!);
|
|
413
|
+
const minorService = await app.deService.getService(
|
|
414
|
+
context,
|
|
415
|
+
minorAppDataEntityId!,
|
|
416
|
+
);
|
|
417
|
+
// 克隆上下文,防止污染。并设置当前实体的主键上下文
|
|
418
|
+
const _context = clone(context);
|
|
419
|
+
_context[this.entity.codeName!.toLowerCase()] = key;
|
|
420
|
+
// 查询出关联的子实体数据
|
|
421
|
+
const res = await minorService.exec(nestedAppDEDataSetId, _context);
|
|
422
|
+
const items = (res.data || []) as IDataEntity[];
|
|
423
|
+
switch (removeActionType) {
|
|
424
|
+
// 同时删除
|
|
425
|
+
case 1: {
|
|
426
|
+
for (let i = 0; i < items.length; i++) {
|
|
427
|
+
const item = items[i];
|
|
428
|
+
_context[minorService.model.codeName!.toLowerCase()] =
|
|
429
|
+
item.srfkey;
|
|
430
|
+
const res2 = await minorService.remove(_context, item);
|
|
431
|
+
if (res2.ok === false) {
|
|
432
|
+
throw new Error(res2.statusText);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
break;
|
|
436
|
+
}
|
|
437
|
+
// 置空
|
|
438
|
+
case 2:
|
|
439
|
+
for (let i = 0; i < items.length; i++) {
|
|
440
|
+
const item = items[i];
|
|
441
|
+
_context[minorService.model.codeName!.toLowerCase()] =
|
|
442
|
+
item.srfkey;
|
|
443
|
+
item[config.parentAppDEFieldId!.toLowerCase()] = undefined;
|
|
444
|
+
const res2 = await minorService.updateTemp(_context, item);
|
|
445
|
+
if (res2.ok === false) {
|
|
446
|
+
throw new Error(res2.statusText);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
break;
|
|
450
|
+
// 限制删除
|
|
451
|
+
case 3:
|
|
452
|
+
if (items.length > 0) {
|
|
453
|
+
const msg = items.map(item => item.srfmajortext).join('、');
|
|
454
|
+
const message = `无法删除[${this.entity.logicName}-${data.srfmajortext}], 数据被[${minorService.model.logicName}-${msg}]引用`;
|
|
455
|
+
throw new Error(removeRejectMsg || message);
|
|
456
|
+
}
|
|
457
|
+
break;
|
|
458
|
+
default:
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
// 谁打开的事务,由谁来提交和关闭
|
|
463
|
+
if (selfOpenTransaction && t.state.isOpen) {
|
|
464
|
+
t.commit();
|
|
465
|
+
}
|
|
466
|
+
} catch (error) {
|
|
467
|
+
if (selfOpenTransaction && t.state.isOpen) {
|
|
468
|
+
t.rollback();
|
|
469
|
+
}
|
|
470
|
+
throw error;
|
|
471
|
+
} finally {
|
|
472
|
+
if (selfOpenTransaction && t.state.isOpen) {
|
|
473
|
+
t.close();
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
|
|
355
478
|
/**
|
|
356
479
|
* 更新临时数据
|
|
357
480
|
*
|
|
@@ -412,7 +535,6 @@ export class DEActionMethod extends Method {
|
|
|
412
535
|
key = context[this.entity.codeName!.toLowerCase()];
|
|
413
536
|
}
|
|
414
537
|
const data = this.service.local.get(context, key);
|
|
415
|
-
// await this.executeDEFelidLogic(context, data);
|
|
416
538
|
if (data) {
|
|
417
539
|
return new HttpResponse(data);
|
|
418
540
|
}
|
|
@@ -430,15 +552,14 @@ export class DEActionMethod extends Method {
|
|
|
430
552
|
* @return {*} {Promise<IHttpResponse>}
|
|
431
553
|
*/
|
|
432
554
|
async removeBatchTemp(
|
|
433
|
-
_context:
|
|
555
|
+
_context: IContext,
|
|
434
556
|
_params?: IParams,
|
|
435
557
|
): Promise<IHttpResponse> {
|
|
436
558
|
// if (params) {
|
|
437
559
|
// const keys: string[] = params[this.entity.keyName];
|
|
438
560
|
// if (keys) {
|
|
439
561
|
// try {
|
|
440
|
-
//
|
|
441
|
-
// await s.local.deleteBatch(context, keys);
|
|
562
|
+
// await this.service.local.deleteBatch(context, keys);
|
|
442
563
|
// } catch (err) {
|
|
443
564
|
// return new HttpResponse(err, 500);
|
|
444
565
|
// }
|
|
@@ -464,8 +585,9 @@ export class DEActionMethod extends Method {
|
|
|
464
585
|
if (configs.length > 0) {
|
|
465
586
|
configs.forEach(config => {
|
|
466
587
|
if (config.parentAppDEFieldId) {
|
|
467
|
-
const {
|
|
468
|
-
const
|
|
588
|
+
const { majorAppDataEntityId, parentAppDEFieldId } = config;
|
|
589
|
+
const majorDECodeName = calcDeCodeNameById(majorAppDataEntityId!);
|
|
590
|
+
const majorLowerCodeName = majorDECodeName;
|
|
469
591
|
const pickupLowerDEFName = parentAppDEFieldId.toLowerCase();
|
|
470
592
|
const majorkey = context[majorLowerCodeName];
|
|
471
593
|
// 父主键不能是自身,否则自关系的时候就改错了
|