forked from baidu/amis
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Schema.ts
526 lines (466 loc) · 11.8 KB
/
Schema.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
import {PageSchema} from './renderers/Page';
import {TplSchema} from './renderers/Tpl';
import {RemarkSchema} from './renderers/Remark';
import {ActionSchema} from './renderers/Action';
import {AlertSchema} from './renderers/Alert';
import {AudioSchema} from './renderers/Audio';
import {ButtonGroupSchema} from './renderers/ButtonGroup';
import {ButtonToolbarSchema} from './renderers/ButtonToolbar';
import {CardSchema} from './renderers/Card';
import {CardsSchema} from './renderers/Cards';
import {FormSchema} from './renderers/Form';
import {CarouselSchema} from './renderers/Carousel';
import {ChartSchema} from './renderers/Chart';
import {CollapseSchema} from './renderers/Collapse';
import {ColorSchema} from './renderers/Color';
import {ContainerSchema} from './renderers/Container';
import {CRUDSchema} from './renderers/CRUD';
import {DateSchema} from './renderers/Date';
import {DividerSchema} from './renderers/Divider';
import {DropdownButtonSchema} from './renderers/DropDownButton';
import {EachSchema} from './renderers/Each';
import {GridSchema} from './renderers/Grid';
import {Grid2DSchema} from './renderers/Grid2D';
import {HBoxSchema} from './renderers/HBox';
import {IconSchema} from './renderers/Icon';
import {IFrameSchema} from './renderers/IFrame';
import {ImageSchema} from './renderers/Image';
import {ImagesSchema} from './renderers/Images';
import {JsonSchema} from './renderers/Json';
import {LinkSchema} from './renderers/Link';
import {ListSchema} from './renderers/List';
import {MappingSchema} from './renderers/Mapping';
import {NavSchema} from './renderers/Nav';
import {OperationSchema} from './renderers/Operation';
import {PanelSchema} from './renderers/Panel';
import {PlainSchema} from './renderers/Plain';
import {ProgressSchema} from './renderers/Progress';
import {QRCodeSchema} from './renderers/QRCode';
import {ServiceSchema} from './renderers/Service';
import {StatusSchema} from './renderers/Status';
import {SwitchSchema} from './renderers/Switch';
import {TabsSchema} from './renderers/Tabs';
import {TasksSchema} from './renderers/Tasks';
import {VBoxSchema} from './renderers/VBox';
import {VideoSchema} from './renderers/Video';
import {WizardSchema} from './renderers/Wizard';
import {WrapperSchema} from './renderers/Wrapper';
import {TableSchema} from './renderers/Table';
import {DialogSchema} from './renderers/Dialog';
import {DrawerSchema} from './renderers/Drawer';
import {SearchBoxSchema} from './renderers/SearchBox';
import {SparkLineSchema} from './renderers/SparkLine';
import {PaginationWrapperSchema} from './renderers/PaginationWrapper';
import {PaginationSchema} from './renderers/Pagination';
// 每加个类型,这补充一下。
export type SchemaType =
| 'form'
| 'button'
| 'submit'
| 'reset'
| 'alert'
| 'app'
| 'audio'
| 'button-group'
| 'button-toolbar'
| 'card'
| 'cards'
| 'carousel'
| 'chart'
| 'collapse'
| 'color'
| 'container'
| 'crud'
| 'custom'
| 'date'
| 'static-date' // 这个几个跟表单项同名,再form下面用必须带前缀 static-
| 'datetime'
| 'static-datetime' // 这个几个跟表单项同名,再form下面用必须带前缀 static-
| 'time'
| 'static-time' // 这个几个跟表单项同名,再form下面用必须带前缀 static-
| 'month'
| 'static-month' // 这个几个跟表单项同名,再form下面用必须带前缀 static-
| 'dialog'
| 'divider'
| 'dropdown-button'
| 'drawer'
| 'each'
| 'grid'
| 'grid-2d'
| 'hbox'
| 'icon'
| 'iframe'
| 'image'
| 'static-image' // 这个几个跟表单项同名,再form下面用必须带前缀 static-
| 'images'
| 'static-images' // 这个几个跟表单项同名,再form下面用必须带前缀 static-
| 'json'
| 'static-json' // 这个几个跟表单项同名,再form下面用必须带前缀 static-
| 'link'
| 'list'
| 'log'
| 'static-list' // 这个几个跟表单项同名,再form下面用必须带前缀 static-
| 'map'
| 'mapping'
| 'nav'
| 'page'
| 'pagination'
| 'pagination-wrapper'
| 'operation'
| 'panel'
| 'plain'
| 'text'
| 'progress'
| 'qrcode'
| 'qr-code'
| 'remark'
| 'search-box'
| 'service'
| 'sparkline'
| 'status'
| 'switch'
| 'table'
| 'static-table' // 这个几个跟表单项同名,再form下面用必须带前缀 static-
| 'tabs'
| 'html'
| 'tpl'
| 'tasks'
| 'vbox'
| 'video'
| 'wizard'
| 'wrapper';
export type SchemaObject =
| PageSchema
| TplSchema
| RemarkSchema
| ActionSchema
| AlertSchema
| AudioSchema
| ButtonGroupSchema
| ButtonToolbarSchema
| CardSchema
| CardsSchema
| CarouselSchema
| ChartSchema
| CollapseSchema
| ColorSchema
| ContainerSchema
| CRUDSchema
| DateSchema
| DialogSchema
| DividerSchema
| DrawerSchema
| DropdownButtonSchema
| EachSchema
| GridSchema
| Grid2DSchema
| HBoxSchema
| IconSchema
| IFrameSchema
| ImageSchema
| ImagesSchema
| JsonSchema
| LinkSchema
| ListSchema
| MappingSchema
| NavSchema
| OperationSchema
| PaginationSchema
| PaginationWrapperSchema
| PanelSchema
| PlainSchema
| ProgressSchema
| QRCodeSchema
| SearchBoxSchema
| ServiceSchema
| SparkLineSchema
| StatusSchema
| SwitchSchema
| TableSchema
| TabsSchema
| TasksSchema
| VBoxSchema
| VideoSchema
| WizardSchema
| WrapperSchema
| FormSchema;
export type SchemaCollection =
| SchemaObject
| SchemaTpl
| Array<SchemaObject | SchemaTpl>;
/**
* 表达式,语法 `data.xxx > 5`。
*/
export type SchemaExpression = string;
/**
* css类名,配置字符串,或者对象。
*
* className: "red"
*
* 用对象配置时意味着你能跟表达式一起搭配使用,如:
*
* className: {
* "red": "data.progress > 80",
* "blue": "data.progress > 60"
* }
*/
export type SchemaClassName =
| string
| {
[propName: string]: true | false | null | SchemaExpression;
};
// /**
// * css类名,配置字符串,或者对象。
// *
// * className: "red"
// *
// * 用对象配置时意味着你能跟表达式一起搭配使用,如:
// *
// * className: {
// * "red": "data.progress > 80",
// * "blue": "data.progress > 60"
// * }
// */
// export type SchemaClassName = string;
export interface SchemaApiObject {
/**
* API 发送类型
*/
method?: 'get' | 'post' | 'put' | 'delete' | 'patch';
/**
* API 发送目标地址
*/
url: SchemaUrlPath;
/**
* 用来控制携带数据. 当key 为 `&` 值为 `$$` 时, 将所有原始数据打平设置到 data 中. 当值为 $$ 将所有原始数据赋值到对应的 key 中. 当值为 $ 打头时, 将变量值设置到 key 中.
*/
data?: {
[propName: string]: any;
};
/**
* 用来做接口返回的数据映射。
*/
responseData?: {
[propName: string]: any;
};
/**
* 如果 method 为 get 的接口,设置了 data 信息。
* 默认 data 会自动附带在 query 里面发送给后端。
*
* 如果想通过 body 发送给后端,那么请把这个配置成 false。
*
* 但是,浏览器还不支持啊,设置了只是摆设。
*/
attachDataToQuery?: boolean;
/**
* 发送体的格式
*/
dataType?: 'json' | 'form-data' | 'form';
/**
* 如果是文件下载接口,请配置这个。
*/
responseType?: 'blob';
/**
* 携带 headers,用法和 data 一样,可以用变量。
*/
headers?: {
[propName: string]: string | number;
};
/**
* 设置发送条件
*/
sendOn?: SchemaExpression;
/**
* 默认都是追加模式,如果想完全替换把这个配置成 true
*/
replaceData?: boolean;
/**
* 是否自动刷新,当 url 中的取值结果变化时,自动刷新数据。
*/
autoRefresh?: boolean;
/**
* 如果设置了值,同一个接口,相同参数,指定的时间(单位:ms)内请求将直接走缓存。
*/
cache?: number;
/**
* qs 配置项
*/
qsOptions?: {
arrayFormat?: 'indices' | 'brackets' | 'repeat' | 'comma';
indices?: boolean;
allowDots?: boolean;
};
}
export type SchemaApi = string | SchemaApiObject;
/**
* 组件名字,这个名字可以用来定位,用于组件通信
*/
export type SchemaName = string;
/**
* 配置刷新动作,这个动作通常在完成渲染器本省的固定动作后出发。
*
* 一般用来配置目标组件的 name 属性。多个目标可以用逗号隔开。
*
* 当目标是 windows 时表示刷新整个页面。
*
* 刷新目标的同时还支持传递参数如: `foo?a=${a}&b=${b},boo?c=${c}`
*/
export type SchemaReload = string;
/**
* 页面跳转地址,支持相对地址。
*/
export type SchemaRedirect = string;
/**
* 支持两种语法,但是不能混着用。分别是:
*
* 1. `${xxx}` 或者 `${xxx|upperCase}`
* 2. `<%= data.xxx %>`
*
*
* 更多文档:https://baidu.gitee.io/amis/docs/concepts/template
*/
export type SchemaTpl = string;
/**
* 初始数据,设置得值可用于组件内部模板使用。
*/
export type SchemaDefaultData = {
[propName: string]: any;
};
/**
* 用来关联 json schema 的,不用管。
*/
export type SchemaSchema = string;
/**
* iconfont 里面的类名。
*/
export type SchemaIcon = string;
export type SchemaTokenizeableString = string;
export type SchemaUrlPath = SchemaTokenizeableString;
export type SchemaTooltip =
| string
| {
/**
* 标题
*/
title?: string;
/**
* 内容
*/
content: string;
};
/**
* 消息文案配置,记住这个优先级是最低的,如果你的接口返回了 msg,接口返回的优先。
*/
export type SchemaMessage = {
/**
* 获取失败时的提示
*/
fetchFailed?: string;
/**
* 获取成功的提示,默认为空。
*/
fetchSuccess?: string;
/**
* 保存失败时的提示。
*/
saveFailed?: string;
/**
* 保存成功时的提示。
*/
saveSuccess?: string;
};
export type SchemaFunction = string | Function;
export interface BaseSchema {
type: SchemaType;
/**
* 容器 css 类名
*/
className?: SchemaClassName;
/**
* 配合 definitions 一起使用,可以实现无限循环的渲染器。
*/
$ref?: string;
/**
* 是否禁用
*/
disabled?: boolean;
/**
* 是否禁用表达式
*/
disabledOn?: SchemaExpression;
/**
* 是否隐藏
* @deprecated 推荐用 visible
*/
hidden?: boolean;
/**
* 是否隐藏表达式
* @deprecated 推荐用 visibleOn
*/
hiddenOn?: SchemaExpression;
/**
* 是否显示
*/
visible?: boolean;
/**
* 是否显示表达式
*/
visibleOn?: SchemaExpression;
}
export interface Option {
/**
* 用来显示的文字
*/
label?: string;
/**
* 可以用来给 Option 标记个范围,让数据展示更清晰。
*
* 这个只有在数值展示的时候显示。
*/
scopeLabel?: string;
/**
* 请保证数值唯一,多个选项值一致会认为是同一个选项。
*/
value?: any;
/**
* 是否禁用
*/
disabled?: boolean;
/**
* 支持嵌套
*/
children?: Options;
/**
* 是否可见
*/
visible?: boolean;
/**
* 最好不要用!因为有 visible 就够了。
*
* @deprecated 用 visible
*/
hidden?: boolean;
/**
* 描述,部分控件支持
*/
description?: string;
/**
* 标记后数据延时加载
*/
defer?: boolean;
/**
* 如果设置了,优先级更高,不设置走 source 接口加载。
*/
deferApi?: SchemaApi;
/**
* 标记正在加载。只有 defer 为 true 时有意义。内部字段不可以外部设置
*/
loading?: boolean;
/**
* 只有设置了 defer 才有意义,内部字段不可以外部设置
*/
loaded?: boolean;
[propName: string]: any;
}
export interface Options extends Array<Option> {}
export type RootSchema = PageSchema;