设计稿即代码——拖拽编辑器拖拽编辑器其实并不是一个新鲜的东西,现在市面上也有许多可用的产品或是开源的项目。笔者第一次

拖拽编辑器是一个基于公司前端典型页面系统上的一个项目,它用于改变传统的产品设计开发模式,减少设计、页面还原中间环节的成本浪费,真正做到设计开发一体化。

编辑器的核心功能是将页面元件/组件使用拖拽或是其它可视化编辑的方式来生成前端可用的静态文件代码,由于公司前端大部分项目与UI库使用的是vue技术框架,因此编辑器暂不考虑生成其它框架的代码成果物。

编辑器项目不包含自己的数据库,所有的数据/代码均以文件的形式存储在公司的gitlab服务器上。编辑器调用GitlabAPI来获取和存储数据。为方便前端开发过程中检索、拉取和使用代码,编辑器保存成果物时会将页面代码以单个.vue文件的方式保存在gitlab的对应项目仓库中。同样,编辑器也支持通过GitlabAPI读取.vue文件的gitlab地址获取对应的页面代码来进行二次编辑。

提到编辑器的输入和输出不得不详情说明下元件、素材与页面的概念。

元件是页面的最小组成单位,它可以是div、span、img等源生标签元素;可以是UI库中的基础组件,以ElementUI为例,如el-input、el-button等;也可以自定义的业务组件,如定义一个布局组件page-container。

拖拽编辑器需要接入元件库。元件库用于记录和存储页面所有元件的信息,每个元件信息单独存放在一个package.json中。元件库的结构如下:

#元件库的结构.├──Div│└──package.json├──span│└──package.json├──ElButton│└──package.json└──ElInput└──package.json以ElButton的package.json为例(仅列出部分属性作为示意):

这里额外说明下dependencies字段,其中包含了scriptUrl和linkUrl。一般在vue项目开发中,使用某组件常见的方式为先install该组件依赖,然后import引入改组件。但是编辑器采用umd动态引入的方式。组件可以在元件库中录入元件信息,scriptUrl为js文件地址,linkUrl为css文件地址,编辑器读取元件库时会根据umd信息动态引入文件,然后再编辑器中就可以正常使用了。

素材是由一个或多个元件组合而成,它是提供给编辑器的拖动材料。

素材库与编辑器本身解耦,它是托管在gitlab服务器上的文件仓库。

#素材库的结构.└──packages├──基础│└──基础元素│├──div.vue│├──span.vue│└──img.vue└──组件├──按钮│├──基础按钮.vue│└──主题色按钮.vue├──选择框│└──基础选择框.vue└──输入框├──基础输入框.vue└──文本域.vue一个素材就是一个.vue文件。素材文件不分代码是否复杂,内部元件数量是多少,只要想作为页面可拖动、可复用的材料都可以保存为素材文件。以下两个.vue文件均为素材:

页面就很好理解了,它是使用编辑完成页面编辑后,可以直接提供给前端开发人员使用的代码成果物。编辑器在保存时会将页面以.vue文件的形式保存在gitlab上对应的项目仓库中。前端人员在开发项目时,可以直接通过gitclone拉取整个项目的代码,也可以通过公司内部工具获取单个页面的代码文件到本地项目,省去静态页面开发的环节,十分的方便。

我们将刚才所说的元件库、素材库、页面库(项目文件库)整理一下,可以得到以下产品架构:

在介绍整体设计之前,我们先来看看拖拽编辑器制作页面的效果演示。

以下是拖拽编辑器制作一个简易的“百度”首页,为了方便演示,我们事先将一些素材给制作好了。

市面上的可视化编辑工具或是lowcode产品其实有很多。在设计之前我们调研了一些网上可用的产品:

总结了市面上产品的一些优劣和设计思路,我们对产品进行了一个初步的构想,然后经过多次内部评审与讨论,最终确定设计方向。这款拖拽编辑器遵循实用、易用、专业的设计思想,切实打造一款能有效优化开发流程,提升开发效率的前端工具。

编辑器以“输出开发人员可直接使用的代码”为第一目标。如果输出的代码,开发人员还需要大量修改的,那这就不是一个合适的产品。

设计师作为产品的第一用户群体,他们对前端知识的了解有限,在很多结构性、样式性的页面搭建时,与前端开发人员存在理解上的偏差(比如组件的属性设置)。如何降低学习成本,降低操作复杂度,提高用户体验,引导用户输出正确的页面代码是编辑器追求的第二目标。

市面上多数产品都只能支持基础的流式布局,显然公司这么多的中后台页面是不适用的。编辑器充分调研公司前端项目的代码特征,围绕内部UI组件库以及布局体系展开设计。

由于产品模块设计涉及到的内容多且杂,这边只介绍几个核心模块的设计思路

和众多的可视化编辑工具一样,编辑器页面分为操作和视图两个部分。

在设计拖拽编辑器的前期往往会陷入一个误区,认为拖拽就是将操作栏中的素材元素绑定拖放事件进行操作,其实并不是。我们要生成的页面是个流式布局而不是绝对定位。视图渲染页面是靠代码解析器生成的代码来渲染的,所以没有必要将整个素材元素DOM传给视图模块,只要告诉它控件代码片段的路径、在什么位置释放即可。所以,拖动的并不是DOM元素,拖动的只是信息。

如上图所示,编辑器左侧操作栏中展示所有可用的素材列表,此时的素材节点仅仅包含素材的名称与其代码文件所在的gitlab路径。用户拖动某个素材进入视图并释放后,编辑器再根据该素材的代码文件地址获取对应的代码片段。

这里详细解释一下该如何确定被拖动元素落在哪个元件容器中。

我们将这一设计抽象成“位置解析器”,它分为画板和虚拟元素块两个部分,画板是覆盖在视图上的一个操作层,所有的拖放操作均在画板上完成,这样不会因为视图上元件的一些特性(如mouseover事件等)产生什么负面影响。每一个视图上的元件都存在唯一标识,且都会在画板上生成一个虚拟元素块。换句话说,每一个画板上的虚拟元素块,都对应视图上的一个元件。虚拟元素块是一个div,相对于画板容器绝对定位,它的top、left、width、height值都和其对应的控件元素一样。这样一来,我们只要给每个虚拟元素块都绑定鼠标进出事件来监听拖动操作,就可以知道用户在那个元件容器中释放了。

拖动完成后,视图模块会根据素材所在的gitlab文件地址,通过调用GitlabAPI获取代码片段,然后和释放容器的标识一起,传入代码解析器。

代码解析器将传入的代码片段转换为AST数片段,然后根据父容器的标识,插入到指定的节点中去,组合成完整的AST树。打个比方,下图是将一个按钮拖动进入一个div后的代码处理示意:

代码处理部分,我们选取了一些核心的处理逻辑。

以el-button按钮组件为例,我们预先录入了type、icon和disabled三个属性,分别对应按钮的类型,图标和是否禁用。现在我们希望将一个默认样式的按钮改为主题色按钮,在代码中只需要在el-button标签上加一个type="primary"即可,在编辑器的设计流程为:

在页面制作的过程中,为了能保证输出代码的合理性,需遵从修改属性>>修改样式的原则,能修改属性达成的修改尽量不修改样式,比如上一章节说的修改主题色,其实本质上就是修改按钮元素的背景颜色、边框和字体颜色,但通过属性达成效果的代码才是我们正在想要的。

但是在制作一些自由度比较高的页面时,往往经常会修改元件的样式。编辑器的样式面板内置了一套样式表单,选用项目开发常用的CSS样式。大致分为以下4类:

这套样式表单采用可视化、图形化、文本语义化的方式让设计人员尽可能理解,并提供一些快捷操作尽量符合设计师的操作习惯。比如边距,可以采用图形化的方式更直观的看到要改变属性所对应的效果位置。

打个比方,我们要给一个div设置width:600px,用户可以在样式面板中的宽度项设置为600px,在编辑器的设计流程为:

除了上述介绍的一些设计外,编辑器还完成了以下功能,由于和之前的设计流程存在类似之处,就不详细展开介绍了。

在未来的版本中,我们同样也希望能加入更多的功能,去更大提升开发效率,包括:

拖拽编辑器的定位是作为一个能力工具,它可以向上封装成平台。为了方便设计师的使用以及管理,我们正在编辑器的基础之上开发一个在线页面设计平台(暂未有开源计划),支持设计稿的输出、展示和二次开发等功能。

如果你对如何使用可视化工具平台生成页面有兴趣或是也想开发一套拖拽编辑器,希望此文的一些设计思路对你有所帮助。

本文最主要讲解了一款输出vue页面的拖拽编辑器,以同样的设计思路也可以开发React和Angular等技术框架的页面。

我们希望通过搜集产品页面和构建流程的大数据,慢慢向智能化靠拢。最终实现能通过读取设计稿图片或是资源文件就生成可用的静态页面。“设计稿即代码”,相信最终的产品形态将不再拘泥于线上可视化构建平台,而是能提供智能化解析设计稿的能力。

THE END
1.软件开发整个流程图软件开发流程php软件开发整个流程图 软件 开发 流程 软件开发是一个复杂的过程,包括以下步骤: 1. 需求分析:在软件开发之前,必须明确软件的需求。这包括确定软件的功能、性能和可靠性要求。需求分析是软件开发过程的重要一步,将确定软件开发的方向和范围。 2. 设计阶段:在需求分析阶段完成后,需要进行软件设计。这一阶段包括制定软件https://blog.yyzq.team/post/340047.html
2.项目开发流程:四个阶段需求确定开发阶段项目开发流程:四个阶段 1.需求确定阶段: ①需求梳理:双方沟通详细的开发需求,确定各功能模块的业务逻辑,最终形成需求文档供客户确认。 ②评估与报价:功能需求确定后,我们将根据需求文档评估开发成本和开发周期。 我们公司的报价有两个优势。 一是专业开发工程师评估,更准确,无水; 二是我们是一家拥有12年经验的开发https://m.bjhwtx.com/h-nd-129304.html
3.定制开发流程步骤(全面版)开发团队会与客户密切协作,依据具体的业务场景和操作流程,精心设计出贴合实际应用的功能模块。细化功能规划至字段命名级别,这意味着每个数据输入点、展示项以及后台处理逻辑都将得到详尽明确的规划,让所有参与者都能清晰地了解即将开发的软件中包含的所有内容和工作流程。2.原型图设计 框架层设计:界面设计,导航设计,https://baijiahao.baidu.com/s?id=1795916653747173459&wfr=spider&for=pc
4.开发java程序的一般步骤是开发Java程序的一般步骤通常包括需求分析、设计、编码、测试和部署等阶段。下面将详细介绍Java程序开发的一般步骤。 需求分析阶段: 在开始开发Java程序之前,首先需要进行需求分析。需求分析是确定程序需求、功能和约束的过程。这一阶段通常涉及与相关人员交流,理解用户的需求,并将其转化为功能和系统要求的文档形式。 https://www.elecfans.com/d/2326502.html
5.软件开发流程&每阶段注意事项确保需求的可追溯性和复审需求:确认每个需求是否都有对应的测试用例,验证需求设计是否合理、是否存在遗漏等情况。 开发工程师带入新的测试角度:从业务处理流程的角度提供新的测试用例,改善测试用例覆盖情况。 预防缺陷和改善开发质量:通过评审发现潜在的缺陷,进一步改善软件质量。 https://blog.csdn.net/u011305680/article/details/136189271
6.医疗器械设计转换的重要性及其实施流程检测资讯看到这里其实我们对于设计转移要实施的内容相对就比较明确了。尝尝在许多公司的设计开发流程中设计转移和设计确认是放在一起的或放在设计确认后,但值得注意的是设计转移不是在设计确认后才进行的活动,设计转移的活动从首次工艺输出开始,直至设计转移评审形成评审报告前完成。通常设计转移的主要活动包括:完整的工艺操作规程及http://www.anytesting.com/news/1941877.html
7.计算机毕业设计15篇在讲解程序设计时,灌输软件开发流程等概念。在综合性程序设计试验时,引导学员按照软件工程的流程来设计和实现。数据库的基础知识为以后进一步开发数据库应用系统软件提供了重要的基础。这些软件知识互为渗透、相互融合,共同构成了计算机软件技术基础课程的丰富的内涵。注重各种软件知识的结合,也自然成为了课程教学的重要理念https://www.fwsir.com/fanwen/html/fanwen_20230422093603_2738458.html
8.基于Android平台的大学生实用软件设计开发AET基于Android平台的大学生实用软件设计开发 摘要: 在移动互联技术发展成熟的大环境下,对如何应用智能手机等移动通信终端实现校园信息数字化服务这一问题的研究具有深刻的现实意义和广泛的实用价值。基于Android平台设计开发了大学生校园资讯服务软件,可完成对课程表、自习室、通知公告、办事流程、电话黄页等各类信息的浏览和http://www.chinaaet.com/article/3000015385
9.向死而生:面向失败设计之道术技业务开发的新同学有时候可能会有迷之自信,觉得自己写的代码与老鸟们没有什么不同。实际上,编写正常流程的业务代码大家的差异不会太大,但是针对异常、边界、不确定性的处理才真正体现一个程序员的功力。老鸟们往往在长期的训练下已经形成多种肌肉记忆,遇到具体问题就会举一反三脑海里冒出诸多面向失败的设计点,从而写https://maimai.cn/article/detail?fid=1717421141&efid=5muaLLhIsBrDpQNUYWRP4g
10.Java全栈教程:从零开始的全栈开发入门在开始学习Java之前,你需要搭建Java开发环境。首先,你需要下载并安装JDK(Java Development Kit)。JDK是Java开发的必备工具,它包含了Java运行环境(JRE)、编译器(javac)和调试工具(jdb)等。 1.2 Java语言基本语法 Java语言的基本语法包括变量、数据类型、运算符、流程控制语句、数组、方法、类与对象等。 https://www.imooc.com/article/360026
11.技术燃料电池电堆设计开发关键技术(2)熟练的技术队伍和先进的开发流程 专业的电堆开发,人力资源是关键。在产品定义和设计阶段,实现平台化产品和模块化产品设计,充分汲取并应用基础研究和材料的改进创新的成果,才能促进技术不断提高和改进,从而实现电堆性能的整体提升。 (3)向智能化制备迈进 http://www.zhengfeipower.net/Article-2729059.html
12.敏捷研发—前端DevOps流水线实践行云流水线提供了良好的环境基础和丰富的原子准备,使构建自动化流水线时更加的方便快捷,也大大提升了团队的开发时间。团队的前端DevOps流水线即是基于行云流水线搭建。 4.2 流程设计 下图团队设计的前端DevOps自动化流水线,目的是打破开发、测试、产品、运营等不同岗位人员的沟通壁垒,让研发团队人员同时具备不同研发环https://blog.itpub.net/70027825/viewspace-2944076/
13.OA工作流Activiti(一)[通俗易懂]腾讯云开发者社区ACT_HI_*: ‘HI’表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。 ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。 数据库流程规则表: 1) act_re_deployment 部署信息表 2) act_re_model 流程设计模型部署表 3) act_re_procdef 流程定义数据表 https://cloud.tencent.com/developer/article/2102060
14.智能网联汽车AUTOSAR嵌入式软件开发体系结构智能网联汽车4. AUTOSAR软件开发流程 AUTOSAR嵌入式软件开发流程通常包括以下几个关键步骤: 4.1 系统设计 在系统设计阶段,开发团队根据汽车功能和性能需求,将整个系统划分为不同的软件组件,并定义它们之间的接口和通信方式。同时,确定基础软件和运行环境的配置。 4.2 软件开发 https://www.auto-testing.net/baike/show-1169.html
15.产品人必备干货:产品开发流程(完整版)人人都是产品经理产品开发流程涉及的人员从产品经理到设计师、前端、后端等等一系列人员,这篇文章主要关于产品开发的完整流程,希望对各个工作岗位上的人有借鉴意义。 1 引言 1.1目的 基于现在的开发流程中缺少的环节进行补足,使得开发流程更加的流畅和正规化,以便以后的查阅与归档使用。面对互联网行业中激烈的竞争,让我们的开发流程更完https://www.woshipm.com/pmd/545047.html
16.AUTOSARAP与CP的差异在哪里?CP 与AP开发流程如下图所示: 蓝色虚线框表示CP AUTOSAR的开发流程,绿色表示AP AUTOSAR的开发流程。 上图中,在代码生成阶段没有体现AP要生成Manifest,实际开发时需要。 上图中,只是一个简单的整理,并没有涵盖AUTOSAR所有需要设计的内容。 4.4 接口类型 https://www.dongchedi.com/article/7066418855047954974
17.分布式网络数据抓取系统设计与实现1. 代理ip池的设计与开发流程如下: a. 对免费代理ip网站进行抓取。 b. 对代理ip进行存储并验证 c. 验证通过存储进数据库 d.验证不通过的则删除 (c)爬虫异常状态组件的处理 爬虫没有被屏蔽运行时,访问网站不是一直都是200请求成功,而是有各种各样的状态,像上述爬虫被禁的时候,其实返回的状态是302,防止屏蔽组https://www.jianshu.com/p/fb028ad74798
18.合同期个人工作计划6篇本项目的工作计划从系统需求调研和设计到系统开发、测试和验收,再到系统上线和运维,共计12周。通过详细的工作计划,确保项目的开发流程、任务分配和实现方式的明确清晰,有效避免了项目中出现的风险和错误。在项目的实施中,遇到问题第一时间反馈给相关人员解决,提高项目的执行效率和质量,使得本项目能够成功实施,得到了客户https://www.liuxue86.com/a/4899400.html
19.天津市利达钢管集团有限公司天津a.质量管理体系的范围,见本手册1条款本公司企业简介和发布令;GB/T19001:2008标准应用于本公司时,生产和服务过程中不涉及7.3条款(设计控制),将7.3条款删减; b.根据质量管理体系标准要求和本公司生产和服务的特点,编制实际运行的程序文件;QMS形成文件的已用和QMS所需过程及过程之间相互作用的表述。 http://12365.ce.cn/zlpd/zly2014/cy013/cy2013/tj/201409/19/t20140919_1936402.htm
20.DDD实战Repository模式的妙用在本文中,我们深入探讨了DDD(领域驱动设计)的一个核心构件 —— 仓储模式。借助快照模式和变更追踪,我们成功解决了仓储模式仅限于操作聚合根的约束,这为后续开发提供了一种实用的模式。 大家好,我是飘渺。今天我们继续更新DDD(领域驱动设计) & 微服务系列。 https://www.51cto.com/article/759855.html
21.敏捷开发流程高手必备的用户运营策略有哪些?4.2 提升用户参与度的关键步骤 设计有趣且吸引人的互动活动,例如问答、竞赛、投票等。 提供有价值且分享性强的内容,例如故事、观点、数据等。 鼓励用户之间的社区互动,例如评论、讨论、分享等。 4.3 如何通过参与度提升产品或服务的价值 鼓励用户提供反馈和建议,这有助于了解他们的需求并改进产品。 https://boardmix.cn/article/5-user-operation-strategies/