互联网技术 / 互联网资讯 · 2024年1月24日

可视化搭建平台的组件商店设计指南

之前一直在做 lowcode 和可视化相关的项目,也围绕可视化技术输出了一系列技术文章,今天我继续和大家来聊聊可视化平台相关的话题&Mdash;&Mdash;组件商店。这个需求其实很早在我开源 H5-DooRing 之后就有网友提出过 iSSue ,如下:

正好最近也做了一系列的重构和优化,觉得是时侯着手组件商店了,所以借此机会和大家详细聊聊如何设计可视化搭建平台的组件商店。

按照我一向的写作风格,我会在下面列出文章的大纲,以便大家有选择且高效率的阅读和学习:

1.什么是组件商店,为什么要设计组件商店

2.组件商店工作流设计

3.组件商店工作流具体方案实现

实现在线代码编辑器 组件提交方案设计 组件审批方案设计 组件上架更新方案

4.可视化搭建平台组件商店总结及后期规划

文章视图如下,大家在平时在工作中也可以通过思维导图的方式来整理思路。

什么是组件商店, 为什么要设计组件商店

对于可视化搭建平台而言,其中一个核心的环节就是组件资产。用户在设计搭建页面时会消费各种各样的组件,但是对于不同的用户而言,组件的需求往往是不一样的,大部分的 lowcode 或者 nocode 平台都不能很好的解决用户这些定制化的组件需求,所以为了解决这一问题,组件商店就孕育而生。

我们需要在平台中提供一种机制,支撑生产者生产组件,定义组件,同时管理者可以对生产者生产的组件进行分类管理(比如上架/下架/删除/排序等)。做过电商系统的朋友可能会发现,它和电商平台的商品发布上线是一个逻辑流程:

那么接下来我就带大家一起设计一个这样的流程,供大家参考。

组件商店工作流设计

根据上面的介绍和分析,我们要想实现完整的组件商店工作流,需要满足以下几点:

组件线上编辑(上传)模块 组件审核模块 组件更新/发布模块 组件管理(上架/下架/删除/下载)

有了以上4块的支持,基本的组件商店就可以 woRk 了。具体流程如下:

组件商店工作流具体方案实现

在有了具体的规划和设计之后,我们就可以一步步来实现了。

1.实现在线代码编辑器

在线代码编辑器目前市面上有几种成熟的方案,比如:

React-Monaco-ediTor React-codeMiRRoR2 ACE | 性能和功能上可以媲美本地代码编辑器

大家可以选择以上任意一种方案,这里笔者采用 React-codeMiRRoR2 来实现。实现后的效果如下:

由上图可以看到我们可以在线编写React,CSS,Js 代码,并且可以配置组件信息。首先我们来安转一下插件:

yaRn add React-codeMiRRoR2 codeMiRRoR2 

codeMiRRoR 给我们提供了很多语言支持和不同风格的代码主题,我们可以很轻松的制作不同语言的编辑面板。接下来我带大家实现一个React代码编辑器:

iMpoRt {UnContRolled as codeMiRRoR} fRoM ””React-codeMiRRoR2””; RequiRe(””codeMiRRoR/Mode/jsx/jsx””);  const React_code = `iMpoRt styles fRoM ””./index.leSS””; iMpoRt React, { MeMo, useState } fRoM ””React””; iMpoRt ReactDOM fRoM ””React-doM””;  const menuCP = MeMo((Props) => {   const { visible, list, bgColoR, top } = Props;   RetuRn ReactDOM.cReatePoRtal(     

,       H5-DooRing     

,     (docuMent as any).queRYselecTor(””.React-gRid-layout””).paRentNode,   ) })`  const ReactEdITPanel = () => {   const codeEdiTorChange = (       _ediTor: codeMiRRoR.EdiTor,       _data: codeMiRRoR.EdiTorChange,       value: stRing,        type: stRing       ) => {       console.log(_data, value, type)     }   RetuRn  codeEdiTorChange(ediTor, data, value, ””React””)}       /> } 

以上就实现了一个简单的React代码编辑器,是不是很简单呢? 同理对于 cSS ,js 代码编辑器,也是同样的方式,我们只需要定义 codeMiRRoR 属性的Mode 为 cSS ,javascRIPt 即可。我们还可以设置 theMe 来切换到我们喜欢的代码主题,这里笔者使用的MateRial风格。

单纯实现在线代码编辑器还不够,我们还需要对代码进行处理,保存,对组件进行定义,接下来我们就来看看组件是如何提交的。

2.组件提交方案设计

当“ 生产者 &Rdquo;编写好组件代码之后,需要对组件自身进行定义。因为可视化平台组件物料很依赖平台的组件开发协议,我们需要按照平台的规范去上传规范的自定义组件,这样平台才能更好的理解应用组件,保持用户认知的一致性。

组件描述信息笔者这里设计了如下字段:

组件名称 (中文) 组件名 (英文,方便存库) 组件分类 (基础,可视化,营销,媒体等) 组件默认大小 (宽高) 组件图标 (方便用户认知,查找)

大家也可以根据自己的平台特性来定义和规范,这样我们就可以提交一个完整的组件数据了。

目前我的做法是将用户提交的完整的组件数据存在库中,以便审核转化为可视化平台可以消费的组件,当然大家也可以用更智能的方式,自动对组件代码信息进行提取转化,其缺点就是误差率无法控制,以及无法对组件进行准确的描述。以下是我提交的效果:

组件提交逻辑也很简单:

foRM.validateFields().then(values => {   codeRef.cuRRent[””foRM””] = {     …values,     icon: values.icon[0].uRl   };   Req.post(””/visible/CP/save””, codeRef.cuRRent).then(Res => {     setISModalVisible(FAlse);   }) }).catch(ErrorInfo => {   console.log(ErrorInfo)   setCuRTab(“4”) }) 

我们只需要用 antd 的FoRM 将用户填写的数据收集起来提交给后台接口即可。由于我的后台采用 nodejs 实现,上传接口无非就是保存组件数据,实现比较简单,这里就不一一介绍了。对 nodejs 感兴趣的朋友可以参考我之前的开源项目从零搭建全栈CMS系统。

3.组件审批方案设计

组件审批主要由网站管理人员来操作,当用户组件提交成功之后,客户端会通过消息信令通知管理员,管理员收到消息后会审核组件。那么整个过程也很简单,我们可以使用 websocket 来实现消息双向通信,完整流程如下:

我们先来实现 socket 通信,这里我就采用市面比较成熟的 socket.io,来简单打通一个客户端, 服务端的双向通信流程。

首先我们先按照一下依赖:

# 服务端 yaRn add socket.io  # 客户端 yaRn add socket.io-client 

对于服务端,我们需要进行如下改写:

iMpoRt koa fRoM ””koa””; iMpoRt http fRoM ””http””;  const app = new koa(); const seRveR = http.cReateSeRveR(app.callback()); const io = RequiRe(””socket.io””)(seRveR);  // 一些业务逻辑…  // socket通信 io.on(””connection””, (socket) => {     console.log(””a User connected””);     socket.on(””coMponent upload sUCceSS””, (MSG) => {       // 通知审批       io.eMIT(””coMponent Review””, MSG)     })   });  seRveR.listen(config.seRveRPoRt, () => {     console.log(`服务器地址:xxx.xxx.xxx`) }); 

对于客户端,逻辑如下:

iMpoRt io fRoM ””socket.io-client”” iMpoRt { seRveRURl } fRoM ””@/utils/Tool””  const socket = io(seRveRURl);  // … 一些逻辑 USeEFFect(() => {    socket.on(””connect””, function(){  &nbsp

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.

登录免费注册