@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.
Files changed (188) hide show
  1. package/dist/index.esm.js +1855 -648
  2. package/dist/index.system.min.js +1 -1
  3. package/out/app-hub.d.ts +12 -2
  4. package/out/app-hub.d.ts.map +1 -1
  5. package/out/app-hub.js +22 -2
  6. package/out/application.js +1 -1
  7. package/out/command/app/open-app-view/open-app-view.d.ts.map +1 -1
  8. package/out/command/app/open-app-view/open-app-view.js +8 -1
  9. package/out/controller/common/editor/editor.controller.d.ts +24 -0
  10. package/out/controller/common/editor/editor.controller.d.ts.map +1 -1
  11. package/out/controller/common/editor/editor.controller.js +50 -0
  12. package/out/controller/common/view/view.controller.d.ts.map +1 -1
  13. package/out/controller/common/view/view.controller.js +3 -2
  14. package/out/controller/constant/control/index.d.ts +1 -0
  15. package/out/controller/constant/control/index.d.ts.map +1 -1
  16. package/out/controller/constant/control/index.js +1 -0
  17. package/out/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.d.ts +5 -0
  18. package/out/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.d.ts.map +1 -0
  19. package/out/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.js +6 -0
  20. package/out/controller/control/chart/chart.controller.js +1 -1
  21. package/out/controller/control/form/form/form.controller.d.ts.map +1 -1
  22. package/out/controller/control/form/form/form.controller.js +4 -1
  23. package/out/controller/control/form/form-detail/form-detail/form-detail.controller.d.ts.map +1 -1
  24. package/out/controller/control/form/form-detail/form-detail/form-detail.controller.js +4 -0
  25. package/out/controller/control/form/form-detail/form-tab-page/form-tab-page.controller.d.ts +8 -0
  26. package/out/controller/control/form/form-detail/form-tab-page/form-tab-page.controller.d.ts.map +1 -1
  27. package/out/controller/control/form/form-detail/form-tab-page/form-tab-page.controller.js +10 -0
  28. package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.controller.d.ts +8 -0
  29. package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.controller.d.ts.map +1 -1
  30. package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.controller.js +15 -0
  31. package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.state.d.ts +7 -0
  32. package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.state.d.ts.map +1 -1
  33. package/out/controller/control/form/form-detail/form-tab-panel/form-tab-panel.state.js +10 -0
  34. package/out/controller/control/grid/grid/grid.service.d.ts.map +1 -1
  35. package/out/controller/control/grid/grid/grid.service.js +1 -10
  36. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts +7 -0
  37. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.d.ts.map +1 -1
  38. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.js +11 -2
  39. package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.d.ts +0 -7
  40. package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.d.ts.map +1 -1
  41. package/out/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.js +0 -9
  42. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.d.ts +1 -0
  43. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.d.ts.map +1 -1
  44. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.js +1 -0
  45. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.d.ts +10 -0
  46. 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
  47. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.js +12 -0
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  55. 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
  56. 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
  57. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.d.ts +16 -8
  58. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.d.ts.map +1 -1
  59. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.js +26 -12
  60. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.d.ts +59 -0
  61. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.d.ts.map +1 -1
  62. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.js +238 -1
  63. package/out/de-logic/utils/handle-src-val.d.ts +15 -0
  64. package/out/de-logic/utils/handle-src-val.d.ts.map +1 -1
  65. package/out/de-logic/utils/handle-src-val.js +10 -1
  66. package/out/interface/common/i-app-hub-service/i-app-hub-service.d.ts +4 -3
  67. package/out/interface/common/i-app-hub-service/i-app-hub-service.d.ts.map +1 -1
  68. package/out/interface/controller/controller/control/i-tree-grid-ex.controller.d.ts +23 -1
  69. package/out/interface/controller/controller/control/i-tree-grid-ex.controller.d.ts.map +1 -1
  70. package/out/interface/controller/event/control/i-tree-grid-ex.event.d.ts +17 -0
  71. package/out/interface/controller/event/control/i-tree-grid-ex.event.d.ts.map +1 -1
  72. package/out/interface/controller/state/control/i-tree-grid-ex.state.d.ts +60 -2
  73. package/out/interface/controller/state/control/i-tree-grid-ex.state.d.ts.map +1 -1
  74. package/out/interface/provider/i-async-action.provider.d.ts +3 -2
  75. package/out/interface/provider/i-async-action.provider.d.ts.map +1 -1
  76. package/out/interface/service/i-transaction/i-transaction.d.ts +83 -0
  77. package/out/interface/service/i-transaction/i-transaction.d.ts.map +1 -0
  78. package/out/interface/service/i-transaction/i-transaction.js +1 -0
  79. package/out/interface/service/index.d.ts +1 -0
  80. package/out/interface/service/index.d.ts.map +1 -1
  81. package/out/interface/service/service/i-app-de.service.d.ts +9 -3
  82. package/out/interface/service/service/i-app-de.service.d.ts.map +1 -1
  83. package/out/plugin/index.d.ts +1 -1
  84. package/out/plugin/index.d.ts.map +1 -1
  85. package/out/plugin/remote-plugin-item/remote-plugin-item.d.ts +46 -0
  86. package/out/plugin/remote-plugin-item/remote-plugin-item.d.ts.map +1 -1
  87. package/out/register/helper/app-menu-item-register.d.ts.map +1 -1
  88. package/out/register/helper/app-menu-item-register.js +1 -6
  89. package/out/register/helper/panel-item-register.d.ts.map +1 -1
  90. package/out/register/helper/panel-item-register.js +36 -30
  91. package/out/service/dto/method.dto.d.ts +1 -12
  92. package/out/service/dto/method.dto.d.ts.map +1 -1
  93. package/out/service/dto/method.dto.js +8 -20
  94. package/out/service/mqtt/mqtt.service.js +2 -2
  95. package/out/service/service/auth/v7-auth.service.d.ts.map +1 -1
  96. package/out/service/service/auth/v7-auth.service.js +2 -0
  97. package/out/service/service/entity/de.service.d.ts +1 -2
  98. package/out/service/service/entity/de.service.d.ts.map +1 -1
  99. package/out/service/service/entity/de.service.js +5 -2
  100. package/out/service/service/entity/method/de-action.d.ts +13 -1
  101. package/out/service/service/entity/method/de-action.d.ts.map +1 -1
  102. package/out/service/service/entity/method/de-action.js +167 -59
  103. package/out/service/service/entity/method/fetch.d.ts.map +1 -1
  104. package/out/service/service/entity/method/fetch.js +24 -21
  105. package/out/service/service/entity/method/method-renturn.d.ts.map +1 -1
  106. package/out/service/service/entity/method/method-renturn.js +6 -0
  107. package/out/service/utils/de-cache/de-cache.d.ts +11 -1
  108. package/out/service/utils/de-cache/de-cache.d.ts.map +1 -1
  109. package/out/service/utils/de-cache/de-cache.js +122 -18
  110. package/out/service/utils/de-dq-cond/ps-model-cond-engine-base.d.ts.map +1 -1
  111. package/out/service/utils/de-dq-cond/ps-model-cond-engine-base.js +4 -0
  112. package/out/service/utils/dynamic-code-list/dynamic-code-list.d.ts +1 -1
  113. package/out/service/utils/dynamic-code-list/dynamic-code-list.d.ts.map +1 -1
  114. package/out/service/utils/dynamic-code-list/dynamic-code-list.js +25 -26
  115. package/out/service/utils/res-path/res-path.d.ts +2 -2
  116. package/out/service/utils/res-path/res-path.d.ts.map +1 -1
  117. package/out/service/utils/res-path/res-path.js +1 -1
  118. package/out/service/vo/tree-node-data/tree-data-set-node-data.d.ts +6 -0
  119. package/out/service/vo/tree-node-data/tree-data-set-node-data.d.ts.map +1 -1
  120. package/out/service/vo/tree-node-data/tree-data-set-node-data.js +93 -41
  121. package/out/ui-action/provider/front-ui-action-provider.d.ts +1 -1
  122. package/out/ui-action/provider/front-ui-action-provider.d.ts.map +1 -1
  123. package/out/ui-action/provider/front-ui-action-provider.js +5 -1
  124. package/out/ui-logic/ui-logic-node/debug-param-node/debug-param-node.js +1 -1
  125. package/out/ui-logic/ui-logic-node/raw-js-code-node/raw-js-code-node.d.ts.map +1 -1
  126. package/out/ui-logic/ui-logic-node/raw-js-code-node/raw-js-code-node.js +0 -1
  127. package/out/utils/script/script-function.js +1 -1
  128. package/out/utils/ui-domain/transaction.d.ts +66 -0
  129. package/out/utils/ui-domain/transaction.d.ts.map +1 -0
  130. package/out/utils/ui-domain/transaction.js +94 -0
  131. package/out/utils/ui-domain/ui-domain.d.ts +50 -6
  132. package/out/utils/ui-domain/ui-domain.d.ts.map +1 -1
  133. package/out/utils/ui-domain/ui-domain.js +68 -9
  134. package/package.json +5 -5
  135. package/src/app-hub.ts +27 -2
  136. package/src/application.ts +1 -1
  137. package/src/command/app/open-app-view/open-app-view.ts +8 -1
  138. package/src/controller/common/editor/editor.controller.ts +54 -0
  139. package/src/controller/common/view/view.controller.ts +3 -2
  140. package/src/controller/constant/control/index.ts +1 -0
  141. package/src/controller/constant/control/tree-grid-ex/tree-grid-ex-notify.state.ts +5 -0
  142. package/src/controller/control/chart/chart.controller.ts +1 -1
  143. package/src/controller/control/form/form/form.controller.ts +11 -1
  144. package/src/controller/control/form/form-detail/form-detail/form-detail.controller.ts +4 -0
  145. package/src/controller/control/form/form-detail/form-tab-page/form-tab-page.controller.ts +14 -0
  146. package/src/controller/control/form/form-detail/form-tab-panel/form-tab-panel.controller.ts +16 -0
  147. package/src/controller/control/form/form-detail/form-tab-panel/form-tab-panel.state.ts +9 -1
  148. package/src/controller/control/grid/grid/grid.service.ts +1 -11
  149. package/src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts +12 -2
  150. package/src/controller/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.controller.ts +0 -10
  151. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/index.ts +1 -0
  152. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.ts +22 -0
  153. 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
  154. 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
  155. 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
  156. package/src/controller/control/tree-grid-ex/tree-grid-ex-row.state.ts +43 -12
  157. package/src/controller/control/tree-grid-ex/tree-grid-ex.controller.ts +296 -1
  158. package/src/de-logic/utils/handle-src-val.ts +29 -1
  159. package/src/interface/common/i-app-hub-service/i-app-hub-service.ts +4 -3
  160. package/src/interface/controller/controller/control/i-tree-grid-ex.controller.ts +27 -2
  161. package/src/interface/controller/event/control/i-tree-grid-ex.event.ts +15 -1
  162. package/src/interface/controller/state/control/i-tree-grid-ex.state.ts +64 -2
  163. package/src/interface/provider/i-async-action.provider.ts +3 -2
  164. package/src/interface/service/i-transaction/i-transaction.ts +88 -0
  165. package/src/interface/service/index.ts +4 -0
  166. package/src/interface/service/service/i-app-de.service.ts +10 -3
  167. package/src/plugin/index.ts +4 -1
  168. package/src/plugin/remote-plugin-item/remote-plugin-item.ts +43 -0
  169. package/src/register/helper/app-menu-item-register.ts +1 -5
  170. package/src/register/helper/panel-item-register.ts +43 -37
  171. package/src/service/dto/method.dto.ts +7 -20
  172. package/src/service/mqtt/mqtt.service.ts +2 -2
  173. package/src/service/service/auth/v7-auth.service.ts +2 -0
  174. package/src/service/service/entity/de.service.ts +7 -9
  175. package/src/service/service/entity/method/de-action.ts +186 -64
  176. package/src/service/service/entity/method/fetch.ts +28 -29
  177. package/src/service/service/entity/method/method-renturn.ts +6 -0
  178. package/src/service/utils/de-cache/de-cache.ts +128 -19
  179. package/src/service/utils/de-dq-cond/ps-model-cond-engine-base.ts +4 -0
  180. package/src/service/utils/dynamic-code-list/dynamic-code-list.ts +24 -32
  181. package/src/service/utils/res-path/res-path.ts +2 -2
  182. package/src/service/vo/tree-node-data/tree-data-set-node-data.ts +111 -46
  183. package/src/ui-action/provider/front-ui-action-provider.ts +10 -1
  184. package/src/ui-logic/ui-logic-node/debug-param-node/debug-param-node.ts +1 -1
  185. package/src/ui-logic/ui-logic-node/raw-js-code-node/raw-js-code-node.ts +0 -1
  186. package/src/utils/script/script-function.ts +1 -1
  187. package/src/utils/ui-domain/transaction.ts +100 -0
  188. 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
  /**
@@ -57,9 +57,5 @@ export async function getAppMenuItemProvider(
57
57
 
58
58
  // 找应用菜单项类型
59
59
  provider = getProvider(itemType);
60
- if (!provider) {
61
- ibiz.log.error(`找不到应用菜单项类型${itemType}对应的适配器`);
62
- } else {
63
- return provider;
64
- }
60
+ return provider;
65
61
  }
@@ -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 } = model as Required<IPanelItem>;
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
- if (itemType === 'CONTAINER') {
66
- const predefinedType =
67
- (model as IPanelContainer).predefinedType || 'DEFAULT';
68
- const key = `CONTAINER_${predefinedType}`;
69
- provider = getProvider(key);
70
- if (!provider) {
71
- ibiz.log.error(
72
- `找不到面板容器预置类型为${predefinedType}的适配器,注册key为${key}`,
73
- );
74
- } else {
75
- return provider;
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
- if (itemType === 'FIELD') {
95
- const { editor } = model as IPanelField;
96
- if (editor && editor.predefinedType) {
97
- const key = `FIELD_${editor.predefinedType.toUpperCase()}`;
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
- if (this.isLocalMode && !this.inSelfLoop) {
209
- this.service.local.clear();
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 (this.isCalcRs || depth > 10) {
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.debug('mqtt reconnect');
102
+ ibiz.log.warn('mqtt reconnect');
103
103
  });
104
104
  this.client.on('close', () => {
105
- console.debug('mqtt close');
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
- protected model: IAppDataEntity,
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
- if (data) {
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
- return execDELogicAction(deLogic, context, data, params);
62
- }
63
-
64
- if (data && !this.isLocalMode) {
65
- data = await this.inputHandle(context, data);
66
- }
67
-
68
- // 执行变更属性逻辑
69
- if (data && !['READ', 'GETDRAFT'].includes(this.method.actionMode!)) {
70
- await execFieldLogics(this.entity, 'change', context, data, params);
71
- }
72
-
73
- let result: IHttpResponse<IData>;
74
- switch (this.method.codeName) {
75
- case 'Create':
76
- result = await this.create(context, data!, params || {});
77
- break;
78
- case 'Get':
79
- result = await this.get(context, params);
80
- break;
81
- case 'GetDraft':
82
- result = await this.getDraft(context, params);
83
- break;
84
- case 'Remove':
85
- result = await this.remove(context, params);
86
- break;
87
- case 'Update':
88
- result = await this.update(context, data!, params);
89
- break;
90
- case 'CreateTemp':
91
- result = await this.createTemp(context, data!);
92
- break;
93
- case 'GetTemp':
94
- result = await this.getTemp(context, data);
95
- break;
96
- case 'GetDraftTemp':
97
- result = await this.getDraftTemp(context, params);
98
- break;
99
- case 'RemoveTemp':
100
- result = await this.removeTemp(context, data);
101
- break;
102
- case 'UpdateTemp':
103
- result = await this.updateTemp(context, data!);
104
- break;
105
- default: {
106
- let path = this.calcPath(context);
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
- path = `${path}/${srfkey}`;
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: IParams,
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
- // const s = await this.getService();
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 { majorDECodeName, parentAppDEFieldId } = config;
468
- const majorLowerCodeName = majorDECodeName!.toLowerCase();
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
  // 父主键不能是自身,否则自关系的时候就改错了