1、概述

组件开发主要是由几4大模块构成,每个模块负责不同的分工,相互搭配构建成一个完整的可编辑组件。

1、default-setting 模块,组件基础信息配置。

2、template 模块,负责编辑器舞台的组件注册、渲染。

3、setting 模块,负责编辑器舞台组件相关设置面板注册、渲染。

4、main 模块,负责渲染引擎组件注册、渲染。

2、模块介绍

1、default-setting模块

组件的默认设置,包含组件的基础设置,元素设置,内置页设置等组件基础信息。

1、元素配置

元素配置是组件构建的核心配置,所有的组件都依赖元素配置生成对应编辑器,渲染引擎的组件。

元素的配置分为元素的公用配置信息,私有元素配置

1、元素配置列表
1、元素公用配置

属性

说明

类型

name

元素名称,可供编辑器显示用

string

key

可编辑元素的英文标识,可用于代码编程

string

type

可编辑元素类型

ElementTypes

style

元素的样式

Object | undefined

isDisableControllable

是否可控制显示或隐藏

boolean | undefined

parentName

元素所属的组件名或内置页名

string | string[] | undefined

isScale

是否可以缩放大小

boolean | undefined

isDisableClick

是否有点击事件

boolean | undefined

isDisableDraggable

是否可拖拽

boolean | undefined

isDisableRotable

是否可旋转

boolean | undefined

isDisableImageReplaceable

图片是否可替换,一些占位图是不能替换的

boolean | undefined

isDisableTextReplaceable

文本是否可替换do

boolean | undefined

isDisableAnimation

是否禁用动画

boolean | undefined

isDisableTextBtn

是否禁用文字按钮,即仅图片按钮(仅对按钮元素有效)

boolean | undefined

isDisableFontSetting

是否禁用字体设置(有些动态来源的文本内容,如微信昵称,无法切割字体,需要禁用掉组件面板上的字体设置)

boolean | undefined

anchorsType

编辑状态锚点的类型:为空则表示没有锚点,不能改变大小

'nw n ne e se s sw w' 代表组件编辑框的8个锚点

string | undefined

hiddenWhenNoNickname

当获取不到微信昵称时,是否隐藏默认文字(仅对微信昵称元素有效)

boolean | undefined


2、元素私有配置信息
元素名称枚举

import ElementTypes from "@fe-plugin/components/lib/constants/element-types";

元素名称元素私有配置

按钮

ElementTypes.BTN


属性说明类型

btnType

按钮类型,文本按钮,图片按钮"text" | "image"
label按钮名称(文本按钮)string

normalImage

按钮静态图片(图片按钮)string

activeImage

按钮激活状态图片(图片按钮)string

defaultNormalImage

按钮静态默认图片(图片按钮)string

defaultActiveImage

按钮激活状态默认图片(图片按钮)

string

文本

ElementTypes.TEXT

属性说明类型
text文本文字string

innerText

纯文本内容

此值是剥离html标签后的纯文本内容

(将div和p标签对解析为\n换行,br标签也解析为\n换行)

string

isRichText

是否是富文本

boolean

图片

ElementTypes.IMAGE

属性说明类型
src图片地址string

形状

ElementTypes.SHAPE

属性说明类型
src

矢量形状资源地址

string

paths

SVG路径

string[]

fills

SVG填充颜色

string[]

弹窗

ElementTypes.DIAGLOG

暂无私有属性

表单文件上上传

ElementTypes.FILEUPLOADER

属性说明类型
label

表单元素可见标签文本

string
required是否是必填项boolean

tips

提示文案

string

maxSize

上传文件大小最大限制number

maxCount

上传文件个数最大限制number

fileType

上传文件类型

"IMAGE" | "MUSIC" | "VIDEO" | "FILE"

表单文本域

ElementTypes.TEXTAREA

属性说明类型
label

表单元素可见标签文本

string
required是否是必填项boolean

tips

提示文案

string

maxLength

文本最大长度number

value

文本值string

表单单选

ElementTypes.CHOOSE

属性说明类型
label

表单元素可见标签文本

string

表单输入框

ElementTypes.INPUT

属性说明类型
label

表单元素可见标签文本

string
required是否是必填项boolean

tips

提示文案

string

maxLength

文本最大长度number

value

文本值string
inputType文本类型

"text" | "name" | "tel" | "email" | "verify"

name-姓名

tel-手机

email-邮箱

text-普通文本

verify-手机短信验证

isDisableInputTypeToggle

isDisableInputTypeToggle

boolean

表单提交

ElementTypes.SUBMIT

属性说明类型
label

表单元素可见标签文本

string

表单下拉框

ElementTypes.SELECT

属性说明类型
label

表单元素可见标签文本

string


2、element 配置示例


element配置
//file =  app/default-setting/element.js


import * as ELEMENT from "constants/element-keys";
import ElementTypes from "@fe-plugin/components/lib/constants/element-types";


//导出一个包含按钮元素、图片元素的配置
export default [
{
    key: ELEMENT.BTN_A,
    name: "这是组件中的按钮",
    type: ElementTypes.BTN,
    label: "非常好",
    style: {
      position: "absolute",
      left: 42,
      top: 353,
      width: 235,
      height: 39,
      backgroundColor: "rgba(224,47,36,1)",
      borderRadius: 20,
      fontSize: 15,
      fontWeight: 600,
      color: "rgba(255,255,255,1)",
    },
    parentName: "组件名称",
  },
  {
    key: ELEMENT.IMAGE_A,
    name: "测试图片",
    type: ElementTypes.IMAGE,
    text: "测试图片",
    style: {
      position: "absolute",
      left: 75,
      top: 123,
      width: 169,
      height: 145,
    },
    parentName: "组件名称",
    src: "https://static.h5no1.com/rp/plugin/assets/484a0326-0091-433c-8133-d5989b7b588d",
  },
]


1、ComponentDefaultSetting  默认设置

属性

说明

类型

name

组件英文名,唯一

string

title

组件中文描述

string

cover

组件封面图

string

style

组件自身的样式

Object | undefined

inlinePages

组件内置页列表

ComponentInlinePage[]

elements

组件内部可编辑元素列表,能够被编辑器识别的原子组件

ComponentElementModel[]

hasComponentSetting

组件是否有需要在编辑器右侧设置面板中加载的 setting 配置

boolean | undefined

componentBgVisible

组件是否支持隐藏背景,当为false时才隐藏背景,undefined不隐藏

boolean | undefined

isDisableClientRect

是否可以设置宽高(编辑器会禁止自适应宽高)

boolean | undefined


3、BaseCmp 可编辑元素设置


4、ComponentInlinePage 内置页设置

元素

说明

类型

name

内置页英文名

string

title

内置页标题

string

cover

内置页封面图

string

style

内置页样式

Object | undefined

anchorsType

编辑状态锚点的类型:为空则表示没有锚点,不能改变大小

'nw n ne e se s sw w' 代表组件编辑框的8个锚点

string | undefined

height

内置页高度

number | undefined

1、上下文

概述:

染模块中会有对应的render方法将组件逻辑渲染出来,最终注册到编辑器、渲染引擎使用。但组件的构建需要依赖default-setting、用户信息等数据支持,所以在构建组件之前需要创建一个上下文,提供此类数据给组件使用。

1、DependencyContext 上下文

上下文创建说明
DependencyContextReact.createContext组件配置上下文

注意:

DependencyContext只能提供给template、setting模块相关组件使用(main模块为PReact构建,所以无法正常调用)。


template模块中,还需要对可编辑组件,和可编辑元素进行对应的上下文注入。


2、withDependencyContext  高阶组件

main模块使用withDependencyContext方法进行上下文关联

3、示例

1、上下文的注入可查看各个模块创建详细示例,

点击查看template模块创建

点击查看setting模块创建

点击查看main模块创建

2、组件中上下文的获取可查看各个模块组件创建详细示例

点击查看template组件创建

点击查看setting组件创建

点击查看main组件创建

2、main模块

main模块负责组件H5端的渲染。

1、CompoentMainModule基础类

提供模块加载渲染的基础方法。

属性说明
config组件配置信息
方法说明
static getVisible静态方法,返回此组件是否可见
parseConfig 解析基础配置
render组件渲染

destroy

组件销毁


2、MainModule模块类

main模块类的创建需继承CompoentMainModule,并提供render方法进行渲染。

3、registryComponentMain方法

将模块注册到渲染引擎,提供调用。

4、withDependencyContext 

使用此方法关联模块上下文,使模块中组件能够获取到上下文环境(上下文)。

5、代码示例:


main 模块
import {
  ComponentMainModule,
  registryComponentMain,
} from "@fe-plugin/common/lib/component-main";
// main模块创建
class MainModule extends CompoentMainModule {
  //返回值可控制组件是否可见(不提供此方法组件默认显示)
  static async getVisible(config) {
    return true;
  }

  //解析配置(不提供此方法配置解析为初始化设置)
  parseConfig(data) {
    const config = super.parseConfig(data);
    //在此可对默认配置进行额外操作
    return config;
  }

  // 渲染组件
  render() {
    super.render();
    //直接使用config配置
    console.log(this.config);
    //进行渲染
  }
}

//将渲染的组件登录到编辑器
export default registryComponentMain("组件名称", MainModule);

3、template模块

template模块负责组件在编辑器舞台中的渲染。

1、ComponentTemplateModule基础类

提供模块加载渲染的基础方法。

属性说明
config组件配置信息
方法说明
parseConfig 解析基础配置
render组件渲染调用

update

组件更新调用

updateElement

元素更新调用

destroy

组件销毁调用

2、TemplateModule模块类

类的创建的需继承ComponentTemplateModule,并提供render方法进行渲染。

注意:TemplateModule模块类中必须提供 getDefaultSetting 静态方法,否则编辑器无法获取配置(详看示例)。

3、registryComponentTemplate方法

将模块注册到编辑器,提供调用。

4、DependencyContext上下文

关联模块上下文,使模块中组件能够获取到上下文环境(点击跳转上下文介绍)。

5、组件的上下文注入

使用DependencyContext可编辑组件和可编辑元素进行对应的上下文注入。

main 模块
import {
  ComponentTemplateModule,
  registryComponentTemplate,
} from "@fe-plugin/common/lib/component-template";
import { createModel } from "@fe-plugin/components/lib/templates/models";
import defaultSetting from "app/default-setting";


//创建模块
class TemplateModule extends ComponentTemplateModule {
  // 获取配置(必须提供此静态方法,否则编辑器无法获取到配置)
  // 编辑器在加载组件的时候会调用此方法
  static getDefaultSetting() {
    const data = {
      ...defaultSetting,
      elements: [],
    };
    defaultSetting.elements.forEach((el) => {
      const model = createModel(el.type, el);
      data.elements.push(model);
    });
    return data;
  }

  //解析配置(不提供此方法则返回默认配置)
  parseConfig(data) {
    const config = super.parseConfig(data);
    //在此可对默认配置进行额外操作
    return config;
  }

  // 创建渲染 入口
  render() {
    super.render();
    // 使用config
    console.log(this.config);
    //进行渲染
  }
}

export default registryComponentTemplate("组件名称", TemplateModule);


3、setting模块

template模块负责组件在编辑器舞台中的渲染。

1、ComponentSettingModule基础类

提供模块加载渲染的基础方法。

属性说明
config组件配置信息

formValue

表单数据

formPass

是否通过校验

方法说明
parseConfig 解析基础配置

initializeStore

初始化 store ,给该组件提供数据源

render玩法配置渲染,编辑器中央区域玩法配置(暂时不开放)

renderCmp

组件配置渲染,编辑器右侧组件配置

validate

校验方法

destroy

组件销毁

2、SettingModule模块类

类的创建的需继承ComponentSettingModule,并提供renderCmp方法进行渲染。

3、registryComponentSetting方法

将模块注册到编辑器,提供调用。

4、DependencyContext上下文

关联模块上下文,使模块中组件能够获取到上下文环境(点击跳转上下文介绍)。

main 模块
import {
  ComponentSettingModule,
  registryComponentSetting,
} from "@fe-plugin/common/lib/component-setting";

//setting模块创建
class SettingModule extends ComponentSettingModule {
  //解析配置(不提供此方法则返回默认配置)
  parseConfig(data) {
    const config = super.parseConfig(data);
    //在此可对默认配置进行额外操作
    return config;
  }

  // 渲染编辑器右侧组件设置面板
  renderCmp(container, componentInfo, onChange) {
    super.renderCmp(container, componentInfo, onChange);
    //进行渲染
  }

  // 校验设置是否通过(不提供此方法默认校验通过)
  validate() {
    this.setShowValidErr();
    if (!this.formPass) return false;
    const componentInfo = getComponentInfo(this.config);
    // 同步组件setting里的配置,在编辑器中再次打开设置弹窗的时候,可以直接回显
    this.config.set("componentInfo.props", this.formValue);
    return { ...componentInfo, props: this.formValue };
  }
}

//进行设置 注册
export default registryComponentSetting("组件名称", SettingModule);



  • 无标签