# ng-form-design 表单构建器
ng-form-design 表单绘制组件提供组件列表、绘制面板、属性面板三部分,将组件拖拽至绘制面板后,通过属性配置,最终得到一个动态表单json数据。
## 1、 基础用法
全局安装后直接通过ng-form-design使用:
```
<template>
<div>
<ng-form-design />
</div>
</template>
<script>
export default {
}
</script>
```
![基础用法](https://img.kancloud.cn/6b/90/6b900757cee978291b17ca22bfbbf6dd_2866x1559.png "基础用法.png")
## 2、 使用历史已配置好的表单模板
```
<template>
<div>
<ng-form-design ref="formDesign"/>
</div>
</template>
<script>
export default {
created(){
this.init()
},
methods: {
init() {
// 假设此处从后台获取数据
const remoteModel = this.getRemoteModel()
this.$nextTick(()=> {
// 赋值
this.$refs.formDesign.initModel(remoteModel)
})
},
// 获取远程数据
getRemoteModel() {
return ....
}
}
}
</script>
```
![使用历史已配置好的表单模板](https://img.kancloud.cn/eb/0b/eb0bba627b9d429cc8bf404a56cb680f_2852x1564.png "使用历史已配置好的表单模板.png")
## 3、 仅显示部分组件
基础组件仅显示 输入框和文本框,布局组件显示表格布局和栅格布局,装饰组件全部隐藏
```
<template>
<div>
<ng-form-design ref="formDesign" :basic-item="basicItem"
:layout-item="layoutItem" :decorate-item="false"/>
</div>
</template>
<script>
export default {
data() {
return{
basicItem: ['input' , 'textarea'],
layoutItem: ['table' , 'grid']
}
}
}
</script>
```
![仅显示部分组件](https://img.kancloud.cn/4c/e0/4ce03352e6f0872d1e20100cb9e7a040_2869x1562.png "仅显示部分组件.png")
## 4、 功能按钮组
默认按钮组中只打开preview,其他按钮全部不显示; 使用按钮插槽挂在一个按钮,名字叫做“初始化”
```
<template>
<div>
<ng-form-design ref="formDesign" :clear="false"
:preview="true" :imp="false" :exp="false" >
<template slot="controlButton">
<el-button type="text" size="medium" @click="init()">初始化</el-button>
</template>
</ng-form-design>
</div>
</template>
<script>
export default {
methods: {
init() {
console.log('初始化')
}
}
}
</script>
```
![功能按钮组](https://img.kancloud.cn/4b/5b/4b5b7116485c56e50bad62d44c1e0c6f_2880x1562.png "功能按钮组.png")
## 5、 config配置
表单对数据字典,axios后台请求均可以自定义配置,其中数据字典的配置为传递字段数据值,axios请求配置为配置函数。
### 5.1 axios请求
当checkbox、select、文件上传等组件需要和后台产生交互时,可以配置axios的header来达到后台鉴权等操作。
具体使用方法在config中增加httpConfig的配置,内部为一个函数,规格如下:
```
httpConfig: (config)=>{
// 此处可以通过本地方法拿到token等信息来放入请求头中
const token = 'xxxxx'
config.headers['token'] = token
return config
}
```
完整代码示例如下:
```
<template>
<div>
<ng-form-design ref="formDesign" :config="formConfig" >
</ng-form-design>
</div>
</template>
<script>
import { getTokenKey , getToken } from '@/utils/auth.js'
export default {
data() {
return {
formConfig: {
httpConfig: (config)=>{
const token = getToken()
const key = getTokenKey()
config.headers[key] = token
return config
}
}
}
}
}
</script>
```
### 5.2 数据字典
组件中对下拉框、单选框、多选框提供可选的数据字典配置,方便应用进行业务集成。其中数据字典需要配置进入动态表单中;数据格式参考:
```
[
{
type: 'sex' ,
label: '男' ,
value: '1'
},
{
type: 'sex' ,
label: '女' ,
value: '2'
},
......
]
```
完整代码示例如下:
```
<template>
<div>
<ng-form-design ref="formDesign" :config="formConfig" >
</ng-form-design>
</div>
</template>
<script>
export default {
data() {
return {
formConfig: {
// 数据字典配置
// 此处可先后台获取需要的字典后配置
dict: [
{type: 'sex' , label: '男' , value: '1'},
{type: 'sex' , label: '女' , value: '2'},
{type: 'yes_or_no' , label: '是' , value: '1'},
{type: 'yes_or_no' , label: '否' , value: '2'},
{type: 'nation' , label: '汉族' , value: '1'},
{type: 'nation' , label: '蒙古族' , value: '2'},
{type: 'nation' , label: '藏族' , value: '3'},
{type: 'nation' , label: '壮族' , value: '4'}
]
}
}
}
}
</script>
```
![数据字典](https://img.kancloud.cn/d3/27/d327f8c743b3c9771e1f1fab2b0b7ee6_2838x1558.png "数据字典.png")
## 6、 方法
| 方法名称 | 参数|返回值| 说明 |
|-----------|--------|-------|-------------------------|
| initModel | json | N/A | 初始化动态表单内容,参数为动态表单json模板|
| getModel| N/A| json | 返回当前正在编辑得动态表单信息|
## 7、 属性
| 属性名 | 说明 | 格式| 默认值 |
|-----------|------------------------------|--------|----------|
| customComponents | 自定义组件的配置,具体参加最下方自定义组件示例中的格式 | array | N/A |
| config|表单的一些基础配置,主要为http的一些参数,譬如在http请求中给header增加参数:config: { httpConfig: (config)=>{ config.headers['aaaa'] = 'bbbb' return config } }| object | N/A |
| clear| 是否显示面板上清除按钮 |boolean | true |
| preview| 是否显示面板上预览按钮 |boolean | true |
| imp| 是否显示面板上导入按钮 |boolean | true |
| exp| 是否显示面板上导出按钮 |boolean | true |
| basic-item| 基础组件是否要展示或待选组件列表集合 |boolean/Array | true |
| decorate-item| 个性化组件是否要展示或待选组件列表集合 |boolean/Array | true |
| layout-item| 布局组件是否要展示或待选组件列表集合 |boolean/Array | true |
| application-item| 应用组件是否要展示或待选组件列表集合 |boolean/Array | true |
## 8、 插槽
| 插槽名称 | 说明 |
|-----------|-------------------------|
| drag | 左侧组件面板插槽,可以在组件面板上面填充一个区域展示内容|
| form-name | 当前动态表单名称|
| control-button | 功能区按钮,如果需要自定义功能按钮可以在这里自定义 |