@epxing/designer 0.0.0-stage → 5.3.0-beta.2

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 (491) hide show
  1. package/API.md +160 -0
  2. package/README.md +45 -2
  3. package/dist/_virtual/_plugin-vue_export-helper.js +10 -0
  4. package/dist/_virtual/preload-helper.js +88 -0
  5. package/dist/assets/default-icon-2193FMjv.png +0 -0
  6. package/dist/assets/technology_bg-oWIS2awO.jpg +0 -0
  7. package/dist/assets/theme_black-Ctdygcr4.png +0 -0
  8. package/dist/assets/theme_technology-DJk-2e7g.png +0 -0
  9. package/dist/assets/theme_white-uMQ6JYml.png +0 -0
  10. package/dist/src/assets/images/dashboard/theme_black.png.js +4 -0
  11. package/dist/src/assets/images/dashboard/theme_technology.png.js +4 -0
  12. package/dist/src/assets/images/dashboard/theme_white.png.js +4 -0
  13. package/dist/src/assets/images/default-icon.png.js +4 -0
  14. package/dist/src/index.js +53 -0
  15. package/dist/src/page-designer/PageConfigPreview.js +102 -0
  16. package/dist/src/page-designer/PageDesigner.js +844 -0
  17. package/dist/src/page-designer/designer.js +1120 -0
  18. package/dist/src/page-designer/index.js +52 -0
  19. package/dist/src/page-designer/mixins/dragSourceMixin.js +95 -0
  20. package/dist/src/page-designer/page-variable-panel/JsonEditor.js +106 -0
  21. package/dist/src/page-designer/page-variable-panel/PageVariablePanel.js +939 -0
  22. package/dist/src/page-designer/page-variable-panel/index.js +7 -0
  23. package/dist/src/page-designer/page-variable-panel/jsonlint.js +230 -0
  24. package/dist/src/page-designer/previews/add-form/Preview.js +8 -0
  25. package/dist/src/page-designer/previews/add-form/Preview.vue.js +328 -0
  26. package/dist/src/page-designer/previews/add-form-item/Preview.js +194 -0
  27. package/dist/src/page-designer/previews/button/Preview.js +30 -0
  28. package/dist/src/page-designer/previews/card/Preview.js +87 -0
  29. package/dist/src/page-designer/previews/carousel/CarouselItemPreview.js +33 -0
  30. package/dist/src/page-designer/previews/carousel/Preview.js +61 -0
  31. package/dist/src/page-designer/previews/collapse/CollapseItemPreview.js +118 -0
  32. package/dist/src/page-designer/previews/collapse/Preview.js +35 -0
  33. package/dist/src/page-designer/previews/dropdown/Preview.js +68 -0
  34. package/dist/src/page-designer/previews/entity-list/Preview.js +522 -0
  35. package/dist/src/page-designer/previews/entity-sub-list/Preview.js +352 -0
  36. package/dist/src/page-designer/previews/entity-virtual-list/Preview.js +11 -0
  37. package/dist/src/page-designer/previews/form-field/preview/Checkbox.js +91 -0
  38. package/dist/src/page-designer/previews/form-field/preview/Date.js +77 -0
  39. package/dist/src/page-designer/previews/form-field/preview/Input.js +74 -0
  40. package/dist/src/page-designer/previews/form-field/preview/InputNumber.js +74 -0
  41. package/dist/src/page-designer/previews/form-field/preview/Object.js +77 -0
  42. package/dist/src/page-designer/previews/form-field/preview/Radio.js +146 -0
  43. package/dist/src/page-designer/previews/form-field/preview/Select.js +78 -0
  44. package/dist/src/page-designer/previews/form-field/preview/Textarea.js +78 -0
  45. package/dist/src/page-designer/previews/grid/Preview.js +139 -0
  46. package/dist/src/page-designer/previews/html/Preview.js +18 -0
  47. package/dist/src/page-designer/previews/icon/Preview.js +20 -0
  48. package/dist/src/page-designer/previews/image/Preview.js +36 -0
  49. package/dist/src/page-designer/previews/index.js +74 -0
  50. package/dist/src/page-designer/previews/layout/ColumnPreview.js +47 -0
  51. package/dist/src/page-designer/previews/layout/Preview.js +110 -0
  52. package/dist/src/page-designer/previews/num/Preview.js +132 -0
  53. package/dist/src/page-designer/previews/page-tabs/Preview.js +75 -0
  54. package/dist/src/page-designer/previews/step/Preview.js +207 -0
  55. package/dist/src/page-designer/previews/tabs/Preview.js +95 -0
  56. package/dist/src/page-designer/previews/tabs/tab-pane/Preview.js +33 -0
  57. package/dist/src/page-designer/previews/text/Preview.js +38 -0
  58. package/dist/src/page-designer/previews/text-editor/Preview.js +23 -0
  59. package/dist/src/page-designer/previews/video/Preview.js +10 -0
  60. package/dist/src/page-designer/setting-panel/Advance.js +281 -0
  61. package/dist/src/page-designer/setting-panel/CodeEditor.js +94 -0
  62. package/dist/src/page-designer/setting-panel/Property.js +165 -0
  63. package/dist/src/page-designer/setting-panel/Setting.js +296 -0
  64. package/dist/src/page-designer/setting-panel/Style.js +1591 -0
  65. package/dist/src/page-designer/setting-panel/css-editor/CssEditor.js +98 -0
  66. package/dist/src/page-designer/setting-panel/css-editor/css-hint.js +84 -0
  67. package/dist/src/page-designer/setting-panel/index.js +11 -0
  68. package/dist/src/page-designer/template-attribute-panel/TemplateAttributePanel.js +487 -0
  69. package/dist/src/page-designer/template-attribute-panel/index.js +5 -0
  70. package/dist/src/page-designer/template-library/Library.js +219 -0
  71. package/dist/src/page-designer/template-library/index.js +5 -0
  72. package/dist/src/page-designer/widget-library/Base.js +170 -0
  73. package/dist/src/page-designer/widget-library/Library.js +213 -0
  74. package/dist/src/page-designer/widget-library/index.js +7 -0
  75. package/dist/src/page-designer/widget-preview/Container.js +80 -0
  76. package/dist/src/page-designer/widget-preview/DragGhost.js +54 -0
  77. package/dist/src/page-designer/widget-preview/DropZoneOverlay.js +42 -0
  78. package/dist/src/page-designer/widget-preview/HoverOverlay.js +61 -0
  79. package/dist/src/page-designer/widget-preview/Mixin.js +260 -0
  80. package/dist/src/page-designer/widget-preview/Placeholder.js +28 -0
  81. package/dist/src/page-designer/widget-preview/Preview.js +277 -0
  82. package/dist/src/page-designer/widget-preview/PreviewItem.js +83 -0
  83. package/dist/src/page-designer/widget-preview/SelectedOverlay.js +332 -0
  84. package/dist/src/page-designer/widget-preview/Template.js +66 -0
  85. package/dist/src/page-designer/widget-preview/WidgetWrapper.js +170 -0
  86. package/dist/src/page-designer/widget-preview/directive.js +159 -0
  87. package/dist/src/page-designer/widget-preview/dropPosition.js +50 -0
  88. package/dist/src/page-designer/widget-preview/index.js +23 -0
  89. package/dist/src/page-designer/widget-preview/overlayPositionMixin.js +87 -0
  90. package/dist/src/page-designer/widget-preview/resolvePreviewName.js +32 -0
  91. package/dist/src/page-designer/widget-tree/Item.js +580 -0
  92. package/dist/src/page-designer/widget-tree/Tree.js +855 -0
  93. package/dist/src/page-designer/widget-tree/index.js +7 -0
  94. package/dist/src/visual/AddForm.js +172 -0
  95. package/dist/src/visual/AddFormItem.js +480 -0
  96. package/dist/src/visual/AppIndex.js +243 -0
  97. package/dist/src/visual/ApplyForm.js +135 -0
  98. package/dist/src/visual/AttributeList.js +344 -0
  99. package/dist/src/visual/BasePage.js +77 -0
  100. package/dist/src/visual/Button.js +5 -0
  101. package/dist/src/visual/Button.vue.js +89 -0
  102. package/dist/src/visual/CardNum.js +74 -0
  103. package/dist/src/visual/CategoryList.js +569 -0
  104. package/dist/src/visual/Chart.js +27 -0
  105. package/dist/src/visual/ChartNew.js +5 -0
  106. package/dist/src/visual/ChartNew.vue.js +54 -0
  107. package/dist/src/visual/CheckForm.js +110 -0
  108. package/dist/src/visual/ClientList.js +41 -0
  109. package/dist/src/visual/CodeManage.js +113 -0
  110. package/dist/src/visual/Component.js +6 -0
  111. package/dist/src/visual/Component.vue.js +1332 -0
  112. package/dist/src/visual/ComponentList.js +280 -0
  113. package/dist/src/visual/Config.js +8 -0
  114. package/dist/src/visual/Config.vue.js +862 -0
  115. package/dist/src/visual/ConfigItem.js +8 -0
  116. package/dist/src/visual/ConfigItem.vue.js +192 -0
  117. package/dist/src/visual/ConfigSelectItems.js +8 -0
  118. package/dist/src/visual/ConfigSelectItems.vue.js +260 -0
  119. package/dist/src/visual/CreatePage.js +389 -0
  120. package/dist/src/visual/DashboardDiv.js +58 -0
  121. package/dist/src/visual/DashboardTabs.js +9 -0
  122. package/dist/src/visual/DashboardTabs.vue.js +127 -0
  123. package/dist/src/visual/DashboardWidget.js +5 -0
  124. package/dist/src/visual/DashboardWidget.vue.js +62 -0
  125. package/dist/src/visual/DblogList.js +82 -0
  126. package/dist/src/visual/EntityAddPage.js +49 -0
  127. package/dist/src/visual/EntityApplyPage.js +54 -0
  128. package/dist/src/visual/EntityCardList.js +455 -0
  129. package/dist/src/visual/EntityCheckPage.js +66 -0
  130. package/dist/src/visual/EntityFindPage.js +45 -0
  131. package/dist/src/visual/EntityList.js +6 -0
  132. package/dist/src/visual/EntityList.vue.js +1221 -0
  133. package/dist/src/visual/EntityListPage.js +43 -0
  134. package/dist/src/visual/EntityNoSubmitSubList.js +267 -0
  135. package/dist/src/visual/EntityRightSubList.js +29 -0
  136. package/dist/src/visual/EntitySubAdd.js +10 -0
  137. package/dist/src/visual/EntitySubGridItem.js +66 -0
  138. package/dist/src/visual/EntitySubList.js +434 -0
  139. package/dist/src/visual/EntityTreeFindPage.js +32 -0
  140. package/dist/src/visual/EntityTreeManage.js +49 -0
  141. package/dist/src/visual/EntityTreePage.js +42 -0
  142. package/dist/src/visual/ExcelPreview.js +10 -0
  143. package/dist/src/visual/FormField.js +5 -0
  144. package/dist/src/visual/FormField.vue.js +121 -0
  145. package/dist/src/visual/HeaderNew.js +161 -0
  146. package/dist/src/visual/Html.js +8 -0
  147. package/dist/src/visual/Html.vue.js +109 -0
  148. package/dist/src/visual/Import.js +53 -0
  149. package/dist/src/visual/InterfaceSubList.js +21 -0
  150. package/dist/src/visual/ListFirst.js +704 -0
  151. package/dist/src/visual/MEntityAddPage.js +66 -0
  152. package/dist/src/visual/MEntityList.js +485 -0
  153. package/dist/src/visual/MEntityListPage.js +40 -0
  154. package/dist/src/visual/MEntitySubList.js +237 -0
  155. package/dist/src/visual/MetaList.js +23 -0
  156. package/dist/src/visual/ModuleIndexPage.js +67 -0
  157. package/dist/src/visual/ModuleList.js +47 -0
  158. package/dist/src/visual/NavAddForm.js +173 -0
  159. package/dist/src/visual/NavFormCatalogItem.js +44 -0
  160. package/dist/src/visual/NumItem.js +70 -0
  161. package/dist/src/visual/NumStatistic.js +6 -0
  162. package/dist/src/visual/NumStatistic.vue.js +81 -0
  163. package/dist/src/visual/OrgChart.js +107 -0
  164. package/dist/src/visual/PageCatalog.js +27 -0
  165. package/dist/src/visual/PageConfig.js +223 -0
  166. package/dist/src/visual/PageTabs.js +49 -0
  167. package/dist/src/visual/Progress.js +40 -0
  168. package/dist/src/visual/ProgressItem.js +44 -0
  169. package/dist/src/visual/SystemManager.js +77 -0
  170. package/dist/src/visual/Title.js +45 -0
  171. package/dist/src/visual/TodoList.js +14 -0
  172. package/dist/src/visual/UserFormItem.js +41 -0
  173. package/dist/src/visual/UserManage.js +35 -0
  174. package/dist/src/visual/chart/CircularPie.js +9 -0
  175. package/dist/src/visual/chart/Column.js +70 -0
  176. package/dist/src/visual/chart/HoriColumn.js +9 -0
  177. package/dist/src/visual/chart/Line.js +9 -0
  178. package/dist/src/visual/chart/Pie.js +9 -0
  179. package/dist/src/visual/config/Background.js +526 -0
  180. package/dist/src/visual/config/Chart.js +154 -0
  181. package/dist/src/visual/config/Checkbox.js +63 -0
  182. package/dist/src/visual/config/Color.js +41 -0
  183. package/dist/src/visual/config/DesignReport.js +24 -0
  184. package/dist/src/visual/config/Event.js +304 -0
  185. package/dist/src/visual/config/Field.js +520 -0
  186. package/dist/src/visual/config/Font.js +202 -0
  187. package/dist/src/visual/config/FormItem.js +23 -0
  188. package/dist/src/visual/config/Function.js +114 -0
  189. package/dist/src/visual/config/Html.js +111 -0
  190. package/dist/src/visual/config/Image.js +102 -0
  191. package/dist/src/visual/config/Input.js +177 -0
  192. package/dist/src/visual/config/Input.vue.js +479 -0
  193. package/dist/src/visual/config/LazyDialog.js +41 -0
  194. package/dist/src/visual/config/List.js +65 -0
  195. package/dist/src/visual/config/ListField.js +2080 -0
  196. package/dist/src/visual/config/MField.js +733 -0
  197. package/dist/src/visual/config/Number.js +37 -0
  198. package/dist/src/visual/config/Object.js +168 -0
  199. package/dist/src/visual/config/Operate.js +1109 -0
  200. package/dist/src/visual/config/OperateItem.js +1186 -0
  201. package/dist/src/visual/config/Options.js +8 -0
  202. package/dist/src/visual/config/Options.vue.js +278 -0
  203. package/dist/src/visual/config/OrderField.js +505 -0
  204. package/dist/src/visual/config/Page.js +76 -0
  205. package/dist/src/visual/config/Params.js +353 -0
  206. package/dist/src/visual/config/Radio.js +127 -0
  207. package/dist/src/visual/config/Row.js +104 -0
  208. package/dist/src/visual/config/Scope.js +350 -0
  209. package/dist/src/visual/config/Select.js +95 -0
  210. package/dist/src/visual/config/Switch.js +37 -0
  211. package/dist/src/visual/config/Textarea.js +175 -0
  212. package/dist/src/visual/config/Textarea.vue.js +507 -0
  213. package/dist/src/visual/config/Tree.js +138 -0
  214. package/dist/src/visual/config/remote-cache.js +30 -0
  215. package/dist/src/visual/config/show-condition.js +20 -0
  216. package/dist/src/visual/config/variable-sources.js +27 -0
  217. package/dist/src/visual/config/wait-ref.js +19 -0
  218. package/dist/src/visual/config-page/ComponentLibrary.js +170 -0
  219. package/dist/src/visual/config-page/ComponentLibraryDialog.js +250 -0
  220. package/dist/src/visual/config-page/ComponentList.js +9 -0
  221. package/dist/src/visual/config-page/ComponentList.vue.js +292 -0
  222. package/dist/src/visual/config-page/ComponentPreview.js +8 -0
  223. package/dist/src/visual/config-page/ComponentPreview.vue.js +151 -0
  224. package/dist/src/visual/config-page/ConfigOption.js +13 -0
  225. package/dist/src/visual/config-page/ConfigPanel.js +302 -0
  226. package/dist/src/visual/config-page/Dashboard.js +2160 -0
  227. package/dist/src/visual/config-page/DashboardDesign.js +606 -0
  228. package/dist/src/visual/config-page/DashboardGlobalConfig.js +6 -0
  229. package/dist/src/visual/config-page/DashboardGlobalConfig.vue.js +292 -0
  230. package/dist/src/visual/config-page/DashboardMobile.js +1115 -0
  231. package/dist/src/visual/config-page/DashboardSetting.js +86 -0
  232. package/dist/src/visual/config-page/PagePreview.js +8 -0
  233. package/dist/src/visual/config-page/PagePreview.vue.js +72 -0
  234. package/dist/src/visual/config-page/StyleConfig.js +979 -0
  235. package/dist/src/visual/config-page/VisualConfigPage.js +645 -0
  236. package/dist/src/visual/config-page/dashboard-theme-setting/Background.js +180 -0
  237. package/dist/src/visual/config-page/dashboard-theme-setting/Border.js +314 -0
  238. package/dist/src/visual/config-page/dashboard-theme-setting/Font.js +192 -0
  239. package/dist/src/visual/config-page/dashboard-theme-setting/Index.js +545 -0
  240. package/dist/src/visual/config-page/dashboard-theme-setting/Shadow.js +174 -0
  241. package/dist/src/visual/config-page/index.js +90 -0
  242. package/dist/src/visual/index.js +151 -0
  243. package/dist/src/visual/mixins/innerGridMixin.js +122 -0
  244. package/dist/src/visual/search/Filter.js +49 -0
  245. package/dist/src/visual/step/Index.js +8 -0
  246. package/dist/src/visual/step/Index.vue.js +485 -0
  247. package/dist/src/visual/step/Item.js +139 -0
  248. package/dist/src/visual/widgets/CardFormItemVisual.js +45 -0
  249. package/dist/src/visual/widgets/CarouselVisual.js +8 -0
  250. package/dist/src/visual/widgets/CarouselVisual.vue.js +303 -0
  251. package/dist/src/visual/widgets/CollapseVisual.js +8 -0
  252. package/dist/src/visual/widgets/CollapseVisual.vue.js +202 -0
  253. package/dist/src/visual/widgets/DropdownVisual.js +8 -0
  254. package/dist/src/visual/widgets/DropdownVisual.vue.js +955 -0
  255. package/dist/src/visual/widgets/LayoutConfig.js +8 -0
  256. package/dist/src/visual/widgets/LayoutConfig.vue.js +168 -0
  257. package/dist/src/visual/widgets/ListVisual.js +349 -0
  258. package/dist/src/visual/widgets/MEntityListFindVisual.js +76 -0
  259. package/dist/src/visual/widgets/ProcessFormItemVisual.js +5 -0
  260. package/dist/src/visual/widgets/ProcessFormItemVisual.vue.js +45 -0
  261. package/dist/src/visual/widgets/TabsConfig.js +8 -0
  262. package/dist/src/visual/widgets/TabsConfig.vue.js +343 -0
  263. package/dist/style.css +9907 -0
  264. package/package.json +104 -3
  265. package/src/index.js +27 -0
  266. package/src/page-designer/PageConfigPreview.vue +103 -0
  267. package/src/page-designer/PageDesigner.vue +1017 -0
  268. package/src/page-designer/designer.js +1299 -0
  269. package/src/page-designer/index.js +38 -0
  270. package/src/page-designer/mixins/dragSourceMixin.js +113 -0
  271. package/src/page-designer/page-variable-panel/JsonEditor.vue +109 -0
  272. package/src/page-designer/page-variable-panel/PageVariablePanel.vue +781 -0
  273. package/src/page-designer/page-variable-panel/index.js +6 -0
  274. package/src/page-designer/page-variable-panel/jsonlint.js +2 -0
  275. package/src/page-designer/previews/add-form/Preview.vue +331 -0
  276. package/src/page-designer/previews/add-form-item/Preview.vue +167 -0
  277. package/src/page-designer/previews/button/Preview.vue +27 -0
  278. package/src/page-designer/previews/card/Preview.vue +78 -0
  279. package/src/page-designer/previews/carousel/CarouselItemPreview.vue +32 -0
  280. package/src/page-designer/previews/carousel/Preview.vue +36 -0
  281. package/src/page-designer/previews/collapse/CollapseItemPreview.vue +136 -0
  282. package/src/page-designer/previews/collapse/Preview.vue +28 -0
  283. package/src/page-designer/previews/dropdown/Preview.vue +21 -0
  284. package/src/page-designer/previews/entity-list/Preview.vue +382 -0
  285. package/src/page-designer/previews/entity-sub-list/Preview.vue +283 -0
  286. package/src/page-designer/previews/entity-virtual-list/Preview.vue +14 -0
  287. package/src/page-designer/previews/form-field/preview/Checkbox.vue +57 -0
  288. package/src/page-designer/previews/form-field/preview/Date.vue +56 -0
  289. package/src/page-designer/previews/form-field/preview/Input.vue +53 -0
  290. package/src/page-designer/previews/form-field/preview/InputNumber.vue +53 -0
  291. package/src/page-designer/previews/form-field/preview/Object.vue +53 -0
  292. package/src/page-designer/previews/form-field/preview/Radio.vue +69 -0
  293. package/src/page-designer/previews/form-field/preview/Select.vue +55 -0
  294. package/src/page-designer/previews/form-field/preview/Textarea.vue +57 -0
  295. package/src/page-designer/previews/grid/Preview.vue +156 -0
  296. package/src/page-designer/previews/html/Preview.vue +11 -0
  297. package/src/page-designer/previews/icon/Preview.vue +12 -0
  298. package/src/page-designer/previews/image/Preview.vue +37 -0
  299. package/src/page-designer/previews/index.js +74 -0
  300. package/src/page-designer/previews/layout/ColumnPreview.vue +89 -0
  301. package/src/page-designer/previews/layout/Preview.vue +96 -0
  302. package/src/page-designer/previews/num/Preview.vue +100 -0
  303. package/src/page-designer/previews/page-tabs/Preview.vue +53 -0
  304. package/src/page-designer/previews/step/Preview.vue +190 -0
  305. package/src/page-designer/previews/tabs/Preview.vue +66 -0
  306. package/src/page-designer/previews/tabs/tab-pane/Preview.vue +32 -0
  307. package/src/page-designer/previews/text/Preview.vue +26 -0
  308. package/src/page-designer/previews/text-editor/Preview.vue +14 -0
  309. package/src/page-designer/previews/video/Preview.vue +9 -0
  310. package/src/page-designer/setting-panel/Advance.vue +175 -0
  311. package/src/page-designer/setting-panel/CodeEditor.vue +88 -0
  312. package/src/page-designer/setting-panel/Property.vue +163 -0
  313. package/src/page-designer/setting-panel/Setting.vue +271 -0
  314. package/src/page-designer/setting-panel/Style.vue +1096 -0
  315. package/src/page-designer/setting-panel/css-editor/CssEditor.vue +93 -0
  316. package/src/page-designer/setting-panel/css-editor/css-hint.js +58 -0
  317. package/src/page-designer/setting-panel/index.js +10 -0
  318. package/src/page-designer/template-attribute-panel/TemplateAttributePanel.vue +383 -0
  319. package/src/page-designer/template-attribute-panel/index.js +2 -0
  320. package/src/page-designer/template-library/Library.vue +153 -0
  321. package/src/page-designer/template-library/index.js +4 -0
  322. package/src/page-designer/widget-library/Base.vue +156 -0
  323. package/src/page-designer/widget-library/Library.vue +282 -0
  324. package/src/page-designer/widget-library/index.js +6 -0
  325. package/src/page-designer/widget-preview/Container.vue +89 -0
  326. package/src/page-designer/widget-preview/DragGhost.vue +83 -0
  327. package/src/page-designer/widget-preview/DropZoneOverlay.vue +51 -0
  328. package/src/page-designer/widget-preview/HoverOverlay.vue +85 -0
  329. package/src/page-designer/widget-preview/Mixin.js +285 -0
  330. package/src/page-designer/widget-preview/Placeholder.vue +22 -0
  331. package/src/page-designer/widget-preview/Preview.vue +322 -0
  332. package/src/page-designer/widget-preview/PreviewItem.vue +162 -0
  333. package/src/page-designer/widget-preview/SelectedOverlay.vue +340 -0
  334. package/src/page-designer/widget-preview/Template.vue +77 -0
  335. package/src/page-designer/widget-preview/WidgetWrapper.vue +197 -0
  336. package/src/page-designer/widget-preview/directive.js +258 -0
  337. package/src/page-designer/widget-preview/dropPosition.js +51 -0
  338. package/src/page-designer/widget-preview/index.js +23 -0
  339. package/src/page-designer/widget-preview/overlayPositionMixin.js +88 -0
  340. package/src/page-designer/widget-preview/resolvePreviewName.js +33 -0
  341. package/src/page-designer/widget-tree/Item.vue +719 -0
  342. package/src/page-designer/widget-tree/Tree.vue +995 -0
  343. package/src/page-designer/widget-tree/index.js +6 -0
  344. package/src/visual/AddForm.vue +172 -0
  345. package/src/visual/AddFormItem.vue +482 -0
  346. package/src/visual/AppIndex.vue +245 -0
  347. package/src/visual/ApplyForm.vue +140 -0
  348. package/src/visual/AttributeList.vue +344 -0
  349. package/src/visual/BasePage.vue +76 -0
  350. package/src/visual/Button.vue +80 -0
  351. package/src/visual/CardNum.vue +73 -0
  352. package/src/visual/CategoryList.vue +563 -0
  353. package/src/visual/Chart.vue +29 -0
  354. package/src/visual/ChartNew.vue +49 -0
  355. package/src/visual/CheckForm.vue +106 -0
  356. package/src/visual/ClientList.vue +42 -0
  357. package/src/visual/CodeManage.vue +116 -0
  358. package/src/visual/Component.vue +1342 -0
  359. package/src/visual/ComponentList.vue +280 -0
  360. package/src/visual/Config.vue +881 -0
  361. package/src/visual/ConfigItem.vue +218 -0
  362. package/src/visual/ConfigSelectItems.vue +445 -0
  363. package/src/visual/CreatePage.vue +389 -0
  364. package/src/visual/DashboardDiv.vue +197 -0
  365. package/src/visual/DashboardTabs.vue +118 -0
  366. package/src/visual/DashboardWidget.vue +55 -0
  367. package/src/visual/DblogList.vue +84 -0
  368. package/src/visual/EntityAddPage.vue +52 -0
  369. package/src/visual/EntityApplyPage.vue +57 -0
  370. package/src/visual/EntityCardList.vue +449 -0
  371. package/src/visual/EntityCheckPage.vue +69 -0
  372. package/src/visual/EntityFindPage.vue +55 -0
  373. package/src/visual/EntityList.vue +838 -0
  374. package/src/visual/EntityListPage.vue +97 -0
  375. package/src/visual/EntityNoSubmitSubList.vue +273 -0
  376. package/src/visual/EntityRightSubList.vue +32 -0
  377. package/src/visual/EntitySubAdd.vue +11 -0
  378. package/src/visual/EntitySubGridItem.vue +67 -0
  379. package/src/visual/EntitySubList.vue +440 -0
  380. package/src/visual/EntityTreeFindPage.vue +36 -0
  381. package/src/visual/EntityTreeManage.vue +50 -0
  382. package/src/visual/EntityTreePage.vue +45 -0
  383. package/src/visual/ExcelPreview.vue +11 -0
  384. package/src/visual/FormField.vue +113 -0
  385. package/src/visual/HeaderNew.vue +176 -0
  386. package/src/visual/Html.vue +104 -0
  387. package/src/visual/Import.vue +55 -0
  388. package/src/visual/InterfaceSubList.vue +23 -0
  389. package/src/visual/ListFirst.vue +614 -0
  390. package/src/visual/MEntityAddPage.vue +71 -0
  391. package/src/visual/MEntityList.vue +488 -0
  392. package/src/visual/MEntityListPage.vue +46 -0
  393. package/src/visual/MEntitySubList.vue +237 -0
  394. package/src/visual/MetaList.vue +24 -0
  395. package/src/visual/ModuleIndexPage.vue +70 -0
  396. package/src/visual/ModuleList.vue +46 -0
  397. package/src/visual/NavAddForm.vue +177 -0
  398. package/src/visual/NavFormCatalogItem.vue +47 -0
  399. package/src/visual/NumItem.vue +69 -0
  400. package/src/visual/NumStatistic.vue +242 -0
  401. package/src/visual/OrgChart.vue +113 -0
  402. package/src/visual/PageCatalog.vue +26 -0
  403. package/src/visual/PageConfig.vue +278 -0
  404. package/src/visual/PageTabs.vue +55 -0
  405. package/src/visual/Progress.vue +39 -0
  406. package/src/visual/ProgressItem.vue +43 -0
  407. package/src/visual/SystemManager.vue +80 -0
  408. package/src/visual/Title.vue +44 -0
  409. package/src/visual/TodoList.vue +18 -0
  410. package/src/visual/UserFormItem.vue +49 -0
  411. package/src/visual/UserManage.vue +36 -0
  412. package/src/visual/chart/CircularPie.vue +7 -0
  413. package/src/visual/chart/Column.vue +73 -0
  414. package/src/visual/chart/HoriColumn.vue +7 -0
  415. package/src/visual/chart/Line.vue +7 -0
  416. package/src/visual/chart/Pie.vue +7 -0
  417. package/src/visual/config/Background.vue +398 -0
  418. package/src/visual/config/Chart.vue +139 -0
  419. package/src/visual/config/Checkbox.vue +64 -0
  420. package/src/visual/config/Color.vue +40 -0
  421. package/src/visual/config/DesignReport.vue +20 -0
  422. package/src/visual/config/Event.vue +220 -0
  423. package/src/visual/config/Field.vue +597 -0
  424. package/src/visual/config/Font.vue +149 -0
  425. package/src/visual/config/FormItem.vue +25 -0
  426. package/src/visual/config/Function.vue +78 -0
  427. package/src/visual/config/Html.vue +98 -0
  428. package/src/visual/config/Image.vue +132 -0
  429. package/src/visual/config/Input.vue +712 -0
  430. package/src/visual/config/LazyDialog.vue +44 -0
  431. package/src/visual/config/List.vue +68 -0
  432. package/src/visual/config/ListField.vue +1714 -0
  433. package/src/visual/config/MField.vue +601 -0
  434. package/src/visual/config/Number.vue +41 -0
  435. package/src/visual/config/Object.vue +177 -0
  436. package/src/visual/config/Operate.vue +1083 -0
  437. package/src/visual/config/OperateItem.vue +917 -0
  438. package/src/visual/config/Options.vue +330 -0
  439. package/src/visual/config/OrderField.vue +587 -0
  440. package/src/visual/config/Page.vue +45 -0
  441. package/src/visual/config/Params.vue +228 -0
  442. package/src/visual/config/Radio.vue +93 -0
  443. package/src/visual/config/Row.vue +78 -0
  444. package/src/visual/config/Scope.vue +363 -0
  445. package/src/visual/config/Select.vue +93 -0
  446. package/src/visual/config/Switch.vue +36 -0
  447. package/src/visual/config/Textarea.vue +754 -0
  448. package/src/visual/config/Tree.vue +135 -0
  449. package/src/visual/config/remote-cache.js +35 -0
  450. package/src/visual/config/show-condition.js +21 -0
  451. package/src/visual/config/variable-sources.js +27 -0
  452. package/src/visual/config/wait-ref.js +17 -0
  453. package/src/visual/config-page/ComponentLibrary.vue +220 -0
  454. package/src/visual/config-page/ComponentLibraryDialog.vue +262 -0
  455. package/src/visual/config-page/ComponentList.vue +580 -0
  456. package/src/visual/config-page/ComponentPreview.vue +206 -0
  457. package/src/visual/config-page/ConfigOption.vue +16 -0
  458. package/src/visual/config-page/ConfigPanel.vue +301 -0
  459. package/src/visual/config-page/Dashboard.vue +2331 -0
  460. package/src/visual/config-page/DashboardDesign.vue +656 -0
  461. package/src/visual/config-page/DashboardGlobalConfig.vue +158 -0
  462. package/src/visual/config-page/DashboardMobile.vue +1118 -0
  463. package/src/visual/config-page/DashboardSetting.vue +47 -0
  464. package/src/visual/config-page/PagePreview.vue +105 -0
  465. package/src/visual/config-page/StyleConfig.vue +656 -0
  466. package/src/visual/config-page/VisualConfigPage.vue +746 -0
  467. package/src/visual/config-page/dashboard-theme-setting/Background.vue +98 -0
  468. package/src/visual/config-page/dashboard-theme-setting/Border.vue +185 -0
  469. package/src/visual/config-page/dashboard-theme-setting/Font.vue +101 -0
  470. package/src/visual/config-page/dashboard-theme-setting/Index.vue +471 -0
  471. package/src/visual/config-page/dashboard-theme-setting/Shadow.vue +102 -0
  472. package/src/visual/config-page/index.js +93 -0
  473. package/src/visual/index.js +23 -0
  474. package/src/visual/mixins/innerGridMixin.js +128 -0
  475. package/src/visual/search/Filter.vue +50 -0
  476. package/src/visual/step/Index.vue +361 -0
  477. package/src/visual/step/Item.vue +140 -0
  478. package/src/visual/widgets/CardFormItemVisual.vue +46 -0
  479. package/src/visual/widgets/CarouselVisual.vue +291 -0
  480. package/src/visual/widgets/CollapseVisual.vue +203 -0
  481. package/src/visual/widgets/DropdownVisual.vue +541 -0
  482. package/src/visual/widgets/LayoutConfig.vue +186 -0
  483. package/src/visual/widgets/ListVisual.vue +349 -0
  484. package/src/visual/widgets/MEntityListFindVisual.vue +77 -0
  485. package/src/visual/widgets/ProcessFormItemVisual.vue +58 -0
  486. package/src/visual/widgets/TabsConfig.vue +266 -0
  487. package/types/index.d.ts +22 -0
  488. package/types/page-designer.d.ts +3 -0
  489. package/types/visual-component.d.ts +1 -0
  490. package/types/visual-entity-list.d.ts +1 -0
  491. package/types/visual-entity-sub-list.d.ts +1 -0
@@ -0,0 +1,1342 @@
1
+ <script>
2
+ // @jsx-vue3(T33:T30 JSX 批漏掉的 6 个文件,见 .claude/codemod/codemod-jsx-vue3-tail6.mjs)
3
+ import ConfigOptions from './config/Options.vue'
4
+ import { getCached, attributeTreeKey } from './config/remote-cache'
5
+ import { compileShowCondition } from './config/show-condition'
6
+ import { evalWith } from '@epxing/utils/src/eval-with'
7
+ /* eslint-disable no-eval */
8
+ import { mapState, mapGetters } from 'vuex'
9
+ import { isEqual, cloneDeep } from 'lodash-es'
10
+
11
+ // 只挑出与上次提交不同的 key;上次有、这次没有的 key 送 null(让 designer 删掉该字段)
12
+ function diffPatch (prev, next) {
13
+ const patch = {}
14
+ let changed = false
15
+ for (const key in next) {
16
+ if (!isEqual(prev[key], next[key])) {
17
+ patch[key] = next[key]
18
+ changed = true
19
+ }
20
+ }
21
+ for (const key in prev) {
22
+ if (!(key in next)) {
23
+ patch[key] = null
24
+ changed = true
25
+ }
26
+ }
27
+ return changed ? patch : null
28
+ }
29
+
30
+ export default {
31
+ name: 'epx-visual-component',
32
+ components: {
33
+ [ConfigOptions.name]: ConfigOptions
34
+ },
35
+ props: {
36
+ designer: Object,
37
+ widget: Object,
38
+ id: [String, Number],
39
+ metaId: String,
40
+ upMetaId: String,
41
+ upMetaViewId: String,
42
+ componentInfo: {
43
+ type: Object,
44
+ default () {
45
+ return {}
46
+ }
47
+ },
48
+ compConfig: {
49
+
50
+ type: Object,
51
+ default () {
52
+ return {}
53
+ }
54
+ },
55
+ globalConfigs: {
56
+ type: Object,
57
+ default () {
58
+ return {}
59
+ }
60
+ },
61
+ upComponent: {
62
+ type: String,
63
+ default: ''
64
+ },
65
+ upId: String,
66
+ upComponentInstance: Object,
67
+ pageActionList: {
68
+ type: Array
69
+ },
70
+ pageRuleList: {
71
+ type: Array
72
+ },
73
+ pageRelationList: {
74
+ type: Array,
75
+ default () {
76
+ return []
77
+ }
78
+ },
79
+ pageAllFieldList: {
80
+ type: Array
81
+ },
82
+ pageParams: {
83
+ type: Array,
84
+ default () {
85
+ return []
86
+ }
87
+ },
88
+ scopeConfigs: Object
89
+ },
90
+ provide () {
91
+ return {
92
+ // 供 epx-visual-config-form-item 调用 renderFormItem:每个配置项在自己的子组件里渲染,只依赖自己读到的 key
93
+ visualComponent: this
94
+ }
95
+ },
96
+ inject: {
97
+ pageId: {
98
+ type: String
99
+ },
100
+ pageConfigs: {
101
+ type: Object,
102
+ default () {
103
+ return {}
104
+ }
105
+ },
106
+ getPageMetaId: {
107
+ type: Function
108
+ },
109
+ getItemConfigs: {
110
+ type: Function
111
+ },
112
+ changeItemConfigs: {
113
+ type: Function
114
+ },
115
+ updateWidget: {
116
+ type: Function
117
+ },
118
+ setContainerDefaultItems: {
119
+ type: Function
120
+ }
121
+ },
122
+ data () {
123
+ return {
124
+ spanOptions: [],
125
+ config: {},
126
+ defaultConfigs: {},
127
+ componentActionList: null, // 列表页面单独请求
128
+ componentTreeFieldStore: null, // 放在配置页
129
+ configOptions: [],
130
+ FunctionOption: [],
131
+ commonOperates: [],
132
+ componentMetaId: null,
133
+ metaViewId: null,
134
+ componentRuleList: null,
135
+ componentRelationList: null,
136
+ foldMap: {},
137
+ opened: {}
138
+ }
139
+ },
140
+ computed: {
141
+ ...mapState({
142
+ pages: state => state.page.configs,
143
+ metas: state => state.meta.metas
144
+ }),
145
+ ...mapGetters([
146
+ 'getPageById',
147
+ 'getCodeById',
148
+ 'getMeta',
149
+ 'getMetaRelationFields',
150
+ 'getMetaViewFields'
151
+ ]),
152
+ pageMetaId () {
153
+ return this.getPageMetaId && this.getPageMetaId()
154
+ },
155
+ currentPage () {
156
+ const page = this.getPageById(this.pageId) || this.designer.page
157
+ return page
158
+ },
159
+ currentMetaId () {
160
+ return this.componentMetaId || this.upMetaId || this.metaId || this.pageMetaId
161
+ },
162
+ currentMetaViewId () {
163
+ return this.metaViewId || this.upMetaViewId
164
+ },
165
+ currentMeta () {
166
+ const meta = this.getMeta(this.currentMetaId)
167
+ if (!meta && this.currentMetaId) {
168
+ this.$store.dispatch({
169
+ type: 'ADD_META',
170
+ metaId: this.currentMetaId
171
+ })
172
+ }
173
+ return meta || null
174
+ },
175
+ pageMeta () {
176
+ return this.getMeta(this.pageMetaId)
177
+ },
178
+ itemConfigs () {
179
+ return this.getItemConfigs()
180
+ },
181
+ allConfigs: {
182
+ get () {
183
+ const all = { ...this.config }
184
+ const allConfigs = this.$_.assignWith(all, this.defaultConfigs, (value, defaultValue) => {
185
+ return this.$_.isNil(value) ? defaultValue : value
186
+ })
187
+ return allConfigs
188
+ },
189
+ set (v) {
190
+ }
191
+ },
192
+ isDefaultValue () {
193
+ return (key) => {
194
+ const { [key]: defaultValue } = this.defaultConfigs
195
+ const { [key]: value } = this.config
196
+ return defaultValue !== undefined && (value === undefined || this.$_.isEqual(value, defaultValue))
197
+ }
198
+ },
199
+
200
+ actionList () {
201
+ return this.componentActionList || this.pageActionList || []
202
+ },
203
+ ruleList () {
204
+ return this.componentRuleList || this.pageRuleList || []
205
+ },
206
+ relationList () {
207
+ return this.componentRelationList || this.pageRelationList || []
208
+ },
209
+ treeFieldStore () {
210
+ return this.getMetaViewFields(this.currentMetaId, this.currentMetaViewId)
211
+ },
212
+ functionList () {
213
+ const { JS = '' } = this.globalConfigs
214
+ const result = JS.match(/export\sfunction\s(\w+)/g)
215
+ const functionList = []
216
+ if (!result) return []
217
+ result.forEach(item => {
218
+ functionList.push(item.replace(/export\sfunction\s/, ''))
219
+ })
220
+ return functionList
221
+ },
222
+ getConfigMetaId () {
223
+ return item => {
224
+ if (item.metaId) return item.metaId
225
+ else if (item.dynamicMetaId) {
226
+ const getFieldRelatedMeta = (field) => {
227
+ const fieldConfigs = this.currentMeta.getAllFieldConfigs().find(item => item.attriName === field[0] || field)
228
+ return fieldConfigs.codeKey
229
+ }
230
+ const el = JSON.parse(item.dynamicMetaId).el.replace(/^#{(.*)}$/, '$1')
231
+ // 表达式里可用 getFieldRelatedMeta / configs:显式传作用域,不能靠直接 eval 捕获(见 eval-with.js)
232
+ return evalWith(el, { getFieldRelatedMeta, configs: this.allConfigs }, this)
233
+ }
234
+ return this.currentMetaId
235
+ }
236
+ },
237
+ showConfigOptions () {
238
+ const showFn = (item) => {
239
+ let flag = true
240
+ if (item.showFlag) {
241
+ for (const key in item.showFlag) {
242
+ if (Array.isArray(item.showFlag[key])) {
243
+ if (!item.showFlag[key].includes(this.allConfigs[key])) flag = false
244
+ } else {
245
+ // eslint-disable-next-line eqeqeq
246
+ if (item.showFlag[key] != this.allConfigs[key]) flag = false
247
+ }
248
+ }
249
+ }
250
+ if (flag && item.showCondition) {
251
+ // 表达式编译有缓存,同一段 showCondition 只 new Function 一次;解析失败给用户提示(只提示一次)
252
+ const compiled = compileShowCondition(item.showCondition, msg => this.$message && this.$message.error(msg))
253
+ if (compiled === false) {
254
+ flag = false
255
+ } else if (compiled) {
256
+ try {
257
+ flag = compiled.call(this, this.allConfigs)
258
+ } catch (error) {
259
+ console.error(error)
260
+ flag = false
261
+ }
262
+ }
263
+ }
264
+ return flag
265
+ }
266
+ // 此前每次都 cloneDeep 整棵配置项树再过滤;现在有 children 的项给浅拷贝,
267
+ // 没有 children 的项保持原引用,子组件 props 不变就不重渲染
268
+ const result = []
269
+ for (const item of this.configOptions) {
270
+ if (!showFn(item)) continue
271
+ result.push(item.children ? { ...item, children: item.children.filter(showFn) } : item)
272
+ }
273
+ return result
274
+ },
275
+ variableTree () {
276
+ const variableSets = this.designer.pageConfig?.variableSets || []
277
+ const { iterator } = this.allConfigs
278
+ const variableList = variableSets.map(item => ({ ...item, type: 'variable', text: item.name || item.code, code: item.code }))
279
+ if (iterator?.data) {
280
+ variableList.push({
281
+ type: 'variable',
282
+ text: this.selectedWidget.title + '_迭代变量',
283
+ code: iterator.name || 'item'
284
+ })
285
+ }
286
+ return [...(this.treeFieldStore || []), {
287
+ code: 'PAGE_VARIABLE',
288
+ text: '页面变量',
289
+ children: variableList
290
+ }]
291
+ },
292
+ $formatScope () {
293
+ return (scopeParams, data = {}) => {
294
+ const _scopeParams = this.$_.cloneDeep(scopeParams)
295
+ const that = this
296
+ const paramData = { ...this.$tab, ...this.$query, ...this.$pageParams, ...that.$compData }
297
+ for (const scopeKey in _scopeParams) {
298
+ const scope = _scopeParams[scopeKey]
299
+ if (!scope) continue
300
+ let values = scope.values
301
+ if (/#\{([\w-.|$#]+)\}/.test(values)) {
302
+ values = values.replace(/#\{([\w-.|$#]+)\}/, (match, key) => {
303
+ try {
304
+ return evalWith(`that.${key}`, { that }) || evalWith(`that.$query.${key}`, { that }) || evalWith(`that.$tab.${key}`, { that }) || ''
305
+ } catch (error) {
306
+ return scope.values
307
+ }
308
+ })
309
+ }
310
+ if (/\$\[([\w-_.|$#]+)\]/.test(values)) {
311
+ values = values.replace(/\$\[([\w-.|$#]+)\]/, (match, key) => {
312
+ try {
313
+ return that.$util.getValueByPath(key, this) || that.$util.getValueByPath(key, paramData) || ''
314
+ } catch (error) {
315
+ return scope.values
316
+ }
317
+ })
318
+ }
319
+ if (/#\[([\w-.|$#]+)\]/.test(values)) {
320
+ values = values.replace(/#\[([\w-.|$#]+)\]/, (match, key) => {
321
+ try {
322
+ return evalWith(`data.${key}`, { data }) || ''
323
+ } catch (error) {
324
+ return scope.values
325
+ }
326
+ })
327
+ }
328
+ if (/\{\{([\w-_.,|$#[\]()"'\s]+)\}\}/g.test(values)) {
329
+ values = values.replace(/\{\{([\w-.,|$#[\]()"'\s]+)\}\}/g, (macth, key) => {
330
+ try {
331
+ // 执行表达式
332
+ return this.$util.evalExpression(key, paramData)
333
+ } catch (error) {
334
+ return `{{${key}}}`
335
+ }
336
+ })
337
+ }
338
+ scope.values = values
339
+ if (scope.scopeParams) {
340
+ scope.scopeParams = this.$formatScope(scope.scopeParams, data)
341
+ }
342
+ }
343
+ return _scopeParams
344
+ }
345
+ }
346
+ },
347
+ watch: {
348
+ pageParams: {
349
+ handler (v) {
350
+ },
351
+ deep: true
352
+ },
353
+ config: {
354
+ handler (v) {
355
+ if (v.metaId) this.componentMetaId = v.metaId
356
+ this.metaViewId = v.metaViewId
357
+ this.scheduleCommit()
358
+ },
359
+ deep: true
360
+ },
361
+ currentMetaId: {
362
+ handler (v) {
363
+ this.getActionList(v)
364
+ this.getRuleList(v)
365
+ this.getAllFields(v)
366
+ this.refreshConfigOptions(true)
367
+ },
368
+ immediate: true
369
+ },
370
+ currentMetaViewId: {
371
+ handler (v) {
372
+ this.getAllFields()
373
+ this.refreshConfigOptions(true)
374
+ },
375
+ immediate: true
376
+ },
377
+ actionList (v) {
378
+ this.refreshConfigOptions(false)
379
+ },
380
+ ruleList (v) {
381
+ this.refreshConfigOptions(false)
382
+ },
383
+ relationList (v) {
384
+ this.refreshConfigOptions(false)
385
+ },
386
+ pageRuleList () {
387
+ this.getOperateOptions()
388
+ }
389
+ },
390
+ methods: {
391
+ // 单 key 取值:config 里为 nil 时退回默认值。渲染配置项时用它而不是 allConfigs[key],
392
+ // 让每个配置项子组件只依赖自己的 key,而不是整个 allConfigs computed
393
+ getConfigValue (key) {
394
+ const value = this.config[key]
395
+ return this.$_.isNil(value) ? this.defaultConfigs[key] : value
396
+ },
397
+ // deep watch 的回调只排队:同一微任务周期内的多次改动合并成一次提交
398
+ scheduleCommit () {
399
+ if (this._commitScheduled) return
400
+ this._commitScheduled = true
401
+ Promise.resolve().then(() => {
402
+ this._commitScheduled = false
403
+ this.commitConfig()
404
+ })
405
+ },
406
+ // getConfigs / getComponentSetting 仍全量计算(子类可覆盖,且只有几千次比较),
407
+ // 但只把与上次提交不同的 key 写回 designer——此前每次输入都全量写回,整个画布跟着重算
408
+ commitConfig () {
409
+ if (this.$.isUnmounted) return
410
+ const configs = this.getConfigs() || {}
411
+ const setting = this.getComponentSetting() || {}
412
+ const last = this._lastCommitted || { configs: {}, setting: {} }
413
+ const configPatch = diffPatch(last.configs, configs)
414
+ const settingPatch = diffPatch(last.setting, setting)
415
+ this._lastCommitted = { configs: cloneDeep(configs), setting: cloneDeep(setting) }
416
+ if (configPatch) this.changeItemConfigs(this.id, configPatch)
417
+ if (settingPatch && this.designer) this.designer.updateWidget(this.id, settingPatch)
418
+ },
419
+ // 配置项刷新入口:同一微任务周期内只执行首次(两个 immediate watcher 会在挂载期连续同步触发两次)。
420
+ // 首次是同步执行的,不延后——created 里 32 个子类的 initConfig 依赖这个时序。
421
+ refreshConfigOptions (withDefaults) {
422
+ if (this._refreshTicket) return
423
+ this._refreshTicket = true
424
+ Promise.resolve().then(() => { this._refreshTicket = false })
425
+ if (withDefaults) this.initDefaultConfigs()
426
+ this.initConfigOptions()
427
+ this.afterConfigOptions()
428
+ },
429
+ initDefaultConfigs () {
430
+ // 获取到该组件的默认配置
431
+ this.defaultConfigs = {
432
+ flex: false,
433
+ span: 24,
434
+ xsspan: 24
435
+ }
436
+ },
437
+ getEntityRelation (v) {
438
+ const mainEntity = v || this.currentMetaId
439
+ // 关联对象树只跟主对象有关:同一主对象全局只请求一次(子类 watcher 会在一次选中里连调两次)
440
+ getCached('relation:' + mainEntity, () => this.$http.$get({
441
+ entityId: 'FM_ENTITY_RELATION',
442
+ action: 'getEntityRelationTree',
443
+ mainEntity
444
+ }))
445
+ .then(data => {
446
+ data.forEach(relation => {
447
+ relation.label = relation.title
448
+ relation.value = relation.flag
449
+ relation.children = relation.childrens
450
+ if (relation.childrens) {
451
+ relation.childrens.forEach(childRelation => {
452
+ childRelation.value = relation.flag + '#' + childRelation.flag
453
+ childRelation.label = childRelation.title
454
+ })
455
+ }
456
+ })
457
+ this.componentRelationList = data
458
+ })
459
+ },
460
+ getField (field) {
461
+ const code = typeof field === 'string' ? field : (field && (field.attriName || field.code))
462
+ if (!code) return null
463
+ const store = this.treeFieldStore || []
464
+ for (const meta of store) {
465
+ const fieldInfo = (meta.children || []).find(item => item.linkCode === code || item.field === code || item.code === code)
466
+ if (fieldInfo) return fieldInfo
467
+ }
468
+ if (code.includes('|')) {
469
+ // 关联字段:按 linkFlag 定位关联对象后再查找字段
470
+ const links = code.split('|')
471
+ const fieldCode = links.pop()
472
+ const linkFlag = links.join('|').toUpperCase()
473
+ const linkMeta = store.find(meta => meta.linkFlag && String(meta.linkFlag).toUpperCase() === linkFlag)
474
+ if (linkMeta) {
475
+ return (linkMeta.children || []).find(item => item.code === fieldCode || item.linkCode === code) || null
476
+ }
477
+ }
478
+ return null
479
+ },
480
+ // 视图切换时是否允许按新视图过滤已配置字段:
481
+ // 字段树未加载成功时不过滤(否则会误删全部字段);
482
+ // 初次选中组件时 metaViewId 从空变为已保存值属于配置回显,也不过滤,仅用户真正切换视图时才过滤
483
+ canFilterFieldsByView (v) {
484
+ if (!this.treeFieldStore || !this.treeFieldStore.length) return false
485
+ if (!this._metaViewTouched) {
486
+ this._metaViewTouched = true
487
+ if (v === this._initialMetaViewId) return false
488
+ }
489
+ return true
490
+ },
491
+ async initConfigOptions () {
492
+ const baseOptions = [
493
+ { key: 'componentName', label: '组件名称' },
494
+ { key: 'componentEvents', label: '组件事件', type: 'event' },
495
+ { key: 'span', label: '宽度', type: 'select', options: this.spanOptions },
496
+ { key: 'xsspan', label: '移动端宽度', type: 'select', options: this.spanOptions },
497
+ { key: 'flex', label: '占据页面剩余空间', type: 'radio', options: [{ label: '是', value: true }, { label: '否', value: false }] }
498
+ ]
499
+ // 已有配置项时不先打回基础项(那会闪一下并多渲染一轮),等数据到了整体替换
500
+ if (!this.configOptions || this.configOptions.length === 0) this.configOptions = baseOptions
501
+ if (this.componentInfo.ID || this.componentInfo.templateId) {
502
+ let eventList = this.getCodeById('EVENT')
503
+ if (!eventList) {
504
+ await this.$store.dispatch({
505
+ type: 'ADD_LIST',
506
+ key: 'EVENT'
507
+ })
508
+ .then(data => {
509
+ eventList = data
510
+ })
511
+ }
512
+ const params = {
513
+ action: 'getPageAttributeTree',
514
+ entityId: 'FM_PAGE_ATTRIBUTE',
515
+ pageId: this.componentInfo.ID || this.componentInfo.templateId,
516
+ showEntity: '1',
517
+ order_field: 'ORDER_NUM',
518
+ order_mode: 'asc'
519
+ }
520
+ if (this.widget?.type === 'template') {
521
+ params['scope.TEMPLATE'] = this.componentInfo.ID
522
+ params.entityId = 'FM_TEMPLATE_ATTRIBUTE'
523
+ } else {
524
+ params['scope.PAGE'] = this.componentInfo.ID || this.componentInfo.templateId
525
+ }
526
+ // 同一实体 + 页面的配置项树全局只请求一次;取到的是独立副本,下面的 formatData 可以放心原地改
527
+ const isTemplate = this.widget?.type === 'template'
528
+ const cacheKey = attributeTreeKey({ entityId: params.entityId, pageId: isTemplate ? this.componentInfo.ID : (this.componentInfo.ID || this.componentInfo.templateId), isTemplate })
529
+ getCached(cacheKey, () => this.$http.getTree(params))
530
+ .then(data => {
531
+ if (data && data.length > 0) {
532
+ const component = this.componentInfo || {}
533
+ const meta = this.currentMeta || {}
534
+ const pageMeta = this.pageMeta || {}
535
+ const that = this
536
+ let keywordFields = []
537
+ const { label, keyNames = [] } = meta
538
+ if (meta && meta.id) {
539
+ meta.allFields = meta.getAllFields()
540
+ keywordFields = [...keyNames]
541
+ if (label) {
542
+ keywordFields.push(label)
543
+ }
544
+ }
545
+ // 配置项的动态默认值 / 动态选项表达式可引用这些名字:显式传作用域,不能靠直接 eval 捕获(见 eval-with.js)
546
+ const evalScope = { component, meta, pageMeta, that, keywordFields }
547
+ const formatData = (arr, fieldFlag = false) => {
548
+ arr.forEach(item => {
549
+ const { TYPE, CODE, NAME, CODE_KEY, RELATED_ENTITY, RELATED_ENTITY_KEY, SHOW_CONDITION, DYNAMIC_META_ID, OBJECT_SCOPE, FIELD_EDITABLE, DEFAULT_VALUE_TYPE, DEFAULT_VALUE, DEFAULT_VALUE_DYNAMIC, INPUT_VARIABLE, NOTE, SHOW_NOTE, MULTIPLE, SHOW_SUB_FIELD, LIMIT_DATATYPE, OBJECT_FLAG, CUSTOM_FUNCTION, CODE_KEY_SET, CUSTOM_CODE_KEY, EVENT, IS_TREE, FIELD_CONFIGS, REG_EXP, INPUTABLE, DYNAMIC_OPTION } = item.entity.data
550
+ try {
551
+ if (DEFAULT_VALUE_TYPE === 'dynamic') {
552
+ if (DEFAULT_VALUE_DYNAMIC) item.defaultValue = evalWith(DEFAULT_VALUE_DYNAMIC, { ...evalScope, item }, this)
553
+ } else if (DEFAULT_VALUE) {
554
+ if (TYPE === 'switch' || TYPE === 'num') {
555
+ item.defaultValue = evalWith(DEFAULT_VALUE, { ...evalScope, item }, this)
556
+ } else if (TYPE === 'operates') {
557
+ item.defaultValue = JSON.parse(DEFAULT_VALUE)
558
+ } else {
559
+ item.defaultValue = DEFAULT_VALUE
560
+ }
561
+ }
562
+ } catch (error) {
563
+ console.error(error)
564
+ }
565
+ if (DYNAMIC_OPTION) {
566
+ try {
567
+ item.options = evalWith(`that.${DYNAMIC_OPTION}`, { that }, this)
568
+ } catch (error) {
569
+ console.error(error)
570
+ }
571
+ }
572
+
573
+ if (!this.$_.isNil(item.defaultValue)) {
574
+ this.defaultConfigs[CODE] = item.defaultValue
575
+ }
576
+ let attriName = CODE
577
+ if (fieldFlag && CODE.includes('.')) {
578
+ attriName = CODE.split('.')[1]
579
+ }
580
+ item.key = attriName
581
+ item.label = NAME
582
+ item.type = TYPE
583
+ item.showCondition = SHOW_CONDITION
584
+ item.dynamicMetaId = DYNAMIC_META_ID
585
+ item.code = CODE_KEY
586
+ item.object = RELATED_ENTITY
587
+ item.dataKey = RELATED_ENTITY_KEY
588
+ item.fieldEditable = FIELD_EDITABLE
589
+ item.inputVariable = INPUT_VARIABLE === '1'
590
+ item.tip = NOTE
591
+ item.showTip = SHOW_NOTE === '1'
592
+ item.regExp = REG_EXP
593
+ if (INPUTABLE) item.inputable = INPUTABLE === '1'
594
+ if (MULTIPLE)item.multiple = MULTIPLE !== '0'
595
+ if (TYPE === 'field') {
596
+ if (SHOW_SUB_FIELD)item.showSubField = SHOW_SUB_FIELD === '1'
597
+ if (LIMIT_DATATYPE)item.limit = { dataType: LIMIT_DATATYPE.split(',') }
598
+ } else if (TYPE === 'object') {
599
+ if (OBJECT_FLAG)item.flag = OBJECT_FLAG
600
+ if (IS_TREE)item.isTree = IS_TREE
601
+ if (FIELD_CONFIGS)item.fieldConfigs = JSON.parse(FIELD_CONFIGS)
602
+ } else if (TYPE === 'custom') {
603
+ if (CUSTOM_FUNCTION) {
604
+ if (typeof this[CUSTOM_FUNCTION] === 'function') {
605
+ item.renderContent = this[CUSTOM_FUNCTION]
606
+ }
607
+ }
608
+ }
609
+ if (EVENT) {
610
+ const event = {}
611
+ eventList.forEach(item => {
612
+ if (EVENT.includes(item.code)) {
613
+ event[item.code] = item.name
614
+ }
615
+ })
616
+ item.eventList = event
617
+ }
618
+ if (CODE_KEY_SET === '1' && CUSTOM_CODE_KEY) {
619
+ item.options = JSON.parse(CUSTOM_CODE_KEY)
620
+ }
621
+ if (OBJECT_SCOPE) {
622
+ const scope = JSON.parse(OBJECT_SCOPE)
623
+ item.scopeParams = scope.scopeParams
624
+ }
625
+ if (item.children) {
626
+ const flag = item.children.length > 0 && TYPE === 'field'
627
+ formatData(item.children, flag)
628
+ }
629
+ })
630
+ }
631
+ formatData(data)
632
+ this.configOptions = data
633
+ }
634
+ })
635
+ }
636
+ },
637
+ afterConfigOptions () {
638
+ if (this.upComponentInstance) {
639
+ // T29/$children:upComponentInstance 是 epx-component 包装,其内渲染的组件带 ref="component"
640
+ // (同 AddFormItem.vue:465 的既有写法)。Vue3 已移除 $children。
641
+ const upComponent = this.upComponentInstance.$refs.component || {}
642
+ const { subConfigOptions = [], subDefaultConfigs = {} } = upComponent
643
+ this.configOptions = [...subConfigOptions, ...this.configOptions]
644
+ this.defaultConfigs = {
645
+ ...subDefaultConfigs,
646
+ ...this.defaultConfigs
647
+ }
648
+ }
649
+ },
650
+ initConfig () {
651
+ const config = this.$_.cloneDeep(this.compConfig)
652
+ if (this.componentInfo.span) {
653
+ config.span = this.componentInfo.span
654
+ }
655
+ this.config = config
656
+ this.afterInitConfig()
657
+ },
658
+ afterInitConfig () {},
659
+ getActionList (v) {
660
+ if (!v || (v === this.pageMetaId && this.pageActionList)) return
661
+ getCached(`api:${v}`, () => this.$http.list({ action: 'getEntityAllApi', entityId: 'FM_ENTITY_API', metaId: v }))
662
+ .then(data => {
663
+ if (v === this.currentMetaId) {
664
+ this.componentActionList = data.entitys.map(item => ({ label: item.LABEL || item.NAME, value: item.NAME }))
665
+ }
666
+ })
667
+ },
668
+ getRuleList (v) {
669
+ if (!v || (v === this.pageMetaId && this.pageRuleList)) return
670
+ getCached(`rule:${v}`, () => this.$http.list({ entityId: 'ACT_RE_MODEL', 'scope.ENTITY': v, 'scope.CATEGORY': '2' }))
671
+ .then(data => {
672
+ if (v === this.currentMetaId) {
673
+ this.componentRuleList = data.entitys.map(item => ({ label: item.NAME || item.KEY, value: item.KEY }))
674
+ }
675
+ })
676
+ },
677
+ getFieldOptions () {
678
+ this.fieldOptions = [
679
+ { key: 'attriName', label: '字段', readonly: true },
680
+ { key: 'configWay', label: '配置方式', type: 'radio', options: [{ label: '默认配置', value: 'default' }, { label: '自定义', value: 'custom' }], defaultValue: 'default' },
681
+ { key: 'attriLabel', label: '名称', type: 'text' },
682
+ { key: 'width', label: '宽度', type: 'text', defaultValue: '120' },
683
+ { key: 'isLabel', label: '外部标签', type: 'radio', options: [{ label: '是', value: true }, { label: '否', value: false }], defaultValue: false },
684
+ { key: 'locked', label: '是否锁定', type: 'radio', options: [{ label: '是', value: true }, { label: '否', value: false }], defaultValue: false },
685
+ { key: 'color', label: '字体颜色', type: 'color', defaultValue: '#333' },
686
+ {
687
+ key: 'detailPageId',
688
+ label: '字段详情页面',
689
+ type: 'object',
690
+ object: 'FM_PAGE_CONFIG',
691
+ showFlag: {
692
+ dataType: ['object', 'multiobject']
693
+ }
694
+ }
695
+ ]
696
+ },
697
+ // 处理器列表 / 通用操作只跟组件类型(componentInfo.ID)有关:同类型面板全局只请求一次,
698
+ // created 与 pageRuleList 变化各触发一次也共享同一份
699
+ getHandlerList () {
700
+ getCached('handlers:' + this.componentInfo.ID, () => this.$http.list({
701
+ action: 'pageHandlersList',
702
+ entityId: 'FM_PAGE_HANDLERS',
703
+ pageId: this.componentInfo.ID,
704
+ order_field: 'ORDER_NUM',
705
+ order_mode: 'asc'
706
+ }))
707
+ .then(data => {
708
+ this.handlerList = data.entitys.map(item => ({ label: item.NAME, value: item.CODE }))
709
+ })
710
+ },
711
+ getCommonOperates () {
712
+ getCached('commonOps:' + this.componentInfo.ID, () => this.$http.list({
713
+ action: 'pageCommonOperatesList',
714
+ entityId: 'FM_PAGE_COMMON_OPERATES',
715
+ pageId: this.componentInfo.ID,
716
+ link: 'handler,component|left join',
717
+ order_field: 'ORDER_NUM',
718
+ order_mode: 'asc'
719
+ }))
720
+ .then(data => {
721
+ if (data.entitys && data.entitys.length > 0) {
722
+ this.commonOperates = data.entitys.map(item => {
723
+ const handler = {}
724
+ if (item.TEXT) handler.text = item.TEXT
725
+ if (item.HANDLER) handler.handler = item['HANDLER|CODE']
726
+ if (item.UI) handler.ui = item.UI
727
+ if (item.ICON) handler.icon = item.ICON
728
+ if (item.ACTION) handler.action = item.ACTION
729
+ if (item.COMPONENT) handler.component = item['COMPONENT|CODE']
730
+ if (item.NUM) handler.num = item.NUM
731
+ if (item.CONFIRM) handler.confirm = item.CONFIRM === '1'
732
+ if (item.CONFIRM_MSG) handler.confirmMsg = item.CONFIRM_MSG
733
+ if (item.SUCCESS_MSG) handler.successMsg = item.SUCCESS_MSG
734
+ if (item.FAIL_MSG) handler.failMsg = item.FAIL_MSG
735
+ if (item.OPEN_MODE) handler.openMode = item.OPEN_MODE
736
+ if (item.MOVE_TYPE) handler.moveType = item.MOVE_TYPE
737
+ if (item.PAGE_TYPE) handler.pageType = item.PAGE_TYPE
738
+ if (item.PAGE_FLAG) handler.pageFlag = item.PAGE_FLAG
739
+ if (item.TERMINAL) handler.terminal = item.TERMINAL
740
+ if (item.PARAMS) {
741
+ handler.params = eval('(' + item.PARAMS + ')')
742
+ }
743
+ return handler
744
+ })
745
+ }
746
+ })
747
+ },
748
+ // 一对多字段的函数选项(列表类面板的字段设置用):代码表全局只请求一次
749
+ getFunctionOption () {
750
+ getCached('codes:ONEMORE_FIELD_FUNCTION', () => this.$http.getCodes({ key: 'ONEMORE_FIELD_FUNCTION' }))
751
+ .then(data => {
752
+ this.FunctionOption = data.map(item => ({ value: item.code, name: item.name }))
753
+ })
754
+ },
755
+ getOperateOptions () {
756
+ this.getHandlerList()
757
+ this.getCommonOperates()
758
+ this.operateConfigs = [
759
+ {
760
+ key: 'base',
761
+ title: '基本',
762
+ options: ['text', 'ui', 'type', 'icon', 'preview']
763
+ },
764
+ {
765
+ key: 'event',
766
+ title: '事件',
767
+ options: ['metaId', 'handler', 'action', 'rule', 'moveType', 'openMode', 'page', 'pageType', 'menuId', 'serviceId', 'webLinkUrl', 'printWay', 'printCode', 'cptName', 'destActivityId', 'processNode', 'function', 'params', 'beforeTrigger', 'afterTrigger', 'afterTriggerPage', 'afterTriggerPageOpenMode', 'afterTriggerParams']
768
+ },
769
+ {
770
+ key: 'advance',
771
+ title: '高级',
772
+ options: ['terminal', 'num', 'limitFlag', 'limitCondition', 'limitTip', 'showConditionType', 'showCondition', 'showConditionEl', 'confirm', 'confirmMsg', 'confirmButtonText', 'cancelButtonText', 'successMsg', 'failMsg', 'mask']
773
+ }
774
+ ]
775
+ },
776
+
777
+ // 筛选条件字段
778
+ getAllFields (v) {
779
+ if (!this.currentMetaId) return []
780
+ if (!this.treeFieldStore) {
781
+ return this.$store.dispatch({
782
+ type: 'ADD_META_VIEW_FIELDS',
783
+ metaId: this.currentMetaId,
784
+ viewId: this.metaViewId
785
+ })
786
+ }
787
+ return this.treeFieldStore
788
+ },
789
+ changeConfigItem (key, value) {
790
+ this.config[key] = value
791
+ },
792
+ changeLanguageConfig (key, value) {
793
+ this.config[`${key}.i18n`] = value
794
+ },
795
+ changeEl (key, value) {
796
+ if (value) {
797
+ this.changeConfigItem(key, JSON.parse(value).el)
798
+ } else {
799
+ this.changeConfigItem(key, null)
800
+ }
801
+ },
802
+ getConfigs () {
803
+ // 获取配置
804
+ const _configs = {}
805
+ for (const key in this.config) {
806
+ let configOption = {}
807
+ for (const item of this.configOptions) {
808
+ if (item.key === key) {
809
+ configOption = item
810
+ break
811
+ } else if (item.children) {
812
+ for (const child of item.children) {
813
+ if (child.key === key) {
814
+ configOption = child
815
+ break
816
+ }
817
+ }
818
+ }
819
+ }
820
+ /* else if (key === 'orderFields' || key === 'order_field') {
821
+ if (this.config[key]) {
822
+ _configs.order_field = this.config[key].map(item => (item.attriName || item))
823
+ _configs.order_mode = this.config[key].map(item => (item.sort || 'asc'))
824
+ }
825
+ } */
826
+ if (configOption.allocation === 'component') { // 组件设置项
827
+ } else if (!this.$_.isEqual(this.config[key], this.defaultConfigs[key]) || configOption.key === 'componentName') {
828
+ _configs[key] = this.config[key]
829
+ } else {
830
+ _configs[key] = null
831
+ }
832
+ }
833
+
834
+ // 保留高级设置的配置
835
+ const advanceKeys = ['showIf', 'iterator', 'showTerminal', 'componentEvents']
836
+ advanceKeys.forEach(key => {
837
+ if (this.compConfig[key] !== undefined) {
838
+ _configs[key] = this.compConfig[key]
839
+ }
840
+ })
841
+
842
+ return _configs
843
+ },
844
+ getComponentSetting () {
845
+ const _setting = {}
846
+ const componentAttris = ['flex', 'layout', 'direction', 'justify', 'align', 'style', 'componentName', 'span', 'xsspan', 'items', 'countScopeParams']
847
+ for (const key in this.config) {
848
+ const isAttri = componentAttris.find(item => item === key || item + '.i18n' === key)
849
+ const configOption = this.configOptions.find(item => item.key === key) || {}
850
+ if (configOption.allocation === 'component' || isAttri) {
851
+ if (!this.$_.isEqual(this.config[key], this.defaultConfigs[key])) {
852
+ _setting[key] = this.config[key]
853
+ }
854
+ }
855
+ }
856
+ return _setting
857
+ },
858
+ switchAccordion (key) {
859
+ this.foldMap[key] = !this.foldMap[key]
860
+ },
861
+
862
+ /**
863
+ * renderFunctions
864
+ */
865
+ renderFormItem (item) {
866
+ const defaultValue = this.$_.isNil(item.defaultValue) ? this.defaultConfigs[item.key] : item.defaultValue
867
+ if (item.type === 'report') {
868
+ return (
869
+ <epx-visual-config-design-report
870
+ value={this.getConfigValue(item.key)}
871
+ defaultValue={this.defaultConfigs[item.key]}
872
+ />
873
+ )
874
+ }
875
+ // T33 JSX 转 Vue3:`<span>` 是 Vue2 的具名插槽写法(编成 vnode.data.slot),
876
+ // Vue3 没有 `slot` attribute —— 那个 span 会掉进**默认插槽**里、标签区变空。
877
+ // 改用 @vue/babel-plugin-jsx 的 `v-slots`。
878
+ const labelSlot = item.type === 'font'
879
+ ? () => (
880
+ <span>
881
+ <i class="epx-visual-component__form-item-fold-icon el-icon-caret-right" onClick={() => (this.opened[item.key] = !this.opened[item.key])}></i>
882
+ {item.label}
883
+ </span>
884
+ )
885
+ : ((item.showTip !== false) && item.tip)
886
+ ? () => (
887
+ <span>
888
+ {item.label}
889
+ <el-tooltip content={item.tip} placement="top">
890
+ <i class="el-icon-warning epx-visual-component__form-item-tip"></i>
891
+ </el-tooltip>
892
+ </span>
893
+ )
894
+ : null
895
+ // 外层用同类名的 div 代替 ElRow 组件:这里没有 gutter / 对齐配置,ElRow 只多一个组件实例
896
+ return (
897
+ <div class="el-row" key={item.key}>
898
+ <el-form-item label={`${item.label}`} class={{ 'is-default': this.isDefaultValue(item.key), 'epx-visual-component__form-item': true, ['epx-visual-component__form-item--' + item.type]: true, 'epx-visual-component__form-item--opened': this.opened[item.key] }} v-slots={labelSlot ? { label: labelSlot } : {}}>
899
+ {
900
+ item.renderContent
901
+ ? (
902
+ <div>
903
+ {item.renderContent(item)}
904
+ </div>
905
+ )
906
+ : item.type === 'radio' ? (
907
+ <epx-visual-config-radio
908
+ code={item.code}
909
+ option-list={item.options}
910
+ value={this.getConfigValue(item.key)}
911
+ inputable={item.inputable}
912
+ defaultValue={defaultValue}
913
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
914
+ />
915
+ ) : item.type === 'checkbox' ? (
916
+ <epx-visual-config-checkbox
917
+ code={item.code}
918
+ option-list={item.options}
919
+ value={this.getConfigValue(item.key)}
920
+ defaultValue={defaultValue}
921
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
922
+ />
923
+ ) : item.type === 'switch' ? (
924
+ <epx-visual-config-switch
925
+ value={this.getConfigValue(item.key)}
926
+ defaultValue={defaultValue}
927
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
928
+ />
929
+ ) : item.type === 'action' ? (
930
+ <epx-visual-config-list
931
+ option-list={this.actionList}
932
+ value={this.getConfigValue(item.key)}
933
+ defaultValue={defaultValue}
934
+ code={item.code}
935
+ label={item.label}
936
+ multiple={item.multiple}
937
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
938
+ />
939
+ ) : item.type === 'rule' ? (
940
+ <epx-visual-config-list
941
+ option-list={this.ruleList}
942
+ value={this.getConfigValue(item.key)}
943
+ defaultValue={defaultValue}
944
+ code={item.code}
945
+ label={item.label}
946
+ multiple={item.multiple}
947
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
948
+ />
949
+ ) : item.type === 'tree' ? (
950
+ <epx-visual-config-tree
951
+ option-list={item.options}
952
+ value={this.getConfigValue(item.key)}
953
+ defaultValue={defaultValue}
954
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
955
+ />
956
+ )
957
+ : item.type === 'row' ? (
958
+ <epx-visual-config-row
959
+ value={this.config[item.key]}
960
+ defaultValue={defaultValue}
961
+ treeFieldStore={this.treeFieldStore}
962
+ field-options={this.rowFieldOptions || this.fieldOptions}
963
+ pageParams={this.pageParams}
964
+ pageGlobalConfigs={this.globalConfigs}
965
+ changeItemConfigs={this.changeItemConfigs}
966
+ scopeConfigs={this.scopeConfigs}
967
+ functionOption={this.FunctionOption}
968
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
969
+ />
970
+ ) : item.type === 'list' ? (
971
+ <epx-visual-config-list
972
+ option-list={item.options}
973
+ value={this.getConfigValue(item.key)}
974
+ defaultValue={defaultValue}
975
+ code={item.code}
976
+ label={item.label}
977
+ multiple={item.multiple}
978
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
979
+ />
980
+ ) : item.type === 'select' ? (
981
+ <epx-visual-config-select
982
+ option-list={item.options}
983
+ value={this.getConfigValue(item.key)}
984
+ defaultValue={defaultValue}
985
+ onChangeConfigs={item.change || this.changeConfigItem.bind(this, item.key)}
986
+ />
987
+ )
988
+ : item.type === 'list-field' || (item.type === 'field' && item.fieldEditable === '1') ? (
989
+ <epx-visual-config-list-field
990
+ value={this.config[item.key]}
991
+ componentMetaId={this.componentMetaId}
992
+ defaultValue={defaultValue}
993
+ rule-list={this.ruleList}
994
+ treeFieldStore={this.treeFieldStore}
995
+ functionOption={this.FunctionOption}
996
+ scopeConfigs={this.scopeConfigs}
997
+ pageParams={this.pageParams}
998
+ pageGlobalConfigs={this.globalConfigs}
999
+ field-options={(item.type === 'field' && item.children && item.children.length > 0) ? item.children : this.fieldOptions}
1000
+ changeItemConfigs={this.changeItemConfigs}
1001
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1002
+ />
1003
+ )
1004
+ : item.type === 'field' ? (
1005
+ <epx-visual-config-field
1006
+ value={this.config[item.key]}
1007
+ defaultValue={defaultValue}
1008
+ rule-list={this.ruleList}
1009
+ metaId={item.metaId || this.getConfigMetaId(item)}
1010
+ treeFieldStore={this.treeFieldStore}
1011
+ multiple={item.multiple}
1012
+ limit={item.limit}
1013
+ scopeConfigs={this.scopeConfigs}
1014
+ defaultShowSubField={item.showSubField}
1015
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1016
+ />
1017
+ )
1018
+ : item.type === 'm-field' ? (
1019
+ <epx-visual-config-m-list-field
1020
+ value={this.config[item.key]}
1021
+ defaultValue={this.defaultConfigs[item.key]}
1022
+ treeFieldStore={this.treeFieldStore}
1023
+ field-options={this.fieldOptions}
1024
+ pageParams={this.pageParams}
1025
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1026
+ />
1027
+ ) : item.type === 'order-field' ? (
1028
+ <epx-visual-config-order-field
1029
+ value={this.config[item.key]}
1030
+ defaultValue={defaultValue}
1031
+ metaId={item.metaId || this.getConfigMetaId(item)}
1032
+ treeFieldStore={this.treeFieldStore}
1033
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1034
+ />
1035
+ )
1036
+ : item.type === 'operates' || item.type === 'operate' ? (
1037
+ <epx-visual-config-operate
1038
+ designer={this.designer}
1039
+ value={this.config[item.key]}
1040
+ defaultValue={defaultValue}
1041
+ configs={this.config}
1042
+ metaId={item.metaId}
1043
+ compMetaId={this.getConfigMetaId(item)}
1044
+ common-operates={item.commonOperates || this.commonOperates}
1045
+ operate-options={{ ...(this.operateOptions || {}), ...(item.operateOptions || {}) }}
1046
+ operate-configs={this.operateConfigs}
1047
+ treeFieldStore={this.treeFieldStore}
1048
+ pageParams={this.pageParams}
1049
+ handlerList={item.handlerList || this.handlerList}
1050
+ action-list={this.actionList}
1051
+ rule-list={this.ruleList}
1052
+ scopeConfigs={this.scopeConfigs}
1053
+ pageGlobalConfigs={this.globalConfigs}
1054
+ changeItemConfigs={this.changeItemConfigs}
1055
+ onChangeOperate={this.changeOperate && this.changeOperate.bind(this, item.key)}
1056
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1057
+ />
1058
+ )
1059
+ : item.type === 'scope' ? (
1060
+ <epx-visual-config-scope
1061
+ designer={this.designer}
1062
+ value={this.config[item.key]}
1063
+ pageParams={this.pageParams}
1064
+ treeFieldStore={this.treeFieldStore}
1065
+ extendFields={item.extendFields}
1066
+ componentMetaId={this.getConfigMetaId(item)}
1067
+ scopeConfigs={this.scopeConfigs}
1068
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1069
+ />
1070
+ ) : item.type === 'el' ? (
1071
+ <epx-rule
1072
+ formulaType='web'
1073
+ modelValue={this.getConfigValue(item.key)}
1074
+ onChange={this.changeEl.bind(this, item.key) }
1075
+ metaId={this.getConfigMetaId(item)}
1076
+ variableList={this.variableTree}
1077
+ fieldConfigs={{ state: 'EDIT', functionType: 'web' }}
1078
+ >
1079
+ </epx-rule>
1080
+ )
1081
+ : item.type === 'num' ? (
1082
+ <epx-visual-config-number
1083
+ value={this.getConfigValue(item.key)}
1084
+ defaultValue={defaultValue}
1085
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1086
+ />
1087
+ ) : item.type === 'chart' ? (
1088
+ <epx-visual-config-chart
1089
+ value={this.getConfigValue(item.key)}
1090
+ defaultValue={defaultValue}
1091
+ onCallback={item.callback}
1092
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1093
+ />
1094
+ ) : item.type === 'params' ? (
1095
+ <epx-visual-config-params
1096
+ value={this.getConfigValue(item.key)}
1097
+ defaultValue={defaultValue}
1098
+ treeFieldStore={this.treeFieldStore}
1099
+ pageParams={this.pageParams}
1100
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1101
+ />
1102
+ ) : item.type === 'object' || item.type === 'multiobject' ? (
1103
+ <epx-visual-config-object
1104
+ type={item.type}
1105
+ value={this.getConfigValue(item.key)}
1106
+ defaultValue={defaultValue}
1107
+ object={item.object}
1108
+ label={item.label}
1109
+ dataKey={item.dataKey}
1110
+ fieldConfigs={item.fieldConfigs}
1111
+ flag={item.flag}
1112
+ isTree={item.isTree}
1113
+ scopeParams={item.key === 'metaViewId' ? [{ field: 'ENTITY', values: this.componentMetaId }] : this.$formatScope(item.scopeParams)}
1114
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1115
+ />
1116
+ ) : item.type === 'font' ? (
1117
+ <epx-visual-config-font
1118
+ value={this.getConfigValue(item.key)}
1119
+ defaultValue={this.defaultConfigs[item.key]}
1120
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1121
+ />
1122
+ ) : item.type === 'color' ? (
1123
+ <epx-visual-config-color
1124
+ value={this.getConfigValue(item.key)}
1125
+ defaultValue={this.defaultConfigs[item.key]}
1126
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1127
+ />
1128
+ ) : item.type === 'page' ? (
1129
+ <epx-visual-config-item-page
1130
+ value={this.getConfigValue(item.key)}
1131
+ defaultValue={this.defaultConfigs[item.key]}
1132
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1133
+ >
1134
+ </epx-visual-config-item-page>
1135
+ ) : item.type === 'event' ? (
1136
+ <epx-visual-config-event
1137
+ value={this.getConfigValue(item.key)}
1138
+ defaultValue={defaultValue}
1139
+ functionList={this.functionList}
1140
+ eventList={item.eventList}
1141
+ pageGlobalConfigs={this.globalConfigs}
1142
+ changeItemConfigs={this.changeItemConfigs}
1143
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1144
+ />
1145
+ ) : item.type === 'function' ? (
1146
+ <epx-visual-config-function
1147
+ designer={this.designer}
1148
+ value={this.getConfigValue(item.key)}
1149
+ defaultValue={defaultValue}
1150
+ functionList={this.functionList}
1151
+ pageGlobalConfigs={this.globalConfigs}
1152
+ onInput={this.changeConfigItem.bind(this, item.key)}
1153
+ />
1154
+ ) : item.type === 'html' ? (
1155
+ <epx-visual-config-html
1156
+ designer={this.designer}
1157
+ value={this.getConfigValue(item.key)}
1158
+ defaultValue={this.defaultConfigs[item.key]}
1159
+ i18nValue={this.getConfigValue(item.key + '.i18n')}
1160
+ pageGlobalConfigs={this.globalConfigs}
1161
+ changeItemConfigs={this.changeItemConfigs}
1162
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1163
+ onChange-language-config={this.changeLanguageConfig.bind(this, item.key)}
1164
+ />
1165
+ ) : item.type === 'image' ? (
1166
+ <epx-visual-config-image
1167
+ designer={this.designer}
1168
+ label={item.label}
1169
+ value={this.getConfigValue(item.key)}
1170
+ defaultValue={this.defaultConfigs[item.key]}
1171
+ pageGlobalConfigs={this.globalConfigs}
1172
+ changeItemConfigs={this.changeItemConfigs}
1173
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1174
+ />
1175
+ ) : item.type === 'textarea' ? (
1176
+ <epx-visual-config-textarea
1177
+ designer={this.designer}
1178
+ label={item.label}
1179
+ value={this.getConfigValue(item.key)}
1180
+ i18nValue={this.getConfigValue(item.key + '.i18n')}
1181
+ defaultValue={this.defaultConfigs[item.key]}
1182
+ inputVariable={item.inputVariable}
1183
+ change={item.change}
1184
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1185
+ onChange-language-config={this.changeLanguageConfig.bind(this, item.key)}
1186
+ />
1187
+ ) : (
1188
+ <epx-visual-config-input
1189
+ designer={this.designer}
1190
+ label={item.label}
1191
+ value={this.getConfigValue(item.key)}
1192
+ i18nValue={this.getConfigValue(item.key + '.i18n')}
1193
+ defaultValue={this.defaultConfigs[item.key]}
1194
+ inputVariable={item.inputVariable}
1195
+ regExp={item.regExp}
1196
+ readonly={item.readonly}
1197
+ change={item.change}
1198
+ onChangeConfigs={this.changeConfigItem.bind(this, item.key)}
1199
+ onChange-language-config={this.changeLanguageConfig.bind(this, item.key)}
1200
+ />
1201
+ )
1202
+ }
1203
+ </el-form-item>
1204
+ </div>
1205
+ )
1206
+ }
1207
+ },
1208
+ created () {
1209
+ this._lastCommitted = null
1210
+ this._commitScheduled = false
1211
+ // 记录进入配置面板时已保存的视图 id,用于区分"配置回显"和"用户切换视图"
1212
+ this._initialMetaViewId = (this.compConfig || {}).metaViewId
1213
+ for (let i = 0; i <= 24; i++) {
1214
+ this.spanOptions.push({ label: i, value: i })
1215
+ }
1216
+ this.handlerList = [
1217
+ { label: '打开指定页面', value: 'goPage' },
1218
+ { label: '打开指定应用', value: 'goApp' },
1219
+ { label: '打开指定链接', value: 'Link' },
1220
+ { label: '发起通用请求', value: 'commonAction' },
1221
+ { label: '发起业务规则', value: 'commonRuleAction' },
1222
+ { label: '报表打印', value: 'print' },
1223
+ { label: '下载文件', value: 'downloadFile' },
1224
+ { label: '返回', value: 'backPage' },
1225
+ { label: '自定义JS', value: 'customJs' }
1226
+ ]
1227
+ this.initConfig()
1228
+ this.getFieldOptions()
1229
+ this.getOperateOptions()
1230
+ // 上级组件是标签页
1231
+ // if (this.upComponent === 'page-tabs') {
1232
+ // // 添加标签页数量配置
1233
+ // this.configOptions.splice(1, 0, {
1234
+ // key: 'tabCount', label: '标签页显示数量', type: 'radio', allocation: 'component', options: [{ label: '是', value: true }, { label: '否', value: false }], defaultValue: false
1235
+ // }, {
1236
+ // key: 'countScopeParams', label: '标签页数量范围', type: 'scope', allocation: 'component'
1237
+ // })
1238
+ // }
1239
+ },
1240
+ render () {
1241
+ return (
1242
+ <div class="epx-visual-component">
1243
+ <epx-visual-config-options configOptions={this.showConfigOptions} />
1244
+ </div>
1245
+ )
1246
+ }
1247
+ }
1248
+ </script>
1249
+
1250
+ <style lang="scss">
1251
+ @include b(visual-component) {
1252
+ padding: 0 16px;
1253
+
1254
+ @include e(accordion) {
1255
+ @include when(fold) {
1256
+ margin-bottom: 10px;
1257
+ @include e(accordion-icon) {
1258
+ transform: rotate(180deg)
1259
+ }
1260
+ @include e(accordion-body) {
1261
+ display: none;
1262
+ }
1263
+ }
1264
+ }
1265
+ @include e(accordion-header) {
1266
+ width: calc(100% + 32px);
1267
+ display: flex;
1268
+ height: 40px;
1269
+ padding: 0 16px;
1270
+ justify-content: space-between;
1271
+ align-items: center;
1272
+ background: rgba(31, 56, 88, 0.1);
1273
+ position: relative;
1274
+ left: -16px;
1275
+ }
1276
+ @include e(accordion-body) {
1277
+ padding: 12px 0;
1278
+ }
1279
+ @include e(accordion-icon) {
1280
+ font-size: var(--epx-font-size-l);
1281
+ cursor: pointer;
1282
+ transition: all .5s;
1283
+ }
1284
+
1285
+ @include e(form-item) {
1286
+ &.el-form-item{
1287
+ display: flex;
1288
+ flex-wrap: wrap;
1289
+ }
1290
+ .el-form-item__header {
1291
+ flex-shrink: 0;
1292
+ }
1293
+ >.el-form-item__content {
1294
+ flex: 1;
1295
+ }
1296
+ .el-form-item__label {
1297
+ flex-shrink: 0;
1298
+ line-height: 20px;
1299
+ padding: 10px 8px 10px 0;
1300
+ }
1301
+ @include e(form-item-tip) {
1302
+ color: #999;
1303
+ cursor: pointer;
1304
+ margin-left: 2px;
1305
+ }
1306
+ @include m(font) {
1307
+ display: block;
1308
+ .el-form-item__label {
1309
+ width: 100%!important;
1310
+ }
1311
+ .el-form-item__content{
1312
+ display: none;
1313
+ }
1314
+ }
1315
+ @include m(opened) {
1316
+ @include e(form-item-fold-icon) {
1317
+ transform: rotate(90deg);
1318
+ }
1319
+ .el-form-item__content{
1320
+ display: block;
1321
+ }
1322
+ }
1323
+ }
1324
+ @include e(form-item-fold-icon){
1325
+ cursor: pointer;
1326
+ transition: all .5s;
1327
+ }
1328
+ // 配置项懒加载占位:高度贴近一行配置项,滚进视口后换成真实控件时跳动小
1329
+ @include e(placeholder) {
1330
+ height: 40px;
1331
+ margin-bottom: 18px;
1332
+ border-radius: var(--epx-radius-s);
1333
+ background: linear-gradient(90deg, var(--el-fill-color) 25%, var(--el-fill-color-lighter) 37%, var(--el-fill-color) 63%);
1334
+ background-size: 400% 100%;
1335
+ animation: epx-visual-placeholder-loading 1.4s ease infinite;
1336
+ }
1337
+ }
1338
+ @keyframes epx-visual-placeholder-loading {
1339
+ 0% { background-position: 100% 50%; }
1340
+ 100% { background-position: 0 50%; }
1341
+ }
1342
+ </style>