vue2-client 1.15.4 → 1.15.6

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 (469) hide show
  1. package/.cursorrules +19 -19
  2. package/.env.apply +19 -0
  3. package/.env.gaslink +19 -19
  4. package/.env.his +19 -19
  5. package/.env.liuli +19 -19
  6. package/.env.scada +19 -19
  7. package/.eslintrc.js +90 -90
  8. package/CHANGELOG.md +824 -824
  9. package/Components.md +60 -60
  10. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +45 -46
  11. package/docs/LowCode/lowcode.md +155 -155
  12. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  13. package/docs/index.md +30 -30
  14. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +2 -4
  15. package/index.js +31 -31
  16. package/jest-transform-stub.js +8 -8
  17. package/jest.setup.js +7 -7
  18. package/jsconfig.json +19 -19
  19. package/package.json +2 -1
  20. package/public/his/editor/editor.html +51 -51
  21. package/public/his/editor/mock/bind_data.html +779 -779
  22. package/public/his/editor/mock/data_table.html +40 -40
  23. package/public/his/editor/mock/sign.html +75 -75
  24. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  25. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  26. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  27. package/public/his/editor/vender/date97/calendar.js +4 -4
  28. package/public/his/editor/vender/date97/lang/en.js +13 -13
  29. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  30. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  31. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  32. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  33. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  34. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  35. package/public/his/editor/vender/diff.js +1627 -1627
  36. package/public/his/editor/vender/editor.js +1 -1
  37. package/public/his/editor/vender/fabric.js +31187 -31187
  38. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  39. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  40. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  41. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  42. package/public/his/editor/vender/mui/mui.min.css +4 -4
  43. package/public/his/editor/vender/mui/mui.min.js +5 -5
  44. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  45. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  46. package/public/his/editor/vender/qrcode.js +7 -7
  47. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  48. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  49. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  50. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  51. package/public/his/editor/vender/validator.js +5094 -5094
  52. package/public/his/editor/vender/weui/weui.css +5659 -5659
  53. package/public/his/editor/vender/weui/weui.min.css +4 -4
  54. package/public/his/editor/vender/weui/weui.min.js +11 -11
  55. package/public/index.html +27 -27
  56. package/src/ReportView.js +19 -19
  57. package/src/assets/img/querySlotDemo.svg +15 -15
  58. package/src/assets/svg/badtwo.svg +1 -1
  59. package/src/assets/svg/goodtwo.svg +1 -1
  60. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  61. package/src/base-client/components/AI/demo.vue +31 -31
  62. package/src/base-client/components/common/AMisRender/index.js +3 -3
  63. package/src/base-client/components/common/AMisRender/index.vue +263 -263
  64. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  65. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  66. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  67. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  68. package/src/base-client/components/common/CitySelect/index.js +3 -3
  69. package/src/base-client/components/common/CitySelect/index.md +109 -109
  70. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  71. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  72. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  73. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  74. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  75. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  76. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  77. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  78. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  79. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  80. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  81. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  82. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  83. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  84. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  85. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  86. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  87. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  88. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  89. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  90. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  91. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  92. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  93. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  94. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  95. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  96. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  97. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  98. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  99. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  100. package/src/base-client/components/common/Recording/index.js +3 -3
  101. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  102. package/src/base-client/components/common/Tree/index.js +2 -2
  103. package/src/base-client/components/common/Upload/index.js +3 -3
  104. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  105. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +13 -0
  106. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  107. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  108. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  109. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  110. package/src/base-client/components/common/XAddReport/index.js +3 -3
  111. package/src/base-client/components/common/XAddReport/index.md +56 -56
  112. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  113. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  114. package/src/base-client/components/common/XButtons/XButtons.vue +71 -71
  115. package/src/base-client/components/common/XButtons/index.js +3 -3
  116. package/src/base-client/components/common/XButtons/index.md +61 -61
  117. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  118. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  119. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  120. package/src/base-client/components/common/XDataCard/index.js +3 -3
  121. package/src/base-client/components/common/XDataCard/index.md +1 -1
  122. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  123. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  124. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  125. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  126. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  127. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  128. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  129. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  130. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  131. package/src/base-client/components/common/XForm/index.md +178 -178
  132. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  133. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  134. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  135. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  136. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  137. package/src/base-client/components/common/XFormTable/XFormTable.vue +12 -0
  138. package/src/base-client/components/common/XFormTable/index.md +92 -92
  139. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +167 -167
  140. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  141. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  142. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  143. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  144. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  145. package/src/base-client/components/common/XPrint/PrintBill.vue +302 -302
  146. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  147. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  148. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  149. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  150. package/src/base-client/components/common/XPrint/index.vue +97 -97
  151. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  152. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  153. package/src/base-client/components/common/XReport/index.js +3 -3
  154. package/src/base-client/components/common/XReport/print.js +186 -186
  155. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  156. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  157. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  158. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  159. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  160. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  161. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  162. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  163. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  164. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  165. package/src/base-client/components/common/XStepView/index.js +3 -3
  166. package/src/base-client/components/common/XStepView/index.md +31 -31
  167. package/src/base-client/components/common/XTab/XTab.vue +2 -1
  168. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  169. package/src/base-client/components/common/XTab/index.js +3 -3
  170. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  171. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  172. package/src/base-client/components/common/XTable/index.md +255 -255
  173. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  174. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  175. package/src/base-client/components/common/XTree/index.js +3 -3
  176. package/src/base-client/components/common/XTree/index.md +36 -36
  177. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  178. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  179. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  180. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  181. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  182. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  183. package/src/base-client/components/his/XTreeRows/TreeNode.vue +100 -100
  184. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +197 -197
  185. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  186. package/src/base-client/components/index.js +51 -51
  187. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  188. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  189. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  190. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  191. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  192. package/src/base-client/plugins/Config.js +19 -19
  193. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  194. package/src/base-client/plugins/Recording.js +258 -258
  195. package/src/base-client/plugins/index.js +23 -23
  196. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  197. package/src/components/Charts/Bar.vue +62 -62
  198. package/src/components/Charts/ChartCard.vue +134 -134
  199. package/src/components/Charts/Liquid.vue +67 -67
  200. package/src/components/Charts/MiniArea.vue +39 -39
  201. package/src/components/Charts/MiniBar.vue +39 -39
  202. package/src/components/Charts/MiniProgress.vue +75 -75
  203. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  204. package/src/components/Charts/Radar.vue +68 -68
  205. package/src/components/Charts/RankList.vue +77 -77
  206. package/src/components/Charts/TagCloud.vue +113 -113
  207. package/src/components/Charts/TransferBar.vue +64 -64
  208. package/src/components/Charts/Trend.vue +82 -82
  209. package/src/components/Charts/chart.less +12 -12
  210. package/src/components/Charts/smooth.area.less +13 -13
  211. package/src/components/CodeMirror/inedx.vue +118 -118
  212. package/src/components/CodeMirror/setting.js +40 -40
  213. package/src/components/HeightScanner/index.vue +571 -571
  214. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  215. package/src/components/NumberInfo/index.js +3 -3
  216. package/src/components/NumberInfo/index.less +54 -54
  217. package/src/components/NumberInfo/index.md +43 -43
  218. package/src/components/card/ChartCard.vue +79 -79
  219. package/src/components/chart/Bar.vue +60 -60
  220. package/src/components/chart/MiniArea.vue +67 -67
  221. package/src/components/chart/MiniBar.vue +59 -59
  222. package/src/components/chart/MiniProgress.vue +57 -57
  223. package/src/components/chart/Radar.vue +80 -80
  224. package/src/components/chart/RankingList.vue +60 -60
  225. package/src/components/chart/Trend.vue +79 -79
  226. package/src/components/chart/index.less +9 -9
  227. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  228. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  229. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  230. package/src/components/checkbox/index.js +9 -9
  231. package/src/components/exception/ExceptionPage.vue +70 -70
  232. package/src/components/g2Charts/constants.js +202 -202
  233. package/src/components/g2Charts/demo.vue +808 -808
  234. package/src/components/g2Charts/designer.vue +228 -228
  235. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  236. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  237. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  238. package/src/components/g2Charts/index.vue +397 -397
  239. package/src/components/index.js +36 -36
  240. package/src/components/input/IInput.vue +66 -66
  241. package/src/components/menu/SideMenu.vue +75 -75
  242. package/src/components/menu/menu.js +273 -273
  243. package/src/components/setting/Setting.vue +234 -234
  244. package/src/components/tool/AStepItem.vue +60 -60
  245. package/src/config/CreateQueryConfig.js +325 -325
  246. package/src/config/default/antd.config.js +89 -89
  247. package/src/config/default/setting.config.js +55 -55
  248. package/src/font-style/font.css +4 -4
  249. package/src/layouts/CommonLayout.vue +56 -56
  250. package/src/layouts/PageLayout.vue +151 -151
  251. package/src/layouts/SinglePageView.vue +136 -136
  252. package/src/layouts/header/AdminHeader.vue +132 -132
  253. package/src/layouts/header/HeaderNotice.vue +177 -177
  254. package/src/layouts/header/InstitutionDetail.vue +181 -181
  255. package/src/layouts/tabs/TabsHead.vue +189 -189
  256. package/src/layouts/tabs/TabsView.vue +389 -389
  257. package/src/lib.js +1 -1
  258. package/src/mock/extend/index.js +84 -84
  259. package/src/mock/goods/index.js +108 -108
  260. package/src/pages/AMisDemo/AMisDemo.vue +325 -325
  261. package/src/pages/AMisDemo/AMisDemo2.vue +74 -74
  262. package/src/pages/DefaultExample/index.vue +77 -77
  263. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  264. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  265. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  266. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  267. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  268. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  269. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  270. package/src/pages/DynamicStatistics/index.vue +282 -282
  271. package/src/pages/Example/childIndex.vue +15 -15
  272. package/src/pages/Example/index.vue +30 -30
  273. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  274. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  275. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  276. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  277. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  278. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  279. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  280. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  281. package/src/pages/Recording/index.vue +77 -77
  282. package/src/pages/ServiceReview/index.vue +284 -284
  283. package/src/pages/SubExample/index.vue +26 -26
  284. package/src/pages/WorkflowDetail/WorkFlowDemo2.vue +1 -1
  285. package/src/pages/WorkflowDetail/WorkflowDetail.vue +41 -36
  286. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  287. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformationDetails.vue +276 -276
  288. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +641 -386
  289. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +6 -6
  290. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowPreview.vue +2 -3
  291. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +240 -8
  292. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +1 -12
  293. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +1 -19
  294. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowListResolution.vue +248 -248
  295. package/src/pages/WorkflowDetail/WorkflowPageDetail/components/WorkflowPersonSelector.vue +69 -0
  296. package/src/pages/XReportView/index.vue +64 -64
  297. package/src/pages/XTreeOneProExample/index.vue +67 -67
  298. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  299. package/src/pages/login/Login.vue +378 -378
  300. package/src/pages/login/LoginV3.vue +389 -389
  301. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  302. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  303. package/src/pages/report/ReportTable.js +124 -124
  304. package/src/pages/resourceManage/orgListManage.vue +98 -98
  305. package/src/pages/system/dictionary/index.vue +44 -44
  306. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  307. package/src/pages/system/monitor/operLog/index.vue +37 -37
  308. package/src/pages/system/settings/modifyPassword.vue +117 -117
  309. package/src/pages/system/ticket/index.vue +480 -480
  310. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  311. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  312. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  313. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  314. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  315. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  316. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  317. package/src/plugins/EventLogPlugin.js +33 -33
  318. package/src/plugins/FindParentsData.js +17 -17
  319. package/src/router/async/config.async.js +35 -35
  320. package/src/router/index.js +27 -27
  321. package/src/router.js +19 -19
  322. package/src/services/DataModel.js +30 -30
  323. package/src/services/LodopFuncs.js +137 -137
  324. package/src/services/api/TicketDetailsViewApi.js +46 -46
  325. package/src/services/api/cas.js +79 -79
  326. package/src/services/api/common.js +346 -346
  327. package/src/services/api/entity.js +18 -18
  328. package/src/services/api/index.js +17 -17
  329. package/src/services/api/workFlow.js +0 -2
  330. package/src/store/modules/account.js +115 -115
  331. package/src/store/modules/index.js +5 -5
  332. package/src/store/modules/lowCode.js +33 -33
  333. package/src/store/modules/setting.js +119 -119
  334. package/src/theme/default/style.less +58 -58
  335. package/src/theme/global.less +159 -159
  336. package/src/utils/authority-utils.js +85 -85
  337. package/src/utils/errorCode.js +6 -6
  338. package/src/utils/formatter.js +74 -74
  339. package/src/utils/htmlToPDF.js +108 -108
  340. package/src/utils/htmlToPDFApi.js +5 -5
  341. package/src/utils/login.js +188 -188
  342. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  343. package/src/utils/lowcode/lowcodeLog.js +29 -29
  344. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  345. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  346. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  347. package/src/utils/map-utils.js +47 -47
  348. package/src/utils/reg.js +95 -95
  349. package/src/utils/runEvalFunction.js +14 -14
  350. package/src/utils/theme-color-replacer-extend.js +92 -92
  351. package/src/utils/util.js +329 -329
  352. package/src/utils/waterMark.js +31 -31
  353. package/vue.config.js +5 -0
  354. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
  355. package/.history/public/his/editor/editor_20250606134713.html +0 -51
  356. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527173925.vue +0 -509
  357. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174316.vue +0 -524
  358. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174419.vue +0 -524
  359. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174422.vue +0 -524
  360. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172825.vue +0 -207
  361. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172945.vue +0 -211
  362. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172949.vue +0 -212
  363. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611173010.vue +0 -212
  364. package/.history/src/base-client/components/common/XForm/XFormItem_20250508134122.vue +0 -1320
  365. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171604.vue +0 -1332
  366. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171613.vue +0 -1331
  367. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171703.vue +0 -1331
  368. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171720.vue +0 -1331
  369. package/.history/src/base-client/components/common/XForm/XFormItem_20250527174327.vue +0 -1339
  370. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612092804.vue +0 -731
  371. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612112546.vue +0 -748
  372. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612113808.vue +0 -748
  373. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115237.vue +0 -1071
  374. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115346.vue +0 -1078
  375. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115350.vue +0 -1077
  376. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115415.vue +0 -1077
  377. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115429.vue +0 -1077
  378. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611091619.vue +0 -442
  379. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092547.vue +0 -442
  380. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092552.vue +0 -442
  381. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092744.vue +0 -475
  382. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092955.vue +0 -475
  383. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092957.vue +0 -475
  384. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095652.vue +0 -477
  385. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095701.vue +0 -477
  386. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095704.vue +0 -477
  387. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100005.vue +0 -473
  388. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100011.vue +0 -473
  389. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100014.vue +0 -473
  390. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100833.vue +0 -473
  391. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100853.vue +0 -473
  392. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100940.vue +0 -473
  393. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101011.vue +0 -473
  394. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101013.vue +0 -473
  395. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101014.vue +0 -473
  396. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101159.vue +0 -473
  397. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101238.vue +0 -474
  398. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101240.vue +0 -474
  399. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101242.vue +0 -474
  400. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101404.vue +0 -472
  401. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101410.vue +0 -472
  402. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101459.vue +0 -472
  403. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101500.vue +0 -472
  404. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101502.vue +0 -472
  405. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101504.vue +0 -472
  406. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101610.vue +0 -501
  407. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101700.vue +0 -501
  408. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101702.vue +0 -501
  409. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101741.vue +0 -504
  410. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101749.vue +0 -504
  411. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101759.vue +0 -504
  412. package/.history/src/base-client/components/his/XHisEditor/dome_20250611091349.vue +0 -131
  413. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105854.vue +0 -160
  414. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105902.vue +0 -160
  415. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105924.vue +0 -160
  416. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105932.vue +0 -158
  417. package/.history/src/base-client/components/his/XList/XList_20250609135848.vue +0 -173
  418. package/.history/src/base-client/components/his/XList/XList_20250609141026.vue +0 -222
  419. package/.history/src/base-client/components/his/XList/XList_20250609141035.vue +0 -229
  420. package/.history/src/base-client/components/his/XList/XList_20250609141103.vue +0 -229
  421. package/.history/src/base-client/components/his/XList/XList_20250609141105.vue +0 -229
  422. package/.history/src/base-client/components/his/XList/XList_20250609141334.vue +0 -241
  423. package/.history/src/base-client/components/his/XList/XList_20250609141404.vue +0 -241
  424. package/.history/src/base-client/components/his/XList/XList_20250609141406.vue +0 -241
  425. package/.history/src/base-client/components/his/XList/XList_20250609141801.vue +0 -245
  426. package/.history/src/base-client/components/his/XList/XList_20250609142033.vue +0 -245
  427. package/.history/src/base-client/components/his/XList/XList_20250609142038.vue +0 -245
  428. package/.history/src/base-client/components/his/XList/XList_20250609142435.vue +0 -255
  429. package/.history/src/base-client/components/his/XList/XList_20250609142503.vue +0 -255
  430. package/.history/src/base-client/components/his/XList/XList_20250609142504.vue +0 -255
  431. package/.history/src/base-client/components/his/XList/XList_20250609143012.vue +0 -270
  432. package/.history/src/base-client/components/his/XList/XList_20250609143044.vue +0 -270
  433. package/.history/src/base-client/components/his/XList/XList_20250609143046.vue +0 -270
  434. package/.history/src/base-client/components/his/XList/XList_20250609143210.vue +0 -270
  435. package/.history/src/base-client/components/his/XList/XList_20250609144339.vue +0 -294
  436. package/.history/src/base-client/components/his/XList/XList_20250609144410.vue +0 -294
  437. package/.history/src/base-client/components/his/XList/XList_20250609144412.vue +0 -294
  438. package/.history/src/base-client/components/his/XList/XList_20250609144647.vue +0 -303
  439. package/.history/src/base-client/components/his/XList/XList_20250609144716.vue +0 -303
  440. package/.history/src/base-client/components/his/XList/XList_20250609144729.vue +0 -303
  441. package/.history/src/base-client/components/his/XList/XList_20250609151232.vue +0 -288
  442. package/.history/src/base-client/components/his/XList/XList_20250609151247.vue +0 -288
  443. package/.history/src/base-client/components/his/XList/XList_20250609151252.vue +0 -288
  444. package/.history/src/base-client/components/his/XList/XList_20250609161220.vue +0 -317
  445. package/.history/src/base-client/components/his/XList/XList_20250609161258.vue +0 -306
  446. package/.history/src/base-client/components/his/XList/XList_20250609161319.vue +0 -306
  447. package/.history/src/base-client/components/his/XList/XList_20250609161320.vue +0 -306
  448. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250609151519.vue +0 -222
  449. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155514.vue +0 -183
  450. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155556.vue +0 -183
  451. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155600.vue +0 -183
  452. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612181609.vue +0 -206
  453. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612181629.vue +0 -209
  454. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095553.vue +0 -242
  455. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095610.vue +0 -242
  456. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095612.vue +0 -242
  457. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100041.vue +0 -251
  458. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100047.vue +0 -251
  459. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100054.vue +0 -250
  460. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100105.vue +0 -250
  461. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100107.vue +0 -250
  462. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100114.vue +0 -250
  463. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140844.vue +0 -238
  464. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140910.vue +0 -238
  465. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140912.vue +0 -238
  466. package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +0 -36
  467. package/src/base-client/components/TreeList/TreeList.vue +0 -91
  468. package/src/base-client/components/TreeList/TreeNode.vue +0 -81
  469. package/src/base-client/components/common/XCardSet/XTiltle.vue +0 -191
@@ -1,1219 +1,1219 @@
1
- <template>
2
- <div>
3
- <!-- 标题 -->
4
- <a-card>
5
- <a-page-header
6
- title="奥枫低代码前端编辑器"
7
- sub-title="af-lowcode"
8
- :backIcon="false"
9
- @back="() => null"
10
- >
11
- <template slot="extra">
12
- <a-button @click="test">测试</a-button>
13
- <a-button @click="editModeActive">编辑</a-button>
14
- <a-button @click="previewModeActive">预览</a-button>
15
- <a-button type="primary" @click="exportConfig">导出</a-button>
16
- </template>
17
- </a-page-header>
18
- </a-card>
19
- <!-- 预览模式 -->
20
- <a-card v-if="preview">
21
- <LowCodeRender :page-config="config" :edit-mode="false"/>
22
- </a-card>
23
- <!-- 编辑模式 -->
24
- <div v-show="!preview">
25
- <a-row :gutter="2">
26
- <!-- 左侧 -->
27
- <a-col :span="4">
28
- <a-card>
29
- <a-tabs>
30
- <!-- UI库 -->
31
- <a-tab-pane key="1" tab="UI库">
32
- <LowCodeUIStore @refresh="refresh"/>
33
- </a-tab-pane>
34
- <!-- 页面架构 -->
35
- <a-tab-pane key="2" tab="架构" style="overflow: scroll">
36
- <div style="margin-bottom: 3%; width: 200px">
37
- <LowCodePageOrganization
38
- :config="filterOrganizationConfig()"
39
- v-if="showPageOrganization"
40
- :select-tree-node="selectTreeNode"
41
- @rename="rename"
42
- @add="handleTreeAdd"
43
- @split="handleSplit"
44
- @pasteItem="handlePasteItem"
45
- @componentMove="handleTreeDrag"
46
- @deleteComponent="deleteComponentInTree"
47
- @treeOrganizationClick="treeOrganizationClick"/>
48
- </div>
49
- </a-tab-pane>
50
- </a-tabs>
51
- </a-card>
52
- </a-col>
53
- <!-- 中间主体编辑器 -->
54
- <a-col :span="15">
55
- <a-card>
56
- <!-- 切换显示的组件 -->
57
- <div style="margin-bottom: 3%">
58
- <!-- 添加页面组件按钮 -->
59
- <div style="float: right">
60
- <a-popover>
61
- <template slot="content">
62
- <p>添加页面组件</p>
63
- </template>
64
- <a-button @click="addPageContainer" >
65
- <a-icon type="plus"/>
66
- </a-button>
67
- </a-popover>
68
- </div>
69
- <!-- 每个页面按钮切换栏 -->
70
- <a-menu v-model="mainPageMenu" mode="horizontal" @click="handleMainPageMenuChange">
71
- <template v-for="(page) in config.page">
72
- <a-menu-item :key="page.id">{{ page.title + '(' + determinePageType(page.type) + ')' }}</a-menu-item>
73
- </template>
74
- </a-menu>
75
- </div>
76
- <!-- 渲染器 -->
77
- <div v-if="activeMainPageType === 'page'">
78
- <LowCodeRender
79
- v-if="renderPage"
80
- ref="page_render"
81
- @spanDrag="handleDrag"
82
- @containerDelete="handleContainerDelete"
83
- @clickComponentInEditor="clickComponentInEditor"
84
- :page-config="{ data: config.data, page: config.page.filter(page => page.id === activeMainPage)}"/>
85
- <a-skeleton v-else/>
86
- </div>
87
- <div v-if="activeMainPageType === 'modal'">
88
- <LowCodeRender
89
- v-if="renderPage"
90
- ref="modal_render"
91
- @spanDrag="handleDrag"
92
- @containerDelete="handleContainerDelete"
93
- @clickComponentInEditor="clickComponentInEditor"
94
- :page-config="{ data: config.data, page: config.page.filter(page => page.id === activeMainPage)}"/>
95
- <a-skeleton v-else/>
96
- </div>
97
- <div v-if="activeMainPageType === 'draw'">
98
- <LowCodeRender
99
- v-if="renderPage"
100
- ref="draw_render"
101
- @spanDrag="handleDrag"
102
- @containerDelete="handleContainerDelete"
103
- @clickComponentInEditor="clickComponentInEditor"
104
- :page-config="{ data: config.data, page: config.page.filter(page => page.id === activeMainPage)}"/>
105
- <a-skeleton v-else/>
106
- </div>
107
- </a-card>
108
- </a-col>
109
- <!-- 右侧 -->
110
- <a-col :span="5">
111
- <LowCodeEditorPanel
112
- ref="rightPanel"
113
- @openModal="openModal"
114
- @controlRender="controlRender"
115
- :disable-event-editor="disableEventEditor"
116
- :editorPropertiesConfig="editorPropertiesConfig"/>
117
- </a-col>
118
- </a-row>
119
- </div>
120
- <!-- 所有的弹窗,包括:
121
- 新增页面容器弹框
122
- 自定义JS函数弹框
123
- 事件编辑弹框
124
- 自定义生命周期函数弹框
125
- 自定义Logic参数JS弹框
126
- 自定义Logic回调弹框
127
- 运行目标组件参数编辑弹框
128
- -->
129
- <LowCodeEditorModal
130
- ref="allModal"
131
- @changeOuterValue="changeOuterValue"
132
- @refresh="refresh"
133
- :event-editor-current="eventEditorCurrent"
134
- :editor-properties-config="editorPropertiesConfig"/>
135
- </div>
136
- </template>
137
-
138
- <script>
139
- import LowCodeRender from '@vue2-client/base-client/components/common/LowCodeComponent/LowCodeRender.vue'
140
- import * as lowcodeUtils from '@vue2-client/utils/lowcode/lowcodeUtils'
141
- import codeMirror from '@vue2-client/components/CodeMirror/inedx.vue'
142
- import lowcodeComponentMixin from '@vue2-client/utils/lowcode/lowcodeComponentMixin'
143
- import LowCodePageOrganization from '@vue2-client/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue'
144
- import LowCodeEditorModal from '@vue2-client/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue'
145
- import LowCodeUIStore from '@vue2-client/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue'
146
- import LowCodeEditorPanel from '@vue2-client/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue'
147
-
148
- export default {
149
- name: 'LowCodeEditor',
150
- components: {
151
- LowCodeEditorModal,
152
- LowCodePageOrganization,
153
- LowCodeRender,
154
- codeMirror,
155
- LowCodeUIStore,
156
- LowCodeEditorPanel
157
- },
158
- props: {
159
- // 页面原始的配置,用于从琉璃中读取
160
- originalConfig: {
161
- type: Object,
162
- default: () => {
163
- return {
164
- page: []
165
- }
166
- }
167
- }
168
- },
169
- data () {
170
- return {
171
- // 主体窗口选择的标签
172
- mainPageMenu: ['none'],
173
- // 控制是否渲染页面
174
- preview: false,
175
- // 控制架构树显隐,用于刷新组件
176
- showPageOrganization: true,
177
- // 用于保存右侧编辑组件的属性
178
- editorPropertiesConfig: {},
179
- // 用于事件编辑的回显,在点击事件编辑按钮后,会将此变量赋值
180
- eventEditorCurrent: undefined,
181
- // 保存目标组件可以触发哪些事件
182
- supportedEventType: undefined,
183
- // 保存主体中,当前激活的标签栏ID
184
- activeMainPage: undefined,
185
- // 保存主体中,当前激活的标签栏类型
186
- activeMainPageType: undefined,
187
- // 指定架构树选中哪个节点
188
- selectTreeNode: undefined,
189
- // 禁用事件编辑
190
- disableEventEditor: false,
191
- // 控制右侧事件编辑刷新
192
- showEventEditor: true,
193
- // 控制渲染器更新
194
- renderPage: true
195
- }
196
- },
197
- provide () {
198
- return {
199
- // 将注册的组件传递给子组件
200
- componentsMap: {}
201
- }
202
- },
203
- methods: {
204
- controlRender (flag) {
205
- this.renderPage = flag
206
- },
207
- // 打开弹窗
208
- openModal (modalName) {
209
- this.$refs.allModal.changeModalVisible(modalName)
210
- },
211
- // 子组件修改父组件的值
212
- changeOuterValue (key, value) {
213
- this[key] = value
214
- },
215
- // 根据类型刷新组件
216
- refresh (type) {
217
- switch (type) {
218
- case 'Organization':
219
- this.refreshOrganization()
220
- return
221
- case 'eventEditor':
222
- this.$refs.rightPanel.refresh()
223
- }
224
- },
225
- // 添加页面容器
226
- addPageContainer () {
227
- this.$refs.allModal.changeModalVisible('addPage')
228
- },
229
- // 架构重命名
230
- rename (id, newName) {
231
- const target = lowcodeUtils.getConfig(id, this.config)
232
- if (target.type === 'page') {
233
- target.title = newName
234
- } else {
235
- target.name = newName
236
- }
237
- this.refreshOrganization()
238
- },
239
- // 架构树新增
240
- handleTreeAdd (id, type) {
241
- // 如果目标是行,则添加容器
242
- if (type === 'container') {
243
- // 获取行对象
244
- const rowConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(id)
245
- const row = lowcodeUtils.getRowByRowId(rowConfig.pageId, rowConfig.rowIndex, this.config)
246
- // 如果是空行,直接添加容器
247
- if (row.body.length === 0) {
248
- row.body.push(lowcodeUtils.newContainer())
249
- } else {
250
- // 如果不是空行,将最后一个元素的span平分给新的容器
251
- const lastSpan = row.body[row.body.length - 1].span
252
- const firstSpan = Math.round(lastSpan / 2)
253
- const newSpan = lastSpan - firstSpan
254
- row.body[row.body.length - 1].span = firstSpan
255
- row.body.push(lowcodeUtils.newContainer(newSpan))
256
- }
257
- } else {
258
- // 如果不是行,则添加行
259
- const page = lowcodeUtils.getPageConfigById(id, this.config)
260
- page.body.push(
261
- {
262
- id: page.id + '_' + page.body.length,
263
- config: {
264
- align: 'top',
265
- gutter: 0,
266
- justify: 'start'
267
- },
268
- type: 'row',
269
- body: [
270
- lowcodeUtils.newContainer()
271
- ]
272
- }
273
- )
274
- }
275
- this.refreshOrganization()
276
- },
277
- // 为架构树过滤配置,只显示当前激活的页面配置
278
- filterOrganizationConfig () {
279
- const result = { page: [] }
280
- this.config.page.forEach(page => {
281
- if (page.id === this.activeMainPage) {
282
- result.page.push(page)
283
- }
284
- })
285
- return result
286
- },
287
- // 处理拆分
288
- handleSplit (id, isVertical) {
289
- // 获取目标对象,目标行和对象在行中的Index
290
- const target = lowcodeUtils.getComponentConfig(id, this.config)
291
- const row = lowcodeUtils.getRowConfigByComponentId(id, this.config)
292
- let index
293
- for (let i = 0; i < row.body.length; i++) {
294
- if (row.body[i].id === id) {
295
- index = i
296
- break
297
- }
298
- }
299
- // 将目标对象缓存
300
- const cache = JSON.parse(JSON.stringify(target))
301
- // 是否为垂直拆分
302
- if (isVertical) {
303
- const newPageId = 'container_page_' + lowcodeUtils.nanoidWithoutSymbol(2)
304
- // 垂直拆分,嵌套page容器
305
- const temp = {
306
- type: 'container_page',
307
- span: cache.span,
308
- id: 'container_' + lowcodeUtils.nanoidWithoutSymbol(6),
309
- page: [
310
- {
311
- id: newPageId,
312
- type: 'page',
313
- body: [
314
- {
315
- id: newPageId + '_0',
316
- type: 'row',
317
- config: {
318
- align: 'top',
319
- gutter: 0,
320
- justify: 'start'
321
- },
322
- body: []
323
- }
324
- ]
325
- }
326
- ]
327
- }
328
- cache.span = 24
329
- // 第一行放缓存的原始对象
330
- temp.page[0].body[0].body.push(cache)
331
- // 第二行新增容器
332
- temp.page[0].body[1] = {
333
- id: newPageId + '_1',
334
- type: 'row',
335
- config: {
336
- align: 'top',
337
- gutter: 0,
338
- justify: 'start'
339
- },
340
- body: []
341
- }
342
- temp.page[0].body[1].body.push(lowcodeUtils.newContainer())
343
- row.body.splice(index, 1, temp)
344
- } else {
345
- // 如果是水平拆分
346
- // 将原先对象span一分为二,添加容器
347
- const outerSpan = cache.span
348
- const firstSpan = Math.round(outerSpan / 2)
349
- const secondSpan = outerSpan - firstSpan
350
- cache.span = firstSpan
351
- row.body.splice(index, 1, cache, lowcodeUtils.newContainer(secondSpan))
352
- }
353
- this.refreshOrganization()
354
- },
355
- // 复制粘贴组件
356
- handlePasteItem (id, copyCache, type) {
357
- const target = lowcodeUtils.getConfig(id, this.config)
358
- // 页面中插入行
359
- if (type === 'page-row') {
360
- const content = copyCache.content
361
- const pageId = target.id
362
- content.id = pageId + '_' + target.body.length
363
- target.body.push(content)
364
- } else if (type === 'row-item') {
365
- // 行中插入组件
366
- target.body.push(copyCache.content)
367
- } else if (type === 'page') {
368
- // 复制页面
369
- this.config.page.push(copyCache)
370
- this.$message.success('复制成功!')
371
- }
372
- this.refreshOrganization()
373
- },
374
- // 点击架构树
375
- treeOrganizationClick (id) {
376
- // 如果是反选
377
- if (id === null) {
378
- // 清除编辑框
379
- this.editorPropertiesConfig = {}
380
- this.$store.commit('setTargetContainer', undefined)
381
- // 清除容器select
382
- lowcodeUtils.unCheckAll(this.config)
383
- return
384
- }
385
- let target
386
- if (id.includes('container_page')) {
387
- // 长度大于17证明是容器页面的行
388
- if (id.length > 17) {
389
- const rowConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(id)
390
- target = lowcodeUtils.getRowByRowId(rowConfig.pageId, rowConfig.rowIndex, this.config)
391
- } else {
392
- target = lowcodeUtils.getContainerPageOuterByContainerPageId(id, this.config)
393
- }
394
- } else {
395
- // 包含page表示选中的是某一行
396
- if (id.includes('page')) {
397
- const rowConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(id)
398
- target = lowcodeUtils.getRowByRowId(rowConfig.pageId, rowConfig.rowIndex, this.config)
399
- } else {
400
- target = lowcodeUtils.getComponentConfig(id, this.config)
401
- }
402
- }
403
- // 将组件选中
404
- this.clickComponentInEditor(target)
405
- if (!id.includes('container') && !(id.includes('page') && id.length > 11)) {
406
- this.twink(id)
407
- }
408
- },
409
- // 架构树拖拽事件
410
- handleTreeDrag (dragKey, dropKey, dragLevel, dropLevel, dropPosition, dragType) {
411
- // 只有三种情况可以拖拽
412
- // 1.平级挪
413
- // 2.高一级插
414
- // 3.行插子页面
415
- let dragEle, rowConfig, father, cache, deleteIndex
416
-
417
- // 复制移动组件,并将其从原位删除
418
- switch (dragLevel.type) {
419
- case 'row':
420
- rowConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(dragKey)
421
- father = lowcodeUtils.getPageConfigById(rowConfig.pageId, this.config)
422
- dragEle = father.body[rowConfig.rowIndex]
423
- // 复制原始
424
- cache = JSON.parse(JSON.stringify(dragEle))
425
- // 删除原始
426
- deleteIndex = rowConfig.rowIndex
427
- father.body.splice(deleteIndex, 1, { placeHold: true })
428
- break
429
- case 'item':
430
- father = lowcodeUtils.getRowConfigByComponentId(dragKey, this.config).body
431
- dragEle = lowcodeUtils.getComponentConfig(dragKey, this.config)
432
- // 复制原始
433
- cache = JSON.parse(JSON.stringify(dragEle))
434
- // 删除原始
435
- for (let i = 0; i < father.length; i++) {
436
- const item = father[i]
437
- if (item.id === dragKey) {
438
- deleteIndex = i
439
- break
440
- }
441
- }
442
- father.splice(deleteIndex, 1, { placeHold: true })
443
- break
444
- case 'container_page':
445
- father = lowcodeUtils.getContainerPageRow(dragKey, this.config).body
446
- dragEle = lowcodeUtils.getContainerPageOuterByContainerPageId(dragKey, this.config)
447
- // 复制原始
448
- cache = JSON.parse(JSON.stringify(dragEle))
449
- // 删除原始
450
- for (let i = 0; i < father.length; i++) {
451
- const item = father[i]
452
- if (item.type === 'container_page' && item.page[0].id === dragKey) {
453
- deleteIndex = i
454
- break
455
- }
456
- }
457
- father.splice(deleteIndex, 1, { placeHold: true })
458
- break
459
- }
460
-
461
- let target, dropConfig, targetCache, targetIndex
462
- switch (dragType) {
463
- case 'move':
464
- // 1. 平级挪
465
- switch (dragLevel.type) {
466
- case 'row':
467
- // 移动行
468
- // 拿到父容器和目标Index
469
- dropConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(dropKey)
470
- target = lowcodeUtils.getPageConfigById(dropConfig.pageId, this.config)
471
- // 保存目标
472
- targetCache = target.body[dropConfig.rowIndex]
473
- // 插入
474
- if (dropPosition < 0) {
475
- target.body.splice(dropConfig.rowIndex, 1, cache, targetCache)
476
- } else {
477
- target.body.splice(dropConfig.rowIndex, 1, targetCache, cache)
478
- }
479
- // 清理占位
480
- for (let i = 0; i < father.body.length; i++) {
481
- const item = father.body[i]
482
- if (item.placeHold) {
483
- father.body.splice(i, 1)
484
- break
485
- }
486
- }
487
- break
488
- case 'item':
489
- // 移动组件
490
- // 拿到父容器和目标Index
491
- if (dropLevel.type === 'container_page') {
492
- target = lowcodeUtils.getContainerPageRow(dropKey, this.config)
493
- for (let i = 0; i < target.body.length; i++) {
494
- const item = target.body[i]
495
- if (item.type === 'container_page' && item.page[0].id === dropKey) {
496
- targetIndex = i
497
- break
498
- }
499
- }
500
- } else {
501
- target = lowcodeUtils.getRowByComponentId(dropKey, this.config)
502
- for (let i = 0; i < target.body.length; i++) {
503
- const item = target.body[i]
504
- if (item.id === dropKey) {
505
- targetIndex = i
506
- break
507
- }
508
- }
509
- }
510
- // 保存目标
511
- targetCache = target.body[targetIndex]
512
- // 插入
513
- if (dropPosition < 0) {
514
- target.body.splice(targetIndex, 1, cache, targetCache)
515
- } else {
516
- target.body.splice(targetIndex, 1, targetCache, cache)
517
- }
518
- // 清理占位
519
- for (let i = 0; i < father.length; i++) {
520
- const item = father[i]
521
- if (item.placeHold) {
522
- father.splice(i, 1)
523
- break
524
- }
525
- }
526
- if (father.length === 0) {
527
- father.push(lowcodeUtils.newContainer())
528
- }
529
- break
530
- case 'container_page':
531
- // 移动容器页面
532
- // 拿到父容器和目标Index
533
- if (dropLevel.type === 'container_page') {
534
- target = lowcodeUtils.getContainerPageRow(dropKey, this.config)
535
- for (let i = 0; i < target.body.length; i++) {
536
- const item = target.body[i]
537
- if (item.type === 'container_page' && item.page[0].id === dropKey) {
538
- targetIndex = i
539
- break
540
- }
541
- }
542
- } else {
543
- target = lowcodeUtils.getRowByComponentId(dropKey, this.config)
544
- for (let i = 0; i < target.body.length; i++) {
545
- const item = target.body[i]
546
- if (item.id === dropKey) {
547
- targetIndex = i
548
- break
549
- }
550
- }
551
- }
552
- // 保存目标
553
- targetCache = target.body[targetIndex]
554
- // 插入
555
- if (dropPosition < 0) {
556
- target.body.splice(targetIndex, 1, cache, targetCache)
557
- } else {
558
- target.body.splice(targetIndex, 1, targetCache, cache)
559
- }
560
- // 清理占位
561
- for (let i = 0; i < father.length; i++) {
562
- const item = father[i]
563
- if (item.placeHold) {
564
- father.splice(i, 1)
565
- break
566
- }
567
- }
568
- if (father.length === 0) {
569
- father.push(lowcodeUtils.newContainer())
570
- }
571
- }
572
- break
573
- case 'higher':
574
- // 2.高一级插
575
- switch (dragLevel.type) {
576
- case 'row':
577
- // 行插页
578
- target = lowcodeUtils.getPageConfigById(dropKey, this.config)
579
- target.body.push(cache)
580
- for (let i = 0; i < father.body.length; i++) {
581
- const item = father.body[i]
582
- if (item.placeHold) {
583
- father.body.splice(i, 1)
584
- break
585
- }
586
- }
587
- break
588
- case 'item':
589
- // 组件插行
590
- rowConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(dropKey)
591
- target = lowcodeUtils.getRowByRowId(rowConfig.pageId, rowConfig.rowIndex, this.config)
592
- target.body.push(cache)
593
- for (let i = 0; i < father.length; i++) {
594
- if (father[i].placeHold) {
595
- father.splice(i, 1)
596
- break
597
- }
598
- }
599
- if (father.length === 0) {
600
- father.push(lowcodeUtils.newContainer())
601
- }
602
- break
603
- case 'container_page':
604
- // 子页面插行
605
- rowConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(dropKey)
606
- target = lowcodeUtils.getRowByRowId(rowConfig.pageId, rowConfig.rowIndex, this.config)
607
- target.body.push(cache)
608
- for (let i = 0; i < father.length; i++) {
609
- if (father[i].placeHold) {
610
- father.splice(i, 1)
611
- break
612
- }
613
- }
614
- if (father.length === 0) {
615
- father.push(lowcodeUtils.newContainer())
616
- }
617
- break
618
- }
619
- break
620
- case 'rowToContainer':
621
- // 3.行插子页面
622
- target = lowcodeUtils.getContainerPageOuterByContainerPageId(dropKey, this.config)
623
- target.page[0].body.push(cache)
624
- for (let i = 0; i < father.body.length; i++) {
625
- const item = father.body[i]
626
- if (item.placeHold) {
627
- father.body.splice(i, 1)
628
- break
629
- }
630
- }
631
- break
632
- case 'switch':
633
- switch (dragLevel.type) {
634
- case 'row':
635
- // 拿到父容器和目标Index
636
- dropConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(dropKey)
637
- target = lowcodeUtils.getPageConfigById(dropConfig.pageId, this.config)
638
- // 保存目标
639
- targetCache = target.body[dropConfig.rowIndex]
640
- // 替换目标
641
- target.body.splice(dropConfig.rowIndex, 1, cache)
642
- // 将目标替换到原始
643
- for (let i = 0; i < father.body.length; i++) {
644
- const item = father.body[i]
645
- if (item.placeHold) {
646
- father.body.splice(i, 1, targetCache)
647
- break
648
- }
649
- }
650
- break
651
- case 'item':
652
- // 拿到父容器和目标Index
653
- if (dropLevel.type === 'container_page') {
654
- target = lowcodeUtils.getContainerPageRow(dropKey, this.config)
655
- for (let i = 0; i < target.body.length; i++) {
656
- const item = target.body[i]
657
- if (item.type === 'container_page' && item.page[0].id === dropKey) {
658
- targetIndex = i
659
- break
660
- }
661
- }
662
- } else {
663
- target = lowcodeUtils.getRowByComponentId(dropKey, this.config)
664
- for (let i = 0; i < target.body.length; i++) {
665
- const item = target.body[i]
666
- if (item.id === dropKey) {
667
- targetIndex = i
668
- break
669
- }
670
- }
671
- }
672
- // 保存目标
673
- targetCache = target.body[targetIndex]
674
- // 替换目标
675
- target.body.splice(targetIndex, 1, cache)
676
- // 将目标替换到原始
677
- for (let i = 0; i < father.length; i++) {
678
- const item = father[i]
679
- if (item.placeHold) {
680
- father.splice(i, 1, targetCache)
681
- break
682
- }
683
- }
684
- break
685
- case 'container_page':
686
- // 移动容器页面
687
- // 拿到父容器和目标Index
688
- if (dropLevel.type === 'container_page') {
689
- target = lowcodeUtils.getContainerPageRow(dropKey, this.config)
690
- for (let i = 0; i < target.body.length; i++) {
691
- const item = target.body[i]
692
- if (item.type === 'container_page' && item.page[0].id === dropKey) {
693
- targetIndex = i
694
- break
695
- }
696
- }
697
- } else {
698
- target = lowcodeUtils.getRowByComponentId(dropKey, this.config)
699
- for (let i = 0; i < target.body.length; i++) {
700
- const item = target.body[i]
701
- if (item.id === dropKey) {
702
- targetIndex = i
703
- break
704
- }
705
- }
706
- }
707
- // 保存目标
708
- targetCache = target.body[targetIndex]
709
- // 替换目标
710
- target.body.splice(targetIndex, 1, cache)
711
- // 将目标替换到原始
712
- for (let i = 0; i < father.length; i++) {
713
- const item = father[i]
714
- if (item.placeHold) {
715
- father.splice(i, 1, targetCache)
716
- break
717
- }
718
- }
719
- break
720
- }
721
- }
722
-
723
- this.refreshOrganization()
724
- },
725
- // 主页面标签切换
726
- handleMainPageMenuChange (value) {
727
- // 如果和之前选择的不一样
728
- if (value.key !== this.activeMainPage) {
729
- // 清空属性编辑
730
- this.editorPropertiesConfig = {}
731
- this.$store.commit('setTargetContainer', undefined)
732
- // 切换菜单
733
- this.activeMainPage = value.key
734
- for (let i = 0; i < this.config.page.length; i++) {
735
- if (this.config.page[i].id === this.activeMainPage) {
736
- this.activeMainPageType = this.config.page[i].type
737
- this.refreshOrganization()
738
- return
739
- }
740
- }
741
- }
742
- },
743
- // 将页面标签类型渲染为对应的文字
744
- determinePageType (type) {
745
- return lowcodeUtils.resolvePageType(type)
746
- },
747
- // 刷新架构
748
- refreshOrganization () {
749
- this.showPageOrganization = false
750
- this.$nextTick(() => {
751
- this.showPageOrganization = true
752
- })
753
- },
754
- // 拖拽完成后,将新的span赋值
755
- handleDrag (targetEle, nextEle) {
756
- const target = lowcodeUtils.getComponentConfig(targetEle.id, this.config.page)
757
- const targetNext = lowcodeUtils.getComponentConfig(nextEle.id, this.config.page)
758
- target.span = targetEle.span
759
- targetNext.span = nextEle.span
760
- },
761
- // 删除组件
762
- deleteComponentInTree (id, type) {
763
- if (type === 'page') {
764
- const page = lowcodeUtils.getPageConfigById(id, this.config)
765
- this.deletePage(page)
766
- } else if (type === 'component') {
767
- this.deleteComponent(id)
768
- } else if (type === 'row') {
769
- this.deleteRow(id)
770
- } else if (type === 'container_page') {
771
- this.deleteContainerPage(id)
772
- }
773
- },
774
- // 删除容器页面
775
- deleteContainerPage (id) {
776
- const target = lowcodeUtils.getContainerPageOuterByContainerPageId(id, this.config)
777
- target.type = 'container'
778
- delete target.page
779
- this.$store.commit('setTargetContainer', undefined)
780
- this.editorPropertiesConfig = {}
781
- this.refreshOrganization()
782
- },
783
- // 删除行
784
- deleteRow (id) {
785
- const pageId = id.substring(0, id.length - 2)
786
- const rowId = id.substring(id.length - 1)
787
- const page = lowcodeUtils.getPageConfigById(pageId, this.config)
788
- page.body.splice(rowId, 1)
789
- // 如果该列下没有任何内容,则将该列还原为容器
790
- if (page.body.length === 0) {
791
- const outerContainer = lowcodeUtils.getContainerPageOuterByContainerPageId(page.id, this.config)
792
- outerContainer.type = 'container'
793
- outerContainer.selected = false
794
- delete outerContainer.page
795
- }
796
- this.$store.commit('setTargetContainer', undefined)
797
- this.editorPropertiesConfig = {}
798
- this.refreshOrganization()
799
- },
800
- // 删除页面容器
801
- deletePage (page) {
802
- // 清空页面下所有组件的注册信息
803
- page.body.forEach(row => {
804
- row.body.forEach(item => {
805
- if (item.type === 'container_page') {
806
- // 如果是容器页面,递归
807
- this.deletePage(item.page)
808
- } else {
809
- delete this.$children[0]._provided.componentsMap[item.id]
810
- }
811
- })
812
- })
813
- for (let i = 0; i < this.config.page.length; i++) {
814
- if (this.config.page[i].id === page.id) {
815
- this.config.page.splice(i, 1)
816
- this.$store.commit('setTargetContainer', undefined)
817
- this.editorPropertiesConfig = {}
818
- this.refreshOrganization()
819
- return
820
- }
821
- }
822
- },
823
- // 删除组件
824
- deleteComponent (id, addOnSpan = true) {
825
- const row = lowcodeUtils.getRowConfigByComponentId(id, this.config)
826
- const target = lowcodeUtils.getComponentConfig(id, this.config)
827
- const deletedSpan = target.span
828
- let index
829
- for (let i = 0; i < row.body.length; i++) {
830
- if (target.id === row.body[i].id) {
831
- index = i
832
- break
833
- }
834
- }
835
- row.body.splice(index, 1)
836
- if (addOnSpan) {
837
- // 如果该组件之前还有组件,将该组件的span加给之前的组件
838
- if (index !== 0) {
839
- row.body[index - 1].span += deletedSpan
840
- } else if (row.body.length > 0) {
841
- row.body[0].span += deletedSpan
842
- }
843
- if (row.body[index - 1].span > 24) {
844
- row.body[index - 1].span = 24
845
- }
846
- }
847
- if (row.body.length === 0) {
848
- row.body.push(lowcodeUtils.newContainer())
849
- }
850
- // 从注册的全局Map中删除
851
- delete this.$children[0]._provided.componentsMap[id]
852
- this.$store.commit('setTargetContainer', undefined)
853
- this.editorPropertiesConfig = {}
854
- this.refreshOrganization()
855
- },
856
- // 容器删除
857
- handleContainerDelete (id) {
858
- let index
859
- const row = lowcodeUtils.getRowConfigByComponentId(id, this.config)
860
- for (let i = 0; i < row.body.length; i++) {
861
- const item = row.body[i]
862
- if (item.id === id) {
863
- index = i
864
- break
865
- }
866
- }
867
- row.body.splice(index, 1)
868
- this.$store.commit('setTargetContainer', undefined)
869
- // 如果删除后只剩一个容器,将该容器span设置为24
870
- if (row.body.length === 1) {
871
- row.body[0].span = 24
872
- } else if (row.body.length === 0) {
873
- row.body.push(lowcodeUtils.newContainer())
874
- }
875
- this.refreshOrganization()
876
- },
877
- // 切换预览模式
878
- previewModeActive () {
879
- this.preview = true
880
- },
881
- // 切换编辑模式
882
- editModeActive () {
883
- this.preview = false
884
- },
885
- // 选中某个组件
886
- clickComponentInEditor (configItem) {
887
- this.disableEventEditor = false
888
- if (!configItem) {
889
- return
890
- }
891
- // 同步选中架构
892
- // 将选中的节点清空,在$nextTick再赋值,保证组件能watch到改变
893
- this.selectTreeNode = undefined
894
- if (configItem.type === 'container_page') {
895
- this.$nextTick(() => {
896
- this.selectTreeNode = 'container_page_' + configItem.page[0].id
897
- })
898
- } else if (configItem.type === 'row' || !configItem.type) {
899
- const rowConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(configItem.id)
900
- rowConfig.rowIndex++
901
- this.$nextTick(() => {
902
- this.selectTreeNode = 'row_' + rowConfig.pageId + '_' + rowConfig.rowIndex
903
- })
904
- } else {
905
- this.$nextTick(() => {
906
- this.selectTreeNode = configItem.id
907
- })
908
- lowcodeUtils.unCheckAll(this.config)
909
- }
910
- this.editorPropertiesConfig = {}
911
- // 如果选中的是容器
912
- if (configItem.type === 'container') {
913
- // 将所有已选中组件取消选择
914
- lowcodeUtils.unCheckAll(this.config)
915
- // 将目标设置为选定
916
- configItem.selected = true
917
- this.$store.commit('setTargetContainer', configItem)
918
- this.editorPropertiesConfig = configItem
919
- this.disableEventEditor = true
920
- this.editorPropertiesConfig.props = {}
921
- return
922
- }
923
- // 如果选中的是容器页面
924
- if (configItem.type === 'container_page') {
925
- // 选中容器页面中所有组件
926
- lowcodeUtils.unCheckAll(this.config)
927
- configItem.page.forEach(page => {
928
- page.body.forEach(row => {
929
- lowcodeUtils.checkRowAll(row)
930
- })
931
- })
932
- this.editorPropertiesConfig = configItem
933
- this.disableEventEditor = true
934
- this.editorPropertiesConfig.props = {}
935
- return
936
- }
937
-
938
- // 如果选中的是行
939
- if (configItem.type === 'row' || !configItem.type) {
940
- lowcodeUtils.checkRowAll(configItem, this.config)
941
- this.editorPropertiesConfig = configItem
942
- this.disableEventEditor = true
943
- this.editorPropertiesConfig.props = {}
944
- return
945
- }
946
-
947
- if (configItem.type === 'tabs') {
948
- console.warn('tabs', configItem)
949
- this.editorPropertiesConfig = configItem
950
- this.disableEventEditor = true
951
- this.editorPropertiesConfig.props = {}
952
- return
953
- }
954
- // 如果是组件对象
955
- // 拿注册的配置
956
- const configInJson = lowcodeUtils.getEditorConfigByType(configItem.type)
957
- if (configInJson) {
958
- this.editorPropertiesConfig = configItem
959
- // 为编辑器变量初始化
960
- if (configInJson.properties) {
961
- if (!this.editorPropertiesConfig.props) {
962
- this.editorPropertiesConfig.props = {}
963
- }
964
- const editableKeys = Object.keys(configInJson.properties)
965
- editableKeys.forEach(editableKey => {
966
- // 如果该值并不存在,则初始化
967
- if (!this.editorPropertiesConfig.props[editableKey]) {
968
- this.editorPropertiesConfig.props[editableKey] = ''
969
- } else {
970
- if (typeof this.editorPropertiesConfig.props[editableKey] === 'object') {
971
- this.editorPropertiesConfig.props[editableKey] = JSON.stringify(this.editorPropertiesConfig.props[editableKey])
972
- }
973
- }
974
- })
975
- }
976
- // 为编辑器事件初始化
977
- if (configInJson.selfEvent) {
978
- if (!this.editorPropertiesConfig.selfEvent) {
979
- this.editorPropertiesConfig.selfEvent = []
980
- configInJson.selfEvent.forEach(everyEvent => {
981
- this.editorPropertiesConfig.selfEvent.push(everyEvent)
982
- })
983
- }
984
- }
985
- } else {
986
- this.editorPropertiesConfig = 'unregistered'
987
- }
988
- },
989
- // 架构树点击某个节点后,在渲染器中,让组件闪烁
990
- twink (id) {
991
- const allRefs = Object.keys(this.$refs)
992
- allRefs.forEach(ref => {
993
- if (this.$refs[ref].twink) {
994
- this.$refs[ref].twink(id)
995
- }
996
- })
997
- },
998
- // 点击测试按钮
999
- test () {
1000
- // 输出当前配置,和组件注册Map
1001
- console.warn('config', this.config)
1002
- console.warn('map', this.$children[0]._provided.componentsMap)
1003
- },
1004
- // 点击导出按钮
1005
- exportConfig () {
1006
- console.warn('导出', this.config)
1007
- this.$emit('exportConfig', this.config)
1008
- }
1009
- },
1010
- mounted () {
1011
- // 将mixin中已经实现的通用响应方法添加
1012
- this.supportedEventType = [...lowcodeComponentMixin.supportedEventType]
1013
- let cache = {}
1014
- if (!this.originalConfig.config) {
1015
- cache = { page: [] }
1016
- } else {
1017
- cache = JSON.parse(JSON.stringify(this.originalConfig.config))
1018
- }
1019
- // 深拷贝外侧传来的配置
1020
- this.$store.commit('setConfig', cache)
1021
- const tempConfig = {
1022
- page: [
1023
- {
1024
- id: 'page_deowoe',
1025
- type: 'page',
1026
- title: '1',
1027
- body: [
1028
- {
1029
- id: 'page_deowoe_0',
1030
- config: {
1031
- align: 'top',
1032
- gutter: 0,
1033
- justify: 'start'
1034
- },
1035
- type: 'row',
1036
- body: [
1037
- {
1038
- type: 'XFormTable',
1039
- selected: false,
1040
- span: 24,
1041
- id: 'XFormTable_cWmejz',
1042
- props: {
1043
- queryParamsName: 'crud_dictionary_manage',
1044
- serviceName: 'af-system'
1045
- },
1046
- selfEvent: [
1047
- 'action'
1048
- ],
1049
- onEvent: {
1050
- action: [
1051
- {
1052
- emitType: 'action',
1053
- eventType: 'changeProps',
1054
- target: 'XDescriptions_nE5IcB',
1055
- targetKey: 'content'
1056
- },
1057
- {
1058
- emitType: 'action',
1059
- eventType: 'showDraw',
1060
- visible: 'open',
1061
- containerId: 'page_e12Xon'
1062
- }
1063
- ]
1064
- }
1065
- }
1066
- ]
1067
- }
1068
- ]
1069
- },
1070
- {
1071
- id: 'page_e12Xon',
1072
- type: 'draw',
1073
- title: '2',
1074
- width: '70%',
1075
- body: [
1076
- {
1077
- id: 'page_e12Xon_0',
1078
- config: {
1079
- align: 'top',
1080
- gutter: 0,
1081
- justify: 'start'
1082
- },
1083
- type: 'row',
1084
- body: [
1085
- {
1086
- type: 'XDescriptions',
1087
- selected: false,
1088
- span: 24,
1089
- id: 'XDescriptions_nE5IcB',
1090
- props: {
1091
- title: '详情',
1092
- content: {
1093
- d_id: 111,
1094
- d_f_remark: '-',
1095
- d_f_name: '设备区域',
1096
- d_f_key: '设备区域',
1097
- d_f_input_date: '2023-03-20 13:40:54'
1098
- },
1099
- configName: 'test_lowCode_descriptionConfig',
1100
- serviceName: 'af-system',
1101
- getRealData: false
1102
- },
1103
- selfEvent: []
1104
- }
1105
- ]
1106
- },
1107
- {
1108
- id: 'page_e12Xon_1',
1109
- config: {
1110
- align: 'top',
1111
- gutter: 0,
1112
- justify: 'start'
1113
- },
1114
- type: 'row',
1115
- body: [
1116
- {
1117
- type: 'tabs',
1118
- span: 24,
1119
- id: 'Tabs_TFg731',
1120
- props: {},
1121
- body: [
1122
- {
1123
- key: 'Tabs_TFg731_1',
1124
- label: '1',
1125
- type: 'tab',
1126
- body: {
1127
- type: 'container_page',
1128
- span: 24,
1129
- id: 'container_ZX1Ixz',
1130
- page: [
1131
- {
1132
- id: 'container_page_ks',
1133
- type: 'page',
1134
- body: [
1135
- {
1136
- id: 'container_page_ks_0',
1137
- type: 'row',
1138
- config: {
1139
- align: 'top',
1140
- gutter: 0,
1141
- justify: 'start'
1142
- },
1143
- body: [
1144
- {
1145
- type: 'container',
1146
- selected: true,
1147
- span: 24,
1148
- id: 'container_UNOr8I',
1149
- props: {}
1150
- }
1151
- ]
1152
- }
1153
- ]
1154
- }
1155
- ]
1156
- }
1157
- },
1158
- {
1159
- key: '1',
1160
- label: '22',
1161
- type: 'tab',
1162
- body: {
1163
- type: 'container_page',
1164
- span: 24,
1165
- id: 'container_ToXInv',
1166
- page: [
1167
- {
1168
- id: 'container_page_U0',
1169
- type: 'page',
1170
- body: [
1171
- {
1172
- id: 'container_page_U0_0',
1173
- type: 'row',
1174
- config: {
1175
- align: 'top',
1176
- gutter: 0,
1177
- justify: 'start'
1178
- },
1179
- body: [
1180
- {
1181
- type: 'container',
1182
- selected: true,
1183
- span: 24,
1184
- id: 'container_sSWXao',
1185
- props: {}
1186
- }
1187
- ]
1188
- }
1189
- ]
1190
- }
1191
- ]
1192
- }
1193
- }
1194
- ],
1195
- selected: false
1196
- }
1197
- ]
1198
- }
1199
- ]
1200
- }
1201
- ]
1202
- }
1203
- this.$store.commit('setConfig', tempConfig)
1204
- this.refreshOrganization()
1205
- },
1206
- computed: {
1207
- config () {
1208
- return this.$store.state.lowCode.config
1209
- },
1210
- targetContainer () {
1211
- return this.$store.state.lowCode.targetContainer
1212
- }
1213
- }
1214
- }
1215
- </script>
1216
-
1217
- <style scoped lang="less">
1218
-
1219
- </style>
1
+ <template>
2
+ <div>
3
+ <!-- 标题 -->
4
+ <a-card>
5
+ <a-page-header
6
+ title="奥枫低代码前端编辑器"
7
+ sub-title="af-lowcode"
8
+ :backIcon="false"
9
+ @back="() => null"
10
+ >
11
+ <template slot="extra">
12
+ <a-button @click="test">测试</a-button>
13
+ <a-button @click="editModeActive">编辑</a-button>
14
+ <a-button @click="previewModeActive">预览</a-button>
15
+ <a-button type="primary" @click="exportConfig">导出</a-button>
16
+ </template>
17
+ </a-page-header>
18
+ </a-card>
19
+ <!-- 预览模式 -->
20
+ <a-card v-if="preview">
21
+ <LowCodeRender :page-config="config" :edit-mode="false"/>
22
+ </a-card>
23
+ <!-- 编辑模式 -->
24
+ <div v-show="!preview">
25
+ <a-row :gutter="2">
26
+ <!-- 左侧 -->
27
+ <a-col :span="4">
28
+ <a-card>
29
+ <a-tabs>
30
+ <!-- UI库 -->
31
+ <a-tab-pane key="1" tab="UI库">
32
+ <LowCodeUIStore @refresh="refresh"/>
33
+ </a-tab-pane>
34
+ <!-- 页面架构 -->
35
+ <a-tab-pane key="2" tab="架构" style="overflow: scroll">
36
+ <div style="margin-bottom: 3%; width: 200px">
37
+ <LowCodePageOrganization
38
+ :config="filterOrganizationConfig()"
39
+ v-if="showPageOrganization"
40
+ :select-tree-node="selectTreeNode"
41
+ @rename="rename"
42
+ @add="handleTreeAdd"
43
+ @split="handleSplit"
44
+ @pasteItem="handlePasteItem"
45
+ @componentMove="handleTreeDrag"
46
+ @deleteComponent="deleteComponentInTree"
47
+ @treeOrganizationClick="treeOrganizationClick"/>
48
+ </div>
49
+ </a-tab-pane>
50
+ </a-tabs>
51
+ </a-card>
52
+ </a-col>
53
+ <!-- 中间主体编辑器 -->
54
+ <a-col :span="15">
55
+ <a-card>
56
+ <!-- 切换显示的组件 -->
57
+ <div style="margin-bottom: 3%">
58
+ <!-- 添加页面组件按钮 -->
59
+ <div style="float: right">
60
+ <a-popover>
61
+ <template slot="content">
62
+ <p>添加页面组件</p>
63
+ </template>
64
+ <a-button @click="addPageContainer" >
65
+ <a-icon type="plus"/>
66
+ </a-button>
67
+ </a-popover>
68
+ </div>
69
+ <!-- 每个页面按钮切换栏 -->
70
+ <a-menu v-model="mainPageMenu" mode="horizontal" @click="handleMainPageMenuChange">
71
+ <template v-for="(page) in config.page">
72
+ <a-menu-item :key="page.id">{{ page.title + '(' + determinePageType(page.type) + ')' }}</a-menu-item>
73
+ </template>
74
+ </a-menu>
75
+ </div>
76
+ <!-- 渲染器 -->
77
+ <div v-if="activeMainPageType === 'page'">
78
+ <LowCodeRender
79
+ v-if="renderPage"
80
+ ref="page_render"
81
+ @spanDrag="handleDrag"
82
+ @containerDelete="handleContainerDelete"
83
+ @clickComponentInEditor="clickComponentInEditor"
84
+ :page-config="{ data: config.data, page: config.page.filter(page => page.id === activeMainPage)}"/>
85
+ <a-skeleton v-else/>
86
+ </div>
87
+ <div v-if="activeMainPageType === 'modal'">
88
+ <LowCodeRender
89
+ v-if="renderPage"
90
+ ref="modal_render"
91
+ @spanDrag="handleDrag"
92
+ @containerDelete="handleContainerDelete"
93
+ @clickComponentInEditor="clickComponentInEditor"
94
+ :page-config="{ data: config.data, page: config.page.filter(page => page.id === activeMainPage)}"/>
95
+ <a-skeleton v-else/>
96
+ </div>
97
+ <div v-if="activeMainPageType === 'draw'">
98
+ <LowCodeRender
99
+ v-if="renderPage"
100
+ ref="draw_render"
101
+ @spanDrag="handleDrag"
102
+ @containerDelete="handleContainerDelete"
103
+ @clickComponentInEditor="clickComponentInEditor"
104
+ :page-config="{ data: config.data, page: config.page.filter(page => page.id === activeMainPage)}"/>
105
+ <a-skeleton v-else/>
106
+ </div>
107
+ </a-card>
108
+ </a-col>
109
+ <!-- 右侧 -->
110
+ <a-col :span="5">
111
+ <LowCodeEditorPanel
112
+ ref="rightPanel"
113
+ @openModal="openModal"
114
+ @controlRender="controlRender"
115
+ :disable-event-editor="disableEventEditor"
116
+ :editorPropertiesConfig="editorPropertiesConfig"/>
117
+ </a-col>
118
+ </a-row>
119
+ </div>
120
+ <!-- 所有的弹窗,包括:
121
+ 新增页面容器弹框
122
+ 自定义JS函数弹框
123
+ 事件编辑弹框
124
+ 自定义生命周期函数弹框
125
+ 自定义Logic参数JS弹框
126
+ 自定义Logic回调弹框
127
+ 运行目标组件参数编辑弹框
128
+ -->
129
+ <LowCodeEditorModal
130
+ ref="allModal"
131
+ @changeOuterValue="changeOuterValue"
132
+ @refresh="refresh"
133
+ :event-editor-current="eventEditorCurrent"
134
+ :editor-properties-config="editorPropertiesConfig"/>
135
+ </div>
136
+ </template>
137
+
138
+ <script>
139
+ import LowCodeRender from '@vue2-client/base-client/components/common/LowCodeComponent/LowCodeRender.vue'
140
+ import * as lowcodeUtils from '@vue2-client/utils/lowcode/lowcodeUtils'
141
+ import codeMirror from '@vue2-client/components/CodeMirror/inedx.vue'
142
+ import lowcodeComponentMixin from '@vue2-client/utils/lowcode/lowcodeComponentMixin'
143
+ import LowCodePageOrganization from '@vue2-client/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue'
144
+ import LowCodeEditorModal from '@vue2-client/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue'
145
+ import LowCodeUIStore from '@vue2-client/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue'
146
+ import LowCodeEditorPanel from '@vue2-client/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue'
147
+
148
+ export default {
149
+ name: 'LowCodeEditor',
150
+ components: {
151
+ LowCodeEditorModal,
152
+ LowCodePageOrganization,
153
+ LowCodeRender,
154
+ codeMirror,
155
+ LowCodeUIStore,
156
+ LowCodeEditorPanel
157
+ },
158
+ props: {
159
+ // 页面原始的配置,用于从琉璃中读取
160
+ originalConfig: {
161
+ type: Object,
162
+ default: () => {
163
+ return {
164
+ page: []
165
+ }
166
+ }
167
+ }
168
+ },
169
+ data () {
170
+ return {
171
+ // 主体窗口选择的标签
172
+ mainPageMenu: ['none'],
173
+ // 控制是否渲染页面
174
+ preview: false,
175
+ // 控制架构树显隐,用于刷新组件
176
+ showPageOrganization: true,
177
+ // 用于保存右侧编辑组件的属性
178
+ editorPropertiesConfig: {},
179
+ // 用于事件编辑的回显,在点击事件编辑按钮后,会将此变量赋值
180
+ eventEditorCurrent: undefined,
181
+ // 保存目标组件可以触发哪些事件
182
+ supportedEventType: undefined,
183
+ // 保存主体中,当前激活的标签栏ID
184
+ activeMainPage: undefined,
185
+ // 保存主体中,当前激活的标签栏类型
186
+ activeMainPageType: undefined,
187
+ // 指定架构树选中哪个节点
188
+ selectTreeNode: undefined,
189
+ // 禁用事件编辑
190
+ disableEventEditor: false,
191
+ // 控制右侧事件编辑刷新
192
+ showEventEditor: true,
193
+ // 控制渲染器更新
194
+ renderPage: true
195
+ }
196
+ },
197
+ provide () {
198
+ return {
199
+ // 将注册的组件传递给子组件
200
+ componentsMap: {}
201
+ }
202
+ },
203
+ methods: {
204
+ controlRender (flag) {
205
+ this.renderPage = flag
206
+ },
207
+ // 打开弹窗
208
+ openModal (modalName) {
209
+ this.$refs.allModal.changeModalVisible(modalName)
210
+ },
211
+ // 子组件修改父组件的值
212
+ changeOuterValue (key, value) {
213
+ this[key] = value
214
+ },
215
+ // 根据类型刷新组件
216
+ refresh (type) {
217
+ switch (type) {
218
+ case 'Organization':
219
+ this.refreshOrganization()
220
+ return
221
+ case 'eventEditor':
222
+ this.$refs.rightPanel.refresh()
223
+ }
224
+ },
225
+ // 添加页面容器
226
+ addPageContainer () {
227
+ this.$refs.allModal.changeModalVisible('addPage')
228
+ },
229
+ // 架构重命名
230
+ rename (id, newName) {
231
+ const target = lowcodeUtils.getConfig(id, this.config)
232
+ if (target.type === 'page') {
233
+ target.title = newName
234
+ } else {
235
+ target.name = newName
236
+ }
237
+ this.refreshOrganization()
238
+ },
239
+ // 架构树新增
240
+ handleTreeAdd (id, type) {
241
+ // 如果目标是行,则添加容器
242
+ if (type === 'container') {
243
+ // 获取行对象
244
+ const rowConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(id)
245
+ const row = lowcodeUtils.getRowByRowId(rowConfig.pageId, rowConfig.rowIndex, this.config)
246
+ // 如果是空行,直接添加容器
247
+ if (row.body.length === 0) {
248
+ row.body.push(lowcodeUtils.newContainer())
249
+ } else {
250
+ // 如果不是空行,将最后一个元素的span平分给新的容器
251
+ const lastSpan = row.body[row.body.length - 1].span
252
+ const firstSpan = Math.round(lastSpan / 2)
253
+ const newSpan = lastSpan - firstSpan
254
+ row.body[row.body.length - 1].span = firstSpan
255
+ row.body.push(lowcodeUtils.newContainer(newSpan))
256
+ }
257
+ } else {
258
+ // 如果不是行,则添加行
259
+ const page = lowcodeUtils.getPageConfigById(id, this.config)
260
+ page.body.push(
261
+ {
262
+ id: page.id + '_' + page.body.length,
263
+ config: {
264
+ align: 'top',
265
+ gutter: 0,
266
+ justify: 'start'
267
+ },
268
+ type: 'row',
269
+ body: [
270
+ lowcodeUtils.newContainer()
271
+ ]
272
+ }
273
+ )
274
+ }
275
+ this.refreshOrganization()
276
+ },
277
+ // 为架构树过滤配置,只显示当前激活的页面配置
278
+ filterOrganizationConfig () {
279
+ const result = { page: [] }
280
+ this.config.page.forEach(page => {
281
+ if (page.id === this.activeMainPage) {
282
+ result.page.push(page)
283
+ }
284
+ })
285
+ return result
286
+ },
287
+ // 处理拆分
288
+ handleSplit (id, isVertical) {
289
+ // 获取目标对象,目标行和对象在行中的Index
290
+ const target = lowcodeUtils.getComponentConfig(id, this.config)
291
+ const row = lowcodeUtils.getRowConfigByComponentId(id, this.config)
292
+ let index
293
+ for (let i = 0; i < row.body.length; i++) {
294
+ if (row.body[i].id === id) {
295
+ index = i
296
+ break
297
+ }
298
+ }
299
+ // 将目标对象缓存
300
+ const cache = JSON.parse(JSON.stringify(target))
301
+ // 是否为垂直拆分
302
+ if (isVertical) {
303
+ const newPageId = 'container_page_' + lowcodeUtils.nanoidWithoutSymbol(2)
304
+ // 垂直拆分,嵌套page容器
305
+ const temp = {
306
+ type: 'container_page',
307
+ span: cache.span,
308
+ id: 'container_' + lowcodeUtils.nanoidWithoutSymbol(6),
309
+ page: [
310
+ {
311
+ id: newPageId,
312
+ type: 'page',
313
+ body: [
314
+ {
315
+ id: newPageId + '_0',
316
+ type: 'row',
317
+ config: {
318
+ align: 'top',
319
+ gutter: 0,
320
+ justify: 'start'
321
+ },
322
+ body: []
323
+ }
324
+ ]
325
+ }
326
+ ]
327
+ }
328
+ cache.span = 24
329
+ // 第一行放缓存的原始对象
330
+ temp.page[0].body[0].body.push(cache)
331
+ // 第二行新增容器
332
+ temp.page[0].body[1] = {
333
+ id: newPageId + '_1',
334
+ type: 'row',
335
+ config: {
336
+ align: 'top',
337
+ gutter: 0,
338
+ justify: 'start'
339
+ },
340
+ body: []
341
+ }
342
+ temp.page[0].body[1].body.push(lowcodeUtils.newContainer())
343
+ row.body.splice(index, 1, temp)
344
+ } else {
345
+ // 如果是水平拆分
346
+ // 将原先对象span一分为二,添加容器
347
+ const outerSpan = cache.span
348
+ const firstSpan = Math.round(outerSpan / 2)
349
+ const secondSpan = outerSpan - firstSpan
350
+ cache.span = firstSpan
351
+ row.body.splice(index, 1, cache, lowcodeUtils.newContainer(secondSpan))
352
+ }
353
+ this.refreshOrganization()
354
+ },
355
+ // 复制粘贴组件
356
+ handlePasteItem (id, copyCache, type) {
357
+ const target = lowcodeUtils.getConfig(id, this.config)
358
+ // 页面中插入行
359
+ if (type === 'page-row') {
360
+ const content = copyCache.content
361
+ const pageId = target.id
362
+ content.id = pageId + '_' + target.body.length
363
+ target.body.push(content)
364
+ } else if (type === 'row-item') {
365
+ // 行中插入组件
366
+ target.body.push(copyCache.content)
367
+ } else if (type === 'page') {
368
+ // 复制页面
369
+ this.config.page.push(copyCache)
370
+ this.$message.success('复制成功!')
371
+ }
372
+ this.refreshOrganization()
373
+ },
374
+ // 点击架构树
375
+ treeOrganizationClick (id) {
376
+ // 如果是反选
377
+ if (id === null) {
378
+ // 清除编辑框
379
+ this.editorPropertiesConfig = {}
380
+ this.$store.commit('setTargetContainer', undefined)
381
+ // 清除容器select
382
+ lowcodeUtils.unCheckAll(this.config)
383
+ return
384
+ }
385
+ let target
386
+ if (id.includes('container_page')) {
387
+ // 长度大于17证明是容器页面的行
388
+ if (id.length > 17) {
389
+ const rowConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(id)
390
+ target = lowcodeUtils.getRowByRowId(rowConfig.pageId, rowConfig.rowIndex, this.config)
391
+ } else {
392
+ target = lowcodeUtils.getContainerPageOuterByContainerPageId(id, this.config)
393
+ }
394
+ } else {
395
+ // 包含page表示选中的是某一行
396
+ if (id.includes('page')) {
397
+ const rowConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(id)
398
+ target = lowcodeUtils.getRowByRowId(rowConfig.pageId, rowConfig.rowIndex, this.config)
399
+ } else {
400
+ target = lowcodeUtils.getComponentConfig(id, this.config)
401
+ }
402
+ }
403
+ // 将组件选中
404
+ this.clickComponentInEditor(target)
405
+ if (!id.includes('container') && !(id.includes('page') && id.length > 11)) {
406
+ this.twink(id)
407
+ }
408
+ },
409
+ // 架构树拖拽事件
410
+ handleTreeDrag (dragKey, dropKey, dragLevel, dropLevel, dropPosition, dragType) {
411
+ // 只有三种情况可以拖拽
412
+ // 1.平级挪
413
+ // 2.高一级插
414
+ // 3.行插子页面
415
+ let dragEle, rowConfig, father, cache, deleteIndex
416
+
417
+ // 复制移动组件,并将其从原位删除
418
+ switch (dragLevel.type) {
419
+ case 'row':
420
+ rowConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(dragKey)
421
+ father = lowcodeUtils.getPageConfigById(rowConfig.pageId, this.config)
422
+ dragEle = father.body[rowConfig.rowIndex]
423
+ // 复制原始
424
+ cache = JSON.parse(JSON.stringify(dragEle))
425
+ // 删除原始
426
+ deleteIndex = rowConfig.rowIndex
427
+ father.body.splice(deleteIndex, 1, { placeHold: true })
428
+ break
429
+ case 'item':
430
+ father = lowcodeUtils.getRowConfigByComponentId(dragKey, this.config).body
431
+ dragEle = lowcodeUtils.getComponentConfig(dragKey, this.config)
432
+ // 复制原始
433
+ cache = JSON.parse(JSON.stringify(dragEle))
434
+ // 删除原始
435
+ for (let i = 0; i < father.length; i++) {
436
+ const item = father[i]
437
+ if (item.id === dragKey) {
438
+ deleteIndex = i
439
+ break
440
+ }
441
+ }
442
+ father.splice(deleteIndex, 1, { placeHold: true })
443
+ break
444
+ case 'container_page':
445
+ father = lowcodeUtils.getContainerPageRow(dragKey, this.config).body
446
+ dragEle = lowcodeUtils.getContainerPageOuterByContainerPageId(dragKey, this.config)
447
+ // 复制原始
448
+ cache = JSON.parse(JSON.stringify(dragEle))
449
+ // 删除原始
450
+ for (let i = 0; i < father.length; i++) {
451
+ const item = father[i]
452
+ if (item.type === 'container_page' && item.page[0].id === dragKey) {
453
+ deleteIndex = i
454
+ break
455
+ }
456
+ }
457
+ father.splice(deleteIndex, 1, { placeHold: true })
458
+ break
459
+ }
460
+
461
+ let target, dropConfig, targetCache, targetIndex
462
+ switch (dragType) {
463
+ case 'move':
464
+ // 1. 平级挪
465
+ switch (dragLevel.type) {
466
+ case 'row':
467
+ // 移动行
468
+ // 拿到父容器和目标Index
469
+ dropConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(dropKey)
470
+ target = lowcodeUtils.getPageConfigById(dropConfig.pageId, this.config)
471
+ // 保存目标
472
+ targetCache = target.body[dropConfig.rowIndex]
473
+ // 插入
474
+ if (dropPosition < 0) {
475
+ target.body.splice(dropConfig.rowIndex, 1, cache, targetCache)
476
+ } else {
477
+ target.body.splice(dropConfig.rowIndex, 1, targetCache, cache)
478
+ }
479
+ // 清理占位
480
+ for (let i = 0; i < father.body.length; i++) {
481
+ const item = father.body[i]
482
+ if (item.placeHold) {
483
+ father.body.splice(i, 1)
484
+ break
485
+ }
486
+ }
487
+ break
488
+ case 'item':
489
+ // 移动组件
490
+ // 拿到父容器和目标Index
491
+ if (dropLevel.type === 'container_page') {
492
+ target = lowcodeUtils.getContainerPageRow(dropKey, this.config)
493
+ for (let i = 0; i < target.body.length; i++) {
494
+ const item = target.body[i]
495
+ if (item.type === 'container_page' && item.page[0].id === dropKey) {
496
+ targetIndex = i
497
+ break
498
+ }
499
+ }
500
+ } else {
501
+ target = lowcodeUtils.getRowByComponentId(dropKey, this.config)
502
+ for (let i = 0; i < target.body.length; i++) {
503
+ const item = target.body[i]
504
+ if (item.id === dropKey) {
505
+ targetIndex = i
506
+ break
507
+ }
508
+ }
509
+ }
510
+ // 保存目标
511
+ targetCache = target.body[targetIndex]
512
+ // 插入
513
+ if (dropPosition < 0) {
514
+ target.body.splice(targetIndex, 1, cache, targetCache)
515
+ } else {
516
+ target.body.splice(targetIndex, 1, targetCache, cache)
517
+ }
518
+ // 清理占位
519
+ for (let i = 0; i < father.length; i++) {
520
+ const item = father[i]
521
+ if (item.placeHold) {
522
+ father.splice(i, 1)
523
+ break
524
+ }
525
+ }
526
+ if (father.length === 0) {
527
+ father.push(lowcodeUtils.newContainer())
528
+ }
529
+ break
530
+ case 'container_page':
531
+ // 移动容器页面
532
+ // 拿到父容器和目标Index
533
+ if (dropLevel.type === 'container_page') {
534
+ target = lowcodeUtils.getContainerPageRow(dropKey, this.config)
535
+ for (let i = 0; i < target.body.length; i++) {
536
+ const item = target.body[i]
537
+ if (item.type === 'container_page' && item.page[0].id === dropKey) {
538
+ targetIndex = i
539
+ break
540
+ }
541
+ }
542
+ } else {
543
+ target = lowcodeUtils.getRowByComponentId(dropKey, this.config)
544
+ for (let i = 0; i < target.body.length; i++) {
545
+ const item = target.body[i]
546
+ if (item.id === dropKey) {
547
+ targetIndex = i
548
+ break
549
+ }
550
+ }
551
+ }
552
+ // 保存目标
553
+ targetCache = target.body[targetIndex]
554
+ // 插入
555
+ if (dropPosition < 0) {
556
+ target.body.splice(targetIndex, 1, cache, targetCache)
557
+ } else {
558
+ target.body.splice(targetIndex, 1, targetCache, cache)
559
+ }
560
+ // 清理占位
561
+ for (let i = 0; i < father.length; i++) {
562
+ const item = father[i]
563
+ if (item.placeHold) {
564
+ father.splice(i, 1)
565
+ break
566
+ }
567
+ }
568
+ if (father.length === 0) {
569
+ father.push(lowcodeUtils.newContainer())
570
+ }
571
+ }
572
+ break
573
+ case 'higher':
574
+ // 2.高一级插
575
+ switch (dragLevel.type) {
576
+ case 'row':
577
+ // 行插页
578
+ target = lowcodeUtils.getPageConfigById(dropKey, this.config)
579
+ target.body.push(cache)
580
+ for (let i = 0; i < father.body.length; i++) {
581
+ const item = father.body[i]
582
+ if (item.placeHold) {
583
+ father.body.splice(i, 1)
584
+ break
585
+ }
586
+ }
587
+ break
588
+ case 'item':
589
+ // 组件插行
590
+ rowConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(dropKey)
591
+ target = lowcodeUtils.getRowByRowId(rowConfig.pageId, rowConfig.rowIndex, this.config)
592
+ target.body.push(cache)
593
+ for (let i = 0; i < father.length; i++) {
594
+ if (father[i].placeHold) {
595
+ father.splice(i, 1)
596
+ break
597
+ }
598
+ }
599
+ if (father.length === 0) {
600
+ father.push(lowcodeUtils.newContainer())
601
+ }
602
+ break
603
+ case 'container_page':
604
+ // 子页面插行
605
+ rowConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(dropKey)
606
+ target = lowcodeUtils.getRowByRowId(rowConfig.pageId, rowConfig.rowIndex, this.config)
607
+ target.body.push(cache)
608
+ for (let i = 0; i < father.length; i++) {
609
+ if (father[i].placeHold) {
610
+ father.splice(i, 1)
611
+ break
612
+ }
613
+ }
614
+ if (father.length === 0) {
615
+ father.push(lowcodeUtils.newContainer())
616
+ }
617
+ break
618
+ }
619
+ break
620
+ case 'rowToContainer':
621
+ // 3.行插子页面
622
+ target = lowcodeUtils.getContainerPageOuterByContainerPageId(dropKey, this.config)
623
+ target.page[0].body.push(cache)
624
+ for (let i = 0; i < father.body.length; i++) {
625
+ const item = father.body[i]
626
+ if (item.placeHold) {
627
+ father.body.splice(i, 1)
628
+ break
629
+ }
630
+ }
631
+ break
632
+ case 'switch':
633
+ switch (dragLevel.type) {
634
+ case 'row':
635
+ // 拿到父容器和目标Index
636
+ dropConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(dropKey)
637
+ target = lowcodeUtils.getPageConfigById(dropConfig.pageId, this.config)
638
+ // 保存目标
639
+ targetCache = target.body[dropConfig.rowIndex]
640
+ // 替换目标
641
+ target.body.splice(dropConfig.rowIndex, 1, cache)
642
+ // 将目标替换到原始
643
+ for (let i = 0; i < father.body.length; i++) {
644
+ const item = father.body[i]
645
+ if (item.placeHold) {
646
+ father.body.splice(i, 1, targetCache)
647
+ break
648
+ }
649
+ }
650
+ break
651
+ case 'item':
652
+ // 拿到父容器和目标Index
653
+ if (dropLevel.type === 'container_page') {
654
+ target = lowcodeUtils.getContainerPageRow(dropKey, this.config)
655
+ for (let i = 0; i < target.body.length; i++) {
656
+ const item = target.body[i]
657
+ if (item.type === 'container_page' && item.page[0].id === dropKey) {
658
+ targetIndex = i
659
+ break
660
+ }
661
+ }
662
+ } else {
663
+ target = lowcodeUtils.getRowByComponentId(dropKey, this.config)
664
+ for (let i = 0; i < target.body.length; i++) {
665
+ const item = target.body[i]
666
+ if (item.id === dropKey) {
667
+ targetIndex = i
668
+ break
669
+ }
670
+ }
671
+ }
672
+ // 保存目标
673
+ targetCache = target.body[targetIndex]
674
+ // 替换目标
675
+ target.body.splice(targetIndex, 1, cache)
676
+ // 将目标替换到原始
677
+ for (let i = 0; i < father.length; i++) {
678
+ const item = father[i]
679
+ if (item.placeHold) {
680
+ father.splice(i, 1, targetCache)
681
+ break
682
+ }
683
+ }
684
+ break
685
+ case 'container_page':
686
+ // 移动容器页面
687
+ // 拿到父容器和目标Index
688
+ if (dropLevel.type === 'container_page') {
689
+ target = lowcodeUtils.getContainerPageRow(dropKey, this.config)
690
+ for (let i = 0; i < target.body.length; i++) {
691
+ const item = target.body[i]
692
+ if (item.type === 'container_page' && item.page[0].id === dropKey) {
693
+ targetIndex = i
694
+ break
695
+ }
696
+ }
697
+ } else {
698
+ target = lowcodeUtils.getRowByComponentId(dropKey, this.config)
699
+ for (let i = 0; i < target.body.length; i++) {
700
+ const item = target.body[i]
701
+ if (item.id === dropKey) {
702
+ targetIndex = i
703
+ break
704
+ }
705
+ }
706
+ }
707
+ // 保存目标
708
+ targetCache = target.body[targetIndex]
709
+ // 替换目标
710
+ target.body.splice(targetIndex, 1, cache)
711
+ // 将目标替换到原始
712
+ for (let i = 0; i < father.length; i++) {
713
+ const item = father[i]
714
+ if (item.placeHold) {
715
+ father.splice(i, 1, targetCache)
716
+ break
717
+ }
718
+ }
719
+ break
720
+ }
721
+ }
722
+
723
+ this.refreshOrganization()
724
+ },
725
+ // 主页面标签切换
726
+ handleMainPageMenuChange (value) {
727
+ // 如果和之前选择的不一样
728
+ if (value.key !== this.activeMainPage) {
729
+ // 清空属性编辑
730
+ this.editorPropertiesConfig = {}
731
+ this.$store.commit('setTargetContainer', undefined)
732
+ // 切换菜单
733
+ this.activeMainPage = value.key
734
+ for (let i = 0; i < this.config.page.length; i++) {
735
+ if (this.config.page[i].id === this.activeMainPage) {
736
+ this.activeMainPageType = this.config.page[i].type
737
+ this.refreshOrganization()
738
+ return
739
+ }
740
+ }
741
+ }
742
+ },
743
+ // 将页面标签类型渲染为对应的文字
744
+ determinePageType (type) {
745
+ return lowcodeUtils.resolvePageType(type)
746
+ },
747
+ // 刷新架构
748
+ refreshOrganization () {
749
+ this.showPageOrganization = false
750
+ this.$nextTick(() => {
751
+ this.showPageOrganization = true
752
+ })
753
+ },
754
+ // 拖拽完成后,将新的span赋值
755
+ handleDrag (targetEle, nextEle) {
756
+ const target = lowcodeUtils.getComponentConfig(targetEle.id, this.config.page)
757
+ const targetNext = lowcodeUtils.getComponentConfig(nextEle.id, this.config.page)
758
+ target.span = targetEle.span
759
+ targetNext.span = nextEle.span
760
+ },
761
+ // 删除组件
762
+ deleteComponentInTree (id, type) {
763
+ if (type === 'page') {
764
+ const page = lowcodeUtils.getPageConfigById(id, this.config)
765
+ this.deletePage(page)
766
+ } else if (type === 'component') {
767
+ this.deleteComponent(id)
768
+ } else if (type === 'row') {
769
+ this.deleteRow(id)
770
+ } else if (type === 'container_page') {
771
+ this.deleteContainerPage(id)
772
+ }
773
+ },
774
+ // 删除容器页面
775
+ deleteContainerPage (id) {
776
+ const target = lowcodeUtils.getContainerPageOuterByContainerPageId(id, this.config)
777
+ target.type = 'container'
778
+ delete target.page
779
+ this.$store.commit('setTargetContainer', undefined)
780
+ this.editorPropertiesConfig = {}
781
+ this.refreshOrganization()
782
+ },
783
+ // 删除行
784
+ deleteRow (id) {
785
+ const pageId = id.substring(0, id.length - 2)
786
+ const rowId = id.substring(id.length - 1)
787
+ const page = lowcodeUtils.getPageConfigById(pageId, this.config)
788
+ page.body.splice(rowId, 1)
789
+ // 如果该列下没有任何内容,则将该列还原为容器
790
+ if (page.body.length === 0) {
791
+ const outerContainer = lowcodeUtils.getContainerPageOuterByContainerPageId(page.id, this.config)
792
+ outerContainer.type = 'container'
793
+ outerContainer.selected = false
794
+ delete outerContainer.page
795
+ }
796
+ this.$store.commit('setTargetContainer', undefined)
797
+ this.editorPropertiesConfig = {}
798
+ this.refreshOrganization()
799
+ },
800
+ // 删除页面容器
801
+ deletePage (page) {
802
+ // 清空页面下所有组件的注册信息
803
+ page.body.forEach(row => {
804
+ row.body.forEach(item => {
805
+ if (item.type === 'container_page') {
806
+ // 如果是容器页面,递归
807
+ this.deletePage(item.page)
808
+ } else {
809
+ delete this.$children[0]._provided.componentsMap[item.id]
810
+ }
811
+ })
812
+ })
813
+ for (let i = 0; i < this.config.page.length; i++) {
814
+ if (this.config.page[i].id === page.id) {
815
+ this.config.page.splice(i, 1)
816
+ this.$store.commit('setTargetContainer', undefined)
817
+ this.editorPropertiesConfig = {}
818
+ this.refreshOrganization()
819
+ return
820
+ }
821
+ }
822
+ },
823
+ // 删除组件
824
+ deleteComponent (id, addOnSpan = true) {
825
+ const row = lowcodeUtils.getRowConfigByComponentId(id, this.config)
826
+ const target = lowcodeUtils.getComponentConfig(id, this.config)
827
+ const deletedSpan = target.span
828
+ let index
829
+ for (let i = 0; i < row.body.length; i++) {
830
+ if (target.id === row.body[i].id) {
831
+ index = i
832
+ break
833
+ }
834
+ }
835
+ row.body.splice(index, 1)
836
+ if (addOnSpan) {
837
+ // 如果该组件之前还有组件,将该组件的span加给之前的组件
838
+ if (index !== 0) {
839
+ row.body[index - 1].span += deletedSpan
840
+ } else if (row.body.length > 0) {
841
+ row.body[0].span += deletedSpan
842
+ }
843
+ if (row.body[index - 1].span > 24) {
844
+ row.body[index - 1].span = 24
845
+ }
846
+ }
847
+ if (row.body.length === 0) {
848
+ row.body.push(lowcodeUtils.newContainer())
849
+ }
850
+ // 从注册的全局Map中删除
851
+ delete this.$children[0]._provided.componentsMap[id]
852
+ this.$store.commit('setTargetContainer', undefined)
853
+ this.editorPropertiesConfig = {}
854
+ this.refreshOrganization()
855
+ },
856
+ // 容器删除
857
+ handleContainerDelete (id) {
858
+ let index
859
+ const row = lowcodeUtils.getRowConfigByComponentId(id, this.config)
860
+ for (let i = 0; i < row.body.length; i++) {
861
+ const item = row.body[i]
862
+ if (item.id === id) {
863
+ index = i
864
+ break
865
+ }
866
+ }
867
+ row.body.splice(index, 1)
868
+ this.$store.commit('setTargetContainer', undefined)
869
+ // 如果删除后只剩一个容器,将该容器span设置为24
870
+ if (row.body.length === 1) {
871
+ row.body[0].span = 24
872
+ } else if (row.body.length === 0) {
873
+ row.body.push(lowcodeUtils.newContainer())
874
+ }
875
+ this.refreshOrganization()
876
+ },
877
+ // 切换预览模式
878
+ previewModeActive () {
879
+ this.preview = true
880
+ },
881
+ // 切换编辑模式
882
+ editModeActive () {
883
+ this.preview = false
884
+ },
885
+ // 选中某个组件
886
+ clickComponentInEditor (configItem) {
887
+ this.disableEventEditor = false
888
+ if (!configItem) {
889
+ return
890
+ }
891
+ // 同步选中架构
892
+ // 将选中的节点清空,在$nextTick再赋值,保证组件能watch到改变
893
+ this.selectTreeNode = undefined
894
+ if (configItem.type === 'container_page') {
895
+ this.$nextTick(() => {
896
+ this.selectTreeNode = 'container_page_' + configItem.page[0].id
897
+ })
898
+ } else if (configItem.type === 'row' || !configItem.type) {
899
+ const rowConfig = lowcodeUtils.getPageIdAndRowIndexByRowId(configItem.id)
900
+ rowConfig.rowIndex++
901
+ this.$nextTick(() => {
902
+ this.selectTreeNode = 'row_' + rowConfig.pageId + '_' + rowConfig.rowIndex
903
+ })
904
+ } else {
905
+ this.$nextTick(() => {
906
+ this.selectTreeNode = configItem.id
907
+ })
908
+ lowcodeUtils.unCheckAll(this.config)
909
+ }
910
+ this.editorPropertiesConfig = {}
911
+ // 如果选中的是容器
912
+ if (configItem.type === 'container') {
913
+ // 将所有已选中组件取消选择
914
+ lowcodeUtils.unCheckAll(this.config)
915
+ // 将目标设置为选定
916
+ configItem.selected = true
917
+ this.$store.commit('setTargetContainer', configItem)
918
+ this.editorPropertiesConfig = configItem
919
+ this.disableEventEditor = true
920
+ this.editorPropertiesConfig.props = {}
921
+ return
922
+ }
923
+ // 如果选中的是容器页面
924
+ if (configItem.type === 'container_page') {
925
+ // 选中容器页面中所有组件
926
+ lowcodeUtils.unCheckAll(this.config)
927
+ configItem.page.forEach(page => {
928
+ page.body.forEach(row => {
929
+ lowcodeUtils.checkRowAll(row)
930
+ })
931
+ })
932
+ this.editorPropertiesConfig = configItem
933
+ this.disableEventEditor = true
934
+ this.editorPropertiesConfig.props = {}
935
+ return
936
+ }
937
+
938
+ // 如果选中的是行
939
+ if (configItem.type === 'row' || !configItem.type) {
940
+ lowcodeUtils.checkRowAll(configItem, this.config)
941
+ this.editorPropertiesConfig = configItem
942
+ this.disableEventEditor = true
943
+ this.editorPropertiesConfig.props = {}
944
+ return
945
+ }
946
+
947
+ if (configItem.type === 'tabs') {
948
+ console.warn('tabs', configItem)
949
+ this.editorPropertiesConfig = configItem
950
+ this.disableEventEditor = true
951
+ this.editorPropertiesConfig.props = {}
952
+ return
953
+ }
954
+ // 如果是组件对象
955
+ // 拿注册的配置
956
+ const configInJson = lowcodeUtils.getEditorConfigByType(configItem.type)
957
+ if (configInJson) {
958
+ this.editorPropertiesConfig = configItem
959
+ // 为编辑器变量初始化
960
+ if (configInJson.properties) {
961
+ if (!this.editorPropertiesConfig.props) {
962
+ this.editorPropertiesConfig.props = {}
963
+ }
964
+ const editableKeys = Object.keys(configInJson.properties)
965
+ editableKeys.forEach(editableKey => {
966
+ // 如果该值并不存在,则初始化
967
+ if (!this.editorPropertiesConfig.props[editableKey]) {
968
+ this.editorPropertiesConfig.props[editableKey] = ''
969
+ } else {
970
+ if (typeof this.editorPropertiesConfig.props[editableKey] === 'object') {
971
+ this.editorPropertiesConfig.props[editableKey] = JSON.stringify(this.editorPropertiesConfig.props[editableKey])
972
+ }
973
+ }
974
+ })
975
+ }
976
+ // 为编辑器事件初始化
977
+ if (configInJson.selfEvent) {
978
+ if (!this.editorPropertiesConfig.selfEvent) {
979
+ this.editorPropertiesConfig.selfEvent = []
980
+ configInJson.selfEvent.forEach(everyEvent => {
981
+ this.editorPropertiesConfig.selfEvent.push(everyEvent)
982
+ })
983
+ }
984
+ }
985
+ } else {
986
+ this.editorPropertiesConfig = 'unregistered'
987
+ }
988
+ },
989
+ // 架构树点击某个节点后,在渲染器中,让组件闪烁
990
+ twink (id) {
991
+ const allRefs = Object.keys(this.$refs)
992
+ allRefs.forEach(ref => {
993
+ if (this.$refs[ref].twink) {
994
+ this.$refs[ref].twink(id)
995
+ }
996
+ })
997
+ },
998
+ // 点击测试按钮
999
+ test () {
1000
+ // 输出当前配置,和组件注册Map
1001
+ console.warn('config', this.config)
1002
+ console.warn('map', this.$children[0]._provided.componentsMap)
1003
+ },
1004
+ // 点击导出按钮
1005
+ exportConfig () {
1006
+ console.warn('导出', this.config)
1007
+ this.$emit('exportConfig', this.config)
1008
+ }
1009
+ },
1010
+ mounted () {
1011
+ // 将mixin中已经实现的通用响应方法添加
1012
+ this.supportedEventType = [...lowcodeComponentMixin.supportedEventType]
1013
+ let cache = {}
1014
+ if (!this.originalConfig.config) {
1015
+ cache = { page: [] }
1016
+ } else {
1017
+ cache = JSON.parse(JSON.stringify(this.originalConfig.config))
1018
+ }
1019
+ // 深拷贝外侧传来的配置
1020
+ this.$store.commit('setConfig', cache)
1021
+ const tempConfig = {
1022
+ page: [
1023
+ {
1024
+ id: 'page_deowoe',
1025
+ type: 'page',
1026
+ title: '1',
1027
+ body: [
1028
+ {
1029
+ id: 'page_deowoe_0',
1030
+ config: {
1031
+ align: 'top',
1032
+ gutter: 0,
1033
+ justify: 'start'
1034
+ },
1035
+ type: 'row',
1036
+ body: [
1037
+ {
1038
+ type: 'XFormTable',
1039
+ selected: false,
1040
+ span: 24,
1041
+ id: 'XFormTable_cWmejz',
1042
+ props: {
1043
+ queryParamsName: 'crud_dictionary_manage',
1044
+ serviceName: 'af-system'
1045
+ },
1046
+ selfEvent: [
1047
+ 'action'
1048
+ ],
1049
+ onEvent: {
1050
+ action: [
1051
+ {
1052
+ emitType: 'action',
1053
+ eventType: 'changeProps',
1054
+ target: 'XDescriptions_nE5IcB',
1055
+ targetKey: 'content'
1056
+ },
1057
+ {
1058
+ emitType: 'action',
1059
+ eventType: 'showDraw',
1060
+ visible: 'open',
1061
+ containerId: 'page_e12Xon'
1062
+ }
1063
+ ]
1064
+ }
1065
+ }
1066
+ ]
1067
+ }
1068
+ ]
1069
+ },
1070
+ {
1071
+ id: 'page_e12Xon',
1072
+ type: 'draw',
1073
+ title: '2',
1074
+ width: '70%',
1075
+ body: [
1076
+ {
1077
+ id: 'page_e12Xon_0',
1078
+ config: {
1079
+ align: 'top',
1080
+ gutter: 0,
1081
+ justify: 'start'
1082
+ },
1083
+ type: 'row',
1084
+ body: [
1085
+ {
1086
+ type: 'XDescriptions',
1087
+ selected: false,
1088
+ span: 24,
1089
+ id: 'XDescriptions_nE5IcB',
1090
+ props: {
1091
+ title: '详情',
1092
+ content: {
1093
+ d_id: 111,
1094
+ d_f_remark: '-',
1095
+ d_f_name: '设备区域',
1096
+ d_f_key: '设备区域',
1097
+ d_f_input_date: '2023-03-20 13:40:54'
1098
+ },
1099
+ configName: 'test_lowCode_descriptionConfig',
1100
+ serviceName: 'af-system',
1101
+ getRealData: false
1102
+ },
1103
+ selfEvent: []
1104
+ }
1105
+ ]
1106
+ },
1107
+ {
1108
+ id: 'page_e12Xon_1',
1109
+ config: {
1110
+ align: 'top',
1111
+ gutter: 0,
1112
+ justify: 'start'
1113
+ },
1114
+ type: 'row',
1115
+ body: [
1116
+ {
1117
+ type: 'tabs',
1118
+ span: 24,
1119
+ id: 'Tabs_TFg731',
1120
+ props: {},
1121
+ body: [
1122
+ {
1123
+ key: 'Tabs_TFg731_1',
1124
+ label: '1',
1125
+ type: 'tab',
1126
+ body: {
1127
+ type: 'container_page',
1128
+ span: 24,
1129
+ id: 'container_ZX1Ixz',
1130
+ page: [
1131
+ {
1132
+ id: 'container_page_ks',
1133
+ type: 'page',
1134
+ body: [
1135
+ {
1136
+ id: 'container_page_ks_0',
1137
+ type: 'row',
1138
+ config: {
1139
+ align: 'top',
1140
+ gutter: 0,
1141
+ justify: 'start'
1142
+ },
1143
+ body: [
1144
+ {
1145
+ type: 'container',
1146
+ selected: true,
1147
+ span: 24,
1148
+ id: 'container_UNOr8I',
1149
+ props: {}
1150
+ }
1151
+ ]
1152
+ }
1153
+ ]
1154
+ }
1155
+ ]
1156
+ }
1157
+ },
1158
+ {
1159
+ key: '1',
1160
+ label: '22',
1161
+ type: 'tab',
1162
+ body: {
1163
+ type: 'container_page',
1164
+ span: 24,
1165
+ id: 'container_ToXInv',
1166
+ page: [
1167
+ {
1168
+ id: 'container_page_U0',
1169
+ type: 'page',
1170
+ body: [
1171
+ {
1172
+ id: 'container_page_U0_0',
1173
+ type: 'row',
1174
+ config: {
1175
+ align: 'top',
1176
+ gutter: 0,
1177
+ justify: 'start'
1178
+ },
1179
+ body: [
1180
+ {
1181
+ type: 'container',
1182
+ selected: true,
1183
+ span: 24,
1184
+ id: 'container_sSWXao',
1185
+ props: {}
1186
+ }
1187
+ ]
1188
+ }
1189
+ ]
1190
+ }
1191
+ ]
1192
+ }
1193
+ }
1194
+ ],
1195
+ selected: false
1196
+ }
1197
+ ]
1198
+ }
1199
+ ]
1200
+ }
1201
+ ]
1202
+ }
1203
+ this.$store.commit('setConfig', tempConfig)
1204
+ this.refreshOrganization()
1205
+ },
1206
+ computed: {
1207
+ config () {
1208
+ return this.$store.state.lowCode.config
1209
+ },
1210
+ targetContainer () {
1211
+ return this.$store.state.lowCode.targetContainer
1212
+ }
1213
+ }
1214
+ }
1215
+ </script>
1216
+
1217
+ <style scoped lang="less">
1218
+
1219
+ </style>