🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## [万能表单](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)