vue2-client 1.15.117 → 1.15.119

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 (561) 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/XChart/XChart_20250812134005.vue +160 -0
  32. package/.history/src/base-client/components/his/XChart/XChart_20250812134010.vue +160 -0
  33. package/.history/src/base-client/components/his/XChart/XChart_20250812134019.vue +160 -0
  34. package/.history/src/base-client/components/his/XChart/XChart_20250812134037.vue +160 -0
  35. package/.history/src/base-client/components/his/XChart/XChart_20250812134112.vue +160 -0
  36. package/.history/src/base-client/components/his/XChart/XChart_20250812134114.vue +160 -0
  37. package/.history/src/base-client/components/his/XChart/XChart_20250812134828.vue +148 -0
  38. package/.history/src/base-client/components/his/XChart/XChart_20250812134838.vue +155 -0
  39. package/.history/src/base-client/components/his/XChart/XChart_20250812134846.vue +155 -0
  40. package/.history/src/base-client/components/his/XChart/XChart_20250812134917.vue +155 -0
  41. package/.history/src/base-client/components/his/XChart/XChart_20250812151145.vue +149 -0
  42. package/.history/src/base-client/components/his/XChart/XChart_20250812151810.vue +153 -0
  43. package/.history/src/base-client/components/his/XChart/XChart_20250812151822.vue +153 -0
  44. package/.history/src/base-client/components/his/XChart/XChart_20250812151910.vue +153 -0
  45. package/.history/src/base-client/components/his/XChart/XChart_20250812152858.vue +258 -0
  46. package/.history/src/base-client/components/his/XChart/XChart_20250812152902.vue +258 -0
  47. package/.history/src/base-client/components/his/XChart/XChart_20250812152907.vue +258 -0
  48. package/.history/src/base-client/components/his/XChart/XChart_20250812152919.vue +258 -0
  49. package/.history/src/base-client/components/his/XChart/XChart_20250812153141.vue +269 -0
  50. package/.history/src/base-client/components/his/XChart/XChart_20250812153149.vue +276 -0
  51. package/.history/src/base-client/components/his/XChart/XChart_20250812153153.vue +276 -0
  52. package/.history/src/base-client/components/his/XChart/XChart_20250812153155.vue +276 -0
  53. package/.history/src/base-client/components/his/XChart/XChart_20250812153157.vue +276 -0
  54. package/.history/src/base-client/components/his/XChart/XChart_20250812153158.vue +276 -0
  55. package/.history/src/base-client/components/his/XChart/XChart_20250812153200.vue +276 -0
  56. package/.history/src/base-client/components/his/XChart/XChart_20250812153210.vue +276 -0
  57. package/.history/src/base-client/components/his/XChart/XChart_20250812153918.vue +275 -0
  58. package/.history/src/base-client/components/his/XChart/XChart_20250812154157.vue +280 -0
  59. package/.history/src/base-client/components/his/XChart/XChart_20250812154212.vue +280 -0
  60. package/.history/src/base-client/components/his/XChart/XChart_20250812154250.vue +280 -0
  61. package/.history/src/base-client/components/his/XChart/XChart_20250812154252.vue +280 -0
  62. package/.history/src/base-client/components/his/XChart/XChart_20250812154444.vue +280 -0
  63. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611091619.vue +442 -0
  64. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092547.vue +442 -0
  65. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092552.vue +442 -0
  66. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092744.vue +475 -0
  67. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092955.vue +475 -0
  68. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092957.vue +475 -0
  69. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095652.vue +477 -0
  70. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095701.vue +477 -0
  71. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095704.vue +477 -0
  72. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100005.vue +473 -0
  73. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100011.vue +473 -0
  74. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100014.vue +473 -0
  75. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100833.vue +473 -0
  76. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100853.vue +473 -0
  77. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100940.vue +473 -0
  78. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101011.vue +473 -0
  79. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101013.vue +473 -0
  80. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101014.vue +473 -0
  81. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101159.vue +473 -0
  82. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101238.vue +474 -0
  83. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101240.vue +474 -0
  84. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101242.vue +474 -0
  85. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101404.vue +472 -0
  86. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101410.vue +472 -0
  87. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101459.vue +472 -0
  88. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101500.vue +472 -0
  89. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101502.vue +472 -0
  90. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101504.vue +472 -0
  91. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101610.vue +501 -0
  92. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101700.vue +501 -0
  93. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101702.vue +501 -0
  94. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101741.vue +504 -0
  95. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101749.vue +504 -0
  96. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101759.vue +504 -0
  97. package/.history/src/base-client/components/his/XHisEditor/dome_20250611091349.vue +131 -0
  98. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105854.vue +160 -0
  99. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105902.vue +160 -0
  100. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105924.vue +160 -0
  101. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105932.vue +158 -0
  102. package/.history/src/base-client/components/his/XList/XList_20250609135848.vue +173 -0
  103. package/.history/src/base-client/components/his/XList/XList_20250609141026.vue +222 -0
  104. package/.history/src/base-client/components/his/XList/XList_20250609141035.vue +229 -0
  105. package/.history/src/base-client/components/his/XList/XList_20250609141103.vue +229 -0
  106. package/.history/src/base-client/components/his/XList/XList_20250609141105.vue +229 -0
  107. package/.history/src/base-client/components/his/XList/XList_20250609141334.vue +241 -0
  108. package/.history/src/base-client/components/his/XList/XList_20250609141404.vue +241 -0
  109. package/.history/src/base-client/components/his/XList/XList_20250609141406.vue +241 -0
  110. package/.history/src/base-client/components/his/XList/XList_20250609141801.vue +245 -0
  111. package/.history/src/base-client/components/his/XList/XList_20250609142033.vue +245 -0
  112. package/.history/src/base-client/components/his/XList/XList_20250609142038.vue +245 -0
  113. package/.history/src/base-client/components/his/XList/XList_20250609142435.vue +255 -0
  114. package/.history/src/base-client/components/his/XList/XList_20250609142503.vue +255 -0
  115. package/.history/src/base-client/components/his/XList/XList_20250609142504.vue +255 -0
  116. package/.history/src/base-client/components/his/XList/XList_20250609143012.vue +270 -0
  117. package/.history/src/base-client/components/his/XList/XList_20250609143044.vue +270 -0
  118. package/.history/src/base-client/components/his/XList/XList_20250609143046.vue +270 -0
  119. package/.history/src/base-client/components/his/XList/XList_20250609143210.vue +270 -0
  120. package/.history/src/base-client/components/his/XList/XList_20250609144339.vue +294 -0
  121. package/.history/src/base-client/components/his/XList/XList_20250609144410.vue +294 -0
  122. package/.history/src/base-client/components/his/XList/XList_20250609144412.vue +294 -0
  123. package/.history/src/base-client/components/his/XList/XList_20250609144647.vue +303 -0
  124. package/.history/src/base-client/components/his/XList/XList_20250609144716.vue +303 -0
  125. package/.history/src/base-client/components/his/XList/XList_20250609144729.vue +303 -0
  126. package/.history/src/base-client/components/his/XList/XList_20250609151232.vue +288 -0
  127. package/.history/src/base-client/components/his/XList/XList_20250609151247.vue +288 -0
  128. package/.history/src/base-client/components/his/XList/XList_20250609151252.vue +288 -0
  129. package/.history/src/base-client/components/his/XList/XList_20250609161220.vue +317 -0
  130. package/.history/src/base-client/components/his/XList/XList_20250609161258.vue +306 -0
  131. package/.history/src/base-client/components/his/XList/XList_20250609161319.vue +306 -0
  132. package/.history/src/base-client/components/his/XList/XList_20250609161320.vue +306 -0
  133. package/.history/src/base-client/components/his/XList/XList_20250704142024.vue +495 -0
  134. package/.history/src/base-client/components/his/XList/XList_20250704142033.vue +495 -0
  135. package/.history/src/base-client/components/his/XList/XList_20250704142040.vue +494 -0
  136. package/.history/src/base-client/components/his/XList/XList_20250704142211.vue +494 -0
  137. package/.history/src/base-client/components/his/XList/XList_20250704142214.vue +494 -0
  138. package/.history/src/base-client/components/his/XList/XList_20250704143010.vue +495 -0
  139. package/.history/src/base-client/components/his/XList/XList_20250704143203.vue +495 -0
  140. package/.history/src/base-client/components/his/XList/XList_20250707095101.vue +492 -0
  141. package/.history/src/base-client/components/his/XList/XList_20250707100152.vue +492 -0
  142. package/.history/src/base-client/components/his/XList/XList_20250707100200.vue +485 -0
  143. package/.history/src/base-client/components/his/XList/XList_20250707100208.vue +485 -0
  144. package/.history/src/base-client/components/his/XList/XList_20250707100259.vue +488 -0
  145. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134604.vue +263 -0
  146. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134615.vue +302 -0
  147. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134621.vue +301 -0
  148. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134634.vue +311 -0
  149. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134644.vue +330 -0
  150. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134653.vue +330 -0
  151. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134836.vue +330 -0
  152. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135247.vue +330 -0
  153. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135303.vue +354 -0
  154. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135316.vue +363 -0
  155. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135323.vue +363 -0
  156. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135334.vue +366 -0
  157. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135342.vue +364 -0
  158. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135349.vue +364 -0
  159. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135351.vue +346 -0
  160. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135354.vue +346 -0
  161. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135401.vue +346 -0
  162. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135406.vue +346 -0
  163. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135424.vue +346 -0
  164. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807143043.vue +254 -0
  165. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155506.vue +329 -0
  166. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155535.vue +330 -0
  167. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155543.vue +330 -0
  168. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155926.vue +304 -0
  169. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155928.vue +304 -0
  170. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172548.vue +298 -0
  171. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172609.vue +298 -0
  172. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172623.vue +298 -0
  173. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172631.vue +298 -0
  174. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172701.vue +298 -0
  175. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172704.vue +298 -0
  176. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807175937.vue +290 -0
  177. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807175942.vue +290 -0
  178. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180210.vue +290 -0
  179. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180424.vue +290 -0
  180. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180448.vue +290 -0
  181. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180915.vue +262 -0
  182. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180917.vue +262 -0
  183. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101106.vue +283 -0
  184. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101112.vue +289 -0
  185. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101118.vue +289 -0
  186. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101129.vue +294 -0
  187. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101137.vue +318 -0
  188. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101145.vue +320 -0
  189. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101154.vue +320 -0
  190. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101211.vue +320 -0
  191. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101236.vue +320 -0
  192. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101239.vue +320 -0
  193. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114001.vue +342 -0
  194. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114005.vue +342 -0
  195. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114014.vue +345 -0
  196. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114020.vue +345 -0
  197. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114028.vue +345 -0
  198. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114108.vue +345 -0
  199. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114115.vue +345 -0
  200. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114333.vue +346 -0
  201. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114339.vue +350 -0
  202. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114344.vue +355 -0
  203. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114351.vue +355 -0
  204. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114408.vue +355 -0
  205. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114410.vue +355 -0
  206. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250813154330.vue +389 -0
  207. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250813154338.vue +389 -0
  208. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250813154402.vue +389 -0
  209. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250813154425.vue +389 -0
  210. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250813154428.vue +389 -0
  211. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250813171922.vue +391 -0
  212. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250813171957.vue +391 -0
  213. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250813172004.vue +391 -0
  214. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250813172012.vue +391 -0
  215. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250813172241.vue +391 -0
  216. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250813172242.vue +391 -0
  217. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103845.vue +142 -0
  218. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103852.vue +142 -0
  219. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103857.vue +142 -0
  220. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103859.vue +142 -0
  221. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103907.vue +142 -0
  222. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103910.vue +142 -0
  223. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103911.vue +142 -0
  224. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103913.vue +142 -0
  225. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103916.vue +142 -0
  226. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103931.vue +142 -0
  227. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145127.vue +85 -0
  228. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145136.vue +81 -0
  229. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145142.vue +81 -0
  230. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145145.vue +81 -0
  231. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145148.vue +81 -0
  232. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145151.vue +81 -0
  233. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145155.vue +81 -0
  234. package/CHANGELOG.md +824 -824
  235. package/Components.md +60 -60
  236. package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +213 -0
  237. package/docs/LowCode/lowcode.md +155 -155
  238. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  239. package/docs/index.md +30 -30
  240. package/index.js +31 -31
  241. package/jest-transform-stub.js +8 -8
  242. package/jest.setup.js +7 -7
  243. package/jsconfig.json +19 -19
  244. package/package.json +1 -1
  245. package/public/his/editor/editor.html +51 -51
  246. package/public/his/editor/mock/bind_data.html +779 -779
  247. package/public/his/editor/mock/data_table.html +40 -40
  248. package/public/his/editor/mock/sign.html +75 -75
  249. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  250. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  251. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  252. package/public/his/editor/vender/date97/calendar.js +4 -4
  253. package/public/his/editor/vender/date97/lang/en.js +13 -13
  254. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  255. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  256. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  257. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  258. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  259. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  260. package/public/his/editor/vender/diff.js +1627 -1627
  261. package/public/his/editor/vender/editor.js +1 -1
  262. package/public/his/editor/vender/fabric.js +31187 -31187
  263. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  264. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  265. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  266. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  267. package/public/his/editor/vender/mui/mui.min.css +4 -4
  268. package/public/his/editor/vender/mui/mui.min.js +5 -5
  269. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  270. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  271. package/public/his/editor/vender/qrcode.js +7 -7
  272. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  273. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  274. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  275. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  276. package/public/his/editor/vender/validator.js +5094 -5094
  277. package/public/his/editor/vender/weui/weui.css +5659 -5659
  278. package/public/his/editor/vender/weui/weui.min.css +4 -4
  279. package/public/his/editor/vender/weui/weui.min.js +11 -11
  280. package/public/index.html +27 -27
  281. package/src/assets/img/querySlotDemo.svg +15 -15
  282. package/src/assets/svg/badtwo.svg +1 -1
  283. package/src/assets/svg/goodtwo.svg +1 -1
  284. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  285. package/src/base-client/components/AI/demo.vue +31 -31
  286. package/src/base-client/components/TreeList/TreeList.vue +91 -0
  287. package/src/base-client/components/TreeList/TreeNode.vue +81 -0
  288. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  289. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  290. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  291. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  292. package/src/base-client/components/common/CitySelect/index.js +3 -3
  293. package/src/base-client/components/common/CitySelect/index.md +109 -109
  294. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  295. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  296. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  297. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  298. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  299. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  300. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  301. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  302. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  303. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  304. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  305. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  306. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  307. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  308. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  309. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  310. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  311. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  312. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  313. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  314. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  315. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  316. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  317. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  318. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  319. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  320. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  321. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  322. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  323. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  324. package/src/base-client/components/common/Recording/index.js +3 -3
  325. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  326. package/src/base-client/components/common/Tree/index.js +2 -2
  327. package/src/base-client/components/common/Upload/index.js +3 -3
  328. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  329. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  330. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  331. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  332. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  333. package/src/base-client/components/common/XAddReport/index.js +3 -3
  334. package/src/base-client/components/common/XAddReport/index.md +56 -56
  335. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  336. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  337. package/src/base-client/components/common/XButtons/index.js +3 -3
  338. package/src/base-client/components/common/XButtons/index.md +61 -61
  339. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  340. package/src/base-client/components/common/XCardSet/XTiltle.vue +191 -0
  341. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  342. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  343. package/src/base-client/components/common/XDataCard/index.js +3 -3
  344. package/src/base-client/components/common/XDataCard/index.md +1 -1
  345. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  346. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  347. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  348. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  349. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  350. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  351. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  352. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  353. package/src/base-client/components/common/XForm/XFormItem.vue +25 -2
  354. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  355. package/src/base-client/components/common/XForm/index.md +178 -178
  356. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  357. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  358. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  359. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  360. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  361. package/src/base-client/components/common/XFormTable/demo.vue +2 -2
  362. package/src/base-client/components/common/XFormTable/index.md +92 -92
  363. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  364. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  365. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  366. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  367. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  368. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  369. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  370. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  371. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  372. package/src/base-client/components/common/XPrint/index.vue +97 -97
  373. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  374. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  375. package/src/base-client/components/common/XReport/index.js +3 -3
  376. package/src/base-client/components/common/XReport/print.js +186 -186
  377. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  378. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  379. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  380. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  381. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  382. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  383. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  384. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  385. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  386. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  387. package/src/base-client/components/common/XStepView/index.js +3 -3
  388. package/src/base-client/components/common/XStepView/index.md +31 -31
  389. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  390. package/src/base-client/components/common/XTab/index.js +3 -3
  391. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  392. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  393. package/src/base-client/components/common/XTable/index.md +255 -255
  394. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  395. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  396. package/src/base-client/components/common/XTree/index.js +3 -3
  397. package/src/base-client/components/common/XTree/index.md +36 -36
  398. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  399. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  400. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  401. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  402. package/src/base-client/components/his/XChart/XChart.vue +282 -282
  403. package/src/base-client/components/his/XChart/dome.vue +19 -19
  404. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +51 -2
  405. package/src/base-client/components/his/XHisEditor/dome.vue +144 -0
  406. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  407. package/src/base-client/components/his/XImportExcelButton/XFrontImportExcel.vue +5 -2
  408. package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +4 -0
  409. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  410. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  411. package/src/base-client/components/index.js +51 -51
  412. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  413. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  414. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  415. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  416. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  417. package/src/base-client/plugins/Config.js +19 -19
  418. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  419. package/src/base-client/plugins/Recording.js +258 -258
  420. package/src/base-client/plugins/index.js +23 -23
  421. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  422. package/src/components/Charts/Bar.vue +62 -62
  423. package/src/components/Charts/ChartCard.vue +134 -134
  424. package/src/components/Charts/Liquid.vue +67 -67
  425. package/src/components/Charts/MiniArea.vue +39 -39
  426. package/src/components/Charts/MiniBar.vue +39 -39
  427. package/src/components/Charts/MiniProgress.vue +75 -75
  428. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  429. package/src/components/Charts/Radar.vue +68 -68
  430. package/src/components/Charts/RankList.vue +77 -77
  431. package/src/components/Charts/TagCloud.vue +113 -113
  432. package/src/components/Charts/TransferBar.vue +64 -64
  433. package/src/components/Charts/Trend.vue +82 -82
  434. package/src/components/Charts/chart.less +12 -12
  435. package/src/components/Charts/smooth.area.less +13 -13
  436. package/src/components/CodeMirror/inedx.vue +118 -118
  437. package/src/components/CodeMirror/setting.js +40 -40
  438. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  439. package/src/components/NumberInfo/index.js +3 -3
  440. package/src/components/NumberInfo/index.less +54 -54
  441. package/src/components/NumberInfo/index.md +43 -43
  442. package/src/components/card/ChartCard.vue +79 -79
  443. package/src/components/chart/Bar.vue +60 -60
  444. package/src/components/chart/MiniArea.vue +67 -67
  445. package/src/components/chart/MiniBar.vue +59 -59
  446. package/src/components/chart/MiniProgress.vue +57 -57
  447. package/src/components/chart/Radar.vue +80 -80
  448. package/src/components/chart/RankingList.vue +60 -60
  449. package/src/components/chart/Trend.vue +79 -79
  450. package/src/components/chart/index.less +9 -9
  451. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  452. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  453. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  454. package/src/components/checkbox/index.js +9 -9
  455. package/src/components/exception/ExceptionPage.vue +70 -70
  456. package/src/components/g2Charts/constants.js +202 -202
  457. package/src/components/g2Charts/demo.vue +808 -808
  458. package/src/components/g2Charts/designer.vue +228 -228
  459. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  460. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  461. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  462. package/src/components/g2Charts/index.vue +397 -397
  463. package/src/components/index.js +36 -36
  464. package/src/components/input/IInput.vue +66 -66
  465. package/src/components/menu/SideMenu.vue +75 -75
  466. package/src/components/menu/menu.js +273 -273
  467. package/src/components/setting/Setting.vue +234 -234
  468. package/src/components/tool/AStepItem.vue +60 -60
  469. package/src/config/CreateQueryConfig.js +325 -325
  470. package/src/config/default/antd.config.js +89 -89
  471. package/src/config/default/setting.config.js +55 -55
  472. package/src/font-style/font.css +4 -4
  473. package/src/layouts/CommonLayout.vue +56 -56
  474. package/src/layouts/PageLayout.vue +151 -151
  475. package/src/layouts/SinglePageView.vue +136 -136
  476. package/src/layouts/header/AdminHeader.vue +132 -132
  477. package/src/layouts/header/HeaderNotice.vue +177 -177
  478. package/src/layouts/header/InstitutionDetail.vue +181 -181
  479. package/src/layouts/tabs/TabsHead.vue +189 -189
  480. package/src/lib.js +1 -1
  481. package/src/mock/extend/index.js +84 -84
  482. package/src/mock/goods/index.js +108 -108
  483. package/src/pages/DefaultExample/index.vue +77 -77
  484. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  485. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  486. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  487. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  488. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  489. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  490. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  491. package/src/pages/DynamicStatistics/index.vue +282 -282
  492. package/src/pages/Example/childIndex.vue +15 -15
  493. package/src/pages/Example/index.vue +30 -30
  494. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  495. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  496. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  497. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  498. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  499. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  500. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  501. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  502. package/src/pages/Recording/index.vue +77 -77
  503. package/src/pages/ServiceReview/index.vue +284 -284
  504. package/src/pages/SubExample/index.vue +26 -26
  505. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  506. package/src/pages/XReportView/index.vue +64 -64
  507. package/src/pages/XTreeOneProExample/index.vue +67 -67
  508. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  509. package/src/pages/login/Login.vue +379 -379
  510. package/src/pages/login/LoginV3.vue +389 -389
  511. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  512. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  513. package/src/pages/report/ReportTable.js +124 -124
  514. package/src/pages/resourceManage/orgListManage.vue +98 -98
  515. package/src/pages/system/dictionary/index.vue +44 -44
  516. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  517. package/src/pages/system/monitor/operLog/index.vue +37 -37
  518. package/src/pages/system/settings/modifyPassword.vue +117 -117
  519. package/src/pages/system/ticket/index.vue +480 -480
  520. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  521. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  522. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  523. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  524. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  525. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  526. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  527. package/src/plugins/EventLogPlugin.js +33 -33
  528. package/src/plugins/FindParentsData.js +17 -17
  529. package/src/router/async/config.async.js +35 -35
  530. package/src/router/async/router.map.js +2 -2
  531. package/src/router/index.js +27 -27
  532. package/src/services/DataModel.js +30 -30
  533. package/src/services/LodopFuncs.js +137 -137
  534. package/src/services/api/TicketDetailsViewApi.js +46 -46
  535. package/src/services/api/cas.js +79 -79
  536. package/src/services/api/common.js +346 -346
  537. package/src/services/api/entity.js +18 -18
  538. package/src/services/api/index.js +17 -17
  539. package/src/store/modules/account.js +115 -115
  540. package/src/store/modules/index.js +5 -5
  541. package/src/store/modules/lowCode.js +33 -33
  542. package/src/store/modules/setting.js +119 -119
  543. package/src/theme/default/style.less +58 -58
  544. package/src/utils/authority-utils.js +85 -85
  545. package/src/utils/errorCode.js +6 -6
  546. package/src/utils/formatter.js +74 -74
  547. package/src/utils/htmlToPDF.js +108 -108
  548. package/src/utils/htmlToPDFApi.js +5 -5
  549. package/src/utils/login.js +188 -188
  550. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  551. package/src/utils/lowcode/lowcodeLog.js +29 -29
  552. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  553. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  554. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  555. package/src/utils/map-utils.js +47 -47
  556. package/src/utils/reg.js +95 -95
  557. package/src/utils/runEvalFunction.js +14 -14
  558. package/src/utils/theme-color-replacer-extend.js +92 -92
  559. package/src/utils/util.js +329 -329
  560. package/src/utils/waterMark.js +31 -31
  561. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -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>