跳到主要内容

前面板开发(suanpan-javascript-sdk)

提示: 1.入门文档:https://grapesjs.com/docs/ 2.index.html 是 demo 代码。并不会打包到线上。

前面板组件模板工程:https://github.com/sheldonwr/suanpan-frontpanel-plugin-open clone 该工程,进行本地编辑

新建一个组件

所有的组件代码都放到 src\dashboard\plugins\blocks 目录下。根据组件所属的分类,放到对应的目录下面。 例) echarts*->图表, text*->显示文本,..... 以新建一个 line-chart 组件为例。参考 src\dashboard\plugins\blocks\echarts\LineChart.js 1)在对应的文件夹下的 index 文件中引入组件文件(src\dashboard\plugins\blocks\echarts\index.js)。 2)LineChart.js 文件解析 -name -> 常量定义在 src\dashboard\plugins\common\constants\index.js 文件中

viewTemplate()

定义组件的 html 模板

viewStyle()

定义组件和组件内部的 css 式样

blockOptions()

定义编辑器左侧组件显示式样

spOptions()

定义后面板组件的属性

1)inPorts 和 outPorts 是输入桩和输出桩。如果组件需要多个输入桩和输出桩时,需要添加对应的 port

componentOptions()

设置组件的属性

1.常用设置:

resizable -> 常用 true, false: 不能手动在画布上调整组件的大小

  • childrenSelectable -> 默认 true。false:画布上不能选中组件的子元素,可以在层级选择器子元素进行编辑
  • disableChildEdit -> 默认 false,可不设置。true: 不能编辑子元素,层级选择器也不显示子元素
  • childrenStatic -> 默认 false,可不设置。true: 组件内的所有子元素都是 static 定位
  • isFormItem -> 默认 false,可不设置。所有的表单元素,需要设置为 true

2.traits: [] 说明,traits 中定义组件的自定义属性

【trait 的 type】

1)grapejs 的内置类型:

  • input:默认类型,输入框
  • number:数字
  • checkbox:选择框
  • color:颜色选择器
  • button: 按钮
  • select: 下拉列表

2)自定义 trait 类型:

自定义的 trait 类型放在 src\dashboard\plugins\common\traits 目录中。

自定义的 trait 类型需要在 src\dashboard\plugins\blocks\index.js 文件中引入。

【trait 共通规约】

No属性名格式示例
1颜色color#FFFFFF

rgba(0,0,0,1) rgb(0,0,0) | | 2 | 色系 | ","分割的字符串 | #FFFFFF,#dddddd | | 3 | 字体大小 | number | 数值 | | 4 | 图片组 | “|”分割的字符串 | | | 5 | 渐变色 | | #59B5FF #2263BD::#FF9793 #E7504C::#AE60FA
#6D32C1::#EFCE49 #D79C12::#FFB058 #C56625::#4ACC88 #27A657::#2C989E #27BCC9::#8A98FF #2B36A8 |

3.定义各个 trait 的初始值:

onModelScript()

用于渲染组件

1.传参方式 const dataSource = '{[ dataSource ]}';  ->使用  '{[ XXX ]}'格式取 model 的值。

注意向这个方法中传值只能通过这种方式。如果想要传入一个变量,可以在 onViewInit()方法中给 model 塞值。具体可以参考 src\dashboard\plugins\blocks\text\Weather.js 文件。

2.数据交互

  • 实现原理:使用 socket 发布和注册事件
  • eventName 固定为 【call-组件 id】 不可变更。

  • 发布事件。将交互数据发到 spOptions 定义的相应的输出桩

  • 注册事件。从 spOptions 定义的相应的输入桩接收数据进行数据刷新。

onViewInit()

用于进行组件初始化处理,事件绑定

1.基本事件绑定。

所有的 trait 都需要绑定 change 事件,用来变更 trait 的设置值后立即刷新组件。

2.特殊事件绑定

实现一个可以上传图片的 trait,参考 src\dashboard\plugins\blocks\text\LedGroup.js

1)componentOptions()的 traits 中添加一个 trait,使用 command 触发一个自定义事件。

2)editor 绑定自定义事件,并进行 model 的数据处理。

组件相关功能设置

1.设置组件开发者

  • 式样:

  • 实现原理:

1)前面板显示开发者:在 traits 中的第一个位置添加一个开发者信息的 trait

2)后面板显示开发者:在 spOption 中添加一个开发者信息的 key。

组件类型 1:

在 spOptions 方法中添加 author 和 email 两个 key 即可。新增 trait 已经在 gpParse 文件中统一处理了。

组件类型 2:

步骤 1:在 traits 中的第一个位置添加作者的 trait: 类型为 authorInfo。

{
  name: 'authorInfo',  ->固定不变
 label: '开发者', ->固定不变
 type: 'authorInfo', ->固定不变
 author: '暴风雪宝',
 email: '823468528@qq.com'
}

步骤 2: 在 init 方法中的 def 中同样添加 author 和 email(用于后面板展示作者)

2.设置数据 tab 页

  • 式样:

  • 实现原理:添加一个 trait 去保存每个组件的默认数据
  • 实现方式: 1)数据类型是二维数组,数据中包含表头。

(参考 src\dashboard\plugins\blocks\text\List.js)

步骤:

a)traits 中添加一个隐藏的 trait:defaultData,类型是 hide (key 值固定,不可变更)

{
name: 'defaultData',
  changeProp: 1,
  type: 'hide'
}

b)设置 defaultData 的初始值:      

defaultData:JSON.stringify([
["id", "姓名", "性别", "年龄", "采集时间"],
["001", "李磊", "男", "12", "2020-01-02 14:28:36"],
["002", "王华", "女", "42", "2020-01-02 14:28:36"],
["003", "孙南", "男", "34", "2020-01-02 14:28:36"],
["004", "李明", "男", "12", "2020-01-02 14:28:36"],
["005", "孙华", "女", "42", "2020-01-02 14:28:36"],
["006", "苏如花", "男", "34", "2020-01-02 14:28:36"]
]).replace(/\"/g, "\\\""),  ->这里要转换一下"引号""斜杠引号"。不然打包到线上之后会报错

c)onModelScript 方法中取 model 中的值来作为初始数据渲染组件:

const defaultData = JSON.parse('{[ defaultData ]}'.replace(/\\"/g, "\"")); ->这里取回的值同样要还原"斜杠引号"为"引号"

d)onViewInit 方法中设置 change: defaultData 的监听事件。

2)数据类型是二维数组,数据中不包含表头。

(参考 src\dashboard\plugins\blocks\echarts\mapHeatmapChart.js) defaultData 的配置同上。额外再添加 defaultDataConfig 的 trait。

a)traits 中添加隐藏的 trait: defaultDataConfig

{
name: 'defaultDataSetting',
changeProp: 1,
type: 'hide'
}

b)设置 defaultDataConfig 的初始值:

'defaultDataConfig': JSON.stringify({
 dataIncludeHeader: false,    ->表示数据中不包含表头
 tableColumns: [   -> 设置显示的默认表头和数据类型。(type 默认都是 string,目前只支持定义为 number)
   {title: "经度", type: "number"},
   {title: "纬度", type: "number"},
   {title: "区域编号", type: "number"},
   {title: "区域颜色", type: "number"}
 ]
}).replace(/\"/g, "\\\"")

c) defaultDataConfig 只用来控制数据 tab 页的显示,不用来渲染组件。onModelScript 方法和 onViewInit 方法不需要处理。

3)数据类型是 hash 的数组。 (参考 src\dashboard\plugins\blocks\echarts\mapOfflineMeteorology.js) 处理方式同【1)数据类型是二维数组,数据中包含表头】,只有初始值格式不同。

defaultData 的初始值格式如下:

'defaultData':JSON.stringify([
  {"longitude":116.23128, "latitude":40.22077, "category": "A" },
 {"longitude":121.48941, "latitude":31.40527, "category": "A" },
 {"longitude":113.27324, "latitude":23.15792, "category": "A" },
 {"longitude":91.13775, "latitude":29.65262, "category": "B" },
 {"longitude":109.96144, "latitude":39.82127, "category": "B" },
 {"longitude":120.27324, "latitude":23.15792, "category": "B" }
]).replace(/\"/g, "\\\"")