oceanzhu 3fb880d09b refactor(stage):重构魔方编辑器stage代码
Squash merge branch 'feature/oc_actionbox_879360293' into 'master'
    对魔方编辑器核心代码stage进行重构,这部分代码主要是负责编辑器中间画布区域的处理,包括渲染一个所见即所得的画布,支持组件的增删改查和拖拽、高亮操作。
    旧代码存在的问题以及解决方案:
    1、过多暴露属性和循环引用,导致stageCore、stageDragResize、StageMultiDragResize、StageRender、StageMask、StageHighlight之间形成复杂的网状依赖,非常不可控。StageCore负责创建后面5个类的实例,并把这些实例作为自己的公共属性,同时core把自己的this传给这些实例,这些实例就会通过core传进来的this,通过core间接的访问其它实例的方法和属性,比如在stageDragResize中可能存在这样的一个访问:this.core.stageRender.contentWindow.document
    解决方案:
    1)、属性尽量设置为私有,对外暴露方法,不暴露属性;
    2)、core避免向其它类传递this,改为传递接口,需要什么就传什么

    2、事件传递较多,跳来跳去,定位问题较为困难
    解决方案:
    重新梳理各个类的职责,尽量在类中闭环,减少事件传递。
    新增了actionManager类,core负责管理render、mask、actionManager三个类;
    actionManager负责管理单选、多选、高亮三个类,同时将mask中的事件监听,转移到actionManager监听,actionManager形成单选、多选、高亮行为后,直接调动单选、多选、高亮完成功能。

    3、存在一些重复代码
    主要是拖拽框的代码在单选、多选、高亮中各自维护,改为统一维护

    4、多选不支持辅助线对齐
    将单选中的moveableOption管理逻辑抽取出来成为单选和多选的父类,使多选支持辅助线对齐

    本次改动取消了一些对外暴露的属性,moveableOption回调函数签名也有变化,详细情况如下:
    删除stageCore公共属性:
    public selectedDom: HTMLElement | undefined;
    public selectedDomList: HTMLElement[] = [];
    public highlightedDom: Element | undefined;
    public dr: StageDragResize;
    public multiDr: StageMultiDragResize;
    public highlightLayer: StageHighlight;
    public config: StageCoreConfig;
    public zoom = DEFAULT_ZOOM;
    public containerHighlightClassName: string;
    public containerHighlightDuration: number;
    public containerHighlightType?: ContainerHighlightType;
    public isContainer: IsContainer;

    stageCore入参改动:
    这两个参数原本定义:
    moveableOptions?: ((core?: StageCore) => MoveableOptions) | MoveableOptions;
    multiMoveableOptions?: ((core?: StageCore) => MoveableOptions) | MoveableOptions;
    修改后定义:
    moveableOptions?: CustomizeMoveableOptions;
    multiMoveableOptions?: CustomizeMoveableOptions;
    CustomizeMoveableOptions =
      | ((config?: CustomizeMoveableOptionsCallbackConfig) => MoveableOptions)
      | MoveableOptions
      | undefined;
    export interface CustomizeMoveableOptionsCallbackConfig {
      targetElId?: string;
    }
2022-11-24 21:19:56 +08:00
2022-09-27 14:30:21 +08:00
2022-09-28 16:27:31 +08:00
2022-11-24 21:04:33 +08:00
2022-07-14 21:31:51 +08:00
2022-02-17 14:47:39 +08:00
2022-06-07 16:25:41 +08:00
2022-02-17 14:47:39 +08:00
2022-11-24 21:04:33 +08:00
2022-02-17 14:47:39 +08:00
2022-10-26 10:59:16 +08:00
2022-02-17 14:47:39 +08:00
2022-11-24 21:04:33 +08:00
2022-11-24 21:04:33 +08:00
2022-06-21 20:54:12 +08:00
2022-09-26 21:29:54 +08:00

TMagic

TMagic 可视化搭建平台。

  • 💪 Vue 3.0 Composition API
  • 🔥 Written in TypeScript

文档

文档请移步 https://tencent.github.io/tmagic-editor/docs/index.html

目前文档仍在逐步完善中,如有疑问欢迎给我们提 issue。

教程

Playground 体验

https://tencent.github.io/tmagic-editor/playground/index.html

环境准备

node.js >= 16

先安装 pnpm

$ npm install -g pnpm

然后安装依赖

$ pnpm bootstrap

运行项目

执行命令

$ pnpm playground

最后在浏览器中打开

http://localhost:8098/tmagic-editor/playground/

即可得到一个魔方编辑器示例项目

项目介绍

在本项目中,我们核心内容,是包含在 packages/editor 中的编辑器,以及 runtimepackages/ui 提供的各个前端框架相关的 runtime 和 ui。

  • packages 目录中提供的内容,我们都以 npm 包形式输出,开发者可以通过安装对应的包来使用。
  • runtime 是我们提供的编辑器活动页和编辑器模拟器运行的页面项目示例。可以直接使用,也可以参考并自行实现。
  • playground 是一个简单的编辑器项目示例。即使用了 packagesruntime 内容的集成项目。开发者可以参考 playground使用魔方提供的能力实现一个满足业务方需求的编辑器。

编辑器

通过安装和使用 @tmagic/editor可以快速搭建起一个魔方编辑器。

魔方demo图

页面渲染

runtime 是魔方提供的页面渲染环境。通过加载在编辑器中产出的 DSL即可得到魔方编辑器希望拥有的最终产物一个活动页面。我们提供了 vue2/vue3/react 几个版本的 runtime。

通过魔方编辑器和 runtime 渲染,以及通过自定义的复杂组件开发,可以在魔方项目上,搭建出复杂而精美的页面。

表单渲染

魔方的表单配置项,使用了我们开发的基于 element-ui 的 @tmagic/form@tmagic/form 也可以在其他地方单独使用。支持渲染 JS Schema 提供的表单描述。

使用

playground 的示例项目,就是为开发者提供的基础应用示例。开发者可以基于此或者参考自行实现,搭建一个基于魔方的可视化搭建平台。

参与贡献

如果你有好的意见或建议,欢迎给我们提 Issues 或 Pull Requests为提升魔方可视化编辑器开发体验贡献力量。
详见:CONTRIBUTING.md

欢迎入群交流

Description
No description provided
Readme Multiple Licenses 108 MiB
Languages
TypeScript 61.5%
Vue 33.6%
SCSS 2.6%
JavaScript 1.3%
CSS 0.6%
Other 0.4%