## [万能表单](https://uniwork.weiyoho.com/admin/flow/scheme?ref=addtabs)
UCToo为开发者提供了一套能够自动生成表单页面的实现方案。
开发者可以通过前台[uni-app表单组件](https://uniapp.dcloud.io/component/button?id=button)与后台[表单设计器 k-form-design](http://kcz66.gitee.io/k-form-design/#/README?id=%e8%a1%a8%e5%8d%95%e8%ae%be%e8%ae%a1%e5%99%a8-k-form-design)配置的数据对接,从而自动化生成表单页面。
## 配置说明
### 后台配置:
1. 详情请查看[表单设计器 k-form-design](http://kcz66.gitee.io/k-form-design/#/README?id=%e8%a1%a8%e5%8d%95%e8%ae%be%e8%ae%a1%e5%99%a8-k-form-design)
### 前台配置:
1. 首先我们需要一些表单组件
![](https://img.kancloud.cn/a3/b4/a3b46510deecfd3793f798d0c3f5a752_288x218.png)
2. 将我们的组件根据后台配置的数据类型动态加载
~~~
//work-form-item.vue
<template>
<view>
<!-- 标题 -->
<view v-if="item.type=='text'"
class="text f16 f900 mb40">{{item.label}}</view>
<!-- 输入框 -->
<view v-if="item.type=='input'||'textarea'||'number'">
<form-input :item="item"
v-model="value"></form-input>
</view>
<!-- 选择器 -->
<view v-if="item.type=='cascader'||'select'||'time'||'date'">
<form-select :item="item"
v-model="value"
@mapData="mapData"></form-select>
</view>
<!-- 选择框 -->
<view v-if="item.type=='radio'||'checkbox'">
<form-check :item="item"
v-model="value"></form-check>
</view>
<!-- 图片 -->
<view v-if="item.type=='uploadImg'"
v-show="!item.options.hidden">
<view class="title"
:class="item.rules[0].required?'isRequired':''">{{item.label}}</view>
<robby-image-upload v-model="img"
:limit="item.options.limit"
:header="header"
@delete="deleteImage"
@add="addImage"
:showUploadProgress="true"
:server-url="item.options.action"></robby-image-upload>
</view>
<!-- 开关 -->
<view v-if="item.type=='switch'">
<form-switch :item="item"
v-model="value"></form-switch>
</view>
<!-- 警告提示 -->
<view v-if="item.type=='alert'">
<form-alert :item="item"
v-model="value"></form-alert>
</view>
<!-- 分割线 -->
<view v-if="item.type=='divider'">
<form-divider :item="item"
v-model="value"></form-divider>
</view>
</view>
</template>
~~~
3. 再封装到通用表单组件内
~~~
//work-form.vue
<template>
<view>
<form @submit="formSubmit"
@reset="formReset"
ref="form">
<slot></slot>
<view v-for="(obj,key) in list"
:key="key">
<!-- 有外部包裹的 -->
<work-card v-if="obj.list">
<view v-for="(item,index) in obj.list"
:key="index"
:class="index!==0?'mt40':''">
<work-form-item @mapData="mapData"
v-model="item.options.defaultValue"
:name="item.model"
@upImage="upImage"
:item="item"></work-form-item>
<!-- 按钮 -->
<view v-if="item.type=='button'"
class="form-item mt60">
<button class="submit"
:formSubmit="item.options.handle"
:type="item.options.type"
:disabled="item.options.disabled"
:hidden="item.options.hidden">{{item.label}}</button>
</view>
</view>
</work-card>
<!-- 没有包裹的 -->
<view class="mb40"
v-if="!obj.list">
<work-form-item @mapData="mapData"
v-model="obj.options.defaultValue"
:name="obj.model"
@upImage="upImage"
:item="obj"></work-form-item>
<!-- 按钮 -->
<view v-if="obj.type=='button'"
class="form-item mt60">
<button class="submit"
:form-type="obj.options.handle"
:type="obj.options.type"
:disabled="obj.options.disabled"
:hidden="obj.options.hidden">{{obj.label}}</button>
</view>
</view>
</view>
</form>
</view>
</template>
~~~
**Tips**
* **平台差异说明**前台组件通过uni-app表单组件适用于uni-app所支持的平台。
## 使用说明
### 后台使用
1. 首先,让我们创建一个数据表
![](https://img.kancloud.cn/3f/1b/3f1b5f67d10809e9632395d7891e4371_1920x937.png)
![](https://img.kancloud.cn/8f/9c/8f9c443fec2fc9dd499556aa7cab8f67_1497x165.png)
2. 创建后进入数据表字段管理,为其添加数据
![](https://img.kancloud.cn/56/f8/56f853036a58255027b76c18b20d4c9c_1800x905.png)
![](https://img.kancloud.cn/7e/2b/7e2b34ec54e58a3edf23271cc728b7dc_1920x903.png)
3. 创建完成后发布表单
![](https://img.kancloud.cn/5a/81/5a810f33133e03f62ca83229e30fc33d_1638x277.png)
可以看到可视化表单操作,点进去
![](https://img.kancloud.cn/66/9e/669e03c3650fb8ab62a9844a5d6e4938_1643x708.png)
进入表单设计页面
![](https://img.kancloud.cn/3f/94/3f943c278fe1824833688f8b12bfe3a9_1920x903.png)
4. 设计表单页面(这里我直接导入json数据生成)
![](https://img.kancloud.cn/13/fa/13fabc027a30a2649d4bc66495c92c2a_1920x903.png)
可以看到已经生成了相应的页面
![](https://img.kancloud.cn/84/57/8457cb7fda8eab46fc4beeec57a0bcc1_1920x903.png)
### 前台使用
前台部分只需要引入封装好的form组件就能自动生成页面啦~
~~~
<template>
<view class='page-body'>
<!-- 自定义表单 -->
<work-form :name="name"
:form_id="form_id"
@submit="submit"></work-form>
</view>
</template>
~~~
![](https://img.kancloud.cn/0b/22/0b22c21d04bcf6d1eb624e5175a959a4_467x804.png)
## 参考资料:
[uni-app表单组件 https://uniapp.dcloud.io/component/button?id=button](https://uniapp.dcloud.io/component/button?id=button)
[表单设计器 k-form-design http://kcz66.gitee.io/k-form-design/#/README](http://kcz66.gitee.io/k-form-design/#/README?id=%e8%a1%a8%e5%8d%95%e8%ae%be%e8%ae%a1%e5%99%a8-k-form-design)