amis

amis 使用(模板 + 数据)

1 index.html

1.1 amis.embed 渲染 json 为前端页面

当前使用的 amis SDK 方式

1.2 左侧菜单

static/pages/site.json

visible 属性可以控制是否显示左侧菜单

visible 属性 issue

2 Schema (页面配置)

Page是 amis 页面配置中 必须也是唯一的顶级节点

2.1 容器类型

asidebodytoolbar这三个配置都是容器类型,容器类型即可以把其他渲染类型放进来。

上面例子字符串类型内部是把他当成了 tpl 渲染器来处理

等同于:

容器内可以直接放一个渲染器,也可以放多个,用数组包起来即可如:

3 数据域

上面的配置要做的很简单:使用 Page 组件,在内容区内渲染一段模板文字,其中${text}模板变量,它会去到当前组件的数据域中,获取text变量值。

3.1 通过接口初始化数据域

配置初始化接口 initApi:

接口必须按照下面的格式返回:

注意:

  1. 并不是所有组件都支持配置初始化接口来实现数据域初始化操作,对于那些不支持配置初始化接口的组件来说,一般会使用 Service 组件 来辅助实现数据域初始化;

  2. statusmsgdata 字段为接口返回的必要字段;

  3. data必须返回一个具有key-value结构的对象

3.2 显式配置 data 属性值

同时配置 初始化接口data属性 时,数据域将会合并初始化接口返回的数据和data属性值

4 API

4.1 格式要求

AMIS 要求 API 返回的格式是 Json 格式。

4.1.1 推荐格式

  • status: 返回 0,表示当前接口正确返回,否则按错误请求处理;

  • msg: 返回接口处理信息,主要用于表单提交或请求失败时的 toast 显示;

  • data: 必须返回一个具有 key-value 结构的对象。

4.1.2 兼容格式

amis 支持直接返回数据的方式,无需返回 status 和将数据放在 data 字段中,比如下面的例子:

但这种方式无法显示错误信息,只能通过返回 http 状态码来标识错误。

4.2 自定义适配器

如 butterfly 返回的 {"stat": "OK", "data":{"list"[], "total":0}}

而 amis 需要 {"status": 0, msg:"OK", "data":{"items": [], "count":0}}

则可以通过如下适配器完成

4.3 API 配置--Form

4.3.1 api

当表单提交时,会把 Form 数据发送给指定 API,API 只需要返回状态信息(成功或失败)即可。如果返回了其他数据如 {id: 1},返回的数据会被合并到 Form 数据中,可以用来做其他操作,比如跳转的新建数据的详情页面。

4.3.2 initApi

当表单初始化的时候,如果有设置 initApi, 则发起一个请求,并携带表单当前的数据。接口返回的值会被合并到表单数据中。

4.3.3 asyncApi

正常情况下,表单提交时,把数据发送给 api,通过 api 返回的状态就能知道表单提交完成与否。但是有些情况下并不能知道,比如这个提交是一个异步过程,需要等待其他服务处理完后,才能算真正的完成。

针对这种情况,如果配置了 asyncApi, 表单提交不会马上结束,而是隔 3s(可配置) 轮询 asyncApi 接口,直到返回成功了才结束。

4.3.4 schemaApi

正常情况下,一个表单有哪些配置项都是固定的,万一如果不能固定,希望通过 API 来返回,则可以通过配置 schemaApi 来实现。

4.4 API 配置--Wizard

Wizard 可用 API 跟 Form 差不多,同样可以设置 apiinitApi。但是目前不支持 asyncApischemaApi

关于 apiinitApi 说明,请参考 Form 部分。

4.5 API 配置--CRUD

增删改查模型可用 API 说明。

4.5.1 api

获取列表 API,发送时会携带 url params、配置的 fitler 数据和分页数据。要求目标接口返回列表数据。

4.5.2 quickSaveApi

CRUD 中,支持部分列快速编辑。当数据被修改后,默认会以数组的格式,把所有修改的行信息给出。

默认发送数据格式如下:(结构可调整,具体请参考 schema 配置。)

此接口只需要返回状态信息即可。返回 data 数据将被无视。

4.5.3 quickSaveItemApi

默认快速编辑都是批量保存,所以一般配置 quickSaveApi 即可。如果你想单个及时保存,则需要配置 quickSaveItemApi

当单个保存时,传入参数不再是数组,而是修改的当前项数据。

4.5.4 saveOrderApi

当开启排序功能后,新的排序结果会通过 saveOrderApi 发送给后端。

比如我将 ID 为 3 的数据拖拽放到 ID 为 5 的数据后面,这次保存将会发送以下信息。

4.5.5 批量修改 API

CRUD 还支持批量修改,当选中多条数据进行变量修改时,发送的数据格式如下。

4.6 API 配置--FormItem

4.6.1 Select

  • source Select 支持动态获取 options,要求返回格式为。

  • autoComplete Select 还支持根据用户输入自动自动搜索结果,并选中. 用户输入值请通过 $term 变量获取,返回格式要求如下。

4.6.2 级联 Select (chained-select)

级联 Select,也是通过 source 接口拉取结果的,当前选中值请通过 $value 变量获取,多层值已用逗号隔开。要求返回格式如下。

每次变动都会重新拉取一次,只要能拉到数组,就可以一直级联选择下去。

4.6.3 Tree

Tree 也支持动态拉取选项,跟 Select 格式一样,不过多了一层 children

4.6.4 Matrix

矩阵类型的表单也是通过 source 动态拉取选项的,格式如下。

4.7 API 配置--Page

4.7.1 initApi

当页面初始化的时候,如果有设置 initApi, 则发起一个请求。接口返回的值可用于整个页面。

5 接口调试信息

  • request 请求信息,包含请求类型,地址,以及参数。

  • response API 的实际返回结果。

5.1 template/index.html

5.2 page json

5.3 console log

5.3.1 requestAdaptor

api

5.3.2 responseAdaptor

response

payload

6 最佳实践

6.1 某个操作完如何刷新页面

给响应的action上配置reload:'window'

6.2 crud 设置默认参数

6.3 crud批量操作如何指定id

配置:primaryField: "xxx",然后通过${ids}去取,ids默认格式为:"id1,id2,id3"

6.4 接口超时时间

默认90秒,报错500,无法修改

6.5 sendOn使用说明和原理

原理是这样的, 比如接口1 返回一个 a 字段,这个 a 字段一开始是要没有值的。

接口2 的 url 上写上 '/api/xxxx?a=${a}' 然后配置 sendOn: 'this.a'

这样,接口2 在第一次尝试请求的时候,发现 this.a 不满足,所以不请求了,后续 接口数据回来了,会让 a 这个值发生变化, amis 会监控接口2 的 url ,发现接口2的运算结果变了,就会再次请求。

Last updated