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,434 @@
1
+ import React from 'react';
2
+ import {resolveVariable, Button} from 'amis';
3
+ import flatten from 'lodash/flatten';
4
+ import {defaultValue, getSchemaTpl} from '../../component/schemaTpl';
5
+ import {registerEditorPlugin} from '../../manager';
6
+ import {
7
+ BaseEventContext,
8
+ BasePlugin,
9
+ BasicSubRenderInfo,
10
+ InsertEventContext,
11
+ PluginEvent,
12
+ RendererEventContext,
13
+ ScaffoldForm,
14
+ SubRendererInfo,
15
+ RegionConfig
16
+ } from '../../plugin';
17
+ import {setVariable} from 'amis-core';
18
+ import {repeatArray} from '../../util';
19
+ import {mockValue} from '../../mocker';
20
+
21
+ export class TableControlPlugin extends BasePlugin {
22
+ // 关联渲染器名字
23
+ rendererName = 'input-table';
24
+ $schema = '/schemas/TableControlSchema.json';
25
+
26
+ // 组件名称
27
+ name = '表格编辑框';
28
+ isBaseComponent = true;
29
+ icon = 'fa fa-table';
30
+ description = `可以用来展现数据的,可以用来展示数组类型的数据,比如 <code>multiple</code> 的子 <code>form</code>`;
31
+ docLink = '/amis/zh-CN/components/form/input-table';
32
+ tags = ['表单项'];
33
+ scaffold = {
34
+ type: 'input-table',
35
+ name: 'table',
36
+ label: '表格表单',
37
+ columns: [
38
+ {
39
+ label: 'color',
40
+ name: 'color',
41
+ quickEdit: {
42
+ type: 'input-color'
43
+ }
44
+ },
45
+ {
46
+ label: '说明文字',
47
+ name: 'name',
48
+ quickEdit: {
49
+ type: 'input-text',
50
+ mode: 'inline'
51
+ }
52
+ }
53
+ ],
54
+ strictMode: true
55
+ };
56
+
57
+ regions: Array<RegionConfig> = [
58
+ {
59
+ key: 'columns',
60
+ label: '列集合',
61
+ renderMethod: 'renderTableContent',
62
+ preferTag: '展示',
63
+ dndMode: 'position-h'
64
+ }
65
+ ];
66
+
67
+ previewSchema: any = {
68
+ type: 'form',
69
+ className: 'text-left',
70
+ wrapWithPanel: false,
71
+ mode: 'horizontal',
72
+ body: {
73
+ ...this.scaffold,
74
+ value: [{color: 'green', name: '绿色'}]
75
+ }
76
+ };
77
+
78
+ scaffoldForm: ScaffoldForm = {
79
+ title: '快速构建表格',
80
+ body: [
81
+ {
82
+ name: 'columns',
83
+ type: 'combo',
84
+ multiple: true,
85
+ label: false,
86
+ addButtonText: '新增一列',
87
+ draggable: true,
88
+ items: [
89
+ {
90
+ type: 'input-text',
91
+ name: 'label',
92
+ placeholder: '标题'
93
+ },
94
+ {
95
+ type: 'input-text',
96
+ name: 'name',
97
+ placeholder: '绑定字段名'
98
+ },
99
+ {
100
+ type: 'select',
101
+ name: 'type',
102
+ placeholder: '类型',
103
+ value: 'input-text',
104
+ options: [
105
+ {
106
+ value: 'text',
107
+ label: '纯文本'
108
+ },
109
+ {
110
+ value: 'tpl',
111
+ label: '模板'
112
+ },
113
+ {
114
+ value: 'image',
115
+ label: '图片'
116
+ },
117
+ {
118
+ value: 'date',
119
+ label: '日期'
120
+ },
121
+ // {
122
+ // value: 'datetime',
123
+ // label: '日期时间'
124
+ // },
125
+ // {
126
+ // value: 'time',
127
+ // label: '时间'
128
+ // },
129
+ {
130
+ value: 'progress',
131
+ label: '进度'
132
+ },
133
+ {
134
+ value: 'status',
135
+ label: '状态'
136
+ },
137
+ {
138
+ value: 'mapping',
139
+ label: '映射'
140
+ },
141
+ {
142
+ value: 'operation',
143
+ label: '操作栏'
144
+ }
145
+ ]
146
+ }
147
+ ]
148
+ }
149
+ ],
150
+ canRebuild: true
151
+ };
152
+
153
+ panelTitle = '表格编辑';
154
+ panelBodyCreator = (context: BaseEventContext) => {
155
+ const isCRUDBody = context.schema.type === 'crud';
156
+
157
+ return getSchemaTpl('tabs', [
158
+ {
159
+ title: '常规',
160
+ body: flatten([
161
+ // {
162
+ // children: (
163
+ // <div className="m-b">
164
+ // <Button
165
+ // level="success"
166
+ // size="sm"
167
+ // block
168
+ // onClick={() => this.handleEditFormItem()}
169
+ // >
170
+ // 配置列信息
171
+ // </Button>
172
+ // </div>
173
+ // )
174
+ // },
175
+ getSchemaTpl('formItemName', {
176
+ required: true
177
+ }),
178
+ getSchemaTpl('label'),
179
+ getSchemaTpl('description'),
180
+ {
181
+ label: '是否可新增',
182
+ type: 'switch',
183
+ name: 'addable',
184
+ mode: 'inline',
185
+ className: 'w-full'
186
+ },
187
+ {
188
+ type: 'input-text',
189
+ name: 'addBtnLabel',
190
+ label: '增加按钮名称',
191
+ visibleOn: 'data.addable',
192
+ pipeIn: defaultValue('')
193
+ },
194
+ {
195
+ name: 'addBtnIcon',
196
+ label: '增加按钮图标',
197
+ type: 'icon-picker',
198
+ visibleOn: 'data.addable'
199
+ },
200
+ getSchemaTpl('api', {
201
+ name: 'addApi',
202
+ label: '新增时提交的 API',
203
+ visibleOn: 'data.addable'
204
+ }),
205
+ {
206
+ label: '是否可删除',
207
+ type: 'switch',
208
+ name: 'removable',
209
+ mode: 'inline',
210
+ className: 'w-full'
211
+ },
212
+ {
213
+ type: 'input-text',
214
+ name: 'deleteBtnLabel',
215
+ label: '删除按钮名称',
216
+ visibleOn: 'data.removable',
217
+ pipeIn: defaultValue('')
218
+ },
219
+ {
220
+ name: 'deleteBtnIcon',
221
+ label: '删除按钮图标',
222
+ type: 'icon-picker',
223
+ visibleOn: 'data.removable'
224
+ },
225
+ getSchemaTpl('api', {
226
+ name: 'deleteApi',
227
+ label: '删除时提交的 API',
228
+ visibleOn: 'data.removable'
229
+ }),
230
+ {
231
+ label: '是否可编辑',
232
+ type: 'switch',
233
+ name: 'editable',
234
+ mode: 'inline',
235
+ className: 'w-full'
236
+ },
237
+ {
238
+ type: 'input-text',
239
+ name: 'editBtnLabel',
240
+ label: '编辑按钮名称',
241
+ visibleOn: 'data.editable',
242
+ pipeIn: defaultValue('')
243
+ },
244
+ {
245
+ name: 'editBtnIcon',
246
+ label: '编辑按钮图标',
247
+ type: 'icon-picker',
248
+ visibleOn: 'data.editable'
249
+ },
250
+ {
251
+ label: '是否可复制',
252
+ type: 'switch',
253
+ name: 'copyable',
254
+ mode: 'inline',
255
+ className: 'w-full'
256
+ },
257
+ {
258
+ type: 'input-text',
259
+ name: 'copyBtnLabel',
260
+ label: '复制按钮名称',
261
+ visibleOn: 'data.copyable',
262
+ pipeIn: defaultValue('')
263
+ },
264
+ {
265
+ name: 'copyBtnIcon',
266
+ label: '复制按钮图标',
267
+ type: 'icon-picker',
268
+ visibleOn: 'data.copyable'
269
+ },
270
+ getSchemaTpl('api', {
271
+ name: 'updateApi',
272
+ label: '修改时提交的 API',
273
+ visibleOn: 'data.editable'
274
+ }),
275
+ {
276
+ type: 'input-text',
277
+ name: 'confirmBtnLabel',
278
+ label: '确认编辑按钮名称',
279
+ visibleOn: 'data.editable',
280
+ pipeIn: defaultValue('')
281
+ },
282
+ {
283
+ name: 'confirmBtnIcon',
284
+ label: '确认编辑按钮图标',
285
+ type: 'icon-picker',
286
+ visibleOn: 'data.editable'
287
+ },
288
+ {
289
+ type: 'input-text',
290
+ name: 'cancelBtnLabel',
291
+ label: '取消编辑按钮名称',
292
+ visibleOn: 'data.editable',
293
+ pipeIn: defaultValue('')
294
+ },
295
+ {
296
+ name: 'cancelBtnIcon',
297
+ label: '取消编辑按钮图标',
298
+ type: 'icon-picker',
299
+ visibleOn: 'data.editable'
300
+ },
301
+ {
302
+ label: '是否可拖拽排序',
303
+ type: 'switch',
304
+ name: 'draggable',
305
+ mode: 'inline',
306
+ className: 'w-full'
307
+ },
308
+ {
309
+ label: '确认模式',
310
+ type: 'switch',
311
+ name: 'needConfirm',
312
+ mode: 'inline',
313
+ className: 'w-full'
314
+ },
315
+ {
316
+ label: '严格模式',
317
+ type: 'switch',
318
+ name: 'strictMode', // 同时需要配置strictMode
319
+ value: true,
320
+ mode: 'inline',
321
+ className: 'w-full'
322
+ },
323
+ {
324
+ label: '获取父级数据',
325
+ labelRemark: {
326
+ trigger: 'click',
327
+ className: 'm-l-xs',
328
+ rootClose: true,
329
+ content:
330
+ '配置"canAccessSuperData": true 同时配置 "strictMode": false 开启此特性,初始会自动映射父级数据域的同名变量。需要注意的是,这里只会初始会映射,一旦修改过就是当前行数据为主了。也就是说,表单项类型的,只会起到初始值的作用',
331
+ placement: 'left'
332
+ },
333
+ type: 'switch',
334
+ onChange: (value: any, oldValue: any, model: any, form: any) => {
335
+ if (value && !oldValue) {
336
+ form.setValues({strictMode: false});
337
+ } else {
338
+ form.setValues({strictMode: true});
339
+ }
340
+ },
341
+ name: 'canAccessSuperData', // 同时需要配置strictMode
342
+ mode: 'inline',
343
+ className: 'w-full'
344
+ }
345
+ ])
346
+ },
347
+ {
348
+ title: '外观',
349
+ body: [
350
+ getSchemaTpl('formItemMode'),
351
+ getSchemaTpl('horizontalMode'),
352
+ getSchemaTpl('horizontal', {
353
+ label: '',
354
+ visibleOn:
355
+ '(data.$$formMode == "horizontal" || data.mode == "horizontal") && data.label !== false && data.horizontal'
356
+ }),
357
+ getSchemaTpl('className'),
358
+ getSchemaTpl('className', {
359
+ label: 'Label CSS 类名',
360
+ name: 'labelClassName'
361
+ }),
362
+ getSchemaTpl('className', {
363
+ label: 'Input CSS 类名',
364
+ name: 'inputClassName'
365
+ }),
366
+ getSchemaTpl('className', {
367
+ label: '描述 CSS 类名',
368
+ name: 'descriptionClassName',
369
+ visibleOn: 'data.description'
370
+ })
371
+ ]
372
+ },
373
+ {
374
+ title: '显隐',
375
+ body: [getSchemaTpl('disabled'), getSchemaTpl('visible')]
376
+ },
377
+ {
378
+ title: '其他',
379
+ body: [
380
+ getSchemaTpl('required'),
381
+ getSchemaTpl('validateOnChange'),
382
+ getSchemaTpl('submitOnChange')
383
+ ]
384
+ }
385
+ ]);
386
+ };
387
+
388
+ filterProps(props: any) {
389
+ const arr = Array.isArray(props.value)
390
+ ? props.value
391
+ : typeof props.source === 'string'
392
+ ? resolveVariable(props.source, props.data)
393
+ : resolveVariable('items', props.data);
394
+
395
+ if (!Array.isArray(arr) || !arr.length) {
396
+ const mockedData: any = {};
397
+
398
+ if (Array.isArray(props.columns)) {
399
+ props.columns.forEach((column: any) => {
400
+ if (column.name) {
401
+ setVariable(mockedData, column.name, mockValue(column));
402
+ }
403
+ });
404
+ }
405
+
406
+ props.value = repeatArray(mockedData, 1).map((item, index) => ({
407
+ ...item,
408
+ id: index + 1
409
+ }));
410
+ } else {
411
+ // 只取10条预览,否则太多卡顿
412
+ props.value = arr.slice(0, 10);
413
+ }
414
+
415
+ return props;
416
+ }
417
+
418
+ // 自动插入 label
419
+ beforeInsert(event: PluginEvent<InsertEventContext>) {
420
+ const context = event.context;
421
+ if (
422
+ (context.info.plugin === this ||
423
+ context.node.sameIdChild?.info.plugin === this) &&
424
+ context.region === 'columns'
425
+ ) {
426
+ context.data = {
427
+ ...context.data,
428
+ label: context.data.label ?? context.subRenderer?.name ?? '列名称'
429
+ };
430
+ }
431
+ }
432
+ }
433
+
434
+ registerEditorPlugin(TableControlPlugin);
@@ -0,0 +1,70 @@
1
+ import {getSchemaTpl} from '../../component/schemaTpl';
2
+ import {registerEditorPlugin} from '../../manager';
3
+ import {BasePlugin} from '../../plugin';
4
+
5
+ export class TagControlPlugin extends BasePlugin {
6
+ // 关联渲染器名字
7
+ rendererName = 'input-tag';
8
+ $schema = '/schemas/TagControlSchema.json';
9
+
10
+ order = -420;
11
+
12
+ // 组件名称
13
+ name = '标签';
14
+ isBaseComponent = true;
15
+ icon = 'fa fa-tag';
16
+ description = `配置<code>options</code>可以实现选择选项`;
17
+ docLink = '/amis/zh-CN/components/form/input-tag';
18
+ tags = ['表单项'];
19
+ scaffold = {
20
+ type: 'input-tag',
21
+ label: '标签',
22
+ name: 'tag',
23
+ options: ['红色', '绿色', '蓝色']
24
+ };
25
+ previewSchema: any = {
26
+ type: 'form',
27
+ className: 'text-left',
28
+ mode: 'horizontal',
29
+ wrapWithPanel: false,
30
+ body: {
31
+ ...this.scaffold,
32
+ value: '红色'
33
+ }
34
+ };
35
+
36
+ panelTitle = '标签';
37
+ panelBody = [
38
+ {
39
+ type: 'input-text',
40
+ name: 'value',
41
+ label: '默认值',
42
+ visibleOn: 'typeof this.value !== "undefined"'
43
+ },
44
+ getSchemaTpl('clearable'),
45
+ getSchemaTpl('fieldSet', {
46
+ title: '选项',
47
+ body: [
48
+ getSchemaTpl('options', {
49
+ visibleOn: 'data.autoComplete !== false',
50
+ description: '设置选项后,输入时会下拉这些选项供用户参考。'
51
+ }),
52
+ getSchemaTpl('source', {
53
+ visibleOn: 'data.autoComplete !== false'
54
+ }),
55
+ {
56
+ type: 'input-text',
57
+ name: 'optionsTip',
58
+ label: '选项提示',
59
+ value: '最近您使用的标签'
60
+ },
61
+ getSchemaTpl('joinValues'),
62
+ getSchemaTpl('delimiter'),
63
+ getSchemaTpl('extractValue'),
64
+ getSchemaTpl('autoFill')
65
+ ]
66
+ })
67
+ ];
68
+ }
69
+
70
+ registerEditorPlugin(TagControlPlugin);
@@ -0,0 +1,186 @@
1
+ import {registerEditorPlugin} from '../../manager';
2
+ import {
3
+ BasePlugin,
4
+ BasicSubRenderInfo,
5
+ RendererEventContext,
6
+ SubRendererInfo
7
+ } from '../../plugin';
8
+ import {defaultValue, getSchemaTpl} from '../../component/schemaTpl';
9
+
10
+ export class TextControlPlugin extends BasePlugin {
11
+ // 关联渲染器名字
12
+ rendererName = 'input-text';
13
+ $schema = '/schemas/TextControlSchema.json';
14
+
15
+ order = -500;
16
+
17
+ // 组件名称
18
+ name = '文本框';
19
+ isBaseComponent = true;
20
+ icon = 'fa fa-terminal';
21
+ description =
22
+ '配置<code>options</code>可以实现选择选项,效果同<code>select</code>';
23
+ docLink = '/amis/zh-CN/components/form/input-text';
24
+ tags = ['表单项'];
25
+ scaffold = {
26
+ type: 'input-text',
27
+ label: '文本',
28
+ name: 'text'
29
+ };
30
+ previewSchema: any = {
31
+ type: 'form',
32
+ className: 'text-left',
33
+ wrapWithPanel: false,
34
+ mode: 'horizontal',
35
+ body: [
36
+ {
37
+ ...this.scaffold
38
+ }
39
+ ]
40
+ };
41
+
42
+ panelTitle = '文本框';
43
+ panelBody = [
44
+ getSchemaTpl('switchDefaultValue'),
45
+ {
46
+ type: 'input-text',
47
+ name: 'value',
48
+ label: '默认值',
49
+ visibleOn: 'typeof this.value !== "undefined"'
50
+ },
51
+ getSchemaTpl('hint'),
52
+ getSchemaTpl('showCounter'),
53
+
54
+ {
55
+ name: 'addOn',
56
+ label: '启用 addOn',
57
+ type: 'switch',
58
+ mode: 'inline',
59
+ className: 'w-full',
60
+ pipeIn: (value: any) => !!value,
61
+ pipeOut: (value: any) =>
62
+ value
63
+ ? {
64
+ label: '按钮',
65
+ type: 'button'
66
+ }
67
+ : null
68
+ },
69
+
70
+ {
71
+ type: 'combo',
72
+ multiLine: true,
73
+ name: 'addOn',
74
+ visibleOn: 'data.addOn',
75
+ items: [
76
+ {
77
+ name: 'type',
78
+ label: '类型',
79
+ type: 'button-group-select',
80
+ size: 'xs',
81
+ options: [
82
+ {
83
+ label: '文本',
84
+ value: 'text'
85
+ },
86
+
87
+ {
88
+ label: '按钮',
89
+ value: 'button'
90
+ },
91
+
92
+ {
93
+ label: '提交',
94
+ value: 'submit'
95
+ }
96
+ ]
97
+ },
98
+
99
+ {
100
+ name: 'label',
101
+ label: '文字',
102
+ type: 'input-text',
103
+ visibleOn: 'this.type === "text"'
104
+ },
105
+
106
+ {
107
+ name: 'icon',
108
+ label: 'Icon',
109
+ type: 'icon-picker',
110
+ visibleOn: 'this.type === "text"'
111
+ },
112
+
113
+ getSchemaTpl('className', {
114
+ visibleOn: 'this.type === "text"'
115
+ }),
116
+
117
+ {
118
+ name: 'position',
119
+ label: '位置',
120
+ type: 'button-group-select',
121
+ size: 'xs',
122
+ pipeIn: defaultValue('right'),
123
+ options: [
124
+ {
125
+ label: '左边',
126
+ value: 'left'
127
+ },
128
+
129
+ {
130
+ label: '右边',
131
+ value: 'right'
132
+ }
133
+ ]
134
+ }
135
+ ]
136
+ },
137
+
138
+ {
139
+ name: 'autoComplete',
140
+ label: '自动补全',
141
+ mode: 'inline',
142
+ className: 'w-full',
143
+ type: 'switch',
144
+ pipeIn: (value: any) => value !== false,
145
+ pipeOut: (value: any) => (value ? '' : false),
146
+ onChange: (value: any, oldValue: any, model: any, form: any) => {
147
+ if (oldValue === '' || oldValue) {
148
+ form.setValues({
149
+ __options: form.data.options,
150
+ options: []
151
+ });
152
+ } else {
153
+ form.setValues({
154
+ options: form.data.__options
155
+ });
156
+ }
157
+ }
158
+ },
159
+
160
+ getSchemaTpl('options', {
161
+ visibleOn: 'data.autoComplete !== false',
162
+ description: '设置选项后,输入时会下拉这些选项供用户参考。'
163
+ }),
164
+
165
+ getSchemaTpl('source', {
166
+ visibleOn: 'data.autoComplete !== false'
167
+ }),
168
+
169
+ getSchemaTpl('api', {
170
+ name: 'autoComplete',
171
+ label: '自动补全接口',
172
+ description:
173
+ '每次输入新内容后,将调用接口,根据接口返回更新选项。当前用户输入值在 `\\${term}` 中。',
174
+ visibleOn: 'data.autoComplete !== false'
175
+ }),
176
+ getSchemaTpl('multiple', {
177
+ visibleOn: 'data.options || data.source || data.autoComplete'
178
+ }),
179
+ getSchemaTpl('joinValues'),
180
+ getSchemaTpl('delimiter'),
181
+ getSchemaTpl('extractValue'),
182
+ getSchemaTpl('autoFill')
183
+ ];
184
+ }
185
+
186
+ registerEditorPlugin(TextControlPlugin);