@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,1714 @@
1
+ <template>
2
+ <div class="field">
3
+ <el-radio-group v-model="settingFieldWay" v-if="showFieldWay">
4
+ <el-radio label="default" value="default">默认字段</el-radio>
5
+ <el-radio label="custom" value="custom">自定义字段</el-radio>
6
+ </el-radio-group>
7
+ <div v-if="settingFieldWay==='custom'">
8
+ <draggable
9
+ :list="fieldList"
10
+ class="list-group"
11
+ ghost-class="ghost"
12
+ >
13
+ <transition-group type="transition" name="flip-list" class="select-field-list">
14
+ <li v-for="(field, index) in fieldList" class="select-field-item list-group-item" :key="index">
15
+ <span>
16
+ {{ fieldLabel(field) }}
17
+ </span>
18
+ <div class="select-field-item__mask">
19
+ <i class="el-icon-edit" @click="editField(field, index)"></i> |
20
+ <i class="el-icon-close" @click="deleteField(index)"></i>
21
+ </div>
22
+ </li>
23
+ </transition-group>
24
+ </draggable>
25
+ <el-button class="add-field-btn" size="small" type="primary" @click="openAddFieldDialog">+ 添加字段</el-button>
26
+ <slot name="operate"></slot>
27
+ </div>
28
+ <ul v-else class="select-field-list">
29
+ <li v-for="field in defaultValue" class="select-field-item list-group-item" :key="field.attriName || field">
30
+ <span>
31
+ {{ fieldLabel(field) }}
32
+ </span>
33
+ </li>
34
+ </ul>
35
+ <epx-visual-config-lazy-dialog
36
+ title="添加字段"
37
+ v-model="showFieldDialog"
38
+ :append-to-body="true"
39
+ destroy-on-close
40
+ width="1200px"
41
+ class="show-field-dialog"
42
+ top="10vh"
43
+ >
44
+ <div class="field-setting">
45
+ <div class="field-setting-item">
46
+ <p class="field-setting__header">
47
+ <span>选择字段</span>
48
+ </p>
49
+ <div class="field-setting__content">
50
+ <el-input class="field-setting__filter" suffix-icon="el-icon-search" size="default" v-model="filterText"></el-input>
51
+ <el-tree
52
+ ref="tree"
53
+ class="field-tree"
54
+ show-checkbox
55
+ node-key="field"
56
+ :default-expanded-keys="defaultExpandKeys"
57
+ :data="unSelectFieldStore"
58
+ :render-after-expand="true"
59
+ :auto-expand-parent="false"
60
+ :props="treeProps"
61
+ :check-strictly="true"
62
+ :highlight-current="true"
63
+ @check-change="checkChange"
64
+ :filter-node-method="filterNode"
65
+ @node-click="nodeClick"
66
+
67
+ >
68
+ <template v-slot="{ node, data }"><span :style="data.type==='meta' && data.relationType==='1'? {color: 'red'}: {}">
69
+ {{node.label}}
70
+ </span></template>
71
+ </el-tree>
72
+ <div class="set-show-field">
73
+ 显示字段:
74
+ <el-checkbox v-model="showLogField">日志字段</el-checkbox>
75
+ <el-checkbox v-if="showSubFlag" v-model="showSubField">子集字段</el-checkbox>
76
+ </div>
77
+ <div v-show="checkedFieldList.length>0" class="field-setting-button__group">
78
+ <div class="field-setting-button__group_inner">
79
+ <el-button type="primary" size="default" @click="addCheckedField">添加选中字段</el-button>
80
+ <el-button size="default" @click="cancelChecked">取消</el-button>
81
+ </div>
82
+ </div>
83
+ </div>
84
+ </div>
85
+ <div class="field-setting-item">
86
+ <p class="field-setting__header">
87
+ <span>已选字段 <el-checkbox :style="{marginLeft: '8px'}" v-show="selectFieldMulti" v-model="isSelectAllField">全选</el-checkbox></span>
88
+ <el-checkbox class="fr" v-model="selectFieldMulti">多选</el-checkbox>
89
+ </p>
90
+ <div class="field-setting__content">
91
+ <el-checkbox-group ref="selectFieldContainer" class="setting-fields__select" v-model="checkedSelectFieldList">
92
+ <draggable
93
+ :list="settingFieldList"
94
+ class="list-group"
95
+ ghost-class="ghost"
96
+ >
97
+ <transition-group tag="ul" type="transition" name="flip-list" class="setting-fields__select--list">
98
+ <li v-for="(field, index) in settingFieldList" :ref="`select_field_${field.attriName || field}`" :class="['setting-fields__select--item', { active: selectFieldIndex===index}]" :key="field.attriName || field" @click="selectSettingField(field, index)">
99
+ <el-checkbox v-show="selectFieldMulti" @click.stop :label="index" :value="index">{{''}}</el-checkbox>
100
+ <i class="el-icon-document"></i>
101
+ <span>{{fieldLabel(field)}}</span>
102
+ <i v-show="!selectFieldMulti" class="el-icon-delete fr" @click.stop="deleteSettingField(index)"></i>
103
+ </li>
104
+ </transition-group>
105
+ </draggable>
106
+ </el-checkbox-group>
107
+ <div v-show="selectFieldMulti" class="field-setting-button__group">
108
+ <div class="field-setting-button__group_inner">
109
+ <el-button type="primary" size="default" @click="deleteSelectField">删除</el-button>
110
+ <el-button size="default" @click="selectFieldMulti=false">取消</el-button>
111
+ </div>
112
+ </div>
113
+ </div>
114
+ </div>
115
+ <div class="field-setting-item">
116
+ <p class="field-setting__header">
117
+ <span>字段属性</span>
118
+ </p>
119
+ <div class="field-setting__content">
120
+ <el-form v-if="selectField && loadFieldFinish" class="setting-field__config" inline label-position="left" label-width="98px">
121
+ <el-row class="setting-field__row">
122
+ <el-form-item label="字段路径">
123
+ {{getFieldPath}}
124
+ </el-form-item>
125
+ </el-row>
126
+ <el-row class="setting-field__row" v-for="item in showFieldOptions" :key="item.key">
127
+ <el-form-item :label="`${item.label}`" v-if="!(selectField.configWay !== 'custom' && (item.key !== 'configWay' && item.key !== 'attriName'))">
128
+ <template v-slot:label>
129
+ <span class="setting-field__form-label">{{ item.label }}
130
+ <el-tooltip v-if="item.note" class="item" effect="dark" :content="item.note" placement="top">
131
+ <i class="el-icon-warning-outline"></i>
132
+ </el-tooltip>
133
+ </span>
134
+ </template>
135
+ <epx-visual-config-radio
136
+ v-if="item.type==='radio' || item.type==='radio-input'"
137
+ :code="item.code"
138
+ :option-list="item.options"
139
+ :value="selectField[item.key]"
140
+ :defaultValue="item.defaultValue"
141
+ :inputable="item.type==='radio-input'"
142
+ @change-configs="v=>(selectField[item.key] = v)"
143
+ />
144
+ <epx-visual-config-switch
145
+ v-else-if="item.type === 'switch'"
146
+ :value="selectField[item.key]"
147
+ :defaultValue="item.defaultValue"
148
+ @change-configs="v=>(selectField[item.key] = v)"
149
+ />
150
+ <template v-else-if="item.type==='function' && fieldInfo.relationSort==='1'">
151
+ <el-select v-model="selectField[item.key]" placeholder="请选择">
152
+ <el-option
153
+ v-for="item in getFunctionOption(fieldInfo.dataType)"
154
+ :key="item.value"
155
+ :label="item.name"
156
+ :value="item.value">
157
+ </el-option>
158
+ </el-select>
159
+ </template>
160
+ <div v-else-if="item.type==='color'" class="setting-field__item">
161
+ <el-color-picker :model-value="selectField[item.key] || item.defaultValue" @change="v => (selectField[item.key] = v)"></el-color-picker>
162
+ <span class="setting-field__item--default">{{ selectField[item.key] && selectField[item.key] === item.defaultValue ? '(默认值)' : ''}}</span>
163
+ </div>
164
+ <div v-else-if="item.type==='object'" class="setting-field__item">
165
+ <epx-visual-config-object
166
+ :value="selectField[item.key]"
167
+ :defaultValue="item.defaultValue"
168
+ :object="item.object"
169
+ :label="item.label"
170
+ :dataKey="item.dataKey"
171
+ :fieldConfigs="item.fieldConfigs || {}"
172
+ :scopeParams="formatScopeParams(item.scopeParams)"
173
+ @change-configs="v => (selectField[item.key] = v)"
174
+ >
175
+ </epx-visual-config-object>
176
+ </div>
177
+ <div v-else-if="item.type==='scopeEntity'" class="setting-field__item" :style="{display: 'inline-block'}">
178
+ <el-radio-group v-model="scopeEntityType" @change="selectField[item.key] = ''">
179
+ <el-radio label="string" value="string">固定值</el-radio>
180
+ <el-radio label="field" value="field">字段值</el-radio>
181
+ </el-radio-group>
182
+ <div>
183
+ <!-- epx-table-form-item 把 $attrs 转发给内层字段组件,内层只认 modelValue / update:modelValue;
184
+ 原来的 :value / @change 会让 setDefaultValue 永远收不到 -->
185
+ <epx-table-form-item v-if="scopeEntityType==='string'" :key="fieldInfo.field" :model-value="selectField[item.key] || item.defaultValue" @update:model-value="v=>setDefaultValue(item.key, v)"
186
+ :fieldConfigs="{
187
+ attriName: 'scopeEntity',
188
+ attriLabel: '查询对象',
189
+ codeKey: 'FM_ENTITY',
190
+ dataType: 'object',
191
+ state: 'EDIT'
192
+ }"
193
+ ></epx-table-form-item>
194
+ <!-- 字段值 -->
195
+ <el-popover
196
+ v-else-if="scopeEntityType==='field'"
197
+ width="200"
198
+ trigger="click"
199
+ >
200
+ <template v-slot:reference><el-input :model-value="selectField[item.key] || item.defaultValue"></el-input></template>
201
+ <el-tree
202
+ :style="{maxHeight: '300px', overflow: 'auto'}"
203
+ :data="fieldStore"
204
+ :props="{
205
+ children: 'children',
206
+ label: 'text'
207
+ }"
208
+ >
209
+ <template v-slot="{node, data}"><span v-html="node.label" @click="selectField[item.key] = `#[${data.field}]`"></span></template>
210
+ </el-tree>
211
+ </el-popover>
212
+ </div>
213
+ </div>
214
+ <div v-else-if="item.type==='option-scope'" class="setting-field__item" :style="{display: 'inline-block'}">
215
+ <el-radio-group v-model="optionScopeType" @change="v=>(selectField[item.key] = null)">
216
+ <el-radio label="all" value="all">全部</el-radio>
217
+ <el-radio label="custom" value="custom">自定义</el-radio>
218
+ </el-radio-group>
219
+ <template v-if="optionScopeType==='custom'">
220
+ <epx-object v-if="getFieldByCode(selectField.attriName).dataType==='treeList' || getFieldByCode(selectField.attriName).optionType==='treeList'" :modelValue="selectField[item.key]" :fieldConfigs="{ attriLabel: '', codeKey: getFieldByCode(selectField.attriName).codeKey, state: 'EDIT', dataType: 'treeList',isMultiple: '1', onlySelectLeaf: false}" @update:modelValue="v=>(selectField[item.key] = v.map(item=>item.id))"></epx-object>
221
+ <epx-visual-config-list
222
+ v-else
223
+ :code="getFieldByCode(selectField.attriName).codeKey"
224
+ :multiple="true"
225
+ :value="selectField[item.key]"
226
+ :defaultValue="item.defaultValue"
227
+ @change-configs="v=>(selectField[item.key] = v)"
228
+ />
229
+ </template>
230
+ </div>
231
+ <div v-else-if="item.type==='value'" class="setting-field__item" :style="{display: 'inline-block'}">
232
+ <el-radio-group v-model="valueType" @change="selectField[item.key] = ''">
233
+ <el-radio label="string" value="string">固定值</el-radio>
234
+ <el-radio label="page" value="page">页面参数</el-radio>
235
+ <el-radio label="user" value="user">用户信息</el-radio>
236
+ <el-radio label="field" value="field">字段值</el-radio>
237
+ </el-radio-group>
238
+ <div>
239
+ <epx-table-form-item v-if="valueType==='string'" :key="fieldInfo.field" :model-value="selectField[item.key] || item.defaultValue" @update:model-value="v=>setDefaultValue(item.key, v)"
240
+ :fieldConfigs="{
241
+ attriName: fieldInfo.field,
242
+ attriLabel: fieldInfo.text,
243
+ dataType: fieldInfo.dataType,
244
+ optionType: fieldInfo.optionType==='multibox'? 'multiList': fieldInfo.optionType,
245
+ codeKey: fieldInfo.codeKey,
246
+ relatedEntity: fieldInfo.relatedEntity,
247
+ state: 'EDIT',
248
+ datePrecision: fieldInfo.datePrecision,
249
+ attribute: {
250
+ isTree: fieldInfo.isTree,
251
+ isMultiple: fieldInfo.isMultiple,
252
+ objectWay: fieldInfo.objectWay
253
+ }
254
+ }"
255
+ ></epx-table-form-item>
256
+ <!-- <el-input v-if="valueType==='string'" :model-value="selectField[item.key] || item.defaultValue" @update:model-value="v => changeParams(item.key, v)" :readonly="item.readonly" type="text" size="medium" /> -->
257
+ <!-- 页面参数 -->
258
+ <el-select v-else-if="valueType==='page'" v-model="selectField[item.key]" filterable allow-create default-first-option>
259
+ <el-option
260
+ v-for="item in pageParams"
261
+ :key="item.CODE"
262
+ :label="item.NAME"
263
+ :value="`$[${item.CODE}]`">
264
+ </el-option>
265
+ </el-select>
266
+ <!-- 字段值 -->
267
+ <el-popover
268
+ v-else-if="valueType==='field'"
269
+ width="200"
270
+ trigger="click"
271
+ >
272
+ <template v-slot:reference><el-input :model-value="selectField[item.key]"></el-input></template>
273
+ <el-tree
274
+ :style="{maxHeight: '300px', overflow: 'auto'}"
275
+ :data="fieldStore"
276
+ node-key="field"
277
+ :props="{
278
+ children: 'children',
279
+ label: 'text'
280
+ }"
281
+ @node-click="(data, node)=>(selectField[item.key] = `#[${data.field.replace(/\./g, '|')}]`)"
282
+ >
283
+ <template v-slot="{node}"><span v-html="node.label"></span></template>
284
+ </el-tree>
285
+ </el-popover>
286
+ <!-- 用户信息 -->
287
+ <el-select v-else v-model="selectField[item.key]" filterable allow-create default-first-option>
288
+ <el-option value="#{user.id}" label="用户ID"></el-option>
289
+ <el-option value="#{user.name}" label="用户名称"></el-option>
290
+ <el-option value="#{user.client}" label="用户所属客户"></el-option>
291
+ <el-option value="#{user.system}" label="用户所属系统"></el-option>
292
+ <el-option value="#{user.deptId}" label="用户所属单位"></el-option>
293
+ <el-option
294
+ v-for="item in pageParams"
295
+ :key="item.CODE"
296
+ :label="item.NAME"
297
+ :value="`$[${item.CODE}]`">
298
+ </el-option>
299
+ </el-select>
300
+
301
+ </div>
302
+ </div>
303
+ <div v-else-if="item.type==='events'">
304
+ <el-dropdown @command="createEvent">
305
+ <el-button size="default" type="primary">
306
+ 新建事件<i class="el-icon-arrow-down el-icon--right"></i>
307
+ </el-button>
308
+ <template v-slot:dropdown><el-dropdown-menu>
309
+ <el-dropdown-item v-for="(text , key) in eventList" :key="key" :command="key">{{key}} {{text}}</el-dropdown-item>
310
+ </el-dropdown-menu></template>
311
+ </el-dropdown>
312
+ <!-- 事件列表 -->
313
+ <ul class="event-list">
314
+ <li class="event-item" v-for="(item, key) in selectField.events" :key="key" >
315
+ <p class="event-title">{{`${key} ${eventList[key]}`}}</p>
316
+ <div class="event-type__list">
317
+ <div class="event" v-for="(event, index) in item" :key="index">
318
+ <p class="event-name">{{event}}</p>
319
+ <p class="event-operate">
320
+ <i class="el-icon-view" @click="showJsDrawer=true"></i>
321
+ <i class="el-icon-setting" @click="settingEvent(key, index)"></i>
322
+ <el-popconfirm
323
+ title="确认删除吗?"
324
+ @confirm="deleteEvent(key, index)"
325
+ >
326
+ <template v-slot:reference><i class="el-icon-delete" ></i></template>
327
+ </el-popconfirm>
328
+ </p>
329
+ </div>
330
+ </div>
331
+ </li>
332
+ </ul>
333
+ </div>
334
+ <!-- 参数 -->
335
+ <div v-else-if="item.type === 'params'">
336
+ <p v-for="(value, key) in selectField[item.key]" class="operate-params-item" :key="key">
337
+ {{key}} = {{value}}
338
+ <i class="el-icon-close" @click="deleteParams(item.key, key)"></i>
339
+ </p>
340
+ <el-button type="primary" link @click="fieldParamDialog = `${item.key}`">添加参数</el-button>
341
+ </div>
342
+ <div v-else-if="item.type==='scope' || item.type==='child-scope'">
343
+ <epx-visual-config-scope :scopeConfigs="scopeConfigs" :componentMetaId="getScopeMetaId(item)" :value="selectField[item.key]" @change-configs="v=> (selectField[item.key] = v)"></epx-visual-config-scope>
344
+ </div>
345
+ <div v-else-if="item.type==='object-scope'">
346
+ <epx-visual-config-scope :scopeConfigs="scopeConfigs" :componentMetaId="getFieldByCode(selectField.attriName).codeKey || componentMetaId" :value="selectField[item.key]" @change-configs="v=> (selectField[item.key] = v)"></epx-visual-config-scope>
347
+ </div>
348
+ <div v-else-if="item.type==='rule'">
349
+ <epx-rule v-model="selectField[item.key]" :metaId="getScopeMetaId(item)" :fieldConfigs="{state: 'EDIT'}"></epx-rule>
350
+ </div>
351
+ <div v-else-if="item.type==='field'">
352
+ <epx-visual-config-field :value="selectField[item.key]" :metaId="getFieldByCode(selectField.attriName).id || componentMetaId" @change-configs="v=> (selectField[item.key] = v)"></epx-visual-config-field>
353
+ </div>
354
+ <div v-else-if="item.type==='order-field'">
355
+ <epx-visual-config-order-field :value="selectField[item.key]" :metaId="getScopeMetaId(item)" @change-configs="v=> (selectField[item.key] = v)"></epx-visual-config-order-field>
356
+ </div>
357
+ <div class="date-range" v-else-if="item.type==='dateSelectRange'">
358
+ <el-select size="default" class="date-range__select" v-model="selectField.dateRangeMode">
359
+ <el-option label="早于" value="less"></el-option>
360
+ <el-option label="晚于" value="greater"></el-option>
361
+ </el-select>
362
+ <el-select size="default" class="date-range__select" v-model="selectField.dateRangeValue">
363
+ <el-option label="今天" value="$[today]"></el-option>
364
+ <el-option label="今天(含当日)" value="$[todayInclude]"></el-option>
365
+ </el-select>
366
+ <i class="date-range__delete el-icon-close" @click="selectField.dateRangeMode=null;selectField.dateRangeValue=null"></i>
367
+ </div>
368
+ <div v-else-if="item.type==='num'" class="setting-field__item">
369
+ <el-input-number :model-value="selectField[item.key] || item.defaultValue" @update:model-value="v => (selectField[item.key] = v)" :readonly="item.readonly" size="medium" />
370
+ <span class="setting-field__item--default">{{ selectField[item.key] && selectField[item.key] === item.defaultValue ? '(默认值)' : ''}}</span>
371
+ </div>
372
+ <div v-else-if="item.type==='readonly'" class="setting-field__item">
373
+ {{selectField[item.key] || item.defaultValue}}
374
+ </div>
375
+ <div v-else-if="item.type==='textarea'" class="setting-field__item">
376
+ <epx-visual-config-textarea
377
+ :label="item.label"
378
+ :value="selectField[item.key]"
379
+ :i18nValue="selectField[item.key + '.i18n']"
380
+ :defaultValue="item.defaultValue"
381
+ @change-configs="v => (selectField[item.key] = v)"
382
+ @change-language-config="v=> (selectField[item.key+ '.i18n'] = v)"
383
+ />
384
+ </div>
385
+ <div v-else-if="item.type==='select'" class="setting-field__item">
386
+ <epx-visual-config-select
387
+ :option-list="ruleList"
388
+ :label="item.label"
389
+ :value="selectField[item.key]"
390
+ :i18nValue="selectField[item.key + '.i18n']"
391
+ :defaultValue="item.defaultValue"
392
+ @change-configs="v => (selectField[item.key] = v)"
393
+ @change-language-config="v=> (selectField[item.key+ '.i18n'] = v)"
394
+ />
395
+ </div>
396
+ <div v-else class="setting-field__item">
397
+ <epx-visual-config-input
398
+ :label="item.label"
399
+ :value="selectField[item.key]"
400
+ :readonly="item.readonly"
401
+ :i18nValue="selectField[item.key + '.i18n']"
402
+ :defaultValue="item.defaultValue"
403
+ @change-configs="v => (selectField[item.key] = v)"
404
+ @change-language-config="v=> (selectField[item.key+ '.i18n'] = v)"
405
+ />
406
+ <!-- <el-input :model-value="selectField[item.key] || item.defaultValue" @update:model-value="" :readonly="item.readonly" type="text" size="default" /> -->
407
+ <span class="setting-field__item--default">{{ selectField[item.key] && selectField[item.key] === item.defaultValue ? '(默认值)' : ''}}</span>
408
+ </div>
409
+ </el-form-item>
410
+ </el-row>
411
+
412
+ <!-- <el-form-item :style="{ marginLeft: '140px' }">
413
+ <el-button type="primary" @click="saveFieldConfig">保存</el-button>
414
+ </el-form-item> -->
415
+ </el-form>
416
+ <div class="no-select-field" v-else>请选择字段进行配置</div>
417
+ </div>
418
+ </div>
419
+ </div>
420
+ <div class="field-setting__button">
421
+ <el-button size="default" @click="showFieldDialog=false">取消</el-button>
422
+ <el-button size="default" type="primary" @click="saveFieldList">保存</el-button>
423
+ </div>
424
+ <epx-visual-config-lazy-dialog
425
+ title="添加参数"
426
+ :model-value="!!fieldParamDialog"
427
+ width="400px"
428
+ :append-to-body="true"
429
+ @close="fieldParamDialog = false"
430
+ >
431
+ <div>
432
+ <div class="add-params-input">
433
+ <span>参数名:</span>
434
+ <el-input :model-value="fieldParams.customKey" @update:model-value="v => (fieldParams['customKey'] = v)"> </el-input>
435
+ </div>
436
+ <div class="add-params-input">
437
+ <span>参数类型:</span>
438
+ <el-radio-group v-model="paramType">
439
+ <el-radio label="str" value="str">固定值</el-radio>
440
+ <el-radio label="field" value="field">字段值 </el-radio>
441
+ <el-radio label="page" value="page">页面参数</el-radio>
442
+ </el-radio-group>
443
+ </div>
444
+ <div class="add-params-input" >
445
+ <span>参数值:</span>
446
+ <el-input v-if="paramType==='str'" :model-value="fieldParams.value" @update:model-value="v => (fieldParams['value'] = v)"></el-input>
447
+ <el-popover
448
+ v-else-if="paramType==='field'"
449
+ width="200"
450
+ trigger="click"
451
+ >
452
+ <template v-slot:reference><el-input :model-value="fieldParams.value"></el-input></template>
453
+ <el-tree
454
+ :style="{maxHeight: '300px', overflow: 'auto'}"
455
+ :data="treeFieldStore"
456
+ node-key="code"
457
+ :props="{
458
+ children: 'children',
459
+ label: 'text'
460
+ }"
461
+ @node-click="(data, node)=>(fieldParams['value'] = `#[${data.code.replace(/\./g, '|')}]`)"
462
+ >
463
+ <template v-slot="{node}"><span v-html="node.label"></span></template>
464
+ </el-tree>
465
+ </el-popover>
466
+ <el-select v-else-if="paramType==='page'" v-model="fieldParams.value">
467
+ <el-option
468
+ v-for="item in pageParams"
469
+ :key="item.CODE"
470
+ :label="item.NAME"
471
+ :value="`$[${item.CODE}]`">
472
+ </el-option>
473
+ </el-select>
474
+ </div>
475
+ <div class="add-params__footer">
476
+ <el-button type="primary" @click="addFieldParams">确定</el-button>
477
+ <el-button @click="fieldParamDialog = false">取消</el-button>
478
+ </div>
479
+ </div>
480
+ </epx-visual-config-lazy-dialog>
481
+ </epx-visual-config-lazy-dialog>
482
+ <epx-visual-config-lazy-dialog
483
+ title="添加事件"
484
+ v-model="eventDialog"
485
+ width="50%"
486
+ >
487
+ <div class="event-form__item">
488
+ <span>请选择事件:</span>
489
+ <el-select v-model="event.function">
490
+ <el-option value="new" label="添加新事件"></el-option>
491
+ <el-option v-for="item in functionList" :key="item" :value="item" :label="item"></el-option>
492
+ </el-select>
493
+ </div>
494
+ <div class="event-form__item" v-if="event.function==='new'">
495
+ <span>请输入事件名称:</span>
496
+ <el-input size="default" v-model="event.functionName" ></el-input>
497
+ </div>
498
+ <template v-slot:footer><span class="dialog-footer">
499
+ <el-button @click="eventDialog = false">取 消</el-button>
500
+ <el-button type="primary" @click="createFunction">确 定</el-button>
501
+ </span></template>
502
+ </epx-visual-config-lazy-dialog>
503
+ <el-drawer
504
+ size="50%"
505
+ v-model="showJsDrawer"
506
+ direction="rtl"
507
+ :withHeader="false"
508
+ >
509
+ <epx-js-panel :value="pageGlobalConfigs.JS" @change="v=>changeItemConfigs('page', { JS: v })"></epx-js-panel>
510
+ </el-drawer>
511
+ </div>
512
+ </template>
513
+
514
+ <script>
515
+ import draggable from '@epxing/core/src/components/draggable'
516
+ import { mapGetters } from 'vuex'
517
+ import { evalWith } from '@epxing/utils/src/eval-with'
518
+ export default {
519
+ name: 'epx-visual-config-list-field',
520
+ components: {
521
+ draggable
522
+ },
523
+ props: {
524
+ showFieldWay: {
525
+ type: Boolean,
526
+ default: true
527
+ },
528
+ showSubFlag: {
529
+ type: Boolean,
530
+ default: true
531
+ },
532
+ value: {
533
+ type: Array
534
+ },
535
+ defaultValue: {
536
+ type: Array,
537
+ default () {
538
+ return []
539
+ }
540
+ },
541
+ ruleList: {
542
+ type: Array,
543
+ default () {
544
+ return []
545
+ }
546
+ },
547
+ treeFieldStore: {
548
+ type: Array,
549
+ default () {
550
+ return []
551
+ }
552
+ },
553
+ functionOption: {
554
+ type: Array,
555
+ default () {
556
+ return []
557
+ }
558
+ },
559
+ fieldOptions: {
560
+ type: Array,
561
+ default () {
562
+ return []
563
+ }
564
+ },
565
+ pageParams: {
566
+ type: Array,
567
+ default () {
568
+ return []
569
+ }
570
+ },
571
+ pageGlobalConfigs: {
572
+ type: Object,
573
+ default () {
574
+ return {}
575
+ }
576
+ },
577
+ changeItemConfigs: {
578
+ type: Function,
579
+ default () {
580
+ return () => null
581
+ }
582
+ },
583
+ componentMetaId: String,
584
+ scopeConfigs: {
585
+ type: Object
586
+ }
587
+ },
588
+ data () {
589
+ return {
590
+ loadFieldFinish: true,
591
+ fieldList: [],
592
+ checkedFieldList: [],
593
+ settingFieldList: [],
594
+ selectFieldList: [],
595
+ selectFieldMulti: false,
596
+ checkedSelectFieldList: [],
597
+ selectFieldIndex: -1,
598
+ settingFieldWay: 'default',
599
+ showFieldDialog: false,
600
+ selectField: null,
601
+ showEditFieldDialog: false,
602
+ fieldInfo: {},
603
+ valueType: 'string',
604
+ scopeEntityType: 'string',
605
+ optionScopeType: 'all',
606
+ functionList: [],
607
+ eventDialog: false,
608
+ filterText: '',
609
+ event: {
610
+ function: 'new',
611
+ functionName: ''
612
+ },
613
+ showJsDrawer: false,
614
+ eventList: {
615
+ onChange: '值发生变化',
616
+ onFocus: '获取焦点',
617
+ onBlur: '失去焦点'
618
+ },
619
+ treeProps: {
620
+ children: 'children',
621
+ label: 'text'
622
+ },
623
+ fieldParamDialog: false,
624
+ fieldParams: {},
625
+ paramType: 'str',
626
+ showLogField: false,
627
+ showSubField: true
628
+ }
629
+ },
630
+ watch: {
631
+ defaultValue (v) {
632
+ if (!this.value) {
633
+ this.fieldList = [...this.defaultValue]
634
+ }
635
+ },
636
+ // Vue3 起浅层 watcher 不响应 push/splice,而删字段、保存字段详细配置走的正是 splice。
637
+ // 坏掉时用户感受最差:saveFieldConfig 第一行就弹「保存成功」,紧接着的 splice 却不回写配置。
638
+ fieldList: {
639
+ deep: 1,
640
+ handler (v) {
641
+ if (v === this.value) return
642
+ // 无自定义值且处于默认配置方式时,fieldList 只是默认值回显,不能写回配置
643
+ // (默认值是异步加载的,此时写回会把中间状态的默认字段快照固化进配置)
644
+ if (this.value == null && this.settingFieldWay !== 'custom') return
645
+ if (this.$_.isEqual(v, this.value)) return
646
+ this.$emit('change-configs', this.$_.cloneDeep(v))
647
+ this.$emit('input', this.$_.cloneDeep(v))
648
+ }
649
+ },
650
+ value (v) {
651
+ if (!this.$_.isEqual(v, this.fieldList)) {
652
+ // 拷贝而不是直接赋 prop 引用:同引用会让上面那句 `if (v === this.value) return` 永久短路
653
+ // ——就地 splice 会同时改到 value,两边永远相等 ⇒ **即使加了 deep 也一次都不 emit**。
654
+ // created 里本来就是 [...this.value],这里漏了,导致「有时能修好、有时修不好」的不确定态。
655
+ this.fieldList = [...v]
656
+ }
657
+ },
658
+ settingFieldWay (v) {
659
+ if (this._skipFieldWayChange) {
660
+ this._skipFieldWayChange = false
661
+ return
662
+ }
663
+ if (v === 'custom') {
664
+ if (!this.fieldList) {
665
+ this.fieldList = this.$_.cloneDeep(this.defaultValue)
666
+ } else {
667
+ if (this.fieldList !== this.value && !this.$_.isEqual(this.fieldList, this.value)) {
668
+ const fieldList = this.$_.cloneDeep(this.fieldList || this.defaultValue)
669
+ this.$emit('change-configs', fieldList)
670
+ this.$emit('input', fieldList)
671
+ }
672
+ }
673
+ } else if (this.value && this.value.length) {
674
+ // 已有自定义字段时切回默认需确认,防止误触清空配置
675
+ this.$confirm('切换为默认配置后,已配置的自定义字段将被清除,是否继续?', '提示', { type: 'warning' })
676
+ .then(() => {
677
+ this.$emit('change-configs', null)
678
+ this.$emit('input', null)
679
+ })
680
+ .catch(() => {
681
+ this._skipFieldWayChange = true
682
+ this.settingFieldWay = 'custom'
683
+ })
684
+ } else {
685
+ this.$emit('change-configs', null)
686
+ this.$emit('input', null)
687
+ }
688
+ },
689
+ selectField (v) {
690
+ // this.loadFieldFinish = false
691
+ // const fieldIndex = this.settingFieldList.findIndex(item => (item.attriName || item) === v.attriName)
692
+ this.settingFieldList.splice(this.selectFieldIndex, 1, v)
693
+ // this.$nextTick(() => {
694
+ // this.$refs.tree.setCurrentKey(v.attriName)
695
+ // })
696
+ },
697
+ // ⚠️ handler 于 2022-07-01 由 e685a40e42「列表字段配置-去除selectField监听」**刻意**整段
698
+ // 注释掉,不是漏删:本组件的 UI 已从扁平 el-checkbox-group 换成 el-tree,父子级联勾选由
699
+ // el-tree 原生处理,不再需要手工同步分组全选态(配套的 $refs.tree.setCheckedKeys 也一并
700
+ // 被注释)。同源的活实现仍在 MField.vue,那边 UI 是 checkbox-group,确实需要。
701
+ // ⇒ 既**别补 deep**(唤醒空 handler 纯成本),也**别恢复注释里的逻辑**(会与 el-tree 的
702
+ // 级联勾选打架,还会把分组 code 污染进 selectFieldList,让 unSelectFieldStore 跟着错)。
703
+ selectFieldList (fieldList) {
704
+ // this.fieldStore.forEach(item => {
705
+ // const isAllChecked = item.children.every(field => {
706
+ // return fieldList.find(fieldItem => fieldItem && (fieldItem.attriName || fieldItem) === field.code)
707
+ // })
708
+ // const isCheckIndex = fieldList.findIndex(field => item.code === field)
709
+ // if (isAllChecked) {
710
+ // if (isCheckIndex === -1) this.selectFieldList = [...fieldList, item.code]
711
+ // } else {
712
+ // if (isCheckIndex !== -1) this.selectFieldList.splice(isCheckIndex, 1)
713
+ // }
714
+ // })
715
+ },
716
+ pageGlobalConfigs: {
717
+ handler (v) {
718
+ this.getFunctionList()
719
+ },
720
+ immediate: true
721
+ },
722
+ filterText (val) {
723
+ this.$refs.tree.filter(val)
724
+ }
725
+ },
726
+ computed: {
727
+ ...mapGetters([
728
+ 'getMetaViewFields'
729
+ ]),
730
+ fieldStore () {
731
+ if (this.treeFieldStore && this.treeFieldStore.length > 0) {
732
+ return this.treeFieldStore
733
+ } else {
734
+ return this.getMetaViewFields(this.componentMetaId) || []
735
+ }
736
+ },
737
+ unSelectFieldStore () {
738
+ const selectFields = this.selectFieldList.map(item => item.attriName || item)
739
+ const formatField = (arr) => {
740
+ return arr.filter(item => {
741
+ if (!this.showLogField && ['ID', 'LOG_C_TIME', 'LOG_C_USER', 'LOG_U_TIME', 'LOG_U_USER'].includes(item.code)) {
742
+ return false
743
+ }
744
+ if (!this.showSubField && (item.relationType === '1' || item.isSub)) {
745
+ return false
746
+ }
747
+ if (item.relationType !== '1') {
748
+ const index = selectFields.findIndex(key => item.field === key)
749
+ if (index !== -1) {
750
+ item.disabled = true
751
+ selectFields.splice(index, 1)
752
+ }
753
+ }
754
+ if (item.children) {
755
+ item.children = formatField(item.children)
756
+ }
757
+ return true
758
+ })
759
+ }
760
+ const copyFieldStore = this.$_.cloneDeep(this.fieldStore)
761
+
762
+ return formatField(copyFieldStore)
763
+ },
764
+ fieldLabel () {
765
+ return field => {
766
+ if (!field) return null
767
+ let attriName = null
768
+ let attriLabel = null
769
+ if (typeof field === 'string') {
770
+ attriName = field
771
+ } else {
772
+ attriName = field.attriName
773
+ if (field.attriLabel) attriLabel = field.attriLabel
774
+ }
775
+ if (attriLabel) return attriLabel
776
+ const getLabel = (arr) => {
777
+ for (const item of arr) {
778
+ if (item.field === attriName) return item.text
779
+ if (item.children) {
780
+ const label = getLabel(item.children)
781
+ if (label) return label
782
+ }
783
+ }
784
+ }
785
+ return getLabel(this.fieldStore) || attriName
786
+ }
787
+ },
788
+ getFunctionOption () {
789
+ return (type) => {
790
+ let option = []
791
+ if (type === 'num') {
792
+ option = this.functionOption.filter(item => {
793
+ return item.value !== 'GROUP_CONCAT'
794
+ })
795
+ } else if (type === 'date' || type === 'time') {
796
+ option = this.functionOption.filter(item => {
797
+ return item.value === 'MIN' || item.value === 'MAX'
798
+ })
799
+ } else {
800
+ option = this.functionOption.filter(item => {
801
+ return item.value === 'GROUP_CONCAT' || item.value === 'COUNT'
802
+ })
803
+ }
804
+ return option
805
+ }
806
+ },
807
+ defaultExpandKeys () {
808
+ return this.fieldStore[0] ? [this.fieldStore[0].field] : []
809
+ },
810
+ showTreeFieldStore () {
811
+ const fieldStore = []
812
+ this.fieldStore.forEach((item, index) => {
813
+ const children = item.children.filter(fieldItem => !this.fieldList.find(field => (field.attriName || field) === fieldItem.code))
814
+ fieldStore.push({
815
+ ...item, children
816
+ })
817
+ })
818
+ return fieldStore
819
+ },
820
+ parentField () {
821
+ return field => {
822
+ const parent = this.getChildParent(this.fieldStore, field) || {}
823
+ return parent
824
+ }
825
+ },
826
+ getFieldPath () {
827
+ const { attriName } = this.selectField
828
+ const getPath = (arr, path) => {
829
+ for (const item of arr) {
830
+ if (item.field === attriName) {
831
+ return path ? path + '/' + item.text : item.text
832
+ } else if (item.children) {
833
+ const childPath = getPath(item.children, path ? path + '/' + item.text : item.text)
834
+ if (childPath) return childPath
835
+ }
836
+ }
837
+ }
838
+ return getPath(this.fieldStore)
839
+ },
840
+ showFieldOptions () {
841
+ const fieldOptions = []
842
+ const { attriName, link, linkType } = this.selectField
843
+ const field = this.getField(this.fieldStore, attriName) || {}
844
+ const { dataType, optionType, type, isSub, relationSort } = field
845
+ field.isMeta = field.type === 'meta'
846
+ const selectField = { ...this.selectField }
847
+ // showFlag 的 key 是这些名字之一(找不到就退回 selectField.key):显式传作用域,不能靠直接 eval 捕获(见 eval-with.js)
848
+ const scope = { attriName, link, linkType, dataType, optionType, type, isSub, relationSort, selectField, field }
849
+ this.fieldOptions.forEach(item => {
850
+ if (item.showFlag) {
851
+ for (const key in item.showFlag) {
852
+ try {
853
+ if (!evalWith(key, scope, this) || !item.showFlag[key].includes(evalWith(key, scope, this))) {
854
+ return
855
+ }
856
+ } catch (error) {
857
+ if (Array.isArray(item.showFlag[key])) {
858
+ if (!item.showFlag[key].includes(evalWith(`selectField.${key}`, scope, this))) {
859
+ return
860
+ }
861
+ } else {
862
+ if (item.showFlag[key] !== evalWith(`selectField.${key}`, scope, this)) {
863
+ return
864
+ }
865
+ }
866
+ }
867
+ }
868
+ }
869
+ if (item.showCondition) {
870
+ let flag = true
871
+ try {
872
+ const showCondition = typeof item.showCondition === 'string' ? JSON.parse(item.showCondition) : item.showCondition
873
+ const condition = showCondition.el
874
+ const el = condition.replace(/^#{(.*)}$/, '$1')
875
+ if (el) {
876
+ flag = evalWith(el, { config: this.allConfigs, selectField: this.selectField }, this)
877
+ }
878
+ } catch (error) {
879
+ flag = false
880
+ }
881
+ if (!flag) return
882
+ }
883
+ fieldOptions.push(item)
884
+ })
885
+ return fieldOptions
886
+ },
887
+ isSelectAllField: {
888
+ get () {
889
+ return this.checkedSelectFieldList.length === this.settingFieldList.length
890
+ },
891
+ set (v) {
892
+ if (v) {
893
+ this.checkedSelectFieldList = this.settingFieldList.map((item, index) => index)
894
+ } else {
895
+ this.checkedSelectFieldList = []
896
+ }
897
+ }
898
+ }
899
+ },
900
+ methods: {
901
+ getFieldStore () {
902
+ if (!this.componentMetaId) return
903
+ if (!(this.fieldStore && this.fieldStore.length > 0)) {
904
+ this.$store.dispatch({
905
+ type: 'ADD_META_VIEW_FIELDS',
906
+ metaId: this.componentMetaId
907
+ })
908
+ }
909
+ },
910
+ getField (arr, code) {
911
+ for (let i = 0; i < arr.length; i++) {
912
+ const field = arr[i]
913
+ if (field.field === code) {
914
+ return field
915
+ }
916
+ if (field.children) {
917
+ const findField = this.getField(field.children, code)
918
+ if (findField) return findField
919
+ }
920
+ }
921
+ },
922
+ formatScopeParams (scopeParams) {
923
+ if (!scopeParams) return []
924
+ const attribute = this.getField(this.fieldStore, this.selectField.attriName) || {}
925
+ const _scopeParams = this.$_.cloneDeep(scopeParams)
926
+ for (const scopeKey in _scopeParams) {
927
+ const scope = _scopeParams[scopeKey]
928
+ if (!scope) continue
929
+ let values = scope.values
930
+ if (/\$\[(.+)\]/.test(values)) {
931
+ values = values.replace(/\$\[(.+)\]/, (match, key) => {
932
+ try {
933
+ return evalWith(key, { attribute }, this) || evalWith(`this.${key}`, {}, this) || ''
934
+ } catch (error) {
935
+ return values
936
+ }
937
+ })
938
+ }
939
+ scope.values = values
940
+ }
941
+ return _scopeParams
942
+ },
943
+ getScopeMetaId (item) {
944
+ if (item.metaId) return item.metaId
945
+ const { attriName } = this.selectField
946
+ const field = this.getFieldByCode(attriName)
947
+ if (field.isMeta) {
948
+ return field.id
949
+ } else if (field.relationSort === '1') {
950
+ const parent = this.parentField(attriName)
951
+ return parent.id
952
+ } else if (field.dataType === 'object' || field.dataType === 'user' || field.dataType === 'dept') {
953
+ return field.relatedEntity
954
+ }
955
+ return this.componentMetaId
956
+ },
957
+ getFieldByCode (code) {
958
+ return this.getField(this.fieldStore, code)
959
+ },
960
+ deleteField (index) {
961
+ this.fieldList.splice(index, 1)
962
+ },
963
+ deleteSettingField (index) {
964
+ // const field = this.settingFieldList[index]
965
+ this.settingFieldList.splice(index, 1)
966
+ this.selectFieldList.splice(index, 1)
967
+ // this.$refs.tree.setChecked(field.attriName || field, false)
968
+ },
969
+ deleteSelectField () {
970
+ this.settingFieldList = this.settingFieldList.filter((item, index) => !this.checkedSelectFieldList.includes(index))
971
+ this.selectFieldList = [...this.settingFieldList]
972
+ this.selectFieldMulti = false
973
+ },
974
+ editField (field, index) {
975
+ this.selectFieldList = this.fieldList.map(item => (item.attriName || item).replace(/\./g, '|'))
976
+ this.settingFieldList = this.$_.cloneDeep(this.fieldList)
977
+ this.showFieldDialog = true
978
+ // this.$nextTick(() => {
979
+ // this.$refs.tree.setCheckedKeys(this.selectFieldList)
980
+ // })
981
+ this.selectSettingField(field, index)
982
+ },
983
+ getFunctionList () {
984
+ const { JS = '' } = this.pageGlobalConfigs
985
+ const result = JS.match(/export\sfunction\s(\w+)/g)
986
+ const functionList = []
987
+ if (!result) return
988
+ result.forEach(item => {
989
+ functionList.push(item.replace(/export\sfunction\s/, ''))
990
+ })
991
+ this.functionList = functionList
992
+ },
993
+ selectSettingField (field, index) {
994
+ this.selectFieldIndex = index
995
+ let fieldConfig = field
996
+ if (typeof field === 'string') {
997
+ fieldConfig = { attriName: field }
998
+ }
999
+ const { attriName, ...other } = fieldConfig
1000
+ if (!this.$_.isEmpty(other)) {
1001
+ fieldConfig.configWay = 'custom'
1002
+ } else {
1003
+ fieldConfig.configWay = 'default'
1004
+ }
1005
+ this.selectField = { ...fieldConfig }
1006
+ this.loadFieldFinish = false
1007
+ this.$nextTick(() => {
1008
+ this.loadFieldFinish = true
1009
+ })
1010
+ if (this.selectField.value) {
1011
+ if (this.selectField.value.match(/\$\[(.+)\]/)) {
1012
+ this.valueType = 'page'
1013
+ } else if (this.selectField.value.match(/#\{user(.+)\}/)) {
1014
+ this.valueType = 'user'
1015
+ } else if (this.selectField.value.match(/#\[(.+)\]/)) {
1016
+ this.valueType = 'field'
1017
+ }
1018
+ }
1019
+ if (this.selectField.scopeEntity) {
1020
+ if (this.selectField.scopeEntity.match(/#\[(.+)\]/)) {
1021
+ this.scopeEntityType = 'field'
1022
+ }
1023
+ }
1024
+ if (this.selectField.showOptionCodes) {
1025
+ this.optionScopeType = 'custom'
1026
+ }
1027
+ this.fieldInfo = this.getField(this.fieldStore, fieldConfig.attriName) || {}
1028
+ },
1029
+ filterNode (value, data) {
1030
+ if (!value) return true
1031
+ return data.text && data.text.indexOf(value) !== -1
1032
+ },
1033
+ changeParams (key, v) {
1034
+ const selectField = { ...this.selectField }
1035
+ selectField[key] = v
1036
+ this.selectField = selectField
1037
+ },
1038
+ saveFieldConfig () {
1039
+ this.$message.success('保存成功')
1040
+ const { configWay, attriName, ...otherConfigs } = this.selectField
1041
+ const index = this.fieldList.findIndex(item => (item.attriName || item) === this.selectField.attriName)
1042
+ if (configWay === 'custom') {
1043
+ if (index !== -1) {
1044
+ this.fieldList.splice(index, 1, { attriName, ...otherConfigs })
1045
+ }
1046
+ } else {
1047
+ this.fieldList.splice(index, 1, { attriName })
1048
+ }
1049
+ this.showEditFieldDialog = false
1050
+ },
1051
+ setDefaultValue (key, v) {
1052
+ let value = null
1053
+ if (Array.isArray(v)) {
1054
+ value = v.map(item => item.id || item).join(',')
1055
+ } else {
1056
+ value = v ? v.id || v : null
1057
+ }
1058
+ this.changeParams(key, value)
1059
+ },
1060
+ nodeClick (data, node) {
1061
+ const field = this.settingFieldList.find(item => data.field === (item.attriName || item))
1062
+ if (!field) return
1063
+ this.selectSettingField(field)
1064
+ // 滚动到对应位置
1065
+ const fieldElem = this.$refs['select_field_' + (field.attriName || field)]
1066
+ if (fieldElem && fieldElem[0]) {
1067
+ const scrollEl = this.$refs.selectFieldContainer
1068
+ if (fieldElem[0].offsetTop < scrollEl.scrollTop || fieldElem[0].offsetTop > (scrollEl.offsetHeight + scrollEl.scrollTop - 40)) {
1069
+ scrollEl.scrollTop = fieldElem[0].offsetTop - scrollEl.offsetHeight / 2
1070
+ }
1071
+ }
1072
+ },
1073
+ openAddFieldDialog (key) {
1074
+ this.selectFieldList = this.fieldList.map(item => (item.attriName || item).replace(/\./g, '|'))
1075
+ this.settingFieldList = this.$_.cloneDeep(this.fieldList)
1076
+ this.showFieldDialog = true
1077
+ this.$nextTick(() => {
1078
+ // this.$refs.tree.setCheckedKeys(this.selectFieldList)
1079
+ })
1080
+ },
1081
+ getChildParent (arr, field, parent) {
1082
+ for (const item of arr) {
1083
+ if (item.field === field) {
1084
+ return parent
1085
+ } else if (item.children) {
1086
+ const child = this.getChildParent(item.children, field, item)
1087
+ if (child) return child
1088
+ }
1089
+ }
1090
+ },
1091
+ checkChange (data, isCheck) {
1092
+ if (data.isMain || data.type === 'folder') {
1093
+ if (isCheck) {
1094
+ // 获取筛选后的
1095
+ const children = data.children.filter(item => !item.isSub)
1096
+ for (const child of children) {
1097
+ if ((!this.filterText || child.text.indexOf(this.filterText) !== -1) && !this.selectFieldList.includes(child.field)) {
1098
+ this.$nextTick(() => {
1099
+ this.$refs.tree.setChecked(child.field, true)
1100
+ })
1101
+ }
1102
+ }
1103
+ } else {
1104
+ const children = data.children.filter(item => !item.isSub && !item.disabled)
1105
+ const flag = children.every(child => this.checkedFieldList.find(checked => checked.field === child.field))
1106
+ if (flag) {
1107
+ children.forEach(item => {
1108
+ this.$refs.tree.setChecked(item.field, false)
1109
+ })
1110
+ }
1111
+ }
1112
+ } else {
1113
+ const parent = this.getChildParent(this.unSelectFieldStore, data.field)
1114
+ if (isCheck) {
1115
+ if (parent && (parent.isMain)) {
1116
+ const children = parent.children.filter(item => !item.isSub && !item.disabled)
1117
+ const checkedFieldList = this.$refs.tree.getCheckedNodes()
1118
+ const flag = children.every(child => checkedFieldList.find(checked => checked.field === child.field))
1119
+ if (flag) this.$refs.tree.setChecked(parent.field, true)
1120
+ }
1121
+ } else {
1122
+ if (parent && data.type !== 'meta' && (parent.isMain)) this.$refs.tree.setChecked(parent.field, false)
1123
+ }
1124
+ }
1125
+ this.checkedFieldList = this.$refs.tree.getCheckedNodes()
1126
+ },
1127
+ cancelChecked () {
1128
+ this.$refs.tree.setCheckedKeys([])
1129
+ },
1130
+ addCheckedField () {
1131
+ this.checkedFieldList.forEach(data => {
1132
+ if (data.type !== 'folder' && !data.isMain) {
1133
+ const parent = this.getChildParent(this.fieldStore, data.field)
1134
+ this.selectFieldList.push(data.field)
1135
+ if (data.type === 'meta') {
1136
+ this.settingFieldList.push({ attriName: data.field, type: 'meta' })
1137
+ } else {
1138
+ this.settingFieldList.push(data.field)
1139
+ }
1140
+ if (data.field.includes('|')) {
1141
+ const nodesMap = this.$refs.tree.store.nodesMap
1142
+ nodesMap[parent.field].expanded = true
1143
+ }
1144
+ }
1145
+ })
1146
+ this.$refs.tree.setCheckedKeys([])
1147
+ },
1148
+ checkFieldChange (data, isCheck) {
1149
+ if (data.isMain || data.type === 'folder') {
1150
+ if (isCheck) {
1151
+ const children = data.children.filter(item => !item.isSub)
1152
+ for (const child of children) {
1153
+ this.$nextTick(() => {
1154
+ this.$refs.tree.setChecked(child.field, true)
1155
+ })
1156
+ }
1157
+ } else {
1158
+ const children = data.children.filter(item => !item.isSub)
1159
+ const flag = children.every(child => this.selectFieldList.includes(child.field))
1160
+ if (flag) {
1161
+ children.forEach(item => {
1162
+ this.$refs.tree.setChecked(item.field, false)
1163
+ })
1164
+ }
1165
+ }
1166
+ } else {
1167
+ const parent = this.getChildParent(this.fieldStore, data.field)
1168
+ if (isCheck) {
1169
+ const field = this.settingFieldList.find(item => (item.attriName || item) === data.field)
1170
+ if (!field) {
1171
+ this.selectFieldList.push(data.field)
1172
+ if (data.type === 'meta') {
1173
+ this.settingFieldList.push({ attriName: data.field, type: 'meta' })
1174
+ } else {
1175
+ this.settingFieldList.push(data.field)
1176
+ }
1177
+ }
1178
+ if (data.field.includes('|')) {
1179
+ const nodesMap = this.$refs.tree.store.nodesMap
1180
+ nodesMap[parent.field].expanded = true
1181
+ }
1182
+ if (parent && (parent.isMain)) {
1183
+ const children = parent.children.filter(item => !item.isSub)
1184
+ const flag = children.every(child => this.selectFieldList.includes(child.field))
1185
+ if (flag) this.$refs.tree.setChecked(parent.field, true)
1186
+ }
1187
+ } else {
1188
+ const index = this.selectFieldList.findIndex(item => item === data.field)
1189
+ const fieldIndex = this.settingFieldList.findIndex(item => (item.attriName || item) === data.field)
1190
+ if (index !== -1) {
1191
+ this.selectFieldList.splice(index, 1)
1192
+ }
1193
+ if (fieldIndex !== -1) {
1194
+ this.settingFieldList.splice(fieldIndex, 1)
1195
+ }
1196
+ if (parent && data.type !== 'meta' && (parent.isMain)) this.$refs.tree.setChecked(parent.field, false)
1197
+ }
1198
+ }
1199
+ },
1200
+ selectAllField (value, index) {
1201
+ const fieldList = this.fieldStore[index].children || []
1202
+ if (value) {
1203
+ // 添加字段
1204
+ const fieldCodeList = fieldList.map(item => item.code)
1205
+ this.selectFieldList = [...new Set([...this.selectFieldList, ...fieldCodeList])]
1206
+ } else {
1207
+ // 删除当前列所有字段
1208
+ fieldList.forEach(item => {
1209
+ const selectIndex = this.selectFieldList.findIndex(selectItem => selectItem === item.code)
1210
+ if (selectIndex !== -1) {
1211
+ delete this.selectFieldList[selectIndex]
1212
+ }
1213
+ })
1214
+ }
1215
+ },
1216
+ saveSelectField () {
1217
+ // 将已选择的字段修改到configs
1218
+ // 对比fieldList
1219
+ const fieldList = []
1220
+ const allCheckCodes = this.fieldStore.map(item => item.code)
1221
+ this.selectFieldList.forEach(item => {
1222
+ if (allCheckCodes.includes(item)) return
1223
+ const field = item.replace('.', '|')
1224
+ const existField = this.fieldList.find(fieldItem => field === (fieldItem.attriName || fieldItem))
1225
+ if (existField) {
1226
+ fieldList.push(existField)
1227
+ } else {
1228
+ fieldList.push(field)
1229
+ }
1230
+ })
1231
+ this.fieldList = fieldList
1232
+ // ⚠️ 原文是 `this.$refs.tree` 换行接 `.this.showFieldDialog = false`——`this.$refs.tree.this`
1233
+ // 是 undefined,给它赋值直接抛 TypeError,方法中途炸掉、「选择字段」弹窗点确定后关不掉。
1234
+ // 看形态像是格式化/合并把中间半句吃了(同文件里 $refs.tree 的收尾惯用法是 setCheckedKeys([])),
1235
+ // 但 git 里查不到引入点、原意不可考,所以只恢复能确定的「关闭弹窗」,不臆测被吃掉的那半句。
1236
+ this.showFieldDialog = false
1237
+ },
1238
+ addFieldParams () {
1239
+ const field = this.selectField
1240
+ const { [this.fieldParamDialog]: params = {} } = field
1241
+ let key = this.fieldParams.key
1242
+ if (!key || key === 'custom') {
1243
+ key = this.fieldParams.customKey
1244
+ }
1245
+ if (!key) {
1246
+ this.$message.error('请输入参数名')
1247
+ return
1248
+ }
1249
+ if (!this.fieldParams.value) {
1250
+ this.$message.error('请输入参数值')
1251
+ return
1252
+ }
1253
+ params[key] = this.fieldParams.value
1254
+ this.selectField[this.fieldParamDialog] = params
1255
+ this.fieldParams = {
1256
+ key: '',
1257
+ customKey: '',
1258
+ value: ''
1259
+ }
1260
+ this.fieldParamDialog = false
1261
+ },
1262
+ deleteParams (itemKey, key) {
1263
+ const selectField = { ...this.selectField }
1264
+ const { [itemKey]: params = {} } = selectField
1265
+ delete params[key]
1266
+ this.selectField = selectField
1267
+ },
1268
+ swicthFieldStoreFold (index) {
1269
+ const item = this.fieldStore[index]
1270
+ this.fieldStore[index] = { ...item, isUnFold: !item.isUnFold }
1271
+ },
1272
+ saveFieldList () {
1273
+ this.fieldList = this.settingFieldList.map(item => {
1274
+ if (typeof item === 'string') return item
1275
+ const { configWay, attriName, ...otherConfigs } = item
1276
+ if (configWay !== 'default' && configWay !== null) {
1277
+ return { attriName, ...otherConfigs }
1278
+ } else {
1279
+ return attriName
1280
+ }
1281
+ })
1282
+ this.showFieldDialog = false
1283
+ },
1284
+ createEvent (command) {
1285
+ this.eventDialog = command
1286
+ let name = command
1287
+ let index = 1
1288
+ while (this.functionList.includes(name)) {
1289
+ name = command + index++
1290
+ }
1291
+ this.event = {
1292
+ function: 'new',
1293
+ functionName: name
1294
+ }
1295
+ },
1296
+ settingEvent (key, index) {
1297
+ this.eventDialog = key
1298
+ const { events = {} } = this.selectField
1299
+ const eventName = events[key][index]
1300
+ this.event = {
1301
+ function: eventName,
1302
+ index: index
1303
+ }
1304
+ },
1305
+ deleteEvent (key, index) {
1306
+ const { events = {} } = this.selectField
1307
+ events[key].splice(index, 1)
1308
+ this.selectField.events = events
1309
+ },
1310
+ createFunction () {
1311
+ const event = { ...this.event }
1312
+ const { JS = '' } = this.pageGlobalConfigs
1313
+ const { events = {} } = this.selectField
1314
+ const typeEvents = events[this.eventDialog] || []
1315
+
1316
+ if (!event.function || event.function === 'new') {
1317
+ if (!event.functionName) {
1318
+ this.$message.error('请输入事件名')
1319
+ return
1320
+ }
1321
+ if (this.functionList.includes(event.functionName)) {
1322
+ this.$message.error('该事件名称已存在')
1323
+ return
1324
+ }
1325
+ const js = JS + `
1326
+ /**
1327
+ * Field ${event.functionName}
1328
+ */
1329
+ export function ${event.functionName} () {
1330
+
1331
+ }
1332
+ `
1333
+ this.changeItemConfigs('page', { JS: js })
1334
+ }
1335
+ const eventName = (!event.function || event.function === 'new') ? event.functionName : event.function
1336
+ if (event.index !== undefined) {
1337
+ typeEvents[event.index] = eventName
1338
+ } else {
1339
+ typeEvents.push(eventName)
1340
+ }
1341
+ events[this.eventDialog] = typeEvents
1342
+ this.selectField.events = events
1343
+ this.eventDialog = false
1344
+ this.showJsDrawer = true
1345
+ }
1346
+ },
1347
+ created () {
1348
+ this.getFieldStore()
1349
+ if (this.value) {
1350
+ this.fieldList = [...this.value]
1351
+ this.settingFieldWay = 'custom'
1352
+ } else {
1353
+ if (this.defaultValue) this.fieldList = [...this.defaultValue]
1354
+ }
1355
+ if (!this.showSubFlag) {
1356
+ this.showSubField = false
1357
+ }
1358
+ // this.fieldList.forEach(item=> {})
1359
+ }
1360
+ }
1361
+ </script>
1362
+
1363
+ <style scoped lang="scss">
1364
+ .field {
1365
+
1366
+ :deep(.el-dialog__body) {
1367
+ padding: 0;
1368
+ }
1369
+
1370
+ }
1371
+ .list-group {
1372
+ display: inline-block;
1373
+ }
1374
+ .select-field-list {
1375
+ display: flex;
1376
+ flex-wrap: wrap;
1377
+ flex-shrink: 1;
1378
+ }
1379
+ .select-field-item {
1380
+ margin: 4px;
1381
+ padding: 8px 12px;
1382
+ line-height: 1.1;
1383
+ @include bg_color_primary(.1);
1384
+ @include border_primary(1px,null,dashed);
1385
+ color: #333;
1386
+ cursor: move;
1387
+ user-select: none;
1388
+ position: relative;
1389
+ &:hover {
1390
+ .select-field-item__mask {
1391
+ display: flex;
1392
+ }
1393
+ }
1394
+ }
1395
+ .select-field-item__mask{
1396
+ display: none;
1397
+ position: absolute;
1398
+ top: 0;
1399
+ left: 0;
1400
+ width: 100%;
1401
+ height: 100%;
1402
+ transition: all .5s;
1403
+ background: rgba(0,0,0, .6);
1404
+ justify-content: center;
1405
+ align-items: center;
1406
+ color: #fff;
1407
+ i {
1408
+ font-size: var(--epx-font-size-l);
1409
+ margin: 0 8px;
1410
+ cursor: pointer;
1411
+ }
1412
+ }
1413
+ .setting-fields-container {
1414
+ display: flex;
1415
+ height: 400px;
1416
+ }
1417
+ .setting-fields__select {
1418
+ flex: 1;
1419
+ width: 100%;
1420
+ height: 100%;
1421
+ box-sizing: border-box;
1422
+ overflow: auto;
1423
+ position: relative;
1424
+ font-size: var(--epx-font-size-base);
1425
+ .list-group {
1426
+ width: 100%;
1427
+ }
1428
+ }
1429
+ .setting-field__row {
1430
+ margin-bottom: 10px;
1431
+
1432
+ :deep(>.el-form-item) {
1433
+ vertical-align: auto;
1434
+ width: 100%;
1435
+ display: flex;
1436
+ .el-form-item__content {
1437
+ flex: 1;
1438
+ }
1439
+ .el-form-item__label {
1440
+ line-height: 40px;
1441
+ }
1442
+ }
1443
+
1444
+ }
1445
+ .setting-field__form-label {
1446
+ position: relative;
1447
+ >i {
1448
+ cursor: pointer;
1449
+ position: absolute;
1450
+ top: 3px;
1451
+ right: -18px;
1452
+ }
1453
+ }
1454
+ .setting-fields__select--item {
1455
+ line-height: 18px;
1456
+ width: 100%;
1457
+ padding: 8px 24px;
1458
+ box-sizing: border-box;
1459
+ cursor: pointer;
1460
+ i {
1461
+ line-height: 1;
1462
+ font-size: 18px;
1463
+ }
1464
+ .el-icon-document {
1465
+ @include font-color-primary();
1466
+ margin-right: 8px;
1467
+ }
1468
+ .el-icon-delete {
1469
+ display: none;
1470
+ color: red;
1471
+ }
1472
+ &:hover, &.active {
1473
+ .el-icon-delete {
1474
+ display: inline;
1475
+ }
1476
+ @include font-color-primary();
1477
+ @include bg-color-primary(.2)
1478
+ }
1479
+ }
1480
+ .setting-fields__select--add {
1481
+ margin-left: 24px;
1482
+ }
1483
+ .setting-field__config {
1484
+ flex: 1;
1485
+ padding: 16px;
1486
+ overflow: auto;
1487
+ }
1488
+ .setting-field__item {
1489
+ display: flex;
1490
+
1491
+ :deep(.el-color-picker__trigger) {
1492
+ width: 120px;
1493
+ }
1494
+ :deep(.el-input) {
1495
+ width: 200px;
1496
+ }
1497
+ :deep(.el-input-number .el-input) {
1498
+ width: auto
1499
+ }
1500
+
1501
+ }
1502
+ .setting-field__item--default {
1503
+ white-space: nowrap;
1504
+ }
1505
+ .tree-field-checkbox-group {
1506
+ font-size: var(--epx-font-size-base);
1507
+ padding: 20px;
1508
+ }
1509
+ .tree-field-header{
1510
+ @inlcude font_color_primary;
1511
+ // margin-bottom:25px;
1512
+ }
1513
+ .tree-field-title{
1514
+ font-size:14px;
1515
+ i {
1516
+ margin-right: 4px;
1517
+ }
1518
+ }
1519
+ .tree-field-checkbox{
1520
+ display:flex;
1521
+ flex-wrap:wrap;
1522
+ margin:12px 0;
1523
+ margin-left:40px;
1524
+ color:#666;
1525
+ cursor: pointer;
1526
+ line-height: 24px;
1527
+ }
1528
+ .tree-field-checkbox .active {
1529
+ @include font_color_primary;
1530
+ }
1531
+ .event-form__item {
1532
+ width: 220px;
1533
+ margin: 10px 30px;
1534
+ }
1535
+ .event-title {
1536
+ width: 100%;
1537
+ background: rgb(248, 248, 248);
1538
+ padding: 6px 10px;
1539
+ margin: 6px 0;
1540
+ line-height: 1;
1541
+ color: #666
1542
+ }
1543
+ .event {
1544
+ display: flex;
1545
+ align-items: center;
1546
+ justify-content: space-between;
1547
+ color: #666;
1548
+ margin: 0 12px;
1549
+ padding: 6px 12px;
1550
+ line-height: 1;
1551
+ cursor: pointer;
1552
+ &:hover {
1553
+ background: rgb(248, 248, 248);
1554
+ }
1555
+ i {
1556
+ margin: 0 3px;
1557
+ font-size: var(--epx-font-size-l);
1558
+ &:hover {
1559
+ color: #333
1560
+ }
1561
+ }
1562
+ }
1563
+
1564
+ // 字段设置
1565
+ .field-setting {
1566
+ display: flex;
1567
+ width: 100%;
1568
+ // 原来靠 .show-field-dialog :deep(.el-dialog){height:80%} 逐层撑下来;Element Plus 里 class 直接落在
1569
+ // .el-dialog 自身、后代选择器匹配不到,整条链塌成 auto、弹窗随内容长到几千像素。改为按视口直接定高:
1570
+ // 80vh 减去 el-dialog 内边距 / 标题 / body 内边距 / 底部按钮共 145px
1571
+ height: calc(80vh - 145px);
1572
+ box-sizing: border-box;
1573
+ padding: 20px 10px 0;
1574
+ }
1575
+ .field-setting-item {
1576
+ width: 360px;
1577
+ display: flex;
1578
+ flex-direction: column;
1579
+ margin: 0 10px;
1580
+ border: 1px solid #e3e3e3;
1581
+ position: relative;
1582
+ &:last-child {
1583
+ width: 400px
1584
+ }
1585
+ }
1586
+
1587
+ .field-setting__header {
1588
+ padding: 12px 20px;
1589
+ line-height: 1;
1590
+ border-bottom: 1px solid #e3e3e3;
1591
+ span {
1592
+ position: relative;
1593
+ font-size: var(--epx-font-size-l);
1594
+ padding-left: 8px;
1595
+ font-weight: 600;
1596
+ color: #333;
1597
+ &::before {
1598
+ content: '';
1599
+ display: block;
1600
+ position: absolute;
1601
+ top: 3px;
1602
+ width: 4px;
1603
+ height: 16px;
1604
+ @include bg_color_primary;
1605
+ border-radius: var(--epx-radius-s);
1606
+ }
1607
+ }
1608
+ }
1609
+ .field-setting__filter {
1610
+ margin: 10px 20px;
1611
+ width: calc(100% - 40px);
1612
+ }
1613
+ .field-setting__content {
1614
+ flex:1;
1615
+ width: 100%;
1616
+ overflow: auto;
1617
+ display: flex;
1618
+ flex-direction: column;
1619
+ }
1620
+
1621
+ .field-tree {
1622
+ flex: 1;
1623
+ overflow: auto;
1624
+
1625
+ :deep(.el-tree-node__content) {
1626
+ height: 48px;
1627
+ }
1628
+
1629
+ }
1630
+ .set-show-field {
1631
+ padding: 8px 12px;
1632
+ border-top: 1px solid #e3e3e3;
1633
+ }
1634
+ .field-setting-button__group {
1635
+ // height: 56px;
1636
+ }
1637
+ .field-setting-button__group_inner {
1638
+ border-top: 1px solid #e3e3e3;
1639
+ width: 100%;
1640
+ padding: 10px;
1641
+ box-sizing: border-box;
1642
+ text-align: center;
1643
+ background:#fff;
1644
+ z-index: 101;
1645
+ }
1646
+ .field-setting__button {
1647
+ overflow: hidden;
1648
+ padding: 10px 20px;
1649
+ text-align: right;
1650
+ }
1651
+ .no-select-field {
1652
+ text-align: center;
1653
+ color: #999;
1654
+ margin-top: 50%
1655
+ }
1656
+ .show-field-dialog {
1657
+
1658
+ :deep(.el-dialog) {
1659
+ height: 80%;
1660
+ }
1661
+ :deep(.el-dialog__body) {
1662
+ height: calc(100% - 70px);
1663
+ }
1664
+
1665
+ }
1666
+ .operate-params-item {
1667
+ cursor: pointer;
1668
+ i {
1669
+ display: none;
1670
+ margin-left: 8px;
1671
+ color: #F56C6C;
1672
+ font-size: var(--epx-font-size-l);
1673
+ }
1674
+ &:hover {
1675
+ i {
1676
+ display: inline;
1677
+
1678
+ }
1679
+ }
1680
+ }
1681
+ .add-params-input {
1682
+ display: flex;
1683
+ align-items: center;
1684
+ margin-bottom: 16px;
1685
+ padding: 0 10px;
1686
+ >span {
1687
+ white-space: nowrap;
1688
+ }
1689
+
1690
+ :deep(.el-input) {
1691
+ width: 240px;
1692
+ }
1693
+
1694
+ }
1695
+ .add-params__footer {
1696
+ text-align: center;
1697
+ }
1698
+ .date-range__select {
1699
+ width: 100px;
1700
+ margin-right: 8px;
1701
+ }
1702
+ .date-range__delete {
1703
+ color: #F56C6C;
1704
+ font-size: var(--epx-font-size-l);
1705
+ cursor: pointer;
1706
+ }
1707
+ </style>
1708
+ <style >
1709
+ .visual-config-field-popover {
1710
+ max-height: 300px;
1711
+ overflow: auto;
1712
+ }
1713
+
1714
+ </style>