组件库

组件库基于 amis 开发,它使用 JSON 配置来生成页面,可以减少页面开发工作量,极大提升效率。但是大量的 JSON 配置会导致代码可读性差,维护成本高。所以 EaseAdminAmis150+ 组件进行了封装,使 Amis 构建页面更加简洁高效。

所有 Amis 组件都放在 easeadmin/builder 目录。调用方法与 Amis 组件库属性表中的 属性名 相同,参数对应 属性值 你可以在 amis文档 中找到组件的详细信息。

组件使用

下面是一个 Container 组件的属性表,你可以通过 make 方法来创建一个组件对象来链式调用 Container 组件属性表中的全部属性。

属性名 类型 默认值 说明
type string "container" 指定为 container 渲染器
className string 外层 Dom的类名
bodyClassName string 容器内容区的类名
wrapperComponent string "div" 容器标签名
style object 自定义样式
body SchemaNode 容器内容
import { Container } from 'easeadmin/builder'
Container.make()
  .className('my-container')
  .bodyClassName('my-body')
  .style({ color: 'red' })
  .body('Hello World')

或者使用内置的 amis 方法来创建组件对象。

import amis from 'easeadmin/builder/amis'
amis('container')
  .className('my-container')
  .bodyClassName('my-body')
  .style({ color: 'red' })
  .body('Hello World')

以上例子将输出 AmisJSON

{"type":"container", "className":"my-container", "bodyClassName":"my-body", "style":{"color":"red"}, "body":"Hello World"}

基础组件

你可以在 EaseAdmin 中找到几乎所有的 amis 组件,他们都都继承自 Schema 类,都拥有以下公共方法。

方法名 参数 说明
make 创建一个组件实例
id string 设置组件的 id
find string 通过ID查找组件
type string 设置组件的类型
attr string,any,string? 设置自定义属性
style object 设置组件的样式
className string 设置组件的类名
definitions object 设置组件的定义
permission boolean 设置是否渲染组件
onEvent object 设置组件的事件
remove string? 移除组件属性

如果你没有找到你需要的组件或属性,你可以通过 Schemaattr 方法来设置你需要的属性。

import amis from 'easeadmin/builder/amis'

// 设置自定义属性
// 输出: {myKey:['myValue']}
amis('schema').attr('myKey', ['myValue'])

// 追加一个值到数组最后面
// 输出: {myKey:['myValue','myValue2']}
amis('schema').attr('myKey', 'myValue2', 'push')

// 追加一个值到数组最前面
// 输出: {myKey:['myValue3','myValue','myValue2']}
amis('schema').attr('myKey', 'myValue3', 'unshift')

// 替换整个 key 的值
// 输出: {myKey:{test:1}}
amis('schema').attr('myKey', { test: 1 }, 'replace')

// 合并一个对象到 key 的值
// 输出: {myKey:{test:1,test2:2}}
amis('schema').attr('myKey', { test2: 2 }, 'merge')

构建页面

使用 EaseAdmin 后你会发现原来用 AdonisJS 后端代码构建页面这么简单。

import amis from 'easeadmin/builder/amis'
import html from 'easeadmin/builder/html'

// 给页面设置标题
let page = amis('page').title('Welcome')

// 在页面上放置一个按钮
page.body(amis('button').label('Hello World').level('primary'))

// 在页面上放置多个按钮
page.body([
  amis('button').label('First Button').level('primary'),
  amis('button').label('Second Button').level('info').id('second'),
])

// 查找组件
let second = page.find('second')

// 移除组件的 level 属性
second.remove('level')

// 移除组件
second.remove()

// 不渲染组件
second.permission(false)

// 渲染为 HTML
html(page, {
    title: string //页面标题
    host?: string //静态文件的域名
    inject?: string //自定义注入到页面的 HTML
    props?: Record<string, any> //amis 属性
    env?: Record<string, any> //amis 环境变量
  })

代码转换

EaseAdmin 提供了一个 parser 方法来将 json 转换为 amis 代码。该功能也内置在了后台的 开发者 工具中。

import parser from 'easeadmin/builder/parser'
const result = parser({"type":"container", "body":"Hello World"})
console.log(result)

转换的代码

amis('container').body('Hello World')