vue使用jsplumb 流程图

这篇具有很好参考价值的文章主要介绍了vue使用jsplumb 流程图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 安装jsPlumb库:在Vue项目中使用npm或yarn安装jsPlumb库。

npm install jsplumb

  1. 创建一个Vue组件:创建一个Vue组件来容纳jsPlumb的功能和呈现。
<template>
  <div style="margin: 20px">
    <div style="margin: 20px">
      <el-button type="primary" size="mini" @click="clearCanvas()"
        >清除连线</el-button
      >
      <el-button type="primary" size="mini" @click="startCanvas()"
        >绘制</el-button
      >
    </div>
    <div class="liucFlex" id="flowContainer">
      <div class="left">
        <div
          @click="clickTitle(item)"
          class="boxLiu"
          v-for="(item, index) in aItem"
          :key="index"
        >
          <div class="word" :class="{ isClick: activeName == item.id }">
            <div><i class="el-icon-view iconRight"></i>{{ item.name }}</div>
            <div class="date">{{ item.date }}</div>
          </div>
          <div class="status" :class="item.status" :id="item.id"></div>
        </div>
      </div>
      <div class="right">
        <div
          class="boxLiu"
          @click="clickTitle(item)"
          v-for="(item, index) in bItem"
          :key="index"
        >
          <div class="status" :class="item.status" :id="item.id"></div>
          <div class="word" :class="{ isClick: activeName == item.id }">
            <div>{{ item.name }}<i class="el-icon-view iconRight"></i></div>
            <div class="date">{{ item.date }}</div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import { jsPlumb } from "jsplumb";

export default {
  name: "table4",
  props: {},
  components: {},
  data() {
    return {
      // status: 表示连接线状态;error:红色,success:绿色,info:灰色
      aItem: [
        {
          name: "a节点1",
          date: "2023-01-01 20:46",
          id: "1",
          status: "error",
        },
        {
          name: "a节点2",
          date: "2023-01-01 20:46",
          id: "2",
          status: "success",
        },
        {
          name: "a节点3",
          date: "2023-01-01 20:46",
          id: "3",
          status: "success",
        },
        {
          name: "a节点4",
          date: "2023-01-01 20:46",
          id: "4",
          status: "success",
        },
        {
          name: "a节点5",
          id: "5",
          status: "info",
        },
        {
          name: "a节点6",
          id: "6",
        },
        {
          name: "a节点7",
          date: "2023-01-01 20:46",
          id: "7",
          status: "success",
        },
      ],
      bItem: [
        {
          name: "b节点1",
          date: "2023-01-01 20:46",
          id: "11",
          status: "error",
        },
        {
          name: "b节点2",
          date: "2023-01-01 20:46",
          id: "12",
          status: "error",
        },
        {
          name: "b节点3",
          id: "13",
        },
        {
          name: "b节点4",
          date: "2023-01-01 20:46",
          id: "14",
          status: "success",
        },
        {
          name: "b节点5",
          date: "2023-01-01 20:46",
          id: "15",
          status: "success",
        },
        {
          name: "b节点6",
          id: "16",
        },
        {
          name: "b节点7",
          id: "17",
        },
      ],
      plumbIns: null, // 折线初始化的对象
      activeName: null, // 当前选中高亮的id
      // 步骤图的默认配置
      defaultConfig: {
        // 对应上述基本概念
        anchor: ["TopCenter",[0.5, 1, 0, 0]],
        connector: ["Flowchart", { cornerRadius: 0, width: 1, curviness: 50 }],
        endpoint: "Blank",
        // 添加样式
        paintStyle: { stroke: "#E0E3EA", strokeWidth: 1, curviness: 100 }, // connector
        // 添加 overlay,如箭头
        overlays: [["Arrow", { width: 5, length: 5, location: 1 }]], // overlay
      },
    };
  },
  computed: {},
  watch: {},
  created() {},
  mounted() {
    this.setPlumbIns();
  },
  activated() {
    // this.setPlumbIns();
  },
  // 路由切换的时候一定要重置setPlumbIns,防止保留上次绘制的线
  deactivated() {
    this.clearCanvas();
  },
  beforeDestroy() {
    this.clearCanvas();
  },
  methods: {
    // 点击清除连线
    clearCanvas() {
      if (this.plumbIns) this.plumbIns?.reset();
    },
    // 绘制连线
    startCanvas() {
      this.setPlumbIns();
    },
    // 点击切换事件
    clickTitle(item) {
      this.activeName = item.id;
    },
    // 初始化连线
    setPlumbIns() {
      if (!this.plumbIns)
        // 一定要指定连接线的绘制容器,该容器为设置的盒子dom的id值,要给这个css盒子设置一个position:relative属性,不然连线的位置不对,会偏移的很严重,如果不设置将以body容器进行绘制
        this.plumbIns = jsPlumb.getInstance({
          Container: "flowContainer",
        });
      let relations = [];
      // 将新数组转换成所需格式
      for (let i = 0; i < this.aItem.length - 1; i++) {
        relations.push([this.aItem[i].id, this.aItem[i + 1].id]);
      }
      // 获取right的数组
      for (let i = 0; i < this.bItem.length - 1; i++) {
        relations.push([this.bItem[i].id, this.bItem[i + 1].id]);
      }
      let aTob = [];
      // left和right节点相接的地方
      aTob.push(["4", "11"]);
      aTob.push(["15", "7"]);
      this.plumbIns.ready(() => {
        // 默认连线
        for (let item of relations) {
          this.plumbIns.connect(
            {
              source: item[0],
              target: item[1],
            },
            this.defaultConfig
          );
        }
        // a和b相交的连线
        let aTobConfig = JSON.parse(JSON.stringify(this.defaultConfig));
        // 设置a与b节点连接线的方式
        aTobConfig.anchor = ["Left", "Right"];
        for (let item of aTob) {
          this.plumbIns.connect(
            {
              source: item[0],
              target: item[1],
            },
            aTobConfig
          );
        }
      });
    },
  },
};
</script>

<style lang="scss" scoped>
.liucFlex {
  display: flex;
  width: 500px;
  color: #101010;
  font-size: 14px;
  position: relative;
  .word {
    width: 110px;
    height: 50px;
    cursor: pointer;
  }
  .isClick {
    color: #409eff !important;
  }
  .right,
  .left {
    flex: 1;
    margin: 0 10px;
  }
  .right {
    .iconRight {
      margin-left: 5px;
    }
    .status {
      margin-right: 10px;
    }
  }
  .left {
    .iconRight {
      margin-right: 5px;
    }
    .status {
      margin-left: 10px;
    }
    .boxLiu {
      text-align: right;
    }
  }
  .boxLiu {
    display: flex;
    margin-bottom: 20px;
  }
  .status {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background-color: #e0e3ea;
    vertical-align: top;
    margin-top: 3px;
  }

  .date {
    font-size: 12px;
    margin-top: 10px;
    color: #d0d3d9;
  }
  .error {
    background-color: #f56c6c !important;
  }
  .success {
    background-color: #7ac756 !important;
  }
  .info {
    background-color: #e0e3ea !important;
  }
}
</style>

效果图:

vue使用jsplumb 流程图,vue.js,流程图,javascript文章来源地址https://www.toymoban.com/news/detail-655275.html

  1.  初始化jsPlumb一定要在mounted函数里面,要执行在dom渲染完成的时候
  2. 一定要设置绑定的容器,不然连线的容器外加入任何其他布局元素,线会偏移,需要给绑定的容器设置position:relative(原因不详,因为我不设置这个属性线偏移的很严重)
  3. 路由切换或者多容器需要连线设置,需要重置jsPlumb(this.plumbIns?.reset()),不然线会一直在
jsPlumb中一些常用的参数和API的说明
参数/方法 描述
Container 设置连接线的绘制容器,将连接线限制在指定的容器内绘制
Draggable 将元素设置为可拖动,可以被拖动到其他位置
Endpoint 定义连接线端点的样式和行为
Connector 定义连接线的样式和类型
Anchors 定义连接线起始点和目标点的锚点位置
PaintStyle 定义连接线的绘制样式,如颜色、线宽等
hoverPaintStyle 鼠标悬停在连接线上时的绘制样式
Endpoints 定义连接线的起始点和目标点的端点样式
MaxConnections 指定一个元素可以拥有的最大连接数
Scope 用于分组连接线和元素的范围,可以控制连接线的可见性和交互性
ConnectionOverlays 定义连接线上的覆盖物,如箭头、标签等
addEndpoint 动态添加一个连接线的端点
connect 连接两个元素,创建一条连接线
repaintEverything 重新绘制所有连接线和端点,适用于当容器大小改变时需要重新布局时
bind 绑定事件处理程序到连接线或元素上
unbind 取消绑定事件处理程序
removeAllEndpoints 移除所有元素的端点
deleteEndpoint 删除指定元素的一个端点
destroy 销毁jsPlumb实例,清除所有的连接线和端点

到了这里,关于vue使用jsplumb 流程图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用antv/G6在vue项目中开发较复杂样式流程图

    设计师提供了一版样式较复杂的流程图,我搜了一些常用的vue-super-flow和vue-x6-flow等都只支持简单的样式。之前自己写过纯展示流程图不涉及太多交互,感觉还是找一个成熟的插件开发更适合,也方便其他同事参考,所以最后选择了用antv/G6自己个性化开发,总结了使用antv/G6在

    2023年04月09日
    浏览(32)
  • 详解《基于 javascript 的流程图编辑框架LogicFlow》

    1、LogicFlow 是什么 LogicFlow 是一款流程图编辑框架,提供了一系列流程图交互、编辑所必需的功能和灵活的节点自定义、插件等拓展机制。LogicFlow 支持前端研发自定义开发各种逻辑编排场景,如流程图、ER 图、BPMN 流程等。在工作审批配置、机器人逻辑编排、无代码平台流程配

    2024年02月05日
    浏览(37)
  • 如何自己实现一个丝滑的流程图绘制工具(一)vue如何使用

    背景 项目需求突然叫我实现一个类似processOn一样的在线流程图绘制工具。 这可难倒我了,立马去做调研,在github上找了很多个开源的流程图绘制工具, 对比下来我还是选择了 bpmn-js 原因: 1、他的流程图是涉及到业务的,比如开始事件、结束事件等 2、扩展性很强(这个扩展

    2024年02月11日
    浏览(37)
  • 流程图实现,基于vue2实现的流程图

    flex布局 + 伪元素实现竖直的连接线+组件递归 2.1基础的(未截全,大致长这样)  2.2带有收缩功能的,可以展开和收缩并显示数量     4.项目源码地址 GitHub - yft-code/flow: 流程图 纯css实现流程图

    2024年02月16日
    浏览(31)
  • 开源流程图表库(01):Mermaid.js生成流程图、时序图、甘特图等

    Mermaid.js是一个用于生成流程图、时序图、甘特图等各种图表的开源库。它使用简洁的文本语法来描述图表结构,并将其转换为可视化的图形。 Mermaid.js的主要特点包括: 简洁易用 :Mermaid.js使用简单的文本语法来描述图表结构,不需要编写复杂的代码。通过简单的几行文本,

    2024年04月13日
    浏览(27)
  • 流程图:MindFusion.Diagramming for JS 4.3 Crack

    Adds support for multiple diagram pages and tabbed diagram view. July 27, 2023 - 7:52 New Version Features Multiple diagram pages  - Added DiagramDocument class which represents a collection of diagram pages or sheets. New pages can be added to the document and existing pages can be removed or reordered. Includes methods to load/save all pages in a single f

    2024年02月15日
    浏览(27)
  • Vue实现流程图,借鉴vue-tree-color 实现流程框架技术

    实现组织架构图(vue-org-tree) 如果向使用原来的依赖可以使用这个人的,因为我也是根据这个博客大佬仿照Vue-org-tree实现的方案 对此有几点不惑,问了大佬,大佬也没有回复我 className 貌似不起作用,看了文章底部,她也意识到这个问题,但是没有给出详细的解决方案 node.js中

    2024年02月06日
    浏览(29)
  • vue 复杂的流程图实现--antv/g6

    可以先看下对应的文档:G6 Demos - AntV  npm install --save @antv/g6 实现如图:  

    2024年02月08日
    浏览(31)
  • vue + gojs 实现拖拽流程图(实战项目)

    最近一段时间在研究go.js,它是一款前端开发画流程图的一个插件,也是一个难点,要说为什么是难点,首先,它是依赖画布canvas知识开发。其次,要依赖于内部API开发需求,开发项目实战需求的时候就要花费大量的时间去熟悉go.js的API,然后才能进行开发。话不多说,我就先

    2023年04月24日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包