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,93 @@
1
+ import {registerEditorPlugin} from '../manager';
2
+ import {BasePlugin} from '../plugin';
3
+ import {getSchemaTpl} from '../component/schemaTpl';
4
+
5
+ export class LinkPlugin extends BasePlugin {
6
+ // 关联渲染器名字
7
+ rendererName = 'link';
8
+ $schema = '/schemas/LinkSchema.json';
9
+
10
+ // 组件名称
11
+ name = '链接';
12
+ isBaseComponent = true;
13
+ description = '用来展示文字链接';
14
+ tags = ['展示'];
15
+ icon = 'fa fa-link';
16
+ scaffold = {
17
+ type: 'link',
18
+ value: 'http://www.baidu.com/'
19
+ };
20
+ previewSchema = {
21
+ ...this.scaffold,
22
+ label: this.name
23
+ };
24
+
25
+ panelTitle = '链接';
26
+ panelBody = [
27
+ getSchemaTpl('tabs', [
28
+ {
29
+ title: '常规',
30
+ body: [
31
+ {
32
+ name: 'href',
33
+ type: 'input-text',
34
+ label: '目标地址, 支持取变量。',
35
+ description: '如果已绑定字段名,可以不用设置'
36
+ },
37
+
38
+ {
39
+ name: 'body',
40
+ type: 'input-text',
41
+ label: '内容',
42
+ description: '不填写时,自动使用目标地址值'
43
+ },
44
+
45
+ {
46
+ name: 'blank',
47
+ type: 'switch',
48
+ label: '是否新窗口打开',
49
+ mode: 'inline',
50
+ className: 'w-full'
51
+ },
52
+
53
+ {
54
+ name: 'disabled',
55
+ type: 'switch',
56
+ label: '是否禁用',
57
+ mode: 'inline',
58
+ className: 'w-full'
59
+ },
60
+
61
+ {
62
+ name: 'htmlTarget',
63
+ type: 'input-text',
64
+ label: 'HTML Target'
65
+ },
66
+
67
+ getSchemaTpl('icon', {
68
+ label: '左侧图标'
69
+ }),
70
+
71
+ getSchemaTpl('icon', {
72
+ label: '右侧图标',
73
+ name: 'rightIcon'
74
+ })
75
+ ]
76
+ },
77
+ {
78
+ title: '外观',
79
+ body: [
80
+ getSchemaTpl('className', {
81
+ autoComplete: false
82
+ })
83
+ ]
84
+ },
85
+ {
86
+ title: '显隐',
87
+ body: [getSchemaTpl('ref'), getSchemaTpl('visible')]
88
+ }
89
+ ])
90
+ ];
91
+ }
92
+
93
+ registerEditorPlugin(LinkPlugin);
@@ -0,0 +1,278 @@
1
+ import {Button, resolveVariable} from 'amis';
2
+ import React from 'react';
3
+ import {registerEditorPlugin} from '../manager';
4
+ import {
5
+ BaseEventContext,
6
+ BasePlugin,
7
+ BasicRendererInfo,
8
+ BasicToolbarItem,
9
+ ContextMenuEventContext,
10
+ ContextMenuItem,
11
+ PluginInterface,
12
+ RendererInfoResolveEventContext
13
+ } from '../plugin';
14
+ import {defaultValue, getSchemaTpl} from '../component/schemaTpl';
15
+ import {diff, JSONPipeOut, repeatArray} from '../util';
16
+
17
+ export class ListPlugin extends BasePlugin {
18
+ // 关联渲染器名字
19
+ rendererName = 'list';
20
+ $schema = '/schemas/ListSchema.json';
21
+
22
+ // 组件名称
23
+ name = '列表';
24
+ isBaseComponent = true;
25
+ description =
26
+ '展示一个列表,可以自定标题、副标题,内容及按钮组部分。当前组件需要配置数据源,不自带数据拉取,请优先使用 「CRUD」 组件。';
27
+ docLink = '/amis/zh-CN/components/list';
28
+ tags = ['展示'];
29
+ icon = 'fa fa-list';
30
+ scaffold = {
31
+ type: 'list',
32
+ listItem: {
33
+ body: [
34
+ {
35
+ type: 'tpl',
36
+ tpl: '简单的展示数据:$a $b'
37
+ }
38
+ ],
39
+ actions: [
40
+ {
41
+ icon: 'fa fa-eye',
42
+ type: 'button'
43
+ }
44
+ ]
45
+ }
46
+ };
47
+ previewSchema = {
48
+ ...this.scaffold,
49
+ items: [
50
+ {a: 1, b: 2},
51
+ {a: 3, b: 4},
52
+ {a: 5, b: 6}
53
+ ]
54
+ };
55
+
56
+ panelTitle = '列表';
57
+ panelBodyCreator = (context: BaseEventContext) => {
58
+ const isCRUDBody = context.schema.type === 'crud';
59
+
60
+ return getSchemaTpl('tabs', [
61
+ {
62
+ title: '常规',
63
+ body: [
64
+ {
65
+ children: (
66
+ <Button
67
+ level="danger"
68
+ size="sm"
69
+ block
70
+ onClick={this.editDetail.bind(this, context.id)}
71
+ >
72
+ 配置成员详情
73
+ </Button>
74
+ )
75
+ },
76
+ {
77
+ type: 'divider'
78
+ },
79
+ {
80
+ name: 'title',
81
+ type: 'input-text',
82
+ label: '标题'
83
+ },
84
+ isCRUDBody
85
+ ? null
86
+ : {
87
+ name: 'source',
88
+ type: 'input-text',
89
+ label: '数据源',
90
+ pipeIn: defaultValue('${items}'),
91
+ description: '绑定当前环境变量'
92
+ },
93
+ {
94
+ name: 'placeholder',
95
+ pipeIn: defaultValue('没有数据'),
96
+ type: 'input-text',
97
+ label: '无数据提示'
98
+ }
99
+ ]
100
+ },
101
+ {
102
+ title: '外观',
103
+ body: [
104
+ {
105
+ name: 'showHeader',
106
+ type: 'switch',
107
+ mode: 'inline',
108
+ className: 'block',
109
+ label: '是否显示头部',
110
+ pipeIn: defaultValue(true)
111
+ },
112
+ {
113
+ name: 'showFooter',
114
+ type: 'switch',
115
+ mode: 'inline',
116
+ className: 'block',
117
+ label: '是否显示底部',
118
+ pipeIn: defaultValue(true)
119
+ },
120
+ getSchemaTpl('className', {
121
+ label: 'CSS 类名'
122
+ }),
123
+ getSchemaTpl('className', {
124
+ name: 'listClassName',
125
+ label: 'List div CSS 类名'
126
+ }),
127
+ getSchemaTpl('className', {
128
+ name: 'headerClassName',
129
+ label: '头部 CSS 类名'
130
+ }),
131
+ getSchemaTpl('className', {
132
+ name: 'footerClassName',
133
+ label: '底部 CSS 类名'
134
+ })
135
+ ]
136
+ },
137
+ {
138
+ title: '显隐',
139
+ body: [getSchemaTpl('ref'), getSchemaTpl('visible')]
140
+ }
141
+ ]);
142
+ };
143
+
144
+ filterProps(props: any) {
145
+ if (props.isSlot) {
146
+ props.value = [props.data];
147
+ return props;
148
+ }
149
+
150
+ const data = {
151
+ ...props.defaultData,
152
+ ...props.data
153
+ };
154
+ let arr = Array.isArray(props.value)
155
+ ? props.value
156
+ : typeof props.source === 'string'
157
+ ? resolveVariable(props.source, data)
158
+ : resolveVariable('items', data);
159
+
160
+ if (!Array.isArray(arr) || !arr.length) {
161
+ const mockedData: any = this.buildMockData();
162
+ props.value = repeatArray(mockedData, 1).map((item, index) => ({
163
+ ...item,
164
+ id: index + 1
165
+ }));
166
+ }
167
+
168
+ const {$schema, ...rest} = props;
169
+
170
+ return {
171
+ ...JSONPipeOut(rest),
172
+ $schema
173
+ };
174
+ }
175
+
176
+ buildMockData() {
177
+ return {
178
+ id: 666,
179
+ title: '假数据',
180
+ description: '假数据',
181
+ a: '假数据',
182
+ b: '假数据'
183
+ };
184
+ }
185
+
186
+ editDetail(id: string) {
187
+ const manager = this.manager;
188
+ const store = manager.store;
189
+ const node = store.getNodeById(id);
190
+ const value = store.getValueOf(id);
191
+
192
+ node &&
193
+ value &&
194
+ this.manager.openSubEditor({
195
+ title: '配置成员详情',
196
+ value: {
197
+ ...value.listItem
198
+ },
199
+ slot: {
200
+ type: 'list',
201
+ listItem: '$$'
202
+ },
203
+ onChange: newValue => {
204
+ newValue = {...value, listItem: newValue};
205
+ manager.panelChangeValue(newValue, diff(value, newValue));
206
+ },
207
+ data: {
208
+ // TODO 默认数据不对
209
+ items: [this.buildMockData()]
210
+ }
211
+ });
212
+ }
213
+
214
+ buildEditorToolbar(
215
+ {id, info, schema}: BaseEventContext,
216
+ toolbars: Array<BasicToolbarItem>
217
+ ) {
218
+ if (
219
+ info.renderer.name === 'list' ||
220
+ (info.renderer.name === 'crud' && schema.mode === 'list')
221
+ ) {
222
+ toolbars.push({
223
+ icon: 'fa fa-expand',
224
+ order: 100,
225
+ tooltip: '配置成员渲染器',
226
+ onClick: this.editDetail.bind(this, id)
227
+ });
228
+ }
229
+ }
230
+
231
+ buildEditorContextMenu(
232
+ {id, schema, region, info, selections}: ContextMenuEventContext,
233
+ menus: Array<ContextMenuItem>
234
+ ) {
235
+ if (selections.length || info?.plugin !== this) {
236
+ return;
237
+ }
238
+ if (
239
+ info.renderer.name === 'list' ||
240
+ (info.renderer.name === 'crud' && schema.mode === 'list')
241
+ ) {
242
+ menus.push('|', {
243
+ label: '配置成员详情',
244
+ onSelect: this.editDetail.bind(this, id)
245
+ });
246
+ }
247
+ }
248
+
249
+ // 为了能够自动注入数据。
250
+ getRendererInfo(
251
+ context: RendererInfoResolveEventContext
252
+ ): BasicRendererInfo | void {
253
+ const plugin: PluginInterface = this;
254
+ const {renderer, schema} = context;
255
+ if (
256
+ !schema.$$id &&
257
+ schema.$$editor?.renderer.name === 'crud' &&
258
+ renderer.name === 'list'
259
+ ) {
260
+ return {
261
+ ...({id: schema.$$editor.id} as any),
262
+ name: plugin.name!,
263
+ regions: plugin.regions,
264
+ patchContainers: plugin.patchContainers,
265
+ vRendererConfig: plugin.vRendererConfig,
266
+ wrapperProps: plugin.wrapperProps,
267
+ wrapperResolve: plugin.wrapperResolve,
268
+ filterProps: plugin.filterProps,
269
+ $schema: plugin.$schema,
270
+ renderRenderer: plugin.renderRenderer
271
+ };
272
+ }
273
+
274
+ return super.getRendererInfo(context);
275
+ }
276
+ }
277
+
278
+ registerEditorPlugin(ListPlugin);
@@ -0,0 +1,229 @@
1
+ import React from 'react';
2
+ import {registerEditorPlugin} from '../manager';
3
+ import {
4
+ BaseEventContext,
5
+ BasePlugin,
6
+ BasicRendererInfo,
7
+ InsertEventContext,
8
+ PluginEvent,
9
+ RegionConfig,
10
+ RendererInfo,
11
+ RendererInfoResolveEventContext,
12
+ VRendererConfig
13
+ } from '../plugin';
14
+ import {defaultValue, getSchemaTpl} from '../component/schemaTpl';
15
+ import {VRenderer} from '../component/VRenderer';
16
+
17
+ export class ListItemPlugin extends BasePlugin {
18
+ // 关联渲染器名字
19
+ rendererName = 'list-item';
20
+ isBaseComponent = true;
21
+ $schema = '/schemas/ListItemSchema.json';
22
+
23
+ regions: Array<RegionConfig> = [
24
+ {
25
+ key: 'body',
26
+ label: '内容区',
27
+ renderMethod: 'renderBody',
28
+ preferTag: '展示'
29
+ },
30
+ {
31
+ key: 'actions',
32
+ label: '按钮集合',
33
+ preferTag: '按钮',
34
+ renderMethod: 'renderRight',
35
+ insertPosition: 'inner'
36
+ }
37
+ ];
38
+
39
+ panelTitle = '列表项';
40
+ panelBody = getSchemaTpl('tabs', [
41
+ {
42
+ title: '基本',
43
+ body: [
44
+ // {
45
+ // children: (
46
+ // <Button
47
+ // size="sm"
48
+ // className="m-b-sm"
49
+ // level="info"
50
+ // block
51
+ // onClick={() => {
52
+ // this.pickChild('actions', 'actions', undefined, ['button']);
53
+ // }}
54
+ // >
55
+ // 新增按钮
56
+ // </Button>
57
+ // )
58
+ // },
59
+ // {
60
+ // children: (
61
+ // <div>
62
+ // <Button
63
+ // level="primary"
64
+ // size="sm"
65
+ // block
66
+ // onClick={this.handleAdd}
67
+ // >
68
+ // 新增内容
69
+ // </Button>
70
+ // </div>
71
+ // )
72
+ // },
73
+ // {
74
+ // type: 'divider'
75
+ // },
76
+ {
77
+ name: 'title',
78
+ type: 'input-text',
79
+ label: '标题',
80
+ descrition: '支持模板语法如: ${xxx}'
81
+ },
82
+ {
83
+ name: 'subTitle',
84
+ type: 'input-text',
85
+ label: '副标题',
86
+ descrition: '支持模板语法如: ${xxx}'
87
+ },
88
+ {
89
+ name: 'avatar',
90
+ type: 'input-text',
91
+ label: '图片地址',
92
+ descrition: '支持模板语法如: ${xxx}'
93
+ },
94
+ {
95
+ name: 'desc',
96
+ type: 'textarea',
97
+ label: '描述',
98
+ descrition: '支持模板语法如: ${xxx}'
99
+ }
100
+ ]
101
+ },
102
+ {
103
+ title: '外观',
104
+ body: [
105
+ getSchemaTpl('className', {
106
+ name: 'avatarClassName',
107
+ label: '图片 CSS 类名',
108
+ pipeIn: defaultValue('thumb-sm avatar m-r')
109
+ }),
110
+ getSchemaTpl('className', {
111
+ name: 'titleClassName',
112
+ label: '标题 CSS 类名'
113
+ })
114
+ ]
115
+ }
116
+ ]);
117
+
118
+ getRendererInfo({
119
+ renderer,
120
+ schema
121
+ }: RendererInfoResolveEventContext): BasicRendererInfo | void {
122
+ if (schema.$$id && this.rendererName === renderer.name) {
123
+ // 复制部分信息出去
124
+ return {
125
+ name: this.panelTitle,
126
+ regions: this.regions,
127
+ // patchContainers: plugin.patchContainers,
128
+ // // wrapper: plugin.wrapper,
129
+ // vRendererConfig: plugin.vRendererConfig,
130
+ // wrapperProps: plugin.wrapperProps,
131
+ // wrapperResolve: plugin.wrapperResolve,
132
+ // filterProps: plugin.filterProps,
133
+ $schema: this.$schema
134
+ // renderRenderer: plugin.renderRenderer
135
+ };
136
+ }
137
+ }
138
+
139
+ fieldWrapperResolve = (dom: HTMLElement) => dom;
140
+
141
+ overrides = {
142
+ renderFeild: function (
143
+ this: any,
144
+ region: string,
145
+ field: any,
146
+ index: any,
147
+ props: any
148
+ ) {
149
+ const dom = this.super(region, field, index, props);
150
+ const info: RendererInfo = this.props.$$editor;
151
+
152
+ if (!info || !field.$$id) {
153
+ return dom;
154
+ }
155
+
156
+ const plugin = info.plugin as ListItemPlugin;
157
+ const id = field.$$id;
158
+ return (
159
+ <VRenderer
160
+ plugin={info.plugin}
161
+ renderer={info.renderer}
162
+ multifactor
163
+ key={id}
164
+ $schema="/schemas/ListBodyField.json"
165
+ hostId={info.id}
166
+ memberIndex={index}
167
+ name={`${`字段${index + 1}`}`}
168
+ id={id}
169
+ draggable={false}
170
+ wrapperResolve={plugin.fieldWrapperResolve}
171
+ schemaPath={`${info.schemaPath}/body/${index}`}
172
+ path={`${this.props.$path}/${index}`} // 好像没啥用
173
+ data={this.props.data} // 好像没啥用
174
+ >
175
+ {dom}
176
+ </VRenderer>
177
+ );
178
+ }
179
+ };
180
+
181
+ vRendererConfig: VRendererConfig = {
182
+ panelTitle: '字段',
183
+ panelBodyCreator: (context: BaseEventContext) => {
184
+ return [
185
+ getSchemaTpl('label'),
186
+ getSchemaTpl('className', {
187
+ name: 'labelClassName',
188
+ label: 'Label CSS 类名',
189
+ visibleOn: 'this.label'
190
+ })
191
+ /*{
192
+ children: (
193
+ <Button
194
+ size="sm"
195
+ level="info"
196
+ className="m-b"
197
+ block
198
+ onClick={this.exchangeRenderer.bind(this, context.id)}
199
+ >
200
+ 更改渲染器类型
201
+ </Button>
202
+ )
203
+ }*/
204
+ ];
205
+ }
206
+ };
207
+
208
+ /*exchangeRenderer(id: string) {
209
+ this.manager.showReplacePanel(id, '展示');
210
+ }*/
211
+
212
+ // 自动插入 label
213
+ beforeInsert(event: PluginEvent<InsertEventContext>) {
214
+ const context = event.context;
215
+
216
+ if (
217
+ (context.info.plugin === this ||
218
+ context.node.sameIdChild?.info.plugin === this) &&
219
+ context.region === 'body'
220
+ ) {
221
+ context.data = {
222
+ ...context.data,
223
+ label: context.data.label ?? context.subRenderer?.name ?? '列名称'
224
+ };
225
+ }
226
+ }
227
+ }
228
+
229
+ registerEditorPlugin(ListItemPlugin);
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @file 日志组件
3
+ */
4
+ import {registerEditorPlugin} from '../manager';
5
+ import {BaseEventContext, BasePlugin} from '../plugin';
6
+ import {getSchemaTpl} from '../component/schemaTpl';
7
+
8
+ export class LogPlugin extends BasePlugin {
9
+ // 关联渲染器名字
10
+ rendererName = 'log';
11
+ $schema = '/schemas/LogSchema.json';
12
+
13
+ // 组件名称
14
+ name = '日志';
15
+ isBaseComponent = true;
16
+ icon = 'fa fa-file-text-o';
17
+ description = '用来实时显示日志';
18
+ docLink = '/amis/zh-CN/components/log';
19
+ tags = ['展示'];
20
+ previewSchema = {
21
+ type: 'log',
22
+ height: 120
23
+ };
24
+ scaffold: any = {
25
+ type: 'log'
26
+ };
27
+
28
+ panelTitle = '日志';
29
+ panelBodyCreator = (context: BaseEventContext) => {
30
+ return getSchemaTpl('tabs', [
31
+ {
32
+ title: '常规',
33
+ body: [
34
+ getSchemaTpl('api', {
35
+ label: '日志数据源',
36
+ name: 'source'
37
+ })
38
+ ]
39
+ },
40
+ {
41
+ title: '外观',
42
+ body: [getSchemaTpl('className')]
43
+ },
44
+ {
45
+ title: '显隐',
46
+ body: [getSchemaTpl('ref'), getSchemaTpl('visible')]
47
+ }
48
+ ]);
49
+ };
50
+ }
51
+
52
+ registerEditorPlugin(LogPlugin);