实现一个表单设计器我们需要知道的

简介: 表单功能一直是前端项目中比不可少的一块功能,如果有个项目需要在两个月内开发200个左右表单,那我们应该怎么办?加班加点也是能搞出来的,那质量有保证么,这是我们就需要开发一个可以通过可视化交互设计表单的功能。下面和大家分享下我在开发这款表单设计器时使用的技术能力以及整个的设计思路。

前言


表单功能一直是前端项目中比不可少的一块功能,如果有个项目需要在两个月内开发200个左右表单,那我们应该怎么办?加班加点也是能搞出来的,那质量有保证么,这是我们就需要开发一个可以通过可视化交互设计表单的功能。下面和大家分享下我在开发这款表单设计器时使用的技术能力以及整个的设计思路。

技术能力分析

  • 前端能力:基础框架搭建 组件拖拽能力
  • 后台能力:基础接口服务 数据库设计

基础设计


交互设计

在交互设计上参考FormMaking,有兴趣的同学可以点进去看看,左侧区域是控件,中间是拖拽区域,右侧是属性设置区域。

控件区域

  • 基础控件:表单中常用一些控件如:输入框 下拉框 开关 时间选择器 ...
  • 高级控件:封装些常用的组合控件
  • 布局控件:栅格布局可分多行的

拖拽区域

  • 基础控件顺序调整
  • 字表单内部组件顺序调整

属性区域

控件属性

  • 基础属性配置:标题 初期值 字段值 placeholder等一些控件的通用属性
  • 数据属性配置:数据的来源配置,静态的/动态的 静态的手动输入数据的来源值(下拉表里的值) 动态的填入请求的url请求的方法请求的参数,请求header
  • 校验属性配置:表单项的正则校验和一些非法字符的限制
  • 其他属性配置:一些显示的处理 提交的处理等等

表单属性

  • 基础属性配置:整个表单的名称 表单的校验地址
  • 其他属性配置:

数据处理设计

通用规则设计

  • 接口个交互规则
# GET接口
/api/v1/test
# 请求参数
params{param1:"",param2:""}
# 请求头部
headers:[{key:"",value:""}]
# 返回值
{
  code:200,
  data:{} || []
}
# PUT接口
/api/v1/test
# 请求参数
params:[{filed:"",value:""}]
# 请求头部
headers:[{key:"",value:""}]
# 返回值
{
  code:200,
  data:{} || []
}
  • 数据请求规则1(ur参数多个条件):?多个以&符号分隔
/path/test?key=_field1&key2=_field2
  • 数据请求规则2(url参数获取):key=self(self表示当前表单项的值)key=_fieldname(_fieldname表示其他表单项或者user对象里的值)key=external_888(external_value表示取静态值value)
/path/test?search=self&status=_field2&name=external_test

注:将这块的规则处理封装成个公共方法处理请求url可以命名为parseRequestParams

输入:/path/test?search=self&status=_field2&name=external_test
输出:/path/test?search=自己的值&status=表单中status的值&name=test
  • 数据请求规则3(body参数):field表示表单的field value表示值(如果没有定义则取表单定义的值,如果定义了则不用取)
[    {    field:"",    value:""    }]

注:将这块的规则处理封装成个公共方法处理body可以命名为parseRequestBodyData

输入:[        {          field:"id",          value:"001"        },        {          field:"demo",          value:""        },    ]
输出:[        {          field:"id",          value:"001"(设置则取默认值)        },        {          field:"demo",          value:"从表单中取demo值"        },    ]
  • 自动填充规则1:填充多个以||分隔
fieldname1||fieldname2

注:将这块的填充规则的处理封装成个公共方法

  • 条件判断规则1:判断符,==表示等于  !=表示不等于
key==value key!=value
  • 条件判断规则2:多个条件时,||符号表示或者 &&表示并且
key1==2&&key2==3||key3!=4

注:将这块的规则处理封装成个公共方法

  • 文本显示规则1: item.key表达式来自定义显示条件(为了解决复杂的显示逻辑)
item.lable+'-'+item.value+'/n'

数据获取设计

/demo/list?id=self&name=_name&_external
  • 下拉列表数据(静态):可以配置静态数据
  • 下拉列表数据(动态):可配置接口地址 参数字段
  • 动态查询数据(内部):可配置接口地址 参数字段
  • 动态查询数据(第三方):可配置接口地址 参数字段

是否显示/只读/必须规则处理

  • 规则1(多个条件):||符号表示或者 &&表示并且
  • 规则2(判断符):==表示等于  !=表示不等于

校验规则处理

  • 正则校验
  • 非法字符
  • 错误描述

自动填充规则

key1||key2||key3
  • 查询自动填充:通过输入的值查询后填充(onblur事件处理)
  • 下拉选择后自动填充:通过选择后的值填充(onblur后查询onselect后填入)
  • 静态下拉列表下拉选择后通过选择地值查询后自动填充(onselect后查询)

架构设计


前端组件设计

前端组件分为以下三个模块,表单设计模块(设计表单),表单展示模块(提交表单),表单详情模块(查看提交后的表单)

表单设计模块

  • 控件展示组件
  • 拖拽编排组件
  • 属性编辑组件

表单展示模块

  • 表单整体渲染组件
  • 单个表单项渲染组件(最为复杂的部分)
  • 规则解析方法封装
  • 动态数据获取封装
  • 数据获取后统一处理封装

表单详情模块

  • 表单头部信息组件
  • 基础信息组件
  • 其他信息组件:

后台schema设计

表单schema

表单的schema设计必须考虑到表单的通用性,根据一个正常的表单需求我们可以把表单划分为两部分:

  • 表单的整体属性:表单名 表单提交(地址/header) 表单的附带属性(自定义的)
  • 单个表单项的属性:控件类型(输入框/下拉框...),控件数据来源,控件label,控件字段key,其他属性(预留)
  • 多个表单项的属性:单个表单项的组合
{
  field_name:"",
  label:"",
  type:"",
  property:{}

总结


一个前端团队随着逐渐的发展一些提高工作效率的能力必须慢慢的具备,可视化搭建就是这些能力之一。 没有接触这块时你也许会觉得很复杂,当你了解部分时你又会觉得不过如此,但是你真正在实际项目中深入的去使用你就会发现他的复杂之处。可视化搭建中的技术能力,我个人认为是没有难点,无论前端的拖拽,还是nodejs的数据存储,这些都不会成为我们难点。真正难的是结合我们自身的页面去设计我们搭建的交互以及存储的数据结构。所以说如果你是一个前端要想做好这块那么你必须要深入了解你们应用的领域,也就是你们项目的业务需求。


相关文章
|
3月前
|
缓存 前端开发 数据可视化
前端基础(七)_表单的基本组成与使用
本文详细介绍了HTML表单的基本组成和使用,包括`<form>`标签、`<input>`表单域、`<select>`下拉列表、`<textarea>`多行文本域等元素。文章解释了表单的提交方式(GET和POST)、表单域的各种类型(文本、密码、单选按钮、复选框等)、提交按钮和重置按钮的作用,以及如何通过`<label>`标签提高表单的可访问性。此外,还讨论了表单元素的属性,如`readonly`、`disabled`、`maxlength`等。
34 1
|
7月前
|
数据可视化 数据挖掘 API
5 款热门的表单设计器推荐
5 款热门的表单设计器推荐
|
前端开发 API 容器
关于我对表单设计的一点思考—自动化生成表单
关于我对表单设计的一点思考—自动化生成表单
178 0
|
SQL 前端开发 数据库
Yii2.0的模型表单、活动表单和AJAX表单是干什么的?底层原理是什么?
Yii2.0的模型表单、活动表单和AJAX表单是干什么的?底层原理是什么?
119 0
|
安全 数据安全/隐私保护 对象存储
表单的 9 种设计技巧【上】
表单是信息添加、录入的通用形式,合理的表单设计能减轻用户负担。这里码匠提供了一些表单设计的简单技巧。
739 0
表单的 9 种设计技巧【上】
|
前端开发 JavaScript 数据可视化
|
安全 数据库 数据安全/隐私保护
表单的 9 种设计技巧【下】
表单是信息添加、录入的通用形式,合理的表单设计能减轻用户负担。这里码匠提供的一些表单设计的简单技巧的下篇。
216 0
表单的 9 种设计技巧【下】
|
移动开发 前端开发 HTML5
前端表单部分新属性
前端表单部分新属性
100 0
|
前端开发 数据处理
前端表单数据那些事
前言:这段时间一直在搞to B方向中后台的项目,表单接触的频率会比较多,就突发奇想聊聊表单数据相关的一些基础分享
323 0
前端表单数据那些事
|
JSON 运维 JavaScript
《前端那些事》从0到1开发动态表单
前沿:中后台应用中表单需求颇多,左手一个表单,右手又是一个表单,无穷无尽,如果用模版一个个来写,不单写起来费时费力,而且看起来也是天花乱坠,于是这个时候你会去设想,那有没有什么方式可以去替换琐碎的手写表单模版的方式呢?让表单是“配出来”的,而不是撸出来的,让你轻松解决 form 表单,也不再为表单而烦恼。答案就是:动态表单
304 0
《前端那些事》从0到1开发动态表单