@gct-paas/design 0.1.5-test.2 → 0.1.6-dev.0

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 (203) hide show
  1. package/dist/index.min.css +1 -1
  2. package/dist/loader.esm.min.js +1 -1
  3. package/es/components/design/design-content/design-content.css +76 -0
  4. package/es/components/design/design-content/design-content.d.ts +190 -0
  5. package/es/components/design/design-content/design-content.mjs +274 -0
  6. package/es/components/design/design-drag-item/design-drag-item.css +179 -0
  7. package/es/components/design/design-drag-item/design-drag-item.d.ts +56 -0
  8. package/es/components/design/design-drag-item/design-drag-item.mjs +237 -0
  9. package/es/components/design/design-drop-container/design-drop-container.css +103 -0
  10. package/es/components/design/design-drop-container/design-drop-container.d.ts +92 -0
  11. package/es/components/design/design-drop-container/design-drop-container.mjs +182 -0
  12. package/es/components/design/design-drop-line/design-drop-line.css +165 -0
  13. package/es/components/design/design-drop-line/design-drop-line.d.ts +73 -0
  14. package/es/components/design/design-drop-line/design-drop-line.mjs +136 -0
  15. package/es/components/design/design-item-actions/design-item-actions.css +97 -0
  16. package/es/components/design/design-item-actions/design-item-actions.d.ts +42 -0
  17. package/es/components/design/design-item-actions/design-item-actions.mjs +147 -0
  18. package/es/components/design/design-item-highlighter/design-item-highlighter.css +70 -0
  19. package/es/components/design/design-item-highlighter/design-item-highlighter.d.ts +168 -0
  20. package/es/components/design/design-item-highlighter/design-item-highlighter.mjs +155 -0
  21. package/es/components/design/design-item-highlighter-container/design-item-highlighter-container.css +85 -0
  22. package/es/components/design/design-item-highlighter-container/design-item-highlighter-container.d.ts +53 -0
  23. package/es/components/design/design-item-highlighter-container/design-item-highlighter-container.mjs +169 -0
  24. package/es/components/design/design-item-hover-title/design-item-hover-title.css +12 -0
  25. package/es/components/design/design-item-hover-title/design-item-hover-title.d.ts +60 -0
  26. package/es/components/design/design-item-hover-title/design-item-hover-title.mjs +60 -0
  27. package/es/components/design/design-item-preview/design-item-preview.css +91 -0
  28. package/es/components/design/design-item-preview/design-item-preview.d.ts +1 -0
  29. package/es/components/design/design-item-preview/design-item-preview.mjs +32 -0
  30. package/es/components/design/design-not-drag-item/design-not-drag-item.css +67 -0
  31. package/es/components/design/design-not-drag-item/design-not-drag-item.d.ts +50 -0
  32. package/es/components/design/design-not-drag-item/design-not-drag-item.mjs +68 -0
  33. package/es/components/design/design-not-found/design-not-found.css +68 -0
  34. package/es/components/design/design-not-found/design-not-found.d.ts +14 -0
  35. package/es/components/design/design-not-found/design-not-found.mjs +19 -0
  36. package/es/components/design/index.d.ts +2 -0
  37. package/es/components/design/index.mjs +2 -0
  38. package/es/components/design-save-tip/design-save-tip.mjs +1 -1
  39. package/es/components/editor/index.mjs +2 -0
  40. package/es/components/editor/length-unit-editor/length-unit-editor.vue.d.ts +13 -0
  41. package/es/components/editor/length-unit-editor/length-unit-editor.vue.mjs +5 -0
  42. package/es/components/editor/length-unit-editor/length-unit-editor.vue_vue_type_script_setup_true_name_length-unit-editor_lang.mjs +47 -0
  43. package/es/components/field-transfer/components/field-transfer-modal.vue.d.ts +5 -1
  44. package/es/components/field-transfer/components/field-transfer-modal.vue.mjs +2 -2
  45. package/es/components/field-transfer/components/field-transfer-modal.vue_vue_type_script_setup_true_name_field-transfer-modal_lang.mjs +2 -1
  46. package/es/components/field-transfer/components/field-transfer-modal.vue_vue_type_style_index_0_scoped_711e6992_lang.css +8 -0
  47. package/es/components/field-transfer/index.d.ts +2 -0
  48. package/es/components/field-transfer/index.mjs +1 -0
  49. package/es/components/index.d.ts +5 -2
  50. package/es/components/index.mjs +10 -2
  51. package/es/components/material/index.d.ts +1 -0
  52. package/es/components/material/index.mjs +1 -0
  53. package/es/components/material/material-content/material-content.css +86 -0
  54. package/es/components/material/material-content/material-content.d.ts +1 -0
  55. package/es/components/material/material-content/material-content.mjs +49 -0
  56. package/es/components/material/material-module/material-module.css +104 -0
  57. package/es/components/material/material-module/material-module.d.ts +60 -0
  58. package/es/components/material/material-module/material-module.mjs +67 -0
  59. package/es/components/material/material-module-drag-container/material-module-drag-container.css +69 -0
  60. package/es/components/material/material-module-drag-container/material-module-drag-container.d.ts +56 -0
  61. package/es/components/material/material-module-drag-container/material-module-drag-container.mjs +21 -0
  62. package/es/components/material/material-module-drag-item/material-module-drag-item.css +83 -0
  63. package/es/components/material/material-module-drag-item/material-module-drag-item.d.ts +13 -0
  64. package/es/components/material/material-module-drag-item/material-module-drag-item.mjs +66 -0
  65. package/es/components/material/material-outline-tree/material-outline-tree.css +81 -0
  66. package/es/components/material/material-outline-tree/material-outline-tree.d.ts +13 -0
  67. package/es/components/material/material-outline-tree/material-outline-tree.mjs +67 -0
  68. package/es/components/material/material-tab-pane/material-tab-pane.css +68 -0
  69. package/es/components/material/material-tab-pane/material-tab-pane.d.ts +13 -0
  70. package/es/components/material/material-tab-pane/material-tab-pane.mjs +19 -0
  71. package/es/components/material/material-tabs/material-tabs.css +105 -0
  72. package/es/components/material/material-tabs/material-tabs.d.ts +103 -0
  73. package/es/components/material/material-tabs/material-tabs.mjs +44 -0
  74. package/es/components/modal-name-editor/modal-name-editor.d.ts +1 -11
  75. package/es/components/modal-name-editor/modal-name-editor.mjs +27 -38
  76. package/es/components/multi-field/index.d.ts +2 -0
  77. package/es/components/multi-field/index.mjs +1 -0
  78. package/es/components/multi-field/multi-field-display.vue.d.ts +8 -0
  79. package/es/components/multi-field/multi-field-display.vue.mjs +7 -0
  80. package/es/components/multi-field/multi-field-display.vue_vue_type_script_setup_true_lang.mjs +32 -0
  81. package/es/components/multi-field/multi-field-display.vue_vue_type_style_index_0_scoped_802ade7b_lang.css +4 -0
  82. package/es/components/multi-field/multi-field-item.vue.d.ts +6 -0
  83. package/es/components/multi-field/multi-field-item.vue.mjs +7 -0
  84. package/es/components/multi-field/multi-field-item.vue_vue_type_script_setup_true_lang.mjs +47 -0
  85. package/es/components/multi-field/multi-field-item.vue_vue_type_style_index_0_scoped_881cb08e_lang.css +31 -0
  86. package/es/components/panel/index.d.ts +1 -0
  87. package/es/components/panel/index.mjs +1 -0
  88. package/es/components/panel/panel-content/panel-content.css +189 -0
  89. package/es/components/panel/panel-content/panel-content.d.ts +19 -0
  90. package/es/components/panel/panel-content/panel-content.mjs +48 -0
  91. package/es/components/panel/panel-form/panel-form.css +67 -0
  92. package/es/components/panel/panel-form/panel-form.d.ts +62 -0
  93. package/es/components/panel/panel-form/panel-form.mjs +59 -0
  94. package/es/components/panel/panel-path/panel-path.css +89 -0
  95. package/es/components/panel/panel-path/panel-path.d.ts +35 -0
  96. package/es/components/panel/panel-path/panel-path.mjs +52 -0
  97. package/es/components/user-occupy/user-occupy.vue.mjs +2 -2
  98. package/es/components/user-occupy/user-occupy.vue_vue_type_script_setup_true_lang.mjs +2 -2
  99. package/es/components/user-occupy/{user-occupy.vue_vue_type_style_index_0_scoped_24cb9749_lang.css → user-occupy.vue_vue_type_style_index_0_scoped_9b136922_lang.css} +6 -6
  100. package/es/controller/index.d.ts +1 -0
  101. package/es/controller/index.mjs +1 -0
  102. package/es/controller/view/design-view.controller.d.ts +48 -0
  103. package/es/controller/view/design-view.controller.mjs +150 -0
  104. package/es/create-app-vue.mjs +2 -0
  105. package/es/editor/content-tag-style/content-tag-style.css +164 -0
  106. package/es/editor/content-tag-style/content-tag-style.d.ts +112 -0
  107. package/es/editor/content-tag-style/content-tag-style.mjs +80 -0
  108. package/es/editor/content-tag-style/index.d.ts +8 -0
  109. package/es/editor/content-tag-style/index.mjs +11 -0
  110. package/es/editor/field-info-editor/field-info-editor.css +125 -0
  111. package/es/editor/field-info-editor/field-info-editor.d.ts +111 -0
  112. package/es/editor/field-info-editor/field-info-editor.mjs +38 -0
  113. package/es/editor/field-info-editor/index.d.ts +8 -0
  114. package/es/editor/field-info-editor/index.mjs +9 -0
  115. package/es/editor/index.d.ts +5 -0
  116. package/es/editor/index.mjs +19 -0
  117. package/es/editor/model-field-select/index.d.ts +8 -0
  118. package/es/editor/model-field-select/index.mjs +9 -0
  119. package/es/editor/model-field-select/model-field-select.css +148 -0
  120. package/es/editor/model-field-select/model-field-select.d.ts +42 -0
  121. package/es/editor/model-field-select/model-field-select.mjs +217 -0
  122. package/es/editor/style-border/index.d.ts +4 -0
  123. package/es/editor/style-border/index.mjs +11 -0
  124. package/es/editor/style-border/style-border.d.ts +35 -0
  125. package/es/editor/style-border/style-border.mjs +38 -0
  126. package/es/editor/style-font/index.d.ts +4 -0
  127. package/es/editor/style-font/index.mjs +11 -0
  128. package/es/editor/style-font/style-font.css +86 -0
  129. package/es/editor/style-font/style-font.d.ts +35 -0
  130. package/es/editor/style-font/style-font.mjs +36 -0
  131. package/es/editor/style-position/index.d.ts +4 -0
  132. package/es/editor/style-position/index.mjs +11 -0
  133. package/es/editor/style-position/style-position.d.ts +35 -0
  134. package/es/editor/style-position/style-position.mjs +35 -0
  135. package/es/editor/style-spacing/index.d.ts +4 -0
  136. package/es/editor/style-spacing/index.mjs +11 -0
  137. package/es/editor/style-spacing/style-spacing.d.ts +34 -0
  138. package/es/editor/style-spacing/style-spacing.mjs +60 -0
  139. package/es/hooks/design-view/designer/useDesignSave.mjs +3 -1
  140. package/es/hooks/design-view/layout/useToolkit.mjs +3 -3
  141. package/es/hooks/index.d.ts +2 -1
  142. package/es/hooks/index.mjs +3 -2
  143. package/es/hooks/use-design-view-controller/use-design-view-controller.d.ts +11 -0
  144. package/es/hooks/use-design-view-controller/use-design-view-controller.mjs +31 -0
  145. package/es/index.d.ts +5 -2
  146. package/es/index.mjs +24 -8
  147. package/es/interface/controller/i-design-view.controller.d.ts +3 -5
  148. package/es/interface/form-editor/child-list-editor/child-list-editor.d.ts +114 -0
  149. package/es/interface/form-editor/index.d.ts +9 -0
  150. package/es/interface/form-editor/style-border/i-style-border.controller.d.ts +11 -0
  151. package/es/interface/form-editor/style-border/i-style-border.d.ts +22 -0
  152. package/es/interface/form-editor/style-font/i-style-font.controller.d.ts +11 -0
  153. package/es/interface/form-editor/style-font/i-style-font.d.ts +13 -0
  154. package/es/interface/form-editor/style-position/i-style-position.controller.d.ts +11 -0
  155. package/es/interface/form-editor/style-position/i-style-position.d.ts +13 -0
  156. package/es/interface/form-editor/style-spacing/i-style-spacing.controller.d.ts +11 -0
  157. package/es/interface/form-editor/style-spacing/i-style-spacing.d.ts +22 -0
  158. package/es/interface/index.d.ts +2 -0
  159. package/es/interface/provider/i-node-provider.d.ts +140 -0
  160. package/es/locale/sys/app.d.ts +4 -0
  161. package/es/locale/sys/appDesigner.d.ts +5 -0
  162. package/es/locale/sys/cardDesign.d.ts +13 -0
  163. package/es/locale/sys/component.d.ts +19 -0
  164. package/es/locale/sys/model.d.ts +6 -0
  165. package/es/locale/sys/pageDesigner.d.ts +28 -0
  166. package/es/locale/sys/platform.d.ts +7 -0
  167. package/es/locale/sys.d.ts +22 -0
  168. package/es/provider/design-editor-node/design-editor-node.provider.d.ts +41 -0
  169. package/es/provider/design-editor-node/design-editor-node.provider.mjs +57 -0
  170. package/es/provider/index.d.ts +2 -0
  171. package/es/provider/index.mjs +2 -0
  172. package/es/provider/node-base/node-base.provider.d.ts +25 -0
  173. package/es/provider/node-base/node-base.provider.mjs +34 -0
  174. package/es/register/index.d.ts +1 -0
  175. package/es/register/index.mjs +1 -0
  176. package/es/register/node/node.register.d.ts +113 -0
  177. package/es/register/node/node.register.mjs +141 -0
  178. package/es/store/index.d.ts +1 -0
  179. package/es/store/index.mjs +1 -0
  180. package/es/store/view/design-view.store.d.ts +12 -0
  181. package/es/store/view/design-view.store.mjs +327 -0
  182. package/es/utils/can-drop/can-drop.d.ts +12 -0
  183. package/es/utils/can-drop/can-drop.mjs +48 -0
  184. package/es/utils/design-plugin-pkg-util/design-plugin-pkg-util.d.ts +1 -1
  185. package/es/utils/design-plugin-pkg-util/design-plugin-pkg-util.mjs +29 -1
  186. package/es/utils/expression/index.d.ts +1 -0
  187. package/es/utils/expression/index.mjs +43 -0
  188. package/es/utils/index.d.ts +2 -0
  189. package/es/utils/index.mjs +2 -0
  190. package/package.json +12 -11
  191. package/es/components/field-cascader/index.d.ts +0 -2
  192. package/es/components/field-cascader/index.mjs +0 -1
  193. package/es/components/field-cascader/src/FieldCascader.vue.d.ts +0 -87
  194. package/es/components/field-cascader/src/FieldCascader.vue.mjs +0 -6
  195. package/es/components/field-cascader/src/FieldCascader.vue_vue_type_script_setup_true_lang.mjs +0 -115
  196. package/es/components/field-cascader/src/FieldCascader.vue_vue_type_style_index_0_lang.css +0 -69
  197. package/es/components/field-cascader/src/SearchInput.vue.d.ts +0 -11
  198. package/es/components/field-cascader/src/SearchInput.vue.mjs +0 -7
  199. package/es/components/field-cascader/src/SearchInput.vue_vue_type_script_setup_true_lang.mjs +0 -38
  200. package/es/components/field-cascader/src/SearchInput.vue_vue_type_style_index_0_scoped_512c4b38_lang.css +0 -9
  201. package/es/components/field-cascader/src/hooks.d.ts +0 -129
  202. package/es/components/field-cascader/src/hooks.mjs +0 -163
  203. package/es/components/field-transfer/components/field-transfer-modal.vue_vue_type_style_index_0_scoped_0c9dd8a1_lang.css +0 -5
@@ -0,0 +1,141 @@
1
+ import { DesignNodePrefix, DesignViewPrefix } from "../../constant/index.mjs";
2
+ import "@gct-paas/core";
3
+ //#region src/register/node/node.register.ts
4
+ /**
5
+ * 设计界面节点适配器注册
6
+ *
7
+ * @author zhanghanrui
8
+ * @date 2024-07-06 11:07:57
9
+ * @export
10
+ * @class NodeRegister
11
+ */
12
+ var NodeRegister = class {
13
+ /**
14
+ * 适配器缓存
15
+ *
16
+ * @author zhanghanrui
17
+ * @date 2024-07-06 11:07:15
18
+ * @protected
19
+ * @static
20
+ */
21
+ static map = /* @__PURE__ */ new Map();
22
+ /**
23
+ * 实例缓存
24
+ *
25
+ * @author zhanghanrui
26
+ * @date 2024-07-06 12:07:33
27
+ * @protected
28
+ * @static
29
+ * @type {Map<string, INodeProvider>}
30
+ */
31
+ static cache = /* @__PURE__ */ new Map();
32
+ /**
33
+ * 注册适配器
34
+ *
35
+ * @author zhanghanrui
36
+ * @date 2024-07-09 09:07:17
37
+ * @static
38
+ * @param {string} name
39
+ * @param {() => INodeProvider} provider
40
+ * @param {string} [prefix]
41
+ */
42
+ static register(name, provider, prefix) {
43
+ const tag = prefix ? `${prefix}:${name}` : name;
44
+ this.map.set(tag, provider);
45
+ }
46
+ /**
47
+ * 获取适配器
48
+ *
49
+ * @author zhanghanrui
50
+ * @date 2024-07-09 09:07:49
51
+ * @static
52
+ * @param {string} name
53
+ * @param {string} [prefix]
54
+ * @return {*} {(INodeProvider | null)}
55
+ */
56
+ static get(name, prefix) {
57
+ const tag = prefix ? `${prefix}:${name}` : name;
58
+ if (this.cache.has(tag)) return this.cache.get(tag);
59
+ const provider = this.map.get(tag);
60
+ if (provider) {
61
+ const ins = provider();
62
+ this.cache.set(tag, ins);
63
+ return ins;
64
+ }
65
+ return null;
66
+ }
67
+ /**
68
+ * 注册自定义首页插件
69
+ *
70
+ * @author zhanghanrui
71
+ * @date 2024-07-09 09:07:44
72
+ * @static
73
+ * @param {string} name
74
+ * @param {() => INodeProvider} provider
75
+ */
76
+ static registerCustomHome(name, provider) {
77
+ this.register(name, provider, DesignViewPrefix.CUSTOM_HOME);
78
+ }
79
+ /**
80
+ * 注册自定义导航页面插件
81
+ *
82
+ * @author zhanghanrui
83
+ * @date 2024-08-19 17:08:06
84
+ * @static
85
+ * @param {string} name
86
+ * @param {() => INodeProvider} provider
87
+ */
88
+ static registerCustomExpView(name, provider) {
89
+ this.register(name, provider, DesignViewPrefix.CUSTOM_EXP_VIEW);
90
+ }
91
+ /**
92
+ * 注册自定义导航菜单页面插件
93
+ *
94
+ * @author zhanghanrui
95
+ * @date 2024-08-24 10:08:51
96
+ * @static
97
+ * @param {string} name
98
+ * @param {() => INodeProvider} provider
99
+ */
100
+ static registerCustomExpMenu(name, provider) {
101
+ this.register(name, provider, DesignViewPrefix.CUSTOM_EXP_MENU);
102
+ }
103
+ /**
104
+ * 注册设计编辑器节点
105
+ *
106
+ * @author chitanda
107
+ * @date 2025-07-07 16:07:58
108
+ * @static
109
+ * @param {FIELD_TYPE} fieldType
110
+ * @param {() => INodeProvider} provider
111
+ */
112
+ static registerDesignEditorNode(fieldType, provider) {
113
+ this.register(fieldType, provider, DesignNodePrefix.DESIGN_EDITOR);
114
+ }
115
+ /**
116
+ * 根据字段类型获取设计编辑器节点
117
+ *
118
+ * @author chitanda
119
+ * @date 2025-07-07 16:07:06
120
+ * @static
121
+ * @param {FIELD_TYPE} fieldType
122
+ * @returns {*} {(INodeProvider | null)}
123
+ */
124
+ static getDesignEditorNode(fieldType) {
125
+ return this.get(fieldType, DesignNodePrefix.DESIGN_EDITOR);
126
+ }
127
+ /**
128
+ * 获取自定义首页插件
129
+ *
130
+ * @author zhanghanrui
131
+ * @date 2024-07-09 09:07:58
132
+ * @static
133
+ * @param {string} name
134
+ * @return {*} {(INodeProvider | null)}
135
+ */
136
+ static getCustomHome(name) {
137
+ return this.get(name, DesignViewPrefix.CUSTOM_HOME);
138
+ }
139
+ };
140
+ //#endregion
141
+ export { NodeRegister };
@@ -0,0 +1 @@
1
+ export { useDesignViewStore, type IDesignViewStore, } from './view/design-view.store';
@@ -0,0 +1 @@
1
+ import "./view/design-view.store.mjs";
@@ -0,0 +1,12 @@
1
+ import { IDesignViewState, IDesignViewActions } from '../../interface';
2
+ /**
3
+ * 设计视图状态
4
+ */
5
+ export declare const useDesignViewStore: () => import('pinia').Store<string, IDesignViewState, IObject, IDesignViewActions>;
6
+ /**
7
+ * 设计视图 store 类型
8
+ *
9
+ * @export
10
+ * @typedef {ReturnType<typeof useDesignViewStore>}
11
+ */
12
+ export type IDesignViewStore = ReturnType<typeof useDesignViewStore>;
@@ -0,0 +1,327 @@
1
+ import { DesignNodeType, DesignViewPrefix, InsertNodeMode } from "../../constant/index.mjs";
2
+ import { NodeRegister } from "../../register/node/node.register.mjs";
3
+ import "../../register/index.mjs";
4
+ import { cloneDeep, merge } from "lodash-es";
5
+ import { LinkedList } from "@gct-paas/core";
6
+ import { reactive } from "vue";
7
+ import { defineStore } from "pinia";
8
+ import { uuid } from "@jsplumb/browser-ui";
9
+ //#region src/store/view/design-view.store.ts
10
+ /**
11
+ * 设计视图状态
12
+ */
13
+ var useDesignViewStore = () => {
14
+ const key = "design-view___" + uuid();
15
+ return defineStore(key, {
16
+ state() {
17
+ return {
18
+ uuid: key,
19
+ rootExpLabel: "页面",
20
+ prefix: DesignViewPrefix.CUSTOM_HOME,
21
+ isTriggerCache: true,
22
+ map: /* @__PURE__ */ new Map(),
23
+ pageNode: null,
24
+ selected: null,
25
+ hoverId: null,
26
+ isDragging: false,
27
+ isChange: false,
28
+ history: new LinkedList(),
29
+ count: 0,
30
+ tree: [],
31
+ expansions: /* @__PURE__ */ new Set(),
32
+ dropContainer: null
33
+ };
34
+ },
35
+ actions: {
36
+ getParentKey(id, parent = null, items = []) {
37
+ if (!id) return null;
38
+ if (items.length === 0) items = this.tree;
39
+ for (const _ of items) {
40
+ if (_.id === id) return parent ? parent.id : null;
41
+ if (_.children && _.children.length > 0) {
42
+ const result = this.getParentKey(id, _, _.children);
43
+ if (result) return result;
44
+ }
45
+ }
46
+ return null;
47
+ },
48
+ getTreeItem(tag, items = []) {
49
+ if (!tag) return null;
50
+ if (items.length === 0) items = this.tree;
51
+ for (const _ of items) {
52
+ if (_.id === tag) return _;
53
+ if (_.children && _.children.length > 0) {
54
+ const item = this.getTreeItem(tag, _.children);
55
+ if (item) return item;
56
+ }
57
+ }
58
+ return null;
59
+ },
60
+ getTreeItems(tag) {
61
+ let items = this.tree;
62
+ const treeItem = this.getTreeItem(tag);
63
+ if (treeItem) {
64
+ if (!treeItem.children) treeItem.children = [];
65
+ items = treeItem.children;
66
+ }
67
+ return items;
68
+ },
69
+ getChildren(node) {
70
+ if (node) {
71
+ const tag = typeof node === "string" ? node : node.id;
72
+ const item = this.getTreeItem(tag);
73
+ if (item && item.children) return item.children.map((_) => this.map.get(_.id));
74
+ } else return this.tree.map((_) => {
75
+ return this.map.get(_.id);
76
+ });
77
+ return [];
78
+ },
79
+ setDragging(bol) {
80
+ this.isDragging = bol;
81
+ },
82
+ activePage() {
83
+ this.selected = this.pageNode;
84
+ },
85
+ setActive(node) {
86
+ if (node == null) this.selected = null;
87
+ else if (typeof node === "string") if (this.map.has(node)) this.selected = this.map.get(node);
88
+ else console.warn(`节点[${node}]不存在`);
89
+ else this.selected = node;
90
+ },
91
+ getNode(tag) {
92
+ if (this.map.has(tag)) return this.map.get(tag);
93
+ return null;
94
+ },
95
+ updateNode(node) {
96
+ if (node && (node.type === DesignNodeType.PAGE || node.type === DesignNodeType.PAGE_LOWER)) {
97
+ this.pageNode = merge(this.pageNode, node);
98
+ this.pageNode.updateDate = Date.now();
99
+ this.isChange = true;
100
+ this.countAdd();
101
+ return;
102
+ }
103
+ if (!this.map.has(node.id)) {
104
+ node.updateDate = Date.now();
105
+ this.map.set(node.id, cloneDeep(node));
106
+ } else {
107
+ const data = this.map.get(node.id);
108
+ node.updateDate = Date.now();
109
+ this.map.set(node.id, merge(data, node));
110
+ }
111
+ this.isChange = true;
112
+ },
113
+ setNode(pKey, node, index) {
114
+ if (node && (node.type === DesignNodeType.PAGE || node.type === DesignNodeType.PAGE_LOWER)) {
115
+ this.pageNode = merge(this.pageNode, node);
116
+ this.pageNode.updateDate = Date.now();
117
+ this.isChange = true;
118
+ this.countAdd();
119
+ return node;
120
+ }
121
+ if (!pKey) pKey = this.getParentKey(node.id);
122
+ const nodes = this.getChildren(pKey);
123
+ let isNew = false;
124
+ if (!this.map.has(node.id)) {
125
+ node.updateDate = Date.now();
126
+ isNew = true;
127
+ } else {
128
+ const data = this.map.get(node.id);
129
+ node.updateDate = Date.now();
130
+ Object.assign(data, node);
131
+ node = data;
132
+ }
133
+ this.map.set(node.id, node);
134
+ if (nodes.length > 0 && index != null && index >= 0) this.insertNode(InsertNodeMode.BEFORE, nodes[index], node);
135
+ else if (isNew) {
136
+ this.setTreeItem(pKey, node.id, index);
137
+ this.cacheHistory();
138
+ }
139
+ this.isChange = true;
140
+ this.countAdd();
141
+ return node;
142
+ },
143
+ setTreeItem(pKey, id, i) {
144
+ const items = this.getTreeItems(pKey);
145
+ if (i != null) items.splice(i, 0, { id });
146
+ else items.push({ id });
147
+ },
148
+ moveTreeItem(oldPid, newPid, id, i) {
149
+ if (oldPid === newPid) {
150
+ const items = this.getTreeItems(newPid);
151
+ const oldIndex = items.findIndex((_) => _.id === id);
152
+ if (oldIndex !== -1) {
153
+ if (oldIndex === i) return;
154
+ const item = items[oldIndex];
155
+ if (i != null) if (i < oldIndex) {
156
+ items.splice(oldIndex, 1);
157
+ items.splice(i, 0, item);
158
+ } else {
159
+ items.splice(i, 0, item);
160
+ items.splice(oldIndex, 1);
161
+ }
162
+ else {
163
+ items.splice(oldIndex, 1);
164
+ items.push(item);
165
+ }
166
+ } else if (i != null) items.splice(i, 0, { id });
167
+ else items.push({ id });
168
+ return;
169
+ }
170
+ const oldItems = this.getTreeItems(oldPid);
171
+ const newItems = this.getTreeItems(newPid);
172
+ const oldIndex = oldItems.findIndex((_) => _.id === id);
173
+ if (oldIndex === -1) this.setTreeItem(newPid, id, i);
174
+ else {
175
+ const item = oldItems[oldIndex];
176
+ oldItems.splice(oldIndex, 1);
177
+ if (i != null) newItems.splice(i, 0, item);
178
+ else newItems.push(item);
179
+ }
180
+ },
181
+ deleteNode(arg) {
182
+ const tag = typeof arg === "string" ? arg : arg.id;
183
+ const data = this.getNode(tag);
184
+ if (data) {
185
+ const pKey = this.getParentKey(data.id);
186
+ const items = this.getTreeItems(pKey);
187
+ const i = items.findIndex((_) => _.id === data.id);
188
+ if (i !== -1) items.splice(i, 1);
189
+ this.map.delete(data.id);
190
+ }
191
+ this.isChange = true;
192
+ this.countAdd();
193
+ this.cacheHistory();
194
+ return data;
195
+ },
196
+ setNodes(nodes) {
197
+ nodes.forEach((node) => {
198
+ const p = NodeRegister.get(node.type, this.prefix);
199
+ if (p) {
200
+ const data = p.create(node);
201
+ if (data) this.map.set(data.id, data);
202
+ } else console.warn(`节点类型[${node.type}],未注册适配器`);
203
+ });
204
+ },
205
+ insertNode(mode, node, data) {
206
+ const oldPKey = this.getParentKey(data.id);
207
+ const newPKey = this.getParentKey(node.id);
208
+ const id = data.id;
209
+ const index = this.getTreeItems(newPKey).findIndex((_) => _.id === node.id);
210
+ switch (mode) {
211
+ case InsertNodeMode.BEFORE:
212
+ this.moveTreeItem(oldPKey, newPKey, id, index);
213
+ break;
214
+ case InsertNodeMode.AFTER:
215
+ this.moveTreeItem(oldPKey, newPKey, id, index + 1);
216
+ break;
217
+ default:
218
+ }
219
+ this.map.set(data.id, data);
220
+ this.isChange = true;
221
+ this.countAdd();
222
+ this.cacheHistory();
223
+ return true;
224
+ },
225
+ setData: async function(data) {
226
+ if (data) {
227
+ if (!data.pageNode) {
228
+ const p = NodeRegister.get(DesignNodeType.PAGE, this.prefix) || NodeRegister.get(DesignNodeType.PAGE_LOWER, this.prefix);
229
+ if (p) {
230
+ this.pageNode = reactive(p.create());
231
+ this.pageNode.data = reactive(this.pageNode.data || {});
232
+ } else console.warn(`节点类型[${DesignNodeType.PAGE}],未注册适配器`);
233
+ } else {
234
+ this.pageNode = reactive(data.pageNode);
235
+ this.pageNode.data = reactive(this.pageNode.data || {});
236
+ }
237
+ this.setNodes(data.nodes);
238
+ this.selected = this.pageNode;
239
+ if (data.nodes && data.nodes.length > 0 && (!data.tree || data.tree.length === 0)) {
240
+ const structureTree = (items) => {
241
+ const arr = [];
242
+ items.forEach((item) => {
243
+ const children = data.nodes.filter((_) => _.parentId === item.id).sort((a, b) => a.order - b.order);
244
+ if (children.length > 0) arr.push({
245
+ id: item.id,
246
+ children: structureTree(children)
247
+ });
248
+ else arr.push({ id: item.id });
249
+ });
250
+ return arr;
251
+ };
252
+ this.tree = structureTree(data.nodes.filter((_) => !_.parentId).sort((a, b) => a.order - b.order));
253
+ } else this.tree = data.tree || [];
254
+ this.cacheHistory();
255
+ }
256
+ },
257
+ getData() {
258
+ const deep = (items) => {
259
+ const arr = [];
260
+ if (items && items.length > 0) items.forEach((item) => {
261
+ arr.push(item.id);
262
+ if (item.children && item.children.length > 0) {
263
+ const childArr = deep(item.children);
264
+ arr.push(...childArr);
265
+ }
266
+ });
267
+ return arr;
268
+ };
269
+ const keys = deep(this.tree);
270
+ const nodes = cloneDeep(Array.from(this.map.values())).filter((_) => {
271
+ return keys.includes(_.id);
272
+ });
273
+ return {
274
+ type: this.prefix,
275
+ pageNode: cloneDeep(this.pageNode),
276
+ nodes,
277
+ tree: cloneDeep(this.tree)
278
+ };
279
+ },
280
+ getPaths(id) {
281
+ const arr = [];
282
+ let node = this.getNode(id);
283
+ if (node) {
284
+ arr.push(node);
285
+ let pKey = this.getParentKey(node.id);
286
+ while (pKey) {
287
+ node = this.getNode(pKey);
288
+ if (!node) break;
289
+ arr.unshift(node);
290
+ pKey = this.getParentKey(node.id);
291
+ }
292
+ }
293
+ return arr;
294
+ },
295
+ undo() {
296
+ this.history.prev();
297
+ if (this.history.active) {
298
+ this.tree = cloneDeep(this.history.active.data);
299
+ this.selected = this.pageNode;
300
+ this.isChange = true;
301
+ }
302
+ },
303
+ redo() {
304
+ this.history.next();
305
+ if (this.history.active) {
306
+ this.tree = cloneDeep(this.history.active.data);
307
+ this.selected = this.pageNode;
308
+ this.isChange = true;
309
+ }
310
+ },
311
+ cacheHistory() {
312
+ if (this.isTriggerCache) this.history.add(cloneDeep(this.tree));
313
+ },
314
+ countAdd() {
315
+ this.count += 1;
316
+ },
317
+ enableCache() {
318
+ this.isTriggerCache = true;
319
+ },
320
+ disableCache() {
321
+ this.isTriggerCache = false;
322
+ }
323
+ }
324
+ })();
325
+ };
326
+ //#endregion
327
+ export { useDesignViewStore };
@@ -0,0 +1,12 @@
1
+ import { IDesignNode, IDragDataItem } from '@gct-paas/schema';
2
+ import { IDesignViewStore } from '../../store';
3
+ /**
4
+ * 是否可以放置
5
+ *
6
+ * @export
7
+ * @param {IDesignNode} node 当前节点
8
+ * @param {IDesignViewStore} store 设计视图 store
9
+ * @param {IDragDataItem} item 拖拽数据
10
+ * @returns {*} {boolean}
11
+ */
12
+ export declare function isCanCrop(node: IDesignNode, store: IDesignViewStore, item: IDragDataItem): boolean;
@@ -0,0 +1,48 @@
1
+ import { NodeRegister } from "../../register/node/node.register.mjs";
2
+ import "../../register/index.mjs";
3
+ import { intersection, union } from "lodash-es";
4
+ //#region src/utils/can-drop/can-drop.ts
5
+ /**
6
+ * 是否可以放置
7
+ *
8
+ * @export
9
+ * @param {IDesignNode} node 当前节点
10
+ * @param {IDesignViewStore} store 设计视图 store
11
+ * @param {IDragDataItem} item 拖拽数据
12
+ * @returns {*} {boolean}
13
+ */
14
+ function isCanCrop(node, store, item) {
15
+ let isDrop = true;
16
+ if (node) {
17
+ const nodes = store.getPaths(node.id);
18
+ if (nodes.findIndex((_) => _.id === item.id) !== -1) return false;
19
+ const providers = nodes.map((node) => {
20
+ return NodeRegister.get(node.type, store.prefix);
21
+ });
22
+ const whiteList = intersection(...providers.map((_) => _.whiteList).filter((_) => !!_));
23
+ const blackList = union(...providers.map((_) => _.blackList).filter((_) => !!_));
24
+ const strWhiteList = whiteList.filter((val) => typeof val === "string");
25
+ const regWhiteList = whiteList.filter((val) => val instanceof RegExp);
26
+ if (whiteList.length > 0) {
27
+ if (item.types.filter((_) => {
28
+ return regWhiteList.some((reg) => !reg.test(_)) && !strWhiteList.includes(_);
29
+ }).length > 0) isDrop = false;
30
+ }
31
+ if (isDrop === true && blackList.length > 0) {
32
+ let items = [];
33
+ if (whiteList.length > 0) items = item.types.filter((_) => {
34
+ return regWhiteList.some((reg) => reg.test(_)) || strWhiteList.includes(_);
35
+ });
36
+ else items = item.types;
37
+ const strBlackList = blackList.filter((val) => typeof val === "string");
38
+ const regBlackList = blackList.filter((val) => val instanceof RegExp);
39
+ const blacks = items.filter((_) => {
40
+ return regBlackList.some((reg) => reg.test(_));
41
+ });
42
+ if (intersection(strBlackList, items).length > 0 || blacks.length > 0) isDrop = false;
43
+ }
44
+ }
45
+ return isDrop;
46
+ }
47
+ //#endregion
48
+ export { isCanCrop };
@@ -15,7 +15,7 @@ export declare class DesignPluginPgkUtil extends PluginPgkUtil {
15
15
  * @param {Platform} platform
16
16
  * @returns {*} {Promise<LoadPluginResult>}
17
17
  */
18
- static loadDesignPlugin(_app: App, _platform: Platform, _kit?: string[]): Promise<LoadPluginResult>;
18
+ static loadDesignPlugin(_app: App, platform: Platform, kit?: string[]): Promise<LoadPluginResult>;
19
19
  /**
20
20
  * 加载设计态中,已经被从配置中移除的插件
21
21
  *
@@ -15,7 +15,35 @@ var DesignPluginPgkUtil = class extends PluginPgkUtil {
15
15
  * @param {Platform} platform
16
16
  * @returns {*} {Promise<LoadPluginResult>}
17
17
  */
18
- static async loadDesignPlugin(_app, _platform, _kit = []) {
18
+ static async loadDesignPlugin(_app, platform, kit = []) {
19
+ try {
20
+ const result = await this.loadPlugin(PluginModeEnum.DESIGN, platform, kit);
21
+ const [configs, moduleMap] = result;
22
+ configs.forEach((config) => {
23
+ config.plugins.forEach((plugin) => {
24
+ const module = moduleMap[plugin.key];
25
+ if (!module) {
26
+ console.error(`${plugin.key} 插件加载失败,请检查插件配置是否正确`);
27
+ return;
28
+ }
29
+ switch (platform) {
30
+ case Platform.MOBILE:
31
+ if (module.mobile) _gct.register.designer.mobile.register(plugin.key, () => new module.mobile());
32
+ break;
33
+ case Platform.PAD:
34
+ if (module.mobile) _gct.register.designer.pad.register(plugin.key, () => new module.mobile());
35
+ break;
36
+ case Platform.WEB:
37
+ if (module.web) _gct.register.designer.web.register(plugin.key, () => new module.web());
38
+ break;
39
+ default: console.warn(`未知平台 ${platform},无法注册插件 ${plugin.key}`);
40
+ }
41
+ });
42
+ });
43
+ return result;
44
+ } catch (error) {
45
+ console.error(error);
46
+ }
19
47
  return [[], {}];
20
48
  }
21
49
  /**
@@ -0,0 +1 @@
1
+ export declare const asyncIdentify: import('@vueuse/core').UseMemoizeReturn<Promise<string[]>, [expr: string, isAll?: boolean | undefined]>;
@@ -0,0 +1,43 @@
1
+ import { SYSTEM_VAR_PREFIX, functionMap, innerVarIds } from "@gct-paas/core";
2
+ import { useMemoize } from "@vueuse/core";
3
+ //#region src/utils/expression/index.ts
4
+ var _esprima = null;
5
+ var _estraverse = null;
6
+ async function loadAstModules() {
7
+ if (!_esprima) [_esprima, _estraverse] = await Promise.all([import("esprima-next"), import("estraverse")]);
8
+ return {
9
+ esprima: _esprima,
10
+ estraverse: _estraverse.default || _estraverse
11
+ };
12
+ }
13
+ function _deepCalcName(esprima, node) {
14
+ if (node.type === esprima.Syntax.MemberExpression) return `${node.object.type === esprima.Syntax.MemberExpression ? _deepCalcName(esprima, node.object) : node.object.name}.${node.property.name}`;
15
+ else if (node.type === esprima.Syntax.Identifier) return node.name;
16
+ return "";
17
+ }
18
+ /**
19
+ * 变量识别
20
+ * @param expr
21
+ * @returns
22
+ */
23
+ async function _identify(expr, isAll = false) {
24
+ const { esprima, estraverse } = await loadAstModules();
25
+ const ast = esprima.parse(expr);
26
+ let identifiers = [];
27
+ estraverse.traverse(ast, { enter: function(node) {
28
+ if (node.type === esprima.Syntax.MemberExpression) {
29
+ const name = _deepCalcName(esprima, node);
30
+ identifiers.push(name);
31
+ Object.assign(node, {
32
+ name,
33
+ type: esprima.Syntax.Identifier
34
+ });
35
+ } else if (node.type === esprima.Syntax.Identifier) identifiers.push(node.name);
36
+ if (isAll) identifiers = identifiers.filter((item) => !functionMap[item] && item !== "undefined");
37
+ else identifiers = identifiers.filter((item) => !functionMap[item] && item !== "undefined" && !innerVarIds.includes(item) && !item.startsWith(SYSTEM_VAR_PREFIX) && !item.startsWith("undefined."));
38
+ } });
39
+ return [...new Set(identifiers)];
40
+ }
41
+ var asyncIdentify = useMemoize(_identify);
42
+ //#endregion
43
+ export { asyncIdentify };
@@ -1,5 +1,7 @@
1
+ export { isCanCrop } from './can-drop/can-drop';
1
2
  export { designInterceptors } from './design-interceptors/design-interceptors';
2
3
  export { platform, designRegister } from './design-view';
4
+ export { asyncIdentify } from './expression';
3
5
  export { basicAttrsUtils, transformField2Component } from './field-attrs';
4
6
  export { deptFilter, formulaFilter } from './field-filter';
5
7
  export { openFormulaEditorByDesign } from './formula-editor-design/formula-editor-design';
@@ -1,5 +1,7 @@
1
+ import "./can-drop/can-drop.mjs";
1
2
  import "./design-interceptors/design-interceptors.mjs";
2
3
  import "./design-view/index.mjs";
4
+ import "./expression/index.mjs";
3
5
  import "./field-attrs/basicAttrs.mjs";
4
6
  import "./field-attrs/index.mjs";
5
7
  import "./field-filter/index.mjs";