amis-editor 4.1.0-beta.4 → 4.2.0-beta.0

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