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,1777 @@
1
+ import {toast} from 'amis';
2
+ import get from 'lodash/get';
3
+ import cloneDeep from 'lodash/cloneDeep';
4
+ import React from 'react';
5
+
6
+ import {registerEditorPlugin} from '../manager';
7
+ import {
8
+ BaseEventContext,
9
+ BasePlugin,
10
+ BasicRendererInfo,
11
+ BasicSubRenderInfo,
12
+ ChangeEventContext,
13
+ PluginEvent,
14
+ PluginInterface,
15
+ RendererEventContext,
16
+ RendererInfoResolveEventContext,
17
+ ScaffoldForm,
18
+ SubRendererInfo
19
+ } from '../plugin';
20
+ import {defaultValue, getSchemaTpl} from '../component/schemaTpl';
21
+ import {isObject, JSONPipeIn} from '../util';
22
+ import {setVariable} from 'amis-core';
23
+ import {ActionSchema} from 'amis/lib/renderers/Action';
24
+ import {getEnv} from 'mobx-state-tree';
25
+ import {EditorNodeType} from '../store/node';
26
+ import {normalizeApi} from 'amis-core';
27
+
28
+ interface ColumnItem {
29
+ label: string;
30
+ type: string;
31
+ name: string;
32
+ }
33
+
34
+ // 将展现控件转成编辑控件
35
+ const viewTypeToEditType = (type: string) => {
36
+ return type === 'tpl'
37
+ ? 'input-text'
38
+ : type === 'status' || type === 'mapping'
39
+ ? 'select'
40
+ : `input-${type}`;
41
+ };
42
+
43
+ export class CRUDPlugin extends BasePlugin {
44
+ // 关联渲染器名字
45
+ rendererName = 'crud';
46
+ $schema = '/schemas/CRUDSchema.json';
47
+
48
+ order = -1000;
49
+
50
+ // 组件名称
51
+ name = '增删改查';
52
+ isBaseComponent = true;
53
+ description =
54
+ '用来实现对数据的增删改查,支持三种模式展示:table、cards和list. 负责数据的拉取,分页,单条操作,批量操作,排序,快速编辑等等功能。集成查询条件。';
55
+ docLink = '/amis/zh-CN/components/crud';
56
+ tags = ['功能'];
57
+ icon = 'fa fa-table';
58
+
59
+ scaffold: any = {
60
+ type: 'crud',
61
+ syncLocation: false,
62
+ api: '',
63
+ columns: [
64
+ {
65
+ name: 'id',
66
+ label: 'ID',
67
+ type: 'text'
68
+ },
69
+ {
70
+ name: 'engine',
71
+ label: '渲染引擎',
72
+ type: 'text'
73
+ }
74
+ ],
75
+ bulkActions: [],
76
+ itemActions: []
77
+ };
78
+
79
+ sampleBuilder = (schema: any) => {
80
+ const data: any = {
81
+ items: [],
82
+ total: 0
83
+ };
84
+
85
+ if (Array.isArray(schema?.columns)) {
86
+ const item = {};
87
+ schema.columns.forEach((control: any) => {
88
+ if (control?.name) {
89
+ setVariable(item, control.name, 'sample');
90
+ }
91
+ });
92
+
93
+ data.items.push(item);
94
+ }
95
+
96
+ return JSON.stringify(
97
+ {
98
+ status: 0,
99
+ msg: '',
100
+ data: data
101
+ },
102
+ null,
103
+ 2
104
+ );
105
+ };
106
+
107
+ btnSchemas = {
108
+ create: {
109
+ label: '新增',
110
+ type: 'button',
111
+ actionType: 'dialog',
112
+ level: 'primary',
113
+ dialog: {
114
+ title: '新增',
115
+ body: {
116
+ type: 'form',
117
+ api: 'xxx/create',
118
+ body: []
119
+ }
120
+ }
121
+ },
122
+ update: {
123
+ label: '编辑',
124
+ type: 'button',
125
+ actionType: 'dialog',
126
+ level: 'link',
127
+ dialog: {
128
+ title: '编辑',
129
+ body: {
130
+ type: 'form',
131
+ api: 'xxx/update',
132
+ body: []
133
+ }
134
+ }
135
+ },
136
+ view: {
137
+ label: '查看',
138
+ type: 'button',
139
+ actionType: 'dialog',
140
+ level: 'link',
141
+ dialog: {
142
+ title: '查看详情',
143
+ body: {
144
+ type: 'form',
145
+ api: 'xxx/update',
146
+ body: []
147
+ }
148
+ }
149
+ },
150
+ delete: {
151
+ type: 'button',
152
+ label: '删除',
153
+ actionType: 'ajax',
154
+ level: 'link',
155
+ className: 'text-danger',
156
+ confirmText: '确定要删除?',
157
+ api: 'delete:/xxx/delete'
158
+ },
159
+ bulkDelete: {
160
+ type: 'button',
161
+ level: 'danger',
162
+ label: '批量删除',
163
+ actionType: 'ajax',
164
+ confirmText: '确定要删除?',
165
+ api: '/xxx/batch-delete'
166
+ },
167
+ bulkUpdate: {
168
+ type: 'button',
169
+ label: '批量编辑',
170
+ actionType: 'dialog',
171
+ dialog: {
172
+ title: '批量编辑',
173
+ size: 'md',
174
+ body: {
175
+ type: 'form',
176
+ api: '/xxx/bacth-edit',
177
+ body: [
178
+ {
179
+ label: '字段1',
180
+ text: '字段1',
181
+ type: 'input-text'
182
+ }
183
+ ]
184
+ }
185
+ }
186
+ },
187
+ // itemDelete: {
188
+ // type: 'button',
189
+ // level: 'danger',
190
+ // label: '删除',
191
+ // api: '/xxx/delete-one',
192
+ // actionType: 'ajax',
193
+ // confirmText: '确定要删除?'
194
+ // },
195
+ filter: {
196
+ title: '查询条件',
197
+ body: [
198
+ {
199
+ type: 'input-text',
200
+ name: 'keywords',
201
+ label: '关键字'
202
+ }
203
+ ]
204
+ }
205
+ };
206
+
207
+ scaffoldForm: ScaffoldForm = {
208
+ title: '增删改查快速开始-CRUD',
209
+ body: [
210
+ getSchemaTpl('api', {
211
+ label: '接口地址',
212
+ sampleBuilder: (schema: any) =>
213
+ JSON.stringify(
214
+ {
215
+ status: 0,
216
+ msg: '',
217
+ data: [
218
+ {id: 1, name: 'Jack'},
219
+ {id: 2, name: 'Rose'}
220
+ ]
221
+ },
222
+ null,
223
+ 2
224
+ )
225
+ }),
226
+ {
227
+ type: 'button',
228
+ label: '格式校验并自动生成列配置',
229
+ className: 'm-t-xs m-b-xs',
230
+ onClick: async (e: Event, props: any) => {
231
+ const data = props.data;
232
+ const schemaFilter = getEnv((window as any).editorStore).schemaFilter;
233
+ let api: any = data.api;
234
+ // 主要是给爱速搭中替换 url
235
+ if (schemaFilter) {
236
+ api = schemaFilter({
237
+ api: data.api
238
+ }).api;
239
+ }
240
+ const result = await props.env.fetcher(api, data);
241
+
242
+ let autoFillKeyValues: Array<any> = [];
243
+ const items = result.data?.rows || result.data?.items;
244
+ if (items?.length) {
245
+ Object.keys(items[0]).forEach((key: any) => {
246
+ const value = items[0][key];
247
+ autoFillKeyValues.push({
248
+ label: key,
249
+ type: 'text',
250
+ name: key
251
+ });
252
+ });
253
+ props.formStore.setValues({
254
+ columns: autoFillKeyValues
255
+ });
256
+ // 查询条件的字段列表
257
+ props.formStore.setValues({
258
+ filterSettingSource: autoFillKeyValues.map(column => {
259
+ return column.name;
260
+ })
261
+ });
262
+ } else {
263
+ toast.warning(
264
+ `API返回格式不正确,请点击接口地址右侧示例的问号查看示例`
265
+ );
266
+ }
267
+ }
268
+ },
269
+ {
270
+ name: 'features',
271
+ label: '启用功能',
272
+ type: 'checkboxes',
273
+ joinValues: false,
274
+ extractValue: true,
275
+ itemClassName: 'max-w-lg',
276
+ options: [
277
+ {label: '新增', value: 'create'},
278
+ {label: '查询', value: 'filter'},
279
+ {label: '批量删除', value: 'bulkDelete'},
280
+ {label: '批量修改', value: 'bulkUpdate'},
281
+ {label: '操作栏-编辑', value: 'update'},
282
+ {label: '操作栏-查看详情', value: 'view'},
283
+ {label: '操作栏-删除', value: 'delete'}
284
+ ]
285
+ },
286
+ {
287
+ type: 'group',
288
+ body: [
289
+ {
290
+ columnRatio: 10,
291
+ type: 'checkboxes',
292
+ label: '启用的查询字段',
293
+ name: 'filterEnabledList',
294
+ joinValues: false,
295
+ source: '${filterSettingSource}'
296
+ },
297
+ {
298
+ columnRatio: 2,
299
+ type: 'input-number',
300
+ label: '每列显示几个字段',
301
+ value: 3,
302
+ name: 'filterColumnCount'
303
+ }
304
+ ],
305
+ visibleOn: 'data.features && data.features.includes("filter")'
306
+ },
307
+ {
308
+ name: 'columns',
309
+ type: 'input-table',
310
+ label: false,
311
+ addable: true,
312
+ removable: true,
313
+ needConfirm: false,
314
+ columns: [
315
+ {
316
+ type: 'input-text',
317
+ name: 'label',
318
+ label: '标题'
319
+ },
320
+ {
321
+ type: 'input-text',
322
+ name: 'name',
323
+ label: '绑定字段名'
324
+ },
325
+ {
326
+ type: 'select',
327
+ name: 'type',
328
+ label: '类型',
329
+ value: 'text',
330
+ options: [
331
+ {
332
+ value: 'text',
333
+ label: '纯文本'
334
+ },
335
+ {
336
+ value: 'tpl',
337
+ label: '模板'
338
+ },
339
+ {
340
+ value: 'image',
341
+ label: '图片'
342
+ },
343
+ {
344
+ value: 'date',
345
+ label: '日期'
346
+ },
347
+ {
348
+ value: 'progress',
349
+ label: '进度'
350
+ },
351
+ {
352
+ value: 'status',
353
+ label: '状态'
354
+ },
355
+ {
356
+ value: 'mapping',
357
+ label: '映射'
358
+ },
359
+ {
360
+ value: 'operation',
361
+ label: '操作栏'
362
+ }
363
+ ]
364
+ }
365
+ ]
366
+ }
367
+ ],
368
+ pipeOut: (value: any) => {
369
+ let valueSchema = cloneDeep(value);
370
+ // 查看/删除 操作,可选择是否使用接口返回值预填充
371
+ const features: Array<any> = valueSchema.features;
372
+ const oper: {
373
+ type: 'operation';
374
+ label?: string;
375
+ buttons: Array<ActionSchema>;
376
+ } = {
377
+ type: 'operation',
378
+ label: '操作',
379
+ buttons: []
380
+ };
381
+ const itemBtns: Array<string> = ['update', 'view', 'delete'];
382
+ const hasFeatures = get(features, 'length');
383
+
384
+ valueSchema.bulkActions = [];
385
+ /** 统一api格式 */
386
+ valueSchema.api = normalizeApi(valueSchema.api);
387
+ hasFeatures &&
388
+ features.forEach((item: string) => {
389
+ if (itemBtns.includes(item)) {
390
+ let schema;
391
+
392
+ if (item === 'update') {
393
+ schema = cloneDeep(this.btnSchemas.update);
394
+ schema.dialog.body.body = value.columns
395
+ .filter(
396
+ ({type}: any) => type !== 'progress' && type !== 'operation'
397
+ )
398
+ .map(({type, ...rest}: any) => ({
399
+ ...rest,
400
+ type: viewTypeToEditType(type)
401
+ }));
402
+ } else if (item === 'view') {
403
+ schema = cloneDeep(this.btnSchemas.view);
404
+ schema.dialog.body.body = value.columns.map(
405
+ ({type, ...rest}: any) => ({
406
+ ...rest,
407
+ type: 'static'
408
+ })
409
+ );
410
+ } else if (item === 'delete') {
411
+ schema = cloneDeep(this.btnSchemas.delete);
412
+ schema.api = valueSchema.api?.method.match(/^(post|delete)$/i)
413
+ ? valueSchema.api
414
+ : {...valueSchema.api, method: 'post'};
415
+ }
416
+
417
+ // 添加操作按钮
418
+ this.addItem(oper.buttons, schema);
419
+ } else {
420
+ // 批量操作
421
+ if (item === 'bulkUpdate') {
422
+ this.addItem(
423
+ valueSchema.bulkActions,
424
+ cloneDeep(this.btnSchemas.bulkUpdate)
425
+ );
426
+ }
427
+
428
+ if (item === 'bulkDelete') {
429
+ this.addItem(
430
+ valueSchema.bulkActions,
431
+ cloneDeep(this.btnSchemas.bulkDelete)
432
+ );
433
+ }
434
+
435
+ // 创建
436
+ if (item === 'create') {
437
+ const createSchemaBase = this.btnSchemas.create;
438
+ createSchemaBase.dialog.body = {
439
+ type: 'form',
440
+ api: valueSchema.api?.method.match(/^(post|put)$/i)
441
+ ? valueSchema.api
442
+ : {...valueSchema.api, method: 'post'},
443
+ body: valueSchema.columns.map((column: ColumnItem) => {
444
+ const type = column.type;
445
+ return {
446
+ type: viewTypeToEditType(type),
447
+ name: column.name,
448
+ label: column.label
449
+ };
450
+ })
451
+ };
452
+ valueSchema.headerToolbar = [createSchemaBase, 'bulkActions'];
453
+ }
454
+ let keysFilter = Object.keys(valueSchema.filter || {});
455
+ if (item === 'filter' && !keysFilter.length) {
456
+ if (valueSchema.filterEnabledList) {
457
+ valueSchema.filter = {
458
+ title: '查询条件'
459
+ };
460
+ valueSchema.filter.columnCount = value.filterColumnCount;
461
+ valueSchema.filter.mode = 'horizontal';
462
+ valueSchema.filter.body = valueSchema.filterEnabledList.map(
463
+ (item: any) => {
464
+ return {
465
+ type: 'input-text',
466
+ label: item.label,
467
+ name: item.value
468
+ };
469
+ }
470
+ );
471
+ }
472
+ }
473
+ }
474
+ });
475
+ const hasOperate = valueSchema.columns.find(
476
+ (item: any) => item.type === 'operation'
477
+ );
478
+ hasFeatures && !hasOperate && valueSchema.columns.push(oper);
479
+ return valueSchema;
480
+ },
481
+ canRebuild: true
482
+ };
483
+
484
+ addItem(source: any, target: any) {
485
+ const canAdd = source.find((item: any) => item.label === target.label);
486
+ if (!canAdd) {
487
+ source.push(target);
488
+ }
489
+ }
490
+
491
+ multifactor = true;
492
+ previewSchema: any = {
493
+ syncLocation: false,
494
+ type: 'crud',
495
+ className: 'text-left',
496
+ bodyClassName: 'm-b-none',
497
+ affixHeader: false,
498
+ data: {
499
+ items: [
500
+ {a: 1, b: 2},
501
+ {a: 3, b: 4},
502
+ {a: 5, b: 6}
503
+ ]
504
+ },
505
+ source: '${items}',
506
+ columns: [
507
+ {
508
+ label: 'A',
509
+ name: 'a'
510
+ },
511
+ {
512
+ label: 'B',
513
+ name: 'b'
514
+ },
515
+ {
516
+ type: 'operation',
517
+ label: '操作',
518
+ buttons: [
519
+ {
520
+ icon: 'fa fa-eye',
521
+ type: 'button'
522
+ },
523
+
524
+ {
525
+ icon: 'fa fa-edit',
526
+ type: 'button'
527
+ }
528
+ ]
529
+ }
530
+ ]
531
+ };
532
+
533
+ oldFilter?: any;
534
+ panelTitle = '增删改查';
535
+ panelBodyCreator = (context: BaseEventContext) => {
536
+ const store = this.manager.store;
537
+ const id = context.id;
538
+
539
+ return getSchemaTpl('tabs', [
540
+ {
541
+ title: '常规',
542
+ body: [
543
+ getSchemaTpl('switch', {
544
+ name: 'filter',
545
+ label: '启用查询条件',
546
+ pipeIn: (value: any) => !!value,
547
+ pipeOut: (value: any, originValue: any) => {
548
+ if (value) {
549
+ return (
550
+ this.oldFilter ||
551
+ JSONPipeIn({
552
+ title: '查询条件',
553
+ body: [
554
+ {
555
+ type: 'input-text',
556
+ name: 'keywords',
557
+ label: '关键字'
558
+ }
559
+ ]
560
+ })
561
+ );
562
+ } else {
563
+ this.oldFilter = originValue;
564
+ }
565
+
566
+ return null;
567
+ }
568
+ }),
569
+
570
+ {
571
+ type: 'divider'
572
+ },
573
+
574
+ {
575
+ label: '批量操作',
576
+ name: 'bulkActions',
577
+ type: 'combo',
578
+ hiddenOn: 'data.pickerMode && data.multiple',
579
+ inputClassName: 'ae-BulkActions-control',
580
+ multiple: true,
581
+ draggable: true,
582
+ draggableTip: '',
583
+ scaffold: {
584
+ label: '按钮',
585
+ type: 'button'
586
+ },
587
+ labelRemark: {
588
+ className: 'm-l-xs',
589
+ trigger: 'click',
590
+ rootClose: true,
591
+ content:
592
+ '通过此可以管理批量操作按钮,只有设置了批量操作按钮才会出现选择框,可在外观中配置批量操作按钮位置。',
593
+ placement: 'left'
594
+ },
595
+ items: [
596
+ {
597
+ type: 'tpl',
598
+ tpl: '<span class="label label-success">${label}</span>',
599
+ columnClassName: 'p-t-xs'
600
+ },
601
+
602
+ {
603
+ columnClassName: 'p-t-xs col-edit',
604
+ children: ({index}: any) => (
605
+ <button
606
+ onClick={this.handleBulkActionEdit.bind(this, id, index)}
607
+ data-tooltip="修改"
608
+ data-position="bottom"
609
+ className="text-muted"
610
+ >
611
+ <i className="fa fa-pencil" />
612
+ </button>
613
+ )
614
+ }
615
+ ]
616
+ },
617
+
618
+ // getSchemaTpl('switch', {
619
+ // name: 'defaultChecked',
620
+ // label: '默认是否全部勾选',
621
+ // visibleOn: 'data.bulkActions && data.bulkActions.length',
622
+ // pipeIn: defaultValue(false)
623
+ // }),
624
+
625
+ {
626
+ type: 'divider'
627
+ },
628
+
629
+ {
630
+ label: '单条操作',
631
+ name: 'itemActions',
632
+ type: 'combo',
633
+ labelRemark: {
634
+ className: 'm-l-xs',
635
+ trigger: 'click',
636
+ rootClose: true,
637
+ content:
638
+ '设置后,当鼠标悬停行数据上,会出现该操作按钮,同时顶部操作栏也会显示该按钮,勾选成员时与批量按钮智能切换。',
639
+ placement: 'left'
640
+ },
641
+ hiddenOn: 'this.mode && this.mode !== "table" || this.pickerMode',
642
+ inputClassName: 'ae-BulkActions-control',
643
+ multiple: true,
644
+ draggable: true,
645
+ scaffold: {
646
+ label: '按钮',
647
+ type: 'button'
648
+ },
649
+ items: [
650
+ {
651
+ type: 'tpl',
652
+ tpl: '<span class="label label-success">${label}</span>',
653
+ columnClassName: 'p-t-xs'
654
+ },
655
+
656
+ {
657
+ type: 'checkbox',
658
+ className: 'text-xs',
659
+ option: '悬停隐藏',
660
+ name: 'hiddenOnHover'
661
+ },
662
+
663
+ {
664
+ columnClassName: 'p-t-xs col-edit',
665
+ children: ({index}: any) => (
666
+ <button
667
+ onClick={this.handleItemActionEdit.bind(this, id, index)}
668
+ data-tooltip="修改"
669
+ data-position="bottom"
670
+ className="text-muted"
671
+ >
672
+ <i className="fa fa-pencil" />
673
+ </button>
674
+ )
675
+ }
676
+ ]
677
+ },
678
+
679
+ {
680
+ type: 'divider',
681
+ hiddenOn: 'this.mode && this.mode !== "table" || this.pickerMode'
682
+ },
683
+
684
+ getSchemaTpl('switch', {
685
+ name: 'syncLocation',
686
+ label: '同步地址栏',
687
+ pipeIn: defaultValue(true),
688
+ labelRemark: {
689
+ className: 'm-l-xs',
690
+ trigger: 'click',
691
+ rootClose: true,
692
+ content:
693
+ '开启后会把查询条件数据和分页信息同步到地址栏中,页面中出现多个时,建议只保留一个同步地址栏,否则会相互影响。',
694
+ placement: 'left'
695
+ }
696
+ }),
697
+
698
+ {
699
+ label: '默认参数',
700
+ type: 'input-kv',
701
+ name: 'defaultParams',
702
+ labelRemark: {
703
+ className: 'm-l-xs',
704
+ trigger: 'click',
705
+ rootClose: true,
706
+ content: '可以用来设置默认参数,比如 <code>perPage:20</code>',
707
+ placement: 'left'
708
+ }
709
+ },
710
+
711
+ {
712
+ type: 'divider'
713
+ },
714
+
715
+ getSchemaTpl('switch', {
716
+ name: 'keepItemSelectionOnPageChange',
717
+ label: '保留条目选择',
718
+ visbileOn:
719
+ 'this.bulkActions && this.bulkActions.length || this.itemActions && this.itemActions.length',
720
+ labelRemark: {
721
+ className: 'm-l-xs',
722
+ trigger: 'click',
723
+ rootClose: true,
724
+ content:
725
+ '默认分页、搜索后,用户选择条目会被清空,开启此选项后会保留用户选择,可以实现跨页面批量操作。',
726
+ placement: 'left'
727
+ }
728
+ }),
729
+
730
+ {
731
+ name: 'labelTpl',
732
+ type: 'input-text',
733
+ label: '单条描述模板',
734
+ visibleOn: 'this.keepItemSelectionOnPageChange',
735
+ labelRemark: {
736
+ className: 'm-l-xs',
737
+ trigger: 'click',
738
+ rootClose: true,
739
+ content:
740
+ '开启【保留条目选择】后会把所有已选择条目列出来,此选项可以用来定制条目展示文案。',
741
+ placement: 'left'
742
+ }
743
+ },
744
+
745
+ {
746
+ name: 'primaryField',
747
+ label: '指定主键',
748
+ type: 'input-text',
749
+ pipeIn: defaultValue('id'),
750
+ description: '默认<code>id</code>,用于批量操作获取行级数据'
751
+ }
752
+ ]
753
+ },
754
+
755
+ {
756
+ title: '接口',
757
+ body: [
758
+ getSchemaTpl('api', {
759
+ label: '数据拉取接口',
760
+ sampleBuilder: () => {
761
+ const data: any = {
762
+ items: [],
763
+ total: 0
764
+ };
765
+ const columns: any[] = context?.schema?.columns ?? [];
766
+ const row = {};
767
+
768
+ columns.forEach(column => {
769
+ if (column.name) {
770
+ setVariable(row, column.name, 'sample');
771
+ }
772
+ });
773
+ data.items.push(row);
774
+ return JSON.stringify(
775
+ {
776
+ status: 0,
777
+ msg: '',
778
+ data: data
779
+ },
780
+ null,
781
+ 2
782
+ );
783
+ }
784
+ }),
785
+
786
+ {
787
+ name: 'initFetch',
788
+ type: 'radios',
789
+ label: '是否初始拉取',
790
+ pipeIn: (value: any) =>
791
+ (typeof value == 'boolean' && value) ||
792
+ (typeof value !== 'boolean' && ''),
793
+ inline: true,
794
+ onChange: () => {},
795
+ options: [
796
+ {
797
+ label: '是',
798
+ value: true
799
+ },
800
+
801
+ {
802
+ label: '否',
803
+ value: false
804
+ },
805
+
806
+ {
807
+ label: '表达式',
808
+ value: ''
809
+ }
810
+ ]
811
+ },
812
+
813
+ {
814
+ name: 'initFetch',
815
+ autoComplete: false,
816
+ visibleOn: 'typeof this.initFetch !== "boolean"',
817
+ type: 'input-text',
818
+ placeholder: '用 JS 表达式来决定',
819
+ className: 'm-t-n-sm'
820
+ },
821
+
822
+ getSchemaTpl('switch', {
823
+ name: 'loadDataOnce',
824
+ label: '一次性拉取',
825
+ labelRemark: {
826
+ className: 'm-l-xs',
827
+ trigger: 'click',
828
+ rootClose: true,
829
+ content:
830
+ '开启后,数据只会在初始的时候拉取,后续分页、排序不再请求接口,都由前端直接完成。',
831
+ placement: 'left'
832
+ }
833
+ }),
834
+
835
+ getSchemaTpl('switch', {
836
+ label: '开启定时刷新',
837
+ name: 'interval',
838
+ visibleOn: 'data.api',
839
+ pipeIn: (value: any) => !!value,
840
+ pipeOut: (value: any) => (value ? 3000 : undefined)
841
+ }),
842
+
843
+ {
844
+ name: 'interval',
845
+ type: 'input-number',
846
+ visibleOn: 'typeof data.interval === "number"',
847
+ step: 500,
848
+ className: 'm-t-n-sm',
849
+ description: '设置后将自动定时刷新,单位 ms'
850
+ },
851
+
852
+ getSchemaTpl('switch', {
853
+ name: 'silentPolling',
854
+ label: '静默刷新',
855
+ visibleOn: '!!data.interval',
856
+ description: '设置自动定时刷新时是否显示loading'
857
+ }),
858
+
859
+ {
860
+ name: 'stopAutoRefreshWhen',
861
+ label: '停止定时刷新检测表达式',
862
+ type: 'input-text',
863
+ visibleOn: '!!data.interval',
864
+ description:
865
+ '定时刷新一旦设置会一直刷新,除非给出表达式,条件满足后则不刷新了。'
866
+ },
867
+
868
+ getSchemaTpl('switch', {
869
+ name: 'stopAutoRefreshWhenModalIsOpen',
870
+ label: '当有弹框时关闭自动刷新',
871
+ visibleOn: '!!data.interval',
872
+ description: '弹框打开关闭自动刷新,关闭弹框又恢复'
873
+ }),
874
+
875
+ {
876
+ type: 'divider'
877
+ },
878
+
879
+ getSchemaTpl('switch', {
880
+ name: 'draggable',
881
+ label: '是否可拖拽排序'
882
+ }),
883
+
884
+ getSchemaTpl('api', {
885
+ label: '顺序保存接口',
886
+ name: 'saveOrderApi',
887
+ visibleOn: 'data.draggable'
888
+ }),
889
+
890
+ {
891
+ type: 'divider'
892
+ },
893
+
894
+ getSchemaTpl('api', {
895
+ label: '快速保存接口',
896
+ name: 'quickSaveApi',
897
+ description:
898
+ '当 column 中设置了快速编辑后将使用此接口批量保存数据。'
899
+ }),
900
+
901
+ {
902
+ type: 'divider'
903
+ },
904
+
905
+ getSchemaTpl('api', {
906
+ label: '快速保存单条接口',
907
+ name: 'quickSaveItemApi',
908
+ description:
909
+ '当 column 中设置了快速编辑且设置了立即保存,将使用此接口保存数据。'
910
+ }),
911
+
912
+ {
913
+ type: 'divider'
914
+ },
915
+
916
+ {
917
+ label: '默认消息提示',
918
+ type: 'combo',
919
+ name: 'messages',
920
+ multiLine: true,
921
+ description:
922
+ '覆盖默认消息提示,但如果 api 返回 msg 则会优先使用这个 msg',
923
+ items: [
924
+ {
925
+ label: '获取成功提示',
926
+ type: 'input-text',
927
+ name: 'fetchSuccess'
928
+ },
929
+
930
+ {
931
+ label: '获取失败提示',
932
+ type: 'input-text',
933
+ name: 'fetchFailed'
934
+ },
935
+
936
+ {
937
+ label: '保存顺序成功提示',
938
+ type: 'input-text',
939
+ name: 'saveOrderSuccess'
940
+ },
941
+
942
+ {
943
+ label: '保存顺序失败提示',
944
+ type: 'input-text',
945
+ name: 'saveOrderFailed'
946
+ },
947
+
948
+ {
949
+ label: '快速保存成功提示',
950
+ type: 'input-text',
951
+ name: 'quickSaveSuccess'
952
+ },
953
+
954
+ {
955
+ label: '快速保存失败提示',
956
+ type: 'input-text',
957
+ name: 'quickSaveFailed'
958
+ }
959
+ ]
960
+ }
961
+ ]
962
+ },
963
+
964
+ {
965
+ title: '外观',
966
+ body: [
967
+ {
968
+ label: '内容展示模式',
969
+ name: 'mode',
970
+ type: 'button-group-select',
971
+ size: 'xs',
972
+ pipeIn: (value: any, values: any) =>
973
+ (value === 'grid' ? 'cards' : value) ?? 'table',
974
+ onChange: (value: any, oldValue: any, model: any, form: any) => {
975
+ let headerHasColumnsToggle = form?.data?.headerToolbar?.some(
976
+ (item: any) => item.type === 'columns-toggler'
977
+ );
978
+ let headerToolbar = cloneDeep(form?.data?.headerToolbar);
979
+ let columnsToggler;
980
+ if (value !== 'table' && oldValue === 'table') {
981
+ // 存储table模式是否有 columns-toggler
982
+ columnsToggler = headerToolbar?.find(
983
+ (item: any) => item.type === 'columns-toggler'
984
+ ) || {
985
+ type: 'columns-toggler',
986
+ align: 'right'
987
+ };
988
+ form.setValues({
989
+ __headerHasColumnsToggler: headerHasColumnsToggle
990
+ });
991
+ }
992
+ headerToolbar =
993
+ value === 'table'
994
+ ? headerToolbar
995
+ : headerToolbar?.filter(
996
+ (item: any) => item.type !== 'columns-toggler'
997
+ );
998
+ if (value === 'table') {
999
+ if (
1000
+ form?.data?.__headerHasColumnsToggler &&
1001
+ !headerHasColumnsToggle
1002
+ ) {
1003
+ headerToolbar?.push(
1004
+ form?.data?.__cacheColumnsToggler || {
1005
+ type: 'columns-toggler',
1006
+ align: 'right'
1007
+ }
1008
+ );
1009
+ }
1010
+ form.setValues({
1011
+ headerToolbar,
1012
+ columns: form.data.__columns || [
1013
+ {
1014
+ label: 'ID',
1015
+ name: 'id'
1016
+ },
1017
+ {
1018
+ label: '列信息',
1019
+ name: 'name'
1020
+ }
1021
+ ],
1022
+ __headerHasColumnsToggler: headerHasColumnsToggle,
1023
+ __card: form.data.card || form.data.__card,
1024
+ __listItem: form.data.listItem || form.data.__listItem
1025
+ });
1026
+ form.deleteValueByName('card');
1027
+ form.deleteValueByName('listItem');
1028
+ } else if (value === 'cards') {
1029
+ oldValue === 'table' &&
1030
+ form.setValues({
1031
+ __cacheColumnsToggler: columnsToggler
1032
+ });
1033
+ form.setValues({
1034
+ headerToolbar,
1035
+ card: form.data.__card || {
1036
+ type: 'card',
1037
+ header: {
1038
+ title: '标题',
1039
+ subTitle: '副标题'
1040
+ },
1041
+ body: [
1042
+ {
1043
+ name: 'a',
1044
+ label: 'A'
1045
+ },
1046
+ {
1047
+ name: 'b',
1048
+ label: 'B'
1049
+ }
1050
+ ],
1051
+ actions: [
1052
+ {
1053
+ label: '详情',
1054
+ type: 'button'
1055
+ }
1056
+ ]
1057
+ },
1058
+ __columns: form.data.columns || form.data.__columns,
1059
+ __listItem: form.data.listItem || form.data.__listItem
1060
+ });
1061
+ form.deleteValueByName('columns');
1062
+ form.deleteValueByName('listItem');
1063
+ } else {
1064
+ oldValue === 'table' &&
1065
+ form.setValues({
1066
+ __cacheColumnsToggler: columnsToggler
1067
+ });
1068
+ form.setValues({
1069
+ headerToolbar,
1070
+ listItem: form.data.__listItem || {
1071
+ body: [
1072
+ {
1073
+ type: 'tpl',
1074
+ tpl: '简单的展示数据:$a $b'
1075
+ }
1076
+ ],
1077
+ actions: [
1078
+ {
1079
+ icon: 'fa fa-eye',
1080
+ type: 'button'
1081
+ }
1082
+ ]
1083
+ },
1084
+ __columns: form.data.columns || form.data.__columns,
1085
+ __card: form.data.card || form.data.__card
1086
+ });
1087
+ form.deleteValueByName('columns');
1088
+ form.deleteValueByName('card');
1089
+ }
1090
+ },
1091
+ options: [
1092
+ {
1093
+ value: 'table',
1094
+ label: '表格'
1095
+ },
1096
+
1097
+ {
1098
+ value: 'cards',
1099
+ label: '卡片'
1100
+ },
1101
+
1102
+ {
1103
+ value: 'list',
1104
+ label: '列表'
1105
+ }
1106
+ ]
1107
+ },
1108
+
1109
+ {
1110
+ name: 'headerToolbar',
1111
+ type: 'combo',
1112
+ draggable: true,
1113
+ draggableTip: '',
1114
+ descrition: '非内建内容请在预览区选中后编辑',
1115
+ label: '顶部工具栏配置',
1116
+ pipeIn: (value: any) => {
1117
+ if (!Array.isArray(value)) {
1118
+ value = value ? [value] : ['bulkActions'];
1119
+ }
1120
+ return value.map((item: any) => {
1121
+ let type = item.type;
1122
+
1123
+ if (
1124
+ typeof item === 'string' &&
1125
+ ~[
1126
+ 'bulkActions',
1127
+ 'bulk-actions',
1128
+ 'pagination',
1129
+ 'statistics',
1130
+ 'switch-per-page',
1131
+ 'filter-toggler',
1132
+ 'load-more',
1133
+ 'export-csv',
1134
+ 'export-excel'
1135
+ ].indexOf(item)
1136
+ ) {
1137
+ type = item === 'bulkActions' ? 'bulk-actions' : item;
1138
+ item = {type};
1139
+ } else if (typeof item === 'string') {
1140
+ type = 'tpl';
1141
+ item =
1142
+ typeof item === 'string' ? {type: 'tpl', tpl: item} : item;
1143
+ }
1144
+ return {
1145
+ type,
1146
+ ...item
1147
+ };
1148
+ });
1149
+ },
1150
+ pipeOut: (value: any) => {
1151
+ if (Array.isArray(value)) {
1152
+ return value.map((item: any) => {
1153
+ if (item.type === 'button') {
1154
+ return JSONPipeIn({
1155
+ label: '按钮',
1156
+ type: 'button',
1157
+ ...item
1158
+ });
1159
+ } else if (item.type === 'tpl') {
1160
+ return JSONPipeIn({
1161
+ type: 'tpl',
1162
+ tpl: '内容',
1163
+ ...item
1164
+ });
1165
+ }
1166
+
1167
+ return item;
1168
+ });
1169
+ }
1170
+
1171
+ return [];
1172
+ },
1173
+ scaffold: {
1174
+ type: 'tpl',
1175
+ tpl: '内容'
1176
+ },
1177
+ multiple: true,
1178
+ items: [
1179
+ {
1180
+ type: 'select',
1181
+ name: 'type',
1182
+ columnClassName: 'w-ssm',
1183
+ options: [
1184
+ {
1185
+ value: 'bulk-actions',
1186
+ label: '操作栏'
1187
+ },
1188
+
1189
+ {
1190
+ value: 'pagination',
1191
+ label: '分页'
1192
+ },
1193
+
1194
+ {
1195
+ value: 'statistics',
1196
+ label: '统计数据'
1197
+ },
1198
+
1199
+ {
1200
+ value: 'switch-per-page',
1201
+ label: '切换页码'
1202
+ },
1203
+
1204
+ {
1205
+ value: 'load-more',
1206
+ label: '加载更多'
1207
+ },
1208
+
1209
+ {
1210
+ value: 'export-csv',
1211
+ label: '导出 CSV'
1212
+ },
1213
+
1214
+ {
1215
+ value: 'export-excel',
1216
+ label: '导出 Excel'
1217
+ },
1218
+
1219
+ {
1220
+ value: 'columns-toggler',
1221
+ label: '列选择器',
1222
+ visibleOn: '!this.mode || this.mode === "table"'
1223
+ },
1224
+
1225
+ {
1226
+ value: 'filter-toggler',
1227
+ label: '查询条件切换'
1228
+ },
1229
+
1230
+ {
1231
+ value: 'drag-toggler',
1232
+ label: '拖拽切换'
1233
+ },
1234
+
1235
+ {
1236
+ value: 'check-all',
1237
+ label: '全选',
1238
+ hiddenOn: '!this.mode || this.mode === "table"'
1239
+ },
1240
+
1241
+ {
1242
+ value: 'tpl',
1243
+ label: '文本'
1244
+ },
1245
+
1246
+ {
1247
+ value: 'button',
1248
+ label: '按钮'
1249
+ }
1250
+ ]
1251
+ },
1252
+
1253
+ {
1254
+ name: 'align',
1255
+ placeholder: '对齐方式',
1256
+ type: 'select',
1257
+ size: 'xs',
1258
+ options: [
1259
+ {
1260
+ label: '左对齐',
1261
+ value: 'left'
1262
+ },
1263
+
1264
+ {
1265
+ label: '右对齐',
1266
+ value: 'right'
1267
+ }
1268
+ ]
1269
+ }
1270
+
1271
+ // {
1272
+ // type: 'remark',
1273
+ // content: '详情请在预览区域选中后进行编辑。',
1274
+ // trigger: ['click'],
1275
+ // rootClose: true,
1276
+ // placement: 'left',
1277
+ // visibleOn:
1278
+ // '!~["bulkActions", "drag-toggler", "check-all", "bulk-actions", "pagination", "statistics", "switch-per-page", "filter-toggler", "load-more"].indexOf(this.type)',
1279
+ // columnClassName: 'no-grow w-3x p-t-xs',
1280
+ // className: 'm-l-none'
1281
+ // }
1282
+ ]
1283
+ },
1284
+
1285
+ {
1286
+ name: 'footerToolbar',
1287
+ type: 'combo',
1288
+ draggable: true,
1289
+ draggableTip: '',
1290
+ descrition: '非内建内容请在预览区选中后编辑',
1291
+ label: '底部工具栏配置',
1292
+ pipeIn: (value: any) => {
1293
+ if (!Array.isArray(value)) {
1294
+ value = value ? [value] : ['statistics', 'pagination'];
1295
+ }
1296
+
1297
+ return value.map((item: any) => {
1298
+ let type = item.type;
1299
+
1300
+ if (
1301
+ typeof item === 'string' &&
1302
+ ~[
1303
+ 'bulkActions',
1304
+ 'bulk-actions',
1305
+ 'pagination',
1306
+ 'statistics',
1307
+ 'switch-per-page',
1308
+ 'filter-toggler',
1309
+ 'load-more',
1310
+ 'export-csv',
1311
+ 'export-excel'
1312
+ ].indexOf(item)
1313
+ ) {
1314
+ type = item === 'bulkActions' ? 'bulk-actions' : item;
1315
+ item = {type};
1316
+ } else if (typeof item === 'string') {
1317
+ type = 'tpl';
1318
+ item =
1319
+ typeof item === 'string' ? {type: 'tpl', tpl: item} : item;
1320
+ }
1321
+
1322
+ return {
1323
+ type,
1324
+ ...item
1325
+ };
1326
+ });
1327
+ },
1328
+ pipeOut: (value: any) => {
1329
+ if (Array.isArray(value)) {
1330
+ return value.map((item: any) => {
1331
+ if (item.type === 'button') {
1332
+ return JSONPipeIn({
1333
+ label: '按钮',
1334
+ type: 'button',
1335
+ ...item
1336
+ });
1337
+ } else if (item.type === 'tpl') {
1338
+ return JSONPipeIn({
1339
+ type: 'tpl',
1340
+ tpl: '内容',
1341
+ ...item
1342
+ });
1343
+ }
1344
+
1345
+ return item;
1346
+ });
1347
+ }
1348
+
1349
+ return [];
1350
+ },
1351
+ scaffold: {
1352
+ type: 'tpl',
1353
+ tpl: '内容'
1354
+ },
1355
+ multiple: true,
1356
+ items: [
1357
+ {
1358
+ type: 'select',
1359
+ name: 'type',
1360
+ columnClassName: 'w-ssm',
1361
+ options: [
1362
+ {
1363
+ value: 'bulk-actions',
1364
+ label: '操作栏'
1365
+ },
1366
+
1367
+ {
1368
+ value: 'pagination',
1369
+ label: '分页'
1370
+ },
1371
+
1372
+ {
1373
+ value: 'statistics',
1374
+ label: '统计数据'
1375
+ },
1376
+
1377
+ {
1378
+ value: 'switch-per-page',
1379
+ label: '切换页码'
1380
+ },
1381
+
1382
+ {
1383
+ value: 'load-more',
1384
+ label: '加载更多'
1385
+ },
1386
+
1387
+ {
1388
+ value: 'export-csv',
1389
+ label: '导出 CSV'
1390
+ },
1391
+
1392
+ {
1393
+ value: 'export-excel',
1394
+ label: '导出 Excel'
1395
+ },
1396
+
1397
+ {
1398
+ value: 'columns-toggler',
1399
+ label: '列选择器',
1400
+ hiddenOn: '["grid", "cards", "list"].indexOf(this.mode)'
1401
+ },
1402
+
1403
+ {
1404
+ value: 'filter-toggler',
1405
+ label: '查询条件切换'
1406
+ },
1407
+
1408
+ {
1409
+ value: 'drag-toggler',
1410
+ label: '拖拽切换'
1411
+ },
1412
+
1413
+ {
1414
+ value: 'check-all',
1415
+ label: '全选',
1416
+ hiddenOn: '!this.mode || this.mode === "table"'
1417
+ },
1418
+
1419
+ {
1420
+ value: 'tpl',
1421
+ label: '文本'
1422
+ },
1423
+
1424
+ {
1425
+ value: 'button',
1426
+ label: '按钮'
1427
+ }
1428
+ ]
1429
+ },
1430
+
1431
+ {
1432
+ name: 'align',
1433
+ placeholder: '对齐方式',
1434
+ size: 'xs',
1435
+ type: 'select',
1436
+ options: [
1437
+ {
1438
+ label: '左对齐',
1439
+ value: 'left'
1440
+ },
1441
+
1442
+ {
1443
+ label: '右对齐',
1444
+ value: 'right'
1445
+ }
1446
+ ]
1447
+ },
1448
+
1449
+ {
1450
+ type: 'remark',
1451
+ content: '详情请在预览区域选中后进行编辑。',
1452
+ trigger: ['click'],
1453
+ rootClose: true,
1454
+ placement: 'left',
1455
+ visibleOn:
1456
+ '!~["bulkActions", "drag-toggler", "check-all", "bulk-actions", "pagination", "statistics", "switch-per-page", "filter-toggler", "load-more", "export-csv", "export-excel"].indexOf(this.type)',
1457
+ columnClassName: 'no-grow w-3x p-t-xs',
1458
+ className: 'm-l-none'
1459
+ }
1460
+ ]
1461
+ },
1462
+
1463
+ getSchemaTpl('switch', {
1464
+ name: 'filterTogglable',
1465
+ label: '是否可显隐查询条件',
1466
+ visibleOn: 'data.filter'
1467
+ }),
1468
+
1469
+ getSchemaTpl('switch', {
1470
+ name: 'filterDefaultVisible',
1471
+ label: '查询条件默认是否可见',
1472
+ visibleOn: 'data.filter && data.filterTogglable',
1473
+ pipeIn: defaultValue(true)
1474
+ }),
1475
+
1476
+ getSchemaTpl('switch', {
1477
+ name: 'hideQuickSaveBtn',
1478
+ label: '隐藏顶部快速保存提示'
1479
+ }),
1480
+
1481
+ getSchemaTpl('switch', {
1482
+ name: 'alwaysShowPagination',
1483
+ label: '是否总是显示分页'
1484
+ }),
1485
+
1486
+ getSchemaTpl('switch', {
1487
+ name: 'hideCheckToggler',
1488
+ label: '隐藏选择按钮',
1489
+ visibleOn: 'data.checkOnItemClick'
1490
+ }),
1491
+
1492
+ getSchemaTpl('className'),
1493
+
1494
+ getSchemaTpl('className', {
1495
+ name: 'bodyClassName',
1496
+ label: '内容 CSS 类名'
1497
+ })
1498
+ ]
1499
+ },
1500
+
1501
+ {
1502
+ title: '其他',
1503
+ body: [
1504
+ getSchemaTpl('ref'),
1505
+ {
1506
+ name: 'source',
1507
+ label: '数据源',
1508
+ type: 'input-text',
1509
+ description:
1510
+ '不填写,默认读取接口返回的 items 或者 rows 属性,如果是别的,请在此设置,如: <code>\\${xxxx}</code>'
1511
+ },
1512
+
1513
+ {
1514
+ name: 'perPage',
1515
+ label: '每页数量',
1516
+ type: 'input-number'
1517
+ },
1518
+
1519
+ getSchemaTpl('switch', {
1520
+ name: 'keepItemSelectionOnPageChange',
1521
+ label: '翻页时保留选择'
1522
+ }),
1523
+
1524
+ {
1525
+ name: 'maxKeepItemSelectionLength',
1526
+ label: '最大选择数量',
1527
+ type: 'input-number',
1528
+ mode: 'inline',
1529
+ className: 'block'
1530
+ },
1531
+
1532
+ {
1533
+ name: 'pageField',
1534
+ label: '页码字段名',
1535
+ type: 'input-text',
1536
+ pipeIn: defaultValue('page')
1537
+ },
1538
+
1539
+ {
1540
+ name: 'perPageField',
1541
+ label: '分页步长字段名',
1542
+ type: 'input-text',
1543
+ pipeIn: defaultValue('perPage')
1544
+ },
1545
+
1546
+ {
1547
+ name: 'orderField',
1548
+ label: '排序权重字段',
1549
+ type: 'input-text',
1550
+ labelRemark: {
1551
+ className: 'm-l-xs',
1552
+ trigger: 'click',
1553
+ rootClose: true,
1554
+ content:
1555
+ '设置用来确定位置的字段名,设置后新的顺序将被赋值到该字段中。',
1556
+ placement: 'left'
1557
+ }
1558
+ },
1559
+
1560
+ {
1561
+ name: 'perPageAvailable',
1562
+ label: '切换每页数',
1563
+ type: 'input-array',
1564
+ hiddenOn: 'data.loadDataOnce',
1565
+ items: {
1566
+ type: 'input-number',
1567
+ required: true
1568
+ },
1569
+ value: [10]
1570
+ },
1571
+
1572
+ getSchemaTpl('name'),
1573
+
1574
+ {
1575
+ name: 'itemCheckableOn',
1576
+ type: 'input-text',
1577
+ label: '配置单条可选中的表达式',
1578
+ description: '请使用 js 表达式,不设置的话每条都可选中。',
1579
+ visibleOn:
1580
+ 'data.bulkActions && data.bulkActions.length || data.pickerMode'
1581
+ },
1582
+
1583
+ getSchemaTpl('switch', {
1584
+ name: 'checkOnItemClick',
1585
+ label: '开启单条点击整个区域选中',
1586
+ visibleOn:
1587
+ 'data.bulkActions && data.bulkActions.length || data.pickerMode'
1588
+ }),
1589
+
1590
+ getSchemaTpl('switch', {
1591
+ name: 'autoJumpToTopOnPagerChange',
1592
+ label: '自动跳顶部',
1593
+ description: '当切分页的时候,是否自动跳顶部'
1594
+ }),
1595
+
1596
+ getSchemaTpl('switch', {
1597
+ name: 'syncResponse2Query',
1598
+ label: '同步查询条件',
1599
+ description: '查询后将返回的数据同步到查询条件上'
1600
+ })
1601
+ ]
1602
+ }
1603
+ ]);
1604
+ };
1605
+
1606
+ handleBulkActionEdit(id: string, index: number) {
1607
+ const store = this.manager.store;
1608
+ const schema = store.getSchema(id);
1609
+ const action = schema?.bulkActions[index];
1610
+
1611
+ if (action && action.$$id) {
1612
+ store.setActiveId(action.$$id);
1613
+ }
1614
+ }
1615
+ handleItemActionEdit(id: string, index: number) {
1616
+ const store = this.manager.store;
1617
+ const schema = store.getSchema(id);
1618
+ const action = schema?.itemActions[index];
1619
+
1620
+ if (action && action.$$id) {
1621
+ store.setActiveId(action.$$id);
1622
+ }
1623
+ }
1624
+
1625
+ wrapperProps = {
1626
+ affixHeader: false
1627
+ };
1628
+
1629
+ /**
1630
+ * 默认什么组件都加入的子组件里面,子类里面可以复写这个改变行为。
1631
+ * @param context
1632
+ * @param renderers
1633
+ */
1634
+ buildSubRenderers(
1635
+ context: RendererEventContext,
1636
+ renderers: Array<SubRendererInfo>
1637
+ ): BasicSubRenderInfo | Array<BasicSubRenderInfo> | void {
1638
+ const plugin: PluginInterface = this;
1639
+ if (plugin.name && plugin.description) {
1640
+ return {
1641
+ name: plugin.name,
1642
+ icon: plugin.icon,
1643
+ description: plugin.description,
1644
+ previewSchema: plugin.previewSchema,
1645
+ tags: plugin.tags,
1646
+ docLink: plugin.docLink,
1647
+ type: plugin.type,
1648
+ scaffold: plugin.scaffold,
1649
+ disabledRendererPlugin: plugin.disabledRendererPlugin,
1650
+ isBaseComponent: plugin.isBaseComponent,
1651
+ scaffoldForm: this.scaffoldForm,
1652
+ rendererName: plugin.rendererName
1653
+ };
1654
+ }
1655
+ }
1656
+
1657
+ getRendererInfo(
1658
+ context: RendererInfoResolveEventContext
1659
+ ): BasicRendererInfo | void {
1660
+ const info = super.getRendererInfo(context);
1661
+ if (info) {
1662
+ info.scaffoldForm = this.scaffoldForm;
1663
+ }
1664
+ return info;
1665
+ }
1666
+
1667
+ renderEditableComponents(props: any) {
1668
+ const render = props.render;
1669
+ const bulkActions = props.bulkActions;
1670
+ const itemActions = props.itemActions;
1671
+ const doms: Array<JSX.Element> = [];
1672
+
1673
+ if (Array.isArray(bulkActions) && bulkActions.length) {
1674
+ doms.push(
1675
+ <div key="bulkActions" className="ae-EditableRender">
1676
+ <div className="ae-EditableRender-title">批量操作</div>
1677
+ <div className="ae-EditableRender-body">
1678
+ {bulkActions.map(action =>
1679
+ render(
1680
+ 'bulk-action',
1681
+ {
1682
+ type: 'button',
1683
+ size: 'sm',
1684
+ ...action
1685
+ },
1686
+ {
1687
+ key: action.$$id
1688
+ }
1689
+ )
1690
+ )}
1691
+ </div>
1692
+ </div>
1693
+ );
1694
+ }
1695
+
1696
+ if (Array.isArray(itemActions) && itemActions.length) {
1697
+ doms.push(
1698
+ <div key="itemActions" className="ae-EditableRender">
1699
+ <div className="ae-EditableRender-title">单条操作</div>
1700
+ <div className="ae-EditableRender-body">
1701
+ {itemActions.map(action =>
1702
+ render(
1703
+ 'bulk-action',
1704
+ {
1705
+ type: 'button',
1706
+ size: 'sm',
1707
+ ...action
1708
+ },
1709
+ {
1710
+ key: action.$$id
1711
+ }
1712
+ )
1713
+ )}
1714
+ </div>
1715
+ </div>
1716
+ );
1717
+ }
1718
+
1719
+ if (!doms.length) {
1720
+ return null;
1721
+ }
1722
+
1723
+ return (
1724
+ <div className="ae-EditableRenderers">
1725
+ <div className="ae-EditableRenderers-tip">「增删改查」编辑辅助区</div>
1726
+ {doms}
1727
+ </div>
1728
+ );
1729
+ }
1730
+
1731
+ renderRenderer(props: any) {
1732
+ const $$editor = props.$$editor;
1733
+ const renderer = $$editor.renderer;
1734
+ return (
1735
+ <div className="ae-CRUDEditor">
1736
+ {this.renderEditableComponents(props)}
1737
+ <renderer.component {...props} />
1738
+ </div>
1739
+ );
1740
+ }
1741
+
1742
+ filterProps(props: any) {
1743
+ if (props.pickerMode) {
1744
+ props.options = props.data.options;
1745
+ }
1746
+
1747
+ return props;
1748
+ }
1749
+
1750
+ afterUpdate(event: PluginEvent<ChangeEventContext>) {
1751
+ const context = event.context;
1752
+
1753
+ // mode 内容形式变化,需要重新构建面板。
1754
+ if (
1755
+ context.info.plugin === this &&
1756
+ context.diff?.some(change => change.path?.join('.') === 'mode')
1757
+ ) {
1758
+ setTimeout(() => {
1759
+ this.manager.buildPanels();
1760
+ this.manager.buildToolbars();
1761
+ }, 20);
1762
+ }
1763
+ }
1764
+
1765
+ async buildDataSchemas(node: EditorNodeType, region?: EditorNodeType) {
1766
+ const child: EditorNodeType = node.children.find(
1767
+ item => !!~['table', 'table2', 'cards', 'list'].indexOf(item.type)
1768
+ );
1769
+
1770
+ if (!child?.info?.plugin?.buildDataSchemas) {
1771
+ return;
1772
+ }
1773
+ return child.info.plugin.buildDataSchemas(child);
1774
+ }
1775
+ }
1776
+
1777
+ registerEditorPlugin(CRUDPlugin);