【Vue3 + 低代码】低代码编辑器!(含实现方案)

1,165 阅读5分钟

Vue3 实现的低代码编辑器

在前几年的工作中, 完成过多个用于解决不同场景的低代码平台。 最近几个月空闲时间, 自己重新实现了一个当作偷懒工具使用的低代码编辑器。

该编辑器核心功能已基本完善。只需添加组件(物料)和更改部分逻辑,即可使用。

更多功能正在持续迭代中。

github地址:github地址

编辑器地址: Npm地址

在线预览: 编辑器预览

一、什么时候使用低代码?

web业务场景中, 经常会遇到以下场景,是否让你头疼不已:

1.重复的表单/工单/发票。

2.大量活动海报。

3.重复的ToB管理页面。

4.各类问卷。

5.配置化的流程/节点图

在经历麻木搬砖完成重复业务后, 对应的场景下,使用低代码平台常常是最好的解决方案。

众所周知,低代码平台常有以下优缺点。

低代码平台的主要优点

  • 高效快速的生成页面
  • 无需开发人员参与,完成提效
  • 可视化操作
  • ...

低代码平台的主要缺点

  • 复杂业务难以支撑。复杂业务往往会使得低代码平台更加复杂。
  • 上手成本。 小白看文档都不好使, 所以在组件(物料)设计时,往往需要考虑组件复杂度
  • 问题定位困难。
  • 组件、模板升级数据处理麻烦。如何维护组件版本和模板版本常常是迭代中的拦路虎。
  • ...

所以我们在决定是否使用低代码实现时,往往需要判断的第一个条件是: 是否符合场景需求。

场景的应用比技术实现往往更加重要!

二、如何实现低代码编辑器

市面上的低代码编辑器通常包含六个模块。

以Vue-page-editor为例

image.png

1. 编辑器的构成

一个基本的编辑器构成由以下六部分组成。

代码层面主要结构如下

image.png

局部结构说明

1.布局选择器

默认设置有全局布局和左右布局。同时支持自定义布局工具。通过Canvas划分画布,划分模块后可通过模块全局样式调整宽度。

2.组件选择器

包含各类页面构成组件,根据业务构建各类基础组件。每个组件都可修改组件对外默认数据、样式、事件通信、

3.工具选择器

包含数据保存、预览、屏幕快照、全屏等基础功能。用户也是用插槽自定义功能

4.组件属性编辑器

可编辑一个组件的对外数据、样式、事件等属性。根据需求设置属性。

5.全局属性编辑器

可编辑一个模块的对外数据、样式、事件等属性。比如左右布局,就是左右两个模块。

6.模块渲染器(画布区)

模块的渲染。内部可挂载多个组件。

2.编辑器的使用

3.页面配置后生成后完整代码

低代码编辑器的数据模式是我们常用数据驱动视图

会在编辑器的顶层设计一个全局数据globalEditorData。编辑器的所有新增组件、属性编辑、布局更改等操作。都在在编辑这个全局数据。

我们以选择左右布局,且在左模块配置轮播图、文章列表,右模块设置公告为例。

可以得到如下代码结构:

{
  "version": "1.0.0",
  "layout": "1",
  "layoutConfig": [
    {
      "type": "BOX",
      "children": [
        {
          "type": "EDITOR",
          "key": "1",
          "placeholder": "拖拽控件到此区域",
          "style": {
            "width": "76%",
            "minHeight": "300px",
            "marginRight": "8px"
          }
        },
        {
          "type": "EDITOR",
          "key": "2",
          "placeholder": "拖拽控件到此区域",
          "style": {
            "width": "calc(24% - 8px)",
            "minHeight": "300px",
            "marginRight": "0"
          }
        }
      ]
    }
  ],
  "compConfig": {
    "1": [
      {
        "version": "1.0.0",
        "type": "BANNER",
        "layout": "1",
        "modules": {
          "1": [
            "1"
          ],
          "2": [
            "5"
          ]
        },
        "data": {
          "title": "轮播图",
          "slogan": "一群简单的学习爱好者",
          "banners": [
            "https://s1.ax1x.com/2020/09/29/0Zc6zD.jpg",
            "https://s1.ax1x.com/2020/09/29/0ZcgQe.jpg",
            "https://s1.ax1x.com/2020/09/29/0ZcyRO.jpg",
            "https://s1.ax1x.com/2020/09/29/0Zc2sH.jpg"
          ],
          "jumpUrl": ""
        },
        "style": {
          "height": 500,
          "interval": 5000
        },
        "event": {
          "click": {}
        },
        "id": "V7spTFsGY8A3yH1gGSesn",
        "label": "轮播图"
      },
      {
        "version": "1.0.0",
        "type": "ARTICLE",
        "layout": "1",
        "modules": {
          "1": [
            "1"
          ],
          "2": [
            "5"
          ]
        },
        "data": {
          "title": "文章列表",
          "icon": "",
          "params": {
            "cateKey": ""
          },
          "jumpUrl": ""
        },
        "style": {
          "backgroundColor": ""
        },
        "event": {},
        "id": "xSTKf_kxtBHQXtb34Dknr",
        "label": "文章列表"
      }
    ],
    "2": [
      {
        "version": "2.0.0",
        "type": "NOTICE",
        "layout": "2",
        "modules": {
          "1": [
            "2"
          ],
          "2": [
            "5"
          ]
        },
        "data": {
          "title": "公告",
          "urlParams": {
            "url": "",
            "type": "_blank"
          }
        },
        "style": {},
        "event": {},
        "id": "ZNbVDTowBmgFDdVWXGekS",
        "label": "公告"
      }
    ]
  }
}

通过数据我们可以看到,组件添加、属性修改、布局修改等操作都是在修改globalEditorData数据源。也是我们最终存储的数据。左侧操作是向布局内添加组件。右侧操作是在修改模块、或组件数据。

1)全局字段说明

1.Version 版本

生成模版的当前版本、用作编辑场景下的版本控制。一般配置后端使用。

2.Layout 当前布局选择

当前布局key值,比如这里的“1” 代值左右布局。

3.LayoutConfig 布局配置

当前布局的配置类型。用数组+树的组合使得布局可以多层级。其中children中的TYPE控制布局的所属。BOX为外层盒子、EDITOR为内层模块。

4.CompConfig 组件数据

主要是存储布局数据。与LayouConfig对应。这样分开存储可以减少数据的处理数量

三、编辑器设计相关文章

单个组件的属性与实现可参考以下文章。

1.单个组件设计

2.自定义布局设计

3.组件通信