51CTO首页
AI.x社区
博客
学堂
精品班
直播训练营
企业培训
鸿蒙开发者社区
WOT技术大会
AIGC创新中国行
IT证书
公众号矩阵
移动端

Dooring可视化之从零实现动态表单设计器

开发 前端
之前笔者有写过一篇如何设计动态表单配置平台的文章,但是由于笔者电脑问题代码丢失,所以后期重新实现了一套表单设计器,并优化了之前的设计方式,特地做一下总结和复盘。

[[431676]]

前言

之前笔者有写过一篇如何设计动态表单配置平台的文章,但是由于笔者电脑问题代码丢失,所以后期重新实现了一套表单设计器,并优化了之前的设计方式,特地做一下总结和复盘。

你将收获

  • 动态表单开发的一般思路
  • 可视化领域中的表单引擎
  • 从零实现一款动态表单设计器
  • 利用H5-Dooring开发一款表单设计平台

正文

按照习惯,我们先看看表单设计器实现的效果展示:

上图中我们将表单设计器集成到了H5-Dooring中,使其可以实现拖拽生成表单。

其次我们可以根据右边的配置项,动态的添加某个表单组件或或者修改组件字段和数据源。在配置好表单之后我们还可以定制表单提交的api接口地址,以便实现用户数据的可溯源性。

在开发之前,我们先分析一下动态表单设计的一般实现思路。

动态表单开发的一般思路

1. 静态化配置列表

静态化配置列表是最传统的表单配置方式之一,基本思路就是利用母表来生成配置项,进而实现表单配置。类似于以下方式:

早期的网站配置就是类似于这种呢方案实现的,比如说我们要定制网站的主色,网站某些组件是否可见,是一种比较简单的方式。但是缺点是每增加一个配置属性,都要开发人员重新编写一个字段配置代码,这种方式在表单开发中非常不灵活,而且对代码层有强依赖性,所以只适合做小型配置系统。比如个人网站,简单的自定义表单。

2. 基于json schema的动态表单配置

基于json schema的动态表单配置有两种实现方案, 一种就是支持在线修改json文件从而实现定制化,另一种就是完全无代码操作,但是前提都需要提供一套通用的表单模版。类似于如下案例:

此种方案可以实现基本的表单自治。也是本文主要实现的方案。至于在线编写json文件的方案。笔者之前也也过成熟的方案,具体可以参考:

基于jsoneditor二次封装一个可实时预览的json编辑器组件(react版)

3. 支持在线coding的混合式表单设计

支持在线编程的混合式表单设计方案是终极方案,也是目前流行的无代码化平台的思想之一。一方面它提供了基于json schema的动态表单配置, 对于一些强定制的,需要在线设计组件方案的模式,采用在线编程,实时打包成动态组件的方式,最后根据平台的组件约定来实现组件库的方式。如下图所示:

 

 

在线代码编辑可以使用react-codemirror2或者 react-monaco-editor插件来实现。至于在线打包,我们用nodejs完全可以实现,笔者在做Dooring项目的在线下载代码时就用到了该方案,感兴趣的可以了解一下。

可视化领域中的表单引擎

可视化领域一方面强调的是图形(可视化)的设计,一方面是动态表单。比如说我们想傻瓜式的改变一张图的数据,属性,交互等,我们需要通过表单这一桥梁来实现:

 

 

所以我们需要设计一款适合公司产品的“表单引擎”,来动态根据图形组件的类型渲染不同表单配置。这块思想也是表单设计器要解决的问题之一。在下面的文章中我们会详细介绍实现过程。

从零实现一款动态表单设计器

在实现表单设计器之前,我们先来整理一下思路和需求。在笔者的最初草图中,它长这样:

 

 

从草图中我们可以提取到如下任务信息:

  • 定义一套表单组件库
  • 确定表单全局属性配置
  • 实现表单操作curd(增删查改)

我们这里总结了几个常用的表单组件如下:

  • 单选框
  • 复选框
  • 单行文本
  • 多行文本
  • 下拉框
  • 文件上传
  • 日期框
  • 数值输入框

以上这些基本满足我们的日常开发需求,其次我们还可以开发数据源表单组件,列表组件,比如dooring实现的那样:

 

 

类似的还有颜色面板这些,我们可以更具业务需求自行定制。

在完成表单组件库之后,我们就需要根据配置项动态渲染了。也有两种实现思路,一种就是类似于多条件判断,如下:

  1.   item.type === 'Number' && 
  2.   <Form.Item label={item.namename={item.key}> 
  3.     <InputNumber min={1} max={item.range && item.range[1]} step={item.step} /> 
  4.   </Form.Item> 
  5.   item.type === 'Text' && 
  6.   <Form.Item label={item.namename={item.key}> 
  7.     <Input /> 
  8.   </Form.Item> 
  9.   item.type === 'TextArea' && 
  10.   <Form.Item label={item.namename={item.key}> 
  11.     <TextArea rows={4} /> 
  12.   </Form.Item> 

这样做虽然可行,也有很多成熟系统采用该方案,但是一旦表单变多,比如一个页面有几十个甚至上百个表单项,那么我们将渲染m * n次(m为表单组件类型数,n为配置项个数)。另一种方式笔者看来是比较优雅的,可以将复杂度降低到O(n),也就是笔者常用的对象法。思路大至如下:将表单组件的类型作为对象的属性,属性值为对应的表单组件,这样遍历的时候只需要对应上对象的具体类型即可。 代码如下:

 

  1. // 维护表单控件, 提高form渲染性能 
  2. const BaseForm = { 
  3.     "Text": (props) => { 
  4.         const { label, placeholder, onChange } = props 
  5.         return <Cell title={label}> 
  6.                     <Input type="text" placeholder={placeholder} onChange={onChange} />  
  7.                </Cell> 
  8.     }, 
  9.     "Number": (props) => { 
  10.         const { label, placeholder, onChange } = props 
  11.         return <Cell title={label}> 
  12.                     <Input type="number" placeholder={placeholder} onChange={onChange} />  
  13.                </Cell> 
  14.     } 
  15.  
  16. //  动态渲染表单 
  17.     formData.map((item, i) => { 
  18.         let FormItem = BaseForm[item.type] 
  19.         return <div className={styles.formItem} key={i}> 
  20.                   <FormItem {...item} /> 
  21.               </div> 
  22.     }) 

 

 

是不是很优雅呢?后期我们只需要在BaseForm里维护表单组件即可,而且还可以基于BaseForm对表单进行包装,实现动态删除,编辑等功能。如下:

 

 

 

 

包装后的代码如下:

 

 

  1. <div> 
  2.   <div className={styles.disClick}><FormItem {...item} /></div> 
  3.   <div className={styles.operationWrap}> 
  4.       <span onClick={handleEditItem}><EditOutlined /></span> 
  5.       <span onClick={handleDelItem}><MinusCircleOutlined /></span> 
  6.   </div> 
  7. </div> 

 

接下来我们看看表单的全局属性,通过实际分析我们可以知道表单有如下外观:

  • 表单标题
  • 表单背景图片
  • 表单背景颜色
  • 提交按钮样式

所以他们因该成为表单设计的通用属性,如下图所示:

 

 

 

 

配置出来之后的表单可能长这样:

 

 

 

 

以上的表单通过H5-Dooring设计而来。当然我们可以利用它设计更加自定的表单页面。

最后一个比较使用的需求就是api定制,一般公司可能需要将用户的录入数据收集到自己的平台,那么这个时候我们提供一个api表单提交接口积极很有必要了,上面笔者也展示过,实现很简单,就是配置里多一个api的文本框即可。

最后一步就是实现表单的curd操作,展示如下:

编辑表单项:

 

 

删除表单项:

 

 

添加表单项:

 

 

 

具体实现也比较简单,只需要基于BaseForm进行包装,添加删除/编辑/添加按钮即可。具体可以参考我的开源项目H5-Dooring,地址:H5-Dooring传送门

利用H5-Dooring开发一款表单设计平台

在H5编辑器Dooring的实现中,我们可以做抽象,每一个页面组件可以看成特定的表单组件,如下图:

 

 

 

 

我们可以利用dooring的能力对表单平台进行拖拽,样式设计,数据录入等等操作,感兴趣的朋友可以基于Dooring设计思路改造成自己的表单设计平台。在文末笔者会附上dooring的github地址供大家研究参考。

H5可视化编辑器Dooring功能迭代说明

目前笔者实现的H5可视化编辑器H5-Dooring功能新增如下:

  • 实时保存功能
  • 添加进度条组件
  • 添加websocket通信
  • 实现在线下载代码功能
  • 添加Button组件
  • 添加动态表单设计器

本文转载自微信公众号「趣谈前端」

 

责任编辑:姜华 来源: 趣谈前端
相关推荐
设计可视化大屏搭建引擎
可视化大屏搭建平台的一些设计思路和效果演示,这篇文章我会就如何设计可视化大屏搭建引擎这一主题,详细介绍一下实现原理。

2021-07-12 17:23:47

零设计 可视化 引擎
动态刻度可视化组件实现
之前有个网友问我了一个很有价值的问题,笔者思考了一下决定自己实现一个动态刻度可视化组件的方案,来解决这一类的需求.

2021-09-27 08:31:01

数据可视化 柱状图 折现图
Dooring可视化搭建平台数据源设计剖析
低代码平台属于APaaS(应用平台即服务),其解决的是企业内部应用协调和人效成本的问题.随着计算机技术诸如云服务等的发展,传统软件服务已无法满足数字化浪潮的压力,笔者对企业迫切需要解决的问题做了如下总结.

2021-06-16 08:30:36

Dooring 可视化 数据源设计剖析
Dooring可视化搭建平台数据源设计剖析
低代码(lowcode)平台是近两年讨论比较火热的话题,其通过自动代码生成和可视化编程,使得使用者只需要编写少量代码,即可快速搭建各种应用,满足了很多技术和非技术人员的需求。

2021-06-16 07:05:03

安全
实现Dooring低代码印章组件
我们都知道任何低代码或者零代码搭建产品都非常注重底层搭建协议(schema),这些产品通常会设计一套向上兼容且可扩展的​​DSL​​结构,来实现页面元件的标准化配置,

2023-01-07 08:09:41

零代码 Dooring 组件
开发可视化大屏制作平台
目前很多企业或多或少的面临“信息孤岛”问题,各个系统平台之间的数据无法实现互通共享,难以实现一体化的数据分析和实时呈现。

2023-09-26 08:01:16

开发可视化大屏制作平台
几个月前开源的H5页面制作平台H5Dooring收到了很多热心的反馈和交流,顺着笔者之前的规划,我们又做了一款可视化大屏编辑器V6.Dooring.接下来笔者就来带大家一起看看我们的方案设计和技术实现.

2021-03-09 08:32:50

开发 视化大屏 H5-Dooring
开发可视化大屏制作平台
目前很多企业或多或少的面临“信息孤岛”问题,各个系统平台之间的数据无法实现互通共享,难以实现一体化的数据分析和实时呈现。针对以上需求,我们设计了一套可视化大屏解决方案。

2022-02-28 08:34:42

开发 可视化 大屏
相见恨晚的前端开发利器,你知道几个?
通常,可视化表单生成器包含两大核心组件:表单设计器和表单渲染器。表单设计器负责提供直观的可视化界面,让用户能够方便地搭建表单,并生成对应的JSON配置文件;而表单渲染器则负责读取这些JSON配置,并将其转换成实际可用的表单界面。

2024-01-29 00:51:39

前端 开发 利器
开源的可视化表单配置相关的案例
业务开发中用到了动态标签,需要动态构建表单,网上找了一些可视化表单设计器示例,也常见与一些后台管理中作为代码生成器使用。

2020-09-07 12:42:18

表单 可视化 开源
可视化定制IT运维表单
摩卡软件就是一个产品化程度很高的软件,它提供了表单设计工具(MochaFormDesigner),简称:MFD,帮助非技术人员以简单的图形化的方式,将企业中的各种复杂纸制表单电子化,实现表单的设计、部署、运行、管理和分析的全生命周期管理。

2009-08-24 14:12:46

IT运维管理 表单设计工具 摩卡软件
H5-Dooring可视化页面制作神器测评总结
经过本次的测评,我们对h5dooring这款低代码软件有了全面的了解。它简单易用的拖拽和配置功能使用户能够快速创建出令人印象深刻的H5页面,无需编程经验。

2023-08-14 23:45:55

Formik:让用户体验更加出色的表单解决方案
这款开源项目也是我研究零代码搭建平台——H5Dooring时参考的项目之一,它可以提高表单渲染引擎的性能和效率,构建出性能更加优秀的表单设计器。

2024-04-17 08:50:59

开源 Formik React 表单库
漫谈数据可视化:怎样实现数据可视化?
数据可视化,它是创造性设计美学和严谨的工程科学的卓越产物。它的美丽令人向往,而它的繁杂又使其蒙上层神秘的面纱。本文将尝试从数据可视化的定义、意义、应用三个方面讲述和解释关于数据可视化的“what、why、how”的三个问题。

2017-10-14 13:54:26

数据可视化 数据 信息可视化
移动应用表单设计秘籍
本文将从清晰的视觉纵线、信息的分组、极致的减法、利用选择代替输入、标签及文字的排布方式、依靠明文确认密码、合理的键盘利用、校验的小秘密这八个维度来分享我的移动应用表单设计秘籍。

2012-04-17 09:20:38

表单设计 移动应用
Dooring3.0可视化搭建平台使用指南
埋点统计时候可视化搭建平台的辅助能力,但是对产品规划和后续产品迭代有非常好的指导价值,方便后续做数据分析和精准迭代.

2023-03-16 20:46:40

可视化 平台 迭代
Caffe可视化VisualDL
VisualDL是由PaddlePaddle和ECharts合作推出的一款深度学习可视化工具,其能够可视化scalar、参数分布、模型结构、图像等。

2018-03-27 22:40:59

深度学习
开发可视化大屏制作平台(技术拆解版)
相比于传统手工定制的图表与数据仪表盘,可视化大屏制作平台的出现,可以打破抵消的定制开发,数据分散的问题,通过数据采集、清洗、分析到直观实时的数据可视化展现,能够多方位、多角度、全景展现各项指标,实时监控,动态一目了然。

2024-03-11 08:32:02

使用electron搭建桌面端Dooring
熟悉Electron的朋友也许知道,Electron继承了来自Chromium的多进程架构,这使得Electron在架构上非常类似于一个现代的网页浏览器。我们可以控制两种类型的进程:主进程和渲染器。

2021-06-22 14:47:19

electron Dooring 架构
数据可视化—地图可视化
今天给大家推送的是地图可视化的知识,如何用Python实现地图可视化,地图可视化常用于地理信息系统,本节选用python中的自带库matplotlib,实现地图可视化,一起学习吧!

2020-03-11 14:39:26

数据可视化 地图可视化 地理信息

聚圣源天医位你的名字资源给公司起名吉凶改名起名卫浴店面装修效果图开琴行起个名字姓鲍怎么起名程字起名女童神探包青天电视剧精准八字宝宝起名软件男孩起名水字旁的字2021祝老公顺风顺水的语句中国航母排水量武汉环艺新民众电影城车牌号吉凶等额本金农资有限公司起名取名蒋姓宝宝起名大全香草天空施工安全协议公司起名科技环保农村合作社起名字公司起名考虑八字五行缺水起什么名字好呢穆总的天价小新娘全文免费世界十大护肤品全国免费起名天下足球直播苏字起名字酒庄公司起名大全淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化