@lambo-design/variant-form 2.2.9-beta.0

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 (293) hide show
  1. package/index.js +41 -0
  2. package/package.json +64 -0
  3. package/src/assets/ft-images/t1.png +0 -0
  4. package/src/assets/ft-images/t2.png +0 -0
  5. package/src/assets/ft-images/t3.png +0 -0
  6. package/src/assets/ft-images/t4.png +0 -0
  7. package/src/assets/ft-images/t5.png +0 -0
  8. package/src/assets/ft-images/t6.png +0 -0
  9. package/src/assets/ft-images/t7.png +0 -0
  10. package/src/assets/ft-images/t8.png +0 -0
  11. package/src/assets/vform-logo.png +0 -0
  12. package/src/components/code-editor/index.vue +134 -0
  13. package/src/components/form-designer/designer.js +962 -0
  14. package/src/components/form-designer/form-widget/container-widget/container-wrapper.vue +107 -0
  15. package/src/components/form-designer/form-widget/container-widget/containerMixin.js +93 -0
  16. package/src/components/form-designer/form-widget/container-widget/grid-col-widget.vue +314 -0
  17. package/src/components/form-designer/form-widget/container-widget/grid-widget.vue +93 -0
  18. package/src/components/form-designer/form-widget/container-widget/index.js +24 -0
  19. package/src/components/form-designer/form-widget/container-widget/tab-widget.vue +123 -0
  20. package/src/components/form-designer/form-widget/container-widget/table-cell-widget.vue +347 -0
  21. package/src/components/form-designer/form-widget/container-widget/table-widget.vue +116 -0
  22. package/src/components/form-designer/form-widget/field-widget/button-widget.vue +87 -0
  23. package/src/components/form-designer/form-widget/field-widget/cascader-widget.vue +120 -0
  24. package/src/components/form-designer/form-widget/field-widget/checkbox-widget.vue +105 -0
  25. package/src/components/form-designer/form-widget/field-widget/color-widget.vue +99 -0
  26. package/src/components/form-designer/form-widget/field-widget/date-range-widget.vue +104 -0
  27. package/src/components/form-designer/form-widget/field-widget/date-widget.vue +103 -0
  28. package/src/components/form-designer/form-widget/field-widget/divider-widget.vue +83 -0
  29. package/src/components/form-designer/form-widget/field-widget/fieldMixin.js +613 -0
  30. package/src/components/form-designer/form-widget/field-widget/file-upload-widget.vue +313 -0
  31. package/src/components/form-designer/form-widget/field-widget/form-item-wrapper.vue +331 -0
  32. package/src/components/form-designer/form-widget/field-widget/html-text-widget.vue +82 -0
  33. package/src/components/form-designer/form-widget/field-widget/index.js +10 -0
  34. package/src/components/form-designer/form-widget/field-widget/input-widget.vue +112 -0
  35. package/src/components/form-designer/form-widget/field-widget/number-widget.vue +103 -0
  36. package/src/components/form-designer/form-widget/field-widget/picture-upload-widget.vue +280 -0
  37. package/src/components/form-designer/form-widget/field-widget/radio-widget.vue +105 -0
  38. package/src/components/form-designer/form-widget/field-widget/rate-widget.vue +102 -0
  39. package/src/components/form-designer/form-widget/field-widget/rich-editor-widget.vue +123 -0
  40. package/src/components/form-designer/form-widget/field-widget/select-widget.vue +123 -0
  41. package/src/components/form-designer/form-widget/field-widget/slider-widget.vue +100 -0
  42. package/src/components/form-designer/form-widget/field-widget/slot-widget.vue +102 -0
  43. package/src/components/form-designer/form-widget/field-widget/static-content-wrapper.vue +196 -0
  44. package/src/components/form-designer/form-widget/field-widget/static-text-widget.vue +83 -0
  45. package/src/components/form-designer/form-widget/field-widget/switch-widget.vue +101 -0
  46. package/src/components/form-designer/form-widget/field-widget/textarea-widget.vue +99 -0
  47. package/src/components/form-designer/form-widget/field-widget/time-range-widget.vue +104 -0
  48. package/src/components/form-designer/form-widget/field-widget/time-widget.vue +103 -0
  49. package/src/components/form-designer/form-widget/index.vue +272 -0
  50. package/src/components/form-designer/index.vue +500 -0
  51. package/src/components/form-designer/refMixinDesign.js +28 -0
  52. package/src/components/form-designer/setting-panel/form-setting.vue +354 -0
  53. package/src/components/form-designer/setting-panel/index.vue +367 -0
  54. package/src/components/form-designer/setting-panel/option-items-setting.vue +234 -0
  55. package/src/components/form-designer/setting-panel/property-editor/allowCreate-editor.vue +24 -0
  56. package/src/components/form-designer/setting-panel/property-editor/appendButton-editor.vue +28 -0
  57. package/src/components/form-designer/setting-panel/property-editor/appendButtonDisabled-editor.vue +23 -0
  58. package/src/components/form-designer/setting-panel/property-editor/automaticDropdown-editor.vue +23 -0
  59. package/src/components/form-designer/setting-panel/property-editor/border-editor.vue +23 -0
  60. package/src/components/form-designer/setting-panel/property-editor/buttonIcon-editor.vue +23 -0
  61. package/src/components/form-designer/setting-panel/property-editor/buttonStyle-editor.vue +23 -0
  62. package/src/components/form-designer/setting-panel/property-editor/clearable-editor.vue +23 -0
  63. package/src/components/form-designer/setting-panel/property-editor/columnWidth-editor.vue +26 -0
  64. package/src/components/form-designer/setting-panel/property-editor/container-grid/colHeight-editor.vue +28 -0
  65. package/src/components/form-designer/setting-panel/property-editor/container-grid/gutter-editor.vue +81 -0
  66. package/src/components/form-designer/setting-panel/property-editor/container-grid-col/grid-col-offset-editor.vue +24 -0
  67. package/src/components/form-designer/setting-panel/property-editor/container-grid-col/grid-col-pull-editor.vue +24 -0
  68. package/src/components/form-designer/setting-panel/property-editor/container-grid-col/grid-col-push-editor.vue +24 -0
  69. package/src/components/form-designer/setting-panel/property-editor/container-grid-col/grid-col-responsive-editor.vue +23 -0
  70. package/src/components/form-designer/setting-panel/property-editor/container-grid-col/grid-col-span-editor.vue +48 -0
  71. package/src/components/form-designer/setting-panel/property-editor/container-sub-form/showBlankRow-editor.vue +23 -0
  72. package/src/components/form-designer/setting-panel/property-editor/container-sub-form/showRowNumber-editor.vue +23 -0
  73. package/src/components/form-designer/setting-panel/property-editor/container-sub-form/sub-form-labelAlign-editor.vue +36 -0
  74. package/src/components/form-designer/setting-panel/property-editor/container-tab/tab-customClass-editor.vue +119 -0
  75. package/src/components/form-designer/setting-panel/property-editor/container-table-cell/cellHeight-editor.vue +23 -0
  76. package/src/components/form-designer/setting-panel/property-editor/container-table-cell/cellWidth-editor.vue +23 -0
  77. package/src/components/form-designer/setting-panel/property-editor/container-table-cell/wordBreak-editor.vue +23 -0
  78. package/src/components/form-designer/setting-panel/property-editor/customClass-editor.vue +40 -0
  79. package/src/components/form-designer/setting-panel/property-editor/defaultValue-editor.vue +25 -0
  80. package/src/components/form-designer/setting-panel/property-editor/disabled-editor.vue +23 -0
  81. package/src/components/form-designer/setting-panel/property-editor/displayStyle-editor.vue +26 -0
  82. package/src/components/form-designer/setting-panel/property-editor/editable-editor.vue +24 -0
  83. package/src/components/form-designer/setting-panel/property-editor/endPlaceholder-editor.vue +23 -0
  84. package/src/components/form-designer/setting-panel/property-editor/event-handler/eventMixin.js +12 -0
  85. package/src/components/form-designer/setting-panel/property-editor/event-handler/onAppendButtonClick-editor.vue +30 -0
  86. package/src/components/form-designer/setting-panel/property-editor/event-handler/onBeforeUpload-editor.vue +30 -0
  87. package/src/components/form-designer/setting-panel/property-editor/event-handler/onBlur-editor.vue +30 -0
  88. package/src/components/form-designer/setting-panel/property-editor/event-handler/onChange-editor.vue +30 -0
  89. package/src/components/form-designer/setting-panel/property-editor/event-handler/onClick-editor.vue +30 -0
  90. package/src/components/form-designer/setting-panel/property-editor/event-handler/onCreated-editor.vue +31 -0
  91. package/src/components/form-designer/setting-panel/property-editor/event-handler/onFileRemove.vue +30 -0
  92. package/src/components/form-designer/setting-panel/property-editor/event-handler/onFocus-editor.vue +30 -0
  93. package/src/components/form-designer/setting-panel/property-editor/event-handler/onInput-editor.vue +30 -0
  94. package/src/components/form-designer/setting-panel/property-editor/event-handler/onMounted-editor.vue +30 -0
  95. package/src/components/form-designer/setting-panel/property-editor/event-handler/onRemoteQuery-editor.vue +30 -0
  96. package/src/components/form-designer/setting-panel/property-editor/event-handler/onSubFormRowAdd-editor.vue +30 -0
  97. package/src/components/form-designer/setting-panel/property-editor/event-handler/onSubFormRowChange-editor.vue +30 -0
  98. package/src/components/form-designer/setting-panel/property-editor/event-handler/onSubFormRowDelete-editor.vue +30 -0
  99. package/src/components/form-designer/setting-panel/property-editor/event-handler/onSubFormRowInsert-editor.vue +30 -0
  100. package/src/components/form-designer/setting-panel/property-editor/event-handler/onUploadError-editor.vue +30 -0
  101. package/src/components/form-designer/setting-panel/property-editor/event-handler/onUploadSuccess-editor.vue +30 -0
  102. package/src/components/form-designer/setting-panel/property-editor/event-handler/onValidate-editor.vue +30 -0
  103. package/src/components/form-designer/setting-panel/property-editor/field-button/button-type-editor.vue +32 -0
  104. package/src/components/form-designer/setting-panel/property-editor/field-button/circle-editor.vue +23 -0
  105. package/src/components/form-designer/setting-panel/property-editor/field-button/icon-editor.vue +23 -0
  106. package/src/components/form-designer/setting-panel/property-editor/field-button/plain-editor.vue +24 -0
  107. package/src/components/form-designer/setting-panel/property-editor/field-button/round-editor.vue +23 -0
  108. package/src/components/form-designer/setting-panel/property-editor/field-cascader/cascader-defaultValue-editor.vue +18 -0
  109. package/src/components/form-designer/setting-panel/property-editor/field-cascader/cascader-multiple-editor.vue +24 -0
  110. package/src/components/form-designer/setting-panel/property-editor/field-cascader/checkStrictly-editor.vue +23 -0
  111. package/src/components/form-designer/setting-panel/property-editor/field-cascader/showAllLevels-editor.vue +23 -0
  112. package/src/components/form-designer/setting-panel/property-editor/field-checkbox/checkbox-defaultValue-editor.vue +18 -0
  113. package/src/components/form-designer/setting-panel/property-editor/field-color/color-defaultValue-editor.vue +25 -0
  114. package/src/components/form-designer/setting-panel/property-editor/field-date/date-defaultValue-editor.vue +26 -0
  115. package/src/components/form-designer/setting-panel/property-editor/field-date/date-format-editor.vue +30 -0
  116. package/src/components/form-designer/setting-panel/property-editor/field-date/date-type-editor.vue +30 -0
  117. package/src/components/form-designer/setting-panel/property-editor/field-date/date-valueFormat-editor.vue +26 -0
  118. package/src/components/form-designer/setting-panel/property-editor/field-date-range/date-range-defaultValue-editor.vue +26 -0
  119. package/src/components/form-designer/setting-panel/property-editor/field-date-range/date-range-format-editor.vue +30 -0
  120. package/src/components/form-designer/setting-panel/property-editor/field-date-range/date-range-type-editor.vue +27 -0
  121. package/src/components/form-designer/setting-panel/property-editor/field-date-range/date-range-valueFormat-editor.vue +26 -0
  122. package/src/components/form-designer/setting-panel/property-editor/field-divider/contentPosition-editor.vue +27 -0
  123. package/src/components/form-designer/setting-panel/property-editor/field-file-upload/file-upload-fileTypes-editor.vue +44 -0
  124. package/src/components/form-designer/setting-panel/property-editor/field-html-text/htmlContent-editor.vue +29 -0
  125. package/src/components/form-designer/setting-panel/property-editor/field-number/controlsPosition-editor.vue +27 -0
  126. package/src/components/form-designer/setting-panel/property-editor/field-picture-upload/picture-upload-fileTypes-editor.vue +44 -0
  127. package/src/components/form-designer/setting-panel/property-editor/field-radio/radio-defaultValue-editor.vue +18 -0
  128. package/src/components/form-designer/setting-panel/property-editor/field-rate/allowHalf-editor.vue +23 -0
  129. package/src/components/form-designer/setting-panel/property-editor/field-rate/highThreshold-editor.vue +24 -0
  130. package/src/components/form-designer/setting-panel/property-editor/field-rate/lowThreshold-editor.vue +24 -0
  131. package/src/components/form-designer/setting-panel/property-editor/field-rate/rate-defaultValue-editor.vue +26 -0
  132. package/src/components/form-designer/setting-panel/property-editor/field-rate/rate-max-editor.vue +25 -0
  133. package/src/components/form-designer/setting-panel/property-editor/field-rate/showScore-editor.vue +23 -0
  134. package/src/components/form-designer/setting-panel/property-editor/field-rate/showText-editor.vue +23 -0
  135. package/src/components/form-designer/setting-panel/property-editor/field-select/select-defaultValue-editor.vue +18 -0
  136. package/src/components/form-designer/setting-panel/property-editor/field-slider/range-editor.vue +23 -0
  137. package/src/components/form-designer/setting-panel/property-editor/field-slider/showStops-editor.vue +23 -0
  138. package/src/components/form-designer/setting-panel/property-editor/field-slider/vertical-editor.vue +23 -0
  139. package/src/components/form-designer/setting-panel/property-editor/field-static-text/fontSize-editor.vue +23 -0
  140. package/src/components/form-designer/setting-panel/property-editor/field-static-text/preWrap-editor.vue +23 -0
  141. package/src/components/form-designer/setting-panel/property-editor/field-static-text/textContent-editor.vue +23 -0
  142. package/src/components/form-designer/setting-panel/property-editor/field-switch/activeColor-editor.vue +23 -0
  143. package/src/components/form-designer/setting-panel/property-editor/field-switch/activeText-editor.vue +23 -0
  144. package/src/components/form-designer/setting-panel/property-editor/field-switch/inactiveColor-editor.vue +23 -0
  145. package/src/components/form-designer/setting-panel/property-editor/field-switch/inactiveText-editor.vue +23 -0
  146. package/src/components/form-designer/setting-panel/property-editor/field-switch/switch-defaultValue-editor.vue +25 -0
  147. package/src/components/form-designer/setting-panel/property-editor/field-switch/switchWidth-editor.vue +23 -0
  148. package/src/components/form-designer/setting-panel/property-editor/field-time/time-defaultValue-editor.vue +26 -0
  149. package/src/components/form-designer/setting-panel/property-editor/field-time/time-format-editor.vue +27 -0
  150. package/src/components/form-designer/setting-panel/property-editor/field-time-range/time-range-defaultValue-editor.vue +26 -0
  151. package/src/components/form-designer/setting-panel/property-editor/field-time-range/time-range-format-editor.vue +27 -0
  152. package/src/components/form-designer/setting-panel/property-editor/fileMaxSize-editor.vue +23 -0
  153. package/src/components/form-designer/setting-panel/property-editor/filterable-editor.vue +23 -0
  154. package/src/components/form-designer/setting-panel/property-editor/hidden-editor.vue +23 -0
  155. package/src/components/form-designer/setting-panel/property-editor/index.js +10 -0
  156. package/src/components/form-designer/setting-panel/property-editor/label-editor.vue +30 -0
  157. package/src/components/form-designer/setting-panel/property-editor/labelAlign-editor.vue +42 -0
  158. package/src/components/form-designer/setting-panel/property-editor/labelHidden-editor.vue +23 -0
  159. package/src/components/form-designer/setting-panel/property-editor/labelIconClass-editor.vue +28 -0
  160. package/src/components/form-designer/setting-panel/property-editor/labelIconPosition-editor.vue +37 -0
  161. package/src/components/form-designer/setting-panel/property-editor/labelTooltip-editor.vue +23 -0
  162. package/src/components/form-designer/setting-panel/property-editor/labelWidth-editor.vue +25 -0
  163. package/src/components/form-designer/setting-panel/property-editor/limit-editor.vue +24 -0
  164. package/src/components/form-designer/setting-panel/property-editor/max-editor.vue +39 -0
  165. package/src/components/form-designer/setting-panel/property-editor/maxLength-editor.vue +40 -0
  166. package/src/components/form-designer/setting-panel/property-editor/min-editor.vue +40 -0
  167. package/src/components/form-designer/setting-panel/property-editor/minLength-editor.vue +41 -0
  168. package/src/components/form-designer/setting-panel/property-editor/multiple-editor.vue +24 -0
  169. package/src/components/form-designer/setting-panel/property-editor/multipleLimit-editor.vue +24 -0
  170. package/src/components/form-designer/setting-panel/property-editor/multipleSelect-editor.vue +24 -0
  171. package/src/components/form-designer/setting-panel/property-editor/name-editor.vue +89 -0
  172. package/src/components/form-designer/setting-panel/property-editor/optionItems-editor.vue +28 -0
  173. package/src/components/form-designer/setting-panel/property-editor/placeholder-editor.vue +24 -0
  174. package/src/components/form-designer/setting-panel/property-editor/precision-editor.vue +23 -0
  175. package/src/components/form-designer/setting-panel/property-editor/prefixIcon-editor.vue +23 -0
  176. package/src/components/form-designer/setting-panel/property-editor/propertyMixin.js +55 -0
  177. package/src/components/form-designer/setting-panel/property-editor/readonly-editor.vue +23 -0
  178. package/src/components/form-designer/setting-panel/property-editor/remote-editor.vue +25 -0
  179. package/src/components/form-designer/setting-panel/property-editor/required-editor.vue +23 -0
  180. package/src/components/form-designer/setting-panel/property-editor/requiredHint-editor.vue +24 -0
  181. package/src/components/form-designer/setting-panel/property-editor/rows-editor.vue +24 -0
  182. package/src/components/form-designer/setting-panel/property-editor/showFileList-editor.vue +23 -0
  183. package/src/components/form-designer/setting-panel/property-editor/showPassword-editor.vue +24 -0
  184. package/src/components/form-designer/setting-panel/property-editor/showWordLimit-editor.vue +23 -0
  185. package/src/components/form-designer/setting-panel/property-editor/size-editor.vue +38 -0
  186. package/src/components/form-designer/setting-panel/property-editor/startPlaceholder-editor.vue +23 -0
  187. package/src/components/form-designer/setting-panel/property-editor/step-editor.vue +23 -0
  188. package/src/components/form-designer/setting-panel/property-editor/suffixIcon-editor.vue +23 -0
  189. package/src/components/form-designer/setting-panel/property-editor/textAlign-editor.vue +35 -0
  190. package/src/components/form-designer/setting-panel/property-editor/type-editor.vue +33 -0
  191. package/src/components/form-designer/setting-panel/property-editor/uploadTip-editor.vue +24 -0
  192. package/src/components/form-designer/setting-panel/property-editor/uploadURL-editor.vue +28 -0
  193. package/src/components/form-designer/setting-panel/property-editor/validation-editor.vue +48 -0
  194. package/src/components/form-designer/setting-panel/property-editor/validationHint-editor.vue +23 -0
  195. package/src/components/form-designer/setting-panel/property-editor/withCredentials-editor.vue +23 -0
  196. package/src/components/form-designer/setting-panel/property-editor-factory.js +173 -0
  197. package/src/components/form-designer/setting-panel/propertyRegister.js +215 -0
  198. package/src/components/form-designer/toolbar-panel/index.vue +886 -0
  199. package/src/components/form-designer/widget-panel/index.vue +394 -0
  200. package/src/components/form-designer/widget-panel/templatesConfig.js +58 -0
  201. package/src/components/form-designer/widget-panel/widgetsConfig.js +934 -0
  202. package/src/components/form-render/container-item/container-item-wrapper.vue +37 -0
  203. package/src/components/form-render/container-item/containerItemMixin.js +221 -0
  204. package/src/components/form-render/container-item/grid-col-item.vue +126 -0
  205. package/src/components/form-render/container-item/grid-item.vue +59 -0
  206. package/src/components/form-render/container-item/index.js +24 -0
  207. package/src/components/form-render/container-item/sub-form-item.vue +417 -0
  208. package/src/components/form-render/container-item/tab-item.vue +99 -0
  209. package/src/components/form-render/container-item/table-cell-item.vue +72 -0
  210. package/src/components/form-render/container-item/table-item.vue +70 -0
  211. package/src/components/form-render/index.vue +721 -0
  212. package/src/components/form-render/refMixin.js +30 -0
  213. package/src/components/svg-icon/index.vue +49 -0
  214. package/src/components/v-table/index.vue +106 -0
  215. package/src/extension/extension-helper.js +23 -0
  216. package/src/extension/extension-loader.js +116 -0
  217. package/src/extension/samples/alert/alert-widget.vue +72 -0
  218. package/src/extension/samples/card/card-item.vue +100 -0
  219. package/src/extension/samples/card/card-widget.vue +132 -0
  220. package/src/extension/samples/extension-schema.js +36 -0
  221. package/src/extension/samples/extension-sfc-generator.js +50 -0
  222. package/src/iconfont/iconfont.css +29 -0
  223. package/src/iconfont/iconfont.eot +0 -0
  224. package/src/iconfont/iconfont.js +1 -0
  225. package/src/iconfont/iconfont.json +37 -0
  226. package/src/iconfont/iconfont.svg +35 -0
  227. package/src/iconfont/iconfont.ttf +0 -0
  228. package/src/iconfont/iconfont.woff +0 -0
  229. package/src/iconfont/iconfont.woff2 +0 -0
  230. package/src/icons/index.js +3 -0
  231. package/src/icons/svg/alert.svg +1 -0
  232. package/src/icons/svg/button.svg +1 -0
  233. package/src/icons/svg/card.svg +1 -0
  234. package/src/icons/svg/cascader-field.svg +1 -0
  235. package/src/icons/svg/checkbox-field.svg +1 -0
  236. package/src/icons/svg/color-field.svg +1 -0
  237. package/src/icons/svg/custom-component.svg +1 -0
  238. package/src/icons/svg/data-table.svg +1 -0
  239. package/src/icons/svg/date-field.svg +1 -0
  240. package/src/icons/svg/date-range-field.svg +1 -0
  241. package/src/icons/svg/divider.svg +1 -0
  242. package/src/icons/svg/document.svg +1 -0
  243. package/src/icons/svg/drag.svg +1 -0
  244. package/src/icons/svg/file-upload-field.svg +1 -0
  245. package/src/icons/svg/github.svg +1 -0
  246. package/src/icons/svg/grid.svg +1 -0
  247. package/src/icons/svg/html-text.svg +1 -0
  248. package/src/icons/svg/node-tree.svg +1 -0
  249. package/src/icons/svg/number-field.svg +1 -0
  250. package/src/icons/svg/picture-upload-field.svg +1 -0
  251. package/src/icons/svg/radio-field.svg +1 -0
  252. package/src/icons/svg/rate-field.svg +1 -0
  253. package/src/icons/svg/redo.svg +1 -0
  254. package/src/icons/svg/rich-editor-field.svg +1 -0
  255. package/src/icons/svg/section.svg +1 -0
  256. package/src/icons/svg/select-field.svg +1 -0
  257. package/src/icons/svg/slider-field.svg +1 -0
  258. package/src/icons/svg/slot-component.svg +1 -0
  259. package/src/icons/svg/slot-field.svg +1 -0
  260. package/src/icons/svg/static-text.svg +1 -0
  261. package/src/icons/svg/sub-form.svg +1 -0
  262. package/src/icons/svg/switch-field.svg +1 -0
  263. package/src/icons/svg/tab.svg +1 -0
  264. package/src/icons/svg/table.svg +1 -0
  265. package/src/icons/svg/text-field.svg +1 -0
  266. package/src/icons/svg/textarea-field.svg +1 -0
  267. package/src/icons/svg/time-field.svg +1 -0
  268. package/src/icons/svg/time-range-field.svg +1 -0
  269. package/src/icons/svg/undo.svg +1 -0
  270. package/src/icons/svg/vue-sfc.svg +1 -0
  271. package/src/lang/en-US.js +354 -0
  272. package/src/lang/en-US_extension.js +26 -0
  273. package/src/lang/en-US_render.js +38 -0
  274. package/src/lang/zh-CN.js +354 -0
  275. package/src/lang/zh-CN_extension.js +26 -0
  276. package/src/lang/zh-CN_render.js +38 -0
  277. package/src/styles/global.scss +108 -0
  278. package/src/styles/index.scss +15 -0
  279. package/src/utils/beautifierLoader.js +77 -0
  280. package/src/utils/code-generator.js +91 -0
  281. package/src/utils/config.js +9 -0
  282. package/src/utils/debug-console.js +7 -0
  283. package/src/utils/directive.js +74 -0
  284. package/src/utils/emitter.js +34 -0
  285. package/src/utils/format.js +214 -0
  286. package/src/utils/i18n.js +95 -0
  287. package/src/utils/sfc-generator.js +583 -0
  288. package/src/utils/smart-vue-i18n/index.js +56 -0
  289. package/src/utils/smart-vue-i18n/utils.js +47 -0
  290. package/src/utils/util.js +376 -0
  291. package/src/utils/validators.js +127 -0
  292. package/src/utils/vue2js-generator.js +144 -0
  293. package/src/utils/vue3js-generator.js +70 -0
@@ -0,0 +1,886 @@
1
+ <template>
2
+ <div class="toolbar-container">
3
+ <div class="left-toolbar">
4
+ <el-button type="text" :disabled="undoDisabled" :title="i18nt('designer.toolbar.undoHint')" @click="undoHistory">
5
+ <svg-icon icon-class="undo" /></el-button>
6
+ <el-button type="text" :disabled="redoDisabled" :title="i18nt('designer.toolbar.redoHint')" @click="redoHistory">
7
+ <svg-icon icon-class="redo" /></el-button>
8
+ <el-button-group style="margin-left: 20px">
9
+ <el-button :type="layoutType === 'PC' ? 'info': ''" @click="changeLayoutType('PC')">
10
+ {{i18nt('designer.toolbar.pcLayout')}}</el-button>
11
+ <el-button :type="layoutType === 'Pad' ? 'info': ''" @click="changeLayoutType('Pad')">
12
+ {{i18nt('designer.toolbar.padLayout')}}</el-button>
13
+ <el-button :type="layoutType === 'H5' ? 'info': ''" @click="changeLayoutType('H5')">
14
+ {{i18nt('designer.toolbar.mobileLayout')}}</el-button>
15
+ </el-button-group>
16
+ <el-button type="" style="margin-left: 20px" :title="i18nt('designer.toolbar.nodeTreeHint')" @click="showNodeTreeDrawer">
17
+ <svg-icon icon-class="node-tree" /></el-button>
18
+ </div>
19
+
20
+ <el-drawer :title="i18nt('designer.toolbar.nodeTreeTitle')" direction="ltr" :visible.sync="showNodeTreeDrawerFlag" :modal="false" :size="280"
21
+ :destroy-on-close="true" class="node-tree-drawer">
22
+ <el-tree ref="nodeTree" :data="nodeTreeData" node-key="id" default-expand-all highlight-current class="node-tree"
23
+ icon-class="el-icon-arrow-right" @node-click="onNodeTreeClick"></el-tree>
24
+ </el-drawer>
25
+
26
+ <div class="right-toolbar" :style="{width: toolbarWidth + 'px'}">
27
+ <div class="right-toolbar-con">
28
+ <el-button v-if="showToolButton('clearDesignerButton')" type="text" @click="clearFormWidget">
29
+ <i class="el-icon-delete" />{{i18nt('designer.toolbar.clear')}}</el-button>
30
+ <el-button v-if="showToolButton('previewFormButton')" type="text" @click="previewForm">
31
+ <i class="el-icon-view" />{{i18nt('designer.toolbar.preview')}}</el-button>
32
+ <el-button v-if="showToolButton('importJsonButton')" type="text" @click="importJson">
33
+ {{i18nt('designer.toolbar.importJson')}}</el-button>
34
+ <el-button v-if="showToolButton('exportJsonButton')" type="text" @click="exportJson">
35
+ {{i18nt('designer.toolbar.exportJson')}}</el-button>
36
+ <el-button v-if="showToolButton('exportCodeButton')" type="text" @click="exportCode">
37
+ {{i18nt('designer.toolbar.exportCode')}}</el-button>
38
+ <el-button v-if="showToolButton('generateSFCButton')" type="text" @click="generateSFC">
39
+ <svg-icon icon-class="vue-sfc" />{{i18nt('designer.toolbar.generateSFC')}}</el-button>
40
+ <template v-for="(idx, slotName) in $slots">
41
+ <slot :name="slotName"></slot>
42
+ </template>
43
+ </div>
44
+ </div>
45
+
46
+ <el-dialog :title="i18nt('designer.toolbar.preview')" :visible.sync="showPreviewDialogFlag" v-if="showPreviewDialogFlag"
47
+ :show-close="true" :close-on-click-modal="false" :close-on-press-escape="false" center v-dialog-drag
48
+ :destroy-on-close="true" :append-to-body="true" class="small-padding-dialog" width="75%"
49
+ :fullscreen="(layoutType === 'H5') || (layoutType === 'Pad')">
50
+ <div>
51
+ <div class="form-render-wrapper" :class="[layoutType === 'H5' ? 'h5-layout' : (layoutType === 'Pad' ? 'pad-layout' : '')]">
52
+ <VFormRender ref="preForm" :form-json="formJson" :form-data="testFormData" :preview-state="true"
53
+ :option-data="testOptionData" :global-dsv="designerDsv"
54
+ @appendButtonClick="testOnAppendButtonClick" @buttonClick="testOnButtonClick"
55
+ @formChange="handleFormChange">
56
+ <!--
57
+ <div slot="testSlot">aaaa</div>
58
+ -->
59
+ </VFormRender>
60
+ </div>
61
+ </div>
62
+ <code-editor v-model="testFunc" style="display: none"></code-editor>
63
+ <div slot="footer" class="dialog-footer">
64
+ <el-button type="primary" @click="getFormData">{{i18nt('designer.hint.getFormData')}}</el-button>
65
+ <el-button type="primary" @click="resetForm">{{i18nt('designer.hint.resetForm')}}</el-button>
66
+ <el-button type="primary" @click="setFormDisabled">{{i18nt('designer.hint.disableForm')}}</el-button>
67
+ <el-button type="primary" @click="setFormEnabled">{{i18nt('designer.hint.enableForm')}}</el-button>
68
+ <el-button type="" @click="showPreviewDialogFlag = false">{{i18nt('designer.hint.closePreview')}}</el-button>
69
+ <el-button v-if="false" @click="printFormJson">PrintFormJson</el-button>
70
+ <el-button v-if="false" @click="testValidate">TestValidate</el-button>
71
+ <el-button v-if="false" @click="testSetFormData">TestSF</el-button>
72
+ <el-button v-if="false" @click="testReloadOptionData">Test ROD</el-button>
73
+ </div>
74
+ </el-dialog>
75
+
76
+ <el-dialog :title="i18nt('designer.toolbar.importJson')" :visible.sync="showImportJsonDialogFlag"
77
+ v-if="showImportJsonDialogFlag" :show-close="true" class="small-padding-dialog" center append-to-body v-dialog-drag
78
+ :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true">
79
+ <el-alert type="info" :title="i18nt('designer.hint.importJsonHint')" show-icon class="alert-padding"></el-alert>
80
+ <code-editor :mode="'json'" :readonly="false" v-model="importTemplate"></code-editor>
81
+ <div slot="footer" class="dialog-footer">
82
+ <el-button type="primary" @click="doJsonImport">
83
+ {{i18nt('designer.hint.import')}}</el-button>
84
+ <el-button @click="showImportJsonDialogFlag = false">
85
+ {{i18nt('designer.hint.cancel')}}</el-button>
86
+ </div>
87
+ </el-dialog>
88
+
89
+ <el-dialog :title="i18nt('designer.toolbar.exportJson')" :visible.sync="showExportJsonDialogFlag"
90
+ v-if="showExportJsonDialogFlag" :show-close="true" class="small-padding-dialog" center append-to-body v-dialog-drag
91
+ :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true">
92
+ <code-editor :mode="'json'" :readonly="true" v-model="jsonContent"></code-editor>
93
+ <div slot="footer" class="dialog-footer">
94
+ <el-button type="primary" class="copy-json-btn" :data-clipboard-text="jsonRawContent" @click="copyFormJson">
95
+ {{i18nt('designer.hint.copyJson')}}</el-button>
96
+ <el-button @click="saveFormJson">{{i18nt('designer.hint.saveFormJson')}}</el-button>
97
+ <el-button type="" @click="showExportJsonDialogFlag = false">
98
+ {{i18nt('designer.hint.closePreview')}}</el-button>
99
+ </div>
100
+ </el-dialog>
101
+
102
+ <el-dialog :title="i18nt('designer.toolbar.exportCode')" :visible.sync="showExportCodeDialogFlag"
103
+ v-if="showExportCodeDialogFlag" :show-close="true" class="small-padding-dialog" center append-to-body v-dialog-drag
104
+ width="65%" :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true">
105
+ <el-tabs type="border-card" class="no-box-shadow no-padding" v-model="activeCodeTab">
106
+ <el-tab-pane label="Vue" name="vue">
107
+ <code-editor :mode="'html'" :readonly="true" v-model="vueCode" :user-worker="false"></code-editor>
108
+ </el-tab-pane>
109
+ <el-tab-pane label="HTML" name="html">
110
+ <code-editor :mode="'html'" :readonly="true" v-model="htmlCode" :user-worker="false"></code-editor>
111
+ </el-tab-pane>
112
+ </el-tabs>
113
+ <div slot="footer" class="dialog-footer">
114
+ <el-button type="primary" class="copy-vue-btn" :data-clipboard-text="vueCode" @click="copyVueCode">
115
+ {{i18nt('designer.hint.copyVueCode')}}</el-button>
116
+ <el-button type="primary" class="copy-html-btn" :data-clipboard-text="htmlCode" @click="copyHtmlCode">
117
+ {{i18nt('designer.hint.copyHtmlCode')}}</el-button>
118
+ <el-button @click="saveVueCode">{{i18nt('designer.hint.saveVueCode')}}</el-button>
119
+ <el-button @click="saveHtmlCode">{{i18nt('designer.hint.saveHtmlCode')}}</el-button>
120
+ <el-button type="" @click="showExportCodeDialogFlag = false">
121
+ {{i18nt('designer.hint.closePreview')}}</el-button>
122
+ </div>
123
+ </el-dialog>
124
+
125
+ <el-dialog :title="i18nt('designer.hint.exportFormData')" :visible.sync="showFormDataDialogFlag"
126
+ v-if="showFormDataDialogFlag" :show-close="true" class="dialog-title-light-bg" center v-dialog-drag
127
+ :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true"
128
+ :append-to-body="true">
129
+ <div style="border: 1px solid #DCDFE6">
130
+ <code-editor :mode="'json'" :readonly="true" v-model="formDataJson"></code-editor>
131
+ </div>
132
+ <div slot="footer" class="dialog-footer">
133
+ <el-button type="primary" class="copy-form-data-json-btn" :data-clipboard-text="formDataRawJson" @click="copyFormDataJson">
134
+ {{i18nt('designer.hint.copyFormData')}}</el-button>
135
+ <el-button @click="saveFormData">{{i18nt('designer.hint.saveFormData')}}</el-button>
136
+ <el-button type="" @click="showFormDataDialogFlag = false">
137
+ {{i18nt('designer.hint.closePreview')}}</el-button>
138
+ </div>
139
+ </el-dialog>
140
+
141
+ <el-dialog :title="i18nt('designer.toolbar.generateSFC')" :visible.sync="showExportSFCDialogFlag"
142
+ v-if="showExportSFCDialogFlag" :show-close="true" class="small-padding-dialog" center append-to-body v-dialog-drag
143
+ width="65%" :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true">
144
+ <el-tabs type="border-card" class="no-box-shadow no-padding" v-model="activeSFCTab">
145
+ <el-tab-pane label="Vue2" name="vue2">
146
+ <code-editor :mode="'html'" :readonly="true" v-model="sfcCode" :user-worker="false"></code-editor>
147
+ </el-tab-pane>
148
+ <el-tab-pane label="Vue3" name="vue3">
149
+ <code-editor :mode="'html'" :readonly="true" v-model="sfcCodeV3" :user-worker="false"></code-editor>
150
+ </el-tab-pane>
151
+ </el-tabs>
152
+ <div slot="footer" class="dialog-footer">
153
+ <el-button type="primary" class="copy-vue2-sfc-btn" :data-clipboard-text="sfcCode" @click="copyV2SFC">
154
+ {{i18nt('designer.hint.copyVue2SFC')}}</el-button>
155
+ <el-button type="primary" class="copy-vue3-sfc-btn" :data-clipboard-text="sfcCodeV3" @click="copyV3SFC">
156
+ {{i18nt('designer.hint.copyVue3SFC')}}</el-button>
157
+ <el-button @click="saveV2SFC">{{i18nt('designer.hint.saveVue2SFC')}}</el-button>
158
+ <el-button @click="saveV3SFC">{{i18nt('designer.hint.saveVue3SFC')}}</el-button>
159
+ <el-button type="" @click="showExportSFCDialogFlag = false">
160
+ {{i18nt('designer.hint.closePreview')}}</el-button>
161
+ </div>
162
+ </el-dialog>
163
+ </div>
164
+ </template>
165
+
166
+ <script>
167
+ import VFormRender from '@/components/form-render/index'
168
+ import CodeEditor from '@/components/code-editor/index'
169
+ import Clipboard from 'clipboard'
170
+ import {
171
+ deepClone,
172
+ copyToClipboard,
173
+ generateId,
174
+ getQueryParam,
175
+ traverseAllWidgets, addWindowResizeHandler
176
+ } from "@/utils/util"
177
+ import i18n from '@/utils/i18n'
178
+ import {generateCode} from "@/utils/code-generator";
179
+ import {genSFC} from "@/utils/sfc-generator";
180
+ import loadBeautifier from "@/utils/beautifierLoader";
181
+ import { saveAs } from 'file-saver'
182
+ import SvgIcon from '@/components/svg-icon'
183
+
184
+ export default {
185
+ name: "ToolbarPanel",
186
+ mixins: [i18n],
187
+ components: {
188
+ VFormRender,
189
+ CodeEditor,
190
+ Clipboard,
191
+ SvgIcon,
192
+ },
193
+ props: {
194
+ designer: Object,
195
+ globalDsv: {
196
+ type: Object,
197
+ default: () => ({})
198
+ },
199
+ },
200
+ inject: ['getDesignerConfig'],
201
+ data() {
202
+ return {
203
+ designerConfig: this.getDesignerConfig(),
204
+
205
+ toolbarWidth: 420,
206
+ showPreviewDialogFlag: false,
207
+ showImportJsonDialogFlag: false,
208
+ showExportJsonDialogFlag: false,
209
+ showExportCodeDialogFlag: false,
210
+ showFormDataDialogFlag: false,
211
+ showExportSFCDialogFlag: false,
212
+ showNodeTreeDrawerFlag: false,
213
+
214
+ nodeTreeData: [],
215
+
216
+ testFunc: '',
217
+ importTemplate: '',
218
+ jsonContent: '',
219
+ jsonRawContent: '',
220
+
221
+ formDataJson: '',
222
+ formDataRawJson: '',
223
+
224
+ vueCode: '',
225
+ htmlCode: '',
226
+
227
+ sfcCode: '',
228
+ sfcCodeV3: '',
229
+
230
+ activeCodeTab: 'vue',
231
+ activeSFCTab: 'vue2',
232
+
233
+ testFormData: {
234
+ // 'userName': '666888',
235
+ // 'productItems': [
236
+ // {'pName': 'iPhone12', 'pNum': 10},
237
+ // {'pName': 'P50', 'pNum': 16},
238
+ // ]
239
+
240
+ 'select62173': 2,
241
+ },
242
+ testOptionData: {
243
+ 'select62173': [
244
+ {label: '01', value: 1},
245
+ {label: '22', value: 2},
246
+ {label: '333', value: 3},
247
+ ],
248
+
249
+ 'select001': [
250
+ {label: '辣椒', value: 1},
251
+ {label: '菠萝', value: 2},
252
+ {label: '丑橘子', value: 3},
253
+ ],
254
+ },
255
+
256
+ }
257
+ },
258
+ computed: {
259
+ formJson() {
260
+ return {
261
+ // widgetList: this.designer.widgetList,
262
+ // formConfig: this.designer.formConfig
263
+
264
+ widgetList: deepClone(this.designer.widgetList),
265
+ formConfig: deepClone(this.designer.formConfig)
266
+ }
267
+ },
268
+
269
+ undoDisabled() {
270
+ return !this.designer.undoEnabled()
271
+ },
272
+
273
+ redoDisabled() {
274
+ return !this.designer.redoEnabled()
275
+ },
276
+
277
+ layoutType() {
278
+ return this.designer.getLayoutType()
279
+ },
280
+
281
+ designerDsv() {
282
+ return this.globalDsv
283
+ }
284
+
285
+ },
286
+ watch: {
287
+ 'designer.widgetList': {
288
+ deep: true,
289
+ handler(val) {
290
+ //console.log('test-----', val)
291
+ //this.refreshNodeTree()
292
+ }
293
+ },
294
+
295
+
296
+ },
297
+ mounted() {
298
+ let maxTBWidth = this.designerConfig.toolbarMaxWidth || 420
299
+ let minTBWidth = this.designerConfig.toolbarMinWidth || 300
300
+ let newTBWidth = window.innerWidth - 260 - 300 - 320 - 80
301
+ this.toolbarWidth = newTBWidth >= maxTBWidth ? maxTBWidth : (newTBWidth <= minTBWidth ? minTBWidth : newTBWidth)
302
+ addWindowResizeHandler(() => {
303
+ this.$nextTick(() => {
304
+ let newTBWidth2 = window.innerWidth - 260 - 300 - 320 - 80
305
+ this.toolbarWidth = newTBWidth2 >= maxTBWidth ? maxTBWidth : (newTBWidth2 <= minTBWidth ? minTBWidth : newTBWidth2)
306
+ })
307
+ })
308
+ },
309
+ methods: {
310
+ showToolButton(configName) {
311
+ if (this.designerConfig[configName] === undefined) {
312
+ return true
313
+ }
314
+
315
+ return !!this.designerConfig[configName]
316
+ },
317
+
318
+ buildTreeNodeOfWidget(widget, treeNode) {
319
+ let curNode = {
320
+ id: widget.id,
321
+ label: widget.options.label || widget.type,
322
+ //selectable: true,
323
+ }
324
+ treeNode.push(curNode)
325
+
326
+ if (widget.category === undefined) {
327
+ return
328
+ }
329
+
330
+ curNode.children = []
331
+ if (widget.type === 'grid') {
332
+ widget.cols.map(col => {
333
+ let colNode = {
334
+ id: col.id,
335
+ label: col.options.name || widget.type,
336
+ children: []
337
+ }
338
+ curNode.children.push(colNode)
339
+ col.widgetList.map(wChild => {
340
+ this.buildTreeNodeOfWidget(wChild, colNode.children)
341
+ })
342
+ })
343
+ } else if (widget.type === 'table') {
344
+ //TODO: 需要考虑合并单元格!!
345
+ widget.rows.map(row => {
346
+ let rowNode = {
347
+ id: row.id,
348
+ label: 'table-row',
349
+ selectable: false,
350
+ children: [],
351
+ }
352
+ curNode.children.push(rowNode)
353
+
354
+ row.cols.map(cell => {
355
+ if (!!cell.merged) { //跳过合并单元格!!
356
+ return
357
+ }
358
+
359
+ let rowChildren = rowNode.children
360
+ let cellNode = {
361
+ id: cell.id,
362
+ label: 'table-cell',
363
+ children: []
364
+ }
365
+ rowChildren.push(cellNode)
366
+
367
+ cell.widgetList.map(wChild => {
368
+ this.buildTreeNodeOfWidget(wChild, cellNode.children)
369
+ })
370
+ })
371
+ })
372
+ } else if (widget.type === 'tab') {
373
+ widget.tabs.map(tab => {
374
+ let tabNode = {
375
+ id: tab.id,
376
+ label: tab.options.name || widget.type,
377
+ selectable: false,
378
+ children: []
379
+ }
380
+ curNode.children.push(tabNode)
381
+ tab.widgetList.map(wChild => {
382
+ this.buildTreeNodeOfWidget(wChild, tabNode.children)
383
+ })
384
+ })
385
+ } else if (widget.type === 'sub-form') {
386
+ widget.widgetList.map(wChild => {
387
+ this.buildTreeNodeOfWidget(wChild, curNode.children)
388
+ })
389
+ } else if (widget.category === 'container') { //自定义容器
390
+ widget.widgetList.map(wChild => {
391
+ this.buildTreeNodeOfWidget(wChild, curNode.children)
392
+ })
393
+ }
394
+ },
395
+
396
+ refreshNodeTree() {
397
+ this.nodeTreeData.length = 0
398
+ this.designer.widgetList.forEach(wItem => {
399
+ this.buildTreeNodeOfWidget(wItem, this.nodeTreeData)
400
+ })
401
+ },
402
+
403
+ showNodeTreeDrawer() {
404
+ this.refreshNodeTree()
405
+ this.showNodeTreeDrawerFlag = true
406
+ this.$nextTick(() => {
407
+ if (!!this.designer.selectedId) { //同步当前选中组件到节点树!!!
408
+ this.$refs.nodeTree.setCurrentKey(this.designer.selectedId)
409
+ }
410
+ })
411
+ },
412
+
413
+ undoHistory() {
414
+ this.designer.undoHistoryStep()
415
+ },
416
+
417
+ redoHistory() {
418
+ this.designer.redoHistoryStep()
419
+ },
420
+
421
+ changeLayoutType(newType) {
422
+ this.designer.changeLayoutType(newType)
423
+ },
424
+
425
+ clearFormWidget() {
426
+ this.designer.clearDesigner()
427
+ this.designer.formWidget.clearWidgetRefList()
428
+ },
429
+
430
+ previewForm() {
431
+ this.showPreviewDialogFlag = true
432
+ },
433
+
434
+ saveAsFile(fileContent, defaultFileName) {
435
+ this.$prompt(this.i18nt('designer.hint.fileNameForSave'), this.i18nt('designer.hint.saveFileTitle'), {
436
+ inputValue: defaultFileName,
437
+ closeOnClickModal: false,
438
+ inputPlaceholder: this.i18nt('designer.hint.fileNameInputPlaceholder')
439
+ }).then(({ value }) => {
440
+ if (!value) {
441
+ value = defaultFileName
442
+ }
443
+
444
+ if (getQueryParam('vscode') == 1) {
445
+ this.vsSaveFile(value, fileContent)
446
+ return
447
+ }
448
+
449
+ const fileBlob = new Blob([fileContent], { type: 'text/plain;charset=utf-8' })
450
+ saveAs(fileBlob ,value)
451
+ }).catch(() => {
452
+ //
453
+ })
454
+ },
455
+
456
+ vsSaveFile(fileName, fileContent) {
457
+ const msgObj = {
458
+ cmd: 'writeFile',
459
+ data: {
460
+ fileName,
461
+ code: fileContent
462
+ }
463
+ }
464
+ window.parent.postMessage(msgObj, '*')
465
+ },
466
+
467
+ importJson() {
468
+ this.importTemplate = JSON.stringify(this.designer.getImportTemplate(), null, ' ')
469
+ this.showImportJsonDialogFlag = true
470
+ },
471
+
472
+ doJsonImport() {
473
+ try {
474
+ let importObj = JSON.parse(this.importTemplate)
475
+ this.designer.loadFormJson(importObj)
476
+
477
+ this.showImportJsonDialogFlag = false
478
+ this.$message.success(this.i18nt('designer.hint.importJsonSuccess'))
479
+
480
+ this.designer.emitHistoryChange()
481
+
482
+ this.designer.emitEvent('form-json-imported', [])
483
+ } catch(ex) {
484
+ this.$message.error(ex + '')
485
+ }
486
+ },
487
+
488
+ exportJson() {
489
+ let widgetList = deepClone(this.designer.widgetList)
490
+ let formConfig = deepClone(this.designer.formConfig)
491
+ this.jsonContent = JSON.stringify({widgetList, formConfig}, null, ' ')
492
+ this.jsonRawContent = JSON.stringify({widgetList, formConfig})
493
+ this.showExportJsonDialogFlag = true
494
+ },
495
+
496
+ copyFormJson(e) {
497
+ copyToClipboard(this.jsonRawContent, e,
498
+ this.$message,
499
+ this.i18nt('designer.hint.copyJsonSuccess'),
500
+ this.i18nt('designer.hint.copyJsonFail')
501
+ )
502
+ },
503
+
504
+ saveFormJson() {
505
+ this.saveAsFile(this.jsonContent, `vform${generateId()}.json`)
506
+ },
507
+
508
+ exportCode() {
509
+ this.vueCode = generateCode(this.formJson)
510
+ this.htmlCode = generateCode(this.formJson, 'html')
511
+ this.showExportCodeDialogFlag = true
512
+ },
513
+
514
+ copyVueCode(e) {
515
+ copyToClipboard(this.vueCode, e,
516
+ this.$message,
517
+ this.i18nt('designer.hint.copyVueCodeSuccess'),
518
+ this.i18nt('designer.hint.copyVueCodeFail')
519
+ )
520
+ },
521
+
522
+ copyHtmlCode(e) {
523
+ copyToClipboard(this.htmlCode, e,
524
+ this.$message,
525
+ this.i18nt('designer.hint.copyHtmlCodeSuccess'),
526
+ this.i18nt('designer.hint.copyHtmlCodeFail')
527
+ )
528
+ },
529
+
530
+ saveVueCode() {
531
+ this.saveAsFile(this.vueCode, `vform${generateId()}.vue`)
532
+ },
533
+
534
+ saveHtmlCode() {
535
+ this.saveAsFile(this.htmlCode, `vform${generateId()}.html`)
536
+ },
537
+
538
+ generateSFC() {
539
+ loadBeautifier(beautifier => {
540
+ this.sfcCode = genSFC(this.designer.formConfig, this.designer.widgetList, beautifier)
541
+ this.sfcCodeV3 = genSFC(this.designer.formConfig, this.designer.widgetList, beautifier, true)
542
+ this.showExportSFCDialogFlag = true
543
+ })
544
+ },
545
+
546
+ copyV2SFC(e) {
547
+ copyToClipboard(this.sfcCode, e,
548
+ this.$message,
549
+ this.i18nt('designer.hint.copySFCSuccess'),
550
+ this.i18nt('designer.hint.copySFCFail')
551
+ )
552
+ },
553
+
554
+ copyV3SFC(e) {
555
+ copyToClipboard(this.sfcCodeV3, e,
556
+ this.$message,
557
+ this.i18nt('designer.hint.copySFCSuccess'),
558
+ this.i18nt('designer.hint.copySFCFail')
559
+ )
560
+ },
561
+
562
+ saveV2SFC() {
563
+ this.saveAsFile(this.sfcCode, `vformV2-${generateId()}.vue`)
564
+ },
565
+
566
+ saveV3SFC() {
567
+ this.saveAsFile(this.sfcCodeV3, `vformV3-${generateId()}.vue`)
568
+ },
569
+
570
+ getFormData() {
571
+ this.$refs['preForm'].getFormData().then(formData => {
572
+ this.formDataJson = JSON.stringify(formData, null, ' ')
573
+ this.formDataRawJson = JSON.stringify(formData)
574
+
575
+ this.showFormDataDialogFlag = true
576
+ }).catch(error => {
577
+ this.$message.error(error)
578
+ })
579
+ },
580
+
581
+ copyFormDataJson(e) {
582
+ copyToClipboard(this.formDataRawJson, e,
583
+ this.$message,
584
+ this.i18nt('designer.hint.copyJsonSuccess'),
585
+ this.i18nt('designer.hint.copyJsonFail')
586
+ )
587
+ },
588
+
589
+ saveFormData() {
590
+ this.saveAsFile(this.htmlCode, `formData${generateId()}.json`)
591
+ },
592
+
593
+ resetForm() {
594
+ this.$refs['preForm'].resetForm()
595
+ },
596
+
597
+ setFormDisabled() {
598
+ this.$refs['preForm'].disableForm()
599
+ },
600
+
601
+ setFormEnabled() {
602
+ this.$refs['preForm'].enableForm()
603
+ },
604
+
605
+ printFormJson() {
606
+ let tmpFS = {
607
+ widgetList: deepClone(this.designer.widgetList),
608
+ formConfig: deepClone(this.designer.formConfig)
609
+ }
610
+
611
+ console.log(tmpFS)
612
+ },
613
+
614
+ testValidate() {
615
+ console.log('test===', this.$refs['preForm'].validateForm())
616
+ },
617
+
618
+ testSetFormData() {
619
+ // let fData = {
620
+ // 'fuTest': [
621
+ // {
622
+ // name: '上传文件测试.xlsx',
623
+ // url: 'https://www.vform666.com/123.xlsx'
624
+ // }
625
+ // ]
626
+ // }
627
+ // this.$refs['preForm'].setFormData(fData)
628
+
629
+ let nfData = {
630
+ "checkbox45524": [
631
+ 1,
632
+ 2
633
+ ]
634
+ }
635
+ this.$refs['preForm'].setFormData(nfData)
636
+ },
637
+
638
+ testReloadOptionData() {
639
+ this.testOptionData['select001'].push({
640
+ label: 'aaa',
641
+ value: 888
642
+ })
643
+
644
+ //this.$refs.preForm.reloadOptionData()
645
+ this.$refs.preForm.reloadOptionData('select001')
646
+ },
647
+
648
+ handleFormChange(fieldName, newValue, oldValue, formModel) {
649
+ /*
650
+ console.log('---formChange start---')
651
+ console.log('fieldName', fieldName)
652
+ console.log('newValue', newValue)
653
+ console.log('oldValue', oldValue)
654
+ console.log('formModel', formModel)
655
+ console.log('---formChange end---')
656
+ */
657
+ },
658
+
659
+ testOnAppendButtonClick(clickedWidget) {
660
+ console.log('test', clickedWidget)
661
+ },
662
+
663
+ testOnButtonClick(button) {
664
+ console.log('test', button)
665
+ },
666
+
667
+ findWidgetById(wId) {
668
+ let foundW = null
669
+ traverseAllWidgets(this.designer.widgetList, (w) => {
670
+ if (w.id === wId) {
671
+ foundW = w
672
+ }
673
+ })
674
+
675
+ return foundW
676
+ },
677
+
678
+ onNodeTreeClick(nodeData, node, nodeEl) {
679
+ //console.log('test', JSON.stringify(nodeData))
680
+
681
+ if ((nodeData.selectable !== undefined) && !nodeData.selectable) {
682
+ this.$message.info(this.i18nt('designer.hint.currentNodeCannotBeSelected'))
683
+ } else {
684
+ const selectedId = nodeData.id
685
+ const foundW = this.findWidgetById(selectedId)
686
+ if (!!foundW) {
687
+ this.designer.setSelected(foundW)
688
+ }
689
+ }
690
+ },
691
+
692
+ }
693
+ }
694
+ </script>
695
+
696
+ <style lang="scss" scoped>
697
+ div.toolbar-container {
698
+ //min-width: 728px; /* 解决工具按钮栏换行的问题 */
699
+ /* 上一行css有问题,当窗口宽度不足时会把按钮挤出到右边的属性设置区,弃之! */
700
+ }
701
+
702
+ .left-toolbar {
703
+ float: left;
704
+ font-size: 16px;
705
+ }
706
+
707
+ .right-toolbar {
708
+ float: right;
709
+ //width: 420px;
710
+ text-align: right;
711
+ overflow: hidden;
712
+
713
+ .right-toolbar-con {
714
+ text-align: left;
715
+ width: 600px;
716
+ }
717
+
718
+ ::v-deep .el-button--text {
719
+ font-size: 14px !important;
720
+ }
721
+ }
722
+
723
+ .el-button i {
724
+ margin-right: 3px;
725
+ }
726
+
727
+ .small-padding-dialog {
728
+ ::v-deep .el-dialog__header {
729
+ //padding-top: 3px;
730
+ //padding-bottom: 3px;
731
+ background: #f1f2f3;
732
+ }
733
+
734
+ ::v-deep .el-dialog__body {
735
+ padding: 12px 15px 12px 15px;
736
+
737
+ .el-alert.alert-padding {
738
+ padding: 0 10px;
739
+ }
740
+ }
741
+
742
+ ::v-deep .ace-container {
743
+ border: 1px solid #DCDFE6;
744
+ }
745
+ }
746
+
747
+ .dialog-title-light-bg {
748
+ ::v-deep .el-dialog__header {
749
+ background: #f1f2f3;
750
+ }
751
+ }
752
+
753
+ .no-box-shadow {
754
+ box-shadow: none;
755
+ }
756
+
757
+ .no-padding.el-tabs--border-card {
758
+ ::v-deep .el-tabs__content {
759
+ padding: 0;
760
+ }
761
+ }
762
+
763
+ .form-render-wrapper {
764
+ //height: calc(100vh - 142px);
765
+ //all: revert !important; /* 防止表单继承el-dialog等外部样式,未生效,原因不明?? */
766
+ }
767
+
768
+ .form-render-wrapper.h5-layout {
769
+ margin: 0 auto;
770
+ width: 420px;
771
+ border-radius: 15px;
772
+ //border-width: 10px;
773
+ box-shadow: 0 0 1px 10px #495060;
774
+ height: calc(100vh - 142px);
775
+ overflow-y: auto;
776
+ overflow-x: hidden;
777
+ }
778
+
779
+ .form-render-wrapper.pad-layout {
780
+ margin: 0 auto;
781
+ width: 960px;
782
+ border-radius: 15px;
783
+ //border-width: 10px;
784
+ box-shadow: 0 0 1px 10px #495060;
785
+ height: calc(100vh - 142px);
786
+ overflow-y: auto;
787
+ overflow-x: hidden;
788
+ }
789
+
790
+ .node-tree-drawer ::v-deep {
791
+ .el-drawer {
792
+ padding: 10px;
793
+ overflow: auto;
794
+ }
795
+
796
+ .el-drawer__header {
797
+ margin-bottom: 12px;
798
+ padding: 5px 5px 0;
799
+ }
800
+
801
+ .el-drawer__body {
802
+ padding-left: 5px;
803
+ }
804
+ }
805
+
806
+ /*.node-tree-scroll-bar {*/
807
+ /* height: 100%;*/
808
+ /* overflow: auto;*/
809
+ /*}*/
810
+
811
+ .node-tree ::v-deep {
812
+ .el-tree > .el-tree-node:after {
813
+ border-top: none;
814
+ }
815
+ .el-tree-node {
816
+ position: relative;
817
+ padding-left: 12px;
818
+ }
819
+
820
+ .el-tree-node__content {
821
+ padding-left: 0 !important;
822
+ }
823
+
824
+ .el-tree-node__expand-icon.is-leaf{
825
+ display: none;
826
+ }
827
+ .el-tree-node__children {
828
+ padding-left: 12px;
829
+ overflow: visible !important; /* 加入此行让el-tree宽度自动撑开,超出宽度el-draw自动出现水平滚动条! */
830
+ }
831
+
832
+ .el-tree-node :last-child:before {
833
+ height: 38px;
834
+ }
835
+
836
+ .el-tree > .el-tree-node:before {
837
+ border-left: none;
838
+ }
839
+
840
+ .el-tree > .el-tree-node:after {
841
+ border-top: none;
842
+ }
843
+
844
+ .el-tree-node:before {
845
+ content: "";
846
+ left: -4px;
847
+ position: absolute;
848
+ right: auto;
849
+ border-width: 1px;
850
+ }
851
+
852
+ .el-tree-node:after {
853
+ content: "";
854
+ left: -4px;
855
+ position: absolute;
856
+ right: auto;
857
+ border-width: 1px;
858
+ }
859
+
860
+ .el-tree-node:before {
861
+ border-left: 1px dashed #4386c6;
862
+ bottom: 0px;
863
+ height: 100%;
864
+ top: -10px;
865
+ width: 1px;
866
+ }
867
+
868
+ .el-tree-node:after {
869
+ border-top: 1px dashed #4386c6;
870
+ height: 20px;
871
+ top: 12px;
872
+ width: 16px;
873
+ }
874
+
875
+ .el-tree-node.is-current > .el-tree-node__content {
876
+ background: #c2d6ea !important;
877
+ }
878
+
879
+ .el-tree-node__expand-icon {
880
+ margin-left: -3px;
881
+ padding: 6px 6px 6px 0px;
882
+ font-size: 16px;
883
+ }
884
+
885
+ }
886
+ </style>