amis-editor 5.2.0-beta.1 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (563) hide show
  1. package/dist/6dbcbb49b6fd405190a9.png +0 -0
  2. package/dist/cebfe0bc5a1dbde02da1.svg +10 -0
  3. package/dist/compat.d.ts +30 -0
  4. package/dist/component/Breadcrumb.d.ts +33 -0
  5. package/dist/component/ClassNameControl.d.ts +31 -0
  6. package/dist/component/CommonConfigWrapper.d.ts +6 -0
  7. package/dist/component/ContainerWrapper.d.ts +12 -0
  8. package/dist/component/Editor.d.ts +97 -0
  9. package/dist/component/HighlightBox.d.ts +29 -0
  10. package/dist/component/IFrameBridge.d.ts +32 -0
  11. package/dist/component/IFramePreview.d.ts +38 -0
  12. package/dist/component/MiniEditor.d.ts +9 -0
  13. package/dist/component/NodeWrapper.d.ts +20 -0
  14. package/dist/component/Panel/AMisCodeEditor.d.ts +37 -0
  15. package/dist/component/Panel/AvailableRenderersPanel.d.ts +10 -0
  16. package/dist/component/Panel/CodeEditorPanel.d.ts +6 -0
  17. package/dist/component/Panel/ContextMenuPanel.d.ts +8 -0
  18. package/dist/component/Panel/DrawerPanel.d.ts +15 -0
  19. package/dist/component/Panel/DrawerRendererPanel.d.ts +15 -0
  20. package/dist/component/Panel/InsertSubRendererPanel.d.ts +11 -0
  21. package/dist/component/Panel/LeftPanels.d.ts +20 -0
  22. package/dist/component/Panel/Outline.d.ts +18 -0
  23. package/dist/component/Panel/RenderersPanel.d.ts +31 -0
  24. package/dist/component/Panel/RightPanels.d.ts +21 -0
  25. package/dist/component/Panel/TargetNamePanel.d.ts +7 -0
  26. package/dist/component/PopOverForm.d.ts +22 -0
  27. package/dist/component/Preview.d.ts +67 -0
  28. package/dist/component/RegionHLBox.d.ts +20 -0
  29. package/dist/component/RegionWrapper.d.ts +206 -0
  30. package/dist/component/RendererThumb.d.ts +22 -0
  31. package/dist/component/ScaffoldModal.d.ts +24 -0
  32. package/dist/component/SubEditor.d.ts +67 -0
  33. package/{lib → dist}/component/TableViewEditor.d.ts +2 -2
  34. package/dist/component/VRenderer.d.ts +191 -0
  35. package/dist/component/base/BackTop.d.ts +26 -0
  36. package/dist/component/base/ErrorRenderer.d.ts +4 -0
  37. package/{lib/component → dist/component/base}/InputComponentName.d.ts +0 -0
  38. package/dist/component/base/SearchCustomRendererPanel.d.ts +15 -0
  39. package/dist/component/base/SearchPanel.d.ts +83 -0
  40. package/dist/component/base/SearchRendererPanel.d.ts +19 -0
  41. package/dist/component/base/ShortcutKey.d.ts +23 -0
  42. package/dist/component/base/WidthDraggableBtn.d.ts +16 -0
  43. package/dist/component/base/WidthDraggableContainer.d.ts +2 -0
  44. package/dist/component/control/APIControl.d.ts +1158 -0
  45. package/dist/component/control/ActionAPIControl.d.ts +1158 -0
  46. package/{lib/renderer → dist/component/control}/BadgeControl.d.ts +12 -13
  47. package/dist/component/control/BaseControl.d.ts +248 -0
  48. package/{lib/renderer → dist/component/control}/DataBindingControl.d.ts +0 -0
  49. package/{lib/renderer → dist/component/control}/DataPickerControl.d.ts +1 -1
  50. package/{lib/renderer → dist/component/control}/DateShortCutControl.d.ts +1 -1
  51. package/dist/component/control/FormulaControl.d.ts +51 -0
  52. package/{lib/renderer → dist/component/control}/OptionControl.d.ts +0 -0
  53. package/{lib/renderer → dist/component/control}/PopoverEdit.d.ts +1 -1
  54. package/{lib/renderer → dist/component/control}/StatusControl.d.ts +0 -0
  55. package/{lib/renderer → dist/component/control}/SwitchMoreControl.d.ts +70 -68
  56. package/{lib/renderer → dist/component/control}/ValidationControl.d.ts +0 -0
  57. package/{lib/renderer → dist/component/control}/ValidationItem.d.ts +0 -0
  58. package/{lib/renderer → dist/component/control}/style-control/Background.d.ts +0 -0
  59. package/{lib/renderer → dist/component/control}/style-control/Border.d.ts +0 -0
  60. package/{lib/renderer → dist/component/control}/style-control/BoxModel.d.ts +0 -0
  61. package/{lib/renderer → dist/component/control}/style-control/BoxShadow.d.ts +0 -0
  62. package/{lib/renderer → dist/component/control}/style-control/Display.d.ts +0 -0
  63. package/{lib/renderer → dist/component/control}/style-control/Font.d.ts +0 -0
  64. package/{lib/renderer → dist/component/control}/style-control/font-family.d.ts +0 -0
  65. package/{lib/renderer → dist/component/control}/style-control/transformation.d.ts +0 -0
  66. package/{lib/renderer → dist/component/control}/style-control/types.d.ts +0 -0
  67. package/dist/component/schemaTpl.d.ts +27 -0
  68. package/{lib → dist/component}/validator.d.ts +0 -0
  69. package/dist/dnd/default.d.ts +47 -0
  70. package/dist/dnd/index.d.ts +119 -0
  71. package/dist/dnd/interface.d.ts +14 -0
  72. package/dist/dnd/position-h.d.ts +7 -0
  73. package/dist/env.d.ts +5 -0
  74. package/dist/event-action/action-config-panel.d.ts +8 -0
  75. package/dist/event-action/actions.d.ts +3 -0
  76. package/dist/event-action/comp-action-select.d.ts +11 -0
  77. package/dist/event-action/config.d.ts +13 -0
  78. package/dist/event-action/index.d.ts +459 -0
  79. package/dist/event-action/schema.d.ts +32 -0
  80. package/dist/exports.d.ts +8 -0
  81. package/dist/exports.min.js +1 -0
  82. package/dist/icons/index.d.ts +2 -0
  83. package/{lib → dist}/index.d.ts +50 -24
  84. package/dist/index.min.js +1 -0
  85. package/dist/manager.d.ts +502 -0
  86. package/dist/mocker.d.ts +1 -0
  87. package/{lib → dist}/plugin/Alert.d.ts +1 -1
  88. package/dist/plugin/AnchorNav.d.ts +67 -0
  89. package/{lib → dist}/plugin/Audio.d.ts +1 -1
  90. package/dist/plugin/Avatar.d.ts +18 -0
  91. package/{lib → dist}/plugin/Breadcrumb.d.ts +1 -1
  92. package/{lib → dist}/plugin/Button.d.ts +2 -2
  93. package/{lib → dist}/plugin/ButtonGroup.d.ts +2 -2
  94. package/{lib → dist}/plugin/ButtonToolbar.d.ts +1 -1
  95. package/{lib → dist}/plugin/CRUD.d.ts +2 -2
  96. package/{lib → dist}/plugin/Card.d.ts +1 -1
  97. package/{lib → dist}/plugin/Cards.d.ts +1 -1
  98. package/{lib → dist}/plugin/Carousel.d.ts +1 -1
  99. package/{lib → dist}/plugin/Chart.d.ts +2 -2
  100. package/{lib → dist}/plugin/CodeView.d.ts +1 -1
  101. package/{lib → dist}/plugin/Collapse.d.ts +1 -1
  102. package/{lib → dist}/plugin/CollapseGroup.d.ts +1 -1
  103. package/{lib → dist}/plugin/Container.d.ts +1 -1
  104. package/{lib → dist}/plugin/Custom.d.ts +1 -1
  105. package/{lib → dist}/plugin/CustomRegion.d.ts +1 -1
  106. package/{lib → dist}/plugin/Date.d.ts +1 -1
  107. package/{lib → dist}/plugin/Datetime.d.ts +1 -1
  108. package/{lib → dist}/plugin/Dialog.d.ts +1 -1
  109. package/{lib → dist}/plugin/Divider.d.ts +1 -1
  110. package/{lib → dist}/plugin/Drawer.d.ts +1 -1
  111. package/{lib → dist}/plugin/DropDownButton.d.ts +2 -3
  112. package/{lib → dist}/plugin/Each.d.ts +1 -1
  113. package/dist/plugin/ErrorRenderer.d.ts +7 -0
  114. package/{lib → dist}/plugin/Flex.d.ts +1 -1
  115. package/{lib → dist}/plugin/Form/ButtonGroupSelect.d.ts +2 -2
  116. package/{lib → dist}/plugin/Form/ButtonToolbar.d.ts +1 -1
  117. package/{lib → dist}/plugin/Form/ChainedSelect.d.ts +3 -6
  118. package/{lib → dist}/plugin/Form/Checkbox.d.ts +2 -2
  119. package/{lib → dist}/plugin/Form/Checkboxes.d.ts +2 -2
  120. package/{lib → dist}/plugin/Form/CodeEditor.d.ts +3 -3
  121. package/{lib → dist}/plugin/Form/Combo.d.ts +2 -2
  122. package/{lib → dist}/plugin/Form/ConditionBuilder.d.ts +1 -1
  123. package/{lib → dist}/plugin/Form/Control.d.ts +1 -1
  124. package/{lib → dist}/plugin/Form/DiffEditor.d.ts +3 -3
  125. package/{lib → dist}/plugin/Form/FieldSet.d.ts +1 -1
  126. package/{lib → dist}/plugin/Form/Form.d.ts +3 -3
  127. package/{lib → dist}/plugin/Form/Formula.d.ts +1 -1
  128. package/{lib → dist}/plugin/Form/Group.d.ts +1 -1
  129. package/{lib → dist}/plugin/Form/Hidden.d.ts +1 -1
  130. package/{lib → dist}/plugin/Form/InputArray.d.ts +1 -1
  131. package/dist/plugin/Form/InputCity.d.ts +19 -0
  132. package/{lib → dist}/plugin/Form/InputColor.d.ts +18 -20
  133. package/{lib → dist}/plugin/Form/InputDate.d.ts +2 -2
  134. package/{lib → dist}/plugin/Form/InputDateRange.d.ts +2 -2
  135. package/{lib → dist}/plugin/Form/InputDateTime.d.ts +0 -0
  136. package/{lib → dist}/plugin/Form/InputDateTimeRange.d.ts +0 -0
  137. package/{lib → dist}/plugin/Form/InputEmail.d.ts +0 -0
  138. package/{lib → dist}/plugin/Form/InputExcel.d.ts +2 -2
  139. package/{lib → dist}/plugin/Form/InputFile.d.ts +2 -2
  140. package/{lib → dist}/plugin/Form/InputGroup.d.ts +1 -1
  141. package/dist/plugin/Form/InputImage.d.ts +20 -0
  142. package/{lib → dist}/plugin/Form/InputKV.d.ts +2 -2
  143. package/{lib → dist}/plugin/Form/InputMonth.d.ts +0 -0
  144. package/{lib → dist}/plugin/Form/InputMonthRange.d.ts +0 -0
  145. package/dist/plugin/Form/InputNumber.d.ts +20 -0
  146. package/{lib → dist}/plugin/Form/InputPassword.d.ts +0 -0
  147. package/{lib → dist}/plugin/Form/InputQuarter.d.ts +0 -0
  148. package/{lib → dist}/plugin/Form/InputQuarterRange.d.ts +0 -0
  149. package/{lib → dist}/plugin/Form/InputRange.d.ts +3 -5
  150. package/{lib → dist}/plugin/Form/InputRating.d.ts +2 -2
  151. package/{lib → dist}/plugin/Form/InputRepeat.d.ts +1 -1
  152. package/{lib → dist}/plugin/Form/InputRichText.d.ts +1 -1
  153. package/{lib → dist}/plugin/Form/InputSubForm.d.ts +1 -2
  154. package/{lib → dist}/plugin/Form/InputTable.d.ts +1 -1
  155. package/dist/plugin/Form/InputTag.d.ts +21 -0
  156. package/{lib → dist}/plugin/Form/InputText.d.ts +1 -1
  157. package/{lib → dist}/plugin/Form/InputTime.d.ts +0 -0
  158. package/{lib → dist}/plugin/Form/InputTimeRange.d.ts +0 -0
  159. package/{lib → dist}/plugin/Form/InputTree.d.ts +2 -2
  160. package/{lib → dist}/plugin/Form/InputURL.d.ts +0 -0
  161. package/{lib → dist}/plugin/Form/InputYear.d.ts +0 -0
  162. package/{lib → dist}/plugin/Form/InputYearRange.d.ts +0 -0
  163. package/{lib → dist}/plugin/Form/Item.d.ts +2 -2
  164. package/{lib → dist}/plugin/Form/ListSelect.d.ts +2 -2
  165. package/{lib → dist}/plugin/Form/LocationPicker.d.ts +2 -3
  166. package/{lib → dist}/plugin/Form/MatrixCheckboxes.d.ts +2 -7
  167. package/{lib → dist}/plugin/Form/NestedSelect.d.ts +2 -5
  168. package/{lib → dist}/plugin/Form/Picker.d.ts +1 -1
  169. package/{lib → dist}/plugin/Form/Radios.d.ts +2 -2
  170. package/{lib → dist}/plugin/Form/Select.d.ts +2 -2
  171. package/{lib → dist}/plugin/Form/Static.d.ts +3 -4
  172. package/{lib → dist}/plugin/Form/Switch.d.ts +2 -2
  173. package/{lib → dist}/plugin/Form/TabsTransfer.d.ts +2 -2
  174. package/{lib → dist}/plugin/Form/Textarea.d.ts +3 -3
  175. package/{lib → dist}/plugin/Form/Transfer.d.ts +2 -2
  176. package/{lib → dist}/plugin/Form/TreeSelect.d.ts +2 -2
  177. package/{lib → dist}/plugin/Form/UUID.d.ts +1 -1
  178. package/{lib → dist}/plugin/Grid.d.ts +2 -2
  179. package/{lib → dist}/plugin/HBox.d.ts +2 -2
  180. package/{lib → dist}/plugin/IFrame.d.ts +2 -3
  181. package/{lib → dist}/plugin/Image.d.ts +1 -1
  182. package/{lib → dist}/plugin/Images.d.ts +1 -1
  183. package/{lib → dist}/plugin/Json.d.ts +1 -1
  184. package/{lib → dist}/plugin/Link.d.ts +1 -2
  185. package/{lib → dist}/plugin/List.d.ts +1 -1
  186. package/{lib → dist}/plugin/ListItem.d.ts +1 -1
  187. package/{lib → dist}/plugin/Log.d.ts +1 -1
  188. package/{lib → dist}/plugin/Mapping.d.ts +1 -1
  189. package/{lib → dist}/plugin/Markdown.d.ts +1 -1
  190. package/{lib → dist}/plugin/Nav.d.ts +1 -1
  191. package/{lib → dist}/plugin/Operation.d.ts +1 -1
  192. package/{lib → dist}/plugin/Others/Action.d.ts +1 -1
  193. package/dist/plugin/Others/BasicToolbar.d.ts +11 -0
  194. package/dist/plugin/Others/DataDebug.d.ts +19 -0
  195. package/{lib → dist}/plugin/Others/TableCell.d.ts +1 -1
  196. package/dist/plugin/Others/Unknown.d.ts +5 -0
  197. package/{lib → dist}/plugin/Page.d.ts +3 -3
  198. package/dist/plugin/Panel/AvailableRenderers.d.ts +8 -0
  199. package/dist/plugin/Panel/Code.d.ts +9 -0
  200. package/dist/plugin/Panel/Name.d.ts +8 -0
  201. package/dist/plugin/Panel/Outline.d.ts +8 -0
  202. package/{lib → dist}/plugin/Panel.d.ts +1 -1
  203. package/{lib → dist}/plugin/Plain.d.ts +1 -1
  204. package/{lib → dist}/plugin/Progress.d.ts +1 -1
  205. package/{lib → dist}/plugin/Property.d.ts +1 -1
  206. package/{lib → dist}/plugin/QRCode.d.ts +1 -1
  207. package/{lib → dist}/plugin/Reset.d.ts +0 -0
  208. package/{lib → dist}/plugin/Service.d.ts +1 -4
  209. package/{lib → dist}/plugin/Sparkline.d.ts +1 -1
  210. package/{lib → dist}/plugin/Status.d.ts +1 -1
  211. package/{lib → dist}/plugin/Steps.d.ts +1 -1
  212. package/{lib → dist}/plugin/Submit.d.ts +0 -0
  213. package/{lib → dist}/plugin/Table.d.ts +2 -5
  214. package/{lib → dist}/plugin/TableView.d.ts +1 -1
  215. package/{lib → dist}/plugin/Tabs.d.ts +1 -2
  216. package/{lib → dist}/plugin/Tasks.d.ts +1 -1
  217. package/{lib → dist}/plugin/Time.d.ts +1 -1
  218. package/{lib → dist}/plugin/TooltipWrapper.d.ts +1 -1
  219. package/{lib → dist}/plugin/Tpl.d.ts +1 -1
  220. package/{lib → dist}/plugin/Video.d.ts +1 -1
  221. package/{lib → dist}/plugin/WebComponent.d.ts +1 -1
  222. package/{lib → dist}/plugin/Wizard.d.ts +2 -2
  223. package/{lib → dist}/plugin/Wrapper.d.ts +1 -1
  224. package/dist/plugin.d.ts +637 -0
  225. package/dist/store/editor.d.ts +1048 -0
  226. package/dist/store/node.d.ts +281 -0
  227. package/dist/style.css +1 -0
  228. package/dist/util.d.ts +105 -0
  229. package/package.json +32 -31
  230. package/src/component/schemaTpl.tsx +2881 -0
  231. package/src/plugin/Alert.tsx +108 -0
  232. package/src/plugin/AnchorNav.tsx +234 -0
  233. package/src/plugin/Audio.tsx +148 -0
  234. package/src/plugin/Avatar.tsx +78 -0
  235. package/src/plugin/Breadcrumb.tsx +108 -0
  236. package/src/plugin/Button.tsx +350 -0
  237. package/src/plugin/ButtonGroup.tsx +146 -0
  238. package/src/plugin/ButtonToolbar.tsx +81 -0
  239. package/src/plugin/CRUD.tsx +1777 -0
  240. package/src/plugin/Card.tsx +291 -0
  241. package/src/plugin/Cards.tsx +312 -0
  242. package/src/plugin/Carousel.tsx +377 -0
  243. package/src/plugin/Chart.tsx +230 -0
  244. package/src/plugin/CodeView.tsx +60 -0
  245. package/src/plugin/Collapse.tsx +136 -0
  246. package/src/plugin/CollapseGroup.tsx +249 -0
  247. package/src/plugin/Container.tsx +93 -0
  248. package/src/plugin/Custom.tsx +122 -0
  249. package/src/plugin/CustomRegion.tsx +157 -0
  250. package/src/plugin/Date.tsx +74 -0
  251. package/src/plugin/Datetime.tsx +68 -0
  252. package/src/plugin/Dialog.tsx +207 -0
  253. package/src/plugin/Divider.tsx +36 -0
  254. package/src/plugin/Drawer.tsx +244 -0
  255. package/src/plugin/DropDownButton.tsx +251 -0
  256. package/src/plugin/Each.tsx +150 -0
  257. package/src/plugin/ErrorRenderer.tsx +15 -0
  258. package/src/plugin/Flex.tsx +209 -0
  259. package/src/plugin/Form/ButtonGroupSelect.tsx +163 -0
  260. package/src/plugin/Form/ButtonToolbar.tsx +117 -0
  261. package/src/plugin/Form/ChainedSelect.tsx +115 -0
  262. package/src/plugin/Form/Checkbox.tsx +176 -0
  263. package/src/plugin/Form/Checkboxes.tsx +234 -0
  264. package/src/plugin/Form/CodeEditor.tsx +210 -0
  265. package/src/plugin/Form/Combo.tsx +621 -0
  266. package/src/plugin/Form/ConditionBuilder.tsx +315 -0
  267. package/src/plugin/Form/Control.tsx +85 -0
  268. package/src/plugin/Form/DiffEditor.tsx +215 -0
  269. package/src/plugin/Form/FieldSet.tsx +158 -0
  270. package/src/plugin/Form/Form.tsx +894 -0
  271. package/src/plugin/Form/Formula.tsx +73 -0
  272. package/src/plugin/Form/Group.tsx +295 -0
  273. package/src/plugin/Form/Hidden.tsx +44 -0
  274. package/src/plugin/Form/InputArray.tsx +219 -0
  275. package/src/plugin/Form/InputCity.tsx +93 -0
  276. package/src/plugin/Form/InputColor.tsx +123 -0
  277. package/src/plugin/Form/InputDate.tsx +398 -0
  278. package/src/plugin/Form/InputDateRange.tsx +367 -0
  279. package/src/plugin/Form/InputDateTime.tsx +39 -0
  280. package/src/plugin/Form/InputDateTimeRange.tsx +41 -0
  281. package/src/plugin/Form/InputEmail.tsx +34 -0
  282. package/src/plugin/Form/InputExcel.tsx +128 -0
  283. package/src/plugin/Form/InputFile.tsx +395 -0
  284. package/src/plugin/Form/InputGroup.tsx +96 -0
  285. package/src/plugin/Form/InputImage.tsx +266 -0
  286. package/src/plugin/Form/InputKV.tsx +133 -0
  287. package/src/plugin/Form/InputMonth.tsx +37 -0
  288. package/src/plugin/Form/InputMonthRange.tsx +41 -0
  289. package/src/plugin/Form/InputNumber.tsx +89 -0
  290. package/src/plugin/Form/InputPassword.tsx +35 -0
  291. package/src/plugin/Form/InputQuarter.tsx +37 -0
  292. package/src/plugin/Form/InputQuarterRange.tsx +41 -0
  293. package/src/plugin/Form/InputRange.tsx +191 -0
  294. package/src/plugin/Form/InputRating.tsx +390 -0
  295. package/src/plugin/Form/InputRepeat.tsx +57 -0
  296. package/src/plugin/Form/InputRichText.tsx +185 -0
  297. package/src/plugin/Form/InputSubForm.tsx +189 -0
  298. package/src/plugin/Form/InputTable.tsx +418 -0
  299. package/src/plugin/Form/InputTag.tsx +70 -0
  300. package/src/plugin/Form/InputText.tsx +364 -0
  301. package/src/plugin/Form/InputTime.tsx +36 -0
  302. package/src/plugin/Form/InputTimeRange.tsx +41 -0
  303. package/src/plugin/Form/InputTree.tsx +379 -0
  304. package/src/plugin/Form/InputURL.tsx +36 -0
  305. package/src/plugin/Form/InputYear.tsx +37 -0
  306. package/src/plugin/Form/InputYearRange.tsx +41 -0
  307. package/src/plugin/Form/Item.tsx +326 -0
  308. package/src/plugin/Form/ListSelect.tsx +128 -0
  309. package/src/plugin/Form/LocationPicker.tsx +57 -0
  310. package/src/plugin/Form/MatrixCheckboxes.tsx +136 -0
  311. package/src/plugin/Form/NestedSelect.tsx +278 -0
  312. package/src/plugin/Form/Picker.tsx +206 -0
  313. package/src/plugin/Form/Radios.tsx +189 -0
  314. package/src/plugin/Form/Select.tsx +304 -0
  315. package/src/plugin/Form/Static.tsx +322 -0
  316. package/src/plugin/Form/Switch.tsx +219 -0
  317. package/src/plugin/Form/TabsTransfer.tsx +355 -0
  318. package/src/plugin/Form/Textarea.tsx +193 -0
  319. package/src/plugin/Form/Transfer.tsx +430 -0
  320. package/src/plugin/Form/TreeSelect.tsx +404 -0
  321. package/src/plugin/Form/UUID.tsx +48 -0
  322. package/src/plugin/Grid.tsx +826 -0
  323. package/src/plugin/HBox.tsx +728 -0
  324. package/src/plugin/IFrame.tsx +79 -0
  325. package/src/plugin/Image.tsx +309 -0
  326. package/src/plugin/Images.tsx +226 -0
  327. package/src/plugin/Json.tsx +69 -0
  328. package/src/plugin/Link.tsx +87 -0
  329. package/src/plugin/List.tsx +274 -0
  330. package/src/plugin/ListItem.tsx +230 -0
  331. package/src/plugin/Log.tsx +52 -0
  332. package/src/plugin/Mapping.tsx +149 -0
  333. package/src/plugin/Markdown.tsx +47 -0
  334. package/src/plugin/Nav.tsx +182 -0
  335. package/src/plugin/Operation.tsx +95 -0
  336. package/src/plugin/Others/Action.tsx +432 -0
  337. package/src/plugin/Others/BasicToolbar.tsx +588 -0
  338. package/src/plugin/Others/DataDebug.tsx +134 -0
  339. package/src/plugin/Others/TableCell.tsx +460 -0
  340. package/src/plugin/Others/Unknown.tsx +37 -0
  341. package/src/plugin/Page.tsx +392 -0
  342. package/src/plugin/Panel/AvailableRenderers.tsx +41 -0
  343. package/src/plugin/Panel/Code.tsx +44 -0
  344. package/src/plugin/Panel/Name.tsx +26 -0
  345. package/src/plugin/Panel/Outline.tsx +40 -0
  346. package/src/plugin/Panel.tsx +242 -0
  347. package/src/plugin/Plain.tsx +81 -0
  348. package/src/plugin/Progress.tsx +265 -0
  349. package/src/plugin/Property.tsx +139 -0
  350. package/src/plugin/QRCode.tsx +96 -0
  351. package/src/plugin/Reset.tsx +23 -0
  352. package/src/plugin/Service.tsx +166 -0
  353. package/src/plugin/Sparkline.tsx +40 -0
  354. package/src/plugin/Status.tsx +76 -0
  355. package/src/plugin/Steps.tsx +128 -0
  356. package/src/plugin/Submit.tsx +23 -0
  357. package/src/plugin/Table.tsx +457 -0
  358. package/src/plugin/TableView.tsx +815 -0
  359. package/src/plugin/Tabs.tsx +522 -0
  360. package/src/plugin/Tasks.tsx +274 -0
  361. package/src/plugin/Time.tsx +68 -0
  362. package/src/plugin/TooltipWrapper.tsx +289 -0
  363. package/src/plugin/Tpl.tsx +174 -0
  364. package/src/plugin/Video.tsx +147 -0
  365. package/src/plugin/WebComponent.tsx +53 -0
  366. package/src/plugin/Wizard.tsx +941 -0
  367. package/src/plugin/Wrapper.tsx +128 -0
  368. package/src/plugin.ts +1112 -0
  369. package/static/Code-hover.png +0 -0
  370. package/static/Code.png +0 -0
  371. package/static/Outline-hover.png +0 -0
  372. package/static/Outline.png +0 -0
  373. package/static/Renderers-hover.png +0 -0
  374. package/static/Renderers.png +0 -0
  375. package/static/empty.png +0 -0
  376. package/static/side_hide_left.svg +10 -0
  377. package/lib/component/BaseControl.d.ts +0 -1831
  378. package/lib/component/BaseControl.js +0 -366
  379. package/lib/component/InputComponentName.js +0 -44
  380. package/lib/component/TableViewEditor.js +0 -528
  381. package/lib/event-action/actions.d.ts +0 -3
  382. package/lib/event-action/actions.js +0 -188
  383. package/lib/event-action/schema.d.ts +0 -13
  384. package/lib/event-action/schema.js +0 -134
  385. package/lib/index.js +0 -181
  386. package/lib/plugin/Alert.js +0 -113
  387. package/lib/plugin/AnchorNav.d.ts +0 -48
  388. package/lib/plugin/AnchorNav.js +0 -297
  389. package/lib/plugin/Audio.js +0 -157
  390. package/lib/plugin/Avatar.d.ts +0 -27
  391. package/lib/plugin/Avatar.js +0 -305
  392. package/lib/plugin/Breadcrumb.js +0 -116
  393. package/lib/plugin/Button.js +0 -297
  394. package/lib/plugin/ButtonGroup.js +0 -139
  395. package/lib/plugin/ButtonToolbar.js +0 -89
  396. package/lib/plugin/CRUD.js +0 -1528
  397. package/lib/plugin/Card.js +0 -233
  398. package/lib/plugin/Cards.js +0 -254
  399. package/lib/plugin/Carousel.js +0 -358
  400. package/lib/plugin/Chart.js +0 -192
  401. package/lib/plugin/CodeView.js +0 -68
  402. package/lib/plugin/Collapse.js +0 -138
  403. package/lib/plugin/CollapseGroup.js +0 -237
  404. package/lib/plugin/Container.js +0 -100
  405. package/lib/plugin/Custom.js +0 -109
  406. package/lib/plugin/CustomRegion.js +0 -154
  407. package/lib/plugin/Date.js +0 -82
  408. package/lib/plugin/Datetime.js +0 -77
  409. package/lib/plugin/Dialog.js +0 -214
  410. package/lib/plugin/Divider.js +0 -49
  411. package/lib/plugin/Drawer.js +0 -240
  412. package/lib/plugin/DropDownButton.js +0 -229
  413. package/lib/plugin/Each.js +0 -131
  414. package/lib/plugin/Flex.js +0 -203
  415. package/lib/plugin/Form/ButtonGroupSelect.js +0 -161
  416. package/lib/plugin/Form/ButtonToolbar.js +0 -107
  417. package/lib/plugin/Form/ChainedSelect.js +0 -183
  418. package/lib/plugin/Form/Checkbox.js +0 -174
  419. package/lib/plugin/Form/Checkboxes.js +0 -213
  420. package/lib/plugin/Form/CodeEditor.js +0 -201
  421. package/lib/plugin/Form/Combo.js +0 -546
  422. package/lib/plugin/Form/ConditionBuilder.js +0 -302
  423. package/lib/plugin/Form/Control.js +0 -88
  424. package/lib/plugin/Form/DiffEditor.js +0 -204
  425. package/lib/plugin/Form/FieldSet.js +0 -152
  426. package/lib/plugin/Form/Form.js +0 -846
  427. package/lib/plugin/Form/Formula.js +0 -82
  428. package/lib/plugin/Form/Group.js +0 -252
  429. package/lib/plugin/Form/Hidden.js +0 -58
  430. package/lib/plugin/Form/InputArray.js +0 -181
  431. package/lib/plugin/Form/InputCity.d.ts +0 -23
  432. package/lib/plugin/Form/InputCity.js +0 -139
  433. package/lib/plugin/Form/InputColor.js +0 -295
  434. package/lib/plugin/Form/InputDate.js +0 -357
  435. package/lib/plugin/Form/InputDateRange.js +0 -350
  436. package/lib/plugin/Form/InputDateTime.js +0 -50
  437. package/lib/plugin/Form/InputDateTimeRange.js +0 -51
  438. package/lib/plugin/Form/InputEmail.js +0 -45
  439. package/lib/plugin/Form/InputExcel.js +0 -121
  440. package/lib/plugin/Form/InputFile.js +0 -354
  441. package/lib/plugin/Form/InputGroup.js +0 -100
  442. package/lib/plugin/Form/InputImage.d.ts +0 -24
  443. package/lib/plugin/Form/InputImage.js +0 -271
  444. package/lib/plugin/Form/InputKV.js +0 -129
  445. package/lib/plugin/Form/InputMonth.js +0 -48
  446. package/lib/plugin/Form/InputMonthRange.js +0 -51
  447. package/lib/plugin/Form/InputNumber.d.ts +0 -25
  448. package/lib/plugin/Form/InputNumber.js +0 -263
  449. package/lib/plugin/Form/InputPassword.js +0 -45
  450. package/lib/plugin/Form/InputQuarter.js +0 -48
  451. package/lib/plugin/Form/InputQuarterRange.js +0 -51
  452. package/lib/plugin/Form/InputRange.js +0 -292
  453. package/lib/plugin/Form/InputRating.js +0 -357
  454. package/lib/plugin/Form/InputRepeat.js +0 -65
  455. package/lib/plugin/Form/InputRichText.js +0 -193
  456. package/lib/plugin/Form/InputSubForm.js +0 -160
  457. package/lib/plugin/Form/InputTable.js +0 -400
  458. package/lib/plugin/Form/InputTag.d.ts +0 -25
  459. package/lib/plugin/Form/InputTag.js +0 -155
  460. package/lib/plugin/Form/InputText.js +0 -328
  461. package/lib/plugin/Form/InputTime.js +0 -48
  462. package/lib/plugin/Form/InputTimeRange.js +0 -51
  463. package/lib/plugin/Form/InputTree.js +0 -375
  464. package/lib/plugin/Form/InputURL.js +0 -46
  465. package/lib/plugin/Form/InputYear.js +0 -48
  466. package/lib/plugin/Form/InputYearRange.js +0 -51
  467. package/lib/plugin/Form/Item.js +0 -265
  468. package/lib/plugin/Form/ListSelect.js +0 -130
  469. package/lib/plugin/Form/LocationPicker.js +0 -74
  470. package/lib/plugin/Form/MatrixCheckboxes.js +0 -234
  471. package/lib/plugin/Form/NestedSelect.js +0 -328
  472. package/lib/plugin/Form/Picker.js +0 -169
  473. package/lib/plugin/Form/Radios.js +0 -189
  474. package/lib/plugin/Form/Select.js +0 -304
  475. package/lib/plugin/Form/Static.js +0 -312
  476. package/lib/plugin/Form/Switch.js +0 -219
  477. package/lib/plugin/Form/TabsTransfer.js +0 -348
  478. package/lib/plugin/Form/Textarea.js +0 -190
  479. package/lib/plugin/Form/Transfer.js +0 -414
  480. package/lib/plugin/Form/TreeSelect.js +0 -375
  481. package/lib/plugin/Form/UUID.js +0 -55
  482. package/lib/plugin/Grid.js +0 -680
  483. package/lib/plugin/HBox.js +0 -594
  484. package/lib/plugin/IFrame.js +0 -94
  485. package/lib/plugin/Image.js +0 -264
  486. package/lib/plugin/Images.js +0 -214
  487. package/lib/plugin/Json.js +0 -82
  488. package/lib/plugin/Link.js +0 -120
  489. package/lib/plugin/List.js +0 -220
  490. package/lib/plugin/ListItem.js +0 -195
  491. package/lib/plugin/Log.js +0 -62
  492. package/lib/plugin/Mapping.js +0 -149
  493. package/lib/plugin/Markdown.js +0 -58
  494. package/lib/plugin/Nav.js +0 -181
  495. package/lib/plugin/Operation.js +0 -84
  496. package/lib/plugin/Others/Action.js +0 -350
  497. package/lib/plugin/Others/TableCell.js +0 -393
  498. package/lib/plugin/Page.js +0 -363
  499. package/lib/plugin/Pagination.d.ts +0 -51
  500. package/lib/plugin/Pagination.js +0 -247
  501. package/lib/plugin/Panel.js +0 -222
  502. package/lib/plugin/Plain.js +0 -88
  503. package/lib/plugin/Progress.js +0 -258
  504. package/lib/plugin/Property.js +0 -147
  505. package/lib/plugin/QRCode.js +0 -107
  506. package/lib/plugin/Reset.js +0 -38
  507. package/lib/plugin/Service.js +0 -217
  508. package/lib/plugin/Sparkline.js +0 -50
  509. package/lib/plugin/Status.js +0 -86
  510. package/lib/plugin/Steps.js +0 -136
  511. package/lib/plugin/Submit.js +0 -38
  512. package/lib/plugin/Table.js +0 -594
  513. package/lib/plugin/TableView.js +0 -744
  514. package/lib/plugin/Tabs.js +0 -429
  515. package/lib/plugin/Tasks.js +0 -263
  516. package/lib/plugin/Time.js +0 -77
  517. package/lib/plugin/TooltipWrapper.js +0 -281
  518. package/lib/plugin/Tpl.js +0 -183
  519. package/lib/plugin/Video.js +0 -140
  520. package/lib/plugin/WebComponent.js +0 -70
  521. package/lib/plugin/Wizard.js +0 -799
  522. package/lib/plugin/Wrapper.js +0 -136
  523. package/lib/renderer/APIControl.d.ts +0 -7526
  524. package/lib/renderer/APIControl.js +0 -791
  525. package/lib/renderer/BadgeControl.js +0 -290
  526. package/lib/renderer/DataBindingControl.js +0 -91
  527. package/lib/renderer/DataMappingControl.d.ts +0 -11
  528. package/lib/renderer/DataMappingControl.js +0 -73
  529. package/lib/renderer/DataPickerControl.js +0 -83
  530. package/lib/renderer/DateShortCutControl.js +0 -254
  531. package/lib/renderer/FormulaControl.d.ts +0 -96
  532. package/lib/renderer/FormulaControl.js +0 -324
  533. package/lib/renderer/OptionControl.js +0 -672
  534. package/lib/renderer/RangePartsControl.d.ts +0 -91
  535. package/lib/renderer/RangePartsControl.js +0 -392
  536. package/lib/renderer/StatusControl.js +0 -171
  537. package/lib/renderer/SwitchMoreControl.js +0 -302
  538. package/lib/renderer/ValidationControl.js +0 -279
  539. package/lib/renderer/ValidationItem.js +0 -147
  540. package/lib/renderer/style-control/Background.js +0 -493
  541. package/lib/renderer/style-control/Border.js +0 -191
  542. package/lib/renderer/style-control/BoxModel.js +0 -73
  543. package/lib/renderer/style-control/BoxShadow.js +0 -125
  544. package/lib/renderer/style-control/Display.js +0 -233
  545. package/lib/renderer/style-control/Font.js +0 -239
  546. package/lib/renderer/style-control/font-family.js +0 -149
  547. package/lib/renderer/style-control/transformation.js +0 -84
  548. package/lib/tpl/api.d.ts +0 -1
  549. package/lib/tpl/api.js +0 -378
  550. package/lib/tpl/common.d.ts +0 -1
  551. package/lib/tpl/common.js +0 -808
  552. package/lib/tpl/horizontal.d.ts +0 -1
  553. package/lib/tpl/horizontal.js +0 -260
  554. package/lib/tpl/index.d.ts +0 -7
  555. package/lib/tpl/options.d.ts +0 -1
  556. package/lib/tpl/options.js +0 -265
  557. package/lib/tpl/style.d.ts +0 -15
  558. package/lib/tpl/style.js +0 -372
  559. package/lib/tpl/validations.d.ts +0 -1
  560. package/lib/tpl/validations.js +0 -568
  561. package/lib/util.d.ts +0 -24
  562. package/lib/util.js +0 -64
  563. package/lib/validator.js +0 -417
@@ -0,0 +1,2881 @@
1
+ /**
2
+ * @file amis schema 配置模板,主要很多地方都要全部配置的化,
3
+ * 会有很多份,而且改起来很麻烦,复用率高的放在这管理。
4
+ */
5
+ import {isObject} from '../util';
6
+ import find = require('lodash/find');
7
+ import forEach = require('lodash/forEach');
8
+ import reduce = require('lodash/reduce');
9
+ import {str2rules, buildApi, Html} from 'amis';
10
+ import flatten from 'lodash/flatten';
11
+ import kebabCase from 'lodash/kebabCase';
12
+ import React = require('react');
13
+ import {InputComponentName} from './base/InputComponentName';
14
+ import {remarkTpl, tipedLabel, ValidationOptions} from './control/BaseControl';
15
+
16
+ import type {ValidatorFilter} from './control/ValidationControl';
17
+ import {ValidatorTag} from './validator';
18
+ import {SchemaCollection, SchemaObject} from 'amis/lib/Schema';
19
+
20
+ const tpls: {
21
+ [propName: string]: any;
22
+ } = {
23
+ /**
24
+ * @deprecated 兼容当前组件的switch
25
+ */
26
+ 'switch': {
27
+ type: 'switch',
28
+ mode: 'horizontal',
29
+ horizontal: {
30
+ justify: true,
31
+ left: 8
32
+ },
33
+ inputClassName: 'is-inline '
34
+ },
35
+
36
+ /**
37
+ * 表单项字段name
38
+ */
39
+ 'formItemName': {
40
+ label: '字段名',
41
+ name: 'name',
42
+ type: 'input-text'
43
+ // validations: {
44
+ // matchRegexp: /^[a-z\$][a-z0-0\-_]*$/i
45
+ // },
46
+ // validationErrors: {
47
+ // "matchRegexp": "请输入合法的变量名"
48
+ // },
49
+ // validateOnChange: false
50
+ },
51
+
52
+ 'formItemMode': {
53
+ label: '布局',
54
+ name: 'mode',
55
+ type: 'button-group-select',
56
+ option: '继承',
57
+ horizontal: {
58
+ left: 2,
59
+ justify: true
60
+ },
61
+ // className: 'w-full',
62
+ pipeIn: defaultValue(''),
63
+ options: [
64
+ {
65
+ label: '内联',
66
+ value: 'inline'
67
+ },
68
+ {
69
+ label: '水平',
70
+ value: 'horizontal'
71
+ },
72
+ {
73
+ label: '垂直',
74
+ value: 'normal'
75
+ },
76
+ {
77
+ label: '继承',
78
+ value: ''
79
+ }
80
+ ],
81
+ pipeOut: (v: string) => (v ? v : undefined)
82
+ },
83
+
84
+ 'formItemInline': {
85
+ type: 'switch',
86
+ label: '表单项内联',
87
+ name: 'inline',
88
+ visibleOn: 'data.mode != "inline"',
89
+ pipeIn: defaultValue(false)
90
+ // onChange: (value:any, origin:any, item:any, form:any) => form.getValueByName('size') === "full" && form.setValueByName('')
91
+ },
92
+
93
+ 'formItemSize': {
94
+ name: 'size',
95
+ label: '控件宽度',
96
+ type: 'select',
97
+ pipeIn: defaultValue('full'),
98
+ // mode: 'inline',
99
+ // className: 'w-full',
100
+ options: [
101
+ {
102
+ label: '极小',
103
+ value: 'xs'
104
+ },
105
+
106
+ {
107
+ label: '小',
108
+ value: 'sm'
109
+ },
110
+
111
+ {
112
+ label: '中',
113
+ value: 'md'
114
+ },
115
+
116
+ {
117
+ label: '大',
118
+ value: 'lg'
119
+ },
120
+ {
121
+ label: '占满',
122
+ value: 'full'
123
+ },
124
+ {
125
+ label: '默认',
126
+ value: ''
127
+ }
128
+ ]
129
+ },
130
+
131
+ 'minLength': {
132
+ name: 'minLength',
133
+ type: 'input-number',
134
+ label: '限制最小数量'
135
+ },
136
+
137
+ 'maxLength': {
138
+ name: 'maxLength',
139
+ type: 'input-number',
140
+ label: '限制最大数量'
141
+ },
142
+
143
+ /**
144
+ * 表单项名称label
145
+ */
146
+ 'label': {
147
+ label: '标题',
148
+ name: 'label',
149
+ type: 'input-text',
150
+ pipeIn(v: any) {
151
+ return v === false ? '' : v;
152
+ }
153
+ },
154
+
155
+ 'labelHide': () =>
156
+ getSchemaTpl('switch', {
157
+ name: 'label',
158
+ label: tipedLabel('隐藏标题', '隐藏后,水平布局时标题宽度为0'),
159
+ pipeIn: (value: any) => value === false,
160
+ pipeOut: (value: any) => (value === true ? false : ''),
161
+ visibleOn:
162
+ '__props__.formMode === "horizontal" || data.mode === "horizontal" || data.label === false'
163
+ }),
164
+
165
+ 'placeholder': {
166
+ label: '占位提示',
167
+ name: 'placeholder',
168
+ type: 'input-text',
169
+ placeholder: '空内容提示占位'
170
+ },
171
+
172
+ 'tabs': (
173
+ config: Array<{
174
+ title: string;
175
+ className?: string;
176
+ body: Array<SchemaObject>;
177
+ }>
178
+ ) => {
179
+ return {
180
+ type: 'tabs',
181
+ tabsMode: 'line', // tiled
182
+ className: 'editor-prop-config-tabs',
183
+ linksClassName: 'editor-prop-config-tabs-links',
184
+ contentClassName:
185
+ 'no-border editor-prop-config-tabs-cont hoverShowScrollBar',
186
+ tabs: config
187
+ .filter(item => item)
188
+ .map(item => {
189
+ const newSchema = {
190
+ ...item,
191
+ body: Array.isArray(item.body) ? flatten(item.body) : [item.body]
192
+ };
193
+ // 新版配置面板空隙在子组件中,兼容一下
194
+ if (newSchema.body[0]?.type === 'collapse-group') {
195
+ newSchema.className = (newSchema.className || '') + ' p-none';
196
+ }
197
+ return newSchema;
198
+ })
199
+ };
200
+ },
201
+
202
+ 'collapse': (
203
+ config: Array<{
204
+ title: string;
205
+ body: Array<any>;
206
+ }>
207
+ ) => {
208
+ return {
209
+ type: 'wrapper',
210
+ className: 'editor-prop-config-collapse',
211
+ body: config
212
+ .filter(item => item)
213
+ .map(item => ({
214
+ type: 'collapse',
215
+ headingClassName: 'editor-prop-config-head',
216
+ bodyClassName: 'editor-prop-config-body',
217
+ ...item,
218
+ body: flatten(item.body)
219
+ }))
220
+ };
221
+ },
222
+
223
+ 'fieldSet': (config: {
224
+ title: string;
225
+ body: Array<any>;
226
+ collapsed?: boolean;
227
+ collapsable?: boolean;
228
+ }) => {
229
+ return {
230
+ collapsable: true,
231
+ collapsed: false,
232
+ ...config,
233
+ type: 'fieldset',
234
+ title: config.title,
235
+ body: flatten(config.body.filter((item: any) => item))
236
+ };
237
+ },
238
+
239
+ 'collapseGroup': (
240
+ config: Array<{
241
+ title: string;
242
+ key: string;
243
+ visibleOn: string;
244
+ body: Array<any>;
245
+ }>
246
+ ) => {
247
+ const collapseGroupBody = config
248
+ .filter(
249
+ item => item && Array.isArray(item?.body) && item?.body.length > 0
250
+ )
251
+ .map((item, index) => ({
252
+ type: 'collapse',
253
+ headingClassName: 'ae-formItemControl-header',
254
+ bodyClassName: 'ae-formItemControl-body',
255
+ ...item,
256
+ key: item.key || index.toString(),
257
+ body: flatten(item.body)
258
+ }));
259
+
260
+ return {
261
+ type: 'collapse-group',
262
+ expandIconPosition: 'right',
263
+ expandIcon: {
264
+ type: 'icon',
265
+ icon: 'chevron-right'
266
+ },
267
+ className: 'ae-formItemControl ae-styleControl',
268
+ activeKey: collapseGroupBody.map((group, index) => group.key),
269
+ body: collapseGroupBody
270
+ };
271
+ },
272
+
273
+ 'clearable': {
274
+ type: 'switch',
275
+ label: '可清除',
276
+ name: 'clearable',
277
+ inputClassName: 'is-inline'
278
+ },
279
+
280
+ 'hint': {
281
+ label: '输入框提示',
282
+ type: 'input-text',
283
+ name: 'hint',
284
+ description: '当输入框获得焦点的时候显示,用来提示用户输入内容。'
285
+ },
286
+
287
+ 'remark': remarkTpl({
288
+ name: 'remark',
289
+ label: '控件提示',
290
+ labelRemark:
291
+ '在输入控件旁展示提示,注意控件宽度需设置,否则提示触发图标将自动换行'
292
+ }),
293
+
294
+ 'labelRemark': remarkTpl({
295
+ name: 'labelRemark',
296
+ label: '标题提示',
297
+ labelRemark: '在标题旁展示提示'
298
+ }),
299
+
300
+ /**
301
+ * 表单项组件默认值
302
+ */
303
+ 'value': {
304
+ type: 'ae-formulaControl',
305
+ label: '默认值',
306
+ name: 'value'
307
+ },
308
+
309
+ 'inputType': {
310
+ label: '输入类型',
311
+ name: 'type',
312
+ type: 'select',
313
+ creatable: false,
314
+ options: [
315
+ {
316
+ label: '文本',
317
+ value: 'input-text'
318
+ },
319
+ {
320
+ label: '密码',
321
+ value: 'input-password'
322
+ },
323
+ {
324
+ label: '邮箱',
325
+ value: 'input-email'
326
+ },
327
+ {
328
+ label: 'URL',
329
+ value: 'input-url'
330
+ }
331
+ ]
332
+ },
333
+
334
+ 'selectDateType': {
335
+ label: '日期类型',
336
+ name: 'type',
337
+ type: 'select',
338
+ creatable: false,
339
+ options: [
340
+ {
341
+ label: '日期',
342
+ value: 'input-date'
343
+ },
344
+ {
345
+ label: '日期时间',
346
+ value: 'input-datetime'
347
+ },
348
+ {
349
+ label: '时间',
350
+ value: 'input-time'
351
+ },
352
+ {
353
+ label: '月份',
354
+ value: 'input-month'
355
+ },
356
+ {
357
+ label: '季度',
358
+ value: 'input-quarter'
359
+ },
360
+ {
361
+ label: '年份',
362
+ value: 'input-year'
363
+ }
364
+ ]
365
+ },
366
+
367
+ 'selectDateRangeType': {
368
+ label: '日期类型',
369
+ name: 'type',
370
+ type: 'select',
371
+ creatable: false,
372
+ options: [
373
+ {
374
+ label: '日期',
375
+ value: 'input-date-range'
376
+ },
377
+ {
378
+ label: '日期时间',
379
+ value: 'input-datetime-range'
380
+ },
381
+ {
382
+ label: '时间',
383
+ value: 'input-time-range'
384
+ },
385
+ {
386
+ label: '月份',
387
+ value: 'input-month-range'
388
+ },
389
+ {
390
+ label: '季度',
391
+ value: 'input-quarter-range'
392
+ },
393
+ {
394
+ label: '年份',
395
+ value: 'input-year-range'
396
+ }
397
+ ]
398
+ },
399
+
400
+ 'menuTpl': {
401
+ type: 'ae-formulaControl',
402
+ label: tipedLabel('模板', '选项渲染模板,支持JSX,变量使用\\${xx}'),
403
+ name: 'menuTpl'
404
+ },
405
+
406
+ 'expression': {
407
+ type: 'input-text',
408
+ description: '支持 JS 表达式,如:`this.xxx == 1`'
409
+ },
410
+
411
+ 'icon': {
412
+ label: '图标',
413
+ type: 'icon-picker',
414
+ name: 'icon',
415
+ className: 'fix-icon-picker-overflow',
416
+ placeholder: '点击选择图标',
417
+ clearable: true,
418
+ description: ''
419
+ },
420
+
421
+ 'size': {
422
+ label: '控件尺寸',
423
+ type: 'button-group-select',
424
+ name: 'size',
425
+ clearable: true,
426
+ options: [
427
+ {
428
+ label: '极小',
429
+ value: 'xs'
430
+ },
431
+ {
432
+ label: '小',
433
+ value: 'sm'
434
+ },
435
+ {
436
+ label: '中',
437
+ value: 'md'
438
+ },
439
+ {
440
+ label: '大',
441
+ value: 'lg'
442
+ }
443
+ ]
444
+ },
445
+
446
+ 'horizontal-align': {
447
+ type: 'button-group-select',
448
+ label: '位置',
449
+ options: [
450
+ {
451
+ label: '左边',
452
+ value: 'left',
453
+ icon: 'fa fa-align-left'
454
+ },
455
+ {
456
+ label: '右边',
457
+ value: 'right',
458
+ icon: 'fa fa-align-right'
459
+ }
460
+ ]
461
+ },
462
+
463
+ 'name': {
464
+ label: '名字',
465
+ name: 'name',
466
+ type: 'input-text',
467
+ description: '需要联动时才需要,其他组件可以通过这个名字跟当前组件联动',
468
+ placeholder: '请输入字母或者数字'
469
+ },
470
+
471
+ 'reload': {
472
+ label: '刷新目标组件',
473
+ name: 'reload',
474
+ asFormItem: true,
475
+ // type: 'input-text',
476
+ component: InputComponentName,
477
+ description:
478
+ '可以指定操作完成后刷新目标组件,请填写目标组件的 <code>name</code> 属性,多个组件请用<code>,</code>隔开,如果目标组件为表单项,请先填写表单的名字,再用<code>.</code>连接表单项的名字如:<code>xxForm.xxControl</code>。另外如果刷新目标对象设置为 <code>window</code>,则会刷新整个页面。',
479
+ labelRemark: {
480
+ trigger: 'click',
481
+ className: 'm-l-xs',
482
+ rootClose: true,
483
+ content:
484
+ '设置名字后,当前组件操作完成会触发目标组件(根据设置的名字)的刷新。',
485
+ placement: 'left'
486
+ }
487
+ },
488
+
489
+ 'className': (schema: any) => ({
490
+ type: 'ae-classname',
491
+ name: 'className',
492
+ ...(schema || {}),
493
+ label: tipedLabel(
494
+ schema?.label || 'CSS 类名',
495
+ '有哪些辅助类 CSS 类名?请前往 <a href="https://baidu.github.io/amis/docs/concepts/style" target="_blank">样式说明</a>,除此之外你可以添加自定义类名,然后在系统配置中添加自定义样式。'
496
+ )
497
+ }),
498
+
499
+ 'api': (patch: any = {}) => {
500
+ const {name, label, value, description, sampleBuilder, ...rest} = patch;
501
+
502
+ return {
503
+ type: 'container',
504
+ body: [
505
+ {
506
+ type: 'checkbox',
507
+ label: label || 'API',
508
+ labelRemark: sampleBuilder
509
+ ? {
510
+ icon: '',
511
+ label: '示例',
512
+ title: '接口返回示例',
513
+ tooltipClassName: 'ae-ApiSample-tooltip',
514
+ render: (data: any) => (
515
+ <Html
516
+ className="ae-ApiSample"
517
+ inline={false}
518
+ html={`
519
+ <pre><code>${sampleBuilder(data)}</code></pre>
520
+ `}
521
+ />
522
+ ),
523
+ trigger: 'click',
524
+ className: 'm-l-xs',
525
+ rootClose: true,
526
+ placement: 'left'
527
+ }
528
+ : undefined,
529
+ option: `高级配置`,
530
+ name: name || 'api',
531
+ mode: 'inline',
532
+ className: 'w-full m-b-sm',
533
+ inputClassName: 'pull-right text-sm m-t-sm p-t-none',
534
+ onChange: () => {},
535
+ pipeIn: (value: any) => value && typeof value !== 'string',
536
+ pipeOut: (value: any, originValue: any) => {
537
+ const api = buildApi(originValue);
538
+
539
+ return value
540
+ ? {
541
+ method: api.method,
542
+ url: api.url
543
+ }
544
+ : api.url
545
+ ? `${api.method ? `${api.method}:` : ''}${api.url}`
546
+ : '';
547
+ }
548
+ },
549
+
550
+ {
551
+ name: name || 'api',
552
+ type: 'input-text',
553
+ value,
554
+ placeholder: 'http://',
555
+ description: description,
556
+ visibleOn: `!this.${name || 'api'} || typeof this.${
557
+ name || 'api'
558
+ } === 'string'`,
559
+ className: 'm-b-none',
560
+ labelRemark: {}
561
+ // disabledOn: `data.${name || 'api'} && data.${name || 'api'}.data && Object.keys(data.${name || 'api'}.data).length || data.${name || 'api'} && data.${name || 'api'}.sendOn`,
562
+ },
563
+
564
+ {
565
+ type: 'combo',
566
+ name: name || 'api',
567
+ description: description,
568
+ syncDefaultValue: false,
569
+ multiLine: true,
570
+ visibleOn: `this.${name || 'api'} && typeof this.${
571
+ name || 'api'
572
+ } !== 'string'`,
573
+ className: 'm-b-none',
574
+ messages: {
575
+ validateFailed: '接口配置中存在错误,请仔细检查'
576
+ },
577
+ pipeIn: (value: any) => {
578
+ if (typeof value === 'string') {
579
+ let url = value;
580
+ let method = 'get';
581
+
582
+ const m = /^(raw:|external:)?(get|post|put|patch|delete):(.*)$/.exec(
583
+ url
584
+ );
585
+ if (m) {
586
+ url = m[1] + m[3];
587
+ method = m[2];
588
+ }
589
+
590
+ return {
591
+ method,
592
+ url
593
+ };
594
+ }
595
+
596
+ return value;
597
+ },
598
+ items: [
599
+ {
600
+ label: '发送方式',
601
+ name: 'method',
602
+ value: 'get',
603
+ type: 'select',
604
+ mode: 'horizontal',
605
+ horizontal: {
606
+ leftFixed: 'sm'
607
+ },
608
+ options: [
609
+ {
610
+ value: 'get',
611
+ label: 'GET'
612
+ },
613
+ {
614
+ value: 'post',
615
+ label: 'POST'
616
+ },
617
+ {
618
+ value: 'put',
619
+ label: 'PUT'
620
+ },
621
+ {
622
+ value: 'patch',
623
+ label: 'PATCH'
624
+ },
625
+ {
626
+ value: 'delete',
627
+ label: 'DELETE'
628
+ }
629
+ ]
630
+ },
631
+
632
+ {
633
+ label: '接口地址',
634
+ type: 'input-text',
635
+ name: 'url',
636
+ placeholder: 'http://',
637
+ required: true
638
+ },
639
+
640
+ {
641
+ type: 'switch',
642
+ label: '数据映射',
643
+ name: 'data',
644
+ className: 'w-full m-b-xs',
645
+ pipeIn: (value: any) => !!value,
646
+ pipeOut: (value: any) => (value ? {'&': '$$'} : null)
647
+ },
648
+
649
+ {
650
+ type: 'tpl',
651
+ visibleOn: '!this.data',
652
+ inline: false,
653
+ className: 'text-sm text-muted m-b',
654
+ tpl:
655
+ '当没开启数据映射时,发送 API 的时候会发送尽可能多的数据,如果你想自己控制发送的数据,或者需要额外的数据处理,请开启此选项'
656
+ },
657
+
658
+ {
659
+ type: 'input-kv',
660
+ syncDefaultValue: false,
661
+ name: 'data',
662
+ visibleOn: 'this.data',
663
+ descriptionClassName: 'help-block text-xs m-b-none',
664
+ description:
665
+ '<p>当没开启数据映射时,发送数据自动切成白名单模式,配置啥发送啥,请绑定数据。如:<code>{"a": "\\${a}", "b": 2}</code></p><p>如果希望在默认的基础上定制,请先添加一个 Key 为 `&` Value 为 `\\$$` 作为第一行。</p><div>当值为 <code>__undefined</code>时,表示删除对应的字段,可以结合<code>{"&": "\\$$"}</code>来达到黑名单效果。</div>'
666
+ },
667
+
668
+ {
669
+ label: '发送条件',
670
+ type: 'input-text',
671
+ name: 'sendOn',
672
+ placeholder: '如:this.type == "123"',
673
+ description: '用表达式来设置该请求的发送条件'
674
+ },
675
+
676
+ {
677
+ type: 'switch',
678
+ label: '是否设置缓存',
679
+ name: 'cache',
680
+ className: 'w-full m-b-xs',
681
+ description: '设置该请求缓存的有效时间',
682
+ pipeIn: (value: any) => !!value,
683
+ pipeOut: (value: any) => (value ? 3000 : undefined)
684
+ },
685
+
686
+ {
687
+ type: 'input-number',
688
+ name: 'cache',
689
+ mode: 'inline',
690
+ min: 0,
691
+ step: 500,
692
+ visibleOn: 'this.cache',
693
+ pipeIn: (value: any) => (typeof value === 'number' ? value : 0)
694
+ },
695
+
696
+ {
697
+ type: 'switch',
698
+ label: '文件下载',
699
+ name: 'responseType',
700
+ pipeIn: (value: any) => value === 'blob',
701
+ pipeOut: (value: any) => (value ? 'blob' : undefined),
702
+ description:
703
+ '当接口为二进制文件下载时请勾选,并设置 Content-Disposition'
704
+ },
705
+
706
+ {
707
+ label: '数据格式',
708
+ type: 'button-group-select',
709
+ name: 'dataType',
710
+ description:
711
+ '发送体格式为:<%= data.dataType === "json" ? "application/json" : data.dataType === "form-data" ? "multipart/form-data" : data.dataType === "form" ? "application/x-www-form-urlencoded" : "" %>,当发送内容中存在文件时会自动使用 form-data 格式。',
712
+ size: 'sm',
713
+ className: 'block',
714
+ mode: 'inline',
715
+ options: [
716
+ {
717
+ label: 'JSON',
718
+ value: 'json'
719
+ },
720
+ {
721
+ label: 'FormData',
722
+ value: 'form-data'
723
+ },
724
+ {
725
+ label: 'Form',
726
+ value: 'form'
727
+ }
728
+ ]
729
+ },
730
+
731
+ {
732
+ type: 'switch',
733
+ label: '数据替换',
734
+ name: 'replaceData',
735
+ description: '默认数据都是追加方式,开启这个后是完全替换'
736
+ },
737
+
738
+ {
739
+ type: 'switch',
740
+ label: '返回结果映射',
741
+ name: 'responseData',
742
+ className: 'w-full m-b-xs',
743
+ pipeIn: (value: any) => !!value,
744
+ pipeOut: (value: any) => (value ? {'&': '$$'} : null)
745
+ },
746
+
747
+ {
748
+ type: 'tpl',
749
+ visibleOn: '!this.responseData',
750
+ inline: false,
751
+ className: 'text-sm text-muted m-b',
752
+ tpl: '如果需要对返回结果做额外的数据处理,请开启此选项'
753
+ },
754
+
755
+ {
756
+ type: 'input-kv',
757
+ syncDefaultValue: false,
758
+ name: 'responseData',
759
+ visibleOn: 'this.responseData',
760
+ descriptionClassName: 'help-block text-xs m-b-none'
761
+ },
762
+
763
+ {
764
+ title: '自定义适配器',
765
+ type: 'fieldSet',
766
+ className: 'm-b-none',
767
+ size: 'sm',
768
+ collapsable: false, // 避免和最外层的属性配置面板的tabs样式重叠
769
+ collapsedOn: '!this.requestAdaptor && !this.adaptor',
770
+ body: [
771
+ {
772
+ name: 'requestAdaptor',
773
+ type: 'js-editor',
774
+ allowFullscreen: true,
775
+ label: '发送适配器',
776
+ description:
777
+ '函数签名:(api) => api, 数据在 api.data 中,修改后返回 api 对象。'
778
+ },
779
+
780
+ {
781
+ name: 'adaptor',
782
+ type: 'js-editor',
783
+ allowFullscreen: true,
784
+ label: '接收适配器',
785
+ description: '函数签名: (payload, response, api) => payload'
786
+ }
787
+ ]
788
+ }
789
+ ]
790
+ }
791
+ ],
792
+ ...rest
793
+ };
794
+ },
795
+ /**
796
+ * combo 组件样式包装调整
797
+ */
798
+ 'combo-container': (config: SchemaObject) => {
799
+ if (isObject(config)) {
800
+ const itemsWrapperClassName =
801
+ (config as any).type === 'combo' &&
802
+ 'ae-Combo-items ' + ((config as any).itemsWrapperClassName ?? '');
803
+ return {
804
+ ...(config as any),
805
+ ...(itemsWrapperClassName ? {itemsWrapperClassName} : {})
806
+ };
807
+ }
808
+ return config;
809
+ },
810
+
811
+ // 所有组件的状态
812
+ 'status': (config: {
813
+ isFormItem?: boolean;
814
+ readonly?: boolean;
815
+ disabled?: boolean;
816
+ }) => {
817
+ return {
818
+ title: '状态',
819
+ body: [
820
+ getSchemaTpl('hidden'),
821
+ config?.readonly ? getSchemaTpl('readonly') : null,
822
+ config?.disabled || config?.isFormItem
823
+ ? getSchemaTpl('disabled')
824
+ : null,
825
+ config?.isFormItem ? getSchemaTpl('clearValueOnHidden') : null
826
+ ]
827
+ };
828
+ },
829
+
830
+ 'source': (patch: any = {}) => {
831
+ return getSchemaTpl('api', {
832
+ name: 'source',
833
+ label: '获取选项接口',
834
+ description: '可以通过接口获取动态选项,一次拉取全部。',
835
+ sampleBuilder: (schema: any) =>
836
+ JSON.stringify(
837
+ {
838
+ status: 0,
839
+ msg: '',
840
+ data: {
841
+ options: [
842
+ {
843
+ label: '选项A',
844
+ value: 'a'
845
+ },
846
+
847
+ {
848
+ label: '选项B',
849
+ value: 'b'
850
+ }
851
+ ]
852
+ }
853
+ },
854
+ null,
855
+ 2
856
+ ),
857
+ ...patch
858
+ });
859
+ },
860
+
861
+ 'autoFill': {
862
+ type: 'input-kv',
863
+ name: 'autoFill',
864
+ label: tipedLabel(
865
+ '自动填充',
866
+ '将当前已选中的选项的某个字段的值,自动填充到表单中某个表单项中,支持数据映射'
867
+ )
868
+ },
869
+
870
+ 'apiString': {
871
+ name: 'api',
872
+ type: 'input-text',
873
+ placeholder: 'http://'
874
+ },
875
+
876
+ 'required': {
877
+ type: 'switch',
878
+ name: 'required',
879
+ label: '是否必填',
880
+ mode: 'horizontal',
881
+ horizontal: {
882
+ justify: true,
883
+ left: 8
884
+ },
885
+ inputClassName: 'is-inline '
886
+ },
887
+
888
+ /**
889
+ * 表单项描述description
890
+ */
891
+ 'description': {
892
+ name: 'description',
893
+ type: 'textarea',
894
+ label: tipedLabel('描述', '表单项控件下方浅色文字描述'),
895
+ maxRows: 2,
896
+ pipeIn: (value: any, data: any) => value || data.desc || ''
897
+ },
898
+
899
+ 'options': {
900
+ label: '选项 Options',
901
+ name: 'options',
902
+ type: 'combo',
903
+ multiple: true,
904
+ draggable: true,
905
+ addButtonText: '新增选项',
906
+ scaffold: {
907
+ label: '',
908
+ value: ''
909
+ },
910
+ items: [
911
+ {
912
+ type: 'input-text',
913
+ name: 'label',
914
+ placeholder: '名称',
915
+ required: true
916
+ },
917
+ {
918
+ type: 'select',
919
+ name: 'value',
920
+ pipeIn: (value: any) => {
921
+ if (typeof value === 'string') {
922
+ return 'text';
923
+ }
924
+ if (typeof value === 'boolean') {
925
+ return 'boolean';
926
+ }
927
+ if (typeof value === 'number') {
928
+ return 'number';
929
+ }
930
+ return 'text';
931
+ },
932
+ pipeOut: (value: any, oldValue: any) => {
933
+ if (value === 'text') {
934
+ return String(oldValue);
935
+ }
936
+ if (value === 'number') {
937
+ const convertTo = Number(oldValue);
938
+ if (isNaN(convertTo)) {
939
+ return 0;
940
+ }
941
+ return convertTo;
942
+ }
943
+ if (value === 'boolean') {
944
+ return Boolean(oldValue);
945
+ }
946
+ return '';
947
+ },
948
+ options: [
949
+ {label: '文本', value: 'text'},
950
+ {label: '数字', value: 'number'},
951
+ {label: '布尔', value: 'boolean'}
952
+ ]
953
+ },
954
+ {
955
+ type: 'input-number',
956
+ name: 'value',
957
+ placeholder: '值',
958
+ visibleOn: 'typeof data.value === "number"',
959
+ unique: true
960
+ },
961
+ {
962
+ type: 'switch',
963
+ name: 'value',
964
+ placeholder: '值',
965
+ visibleOn: 'typeof data.value === "boolean"',
966
+ unique: true
967
+ },
968
+ {
969
+ type: 'input-text',
970
+ name: 'value',
971
+ placeholder: '值',
972
+ visibleOn:
973
+ 'typeof data.value === "undefined" || typeof data.value === "string"',
974
+ unique: true
975
+ }
976
+ ]
977
+ },
978
+
979
+ 'tree': {
980
+ label: '选项 Options',
981
+ name: 'options',
982
+ type: 'combo',
983
+ multiple: true,
984
+ draggable: true,
985
+ addButtonText: '新增选项',
986
+ description:
987
+ '静态数据暂不支持多级,请切换到代码模式,或者采用 source 接口获取。',
988
+ scaffold: {
989
+ label: '',
990
+ value: ''
991
+ },
992
+ items: [
993
+ {
994
+ type: 'input-text',
995
+ name: 'label',
996
+ placeholder: '名称',
997
+ required: true
998
+ },
999
+
1000
+ {
1001
+ type: 'input-text',
1002
+ name: 'value',
1003
+ placeholder: '值',
1004
+ unique: true
1005
+ }
1006
+ ]
1007
+ },
1008
+
1009
+ 'leftFixed': {
1010
+ name: 'horizontal.leftFixed',
1011
+ type: 'button-group-select',
1012
+ visibleOn: 'data.horizontal && data.horizontal.leftFixed',
1013
+ label: '宽度',
1014
+ options: [
1015
+ {
1016
+ label: '小',
1017
+ value: 'sm'
1018
+ },
1019
+
1020
+ {
1021
+ label: '中',
1022
+ value: 'normal'
1023
+ },
1024
+
1025
+ {
1026
+ label: '大',
1027
+ value: 'lg'
1028
+ }
1029
+ ]
1030
+ },
1031
+
1032
+ 'leftRate': {
1033
+ name: 'horizontal',
1034
+ type: 'input-range',
1035
+ visibleOn: 'data.horizontal && !data.horizontal.leftFixed',
1036
+ min: 1,
1037
+ max: 11,
1038
+ step: 1,
1039
+ label: tipedLabel('比例', '12 等份,标题宽度占比 n/12'),
1040
+ pipeIn(v: any) {
1041
+ return v.left || 3;
1042
+ },
1043
+ pipeOut(v: any) {
1044
+ return {left: v, right: 12 - v};
1045
+ }
1046
+ },
1047
+
1048
+ 'horizontal': () => [
1049
+ {
1050
+ type: 'button-group-select',
1051
+ label: '标题宽度',
1052
+ name: 'horizontal',
1053
+ options: [
1054
+ {label: '继承', value: 'formHorizontal'},
1055
+ {label: '固宽', value: 'leftFixed'},
1056
+ {label: '比例', value: 'leftRate'}
1057
+ ],
1058
+ pipeIn(v: any) {
1059
+ if (!v) {
1060
+ return 'formHorizontal';
1061
+ }
1062
+ if (v.leftFixed) {
1063
+ return 'leftFixed';
1064
+ }
1065
+ return 'leftRate';
1066
+ },
1067
+ pipeOut(v: any) {
1068
+ const defaultData = {
1069
+ formHorizontal: undefined,
1070
+ leftFixed: {leftFixed: 'normal'},
1071
+ leftRate: {left: 3, right: 9}
1072
+ };
1073
+
1074
+ // @ts-ignore
1075
+ return defaultData[v];
1076
+ },
1077
+ visibleOn: 'this.mode == "horizontal" && this.label !== false'
1078
+ },
1079
+ {
1080
+ type: 'container',
1081
+ className: 'ae-ExtendMore mb-3',
1082
+ visibleOn:
1083
+ 'this.mode == "horizontal" && this.horizontal && this.label !== false',
1084
+ body: [getSchemaTpl('leftFixed'), getSchemaTpl('leftRate')]
1085
+ }
1086
+ ],
1087
+
1088
+ 'subFormItemMode': {
1089
+ label: '子表单展示模式',
1090
+ name: 'subFormMode',
1091
+ type: 'button-group-select',
1092
+ size: 'sm',
1093
+ option: '继承',
1094
+ // mode: 'inline',
1095
+ // className: 'w-full',
1096
+ pipeIn: defaultValue(''),
1097
+ options: [
1098
+ {
1099
+ label: '继承',
1100
+ value: ''
1101
+ },
1102
+
1103
+ {
1104
+ label: '正常',
1105
+ value: 'normal'
1106
+ },
1107
+
1108
+ {
1109
+ label: '内联',
1110
+ value: 'inline'
1111
+ },
1112
+
1113
+ {
1114
+ label: '水平',
1115
+ value: 'horizontal'
1116
+ }
1117
+ ]
1118
+ },
1119
+
1120
+ 'subFormHorizontalMode': {
1121
+ type: 'switch',
1122
+ label: '子表单水平占比设置',
1123
+ name: 'subFormHorizontal',
1124
+ onText: '继承',
1125
+ offText: '自定义',
1126
+ inputClassName: 'text-sm',
1127
+ visibleOn: 'this.subFormMode == "horizontal"',
1128
+ pipeIn: (value: any) => !value,
1129
+ pipeOut: (value: any, originValue: any, data: any) =>
1130
+ value
1131
+ ? null
1132
+ : data.formHorizontal || {
1133
+ leftFixed: 'normal'
1134
+ }
1135
+ },
1136
+
1137
+ 'subFormHorizontal': {
1138
+ type: 'combo',
1139
+ syncDefaultValue: false,
1140
+ visibleOn: 'data.subFormMode == "horizontal" && data.subFormHorizontal',
1141
+ name: 'subFormHorizontal',
1142
+ multiLine: true,
1143
+ pipeIn: (value: any) => {
1144
+ return {
1145
+ leftRate:
1146
+ value && typeof value.left === 'number'
1147
+ ? value.left
1148
+ : value && /\bcol\-(?:xs|sm|md|lg)\-(\d+)\b/.test(value.left)
1149
+ ? parseInt(RegExp.$1, 10)
1150
+ : 2,
1151
+ leftFixed: (value && value.leftFixed) || ''
1152
+ };
1153
+ },
1154
+ pipeOut: (value: any) => {
1155
+ let left = Math.min(11, Math.max(1, value.leftRate || 2));
1156
+
1157
+ return {
1158
+ leftFixed: value.leftFixed || '',
1159
+ left: left,
1160
+ right: 12 - left
1161
+ };
1162
+ },
1163
+ inputClassName: 'no-padder',
1164
+ items: [
1165
+ {
1166
+ name: 'leftFixed',
1167
+ type: 'button-group-select',
1168
+ label: '左侧宽度',
1169
+ size: 'xs',
1170
+ options: [
1171
+ {
1172
+ label: '比率',
1173
+ value: ''
1174
+ },
1175
+
1176
+ {
1177
+ label: '小宽度',
1178
+ value: 'sm',
1179
+ visibleOn: 'this.leftFixed'
1180
+ },
1181
+
1182
+ {
1183
+ label: '固定宽度',
1184
+ value: 'normal'
1185
+ },
1186
+
1187
+ {
1188
+ label: '大宽度',
1189
+ value: 'lg',
1190
+ visibleOn: 'this.leftFixed'
1191
+ }
1192
+ ]
1193
+ },
1194
+ {
1195
+ name: 'leftRate',
1196
+ type: 'input-range',
1197
+ visibleOn: '!this.leftFixed',
1198
+ min: 1,
1199
+ max: 11,
1200
+ step: 1,
1201
+ label: '左右分布调整(n/12)',
1202
+ labelRemark: {
1203
+ trigger: 'click',
1204
+ className: 'm-l-xs',
1205
+ rootClose: true,
1206
+ content: '一共 12 等份,这里可以设置左侧宽度占比 n/12。',
1207
+ placement: 'left'
1208
+ }
1209
+ }
1210
+ ]
1211
+ },
1212
+
1213
+ 'validations': (function () {
1214
+ const options = [
1215
+ // {
1216
+ // label: '必填',
1217
+ // value: 'isRequired'
1218
+ // },
1219
+ {
1220
+ label: '邮箱格式',
1221
+ value: 'isEmail'
1222
+ },
1223
+ {
1224
+ label: 'Url格式',
1225
+ value: 'isUrl'
1226
+ },
1227
+ {
1228
+ label: '数字',
1229
+ value: 'isNumeric'
1230
+ },
1231
+ {
1232
+ label: '字母',
1233
+ value: 'isAlpha'
1234
+ },
1235
+ {
1236
+ label: '字母和数字',
1237
+ value: 'isAlphanumeric'
1238
+ },
1239
+ {
1240
+ label: '整型数字',
1241
+ value: 'isInt'
1242
+ },
1243
+ {
1244
+ label: '浮点型数字',
1245
+ value: 'isFloat'
1246
+ },
1247
+ {
1248
+ label: '固定长度',
1249
+ value: 'isLength'
1250
+ },
1251
+ {
1252
+ label: '最大长度',
1253
+ value: 'maxLength'
1254
+ },
1255
+ {
1256
+ label: '最小长度',
1257
+ value: 'minLength'
1258
+ },
1259
+ {
1260
+ label: '最大值',
1261
+ value: 'maximum'
1262
+ },
1263
+ {
1264
+ label: '最小值',
1265
+ value: 'minimum'
1266
+ },
1267
+ {
1268
+ label: '手机号码',
1269
+ value: 'isPhoneNumber'
1270
+ },
1271
+ {
1272
+ label: '电话号码',
1273
+ value: 'isTelNumber'
1274
+ },
1275
+ {
1276
+ label: '邮编号码',
1277
+ value: 'isZipcode'
1278
+ },
1279
+ {
1280
+ label: '身份证号码',
1281
+ value: 'isId'
1282
+ },
1283
+ {
1284
+ label: 'JSON格式',
1285
+ value: 'isJson'
1286
+ },
1287
+ {
1288
+ label: '与指定值相同',
1289
+ value: 'equals'
1290
+ },
1291
+ {
1292
+ label: '与指定字段值相同',
1293
+ value: 'equalsField'
1294
+ },
1295
+ {
1296
+ label: '自定义正则',
1297
+ value: 'matchRegexp'
1298
+ },
1299
+ {
1300
+ label: '自定义正则2',
1301
+ value: 'matchRegexp1'
1302
+ },
1303
+ {
1304
+ label: '自定义正则3',
1305
+ value: 'matchRegexp2'
1306
+ },
1307
+ {
1308
+ label: '自定义正则4',
1309
+ value: 'matchRegexp3'
1310
+ },
1311
+ {
1312
+ label: '自定义正则5',
1313
+ value: 'matchRegexp4'
1314
+ }
1315
+ ];
1316
+
1317
+ const trueProps = [
1318
+ 'isEmail',
1319
+ 'isUrl',
1320
+ 'isNumeric',
1321
+ 'isAlpha',
1322
+ 'isAlphanumeric',
1323
+ 'isInt',
1324
+ 'isFloat',
1325
+ 'isJson',
1326
+ 'isPhoneNumber',
1327
+ 'isTelNumber',
1328
+ 'isZipcode',
1329
+ 'isId'
1330
+ ];
1331
+
1332
+ function firstValue(arr: Array<any>, iterator: (item: any) => any) {
1333
+ let theone = find(arr, iterator);
1334
+ return theone ? theone.value : '';
1335
+ }
1336
+
1337
+ return {
1338
+ type: 'combo',
1339
+ syncDefaultValue: false,
1340
+ name: 'validations',
1341
+ label: '验证规则',
1342
+ addButtonText: '新增规则',
1343
+ multiple: true,
1344
+ pipeIn: (value: any) => {
1345
+ if (typeof value === 'string' && value) {
1346
+ value = str2rules(value);
1347
+ }
1348
+ if (!isObject(value)) {
1349
+ return value;
1350
+ }
1351
+
1352
+ let arr: Array<any> = [];
1353
+
1354
+ Object.keys(value).forEach(key => {
1355
+ if (/^\$\$/.test(key)) {
1356
+ return;
1357
+ }
1358
+
1359
+ arr.push({
1360
+ type: key,
1361
+ [key]: Array.isArray(value[key]) ? value[key][0] : value[key]
1362
+ });
1363
+ });
1364
+
1365
+ return arr;
1366
+ },
1367
+ pipeOut: (value: any) => {
1368
+ if (!Array.isArray(value)) {
1369
+ return value;
1370
+ }
1371
+ let obj: any = {};
1372
+
1373
+ value.forEach((item: any) => {
1374
+ let key: string =
1375
+ item.type ||
1376
+ firstValue(options, (item: any) => !obj[item.value]) ||
1377
+ options[0].value;
1378
+ obj[key] = item[key] || (~trueProps.indexOf(key) ? true : '');
1379
+ });
1380
+
1381
+ return obj;
1382
+ },
1383
+ items: [
1384
+ {
1385
+ type: 'select',
1386
+ unique: true,
1387
+ name: 'type',
1388
+ options: options,
1389
+ columnClassName: 'w-sm'
1390
+ },
1391
+ {
1392
+ type: 'input-number',
1393
+ name: 'isLength',
1394
+ visibleOn: 'data.type == "isLength"',
1395
+ placeholder: '设置长度',
1396
+ value: '1'
1397
+ },
1398
+ {
1399
+ type: 'input-number',
1400
+ name: 'maximum',
1401
+ visibleOn: 'data.type == "maximum"',
1402
+ placeholder: '设置最大值'
1403
+ },
1404
+ {
1405
+ type: 'input-number',
1406
+ name: 'minimum',
1407
+ visibleOn: 'data.type == "minimum"',
1408
+ placeholder: '设置最小值'
1409
+ },
1410
+ {
1411
+ type: 'input-number',
1412
+ name: 'maxLength',
1413
+ visibleOn: 'data.type == "maxLength"',
1414
+ placeholder: '设置最大长度值'
1415
+ },
1416
+ {
1417
+ type: 'input-number',
1418
+ name: 'minLength',
1419
+ visibleOn: 'data.type == "minLength"',
1420
+ placeholder: '设置最小长度值'
1421
+ },
1422
+ {
1423
+ type: 'input-text',
1424
+ name: 'equals',
1425
+ visibleOn: 'data.type == "equals"',
1426
+ placeholder: '设置值',
1427
+ value: ''
1428
+ },
1429
+ {
1430
+ type: 'input-text',
1431
+ name: 'equalsField',
1432
+ visibleOn: 'data.type == "equalsField"',
1433
+ placeholder: '设置字段名',
1434
+ value: ''
1435
+ },
1436
+ {
1437
+ type: 'input-text',
1438
+ name: 'matchRegexp',
1439
+ visibleOn: 'data.type == "matchRegexp"',
1440
+ placeholder: '设置正则规则'
1441
+ },
1442
+ {
1443
+ type: 'input-text',
1444
+ name: 'matchRegexp1',
1445
+ visibleOn: 'data.type == "matchRegexp1"',
1446
+ placeholder: '设置正则规则'
1447
+ },
1448
+ {
1449
+ type: 'input-text',
1450
+ name: 'matchRegexp2',
1451
+ visibleOn: 'data.type == "matchRegexp2"',
1452
+ placeholder: '设置正则规则'
1453
+ },
1454
+ {
1455
+ type: 'input-text',
1456
+ name: 'matchRegexp3',
1457
+ visibleOn: 'data.type == "matchRegexp3"',
1458
+ placeholder: '设置正则规则'
1459
+ },
1460
+ {
1461
+ type: 'input-text',
1462
+ name: 'matchRegexp4',
1463
+ visibleOn: 'data.type == "matchRegexp4"',
1464
+ placeholder: '设置正则规则'
1465
+ }
1466
+ ]
1467
+ };
1468
+ })(),
1469
+
1470
+ 'validationErrors': (function () {
1471
+ const options = [
1472
+ // {
1473
+ // label: '必填',
1474
+ // value: 'isRequired'
1475
+ // },
1476
+ {
1477
+ label: '邮箱格式',
1478
+ value: 'isEmail'
1479
+ },
1480
+ {
1481
+ label: 'Url格式',
1482
+ value: 'isUrl'
1483
+ },
1484
+ {
1485
+ label: '数字',
1486
+ value: 'isNumeric'
1487
+ },
1488
+ {
1489
+ label: '字母',
1490
+ value: 'isAlpha'
1491
+ },
1492
+ {
1493
+ label: '字母和数字',
1494
+ value: 'isAlphanumeric'
1495
+ },
1496
+ {
1497
+ label: '整型数字',
1498
+ value: 'isInt'
1499
+ },
1500
+ {
1501
+ label: '浮点型数字',
1502
+ value: 'isFloat'
1503
+ },
1504
+ {
1505
+ label: '固定长度',
1506
+ value: 'isLength'
1507
+ },
1508
+ {
1509
+ label: '最大长度',
1510
+ value: 'maxLength'
1511
+ },
1512
+ {
1513
+ label: '最小长度',
1514
+ value: 'minLength'
1515
+ },
1516
+ {
1517
+ label: '最大值',
1518
+ value: 'maximum'
1519
+ },
1520
+ {
1521
+ label: '最小值',
1522
+ value: 'minimum'
1523
+ },
1524
+ {
1525
+ label: 'JSON格式',
1526
+ value: 'isJson'
1527
+ },
1528
+ {
1529
+ label: '手机号码',
1530
+ value: 'isPhoneNumber'
1531
+ },
1532
+ {
1533
+ label: '电话号码',
1534
+ value: 'isTelNumber'
1535
+ },
1536
+ {
1537
+ label: '邮编号码',
1538
+ value: 'isZipcode'
1539
+ },
1540
+ {
1541
+ label: '身份证号码',
1542
+ value: 'isId'
1543
+ },
1544
+ {
1545
+ label: '与指定值相同',
1546
+ value: 'equals'
1547
+ },
1548
+ {
1549
+ label: '与指定字段值相同',
1550
+ value: 'equalsField'
1551
+ },
1552
+ {
1553
+ label: '自定义正则',
1554
+ value: 'matchRegexp'
1555
+ },
1556
+ {
1557
+ label: '自定义正则2',
1558
+ value: 'matchRegexp1'
1559
+ },
1560
+ {
1561
+ label: '自定义正则3',
1562
+ value: 'matchRegexp2'
1563
+ },
1564
+ {
1565
+ label: '自定义正则4',
1566
+ value: 'matchRegexp3'
1567
+ },
1568
+ {
1569
+ label: '自定义正则5',
1570
+ value: 'matchRegexp4'
1571
+ }
1572
+ ];
1573
+
1574
+ const defaultMessages = {
1575
+ isEmail: 'Email 格式不正确',
1576
+ isRequired: '这是必填项',
1577
+ isUrl: 'Url 格式不正确',
1578
+ isInt: '请输入整形数字',
1579
+ isAlpha: '请输入字母',
1580
+ isNumeric: '请输入数字',
1581
+ isAlphanumeric: '请输入字母或者数字',
1582
+ isFloat: '请输入浮点型数值',
1583
+ isWords: '请输入字母',
1584
+ isUrlPath: '只能输入字母、数字、`-` 和 `_`.',
1585
+ matchRegexp: '格式不正确, 请输入符合规则为 `$1` 的内容。',
1586
+ minLength: '请输入更多的内容,至少输入 $1 个字符。',
1587
+ maxLength: '请控制内容长度, 请不要输入 $1 个字符以上',
1588
+ maximum: '当前输入值超出最大值 $1,请检查',
1589
+ minimum: '当前输入值低于最小值 $1,请检查',
1590
+ isJson: '请检查 Json 格式。',
1591
+ isPhoneNumber: '请输入合法的手机号码',
1592
+ isTelNumber: '请输入合法的电话号码',
1593
+ isZipcode: '请输入合法的邮编地址',
1594
+ isId: '请输入合法的身份证号',
1595
+ isLength: '请输入长度为 $1 的内容',
1596
+ notEmptyString: '请不要全输入空白字符',
1597
+ equalsField: '输入的数据与 $1 值不一致',
1598
+ equals: '输入的数据与 $1 不一致'
1599
+ };
1600
+
1601
+ function firstValue(arr: Array<any>, iterator: (item: any) => any) {
1602
+ let theone = find(arr, iterator);
1603
+ return theone ? theone.value : '';
1604
+ }
1605
+
1606
+ return {
1607
+ type: 'combo',
1608
+ syncDefaultValue: false,
1609
+ name: 'validationErrors',
1610
+ label: '自定义验证提示',
1611
+ description: '自带提示不满足时,可以自定义。',
1612
+ addButtonText: '新增提示',
1613
+ multiple: true,
1614
+ pipeIn: (value: any) => {
1615
+ if (!isObject(value)) {
1616
+ return value;
1617
+ }
1618
+
1619
+ let arr: Array<any> = [];
1620
+
1621
+ Object.keys(value).forEach(key => {
1622
+ if (/^\$\$/.test(key)) {
1623
+ return;
1624
+ }
1625
+
1626
+ arr.push({
1627
+ type: key,
1628
+ msg: value[key]
1629
+ });
1630
+ });
1631
+
1632
+ return arr;
1633
+ },
1634
+ pipeOut: (value: any) => {
1635
+ if (!Array.isArray(value)) {
1636
+ return value;
1637
+ }
1638
+ let obj: any = {};
1639
+
1640
+ value.forEach((item: any) => {
1641
+ let key: string =
1642
+ item.type ||
1643
+ firstValue(options, (item: any) => !obj[item.value]) ||
1644
+ options[0].value;
1645
+ obj[key] = item.msg || (defaultMessages as any)[key] || '';
1646
+ });
1647
+
1648
+ return obj;
1649
+ },
1650
+ items: [
1651
+ {
1652
+ type: 'select',
1653
+ unique: true,
1654
+ name: 'type',
1655
+ options: options,
1656
+ columnClassName: 'w-sm'
1657
+ },
1658
+
1659
+ {
1660
+ type: 'input-text',
1661
+ name: 'msg',
1662
+ placeholder: '提示信息'
1663
+ },
1664
+
1665
+ {
1666
+ type: 'formula',
1667
+ name: 'msg',
1668
+ initSet: false,
1669
+ formula: `({
1670
+ isEmail: 'Email 格式不正确',
1671
+ isRequired: '这是必填项',
1672
+ isUrl: 'Url 格式不正确',
1673
+ isInt: '请输入整形数字',
1674
+ isAlpha: '请输入字母',
1675
+ isNumeric: '请输入数字',
1676
+ isAlphanumeric: '请输入字母或者数字',
1677
+ isFloat: '请输入浮点型数值',
1678
+ isWords: '请输入字母',
1679
+ isUrlPath: '只能输入字母、数字、\`-\` 和 \`_\`.',
1680
+ matchRegexp: '格式不正确, 请输入符合规则为 \`$1\` 的内容。',
1681
+ minLength: '请输入更多的内容,至少输入 $1 个字符。',
1682
+ maxLength: '请控制内容长度, 请不要输入 $1 个字符以上',
1683
+ maximum: '当前输入值超出最大值 $1,请检查',
1684
+ minimum: '当前输入值低于最小值 $1,请检查',
1685
+ isJson: '请检查 Json 格式。',
1686
+ isLength: '请输入长度为 $1 的内容',
1687
+ notEmptyString: '请不要全输入空白字符',
1688
+ equalsField: '输入的数据与 $1 值不一致',
1689
+ equals: '输入的数据与 $1 不一致',
1690
+ isPhoneNumber: '请输入合法的手机号码',
1691
+ isTelNumber: '请输入合法的电话号码',
1692
+ isZipcode: '请输入合法的邮编地址',
1693
+ isId: '请输入合法的身份证号',
1694
+ })[data.type] || ''`
1695
+ }
1696
+ ]
1697
+ };
1698
+ })(),
1699
+
1700
+ 'submitOnChange': {
1701
+ type: 'switch',
1702
+ label: '修改即提交',
1703
+ name: 'submitOnChange',
1704
+ labelRemark: {
1705
+ trigger: 'click',
1706
+ className: 'm-l-xs',
1707
+ rootClose: true,
1708
+ content: '设置后,表单中每次有修改都会触发提交',
1709
+ placement: 'left'
1710
+ }
1711
+ },
1712
+
1713
+ 'validateOnChange': {
1714
+ type: 'select',
1715
+ name: 'validateOnChange',
1716
+ label: '校验触发',
1717
+ options: [
1718
+ {
1719
+ label: '提交后每次修改即触发',
1720
+ value: ''
1721
+ },
1722
+
1723
+ {
1724
+ label: '修改即触发',
1725
+ value: true
1726
+ },
1727
+
1728
+ {
1729
+ label: '提交触发',
1730
+ value: false
1731
+ }
1732
+ ],
1733
+ pipeIn: defaultValue(''),
1734
+ pipeOut: (value: any) => (value === '' ? undefined : !!value)
1735
+ },
1736
+
1737
+ 'initFetch': {
1738
+ type: 'group',
1739
+ label: '是否初始加载',
1740
+ visibleOn: 'this.initApi',
1741
+ direction: 'vertical',
1742
+ className: 'm-b-none',
1743
+ labelRemark: {
1744
+ trigger: 'click',
1745
+ rootClose: true,
1746
+ className: 'm-l-xs',
1747
+ content:
1748
+ '当配置初始化接口后,组件初始就会拉取接口数据,可以通过以下配置修改。',
1749
+ placement: 'left'
1750
+ },
1751
+ body: [
1752
+ {
1753
+ name: 'initFetch',
1754
+ type: 'radios',
1755
+ inline: true,
1756
+ onChange: () => {},
1757
+ // pipeIn: (value:any) => typeof value === 'boolean' ? value : '1'
1758
+ options: [
1759
+ {
1760
+ label: '是',
1761
+ value: true
1762
+ },
1763
+
1764
+ {
1765
+ label: '否',
1766
+ value: false
1767
+ },
1768
+
1769
+ {
1770
+ label: '表达式',
1771
+ value: ''
1772
+ }
1773
+ ]
1774
+ },
1775
+
1776
+ {
1777
+ name: 'initFetchOn',
1778
+ autoComplete: false,
1779
+ visibleOn: 'typeof this.initFetch !== "boolean"',
1780
+ type: 'input-text',
1781
+ placeholder: '如:this.id 表示有 id 值时初始加载',
1782
+ className: 'm-t-n-sm'
1783
+ }
1784
+ ]
1785
+ },
1786
+
1787
+ 'disabled': {
1788
+ type: 'ae-StatusControl',
1789
+ label: '禁用',
1790
+ mode: 'normal',
1791
+ name: 'disabled',
1792
+ expressioName: 'disabledOn'
1793
+ },
1794
+
1795
+ 'readonly': {
1796
+ type: 'ae-StatusControl',
1797
+ label: '只读',
1798
+ mode: 'normal',
1799
+ name: 'readOnly',
1800
+ expressioName: 'readOnlyOn'
1801
+ },
1802
+
1803
+ 'visible': {
1804
+ type: 'ae-StatusControl',
1805
+ label: '可见',
1806
+ mode: 'normal',
1807
+ name: 'visible',
1808
+ expressioName: 'visibleOn'
1809
+ },
1810
+
1811
+ 'hidden': {
1812
+ type: 'ae-StatusControl',
1813
+ label: '隐藏',
1814
+ mode: 'normal',
1815
+ name: 'hidden',
1816
+ expressioName: 'hiddenOn'
1817
+ },
1818
+
1819
+ 'maximum': {
1820
+ type: 'input-number',
1821
+ label: '最大值'
1822
+ },
1823
+
1824
+ 'minimum': {
1825
+ type: 'input-number',
1826
+ label: '最小值'
1827
+ },
1828
+
1829
+ 'switchDefaultValue': {
1830
+ type: 'switch',
1831
+ label: '默认值设置',
1832
+ name: 'value',
1833
+ pipeIn: (value: any) => typeof value !== 'undefined',
1834
+ pipeOut: (value: any, origin: any, data: any) => (value ? '' : undefined),
1835
+ labelRemark: {
1836
+ trigger: ['hover', 'focus'],
1837
+ setting: true,
1838
+ title: '',
1839
+ content: '不设置时根据 name 获取'
1840
+ }
1841
+ },
1842
+
1843
+ 'multiple': (schema: any = {}) => ({
1844
+ type: 'ae-Switch-More',
1845
+ mode: 'normal',
1846
+ name: 'multiple',
1847
+ label: '可多选',
1848
+ value: false,
1849
+ hiddenOnDefault: true,
1850
+ formType: 'extend',
1851
+ form: {
1852
+ body: schema.replace
1853
+ ? schema.body
1854
+ : [
1855
+ getSchemaTpl('joinValues'),
1856
+ getSchemaTpl('delimiter'),
1857
+ getSchemaTpl('extractValue'),
1858
+ ...[schema.body || []]
1859
+ ]
1860
+ }
1861
+ }),
1862
+
1863
+ 'checkAll': () => [
1864
+ getSchemaTpl('switch', {
1865
+ label: '可全选',
1866
+ name: 'checkAll',
1867
+ value: false,
1868
+ visibleOn: 'data.multiple'
1869
+ }),
1870
+ {
1871
+ type: 'container',
1872
+ className: 'ae-ExtendMore mb-2',
1873
+ visibleOn: 'data.checkAll && data.multiple',
1874
+ body: [
1875
+ getSchemaTpl('switch', {
1876
+ label: '默认全选',
1877
+ name: 'defaultCheckAll',
1878
+ value: false
1879
+ }),
1880
+ {
1881
+ type: 'input-text',
1882
+ name: 'checkAllLabel',
1883
+ label: '选项文案',
1884
+ value: '全选',
1885
+ mode: 'row'
1886
+ }
1887
+ ]
1888
+ }
1889
+ ],
1890
+
1891
+ 'joinValues': () =>
1892
+ getSchemaTpl('switch', {
1893
+ label: tipedLabel(
1894
+ '拼接值',
1895
+ '开启后将选中的选项 value 的值用连接符拼接起来,作为当前表单项的值'
1896
+ ),
1897
+ name: 'joinValues',
1898
+ visibleOn: 'data.multiple',
1899
+ value: true
1900
+ }),
1901
+
1902
+ 'delimiter': {
1903
+ type: 'input-text',
1904
+ name: 'delimiter',
1905
+ label: tipedLabel('拼接符', '将多个值拼接成一个字符串的连接符号'),
1906
+ visibleOn: 'data.multiple && data.joinValues',
1907
+ pipeIn: defaultValue(',')
1908
+ },
1909
+
1910
+ 'extractValue': {
1911
+ type: 'switch',
1912
+ label: tipedLabel(
1913
+ '仅提取值',
1914
+ '开启后将选中项的 value 封装为数组,关闭后则将整个选项数据封装为数组。'
1915
+ ),
1916
+ name: 'extractValue',
1917
+ inputClassName: 'is-inline',
1918
+ visibleOn: 'data.multiple && data.joinValues === false',
1919
+ pipeIn: defaultValue(false)
1920
+ },
1921
+
1922
+ 'creatable': (schema: Partial<SchemaObject> = {}) => {
1923
+ return {
1924
+ label: tipedLabel('可创建', '配置事件动作可插入或拦截默认交互'),
1925
+ type: 'ae-switch-more',
1926
+ mode: 'normal',
1927
+ name: 'creatable',
1928
+ ...schema
1929
+ };
1930
+ },
1931
+
1932
+ 'addApi': () =>
1933
+ getSchemaTpl('apiControl', {
1934
+ label: '新增接口',
1935
+ name: 'addApi',
1936
+ visibleOn: 'data.creatable'
1937
+ }),
1938
+
1939
+ 'createBtnLabel': {
1940
+ label: '按钮名称',
1941
+ name: 'createBtnLabel',
1942
+ type: 'input-text',
1943
+ placeholder: '新建'
1944
+ },
1945
+
1946
+ 'editable': (schema: Partial<SchemaObject> = {}) => {
1947
+ return {
1948
+ label: tipedLabel('可编辑', '配置事件动作可插入或拦截默认交互'),
1949
+ type: 'ae-switch-more',
1950
+ mode: 'normal',
1951
+ name: 'editable',
1952
+ ...schema
1953
+ };
1954
+ },
1955
+
1956
+ 'editApi': () =>
1957
+ getSchemaTpl('apiControl', {
1958
+ label: '编辑接口',
1959
+ name: 'editApi',
1960
+ visibleOn: 'data.editable'
1961
+ }),
1962
+
1963
+ 'removable': (schema: Partial<SchemaObject> = {}) => {
1964
+ return {
1965
+ label: tipedLabel('可删除', '配置事件动作可插入或拦截默认交互'),
1966
+ type: 'ae-switch-more',
1967
+ mode: 'normal',
1968
+ name: 'removable',
1969
+ ...schema
1970
+ };
1971
+ },
1972
+
1973
+ 'deleteApi': () =>
1974
+ getSchemaTpl('apiControl', {
1975
+ label: '删除接口',
1976
+ name: 'deleteApi',
1977
+ visibleOn: 'data.removable'
1978
+ }),
1979
+
1980
+ 'ref': () => {
1981
+ // {
1982
+ // type: 'input-text',
1983
+ // name: '$ref',
1984
+ // label: '选择定义',
1985
+ // labelRemark: '输入已经在page中设定好的定义'
1986
+ // }
1987
+ return null;
1988
+ },
1989
+
1990
+ 'imageUrl': {
1991
+ type: 'input-text',
1992
+ label: '图片'
1993
+ },
1994
+
1995
+ 'backgroundImageUrl': {
1996
+ type: 'input-text',
1997
+ label: '图片路径'
1998
+ },
1999
+
2000
+ 'fileUrl': {
2001
+ type: 'input-text',
2002
+ label: '文件'
2003
+ },
2004
+
2005
+ 'markdownBody': {
2006
+ name: 'value',
2007
+ type: 'editor',
2008
+ language: 'markdown',
2009
+ size: 'xxl',
2010
+ label: 'Markdown 内容',
2011
+ options: {
2012
+ lineNumbers: 'off'
2013
+ }
2014
+ },
2015
+
2016
+ 'richText': {
2017
+ label: '富文本',
2018
+ type: 'input-rich-text',
2019
+ buttons: [
2020
+ 'paragraphFormat',
2021
+ 'quote',
2022
+ 'color',
2023
+ '|',
2024
+ 'bold',
2025
+ 'italic',
2026
+ 'underline',
2027
+ 'strikeThrough',
2028
+ '|',
2029
+ 'formatOL',
2030
+ 'formatUL',
2031
+ 'align',
2032
+ '|',
2033
+ 'insertLink',
2034
+ 'insertImage',
2035
+ 'insertTable',
2036
+ '|',
2037
+ 'undo',
2038
+ 'redo',
2039
+ 'fullscreen'
2040
+ ],
2041
+ name: 'html',
2042
+ description:
2043
+ '支持使用 <code>\\${xxx}</code> 来获取变量,或者用 lodash.template 语法来写模板逻辑。<a target="_blank" href="/amis/zh-CN/docs/concepts/template">详情</a>',
2044
+ size: 'lg'
2045
+ },
2046
+
2047
+ 'showCounter': {
2048
+ type: 'switch',
2049
+ label: '计数器',
2050
+ name: 'showCounter',
2051
+ inputClassName: 'is-inline'
2052
+ },
2053
+
2054
+ 'borderMode': {
2055
+ name: 'borderMode',
2056
+ label: '边框模式',
2057
+ type: 'button-group-select',
2058
+ size: 'sm',
2059
+ mode: 'row',
2060
+ className: 'ae-buttonGroupSelect--justify',
2061
+ options: [
2062
+ {label: '全边框', value: 'full'},
2063
+ {label: '半边框', value: 'half'},
2064
+ {label: '无边框', value: 'none'}
2065
+ ]
2066
+ },
2067
+
2068
+ 'searchable': () =>
2069
+ getSchemaTpl('switch', {
2070
+ label: '可检索',
2071
+ name: 'searchable'
2072
+ }),
2073
+
2074
+ 'sortable': {
2075
+ type: 'switch',
2076
+ label: '可排序',
2077
+ name: 'sortable'
2078
+ },
2079
+
2080
+ 'selectFirst': {
2081
+ type: 'switch',
2082
+ label: '是否默认选择第一个',
2083
+ name: 'selectFirst'
2084
+ },
2085
+
2086
+ 'hideNodePathLabel': {
2087
+ type: 'switch',
2088
+ label: '隐藏选中节点的祖先节点文本信息',
2089
+ name: 'hideNodePathLabel'
2090
+ },
2091
+
2092
+ 'clearValueOnHidden': () =>
2093
+ getSchemaTpl('switch', {
2094
+ type: 'switch',
2095
+ horizontal: {left: 8, justify: true},
2096
+ label: tipedLabel(
2097
+ '隐藏时删除字段',
2098
+ '当前表单项隐藏时,表单提交数据中会删除该表单项的值'
2099
+ ),
2100
+ name: 'clearValueOnHidden'
2101
+ }),
2102
+
2103
+ 'utc': {
2104
+ type: 'switch',
2105
+ label: tipedLabel(
2106
+ 'UTC转换',
2107
+ '开启后,提交数据和展示数据将进行UTC转换;存在跨地域用户的应用建议开启'
2108
+ ),
2109
+ name: 'utc',
2110
+ inputClassName: 'is-inline'
2111
+ },
2112
+
2113
+ 'embed': {
2114
+ type: 'switch',
2115
+ label: '内嵌模式',
2116
+ name: 'embed'
2117
+ },
2118
+
2119
+ 'buttonLevel': {
2120
+ label: '按钮样式',
2121
+ type: 'select',
2122
+ name: 'level',
2123
+ options: [
2124
+ {
2125
+ label: '默认',
2126
+ value: 'default',
2127
+ level: 'default'
2128
+ },
2129
+ {
2130
+ label: '链接',
2131
+ value: 'link',
2132
+ level: 'link'
2133
+ },
2134
+ {
2135
+ label: '主色',
2136
+ value: 'primary',
2137
+ level: 'primary'
2138
+ },
2139
+
2140
+ {
2141
+ label: '淡色',
2142
+ value: 'light',
2143
+ level: 'light'
2144
+ },
2145
+ {
2146
+ label: '深色',
2147
+ value: 'dark',
2148
+ level: 'dark'
2149
+ },
2150
+
2151
+ {
2152
+ label: '提示',
2153
+ value: 'info',
2154
+ level: 'info'
2155
+ },
2156
+ {
2157
+ label: '成功',
2158
+ value: 'success',
2159
+ level: 'success'
2160
+ },
2161
+ {
2162
+ label: '警告',
2163
+ value: 'warning',
2164
+ level: 'warning'
2165
+ },
2166
+ {
2167
+ label: '严重',
2168
+ value: 'danger',
2169
+ level: 'danger'
2170
+ },
2171
+ {
2172
+ label: '次要',
2173
+ value: 'secondary',
2174
+ level: 'secondary'
2175
+ },
2176
+ {
2177
+ label: '加强',
2178
+ value: 'enhance',
2179
+ level: 'enhance'
2180
+ }
2181
+ ],
2182
+ pipeIn: defaultValue('default')
2183
+ },
2184
+
2185
+ 'uploadType': {
2186
+ label: '上传方式',
2187
+ name: 'uploadType',
2188
+ type: 'select',
2189
+ value: 'fileReceptor',
2190
+ options: [
2191
+ {
2192
+ label: '文件接收器',
2193
+ value: 'fileReceptor'
2194
+ },
2195
+
2196
+ {
2197
+ label: '对象存储',
2198
+ value: 'bos'
2199
+ }
2200
+ ]
2201
+ },
2202
+
2203
+ 'bos': {
2204
+ label: '存储仓库',
2205
+ type: 'select',
2206
+ name: 'bos',
2207
+ value: 'default',
2208
+ options: [
2209
+ {
2210
+ label: '平台默认',
2211
+ value: 'default'
2212
+ }
2213
+ ]
2214
+ },
2215
+
2216
+ 'proxy': {
2217
+ type: 'switch',
2218
+ label: '后端代理',
2219
+ name: 'proxy',
2220
+ mode: 'horizontal',
2221
+ horizontal: {
2222
+ justify: true,
2223
+ left: 8
2224
+ },
2225
+ inputClassName: 'is-inline'
2226
+ },
2227
+
2228
+ /**
2229
+ * 选项控件
2230
+ */
2231
+ 'optionControl': {
2232
+ label: '数据',
2233
+ mode: 'normal',
2234
+ name: 'options',
2235
+ type: 'ae-optionControl'
2236
+ },
2237
+
2238
+ 'badge': {
2239
+ label: '角标',
2240
+ name: 'badge',
2241
+ type: 'ae-badge'
2242
+ },
2243
+
2244
+ /**
2245
+ * 接口控件
2246
+ */
2247
+ 'apiControl': (patch: any = {}) => {
2248
+ const {name, label, value, description, sampleBuilder, ...rest} = patch;
2249
+
2250
+ return {
2251
+ type: 'ae-apiControl',
2252
+ label,
2253
+ name,
2254
+ description,
2255
+ mode: 'normal',
2256
+ labelRemark: sampleBuilder
2257
+ ? {
2258
+ icon: '',
2259
+ label: '示例',
2260
+ title: '接口返回示例',
2261
+ tooltipClassName: 'ae-ApiSample-tooltip',
2262
+ render: (data: any) => (
2263
+ <Html
2264
+ className="ae-ApiSample"
2265
+ inline={false}
2266
+ html={`
2267
+ <pre><code>${sampleBuilder(data)}</code></pre>
2268
+ `}
2269
+ />
2270
+ ),
2271
+ trigger: 'click',
2272
+ className: 'm-l-xs',
2273
+ rootClose: true,
2274
+ placement: 'left'
2275
+ }
2276
+ : undefined,
2277
+ ...rest
2278
+ };
2279
+ },
2280
+
2281
+ /**
2282
+ * 接口控件
2283
+ */
2284
+ 'actionApiControl': (patch: any = {}) => {
2285
+ const {name, label, value, description, sampleBuilder, ...rest} = patch;
2286
+
2287
+ return {
2288
+ type: 'ae-actionApiControl',
2289
+ label,
2290
+ name,
2291
+ description,
2292
+ mode: 'normal',
2293
+ labelRemark: sampleBuilder
2294
+ ? {
2295
+ icon: '',
2296
+ label: '示例',
2297
+ title: '接口返回示例',
2298
+ tooltipClassName: 'ae-ApiSample-tooltip',
2299
+ render: (data: any) => (
2300
+ <Html
2301
+ className="ae-ApiSample"
2302
+ inline={false}
2303
+ html={`
2304
+ <pre><code>${sampleBuilder(data)}</code></pre>
2305
+ `}
2306
+ />
2307
+ ),
2308
+ trigger: 'click',
2309
+ className: 'm-l-xs',
2310
+ rootClose: true,
2311
+ placement: 'left'
2312
+ }
2313
+ : undefined,
2314
+ ...rest
2315
+ };
2316
+ },
2317
+
2318
+ 'validation': (config: {
2319
+ tag: ValidatorTag | ((ctx: any) => ValidatorTag);
2320
+ }) => {
2321
+ let a = {
2322
+ title: '校验',
2323
+ body: [
2324
+ {
2325
+ type: 'ae-validationControl',
2326
+ mode: 'normal',
2327
+ ...config
2328
+ // pipeIn: (value: any, data: any) => {
2329
+ // // return reduce(value, (arr: any, item) => {
2330
+ // // if (typeof item === 'string') {
2331
+ // // arr.push(item);
2332
+ // // }
2333
+ // // else {
2334
+ // // let isAdd = false;
2335
+ // // // 优先判断是否具备可展示条件
2336
+ // // forEach(item?.isShow, (val, key) => {
2337
+ // // if ([...val].includes(data?.data[key])) {
2338
+ // // isAdd = true;
2339
+ // // return false;
2340
+ // // }
2341
+ // // })
2342
+ // // !isAdd && forEach(item?.isHidden, (val, key) => {
2343
+ // // const hasExist = [...val].includes(data?.data[key]);
2344
+ // // isAdd = hasExist ? false : true;
2345
+ // // if (hasExist) {
2346
+ // // return false;
2347
+ // // }
2348
+ // // })
2349
+ // // isAdd && arr.push(item.option);
2350
+ // // }
2351
+ // // return arr;
2352
+ // // }, []);
2353
+ // },
2354
+ },
2355
+ getSchemaTpl('validateOnChange')
2356
+ ]
2357
+ };
2358
+ return a;
2359
+ },
2360
+ /**
2361
+ * 表单项校验控件
2362
+ */
2363
+ 'validationControl': (value: Array<ValidationOptions> = []) => ({
2364
+ type: 'ae-validationControl',
2365
+ label: '校验规则',
2366
+ mode: 'normal',
2367
+ pipeIn: (value: any, data: any) => {
2368
+ return reduce(
2369
+ value,
2370
+ (arr: any, item) => {
2371
+ if (typeof item === 'string') {
2372
+ arr.push(item);
2373
+ } else {
2374
+ let isAdd = false;
2375
+ // 优先判断是否具备可展示条件
2376
+ forEach(item?.isShow, (val, key) => {
2377
+ if ([...val].includes(data?.data[key])) {
2378
+ isAdd = true;
2379
+ return false;
2380
+ }
2381
+ return true;
2382
+ });
2383
+ !isAdd &&
2384
+ forEach(item?.isHidden, (val, key) => {
2385
+ const hasExist = [...val].includes(data?.data[key]);
2386
+ isAdd = hasExist ? false : true;
2387
+ if (hasExist) {
2388
+ return false;
2389
+ }
2390
+ return true;
2391
+ });
2392
+ isAdd && arr.push(item.option);
2393
+ }
2394
+ return arr;
2395
+ },
2396
+ []
2397
+ );
2398
+ },
2399
+ value
2400
+ }),
2401
+
2402
+ /**
2403
+ * 表达式编辑器控件
2404
+ */
2405
+ 'formulaControl': (schema: object = {}) => {
2406
+ return {
2407
+ type: 'ae-formulaControl',
2408
+ ...schema
2409
+ };
2410
+ },
2411
+
2412
+ /**
2413
+ * 日期范围快捷键组件
2414
+ */
2415
+ 'dateShortCutControl': (schema: object = {}) => {
2416
+ return {
2417
+ type: 'ae-DateShortCutControl',
2418
+ ...schema
2419
+ };
2420
+ },
2421
+
2422
+ 'eventControl': (schema: any = {}) => {
2423
+ return {
2424
+ type: 'ae-eventControl',
2425
+ mode: 'normal',
2426
+ ...schema
2427
+ };
2428
+ },
2429
+
2430
+ 'style:formItem': ({renderer, schema}: any) => {
2431
+ return {
2432
+ title: '表单项',
2433
+ key: 'formItem',
2434
+ body: [
2435
+ getSchemaTpl('formItemMode'),
2436
+ getSchemaTpl('labelHide'),
2437
+ getSchemaTpl('horizontal'),
2438
+ renderer?.sizeMutable !== false ? getSchemaTpl('formItemSize') : null
2439
+ // getSchemaTpl('formItemInline')
2440
+ ].concat(schema)
2441
+ };
2442
+ },
2443
+
2444
+ 'style:classNames': (config: {
2445
+ schema: SchemaCollection;
2446
+ isFormItem: boolean;
2447
+ }) => {
2448
+ const {isFormItem = true, schema = []} = config || {};
2449
+
2450
+ return {
2451
+ title: 'CSS 类名',
2452
+ body: (isFormItem
2453
+ ? [
2454
+ getSchemaTpl('className', {
2455
+ label: '表单项'
2456
+ }),
2457
+ getSchemaTpl('className', {
2458
+ label: '标签',
2459
+ name: 'labelClassName'
2460
+ }),
2461
+ getSchemaTpl('className', {
2462
+ label: '控件',
2463
+ name: 'inputClassName'
2464
+ })
2465
+ ]
2466
+ : [
2467
+ getSchemaTpl('className', {
2468
+ label: '外层'
2469
+ })
2470
+ ]
2471
+ ).concat(schema)
2472
+ };
2473
+ },
2474
+
2475
+ 'style:others': (schemas: any[] = []) => ({
2476
+ title: '其他项',
2477
+ body: [...schemas]
2478
+ }),
2479
+
2480
+ 'data': {
2481
+ type: 'input-kv',
2482
+ name: 'data',
2483
+ label: '初始静态数据'
2484
+ },
2485
+
2486
+ 'app-page': {
2487
+ type: 'nested-select',
2488
+ label: '选择页面',
2489
+ name: 'link',
2490
+ mode: 'horizontal',
2491
+ size: 'lg',
2492
+ required: true,
2493
+ options: []
2494
+ }
2495
+ };
2496
+
2497
+ /**
2498
+ * 样式相关的属性面板,因为预计会比较多所以拆出来
2499
+ */
2500
+ export const styleTpl = {
2501
+ name: 'style',
2502
+ type: 'combo',
2503
+ label: '',
2504
+ noBorder: true,
2505
+ multiLine: true,
2506
+ items: [
2507
+ {
2508
+ type: 'fieldSet',
2509
+ title: '文字',
2510
+ body: [
2511
+ {
2512
+ type: 'group',
2513
+ body: [
2514
+ {
2515
+ label: '文字大小',
2516
+ type: 'input-text',
2517
+ name: 'fontSize'
2518
+ },
2519
+ {
2520
+ label: '文字粗细',
2521
+ name: 'fontWeight',
2522
+ type: 'select',
2523
+ options: ['normal', 'bold', 'lighter', 'bolder']
2524
+ }
2525
+ ]
2526
+ },
2527
+ {
2528
+ type: 'group',
2529
+ body: [
2530
+ {
2531
+ label: '文字颜色',
2532
+ type: 'input-color',
2533
+ name: 'color'
2534
+ },
2535
+ {
2536
+ label: '对齐方式',
2537
+ name: 'textAlign',
2538
+ type: 'select',
2539
+ options: [
2540
+ 'left',
2541
+ 'right',
2542
+ 'center',
2543
+ 'justify',
2544
+ 'justify-all',
2545
+ 'start',
2546
+ 'end',
2547
+ 'match-parent'
2548
+ ]
2549
+ }
2550
+ ]
2551
+ }
2552
+ ]
2553
+ },
2554
+ {
2555
+ type: 'fieldSet',
2556
+ title: '背景',
2557
+ body: [
2558
+ {
2559
+ label: '颜色',
2560
+ name: 'backgroundColor',
2561
+ type: 'input-color'
2562
+ },
2563
+ getSchemaTpl('imageUrl', {
2564
+ name: 'backgroundImage'
2565
+ })
2566
+ ]
2567
+ },
2568
+ {
2569
+ type: 'fieldSet',
2570
+ title: '边距',
2571
+ body: [
2572
+ {
2573
+ type: 'group',
2574
+ label: '外边距',
2575
+ body: [
2576
+ {
2577
+ label: '上',
2578
+ name: 'marginTop',
2579
+ type: 'input-text'
2580
+ },
2581
+ {
2582
+ label: '右',
2583
+ name: 'marginRight',
2584
+ type: 'input-text'
2585
+ },
2586
+ {
2587
+ label: '下',
2588
+ name: 'marginBottom',
2589
+ type: 'input-text'
2590
+ },
2591
+ {
2592
+ label: '左',
2593
+ name: 'marginLeft',
2594
+ type: 'input-text'
2595
+ }
2596
+ ]
2597
+ },
2598
+ {
2599
+ type: 'group',
2600
+ label: '内边距',
2601
+ body: [
2602
+ {
2603
+ label: '上',
2604
+ name: 'paddingTop',
2605
+ type: 'input-text'
2606
+ },
2607
+ {
2608
+ label: '右',
2609
+ name: 'paddingRight',
2610
+ type: 'input-text'
2611
+ },
2612
+ {
2613
+ label: '下',
2614
+ name: 'paddingBottom',
2615
+ type: 'input-text'
2616
+ },
2617
+ {
2618
+ label: '左',
2619
+ name: 'paddingLeft',
2620
+ type: 'input-text'
2621
+ }
2622
+ ]
2623
+ }
2624
+ ]
2625
+ },
2626
+ {
2627
+ type: 'fieldSet',
2628
+ title: '边框',
2629
+ body: [
2630
+ {
2631
+ type: 'group',
2632
+ body: [
2633
+ {
2634
+ label: '样式',
2635
+ name: 'borderStyle',
2636
+ type: 'select',
2637
+ options: ['none', 'solid', 'dotted', 'dashed']
2638
+ },
2639
+ {
2640
+ label: '颜色',
2641
+ name: 'borderColor',
2642
+ type: 'input-color'
2643
+ }
2644
+ ]
2645
+ },
2646
+ {
2647
+ type: 'group',
2648
+ body: [
2649
+ {
2650
+ label: '宽度',
2651
+ name: 'borderWidth',
2652
+ type: 'input-text'
2653
+ },
2654
+ {
2655
+ label: '圆角宽度',
2656
+ name: 'borderRadius',
2657
+ type: 'input-text'
2658
+ }
2659
+ ]
2660
+ }
2661
+ ]
2662
+ },
2663
+ {
2664
+ type: 'fieldSet',
2665
+ title: '特效',
2666
+ body: [
2667
+ {
2668
+ label: '透明度',
2669
+ name: 'opacity',
2670
+ min: 0,
2671
+ max: 1,
2672
+ step: 0.05,
2673
+ type: 'input-range',
2674
+ pipeIn: defaultValue(1)
2675
+ },
2676
+ {
2677
+ label: '阴影',
2678
+ name: 'boxShadow',
2679
+ type: 'input-text'
2680
+ }
2681
+ ]
2682
+ }
2683
+ ]
2684
+ };
2685
+
2686
+ /**
2687
+ * 通用CSS Style控件
2688
+ * @param {string | Array<string>} exclude 需要隐藏的配置key
2689
+ */
2690
+ tpls['style:common'] = (exclude: string[] | string) => {
2691
+ // key统一转换成Kebab case,eg: boxShadow => bos-shadow
2692
+ exclude = (exclude
2693
+ ? Array.isArray(exclude)
2694
+ ? exclude
2695
+ : [exclude]
2696
+ : []
2697
+ ).map((key: string) => kebabCase(key));
2698
+
2699
+ return [
2700
+ {
2701
+ header: '布局',
2702
+ key: 'layout',
2703
+ body: [
2704
+ {
2705
+ type: 'style-display',
2706
+ label: false,
2707
+ name: 'style'
2708
+ }
2709
+ ].filter(comp => !~exclude.indexOf(comp.type.replace(/^style-/i, '')))
2710
+ },
2711
+ {
2712
+ header: '文字',
2713
+ key: 'font',
2714
+ body: [
2715
+ {
2716
+ type: 'style-font',
2717
+ label: false,
2718
+ name: 'style'
2719
+ }
2720
+ ]
2721
+ },
2722
+ {
2723
+ header: '内外边距',
2724
+ key: 'box-model',
2725
+ body: [
2726
+ {
2727
+ type: 'style-box-model',
2728
+ label: false,
2729
+ name: 'style'
2730
+ }
2731
+ ]
2732
+ },
2733
+ {
2734
+ header: '背景',
2735
+ key: 'background',
2736
+ body: [
2737
+ {
2738
+ type: 'style-background',
2739
+ label: false,
2740
+ name: 'style'
2741
+ }
2742
+ ]
2743
+ },
2744
+ {
2745
+ header: '边框',
2746
+ key: 'border',
2747
+ body: [
2748
+ {
2749
+ type: 'style-border',
2750
+ label: false,
2751
+ name: 'style'
2752
+ }
2753
+ ]
2754
+ },
2755
+ {
2756
+ header: '阴影',
2757
+ key: 'box-shadow',
2758
+ body: [
2759
+ {
2760
+ type: 'style-box-shadow',
2761
+ label: false,
2762
+ name: 'style.boxShadow'
2763
+ }
2764
+ ]
2765
+ },
2766
+ {
2767
+ header: '其他',
2768
+ key: 'other',
2769
+ body: [
2770
+ {
2771
+ label: '透明度',
2772
+ name: 'style.opacity',
2773
+ min: 0,
2774
+ max: 1,
2775
+ step: 0.05,
2776
+ type: 'input-range',
2777
+ pipeIn: defaultValue(1),
2778
+ marks: {
2779
+ '0%': '0',
2780
+ '50%': '0.5',
2781
+ '100%': '1'
2782
+ }
2783
+ },
2784
+ {
2785
+ label: '光标类型',
2786
+ name: 'style.cursor',
2787
+ type: 'select',
2788
+ mode: 'row',
2789
+ menuTpl: {
2790
+ type: 'html',
2791
+ html:
2792
+ "<span style='cursor:${value};'>${label}</span><code class='ae-Code'>${value}</code>",
2793
+ className: 'ae-selection-code'
2794
+ },
2795
+ pipIn: defaultValue('default'),
2796
+ options: [
2797
+ {label: '默认', value: 'default'},
2798
+ {label: '自动', value: 'auto'},
2799
+ {label: '无指针', value: 'none'},
2800
+ {label: '悬浮', value: 'pointer'},
2801
+ {label: '帮助', value: 'help'},
2802
+ {label: '文本', value: 'text'},
2803
+ {label: '单元格', value: 'cell'},
2804
+ {label: '交叉指针', value: 'crosshair'},
2805
+ {label: '可移动', value: 'move'},
2806
+ {label: '禁用', value: 'not-allowed'},
2807
+ {label: '可抓取', value: 'grab'},
2808
+ {label: '放大', value: 'zoom-in'},
2809
+ {label: '缩小', value: 'zoom-out'}
2810
+ ]
2811
+ }
2812
+ ]
2813
+ }
2814
+ ].filter(item => !~exclude.indexOf(item.key));
2815
+ };
2816
+
2817
+ export function getCollapseCate(config: {
2818
+ name: string;
2819
+ body: SchemaCollection;
2820
+ visibleOn?: string;
2821
+ tools: SchemaCollection;
2822
+ }) {
2823
+ return;
2824
+ }
2825
+
2826
+ export function getSchemaTpl(name: string, patch?: object): any {
2827
+ const tpl = tpls[name] || {};
2828
+ let schema = null;
2829
+
2830
+ if (typeof tpl === 'function') {
2831
+ schema = tpl(patch);
2832
+ } else {
2833
+ schema = tpl
2834
+ ? patch
2835
+ ? {
2836
+ ...tpl,
2837
+ ...patch
2838
+ }
2839
+ : tpl
2840
+ : null;
2841
+ }
2842
+
2843
+ return schema;
2844
+ }
2845
+
2846
+ export function setSchemaTpl(name: string, value: any) {
2847
+ tpls[name] = value;
2848
+ }
2849
+
2850
+ export function valuePipeOut(value: any) {
2851
+ try {
2852
+ if (value === 'undefined') {
2853
+ return undefined;
2854
+ }
2855
+
2856
+ return JSON.parse(value);
2857
+ } catch (e) {
2858
+ return value;
2859
+ }
2860
+ }
2861
+
2862
+ export function undefinedPipeOut(value: any) {
2863
+ if (Array.isArray(value)) {
2864
+ return value.length ? value : undefined;
2865
+ }
2866
+
2867
+ if (typeof value === 'string') {
2868
+ return value ? value : undefined;
2869
+ }
2870
+
2871
+ if (typeof value === 'object') {
2872
+ return Object.keys(value).length ? value : undefined;
2873
+ }
2874
+ return value;
2875
+ }
2876
+
2877
+ export function defaultValue(defaultValue: any, strictMode: boolean = true) {
2878
+ return strictMode
2879
+ ? (value: any) => (typeof value === 'undefined' ? defaultValue : value)
2880
+ : (value: any) => value || defaultValue;
2881
+ }