此项目是上古项目,代码基本很难维护,现在发布出来仅供参考思路,感兴趣的可以根据原理重构一版,实现一个更完备的可视化编辑

友情提醒:不建议在团队内投入大量精力做类似的事情(企图一步到位改变开发现状),与行业里用 AI 切页面类似,尽量作为玩具把玩一下即可。

Github 地址:github.com/xinyu198736…

线上实例

xinyu198736.github.io/antd-visual…

托管在 github,第一次加载会比较慢

截图:

运行

npm run build;
npm run start;
# 因为我不太懂 webpack ,不太会配置,这个项目修改代码后实时生效还有问题。。求 pr
复制代码

特性

  • 可视化编辑,同时实时生成结果代码,还可以单独预览
  • 丰富的数据编辑能力,可以编辑组件的二维属性
  • 组件可嵌套
  • 自适应布局
  • 除了 antd 的组件,还有一些原生 html 元素可使用

原理解析

1.如何实现实时编辑

第一步,抽象整个可视化工作台的数据表达,无非是放了一个什么组件在什么位置,这个组件的父组件是谁,这个组件的属性是什么

如下图:

一个组件的基础定义:

title 组件名
type  组件类型(组件真实类名)
can_place 组件是否可以包含子组件
children 组件的子组件,数组类型
is_native 组件是否是原生 html 元素
config  组件可用的配置信息
props 组件配置信息的值,包含样式和属性等
复制代码

根据这些值,我们就可以渲染和编辑组件了,编辑组件后, 会有一个大的表示画布当前状态的数据结构存储到 state 中, 另外,有一个方法可以根据这个数据结构渲染出整个画布, 所以每次有任何编辑动作之后,我们会触发 forceUpdate,重新绘制画布 也就是说,添加组件,编辑属性,和画布的显示是分离的,中间由一个大的数据结构连接(就是图片里这个)

2.如何反向生成 react 代码

根据上图中的数据结构,反向遍历,可轻易的生成 React 代码

3.如何定义组件可用的配置

在 pages/coms/xxx 里面定义一个组件的可用配置,然后即可在主界面中选择组件后在右侧"属性编辑区"中编辑属性。

来看看我们可以定义哪些属性吧

以一个按钮为例

export default {"type": "Button","title": "按钮","props": {type: 'primary',  // 定义可以配置的 propscontent: '按钮一只', // 定义可以配置的 propsstyle: {  // 定义可以配置的样式margin: "0px 10px 0px 0px"}},config: {   // 可用的配置项type: {   // type 这个配置的描述text: "主题",  // 配置的标题enum: [       // 可用的枚举,配置时会显示成下拉框'primary','default','dashed','danger']},icon: {text: "图标",},content: {text: '文案',},style: {  // 可用的样式配置width: {  text: "宽度",},margin: {text: "外边距",type: "4-value" // 一种定制类型,会渲染成 4 个输入框}}},
}
复制代码

这是最基本的配置项,只能适用于最基本的组件,但是遇到像 table 或者 Breadcrumb 这种组件就不行了

4.高级配置(二维数据)

以 Breadcrumb 为例,他有一个数据源的属性,数据源是一个数组+对象的混合表达,这种组件不少,应该如何定义呢

export default {"type":"Breadcrumb","title":"面包屑",props:{routes:[  // 这里是数据源的属性,和默认值{breadcrumbName:"一级目录",path:"#",key:1},{breadcrumbName:"二级目录",path:"#",key:2}]},config:{routes:{   // 如何表达这个属性应该如何配置text:"项目配置",enumobject:[{  // 一种新的类型,enumobject,对象枚举key:1,  dataIndex:"breadcrumbName",  // 枚举的对象的第一个 key 是什么title:"显示文本",    // 枚举的对象的第一个 key 的文本描述type:'String',      // 枚举的对象的第一个 key 的类型},{key:2,dataIndex:"path",    // 枚举的对象的第二个 key 是什么title:"链接",        // 枚举的对象的第二个 key 的文本描述type:'String',      //枚举的对象的第二个 key 的类型}]}}
}
复制代码

最终的属性编辑区:

即可边界对象枚举属性

5.更复杂的组件

大家会发现,table 这种组件和上述的组件都不太一样,首先看纯数据表格

其实这里还好,只是 table 有两个属性,一个表达列的数据,一个表达行的数据,我们只需要两个对象枚举即可

{config:{columns:{text:"列管理",enumobject:[{title: '列文本',dataIndex: 'title',type:"String"},{title: '列key',dataIndex: 'dataIndex',type:"String"}]},dataSource:{text:"值管理",enumobject:{type:'relative_props_object',target:'columns'}}}
}
复制代码

这里实现了一个 关联,可以把 dataSource 的配置和 columns 关联起来 (relative_props_object)

6.更更复杂的表格

如果只是数据,还好, 但是 table 里可以还可以嵌套其他组件,每行每列,想想是不是头疼。。如下图

table 的每个 column 其实可以定义内部显示的元素,我们在默认值里就给他塞一个空的 layout 进去, 这样之后这里就会变成一个可以放置其他子元素的坑,具体不展开了,这里的逻辑比较复杂。

未完待续,或者直接看代码。。

转载于:https://juejin.im/post/5cbad757f265da0359486f1d

一个较为完备的 antd 可视化编辑器实现相关推荐

  1. html+店铺+可视化编辑器,开源在线可视化HTML编辑器 – xhEditor | 骤雨打新荷

    xhEditor是一款开源的在线可视化HTML编辑器,主要应用于在线编辑HTML代码,完全基于Javascript开发,您可以应用在任何的服务端语言环境下,例如:PHP.ASP.ASP.NET.JAV ...

  2. 开源公告|腾讯tmagic-editor页面可视化编辑器对外开源

    项目简介 腾讯tmagic-editor是一个所见即所得的页面可视化编辑器,基于tmagic-editor可以快速搭建可视化页面生产平台,让非技术人员可以通过拖拽和配置,自助生成H5页面.PC页面.T ...

  3. 推荐几个HTML可视化编辑器

    http://www.sic.hk/ued/?p=355 一.UEditor – 百度编辑器 简介: UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户 ...

  4. 基于React+Koa实现一个h5页面可视化编辑器-Dooring

    前言 前段时间笔者一直忙于数据可视化方面的工作,比如如何实现拖拽式生成可视化大屏,如何定制可视化图表交互和数据导入方案等,这块需求在B端企业中应用非常大,所以非常有探索价值. 本篇文章并非和数据可视化 ...

  5. Vue + element从零打造一个H5页面可视化编辑器——pl-drag-template

    pl-drag-template Github地址:https://github.com/livelyPeng/pl-drag-template 前言 想必你一定使用过易企秀或百度H5等微场景生成工具 ...

  6. 基于f2从零实现移动端可视化编辑器

    往期推荐 在线IDE开发入门之从零实现一个在线代码编辑器 基于React+Koa实现一个h5页面可视化编辑器-Dooring 深度剖析github star数15.1k的开源项目redux-thunk ...

  7. 张铁柱-前端实现《低代码可视化编辑器》(一)思路整理 React-dnd+Ts

    张铁柱-前端实现<低代码可视化编辑器>(一)思路整理 React-dnd+Ts 先上效果: 拖拽生成页面+调整顺序 最近,接到任务做一个低代码编辑器,于是着手整理一下思路,调研一下实现方式 ...

  8. webGL、webGPU、封装、渲染引擎 three.js、游戏引擎,定位是游戏开发,在前面的渲染引擎基础上,还提供了骨骼动画、物理引擎、AI、GUI 等功能,以及可视化编辑器来设计关卡,支撑大型游戏

    https://zhuanlan.zhihu.com/p/162878354 如何选择 WebGL 框架和引擎? ​ 知道得越多,不知道的就更多了 数据可视化Sugar-百度智能云 ​cloud.ba ...

  9. 实践,制作一个高扩展、可视化低代码前端,详实、完整

    RxEditor是一款开源企业级可视化低代码前端,目标是可以编辑所有 HTML 基础的组件.比如支持 React.VUE.小程序等,目前仅实现了 React 版. RxEditor运行快照: 项目地址 ...

最新文章

  1. java快排算法解读,java 快排的思路与算法
  2. Zookeeper一致性级别分析,面试题附答案
  3. apache开启.htaccess
  4. iOS开发日记1-tableview编辑
  5. yarn add yarn global add
  6. C# Dev控件中的 GridControl 双击行事件
  7. 上海云栖:金融政企行业的CDN最佳实践
  8. NPOI从数据库中导出数据到Excel
  9. 功夫小子实践开发-菜单场景之游戏秘籍场景的分析和实现
  10. ArrayList Vector
  11. pytorch求范数函数——torch.norm
  12. 韩顺平Linux操作系统视频教程
  13. 《会计学》的简单了解
  14. 工业互联网,姓工,名互
  15. prometheus+grafana搭建监控平台监控压测服务器mysql性能
  16. SQL分析在2020年度第一季度的购买人数,销售金额,客单价,客单件人均购买频次(时间函数、分组汇总、常用指标计算)
  17. 计算机组装与维护我要自学网,【答疑】3D机械建模软件有哪些,3D机械建模一般用的是哪个软件? - 视频教程线上学...
  18. 成功解决电脑麦克风不管用、电脑无法录制声音之出现的麦克风Realtek(R) Audio未插入
  19. 金融风控数据挖掘--Task1
  20. 智能家居(照明电路)设计构思

热门文章

  1. picked up java_tool_options:_理解环境变量 JAVA_TOOL_OPTIONS
  2. 【世通兰陵王系列】IP段是什么意思?杭州高防IP段:103.219.30
  3. java中jcl_Java日志框架——JCL
  4. java parcelable_Parcelable最强解析
  5. 8051单片机Proteus仿真与开发实例-LM35温度传感器+ADC0804仿真
  6. 百度文库搜索0下载券文档的方法:删除VIP这段代码就行。
  7. c语言输出6行三角形,c语言实践 打印字母三角形
  8. 不再犹豫----【谐音歌词】
  9. 免格式化转换U盘格式
  10. 机器学习实践:超市商品购买关联规则分析