开需求会了,产品说这次需求的表单比较多,目前有18个,后期的表单可能会有增加、修改。我作为这次的前端开发,看到这样的需求,心里知道要这样搞不得把自己累死,首先表单居多,还会有变更,以后维护起来也让人心力憔悴。
于是我提议做动态表单,做一个表单的配置系统,在系统里配置表单类型、表单得字段、以及对表单得管理。后来重新评审了需求,系统部分由后端自行开发,我要处理的部分是动态生成表单,展现提交的表单,以及对表单的处理情况。
表单类型的接口就不用说了,这个比较简单。我跟后端约定了一个预备创建工单接口,这个接口是后端告知前端,需要生成一个什么样的表单。
预备创建表单接口(其中字段解释说明):
id
表单字段的idname
表单字段的名称(存数据库的字段名)type
表单字段的类型(select_item下拉列表、string单行文本、multiple多行文本、integer单行数字、images上传图片)title
表单字段的中文名(动态表单的字段名称)prompt_msg
表单字段的placeholder文案selectObj
type类型为select_item的时候,selectObj有值,默认为null{
"code": 0,
"msg": "success",
"data": {
"list": [{
"id": 10,
"name": "check_type",
"type": "select_item",
"title": "审核类型",
"prompt_msg": "请填写审核类型",
"selectObj": [{
"id": 1,
"item": "预审核"
}, {
"id": 2,
"item": "患者审核"
}],
"val": null,
"rank": 0
}, {
"id": 16,
"name": "bank_branch_info",
"type": "string",
"title": "支行信息",
"prompt_msg": "请填写支行信息",
"selectObj": null,
"val": null,
"rank": 0
}, {
"id": 19,
"name": "project_content",
"type": "multiple",
"title": "项目内容",
"prompt_msg": "请填写项目内容",
"selectObj": null,
"val": null,
"rank": 0
}, {
"id": 22,
"name": "project_extension_time",
"type": "integer",
"title": "项目延长时间",
"prompt_msg": "请填写项目延长时间",
"selectObj": null,
"val": null,
"rank": 0
}, {
"id": 24,
"name": "images",
"type": "images",
"title": "图片",
"prompt_msg": "请上传图片",
"selectObj": null,
"val": null,
"rank": 0
}]
}
}
现在预备创建表单接口文档都了,该怎么渲染动态表单呢?动态表单的元素类型有5类,按照这个类别创建五个元素组件。
1. 上传图片组件
上传图片组件这里使用了 Uploader
组件。
{{ item.title }}
2. 多行输入框组件
默认多行输入框为3行
{{ item.title }}