Vue 使用 JSPlumb 绘制推拽流程图

jsPlumb是一个库,用于在网页上创建和管理元素间的连接,支持SVG和VML渲染。文章介绍了如何设置jsPlumb实例,使用NPM安装依赖,以及配置拖拽、可连接的端点和连接线样式。此外,还讨论了双击删除连接的功能和修改连接标签的方法。
摘要由CSDN通过智能技术生成

 

jsPlumb提供了一种可视化的连接web元素的方法,在浏览器种使用SVG,旧的版本(IE8↓)使用VML。

Setup

let plumbIns = jsPlumb.getInstance({ Container: "diagramContainer" })

this.plumbIns = plumbIns

  • NPM 安装 jquery jquery-ui jsplumb
  • npm install jquery jquery-ui jsplumb --save
  • import $ from "jquery"
    // 使用 jqueryUi resize  (css记得引入)
    import "jquery-ui/themes/base/resizable.css"
    import "jquery-ui/ui/widgets/resizable"
    // drag drop 功能
    import "jquery-ui/ui/widgets/draggable"
    import "jquery-ui/ui/widgets/droppable"
    // jsPlumb
    import { jsPlumb } from "jsplumb"
    
  • 多个jsPlumb 实例,注意在 mounted 生命周期内实例化
  • this Vue
  • 导入默认配置

plumbIns.importDefaults({ ConnectionsDetachable: false //默认情况下,垂直连接将可通过鼠标分离 })

  • 查阅Wiki写入默认配置

export const visoConfig = {}

// 基本连接线样式
visoConfig.connectorPaintStyle = {
  stroke: "#2E79F9",
  strokeWidth: 1,
  lineWidth: 2
}

// 鼠标悬浮在连接线上的样式
visoConfig.connectorHoverStyle = {
  strokeWidth: 2,
  strokeStyle: "#FFCB48"
}

visoConfig.baseStyle = {
  endpoint: [
    "Dot",
    {
      radius: 6,
      cssClass: "endpointcssClass"
    }
  ], // 端点的形状
  connectorStyle: visoConfig.connectorPaintStyle, // 连接线的颜色,大小样式
  connectorHoverStyle: visoConfig.connectorHoverStyle,
  paintStyle: {
    stroke: "#2E79F9",
    fill: "#ffffff",
    radius: 6,
    strokeWidth: 2
  }, // 端点的颜色样式  rgba(46, 121, 249,0.3)  #2E79F9
  hoverPaintStyle: {
    strokeWidth: 4
  },
  isSource: true, // 是否可以拖动(作为连线起点)
  connector: [
    "Flowchart",
    {
      gap: 0,
      coenerRadius: 0,
      alwaysRespectStubs: true,
      midpoint: 0.5
    }
  ], // 连接线的样式种类有[Bezier],[Flowchart],[StateMachine ],[Straight ]
  isTarget: true, // 是否可以放置(连线终点)
  maxConnections: -1, // 设置连接点最多可以连接几条线
  connectorOverlays: [
    [
      "Arrow",
      {
        location: 1,
        visible: true,
        width: 11,
        length: 11,
        direction: 1,
        id: "arrow_forwards"
      }
    ],
    [
      "Label",
      {
        location: 0.5,
        id: "arrowLabel",
        cssClass: "arrowLabel",
        events: {
          mouseover: function() {}
        }
      }
    ]
  ]
}
visoConfig.baseArchors = ["RightMiddle", "LeftMiddle"]

获取基础配置

 

javascript

复制代码

function getBaseNodeConfig(){ return Object.assign({}, visoConfig.baseStyle) }

让元素可以拖拽

  • containment 限制可拖拽的范围
 

bash

复制代码

plumbIns.draggable(id, { containment: "diagramContainer" })

为元素添加端点EndPoint

  • maxConnections 最大连接数
  • isSource 只可以被连接,不能连接对方
  • initDimensionNode只有一个端点的元素
  • initRootNode 拥有4个可链接的元素
 

arduino

复制代码

function initDimensionNode(id) { let config = this.getBaseNodeConfig() config.isSource = false config.maxConnections = 1 this.plumbIns.addEndpoint( id, { anchors: "Top", uuid: id + "-top" }, config ) }

 

arduino

复制代码

function initRootNode(id){ let config = this.getBaseNodeConfig() config.isTarget = false config.maxConnections = 4 this.plumbIns.addEndpoint( id, { anchors: "Bottom", uuid: id + "-bottom" }, config ) this.plumbIns.addEndpoint( id, { anchors: "Top", uuid: id + "-top" }, config ) this.plumbIns.addEndpoint( id, { anchors: "Right", uuid: id + "-right" }, config ) this.plumbIns.addEndpoint( id, { anchors: "Left", uuid: id + "-left" }, config ) }

双击删除连接

  • error 在vue种调用 detach 报错 is not function
 

javascript

复制代码

plumbIns.bind("dblclick", conn => { if (window.prompt("确定删除所点击的链接吗? 输入1确定") === "1") { plumbIns.deleteConnection(conn) } })

修改链接种的label

 

  • 利用css样式,切换label的class名称,更换连接的label显示
 

 

javascript

复制代码

plumbIns.bind("connection", connInfo => { // 展示弹窗 选择关系 this.showRelationModal() // console.log(connInfo.connection.getOverlay("arrowLabel")) connInfo.connection.getOverlay("arrowLabel").addClass("arrowcen") })

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue使用GoJS绘制流程图是很简单的。首先,你需要将GoJS库引入你的项目中。你可以通过npm安装GoJS,然后在你的Vue组件中引入它。 在你的组件的script标签中,首先你应该引入GoJS库: import * as go from 'gojs'; 然后,在Vue的生命周期钩子函数中,比如mounted函数中,使用GoJS创建一个图表: mounted() { const myDiagram = go.GraphObject.make(go.Diagram, 'myDiagramDiv'); // 创建一个布局 const layout = go.GraphObject.make(go.TreeLayout); // 将布局设置到图表上 myDiagram.layout = layout; ... } 上面的代码中,我们使用GoJS的make方法创建一个图表对象,并将它挂载到id为myDiagramDiv的DOM元素上。然后,我们创建一个布局对象并将其设置到图表上。你还可以根据需要自定义图表的样式和行为。 接下来,你可以使用GoJS的其他方法和属性来添加节点和链接,设置样式,添加事件等来绘制你的流程图。比如: const nodeDataArray = [ { key: 'Alpha', color: 'lightblue' }, { key: 'Gamma', color: 'lightgreen' }, { key: 'Beta', color: 'lightyellow' }, ]; // 添加节点 nodeDataArray.forEach(nodeData => { myDiagram.addNodeData(nodeData); }); // 添加链接 myDiagram.model.addLinkData({ from: 'Alpha', to: 'Beta' }); 在上面的代码中,我们使用GoJS的addNodeData方法来添加节点,并使用addLinkData方法来添加链接。你可以根据你的实际需求自定义节点和链接的数据和样式。 最后,在你的模板中,你可以使用一个DOM元素来放置你的图表: <template> <div id="myDiagramDiv" style="width:800px; height:600px;"></div> </template> 最后,通过一些Vue的工具方法,你可以在Vue组件中动态地操作图表,并将其与其他Vue组件进行交互。 总之,Vue和GoJS结合使用能够轻松地绘制流程图,并提供了丰富的功能和可定制性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值