vue2-client 1.15.91 → 1.15.93

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 (461) hide show
  1. package/.cursorrules +19 -19
  2. package/.env.apply +19 -19
  3. package/.env.gaslink +19 -19
  4. package/.env.his +19 -19
  5. package/.env.liuli +20 -20
  6. package/.env.scada +19 -19
  7. package/.eslintrc.js +90 -90
  8. package/.history/public/his/editor/editor_20250606134713.html +51 -0
  9. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527173925.vue +509 -0
  10. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174316.vue +524 -0
  11. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174419.vue +524 -0
  12. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174422.vue +524 -0
  13. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172825.vue +207 -0
  14. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172945.vue +211 -0
  15. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172949.vue +212 -0
  16. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611173010.vue +212 -0
  17. package/.history/src/base-client/components/common/XForm/XFormItem_20250508134122.vue +1320 -0
  18. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171604.vue +1332 -0
  19. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171613.vue +1331 -0
  20. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171703.vue +1331 -0
  21. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171720.vue +1331 -0
  22. package/.history/src/base-client/components/common/XForm/XFormItem_20250527174327.vue +1339 -0
  23. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612092804.vue +731 -0
  24. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612112546.vue +748 -0
  25. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612113808.vue +748 -0
  26. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115237.vue +1071 -0
  27. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115346.vue +1078 -0
  28. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115350.vue +1077 -0
  29. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115415.vue +1077 -0
  30. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115429.vue +1077 -0
  31. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611091619.vue +442 -0
  32. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092547.vue +442 -0
  33. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092552.vue +442 -0
  34. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092744.vue +475 -0
  35. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092955.vue +475 -0
  36. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092957.vue +475 -0
  37. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095652.vue +477 -0
  38. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095701.vue +477 -0
  39. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095704.vue +477 -0
  40. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100005.vue +473 -0
  41. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100011.vue +473 -0
  42. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100014.vue +473 -0
  43. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100833.vue +473 -0
  44. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100853.vue +473 -0
  45. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100940.vue +473 -0
  46. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101011.vue +473 -0
  47. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101013.vue +473 -0
  48. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101014.vue +473 -0
  49. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101159.vue +473 -0
  50. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101238.vue +474 -0
  51. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101240.vue +474 -0
  52. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101242.vue +474 -0
  53. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101404.vue +472 -0
  54. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101410.vue +472 -0
  55. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101459.vue +472 -0
  56. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101500.vue +472 -0
  57. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101502.vue +472 -0
  58. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101504.vue +472 -0
  59. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101610.vue +501 -0
  60. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101700.vue +501 -0
  61. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101702.vue +501 -0
  62. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101741.vue +504 -0
  63. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101749.vue +504 -0
  64. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101759.vue +504 -0
  65. package/.history/src/base-client/components/his/XHisEditor/dome_20250611091349.vue +131 -0
  66. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105854.vue +160 -0
  67. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105902.vue +160 -0
  68. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105924.vue +160 -0
  69. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105932.vue +158 -0
  70. package/.history/src/base-client/components/his/XList/XList_20250609135848.vue +173 -0
  71. package/.history/src/base-client/components/his/XList/XList_20250609141026.vue +222 -0
  72. package/.history/src/base-client/components/his/XList/XList_20250609141035.vue +229 -0
  73. package/.history/src/base-client/components/his/XList/XList_20250609141103.vue +229 -0
  74. package/.history/src/base-client/components/his/XList/XList_20250609141105.vue +229 -0
  75. package/.history/src/base-client/components/his/XList/XList_20250609141334.vue +241 -0
  76. package/.history/src/base-client/components/his/XList/XList_20250609141404.vue +241 -0
  77. package/.history/src/base-client/components/his/XList/XList_20250609141406.vue +241 -0
  78. package/.history/src/base-client/components/his/XList/XList_20250609141801.vue +245 -0
  79. package/.history/src/base-client/components/his/XList/XList_20250609142033.vue +245 -0
  80. package/.history/src/base-client/components/his/XList/XList_20250609142038.vue +245 -0
  81. package/.history/src/base-client/components/his/XList/XList_20250609142435.vue +255 -0
  82. package/.history/src/base-client/components/his/XList/XList_20250609142503.vue +255 -0
  83. package/.history/src/base-client/components/his/XList/XList_20250609142504.vue +255 -0
  84. package/.history/src/base-client/components/his/XList/XList_20250609143012.vue +270 -0
  85. package/.history/src/base-client/components/his/XList/XList_20250609143044.vue +270 -0
  86. package/.history/src/base-client/components/his/XList/XList_20250609143046.vue +270 -0
  87. package/.history/src/base-client/components/his/XList/XList_20250609143210.vue +270 -0
  88. package/.history/src/base-client/components/his/XList/XList_20250609144339.vue +294 -0
  89. package/.history/src/base-client/components/his/XList/XList_20250609144410.vue +294 -0
  90. package/.history/src/base-client/components/his/XList/XList_20250609144412.vue +294 -0
  91. package/.history/src/base-client/components/his/XList/XList_20250609144647.vue +303 -0
  92. package/.history/src/base-client/components/his/XList/XList_20250609144716.vue +303 -0
  93. package/.history/src/base-client/components/his/XList/XList_20250609144729.vue +303 -0
  94. package/.history/src/base-client/components/his/XList/XList_20250609151232.vue +288 -0
  95. package/.history/src/base-client/components/his/XList/XList_20250609151247.vue +288 -0
  96. package/.history/src/base-client/components/his/XList/XList_20250609151252.vue +288 -0
  97. package/.history/src/base-client/components/his/XList/XList_20250609161220.vue +317 -0
  98. package/.history/src/base-client/components/his/XList/XList_20250609161258.vue +306 -0
  99. package/.history/src/base-client/components/his/XList/XList_20250609161319.vue +306 -0
  100. package/.history/src/base-client/components/his/XList/XList_20250609161320.vue +306 -0
  101. package/.history/src/base-client/components/his/XList/XList_20250704142024.vue +495 -0
  102. package/.history/src/base-client/components/his/XList/XList_20250704142033.vue +495 -0
  103. package/.history/src/base-client/components/his/XList/XList_20250704142040.vue +494 -0
  104. package/.history/src/base-client/components/his/XList/XList_20250704142211.vue +494 -0
  105. package/.history/src/base-client/components/his/XList/XList_20250704142214.vue +494 -0
  106. package/.history/src/base-client/components/his/XList/XList_20250704143010.vue +495 -0
  107. package/.history/src/base-client/components/his/XList/XList_20250704143203.vue +495 -0
  108. package/.history/src/base-client/components/his/XList/XList_20250707095101.vue +492 -0
  109. package/.history/src/base-client/components/his/XList/XList_20250707100152.vue +492 -0
  110. package/.history/src/base-client/components/his/XList/XList_20250707100200.vue +485 -0
  111. package/.history/src/base-client/components/his/XList/XList_20250707100208.vue +485 -0
  112. package/.history/src/base-client/components/his/XList/XList_20250707100259.vue +488 -0
  113. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250609151519.vue +222 -0
  114. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155514.vue +183 -0
  115. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155556.vue +183 -0
  116. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612155600.vue +183 -0
  117. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612181609.vue +206 -0
  118. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250612181629.vue +209 -0
  119. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095553.vue +242 -0
  120. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095610.vue +242 -0
  121. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095612.vue +242 -0
  122. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100041.vue +251 -0
  123. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100047.vue +251 -0
  124. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100054.vue +250 -0
  125. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100105.vue +250 -0
  126. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100107.vue +250 -0
  127. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100114.vue +250 -0
  128. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140844.vue +238 -0
  129. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140910.vue +238 -0
  130. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613140912.vue +238 -0
  131. package/CHANGELOG.md +824 -824
  132. package/Components.md +60 -60
  133. package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +36 -0
  134. package/docs/LowCode/lowcode.md +155 -155
  135. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  136. package/docs/index.md +30 -30
  137. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +6 -0
  138. package/index.js +31 -31
  139. package/jest-transform-stub.js +8 -8
  140. package/jest.setup.js +7 -7
  141. package/jsconfig.json +19 -19
  142. package/package.json +1 -1
  143. package/public/his/editor/editor.html +51 -51
  144. package/public/his/editor/mock/bind_data.html +779 -779
  145. package/public/his/editor/mock/data_table.html +40 -40
  146. package/public/his/editor/mock/sign.html +75 -75
  147. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  148. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  149. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  150. package/public/his/editor/vender/date97/calendar.js +4 -4
  151. package/public/his/editor/vender/date97/lang/en.js +13 -13
  152. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  153. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  154. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  155. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  156. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  157. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  158. package/public/his/editor/vender/diff.js +1627 -1627
  159. package/public/his/editor/vender/editor.js +1 -1
  160. package/public/his/editor/vender/fabric.js +31187 -31187
  161. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  162. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  163. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  164. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  165. package/public/his/editor/vender/mui/mui.min.css +4 -4
  166. package/public/his/editor/vender/mui/mui.min.js +5 -5
  167. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  168. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  169. package/public/his/editor/vender/qrcode.js +7 -7
  170. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  171. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  172. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  173. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  174. package/public/his/editor/vender/validator.js +5094 -5094
  175. package/public/his/editor/vender/weui/weui.css +5659 -5659
  176. package/public/his/editor/vender/weui/weui.min.css +4 -4
  177. package/public/his/editor/vender/weui/weui.min.js +11 -11
  178. package/public/index.html +27 -27
  179. package/src/assets/img/querySlotDemo.svg +15 -15
  180. package/src/assets/svg/badtwo.svg +1 -1
  181. package/src/assets/svg/goodtwo.svg +1 -1
  182. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  183. package/src/base-client/components/AI/demo.vue +31 -31
  184. package/src/base-client/components/TreeList/TreeList.vue +91 -0
  185. package/src/base-client/components/TreeList/TreeNode.vue +81 -0
  186. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  187. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  188. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  189. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  190. package/src/base-client/components/common/CitySelect/index.js +3 -3
  191. package/src/base-client/components/common/CitySelect/index.md +109 -109
  192. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  193. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  194. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  195. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  196. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  197. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  198. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  199. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  200. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  201. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  202. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  203. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  204. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  205. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  206. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  207. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  208. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  209. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  210. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  211. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  212. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  213. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  214. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  215. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  216. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  217. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  218. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  219. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  220. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  221. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  222. package/src/base-client/components/common/Recording/index.js +3 -3
  223. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  224. package/src/base-client/components/common/Tree/index.js +2 -2
  225. package/src/base-client/components/common/Upload/index.js +3 -3
  226. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  227. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  228. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  229. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  230. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  231. package/src/base-client/components/common/XAddReport/index.js +3 -3
  232. package/src/base-client/components/common/XAddReport/index.md +56 -56
  233. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  234. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  235. package/src/base-client/components/common/XButtons/index.js +3 -3
  236. package/src/base-client/components/common/XButtons/index.md +61 -61
  237. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  238. package/src/base-client/components/common/XCardSet/XTiltle.vue +191 -0
  239. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  240. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  241. package/src/base-client/components/common/XDataCard/index.js +3 -3
  242. package/src/base-client/components/common/XDataCard/index.md +1 -1
  243. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  244. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  245. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  246. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  247. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  248. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  249. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  250. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  251. package/src/base-client/components/common/XForm/XFormItem.vue +24 -1
  252. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  253. package/src/base-client/components/common/XForm/index.md +178 -178
  254. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  255. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  256. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  257. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  258. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  259. package/src/base-client/components/common/XFormTable/index.md +92 -92
  260. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  261. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  262. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  263. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  264. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  265. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  266. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  267. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  268. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  269. package/src/base-client/components/common/XPrint/index.vue +97 -97
  270. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  271. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  272. package/src/base-client/components/common/XReport/index.js +3 -3
  273. package/src/base-client/components/common/XReport/print.js +186 -186
  274. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  275. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +4 -3
  276. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  277. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  278. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  279. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  280. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  281. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  282. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  283. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  284. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  285. package/src/base-client/components/common/XStepView/index.js +3 -3
  286. package/src/base-client/components/common/XStepView/index.md +31 -31
  287. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  288. package/src/base-client/components/common/XTab/index.js +3 -3
  289. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  290. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  291. package/src/base-client/components/common/XTable/index.md +255 -255
  292. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  293. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  294. package/src/base-client/components/common/XTree/index.js +3 -3
  295. package/src/base-client/components/common/XTree/index.md +36 -36
  296. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  297. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  298. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  299. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  300. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +52 -2
  301. package/src/base-client/components/his/XHisEditor/dome.vue +144 -0
  302. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  303. package/src/base-client/components/his/XImportExcelButton/XFrontImportExcel.vue +214 -0
  304. package/src/base-client/components/his/XImportExcelButton/XFrontImportExcelDemo.vue +21 -0
  305. package/src/base-client/components/his/XImportExcelButton/XImportExcelButton.vue +103 -0
  306. package/src/base-client/components/his/XList/XList.vue +1 -1
  307. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  308. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  309. package/src/base-client/components/index.js +51 -51
  310. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  311. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  312. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  313. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  314. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  315. package/src/base-client/plugins/Config.js +19 -19
  316. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  317. package/src/base-client/plugins/Recording.js +258 -258
  318. package/src/base-client/plugins/index.js +23 -23
  319. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  320. package/src/components/Charts/Bar.vue +62 -62
  321. package/src/components/Charts/ChartCard.vue +134 -134
  322. package/src/components/Charts/Liquid.vue +67 -67
  323. package/src/components/Charts/MiniArea.vue +39 -39
  324. package/src/components/Charts/MiniBar.vue +39 -39
  325. package/src/components/Charts/MiniProgress.vue +75 -75
  326. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  327. package/src/components/Charts/Radar.vue +68 -68
  328. package/src/components/Charts/RankList.vue +77 -77
  329. package/src/components/Charts/TagCloud.vue +113 -113
  330. package/src/components/Charts/TransferBar.vue +64 -64
  331. package/src/components/Charts/Trend.vue +82 -82
  332. package/src/components/Charts/chart.less +12 -12
  333. package/src/components/Charts/smooth.area.less +13 -13
  334. package/src/components/CodeMirror/inedx.vue +118 -118
  335. package/src/components/CodeMirror/setting.js +40 -40
  336. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  337. package/src/components/NumberInfo/index.js +3 -3
  338. package/src/components/NumberInfo/index.less +54 -54
  339. package/src/components/NumberInfo/index.md +43 -43
  340. package/src/components/card/ChartCard.vue +79 -79
  341. package/src/components/chart/Bar.vue +60 -60
  342. package/src/components/chart/MiniArea.vue +67 -67
  343. package/src/components/chart/MiniBar.vue +59 -59
  344. package/src/components/chart/MiniProgress.vue +57 -57
  345. package/src/components/chart/Radar.vue +80 -80
  346. package/src/components/chart/RankingList.vue +60 -60
  347. package/src/components/chart/Trend.vue +79 -79
  348. package/src/components/chart/index.less +9 -9
  349. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  350. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  351. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  352. package/src/components/checkbox/index.js +9 -9
  353. package/src/components/exception/ExceptionPage.vue +70 -70
  354. package/src/components/g2Charts/constants.js +202 -202
  355. package/src/components/g2Charts/demo.vue +808 -808
  356. package/src/components/g2Charts/designer.vue +228 -228
  357. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  358. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  359. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  360. package/src/components/g2Charts/index.vue +397 -397
  361. package/src/components/index.js +36 -36
  362. package/src/components/input/IInput.vue +66 -66
  363. package/src/components/menu/SideMenu.vue +75 -75
  364. package/src/components/menu/menu.js +273 -273
  365. package/src/components/setting/Setting.vue +234 -234
  366. package/src/components/tool/AStepItem.vue +60 -60
  367. package/src/config/CreateQueryConfig.js +325 -325
  368. package/src/config/default/antd.config.js +89 -89
  369. package/src/config/default/setting.config.js +55 -55
  370. package/src/font-style/font.css +4 -4
  371. package/src/layouts/CommonLayout.vue +56 -56
  372. package/src/layouts/PageLayout.vue +151 -151
  373. package/src/layouts/SinglePageView.vue +136 -136
  374. package/src/layouts/header/AdminHeader.vue +132 -132
  375. package/src/layouts/header/HeaderNotice.vue +177 -177
  376. package/src/layouts/header/InstitutionDetail.vue +181 -181
  377. package/src/layouts/tabs/TabsHead.vue +189 -189
  378. package/src/lib.js +1 -1
  379. package/src/mock/extend/index.js +84 -84
  380. package/src/mock/goods/index.js +108 -108
  381. package/src/pages/DefaultExample/index.vue +77 -77
  382. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  383. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  384. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  385. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  386. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  387. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  388. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  389. package/src/pages/DynamicStatistics/index.vue +282 -282
  390. package/src/pages/Example/childIndex.vue +15 -15
  391. package/src/pages/Example/index.vue +30 -30
  392. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  393. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  394. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  395. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  396. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  397. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  398. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  399. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  400. package/src/pages/Recording/index.vue +77 -77
  401. package/src/pages/ServiceReview/index.vue +284 -284
  402. package/src/pages/SubExample/index.vue +26 -26
  403. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  404. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformationDetails.vue +276 -276
  405. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowListResolution.vue +248 -248
  406. package/src/pages/XReportView/index.vue +64 -64
  407. package/src/pages/XTreeOneProExample/index.vue +67 -67
  408. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  409. package/src/pages/login/Login.vue +380 -380
  410. package/src/pages/login/LoginV3.vue +389 -389
  411. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  412. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  413. package/src/pages/report/ReportTable.js +124 -124
  414. package/src/pages/resourceManage/orgListManage.vue +98 -98
  415. package/src/pages/system/dictionary/index.vue +44 -44
  416. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  417. package/src/pages/system/monitor/operLog/index.vue +37 -37
  418. package/src/pages/system/settings/modifyPassword.vue +117 -117
  419. package/src/pages/system/ticket/index.vue +480 -480
  420. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  421. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  422. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  423. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  424. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  425. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  426. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  427. package/src/plugins/EventLogPlugin.js +33 -33
  428. package/src/plugins/FindParentsData.js +17 -17
  429. package/src/router/async/config.async.js +35 -35
  430. package/src/router/index.js +27 -27
  431. package/src/services/DataModel.js +30 -30
  432. package/src/services/LodopFuncs.js +137 -137
  433. package/src/services/api/TicketDetailsViewApi.js +46 -46
  434. package/src/services/api/cas.js +79 -79
  435. package/src/services/api/common.js +346 -346
  436. package/src/services/api/entity.js +18 -18
  437. package/src/services/api/index.js +17 -17
  438. package/src/store/modules/account.js +115 -115
  439. package/src/store/modules/index.js +5 -5
  440. package/src/store/modules/lowCode.js +33 -33
  441. package/src/store/modules/setting.js +119 -119
  442. package/src/theme/default/style.less +58 -58
  443. package/src/utils/authority-utils.js +85 -85
  444. package/src/utils/errorCode.js +6 -6
  445. package/src/utils/excel/Export2Excel.js +43 -0
  446. package/src/utils/formatter.js +74 -74
  447. package/src/utils/htmlToPDF.js +108 -108
  448. package/src/utils/htmlToPDFApi.js +5 -5
  449. package/src/utils/login.js +188 -188
  450. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  451. package/src/utils/lowcode/lowcodeLog.js +29 -29
  452. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  453. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  454. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  455. package/src/utils/map-utils.js +47 -47
  456. package/src/utils/reg.js +95 -95
  457. package/src/utils/runEvalFunction.js +14 -14
  458. package/src/utils/theme-color-replacer-extend.js +92 -92
  459. package/src/utils/util.js +329 -329
  460. package/src/utils/waterMark.js +31 -31
  461. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,728 +1,728 @@
1
- <template>
2
- <div style="width: 100%">
3
- <template v-for="(page,pageIndex) in pageConfig.page">
4
- <!-- 拖拽时显示的临时容器 -->
5
- <template v-if="showDragSpan">
6
- <div style="display: flex" :key="pageIndex">
7
- <template v-for="item in dragConfig">
8
- <div class="container" style="font-size: 1.5em" :key="item.id" :style="'width:' + item.width + 'px'">
9
- 宽度:{{ item.span }}
10
- </div>
11
- </template>
12
- </div>
13
- </template>
14
- <!-- 渲染器主体 -->
15
- <template v-for="(row,rowIndex) in page.body">
16
- <a-row
17
- :key="pageIndex + '_' + rowIndex"
18
- type="flex"
19
- :justify="row.config.justify"
20
- :gutter="row.config.gutter"
21
- :align="row.config.align">
22
- <template v-if="!showDragSpan">
23
- <template v-for="(item, itemIndex) in row.body">
24
- <a-col :span="item.span" :key="item.id">
25
- <!-- 显示容器 -->
26
- <div
27
- v-if="item.type === 'container' && editMode"
28
- style="display: flex;align-items: center"
29
- @click="clickComponentInEditor(item)">
30
- <div :class="item.selected ? 'selected_container' : 'container'">
31
- <div>
32
- <p style="font-size: 1.5em">宽度:{{ item.span }}</p>
33
- </div>
34
- <div>
35
- <a-button @click.stop="handelContainerDelete(item.id, pageIndex)">删除</a-button>
36
- </div>
37
- </div>
38
- <div
39
- v-if="itemIndex !== row.body.length - 1"
40
- style="width: 6px;font-size: 1em;color: rgb( 24,144,255)"
41
- class="dragDiv"
42
- @mousedown="dragStart($event, item.id, row)">
43
- || <br> ||
44
- </div>
45
- </div>
46
- <!-- 显示Tab容器 -->
47
- <div
48
- v-else-if="item.type === 'tabs'">
49
- <a-tabs>
50
- <template v-for="(tab) in item.body">
51
- <a-tab-pane :key="tab.key" :tab="tab.label">
52
- <LowCodeRender
53
- ref="sub"
54
- :is-root="false"
55
- @showDraw="handelSubShowDraw"
56
- @showModal="handelSubShowModal"
57
- v-if="renderSub"
58
- @spanDrag="handleDrag"
59
- @containerDelete="handleContainerDelete"
60
- @clickComponentInEditor="clickComponentInner"
61
- :page-config="tab.body"
62
- :edit-mode="editMode"/>
63
- </a-tab-pane>
64
- </template>
65
- </a-tabs>
66
- </div>
67
- <!-- 递归显示页面容器 -->
68
- <div
69
- v-else-if="item.type === 'container_page'"
70
- style="display: flex;align-items: center">
71
- <LowCodeRender
72
- ref="sub"
73
- :is-root="false"
74
- @showDraw="handelSubShowDraw"
75
- @showModal="handelSubShowModal"
76
- v-if="renderSub"
77
- @spanDrag="handleDrag"
78
- @containerDelete="handleContainerDelete"
79
- @clickComponentInEditor="clickComponentInner"
80
- :page-config="item"
81
- :edit-mode="editMode"/>
82
- <div
83
- v-if="itemIndex !== row.body.length - 1"
84
- style="width: 6px;font-size: 1em;color: rgb( 24,144,255);"
85
- class="dragDiv"
86
- @mousedown="dragStart($event, item.id, row)">
87
- || <br> ||
88
- </div>
89
- </div>
90
- <!-- 页面渲染 / 编辑模式中,将弹框或抽屉中的内容渲染为页面 -->
91
- <div :ref="item.id" :id="item.id" v-else-if="editMode || (page.type !== 'modal' && page.type !== 'draw')">
92
- <div
93
- @click="clickComponentInEditor(item)"
94
- :class=" editMode ? 'componentInEditor' : '' ">
95
- <component
96
- v-if="checkComponentRequiredProps(item.type, item.props)"
97
- :lifeCycleFunction="resolveLifeCycleEvent(item)"
98
- :is="resolveComponentType(item.type, item.id)"
99
- :propsData="{...item.props}"
100
- @componentDidMounted="componentDidMounted"
101
- @onEvent="handleEvent"
102
- :mixinComponentId="item.id"/>
103
- <div v-else class="propsNotFixedComponent">
104
- <p style="line-height: 200px; text-align: center; font-size: 2em; margin: 0">{{ item.type }}</p>
105
- <p style="text-align: center; font-size: 1.2em">必填参数未设置完全!暂停渲染</p>
106
- </div>
107
- </div>
108
- </div>
109
- </a-col>
110
- </template>
111
- </template>
112
- </a-row>
113
- </template>
114
- </template>
115
- <!-- 弹框渲染 -->
116
- <template v-for="(modal, modalIndex) in pageConfig.page.filter(page => page.type === 'modal')">
117
- <a-modal
118
- :key="'modalIndex_' + modalIndex"
119
- :title="modal.title"
120
- :width="modal.width"
121
- :dialog-style="{ top: '5rem' }"
122
- :visible="modalVisible[modal.id]"
123
- :z-index="1003"
124
- :maskClosable="false"
125
- @cancel="closeModalOrDraw(modal.id, 'modal')"
126
- :destroyOnClose="true">
127
- <template v-for="(row, rowIndex) in modal.body">
128
- <template v-for="(item, itemIndex) in row.body">
129
- <div v-if="item.type === 'tabs'" :key="'modalItem_' + rowIndex + '_' + itemIndex">
130
- <h1>tabssssss</h1>
131
- </div>
132
- <div v-else :key="'modalItem_' + rowIndex + '_' + itemIndex">
133
- <component
134
- v-if="checkComponentRequiredProps(item.type, item.props)"
135
- :lifeCycleFunction="resolveLifeCycleEvent(item)"
136
- :is="resolveComponentType(item.type)"
137
- :propsData="{...item.props, showModalOrDraw: false}"
138
- @componentDidMounted="componentDidMounted"
139
- @onEvent="handleEvent"
140
- :mixinComponentId="item.id"/>
141
- <div v-else class="propsNotFixedComponent">
142
- <p style="line-height: 200px; text-align: center; font-size: 2em; margin: 0">{{ item.type }}</p>
143
- <p style="text-align: center; font-size: 1.2em">必填参数未设置完全!暂停渲染</p>
144
- </div>
145
- </div>
146
- </template>
147
- </template>
148
- </a-modal>
149
- </template>
150
- <!-- 抽屉渲染 -->
151
- <template v-for="(draw, drawIndex) in pageConfig.page.filter(page => page.type === 'draw')">
152
- <a-drawer
153
- :key="'drawIndex_' + drawIndex"
154
- :title="draw.title"
155
- :width="draw.width"
156
- :visible="drawVisible[draw.id]"
157
- :z-index="1003"
158
- @close="closeModalOrDraw(draw.id, 'draw')"
159
- :destroyOnClose="true">
160
- <template v-for="(row, rowIndex) in draw.body">
161
- <template v-for="(item, itemIndex) in row.body">
162
- <div v-if="item.type === 'tabs'" :key="'drawItem_' + rowIndex + '_' + itemIndex">
163
- <h1>tabssssss</h1>
164
- </div>
165
- <div v-else :key="'drawItem_' + rowIndex + '_' + itemIndex">
166
- <component
167
- v-if="checkComponentRequiredProps(item.type, item.props)"
168
- :lifeCycleFunction="resolveLifeCycleEvent(item)"
169
- :is="resolveComponentType(item.type)"
170
- :propsData="{...item.props, showModalOrDraw: false}"
171
- @componentDidMounted="componentDidMounted"
172
- @onEvent="handleEvent"
173
- :mixinComponentId="item.id"/>
174
- <div v-else class="propsNotFixedComponent">
175
- <p style="line-height: 200px; text-align: center; font-size: 2em; margin: 0">{{ item.type }}</p>
176
- <p style="text-align: center; font-size: 1.2em">必填参数未设置完全!暂停渲染</p>
177
- </div>
178
- </div>
179
- </template>
180
- </template>
181
- </a-drawer>
182
- </template>
183
- </div>
184
- </template>
185
-
186
- <script>
187
- // eslint-disable-next-line no-unused-vars
188
- import Vue from 'vue'
189
- import * as allComponents from '@vue2-client/utils/lowcode/registerComponentForRender'
190
- import lowcodeLog from '@vue2-client/utils/lowcode/lowcodeLog'
191
- import * as lowcodeUtils from '@vue2-client/utils/lowcode/lowcodeUtils'
192
- import { runLogic } from '@vue2-client/services/api/common'
193
-
194
- export default {
195
- name: 'LowCodeRender',
196
- props: {
197
- // 页面配置
198
- pageConfig: {
199
- type: Object,
200
- required: true
201
- },
202
- // 是否为编辑模式
203
- editMode: {
204
- type: Boolean,
205
- default: true
206
- },
207
- // 用于标识渲染器是否为顶级渲染器
208
- // 非顶级渲染器在控制弹框、抽屉显隐的时候需要emit而不是修改值
209
- isRoot: {
210
- type: Boolean,
211
- default: true
212
- }
213
- },
214
- data () {
215
- return {
216
- // 传递给组件的Props合集
217
- propsData: {},
218
- // 是否为拖拽模式
219
- showDragSpan: false,
220
- // 拖拽的缓存
221
- dragConfig: [],
222
- // 记录拖拽位移单位量
223
- beforeSpanThrough: -1,
224
- // 记录拖拽之前的span
225
- originalSpan: -1,
226
- // 记录拖拽目标下一个元素的原始span
227
- nextOriginalSpan: -1,
228
- // 弹框显示集合
229
- modalVisible: {},
230
- // 抽屉显示集合
231
- drawVisible: {},
232
- // 控制递归渲染
233
- renderSub: true,
234
- // 用于控制组件外框闪烁
235
- colClassName: '',
236
- // 控制容器渲染,用于递归时,刷新递归中容器的状态
237
- showContainer: true,
238
- // 控制闪烁的定时器
239
- twinkTimer: undefined,
240
- // 缓存正在闪烁的组件,用于还原状态
241
- twinkBefore: undefined
242
- }
243
- },
244
- inject: [
245
- 'componentsMap'
246
- ],
247
- mounted () {
248
- // 初始化控制弹框和抽屉的变量合集
249
- this.pageConfig.page.forEach(page => {
250
- if (page.type === 'modal') {
251
- this.modalVisible[page.id] = false
252
- } else if (page.type === 'draw') {
253
- this.drawVisible[page.id] = false
254
- }
255
- })
256
- },
257
- methods: {
258
- // 检查组件必要的props是否全部满足
259
- checkComponentRequiredProps (type, props) {
260
- if (type === 'container') {
261
- return true
262
- }
263
- const propertiesDef = lowcodeUtils.getEditorConfigByType(type).properties
264
- const defKeys = Object.keys(propertiesDef)
265
- const requiredProps = []
266
- defKeys.forEach(key => {
267
- if (propertiesDef[key].required) {
268
- requiredProps.push(key)
269
- }
270
- })
271
- for (let i = 0; i < requiredProps.length; i++) {
272
- const eachRequired = requiredProps[i]
273
- if (props[eachRequired] === undefined || props[eachRequired] === '' || props[eachRequired] === null) {
274
- return false
275
- }
276
- }
277
- return true
278
- },
279
- // 用于控制递归渲染器中的修改抽屉显隐
280
- handelSubShowDraw (id, visible) {
281
- this.drawVisible[id] = visible === 'open'
282
- this.$forceUpdate()
283
- lowcodeLog(
284
- id,
285
- '修改抽屉可见性',
286
- visible === 'open' ? '可见' : '隐藏',
287
- false,
288
- true
289
- )
290
- },
291
- // 用于控制递归渲染器中的修改弹框显隐
292
- handelSubShowModal (id, visible) {
293
- this.modalVisible[id] = visible === 'open'
294
- this.$forceUpdate()
295
- lowcodeLog(
296
- id,
297
- '修改弹窗可见性',
298
- visible === 'open' ? '可见' : '隐藏',
299
- false,
300
- true
301
- )
302
- },
303
- // 将钩子函数格式化成mixin的格式并传入
304
- resolveLifeCycleEvent (config) {
305
- if (!config.onEvent || !config.onEvent.lifeCycle) {
306
- return undefined
307
- } else {
308
- const result = []
309
- const lifeCycle = config.onEvent.lifeCycle
310
- lifeCycle.forEach(item => {
311
- result.push({
312
- lifeCycleName: item.lifeCycle,
313
- functionStr: item.LifeCycleFunction
314
- })
315
- })
316
- return result
317
- }
318
- },
319
- // 关闭弹窗或抽屉
320
- closeModalOrDraw (id, type) {
321
- if (type === 'modal') {
322
- this.modalVisible[id] = false
323
- } else if (type === 'draw') {
324
- this.drawVisible[id] = false
325
- }
326
- this.$forceUpdate()
327
- },
328
- // 递归拖拽完成后的回调
329
- handleDrag (targetEle, nextEle) {
330
- this.$emit('spanDrag', targetEle, nextEle)
331
- },
332
- // 递归容器删除后的回调
333
- handleContainerDelete (id) {
334
- this.$emit('containerDelete', id)
335
- },
336
- // 刷新递归的渲染器
337
- refreshSubRender () {
338
- this.renderSub = false
339
- this.$nextTick(() => {
340
- this.renderSub = true
341
- })
342
- },
343
- // 刷新递归容器
344
- refreshSubContainer () {
345
- this.showContainer = false
346
- this.$nextTick(() => {
347
- this.showContainer = true
348
- })
349
- },
350
- // 递归点击组件后的回调
351
- clickComponentInner (configItem) {
352
- this.$emit('clickComponentInEditor', configItem, this)
353
- },
354
- // 拖拽改变Span
355
- dragStart (event, id, row) {
356
- // 获取目标html元素
357
- const targetElement = event.srcElement
358
- // 获取外层元素用于计算总宽度
359
- const outerElement = targetElement.parentNode.parentNode.parentNode
360
- const outerWidth = outerElement.offsetWidth
361
- // 计算每一个span对应的像素
362
- const outerSpanWidth = outerWidth / 24
363
-
364
- // 记录初始X
365
- const startX = event.clientX
366
-
367
- // 记录兄弟元素
368
- const targetElementBros = outerElement.childNodes
369
-
370
- let targetComponent
371
- let targetNextComponent
372
-
373
- // 缓存拖拽组件,用于显示拖拽时的实时Span,拖拽完成后再统一赋值
374
- this.dragConfig = []
375
- for (let i = 0; i < row.body.length; i++) {
376
- this.dragConfig.push({
377
- id: row.body[i].id,
378
- span: row.body[i].span,
379
- width: targetElementBros[i].offsetWidth
380
- })
381
- }
382
-
383
- this.showDragSpan = true
384
-
385
- // 保存目标容器,和目标的下一个容器,用于改变宽度
386
- for (let i = 0; i < this.dragConfig.length; i++) {
387
- const item = this.dragConfig[i]
388
- if (item.id === id) {
389
- targetComponent = this.dragConfig[i]
390
- targetNextComponent = this.dragConfig[i + 1]
391
- }
392
- }
393
-
394
- // 如果鼠标之后没有组件,禁止移动
395
- if (!targetComponent || !targetNextComponent) {
396
- this.$message.error('单个组件无法移动!')
397
- this.showDragSpan = false
398
- return
399
- }
400
-
401
- // 保存原始的像素宽度
402
- const orignalTargetWidth = targetComponent.width
403
- const orignalTargetNextWidth = targetNextComponent.width
404
-
405
- // 保存原始的span
406
- this.originalSpan = targetComponent.span
407
- this.nextOriginalSpan = targetNextComponent.span
408
-
409
- // 拖拽事件
410
- const onDrag = (e) => {
411
- // 计算出移动的像素数
412
- let deltaX = e.clientX - startX
413
- // 判断移动方向
414
- let direction = 1
415
- if (deltaX < 0) {
416
- direction = -1
417
- deltaX = 0 - deltaX
418
- }
419
-
420
- // 根据移动像素数计算出移动了多少个span
421
- const throughSpanNum = Math.floor(deltaX / outerSpanWidth)
422
- if (this.beforeSpanThrough === -1) {
423
- this.beforeSpanThrough = throughSpanNum
424
- }
425
-
426
- // 将移动的距离更新到临时显示的span中
427
- if (direction > 0) {
428
- targetComponent.width = orignalTargetWidth + deltaX
429
- targetNextComponent.width = orignalTargetNextWidth - deltaX
430
- if (this.beforeSpanThrough !== throughSpanNum) {
431
- this.beforeSpanThrough = throughSpanNum
432
- targetComponent.span = this.originalSpan + throughSpanNum
433
- targetNextComponent.span = this.nextOriginalSpan - throughSpanNum
434
- }
435
- } else {
436
- targetComponent.width = orignalTargetWidth - deltaX
437
- targetNextComponent.width = orignalTargetNextWidth + deltaX
438
- if (this.beforeSpanThrough !== throughSpanNum) {
439
- this.beforeSpanThrough = throughSpanNum
440
- targetComponent.span = this.originalSpan - throughSpanNum
441
- targetNextComponent.span = this.nextOriginalSpan + throughSpanNum
442
- }
443
- }
444
- }
445
-
446
- // 拖拽结束
447
- const dragEnd = (e) => {
448
- // 解绑事件,更新数据
449
- this.showDragSpan = false
450
- document.removeEventListener('mouseup', dragEnd)
451
- document.removeEventListener('mousemove', onDrag)
452
- this.$emit('spanDrag', targetComponent, targetNextComponent)
453
- }
454
-
455
- // 绑定拖拽事件和结束事件
456
- document.addEventListener('mouseup', dragEnd)
457
- document.addEventListener('mousemove', onDrag)
458
- },
459
- // 解析配置中的type,找出对应的渲染器
460
- resolveComponentType (type, componentId) {
461
- // 从组件注册中拿到所有注册的组件
462
- const allComponentKeys = Object.keys(allComponents)
463
- for (let i = 0; i < allComponentKeys.length; i++) {
464
- const keyStr = allComponentKeys[i].toString()
465
- if (type === keyStr) {
466
- return allComponents[keyStr]
467
- }
468
- }
469
- },
470
- // mixin中组件mounted后的回调
471
- componentDidMounted (vm, id) {
472
- // 将组件注册到全局的Map中
473
- if (vm && id) {
474
- this.componentsMap[id] = vm
475
- }
476
- // 如果组件中有props,将其挨个set到vm中
477
- const config = lowcodeUtils.getComponentConfig(id, this.pageConfig)
478
- const keys = Object.keys(config.props)
479
- keys.forEach(key => {
480
- if (config.props[key] !== undefined && config.props[key] !== '') {
481
- Vue.set(vm, key, config.props[key])
482
- }
483
- })
484
- },
485
- // 点击组件
486
- clickComponentInEditor (configItem) {
487
- this.$emit('clickComponentInEditor', configItem, this)
488
- },
489
- // 删除容器
490
- handelContainerDelete (id, pageIndex) {
491
- this.$emit('containerDelete', id, pageIndex)
492
- },
493
- // 处理组件的事件
494
- handleEvent (data, eventTiggerType, id) {
495
- // 找到目标对象的配置
496
- const targetConfig = lowcodeUtils.getComponentConfig(id, this.pageConfig.page)
497
- // 找到目标对象对应触发事件的配置
498
- const eventConfigs = targetConfig.onEvent[eventTiggerType]
499
-
500
- if (!eventConfigs) {
501
- return
502
- }
503
-
504
- const vm = this.componentsMap[id]
505
- lowcodeLog(
506
- ` 事件数据:${data} \n 源组件: ${id}`,
507
- '触发事件',
508
- eventTiggerType,
509
- true
510
- )
511
-
512
- let targetComponentId = ''
513
-
514
- // 遍历该类型触发事件,挨个执行
515
- eventConfigs.forEach(eachEvent => {
516
- lowcodeLog(
517
- ` 事件数据:${data} \n 目标组件: ${targetComponentId}`,
518
- '开始遍历执行事件',
519
- eachEvent.eventType,
520
- false
521
- )
522
- // 修改弹窗显隐
523
- if (eachEvent.eventType === 'showDraw') {
524
- // 如果不是顶级渲染器,则向外抛出事件
525
- if (!this.isRoot) {
526
- this.$emit('showDraw', eachEvent.containerId, eachEvent.visible)
527
- } else {
528
- this.drawVisible[eachEvent.containerId] = eachEvent.visible === 'open'
529
- this.$forceUpdate()
530
- lowcodeLog(
531
- eachEvent.containerId,
532
- '修改抽屉可见性',
533
- eachEvent.visible === 'open' ? '可见' : '隐藏',
534
- false,
535
- true
536
- )
537
- }
538
- } else if (eachEvent.eventType === 'showModal') {
539
- // 修改抽屉显隐
540
- // 如果不是顶级渲染器,则向外抛出事件
541
- if (!this.isRoot) {
542
- this.$emit('showModal', eachEvent.containerId, eachEvent.visible)
543
- } else {
544
- this.modalVisible[eachEvent.containerId] = eachEvent.visible === 'open'
545
- this.$forceUpdate()
546
- lowcodeLog(
547
- eachEvent.containerId,
548
- '修改弹窗可见性',
549
- eachEvent.visible === 'open' ? '可见' : '隐藏',
550
- false,
551
- true
552
- )
553
- }
554
- } else if (eachEvent.eventType === 'customJSFunction') {
555
- const targetVM = this.componentsMap[eachEvent.target]
556
- // eslint-disable-next-line no-eval
557
- const customFunction = eval('(' + eachEvent.JSFunction + ')')
558
- customFunction(eachEvent.eventType, data, targetVM, vm)
559
- lowcodeLog(
560
- undefined,
561
- '执行自定义函数完成',
562
- undefined,
563
- false,
564
- true
565
- )
566
- } else if (eachEvent.eventType === 'runLogic') {
567
- // 运行Logic
568
- // eslint-disable-next-line no-eval
569
- const logicCallBackFunction = eval('(' + eachEvent.logicCallBackFunction + ')')
570
- // eslint-disable-next-line no-eval
571
- const logicParamFunction = eval('(' + eachEvent.logicParamFunction + ')')
572
- // 将需要的组件变量组织好,并传递给函数
573
- const componentData = {}
574
- const allComponents = Object.keys(this.componentsMap)
575
- allComponents.forEach(component => {
576
- componentData[component] = this.componentsMap[component].dataForLowCode
577
- })
578
- const param = logicParamFunction(componentData, data)
579
- lowcodeLog(
580
- JSON.stringify(param),
581
- '执行Logic',
582
- eachEvent.logicName,
583
- false,
584
- true
585
- )
586
- runLogic(eachEvent.logicName, param, eachEvent.serviceName)
587
- .then(res => { logicCallBackFunction(this.componentsMap, res) })
588
- } else if (eachEvent.eventType === 'changeProps') {
589
- // 修改组件props
590
- const targetConfig = lowcodeUtils.getComponentConfig(eachEvent.target, this.pageConfig.page)
591
- targetConfig.props[eachEvent.targetKey] = data
592
- lowcodeLog(
593
- `目标key:${eachEvent.targetKey},新的值:${JSON.stringify(data)}`,
594
- '修改Props',
595
- targetConfig.id,
596
- false,
597
- true
598
- )
599
- } else if (eachEvent.eventType === 'log') {
600
- // 打印日志
601
- lowcodeLog(
602
- JSON.stringify(data),
603
- '打印日志',
604
- targetConfig.id,
605
- false,
606
- true
607
- )
608
- } else if (eachEvent.eventType === 'runFunction') {
609
- // 修改组件的值
610
- // 寻找target
611
- targetComponentId = eachEvent.target
612
- const targetVM = this.componentsMap[targetComponentId]
613
- // 调用函数获取参数
614
- // eslint-disable-next-line no-eval
615
- const paramFunction = eval('(' + eachEvent.runFunctionParam + ')')
616
- const params = paramFunction(vm, data)
617
- // 执行
618
- targetVM[eachEvent.eventType](...params)
619
- lowcodeLog(
620
- JSON.stringify(data),
621
- '执行目标方法完成',
622
- eachEvent.eventType,
623
- false,
624
- true
625
- )
626
- }
627
- })
628
- },
629
- // 组件闪烁
630
- twink (id) {
631
- // 如果组件不在本层渲染器,则向下递归
632
- if (this.$refs[id] === undefined || this.$refs[id].length === 0) {
633
- if (this.$refs.sub) {
634
- this.$refs.sub[0].twink(id)
635
- }
636
- } else {
637
- const _this = this
638
- // 将之前闪烁的组件还原,避免在classname赋值以后打断动画,样式被保留
639
- if (this.twinkBefore) {
640
- this.twinkBefore.className = ''
641
- }
642
- this.twinkBefore = this.$refs[id][0]
643
- // 如果存在定时器则将之前的动画打断
644
- if (!this.twinkTimer) {
645
- this.twinkTimer = []
646
- } else {
647
- this.twinkTimer.forEach(timer => {
648
- clearTimeout(timer)
649
- })
650
- }
651
- // 定义关键帧间隔
652
- const frame = 400
653
- this.$refs[id][0].className = 'colWithBorder'
654
- for (let i = 1; i <= 3; i++) {
655
- const timer = setTimeout(() => {
656
- if (i % 2 !== 0) {
657
- _this.$refs[id][0].className = ''
658
- } else {
659
- _this.$refs[id][0].className = 'colWithBorder'
660
- }
661
- }, frame * i)
662
- this.twinkTimer.push(timer)
663
- }
664
- }
665
- }
666
- },
667
- watch: {
668
- pageConfig: {
669
- handler (newVal) {
670
- },
671
- deep: true
672
- }
673
- }
674
- }
675
- </script>
676
-
677
- <style scoped>
678
- .componentInEditor{
679
- border: none;
680
- }
681
- .componentInEditor:hover{
682
- border: 2px rgb( 24,144,255) solid;
683
- box-shadow: 3px 3px 5px 1px rgba(0,0,0,0.2);
684
- }
685
- .colWithBorder{
686
- border: 2px rgb( 24,144,255) solid;
687
- box-shadow: 3px 3px 5px 1px rgba(0,0,0,0.2);
688
- }
689
- .container{
690
- display: flex;
691
- flex-direction: column;
692
- align-items: center;
693
- justify-content: space-evenly;
694
- width: calc(100% - 6px);
695
- height: 50vh;
696
- border: rgba( 24,144,255, 0.2) 2px solid;
697
- background-color: rgba(24, 144, 255, 0.05);
698
- }
699
- .selected_container{
700
- display: flex;
701
- flex-direction: column;
702
- align-items: center;
703
- justify-content: space-evenly;
704
- width: calc(100% - 6px);
705
- height: 50vh;
706
- border: rgba( 24,144,255, 0.2) 2px solid;
707
- background-color: rgba( 24,144,255, 0.2);
708
- }
709
- .colSpanSuit{
710
- color: green;
711
- font-size: 1.5em;
712
- }
713
- .colSpanNotSuit{
714
- color: red;
715
- font-size: 1.5em;
716
- }
717
- .dragDiv:hover{
718
- cursor: w-resize;
719
- z-index: 99999;
720
- }
721
-
722
- .propsNotFixedComponent {
723
- background-color: rgba(24, 144, 255, 0.05);
724
- border: rgba( 24,144,255, 0.2) 2px dashed;
725
- width: 100%;
726
- height: 300px;
727
- }
728
- </style>
1
+ <template>
2
+ <div style="width: 100%">
3
+ <template v-for="(page,pageIndex) in pageConfig.page">
4
+ <!-- 拖拽时显示的临时容器 -->
5
+ <template v-if="showDragSpan">
6
+ <div style="display: flex" :key="pageIndex">
7
+ <template v-for="item in dragConfig">
8
+ <div class="container" style="font-size: 1.5em" :key="item.id" :style="'width:' + item.width + 'px'">
9
+ 宽度:{{ item.span }}
10
+ </div>
11
+ </template>
12
+ </div>
13
+ </template>
14
+ <!-- 渲染器主体 -->
15
+ <template v-for="(row,rowIndex) in page.body">
16
+ <a-row
17
+ :key="pageIndex + '_' + rowIndex"
18
+ type="flex"
19
+ :justify="row.config.justify"
20
+ :gutter="row.config.gutter"
21
+ :align="row.config.align">
22
+ <template v-if="!showDragSpan">
23
+ <template v-for="(item, itemIndex) in row.body">
24
+ <a-col :span="item.span" :key="item.id">
25
+ <!-- 显示容器 -->
26
+ <div
27
+ v-if="item.type === 'container' && editMode"
28
+ style="display: flex;align-items: center"
29
+ @click="clickComponentInEditor(item)">
30
+ <div :class="item.selected ? 'selected_container' : 'container'">
31
+ <div>
32
+ <p style="font-size: 1.5em">宽度:{{ item.span }}</p>
33
+ </div>
34
+ <div>
35
+ <a-button @click.stop="handelContainerDelete(item.id, pageIndex)">删除</a-button>
36
+ </div>
37
+ </div>
38
+ <div
39
+ v-if="itemIndex !== row.body.length - 1"
40
+ style="width: 6px;font-size: 1em;color: rgb( 24,144,255)"
41
+ class="dragDiv"
42
+ @mousedown="dragStart($event, item.id, row)">
43
+ || <br> ||
44
+ </div>
45
+ </div>
46
+ <!-- 显示Tab容器 -->
47
+ <div
48
+ v-else-if="item.type === 'tabs'">
49
+ <a-tabs>
50
+ <template v-for="(tab) in item.body">
51
+ <a-tab-pane :key="tab.key" :tab="tab.label">
52
+ <LowCodeRender
53
+ ref="sub"
54
+ :is-root="false"
55
+ @showDraw="handelSubShowDraw"
56
+ @showModal="handelSubShowModal"
57
+ v-if="renderSub"
58
+ @spanDrag="handleDrag"
59
+ @containerDelete="handleContainerDelete"
60
+ @clickComponentInEditor="clickComponentInner"
61
+ :page-config="tab.body"
62
+ :edit-mode="editMode"/>
63
+ </a-tab-pane>
64
+ </template>
65
+ </a-tabs>
66
+ </div>
67
+ <!-- 递归显示页面容器 -->
68
+ <div
69
+ v-else-if="item.type === 'container_page'"
70
+ style="display: flex;align-items: center">
71
+ <LowCodeRender
72
+ ref="sub"
73
+ :is-root="false"
74
+ @showDraw="handelSubShowDraw"
75
+ @showModal="handelSubShowModal"
76
+ v-if="renderSub"
77
+ @spanDrag="handleDrag"
78
+ @containerDelete="handleContainerDelete"
79
+ @clickComponentInEditor="clickComponentInner"
80
+ :page-config="item"
81
+ :edit-mode="editMode"/>
82
+ <div
83
+ v-if="itemIndex !== row.body.length - 1"
84
+ style="width: 6px;font-size: 1em;color: rgb( 24,144,255);"
85
+ class="dragDiv"
86
+ @mousedown="dragStart($event, item.id, row)">
87
+ || <br> ||
88
+ </div>
89
+ </div>
90
+ <!-- 页面渲染 / 编辑模式中,将弹框或抽屉中的内容渲染为页面 -->
91
+ <div :ref="item.id" :id="item.id" v-else-if="editMode || (page.type !== 'modal' && page.type !== 'draw')">
92
+ <div
93
+ @click="clickComponentInEditor(item)"
94
+ :class=" editMode ? 'componentInEditor' : '' ">
95
+ <component
96
+ v-if="checkComponentRequiredProps(item.type, item.props)"
97
+ :lifeCycleFunction="resolveLifeCycleEvent(item)"
98
+ :is="resolveComponentType(item.type, item.id)"
99
+ :propsData="{...item.props}"
100
+ @componentDidMounted="componentDidMounted"
101
+ @onEvent="handleEvent"
102
+ :mixinComponentId="item.id"/>
103
+ <div v-else class="propsNotFixedComponent">
104
+ <p style="line-height: 200px; text-align: center; font-size: 2em; margin: 0">{{ item.type }}</p>
105
+ <p style="text-align: center; font-size: 1.2em">必填参数未设置完全!暂停渲染</p>
106
+ </div>
107
+ </div>
108
+ </div>
109
+ </a-col>
110
+ </template>
111
+ </template>
112
+ </a-row>
113
+ </template>
114
+ </template>
115
+ <!-- 弹框渲染 -->
116
+ <template v-for="(modal, modalIndex) in pageConfig.page.filter(page => page.type === 'modal')">
117
+ <a-modal
118
+ :key="'modalIndex_' + modalIndex"
119
+ :title="modal.title"
120
+ :width="modal.width"
121
+ :dialog-style="{ top: '5rem' }"
122
+ :visible="modalVisible[modal.id]"
123
+ :z-index="1003"
124
+ :maskClosable="false"
125
+ @cancel="closeModalOrDraw(modal.id, 'modal')"
126
+ :destroyOnClose="true">
127
+ <template v-for="(row, rowIndex) in modal.body">
128
+ <template v-for="(item, itemIndex) in row.body">
129
+ <div v-if="item.type === 'tabs'" :key="'modalItem_' + rowIndex + '_' + itemIndex">
130
+ <h1>tabssssss</h1>
131
+ </div>
132
+ <div v-else :key="'modalItem_' + rowIndex + '_' + itemIndex">
133
+ <component
134
+ v-if="checkComponentRequiredProps(item.type, item.props)"
135
+ :lifeCycleFunction="resolveLifeCycleEvent(item)"
136
+ :is="resolveComponentType(item.type)"
137
+ :propsData="{...item.props, showModalOrDraw: false}"
138
+ @componentDidMounted="componentDidMounted"
139
+ @onEvent="handleEvent"
140
+ :mixinComponentId="item.id"/>
141
+ <div v-else class="propsNotFixedComponent">
142
+ <p style="line-height: 200px; text-align: center; font-size: 2em; margin: 0">{{ item.type }}</p>
143
+ <p style="text-align: center; font-size: 1.2em">必填参数未设置完全!暂停渲染</p>
144
+ </div>
145
+ </div>
146
+ </template>
147
+ </template>
148
+ </a-modal>
149
+ </template>
150
+ <!-- 抽屉渲染 -->
151
+ <template v-for="(draw, drawIndex) in pageConfig.page.filter(page => page.type === 'draw')">
152
+ <a-drawer
153
+ :key="'drawIndex_' + drawIndex"
154
+ :title="draw.title"
155
+ :width="draw.width"
156
+ :visible="drawVisible[draw.id]"
157
+ :z-index="1003"
158
+ @close="closeModalOrDraw(draw.id, 'draw')"
159
+ :destroyOnClose="true">
160
+ <template v-for="(row, rowIndex) in draw.body">
161
+ <template v-for="(item, itemIndex) in row.body">
162
+ <div v-if="item.type === 'tabs'" :key="'drawItem_' + rowIndex + '_' + itemIndex">
163
+ <h1>tabssssss</h1>
164
+ </div>
165
+ <div v-else :key="'drawItem_' + rowIndex + '_' + itemIndex">
166
+ <component
167
+ v-if="checkComponentRequiredProps(item.type, item.props)"
168
+ :lifeCycleFunction="resolveLifeCycleEvent(item)"
169
+ :is="resolveComponentType(item.type)"
170
+ :propsData="{...item.props, showModalOrDraw: false}"
171
+ @componentDidMounted="componentDidMounted"
172
+ @onEvent="handleEvent"
173
+ :mixinComponentId="item.id"/>
174
+ <div v-else class="propsNotFixedComponent">
175
+ <p style="line-height: 200px; text-align: center; font-size: 2em; margin: 0">{{ item.type }}</p>
176
+ <p style="text-align: center; font-size: 1.2em">必填参数未设置完全!暂停渲染</p>
177
+ </div>
178
+ </div>
179
+ </template>
180
+ </template>
181
+ </a-drawer>
182
+ </template>
183
+ </div>
184
+ </template>
185
+
186
+ <script>
187
+ // eslint-disable-next-line no-unused-vars
188
+ import Vue from 'vue'
189
+ import * as allComponents from '@vue2-client/utils/lowcode/registerComponentForRender'
190
+ import lowcodeLog from '@vue2-client/utils/lowcode/lowcodeLog'
191
+ import * as lowcodeUtils from '@vue2-client/utils/lowcode/lowcodeUtils'
192
+ import { runLogic } from '@vue2-client/services/api/common'
193
+
194
+ export default {
195
+ name: 'LowCodeRender',
196
+ props: {
197
+ // 页面配置
198
+ pageConfig: {
199
+ type: Object,
200
+ required: true
201
+ },
202
+ // 是否为编辑模式
203
+ editMode: {
204
+ type: Boolean,
205
+ default: true
206
+ },
207
+ // 用于标识渲染器是否为顶级渲染器
208
+ // 非顶级渲染器在控制弹框、抽屉显隐的时候需要emit而不是修改值
209
+ isRoot: {
210
+ type: Boolean,
211
+ default: true
212
+ }
213
+ },
214
+ data () {
215
+ return {
216
+ // 传递给组件的Props合集
217
+ propsData: {},
218
+ // 是否为拖拽模式
219
+ showDragSpan: false,
220
+ // 拖拽的缓存
221
+ dragConfig: [],
222
+ // 记录拖拽位移单位量
223
+ beforeSpanThrough: -1,
224
+ // 记录拖拽之前的span
225
+ originalSpan: -1,
226
+ // 记录拖拽目标下一个元素的原始span
227
+ nextOriginalSpan: -1,
228
+ // 弹框显示集合
229
+ modalVisible: {},
230
+ // 抽屉显示集合
231
+ drawVisible: {},
232
+ // 控制递归渲染
233
+ renderSub: true,
234
+ // 用于控制组件外框闪烁
235
+ colClassName: '',
236
+ // 控制容器渲染,用于递归时,刷新递归中容器的状态
237
+ showContainer: true,
238
+ // 控制闪烁的定时器
239
+ twinkTimer: undefined,
240
+ // 缓存正在闪烁的组件,用于还原状态
241
+ twinkBefore: undefined
242
+ }
243
+ },
244
+ inject: [
245
+ 'componentsMap'
246
+ ],
247
+ mounted () {
248
+ // 初始化控制弹框和抽屉的变量合集
249
+ this.pageConfig.page.forEach(page => {
250
+ if (page.type === 'modal') {
251
+ this.modalVisible[page.id] = false
252
+ } else if (page.type === 'draw') {
253
+ this.drawVisible[page.id] = false
254
+ }
255
+ })
256
+ },
257
+ methods: {
258
+ // 检查组件必要的props是否全部满足
259
+ checkComponentRequiredProps (type, props) {
260
+ if (type === 'container') {
261
+ return true
262
+ }
263
+ const propertiesDef = lowcodeUtils.getEditorConfigByType(type).properties
264
+ const defKeys = Object.keys(propertiesDef)
265
+ const requiredProps = []
266
+ defKeys.forEach(key => {
267
+ if (propertiesDef[key].required) {
268
+ requiredProps.push(key)
269
+ }
270
+ })
271
+ for (let i = 0; i < requiredProps.length; i++) {
272
+ const eachRequired = requiredProps[i]
273
+ if (props[eachRequired] === undefined || props[eachRequired] === '' || props[eachRequired] === null) {
274
+ return false
275
+ }
276
+ }
277
+ return true
278
+ },
279
+ // 用于控制递归渲染器中的修改抽屉显隐
280
+ handelSubShowDraw (id, visible) {
281
+ this.drawVisible[id] = visible === 'open'
282
+ this.$forceUpdate()
283
+ lowcodeLog(
284
+ id,
285
+ '修改抽屉可见性',
286
+ visible === 'open' ? '可见' : '隐藏',
287
+ false,
288
+ true
289
+ )
290
+ },
291
+ // 用于控制递归渲染器中的修改弹框显隐
292
+ handelSubShowModal (id, visible) {
293
+ this.modalVisible[id] = visible === 'open'
294
+ this.$forceUpdate()
295
+ lowcodeLog(
296
+ id,
297
+ '修改弹窗可见性',
298
+ visible === 'open' ? '可见' : '隐藏',
299
+ false,
300
+ true
301
+ )
302
+ },
303
+ // 将钩子函数格式化成mixin的格式并传入
304
+ resolveLifeCycleEvent (config) {
305
+ if (!config.onEvent || !config.onEvent.lifeCycle) {
306
+ return undefined
307
+ } else {
308
+ const result = []
309
+ const lifeCycle = config.onEvent.lifeCycle
310
+ lifeCycle.forEach(item => {
311
+ result.push({
312
+ lifeCycleName: item.lifeCycle,
313
+ functionStr: item.LifeCycleFunction
314
+ })
315
+ })
316
+ return result
317
+ }
318
+ },
319
+ // 关闭弹窗或抽屉
320
+ closeModalOrDraw (id, type) {
321
+ if (type === 'modal') {
322
+ this.modalVisible[id] = false
323
+ } else if (type === 'draw') {
324
+ this.drawVisible[id] = false
325
+ }
326
+ this.$forceUpdate()
327
+ },
328
+ // 递归拖拽完成后的回调
329
+ handleDrag (targetEle, nextEle) {
330
+ this.$emit('spanDrag', targetEle, nextEle)
331
+ },
332
+ // 递归容器删除后的回调
333
+ handleContainerDelete (id) {
334
+ this.$emit('containerDelete', id)
335
+ },
336
+ // 刷新递归的渲染器
337
+ refreshSubRender () {
338
+ this.renderSub = false
339
+ this.$nextTick(() => {
340
+ this.renderSub = true
341
+ })
342
+ },
343
+ // 刷新递归容器
344
+ refreshSubContainer () {
345
+ this.showContainer = false
346
+ this.$nextTick(() => {
347
+ this.showContainer = true
348
+ })
349
+ },
350
+ // 递归点击组件后的回调
351
+ clickComponentInner (configItem) {
352
+ this.$emit('clickComponentInEditor', configItem, this)
353
+ },
354
+ // 拖拽改变Span
355
+ dragStart (event, id, row) {
356
+ // 获取目标html元素
357
+ const targetElement = event.srcElement
358
+ // 获取外层元素用于计算总宽度
359
+ const outerElement = targetElement.parentNode.parentNode.parentNode
360
+ const outerWidth = outerElement.offsetWidth
361
+ // 计算每一个span对应的像素
362
+ const outerSpanWidth = outerWidth / 24
363
+
364
+ // 记录初始X
365
+ const startX = event.clientX
366
+
367
+ // 记录兄弟元素
368
+ const targetElementBros = outerElement.childNodes
369
+
370
+ let targetComponent
371
+ let targetNextComponent
372
+
373
+ // 缓存拖拽组件,用于显示拖拽时的实时Span,拖拽完成后再统一赋值
374
+ this.dragConfig = []
375
+ for (let i = 0; i < row.body.length; i++) {
376
+ this.dragConfig.push({
377
+ id: row.body[i].id,
378
+ span: row.body[i].span,
379
+ width: targetElementBros[i].offsetWidth
380
+ })
381
+ }
382
+
383
+ this.showDragSpan = true
384
+
385
+ // 保存目标容器,和目标的下一个容器,用于改变宽度
386
+ for (let i = 0; i < this.dragConfig.length; i++) {
387
+ const item = this.dragConfig[i]
388
+ if (item.id === id) {
389
+ targetComponent = this.dragConfig[i]
390
+ targetNextComponent = this.dragConfig[i + 1]
391
+ }
392
+ }
393
+
394
+ // 如果鼠标之后没有组件,禁止移动
395
+ if (!targetComponent || !targetNextComponent) {
396
+ this.$message.error('单个组件无法移动!')
397
+ this.showDragSpan = false
398
+ return
399
+ }
400
+
401
+ // 保存原始的像素宽度
402
+ const orignalTargetWidth = targetComponent.width
403
+ const orignalTargetNextWidth = targetNextComponent.width
404
+
405
+ // 保存原始的span
406
+ this.originalSpan = targetComponent.span
407
+ this.nextOriginalSpan = targetNextComponent.span
408
+
409
+ // 拖拽事件
410
+ const onDrag = (e) => {
411
+ // 计算出移动的像素数
412
+ let deltaX = e.clientX - startX
413
+ // 判断移动方向
414
+ let direction = 1
415
+ if (deltaX < 0) {
416
+ direction = -1
417
+ deltaX = 0 - deltaX
418
+ }
419
+
420
+ // 根据移动像素数计算出移动了多少个span
421
+ const throughSpanNum = Math.floor(deltaX / outerSpanWidth)
422
+ if (this.beforeSpanThrough === -1) {
423
+ this.beforeSpanThrough = throughSpanNum
424
+ }
425
+
426
+ // 将移动的距离更新到临时显示的span中
427
+ if (direction > 0) {
428
+ targetComponent.width = orignalTargetWidth + deltaX
429
+ targetNextComponent.width = orignalTargetNextWidth - deltaX
430
+ if (this.beforeSpanThrough !== throughSpanNum) {
431
+ this.beforeSpanThrough = throughSpanNum
432
+ targetComponent.span = this.originalSpan + throughSpanNum
433
+ targetNextComponent.span = this.nextOriginalSpan - throughSpanNum
434
+ }
435
+ } else {
436
+ targetComponent.width = orignalTargetWidth - deltaX
437
+ targetNextComponent.width = orignalTargetNextWidth + deltaX
438
+ if (this.beforeSpanThrough !== throughSpanNum) {
439
+ this.beforeSpanThrough = throughSpanNum
440
+ targetComponent.span = this.originalSpan - throughSpanNum
441
+ targetNextComponent.span = this.nextOriginalSpan + throughSpanNum
442
+ }
443
+ }
444
+ }
445
+
446
+ // 拖拽结束
447
+ const dragEnd = (e) => {
448
+ // 解绑事件,更新数据
449
+ this.showDragSpan = false
450
+ document.removeEventListener('mouseup', dragEnd)
451
+ document.removeEventListener('mousemove', onDrag)
452
+ this.$emit('spanDrag', targetComponent, targetNextComponent)
453
+ }
454
+
455
+ // 绑定拖拽事件和结束事件
456
+ document.addEventListener('mouseup', dragEnd)
457
+ document.addEventListener('mousemove', onDrag)
458
+ },
459
+ // 解析配置中的type,找出对应的渲染器
460
+ resolveComponentType (type, componentId) {
461
+ // 从组件注册中拿到所有注册的组件
462
+ const allComponentKeys = Object.keys(allComponents)
463
+ for (let i = 0; i < allComponentKeys.length; i++) {
464
+ const keyStr = allComponentKeys[i].toString()
465
+ if (type === keyStr) {
466
+ return allComponents[keyStr]
467
+ }
468
+ }
469
+ },
470
+ // mixin中组件mounted后的回调
471
+ componentDidMounted (vm, id) {
472
+ // 将组件注册到全局的Map中
473
+ if (vm && id) {
474
+ this.componentsMap[id] = vm
475
+ }
476
+ // 如果组件中有props,将其挨个set到vm中
477
+ const config = lowcodeUtils.getComponentConfig(id, this.pageConfig)
478
+ const keys = Object.keys(config.props)
479
+ keys.forEach(key => {
480
+ if (config.props[key] !== undefined && config.props[key] !== '') {
481
+ Vue.set(vm, key, config.props[key])
482
+ }
483
+ })
484
+ },
485
+ // 点击组件
486
+ clickComponentInEditor (configItem) {
487
+ this.$emit('clickComponentInEditor', configItem, this)
488
+ },
489
+ // 删除容器
490
+ handelContainerDelete (id, pageIndex) {
491
+ this.$emit('containerDelete', id, pageIndex)
492
+ },
493
+ // 处理组件的事件
494
+ handleEvent (data, eventTiggerType, id) {
495
+ // 找到目标对象的配置
496
+ const targetConfig = lowcodeUtils.getComponentConfig(id, this.pageConfig.page)
497
+ // 找到目标对象对应触发事件的配置
498
+ const eventConfigs = targetConfig.onEvent[eventTiggerType]
499
+
500
+ if (!eventConfigs) {
501
+ return
502
+ }
503
+
504
+ const vm = this.componentsMap[id]
505
+ lowcodeLog(
506
+ ` 事件数据:${data} \n 源组件: ${id}`,
507
+ '触发事件',
508
+ eventTiggerType,
509
+ true
510
+ )
511
+
512
+ let targetComponentId = ''
513
+
514
+ // 遍历该类型触发事件,挨个执行
515
+ eventConfigs.forEach(eachEvent => {
516
+ lowcodeLog(
517
+ ` 事件数据:${data} \n 目标组件: ${targetComponentId}`,
518
+ '开始遍历执行事件',
519
+ eachEvent.eventType,
520
+ false
521
+ )
522
+ // 修改弹窗显隐
523
+ if (eachEvent.eventType === 'showDraw') {
524
+ // 如果不是顶级渲染器,则向外抛出事件
525
+ if (!this.isRoot) {
526
+ this.$emit('showDraw', eachEvent.containerId, eachEvent.visible)
527
+ } else {
528
+ this.drawVisible[eachEvent.containerId] = eachEvent.visible === 'open'
529
+ this.$forceUpdate()
530
+ lowcodeLog(
531
+ eachEvent.containerId,
532
+ '修改抽屉可见性',
533
+ eachEvent.visible === 'open' ? '可见' : '隐藏',
534
+ false,
535
+ true
536
+ )
537
+ }
538
+ } else if (eachEvent.eventType === 'showModal') {
539
+ // 修改抽屉显隐
540
+ // 如果不是顶级渲染器,则向外抛出事件
541
+ if (!this.isRoot) {
542
+ this.$emit('showModal', eachEvent.containerId, eachEvent.visible)
543
+ } else {
544
+ this.modalVisible[eachEvent.containerId] = eachEvent.visible === 'open'
545
+ this.$forceUpdate()
546
+ lowcodeLog(
547
+ eachEvent.containerId,
548
+ '修改弹窗可见性',
549
+ eachEvent.visible === 'open' ? '可见' : '隐藏',
550
+ false,
551
+ true
552
+ )
553
+ }
554
+ } else if (eachEvent.eventType === 'customJSFunction') {
555
+ const targetVM = this.componentsMap[eachEvent.target]
556
+ // eslint-disable-next-line no-eval
557
+ const customFunction = eval('(' + eachEvent.JSFunction + ')')
558
+ customFunction(eachEvent.eventType, data, targetVM, vm)
559
+ lowcodeLog(
560
+ undefined,
561
+ '执行自定义函数完成',
562
+ undefined,
563
+ false,
564
+ true
565
+ )
566
+ } else if (eachEvent.eventType === 'runLogic') {
567
+ // 运行Logic
568
+ // eslint-disable-next-line no-eval
569
+ const logicCallBackFunction = eval('(' + eachEvent.logicCallBackFunction + ')')
570
+ // eslint-disable-next-line no-eval
571
+ const logicParamFunction = eval('(' + eachEvent.logicParamFunction + ')')
572
+ // 将需要的组件变量组织好,并传递给函数
573
+ const componentData = {}
574
+ const allComponents = Object.keys(this.componentsMap)
575
+ allComponents.forEach(component => {
576
+ componentData[component] = this.componentsMap[component].dataForLowCode
577
+ })
578
+ const param = logicParamFunction(componentData, data)
579
+ lowcodeLog(
580
+ JSON.stringify(param),
581
+ '执行Logic',
582
+ eachEvent.logicName,
583
+ false,
584
+ true
585
+ )
586
+ runLogic(eachEvent.logicName, param, eachEvent.serviceName)
587
+ .then(res => { logicCallBackFunction(this.componentsMap, res) })
588
+ } else if (eachEvent.eventType === 'changeProps') {
589
+ // 修改组件props
590
+ const targetConfig = lowcodeUtils.getComponentConfig(eachEvent.target, this.pageConfig.page)
591
+ targetConfig.props[eachEvent.targetKey] = data
592
+ lowcodeLog(
593
+ `目标key:${eachEvent.targetKey},新的值:${JSON.stringify(data)}`,
594
+ '修改Props',
595
+ targetConfig.id,
596
+ false,
597
+ true
598
+ )
599
+ } else if (eachEvent.eventType === 'log') {
600
+ // 打印日志
601
+ lowcodeLog(
602
+ JSON.stringify(data),
603
+ '打印日志',
604
+ targetConfig.id,
605
+ false,
606
+ true
607
+ )
608
+ } else if (eachEvent.eventType === 'runFunction') {
609
+ // 修改组件的值
610
+ // 寻找target
611
+ targetComponentId = eachEvent.target
612
+ const targetVM = this.componentsMap[targetComponentId]
613
+ // 调用函数获取参数
614
+ // eslint-disable-next-line no-eval
615
+ const paramFunction = eval('(' + eachEvent.runFunctionParam + ')')
616
+ const params = paramFunction(vm, data)
617
+ // 执行
618
+ targetVM[eachEvent.eventType](...params)
619
+ lowcodeLog(
620
+ JSON.stringify(data),
621
+ '执行目标方法完成',
622
+ eachEvent.eventType,
623
+ false,
624
+ true
625
+ )
626
+ }
627
+ })
628
+ },
629
+ // 组件闪烁
630
+ twink (id) {
631
+ // 如果组件不在本层渲染器,则向下递归
632
+ if (this.$refs[id] === undefined || this.$refs[id].length === 0) {
633
+ if (this.$refs.sub) {
634
+ this.$refs.sub[0].twink(id)
635
+ }
636
+ } else {
637
+ const _this = this
638
+ // 将之前闪烁的组件还原,避免在classname赋值以后打断动画,样式被保留
639
+ if (this.twinkBefore) {
640
+ this.twinkBefore.className = ''
641
+ }
642
+ this.twinkBefore = this.$refs[id][0]
643
+ // 如果存在定时器则将之前的动画打断
644
+ if (!this.twinkTimer) {
645
+ this.twinkTimer = []
646
+ } else {
647
+ this.twinkTimer.forEach(timer => {
648
+ clearTimeout(timer)
649
+ })
650
+ }
651
+ // 定义关键帧间隔
652
+ const frame = 400
653
+ this.$refs[id][0].className = 'colWithBorder'
654
+ for (let i = 1; i <= 3; i++) {
655
+ const timer = setTimeout(() => {
656
+ if (i % 2 !== 0) {
657
+ _this.$refs[id][0].className = ''
658
+ } else {
659
+ _this.$refs[id][0].className = 'colWithBorder'
660
+ }
661
+ }, frame * i)
662
+ this.twinkTimer.push(timer)
663
+ }
664
+ }
665
+ }
666
+ },
667
+ watch: {
668
+ pageConfig: {
669
+ handler (newVal) {
670
+ },
671
+ deep: true
672
+ }
673
+ }
674
+ }
675
+ </script>
676
+
677
+ <style scoped>
678
+ .componentInEditor{
679
+ border: none;
680
+ }
681
+ .componentInEditor:hover{
682
+ border: 2px rgb( 24,144,255) solid;
683
+ box-shadow: 3px 3px 5px 1px rgba(0,0,0,0.2);
684
+ }
685
+ .colWithBorder{
686
+ border: 2px rgb( 24,144,255) solid;
687
+ box-shadow: 3px 3px 5px 1px rgba(0,0,0,0.2);
688
+ }
689
+ .container{
690
+ display: flex;
691
+ flex-direction: column;
692
+ align-items: center;
693
+ justify-content: space-evenly;
694
+ width: calc(100% - 6px);
695
+ height: 50vh;
696
+ border: rgba( 24,144,255, 0.2) 2px solid;
697
+ background-color: rgba(24, 144, 255, 0.05);
698
+ }
699
+ .selected_container{
700
+ display: flex;
701
+ flex-direction: column;
702
+ align-items: center;
703
+ justify-content: space-evenly;
704
+ width: calc(100% - 6px);
705
+ height: 50vh;
706
+ border: rgba( 24,144,255, 0.2) 2px solid;
707
+ background-color: rgba( 24,144,255, 0.2);
708
+ }
709
+ .colSpanSuit{
710
+ color: green;
711
+ font-size: 1.5em;
712
+ }
713
+ .colSpanNotSuit{
714
+ color: red;
715
+ font-size: 1.5em;
716
+ }
717
+ .dragDiv:hover{
718
+ cursor: w-resize;
719
+ z-index: 99999;
720
+ }
721
+
722
+ .propsNotFixedComponent {
723
+ background-color: rgba(24, 144, 255, 0.05);
724
+ border: rgba( 24,144,255, 0.2) 2px dashed;
725
+ width: 100%;
726
+ height: 300px;
727
+ }
728
+ </style>