@kp-ui/lowcode-pc 1.0.0-alpha.4 → 1.0.0-alpha.5

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 (450) hide show
  1. package/_virtual/_plugin-vue_export-helper.js +11 -0
  2. package/_virtual/_plugin-vue_export-helper.js.map +1 -0
  3. package/assets/styles/style.css +260 -256
  4. package/core/src/components/DragBtn.vue.js +8 -0
  5. package/core/src/components/DragBtn.vue.js.map +1 -0
  6. package/core/src/components/DragBtn.vue2.js +33 -0
  7. package/core/src/components/DragBtn.vue2.js.map +1 -0
  8. package/core/src/components/common/RenderWidgetList.vue.js +8 -0
  9. package/core/src/components/common/RenderWidgetList.vue.js.map +1 -0
  10. package/core/src/components/common/RenderWidgetList.vue2.js +94 -0
  11. package/core/src/components/common/RenderWidgetList.vue2.js.map +1 -0
  12. package/core/src/components/common/desginer/WidgetWrapper.vue.js +8 -0
  13. package/core/src/components/common/desginer/WidgetWrapper.vue.js.map +1 -0
  14. package/core/src/components/common/desginer/WidgetWrapper.vue2.js +67 -0
  15. package/core/src/components/common/desginer/WidgetWrapper.vue2.js.map +1 -0
  16. package/core/src/components/common/render/Debugger.vue.js +8 -0
  17. package/core/src/components/common/render/Debugger.vue.js.map +1 -0
  18. package/core/src/components/common/render/Debugger.vue2.js +73 -0
  19. package/core/src/components/common/render/Debugger.vue2.js.map +1 -0
  20. package/core/src/components/common/render/LowcodeRenderProvider.vue.js +51 -0
  21. package/core/src/components/common/render/LowcodeRenderProvider.vue.js.map +1 -0
  22. package/core/src/components/common/render/LowcodeRenderProvider.vue2.js +5 -0
  23. package/core/src/components/common/render/LowcodeRenderProvider.vue2.js.map +1 -0
  24. package/core/src/components/common/render/RenderForm.vue.js +69 -0
  25. package/core/src/components/common/render/RenderForm.vue.js.map +1 -0
  26. package/core/src/components/common/render/RenderForm.vue2.js +5 -0
  27. package/core/src/components/common/render/RenderForm.vue2.js.map +1 -0
  28. package/core/src/components/common/render/useFormContext.js +262 -0
  29. package/core/src/components/common/render/useFormContext.js.map +1 -0
  30. package/core/src/components/contextMenu/WidgetContextMenu.vue.js +8 -0
  31. package/core/src/components/contextMenu/WidgetContextMenu.vue.js.map +1 -0
  32. package/core/src/components/contextMenu/WidgetContextMenu.vue2.js +125 -0
  33. package/core/src/components/contextMenu/WidgetContextMenu.vue2.js.map +1 -0
  34. package/core/src/components/contextMenu/useWidgetContextMenu.js +165 -0
  35. package/core/src/components/contextMenu/useWidgetContextMenu.js.map +1 -0
  36. package/core/src/constants/LayoutTypeEnum.js +10 -0
  37. package/core/src/constants/LayoutTypeEnum.js.map +1 -0
  38. package/core/src/constants/WidgetTypeEnum.js +63 -0
  39. package/core/src/constants/WidgetTypeEnum.js.map +1 -0
  40. package/core/src/constants/index.js +9 -0
  41. package/core/src/constants/index.js.map +1 -0
  42. package/core/src/hooks/useAppRef.js +56 -0
  43. package/core/src/hooks/useAppRef.js.map +1 -0
  44. package/core/src/hooks/useDataHttp.js +65 -0
  45. package/core/src/hooks/useDataHttp.js.map +1 -0
  46. package/core/src/hooks/useDesigner.js +56 -0
  47. package/core/src/hooks/useDesigner.js.map +1 -0
  48. package/core/src/hooks/useField.js +570 -0
  49. package/core/src/hooks/useField.js.map +1 -0
  50. package/core/src/hooks/useFormValidation.js +112 -0
  51. package/core/src/hooks/useFormValidation.js.map +1 -0
  52. package/core/src/hooks/useLowcode.js +94 -0
  53. package/core/src/hooks/useLowcode.js.map +1 -0
  54. package/core/src/hooks/useWidget.js +15 -0
  55. package/core/src/hooks/useWidget.js.map +1 -0
  56. package/{assets/en-US.mjs → core/src/lang/en-US.js} +2 -1
  57. package/core/src/lang/en-US.js.map +1 -0
  58. package/{assets/en-US_extension.mjs → core/src/lang/en-US_extension.js} +1 -1
  59. package/core/src/lang/en-US_extension.js.map +1 -0
  60. package/{assets/en-US_render.mjs → core/src/lang/en-US_render.js} +1 -1
  61. package/core/src/lang/en-US_render.js.map +1 -0
  62. package/{assets/zh-CN.mjs → core/src/lang/zh-CN.js} +3 -1
  63. package/core/src/lang/zh-CN.js.map +1 -0
  64. package/{assets/zh-CN_extension.mjs → core/src/lang/zh-CN_extension.js} +1 -1
  65. package/core/src/lang/zh-CN_extension.js.map +1 -0
  66. package/{assets/zh-CN_render.mjs → core/src/lang/zh-CN_render.js} +1 -1
  67. package/core/src/lang/zh-CN_render.js.map +1 -0
  68. package/core/src/utils/event-bus.js +8 -0
  69. package/core/src/utils/event-bus.js.map +1 -0
  70. package/core/src/utils/format.js +46 -0
  71. package/core/src/utils/format.js.map +1 -0
  72. package/core/src/utils/getFileName.js +10 -0
  73. package/core/src/utils/getFileName.js.map +1 -0
  74. package/core/src/utils/i18n.js +33 -0
  75. package/core/src/utils/i18n.js.map +1 -0
  76. package/core/src/utils/smart-vue-i18n/index.js +84 -0
  77. package/core/src/utils/smart-vue-i18n/index.js.map +1 -0
  78. package/core/src/utils/useEmitter.js +95 -0
  79. package/core/src/utils/useEmitter.js.map +1 -0
  80. package/core/src/utils/util.js +155 -0
  81. package/core/src/utils/util.js.map +1 -0
  82. package/core/src/utils/validators.js +114 -0
  83. package/core/src/utils/validators.js.map +1 -0
  84. package/install.js +29 -0
  85. package/install.js.map +1 -0
  86. package/package.json +34 -34
  87. package/src/components/desginer/form-widget/container-widget/data-table-widget.vue.js +8 -0
  88. package/src/components/desginer/form-widget/container-widget/data-table-widget.vue.js.map +1 -0
  89. package/{assets/data-table-widget.mjs → src/components/desginer/form-widget/container-widget/data-table-widget.vue2.js} +5 -4
  90. package/src/components/desginer/form-widget/container-widget/data-table-widget.vue2.js.map +1 -0
  91. package/src/components/desginer/form-widget/container-widget/grid-col-widget.vue.js +8 -0
  92. package/src/components/desginer/form-widget/container-widget/grid-col-widget.vue.js.map +1 -0
  93. package/{assets/grid-col-widget.mjs → src/components/desginer/form-widget/container-widget/grid-col-widget.vue2.js} +8 -15
  94. package/src/components/desginer/form-widget/container-widget/grid-col-widget.vue2.js.map +1 -0
  95. package/src/components/desginer/form-widget/container-widget/grid-sub-form-widget.vue.js +8 -0
  96. package/src/components/desginer/form-widget/container-widget/grid-sub-form-widget.vue.js.map +1 -0
  97. package/{assets/grid-sub-form-widget.mjs → src/components/desginer/form-widget/container-widget/grid-sub-form-widget.vue2.js} +4 -4
  98. package/src/components/desginer/form-widget/container-widget/grid-sub-form-widget.vue2.js.map +1 -0
  99. package/src/components/desginer/form-widget/container-widget/grid-sub-form-widget.vue3.js +2 -0
  100. package/src/components/desginer/form-widget/container-widget/grid-sub-form-widget.vue3.js.map +1 -0
  101. package/src/components/desginer/form-widget/container-widget/grid-widget.vue.js +8 -0
  102. package/src/components/desginer/form-widget/container-widget/grid-widget.vue.js.map +1 -0
  103. package/{assets/grid-widget.mjs → src/components/desginer/form-widget/container-widget/grid-widget.vue2.js} +5 -5
  104. package/src/components/desginer/form-widget/container-widget/grid-widget.vue2.js.map +1 -0
  105. package/src/components/desginer/form-widget/container-widget/index.js +19 -0
  106. package/src/components/desginer/form-widget/container-widget/index.js.map +1 -0
  107. package/src/components/desginer/form-widget/container-widget/tab-widget.vue.js +8 -0
  108. package/src/components/desginer/form-widget/container-widget/tab-widget.vue.js.map +1 -0
  109. package/{assets/tab-widget.mjs → src/components/desginer/form-widget/container-widget/tab-widget.vue2.js} +5 -4
  110. package/src/components/desginer/form-widget/container-widget/tab-widget.vue2.js.map +1 -0
  111. package/src/components/desginer/form-widget/container-widget/useTableWidget.js +297 -0
  112. package/src/components/desginer/form-widget/container-widget/useTableWidget.js.map +1 -0
  113. package/src/components/desginer/form-widget/container-widget/vf-box-widget.vue.js +8 -0
  114. package/src/components/desginer/form-widget/container-widget/vf-box-widget.vue.js.map +1 -0
  115. package/{assets/vf-box-widget.mjs → src/components/desginer/form-widget/container-widget/vf-box-widget.vue2.js} +5 -4
  116. package/src/components/desginer/form-widget/container-widget/vf-box-widget.vue2.js.map +1 -0
  117. package/src/components/desginer/form-widget/container-widget/vf-collapse-widget.vue.js +9 -0
  118. package/src/components/desginer/form-widget/container-widget/vf-collapse-widget.vue.js.map +1 -0
  119. package/{assets/vf-collapse-widget.mjs → src/components/desginer/form-widget/container-widget/vf-collapse-widget.vue2.js} +5 -4
  120. package/src/components/desginer/form-widget/container-widget/vf-collapse-widget.vue2.js.map +1 -0
  121. package/src/components/desginer/form-widget/container-widget/vf-dialog-widget.vue.js +8 -0
  122. package/src/components/desginer/form-widget/container-widget/vf-dialog-widget.vue.js.map +1 -0
  123. package/{assets/vf-dialog-widget.mjs → src/components/desginer/form-widget/container-widget/vf-dialog-widget.vue2.js} +13 -4
  124. package/src/components/desginer/form-widget/container-widget/vf-dialog-widget.vue2.js.map +1 -0
  125. package/src/components/desginer/form-widget/index.vue.js +2 -0
  126. package/src/components/desginer/form-widget/index.vue.js.map +1 -0
  127. package/src/components/desginer/widget-panel/advanced/bpmn-editor.js +30 -0
  128. package/src/components/desginer/widget-panel/advanced/bpmn-editor.js.map +1 -0
  129. package/src/components/desginer/widget-panel/advanced/cascader.js +68 -0
  130. package/src/components/desginer/widget-panel/advanced/cascader.js.map +1 -0
  131. package/src/components/desginer/widget-panel/advanced/code-editor.js +44 -0
  132. package/src/components/desginer/widget-panel/advanced/code-editor.js.map +1 -0
  133. package/src/components/desginer/widget-panel/advanced/data-table.js +102 -0
  134. package/src/components/desginer/widget-panel/advanced/data-table.js.map +1 -0
  135. package/src/components/desginer/widget-panel/advanced/diy-compontent.js +30 -0
  136. package/src/components/desginer/widget-panel/advanced/diy-compontent.js.map +1 -0
  137. package/src/components/desginer/widget-panel/advanced/file-upload.js +43 -0
  138. package/src/components/desginer/widget-panel/advanced/file-upload.js.map +1 -0
  139. package/src/components/desginer/widget-panel/advanced/rich-editor.js +40 -0
  140. package/src/components/desginer/widget-panel/advanced/rich-editor.js.map +1 -0
  141. package/src/components/desginer/widget-panel/advanced/tree-select.js +69 -0
  142. package/src/components/desginer/widget-panel/advanced/tree-select.js.map +1 -0
  143. package/src/components/desginer/widget-panel/advanced/tree.js +47 -0
  144. package/src/components/desginer/widget-panel/advanced/tree.js.map +1 -0
  145. package/src/components/desginer/widget-panel/advancedFieldsEnums.js +24 -0
  146. package/src/components/desginer/widget-panel/advancedFieldsEnums.js.map +1 -0
  147. package/src/components/desginer/widget-panel/basicFields/button.js +37 -0
  148. package/src/components/desginer/widget-panel/basicFields/button.js.map +1 -0
  149. package/src/components/desginer/widget-panel/basicFields/buttonList.js +45 -0
  150. package/src/components/desginer/widget-panel/basicFields/buttonList.js.map +1 -0
  151. package/src/components/desginer/widget-panel/basicFields/checkbox.js +64 -0
  152. package/src/components/desginer/widget-panel/basicFields/checkbox.js.map +1 -0
  153. package/src/components/desginer/widget-panel/basicFields/color.js +38 -0
  154. package/src/components/desginer/widget-panel/basicFields/color.js.map +1 -0
  155. package/src/components/desginer/widget-panel/basicFields/date.js +55 -0
  156. package/src/components/desginer/widget-panel/basicFields/date.js.map +1 -0
  157. package/src/components/desginer/widget-panel/basicFields/dateRange.js +55 -0
  158. package/src/components/desginer/widget-panel/basicFields/dateRange.js.map +1 -0
  159. package/src/components/desginer/widget-panel/basicFields/divider.js +31 -0
  160. package/src/components/desginer/widget-panel/basicFields/divider.js.map +1 -0
  161. package/src/components/desginer/widget-panel/basicFields/dropdown.js +42 -0
  162. package/src/components/desginer/widget-panel/basicFields/dropdown.js.map +1 -0
  163. package/src/components/desginer/widget-panel/basicFields/htmlText.js +29 -0
  164. package/src/components/desginer/widget-panel/basicFields/htmlText.js.map +1 -0
  165. package/src/components/desginer/widget-panel/basicFields/input.js +56 -0
  166. package/src/components/desginer/widget-panel/basicFields/input.js.map +1 -0
  167. package/src/components/desginer/widget-panel/basicFields/number.js +50 -0
  168. package/src/components/desginer/widget-panel/basicFields/number.js.map +1 -0
  169. package/src/components/desginer/widget-panel/basicFields/radio.js +70 -0
  170. package/src/components/desginer/widget-panel/basicFields/radio.js.map +1 -0
  171. package/src/components/desginer/widget-panel/basicFields/rate.js +45 -0
  172. package/src/components/desginer/widget-panel/basicFields/rate.js.map +1 -0
  173. package/src/components/desginer/widget-panel/basicFields/select.js +77 -0
  174. package/src/components/desginer/widget-panel/basicFields/select.js.map +1 -0
  175. package/src/components/desginer/widget-panel/basicFields/slider.js +47 -0
  176. package/src/components/desginer/widget-panel/basicFields/slider.js.map +1 -0
  177. package/src/components/desginer/widget-panel/basicFields/staticText.js +29 -0
  178. package/src/components/desginer/widget-panel/basicFields/staticText.js.map +1 -0
  179. package/src/components/desginer/widget-panel/basicFields/switch.js +41 -0
  180. package/src/components/desginer/widget-panel/basicFields/switch.js.map +1 -0
  181. package/src/components/desginer/widget-panel/basicFields/textarea.js +53 -0
  182. package/src/components/desginer/widget-panel/basicFields/textarea.js.map +1 -0
  183. package/src/components/desginer/widget-panel/basicFields/time.js +51 -0
  184. package/src/components/desginer/widget-panel/basicFields/time.js.map +1 -0
  185. package/src/components/desginer/widget-panel/basicFields/timeRange.js +52 -0
  186. package/src/components/desginer/widget-panel/basicFields/timeRange.js.map +1 -0
  187. package/src/components/desginer/widget-panel/basicFieldsEnums.js +46 -0
  188. package/src/components/desginer/widget-panel/basicFieldsEnums.js.map +1 -0
  189. package/src/components/desginer/widget-panel/containers/grid-col.js +29 -0
  190. package/src/components/desginer/widget-panel/containers/grid-col.js.map +1 -0
  191. package/src/components/desginer/widget-panel/containers/grid-sub-form.js +22 -0
  192. package/src/components/desginer/widget-panel/containers/grid-sub-form.js.map +1 -0
  193. package/src/components/desginer/widget-panel/containers/grid.js +26 -0
  194. package/src/components/desginer/widget-panel/containers/grid.js.map +1 -0
  195. package/src/components/desginer/widget-panel/containers/index.js +19 -0
  196. package/{index.js.map → src/components/desginer/widget-panel/containers/index.js.map} +1 -1
  197. package/src/components/desginer/widget-panel/containers/tab-pane.js +23 -0
  198. package/src/components/desginer/widget-panel/containers/tab-pane.js.map +1 -0
  199. package/src/components/desginer/widget-panel/containers/tab.js +27 -0
  200. package/src/components/desginer/widget-panel/containers/tab.js.map +1 -0
  201. package/src/components/desginer/widget-panel/containers/vf-box.js +47 -0
  202. package/src/components/desginer/widget-panel/containers/vf-box.js.map +1 -0
  203. package/src/components/desginer/widget-panel/containers/vf-collapse.js +25 -0
  204. package/src/components/desginer/widget-panel/containers/vf-collapse.js.map +1 -0
  205. package/src/components/desginer/widget-panel/containers/vf-dialog.js +55 -0
  206. package/src/components/desginer/widget-panel/containers/vf-dialog.js.map +1 -0
  207. package/src/components/desginer/widget-panel/widgetsConfig.js +7 -0
  208. package/src/components/desginer/widget-panel/widgetsConfig.js.map +1 -0
  209. package/src/components/field-widget/bpmn-editor-widget.vue.js +8 -0
  210. package/src/components/field-widget/bpmn-editor-widget.vue.js.map +1 -0
  211. package/{assets/bpmn-editor-widget.mjs → src/components/field-widget/bpmn-editor-widget.vue2.js} +5 -6
  212. package/src/components/field-widget/bpmn-editor-widget.vue2.js.map +1 -0
  213. package/src/components/field-widget/button-list-widget.vue.js +8 -0
  214. package/src/components/field-widget/button-list-widget.vue.js.map +1 -0
  215. package/{assets/button-list-widget.mjs → src/components/field-widget/button-list-widget.vue2.js} +13 -5
  216. package/src/components/field-widget/button-list-widget.vue2.js.map +1 -0
  217. package/src/components/field-widget/button-widget.vue.js +8 -0
  218. package/src/components/field-widget/button-widget.vue.js.map +1 -0
  219. package/{assets/button-widget.mjs → src/components/field-widget/button-widget.vue2.js} +4 -4
  220. package/src/components/field-widget/button-widget.vue2.js.map +1 -0
  221. package/src/components/field-widget/cascader-widget.vue.js +5 -0
  222. package/src/components/field-widget/cascader-widget.vue.js.map +1 -0
  223. package/{assets/cascader-widget.mjs → src/components/field-widget/cascader-widget.vue2.js} +6 -4
  224. package/src/components/field-widget/cascader-widget.vue2.js.map +1 -0
  225. package/src/components/field-widget/checkbox-widget.vue.js +5 -0
  226. package/src/components/field-widget/checkbox-widget.vue.js.map +1 -0
  227. package/{assets/checkbox-widget.mjs → src/components/field-widget/checkbox-widget.vue2.js} +9 -10
  228. package/src/components/field-widget/checkbox-widget.vue2.js.map +1 -0
  229. package/src/components/field-widget/code-editor-widget.vue.js +5 -0
  230. package/src/components/field-widget/code-editor-widget.vue.js.map +1 -0
  231. package/{assets/code-editor-widget.mjs → src/components/field-widget/code-editor-widget.vue2.js} +4 -4
  232. package/src/components/field-widget/code-editor-widget.vue2.js.map +1 -0
  233. package/src/components/field-widget/color-widget.vue.js +8 -0
  234. package/src/components/field-widget/color-widget.vue.js.map +1 -0
  235. package/{assets/color-widget.mjs → src/components/field-widget/color-widget.vue2.js} +5 -5
  236. package/src/components/field-widget/color-widget.vue2.js.map +1 -0
  237. package/src/components/field-widget/date-range-widget.vue.js +8 -0
  238. package/src/components/field-widget/date-range-widget.vue.js.map +1 -0
  239. package/{assets/date-range-widget.mjs → src/components/field-widget/date-range-widget.vue2.js} +5 -5
  240. package/src/components/field-widget/date-range-widget.vue2.js.map +1 -0
  241. package/src/components/field-widget/date-widget.vue.js +8 -0
  242. package/src/components/field-widget/date-widget.vue.js.map +1 -0
  243. package/{assets/date-widget.mjs → src/components/field-widget/date-widget.vue2.js} +5 -5
  244. package/src/components/field-widget/date-widget.vue2.js.map +1 -0
  245. package/src/components/field-widget/divider-widget.vue.js +5 -0
  246. package/src/components/field-widget/divider-widget.vue.js.map +1 -0
  247. package/{assets/divider-widget.mjs → src/components/field-widget/divider-widget.vue2.js} +3 -3
  248. package/src/components/field-widget/divider-widget.vue2.js.map +1 -0
  249. package/src/components/field-widget/diy-compontent-widget.vue.js +5 -0
  250. package/src/components/field-widget/diy-compontent-widget.vue.js.map +1 -0
  251. package/{assets/diy-compontent-widget.mjs → src/components/field-widget/diy-compontent-widget.vue2.js} +4 -4
  252. package/src/components/field-widget/diy-compontent-widget.vue2.js.map +1 -0
  253. package/src/components/field-widget/dropdown-widget.vue.js +8 -0
  254. package/src/components/field-widget/dropdown-widget.vue.js.map +1 -0
  255. package/{assets/dropdown-widget.mjs → src/components/field-widget/dropdown-widget.vue2.js} +4 -5
  256. package/src/components/field-widget/dropdown-widget.vue2.js.map +1 -0
  257. package/src/components/field-widget/file-upload-widget.vue.js +8 -0
  258. package/src/components/field-widget/file-upload-widget.vue.js.map +1 -0
  259. package/{assets/file-upload-widget.mjs → src/components/field-widget/file-upload-widget.vue2.js} +5 -5
  260. package/src/components/field-widget/file-upload-widget.vue2.js.map +1 -0
  261. package/src/components/field-widget/form-item-wrapper.vue.js +8 -0
  262. package/src/components/field-widget/form-item-wrapper.vue.js.map +1 -0
  263. package/{assets/form-item-wrapper.mjs → src/components/field-widget/form-item-wrapper.vue2.js} +3 -4
  264. package/src/components/field-widget/form-item-wrapper.vue2.js.map +1 -0
  265. package/{assets/useSelect.mjs → src/components/field-widget/hooks/useSelect.js} +3 -3
  266. package/src/components/field-widget/hooks/useSelect.js.map +1 -0
  267. package/src/components/field-widget/html-text-widget.vue.js +8 -0
  268. package/src/components/field-widget/html-text-widget.vue.js.map +1 -0
  269. package/{assets/html-text-widget.mjs → src/components/field-widget/html-text-widget.vue2.js} +4 -4
  270. package/src/components/field-widget/html-text-widget.vue2.js.map +1 -0
  271. package/src/components/field-widget/html-text-widget.vue3.js +2 -0
  272. package/src/components/field-widget/html-text-widget.vue3.js.map +1 -0
  273. package/src/components/field-widget/index.js +12 -0
  274. package/src/components/field-widget/index.js.map +1 -0
  275. package/src/components/field-widget/input-widget.vue.js +8 -0
  276. package/src/components/field-widget/input-widget.vue.js.map +1 -0
  277. package/{assets/input-widget.mjs → src/components/field-widget/input-widget.vue2.js} +5 -5
  278. package/src/components/field-widget/input-widget.vue2.js.map +1 -0
  279. package/src/components/field-widget/number-widget.vue.js +5 -0
  280. package/src/components/field-widget/number-widget.vue.js.map +1 -0
  281. package/{assets/number-widget.mjs → src/components/field-widget/number-widget.vue2.js} +4 -4
  282. package/src/components/field-widget/number-widget.vue2.js.map +1 -0
  283. package/src/components/field-widget/radio-widget.vue.js +8 -0
  284. package/src/components/field-widget/radio-widget.vue.js.map +1 -0
  285. package/{assets/radio-widget.mjs → src/components/field-widget/radio-widget.vue2.js} +6 -6
  286. package/src/components/field-widget/radio-widget.vue2.js.map +1 -0
  287. package/src/components/field-widget/rate-widget.vue.js +8 -0
  288. package/src/components/field-widget/rate-widget.vue.js.map +1 -0
  289. package/{assets/rate-widget.mjs → src/components/field-widget/rate-widget.vue2.js} +5 -5
  290. package/src/components/field-widget/rate-widget.vue2.js.map +1 -0
  291. package/src/components/field-widget/rich-editor-widget.vue.js +8 -0
  292. package/src/components/field-widget/rich-editor-widget.vue.js.map +1 -0
  293. package/{assets/rich-editor-widget.mjs → src/components/field-widget/rich-editor-widget.vue2.js} +5 -6
  294. package/src/components/field-widget/rich-editor-widget.vue2.js.map +1 -0
  295. package/src/components/field-widget/select-widget.vue.js +8 -0
  296. package/src/components/field-widget/select-widget.vue.js.map +1 -0
  297. package/{assets/select-widget.mjs → src/components/field-widget/select-widget.vue2.js} +5 -6
  298. package/src/components/field-widget/select-widget.vue2.js.map +1 -0
  299. package/src/components/field-widget/slider-widget.vue.js +5 -0
  300. package/src/components/field-widget/slider-widget.vue.js.map +1 -0
  301. package/{assets/slider-widget.mjs → src/components/field-widget/slider-widget.vue2.js} +4 -3
  302. package/src/components/field-widget/slider-widget.vue2.js.map +1 -0
  303. package/src/components/field-widget/static-text-widget.vue.js +5 -0
  304. package/src/components/field-widget/static-text-widget.vue.js.map +1 -0
  305. package/{assets/static-text-widget.mjs → src/components/field-widget/static-text-widget.vue2.js} +3 -2
  306. package/src/components/field-widget/static-text-widget.vue2.js.map +1 -0
  307. package/src/components/field-widget/switch-widget.vue.js +8 -0
  308. package/src/components/field-widget/switch-widget.vue.js.map +1 -0
  309. package/{assets/switch-widget.mjs → src/components/field-widget/switch-widget.vue2.js} +5 -5
  310. package/src/components/field-widget/switch-widget.vue2.js.map +1 -0
  311. package/src/components/field-widget/textarea-widget.vue.js +8 -0
  312. package/src/components/field-widget/textarea-widget.vue.js.map +1 -0
  313. package/{assets/textarea-widget.mjs → src/components/field-widget/textarea-widget.vue2.js} +5 -6
  314. package/src/components/field-widget/textarea-widget.vue2.js.map +1 -0
  315. package/src/components/field-widget/time-range-widget.vue.js +8 -0
  316. package/src/components/field-widget/time-range-widget.vue.js.map +1 -0
  317. package/{assets/time-range-widget.mjs → src/components/field-widget/time-range-widget.vue2.js} +5 -5
  318. package/src/components/field-widget/time-range-widget.vue2.js.map +1 -0
  319. package/src/components/field-widget/time-widget.vue.js +8 -0
  320. package/src/components/field-widget/time-widget.vue.js.map +1 -0
  321. package/{assets/time-widget.mjs → src/components/field-widget/time-widget.vue2.js} +5 -5
  322. package/src/components/field-widget/time-widget.vue2.js.map +1 -0
  323. package/src/components/field-widget/tree-widget.vue.js +8 -0
  324. package/src/components/field-widget/tree-widget.vue.js.map +1 -0
  325. package/{assets/tree-widget.mjs → src/components/field-widget/tree-widget.vue2.js} +6 -6
  326. package/src/components/field-widget/tree-widget.vue2.js.map +1 -0
  327. package/src/components/field-widget/treeSelect-widget.vue.js +5 -0
  328. package/src/components/field-widget/treeSelect-widget.vue.js.map +1 -0
  329. package/{assets/treeSelect-widget.mjs → src/components/field-widget/treeSelect-widget.vue2.js} +6 -5
  330. package/src/components/field-widget/treeSelect-widget.vue2.js.map +1 -0
  331. package/{assets/useField.mjs → src/components/field-widget/useField.js} +7 -3
  332. package/src/components/field-widget/useField.js.map +1 -0
  333. package/src/components/field-widget/vue-render-widget.vue.js +5 -0
  334. package/src/components/field-widget/vue-render-widget.vue.js.map +1 -0
  335. package/{assets/vue-render-widget.mjs → src/components/field-widget/vue-render-widget.vue2.js} +4 -4
  336. package/src/components/field-widget/vue-render-widget.vue2.js.map +1 -0
  337. package/src/components/form-render/RenderWigetList.vue.js +5 -0
  338. package/src/components/form-render/RenderWigetList.vue.js.map +1 -0
  339. package/src/components/form-render/RenderWigetList.vue2.js +46 -0
  340. package/src/components/form-render/RenderWigetList.vue2.js.map +1 -0
  341. package/src/components/form-render/container-items/data-table-widget.vue.js +8 -0
  342. package/src/components/form-render/container-items/data-table-widget.vue.js.map +1 -0
  343. package/src/components/form-render/container-items/data-table-widget.vue2.js +119 -0
  344. package/src/components/form-render/container-items/data-table-widget.vue2.js.map +1 -0
  345. package/src/components/form-render/container-items/grid-col-widget.vue.js +8 -0
  346. package/src/components/form-render/container-items/grid-col-widget.vue.js.map +1 -0
  347. package/src/components/form-render/container-items/grid-col-widget.vue2.js +56 -0
  348. package/src/components/form-render/container-items/grid-col-widget.vue2.js.map +1 -0
  349. package/src/components/form-render/container-items/grid-sub-form-widget.vue.js +8 -0
  350. package/src/components/form-render/container-items/grid-sub-form-widget.vue.js.map +1 -0
  351. package/src/components/form-render/container-items/grid-sub-form-widget.vue2.js +263 -0
  352. package/src/components/form-render/container-items/grid-sub-form-widget.vue2.js.map +1 -0
  353. package/src/components/form-render/container-items/grid-widget.vue.js +8 -0
  354. package/src/components/form-render/container-items/grid-widget.vue.js.map +1 -0
  355. package/src/components/form-render/container-items/grid-widget.vue2.js +61 -0
  356. package/src/components/form-render/container-items/grid-widget.vue2.js.map +1 -0
  357. package/src/components/form-render/container-items/grid-widget.vue3.js +2 -0
  358. package/src/components/form-render/container-items/grid-widget.vue3.js.map +1 -0
  359. package/src/components/form-render/container-items/index.js +21 -0
  360. package/src/components/form-render/container-items/index.js.map +1 -0
  361. package/src/components/form-render/container-items/tab-widget.vue.js +8 -0
  362. package/src/components/form-render/container-items/tab-widget.vue.js.map +1 -0
  363. package/src/components/form-render/container-items/tab-widget.vue2.js +66 -0
  364. package/src/components/form-render/container-items/tab-widget.vue2.js.map +1 -0
  365. package/src/components/form-render/container-items/vf-box-widget.vue.js +8 -0
  366. package/src/components/form-render/container-items/vf-box-widget.vue.js.map +1 -0
  367. package/src/components/form-render/container-items/vf-box-widget.vue2.js +59 -0
  368. package/src/components/form-render/container-items/vf-box-widget.vue2.js.map +1 -0
  369. package/src/components/form-render/container-items/vf-collapse-widget.vue.js +9 -0
  370. package/src/components/form-render/container-items/vf-collapse-widget.vue.js.map +1 -0
  371. package/src/components/form-render/container-items/vf-collapse-widget.vue2.js +70 -0
  372. package/src/components/form-render/container-items/vf-collapse-widget.vue2.js.map +1 -0
  373. package/src/components/public/ActionButtonListRender.vue.js +53 -0
  374. package/src/components/public/ActionButtonListRender.vue.js.map +1 -0
  375. package/src/components/public/ActionButtonListRender.vue2.js +130 -0
  376. package/src/components/public/ActionButtonListRender.vue2.js.map +1 -0
  377. package/src/components/public/ConfigView/CustomPageRender.vue.js +74 -0
  378. package/src/components/public/ConfigView/CustomPageRender.vue.js.map +1 -0
  379. package/src/components/public/ConfigView/CustomPageRender.vue2.js +5 -0
  380. package/src/components/public/ConfigView/CustomPageRender.vue2.js.map +1 -0
  381. package/src/components/public/CustomerModal/CustomerModal.vue.js +5 -0
  382. package/src/components/public/CustomerModal/CustomerModal.vue.js.map +1 -0
  383. package/{assets/CustomerModal.mjs → src/components/public/CustomerModal/CustomerModal.vue2.js} +5 -2
  384. package/src/components/public/CustomerModal/CustomerModal.vue2.js.map +1 -0
  385. package/{assets/useCustomerModal.mjs → src/components/public/CustomerModal/useCustomerModal.js} +2 -2
  386. package/src/components/public/CustomerModal/useCustomerModal.js.map +1 -0
  387. package/src/components/public/DynamicDialog.vue.js +227 -0
  388. package/src/components/public/DynamicDialog.vue.js.map +1 -0
  389. package/src/components/public/DynamicDialog.vue3.js +6 -0
  390. package/src/components/public/DynamicDialog.vue3.js.map +1 -0
  391. package/src/components/render/index.vue.js +8 -0
  392. package/src/components/render/index.vue.js.map +1 -0
  393. package/src/components/render/index.vue2.js +107 -0
  394. package/src/components/render/index.vue2.js.map +1 -0
  395. package/src/components/render/useRenderWidget.js +11 -0
  396. package/src/components/render/useRenderWidget.js.map +1 -0
  397. package/src/hooks/useLowcode.js +113 -0
  398. package/src/hooks/useLowcode.js.map +1 -0
  399. package/stats.html +1 -1
  400. package/assets/CustomerModal.mjs.map +0 -1
  401. package/assets/bpmn-editor-widget.mjs.map +0 -1
  402. package/assets/button-list-widget.mjs.map +0 -1
  403. package/assets/button-widget.mjs.map +0 -1
  404. package/assets/cascader-widget.mjs.map +0 -1
  405. package/assets/checkbox-widget.mjs.map +0 -1
  406. package/assets/code-editor-widget.mjs.map +0 -1
  407. package/assets/color-widget.mjs.map +0 -1
  408. package/assets/data-table-widget.mjs.map +0 -1
  409. package/assets/date-range-widget.mjs.map +0 -1
  410. package/assets/date-widget.mjs.map +0 -1
  411. package/assets/divider-widget.mjs.map +0 -1
  412. package/assets/diy-compontent-widget.mjs.map +0 -1
  413. package/assets/dropdown-widget.mjs.map +0 -1
  414. package/assets/en-US.mjs.map +0 -1
  415. package/assets/en-US_extension.mjs.map +0 -1
  416. package/assets/en-US_render.mjs.map +0 -1
  417. package/assets/file-upload-widget.mjs.map +0 -1
  418. package/assets/form-item-wrapper.mjs.map +0 -1
  419. package/assets/grid-col-widget.mjs.map +0 -1
  420. package/assets/grid-sub-form-widget.mjs.map +0 -1
  421. package/assets/grid-widget.mjs.map +0 -1
  422. package/assets/html-text-widget.mjs.map +0 -1
  423. package/assets/input-widget.mjs.map +0 -1
  424. package/assets/install.mjs +0 -5590
  425. package/assets/install.mjs.map +0 -1
  426. package/assets/number-widget.mjs.map +0 -1
  427. package/assets/radio-widget.mjs.map +0 -1
  428. package/assets/rate-widget.mjs.map +0 -1
  429. package/assets/rich-editor-widget.mjs.map +0 -1
  430. package/assets/select-widget.mjs.map +0 -1
  431. package/assets/slider-widget.mjs.map +0 -1
  432. package/assets/static-text-widget.mjs.map +0 -1
  433. package/assets/switch-widget.mjs.map +0 -1
  434. package/assets/tab-widget.mjs.map +0 -1
  435. package/assets/textarea-widget.mjs.map +0 -1
  436. package/assets/time-range-widget.mjs.map +0 -1
  437. package/assets/time-widget.mjs.map +0 -1
  438. package/assets/tree-widget.mjs.map +0 -1
  439. package/assets/treeSelect-widget.mjs.map +0 -1
  440. package/assets/useCustomerModal.mjs.map +0 -1
  441. package/assets/useField.mjs.map +0 -1
  442. package/assets/useSelect.mjs.map +0 -1
  443. package/assets/vf-box-widget.mjs.map +0 -1
  444. package/assets/vf-collapse-widget.mjs.map +0 -1
  445. package/assets/vf-dialog-widget.mjs.map +0 -1
  446. package/assets/vue-render-widget.mjs.map +0 -1
  447. package/assets/zh-CN.mjs.map +0 -1
  448. package/assets/zh-CN_extension.mjs.map +0 -1
  449. package/assets/zh-CN_render.mjs.map +0 -1
  450. package/index.js +0 -12
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sources":["../../../../../core/src/utils/format.ts"],"sourcesContent":["import { isArray } from 'lodash-es';\n\nfunction validateDate(dateStr: string | number | Date): boolean {\n const date = new Date(typeof dateStr === 'string' ? Date.parse(dateStr) : dateStr);\n return date instanceof Date && !isNaN(date.getTime());\n}\n\nexport function formatDate1(date: string | number | Date): string {\n if (!validateDate(date)) {\n return String(date);\n }\n const d = new Date(typeof date === 'string' ? Date.parse(date) : date); //转换成Date\n const y = d.getFullYear();\n let m: string | number = d.getMonth() + 1;\n m = m < 10 ? '0' + m : m;\n let day: string | number = d.getDate();\n day = day < 10 ? '0' + day : day;\n return y + '-' + m + '-' + day;\n}\n\nexport function formatDate2(date: string | number | Date): string {\n if (!validateDate(date)) {\n return String(date);\n }\n const d = new Date(typeof date === 'string' ? Date.parse(date) : date); //转换成Date\n const y = d.getFullYear();\n let m: string | number = d.getMonth() + 1;\n m = m < 10 ? '0' + m : m;\n let day: string | number = d.getDate();\n day = day < 10 ? '0' + day : day;\n return y + '/' + m + '/' + day;\n}\n\nexport function formatDate3(date: string | number | Date): string {\n if (!validateDate(date)) {\n return String(date);\n }\n const d = new Date(typeof date === 'string' ? Date.parse(date) : date); //转换成Date\n const y = d.getFullYear();\n let m: string | number = d.getMonth() + 1;\n m = m < 10 ? '0' + m : m;\n let day: string | number = d.getDate();\n day = day < 10 ? '0' + day : day;\n return y + '年' + m + '月' + day + '日';\n}\n\nexport function formatDate4(date: string | number | Date): string {\n if (!validateDate(date)) {\n return String(date);\n }\n const d = new Date(typeof date === 'string' ? Date.parse(date) : date); //转换成Date\n return d.toLocaleString();\n}\n\nexport function formatDate5(date: string | number | Date): string {\n if (!validateDate(date)) {\n return String(date);\n }\n const d = new Date(typeof date === 'string' ? Date.parse(date) : date); //转换成Date\n return d.toLocaleString('chinese', { hour12: false });\n}\n\n// ###,###,###,##0.######\nexport function formatNumber1(v: number): string | number {\n if (typeof v !== 'number') {\n return v;\n }\n\n const parts = v.toString().split('.');\n const length = parts[1]?.length || 0;\n let formatted: string;\n switch (length) {\n case 0:\n formatted = v.toFixed(0);\n break;\n case 1:\n formatted = v.toFixed(1);\n break;\n case 2:\n formatted = v.toFixed(2);\n break;\n case 3:\n formatted = v.toFixed(3);\n break;\n case 4:\n formatted = v.toFixed(4);\n break;\n case 5:\n formatted = v.toFixed(5);\n break;\n default:\n formatted = v.toFixed(6);\n }\n const res = formatted.replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n//###,###,###,##0.00####\nexport function formatNumber2(v: number): string | number {\n if (typeof v !== 'number') {\n return v;\n }\n\n const parts = v.toString().split('.');\n const length = parts[1]?.length || 0;\n let formatted: string;\n switch (length) {\n case 0:\n case 1:\n case 2:\n formatted = v.toFixed(2);\n break;\n case 3:\n formatted = v.toFixed(3);\n break;\n case 4:\n formatted = v.toFixed(4);\n break;\n case 5:\n formatted = v.toFixed(5);\n break;\n default:\n formatted = v.toFixed(6);\n }\n\n const res = formatted.replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n// ###,###,###,##0.000000\nexport function formatNumber3(v: number): string | number {\n if (typeof v !== 'number') {\n return v;\n }\n\n const formatted = v.toFixed(6);\n const res = formatted.replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n// ###,###,###,##0.000\nexport function formatNumber4(v: number): string | number {\n if (typeof v !== 'number') {\n return v;\n }\n\n const formatted = v.toFixed(3);\n const res = formatted.replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n// ###,###,###,##0.00\nexport function formatNumber5(v: number): string | number {\n if (typeof v !== 'number') {\n return v;\n }\n\n const formatted = v.toFixed(2);\n const res = formatted.replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n// ###,###,###,##0\nexport function formatNumber6(v: number): string | number {\n if (typeof v !== 'number') {\n return v;\n }\n\n const formatted = v.toFixed(0);\n const res = formatted.replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n// ###,##0.00##%\nexport function formatNumber7(v: number): string | number {\n if (typeof v !== 'number') {\n return v;\n }\n\n const parts = v.toString().split('.');\n const length = parts[1]?.length || 0;\n let multiplied = v * 100;\n let formatted: string;\n switch (length) {\n case 0:\n case 1:\n case 2:\n formatted = multiplied.toFixed(2);\n break;\n case 3:\n formatted = multiplied.toFixed(3);\n break;\n default:\n formatted = multiplied.toFixed(4);\n }\n\n const res = formatted.replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res + '%';\n}\n\ninterface FieldNames {\n label: string;\n value: string;\n children: string;\n}\n\ninterface TreeItem {\n [key: string]: unknown;\n}\n\n/**\n * 将Cascader转义为汉字\n * @param arr 数据数组\n * @param codeList 代码列表\n * @param fieldNames 字段名称映射\n * @param emblem 拼接符号\n * @returns\n */\nexport const formateCascaderCode = (\n arr: TreeItem[] = [],\n codeList: string[] | string[][] | undefined,\n fieldNames: FieldNames = { label: 'label', value: 'value', children: 'children' },\n emblem = '/'\n): string | undefined => {\n if (!codeList || codeList.length === 0) return;\n if (isArray(codeList[0])) {\n const res2 = (codeList as string[][]).map(item =>\n getTreeName(arr, item, fieldNames).join(emblem)\n );\n return res2.join(',');\n } else {\n const res = getTreeName(arr, codeList as string[], fieldNames);\n return res.join(emblem);\n }\n};\n\nconst getTreeName = (\n list: TreeItem[] = [],\n val: string[] = [],\n fieldNames: FieldNames = { label: 'label', value: 'value', children: 'children' }\n): string[] => {\n const nameList: string[] = [];\n list.forEach(item => {\n if (val.length === 0) return;\n if (item[fieldNames.value] === val[0]) {\n nameList.push(item[fieldNames.label] as string);\n const children = item[fieldNames.children];\n if (isArray(children)) {\n const res = getTreeName(children as TreeItem[], val.slice(1), fieldNames);\n nameList.push(...res);\n }\n }\n });\n return nameList;\n};\n\n/**\n * 将tree转义为汉字\n * @param arr 值数组\n * @param codeList 代码列表\n * @param fieldNames 字段名称映射\n * @param emblem 拼接符号\n * @returns\n */\nexport const formateTreeToName = (\n arr: string[] = [],\n codeList: TreeItem[] | undefined,\n fieldNames: FieldNames = { label: 'label', value: 'value', children: 'children' },\n emblem = ','\n): string | undefined => {\n if (!codeList || codeList.length === 0) return;\n const str = arr.reduce<TreeItem[]>((t, v) => {\n const res = getListName(v, codeList, fieldNames);\n if (res) {\n t = [...t, res];\n }\n return t;\n }, []);\n return str.map(item => item[fieldNames.label] as string).join(emblem);\n};\n\nconst getListName = (\n val: string,\n list: TreeItem[],\n fieldNames: FieldNames\n): TreeItem | undefined => {\n let res: TreeItem | undefined;\n list.forEach(it1 => {\n if (it1[fieldNames.value] === val) {\n res = it1;\n return;\n }\n const childrenList = (it1[fieldNames.children] as TreeItem[]) || [];\n if (childrenList.length) {\n const found = getListName(val, childrenList, fieldNames);\n if (found) {\n res = found;\n }\n }\n });\n return res;\n};\n\n/**\n * 格式化尺寸,支持数字、px、%\n * @param value 尺寸值\n * @param defaultSize 默认尺寸\n * @returns 格式化后的尺寸字符串\n */\nexport function formatSize(value: string | number | undefined | null, defaultSize = ''): string {\n if (value === undefined || value === null || value === '') {\n return defaultSize;\n }\n const strValue = String(value);\n if (strValue.endsWith('px') || strValue.endsWith('%')) {\n return strValue;\n }\n if (!isNaN(Number(strValue))) {\n return `${strValue}px`;\n }\n return strValue;\n}\n"],"names":[],"mappings":";AA6PO,MAAM,sBAAsB,CAC/B,MAAkB,CAAA,GAClB,UACA,aAAyB,EAAE,OAAO,SAAS,OAAO,SAAS,UAAU,WAAA,GACrE,SAAS,QACY;AACrB,MAAI,CAAC,YAAY,SAAS,WAAW,EAAG;AACxC,MAAI,QAAQ,SAAS,CAAC,CAAC,GAAG;AACtB,UAAM,OAAQ,SAAwB;AAAA,MAAI,UACtC,YAAY,KAAK,MAAM,UAAU,EAAE,KAAK,MAAM;AAAA,IAAA;AAElD,WAAO,KAAK,KAAK,GAAG;AAAA,EACxB,OAAO;AACH,UAAM,MAAM,YAAY,KAAK,UAAsB,UAAU;AAC7D,WAAO,IAAI,KAAK,MAAM;AAAA,EAC1B;AACJ;AAEA,MAAM,cAAc,CAChB,OAAmB,CAAA,GACnB,MAAgB,CAAA,GAChB,aAAyB,EAAE,OAAO,SAAS,OAAO,SAAS,UAAU,iBAC1D;AACX,QAAM,WAAqB,CAAA;AAC3B,OAAK,QAAQ,CAAA,SAAQ;AACjB,QAAI,IAAI,WAAW,EAAG;AACtB,QAAI,KAAK,WAAW,KAAK,MAAM,IAAI,CAAC,GAAG;AACnC,eAAS,KAAK,KAAK,WAAW,KAAK,CAAW;AAC9C,YAAM,WAAW,KAAK,WAAW,QAAQ;AACzC,UAAI,QAAQ,QAAQ,GAAG;AACnB,cAAM,MAAM,YAAY,UAAwB,IAAI,MAAM,CAAC,GAAG,UAAU;AACxE,iBAAS,KAAK,GAAG,GAAG;AAAA,MACxB;AAAA,IACJ;AAAA,EACJ,CAAC;AACD,SAAO;AACX;AAuDO,SAAS,WAAW,OAA2C,cAAc,IAAY;AAC5F,MAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,IAAI;AACvD,WAAO;AAAA,EACX;AACA,QAAM,WAAW,OAAO,KAAK;AAC7B,MAAI,SAAS,SAAS,IAAI,KAAK,SAAS,SAAS,GAAG,GAAG;AACnD,WAAO;AAAA,EACX;AACA,MAAI,CAAC,MAAM,OAAO,QAAQ,CAAC,GAAG;AAC1B,WAAO,GAAG,QAAQ;AAAA,EACtB;AACA,SAAO;AACX;"}
@@ -0,0 +1,10 @@
1
+ function getFileName(path) {
2
+ const normalizedPath = path.replace(/\\/g, "/");
3
+ const filenameWithExt = normalizedPath.split("/").pop() || "";
4
+ const lastDotIndex = filenameWithExt.lastIndexOf(".");
5
+ return lastDotIndex === -1 ? filenameWithExt : filenameWithExt.substring(0, lastDotIndex);
6
+ }
7
+ export {
8
+ getFileName
9
+ };
10
+ //# sourceMappingURL=getFileName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFileName.js","sources":["../../../../../core/src/utils/getFileName.ts"],"sourcesContent":["export function getFileName(path: string): string {\n // 处理Windows路径分隔符\n const normalizedPath = path.replace(/\\\\/g, '/');\n // 获取带扩展名的文件名\n const filenameWithExt = normalizedPath.split('/').pop() || '';\n // 分离文件名和扩展名\n const lastDotIndex = filenameWithExt.lastIndexOf('.');\n return lastDotIndex === -1 ? filenameWithExt : filenameWithExt.substring(0, lastDotIndex);\n}\n"],"names":[],"mappings":"AAAO,SAAS,YAAY,MAAsB;AAE9C,QAAM,iBAAiB,KAAK,QAAQ,OAAO,GAAG;AAE9C,QAAM,kBAAkB,eAAe,MAAM,GAAG,EAAE,SAAS;AAE3D,QAAM,eAAe,gBAAgB,YAAY,GAAG;AACpD,SAAO,iBAAiB,KAAK,kBAAkB,gBAAgB,UAAU,GAAG,YAAY;AAC5F;"}
@@ -0,0 +1,33 @@
1
+ import { mapActions, mapState } from "pinia";
2
+ import { createI18n } from "./smart-vue-i18n/index.js";
3
+ import { useLocaleStore } from "@kp-ui/i18n";
4
+ const i18n = createI18n();
5
+ ({
6
+ computed: {
7
+ ...mapState(useLocaleStore, ["getLocale"])
8
+ },
9
+ methods: {
10
+ ...mapActions(useLocaleStore, ["setLocale"])
11
+ }
12
+ });
13
+ function useI18n() {
14
+ const i18nt = (key, obj) => {
15
+ return i18n.$st(key, obj);
16
+ };
17
+ const i18n2t = (key1, key2) => {
18
+ return i18n.$st2(key1, key2);
19
+ };
20
+ const initLocale = (locale) => {
21
+ i18n.setLang(locale);
22
+ };
23
+ return {
24
+ i18nt,
25
+ i18n2t,
26
+ initLocale
27
+ };
28
+ }
29
+ export {
30
+ i18n,
31
+ useI18n
32
+ };
33
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sources":["../../../../../core/src/utils/i18n.ts"],"sourcesContent":["import { mapActions, mapState } from 'pinia';\nimport { createI18n } from './smart-vue-i18n';\nimport { useLocaleStore } from '@kp-ui/i18n';\n\nconst i18n = createI18n({\n locale: 'zh-CN'\n});\n\nexport const translate = function (key: string): string {\n return i18n.$st(key);\n};\n\nexport const setLangMessages = (langName: string, messages: any) => {\n i18n.setLangMessages(langName, messages);\n};\n\nexport default {\n computed: {\n ...mapState(useLocaleStore, ['getLocale'])\n },\n methods: {\n ...mapActions(useLocaleStore, ['setLocale']),\n async changeLocale(langName: string) {\n await i18n.setLang(langName);\n },\n i18nt(key: string): string {\n return i18n.$st(key);\n },\n /* 如果key1不存在,则查找key2 */\n i18n2t(key1: string, key2: string): string {\n return i18n.$st2(key1, key2);\n }\n }\n};\n\nexport function useI18n() {\n const i18nt = (key: string, obj?: Record<string, any>): string => {\n return i18n.$st(key, obj);\n };\n const i18n2t = (key1: string, key2: string): string => {\n return i18n.$st2(key1, key2);\n };\n\n const initLocale = (locale: string) => {\n i18n.setLang(locale);\n };\n\n return {\n i18nt,\n i18n2t,\n initLocale\n };\n}\n\nexport { i18n };\n"],"names":[],"mappings":";;;AAIA,MAAM,OAAO,WAEZ;AAAA,CAUc;AAAA,EACX,UAAU;AAAA,IACN,GAAG,SAAS,gBAAgB,CAAC,WAAW,CAAC;AAAA,EAAA;AAAA,EAE7C,SAAS;AAAA,IACL,GAAG,WAAW,gBAAgB,CAAC,WAAW,CAAC;AAAA,EAW/C;AACJ;AAEO,SAAS,UAAU;AACtB,QAAM,QAAQ,CAAC,KAAa,QAAsC;AAC9D,WAAO,KAAK,IAAI,KAAK,GAAG;AAAA,EAC5B;AACA,QAAM,SAAS,CAAC,MAAc,SAAyB;AACnD,WAAO,KAAK,KAAK,MAAM,IAAI;AAAA,EAC/B;AAEA,QAAM,aAAa,CAAC,WAAmB;AACnC,SAAK,QAAQ,MAAM;AAAA,EACvB;AAEA,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAER;"}
@@ -0,0 +1,84 @@
1
+ import { reactive } from "vue";
2
+ import { get, isObject } from "lodash-es";
3
+ const locale = reactive({
4
+ lang: "zh-CN",
5
+ messages: {}
6
+ });
7
+ const langLoaders = {
8
+ "zh-CN": async () => {
9
+ const [zhCN, zhLocale, zhLocale_render, zhLocale_extension] = await Promise.all([
10
+ import("ant-design-vue/es/locale/zh_CN"),
11
+ import("../../lang/zh-CN.js"),
12
+ import("../../lang/zh-CN_render.js"),
13
+ import("../../lang/zh-CN_extension.js")
14
+ ]);
15
+ return {
16
+ ...zhCN.default,
17
+ ...zhLocale.default,
18
+ ...zhLocale_render.default,
19
+ ...zhLocale_extension.default
20
+ };
21
+ },
22
+ "en-US": async () => {
23
+ const [enUS, enLocale, enLocale_render, enLocale_extension] = await Promise.all([
24
+ import("ant-design-vue/es/locale/en_US"),
25
+ import("../../lang/en-US.js"),
26
+ import("../../lang/en-US_render.js"),
27
+ import("../../lang/en-US_extension.js")
28
+ ]);
29
+ return {
30
+ ...enUS.default,
31
+ ...enLocale.default,
32
+ ...enLocale_render.default,
33
+ ...enLocale_extension.default
34
+ };
35
+ }
36
+ };
37
+ function createI18n(options) {
38
+ const methoad = {
39
+ get messages() {
40
+ return locale.messages;
41
+ },
42
+ $st(path, args) {
43
+ const message = get(this.messages[locale.lang], path);
44
+ if (isObject(args)) {
45
+ let result = "";
46
+ Object.entries(args).forEach(([key, value]) => {
47
+ result = message.replace(`{${key}}`, value);
48
+ });
49
+ return result;
50
+ }
51
+ if (typeof message === "undefined") {
52
+ return path;
53
+ }
54
+ return typeof message === "function" ? message(...args) : message !== null ? message : path;
55
+ },
56
+ $st2(path, path2) {
57
+ const messages = this.messages[locale.lang];
58
+ const message = get(messages, path);
59
+ return message !== null ? message : get(messages, path2);
60
+ },
61
+ async setLang(lang) {
62
+ locale.lang = lang;
63
+ if (!(lang in locale.messages)) {
64
+ locale.messages[lang] = {};
65
+ }
66
+ if (lang in langLoaders) {
67
+ const messages = await langLoaders[lang]();
68
+ locale.messages[lang] = messages;
69
+ }
70
+ locale.lang = lang;
71
+ },
72
+ setLangMessages(lang, messages) {
73
+ locale.messages[lang] = {
74
+ ...locale.messages[lang],
75
+ ...messages
76
+ };
77
+ }
78
+ };
79
+ return methoad;
80
+ }
81
+ export {
82
+ createI18n
83
+ };
84
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../../core/src/utils/smart-vue-i18n/index.ts"],"sourcesContent":["import { reactive } from 'vue';\nimport { isObject, get } from 'lodash-es';\n\nconst locale = reactive({\n lang: 'zh-CN',\n messages: {}\n});\n\ntype i18nOptionsType = {\n locale: string;\n};\n\nconst langLoaders = {\n 'zh-CN': async () => {\n const [zhCN, zhLocale, zhLocale_render, zhLocale_extension] = await Promise.all([\n import('ant-design-vue/es/locale/zh_CN'),\n import('../../lang/zh-CN'),\n import('../../lang/zh-CN_render'),\n import('../../lang/zh-CN_extension')\n ]);\n return {\n ...zhCN.default,\n ...zhLocale.default,\n ...zhLocale_render.default,\n ...zhLocale_extension.default\n };\n },\n 'en-US': async () => {\n const [enUS, enLocale, enLocale_render, enLocale_extension] = await Promise.all([\n import('ant-design-vue/es/locale/en_US'),\n import('../../lang/en-US'),\n import('../../lang/en-US_render'),\n import('../../lang/en-US_extension')\n ]);\n return {\n ...enUS.default,\n ...enLocale.default,\n ...enLocale_render.default,\n ...enLocale_extension.default\n };\n }\n};\n\nexport function createI18n(options: i18nOptionsType) {\n const methoad = {\n get messages() {\n return locale.messages;\n },\n $st(path: string, args) {\n const message = get(this.messages[locale.lang], path);\n\n if (isObject(args)) {\n let result = '';\n Object.entries(args).forEach(([key, value]) => {\n result = message.replace(`{${key}}`, value);\n });\n return result;\n }\n\n if (typeof message === 'undefined') {\n return path;\n }\n\n return typeof message === 'function'\n ? message(...args)\n : message !== null\n ? message\n : path;\n },\n\n $st2(path, path2) {\n const messages = this.messages[locale.lang];\n const message = get(messages, path);\n return message !== null ? message : get(messages, path2);\n },\n\n async setLang(lang) {\n locale.lang = lang;\n if (!(lang in locale.messages)) {\n locale.messages[lang] = {};\n }\n if (lang in langLoaders) {\n const messages = await langLoaders[lang]();\n locale.messages[lang] = messages;\n }\n locale.lang = lang;\n },\n setLangMessages(lang, messages) {\n locale.messages[lang] = {\n ...locale.messages[lang],\n ...messages\n };\n }\n };\n\n return methoad;\n}\n"],"names":[],"mappings":";;AAGA,MAAM,SAAS,SAAS;AAAA,EACpB,MAAM;AAAA,EACN,UAAU,CAAA;AACd,CAAC;AAMD,MAAM,cAAc;AAAA,EAChB,SAAS,YAAY;AACjB,UAAM,CAAC,MAAM,UAAU,iBAAiB,kBAAkB,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC5E,OAAO,gCAAgC;AAAA,MACvC,OAAO,qBAAkB;AAAA,MACzB,OAAO,4BAAyB;AAAA,MAChC,OAAO,+BAA4B;AAAA,IAAA,CACtC;AACD,WAAO;AAAA,MACH,GAAG,KAAK;AAAA,MACR,GAAG,SAAS;AAAA,MACZ,GAAG,gBAAgB;AAAA,MACnB,GAAG,mBAAmB;AAAA,IAAA;AAAA,EAE9B;AAAA,EACA,SAAS,YAAY;AACjB,UAAM,CAAC,MAAM,UAAU,iBAAiB,kBAAkB,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC5E,OAAO,gCAAgC;AAAA,MACvC,OAAO,qBAAkB;AAAA,MACzB,OAAO,4BAAyB;AAAA,MAChC,OAAO,+BAA4B;AAAA,IAAA,CACtC;AACD,WAAO;AAAA,MACH,GAAG,KAAK;AAAA,MACR,GAAG,SAAS;AAAA,MACZ,GAAG,gBAAgB;AAAA,MACnB,GAAG,mBAAmB;AAAA,IAAA;AAAA,EAE9B;AACJ;AAEO,SAAS,WAAW,SAA0B;AACjD,QAAM,UAAU;AAAA,IACZ,IAAI,WAAW;AACX,aAAO,OAAO;AAAA,IAClB;AAAA,IACA,IAAI,MAAc,MAAM;AACpB,YAAM,UAAU,IAAI,KAAK,SAAS,OAAO,IAAI,GAAG,IAAI;AAEpD,UAAI,SAAS,IAAI,GAAG;AAChB,YAAI,SAAS;AACb,eAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC3C,mBAAS,QAAQ,QAAQ,IAAI,GAAG,KAAK,KAAK;AAAA,QAC9C,CAAC;AACD,eAAO;AAAA,MACX;AAEA,UAAI,OAAO,YAAY,aAAa;AAChC,eAAO;AAAA,MACX;AAEA,aAAO,OAAO,YAAY,aACpB,QAAQ,GAAG,IAAI,IACf,YAAY,OACZ,UACA;AAAA,IACV;AAAA,IAEA,KAAK,MAAM,OAAO;AACd,YAAM,WAAW,KAAK,SAAS,OAAO,IAAI;AAC1C,YAAM,UAAU,IAAI,UAAU,IAAI;AAClC,aAAO,YAAY,OAAO,UAAU,IAAI,UAAU,KAAK;AAAA,IAC3D;AAAA,IAEA,MAAM,QAAQ,MAAM;AAChB,aAAO,OAAO;AACd,UAAI,EAAE,QAAQ,OAAO,WAAW;AAC5B,eAAO,SAAS,IAAI,IAAI,CAAA;AAAA,MAC5B;AACA,UAAI,QAAQ,aAAa;AACrB,cAAM,WAAW,MAAM,YAAY,IAAI,EAAA;AACvC,eAAO,SAAS,IAAI,IAAI;AAAA,MAC5B;AACA,aAAO,OAAO;AAAA,IAClB;AAAA,IACA,gBAAgB,MAAM,UAAU;AAC5B,aAAO,SAAS,IAAI,IAAI;AAAA,QACpB,GAAG,OAAO,SAAS,IAAI;AAAA,QACvB,GAAG;AAAA,MAAA;AAAA,IAEX;AAAA,EAAA;AAGJ,SAAO;AACX;"}
@@ -0,0 +1,95 @@
1
+ import { ref, getCurrentInstance } from "vue";
2
+ function useEmitter() {
3
+ const vfEvents = ref({});
4
+ const instance = getCurrentInstance();
5
+ const emit$ = (eventName, data) => {
6
+ if (vfEvents.value[eventName]) {
7
+ vfEvents.value[eventName].forEach((fn) => {
8
+ fn(data);
9
+ });
10
+ }
11
+ };
12
+ const on$ = (eventName, fn) => {
13
+ vfEvents.value[eventName] = vfEvents.value[eventName] || [];
14
+ vfEvents.value[eventName].push(fn);
15
+ };
16
+ const off$ = (eventName, fn) => {
17
+ if (vfEvents.value[eventName]) {
18
+ if (fn === void 0 || fn === null) {
19
+ vfEvents.value[eventName].length = 0;
20
+ return;
21
+ }
22
+ for (let i = 0; i < vfEvents.value[eventName].length; i++) {
23
+ if (vfEvents.value[eventName][i] === fn) {
24
+ vfEvents.value[eventName].splice(i, 1);
25
+ break;
26
+ }
27
+ }
28
+ }
29
+ };
30
+ const dispatch = (componentName, eventName, params) => {
31
+ var _a, _b, _c, _d, _e, _f;
32
+ if (!instance) return;
33
+ let parent = instance.parent;
34
+ let name = (_a = parent == null ? void 0 : parent.type) == null ? void 0 : _a["componentName"];
35
+ while (parent && (!name || name !== componentName)) {
36
+ parent = parent.parent;
37
+ if (parent) {
38
+ name = (_b = parent.type) == null ? void 0 : _b["componentName"];
39
+ }
40
+ }
41
+ if (parent) {
42
+ if (((_c = parent.exposed) == null ? void 0 : _c.emit$) || ((_d = parent.ctx) == null ? void 0 : _d.emit$)) {
43
+ const targetEmit$ = ((_e = parent.exposed) == null ? void 0 : _e.emit$) || ((_f = parent.ctx) == null ? void 0 : _f.emit$);
44
+ targetEmit$.call(parent.proxy, eventName, params);
45
+ }
46
+ }
47
+ };
48
+ const broadcast = (componentName, eventName, params) => {
49
+ const ctx = instance == null ? void 0 : instance.proxy;
50
+ if (ctx == null ? void 0 : ctx.widgetRefList) {
51
+ Object.keys(ctx.widgetRefList).forEach((refName) => {
52
+ var _a;
53
+ const widget = ctx.widgetRefList[refName];
54
+ const cmpName = (_a = widget.$options) == null ? void 0 : _a.componentName;
55
+ if (cmpName === componentName) {
56
+ if (widget.emit$) {
57
+ widget.emit$.call(widget, eventName, params);
58
+ }
59
+ }
60
+ });
61
+ }
62
+ if (ctx == null ? void 0 : ctx.refList) {
63
+ Object.keys(ctx.refList).forEach((refName) => {
64
+ var _a;
65
+ const ref2 = ctx.refList[refName];
66
+ const cmpName = (_a = ref2.$options) == null ? void 0 : _a.componentName;
67
+ if (cmpName === componentName) {
68
+ if (ref2.emit$) {
69
+ ref2.emit$.call(ref2, eventName, params);
70
+ }
71
+ }
72
+ });
73
+ }
74
+ };
75
+ const editEventHandler = (eventName, eventParams, mode) => {
76
+ dispatch("SettingPanel", "editEventHandler", [eventName, [...eventParams], mode]);
77
+ };
78
+ const onChangeEditEventHandler = (params) => {
79
+ dispatch("SettingPanel", "onChangeEventHandler", params);
80
+ };
81
+ return {
82
+ vfEvents,
83
+ editEventHandler,
84
+ onChangeEditEventHandler,
85
+ emit$,
86
+ on$,
87
+ off$,
88
+ dispatch,
89
+ broadcast
90
+ };
91
+ }
92
+ export {
93
+ useEmitter
94
+ };
95
+ //# sourceMappingURL=useEmitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEmitter.js","sources":["../../../../../core/src/utils/useEmitter.ts"],"sourcesContent":["import { ref, getCurrentInstance, ComponentInternalInstance, Ref } from 'vue';\n\n/**\n * 事件处理函数类型\n */\nexport type EventHandler<T = any> = (data: T) => void;\n\n/**\n * 事件存储对象类型\n */\nexport interface EventsMap {\n [eventName: string]: EventHandler[];\n}\n\n/**\n * 组件引用类型\n */\ninterface ComponentRef {\n $options?: {\n componentName?: string;\n };\n emit$?: (eventName: string, params: any) => void;\n}\n\n/**\n * 组件上下文类型\n */\ninterface ComponentContext {\n widgetRefList?: Record<string, ComponentRef>;\n refList?: Record<string, ComponentRef>;\n}\n\nexport type EditEventHandlerParams = {\n title?: string;\n attr: string;\n eventParams?: string[];\n mode?: string;\n};\n\n/**\n * 组合式API版本的事件总线\n * 用于组件间通信\n */\nexport function useEmitter() {\n // 使用ref创建响应式事件存储对象\n const vfEvents: Ref<EventsMap> = ref({});\n const instance = getCurrentInstance();\n\n /**\n * 触发事件\n * @param {string} eventName 事件名称\n * @param {any} data 事件数据\n */\n const emit$ = <T = any>(eventName: string, data: T): void => {\n if (vfEvents.value[eventName]) {\n vfEvents.value[eventName].forEach(fn => {\n fn(data);\n });\n }\n };\n\n /**\n * 监听事件\n * @param {string} eventName 事件名称\n * @param {Function} fn 回调函数\n */\n const on$ = <T = any>(eventName: string, fn: EventHandler<T>): void => {\n vfEvents.value[eventName] = vfEvents.value[eventName] || [];\n vfEvents.value[eventName].push(fn as EventHandler);\n };\n\n /**\n * 移除事件监听\n * @param {string} eventName 事件名称\n * @param {Function} fn 回调函数,如果不传则移除该事件的所有监听\n */\n const off$ = <T = any>(eventName: string, fn?: EventHandler<T>): void => {\n if (vfEvents.value[eventName]) {\n if (fn === undefined || fn === null) {\n vfEvents.value[eventName].length = 0;\n return;\n }\n\n for (let i = 0; i < vfEvents.value[eventName].length; i++) {\n if (vfEvents.value[eventName][i] === fn) {\n vfEvents.value[eventName].splice(i, 1);\n break;\n }\n }\n }\n };\n\n /**\n * 向上派发事件,寻找指定组件并触发其事件\n * @param {string} componentName 目标组件名称\n * @param {string} eventName 事件名称\n * @param {any} params 事件参数\n */\n const dispatch = (componentName: string, eventName: string, params: any): void => {\n if (!instance) return;\n let parent = instance.parent as ComponentInternalInstance | null;\n let name = parent?.type?.['componentName'] as string | undefined;\n\n while (parent && (!name || name !== componentName)) {\n parent = parent.parent;\n\n if (parent) {\n name = parent.type?.['componentName'] as string | undefined;\n }\n }\n\n if (parent) {\n // 检查目标组件是否有emit$方法\n if (parent.exposed?.emit$ || (parent as any).ctx?.emit$) {\n const targetEmit$ = parent.exposed?.emit$ || parent.ctx?.emit$;\n targetEmit$.call(parent.proxy, eventName, params);\n\n // if (componentName === 'VFormRender') {\n // // 执行原生$emit,以便可以用@进行声明式事件处理\n // parent.emit(eventName, ...(Array.isArray(params) ? params : [params]));\n // }\n }\n }\n };\n\n /**\n * 向下广播事件,寻找指定组件并触发其事件\n * @param {string} componentName 目标组件名称\n * @param {string} eventName 事件名称\n * @param {any} params 事件参数\n */\n const broadcast = (componentName: string, eventName: string, params: any): void => {\n // Vue3中不再有$children属性,需要通过其他方式获取子组件\n // 使用widgetRefList或refList属性\n\n // 处理FormRender组件的widgetRefList\n const ctx = instance?.proxy as unknown as ComponentContext;\n if (ctx?.widgetRefList) {\n Object.keys(ctx.widgetRefList).forEach(refName => {\n const widget = ctx.widgetRefList[refName];\n const cmpName = widget.$options?.componentName;\n if (cmpName === componentName) {\n if (widget.emit$) {\n widget.emit$.call(widget, eventName, params);\n }\n }\n });\n }\n\n // 处理其他组件的refList\n if (ctx?.refList) {\n Object.keys(ctx.refList).forEach(refName => {\n const ref = ctx.refList[refName];\n const cmpName = ref.$options?.componentName;\n if (cmpName === componentName) {\n if (ref.emit$) {\n ref.emit$.call(ref, eventName, params);\n }\n }\n });\n }\n };\n\n /**\n * 编辑事件处理器\n * @param {string} eventName 事件名称\n * @param {any[]} eventParams 事件参数\n * @deprecated\n */\n const editEventHandler = (eventName: string, eventParams: any[], mode: string): void => {\n dispatch('SettingPanel', 'editEventHandler', [eventName, [...eventParams], mode]);\n };\n\n const onChangeEditEventHandler = (params: EditEventHandlerParams): void => {\n dispatch('SettingPanel', 'onChangeEventHandler', params);\n };\n\n return {\n vfEvents,\n editEventHandler,\n onChangeEditEventHandler,\n emit$,\n on$,\n off$,\n dispatch,\n broadcast\n };\n}\n"],"names":["ref"],"mappings":";AA2CO,SAAS,aAAa;AAEzB,QAAM,WAA2B,IAAI,EAAE;AACvC,QAAM,WAAW,mBAAA;AAOjB,QAAM,QAAQ,CAAU,WAAmB,SAAkB;AACzD,QAAI,SAAS,MAAM,SAAS,GAAG;AAC3B,eAAS,MAAM,SAAS,EAAE,QAAQ,CAAA,OAAM;AACpC,WAAG,IAAI;AAAA,MACX,CAAC;AAAA,IACL;AAAA,EACJ;AAOA,QAAM,MAAM,CAAU,WAAmB,OAA8B;AACnE,aAAS,MAAM,SAAS,IAAI,SAAS,MAAM,SAAS,KAAK,CAAA;AACzD,aAAS,MAAM,SAAS,EAAE,KAAK,EAAkB;AAAA,EACrD;AAOA,QAAM,OAAO,CAAU,WAAmB,OAA+B;AACrE,QAAI,SAAS,MAAM,SAAS,GAAG;AAC3B,UAAI,OAAO,UAAa,OAAO,MAAM;AACjC,iBAAS,MAAM,SAAS,EAAE,SAAS;AACnC;AAAA,MACJ;AAEA,eAAS,IAAI,GAAG,IAAI,SAAS,MAAM,SAAS,EAAE,QAAQ,KAAK;AACvD,YAAI,SAAS,MAAM,SAAS,EAAE,CAAC,MAAM,IAAI;AACrC,mBAAS,MAAM,SAAS,EAAE,OAAO,GAAG,CAAC;AACrC;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAQA,QAAM,WAAW,CAAC,eAAuB,WAAmB,WAAsB;;AAC9E,QAAI,CAAC,SAAU;AACf,QAAI,SAAS,SAAS;AACtB,QAAI,QAAO,sCAAQ,SAAR,mBAAe;AAE1B,WAAO,WAAW,CAAC,QAAQ,SAAS,gBAAgB;AAChD,eAAS,OAAO;AAEhB,UAAI,QAAQ;AACR,gBAAO,YAAO,SAAP,mBAAc;AAAA,MACzB;AAAA,IACJ;AAEA,QAAI,QAAQ;AAER,YAAI,YAAO,YAAP,mBAAgB,YAAU,YAAe,QAAf,mBAAoB,QAAO;AACrD,cAAM,gBAAc,YAAO,YAAP,mBAAgB,YAAS,YAAO,QAAP,mBAAY;AACzD,oBAAY,KAAK,OAAO,OAAO,WAAW,MAAM;AAAA,MAMpD;AAAA,IACJ;AAAA,EACJ;AAQA,QAAM,YAAY,CAAC,eAAuB,WAAmB,WAAsB;AAK/E,UAAM,MAAM,qCAAU;AACtB,QAAI,2BAAK,eAAe;AACpB,aAAO,KAAK,IAAI,aAAa,EAAE,QAAQ,CAAA,YAAW;;AAC9C,cAAM,SAAS,IAAI,cAAc,OAAO;AACxC,cAAM,WAAU,YAAO,aAAP,mBAAiB;AACjC,YAAI,YAAY,eAAe;AAC3B,cAAI,OAAO,OAAO;AACd,mBAAO,MAAM,KAAK,QAAQ,WAAW,MAAM;AAAA,UAC/C;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL;AAGA,QAAI,2BAAK,SAAS;AACd,aAAO,KAAK,IAAI,OAAO,EAAE,QAAQ,CAAA,YAAW;;AACxC,cAAMA,OAAM,IAAI,QAAQ,OAAO;AAC/B,cAAM,WAAUA,UAAI,aAAJA,mBAAc;AAC9B,YAAI,YAAY,eAAe;AAC3B,cAAIA,KAAI,OAAO;AACXA,iBAAI,MAAM,KAAKA,MAAK,WAAW,MAAM;AAAA,UACzC;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAQA,QAAM,mBAAmB,CAAC,WAAmB,aAAoB,SAAuB;AACpF,aAAS,gBAAgB,oBAAoB,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC;AAAA,EACpF;AAEA,QAAM,2BAA2B,CAAC,WAAyC;AACvE,aAAS,gBAAgB,wBAAwB,MAAM;AAAA,EAC3D;AAEA,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAER;"}
@@ -0,0 +1,155 @@
1
+ import "clipboard";
2
+ import "@kp-ui/tool";
3
+ import { cloneDeep } from "lodash-es";
4
+ function isNull(value) {
5
+ return value === null || value === void 0;
6
+ }
7
+ const generateId = function() {
8
+ return Math.floor(Math.random() * 1e5 + Math.random() * 2e4 + Math.random() * 5e3);
9
+ };
10
+ const deepClone = function(origin) {
11
+ return cloneDeep(origin);
12
+ };
13
+ const insertCustomCssToHead = function(cssCode, formId = "") {
14
+ const head = document.getElementsByTagName("head")[0];
15
+ const newStyle = document.createElement("style");
16
+ newStyle.type = "text/css";
17
+ newStyle.id = formId ? "vform-custom-css-" + formId : "vform-custom-css";
18
+ try {
19
+ newStyle.appendChild(document.createTextNode(cssCode));
20
+ } catch (ex) {
21
+ newStyle.styleSheet.cssText = cssCode;
22
+ }
23
+ head.appendChild(newStyle);
24
+ };
25
+ const insertGlobalFunctionsToHtml = function(functionsCode, formId = "") {
26
+ const bodyEle = document.getElementsByTagName("body")[0];
27
+ const newScriptEle = document.createElement("script");
28
+ newScriptEle.id = formId ? "v_form_global_functions-" + formId : "v_form_global_functions";
29
+ newScriptEle.type = "text/javascript";
30
+ newScriptEle.innerHTML = functionsCode;
31
+ bodyEle.appendChild(newScriptEle);
32
+ };
33
+ function traverseContainerWidgets(widgetList, handler) {
34
+ if (!(widgetList == null ? void 0 : widgetList.length)) {
35
+ return;
36
+ }
37
+ widgetList.forEach((w) => {
38
+ var _a, _b, _c;
39
+ if (w.category === "container") {
40
+ handler(w);
41
+ }
42
+ if (w.type === "grid") {
43
+ (_a = w.cols) == null ? void 0 : _a.forEach((col) => {
44
+ traverseContainerWidgets(col.widgetList, handler);
45
+ });
46
+ } else if (w.type === "table") {
47
+ (_b = w.rows) == null ? void 0 : _b.forEach((row) => {
48
+ var _a2;
49
+ (_a2 = row.cols) == null ? void 0 : _a2.forEach((cell) => {
50
+ traverseContainerWidgets(cell.widgetList, handler);
51
+ });
52
+ });
53
+ } else if (w.type === "tab") {
54
+ (_c = w.tabs) == null ? void 0 : _c.forEach((tab) => {
55
+ traverseContainerWidgets(tab.widgetList, handler);
56
+ });
57
+ } else if (w.type === "sub-form" || w.type === "grid-sub-form") {
58
+ traverseContainerWidgets(w.widgetList, handler);
59
+ } else if (w.category === "container") {
60
+ traverseContainerWidgets(w.widgetList, handler);
61
+ }
62
+ });
63
+ }
64
+ function handleWidgetForTraverse(widget, handler) {
65
+ if (widget.category && widget.category === "container") {
66
+ traverseFieldWidgetsOfContainer(widget, handler);
67
+ } else if (widget.formItemFlag) {
68
+ handler(widget);
69
+ }
70
+ }
71
+ function traverseFieldWidgetsOfContainer(con, handler) {
72
+ var _a, _b, _c, _d, _e;
73
+ if (con.type === "grid") {
74
+ (_a = con.cols) == null ? void 0 : _a.forEach((col) => {
75
+ var _a2;
76
+ (_a2 = col.widgetList) == null ? void 0 : _a2.forEach((cw) => {
77
+ handleWidgetForTraverse(cw, handler);
78
+ });
79
+ });
80
+ } else if (con.type === "table") {
81
+ (_b = con.rows) == null ? void 0 : _b.forEach((row) => {
82
+ var _a2;
83
+ (_a2 = row.cols) == null ? void 0 : _a2.forEach((cell) => {
84
+ var _a3;
85
+ (_a3 = cell.widgetList) == null ? void 0 : _a3.forEach((cw) => {
86
+ handleWidgetForTraverse(cw, handler);
87
+ });
88
+ });
89
+ });
90
+ } else if (con.type === "tab") {
91
+ (_c = con.tabs) == null ? void 0 : _c.forEach((tab) => {
92
+ var _a2;
93
+ (_a2 = tab.widgetList) == null ? void 0 : _a2.forEach((cw) => {
94
+ handleWidgetForTraverse(cw, handler);
95
+ });
96
+ });
97
+ } else if (con.type === "sub-form" || con.type === "grid-sub-form") {
98
+ (_d = con.widgetList) == null ? void 0 : _d.forEach((cw) => {
99
+ handleWidgetForTraverse(cw, handler);
100
+ });
101
+ } else if (con.category === "container") {
102
+ (_e = con.widgetList) == null ? void 0 : _e.forEach((cw) => {
103
+ handleWidgetForTraverse(cw, handler);
104
+ });
105
+ }
106
+ }
107
+ function getContainerWidgetByName(widgetList, containerName) {
108
+ if (!widgetList) {
109
+ return null;
110
+ }
111
+ let foundContainer = null;
112
+ const handlerFn = (con) => {
113
+ var _a;
114
+ if (((_a = con.options) == null ? void 0 : _a.name) === containerName) {
115
+ foundContainer = con;
116
+ }
117
+ };
118
+ traverseContainerWidgets(widgetList, handlerFn);
119
+ return foundContainer;
120
+ }
121
+ function cloneFormConfigWithoutEventHandler(formConfig) {
122
+ const newFC = deepClone(formConfig);
123
+ newFC.onFormCreated = "";
124
+ newFC.onFormMounted = "";
125
+ newFC.onFormDataChange = "";
126
+ return newFC;
127
+ }
128
+ function translateOptionItems(rawData, widgetType, labelKey, valueKey) {
129
+ if (["cascader", "treeSelect", "select"].includes(widgetType)) {
130
+ return deepClone(rawData);
131
+ }
132
+ const result = [];
133
+ if (rawData && rawData.length > 0) {
134
+ rawData.forEach((ri) => {
135
+ result.push({
136
+ label: ri[labelKey],
137
+ value: ri[valueKey]
138
+ });
139
+ });
140
+ }
141
+ return rawData;
142
+ }
143
+ export {
144
+ cloneFormConfigWithoutEventHandler,
145
+ deepClone,
146
+ generateId,
147
+ getContainerWidgetByName,
148
+ insertCustomCssToHead,
149
+ insertGlobalFunctionsToHtml,
150
+ isNull,
151
+ translateOptionItems,
152
+ traverseContainerWidgets,
153
+ traverseFieldWidgetsOfContainer
154
+ };
155
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sources":["../../../../../core/src/utils/util.ts"],"sourcesContent":["import Clipboard from 'clipboard';\nimport { getLocat } from '@kp-ui/tool';\nimport { isArray, isEmpty, cloneDeep } from 'lodash-es';\n\nimport { FormConfig, Widget, FormJsonType } from '@kp-ui/lowcode-core';\n\nexport function isNull(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\nexport function isNotNull(value: unknown): boolean {\n return value !== null && value !== undefined;\n}\n\nexport function isEmptyStr(str: unknown): boolean {\n //return (str === undefined) || (!str) || (!/[^\\s]/.test(str));\n return (\n str === undefined ||\n (!str && str !== 0 && str !== '0') ||\n (typeof str === 'string' && !/[^\\s]/.test(str))\n );\n}\n\nexport const generateId = function (): number {\n return Math.floor(Math.random() * 100000 + Math.random() * 20000 + Math.random() * 5000);\n};\n\nexport const deepClone = function <T>(origin: T): T {\n return cloneDeep(origin);\n};\n\nexport const overwriteObj = function <T extends Record<string, unknown>>(\n obj1: T,\n obj2: Partial<T>\n): void {\n /* 浅拷贝对象属性,obj2覆盖obj1 */\n Object.keys(obj2).forEach(prop => {\n (obj1 as Record<string, unknown>)[prop] = obj2[prop as keyof T];\n });\n};\n\nexport const insertCustomCssToHead = function (cssCode: string, formId = ''): void {\n const head = document.getElementsByTagName('head')[0];\n\n const newStyle = document.createElement('style');\n newStyle.type = 'text/css';\n newStyle.id = formId ? 'vform-custom-css' + '-' + formId : 'vform-custom-css';\n\n try {\n newStyle.appendChild(document.createTextNode(cssCode));\n } catch (ex) {\n (newStyle as HTMLStyleElement & { styleSheet?: { cssText: string } }).styleSheet!.cssText =\n cssCode;\n }\n\n head.appendChild(newStyle);\n};\n\nexport const insertGlobalFunctionsToHtml = function (functionsCode: string, formId = ''): void {\n const bodyEle = document.getElementsByTagName('body')[0];\n\n const newScriptEle = document.createElement('script');\n newScriptEle.id = formId ? 'v_form_global_functions' + '-' + formId : 'v_form_global_functions';\n newScriptEle.type = 'text/javascript';\n newScriptEle.innerHTML = functionsCode;\n bodyEle.appendChild(newScriptEle);\n};\n\nexport const optionExists = function (\n optionsObj: Record<string, unknown> | null | undefined,\n optionName: string\n): boolean {\n if (!optionsObj) {\n return false;\n }\n\n return Object.keys(optionsObj).indexOf(optionName) > -1;\n};\n\nexport const loadRemoteScript = function (srcPath: string, callback: () => void): void {\n /*加载远程js,加载成功后执行回调函数*/\n const sid = encodeURIComponent(srcPath);\n const oldScriptEle = document.getElementById(sid);\n\n if (!oldScriptEle) {\n let s: HTMLScriptElement | null = document.createElement('script');\n s.src = srcPath;\n s.id = sid;\n document.body.appendChild(s);\n\n s.onload = s.onreadystatechange = function (\n this: HTMLScriptElement,\n _?: Event | string,\n isAbort?: boolean\n ) {\n /* 借鉴自ace.js */\n const scriptEl = this as HTMLScriptElement & { readyState?: string };\n if (\n isAbort ||\n !scriptEl.readyState ||\n scriptEl.readyState === 'loaded' ||\n scriptEl.readyState === 'complete'\n ) {\n s = null;\n if (!isAbort) {\n callback();\n }\n }\n } as OnErrorEventHandler;\n }\n};\n\nexport type WidgetHandler = (widget: Widget, parent?: Widget | null) => void;\nexport type ContainerHandler = (container: Widget) => void;\n\nexport function traverseFieldWidgets(\n widgetList: Widget[] | undefined,\n handler: WidgetHandler,\n parent: Widget | null = null,\n staticWidgetsIncluded = false\n): void {\n if (!widgetList) {\n return;\n }\n\n widgetList.forEach(w => {\n if (w.formItemFlag || (w.formItemFlag === false && staticWidgetsIncluded)) {\n handler(w, parent);\n } else if (w.type === 'grid') {\n w.cols?.forEach(col => {\n traverseFieldWidgets(col.widgetList, handler, w, staticWidgetsIncluded);\n });\n } else if (w.type === 'table') {\n w.rows?.forEach(row => {\n row.cols?.forEach(cell => {\n traverseFieldWidgets(cell.widgetList, handler, w, staticWidgetsIncluded);\n });\n });\n } else if (w.type === 'tab') {\n w.tabs?.forEach(tab => {\n traverseFieldWidgets(tab.widgetList, handler, w, staticWidgetsIncluded);\n });\n } else if (w.type === 'sub-form' || w.type === 'grid-sub-form') {\n traverseFieldWidgets(w.widgetList, handler, w, staticWidgetsIncluded);\n } else if (w.category === 'container') {\n //自定义容器\n traverseFieldWidgets(w.widgetList, handler, w, staticWidgetsIncluded);\n }\n });\n}\n\nexport function traverseContainerWidgets(\n widgetList: Widget[] | undefined,\n handler: ContainerHandler\n): void {\n if (!widgetList?.length) {\n return;\n }\n\n widgetList.forEach(w => {\n if (w.category === 'container') {\n handler(w);\n }\n\n if (w.type === 'grid') {\n w.cols?.forEach(col => {\n traverseContainerWidgets(col.widgetList, handler);\n });\n } else if (w.type === 'table') {\n w.rows?.forEach(row => {\n row.cols?.forEach(cell => {\n traverseContainerWidgets(cell.widgetList, handler);\n });\n });\n } else if (w.type === 'tab') {\n w.tabs?.forEach(tab => {\n traverseContainerWidgets(tab.widgetList, handler);\n });\n } else if (w.type === 'sub-form' || w.type === 'grid-sub-form') {\n traverseContainerWidgets(w.widgetList, handler);\n } else if (w.category === 'container') {\n //自定义容器\n traverseContainerWidgets(w.widgetList, handler);\n }\n });\n}\n\nexport function traverseAllWidgets(\n widgetList: Widget[] | undefined,\n handler: (widget: Widget) => void\n): void {\n if (!widgetList) {\n return;\n }\n\n widgetList.forEach(w => {\n handler(w);\n\n if (w.type === 'grid') {\n w.cols?.forEach(col => {\n handler(col as unknown as Widget);\n traverseAllWidgets(col.widgetList, handler);\n });\n } else if (w.type === 'table') {\n w.rows?.forEach(row => {\n row.cols?.forEach(cell => {\n handler(cell as unknown as Widget);\n traverseAllWidgets(cell.widgetList, handler);\n });\n });\n } else if (w.type === 'tab') {\n w.tabs?.forEach(tab => {\n traverseAllWidgets(tab.widgetList, handler);\n });\n } else if (w.type === 'sub-form' || w.type === 'grid-sub-form') {\n traverseAllWidgets(w.widgetList, handler);\n } else if (w.category === 'container') {\n //自定义容器\n traverseAllWidgets(w.widgetList, handler);\n }\n });\n}\n\nfunction handleWidgetForTraverse(widget: Widget, handler: WidgetHandler): void {\n if (widget.category && widget.category === 'container') {\n traverseFieldWidgetsOfContainer(widget, handler);\n } else if (widget.formItemFlag) {\n handler(widget);\n }\n}\n\n/**\n * 遍历容器内的字段组件\n * @param con\n * @param handler\n */\nexport function traverseFieldWidgetsOfContainer(con: Widget, handler: WidgetHandler): void {\n if (con.type === 'grid') {\n con.cols?.forEach(col => {\n col.widgetList?.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n });\n } else if (con.type === 'table') {\n con.rows?.forEach(row => {\n row.cols?.forEach(cell => {\n cell.widgetList?.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n });\n });\n } else if (con.type === 'tab') {\n con.tabs?.forEach(tab => {\n tab.widgetList?.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n });\n } else if (con.type === 'sub-form' || con.type === 'grid-sub-form') {\n con.widgetList?.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n } else if (con.category === 'container') {\n //自定义容器\n con.widgetList?.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n }\n}\n\nfunction handleContainerTraverse(\n widget: Widget,\n fieldHandler: WidgetHandler,\n containerHandler: ContainerHandler\n): void {\n if (widget.category && widget.category === 'container') {\n traverseWidgetsOfContainer(widget, fieldHandler, containerHandler);\n } else if (widget.formItemFlag) {\n fieldHandler(widget);\n }\n}\n\n/**\n * 遍历容器内部的字段组件和容器组件\n * @param con\n * @param fieldHandler\n * @param containerHandler\n */\nexport function traverseWidgetsOfContainer(\n con: Widget,\n fieldHandler: WidgetHandler,\n containerHandler: ContainerHandler\n): void {\n if (con.type === 'grid') {\n con.cols?.forEach(col => {\n col.widgetList?.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n });\n } else if (con.type === 'table') {\n con.rows?.forEach(row => {\n row.cols?.forEach(cell => {\n cell.widgetList?.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n });\n });\n } else if (con.type === 'tab') {\n con.tabs?.forEach(tab => {\n tab.widgetList?.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n });\n } else if (con.type === 'sub-form' || con.type === 'grid-sub-form') {\n con.widgetList?.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n } else if (con.category === 'container') {\n //自定义容器\n con.widgetList?.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n }\n}\n\nexport interface FieldWidgetInfo {\n type: string;\n name: string | undefined;\n field: Widget;\n}\n\n/**\n * 获取所有字段组件\n * @param widgetList\n * @param staticWidgetsIncluded 是否包含按钮等静态组件,默认不包含\n * @returns {[]}\n */\nexport function getAllFieldWidgets(\n widgetList: Widget[] | undefined,\n staticWidgetsIncluded = false\n): FieldWidgetInfo[] {\n if (!widgetList) {\n return [];\n }\n\n const result: FieldWidgetInfo[] = [];\n const handlerFn: WidgetHandler = w => {\n result.push({\n type: w.type,\n name: w.options?.name,\n field: w\n });\n };\n traverseFieldWidgets(widgetList, handlerFn, null, staticWidgetsIncluded);\n\n return result;\n}\n\nexport interface ContainerWidgetInfo {\n type: string;\n name: string | undefined;\n container: Widget;\n}\n\n/**\n * 获取所有容器组件\n * @param widgetList\n * @returns {[]}\n */\nexport function getAllContainerWidgets(widgetList: Widget[] | undefined): ContainerWidgetInfo[] {\n if (!widgetList) {\n return [];\n }\n\n const result: ContainerWidgetInfo[] = [];\n const handlerFn: ContainerHandler = w => {\n result.push({\n type: w.type,\n name: w.options?.name,\n container: w\n });\n };\n traverseContainerWidgets(widgetList, handlerFn);\n\n return result;\n}\n\nexport function getFieldWidgetByName(\n widgetList: Widget[] | undefined,\n fieldName: string,\n staticWidgetsIncluded?: boolean\n): Widget | null {\n if (!widgetList) {\n return null;\n }\n\n let foundWidget: Widget | null = null;\n const handlerFn: WidgetHandler = widget => {\n if (widget.options?.name === fieldName) {\n foundWidget = widget;\n }\n };\n\n traverseFieldWidgets(widgetList, handlerFn, null, staticWidgetsIncluded);\n return foundWidget;\n}\n\nexport function getContainerWidgetByName(\n widgetList: Widget[] | undefined,\n containerName: string\n): Widget | null {\n if (!widgetList) {\n return null;\n }\n\n let foundContainer: Widget | null = null;\n const handlerFn: ContainerHandler = con => {\n if (con.options?.name === containerName) {\n foundContainer = con;\n }\n };\n\n traverseContainerWidgets(widgetList, handlerFn);\n return foundContainer;\n}\n\nexport function getContainerWidgetById(\n widgetList: Widget[] | undefined,\n containerId: string\n): Widget | null {\n if (!widgetList) {\n return null;\n }\n\n let foundContainer: Widget | null = null;\n const handlerFn: ContainerHandler = con => {\n if (con.id === containerId) {\n foundContainer = con;\n }\n };\n\n traverseContainerWidgets(widgetList, handlerFn);\n return foundContainer;\n}\n\ninterface MessageApi {\n success: (msg: string) => void;\n error: (msg: string) => void;\n}\n\nexport function copyToClipboard(\n content: string,\n clickEvent: MouseEvent,\n $message: MessageApi,\n successMsg: string,\n errorMsg: string\n): void {\n const clipboard = new Clipboard(clickEvent.target as Element, {\n text: () => content\n });\n\n clipboard.on('success', () => {\n $message.success(successMsg);\n clipboard.destroy();\n });\n\n clipboard.on('error', () => {\n $message.error(errorMsg);\n clipboard.destroy();\n });\n\n clipboard.onClick(clickEvent);\n}\n\nexport function getQueryParam(variable: string): string | undefined {\n const query = window.location.search.substring(1);\n const vars = query.split('&');\n for (let i = 0; i < vars.length; i++) {\n const pair = vars[i].split('=');\n if (pair[0] == variable) {\n return pair[1];\n }\n }\n\n return undefined;\n}\n\nexport function getDefaultFormConfig(): FormConfig {\n const { formCode = '' } = getLocat() as { formCode?: string };\n\n return {\n labelWidth: 80,\n labelPosition: 'horizontal', //'left',\n size: '',\n labelAlign: 'right',\n cssCode: '',\n customClass: [],\n\n isEnterSubmit: 0,\n\n buttonList: [],\n\n functions: '', //全局函数\n layoutType: 'PC',\n scaleMode: 'auto',\n onFormCreated: '',\n onFormMounted: `\n if(!this.vfCtx) return\n if(!this.vfCtx._id) return\n const type = this.vfCtx.type\n this.setReadMode(type==='view')\n this.onFormDetail().then(res=>{\n this.setFormData({...res})\n })\n `,\n\n onFormDataChange: '',\n\n serveList: {\n list: [],\n vformUpdate: {\n http: {\n url: `/api/tmgc2-mgt/formDefinition/${formCode}/evaluate/formSubmit`,\n method: 'post',\n data: { _id: '${_id}' },\n params: {}\n },\n dataReqHandlerCode: `const d=data.data||{};\\n Object.keys(d).forEach(k=>{\\n if(d[k]==='null'){\\n d[k]=null\\n }\\n })\\nreturn {...data,data:d}`,\n dataHandlerCode: ''\n },\n vformDetail: {\n http: {\n url: `/api/tmgc2-mgt/formDefinition/${formCode}/evaluate/formLoad`,\n method: 'post',\n data: { _id: '${_id}' },\n params: {}\n },\n dataReqHandlerCode: `const d=data.data||{};\\n Object.keys(d).forEach(k=>{\\n if(d[k]==='null'){\\n d[k]=null\\n }\\n })\\nreturn {...data,data:d}`,\n dataHandlerCode: 'return data.data.object||{}'\n }\n }\n };\n}\n\nexport function buildDefaultFormJson(): FormJsonType {\n return {\n widgetList: [],\n formConfig: deepClone(getDefaultFormConfig())\n };\n}\n\nexport function cloneFormConfigWithoutEventHandler(formConfig: FormConfig): FormConfig {\n const newFC = deepClone(formConfig);\n newFC.onFormCreated = '';\n newFC.onFormMounted = '';\n newFC.onFormDataChange = '';\n\n return newFC;\n}\n\n/**\n * 转译选择项数据\n * @param rawData\n * @param widgetType\n * @param labelKey\n * @param valueKey\n * @returns {[]}\n */\nexport function translateOptionItems<T extends Record<string, unknown>>(\n rawData: T[],\n widgetType: string,\n labelKey: string,\n valueKey: string\n): Array<{ label: unknown; value: unknown }> | T[] {\n if (['cascader', 'treeSelect', 'select'].includes(widgetType)) {\n // 级联选择不转译\n return deepClone(rawData);\n }\n\n const result: Array<{ label: unknown; value: unknown }> = [];\n if (rawData && rawData.length > 0) {\n rawData.forEach(ri => {\n result.push({\n label: ri[labelKey],\n value: ri[valueKey]\n });\n });\n }\n\n return rawData; //result;\n}\n\nexport function getDSByName(\n formConfig: FormConfig,\n dsName: string\n): { uniqueName: string; [key: string]: unknown } | null {\n let resultDS: { uniqueName: string; [key: string]: unknown } | null = null;\n if (dsName && formConfig.dataSources) {\n formConfig.dataSources.forEach(ds => {\n if (ds.uniqueName === dsName) {\n resultDS = ds;\n }\n });\n }\n\n return resultDS;\n}\n"],"names":["_a"],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import { isNull } from "./util.js";
2
+ const commonRegExp = {
3
+ number: /^[-]?\d+(\.\d+)?$/,
4
+ letter: /^[A-Za-z]+$/,
5
+ letterAndNumber: /^[A-Za-z0-9]+$/,
6
+ mobilePhone: /^[1][3-9][0-9]{9}$/,
7
+ letterStartNumberIncluded: /^[A-Za-z]+[A-Za-z\d]*$/,
8
+ noChinese: /^[^\u4e00-\u9fa5]+$/,
9
+ chinese: /^[\u4e00-\u9fa5]+$/,
10
+ email: /^([-_A-Za-z0-9.]+)@([_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/,
11
+ url: /^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(([A-Za-z0-9-~]+)\.)+([A-Za-z0-9-~\/])+$/
12
+ };
13
+ const getRegExp = function(validatorName) {
14
+ return commonRegExp[validatorName];
15
+ };
16
+ const parseRegExpString = (regExpStr) => {
17
+ try {
18
+ const match = regExpStr.match(/^\/(.+)\/([gimsuy]*)$/);
19
+ if (match) {
20
+ return new RegExp(match[1], match[2]);
21
+ }
22
+ return new RegExp(regExpStr);
23
+ } catch {
24
+ return null;
25
+ }
26
+ };
27
+ const validateFn = function(validatorName, rule, value, defaultErrorMsg) {
28
+ try {
29
+ if (isNull(value) || typeof value === "string" && value.length <= 0) {
30
+ return Promise.resolve();
31
+ }
32
+ const reg = getRegExp(validatorName);
33
+ if (!reg) {
34
+ return Promise.resolve();
35
+ }
36
+ if (!reg.test(String(value))) {
37
+ const errTxt = rule.errorMsg || defaultErrorMsg;
38
+ return Promise.reject(errTxt);
39
+ } else {
40
+ return Promise.resolve();
41
+ }
42
+ } catch (error) {
43
+ return Promise.resolve();
44
+ }
45
+ };
46
+ const FormValidators = {
47
+ /* 数字 */
48
+ number(rule, value) {
49
+ return validateFn("number", rule, value, "[" + rule.label + "]包含非数字字符");
50
+ },
51
+ /* 字母 */
52
+ letter(rule, value) {
53
+ return validateFn("letter", rule, value, "[" + rule.label + "]包含非字母字符");
54
+ },
55
+ /* 字母和数字 */
56
+ letterAndNumber(rule, value) {
57
+ return validateFn("letterAndNumber", rule, value, "[" + rule.label + "]只能输入字母或数字");
58
+ },
59
+ /* 手机号码 */
60
+ mobilePhone(rule, value) {
61
+ return validateFn("mobilePhone", rule, value, "[" + rule.label + "]手机号码格式有误");
62
+ },
63
+ /* 禁止空白字符开头 */
64
+ noBlankStart(_rule, _value) {
65
+ },
66
+ /* 禁止空白字符结尾 */
67
+ noBlankEnd(_rule, _value) {
68
+ },
69
+ /* 字母开头,仅可包含数字 */
70
+ letterStartNumberIncluded(rule, value) {
71
+ return validateFn(
72
+ "letterStartNumberIncluded",
73
+ rule,
74
+ value,
75
+ "[" + rule.label + "]必须以字母开头,可包含数字"
76
+ );
77
+ },
78
+ /* 禁止中文输入 */
79
+ noChinese(rule, value) {
80
+ return validateFn("noChinese", rule, value, "[" + rule.label + "]不可输入中文字符");
81
+ },
82
+ /* 必须中文输入 */
83
+ chinese(rule, value) {
84
+ return validateFn("chinese", rule, value, "[" + rule.label + "]只能输入中文字符");
85
+ },
86
+ /* 电子邮箱 */
87
+ email(rule, value) {
88
+ return validateFn("email", rule, value, "[" + rule.label + "]邮箱格式有误");
89
+ },
90
+ /* URL网址 */
91
+ url(rule, value) {
92
+ return validateFn("url", rule, value, "[" + rule.label + "]URL格式有误");
93
+ },
94
+ regExp(rule, value) {
95
+ if (isNull(value) || typeof value === "string" && value.length <= 0) {
96
+ return Promise.resolve();
97
+ }
98
+ const pattern = parseRegExpString(rule.regExp || "");
99
+ if (!pattern) {
100
+ return Promise.resolve();
101
+ }
102
+ if (!pattern.test(String(value))) {
103
+ const errTxt = rule.errorMsg || "[" + rule.label + "]invalid value";
104
+ return Promise.reject(errTxt);
105
+ } else {
106
+ return Promise.resolve();
107
+ }
108
+ }
109
+ };
110
+ export {
111
+ FormValidators as default,
112
+ getRegExp
113
+ };
114
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sources":["../../../../../core/src/utils/validators.ts"],"sourcesContent":["import { isNull } from './util';\n\ntype RegExpName =\n | 'number'\n | 'letter'\n | 'letterAndNumber'\n | 'mobilePhone'\n | 'letterStartNumberIncluded'\n | 'noChinese'\n | 'chinese'\n | 'email'\n | 'url';\n\ninterface ValidationRule {\n label?: string;\n errorMsg?: string;\n regExp?: string;\n [key: string]: unknown;\n}\n\n// 直接存储 RegExp 对象,避免使用 eval\nconst commonRegExp: Record<RegExpName, RegExp> = {\n number: /^[-]?\\d+(\\.\\d+)?$/,\n letter: /^[A-Za-z]+$/,\n letterAndNumber: /^[A-Za-z0-9]+$/,\n mobilePhone: /^[1][3-9][0-9]{9}$/,\n letterStartNumberIncluded: /^[A-Za-z]+[A-Za-z\\d]*$/,\n noChinese: /^[^\\u4e00-\\u9fa5]+$/,\n chinese: /^[\\u4e00-\\u9fa5]+$/,\n email: /^([-_A-Za-z0-9.]+)@([_A-Za-z0-9]+\\.)+[A-Za-z0-9]{2,3}$/,\n url: /^([hH][tT]{2}[pP]:\\/\\/|[hH][tT]{2}[pP][sS]:\\/\\/)(([A-Za-z0-9-~]+)\\.)+([A-Za-z0-9-~\\/])+$/\n};\n\nexport const getRegExp = function (validatorName: RegExpName): RegExp | undefined {\n return commonRegExp[validatorName];\n};\n\n/**\n * 将正则表达式字符串转换为 RegExp 对象\n * 支持格式: '/pattern/flags' 或 'pattern'\n */\nconst parseRegExpString = (regExpStr: string): RegExp | null => {\n try {\n // 处理 /pattern/flags 格式\n const match = regExpStr.match(/^\\/(.+)\\/([gimsuy]*)$/);\n if (match) {\n return new RegExp(match[1], match[2]);\n }\n // 普通字符串作为 pattern\n return new RegExp(regExpStr);\n } catch {\n return null;\n }\n};\n\nconst validateFn = function (\n validatorName: RegExpName,\n rule: ValidationRule,\n value: unknown,\n defaultErrorMsg: string\n): Promise<void> {\n try {\n // 空值不校验\n if (isNull(value) || (typeof value === 'string' && value.length <= 0)) {\n return Promise.resolve();\n }\n\n const reg = getRegExp(validatorName);\n if (!reg) {\n return Promise.resolve();\n }\n\n if (!reg.test(String(value))) {\n const errTxt = rule.errorMsg || defaultErrorMsg;\n return Promise.reject(errTxt);\n } else {\n return Promise.resolve();\n }\n } catch (error) {\n return Promise.resolve();\n }\n};\n\ntype ValidatorFn = (rule: ValidationRule, value: unknown) => Promise<void> | void;\n\ninterface FormValidatorsType {\n number: ValidatorFn;\n letter: ValidatorFn;\n letterAndNumber: ValidatorFn;\n mobilePhone: ValidatorFn;\n noBlankStart: ValidatorFn;\n noBlankEnd: ValidatorFn;\n letterStartNumberIncluded: ValidatorFn;\n noChinese: ValidatorFn;\n chinese: ValidatorFn;\n email: ValidatorFn;\n url: ValidatorFn;\n regExp: ValidatorFn;\n}\n\nconst FormValidators: FormValidatorsType = {\n /* 数字 */\n number(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('number', rule, value, '[' + rule.label + ']包含非数字字符');\n },\n\n /* 字母 */\n letter(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('letter', rule, value, '[' + rule.label + ']包含非字母字符');\n },\n\n /* 字母和数字 */\n letterAndNumber(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('letterAndNumber', rule, value, '[' + rule.label + ']只能输入字母或数字');\n },\n\n /* 手机号码 */\n mobilePhone(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('mobilePhone', rule, value, '[' + rule.label + ']手机号码格式有误');\n },\n\n /* 禁止空白字符开头 */\n noBlankStart(_rule: ValidationRule, _value: unknown): void {\n //暂未实现\n },\n\n /* 禁止空白字符结尾 */\n noBlankEnd(_rule: ValidationRule, _value: unknown): void {\n //暂未实现\n },\n\n /* 字母开头,仅可包含数字 */\n letterStartNumberIncluded(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn(\n 'letterStartNumberIncluded',\n rule,\n value,\n '[' + rule.label + ']必须以字母开头,可包含数字'\n );\n },\n\n /* 禁止中文输入 */\n noChinese(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('noChinese', rule, value, '[' + rule.label + ']不可输入中文字符');\n },\n\n /* 必须中文输入 */\n chinese(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('chinese', rule, value, '[' + rule.label + ']只能输入中文字符');\n },\n\n /* 电子邮箱 */\n email(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('email', rule, value, '[' + rule.label + ']邮箱格式有误');\n },\n\n /* URL网址 */\n url(rule: ValidationRule, value: unknown): Promise<void> {\n return validateFn('url', rule, value, '[' + rule.label + ']URL格式有误');\n },\n\n regExp(rule: ValidationRule, value: unknown): Promise<void> {\n // 空值不校验\n if (isNull(value) || (typeof value === 'string' && value.length <= 0)) {\n return Promise.resolve();\n }\n\n const pattern = parseRegExpString(rule.regExp || '');\n if (!pattern) {\n return Promise.resolve();\n }\n\n if (!pattern.test(String(value))) {\n const errTxt = rule.errorMsg || '[' + rule.label + ']invalid value';\n return Promise.reject(errTxt);\n } else {\n return Promise.resolve();\n }\n }\n};\n\nexport default FormValidators;\n"],"names":[],"mappings":"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"}