在线赌币机 如何设计可视化搭建平台的组件商店?

之前不息在做 lowcode 和可视化有关的项现在,也围绕可视化技术输出了一系列技术文章,今天吾不息和行家来聊聊可视化平台有关的话题——组件商店。这个需求其实很早在吾开源 H5-Dooring 之后就有网友挑出过 issue ,如下:

广西新闻网宜州8月15日讯(通讯员 邓小温)近段时间以来,河池市宜州区结合党史学习教育,大力宣传学习张桂梅、黄文秀等“七一勋章”获得者的感人事迹和崇高品德,创新学习方式,学好用活先进典型,使广大党员干部群众学有榜样、行有示范、赶有目标,让党史学习教育接地气、见实效。

开栏语:习近平总书记强调:“网民来自老百姓,老百姓上了网,民意也就上了网。群众在哪儿,我们的领导干部就要到哪儿去。各级党政机关和领导干部要学会通过网络走群众路线,经常上网看看,了解群众所思所愿,收集好想法好建议,积极回应网民关切、解疑释惑。”广西新闻网红豆社区推出独家专栏——《问政广西》,旨在构建网民与政府职能部门的沟通桥梁,促进双方良性互动对话,传播正能量,共画网上网下同心圆。

消防员前往救援。广西新闻网通讯员 黄明发 摄

企沙渔港。广西新闻网通讯员 韦湘 摄

广西新闻网南宁8月16日讯(记者 李冠宏 通讯员 吕丹 姚琳)为什么要开展“二码”联查工作?未接种疫苗是否不能进入公共场所?哪些情况下不能接种新冠疫苗?第二针为什么预约困难?8月16日下午,由自治区疾病预防控制中心免疫规划所副所长、主任医师邓秋云,向大家介绍近期广西疫苗接种情况以及大众关心的诸多问题。

恰恰近来也做了一系列的重议和优化,觉得是时侯着手组件商店了,因此借此机会和行家详细聊聊如何设计可视化搭建平台的组件商店。

依照吾一向的写作风格,吾会在下面列出文章的大纲,以便行家有选择且高效率的浏览和学习:

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(     <div className={styles.menuWrap} style={{display: visible ? 'block' : 'none', backgroundColor: bgColor, top: (top + 6) + 'px'}}>       H5-Dooring     </div>,     (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 <CodeMirror           value={react_code}           className={styles.codeWrap}           options={{               mode: 'jsx',               theme: 'material',               lineNumbers: true           }}           onChange={(editor, data, value) => codeEditorChange(editor, data, value, 'react')}       /> } 

以上就实现了一个浅易的React代码编辑器,是不是很浅易呢? 同理对于 css ,js 代码编辑器,也是同样的手段,吾们只必要定义 CodeMirror 属性的mode 为 css ,javascript 即可。吾们还能够竖立 theme 来切换到吾们爱的代码主题,这边笔者行使的material风格。

单纯实现在线代码编辑器还不足,吾们还必要对代码进走处理,保存,对组件进走定义,接下来吾们就来望望组件是如何挑交的。

2.组件挑交方案设计

当“ 创造者 ”编写好组件代码之后,必要对组件自身进走定义。由于可视化平台组件物料很倚赖平台的组件开发制定,吾们必要依照平台的规范去上传规范的自定义组件,如许平台才能更好的理解行使组件,保持用户认知的相反性。

组件描述新闻笔者这边设计了如下字段:

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

行家也能够根据本身的平台特性来定义和规范,如许吾们就能够挑交一个完善的组件数据了。

现在吾的做法是将用户挑交的完善的组件数据存在库中,以便审核转化为可视化平台能够消耗的组件,自然行家也能够用更智能的手段,自动对组件代码新闻进走挑取转化,其弱点就是偏差率无法限制,以及无法对组件进走实在的描述。以下是吾挑交的奏效:

组件挑交逻辑也很浅易:

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(){      console.log('connect')    });    socket.on('htmlWorked', function(data){      const { result, message } = data      if(result !== 'error') {        // ...      }else {        // ...      }          });    socket.on('disconnect', function(e){      console.log('disconnect', e)    });  }, []) 

经过以上的实现手段客户端和服务端就能够随时进走通信了。接下来吾们望望审批的奏效:

用户在 H5-Dooring 平台挑交的组件都会流入管理后台,管理员能够对组件进走审阅以及下载源码等操作。审批同样会用到 codemirror 这个库,主要是将存到数据库的字符串代码进走回显。自然还能够实现线上预览组件上线后的奏效,这块行家感有趣的能够本身尝试一下实现方案,原理也很浅易。吾们来望望审批的演示:

4. 组件上架更新方案

组件上架的方案也有许多,比如能够手动上架更新,也能够用程序自动化的完善。那么这边吾介绍一下吾的线上自动化上架的方案,这边照样必要借助上面介绍的 socket.io 和 nodejs。原理大致如下:

完善的流程就是平台管理员对组件审批经过之后,会自动用 socket 向服务端发送审批经过信号,服务器会对组件数据进走解析,写入对答类别下的组件库里(也就是组件入库),并将组件新闻元写入到编辑器基座,此时为了更新基座拿到最新的奏效,必要 nodejs 解析构建指令线上打包基座,基座更新完之后会用 socket 发送新闻给 H5-Dooring,告诉用户组件库已更新,挑示用户是否刷新组件列外,至此,一个完善的组件上架更新流程就完善了。这边吾们实现一下如何线上打包编辑器基座。

最先吾们必要对 nodejs 的父子进程有必定的晓畅,比如 child_process。吾会行使child_process 的 exec 实现解析并实走命令走指令,倘若行家对 nodejs 的父子进程不太熟识,也能够参考吾之前的文章 基于NodeJS从零构建线上自动化打包做事流。

由于整个过程必要自动化的去处理,不克像吾们之前打包项现在相通,手动实走 npm run build 或者 yarn build 。吾们必要程序自动帮吾们实走这个命令走指令,详细方案如下:

import { exec } from 'child_process' const outWorkDir = resolve(__dirname, '../h5_base_frame') const fid = uuid(8, 16) const cmdStr = `cd ${outWorkDir} && yarn build ${fid}`  router.post(api.generalConfig,     auth,     ctx => {       // ...       exec(cmdStr, function(err, stdout, stderr){        if(err) {          console.log('api error:'+stderr);          io.emit('htmlWorked', { result: 'error', message: stderr })        } else {          io.emit('component update success', { result: 'success', message: 'xxxx' })        }       })       // ...     } ); 

经过以上的手段,吾们就能够线上打包更新吾们的项现在基座,并植入任何参数,倘若必要动态写入文件,吾们只必要用 fs 模块处理即可,经过如许的线上做事流,吾们还能够实现更复杂的逻辑,甚至实现一个幼型的前端CI做事流。那么行家倘若有更优雅更好的方案,也是能够随时在评论区交流。

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

以上一切的设计方案实现都是基于实际需求来设计的,自然还有许多细节必要处理和优化,随着需乞降,营业的复杂,后期还会做组件统计,组件数据分析,组件监控等能力,行家也能够参考以上的设计方案,设计本身的组件商店。

倘若行家对可视化搭建或者矮代码/零代码感有趣, 也能够参考吾去期的文章或者在评论区交流你的思想和心得。

本文转载自微信公多号「趣谈前端」,能够经过以下二维码关注。转载本文请有关趣谈前端公多号。

【编辑选举】在线赌币机

一文彻底搞懂EventBus3.0事件总线框架原理 盘点Python基础之条件语句 挑高数据库坦然性的十一项技术 Windows 亲生的 Linux 子体系 熊猫烧香之后15年,网络变坦然了吗?