基于 vue+JsPlumb 实现大数据流水线拓展流程工作台(vue-flow-topology)

Vue Flow Topology是一个用于创建和编辑大数据流水线的前端Demo,可独立使用或嵌入Vue项目。它提供了丰富的功能,如画布操作、节点与连线管理、属性设置及导入导出等。用户可以预览在线示例并快速开始使用。项目源码托管在GitHub和Gitee上,支持npm安装。
摘要由CSDN通过智能技术生成

介绍

vue-flow-topology 可以看做是一个独立的 Vue 项目(大数据流水线拓展流程工作台)纯前端Demo(通过JSON与后端交互),也可以嵌入到其他vue项目中使用,新版会作为优先版本持续迭代。

特性

  • 支持画布重绘、拖拽、放大、缩小功能
  • 支持鼠标滚轮缩放画布功能
  • 支持拖拽、添加、删除节点功能
  • 支持不同连线类型进行关联节点功能
  • 支持删除连线、重绘连线功能
  • 支持点击画布设置属性功能
  • 支持点击节点设置属性功能
  • 支持点击线进行设置属性功能
  • 支持导入、导出指定数据文件功能
  • 支持复制、粘贴节点功能

在线预览

1、预览地址 (master):http://flow.zhenglinglu.cn

2、预览地址(simple):http://flow.zhenglinglu.cn/simple.html

快速使用

# 克隆项目
git clone https://github.com/zlluGitHub/vue-flow-topology.git

# 进入项目目录
cd vue-flow-topology

# 安装依赖
npm install

# 启动服务
npm run dev

项目地址

致谢

如果本文对您有帮助,可以多多点赞,这样使我更有动力写出更多更好的文章!"ヾ(◍°∇°◍)ノ゙

实现完整的流程图,您可以使用以下技术和工具: 1. Vue 3:Vue 3 是一个优秀的 JavaScript 框架,可以使您的应用程序更加可维护和易于开发。它具有响应式数据绑定、组件化开发、虚拟 DOM 等特性。 2. Vite:Vite 是一个快速的开发工具,可帮助您更快地构建 Web 应用程序。它可以快速地启动开发服务器,支持热模块替换和快速构建。 3. Element Plus:Element Plus 是一组基于 Vue 3 的 UI 组件库,可以帮助您快速构建漂亮的界面。 4. JsplumbJsplumb 是一个流程图库,可以帮助您构建复杂的流程图。它支持拖放、连接线、锚点等功能。 5. Pinia:Pinia 是一个简单、灵活和可扩展的状态管理库,可以帮助您管理应用程序的状态。 6. Sortable:Sortable 是一个 JavaScript 库,可以使您的列表可排序。它支持拖放、滑动等功能。 下面是一个简单的示例,演示如何使用这些技术和工具来构建一个完整的流程图: 1. 首先,您需要安装 Vite,可以使用以下命令: ``` npm install -g vite ``` 2. 创建一个新的 Vue 3 项目,可以使用以下命令: ``` npm init vite-app my-project ``` 3. 安装 Element Plus、Jsplumb、Pinia 和 Sortable,可以使用以下命令: ``` npm install element-plus jsplumb pinia sortable ``` 4. 在 App.vue 文件中,添加一个包含 jsplumb 实例的 div 元素: ```vue <template> <div id="app"> <div id="jsplumb"></div> </div> </template> ``` 5. 在 setup 方法中,创建一个 jsplumb 实例并将其挂载到 div 元素上: ```vue <script> import jsPlumb from 'jsplumb' export default { setup() { const jsplumbInstance = new jsPlumb.jsPlumb() jsplumbInstance.setContainer('jsplumb') return { jsplumbInstance, } }, } </script> ``` 6. 创建一个 Flowchart 组件,在其中添加一个包含 Sortable 列表的 div 元素: ```vue <template> <div class="flowchart"> <div class="flowchart-nodes" ref="nodes"> <div v-for="node in nodes" :key="node.id" class="flowchart-node"> {{ node.label }} </div> </div> <div class="flowchart-connections" ref="connections"></div> </div> </template> ``` 7. 在 setup 方法中,使用 Pinia 创建一个 store,用于管理节点和连接线的状态: ```vue <script> import { defineComponent } from 'vue' import { createPinia } from 'pinia' const store = createPinia() export default defineComponent({ setup() { store.state.nodes = [] store.state.connections = [] return { store, } }, }) </script> ``` 8. 在 mounted 方法中,使用 Sortable 初始化节点列表: ```vue <script> import { defineComponent, onMounted } from 'vue' import Sortable from 'sortablejs' // ... export default defineComponent({ setup() { // ... onMounted(() => { Sortable.create(nodes.value, { group: 'nodes', sort: true, animation: 150, onEnd: (evt) => { store.state.nodes.splice(evt.newIndex, 0, store.state.nodes.splice(evt.oldIndex, 1)[0]) }, }) }) return { // ... } }, }) </script> ``` 9. 创建一个 Node 组件,在其中添加一个包含节点内容的 div 元素: ```vue <template> <div class="node"> <div class="node-content"> <slot /> </div> </div> </template> ``` 10. 在 Flowchart 组件中,使用 Node 组件来渲染节点: ```vue <template> <div class="flowchart"> <div class="flowchart-nodes" ref="nodes"> <Node v-for="node in store.state.nodes" :key="node.id"> {{ node.label }} </Node> </div> <div class="flowchart-connections" ref="connections"></div> </div> </template> ``` 11. 创建一个 Connection 组件,在其中添加一个包含连接线的 div 元素: ```vue <template> <div class="connection"> <div class="connection-line" ref="line"></div> </div> </template> ``` 12. 在 Flowchart 组件中,使用 Connection 组件来渲染连接线: ```vue <template> <div class="flowchart"> <div class="flowchart-nodes" ref="nodes"> <Node v-for="node in store.state.nodes" :key="node.id"> {{ node.label }} </Node> </div> <div class="flowchart-connections" ref="connections"> <Connection v-for="connection in store.state.connections" :key="connection.id" /> </div> </div> </template> ``` 13. 在 setup 方法中,使用 jsplumb 实例初始化连接线: ```vue <script> import { defineComponent } from 'vue' import jsPlumb from 'jsplumb' // ... export default defineComponent({ setup() { // ... onMounted(() => { jsplumbInstance.ready(() => { store.watch( () => store.state.connections, () => { store.state.connections.forEach((connection) => { const sourceNode = jsplumbInstance.getEndpoints(connection.sourceNodeId)[0] const targetNode = jsplumbInstance.getEndpoints(connection.targetNodeId)[0] const jsplumbConnection = jsplumbInstance.connect({ source: sourceNode, target: targetNode, anchors: ['Right', 'Left'], endpoint: 'Blank', connector: ['Flowchart', { cornerRadius: 5 }], paintStyle: { stroke: '#5c5c5c', strokeWidth: 2, }, }) connection.id = jsplumbConnection.id }) }, { immediate: true } ) }) }) return { // ... } }, }) </script> ``` 14. 在 Node 组件上,使用 jsplumb 实例初始化可拖动和可连接的锚点: ```vue <script> import { defineComponent, onMounted } from 'vue' import jsPlumb from 'jsplumb' export default defineComponent({ setup(props, { slots }) { const endpoint = jsplumbInstance.addEndpoint(self.value, { anchor: ['Right', 'Left'], endpoint: 'Blank', connector: ['Flowchart', { cornerRadius: 5 }], paintStyle: { stroke: '#5c5c5c', strokeWidth: 2, }, isSource: true, isTarget: true, }) onMounted(() => { jsplumbInstance.draggable(self.value, { grid: [10, 10], }) }) return { endpoint, } }, }) </script> ``` 15. 在 Node 组件上,使用 jsplumb 实例监听锚点连接事件,并在连接时更新 store 中的连接线状态: ```vue <script> // ... export default defineComponent({ setup(props, { slots }) { // ... endpoint.bind('connection', (connection) => { const sourceNodeId = connection.sourceId.split('-')[1] const targetNodeId = connection.targetId.split('-')[1] store.state.connections.push({ id: null, sourceNodeId, targetNodeId, }) }) return { endpoint, } }, }) </script> ``` 通过以上步骤,您可以使用 Vite、Element Plus、Jsplumb、Pinia 和 Sortable 来构建一个完整的流程图应用程序。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值