mirror of
https://gitee.com/baidu/amis.git
synced 2024-12-14 00:41:26 +08:00
271 lines
6.1 KiB
Markdown
Executable File
271 lines
6.1 KiB
Markdown
Executable File
---
|
||
title: 配置与组件
|
||
description: 配置与组件
|
||
type: 0
|
||
group: 💡 概念
|
||
menuName: 配置与组件
|
||
icon:
|
||
order: 9
|
||
---
|
||
|
||
## 最简单的 amis 配置
|
||
|
||
一个最简单的 amis 配置看起来是这样的:
|
||
|
||
```json
|
||
{
|
||
"type": "page",
|
||
"body": "Hello World!"
|
||
}
|
||
```
|
||
|
||
请观察上面的代码,这是一段 JSON,它的含义是:
|
||
|
||
1. `type` 是 amis 节点中最重要的字段,它告诉 amis 当前节点需要渲染的是`Page`组件。
|
||
2. 而 `body` 字段会作为 `Page` 组件的属性,`Page` 组件根据这个值来渲染页面内容。
|
||
|
||
这段配置的效果如下所示:
|
||
|
||
```schema
|
||
{
|
||
"type": "page",
|
||
"body": "Hello World!"
|
||
}
|
||
```
|
||
|
||
上面这个配置是可以**实时修改预览**的,尝试改一下 `Hello World!` 的值。
|
||
|
||
> 不过这个实时预览功能对于某些属性不生效,如果发现不符合预期,需要复制 JSON,打开另一个页面后粘贴。
|
||
|
||
## 组件
|
||
|
||
上面提到,`type`字段会告诉 amis 当前节点渲染的组件为`Page`,组件节点的配置永远都是由 **`type`字段** (用于标识当前是哪个组件)和 **属性** 构成的。
|
||
|
||
```
|
||
{
|
||
"type": "xxx",
|
||
...其它属性
|
||
}
|
||
```
|
||
|
||
## 组件树
|
||
|
||
这次我们看一个稍微复杂一点的配置:
|
||
|
||
```json
|
||
{
|
||
"type": "page",
|
||
"body": {
|
||
"type": "tpl",
|
||
"tpl": "Hello World!"
|
||
}
|
||
}
|
||
```
|
||
|
||
该配置渲染页面如下:
|
||
|
||
```schema
|
||
{
|
||
"type": "page",
|
||
"body": {
|
||
"type": "tpl",
|
||
"tpl": "Hello World!"
|
||
}
|
||
}
|
||
```
|
||
|
||
最终效果和前面的示例一样,但这次 `Page` 组件的 `body` 属性值配置了一个对象,**通过`type`指明`body`内容区内会渲染一个叫`Tpl`的组件**,它是一个模板渲染组件。
|
||
|
||
在 `body` 中除了配置对象,还可以是数组,比如下面的例子:
|
||
|
||
```schema: scope="body"
|
||
[
|
||
{
|
||
"type": "tpl",
|
||
"tpl": "Hello World!"
|
||
},
|
||
{
|
||
"type": "divider"
|
||
},
|
||
{
|
||
"type": "form",
|
||
"body": [
|
||
{
|
||
"type": "input-text",
|
||
"name": "name",
|
||
"label": "姓名"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
```
|
||
|
||
可以看到通过数组的形式,增加了 `divider` 和 `form` 组件。
|
||
|
||
除了 `Page` 之外,还有很多**容器型**的组件都有 `body` 属性,通过这种树形结构,amis 就能实现复杂页面制作。
|
||
|
||
> **注意:**
|
||
>
|
||
> `Page`是 amis 页面配置中 **必须也是唯一的顶级节点**
|
||
|
||
### 通过树形来实现布局
|
||
|
||
下面这个页面就是通过树形组合出来的,大体结构是这样:
|
||
|
||
```
|
||
Page
|
||
├── Toolbar
|
||
│ └─ Form 顶部表单项
|
||
├── Grid // 用于水平布局
|
||
│ ├─ Panel
|
||
│ │ └─ Tabs
|
||
│ │ └─ Chart
|
||
│ └─ Panel
|
||
│ └─ Chart
|
||
└── CRUD
|
||
```
|
||
|
||
```schema
|
||
{
|
||
"type": "page",
|
||
"toolbar": [{
|
||
"type": "form",
|
||
"panelClassName": "mb-0",
|
||
"title": "",
|
||
"body": [{
|
||
"type": "select",
|
||
"label": "区域",
|
||
"name": "businessLineId",
|
||
"selectFirst": true,
|
||
"mode": "inline",
|
||
"options": ["北京", "上海"],
|
||
"checkAll": false
|
||
}, {
|
||
"label": "时间范围",
|
||
"type": "input-date-range",
|
||
"name": "dateRange",
|
||
"inline": true,
|
||
"value": "-1month,+0month",
|
||
"inputFormat": "YYYY-MM-DD",
|
||
"format": "YYYY-MM-DD",
|
||
"closeOnSelect": true,
|
||
"clearable": false
|
||
}],
|
||
"actions": [],
|
||
"mode": "inline",
|
||
"target": "mainPage",
|
||
"submitOnChange": true,
|
||
"submitOnInit": true
|
||
}],
|
||
"body": [{
|
||
"type": "grid",
|
||
"columns": [
|
||
{
|
||
"type": "panel",
|
||
"className": "h-full",
|
||
"body": {
|
||
"type": "tabs",
|
||
"tabs": [{
|
||
"title": "消费趋势",
|
||
"tab": [{
|
||
"type": "chart",
|
||
"config": {
|
||
"title": {
|
||
"text": "消费趋势"
|
||
},
|
||
"tooltip": {},
|
||
"xAxis": {
|
||
"type": "category",
|
||
"boundaryGap": false,
|
||
"data": ["一月", "二月", "三月", "四月", "五月", "六月"]
|
||
},
|
||
"yAxis": {},
|
||
"series": [{
|
||
"name": "销量",
|
||
"type": "line",
|
||
"areaStyle": {
|
||
"color": {
|
||
"type": "linear",
|
||
"x": 0,
|
||
"y": 0,
|
||
"x2": 0,
|
||
"y2": 1,
|
||
"colorStops": [{
|
||
"offset": 0,
|
||
"color": "rgba(84, 112, 197, 1)"
|
||
}, {
|
||
"offset": 1,
|
||
"color": "rgba(84, 112, 197, 0)"
|
||
}],
|
||
"global": false
|
||
}
|
||
},
|
||
"data": [5, 20, 36, 10, 10, 20]
|
||
}]
|
||
}
|
||
}]
|
||
}, {
|
||
"title": "账户余额",
|
||
"tab": "0"
|
||
}]
|
||
}
|
||
}, {
|
||
"type": "panel",
|
||
"className": "h-full",
|
||
"body": [{
|
||
"type": "chart",
|
||
"config": {
|
||
"title": {
|
||
"text": "使用资源占比"
|
||
},
|
||
"series": [{
|
||
"type": "pie",
|
||
"data": [{
|
||
"name": "BOS",
|
||
"value": 70
|
||
}, {
|
||
"name": "CDN",
|
||
"value": 68
|
||
}, {
|
||
"name": "BCC",
|
||
"value": 48
|
||
}, {
|
||
"name": "DCC",
|
||
"value": 40
|
||
}, {
|
||
"name": "RDS",
|
||
"value": 32
|
||
}]
|
||
}]
|
||
}
|
||
}]
|
||
}]
|
||
}, {
|
||
"type": "crud",
|
||
"className": "m-t-sm",
|
||
"api": "/api/mock2/sample",
|
||
"columns": [{
|
||
"name": "id",
|
||
"label": "ID"
|
||
}, {
|
||
"name": "engine",
|
||
"label": "Rendering engine"
|
||
}, {
|
||
"name": "browser",
|
||
"label": "Browser"
|
||
}, {
|
||
"name": "platform",
|
||
"label": "Platform(s)"
|
||
}, {
|
||
"name": "version",
|
||
"label": "Engine version"
|
||
}, {
|
||
"name": "grade",
|
||
"label": "CSS grade"
|
||
}]
|
||
}]
|
||
}
|
||
```
|
||
|
||
> amis 后续将会实现新的布局模式,将更容易实现复杂布局效果
|