amis-editor 4.1.0-beta.1 → 4.1.0-beta.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (195) hide show
  1. package/dist/component/Breadcrumb.d.ts +23 -2
  2. package/dist/component/Editor.d.ts +19 -0
  3. package/dist/component/Panel/RenderersPanel.d.ts +1 -2
  4. package/dist/component/RegionWrapper.d.ts +14 -7
  5. package/dist/component/RendererThumb.d.ts +5 -5
  6. package/dist/component/VRenderer.d.ts +4 -0
  7. package/dist/component/base/SearchCustomRendererPanel.d.ts +15 -0
  8. package/dist/component/base/SearchPanel.d.ts +83 -0
  9. package/dist/component/base/SearchRendererPanel.d.ts +2 -42
  10. package/dist/exports.min.js +1 -1
  11. package/dist/index.d.ts +4 -1
  12. package/dist/index.min.js +1 -1
  13. package/dist/manager.d.ts +14 -3
  14. package/dist/plugin/Card.d.ts +1 -0
  15. package/dist/plugin/Cards.d.ts +1 -0
  16. package/dist/plugin/Carousel.d.ts +1 -0
  17. package/dist/plugin/Chart.d.ts +1 -0
  18. package/dist/plugin/Collapse.d.ts +1 -0
  19. package/dist/plugin/Custom.d.ts +3 -0
  20. package/dist/plugin/CustomRegion.d.ts +43 -0
  21. package/dist/plugin/Flex.d.ts +1 -0
  22. package/dist/plugin/Form/Control.d.ts +1 -0
  23. package/dist/plugin/Form/InputURL.d.ts +1 -0
  24. package/dist/plugin/Grid.d.ts +1 -0
  25. package/dist/plugin/HBox.d.ts +1 -0
  26. package/dist/plugin/Json.d.ts +1 -0
  27. package/dist/plugin/List.d.ts +1 -0
  28. package/dist/plugin/Mapping.d.ts +1 -0
  29. package/dist/plugin/Markdown.d.ts +1 -0
  30. package/dist/plugin/Nav.d.ts +1 -0
  31. package/dist/plugin/Panel/Outline.d.ts +8 -0
  32. package/dist/plugin/Progress.d.ts +1 -0
  33. package/dist/plugin/QRCode.d.ts +1 -0
  34. package/dist/plugin/Reset.d.ts +0 -1
  35. package/dist/plugin/Service.d.ts +1 -0
  36. package/dist/plugin/Sparkline.d.ts +1 -0
  37. package/dist/plugin/Status.d.ts +1 -0
  38. package/dist/plugin/Steps.d.ts +1 -0
  39. package/dist/plugin/Submit.d.ts +0 -1
  40. package/dist/plugin/TableView.d.ts +1 -0
  41. package/dist/plugin/Tasks.d.ts +1 -0
  42. package/dist/plugin/TooltipWrapper.d.ts +1 -0
  43. package/dist/plugin/Video.d.ts +1 -0
  44. package/dist/plugin/WebComponent.d.ts +1 -0
  45. package/dist/plugin/Wrapper.d.ts +1 -0
  46. package/dist/plugin.d.ts +2 -2
  47. package/dist/store/editor.d.ts +20 -2
  48. package/dist/store/node.d.ts +6 -0
  49. package/dist/style.css +1 -1
  50. package/dist/util.d.ts +7 -2
  51. package/package.json +6 -3
  52. package/src/component/schemaTpl.tsx +2155 -0
  53. package/src/plugin/.DS_Store +0 -0
  54. package/src/plugin/Alert.tsx +87 -0
  55. package/src/plugin/AnchorNav.tsx +233 -0
  56. package/src/plugin/Audio.tsx +161 -0
  57. package/src/plugin/Avatar.tsx +77 -0
  58. package/src/plugin/Breadcrumb.tsx +107 -0
  59. package/src/plugin/Button.tsx +283 -0
  60. package/src/plugin/ButtonGroup.tsx +88 -0
  61. package/src/plugin/ButtonToolbar.tsx +89 -0
  62. package/src/plugin/CRUD.tsx +1832 -0
  63. package/src/plugin/Card.tsx +290 -0
  64. package/src/plugin/Cards.tsx +315 -0
  65. package/src/plugin/Carousel.tsx +386 -0
  66. package/src/plugin/Chart.tsx +218 -0
  67. package/src/plugin/CodeView.tsx +60 -0
  68. package/src/plugin/Collapse.tsx +143 -0
  69. package/src/plugin/CollapseGroup.tsx +167 -0
  70. package/src/plugin/Container.tsx +44 -0
  71. package/src/plugin/Custom.tsx +128 -0
  72. package/src/plugin/CustomRegion.tsx +150 -0
  73. package/src/plugin/Date.tsx +81 -0
  74. package/src/plugin/Datetime.tsx +75 -0
  75. package/src/plugin/Dialog.tsx +178 -0
  76. package/src/plugin/Divider.tsx +36 -0
  77. package/src/plugin/Drawer.tsx +217 -0
  78. package/src/plugin/DropDownButton.tsx +234 -0
  79. package/src/plugin/Each.tsx +152 -0
  80. package/src/plugin/ErrorRenderer.tsx +15 -0
  81. package/src/plugin/Flex.tsx +156 -0
  82. package/src/plugin/Form/ButtonGroupSelect.tsx +86 -0
  83. package/src/plugin/Form/ButtonToolbar.tsx +121 -0
  84. package/src/plugin/Form/ChainedSelect.tsx +70 -0
  85. package/src/plugin/Form/Checkbox.tsx +87 -0
  86. package/src/plugin/Form/Checkboxes.tsx +167 -0
  87. package/src/plugin/Form/CodeEditor.tsx +91 -0
  88. package/src/plugin/Form/Combo.tsx +582 -0
  89. package/src/plugin/Form/ConditionBuilder.tsx +324 -0
  90. package/src/plugin/Form/Control.tsx +139 -0
  91. package/src/plugin/Form/DiffEditor.tsx +117 -0
  92. package/src/plugin/Form/FieldSet.tsx +175 -0
  93. package/src/plugin/Form/Form.tsx +692 -0
  94. package/src/plugin/Form/Formula.tsx +91 -0
  95. package/src/plugin/Form/Group.tsx +300 -0
  96. package/src/plugin/Form/Hidden.tsx +56 -0
  97. package/src/plugin/Form/InputArray.tsx +228 -0
  98. package/src/plugin/Form/InputCity.tsx +93 -0
  99. package/src/plugin/Form/InputColor.tsx +123 -0
  100. package/src/plugin/Form/InputDate.tsx +175 -0
  101. package/src/plugin/Form/InputDateRange.tsx +225 -0
  102. package/src/plugin/Form/InputDateTime.tsx +183 -0
  103. package/src/plugin/Form/InputDateTimeRange.tsx +221 -0
  104. package/src/plugin/Form/InputEmail.tsx +33 -0
  105. package/src/plugin/Form/InputExcel.tsx +85 -0
  106. package/src/plugin/Form/InputFile.tsx +228 -0
  107. package/src/plugin/Form/InputGroup.tsx +105 -0
  108. package/src/plugin/Form/InputImage.tsx +277 -0
  109. package/src/plugin/Form/InputKV.tsx +72 -0
  110. package/src/plugin/Form/InputMonth.tsx +35 -0
  111. package/src/plugin/Form/InputMonthRange.tsx +195 -0
  112. package/src/plugin/Form/InputNumber.tsx +97 -0
  113. package/src/plugin/Form/InputPassword.tsx +33 -0
  114. package/src/plugin/Form/InputQuarter.tsx +35 -0
  115. package/src/plugin/Form/InputQuarterRange.tsx +195 -0
  116. package/src/plugin/Form/InputRange.tsx +121 -0
  117. package/src/plugin/Form/InputRating.tsx +78 -0
  118. package/src/plugin/Form/InputRepeat.tsx +69 -0
  119. package/src/plugin/Form/InputRichText.tsx +197 -0
  120. package/src/plugin/Form/InputSubForm.tsx +198 -0
  121. package/src/plugin/Form/InputTable.tsx +434 -0
  122. package/src/plugin/Form/InputTag.tsx +81 -0
  123. package/src/plugin/Form/InputText.tsx +186 -0
  124. package/src/plugin/Form/InputTime.tsx +95 -0
  125. package/src/plugin/Form/InputTree.tsx +240 -0
  126. package/src/plugin/Form/InputURL.tsx +34 -0
  127. package/src/plugin/Form/InputYear.tsx +35 -0
  128. package/src/plugin/Form/Item.tsx +325 -0
  129. package/src/plugin/Form/ListSelect.tsx +84 -0
  130. package/src/plugin/Form/LocationPicker.tsx +75 -0
  131. package/src/plugin/Form/MatrixCheckboxes.tsx +147 -0
  132. package/src/plugin/Form/NestedSelect.tsx +222 -0
  133. package/src/plugin/Form/Picker.tsx +217 -0
  134. package/src/plugin/Form/Radios.tsx +130 -0
  135. package/src/plugin/Form/Select.tsx +216 -0
  136. package/src/plugin/Form/Static.tsx +335 -0
  137. package/src/plugin/Form/Switch.tsx +116 -0
  138. package/src/plugin/Form/TabsTransfer.tsx +270 -0
  139. package/src/plugin/Form/Textarea.tsx +94 -0
  140. package/src/plugin/Form/Transfer.tsx +379 -0
  141. package/src/plugin/Form/TreeSelect.tsx +263 -0
  142. package/src/plugin/Form/UUID.tsx +48 -0
  143. package/src/plugin/Grid.tsx +799 -0
  144. package/src/plugin/HBox.tsx +727 -0
  145. package/src/plugin/IFrame.tsx +72 -0
  146. package/src/plugin/Image.tsx +318 -0
  147. package/src/plugin/Images.tsx +238 -0
  148. package/src/plugin/Json.tsx +76 -0
  149. package/src/plugin/Link.tsx +95 -0
  150. package/src/plugin/List.tsx +278 -0
  151. package/src/plugin/ListItem.tsx +233 -0
  152. package/src/plugin/Log.tsx +52 -0
  153. package/src/plugin/Mapping.tsx +156 -0
  154. package/src/plugin/Markdown.tsx +47 -0
  155. package/src/plugin/Nav.tsx +186 -0
  156. package/src/plugin/Operation.tsx +97 -0
  157. package/src/plugin/Others/Action.tsx +428 -0
  158. package/src/plugin/Others/BasicToolbar.tsx +591 -0
  159. package/src/plugin/Others/DataDebug.tsx +134 -0
  160. package/src/plugin/Others/TableCell.tsx +480 -0
  161. package/src/plugin/Others/Unknown.tsx +37 -0
  162. package/src/plugin/Page.tsx +308 -0
  163. package/src/plugin/Panel/AvailableRenderers.tsx +41 -0
  164. package/src/plugin/Panel/Code.tsx +44 -0
  165. package/src/plugin/Panel/Name.tsx +26 -0
  166. package/src/plugin/Panel/Outline.tsx +40 -0
  167. package/src/plugin/Panel.tsx +243 -0
  168. package/src/plugin/Plain.tsx +91 -0
  169. package/src/plugin/Progress.tsx +132 -0
  170. package/src/plugin/Property.tsx +139 -0
  171. package/src/plugin/QRCode.tsx +98 -0
  172. package/src/plugin/Reset.tsx +23 -0
  173. package/src/plugin/Service.tsx +167 -0
  174. package/src/plugin/Sparkline.tsx +40 -0
  175. package/src/plugin/Status.tsx +78 -0
  176. package/src/plugin/Steps.tsx +140 -0
  177. package/src/plugin/Submit.tsx +23 -0
  178. package/src/plugin/Table.tsx +440 -0
  179. package/src/plugin/TableView.tsx +711 -0
  180. package/src/plugin/Tabs.tsx +364 -0
  181. package/src/plugin/Tasks.tsx +276 -0
  182. package/src/plugin/Time.tsx +75 -0
  183. package/src/plugin/TooltipWrapper.tsx +193 -0
  184. package/src/plugin/Tpl.tsx +162 -0
  185. package/src/plugin/Video.tsx +160 -0
  186. package/src/plugin/WebComponent.tsx +56 -0
  187. package/src/plugin/Wizard.tsx +743 -0
  188. package/src/plugin/Wrapper.tsx +107 -0
  189. package/src/plugin.ts +1046 -0
  190. package/dist/150a58f3318ca7541ed9.png +0 -0
  191. package/dist/471adb97c322b226e589.png +0 -0
  192. package/dist/4de5f42360bc5946c3c2.png +0 -0
  193. package/dist/4e9968bba3855f088fed.png +0 -0
  194. package/dist/7f09c38ebc687fea847a.png +0 -0
  195. package/dist/c94073576487510314ea.png +0 -0
@@ -0,0 +1,91 @@
1
+ import {relativeValueRe} from 'amis';
2
+ import {availableLanguages} from 'amis/lib/renderers/Form/Editor';
3
+ import React from 'react';
4
+ import {
5
+ defaultValue,
6
+ getSchemaTpl,
7
+ valuePipeOut
8
+ } from '../../component/schemaTpl';
9
+ import {registerEditorPlugin} from '../../manager';
10
+ import {
11
+ BasePlugin,
12
+ BasicSubRenderInfo,
13
+ RendererEventContext,
14
+ SubRendererInfo
15
+ } from '../../plugin';
16
+
17
+ export class FormulaControlPlugin extends BasePlugin {
18
+ // 关联渲染器名字
19
+ rendererName = 'formula';
20
+ $schema = '/schemas/FormulaControlSchema.json';
21
+
22
+ // 组件名称
23
+ name = '公式';
24
+ isBaseComponent = true;
25
+ icon = 'fa fa-calculator';
26
+ description = `通过公式计算指定的变量值,并将其结果作用到指定的变量中`;
27
+ docLink = '/amis/zh-CN/components/form/formula';
28
+ tags = ['表单项'];
29
+ scaffold = {
30
+ type: 'formula',
31
+ name: 'formula'
32
+ };
33
+ previewSchema: any = {
34
+ type: 'tpl',
35
+ tpl: '计算公式'
36
+ };
37
+
38
+ panelTitle = '公式';
39
+ panelBody = [
40
+ {
41
+ label: '字段名',
42
+ name: 'name',
43
+ type: 'input-text',
44
+ description: '公式计算结果会作用到此字段名对应的变量中。'
45
+ },
46
+ {
47
+ type: 'input-text',
48
+ name: 'value',
49
+ label: '默认值'
50
+ },
51
+ {
52
+ type: 'input-text',
53
+ name: 'formula',
54
+ label: '公式',
55
+ description:
56
+ '支持 JS 表达式,如: <code>data.var_a + 2</code>,即当表单项 <code>var_a</code> 变化的时候,会自动给当前表单项设置为 <code>var_a + 2</code> 的值。若设置为字符串,则需要加引号'
57
+ },
58
+ {
59
+ type: 'input-text',
60
+ name: 'condition',
61
+ label: '作用条件',
62
+ description:
63
+ '支持如:<code>\\${xxx}</code>或者<code>data.xxx == "a"</code> 表达式来配置作用条件,当满足该作用条件时,会将计算结果设置到目标变量上。'
64
+ },
65
+ {
66
+ name: 'initSet',
67
+ type: 'switch',
68
+ label: '是否初始应用',
69
+ pipeIn: defaultValue(true),
70
+ description: '是否初始化的时候运行公式结果,并设置到目标变量上。',
71
+ mode: 'inline',
72
+ className: 'block'
73
+ },
74
+ {
75
+ name: 'autoSet',
76
+ type: 'switch',
77
+ label: '是否自动应用',
78
+ pipeIn: defaultValue(true),
79
+ mode: 'inline',
80
+ className: 'block',
81
+ description:
82
+ '是否自动计算公式结果,有变化时自动设置到目标变量上。<br />关闭后,通过按钮也能触发运算。'
83
+ }
84
+ ];
85
+
86
+ renderRenderer(props: any) {
87
+ return this.renderPlaceholder('功能组件(公式)', props.key);
88
+ }
89
+ }
90
+
91
+ registerEditorPlugin(FormulaControlPlugin);
@@ -0,0 +1,300 @@
1
+ import {Button, SchemaObject} from 'amis';
2
+ import flatten from 'lodash/flatten';
3
+ import React from 'react';
4
+ import {ContainerWrapper} from '../../component/ContainerWrapper';
5
+ import {registerEditorPlugin} from '../../manager';
6
+ import {
7
+ BasePlugin,
8
+ BasicSubRenderInfo,
9
+ ContextMenuEventContext,
10
+ ContextMenuItem,
11
+ RegionConfig,
12
+ RendererEventContext,
13
+ SubRendererInfo
14
+ } from '../../plugin';
15
+ import {defaultValue, getSchemaTpl} from '../../component/schemaTpl';
16
+ import {JSONPipeIn, JSONUpdate, makeHorizontalDeeper} from '../../util';
17
+
18
+ export class GroupControlPlugin extends BasePlugin {
19
+ // 关联渲染器名字
20
+ rendererName = 'group';
21
+ $schema = '/schemas/GroupControlSchema.json';
22
+ disabledRendererPlugin = true; // 组件面板不显示
23
+
24
+ // 组件名称
25
+ name = '表单组';
26
+ isBaseComponent = true;
27
+ icon = 'fa fa-id-card-o';
28
+ description = '水平展示多个表单项';
29
+ docLink = '/amis/zh-CN/components/form/group';
30
+ tags = ['表单项'];
31
+ scaffold = {
32
+ type: 'group',
33
+ body: [
34
+ {
35
+ type: 'input-text',
36
+ label: '文本',
37
+ name: 'var1'
38
+ },
39
+
40
+ {
41
+ type: 'input-text',
42
+ label: '文本',
43
+ name: 'var2'
44
+ }
45
+ ],
46
+ label: false
47
+ };
48
+ previewSchema: any = {
49
+ type: 'form',
50
+ className: 'text-left',
51
+ wrapWithPanel: false,
52
+ mode: 'horizontal',
53
+ body: [
54
+ {
55
+ ...this.scaffold,
56
+ mode: 'normal'
57
+ }
58
+ ]
59
+ };
60
+
61
+ // 容器配置
62
+ regions: Array<RegionConfig> = [
63
+ {
64
+ key: 'body',
65
+ label: '子表单',
66
+ renderMethod: 'renderInput',
67
+ preferTag: '表单项',
68
+ wrapperResolve: (dom: HTMLElement) => dom
69
+ }
70
+ ];
71
+
72
+ panelTitle = '表单组';
73
+ panelBody = [
74
+ getSchemaTpl('tabs', [
75
+ {
76
+ title: '常规',
77
+ body: [
78
+ getSchemaTpl('label'),
79
+
80
+ getSchemaTpl('description', {
81
+ visible: 'this.label'
82
+ }),
83
+
84
+ {
85
+ children: (
86
+ <Button
87
+ className="m-b"
88
+ onClick={() => {
89
+ // this.manager.showInsertPanel('body')
90
+ this.manager.showRendererPanel(
91
+ '表单项',
92
+ '请从左侧组件面板中点击添加表单项'
93
+ );
94
+ }}
95
+ level="danger"
96
+ tooltip="插入一个新的元素"
97
+ size="sm"
98
+ block
99
+ >
100
+ 新增元素
101
+ </Button>
102
+ )
103
+ },
104
+
105
+ getSchemaTpl('remark'),
106
+ getSchemaTpl('labelRemark')
107
+ ]
108
+ },
109
+
110
+ {
111
+ title: '外观',
112
+ body: [
113
+ getSchemaTpl('formItemMode'),
114
+ getSchemaTpl('horizontalMode'),
115
+ getSchemaTpl('horizontal', {
116
+ visibleOn:
117
+ '(data.$$formMode == "horizontal" || data.mode == "horizontal") && data.label !== false && data.horizontal',
118
+ pipeIn: (value: any, data: any) => {
119
+ value =
120
+ value ||
121
+ (data.formHorizontal &&
122
+ makeHorizontalDeeper(data.formHorizontal, data.body.length));
123
+
124
+ return {
125
+ leftRate:
126
+ value && typeof value.left === 'number'
127
+ ? value.left
128
+ : value &&
129
+ /\bcol\-(?:xs|sm|md|lg)\-(\d+)\b/.test(value.left)
130
+ ? parseInt(RegExp.$1, 10)
131
+ : 2,
132
+ leftFixed: (value && value.leftFixed) || ''
133
+ };
134
+ }
135
+ }),
136
+
137
+ getSchemaTpl('subFormItemMode'),
138
+ getSchemaTpl('subFormHorizontalMode'),
139
+ getSchemaTpl('subFormHorizontal'),
140
+
141
+ {
142
+ name: 'body',
143
+ type: 'combo',
144
+ label: '列宽度配置',
145
+ multiple: true,
146
+ removable: false,
147
+ addable: false,
148
+ multiLine: true,
149
+ visibleOn: 'data.$$formMode != "inline"',
150
+ items: [
151
+ {
152
+ type: 'button-group-select',
153
+ name: 'columnRatio',
154
+ label: '宽度设置',
155
+ tiled: true,
156
+ pipeIn: (value: any, data: any) => {
157
+ if (typeof value === 'number') {
158
+ return 'custom';
159
+ } else if (
160
+ data.columnClassName &&
161
+ /\bcol\-(?:xs|sm|md|lg)\-(\d+)\b/.test(
162
+ data.columnClassName as string
163
+ )
164
+ ) {
165
+ return 'custom';
166
+ }
167
+ return value || '';
168
+ },
169
+ pipeOut: (value: any) => (value === 'custom' ? 2 : value),
170
+ options: [
171
+ {
172
+ value: '',
173
+ label: '适配宽度'
174
+ },
175
+
176
+ {
177
+ value: 'auto',
178
+ label: '适配内容'
179
+ },
180
+
181
+ {
182
+ value: 'custom',
183
+ label: '自定义'
184
+ }
185
+ ]
186
+ },
187
+ {
188
+ label: '宽度占比',
189
+ type: 'input-range',
190
+ name: 'columnRatio',
191
+ visibleOn:
192
+ 'typeof this.columnRatio === "number" || this.columnClassName && /\\bcol\\-(?:xs|sm|md|lg)\\-(\\d+)\\b/.test(this.columnClassName)',
193
+ pipeIn: (value: any, data: any) => {
194
+ if (typeof value === 'number') {
195
+ return value;
196
+ }
197
+
198
+ if (
199
+ !data.columnClassName ||
200
+ !/\bcol\-(?:xs|sm|md|lg)\-(\d+)\b/.test(
201
+ data.columnClassName as string
202
+ )
203
+ ) {
204
+ return 2;
205
+ }
206
+
207
+ return parseInt(RegExp.$1, 10) || 2;
208
+ },
209
+ min: 1,
210
+ max: 12,
211
+ step: 1
212
+ }
213
+ ]
214
+ },
215
+
216
+ {
217
+ type: 'button-group-select',
218
+ name: 'gap',
219
+ label: '间隔大小',
220
+ pipeIn: defaultValue(''),
221
+ size: 'sm',
222
+ tiled: true,
223
+ clearable: true,
224
+ options: [
225
+ {
226
+ value: 'xs',
227
+ label: '极小'
228
+ },
229
+
230
+ {
231
+ value: 'sm',
232
+ label: '小'
233
+ },
234
+
235
+ {
236
+ value: 'md',
237
+ label: '中'
238
+ },
239
+
240
+ {
241
+ value: 'lg',
242
+ label: '大'
243
+ }
244
+ ]
245
+ },
246
+
247
+ getSchemaTpl('className'),
248
+
249
+ {
250
+ name: 'body',
251
+ type: 'combo',
252
+ label: '列 CSS 类名配置',
253
+ multiple: true,
254
+ removable: false,
255
+ addable: false,
256
+ items: [
257
+ {
258
+ type: 'input-text',
259
+ name: 'columnClassName'
260
+ }
261
+ ]
262
+ }
263
+ ]
264
+ },
265
+
266
+ {
267
+ title: '显隐',
268
+ body: [getSchemaTpl('ref'), getSchemaTpl('visible')]
269
+ }
270
+ ])
271
+ ];
272
+
273
+ buildEditorContextMenu(
274
+ {id, schema, region, selections, info}: ContextMenuEventContext,
275
+ menus: Array<ContextMenuItem>
276
+ ) {
277
+ if (
278
+ selections.length ||
279
+ info.plugin !== this ||
280
+ !Array.isArray(schema.body) ||
281
+ schema.body.length < 2
282
+ ) {
283
+ return;
284
+ }
285
+
286
+ menus.push({
287
+ label: '变成多行',
288
+ onSelect: () => {
289
+ const store = this.manager.store;
290
+ let rootSchema = store.schema;
291
+
292
+ rootSchema = JSONUpdate(rootSchema, id, JSONPipeIn(schema.body), true);
293
+
294
+ store.traceableSetSchema(rootSchema);
295
+ }
296
+ });
297
+ }
298
+ }
299
+
300
+ registerEditorPlugin(GroupControlPlugin);
@@ -0,0 +1,56 @@
1
+ import {relativeValueRe} from 'amis';
2
+ import {availableLanguages} from 'amis/lib/renderers/Form/Editor';
3
+ import React from 'react';
4
+ import {
5
+ defaultValue,
6
+ getSchemaTpl,
7
+ valuePipeOut
8
+ } from '../../component/schemaTpl';
9
+ import {registerEditorPlugin} from '../../manager';
10
+ import {
11
+ BasePlugin,
12
+ BasicSubRenderInfo,
13
+ RendererEventContext,
14
+ SubRendererInfo
15
+ } from '../../plugin';
16
+
17
+ export class HiddenControlPlugin extends BasePlugin {
18
+ // 关联渲染器名字
19
+ rendererName = 'hidden';
20
+ $schema = '/schemas/HiddenControlSchema.json';
21
+
22
+ // 组件名称
23
+ name = '隐藏域';
24
+ isBaseComponent = true;
25
+ icon = 'fa fa-eye-slash';
26
+ description = `隐藏表单项`;
27
+ docLink = '/amis/zh-CN/components/form/hidden';
28
+ tags = ['表单项'];
29
+ scaffold = {
30
+ type: 'hidden',
31
+ name: 'var1'
32
+ };
33
+ previewSchema: any = {
34
+ type: 'tpl',
35
+ tpl: '隐藏域'
36
+ };
37
+
38
+ panelTitle = '隐藏域';
39
+ panelBody = [
40
+ {
41
+ type: 'input-text',
42
+ name: 'value',
43
+ label: '默认值'
44
+ }
45
+ ];
46
+
47
+ renderRenderer(props: any) {
48
+ return (
49
+ <div key={props.key} className="wrapper-sm b-a b-light m-b-sm">
50
+ <span className="text-muted">功能组件(隐藏字段)</span>
51
+ </div>
52
+ );
53
+ }
54
+ }
55
+
56
+ registerEditorPlugin(HiddenControlPlugin);
@@ -0,0 +1,228 @@
1
+ import {Button} from 'amis';
2
+ import {registerEditorPlugin} from '../../manager';
3
+ import {
4
+ BaseEventContext,
5
+ BasePlugin,
6
+ BasicSubRenderInfo,
7
+ BasicToolbarItem,
8
+ ContextMenuEventContext,
9
+ ContextMenuItem,
10
+ RendererEventContext,
11
+ SubRendererInfo
12
+ } from '../../plugin';
13
+ import {
14
+ defaultValue,
15
+ getSchemaTpl,
16
+ valuePipeOut
17
+ } from '../../component/schemaTpl';
18
+ import React from 'react';
19
+ import {diff, JSONPipeOut} from '../../util';
20
+
21
+ export class ArrayControlPlugin extends BasePlugin {
22
+ // 关联渲染器名字
23
+ rendererName = 'input-array';
24
+ $schema = '/schemas/ArrayControlSchema.json';
25
+ disabledRendererPlugin = true;
26
+
27
+ // 组件名称
28
+ name = '数组输入框';
29
+ isBaseComponent = true;
30
+ icon = 'fa fa-bars';
31
+ description =
32
+ 'Array 数组输入框,可自定义成员输入形式。其实是 Combo 的 flat 值打平的一种用法,可直接用 combo 代替。';
33
+ docLink = '/amis/zh-CN/components/form/input-array';
34
+ tags = ['表单项'];
35
+ scaffold = {
36
+ type: 'input-array',
37
+ label: '数组输入框',
38
+ name: 'array',
39
+ items: {
40
+ type: 'input-text',
41
+ placeholder: '请输入'
42
+ }
43
+ };
44
+ previewSchema: any = {
45
+ type: 'form',
46
+ className: 'text-left',
47
+ wrapWithPanel: false,
48
+ mode: 'horizontal',
49
+ body: [
50
+ {
51
+ ...this.scaffold,
52
+ value: ['row1', ''],
53
+ draggable: true
54
+ }
55
+ ]
56
+ };
57
+
58
+ panelTitle = '数组框';
59
+ panelBodyCreator = (context: BaseEventContext) => {
60
+ return [
61
+ getSchemaTpl('switchDefaultValue'),
62
+
63
+ {
64
+ type: 'textarea',
65
+ name: 'value',
66
+ label: '默认值',
67
+ visibleOn: 'typeof this.value !== "undefined"',
68
+ pipeOut: valuePipeOut
69
+ },
70
+
71
+ {
72
+ children: (
73
+ <Button
74
+ size="sm"
75
+ level="danger"
76
+ className="m-b"
77
+ block
78
+ onClick={this.editDetail.bind(this, context.id)}
79
+ >
80
+ 配置子表单项
81
+ </Button>
82
+ )
83
+ },
84
+
85
+ {
86
+ label: '是否可新增',
87
+ type: 'switch',
88
+ name: 'addable',
89
+ mode: 'inline',
90
+ className: 'w-full',
91
+ pipeIn: defaultValue(true)
92
+ },
93
+
94
+ {
95
+ label: '新增按钮文字',
96
+ name: 'addButtonText',
97
+ type: 'input-text',
98
+ visibleOn: 'data.addable',
99
+ pipeIn: defaultValue('新增')
100
+ },
101
+
102
+ {
103
+ type: 'textarea',
104
+ name: 'scaffold',
105
+ label: '新增初始值',
106
+ visibleOn: 'this.addable !== false',
107
+ pipeOut: valuePipeOut,
108
+ pipeIn: defaultValue('')
109
+ },
110
+
111
+ {
112
+ label: '是否可删除',
113
+ type: 'switch',
114
+ name: 'removable',
115
+ mode: 'inline',
116
+ className: 'w-full',
117
+ pipeIn: defaultValue(true)
118
+ },
119
+
120
+ getSchemaTpl('api', {
121
+ name: 'deleteApi',
122
+ label: '删除前的请求',
123
+ visibleOn: 'data.removable'
124
+ }),
125
+
126
+ {
127
+ label: '删除确认提示',
128
+ name: 'deleteConfirmText',
129
+ type: 'input-text',
130
+ visibleOn: 'data.deleteApi',
131
+ pipeIn: defaultValue('确认要删除')
132
+ },
133
+
134
+ {
135
+ name: 'draggable',
136
+ label: '启用拖拽排序',
137
+ type: 'switch',
138
+ mode: 'inline',
139
+ className: 'w-full'
140
+ },
141
+
142
+ {
143
+ name: 'draggableTip',
144
+ visibleOn: 'data.draggable',
145
+ type: 'input-text',
146
+ label: '可拖拽排序提示文字',
147
+ pipeIn: defaultValue('可通过拖动每行中的【交换】按钮进行顺序调整')
148
+ },
149
+
150
+ {
151
+ name: 'addButtonText',
152
+ type: 'input-text',
153
+ label: '新增按钮文字',
154
+ pipeIn: defaultValue('新增')
155
+ },
156
+
157
+ getSchemaTpl('minLength'),
158
+ getSchemaTpl('maxLength')
159
+ ];
160
+ };
161
+
162
+ filterProps(props: any) {
163
+ props = JSONPipeOut(props);
164
+
165
+ // 至少显示一个成员,否则啥都不显示。
166
+ if (!props.value) {
167
+ props.value = [''];
168
+ }
169
+
170
+ return props;
171
+ }
172
+
173
+ buildEditorToolbar(
174
+ {id, info}: BaseEventContext,
175
+ toolbars: Array<BasicToolbarItem>
176
+ ) {
177
+ if (info.renderer.name === 'input-array') {
178
+ toolbars.push({
179
+ icon: 'fa fa-expand',
180
+ order: 100,
181
+ tooltip: '配置子表单项',
182
+ onClick: this.editDetail.bind(this, id)
183
+ });
184
+ }
185
+ }
186
+
187
+ buildEditorContextMenu(
188
+ {id, schema, region, info}: ContextMenuEventContext,
189
+ menus: Array<ContextMenuItem>
190
+ ) {
191
+ if (info.renderer.name === 'input-array') {
192
+ menus.push('|', {
193
+ label: '配置成员渲染器',
194
+ onSelect: this.editDetail.bind(this, id)
195
+ });
196
+ }
197
+ }
198
+
199
+ editDetail(id: string) {
200
+ const manager = this.manager;
201
+ const store = manager.store;
202
+ const node = store.getNodeById(id);
203
+ const value = store.getValueOf(id);
204
+
205
+ node &&
206
+ value &&
207
+ this.manager.openSubEditor({
208
+ title: '配置子表单项',
209
+ value: value.items,
210
+ slot: {
211
+ type: 'form',
212
+ mode: 'normal',
213
+ body: '$$',
214
+ wrapWithPanel: false,
215
+ className: 'wrapper'
216
+ },
217
+ onChange: newValue => {
218
+ newValue = {
219
+ ...value,
220
+ items: newValue
221
+ };
222
+ manager.panelChangeValue(newValue, diff(value, newValue));
223
+ }
224
+ });
225
+ }
226
+ }
227
+
228
+ registerEditorPlugin(ArrayControlPlugin);