All Projects → yu-tou → Antd Visual Editor

yu-tou / Antd Visual Editor

ant-design 组件库实时可视化编辑器,实时生成 react 代码

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Antd Visual Editor

React Design Editor
React Design Editor has started to developed direct manipulation of editable design tools like Powerpoint, We've developed it with reactjs, ant.design, fabricjs
Stars: ✭ 687 (+42.53%)
Mutual labels:  editor, antd, ant-design
erp-crm
IDURAR is Open Source ERP/CRM Based on Mern Stack (Node.js / Express.js / MongoDb / React.js ) with Ant Design (AntD) and Redux
Stars: ✭ 18 (-96.27%)
Mutual labels:  antd, ant-design
GOSH-FHIRworks2020-React-Dashboard
🩺 Fully Responsive FHIR Dashboard written using @reactjs for NHS and GOSH hackathon
Stars: ✭ 21 (-95.64%)
Mutual labels:  antd, ant-design
Ant Design Blazor
🌈A set of enterprise-class UI components based on Ant Design and Blazor WebAssembly.
Stars: ✭ 3,890 (+707.05%)
Mutual labels:  antd, ant-design
Luban H5
[WIP]en: web design tool || mobile page builder/editor || mini webflow for mobile page. zh: 类似易企秀的H5制作、建站工具、可视化搭建系统.
Stars: ✭ 4,991 (+935.48%)
Mutual labels:  editor, ant-design
react-drag
A drag and drop platform based on sortable.js front-end visualization. 一个基于sortable.js的前端可视化搭建的拖拽平台,ui组件采用antd-mobile.通过umi脚手架构建.技术栈采用dva+hooks+umi+antd-mobile+sortable.js+react-color.
Stars: ✭ 51 (-89.42%)
Mutual labels:  antd, ant-design
Sunflower
🦹 Process components for antd4 & antd3 by alipay industry technology
Stars: ✭ 441 (-8.51%)
Mutual labels:  antd, ant-design
antd-etable
Editable Table base on Ant Design
Stars: ✭ 43 (-91.08%)
Mutual labels:  antd, ant-design
Re Editor
一个开箱即用的React富文本编辑器 🚀re-editor
Stars: ✭ 367 (-23.86%)
Mutual labels:  editor, ant-design
Formik Antd
Simple declarative bindings for Ant Design and Formik.
Stars: ✭ 453 (-6.02%)
Mutual labels:  antd, ant-design
React Admin
基于 Ant Design React 的管理系统架构
Stars: ✭ 376 (-21.99%)
Mutual labels:  antd, ant-design
redux-form-antd
Ant design bindings for redux form
Stars: ✭ 107 (-77.8%)
Mutual labels:  antd, ant-design
umi-plugin-antd-theme
🎨 Best theme plugin
Stars: ✭ 77 (-84.02%)
Mutual labels:  antd, ant-design
gatsby-wordpress-typescript-scss-blog
Gatsby Wordpress Typescript Blog Boilerplate
Stars: ✭ 50 (-89.63%)
Mutual labels:  antd, ant-design
antd-pro-toolkit
🐜ant design pro toolkit.
Stars: ✭ 13 (-97.3%)
Mutual labels:  antd, ant-design
Bird Front
bird前端项目,基于react、antd、antd-admin,封装常用数据组件,细粒度权限解决方案。
Stars: ✭ 272 (-43.57%)
Mutual labels:  antd, ant-design
Jeecg Boot
「企业级低代码平台」前后端分离架构SpringBoot 2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT。强大的代码生成器让前后端代码一键生成,无需写任何代码! 引领新的开发模式OnlineCoding->代码生成->手工MERGE,帮助Java项目解决70%重复工作,让开发更关注业务,既能快速提高效率,帮助公司节省成本,同时又不失灵活性。
Stars: ✭ 26,432 (+5383.82%)
Mutual labels:  antd, ant-design
next-plugin-antd-less
🎩 Use Antd (Less) with Next.js v12, Zero Dependency on other Next-Plugins.
Stars: ✭ 338 (-29.88%)
Mutual labels:  antd, ant-design
ant-table-extensions
Export, Search extensions to Ant Design's Table component.
Stars: ✭ 43 (-91.08%)
Mutual labels:  antd, ant-design
React Spa
React Redux,适合中大型规模应用开发,注释还算详细,配置有TypeScript、 CSS Modules、React-Router 4、koa接口mock请求等。接口埋点报错统一处理。
Stars: ✭ 327 (-32.16%)
Mutual labels:  antd, ant-design

一个 可视化实时渲染的 ant-design 页面搭建工具

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

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

线上实例

https://xinyu198736.github.io/antd-visual-editor/index.html

托管在 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',  // 定义可以配置的 props
        content: '按钮一只', // 定义可以配置的 props
        style: {  // 定义可以配置的样式
            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 进去, 这样之后这里就会变成一个可以放置其他子元素的坑,具体不展开了,这里的逻辑比较复杂。

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].