amis-editor 4.2.0-beta.3 → 5.1.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (221) hide show
  1. package/dist/6dbcbb49b6fd405190a9.png +0 -0
  2. package/dist/component/Editor.d.ts +16 -0
  3. package/dist/component/RegionWrapper.d.ts +10 -0
  4. package/dist/component/ScaffoldModal.d.ts +1 -1
  5. package/dist/component/VRenderer.d.ts +10 -0
  6. package/dist/component/control/APIControl.d.ts +1158 -0
  7. package/dist/component/control/ActionAPIControl.d.ts +1158 -0
  8. package/dist/component/control/BadgeControl.d.ts +133 -0
  9. package/dist/component/control/BaseControl.d.ts +248 -0
  10. package/dist/component/control/DataBindingControl.d.ts +14 -0
  11. package/dist/component/control/DataPickerControl.d.ts +13 -0
  12. package/dist/component/control/DateShortCutControl.d.ts +83 -0
  13. package/dist/component/control/FormulaControl.d.ts +51 -0
  14. package/dist/component/{Control → control}/OptionControl.d.ts +23 -34
  15. package/dist/component/{Control → control}/PopoverEdit.d.ts +0 -0
  16. package/dist/component/control/StatusControl.d.ts +39 -0
  17. package/dist/component/control/SwitchMoreControl.d.ts +224 -0
  18. package/dist/component/control/ValidationControl.d.ts +65 -0
  19. package/dist/component/control/ValidationItem.d.ts +46 -0
  20. package/dist/component/control/style-control/Background.d.ts +17 -0
  21. package/dist/component/control/style-control/Border.d.ts +18 -0
  22. package/dist/component/control/style-control/BoxModel.d.ts +17 -0
  23. package/dist/component/control/style-control/BoxShadow.d.ts +18 -0
  24. package/dist/component/control/style-control/Display.d.ts +14 -0
  25. package/dist/component/control/style-control/Font.d.ts +16 -0
  26. package/dist/component/control/style-control/font-family.d.ts +11 -0
  27. package/dist/component/control/style-control/transformation.d.ts +29 -0
  28. package/dist/component/control/style-control/types.d.ts +8 -0
  29. package/dist/component/schemaTpl.d.ts +8 -0
  30. package/dist/component/validator.d.ts +62 -0
  31. package/dist/dnd/index.d.ts +1 -1
  32. package/dist/event-action/action-config-panel.d.ts +8 -0
  33. package/dist/event-action/actions.d.ts +3 -0
  34. package/dist/event-action/comp-action-select.d.ts +11 -0
  35. package/dist/event-action/config.d.ts +13 -0
  36. package/dist/event-action/index.d.ts +459 -0
  37. package/dist/event-action/schema.d.ts +32 -0
  38. package/dist/exports.min.js +1 -1
  39. package/dist/index.d.ts +23 -5
  40. package/dist/index.min.js +1 -1
  41. package/dist/manager.d.ts +46 -1
  42. package/dist/plugin/Alert.d.ts +4 -2
  43. package/dist/plugin/Button.d.ts +5 -1
  44. package/dist/plugin/ButtonGroup.d.ts +13 -34
  45. package/dist/plugin/ButtonToolbar.d.ts +4 -10
  46. package/dist/plugin/CRUD.d.ts +2 -0
  47. package/dist/plugin/Chart.d.ts +2 -0
  48. package/dist/plugin/Collapse.d.ts +1 -0
  49. package/dist/plugin/CollapseGroup.d.ts +28 -4
  50. package/dist/plugin/Container.d.ts +2 -1
  51. package/dist/plugin/Dialog.d.ts +12 -2
  52. package/dist/plugin/Drawer.d.ts +12 -2
  53. package/dist/plugin/DropDownButton.d.ts +11 -11
  54. package/dist/plugin/Form/ButtonGroupSelect.d.ts +7 -2
  55. package/dist/plugin/Form/ButtonToolbar.d.ts +8 -7
  56. package/dist/plugin/Form/ChainedSelect.d.ts +3 -0
  57. package/dist/plugin/Form/Checkbox.d.ts +7 -2
  58. package/dist/plugin/Form/Checkboxes.d.ts +8 -2
  59. package/dist/plugin/Form/CodeEditor.d.ts +7 -22
  60. package/dist/plugin/Form/Combo.d.ts +3 -0
  61. package/dist/plugin/Form/Control.d.ts +6 -2
  62. package/dist/plugin/Form/DiffEditor.d.ts +7 -1
  63. package/dist/plugin/Form/Form.d.ts +6 -0
  64. package/dist/plugin/Form/Formula.d.ts +1 -25
  65. package/dist/plugin/Form/InputDate.d.ts +8 -2
  66. package/dist/plugin/Form/InputDateRange.d.ts +8 -2
  67. package/dist/plugin/Form/InputDateTime.d.ts +4 -4
  68. package/dist/plugin/Form/InputDateTimeRange.d.ts +4 -4
  69. package/dist/plugin/Form/InputEmail.d.ts +1 -0
  70. package/dist/plugin/Form/InputExcel.d.ts +6 -41
  71. package/dist/plugin/Form/InputFile.d.ts +7 -3
  72. package/dist/plugin/Form/InputKV.d.ts +6 -0
  73. package/dist/plugin/Form/InputMonth.d.ts +1 -0
  74. package/dist/plugin/Form/InputMonthRange.d.ts +4 -4
  75. package/dist/plugin/Form/InputPassword.d.ts +1 -0
  76. package/dist/plugin/Form/InputQuarter.d.ts +1 -0
  77. package/dist/plugin/Form/InputQuarterRange.d.ts +4 -4
  78. package/dist/plugin/Form/InputRange.d.ts +3 -0
  79. package/dist/plugin/Form/InputRating.d.ts +9 -3
  80. package/dist/plugin/Form/InputText.d.ts +24 -2
  81. package/dist/plugin/Form/InputTime.d.ts +3 -3
  82. package/dist/plugin/Form/InputTimeRange.d.ts +20 -0
  83. package/dist/plugin/Form/InputTree.d.ts +6 -2
  84. package/dist/plugin/Form/InputURL.d.ts +1 -0
  85. package/dist/plugin/Form/InputYear.d.ts +1 -0
  86. package/dist/plugin/Form/InputYearRange.d.ts +20 -0
  87. package/dist/plugin/Form/ListSelect.d.ts +6 -2
  88. package/dist/plugin/Form/LocationPicker.d.ts +1 -31
  89. package/dist/plugin/Form/NestedSelect.d.ts +5 -2
  90. package/dist/plugin/Form/Radios.d.ts +7 -2
  91. package/dist/plugin/Form/Select.d.ts +7 -2
  92. package/dist/plugin/Form/Switch.d.ts +7 -2
  93. package/dist/plugin/Form/TabsTransfer.d.ts +5 -2
  94. package/dist/plugin/Form/Textarea.d.ts +7 -1
  95. package/dist/plugin/Form/Transfer.d.ts +5 -2
  96. package/dist/plugin/Form/TreeSelect.d.ts +6 -2
  97. package/dist/plugin/IFrame.d.ts +2 -2
  98. package/dist/plugin/Nav.d.ts +1 -116
  99. package/dist/plugin/Others/Action.d.ts +5 -1
  100. package/dist/plugin/Page.d.ts +5 -2
  101. package/dist/plugin/Progress.d.ts +5 -1
  102. package/dist/plugin/Table.d.ts +2 -0
  103. package/dist/plugin/Tabs.d.ts +33 -2
  104. package/dist/plugin/TooltipWrapper.d.ts +10 -0
  105. package/dist/plugin/Tpl.d.ts +2 -1
  106. package/dist/plugin/Wizard.d.ts +4 -1
  107. package/dist/plugin.d.ts +37 -1
  108. package/dist/store/editor.d.ts +55 -28
  109. package/dist/store/node.d.ts +16 -0
  110. package/dist/style.css +1 -1
  111. package/dist/util.d.ts +36 -3
  112. package/package.json +14 -8
  113. package/src/component/schemaTpl.tsx +1198 -474
  114. package/src/plugin/.DS_Store +0 -0
  115. package/src/plugin/Alert.tsx +69 -48
  116. package/src/plugin/AnchorNav.tsx +1 -0
  117. package/src/plugin/Audio.tsx +9 -15
  118. package/src/plugin/Avatar.tsx +2 -1
  119. package/src/plugin/Breadcrumb.tsx +2 -1
  120. package/src/plugin/Button.tsx +257 -188
  121. package/src/plugin/ButtonGroup.tsx +99 -38
  122. package/src/plugin/ButtonToolbar.tsx +7 -13
  123. package/src/plugin/CRUD.tsx +77 -135
  124. package/src/plugin/Card.tsx +1 -0
  125. package/src/plugin/Cards.tsx +8 -14
  126. package/src/plugin/Carousel.tsx +1 -1
  127. package/src/plugin/Chart.tsx +26 -14
  128. package/src/plugin/Collapse.tsx +78 -78
  129. package/src/plugin/CollapseGroup.tsx +165 -83
  130. package/src/plugin/Container.tsx +59 -6
  131. package/src/plugin/Custom.tsx +2 -8
  132. package/src/plugin/CustomRegion.tsx +4 -3
  133. package/src/plugin/Dialog.tsx +55 -24
  134. package/src/plugin/Drawer.tsx +65 -35
  135. package/src/plugin/DropDownButton.tsx +95 -79
  136. package/src/plugin/Flex.tsx +123 -65
  137. package/src/plugin/Form/ButtonGroupSelect.tsx +114 -26
  138. package/src/plugin/Form/ButtonToolbar.tsx +62 -55
  139. package/src/plugin/Form/ChainedSelect.tsx +45 -0
  140. package/src/plugin/Form/Checkbox.tsx +122 -33
  141. package/src/plugin/Form/Checkboxes.tsx +154 -87
  142. package/src/plugin/Form/CodeEditor.tsx +163 -34
  143. package/src/plugin/Form/Combo.tsx +104 -65
  144. package/src/plugin/Form/Control.tsx +16 -70
  145. package/src/plugin/Form/DiffEditor.tsx +158 -54
  146. package/src/plugin/Form/FieldSet.tsx +6 -11
  147. package/src/plugin/Form/Form.tsx +277 -70
  148. package/src/plugin/Form/Formula.tsx +8 -14
  149. package/src/plugin/Form/InputArray.tsx +7 -16
  150. package/src/plugin/Form/InputCity.tsx +1 -1
  151. package/src/plugin/Form/InputDate.tsx +344 -121
  152. package/src/plugin/Form/InputDateRange.tsx +303 -161
  153. package/src/plugin/Form/InputDateTime.tsx +6 -150
  154. package/src/plugin/Form/InputDateTimeRange.tsx +7 -187
  155. package/src/plugin/Form/InputEmail.tsx +1 -0
  156. package/src/plugin/Form/InputExcel.tsx +70 -27
  157. package/src/plugin/Form/InputFile.tsx +326 -152
  158. package/src/plugin/Form/InputImage.tsx +1 -1
  159. package/src/plugin/Form/InputKV.tsx +61 -0
  160. package/src/plugin/Form/InputMonth.tsx +3 -1
  161. package/src/plugin/Form/InputMonthRange.tsx +6 -160
  162. package/src/plugin/Form/InputNumber.tsx +1 -1
  163. package/src/plugin/Form/InputPassword.tsx +2 -0
  164. package/src/plugin/Form/InputQuarter.tsx +3 -1
  165. package/src/plugin/Form/InputQuarterRange.tsx +6 -160
  166. package/src/plugin/Form/InputRange.tsx +74 -4
  167. package/src/plugin/Form/InputRating.tsx +347 -35
  168. package/src/plugin/Form/InputRichText.tsx +2 -3
  169. package/src/plugin/Form/InputTable.tsx +33 -49
  170. package/src/plugin/Form/InputTag.tsx +1 -1
  171. package/src/plugin/Form/InputText.tsx +310 -132
  172. package/src/plugin/Form/InputTime.tsx +4 -53
  173. package/src/plugin/Form/InputTimeRange.tsx +41 -0
  174. package/src/plugin/Form/InputTree.tsx +196 -46
  175. package/src/plugin/Form/InputURL.tsx +2 -0
  176. package/src/plugin/Form/InputYear.tsx +2 -0
  177. package/src/plugin/Form/InputYearRange.tsx +41 -0
  178. package/src/plugin/Form/Item.tsx +17 -18
  179. package/src/plugin/Form/ListSelect.tsx +75 -20
  180. package/src/plugin/Form/LocationPicker.tsx +2 -7
  181. package/src/plugin/Form/MatrixCheckboxes.tsx +1 -1
  182. package/src/plugin/Form/NestedSelect.tsx +110 -43
  183. package/src/plugin/Form/Picker.tsx +2 -5
  184. package/src/plugin/Form/Radios.tsx +122 -52
  185. package/src/plugin/Form/Select.tsx +239 -168
  186. package/src/plugin/Form/Static.tsx +1 -1
  187. package/src/plugin/Form/Switch.tsx +170 -58
  188. package/src/plugin/Form/TabsTransfer.tsx +175 -79
  189. package/src/plugin/Form/Textarea.tsx +146 -36
  190. package/src/plugin/Form/Transfer.tsx +295 -233
  191. package/src/plugin/Form/TreeSelect.tsx +287 -146
  192. package/src/plugin/Grid.tsx +340 -312
  193. package/src/plugin/HBox.tsx +1 -0
  194. package/src/plugin/IFrame.tsx +21 -12
  195. package/src/plugin/Image.tsx +7 -12
  196. package/src/plugin/Images.tsx +7 -12
  197. package/src/plugin/Link.tsx +6 -12
  198. package/src/plugin/List.tsx +6 -10
  199. package/src/plugin/ListItem.tsx +1 -0
  200. package/src/plugin/Nav.tsx +7 -9
  201. package/src/plugin/Others/Action.tsx +16 -10
  202. package/src/plugin/Others/BasicToolbar.tsx +4 -1
  203. package/src/plugin/Others/TableCell.tsx +19 -39
  204. package/src/plugin/Page.tsx +315 -229
  205. package/src/plugin/Panel.tsx +6 -7
  206. package/src/plugin/Plain.tsx +3 -6
  207. package/src/plugin/Progress.tsx +234 -94
  208. package/src/plugin/Service.tsx +10 -6
  209. package/src/plugin/Table.tsx +49 -20
  210. package/src/plugin/TableView.tsx +212 -106
  211. package/src/plugin/Tabs.tsx +306 -146
  212. package/src/plugin/TooltipWrapper.tsx +231 -135
  213. package/src/plugin/Tpl.tsx +68 -52
  214. package/src/plugin/Video.tsx +9 -20
  215. package/src/plugin/Wizard.tsx +537 -336
  216. package/src/plugin/Wrapper.tsx +82 -61
  217. package/src/plugin.ts +66 -4
  218. package/static/empty.png +0 -0
  219. package/dist/component/Control/APIControl.d.ts +0 -504
  220. package/dist/component/Control/ValidationControl.d.ts +0 -30
  221. package/dist/component/remarkTpl.d.ts +0 -150
@@ -8,6 +8,9 @@ import {
8
8
  ScaffoldForm
9
9
  } from '../../plugin';
10
10
  import {defaultValue, getSchemaTpl} from '../../component/schemaTpl';
11
+ import {getEventControlConfig, jsonToJsonSchema} from '../../util';
12
+ import {EditorNodeType} from '../../store/node';
13
+ import {RendererAction, RendererEvent} from '../../event-action';
11
14
  import {setVariable} from 'amis-core';
12
15
 
13
16
  // 用于脚手架的常用表单控件
@@ -204,6 +207,174 @@ export class FormPlugin extends BasePlugin {
204
207
  ];
205
208
 
206
209
  panelTitle = '表单';
210
+
211
+ // 事件定义
212
+ events: RendererEvent[] = [
213
+ {
214
+ eventName: 'inited',
215
+ eventLabel: '初始化完成',
216
+ description: '远程初始化接口请求成功时触发',
217
+ // 表单数据为表单变量
218
+ dataSchema: [
219
+ {
220
+ type: 'object',
221
+ properties: {
222
+ 'event.data': {
223
+ type: 'object',
224
+ title: 'initApi 远程请求返回的初始化数据'
225
+ }
226
+ }
227
+ }
228
+ ]
229
+ },
230
+ {
231
+ eventName: 'change',
232
+ eventLabel: '数值变化',
233
+ description: '表单值变化时触发',
234
+ dataSchema: [
235
+ {
236
+ type: 'object',
237
+ properties: {
238
+ 'event.data': {
239
+ type: 'object',
240
+ title: '当前表单数据'
241
+ }
242
+ }
243
+ }
244
+ ]
245
+ },
246
+ {
247
+ eventName: 'formItemValidateSucc',
248
+ eventLabel: '表单项校验成功',
249
+ description: '表单项校验成功后触发',
250
+ dataSchema: [
251
+ {
252
+ type: 'object',
253
+ properties: {
254
+ 'event.data': {
255
+ type: 'object',
256
+ title: '当前表单数据'
257
+ }
258
+ }
259
+ }
260
+ ]
261
+ },
262
+ {
263
+ eventName: 'formItemValidateError',
264
+ eventLabel: '表单项校验失败',
265
+ description: '表单项校验失败后触发',
266
+ dataSchema: [
267
+ {
268
+ type: 'object',
269
+ properties: {
270
+ 'event.data': {
271
+ type: 'object',
272
+ title: '当前表单数据'
273
+ }
274
+ }
275
+ }
276
+ ]
277
+ },
278
+ {
279
+ eventName: 'validateSucc',
280
+ eventLabel: '表单校验成功',
281
+ description: '表单校验成功后触发',
282
+ dataSchema: [
283
+ {
284
+ type: 'object',
285
+ properties: {
286
+ 'event.data': {
287
+ type: 'object',
288
+ title: '当前表单数据'
289
+ }
290
+ }
291
+ }
292
+ ]
293
+ },
294
+ {
295
+ eventName: 'validateError',
296
+ eventLabel: '表单校验失败',
297
+ description: '表单校验失败后触发',
298
+ dataSchema: [
299
+ {
300
+ type: 'object',
301
+ properties: {
302
+ 'event.data': {
303
+ type: 'object',
304
+ title: '当前表单数据'
305
+ }
306
+ }
307
+ }
308
+ ]
309
+ },
310
+ {
311
+ eventName: 'submitSucc',
312
+ eventLabel: '提交成功',
313
+ description: '表单提交请求成功后触发',
314
+ dataSchema: [
315
+ {
316
+ type: 'object',
317
+ properties: {
318
+ 'event.data.result': {
319
+ type: 'object',
320
+ title: '提交成功后返回的数据'
321
+ }
322
+ }
323
+ }
324
+ ]
325
+ },
326
+ {
327
+ eventName: 'submitFail',
328
+ eventLabel: '提交失败',
329
+ description: '表单提交请求失败后触发',
330
+ dataSchema: [
331
+ {
332
+ type: 'object',
333
+ properties: {
334
+ 'event.data.error': {
335
+ type: 'object',
336
+ title: '提交失败后返回的错误信息'
337
+ }
338
+ }
339
+ }
340
+ ]
341
+ }
342
+ ];
343
+
344
+ // 动作定义
345
+ actions: RendererAction[] = [
346
+ {
347
+ actionLabel: '提交表单',
348
+ actionType: 'submit',
349
+ description: '触发表单提交'
350
+ },
351
+ {
352
+ actionLabel: '重置表单',
353
+ actionType: 'reset',
354
+ description: '触发表单重置'
355
+ },
356
+ {
357
+ actionLabel: '清空表单',
358
+ actionType: 'clear',
359
+ description: '触发表单清空'
360
+ },
361
+ {
362
+ actionLabel: '校验表单',
363
+ actionType: 'validate',
364
+ description: '触发表单校验'
365
+ },
366
+ {
367
+ actionLabel: '重新加载',
368
+ actionType: 'reload',
369
+ description: '触发组件数据刷新并重新渲染'
370
+ },
371
+ {
372
+ actionLabel: '更新数据',
373
+ actionType: 'setValue',
374
+ description: '触发组件数据更新'
375
+ }
376
+ ];
377
+
207
378
  panelBodyCreator = (context: BaseEventContext) => {
208
379
  const isCRUDFilter: boolean = /\/crud\/filter\/form$/.test(context.path);
209
380
  const isInDialog: boolean = /(?:\/|^)dialog\/.+$/.test(context.path);
@@ -228,12 +399,9 @@ export class FormPlugin extends BasePlugin {
228
399
  description: '当没有自定义按钮时有效。'
229
400
  },
230
401
 
231
- {
402
+ getSchemaTpl('switch', {
232
403
  name: 'autoFocus',
233
- type: 'switch',
234
404
  label: '自动聚焦',
235
- mode: 'inline',
236
- className: 'block',
237
405
  labelRemark: {
238
406
  className: 'm-l-xs',
239
407
  trigger: 'click',
@@ -241,16 +409,13 @@ export class FormPlugin extends BasePlugin {
241
409
  content: '设置后将让表单的第一个可输入的表单项获得焦点',
242
410
  placement: 'left'
243
411
  }
244
- },
412
+ }),
245
413
 
246
414
  getSchemaTpl('submitOnChange'),
247
415
 
248
- {
416
+ getSchemaTpl('switch', {
249
417
  label: '提交完后重置表单',
250
- type: 'switch',
251
418
  name: 'resetAfterSubmit',
252
- mode: 'inline',
253
- className: 'block',
254
419
  labelRemark: {
255
420
  className: 'm-l-xs',
256
421
  trigger: 'click',
@@ -258,16 +423,13 @@ export class FormPlugin extends BasePlugin {
258
423
  content: '即表单提交完后,让所有表单项的值还原成初始值',
259
424
  placement: 'left'
260
425
  }
261
- },
426
+ }),
262
427
 
263
428
  isCRUDFilter
264
429
  ? null
265
- : {
430
+ : getSchemaTpl('switch', {
266
431
  label: '初始化后提交一次',
267
- type: 'switch',
268
432
  name: 'submitOnInit',
269
- mode: 'inline',
270
- className: 'block',
271
433
  labelRemark: {
272
434
  className: 'm-l-xs',
273
435
  trigger: 'click',
@@ -275,17 +437,14 @@ export class FormPlugin extends BasePlugin {
275
437
  content: '开启后,表单初始完成便会触发一次提交。',
276
438
  placement: 'left'
277
439
  }
278
- },
440
+ }),
279
441
 
280
442
  isInDialog
281
- ? {
443
+ ? getSchemaTpl('switch', {
282
444
  label: '提交后是否关闭对话框',
283
- type: 'switch',
284
445
  name: 'closeDialogOnSubmit',
285
- mode: 'inline',
286
- className: 'block',
287
446
  pipeIn: (value: any) => value !== false
288
- }
447
+ })
289
448
  : null,
290
449
 
291
450
  isCRUDFilter
@@ -311,22 +470,16 @@ export class FormPlugin extends BasePlugin {
311
470
  description: '当设置此值后,表单提交完后跳转到目标地址。'
312
471
  },
313
472
 
314
- {
473
+ getSchemaTpl('switch', {
315
474
  name: 'canAccessSuperData',
316
475
  label: '是否自动填充父级同名变量',
317
- type: 'switch',
318
- pipeIn: defaultValue(true),
319
- mode: 'inline',
320
- className: 'block'
321
- },
476
+ pipeIn: defaultValue(true)
477
+ }),
322
478
 
323
- {
479
+ getSchemaTpl('switch', {
324
480
  name: 'persistData',
325
481
  label: '是否开启本地缓存',
326
- type: 'switch',
327
482
  pipeIn: defaultValue(false),
328
- mode: 'inline',
329
- className: 'block',
330
483
  labelRemark: {
331
484
  className: 'm-l-xs',
332
485
  trigger: 'click',
@@ -335,15 +488,12 @@ export class FormPlugin extends BasePlugin {
335
488
  '开启后,表单的数据会缓存在浏览器中,切换页面或关闭弹框不会清空当前表单内的数据',
336
489
  placement: 'left'
337
490
  }
338
- },
491
+ }),
339
492
 
340
- {
493
+ getSchemaTpl('switch', {
341
494
  name: 'clearPersistDataAfterSubmit',
342
495
  label: '提交成功后清空本地缓存',
343
- type: 'switch',
344
496
  pipeIn: defaultValue(false),
345
- mode: 'inline',
346
- className: 'block',
347
497
  visibleOn: 'data.persistData',
348
498
  labelRemark: {
349
499
  className: 'm-l-xs',
@@ -353,7 +503,7 @@ export class FormPlugin extends BasePlugin {
353
503
  '开启本地缓存并开启本配置项后,表单提交成功后,会自动清除浏览器中当前表单的缓存数据',
354
504
  placement: 'left'
355
505
  }
356
- },
506
+ }),
357
507
 
358
508
  {
359
509
  name: 'rules',
@@ -395,9 +545,11 @@ export class FormPlugin extends BasePlugin {
395
545
  // test: !this.isCRUDFilter
396
546
  }),
397
547
 
398
- {
548
+ getSchemaTpl('switch', {
549
+ name: 'asyncApi',
399
550
  label: '采用异步方式?',
400
- remark: {
551
+ visibleOn: 'data.api',
552
+ labelRemark: {
401
553
  trigger: 'click',
402
554
  rootClose: true,
403
555
  title: '什么是异步方式?',
@@ -405,14 +557,9 @@ export class FormPlugin extends BasePlugin {
405
557
  '异步方式主要用来解决请求超时问题,启用异步方式后,程序会在请求完后,定时轮询请求额外的接口用来咨询操作是否完成。所以接口可以快速的返回,而不需要等待流程真正完成。',
406
558
  placement: 'left'
407
559
  },
408
- type: 'switch',
409
- name: 'asyncApi',
410
- visibleOn: 'data.api',
411
560
  pipeIn: (value: any) => value != null,
412
- pipeOut: (value: any) => (value ? '' : undefined),
413
- mode: 'inline',
414
- className: 'block'
415
- },
561
+ pipeOut: (value: any) => (value ? '' : undefined)
562
+ }),
416
563
 
417
564
  getSchemaTpl('api', {
418
565
  name: 'asyncApi',
@@ -458,15 +605,13 @@ export class FormPlugin extends BasePlugin {
458
605
  }
459
606
  }),
460
607
 
461
- {
608
+ getSchemaTpl('switch', {
462
609
  label: '开启定时刷新',
463
- type: 'switch',
464
610
  name: 'interval',
465
611
  visibleOn: 'data.initApi',
466
612
  pipeIn: (value: any) => !!value,
467
- pipeOut: (value: any) => (value ? 3000 : undefined),
468
- mode: 'inline'
469
- },
613
+ pipeOut: (value: any) => (value ? 3000 : undefined)
614
+ }),
470
615
 
471
616
  {
472
617
  name: 'interval',
@@ -477,14 +622,12 @@ export class FormPlugin extends BasePlugin {
477
622
  description: '设置后将自动定时刷新,单位 ms'
478
623
  },
479
624
 
480
- {
625
+ getSchemaTpl('switch', {
481
626
  name: 'silentPolling',
482
627
  label: '静默刷新',
483
- type: 'switch',
484
- mode: 'inline',
485
628
  visibleOn: '!!data.interval',
486
629
  description: '设置自动定时刷新时是否显示loading'
487
- },
630
+ }),
488
631
 
489
632
  {
490
633
  name: 'stopAutoRefreshWhen',
@@ -495,8 +638,10 @@ export class FormPlugin extends BasePlugin {
495
638
  '定时刷新一旦设置会一直刷新,除非给出表达式,条件满足后则不刷新了。'
496
639
  },
497
640
 
498
- {
641
+ getSchemaTpl('switch', {
499
642
  label: '采用异步方式?',
643
+ name: 'initAsyncApi',
644
+ visibleOn: 'data.initApi',
500
645
  remark: {
501
646
  trigger: 'click',
502
647
  rootClose: true,
@@ -505,13 +650,9 @@ export class FormPlugin extends BasePlugin {
505
650
  '异步方式主要用来解决请求超时问题,启用异步方式后,程序会在请求完后,定时轮询请求额外的接口用来咨询操作是否完成。所以接口可以快速的返回,而不需要等待流程真正完成。',
506
651
  placement: 'left'
507
652
  },
508
- type: 'switch',
509
- name: 'initAsyncApi',
510
- visibleOn: 'data.initApi',
511
653
  pipeIn: (value: any) => value != null,
512
- pipeOut: (value: any) => (value ? '' : undefined),
513
- mode: 'inline'
514
- },
654
+ pipeOut: (value: any) => (value ? '' : undefined)
655
+ }),
515
656
 
516
657
  getSchemaTpl('api', {
517
658
  name: 'initAsyncApi',
@@ -595,11 +736,8 @@ export class FormPlugin extends BasePlugin {
595
736
  {
596
737
  title: '外观',
597
738
  body: [
598
- {
739
+ getSchemaTpl('switch', {
599
740
  name: 'wrapWithPanel',
600
- type: 'switch',
601
- mode: 'inline',
602
- className: 'block',
603
741
  label: '用 Panel 包裹',
604
742
  pipeIn: defaultValue(true),
605
743
  labelRemark: {
@@ -609,7 +747,7 @@ export class FormPlugin extends BasePlugin {
609
747
  content: '关闭后,表单只会展示表单项,标题和操作栏将不会显示。',
610
748
  placement: 'left'
611
749
  }
612
- },
750
+ }),
613
751
 
614
752
  {
615
753
  name: 'mode',
@@ -650,6 +788,17 @@ export class FormPlugin extends BasePlugin {
650
788
  ]
651
789
  },
652
790
 
791
+ {
792
+ title: '事件',
793
+ className: 'p-none',
794
+ body: [
795
+ getSchemaTpl('eventControl', {
796
+ name: 'onEvent',
797
+ ...getEventControlConfig(this.manager, context)
798
+ })
799
+ ]
800
+ },
801
+
653
802
  {
654
803
  title: '其他',
655
804
  body: [
@@ -657,13 +806,12 @@ export class FormPlugin extends BasePlugin {
657
806
  getSchemaTpl('name', {
658
807
  test: !isCRUDFilter
659
808
  }),
660
- {
809
+ getSchemaTpl('switch', {
661
810
  name: 'debug',
662
811
  label: '开启调试',
663
- type: 'switch',
664
- mode: 'inline',
665
812
  labelRemark: '显示当前表单的数据在表单顶部'
666
- },
813
+ }),
814
+
667
815
  getSchemaTpl('disabled'),
668
816
  getSchemaTpl('visible')
669
817
  ]
@@ -682,6 +830,65 @@ export class FormPlugin extends BasePlugin {
682
830
  this.manager.buildPanels();
683
831
  }
684
832
  }
833
+
834
+ async buildDataSchemas(node: EditorNodeType, region: EditorNodeType) {
835
+ const jsonschema: any = {
836
+ $id: 'formItems',
837
+ type: 'object',
838
+ properties: {}
839
+ };
840
+
841
+ const pool = node.children.concat();
842
+ while (pool.length) {
843
+ const current = pool.shift() as EditorNodeType;
844
+
845
+ if (current.rendererConfig?.type === 'combo') {
846
+ const schema = current.schema;
847
+ if (schema.name) {
848
+ jsonschema.properties[schema.name] = {
849
+ type: 'array',
850
+ title: schema.label || schema.name,
851
+ items: current.info?.plugin?.buildDataSchemas
852
+ ? await current.info.plugin.buildDataSchemas(current, region)
853
+ : {
854
+ type: 'object',
855
+ properties: {}
856
+ }
857
+ };
858
+ }
859
+ } else if (current.rendererConfig?.isFormItem) {
860
+ const schema = current.schema;
861
+ if (schema.name) {
862
+ jsonschema.properties[schema.name] = current.info?.plugin
863
+ ?.buildDataSchemas
864
+ ? await current.info.plugin.buildDataSchemas(current, region)
865
+ : {
866
+ type: 'string',
867
+ title: schema.label || schema.name,
868
+ description: schema.description
869
+ };
870
+ }
871
+ } else {
872
+ pool.push(...current.children);
873
+ }
874
+ }
875
+
876
+ return jsonschema;
877
+ }
878
+
879
+ rendererBeforeDispatchEvent(node: EditorNodeType, e: any, data: any) {
880
+ if (e === 'inited') {
881
+ // 监听 form 的 inited 事件,把数据加入到上下文中
882
+ const scope = this.manager.dataSchema.getScope(`${node.id}-${node.type}`);
883
+ const jsonschema: any = {
884
+ $id: 'formInitedData',
885
+ ...jsonToJsonSchema(data)
886
+ };
887
+
888
+ scope.removeSchema(jsonschema.$id);
889
+ scope.addSchema(jsonschema);
890
+ }
891
+ }
685
892
  }
686
893
 
687
894
  registerEditorPlugin(FormPlugin);
@@ -1,4 +1,4 @@
1
- import {defaultValue} from '../../component/schemaTpl';
1
+ import {defaultValue, getSchemaTpl} from '../../component/schemaTpl';
2
2
  import {registerEditorPlugin} from '../../manager';
3
3
  import {BasePlugin} from '../../plugin';
4
4
 
@@ -50,25 +50,19 @@ export class FormulaControlPlugin extends BasePlugin {
50
50
  description:
51
51
  '支持如:<code>\\${xxx}</code>或者<code>data.xxx == "a"</code> 表达式来配置作用条件,当满足该作用条件时,会将计算结果设置到目标变量上。'
52
52
  },
53
- {
53
+ getSchemaTpl('switch', {
54
54
  name: 'initSet',
55
- type: 'switch',
56
55
  label: '是否初始应用',
57
- pipeIn: defaultValue(true),
58
56
  description: '是否初始化的时候运行公式结果,并设置到目标变量上。',
59
- mode: 'inline',
60
- className: 'block'
61
- },
62
- {
57
+ pipeIn: defaultValue(true)
58
+ }),
59
+ getSchemaTpl('switch', {
63
60
  name: 'autoSet',
64
- type: 'switch',
65
61
  label: '是否自动应用',
66
- pipeIn: defaultValue(true),
67
- mode: 'inline',
68
- className: 'block',
69
62
  description:
70
- '是否自动计算公式结果,有变化时自动设置到目标变量上。<br />关闭后,通过按钮也能触发运算。'
71
- }
63
+ '是否自动计算公式结果,有变化时自动设置到目标变量上。<br />关闭后,通过按钮也能触发运算。',
64
+ pipeIn: defaultValue(true)
65
+ })
72
66
  ];
73
67
 
74
68
  renderRenderer(props: any) {
@@ -82,14 +82,11 @@ export class ArrayControlPlugin extends BasePlugin {
82
82
  )
83
83
  },
84
84
 
85
- {
85
+ getSchemaTpl('switch', {
86
86
  label: '是否可新增',
87
- type: 'switch',
88
87
  name: 'addable',
89
- mode: 'inline',
90
- className: 'w-full',
91
88
  pipeIn: defaultValue(true)
92
- },
89
+ }),
93
90
 
94
91
  {
95
92
  label: '新增按钮文字',
@@ -108,14 +105,11 @@ export class ArrayControlPlugin extends BasePlugin {
108
105
  pipeIn: defaultValue('')
109
106
  },
110
107
 
111
- {
108
+ getSchemaTpl('switch', {
112
109
  label: '是否可删除',
113
- type: 'switch',
114
110
  name: 'removable',
115
- mode: 'inline',
116
- className: 'w-full',
117
111
  pipeIn: defaultValue(true)
118
- },
112
+ }),
119
113
 
120
114
  getSchemaTpl('api', {
121
115
  name: 'deleteApi',
@@ -131,13 +125,10 @@ export class ArrayControlPlugin extends BasePlugin {
131
125
  pipeIn: defaultValue('确认要删除')
132
126
  },
133
127
 
134
- {
128
+ getSchemaTpl('switch', {
135
129
  name: 'draggable',
136
- label: '启用拖拽排序',
137
- type: 'switch',
138
- mode: 'inline',
139
- className: 'w-full'
140
- },
130
+ label: '启用拖拽排序'
131
+ }),
141
132
 
142
133
  {
143
134
  name: 'draggableTip',
@@ -90,4 +90,4 @@ export class CityControlPlugin extends BasePlugin {
90
90
  ];
91
91
  }
92
92
 
93
- registerEditorPlugin(CityControlPlugin);
93
+ registerEditorPlugin(CityControlPlugin);