diff --git a/fis-conf.js b/fis-conf.js index 8bb27c1b8..bb2538370 100644 --- a/fis-conf.js +++ b/fis-conf.js @@ -229,6 +229,27 @@ if (fis.project.currentMedia() === 'publish') { } else if (fis.project.currentMedia() === 'gh-pages') { const ghPages = fis.media('gh-pages'); + ghPages.match('/docs/**.md', { + rExt: 'js', + parser: [parserMarkdown, function(contents, file) { + return contents.replace(/\bhref=\\('|")(.+?)\\\1/g, function(_, quota, link) { + if (/\.md($|#)/.test(link)) { + let parts = link.split('#'); + parts[0] = parts[0].replace('.md', ''); + + if (parts[0][0] !== '/') { + parts[0] = path.resolve(path.dirname(file.subpath), parts[0]); + } + + return 'href=\\' + quota + '#' + parts.join('#') + '\\' + quota; + } + + return _; + }); + }], + isMod: true + }); + ghPages.match('/node_modules/(**)', { release: '/n/$1' }); diff --git a/gh-pages/docs/advanced.js b/gh-pages/docs/advanced.js index 51d6817fa..fee962f51 100644 --- a/gh-pages/docs/advanced.js +++ b/gh-pages/docs/advanced.js @@ -3,7 +3,7 @@ define('docs/advanced.md', function(require, exports, module) { module.exports = { "title": "高级用法", "shortname": "advanced", - "html": "

在开始阅读之前,希望你已经阅读 快速开始文档

\n

数据作用域

配置中很多地方都可以用变量如: tpl 类型的渲染器、API 中的 Url、FormItem 中的 source 配置、visibleOn、disabledOn 以及 Form 中的 redirect 配置等等。

\n

那么都有哪些数据可以用?这取决于在哪个容器,关于容器中的数据说明如下:

\n\n

取值过程,也跟 JS 作用域中取值一样,当前作用域中有,则直接返回当前作用域中,如果没有当前作用域没有,会一直往上找,直到找到了为止。如果存在同名变量,则返回就近作用域中数据。

\n

需要注意的是,要取到值一定是在自己所在的作用域,或者上级作用域里面,同级的是取不到的,如果需要怎么办?可以往下看联动,比如:FormA 的数据发送给 formB, 另外一种方式,可以把接口拉取换到父级组件去操作,没有可拉取数据的组件,就一起包在一个 service 控件里面。

\n

联动

简单的显隐联动

主要通过 visibleOnhiddenOndisabledOn 来配置。

\n
\n

选项联动

比如 select 中 options 可能根据某个值不同而不同。

\n
\n

他们是怎么关联的呢?注意看 select 的 source 配置 "/api/mock/getOptions?waitSeconds=1&type=$foo" 这里用了变量 $foo 这个 foo 正好是第一个表单的 name 值。只要这个值发生变化,source 就会重新获取一次。

\n

这里有个问题就是,数据一旦变化就会出发重新拉取,如果是输入框岂不是拉取得很频繁?没关系,也可以主动拉取如:

\n
\n

注意,source 中的传参是通过 source 中的 data 关联的,不能写在 source 的 url 中,因为如果写了,就会自动监控值的变化而自动刷新,写在 data 里面关联则不会。如果对 source 中的配置规则不了解,请前往 API 说明

\n

另外注意 button 的 target 值,正好是这个 form 的 name 值 lidong 的 formItem 的 name 值 select。当按钮的对象是一个 formItem 时,会出发 formItem 的数据重新拉取。

\n

数据联动

Form 和 CRUD, CRUD 有个 filter 配置项,里面可以配置表单项,当他提交时 CRUD 自动就会携带接受到的表单数据然后重新获取数据。有个限制,就是 CRUD 和 filter 必须放在一起,不能分开,实际上完全可以分开,只要 Form 的 target 是 CRUD 的 name 值即可。

\n
\n

Form 的 target 还可以是另外一个 Form,当 A Form 把自己的数据提交给 B Form 时,A 的数据会被合并到 B Form 中,同时,B Form 会再次初始化,如:拉取 initApi, 重新拉取 formItem 上的 source 等等。 比如用户管理中的加入用户操作就是用这种方式实现的。

\n
\n", + "html": "

在开始阅读之前,希望你已经阅读 快速开始文档

\n

数据作用域

配置中很多地方都可以用变量如: tpl 类型的渲染器、API 中的 Url、FormItem 中的 source 配置、visibleOn、disabledOn 以及 Form 中的 redirect 配置等等。

\n

那么都有哪些数据可以用?这取决于在哪个容器,关于容器中的数据说明如下:

\n\n

取值过程,也跟 JS 作用域中取值一样,当前作用域中有,则直接返回当前作用域中,如果没有当前作用域没有,会一直往上找,直到找到了为止。如果存在同名变量,则返回就近作用域中数据。

\n

需要注意的是,要取到值一定是在自己所在的作用域,或者上级作用域里面,同级的是取不到的,如果需要怎么办?可以往下看联动,比如:FormA 的数据发送给 formB, 另外一种方式,可以把接口拉取换到父级组件去操作,没有可拉取数据的组件,就一起包在一个 service 控件里面。

\n

联动

简单的显隐联动

主要通过 visibleOnhiddenOndisabledOn 来配置。

\n
\n

选项联动

比如 select 中 options 可能根据某个值不同而不同。

\n
\n

他们是怎么关联的呢?注意看 select 的 source 配置 "/api/mock/getOptions?waitSeconds=1&type=$foo" 这里用了变量 $foo 这个 foo 正好是第一个表单的 name 值。只要这个值发生变化,source 就会重新获取一次。

\n

这里有个问题就是,数据一旦变化就会出发重新拉取,如果是输入框岂不是拉取得很频繁?没关系,也可以主动拉取如:

\n
\n

注意,source 中的传参是通过 source 中的 data 关联的,不能写在 source 的 url 中,因为如果写了,就会自动监控值的变化而自动刷新,写在 data 里面关联则不会。如果对 source 中的配置规则不了解,请前往 API 说明

\n

另外注意 button 的 target 值,正好是这个 form 的 name 值 lidong 的 formItem 的 name 值 select。当按钮的对象是一个 formItem 时,会出发 formItem 的数据重新拉取。

\n

数据联动

Form 和 CRUD, CRUD 有个 filter 配置项,里面可以配置表单项,当他提交时 CRUD 自动就会携带接受到的表单数据然后重新获取数据。有个限制,就是 CRUD 和 filter 必须放在一起,不能分开,实际上完全可以分开,只要 Form 的 target 是 CRUD 的 name 值即可。

\n
\n

Form 的 target 还可以是另外一个 Form,当 A Form 把自己的数据提交给 B Form 时,A 的数据会被合并到 B Form 中,同时,B Form 会再次初始化,如:拉取 initApi, 重新拉取 formItem 上的 source 等等。 比如用户管理中的加入用户操作就是用这种方式实现的。

\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/dev.js b/gh-pages/docs/dev.js index aa07d81dc..48a6c0a68 100644 --- a/gh-pages/docs/dev.js +++ b/gh-pages/docs/dev.js @@ -3,7 +3,7 @@ define('docs/dev.md', function(require, exports, module) { module.exports = { "title": "自定义组件", "shortname": "dev", - "html": "

自定义组件主要分两类。表单类和非表单类。

\n

FormItem

即表单类,它主要用来扩充表单项。先看个例子。

\n
import * as React from 'react';\nimport {FormItem} from 'amis';\nimport * as cx from 'classnames';\n\n@FormItem({\n    type: 'custom-checkbox',\n})\nexport default class CustomCheckbox extends React.PureComponent {\n    toggle = () => {\n        const {value, onChange} = this.props;\n\n        onChange(!value);\n    };\n\n    render() {\n        const {value} = this.props;\n        const checked = !!value;\n\n        return (\n            <div>\n                <a\n                    className={cx('btn btn-default', {\n                        'btn-success': checked,\n                    })}\n                    onClick={this.toggle}\n                >\n                    {checked ? '已勾选' : '请勾选'}\n                </a>\n                <div className=\"inline m-l-xs\">{checked ? '已勾选' : '请勾选'}</div>\n            </div>\n        );\n    }\n}\n
\n

有了这个代码后,页面配置 form 的 controls 里面就可以通过这样的配置启动了。

\n
{\n    // 其他信息省略了。。\n    type: 'form',\n    controls: [\n        {\n            type: 'custom-checkbox',\n            name: '变量名',\n            label: '自定义组件。'\n        }\n    ]\n}\n
\n

表单项开发主要关心两件事。

\n
    \n
  1. 呈现当前值。如以上例子,勾选了则显示已勾选,否则显示请勾选
  2. \n
  3. 接收用户交互,修改表单项值。如以上例子,当用户点击按钮时,切换当前选中的值。
  4. \n
\n

至于其他功能如:label/description 的展示、表单验证功能、表单布局(常规、左右或者内联)等等,只要是通过 FormItem 注册进去的都无需自己实现。

\n

Renderer

非表单类的组件自定义,主要通过 Renderer 实现。在开始阅读之前,请先阅读 AMis 工作原理

\n
import * as React from 'react';\nimport {Renderer} from 'amis';\n\n@Renderer({\n    test: /(^|\\/)my\\-renderer$/,\n})\nclass CustomRenderer extends React.Component {\n    render() {\n        const {tip, body, render} = this.props;\n\n        return (\n            <div>\n                <p>这是自定义组件:{tip}</p>\n                {body ? (\n                    <div className=\"container\">\n                        {render('body', body, {\n                            // 这里的信息会作为 props 传递给子组件,一般情况下都不需要这个\n                        })}\n                    </div>\n                ) : null}\n            </div>\n        );\n    }\n}\n
\n

这里注册一个 React 组件,当节点的 path 信息是 my-renderer 结尾时,交给当前组件来完成渲染。

\n

请注意 this.props 中的 render 方法,它用来实现容器功能,通过它可以让使用者动态的配置其他渲染模型。

\n

工具

目前主要提供以下工具。

\n

fetch

import {fetch} from 'amis/utils';\n
\n

用来做 ajax 请求。参数说明

\n\n

返回一个 Promise。

\n

如:

\n
import {fetch} from 'amis/utils';\n\nfetch('http://www.baidu.com/api/xxx?a=${a}&b=${b}', {\n    a: 'aa',\n    b: 'bb',\n}).then(function(result) {\n    console.log(result);\n});\n
\n

filter

import {filter} from 'amis/utils';\n
\n

主要用来做字符替换,如:

\n
import {filter} from 'amis/utils';\n\nfilter('blabla?a={a}', {a: 123}); // => 'blabla?a=123'\n
\n", + "html": "

自定义组件主要分两类。表单类和非表单类。

\n

FormItem

即表单类,它主要用来扩充表单项。先看个例子。

\n
import * as React from 'react';\nimport {FormItem} from 'amis';\nimport * as cx from 'classnames';\n\n@FormItem({\n    type: 'custom-checkbox',\n})\nexport default class CustomCheckbox extends React.PureComponent {\n    toggle = () => {\n        const {value, onChange} = this.props;\n\n        onChange(!value);\n    };\n\n    render() {\n        const {value} = this.props;\n        const checked = !!value;\n\n        return (\n            <div>\n                <a\n                    className={cx('btn btn-default', {\n                        'btn-success': checked,\n                    })}\n                    onClick={this.toggle}\n                >\n                    {checked ? '已勾选' : '请勾选'}\n                </a>\n                <div className=\"inline m-l-xs\">{checked ? '已勾选' : '请勾选'}</div>\n            </div>\n        );\n    }\n}\n
\n

有了这个代码后,页面配置 form 的 controls 里面就可以通过这样的配置启动了。

\n
{\n    // 其他信息省略了。。\n    type: 'form',\n    controls: [\n        {\n            type: 'custom-checkbox',\n            name: '变量名',\n            label: '自定义组件。'\n        }\n    ]\n}\n
\n

表单项开发主要关心两件事。

\n
    \n
  1. 呈现当前值。如以上例子,勾选了则显示已勾选,否则显示请勾选
  2. \n
  3. 接收用户交互,修改表单项值。如以上例子,当用户点击按钮时,切换当前选中的值。
  4. \n
\n

至于其他功能如:label/description 的展示、表单验证功能、表单布局(常规、左右或者内联)等等,只要是通过 FormItem 注册进去的都无需自己实现。

\n

Renderer

非表单类的组件自定义,主要通过 Renderer 实现。在开始阅读之前,请先阅读 amis 工作原理

\n
import * as React from 'react';\nimport {Renderer} from 'amis';\n\n@Renderer({\n    test: /(^|\\/)my\\-renderer$/,\n})\nclass CustomRenderer extends React.Component {\n    render() {\n        const {tip, body, render} = this.props;\n\n        return (\n            <div>\n                <p>这是自定义组件:{tip}</p>\n                {body ? (\n                    <div className=\"container\">\n                        {render('body', body, {\n                            // 这里的信息会作为 props 传递给子组件,一般情况下都不需要这个\n                        })}\n                    </div>\n                ) : null}\n            </div>\n        );\n    }\n}\n
\n

这里注册一个 React 组件,当节点的 path 信息是 my-renderer 结尾时,交给当前组件来完成渲染。

\n

请注意 this.props 中的 render 方法,它用来实现容器功能,通过它可以让使用者动态的配置其他渲染模型。

\n

工具

目前主要提供以下工具。

\n

fetch

import {fetch} from 'amis/utils';\n
\n

用来做 ajax 请求。参数说明

\n\n

返回一个 Promise。

\n

如:

\n
import {fetch} from 'amis/utils';\n\nfetch('http://www.baidu.com/api/xxx?a=${a}&b=${b}', {\n    a: 'aa',\n    b: 'bb',\n}).then(function(result) {\n    console.log(result);\n});\n
\n

filter

import {filter} from 'amis/utils';\n
\n

主要用来做字符替换,如:

\n
import {filter} from 'amis/utils';\n\nfilter('blabla?a={a}', {a: 123}); // => 'blabla?a=123'\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/getting_started.js b/gh-pages/docs/getting_started.js index 6ebb96c9b..8a1f9aedd 100644 --- a/gh-pages/docs/getting_started.js +++ b/gh-pages/docs/getting_started.js @@ -2,7 +2,7 @@ define('docs/getting_started.md', function(require, exports, module) { module.exports = { "title": "快速开始", - "html": "

为了简化前端开发,AMis Renderer 能够直接用配置就能将页面渲染出来。

\n

先来看个简单的例子。

\n
\n
\n

PS: 可以通过编辑器实时修改预览

\n
\n

从上面的内容可以看出,一个简单页面框架已经基本出来了,这是 AMis 渲染器配置的入口。从 page 渲染器开始出发,通过在容器中放置不同的渲染器来配置不同性质的页面。

\n

简单说明以上配置信息。

\n\n

这里有三个配置都是容器类型的。asidebodytoolbar。什么是容器类型?容器类型表示,他能够把其他渲染类型放进来。以上的例子为了简单,直接放了个字符串。字符串类型内部是把他当成了 tpl 渲染器来处理,在这里也可以通过对象的形式指定,如以下的例子的 body 区域是完全等价的。

\n
\n

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

\n
\n

再来看一个表单页面的列子

\n
\n

这个例子就是在 body 容器内,放置一个 form 类型的渲染,它就成了一个简单的表单提交页面了,controls 中可以决定放哪些表单项目,actions 中可以放置操作按钮。

\n

如果 body 区域放置一个 crud 渲染器,它就是列表页面了,再来看个栗子:

\n
\n

这个栗子最主要的渲染器就是 CRUD 渲染器了,他的作用是配置了个 API,把数据拉取过来后,根据配置 columns 信息完成列表展示,列类型可以是静态文本、图片、映射或者日期等等。 columns 通过 name 与行数据关联。除了展示外还可以放置操作按钮。

\n

这里相对复杂一点配置就是按钮了,按钮主要是通过 actionType来决定用户点下的行为。可以配置成 弹框、发送 ajax、页面跳转、复制内容到剪切板、刷新目标组件等等。具体请参考:Action 渲染器说明

\n

更多用法请参考渲染器手册和示例。

\n", + "html": "

为了简化前端开发,amis Renderer 能够直接用配置就能将页面渲染出来。

\n

先来看个简单的例子。

\n
\n
\n

PS: 可以通过编辑器实时修改预览

\n
\n

从上面的内容可以看出,一个简单页面框架已经基本出来了,这是 amis 渲染器配置的入口。从 page 渲染器开始出发,通过在容器中放置不同的渲染器来配置不同性质的页面。

\n

简单说明以上配置信息。

\n\n

这里有三个配置都是容器类型的。asidebodytoolbar。什么是容器类型?容器类型表示,他能够把其他渲染类型放进来。以上的例子为了简单,直接放了个字符串。字符串类型内部是把他当成了 tpl 渲染器来处理,在这里也可以通过对象的形式指定,如以下的例子的 body 区域是完全等价的。

\n
\n

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

\n
\n

再来看一个表单页面的列子

\n
\n

这个例子就是在 body 容器内,放置一个 form 类型的渲染,它就成了一个简单的表单提交页面了,controls 中可以决定放哪些表单项目,actions 中可以放置操作按钮。

\n

如果 body 区域放置一个 crud 渲染器,它就是列表页面了,再来看个栗子:

\n
\n

这个栗子最主要的渲染器就是 CRUD 渲染器了,他的作用是配置了个 API,把数据拉取过来后,根据配置 columns 信息完成列表展示,列类型可以是静态文本、图片、映射或者日期等等。 columns 通过 name 与行数据关联。除了展示外还可以放置操作按钮。

\n

这里相对复杂一点配置就是按钮了,按钮主要是通过 actionType来决定用户点下的行为。可以配置成 弹框、发送 ajax、页面跳转、复制内容到剪切板、刷新目标组件等等。具体请参考:Action 渲染器说明

\n

更多用法请参考渲染器手册和示例。

\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers.js b/gh-pages/docs/renderers.js index 249042167..526686183 100644 --- a/gh-pages/docs/renderers.js +++ b/gh-pages/docs/renderers.js @@ -1,7 +1,7 @@ define('docs/renderers.md', function(require, exports, module) { module.exports = { - "html": "

渲染器手册

AMis 页面是通过 JSON 配置出来的,是由一个一个渲染模型组成的,掌握他们规则,就能灵活配置出各种页面。

\n\n", + "html": "

渲染器手册

amis 页面是通过 JSON 配置出来的,是由一个一个渲染模型组成的,掌握他们规则,就能灵活配置出各种页面。

\n\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Action.js b/gh-pages/docs/renderers/Action.js index bd7fff4df..039f4d79d 100644 --- a/gh-pages/docs/renderers/Action.js +++ b/gh-pages/docs/renderers/Action.js @@ -1,7 +1,7 @@ define('docs/renderers/Action.md', function(require, exports, module) { module.exports = { - "html": "

Action

Action 是一种特殊的渲染器,它本身是一个按钮,同时它能触发事件。

\n

通用配置项

所有actionType都支持的通用配置项

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestringaction指定为 Page 渲染器。
actionTypestring-【必填】这是action最核心的配置,来指定该action的作用类型,支持:ajaxlinkurldawerdialogconfirmcancelprevnextcopyclose
labelstring-按钮文本。可用 ${xxx} 取值。
levelstringdefault按钮样式,支持:linkprimarysecondaryinfosuccesswarningdangerlightdarkdefault
sizestring-按钮大小,支持:xssmmdlg
iconstring-设置图标,例如fa fa-plus
iconClassNamestring-给图标上添加类名。
activeboolean-按钮是否高亮。
activeLevelstring-按钮高亮时的样式,配置支持同level
activeClassNamestringis-active给按钮高亮添加类名。
blockboolean-display:"block"来显示按钮。
confirmTextstring-当设置后,操作在开始前会询问用户。可用 ${xxx} 取值。
reloadstring-指定此次操作完后,需要刷新的目标组件名字(组件的 name 指,自己配置的),多个请用 , 号隔开。
tooltipstring-鼠标停留时弹出该段文字,也可以配置对象类型:字段为titlecontent。可用 ${xxx} 取值。
disabledTipstring-被禁用后鼠标停留时弹出该段文字,也可以配置对象类型:字段为titlecontent。可用 ${xxx} 取值。
tooltipPlacementstringtop如果配置了tooltip或者disabledTip,指定提示信息位置,可配置topbottomleftright
\n

下面会分别介绍每种类型的Action配置项

\n

ajax

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
actionTypestringajax发送请求
apistringApiObject-请求地址,参考 api 格式说明。
redirectstring-指定当前请求结束后跳转的路径,可用 ${xxx} 取值。
feedbackDialogObject-如果 ajax 类型的,当 ajax 返回正常后,还能接着弹出一个 dialog 做其他交互。返回的数据可用于这个 dialog 中。格式可参考Dialog
messagesobject-success:ajax 操作成功后提示,可以不指定,不指定时以 api 返回为准。failed:ajax 操作失败提示。
\n

link

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
actionTypestringlink单页跳转
linkstringlink用来指定跳转地址,跟 url 不同的是,这是单页跳转方式,不会渲染浏览器,请指定 AMis 平台内的页面。可用 ${xxx} 取值。
\n

url

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
actionTypestringurl页面跳转
urlstring-按钮点击后,会打开指定页面。可用 ${xxx} 取值。
blankbooleanfalse如果为 true 将在新tab页面打开。
\n

dialog

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
actionTypestringdialog点击后显示一个弹出框
dialogstringDialogObject-指定弹框内容,格式可参考Dialog
nextConditionboolean-可以用来设置下一条数据的条件,默认为 true
\n

drawer

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
actionTypestringdrawer点击后显示一个侧边栏
drawerstringDrawerObject-指定弹框内容,格式可参考Drawer
\n

copy

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
actionTypestringcopy复制一段内容到粘贴板
contentstring-指定复制的内容。可用 ${xxx} 取值。
\n

其他配置项

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
closebooleanfalseaction配置在dialogdraweractions中时,配置为true指定此次操作完后关闭当前dialogdrawer
requiredArray<string>-配置字符串数组,指定在form中进行操作之前,需验证必填的表单项字段
\n

示例:

\n\n", + "html": "

Action

Action 是一种特殊的渲染器,它本身是一个按钮,同时它能触发事件。

\n

通用配置项

所有actionType都支持的通用配置项

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestringaction指定为 Page 渲染器。
actionTypestring-【必填】这是action最核心的配置,来指定该action的作用类型,支持:ajaxlinkurldawerdialogconfirmcancelprevnextcopyclose
labelstring-按钮文本。可用 ${xxx} 取值。
levelstringdefault按钮样式,支持:linkprimarysecondaryinfosuccesswarningdangerlightdarkdefault
sizestring-按钮大小,支持:xssmmdlg
iconstring-设置图标,例如fa fa-plus
iconClassNamestring-给图标上添加类名。
activeboolean-按钮是否高亮。
activeLevelstring-按钮高亮时的样式,配置支持同level
activeClassNamestringis-active给按钮高亮添加类名。
blockboolean-display:"block"来显示按钮。
confirmTextstring-当设置后,操作在开始前会询问用户。可用 ${xxx} 取值。
reloadstring-指定此次操作完后,需要刷新的目标组件名字(组件的 name 指,自己配置的),多个请用 , 号隔开。
tooltipstring-鼠标停留时弹出该段文字,也可以配置对象类型:字段为titlecontent。可用 ${xxx} 取值。
disabledTipstring-被禁用后鼠标停留时弹出该段文字,也可以配置对象类型:字段为titlecontent。可用 ${xxx} 取值。
tooltipPlacementstringtop如果配置了tooltip或者disabledTip,指定提示信息位置,可配置topbottomleftright
\n

下面会分别介绍每种类型的Action配置项

\n

ajax

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
actionTypestringajax发送请求
apistringApiObject-请求地址,参考 api 格式说明。
redirectstring-指定当前请求结束后跳转的路径,可用 ${xxx} 取值。
feedbackDialogObject-如果 ajax 类型的,当 ajax 返回正常后,还能接着弹出一个 dialog 做其他交互。返回的数据可用于这个 dialog 中。格式可参考Dialog
messagesobject-success:ajax 操作成功后提示,可以不指定,不指定时以 api 返回为准。failed:ajax 操作失败提示。
\n

link

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
actionTypestringlink单页跳转
linkstringlink用来指定跳转地址,跟 url 不同的是,这是单页跳转方式,不会渲染浏览器,请指定 amis 平台内的页面。可用 ${xxx} 取值。
\n

url

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
actionTypestringurl页面跳转
urlstring-按钮点击后,会打开指定页面。可用 ${xxx} 取值。
blankbooleanfalse如果为 true 将在新tab页面打开。
\n

dialog

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
actionTypestringdialog点击后显示一个弹出框
dialogstringDialogObject-指定弹框内容,格式可参考Dialog
nextConditionboolean-可以用来设置下一条数据的条件,默认为 true
\n

drawer

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
actionTypestringdrawer点击后显示一个侧边栏
drawerstringDrawerObject-指定弹框内容,格式可参考Drawer
\n

copy

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
actionTypestringcopy复制一段内容到粘贴板
contentstring-指定复制的内容。可用 ${xxx} 取值。
\n

其他配置项

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
closebooleanfalseaction配置在dialogdraweractions中时,配置为true指定此次操作完后关闭当前dialogdrawer
requiredArray<string>-配置字符串数组,指定在form中进行操作之前,需验证必填的表单项字段
\n

示例:

\n\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Array.js b/gh-pages/docs/renderers/Array.js index e57532d13..1a4dcc1af 100644 --- a/gh-pages/docs/renderers/Array.js +++ b/gh-pages/docs/renderers/Array.js @@ -1,7 +1,7 @@ define('docs/renderers/Array.md', function(require, exports, module) { module.exports = { - "html": "

Array

数组输入框配置

\n

其实就是 Combo 的一个 flat 用法。

\n\n
\n", + "html": "

Array

数组输入框配置

\n

其实就是 Combo 的一个 flat 用法。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Button.js b/gh-pages/docs/renderers/Button.js index 72bdd1bd0..143d0f20b 100644 --- a/gh-pages/docs/renderers/Button.js +++ b/gh-pages/docs/renderers/Button.js @@ -1,7 +1,7 @@ define('docs/renderers/Button.md', function(require, exports, module) { module.exports = { - "html": "

Button

按钮, 包含 buttonsubmitreset。 字段说明。

\n\n

如果按钮是 button 类型,则还需要配置 Action 中定义的属性,否则,AMis 不知道如何响应当前按钮点击。

\n
\n", + "html": "

Button

按钮, 包含 buttonsubmitreset。 字段说明。

\n\n

如果按钮是 button 类型,则还需要配置 Action 中定义的属性,否则,amis 不知道如何响应当前按钮点击。

\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/CRUD-Cards.js b/gh-pages/docs/renderers/CRUD-Cards.js index 5b1d2fd25..5de0cdfad 100644 --- a/gh-pages/docs/renderers/CRUD-Cards.js +++ b/gh-pages/docs/renderers/CRUD-Cards.js @@ -1,7 +1,7 @@ define('docs/renderers/CRUD-Cards.md', function(require, exports, module) { module.exports = { - "html": "

Cards(CRUD)

请参考Cards

\n
\n", + "html": "

Cards(CRUD)

请参考Cards

\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/CRUD-List.js b/gh-pages/docs/renderers/CRUD-List.js index 63bca9626..fcfa581b0 100644 --- a/gh-pages/docs/renderers/CRUD-List.js +++ b/gh-pages/docs/renderers/CRUD-List.js @@ -1,7 +1,7 @@ define('docs/renderers/CRUD-List.md', function(require, exports, module) { module.exports = { - "html": "

List(CRUD)

请参考List

\n
\n", + "html": "

List(CRUD)

请参考List

\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/CRUD-Table.js b/gh-pages/docs/renderers/CRUD-Table.js index e2e8a9b6a..725cf7dbc 100644 --- a/gh-pages/docs/renderers/CRUD-Table.js +++ b/gh-pages/docs/renderers/CRUD-Table.js @@ -1,7 +1,7 @@ define('docs/renderers/CRUD-Table.md', function(require, exports, module) { module.exports = { - "html": "

Table(CRUD)

在 CRUD 中的 Table 主要增加了 Column 里面的以下配置功能,更多参数,请参考Table

\n\n
\n", + "html": "

Table(CRUD)

在 CRUD 中的 Table 主要增加了 Column 里面的以下配置功能,更多参数,请参考Table

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/CRUD.js b/gh-pages/docs/renderers/CRUD.js index 960e7ee0e..42b92fa27 100644 --- a/gh-pages/docs/renderers/CRUD.js +++ b/gh-pages/docs/renderers/CRUD.js @@ -1,7 +1,7 @@ define('docs/renderers/CRUD.md', function(require, exports, module) { module.exports = { - "html": "

CRUD

增删改查模型,主要用来展现列表,并支持各类【增】【删】【改】【查】的操作。

\n

CRUD 支持三种模式:tablecardslist,默认为 table

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"Action.md" 指定为 CRUD 渲染器
modestring"table""table" 、 "cards" 或者 "list"
titlestring""可设置成空,当设置成空时,没有标题栏
classNamestring表格外层 Dom 的类名
apiApiCRUD 用来获取列表数据的 api。
filterForm设置过滤器,当该表单提交后,会把数据带给当前 Action.md 刷新列表。
filterTogglablebooleanfalse是否可显隐过滤器
filterDefaultVisiblebooleantrue设置过滤器默认是否可见。
initFetchbooleantrue是否初始化的时候拉取数据, 只针对有 filter 的情况, 没有 filter 初始都会拉取数据
intervalnumber3000刷新时间(最低 3000)
silentPollingbooleanfalse配置刷新时是否隐藏加载动画
stopAutoRefreshWhenstring""通过表达式来配置停止刷新的条件
stopAutoRefreshWhenModalIsOpenbooleanfalse当有弹框时关闭自动刷新,关闭弹框又恢复
syncLocationbooleantrue是否将过滤条件的参数同步到地址栏
draggablebooleanfalse是否可通过拖拽排序
itemDraggableOnboolean表达式来配置是否可拖拽排序
saveOrderApiApi保存排序的 api。
quickSaveApiApi快速编辑后用来批量保存的 API。
quickSaveItemApiApi快速编辑配置成及时保存时使用的 API。
bulkActionsArray Of Action批量操作列表,配置后,表格可进行选中操作。
defaultCheckedbooleanfalse当可批量操作时,默认是否全部勾选。
messagesObject覆盖消息提示,如果不指定,将采用 api 返回的 message
messages.fetchFailedstring获取失败时提示
messages.saveOrderFailedstring保存顺序失败提示
messages.saveOrderSuccessstring保存顺序成功提示
messages.quickSaveFailedstring快速保存失败提示
messages.quickSaveSuccessstring快速保存成功提示
primaryFieldstring"id"设置 ID 字段名。
defaultParamsObject设置默认 filter 默认参数,会在查询的时候一起发给后端
pageFieldstring"page"设置分页页码字段名。
perPageFieldstring"perPage"设置分页一页显示的多少条数据的字段名。注意:最好与 defaultParams 一起使用,请看下面例子。
perPageAvailableArray<number>[5, 10, 20, 50, 100]设置一页显示多少条数据下拉框可选条数。
orderFieldstring设置用来确定位置的字段名,设置后新的顺序将被赋值到该字段中。
hideQuickSaveBtnbooleanfalse隐藏顶部快速保存提示
autoJumpToTopOnPagerChangebooleanfalse当切分页的时候,是否自动跳顶部。
syncResponse2Querybooleantrue将返回数据同步到过滤器上。
keepItemSelectionOnPageChangebooleantrue保留条目选择,默认分页、搜素后,用户选择条目会被清空,开启此选项后会保留用户选择,可以实现跨页面批量操作。
labelTplstring单条描述模板,keepItemSelectionOnPageChange设置为true后会把所有已选择条目列出来,此选项可以用来定制条目展示文案。
headerToolbarArray['bulkActions', 'pagination']顶部工具栏配置
footerToolbarArray['statistics', 'pagination']顶部工具栏配置
\n", + "html": "

CRUD

增删改查模型,主要用来展现列表,并支持各类【增】【删】【改】【查】的操作。

\n

CRUD 支持三种模式:tablecardslist,默认为 table

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"Action.md" 指定为 CRUD 渲染器
modestring"table""table" 、 "cards" 或者 "list"
titlestring""可设置成空,当设置成空时,没有标题栏
classNamestring表格外层 Dom 的类名
apiApiCRUD 用来获取列表数据的 api。
filterForm设置过滤器,当该表单提交后,会把数据带给当前 Action.md 刷新列表。
filterTogglablebooleanfalse是否可显隐过滤器
filterDefaultVisiblebooleantrue设置过滤器默认是否可见。
initFetchbooleantrue是否初始化的时候拉取数据, 只针对有 filter 的情况, 没有 filter 初始都会拉取数据
intervalnumber3000刷新时间(最低 3000)
silentPollingbooleanfalse配置刷新时是否隐藏加载动画
stopAutoRefreshWhenstring""通过表达式来配置停止刷新的条件
stopAutoRefreshWhenModalIsOpenbooleanfalse当有弹框时关闭自动刷新,关闭弹框又恢复
syncLocationbooleantrue是否将过滤条件的参数同步到地址栏
draggablebooleanfalse是否可通过拖拽排序
itemDraggableOnboolean表达式来配置是否可拖拽排序
saveOrderApiApi保存排序的 api。
quickSaveApiApi快速编辑后用来批量保存的 API。
quickSaveItemApiApi快速编辑配置成及时保存时使用的 API。
bulkActionsArray Of Action批量操作列表,配置后,表格可进行选中操作。
defaultCheckedbooleanfalse当可批量操作时,默认是否全部勾选。
messagesObject覆盖消息提示,如果不指定,将采用 api 返回的 message
messages.fetchFailedstring获取失败时提示
messages.saveOrderFailedstring保存顺序失败提示
messages.saveOrderSuccessstring保存顺序成功提示
messages.quickSaveFailedstring快速保存失败提示
messages.quickSaveSuccessstring快速保存成功提示
primaryFieldstring"id"设置 ID 字段名。
defaultParamsObject设置默认 filter 默认参数,会在查询的时候一起发给后端
pageFieldstring"page"设置分页页码字段名。
perPageFieldstring"perPage"设置分页一页显示的多少条数据的字段名。注意:最好与 defaultParams 一起使用,请看下面例子。
perPageAvailableArray<number>[5, 10, 20, 50, 100]设置一页显示多少条数据下拉框可选条数。
orderFieldstring设置用来确定位置的字段名,设置后新的顺序将被赋值到该字段中。
hideQuickSaveBtnbooleanfalse隐藏顶部快速保存提示
autoJumpToTopOnPagerChangebooleanfalse当切分页的时候,是否自动跳顶部。
syncResponse2Querybooleantrue将返回数据同步到过滤器上。
keepItemSelectionOnPageChangebooleantrue保留条目选择,默认分页、搜素后,用户选择条目会被清空,开启此选项后会保留用户选择,可以实现跨页面批量操作。
labelTplstring单条描述模板,keepItemSelectionOnPageChange设置为true后会把所有已选择条目列出来,此选项可以用来定制条目展示文案。
headerToolbarArray['bulkActions', 'pagination']顶部工具栏配置
footerToolbarArray['statistics', 'pagination']顶部工具栏配置
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Card.js b/gh-pages/docs/renderers/Card.js index dce2d7174..da8a2556e 100644 --- a/gh-pages/docs/renderers/Card.js +++ b/gh-pages/docs/renderers/Card.js @@ -1,7 +1,7 @@ define('docs/renderers/Card.md', function(require, exports, module) { module.exports = { - "html": "

Card

卡片的展示形式。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"card"指定为 Card 渲染器
classNamestring"panel-default"外层 Dom 的类名
headerObjectCard 头部内容设置
header.classNamestring头部类名
header.titlestring标题
header.subTitlestring副标题
header.descstring描述
header.avatarstring图片
header.highlightboolean是否点亮
header.avatarClassNamestring"pull-left thumb avatar b-3x m-r"图片类名
bodyArray 或者 Field内容容器,主要用来放置 Field
bodyClassNamestring"padder m-t-sm m-b-sm"内容区域类名
actionsArray Of Button按钮区域
\n
\n", + "html": "

Card

卡片的展示形式。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"card"指定为 Card 渲染器
classNamestring"panel-default"外层 Dom 的类名
headerObjectCard 头部内容设置
header.classNamestring头部类名
header.titlestring标题
header.subTitlestring副标题
header.descstring描述
header.avatarstring图片
header.highlightboolean是否点亮
header.avatarClassNamestring"pull-left thumb avatar b-3x m-r"图片类名
bodyArray 或者 Field内容容器,主要用来放置 Field
bodyClassNamestring"padder m-t-sm m-b-sm"内容区域类名
actionsArray Of Button按钮区域
\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Cards.js b/gh-pages/docs/renderers/Cards.js index b186c2b9d..114f3ee0e 100644 --- a/gh-pages/docs/renderers/Cards.js +++ b/gh-pages/docs/renderers/Cards.js @@ -1,7 +1,7 @@ define('docs/renderers/Cards.md', function(require, exports, module) { module.exports = { - "html": "

Cards

卡片集合。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"cards" 指定为卡片集合。
titlestring标题
sourcestring${items}数据源, 绑定当前环境变量
placeholderstring‘暂无数据’当没数据的时候的文字提示
classNamestring外层 CSS 类名
headerClassNamestringamis-grid-header顶部外层 CSS 类名
footerClassNamestringamis-grid-footer底部外层 CSS 类名
itemClassNamestringcol-sm-4 col-md-3卡片 CSS 类名
cardCard配置卡片信息
\n
\n", + "html": "

Cards

卡片集合。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"cards" 指定为卡片集合。
titlestring标题
sourcestring${items}数据源, 绑定当前环境变量
placeholderstring‘暂无数据’当没数据的时候的文字提示
classNamestring外层 CSS 类名
headerClassNamestringamis-grid-header顶部外层 CSS 类名
footerClassNamestringamis-grid-footer底部外层 CSS 类名
itemClassNamestringcol-sm-4 col-md-3卡片 CSS 类名
cardCard配置卡片信息
\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Chained-Select.js b/gh-pages/docs/renderers/Chained-Select.js index 8cc5febaf..4a5ff43ff 100644 --- a/gh-pages/docs/renderers/Chained-Select.js +++ b/gh-pages/docs/renderers/Chained-Select.js @@ -1,7 +1,7 @@ define('docs/renderers/Chained-Select.md', function(require, exports, module) { module.exports = { - "html": "

Chained-Select

无限级别下拉,只支持单选,且必须和 source 搭配,通过 API 拉取数据,只要 API 有返回结果,就能一直无限级别下拉下去。

\n\n
\n", + "html": "

Chained-Select

无限级别下拉,只支持单选,且必须和 source 搭配,通过 API 拉取数据,只要 API 有返回结果,就能一直无限级别下拉下去。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Chart.js b/gh-pages/docs/renderers/Chart.js index 70cc329a6..b2bf070b7 100644 --- a/gh-pages/docs/renderers/Chart.js +++ b/gh-pages/docs/renderers/Chart.js @@ -1,7 +1,7 @@ define('docs/renderers/Chart.md', function(require, exports, module) { module.exports = { - "html": "

Chart

图表渲染器,采用 echarts 渲染,配置格式跟 echarts 相同,配置文档文档

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"chart"指定为 chart 渲染器
classNamestring外层 Dom 的类名
bodyContainer内容容器
apiapi配置项远程地址
initFetchboolean是否默认拉取
intervalnumber刷新时间(最低 3000)
configobject/string设置 eschars 的配置项,当为string的时候可以设置 function 等配置项
styleobject设置根元素的 style
\n
\n", + "html": "

Chart

图表渲染器,采用 echarts 渲染,配置格式跟 echarts 相同,配置文档文档

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"chart"指定为 chart 渲染器
classNamestring外层 Dom 的类名
bodyContainer内容容器
apiapi配置项远程地址
initFetchboolean是否默认拉取
intervalnumber刷新时间(最低 3000)
configobject/string设置 eschars 的配置项,当为string的时候可以设置 function 等配置项
styleobject设置根元素的 style
\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Checkbox.js b/gh-pages/docs/renderers/Checkbox.js index b7ae49dce..d9b0f9f66 100644 --- a/gh-pages/docs/renderers/Checkbox.js +++ b/gh-pages/docs/renderers/Checkbox.js @@ -1,7 +1,7 @@ define('docs/renderers/Checkbox.md', function(require, exports, module) { module.exports = { - "html": "

Checkbox

勾选框

\n\n
\n", + "html": "

Checkbox

勾选框

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Checkboxes.js b/gh-pages/docs/renderers/Checkboxes.js index fc63c295c..d24b9de34 100644 --- a/gh-pages/docs/renderers/Checkboxes.js +++ b/gh-pages/docs/renderers/Checkboxes.js @@ -1,7 +1,7 @@ define('docs/renderers/Checkboxes.md', function(require, exports, module) { module.exports = { - "html": "

Checkboxes

复选框

\n\n
\n", + "html": "

Checkboxes

复选框

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Column.js b/gh-pages/docs/renderers/Column.js index 041b1e1e9..f4976e647 100644 --- a/gh-pages/docs/renderers/Column.js +++ b/gh-pages/docs/renderers/Column.js @@ -1,7 +1,7 @@ define('docs/renderers/Column.md', function(require, exports, module) { module.exports = { - "html": "

Column

表格中的列配置

\n\n", + "html": "

Column

表格中的列配置

\n\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Combo.js b/gh-pages/docs/renderers/Combo.js index 6c08fdaf1..570dbbd04 100644 --- a/gh-pages/docs/renderers/Combo.js +++ b/gh-pages/docs/renderers/Combo.js @@ -1,7 +1,7 @@ define('docs/renderers/Combo.md', function(require, exports, module) { module.exports = { - "html": "

Combo

组合模式,支持自由组合多个表单项。

\n\n
\n

combo 多行模式。

\n
\n", + "html": "

Combo

组合模式,支持自由组合多个表单项。

\n\n
\n

combo 多行模式。

\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Date-Range.js b/gh-pages/docs/renderers/Date-Range.js index cdf0f6d6c..4b1bb720c 100644 --- a/gh-pages/docs/renderers/Date-Range.js +++ b/gh-pages/docs/renderers/Date-Range.js @@ -1,7 +1,7 @@ define('docs/renderers/Date-Range.md', function(require, exports, module) { module.exports = { - "html": "

Date-Range

日期范围类型。

\n\n
\n

考虑到大家都习惯用两个字段来存储,那么就用 date 来代替吧。

\n
\n", + "html": "

Date-Range

日期范围类型。

\n\n
\n

考虑到大家都习惯用两个字段来存储,那么就用 date 来代替吧。

\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Date.js b/gh-pages/docs/renderers/Date.js index 0e4775353..6afc2c577 100644 --- a/gh-pages/docs/renderers/Date.js +++ b/gh-pages/docs/renderers/Date.js @@ -1,7 +1,7 @@ define('docs/renderers/Date.md', function(require, exports, module) { module.exports = { - "html": "

Date

日期类型。

\n\n
\n", + "html": "

Date

日期类型。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Datetime.js b/gh-pages/docs/renderers/Datetime.js index a04beb6ae..264b526be 100644 --- a/gh-pages/docs/renderers/Datetime.js +++ b/gh-pages/docs/renderers/Datetime.js @@ -1,7 +1,7 @@ define('docs/renderers/Datetime.md', function(require, exports, module) { module.exports = { - "html": "

Datetime

日期时间类型。

\n\n
\n", + "html": "

Datetime

日期时间类型。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Dialog.js b/gh-pages/docs/renderers/Dialog.js index b31d6d69c..835eeabe1 100644 --- a/gh-pages/docs/renderers/Dialog.js +++ b/gh-pages/docs/renderers/Dialog.js @@ -1,7 +1,7 @@ define('docs/renderers/Dialog.md', function(require, exports, module) { module.exports = { - "html": "

Dialog

Dialog 由 Action 触发。他是一个类似于 Page 的容器模型。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"dialog" 指定为 Dialog 渲染器
titlestring 或者 Container弹出层标题
bodyContainer往 Dialog 内容区加内容
sizestring指定 dialog 大小,支持: xssmmdlg
bodyClassNamestringmodal-bodyDialog body 区域的样式类名
closeOnEscbooleanfalse是否支持按 Esc 关闭 Dialog
disabledbooleanfalse如果设置此属性,则该 Dialog 只读没有提交操作。
actionsArray Of Action可以不设置,默认只有【确认】和【取消】两个按钮。
\n
\n", + "html": "

Dialog

Dialog 由 Action 触发。他是一个类似于 Page 的容器模型。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"dialog" 指定为 Dialog 渲染器
titlestring 或者 Container弹出层标题
bodyContainer往 Dialog 内容区加内容
sizestring指定 dialog 大小,支持: xssmmdlg
bodyClassNamestringmodal-bodyDialog body 区域的样式类名
closeOnEscbooleanfalse是否支持按 Esc 关闭 Dialog
disabledbooleanfalse如果设置此属性,则该 Dialog 只读没有提交操作。
actionsArray Of Action可以不设置,默认只有【确认】和【取消】两个按钮。
\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Drawer.js b/gh-pages/docs/renderers/Drawer.js index 63f8bbf39..0e2fecf79 100644 --- a/gh-pages/docs/renderers/Drawer.js +++ b/gh-pages/docs/renderers/Drawer.js @@ -1,7 +1,7 @@ define('docs/renderers/Drawer.md', function(require, exports, module) { module.exports = { - "html": "

Drawer

Drawer 由 Action 触发。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"drawer" 指定为 Drawer 渲染器
titlestring 或者 Container弹出层标题
bodyContainer往 Dialog 内容区加内容
sizestring指定 dialog 大小,支持: xssmmdlg
bodyClassNamestringmodal-bodyDialog body 区域的样式类名
closeOnEscbooleanfalse是否支持按 Esc 关闭 Dialog
overlaybooleantrue是否显示蒙层
resizablebooleanfalse是否可通过拖拽改变 Drawer 大小
actionsArray Of Action可以不设置,默认只有【确认】和【取消】两个按钮。
\n
\n", + "html": "

Drawer

Drawer 由 Action 触发。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"drawer" 指定为 Drawer 渲染器
titlestring 或者 Container弹出层标题
bodyContainer往 Dialog 内容区加内容
sizestring指定 dialog 大小,支持: xssmmdlg
bodyClassNamestringmodal-bodyDialog body 区域的样式类名
closeOnEscbooleanfalse是否支持按 Esc 关闭 Dialog
overlaybooleantrue是否显示蒙层
resizablebooleanfalse是否可通过拖拽改变 Drawer 大小
actionsArray Of Action可以不设置,默认只有【确认】和【取消】两个按钮。
\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Editor.js b/gh-pages/docs/renderers/Editor.js index 937814119..238dc8251 100644 --- a/gh-pages/docs/renderers/Editor.js +++ b/gh-pages/docs/renderers/Editor.js @@ -1,7 +1,7 @@ define('docs/renderers/Editor.md', function(require, exports, module) { module.exports = { - "html": "

Editor

XXX-Editor

\n
\n

Diff-Editor

\n

PS: 当用作纯展示时,可以通过value配置项,设置右侧编辑器的值

\n
\n", + "html": "

Editor

XXX-Editor

\n
\n

Diff-Editor

\n

PS: 当用作纯展示时,可以通过value配置项,设置右侧编辑器的值

\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Email.js b/gh-pages/docs/renderers/Email.js index d3c41568c..2c42ff58a 100644 --- a/gh-pages/docs/renderers/Email.js +++ b/gh-pages/docs/renderers/Email.js @@ -1,7 +1,7 @@ define('docs/renderers/Email.md', function(require, exports, module) { module.exports = { - "html": "

Email

Email 输入框。

\n\n
\n", + "html": "

Email

Email 输入框。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Field.js b/gh-pages/docs/renderers/Field.js index 842047d8b..2a470a2f8 100644 --- a/gh-pages/docs/renderers/Field.js +++ b/gh-pages/docs/renderers/Field.js @@ -1,7 +1,7 @@ define('docs/renderers/Field.md', function(require, exports, module) { module.exports = { - "html": "

Field

主要用在 Table 的列配置 Column、List 的内容、Card 卡片的内容和表单的Static-XXX 中。它主要用来展示数据。

\n
\n

Field 通用配置

\n

Tpl(Field)

请参考tpl

\n

Plain(Field)

请参考Plain

\n

Json(Field)

todo

\n

Date(Field)

用来显示日期。

\n\n

Mapping(Field)

用来对值做映射显示。

\n\n

Image(Field)

用来展示图片。

\n\n

Progress(Field)

用来展示进度条。

\n\n

Status(Field)

用来显示状态,用图表展示。

\n\n

Switch(Field)

用来占一个开关。

\n\n

Tabs

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"tabs"指定为 Tabs 渲染器
classNamestring外层 Dom 的类名
tabsClassNamestringTabs Dom 的类名
tabsArraytabs 内容
tabs[x].titlestringTab 标题
tabs[x].iconiconTab 的图标
tabs[x].tabContainer内容区
tabs[x].hashstring设置以后将跟 url 的 hash 对应
tabs[x].reloadboolean设置以后内容每次都会重新渲染,对于 Action.md 的重新拉取很有用
tabs[x].classNamestring"bg-white b-l b-r b-b wrapper-md"Tab 区域样式
\n
\n", + "html": "

Field

主要用在 Table 的列配置 Column、List 的内容、Card 卡片的内容和表单的Static-XXX 中。它主要用来展示数据。

\n
\n

Field 通用配置

\n

Tpl(Field)

请参考tpl

\n

Plain(Field)

请参考Plain

\n

Json(Field)

todo

\n

Date(Field)

用来显示日期。

\n\n

Mapping(Field)

用来对值做映射显示。

\n\n

Image(Field)

用来展示图片。

\n\n

Progress(Field)

用来展示进度条。

\n\n

Status(Field)

用来显示状态,用图表展示。

\n\n

Switch(Field)

用来占一个开关。

\n\n

Tabs

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"tabs"指定为 Tabs 渲染器
classNamestring外层 Dom 的类名
tabsClassNamestringTabs Dom 的类名
tabsArraytabs 内容
tabs[x].titlestringTab 标题
tabs[x].iconiconTab 的图标
tabs[x].tabContainer内容区
tabs[x].hashstring设置以后将跟 url 的 hash 对应
tabs[x].reloadboolean设置以后内容每次都会重新渲染,对于 Action.md 的重新拉取很有用
tabs[x].classNamestring"bg-white b-l b-r b-b wrapper-md"Tab 区域样式
\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/FieldSet.js b/gh-pages/docs/renderers/FieldSet.js index 294b4db59..95d255461 100644 --- a/gh-pages/docs/renderers/FieldSet.js +++ b/gh-pages/docs/renderers/FieldSet.js @@ -1,7 +1,7 @@ define('docs/renderers/FieldSet.md', function(require, exports, module) { module.exports = { - "html": "

FieldSet

多个输入框可以通过 fieldSet 捆绑在一起。

\n\n
\n", + "html": "

FieldSet

多个输入框可以通过 fieldSet 捆绑在一起。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/File.js b/gh-pages/docs/renderers/File.js index daf227b39..0202cd3d5 100644 --- a/gh-pages/docs/renderers/File.js +++ b/gh-pages/docs/renderers/File.js @@ -1,7 +1,7 @@ define('docs/renderers/File.md', function(require, exports, module) { module.exports = { - "html": "

File

文件输入,AMis 也默认处理了图片存储,提交给 API 的是文件的下载地址。

\n\n
\n", + "html": "

File

文件输入,amis 也默认处理了图片存储,提交给 API 的是文件的下载地址。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Form.js b/gh-pages/docs/renderers/Form.js index a073537ee..7bd28b917 100644 --- a/gh-pages/docs/renderers/Form.js +++ b/gh-pages/docs/renderers/Form.js @@ -1,7 +1,7 @@ define('docs/renderers/Form.md', function(require, exports, module) { module.exports = { - "html": "

Form

表单渲染器,主要用来展示或者接收用户输入后将数据提交给后端或者其他组件。

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"form" 指定为 Form 渲染器
modestringnormal表单展示方式,可以是:normalhorizontal 或者 inline
horizontalObject{"left":"col-sm-2", "right":"col-sm-10", "offset":"col-sm-offset-2"}当 mode 为 horizontal 时有用,用来控制 label
titlestring"表单"Form 的标题
submitTextString"提交"默认的提交按钮名称,如果设置成空,则可以把默认按钮去掉。
classNamestring外层 Dom 的类名
controlsArray of FormItemForm 表单项集合
actionsArray of ActionForm 提交按钮,成员为 Action
messagesObject消息提示覆写,默认消息读取的是 API 返回的消息,但是在此可以覆写它。
messages.fetchSuccessstring获取成功时提示
messages.fetchFailedstring获取失败时提示
messages.saveFailedstring保存成功时提示
messages.saveSuccessstring保存失败时提示
wrapWithPanelbooleantrue是否让 Form 用 panel 包起来,设置为 false 后,actions 将无效。
panelClassNamebooleantrue是否让 Form 用 panel 包起来,设置为 false 后,actions 将无效。
apiApiForm 用来保存数据的 api。
initApiApiForm 用来获取初始数据的 api。
intervalnumber3000刷新时间(最低 3000)
silentPollingbooleanfalse配置刷新时是否显示加载动画
stopAutoRefreshWhenstring""通过表达式 来配置停止刷新的条件
initAsyncApiApiForm 用来获取初始数据的 api,与 initApi 不同的是,会一直轮训请求该接口,直到返回 finished 属性为 true 才 结束。
initFetchbooleantrue设置了 initApi 或者 initAsyncApi 后,默认会开始就发请求,设置为 false 后就不会起始就请求接口
initFetchOnstring用表达式来配置
initFinishedFieldstringfinished设置了 initAsyncApi 后,默认会从返回数据的 data.finished 来判断是否完成,也可以设置成其他的 xxx,就会从 data.xxx 中获取
initCheckIntervalnumber3000设置了 initAsyncApi 以后,默认拉取的时间间隔
schemaApiApi已不支持,请改用 controls 里面放置 Service 渲染器实现
asyncApiApi设置此属性后,表单提交发送保存接口后,还会继续轮训请求该接口,直到返回 finished 属性为 true 才 结束。
checkIntervalnumber3000轮训请求的时间间隔,默认为 3 秒。设置 asyncApi 才有效
finishedFieldstring"finished"如果决定结束的字段名不是 finished 请设置此属性,比如 is_success
submitOnChangebooleanfalse表单修改即提交
submitOnInitbooleanfalse初始就提交一次
resetAfterSubmitbooleanfalse提交后是否重置表单
primaryFieldstring"id"设置主键 id, 当设置后,检测表单是否完成时(asyncApi),只会携带此数据。
targetstring默认表单提交自己会通过发送 api 保存数据,但是也可以设定另外一个 form 的 name 值,或者另外一个 CRUD 模型的 name 值。 如果 target 目标是一个 Form ,则目标 Form 会重新触发 initApi,api 可以拿到当前 form 数据。如果目标是一个 CRUD 模型,则目标模型会重新触发搜索,参数为当前 Form 数据。当目标是 window 时,会把当前表单的数据附带到页面地址上。
redirectstring设置此属性后,Form 保存成功后,自动跳转到指定页面。支持相对地址,和绝对地址(相对于组内的)。
reloadstring操作完后刷新目标对象。请填写目标组件设置的 name 值,如果填写为 window 则让当前页面整体刷新。
autoFocusbooleanfalse是否自动聚焦。
canAccessSuperDatabooleantrue指定是否可以自动获取上层的数据并映射到表单项上
namestring设置一个名字后,方便其他组件与其通信
\n

表单项都是通过 controls 设置的,类型是数组,成员主要是FormItem,默认一行一个(当然 form 是 inline 模式时例外),如果想一行多个,可以将多个FormItem放在一个 Group 里面。

\n
\n

水平模式的 Form 也支持 Group 展现。

\n
\n", + "html": "

Form

表单渲染器,主要用来展示或者接收用户输入后将数据提交给后端或者其他组件。

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"form" 指定为 Form 渲染器
modestringnormal表单展示方式,可以是:normalhorizontal 或者 inline
horizontalObject{"left":"col-sm-2", "right":"col-sm-10", "offset":"col-sm-offset-2"}当 mode 为 horizontal 时有用,用来控制 label
titlestring"表单"Form 的标题
submitTextString"提交"默认的提交按钮名称,如果设置成空,则可以把默认按钮去掉。
classNamestring外层 Dom 的类名
controlsArray of FormItemForm 表单项集合
actionsArray of ActionForm 提交按钮,成员为 Action
messagesObject消息提示覆写,默认消息读取的是 API 返回的消息,但是在此可以覆写它。
messages.fetchSuccessstring获取成功时提示
messages.fetchFailedstring获取失败时提示
messages.saveFailedstring保存成功时提示
messages.saveSuccessstring保存失败时提示
wrapWithPanelbooleantrue是否让 Form 用 panel 包起来,设置为 false 后,actions 将无效。
panelClassNamebooleantrue是否让 Form 用 panel 包起来,设置为 false 后,actions 将无效。
apiApiForm 用来保存数据的 api。
initApiApiForm 用来获取初始数据的 api。
intervalnumber3000刷新时间(最低 3000)
silentPollingbooleanfalse配置刷新时是否显示加载动画
stopAutoRefreshWhenstring""通过表达式 来配置停止刷新的条件
initAsyncApiApiForm 用来获取初始数据的 api,与 initApi 不同的是,会一直轮训请求该接口,直到返回 finished 属性为 true 才 结束。
initFetchbooleantrue设置了 initApi 或者 initAsyncApi 后,默认会开始就发请求,设置为 false 后就不会起始就请求接口
initFetchOnstring用表达式来配置
initFinishedFieldstringfinished设置了 initAsyncApi 后,默认会从返回数据的 data.finished 来判断是否完成,也可以设置成其他的 xxx,就会从 data.xxx 中获取
initCheckIntervalnumber3000设置了 initAsyncApi 以后,默认拉取的时间间隔
schemaApiApi已不支持,请改用 controls 里面放置 Service 渲染器实现
asyncApiApi设置此属性后,表单提交发送保存接口后,还会继续轮训请求该接口,直到返回 finished 属性为 true 才 结束。
checkIntervalnumber3000轮训请求的时间间隔,默认为 3 秒。设置 asyncApi 才有效
finishedFieldstring"finished"如果决定结束的字段名不是 finished 请设置此属性,比如 is_success
submitOnChangebooleanfalse表单修改即提交
submitOnInitbooleanfalse初始就提交一次
resetAfterSubmitbooleanfalse提交后是否重置表单
primaryFieldstring"id"设置主键 id, 当设置后,检测表单是否完成时(asyncApi),只会携带此数据。
targetstring默认表单提交自己会通过发送 api 保存数据,但是也可以设定另外一个 form 的 name 值,或者另外一个 CRUD 模型的 name 值。 如果 target 目标是一个 Form ,则目标 Form 会重新触发 initApi,api 可以拿到当前 form 数据。如果目标是一个 CRUD 模型,则目标模型会重新触发搜索,参数为当前 Form 数据。当目标是 window 时,会把当前表单的数据附带到页面地址上。
redirectstring设置此属性后,Form 保存成功后,自动跳转到指定页面。支持相对地址,和绝对地址(相对于组内的)。
reloadstring操作完后刷新目标对象。请填写目标组件设置的 name 值,如果填写为 window 则让当前页面整体刷新。
autoFocusbooleanfalse是否自动聚焦。
canAccessSuperDatabooleantrue指定是否可以自动获取上层的数据并映射到表单项上
namestring设置一个名字后,方便其他组件与其通信
\n

表单项都是通过 controls 设置的,类型是数组,成员主要是FormItem,默认一行一个(当然 form 是 inline 模式时例外),如果想一行多个,可以将多个FormItem放在一个 Group 里面。

\n
\n

水平模式的 Form 也支持 Group 展现。

\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/FormItem-Button-Group.js b/gh-pages/docs/renderers/FormItem-Button-Group.js index 6a590d254..92331da33 100644 --- a/gh-pages/docs/renderers/FormItem-Button-Group.js +++ b/gh-pages/docs/renderers/FormItem-Button-Group.js @@ -1,7 +1,7 @@ define('docs/renderers/FormItem-Button-Group.md', function(require, exports, module) { module.exports = { - "html": "

Button-Group(FormItem)

按钮集合,直接看示例吧。

\n\n
\n

button-group 有两种模式,除了能让按钮组合在一起,还能做类似于单选功能。

\n

当不配置 buttons 属性时,就可以当复选框用。

\n\n
\n", + "html": "

Button-Group(FormItem)

按钮集合,直接看示例吧。

\n\n
\n

button-group 有两种模式,除了能让按钮组合在一起,还能做类似于单选功能。

\n

当不配置 buttons 属性时,就可以当复选框用。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/FormItem-HBox.js b/gh-pages/docs/renderers/FormItem-HBox.js index 7172e27a6..e2a883460 100644 --- a/gh-pages/docs/renderers/FormItem-HBox.js +++ b/gh-pages/docs/renderers/FormItem-HBox.js @@ -1,7 +1,7 @@ define('docs/renderers/FormItem-HBox.md', function(require, exports, module) { module.exports = { - "html": "

HBox(FormItem)

支持 form 内部再用 HBox 布局,实现左右排列。没错用 Group 也能实现,所以还是推荐用 Group

\n\n
\n", + "html": "

HBox(FormItem)

支持 form 内部再用 HBox 布局,实现左右排列。没错用 Group 也能实现,所以还是推荐用 Group

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/FormItem-List.js b/gh-pages/docs/renderers/FormItem-List.js index a84494252..7a82bd352 100644 --- a/gh-pages/docs/renderers/FormItem-List.js +++ b/gh-pages/docs/renderers/FormItem-List.js @@ -1,7 +1,7 @@ define('docs/renderers/FormItem-List.md', function(require, exports, module) { module.exports = { - "html": "

List(FormItem)

简单的列表选择框。

\n\n

单选

\n
\n

多选

\n
\n

选项带图片

\n
\n", + "html": "

List(FormItem)

简单的列表选择框。

\n\n

单选

\n
\n

多选

\n
\n

选项带图片

\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/FormItem-Panel.js b/gh-pages/docs/renderers/FormItem-Panel.js index 5f1a17e69..60e4d0acc 100644 --- a/gh-pages/docs/renderers/FormItem-Panel.js +++ b/gh-pages/docs/renderers/FormItem-Panel.js @@ -1,7 +1,7 @@ define('docs/renderers/FormItem-Panel.md', function(require, exports, module) { module.exports = { - "html": "

Panel(FormItem)

还是为了布局,可以把一部分 FormItem 合并到一个 panel 里面单独展示。

\n\n
\n", + "html": "

Panel(FormItem)

还是为了布局,可以把一部分 FormItem 合并到一个 panel 里面单独展示。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/FormItem-Table.js b/gh-pages/docs/renderers/FormItem-Table.js index 698b1929f..4ed39f09d 100644 --- a/gh-pages/docs/renderers/FormItem-Table.js +++ b/gh-pages/docs/renderers/FormItem-Table.js @@ -1,7 +1,7 @@ define('docs/renderers/FormItem-Table.md', function(require, exports, module) { module.exports = { - "html": "

Table(FormItem)

可以用来展现数据的,可以用来展示数组类型的数据,比如 multiple 的子 form

\n\n
\n

当然也可以用来作为表单输入。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"table"指定为 Table 渲染器
addablebooleanfalse是否可增加一行
editablebooleanfalse是否可编辑
removablebooleanfalse是否可删除
addApiapi-新增时提交的 API
updateApiapi-修改时提交的 API
deleteApiapi-删除时提交的 API
addBtnLabelstring增加按钮名称
addBtnIconstring"fa fa-plus"增加按钮图标
updateBtnLabelstring""更新按钮名称
updateBtnIconstring"fa fa-pencil"更新按钮图标
deleteBtnLabelstring""删除按钮名称
deleteBtnIconstring"fa fa-minus"删除按钮图标
confirmBtnLabelstring""确认编辑按钮名称
confirmBtnIconstring"fa fa-check"确认编辑按钮图标
cancelBtnLabelstring""取消编辑按钮名称
cancelBtnIconstring"fa fa-times"取消编辑按钮图标
columnsarray[]列信息
columns[x].quickEditboolean 或者 object-配合 editable 为 true 一起使用
columns[x].quickEditOnUpdateboolean 或者 object-可以用来区分新建模式和更新模式的编辑配置
\n\n
\n", + "html": "

Table(FormItem)

可以用来展现数据的,可以用来展示数组类型的数据,比如 multiple 的子 form

\n\n
\n

当然也可以用来作为表单输入。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"table"指定为 Table 渲染器
addablebooleanfalse是否可增加一行
editablebooleanfalse是否可编辑
removablebooleanfalse是否可删除
addApiapi-新增时提交的 API
updateApiapi-修改时提交的 API
deleteApiapi-删除时提交的 API
addBtnLabelstring增加按钮名称
addBtnIconstring"fa fa-plus"增加按钮图标
updateBtnLabelstring""更新按钮名称
updateBtnIconstring"fa fa-pencil"更新按钮图标
deleteBtnLabelstring""删除按钮名称
deleteBtnIconstring"fa fa-minus"删除按钮图标
confirmBtnLabelstring""确认编辑按钮名称
confirmBtnIconstring"fa fa-check"确认编辑按钮图标
cancelBtnLabelstring""取消编辑按钮名称
cancelBtnIconstring"fa fa-times"取消编辑按钮图标
columnsarray[]列信息
columns[x].quickEditboolean 或者 object-配合 editable 为 true 一起使用
columns[x].quickEditOnUpdateboolean 或者 object-可以用来区分新建模式和更新模式的编辑配置
\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/FormItem.js b/gh-pages/docs/renderers/FormItem.js index 7f7eb97bb..03be516ac 100644 --- a/gh-pages/docs/renderers/FormItem.js +++ b/gh-pages/docs/renderers/FormItem.js @@ -1,7 +1,7 @@ define('docs/renderers/FormItem.md', function(require, exports, module) { module.exports = { - "html": "

FormItem

Form 中主要是由各种 FormItem 组成。FormItem 中主要包含这些字段。

\n\n
\n

不同类型的表单,可配置项还有更多,具体请看下面对应的类型。

\n", + "html": "

FormItem

Form 中主要是由各种 FormItem 组成。FormItem 中主要包含这些字段。

\n\n
\n

不同类型的表单,可配置项还有更多,具体请看下面对应的类型。

\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Grid.js b/gh-pages/docs/renderers/Grid.js index 723419ee1..a07e1474b 100644 --- a/gh-pages/docs/renderers/Grid.js +++ b/gh-pages/docs/renderers/Grid.js @@ -1,7 +1,7 @@ define('docs/renderers/Grid.md', function(require, exports, module) { module.exports = { - "html": "

Grid

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"grid"指定为 Grid 渲染器
classNamestring外层 Dom 的类名
columnsArray列集合
columns[x]Container成员可以是其他渲染器
columns[x].xsint宽度占比: 1 - 12
columns[x].xsHiddenboolean是否隐藏
columns[x].xsOffsetint偏移量 1 - 12
columns[x].xsPullint靠左的距离占比:1 - 12
columns[x].xsPushint靠右的距离占比: 1 - 12
columns[x].smint宽度占比: 1 - 12
columns[x].smHiddenboolean是否隐藏
columns[x].smOffsetint偏移量 1 - 12
columns[x].smPullint靠左的距离占比:1 - 12
columns[x].smPushint靠右的距离占比: 1 - 12
columns[x].mdint宽度占比: 1 - 12
columns[x].mdHiddenboolean是否隐藏
columns[x].mdOffsetint偏移量 1 - 12
columns[x].mdPullint靠左的距离占比:1 - 12
columns[x].mdPushint靠右的距离占比: 1 - 12
columns[x].lgint宽度占比: 1 - 12
columns[x].lgHiddenboolean是否隐藏
columns[x].lgOffsetint偏移量 1 - 12
columns[x].lgPullint靠左的距离占比:1 - 12
columns[x].lgPushint靠右的距离占比: 1 - 12
\n

更多使用说明,请参看 Grid Props

\n
\n", + "html": "

Grid

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"grid"指定为 Grid 渲染器
classNamestring外层 Dom 的类名
columnsArray列集合
columns[x]Container成员可以是其他渲染器
columns[x].xsint宽度占比: 1 - 12
columns[x].xsHiddenboolean是否隐藏
columns[x].xsOffsetint偏移量 1 - 12
columns[x].xsPullint靠左的距离占比:1 - 12
columns[x].xsPushint靠右的距离占比: 1 - 12
columns[x].smint宽度占比: 1 - 12
columns[x].smHiddenboolean是否隐藏
columns[x].smOffsetint偏移量 1 - 12
columns[x].smPullint靠左的距离占比:1 - 12
columns[x].smPushint靠右的距离占比: 1 - 12
columns[x].mdint宽度占比: 1 - 12
columns[x].mdHiddenboolean是否隐藏
columns[x].mdOffsetint偏移量 1 - 12
columns[x].mdPullint靠左的距离占比:1 - 12
columns[x].mdPushint靠右的距离占比: 1 - 12
columns[x].lgint宽度占比: 1 - 12
columns[x].lgHiddenboolean是否隐藏
columns[x].lgOffsetint偏移量 1 - 12
columns[x].lgPullint靠左的距离占比:1 - 12
columns[x].lgPushint靠右的距离占比: 1 - 12
\n

更多使用说明,请参看 Grid Props

\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Group.js b/gh-pages/docs/renderers/Group.js index a4bee8bca..ccd538eb8 100644 --- a/gh-pages/docs/renderers/Group.js +++ b/gh-pages/docs/renderers/Group.js @@ -1,7 +1,7 @@ define('docs/renderers/Group.md', function(require, exports, module) { module.exports = { - "html": "

Group

表单项集合中,默认都是一行一个,如果想要一行多个,请用 Group 包裹起来。

\n\n
\n", + "html": "

Group

表单项集合中,默认都是一行一个,如果想要一行多个,请用 Group 包裹起来。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/HBox.js b/gh-pages/docs/renderers/HBox.js index 2e29abe56..8040d12ef 100644 --- a/gh-pages/docs/renderers/HBox.js +++ b/gh-pages/docs/renderers/HBox.js @@ -1,7 +1,7 @@ define('docs/renderers/HBox.md', function(require, exports, module) { module.exports = { - "html": "

HBox

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"hbox"指定为 HBox 渲染器
classNamestring外层 Dom 的类名
columnsArray列集合
columns[x]Container成员可以是其他渲染器
columns[x].columnClassNamestring"wrapper-xs"列上类名
\n
\n", + "html": "

HBox

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"hbox"指定为 HBox 渲染器
classNamestring外层 Dom 的类名
columnsArray列集合
columns[x]Container成员可以是其他渲染器
columns[x].columnClassNamestring"wrapper-xs"列上类名
\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Html.js b/gh-pages/docs/renderers/Html.js index 09c90c6a7..a250708da 100644 --- a/gh-pages/docs/renderers/Html.js +++ b/gh-pages/docs/renderers/Html.js @@ -1,7 +1,7 @@ define('docs/renderers/Html.md', function(require, exports, module) { module.exports = { - "html": "

Html

html, 当需要用到变量时,请用 Tpl 代替。

\n
\n", + "html": "

Html

html, 当需要用到变量时,请用 Tpl 代替。

\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Image.js b/gh-pages/docs/renderers/Image.js index e76e82a2a..1fe9c95fd 100644 --- a/gh-pages/docs/renderers/Image.js +++ b/gh-pages/docs/renderers/Image.js @@ -1,7 +1,7 @@ define('docs/renderers/Image.md', function(require, exports, module) { module.exports = { - "html": "

Image

图片格式输入,默认 AMis 会直接存储在 FEX 的 hiphoto 里面,提交到 form 是直接的图片 url。

\n\n
\n", + "html": "

Image

图片格式输入,默认 amis 会直接存储在 FEX 的 hiphoto 里面,提交到 form 是直接的图片 url。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/List.js b/gh-pages/docs/renderers/List.js index 95ba7ce82..34def771b 100644 --- a/gh-pages/docs/renderers/List.js +++ b/gh-pages/docs/renderers/List.js @@ -1,7 +1,7 @@ define('docs/renderers/List.md', function(require, exports, module) { module.exports = { - "html": "

List

列表展示。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"list" 指定为列表展示。
titlestring标题
sourcestring${items}数据源, 绑定当前环境变量
placeholderstring‘暂无数据’当没数据的时候的文字提示
classNamestring外层 CSS 类名
headerClassNamestringamis-list-header顶部外层 CSS 类名
footerClassNamestringamis-list-footer底部外层 CSS 类名
listItemArray配置单条信息
listItem.titlestring标题,支持模板语法如: \\${xxx}
listItem.titleClassNamestringh5标题 CSS 类名
listItem.subTitlestring副标题,支持模板语法如: \\${xxx}
listItem.avatarstring图片地址,支持模板语法如: \\${xxx}
listItem.avatarClassNamestringthumb-sm avatar m-r图片 CSS 类名
listItem.descstring描述,支持模板语法如: \\${xxx}
listItem.bodyArray 或者 Field内容容器,主要用来放置 Field
listItem.actionsArray Of Button按钮区域
\n
\n", + "html": "

List

列表展示。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"list" 指定为列表展示。
titlestring标题
sourcestring${items}数据源, 绑定当前环境变量
placeholderstring‘暂无数据’当没数据的时候的文字提示
classNamestring外层 CSS 类名
headerClassNamestringamis-list-header顶部外层 CSS 类名
footerClassNamestringamis-list-footer底部外层 CSS 类名
listItemArray配置单条信息
listItem.titlestring标题,支持模板语法如: \\${xxx}
listItem.titleClassNamestringh5标题 CSS 类名
listItem.subTitlestring副标题,支持模板语法如: \\${xxx}
listItem.avatarstring图片地址,支持模板语法如: \\${xxx}
listItem.avatarClassNamestringthumb-sm avatar m-r图片 CSS 类名
listItem.descstring描述,支持模板语法如: \\${xxx}
listItem.bodyArray 或者 Field内容容器,主要用来放置 Field
listItem.actionsArray Of Button按钮区域
\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Matrix.js b/gh-pages/docs/renderers/Matrix.js index f0d19123f..ed2937bf9 100644 --- a/gh-pages/docs/renderers/Matrix.js +++ b/gh-pages/docs/renderers/Matrix.js @@ -1,7 +1,7 @@ define('docs/renderers/Matrix.md', function(require, exports, module) { module.exports = { - "html": "

Matrix

矩阵类型的输入框。

\n\n
\n", + "html": "

Matrix

矩阵类型的输入框。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/NestedSelect.js b/gh-pages/docs/renderers/NestedSelect.js index e6c3d267b..3800890d9 100644 --- a/gh-pages/docs/renderers/NestedSelect.js +++ b/gh-pages/docs/renderers/NestedSelect.js @@ -1,7 +1,7 @@ define('docs/renderers/NestedSelect.md', function(require, exports, module) { module.exports = { - "html": "

NestedSelect

树形结构选择框。

\n\n
\n", + "html": "

NestedSelect

树形结构选择框。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Number.js b/gh-pages/docs/renderers/Number.js index 0eeaecd1c..d94a88bd2 100644 --- a/gh-pages/docs/renderers/Number.js +++ b/gh-pages/docs/renderers/Number.js @@ -1,7 +1,7 @@ define('docs/renderers/Number.md', function(require, exports, module) { module.exports = { - "html": "

Number

数字输入框。

\n\n
\n", + "html": "

Number

数字输入框。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Page.js b/gh-pages/docs/renderers/Page.js index abc836db0..f9d4e5d62 100644 --- a/gh-pages/docs/renderers/Page.js +++ b/gh-pages/docs/renderers/Page.js @@ -1,7 +1,7 @@ define('docs/renderers/Page.md', function(require, exports, module) { module.exports = { - "html": "

Page

Json 配置最外层是一个 Page 渲染器。他主要包含标题,副标题,提示信息等设置,需要注意的是,他有三个容器区域分别是:内容区、边栏区和工具条区,在容器里面放不同的渲染器,就能配置出不同的页面来。

\n
\n
\n

PS: 代码支持及时编辑预览

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"page"指定为 Page 渲染器。
titlestring页面标题
subTitlestring页面副标题
remarkstring标题附近会出现一个提示图标,鼠标放上去会提示该内容。
asideContainer往页面的边栏区域加内容
toolbarContainer往页面的右上角加内容,需要注意的是,当有 Title 是,区域在右上角,没有时区域就在顶部
bodyContainer往页面的内容区域加内容
classNamestring外层 dom 类名
toolbarClassNamestringv-middle wrapper text-right bg-light b-bToolbar dom 类名
bodyClassNamestringwrapperBody dom 类名
asideClassNamestringw page-aside-region bg-autoAside dom 类名
headerClassNamestringbg-light b-b wrapperHeader 区域 dom 类名
initApiApiPage 用来获取初始数据的 api。返回的数据可以整个 page 级别使用。
initFetchbooleantrue是否起始拉取 initApi
initFetchOnstring是否起始拉取 initApi, 通过表达式配置
intervalnumber3000刷新时间(最低 3000)
silentPollingbooleanfalse配置刷新时是否显示加载动画
stopAutoRefreshWhenstring""通过表达式来配置停止刷新的条件
\n", + "html": "

Page

Json 配置最外层是一个 Page 渲染器。他主要包含标题,副标题,提示信息等设置,需要注意的是,他有三个容器区域分别是:内容区、边栏区和工具条区,在容器里面放不同的渲染器,就能配置出不同的页面来。

\n
\n
\n

PS: 代码支持及时编辑预览

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"page"指定为 Page 渲染器。
titlestring页面标题
subTitlestring页面副标题
remarkstring标题附近会出现一个提示图标,鼠标放上去会提示该内容。
asideContainer往页面的边栏区域加内容
toolbarContainer往页面的右上角加内容,需要注意的是,当有 Title 是,区域在右上角,没有时区域就在顶部
bodyContainer往页面的内容区域加内容
classNamestring外层 dom 类名
toolbarClassNamestringv-middle wrapper text-right bg-light b-bToolbar dom 类名
bodyClassNamestringwrapperBody dom 类名
asideClassNamestringw page-aside-region bg-autoAside dom 类名
headerClassNamestringbg-light b-b wrapperHeader 区域 dom 类名
initApiApiPage 用来获取初始数据的 api。返回的数据可以整个 page 级别使用。
initFetchbooleantrue是否起始拉取 initApi
initFetchOnstring是否起始拉取 initApi, 通过表达式配置
intervalnumber3000刷新时间(最低 3000)
silentPollingbooleanfalse配置刷新时是否显示加载动画
stopAutoRefreshWhenstring""通过表达式来配置停止刷新的条件
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Panel.js b/gh-pages/docs/renderers/Panel.js index 2fd1af342..8cbbdeb47 100644 --- a/gh-pages/docs/renderers/Panel.js +++ b/gh-pages/docs/renderers/Panel.js @@ -1,7 +1,7 @@ define('docs/renderers/Panel.md', function(require, exports, module) { module.exports = { - "html": "

Panel

可以把相关信息以盒子的形式展示到一块。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"panel"指定为 Panel 渲染器
classNamestring"panel-default"外层 Dom 的类名
headerClassNamestring"panel-heading"header 区域的类名
footerClassNamestring"panel-footer bg-light lter wrapper"footer 区域的类名
actionsClassNamestring"panel-footer"actions 区域的类名
bodyClassNamestring"panel-body"body 区域的类名
titlestring标题
headerContainer顶部容器
bodyContainer内容容器
footerContainer底部容器
affixFooterboolean是否固定底部容器
actionsArray Of Button按钮区域
\n
\n", + "html": "

Panel

可以把相关信息以盒子的形式展示到一块。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"panel"指定为 Panel 渲染器
classNamestring"panel-default"外层 Dom 的类名
headerClassNamestring"panel-heading"header 区域的类名
footerClassNamestring"panel-footer bg-light lter wrapper"footer 区域的类名
actionsClassNamestring"panel-footer"actions 区域的类名
bodyClassNamestring"panel-body"body 区域的类名
titlestring标题
headerContainer顶部容器
bodyContainer内容容器
footerContainer底部容器
affixFooterboolean是否固定底部容器
actionsArray Of Button按钮区域
\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Password.js b/gh-pages/docs/renderers/Password.js index 77ace872b..13107c5ad 100644 --- a/gh-pages/docs/renderers/Password.js +++ b/gh-pages/docs/renderers/Password.js @@ -1,7 +1,7 @@ define('docs/renderers/Password.md', function(require, exports, module) { module.exports = { - "html": "

Password

密码输入框。

\n\n", + "html": "

Password

密码输入框。

\n\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Picker.js b/gh-pages/docs/renderers/Picker.js index 4d46e3a38..8732c1ae0 100644 --- a/gh-pages/docs/renderers/Picker.js +++ b/gh-pages/docs/renderers/Picker.js @@ -1,7 +1,7 @@ define('docs/renderers/Picker.md', function(require, exports, module) { module.exports = { - "html": "

Picker

列表选取。可以静态数据,或者通过接口拉取动态数据。

\n\n
\n", + "html": "

Picker

列表选取。可以静态数据,或者通过接口拉取动态数据。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Radios.js b/gh-pages/docs/renderers/Radios.js index ac4227639..d974cbac3 100644 --- a/gh-pages/docs/renderers/Radios.js +++ b/gh-pages/docs/renderers/Radios.js @@ -1,7 +1,7 @@ define('docs/renderers/Radios.md', function(require, exports, module) { module.exports = { - "html": "

Radios

单选框

\n\n
\n", + "html": "

Radios

单选框

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Repeat.js b/gh-pages/docs/renderers/Repeat.js index f3b5c22de..bfb3d9ea7 100644 --- a/gh-pages/docs/renderers/Repeat.js +++ b/gh-pages/docs/renderers/Repeat.js @@ -1,7 +1,7 @@ define('docs/renderers/Repeat.md', function(require, exports, module) { module.exports = { - "html": "

Repeat

可用来设置重复频率

\n\n
\n", + "html": "

Repeat

可用来设置重复频率

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Rich-Text.js b/gh-pages/docs/renderers/Rich-Text.js index cab80415c..19898456a 100644 --- a/gh-pages/docs/renderers/Rich-Text.js +++ b/gh-pages/docs/renderers/Rich-Text.js @@ -1,7 +1,7 @@ define('docs/renderers/Rich-Text.md', function(require, exports, module) { module.exports = { - "html": "

Rich-Text

富文本编辑器

\n\n
\n", + "html": "

Rich-Text

富文本编辑器

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Select.js b/gh-pages/docs/renderers/Select.js index 3fef82478..8aab86268 100644 --- a/gh-pages/docs/renderers/Select.js +++ b/gh-pages/docs/renderers/Select.js @@ -1,7 +1,7 @@ define('docs/renderers/Select.md', function(require, exports, module) { module.exports = { - "html": "

Select

选项表单。

\n\n

单选

\n
\n

多选

\n
\n", + "html": "

Select

选项表单。

\n\n

单选

\n
\n

多选

\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Service.js b/gh-pages/docs/renderers/Service.js index e2b77ac16..c5b4016ec 100644 --- a/gh-pages/docs/renderers/Service.js +++ b/gh-pages/docs/renderers/Service.js @@ -1,7 +1,7 @@ define('docs/renderers/Service.md', function(require, exports, module) { module.exports = { - "html": "

Service

功能型容器,自身不负责展示内容,主要职责在于通过配置的 api 拉取数据,数据可用于子组件。\n该组件初始化时就会自动拉取一次数据,后续如果需要刷新,请结合 Action 实现,可以把 Action 的 actionType 设置为 reload, target 为该组件的 name 值。\n同时该组件,还支持 api 数值自动监听,比如 getData?type=$type 只要当前环境 type 值发生变化,就会自动重新拉取。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"service"指定为 service 渲染器
classNamestring外层 Dom 的类名
bodyContainer内容容器
apiapi数据源 API 地址
initFetchboolean是否默认拉取
schemaApiapi用来获取远程 Schema 的 api
initFetchSchemaboolean是否默认拉取 Schema
intervalnumber3000刷新时间(最低 3000)
silentPollingbooleanfalse配置刷新时是否显示加载动画
stopAutoRefreshWhenstring""通过表达式来配置停止刷新的条件
\n
\n", + "html": "

Service

功能型容器,自身不负责展示内容,主要职责在于通过配置的 api 拉取数据,数据可用于子组件。\n该组件初始化时就会自动拉取一次数据,后续如果需要刷新,请结合 Action 实现,可以把 Action 的 actionType 设置为 reload, target 为该组件的 name 值。\n同时该组件,还支持 api 数值自动监听,比如 getData?type=$type 只要当前环境 type 值发生变化,就会自动重新拉取。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"service"指定为 service 渲染器
classNamestring外层 Dom 的类名
bodyContainer内容容器
apiapi数据源 API 地址
initFetchboolean是否默认拉取
schemaApiapi用来获取远程 Schema 的 api
initFetchSchemaboolean是否默认拉取 Schema
intervalnumber3000刷新时间(最低 3000)
silentPollingbooleanfalse配置刷新时是否显示加载动画
stopAutoRefreshWhenstring""通过表达式来配置停止刷新的条件
\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Static.js b/gh-pages/docs/renderers/Static.js index c52258091..ed3548c3a 100644 --- a/gh-pages/docs/renderers/Static.js +++ b/gh-pages/docs/renderers/Static.js @@ -1,7 +1,7 @@ define('docs/renderers/Static.md', function(require, exports, module) { module.exports = { - "html": "

Static

纯用来展现数据的。

\n\n
\n

Static-XXX

\n

纯用来展示数据的,用法跟 crud 里面的Column一样, 且支持 quickEdit 和 popOver 功能。

\n
\n", + "html": "

Static

纯用来展现数据的。

\n\n
\n

Static-XXX

\n

纯用来展示数据的,用法跟 crud 里面的Column一样, 且支持 quickEdit 和 popOver 功能。

\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/SubForm.js b/gh-pages/docs/renderers/SubForm.js index 11f7b67c8..28528893f 100644 --- a/gh-pages/docs/renderers/SubForm.js +++ b/gh-pages/docs/renderers/SubForm.js @@ -1,7 +1,7 @@ define('docs/renderers/SubForm.md', function(require, exports, module) { module.exports = { - "html": "

SubForm

formItem 还可以是子表单类型。

\n\n
\n", + "html": "

SubForm

formItem 还可以是子表单类型。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Switch.js b/gh-pages/docs/renderers/Switch.js index 597e19d21..d09ee2440 100644 --- a/gh-pages/docs/renderers/Switch.js +++ b/gh-pages/docs/renderers/Switch.js @@ -1,7 +1,7 @@ define('docs/renderers/Switch.md', function(require, exports, module) { module.exports = { - "html": "

Switch

可选框,和 checkbox 完全等价。

\n\n
\n", + "html": "

Switch

可选框,和 checkbox 完全等价。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Table.js b/gh-pages/docs/renderers/Table.js index d11016923..76240c4ba 100644 --- a/gh-pages/docs/renderers/Table.js +++ b/gh-pages/docs/renderers/Table.js @@ -1,7 +1,7 @@ define('docs/renderers/Table.md', function(require, exports, module) { module.exports = { - "html": "

Table

表格展示。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"table" 指定为 table 渲染器
titlestring标题
sourcestring${items}数据源, 绑定当前环境变量
affixHeaderbooleantrue是否固定表头
columnsTogglableauto 或者 booleanauto展示列显示开关, 自动即:列数量大于或等于 5 个时自动开启
placeholderstring‘暂无数据’当没数据的时候的文字提示
classNamestringpanel-default外层 CSS 类名
tableClassNamestringtable-db table-striped表格 CSS 类名
headerClassNamestringAction.md-table-header顶部外层 CSS 类名
footerClassNamestringAction.md-table-footer底部外层 CSS 类名
toolbarClassNamestringAction.md-table-toolbar工具栏 CSS 类名
columnsArray of Column用来设置列信息
\n
\n", + "html": "

Table

表格展示。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"table" 指定为 table 渲染器
titlestring标题
sourcestring${items}数据源, 绑定当前环境变量
affixHeaderbooleantrue是否固定表头
columnsTogglableauto 或者 booleanauto展示列显示开关, 自动即:列数量大于或等于 5 个时自动开启
placeholderstring‘暂无数据’当没数据的时候的文字提示
classNamestringpanel-default外层 CSS 类名
tableClassNamestringtable-db table-striped表格 CSS 类名
headerClassNamestringAction.md-table-header顶部外层 CSS 类名
footerClassNamestringAction.md-table-footer底部外层 CSS 类名
toolbarClassNamestringAction.md-table-toolbar工具栏 CSS 类名
columnsArray of Column用来设置列信息
\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Tasks.js b/gh-pages/docs/renderers/Tasks.js index 81b886617..d213a9ac5 100644 --- a/gh-pages/docs/renderers/Tasks.js +++ b/gh-pages/docs/renderers/Tasks.js @@ -1,7 +1,7 @@ define('docs/renderers/Tasks.md', function(require, exports, module) { module.exports = { - "html": "

Tasks

任务操作集合,类似于 orp 上线。

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"tasks"指定为 Tasks 渲染器
classNamestring外层 Dom 的类名
tableClassNamestringtable Dom 的类名
itemsArray任务列表
items[x].labelstring任务名称
items[x].keystring任务键值,请唯一区分
items[x].remarkstring当前任务状态,支持 html
items[x].statusstring任务状态: 0: 初始状态,不可操作。1: 就绪,可操作状态。2: 进行中,还没有结束。3:有错误,不可重试。4: 已正常结束。5:有错误,且可以重试。
checkApiapi返回任务列表,返回的数据请参考 items。
submitApiapi提交任务使用的 API
reSubmitApiapi如果任务失败,且可以重试,提交的时候会使用此 API
intervalnumber3000当有任务进行中,会每隔一段时间再次检测,而时间间隔就是通过此项配置,默认 3s。
taskNameLabelstring任务名称任务名称列说明
operationLabelstring操作操作列说明
statusLabelstring状态状态列说明
remarkLabelstring备注备注列说明
btnTextstring上线操作按钮文字
retryBtnTextstring重试重试操作按钮文字
btnClassNamestringbtn-sm btn-default配置容器按钮 className
retryBtnClassNamestringbtn-sm btn-danger配置容器重试按钮 className
statusLabelMaparray["label-warning", "label-info", "label-success", "label-danger", "label-default", "label-danger"]状态显示对应的类名配置
statusTextMaparray["未开始", "就绪", "进行中", "出错", "已完成", "出错"]状态显示对应的文字显示配置
\n
\n", + "html": "

Tasks

任务操作集合,类似于 orp 上线。

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"tasks"指定为 Tasks 渲染器
classNamestring外层 Dom 的类名
tableClassNamestringtable Dom 的类名
itemsArray任务列表
items[x].labelstring任务名称
items[x].keystring任务键值,请唯一区分
items[x].remarkstring当前任务状态,支持 html
items[x].statusstring任务状态: 0: 初始状态,不可操作。1: 就绪,可操作状态。2: 进行中,还没有结束。3:有错误,不可重试。4: 已正常结束。5:有错误,且可以重试。
checkApiapi返回任务列表,返回的数据请参考 items。
submitApiapi提交任务使用的 API
reSubmitApiapi如果任务失败,且可以重试,提交的时候会使用此 API
intervalnumber3000当有任务进行中,会每隔一段时间再次检测,而时间间隔就是通过此项配置,默认 3s。
taskNameLabelstring任务名称任务名称列说明
operationLabelstring操作操作列说明
statusLabelstring状态状态列说明
remarkLabelstring备注备注列说明
btnTextstring上线操作按钮文字
retryBtnTextstring重试重试操作按钮文字
btnClassNamestringbtn-sm btn-default配置容器按钮 className
retryBtnClassNamestringbtn-sm btn-danger配置容器重试按钮 className
statusLabelMaparray["label-warning", "label-info", "label-success", "label-danger", "label-default", "label-danger"]状态显示对应的类名配置
statusTextMaparray["未开始", "就绪", "进行中", "出错", "已完成", "出错"]状态显示对应的文字显示配置
\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Text.js b/gh-pages/docs/renderers/Text.js index f90918fa8..29b48f324 100644 --- a/gh-pages/docs/renderers/Text.js +++ b/gh-pages/docs/renderers/Text.js @@ -1,7 +1,7 @@ define('docs/renderers/Text.md', function(require, exports, module) { module.exports = { - "html": "

Text

普通的文本输入框。

\n\n
\n

带提示功能

\n
\n", + "html": "

Text

普通的文本输入框。

\n\n
\n

带提示功能

\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Textarea.js b/gh-pages/docs/renderers/Textarea.js index 23d6739a0..6f91977b7 100644 --- a/gh-pages/docs/renderers/Textarea.js +++ b/gh-pages/docs/renderers/Textarea.js @@ -1,7 +1,7 @@ define('docs/renderers/Textarea.md', function(require, exports, module) { module.exports = { - "html": "

Textarea

多行文本输入框。

\n\n
\n", + "html": "

Textarea

多行文本输入框。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Time.js b/gh-pages/docs/renderers/Time.js index 30205e679..df24059f4 100644 --- a/gh-pages/docs/renderers/Time.js +++ b/gh-pages/docs/renderers/Time.js @@ -1,7 +1,7 @@ define('docs/renderers/Time.md', function(require, exports, module) { module.exports = { - "html": "

Time

时间类型。

\n\n
\n", + "html": "

Time

时间类型。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Tpl.js b/gh-pages/docs/renderers/Tpl.js index aa5924a2e..9000dc329 100644 --- a/gh-pages/docs/renderers/Tpl.js +++ b/gh-pages/docs/renderers/Tpl.js @@ -1,7 +1,7 @@ define('docs/renderers/Tpl.md', function(require, exports, module) { module.exports = { - "html": "

Tpl

tpl 类型的渲染器支持用 JS 模板引擎来组织输出,采用的 lodash 的 template,关于语法部分,请前往 lodash 文档页面。

\n
\n

可用 js 方法。

\n\n

如:

\n
{\n    \"data\": {\n        \"user\": \"no one\"\n    },\n    \"body\": {\n        \"type\": \"tpl\",\n        \"tpl\": \"User: <%= formatDate(data.time, 'YYYY-MM-DD') %>\"\n    }\n}\n
\n

如果只想简单取下变量,可以用 $xxx 或者 ${xxx}。同时如果不指定类型,默认就是 tpl, 所以以上示例可以简化为。

\n
\n

取值支持多级,如果层级比较深可以用 . 来分割如: ${xx.xxx.xx}\n另外 $& 表示直接获取当前的 data

\n
\n
\n

通过 $xxx 取到的值,默认是不做任何处理,如果希望把 html 转义了的,请使用:${xxx | html}

\n

从上面的语法可以看出来,取值时是支持指定 filter 的,那么有哪些 filter 呢?

\n\n

组合使用。

\n\n", + "html": "

Tpl

tpl 类型的渲染器支持用 JS 模板引擎来组织输出,采用的 lodash 的 template,关于语法部分,请前往 lodash 文档页面。

\n
\n

可用 js 方法。

\n\n

如:

\n
{\n    \"data\": {\n        \"user\": \"no one\"\n    },\n    \"body\": {\n        \"type\": \"tpl\",\n        \"tpl\": \"User: <%= formatDate(data.time, 'YYYY-MM-DD') %>\"\n    }\n}\n
\n

如果只想简单取下变量,可以用 $xxx 或者 ${xxx}。同时如果不指定类型,默认就是 tpl, 所以以上示例可以简化为。

\n
\n

取值支持多级,如果层级比较深可以用 . 来分割如: ${xx.xxx.xx}\n另外 $& 表示直接获取当前的 data

\n
\n
\n

通过 $xxx 取到的值,默认是不做任何处理,如果希望把 html 转义了的,请使用:${xxx | html}

\n

从上面的语法可以看出来,取值时是支持指定 filter 的,那么有哪些 filter 呢?

\n\n

组合使用。

\n\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Tree.js b/gh-pages/docs/renderers/Tree.js index 9313be3be..8c676d9ba 100644 --- a/gh-pages/docs/renderers/Tree.js +++ b/gh-pages/docs/renderers/Tree.js @@ -1,7 +1,7 @@ define('docs/renderers/Tree.md', function(require, exports, module) { module.exports = { - "html": "

Tree

树形结构输入框。

\n\n
\n", + "html": "

Tree

树形结构输入框。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/TreeSelect.js b/gh-pages/docs/renderers/TreeSelect.js index 56ccb97db..4c0b03133 100644 --- a/gh-pages/docs/renderers/TreeSelect.js +++ b/gh-pages/docs/renderers/TreeSelect.js @@ -1,7 +1,7 @@ define('docs/renderers/TreeSelect.md', function(require, exports, module) { module.exports = { - "html": "

TreeSelect

树形结构选择框。

\n\n
\n", + "html": "

TreeSelect

树形结构选择框。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Types.js b/gh-pages/docs/renderers/Types.js index 0276059e5..88e21cdbd 100644 --- a/gh-pages/docs/renderers/Types.js +++ b/gh-pages/docs/renderers/Types.js @@ -1,7 +1,7 @@ define('docs/renderers/Types.md', function(require, exports, module) { module.exports = { - "html": "

类型说明

Container

Container 不是一个特定的渲染器,而是 AMis 中一个特殊类型,它是以下类型的任何一种。

\n\n

示例:

\n
{\n    \"container\": \"普通一段字符串\"\n}\n
\n
{\n    \"container\": {\n        \"type\": \"button\",\n        \"label\": \"按钮\"\n    }\n}\n
\n
{\n    \"container\": [\n        \"普通一段字符串\",\n\n        {\n            \"type\": \"button\",\n            \"label\": \"按钮\"\n        },\n\n        [\"普通一段字符串\", \"普通一段字符串\"]\n    ]\n}\n
\n

API

Api 类型可以是字符串或者对象。API 中可以直接设置数据发送结构,注意看示例。

\n\n

注意

\n

AMis 所有值为 url 的如: "http://www.baidu.com" 都会被替换成 proxy 代理,如果不希望这么做,请明确指示如: "raw:http://www.baidu.com"。还有为了安全,AMis 默认只能转发公司内部 API 接口,如果您的接口在外网环境,也请明确指示如:"external:http://www.baidu.com"

\n

表达式

配置项中,所有 boolean 类型的配置,都可以用 JS 表达式来配置。所有boolean 配置项,后面加个 On 则是表达式配置方式,可以用 js 语法来根据当前模型中的数据来决定是否启用。\n如:FormItem 中的 disabledOnhiddenOnvisibleOnCRUD 中的 itemDraggableOn 等等。

\n
\n

为了能加入权限控制,表达是中允许可以用 acl.can 方法来检测当前用户是否拥有某个权限。\n如: {"disabledOn": "!can('some-resource')"}。权限能力部分,请前往能力管理,\n权限配置请前往权限配置管理。

\n", + "html": "

类型说明

Container

Container 不是一个特定的渲染器,而是 amis 中一个特殊类型,它是以下类型的任何一种。

\n\n

示例:

\n
{\n    \"container\": \"普通一段字符串\"\n}\n
\n
{\n    \"container\": {\n        \"type\": \"button\",\n        \"label\": \"按钮\"\n    }\n}\n
\n
{\n    \"container\": [\n        \"普通一段字符串\",\n\n        {\n            \"type\": \"button\",\n            \"label\": \"按钮\"\n        },\n\n        [\"普通一段字符串\", \"普通一段字符串\"]\n    ]\n}\n
\n

API

Api 类型可以是字符串或者对象。API 中可以直接设置数据发送结构,注意看示例。

\n\n

注意

\n

amis 所有值为 url 的如: "http://www.baidu.com" 都会被替换成 proxy 代理,如果不希望这么做,请明确指示如: "raw:http://www.baidu.com"。还有为了安全,amis 默认只能转发公司内部 API 接口,如果您的接口在外网环境,也请明确指示如:"external:http://www.baidu.com"

\n

表达式

配置项中,所有 boolean 类型的配置,都可以用 JS 表达式来配置。所有boolean 配置项,后面加个 On 则是表达式配置方式,可以用 js 语法来根据当前模型中的数据来决定是否启用。\n如:FormItem 中的 disabledOnhiddenOnvisibleOnCRUD 中的 itemDraggableOn 等等。

\n
\n

为了能加入权限控制,表达是中允许可以用 acl.can 方法来检测当前用户是否拥有某个权限。\n如: {"disabledOn": "!can('some-resource')"}。权限能力部分,请前往能力管理,\n权限配置请前往权限配置管理。

\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Url.js b/gh-pages/docs/renderers/Url.js index 8e4f841cc..bafa7bc1a 100644 --- a/gh-pages/docs/renderers/Url.js +++ b/gh-pages/docs/renderers/Url.js @@ -1,7 +1,7 @@ define('docs/renderers/Url.md', function(require, exports, module) { module.exports = { - "html": "

Url

URL 输入框。

\n\n
\n", + "html": "

Url

URL 输入框。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Wizard.js b/gh-pages/docs/renderers/Wizard.js index f21fbf6d0..4f694597e 100644 --- a/gh-pages/docs/renderers/Wizard.js +++ b/gh-pages/docs/renderers/Wizard.js @@ -1,7 +1,7 @@ define('docs/renderers/Wizard.md', function(require, exports, module) { module.exports = { - "html": "

Wizard

表单向导,能够配置多个步骤引导用户一步一步完成表单提交。

\n\n
\n", + "html": "

Wizard

表单向导,能够配置多个步骤引导用户一步一步完成表单提交。

\n\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/renderers/Wrapper.js b/gh-pages/docs/renderers/Wrapper.js index 1770c1c1c..3094e9c39 100644 --- a/gh-pages/docs/renderers/Wrapper.js +++ b/gh-pages/docs/renderers/Wrapper.js @@ -1,7 +1,7 @@ define('docs/renderers/Wrapper.md', function(require, exports, module) { module.exports = { - "html": "

Wrapper

简单的一个容器。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"wrapper"指定为 Wrapper 渲染器
classNamestring外层 Dom 的类名
sizestring支持: xssmmdlg
bodyContainer内容容器
\n
\n", + "html": "

Wrapper

简单的一个容器。

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
属性名类型默认值说明
typestring"wrapper"指定为 Wrapper 渲染器
classNamestring外层 Dom 的类名
sizestring支持: xssmmdlg
bodyContainer内容容器
\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/sdk.js b/gh-pages/docs/sdk.js index bb9718637..18d27129e 100644 --- a/gh-pages/docs/sdk.js +++ b/gh-pages/docs/sdk.js @@ -2,7 +2,7 @@ define('docs/sdk.md', function(require, exports, module) { module.exports = { "title": "如何使用", - "html": "

如何使用

npm i amis\n
\n

安装完后可以在 React Component 这么使用。

\n
import * as React from 'react';\nimport {\n    render as renderAmis\n} from 'amis';\n\nclass MyComponent extends React.Component<any, any> {\n    render() {\n        return (\n            <div>\n                <p>通过 AMis 渲染页面</p>\n                {renderAmis({\n                    // schema\n                    // 这里是 AMis 的 Json 配置。\n                    type: 'page',\n                    title: '简单页面',\n                    body: '内容'\n                }, {\n                    // props\n                }, {\n                    // env\n                    // 这些是 AMis 需要的一些接口实现\n                    // 可以参考本项目里面的 Demo 部分代码。\n\n                    updateLocation: (location:string/*目标地址*/, replace:boolean/*是replace,还是push?*/) => {\n                        // 用来更新地址栏\n                    },\n\n                    jumpTo: (location:string/*目标地址*/) => {\n                        // 页面跳转, actionType:  link、url 都会进来。\n                    },\n\n                    fetcher: ({\n                        url,\n                        method,\n                        data,\n                        config\n                    }:{\n                        url:string/*目标地址*/,\n                        method:'get' | 'post' | 'put' | 'delete'/*发送方式*/,\n                        data: object | void/*数据*/,\n                        config: object/*其他配置*/\n                    }) => {\n                        // 用来发送 Ajax 请求,建议使用 axios\n                    },\n                    notify: (type:'error'|'success'/**/, msg:string/*提示内容*/) => {\n                        // 用来提示用户\n                    },\n                    alert: (content:string/*提示信息*/) => {\n                        // 另外一种提示,可以直接用系统框\n                    },\n                    confirm: (content:string/*提示信息*/) => {\n                        // 确认框。\n                    }\n                });}\n            </div>\n        );\n    }\n}\n
\n

工作原理

AMis 的渲染过程就是将 json 转成对应的 React 组件。先通过 json 的 type 找到对应的 Component 然后,然后把其他属性作为 props 传递过去完成渲染。

\n

拿一个表单页面来说,如果用React组件调用大概是这样。

\n
<Page\n    title=\"页面标题\"\n    subTitle=\"副标题\"\n>\n    <Form\n        title=\"用户登录\"\n        controls={[\n            {\n                type: 'text',\n                name: 'username',\n                label: '用户名'\n            }\n        ]}\n    />\n</Page>\n
\n

把以上配置方式换成 AMis JSON, 则是:

\n
{\n  \"type\": \"page\",\n  \"title\": \"页面标题\",\n  \"subTitle\": \"副标题\",\n  \"body\": {\n    \"type\": \"form\",\n    \"title\": \"用户登录\",\n    \"controls\": [\n      {\n        \"type\": \"text\",\n        \"name\": \"username\",\n        \"label\": \"用户名\"\n      }\n    ]\n  }\n}\n
\n

那么,AMis 是如何将 JSON 转成组件的呢?直接根据节点的 type 去跟组件一一对应?似乎很可能会重名比如在表格里面展示的类型 text 跟表单里面的 text是完全不一样的,一个负责展示,一个却负责输入。所以说一个节点要被什么组件渲染,还需要携带上下文(context)信息。

\n

如何去携带上下文(context)信息?AMis 中直接是用节点的路径(path)来作为上下文信息。从上面的例子来看,一共有三个节点,path 信息分别是。

\n\n

根据 path 的信息就能很容易注册组件跟节点对应了。

\n

Page 组件的示例代码

\n
@Renderer({\n    test: /^page$/,\n    // ... 其他信息隐藏了\n})\nexport class PageRenderer extends React.Component {\n    // ... 其他信息隐藏了\n    render() {\n        const {\n            title,\n            body,\n            render // 用来渲染孩子节点,如果当前是叶子节点则可以忽略。\n        } = this.props;\n        return (\n            <div className=\"page\">\n                <h1>{title}</h1>\n                <div className=\"body-container\">\n                    {render('body', body)/*渲染孩子节点*/}\n                </div>\n            </div>\n        );\n    }\n}\n
\n

Form 组件的示例代码

\n
@Renderer({\n    test: /(^|\\/)form$/,\n    // ... 其他信息隐藏了\n})\nexport class FormRenderer extends React.Component {\n    // ... 其他信息隐藏了\n    render() {\n        const {\n            title,\n            controls,\n            render // 用来渲染孩子节点,如果当前是叶子节点则可以忽略。\n        } = this.props;\n        return (\n            <form className=\"form\">\n                {controls.map((control, index) => (\n                    <div className=\"form-item\" key={index}>\n                        {render(`${index}/control`, control)}\n                    </div>\n                ))}\n            </form>\n        );\n    }\n}\n
\n

Text 组件的示例代码

\n
@Renderer({\n    test: /(^|\\/)form(?:\\/\\d+)?\\/control(?\\/\\d+)?\\/text$/\n    // ... 其他信息隐藏了\n})\nexport class FormItemTextRenderer extends React.Component {\n    // ... 其他信息隐藏了\n    render() {\n        const {\n            label,\n            name,\n            onChange\n        } = this.props;\n        return (\n            <div className=\"form-group\">\n                <label>{label}<label>\n                <input type=\"text\" onChange={(e) => onChange(e.currentTarget.value)} />\n            </div>\n        );\n    }\n}\n
\n

那么渲染过程就是根据节点 path 信息,跟组件池中的组件 test (检测) 信息做匹配,如果命中,则把当前节点转给对应组件渲染,节点中其他属性将作为目标组件的 props。需要注意的是,如果是容器组件,比如以上例子中的 page 组件,从 props 中拿到的 body 是一个子节点,由于节点类型是不固定,由使用者决定,所以不能直接完成渲染,所以交给属性中下发的 render 方法去完成渲染,{render('body', body)},他的工作就是拿子节点的 path 信息去组件池里面找到对应的渲染器,然后交给对应组件去完成渲染。

\n

自定义组件

如果 AMis 中组件不能满足你的需求,同时你又会 React 组件开发,那么就自己定制一个吧。

\n

先来看个简单的例子

\n
import * as React from 'react';\nimport {\n    Renderer\n} from 'amis';\n\n@Renderer({\n    test: /(^|\\/)my\\-renderer$/,\n})\nclass CustomRenderer extends React.Component {\n    render() {\n        const  {tip} = this.props;\n        return (\n            <div>这是自定义组件:{tip}</div>\n        );\n    }\n}\n
\n

有了以上这段代码后,就可以这样使用了。

\n
{\n    \"type\": \"page\",\n    \"title\": \"自定义组件示例\",\n    \"body\": {\n        \"type\": \"my-renderer\",\n        \"tip\": \"简单示例\"\n    }\n}\n
\n

如果你看了AMis工作原理应该不难理解,这里注册一个 React 组件,当节点的 path 信息是 my-renderer 结尾时,交给当前组件来完成渲染。\n如果你只写叶子节点的渲染器,已经可以不用看了,如果你的渲染器中有容器需要可以放置其他节点,那么接着看以下这段代码。

\n
import * as React from 'react';\nimport {\n    Renderer\n} from 'amis';\n\n@Renderer({\n    test: /(^|\\/)my\\-renderer2$/,\n})\nclass CustomRenderer extends React.Component {\n    render() {\n        const  {\n            tip,\n            body,\n            render\n        } = this.props;\n        return (\n            <div>\n                <p>这是自定义组件:{tip}</p>\n                {body ? (\n                    <div className=\"container\">\n                        {render('body', body, {\n                            // 这里的信息会作为 props 传递给子组件,一般情况下都不需要这个\n                        })}\n                    </div>\n                ) : null}\n            </div>\n        );\n    }\n}\n
\n

有了以上这段代码后,就可以这样使用了。

\n
{\n    \"type\": \"page\",\n    \"title\": \"自定义组件示例\",\n    \"body\": {\n        \"type\": \"my-renderer2\",\n        \"tip\": \"简单示例\",\n        \"body\": {\n            \"type\": \"form\",\n            \"controls\": [\n                {\n                    \"type\": \"text\",\n                    \"label\": \"用户名\",\n                    \"name\": \"usename\"\n                }\n            ]\n        }\n    }\n}\n
\n

跟第一个列子不同的地方是,这里多了个 render 方法,这个方法就是专门用来渲染子节点的。来看下参数说明:

\n\n

以上是普通渲染器的注册方式,如果是表单项,为了更简单的扩充,请使用 FormItem 注解,而不是 Renderer。 原因是如果用 FormItem 是不用关心:label怎么摆,表单验证器怎么实现,如何适配表单的3中展现方式(水平、上下和内联模式),而只用关心:有了值后如何回显,响应用户交互设置新值。

\n
import * as React from 'react';\nimport {\n    FormItem\n} from 'amis';\n\n@FormItem({\n    type: 'custom'\n})\nclass MyFormItem extends React.Component {\n    render() {\n        const {\n            value,\n            onChange\n        } = this.props;\n\n        return (\n            <div>\n                <p>这个是个自定义组件</p>\n                <p>当前值:{value}</p>\n                <a className=\"btn btn-default\" onClick={() => onChange(Math.round(Math.random() * 10000))}>随机修改</a>\n            </div>\n        );\n    }\n}\n
\n

有了以上这段代码后,就可以这样使用了。

\n
{\n    \"type\": \"page\",\n    \"title\": \"自定义组件示例\",\n    \"body\": {\n            \"type\": \"form\",\n            \"controls\": [\n                {\n                    \"type\": \"text\",\n                    \"label\": \"用户名\",\n                    \"name\": \"usename\"\n                },\n\n                {\n                    \"type\": \"custom\",\n                    \"label\": \"随机值\",\n                    \"name\": \"randon\"\n                }\n            ]\n        }\n}\n
\n
\n

注意: 使用 FormItem 默认是严格模式,即只有必要的属性变化才会重新渲染,有可能满足不了你的需求,如果忽略性能问题,可以传入 strictMode: false 来关闭。

\n
\n

以上的例子都是需要先注册组件,然后再使用的,如果你在自己项目中使用,还有更简单的用法,以下示例直接无需注册。

\n
{\n    \"type\": \"page\",\n    \"title\": \"自定义组件示例\",\n    \"body\": {\n            \"type\": \"form\",\n            \"controls\": [\n                {\n                    \"type\": \"text\",\n                    \"label\": \"用户名\",\n                    \"name\": \"usename\"\n                },\n\n                {\n                    \"name\": \"a\",\n                    \"children\": ({\n                        value,\n                        onChange\n                    }) => (\n                        <div>\n                            <p>这个是个自定义组件</p>\n                            <p>当前值:{value}</p>\n                            <a className=\"btn btn-default\" onClick={() => onChange(Math.round(Math.random() * 10000))}>随机修改</a>\n                        </div>\n                    )\n                }\n            ]\n        }\n}\n
\n

即:通过 children 传递一个React组件,这个示例是一个React Stateless Functional Component,也可以是传统的 React 组件。\n任何节点如果包含 children 这个属性,则都会把当前节点交给 children 来处理,跳过了从 AMis 渲染器池子中选择渲染器的过程。

\n", + "html": "

如何使用

npm i amis\n
\n

安装完后可以在 React Component 这么使用。

\n
import * as React from 'react';\nimport {\n    render as renderAmis\n} from 'amis';\n\nclass MyComponent extends React.Component<any, any> {\n    render() {\n        return (\n            <div>\n                <p>通过 amis 渲染页面</p>\n                {renderAmis({\n                    // schema\n                    // 这里是 amis 的 Json 配置。\n                    type: 'page',\n                    title: '简单页面',\n                    body: '内容'\n                }, {\n                    // props\n                }, {\n                    // env\n                    // 这些是 amis 需要的一些接口实现\n                    // 可以参考本项目里面的 Demo 部分代码。\n\n                    updateLocation: (location:string/*目标地址*/, replace:boolean/*是replace,还是push?*/) => {\n                        // 用来更新地址栏\n                    },\n\n                    jumpTo: (location:string/*目标地址*/) => {\n                        // 页面跳转, actionType:  link、url 都会进来。\n                    },\n\n                    fetcher: ({\n                        url,\n                        method,\n                        data,\n                        config\n                    }:{\n                        url:string/*目标地址*/,\n                        method:'get' | 'post' | 'put' | 'delete'/*发送方式*/,\n                        data: object | void/*数据*/,\n                        config: object/*其他配置*/\n                    }) => {\n                        // 用来发送 Ajax 请求,建议使用 axios\n                    },\n                    notify: (type:'error'|'success'/**/, msg:string/*提示内容*/) => {\n                        // 用来提示用户\n                    },\n                    alert: (content:string/*提示信息*/) => {\n                        // 另外一种提示,可以直接用系统框\n                    },\n                    confirm: (content:string/*提示信息*/) => {\n                        // 确认框。\n                    }\n                });}\n            </div>\n        );\n    }\n}\n
\n

工作原理

amis 的渲染过程就是将 json 转成对应的 React 组件。先通过 json 的 type 找到对应的 Component 然后,然后把其他属性作为 props 传递过去完成渲染。

\n

拿一个表单页面来说,如果用React组件调用大概是这样。

\n
<Page\n    title=\"页面标题\"\n    subTitle=\"副标题\"\n>\n    <Form\n        title=\"用户登录\"\n        controls={[\n            {\n                type: 'text',\n                name: 'username',\n                label: '用户名'\n            }\n        ]}\n    />\n</Page>\n
\n

把以上配置方式换成 amis JSON, 则是:

\n
{\n  \"type\": \"page\",\n  \"title\": \"页面标题\",\n  \"subTitle\": \"副标题\",\n  \"body\": {\n    \"type\": \"form\",\n    \"title\": \"用户登录\",\n    \"controls\": [\n      {\n        \"type\": \"text\",\n        \"name\": \"username\",\n        \"label\": \"用户名\"\n      }\n    ]\n  }\n}\n
\n

那么,amis 是如何将 JSON 转成组件的呢?直接根据节点的 type 去跟组件一一对应?似乎很可能会重名比如在表格里面展示的类型 text 跟表单里面的 text是完全不一样的,一个负责展示,一个却负责输入。所以说一个节点要被什么组件渲染,还需要携带上下文(context)信息。

\n

如何去携带上下文(context)信息?amis 中直接是用节点的路径(path)来作为上下文信息。从上面的例子来看,一共有三个节点,path 信息分别是。

\n\n

根据 path 的信息就能很容易注册组件跟节点对应了。

\n

Page 组件的示例代码

\n
@Renderer({\n    test: /^page$/,\n    // ... 其他信息隐藏了\n})\nexport class PageRenderer extends React.Component {\n    // ... 其他信息隐藏了\n    render() {\n        const {\n            title,\n            body,\n            render // 用来渲染孩子节点,如果当前是叶子节点则可以忽略。\n        } = this.props;\n        return (\n            <div className=\"page\">\n                <h1>{title}</h1>\n                <div className=\"body-container\">\n                    {render('body', body)/*渲染孩子节点*/}\n                </div>\n            </div>\n        );\n    }\n}\n
\n

Form 组件的示例代码

\n
@Renderer({\n    test: /(^|\\/)form$/,\n    // ... 其他信息隐藏了\n})\nexport class FormRenderer extends React.Component {\n    // ... 其他信息隐藏了\n    render() {\n        const {\n            title,\n            controls,\n            render // 用来渲染孩子节点,如果当前是叶子节点则可以忽略。\n        } = this.props;\n        return (\n            <form className=\"form\">\n                {controls.map((control, index) => (\n                    <div className=\"form-item\" key={index}>\n                        {render(`${index}/control`, control)}\n                    </div>\n                ))}\n            </form>\n        );\n    }\n}\n
\n

Text 组件的示例代码

\n
@Renderer({\n    test: /(^|\\/)form(?:\\/\\d+)?\\/control(?\\/\\d+)?\\/text$/\n    // ... 其他信息隐藏了\n})\nexport class FormItemTextRenderer extends React.Component {\n    // ... 其他信息隐藏了\n    render() {\n        const {\n            label,\n            name,\n            onChange\n        } = this.props;\n        return (\n            <div className=\"form-group\">\n                <label>{label}<label>\n                <input type=\"text\" onChange={(e) => onChange(e.currentTarget.value)} />\n            </div>\n        );\n    }\n}\n
\n

那么渲染过程就是根据节点 path 信息,跟组件池中的组件 test (检测) 信息做匹配,如果命中,则把当前节点转给对应组件渲染,节点中其他属性将作为目标组件的 props。需要注意的是,如果是容器组件,比如以上例子中的 page 组件,从 props 中拿到的 body 是一个子节点,由于节点类型是不固定,由使用者决定,所以不能直接完成渲染,所以交给属性中下发的 render 方法去完成渲染,{render('body', body)},他的工作就是拿子节点的 path 信息去组件池里面找到对应的渲染器,然后交给对应组件去完成渲染。

\n

自定义组件

如果 amis 中组件不能满足你的需求,同时你又会 React 组件开发,那么就自己定制一个吧。

\n

先来看个简单的例子

\n
import * as React from 'react';\nimport {\n    Renderer\n} from 'amis';\n\n@Renderer({\n    test: /(^|\\/)my\\-renderer$/,\n})\nclass CustomRenderer extends React.Component {\n    render() {\n        const  {tip} = this.props;\n        return (\n            <div>这是自定义组件:{tip}</div>\n        );\n    }\n}\n
\n

有了以上这段代码后,就可以这样使用了。

\n
{\n    \"type\": \"page\",\n    \"title\": \"自定义组件示例\",\n    \"body\": {\n        \"type\": \"my-renderer\",\n        \"tip\": \"简单示例\"\n    }\n}\n
\n

如果你看了amis工作原理应该不难理解,这里注册一个 React 组件,当节点的 path 信息是 my-renderer 结尾时,交给当前组件来完成渲染。\n如果你只写叶子节点的渲染器,已经可以不用看了,如果你的渲染器中有容器需要可以放置其他节点,那么接着看以下这段代码。

\n
import * as React from 'react';\nimport {\n    Renderer\n} from 'amis';\n\n@Renderer({\n    test: /(^|\\/)my\\-renderer2$/,\n})\nclass CustomRenderer extends React.Component {\n    render() {\n        const  {\n            tip,\n            body,\n            render\n        } = this.props;\n        return (\n            <div>\n                <p>这是自定义组件:{tip}</p>\n                {body ? (\n                    <div className=\"container\">\n                        {render('body', body, {\n                            // 这里的信息会作为 props 传递给子组件,一般情况下都不需要这个\n                        })}\n                    </div>\n                ) : null}\n            </div>\n        );\n    }\n}\n
\n

有了以上这段代码后,就可以这样使用了。

\n
{\n    \"type\": \"page\",\n    \"title\": \"自定义组件示例\",\n    \"body\": {\n        \"type\": \"my-renderer2\",\n        \"tip\": \"简单示例\",\n        \"body\": {\n            \"type\": \"form\",\n            \"controls\": [\n                {\n                    \"type\": \"text\",\n                    \"label\": \"用户名\",\n                    \"name\": \"usename\"\n                }\n            ]\n        }\n    }\n}\n
\n

跟第一个列子不同的地方是,这里多了个 render 方法,这个方法就是专门用来渲染子节点的。来看下参数说明:

\n\n

以上是普通渲染器的注册方式,如果是表单项,为了更简单的扩充,请使用 FormItem 注解,而不是 Renderer。 原因是如果用 FormItem 是不用关心:label怎么摆,表单验证器怎么实现,如何适配表单的3中展现方式(水平、上下和内联模式),而只用关心:有了值后如何回显,响应用户交互设置新值。

\n
import * as React from 'react';\nimport {\n    FormItem\n} from 'amis';\n\n@FormItem({\n    type: 'custom'\n})\nclass MyFormItem extends React.Component {\n    render() {\n        const {\n            value,\n            onChange\n        } = this.props;\n\n        return (\n            <div>\n                <p>这个是个自定义组件</p>\n                <p>当前值:{value}</p>\n                <a className=\"btn btn-default\" onClick={() => onChange(Math.round(Math.random() * 10000))}>随机修改</a>\n            </div>\n        );\n    }\n}\n
\n

有了以上这段代码后,就可以这样使用了。

\n
{\n    \"type\": \"page\",\n    \"title\": \"自定义组件示例\",\n    \"body\": {\n            \"type\": \"form\",\n            \"controls\": [\n                {\n                    \"type\": \"text\",\n                    \"label\": \"用户名\",\n                    \"name\": \"usename\"\n                },\n\n                {\n                    \"type\": \"custom\",\n                    \"label\": \"随机值\",\n                    \"name\": \"randon\"\n                }\n            ]\n        }\n}\n
\n
\n

注意: 使用 FormItem 默认是严格模式,即只有必要的属性变化才会重新渲染,有可能满足不了你的需求,如果忽略性能问题,可以传入 strictMode: false 来关闭。

\n
\n

以上的例子都是需要先注册组件,然后再使用的,如果你在自己项目中使用,还有更简单的用法,以下示例直接无需注册。

\n
{\n    \"type\": \"page\",\n    \"title\": \"自定义组件示例\",\n    \"body\": {\n            \"type\": \"form\",\n            \"controls\": [\n                {\n                    \"type\": \"text\",\n                    \"label\": \"用户名\",\n                    \"name\": \"usename\"\n                },\n\n                {\n                    \"name\": \"a\",\n                    \"children\": ({\n                        value,\n                        onChange\n                    }) => (\n                        <div>\n                            <p>这个是个自定义组件</p>\n                            <p>当前值:{value}</p>\n                            <a className=\"btn btn-default\" onClick={() => onChange(Math.round(Math.random() * 10000))}>随机修改</a>\n                        </div>\n                    )\n                }\n            ]\n        }\n}\n
\n

即:通过 children 传递一个React组件,这个示例是一个React Stateless Functional Component,也可以是传统的 React 组件。\n任何节点如果包含 children 这个属性,则都会把当前节点交给 children 来处理,跳过了从 amis 渲染器池子中选择渲染器的过程。

\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/docs/style.js b/gh-pages/docs/style.js index 3bf8185c5..972300f72 100644 --- a/gh-pages/docs/style.js +++ b/gh-pages/docs/style.js @@ -3,7 +3,7 @@ define('docs/style.md', function(require, exports, module) { module.exports = { "title": "样式表说明", "shortname": "style", - "html": "

AMis 中有大量的功能类 class 可以使用,即可以用在 schema 中,也可以用在自定义组件开发中,掌握这些 class, 几乎可以不用写样式。

\n

AMis 中的样式基于 BootStrap V3, 这里主要讲 Bootstrap 中没有涉及到的。

\n

图标

AMis 集成了 fontawesome,所以关于图标部分,请前往 fontawesome 查看。

\n

布局

水平布局可以考虑用 Bootstrap 的 Grids 或者用 hobxcol

\n
\n
Col A
\n
Col B
\n
Col C
\n
\n
<div class=\"hbox b-a\">\n    <div class=\"col wrapper-sm bg-success\">Col A</div>\n    <div class=\"col wrapper-sm bg-info\">Col B</div>\n    <div class=\"col wrapper-sm bg-danger\">Col C</div>\n</div>\n
\n

宽高

.w-1x { width: 1em; }\n.w-2x { width: 2em; }\n.w-3x { width: 3em; }\n.w-xxs { width: 60px; }\n.w-xs { width: 90px; }\n.w-sm { width: 150px; }\n.w { width: 200px; }\n.w-md { width: 240px; }\n.w-lg { width: 280px; }\n.w-xl { width: 320px; }\n.w-xxl { width: 360px; }\n.w-full { width: 100%; }\n.w-auto { width: auto; }\n.h-auto { height: auto; }\n.h-full { height: 100% !important; max-height: none !important; }\n
\n
\n
w-1x
\n
w-2x
\n
w-3x
\n
w-xxs
\n
w-xs
\n
w-sm
\n
w
\n
...
\n
\n
\n
w-md
\n
w-lg
\n
w-xl
\n
...
\n
\n
\n
w-xxl
\n
...
\n
\n
<div class=\"hbox b-a bg-primary\">\n    <div class=\"col wrapper-sm b-r w-1x\">w-1x</div>\n    <div class=\"col wrapper-sm b-r w-2x\">w-2x</div>\n    <div class=\"col wrapper-sm b-r w-3x\">w-3x</div>\n    <div class=\"col wrapper-sm b-r w-xxs\">w-xxs</div>\n    <div class=\"col wrapper-sm b-r w-xs\">w-xs</div>\n    <div class=\"col wrapper-sm b-r w-sm\">w-sm</div>\n    <div class=\"col wrapper-sm b-r w\">w</div>\n    <div class=\"col wrapper-sm  lter\">...</div>\n</div>\n<div class=\"hbox b-a bg-primary m-t\">\n    <div class=\"col wrapper-sm b-r w-md\">w-md</div>\n    <div class=\"col wrapper-sm b-r w-lg\">w-lg</div>\n    <div class=\"col wrapper-sm b-r w-xl\">w-xl</div>\n    <div class=\"col wrapper-sm lter\">...</div>\n</div>\n<div class=\"hbox b-a bg-primary m-t\">\n    <div class=\"col wrapper-sm b-r w-xxl\">w-xxl</div>\n    <div class=\"col wrapper-sm lter\">...</div>\n</div>\n
\n

外边距

.m-xxs { margin: 2px 4px }\n.m-xs { margin: 5px; }\n.m-sm { margin: 10px; }\n.m { margin: 15px; }\n.m-md { margin: 20px; }\n.m-lg { margin: 30px; }\n.m-xl { margin: 50px; }\n.m-n { margin: 0 !important }\n.m-l-none { margin-left: 0 !important }\n.m-l-xs { margin-left: 5px; }\n.m-l-sm { margin-left: 10px; }\n.m-l { margin-left: 15px }\n.m-l-md { margin-left: 20px; }\n.m-l-lg { margin-left: 30px; }\n.m-l-xl { margin-left: 40px; }\n.m-l-xxl { margin-left: 50px; }\n.m-l-n-xxs { margin-left: -1px }\n.m-l-n-xs { margin-left: -5px }\n.m-l-n-sm { margin-left: -10px }\n.m-l-n { margin-left: -15px }\n.m-l-n-md { margin-left: -20px }\n.m-l-n-lg { margin-left: -30px }\n.m-l-n-xl { margin-left: -40px }\n.m-l-n-xxl { margin-left: -50px }\n.m-t-none { margin-top: 0 !important }\n.m-t-xxs { margin-top: 1px; }\n.m-t-xs { margin-top: 5px; }\n.m-t-sm { margin-top: 10px; }\n.m-t { margin-top: 15px }\n.m-t-md { margin-top: 20px; }\n.m-t-lg { margin-top: 30px; }\n.m-t-xl { margin-top: 40px; }\n.m-t-xxl { margin-top: 50px; }\n.m-t-n-xxs { margin-top: -1px }\n.m-t-n-xs { margin-top: -5px }\n.m-t-n-sm { margin-top: -10px }\n.m-t-n { margin-top: -15px }\n.m-t-n-md { margin-top: -20px }\n.m-t-n-lg { margin-top: -30px }\n.m-t-n-xl { margin-top: -40px }\n.m-t-n-xxl { margin-top: -50px }\n.m-r-none { margin-right: 0 !important }\n.m-r-xxs { margin-right: 1px }\n.m-r-xs { margin-right: 5px }\n.m-r-sm { margin-right: 10px }\n.m-r { margin-right: 15px }\n.m-r-md { margin-right: 20px }\n.m-r-lg { margin-right: 30px }\n.m-r-xl { margin-right: 40px }\n.m-r-xxl { margin-right: 50px }\n.m-r-n-xxs { margin-right: -1px }\n.m-r-n-xs { margin-right: -5px }\n.m-r-n-sm { margin-right: -10px }\n.m-r-n { margin-right: -15px }\n.m-r-n-md { margin-right: -20px }\n.m-r-n-lg { margin-right: -30px }\n.m-r-n-xl { margin-right: -40px }\n.m-r-n-xxl { margin-right: -50px }\n.m-b-none { margin-bottom: 0 !important }\n.m-b-xxs { margin-bottom: 1px; }\n.m-b-xs { margin-bottom: 5px; }\n.m-b-sm { margin-bottom: 10px; }\n.m-b { margin-bottom: 15px; }\n.m-b-md { margin-bottom: 20px; }\n.m-b-lg { margin-bottom: 30px; }\n.m-b-xl { margin-bottom: 40px; }\n.m-b-xxl { margin-bottom: 50px; }\n.m-b-n-xxs { margin-bottom: -1px }\n.m-b-n-xs { margin-bottom: -5px }\n.m-b-n-sm { margin-bottom: -10px }\n.m-b-n { margin-bottom: -15px }\n.m-b-n-md { margin-bottom: -20px }\n.m-b-n-lg { margin-bottom: -30px }\n.m-b-n-xl { margin-bottom: -40px }\n.m-b-n-xxl { margin-bottom: -50px }\n
\n

内边距

.wrapper-xs { padding: 5px; }\n.wrapper-sm { padding: 10px; }\n.wrapper { padding: 15px; }\n.wrapper-md { padding: 20px; }\n.wrapper-lg { padding: 30px; }\n.wrapper-xl { padding: 50px; }\n.padder-xs { padding-left: 5px; padding-right: 5px }\n.padder-sm { padding-left: 10px; padding-right: 10px }\n.padder-lg { padding-left: 30px; padding-right: 30px }\n.padder-md { padding-left: 20px; padding-right: 20px }\n.padder { padding-left: 15px; padding-right: 15px }\n.padder-v-xs { padding-top: 5px; padding-bottom: 5px }\n.padder-v-sm { padding-top: 10px; padding-bottom: 10px }\n.padder-v-lg { padding-top: 30px; padding-bottom: 30px }\n.padder-v-md { padding-top: 20px; padding-bottom: 20px }\n.padder-v { padding-top: 15px; padding-bottom: 15px }\n.no-padder { padding: 0 !important; }\n.pull-in { margin-left: -15px; margin-right: -15px; }\n.pull-out { margin: -10px -15px; }\n
\n

边框

.b { border: 1px solid rgba(0, 0, 0, 0.05) }\n.b-a { border: 1px solid @border-color }\n.b-t { border-top: 1px solid @border-color }\n.b-r { border-right: 1px solid @border-color }\n.b-b { border-bottom: 1px solid @border-color }\n.b-l { border-left: 1px solid @border-color }\n.b-light { border-color: @brand-light }\n.b-dark { border-color: @brand-dark }\n.b-black { border-color: @brand-dark }\n.b-primary { border-color: @brand-primary }\n.b-success { border-color: @brand-success }\n.b-info { border-color: @brand-info }\n.b-warning { border-color: @brand-warning }\n.b-danger { border-color: @brand-danger }\n.b-white { border-color: #fff }\n.b-dashed { border-style: dashed !important; }\n.b-l-light { border-left-color: @brand-light }\n.b-l-dark { border-left-color: @brand-dark }\n.b-l-black { border-left-color: @brand-dark }\n.b-l-primary { border-left-color: @brand-primary }\n.b-l-success { border-left-color: @brand-success }\n.b-l-info { border-left-color: @brand-info }\n.b-l-warning { border-left-color: @brand-warning }\n.b-l-danger { border-left-color: @brand-danger }\n.b-l-white { border-left-color: #fff }\n.b-l-2x { border-left-width: 2px }\n.b-l-3x { border-left-width: 3px }\n.b-l-4x { border-left-width: 4px }\n.b-l-5x { border-left-width: 5px }\n.b-2x { border-width: 2px }\n.b-3x { border-width: 3px }\n.b-4x { border-width: 4px }\n.b-5x { border-width: 5px }\n
\n

圆角

.r { border-radius: @border-radius-base @border-radius-base @border-radius-base @border-radius-base; }\n.r-2x { border-radius: @border-radius-base * 2; }\n.r-3x { border-radius: @border-radius-base * 3; }\n.r-l { border-radius: @border-radius-base 0 0 @border-radius-base; }\n.r-r { border-radius: 0 @border-radius-base @border-radius-base 0; }\n.r-t { border-radius: @border-radius-base @border-radius-base 0 0; }\n.r-b { border-radius: 0 0 @border-radius-base @border-radius-base; }\n
\n

字体相关

.font-normal { font-weight: normal; }\n.font-thin { font-weight: 300; }\n.font-bold { font-weight: 700; }\n.text-3x { font-size: 3em; }\n.text-2x { font-size: 2em; }\n.text-lg { font-size: @font-size-lg; }\n.text-md { font-size: @font-size-md; }\n.text-base { font-size: @font-size-base; }\n.text-sm { font-size: @font-size-sm; }\n.text-xs { font-size: @font-size-xs; }\n.text-xxs { text-indent: -9999px }\n.text-ellipsis { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.text-u-c { text-transform: uppercase; }\n.text-l-t { text-decoration: line-through; }\n.text-u-l { text-decoration: underline; }\n
\n

定位

.pos-rlt { position: relative; }\n.pos-stc { position: static !important; }\n.pos-abt { position: absolute; }\n.pos-fix { position: fixed; }\n
\n

背景

\n
bg-white
\n
bg-dark
\n
bg-info
\n
bg-sucess
\n
bg-warning
\n
bg-danger
\n
bg-primary
\n
\n
<div class=\"hbox b-a bg-light\">\n    <div class=\"col wrapper-sm b-r bg-white\">bg-white</div>\n    <div class=\"col wrapper-sm b-r bg-dark\">bg-dark</div>\n    <div class=\"col wrapper-sm b-r bg-info\">bg-info</div>\n    <div class=\"col wrapper-sm b-r bg-success\">bg-sucess</div>\n    <div class=\"col wrapper-sm b-r bg-warning\">bg-warning</div>\n    <div class=\"col wrapper-sm b-r bg-danger\">bg-danger</div>\n    <div class=\"col wrapper-sm bg-primary\">bg-primary</div>\n</div>\n
\n

其他

.show { visibility: visible; }\n.line { *width: 100%; height: 2px; margin: 10px 0; font-size: 0; overflow: hidden; background-color: transparent; border-width: 0; border-top: 1px solid @border-color; }\n.line-xs { margin: 0 }\n.line-lg { margin-top: 15px; margin-bottom: 15px }\n.line-dashed { border-style: dashed; background: transparent; }\n.no-line { border-width: 0 }\n.no-border, .no-borders { border-color: transparent; border-width: 0 }\n.no-radius { border-radius: 0 }\n.block { display: block; }\n.block.hide { display: none; }\n.inline { display: inline-block !important; }\n.none { display: none; }\n.pull-none { float: none; }\n.rounded { border-radius: 500px; }\n.clear { display: block; overflow: hidden; }\n.no-bg { background-color: transparent; color: inherit; }\n.no-select { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }\n
\n", + "html": "

amis 中有大量的功能类 class 可以使用,即可以用在 schema 中,也可以用在自定义组件开发中,掌握这些 class, 几乎可以不用写样式。

\n

amis 中的样式基于 BootStrap V3, 这里主要讲 Bootstrap 中没有涉及到的。

\n

图标

amis 集成了 fontawesome,所以关于图标部分,请前往 fontawesome 查看。

\n

布局

水平布局可以考虑用 Bootstrap 的 Grids 或者用 hobxcol

\n
\n
Col A
\n
Col B
\n
Col C
\n
\n
<div class=\"hbox b-a\">\n    <div class=\"col wrapper-sm bg-success\">Col A</div>\n    <div class=\"col wrapper-sm bg-info\">Col B</div>\n    <div class=\"col wrapper-sm bg-danger\">Col C</div>\n</div>\n
\n

宽高

.w-1x { width: 1em; }\n.w-2x { width: 2em; }\n.w-3x { width: 3em; }\n.w-xxs { width: 60px; }\n.w-xs { width: 90px; }\n.w-sm { width: 150px; }\n.w { width: 200px; }\n.w-md { width: 240px; }\n.w-lg { width: 280px; }\n.w-xl { width: 320px; }\n.w-xxl { width: 360px; }\n.w-full { width: 100%; }\n.w-auto { width: auto; }\n.h-auto { height: auto; }\n.h-full { height: 100% !important; max-height: none !important; }\n
\n
\n
w-1x
\n
w-2x
\n
w-3x
\n
w-xxs
\n
w-xs
\n
w-sm
\n
w
\n
...
\n
\n
\n
w-md
\n
w-lg
\n
w-xl
\n
...
\n
\n
\n
w-xxl
\n
...
\n
\n
<div class=\"hbox b-a bg-primary\">\n    <div class=\"col wrapper-sm b-r w-1x\">w-1x</div>\n    <div class=\"col wrapper-sm b-r w-2x\">w-2x</div>\n    <div class=\"col wrapper-sm b-r w-3x\">w-3x</div>\n    <div class=\"col wrapper-sm b-r w-xxs\">w-xxs</div>\n    <div class=\"col wrapper-sm b-r w-xs\">w-xs</div>\n    <div class=\"col wrapper-sm b-r w-sm\">w-sm</div>\n    <div class=\"col wrapper-sm b-r w\">w</div>\n    <div class=\"col wrapper-sm  lter\">...</div>\n</div>\n<div class=\"hbox b-a bg-primary m-t\">\n    <div class=\"col wrapper-sm b-r w-md\">w-md</div>\n    <div class=\"col wrapper-sm b-r w-lg\">w-lg</div>\n    <div class=\"col wrapper-sm b-r w-xl\">w-xl</div>\n    <div class=\"col wrapper-sm lter\">...</div>\n</div>\n<div class=\"hbox b-a bg-primary m-t\">\n    <div class=\"col wrapper-sm b-r w-xxl\">w-xxl</div>\n    <div class=\"col wrapper-sm lter\">...</div>\n</div>\n
\n

外边距

.m-xxs { margin: 2px 4px }\n.m-xs { margin: 5px; }\n.m-sm { margin: 10px; }\n.m { margin: 15px; }\n.m-md { margin: 20px; }\n.m-lg { margin: 30px; }\n.m-xl { margin: 50px; }\n.m-n { margin: 0 !important }\n.m-l-none { margin-left: 0 !important }\n.m-l-xs { margin-left: 5px; }\n.m-l-sm { margin-left: 10px; }\n.m-l { margin-left: 15px }\n.m-l-md { margin-left: 20px; }\n.m-l-lg { margin-left: 30px; }\n.m-l-xl { margin-left: 40px; }\n.m-l-xxl { margin-left: 50px; }\n.m-l-n-xxs { margin-left: -1px }\n.m-l-n-xs { margin-left: -5px }\n.m-l-n-sm { margin-left: -10px }\n.m-l-n { margin-left: -15px }\n.m-l-n-md { margin-left: -20px }\n.m-l-n-lg { margin-left: -30px }\n.m-l-n-xl { margin-left: -40px }\n.m-l-n-xxl { margin-left: -50px }\n.m-t-none { margin-top: 0 !important }\n.m-t-xxs { margin-top: 1px; }\n.m-t-xs { margin-top: 5px; }\n.m-t-sm { margin-top: 10px; }\n.m-t { margin-top: 15px }\n.m-t-md { margin-top: 20px; }\n.m-t-lg { margin-top: 30px; }\n.m-t-xl { margin-top: 40px; }\n.m-t-xxl { margin-top: 50px; }\n.m-t-n-xxs { margin-top: -1px }\n.m-t-n-xs { margin-top: -5px }\n.m-t-n-sm { margin-top: -10px }\n.m-t-n { margin-top: -15px }\n.m-t-n-md { margin-top: -20px }\n.m-t-n-lg { margin-top: -30px }\n.m-t-n-xl { margin-top: -40px }\n.m-t-n-xxl { margin-top: -50px }\n.m-r-none { margin-right: 0 !important }\n.m-r-xxs { margin-right: 1px }\n.m-r-xs { margin-right: 5px }\n.m-r-sm { margin-right: 10px }\n.m-r { margin-right: 15px }\n.m-r-md { margin-right: 20px }\n.m-r-lg { margin-right: 30px }\n.m-r-xl { margin-right: 40px }\n.m-r-xxl { margin-right: 50px }\n.m-r-n-xxs { margin-right: -1px }\n.m-r-n-xs { margin-right: -5px }\n.m-r-n-sm { margin-right: -10px }\n.m-r-n { margin-right: -15px }\n.m-r-n-md { margin-right: -20px }\n.m-r-n-lg { margin-right: -30px }\n.m-r-n-xl { margin-right: -40px }\n.m-r-n-xxl { margin-right: -50px }\n.m-b-none { margin-bottom: 0 !important }\n.m-b-xxs { margin-bottom: 1px; }\n.m-b-xs { margin-bottom: 5px; }\n.m-b-sm { margin-bottom: 10px; }\n.m-b { margin-bottom: 15px; }\n.m-b-md { margin-bottom: 20px; }\n.m-b-lg { margin-bottom: 30px; }\n.m-b-xl { margin-bottom: 40px; }\n.m-b-xxl { margin-bottom: 50px; }\n.m-b-n-xxs { margin-bottom: -1px }\n.m-b-n-xs { margin-bottom: -5px }\n.m-b-n-sm { margin-bottom: -10px }\n.m-b-n { margin-bottom: -15px }\n.m-b-n-md { margin-bottom: -20px }\n.m-b-n-lg { margin-bottom: -30px }\n.m-b-n-xl { margin-bottom: -40px }\n.m-b-n-xxl { margin-bottom: -50px }\n
\n

内边距

.wrapper-xs { padding: 5px; }\n.wrapper-sm { padding: 10px; }\n.wrapper { padding: 15px; }\n.wrapper-md { padding: 20px; }\n.wrapper-lg { padding: 30px; }\n.wrapper-xl { padding: 50px; }\n.padder-xs { padding-left: 5px; padding-right: 5px }\n.padder-sm { padding-left: 10px; padding-right: 10px }\n.padder-lg { padding-left: 30px; padding-right: 30px }\n.padder-md { padding-left: 20px; padding-right: 20px }\n.padder { padding-left: 15px; padding-right: 15px }\n.padder-v-xs { padding-top: 5px; padding-bottom: 5px }\n.padder-v-sm { padding-top: 10px; padding-bottom: 10px }\n.padder-v-lg { padding-top: 30px; padding-bottom: 30px }\n.padder-v-md { padding-top: 20px; padding-bottom: 20px }\n.padder-v { padding-top: 15px; padding-bottom: 15px }\n.no-padder { padding: 0 !important; }\n.pull-in { margin-left: -15px; margin-right: -15px; }\n.pull-out { margin: -10px -15px; }\n
\n

边框

.b { border: 1px solid rgba(0, 0, 0, 0.05) }\n.b-a { border: 1px solid @border-color }\n.b-t { border-top: 1px solid @border-color }\n.b-r { border-right: 1px solid @border-color }\n.b-b { border-bottom: 1px solid @border-color }\n.b-l { border-left: 1px solid @border-color }\n.b-light { border-color: @brand-light }\n.b-dark { border-color: @brand-dark }\n.b-black { border-color: @brand-dark }\n.b-primary { border-color: @brand-primary }\n.b-success { border-color: @brand-success }\n.b-info { border-color: @brand-info }\n.b-warning { border-color: @brand-warning }\n.b-danger { border-color: @brand-danger }\n.b-white { border-color: #fff }\n.b-dashed { border-style: dashed !important; }\n.b-l-light { border-left-color: @brand-light }\n.b-l-dark { border-left-color: @brand-dark }\n.b-l-black { border-left-color: @brand-dark }\n.b-l-primary { border-left-color: @brand-primary }\n.b-l-success { border-left-color: @brand-success }\n.b-l-info { border-left-color: @brand-info }\n.b-l-warning { border-left-color: @brand-warning }\n.b-l-danger { border-left-color: @brand-danger }\n.b-l-white { border-left-color: #fff }\n.b-l-2x { border-left-width: 2px }\n.b-l-3x { border-left-width: 3px }\n.b-l-4x { border-left-width: 4px }\n.b-l-5x { border-left-width: 5px }\n.b-2x { border-width: 2px }\n.b-3x { border-width: 3px }\n.b-4x { border-width: 4px }\n.b-5x { border-width: 5px }\n
\n

圆角

.r { border-radius: @border-radius-base @border-radius-base @border-radius-base @border-radius-base; }\n.r-2x { border-radius: @border-radius-base * 2; }\n.r-3x { border-radius: @border-radius-base * 3; }\n.r-l { border-radius: @border-radius-base 0 0 @border-radius-base; }\n.r-r { border-radius: 0 @border-radius-base @border-radius-base 0; }\n.r-t { border-radius: @border-radius-base @border-radius-base 0 0; }\n.r-b { border-radius: 0 0 @border-radius-base @border-radius-base; }\n
\n

字体相关

.font-normal { font-weight: normal; }\n.font-thin { font-weight: 300; }\n.font-bold { font-weight: 700; }\n.text-3x { font-size: 3em; }\n.text-2x { font-size: 2em; }\n.text-lg { font-size: @font-size-lg; }\n.text-md { font-size: @font-size-md; }\n.text-base { font-size: @font-size-base; }\n.text-sm { font-size: @font-size-sm; }\n.text-xs { font-size: @font-size-xs; }\n.text-xxs { text-indent: -9999px }\n.text-ellipsis { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.text-u-c { text-transform: uppercase; }\n.text-l-t { text-decoration: line-through; }\n.text-u-l { text-decoration: underline; }\n
\n

定位

.pos-rlt { position: relative; }\n.pos-stc { position: static !important; }\n.pos-abt { position: absolute; }\n.pos-fix { position: fixed; }\n
\n

背景

\n
bg-white
\n
bg-dark
\n
bg-info
\n
bg-sucess
\n
bg-warning
\n
bg-danger
\n
bg-primary
\n
\n
<div class=\"hbox b-a bg-light\">\n    <div class=\"col wrapper-sm b-r bg-white\">bg-white</div>\n    <div class=\"col wrapper-sm b-r bg-dark\">bg-dark</div>\n    <div class=\"col wrapper-sm b-r bg-info\">bg-info</div>\n    <div class=\"col wrapper-sm b-r bg-success\">bg-sucess</div>\n    <div class=\"col wrapper-sm b-r bg-warning\">bg-warning</div>\n    <div class=\"col wrapper-sm b-r bg-danger\">bg-danger</div>\n    <div class=\"col wrapper-sm bg-primary\">bg-primary</div>\n</div>\n
\n

其他

.show { visibility: visible; }\n.line { *width: 100%; height: 2px; margin: 10px 0; font-size: 0; overflow: hidden; background-color: transparent; border-width: 0; border-top: 1px solid @border-color; }\n.line-xs { margin: 0 }\n.line-lg { margin-top: 15px; margin-bottom: 15px }\n.line-dashed { border-style: dashed; background: transparent; }\n.no-line { border-width: 0 }\n.no-border, .no-borders { border-color: transparent; border-width: 0 }\n.no-radius { border-radius: 0 }\n.block { display: block; }\n.block.hide { display: none; }\n.inline { display: inline-block !important; }\n.none { display: none; }\n.pull-none { float: none; }\n.rounded { border-radius: 500px; }\n.clear { display: block; overflow: hidden; }\n.no-bg { background-color: transparent; color: inherit; }\n.no-select { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }\n
\n", "toc": { "label": "目录", "type": "toc", diff --git a/gh-pages/index.html b/gh-pages/index.html index 0a5156462..b88e7e816 100644 --- a/gh-pages/index.html +++ b/gh-pages/index.html @@ -22,7 +22,7 @@
- +