vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue jsplumb 生成流程图

vue如何使用 jsplumb 生成流程图

作者:陈大大小

文章介绍了如何在Vue项目中使用jsPlumb库来生成流程图,文章提供了两个简单的示例代码,展示了如何定义流程图的数据字段和如何配置连线样式,最后,文章鼓励读者继续探索更多关于vue和jsPlumb的使用技巧,感兴趣的朋友一起看看吧

1、安装jsPlumb:

npm install jsplumb

2、 在使用的 .vue 文件中引入

import { jsPlumb } from "jsplumb";

图一: 

图二:

图一简单示例:

流程图的数据字段:

id: "item-12", // id(必传)
label: "节点一", // 节点名称(必传)
nodeName: "start", // 节点标识:start:开始节点;end:结束节点;
connectId:
[              
        {              
                source: "item-12", // 连接线起点(必传)              
                target: "item-7", // 连接线终点(必传)              
                stub: 40, // 连接线距离主流程线的位置高度(同一个节点有第二条连接线的时候
                                必传,值越大距离主流程距离越远)              
                direction: "Bottom", // 连接线距离主流程线的位置方向(同一个节点有第二条连接
                                线的时候必传)            
        }          
],
tipContent:
[            
        {              
                handleUser: "业务部", // 节点内容信息                               
                handleTime: "2024-10-23 15:20:08" // 节点内容信息            
        }          
]

(代码直接复制即可食用) 

templete 代码

<template>
  <div class="bfd-pages">
    <!-- 流程图 -->
    <div class="title-box">
      <div class="title">
        <span>流程图</span>
      </div>
    </div>
    <div class="table-page-search-wrapper">
      <div class="line-wrap">
        <div
          v-for="(item, index) in flowChartDataList"
          :key="index"
          :id="item.id"
          :class="
            getColor(item.id) == '1'
              ? 'state-item-during'
              : getColor(item.id) == '2'
              ? 'state-item-finish'
              : 'state-item'
          "
        >
          <img
            v-if="item.nodeName == 'start'"
            class="imgs"
            src="@/assets/images/start.png"
            alt=""
          />
          <img
            v-else-if="item.nodeName == 'summary'"
            class="imgs"
            src="@/assets/images/cent.png"
            alt=""
          />
          <img
            v-else-if="item.nodeName == 'end'"
            class="imgs"
            src="@/assets/images/end.png"
            alt=""
          />
          <div v-else>
            <div v-if="item.tipContent">
              <a-tooltip>
                <template #title>
                  <div v-for="(detailInfoItem, i) in item.tipContent" :key="i">
                    <div>{{ detailInfoItem.handleUser }}</div>
                    <div>{{ detailInfoItem.handleTime }}</div>
                  </div>
                </template>
                {{ item.label }}
              </a-tooltip>
            </div>
            <div v-else>
              {{ item.label }}
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

script 代码 

<script>
import { jsPlumb } from "jsplumb";
export default {
  name: "LiuChengTu",
  props: {
    // 流程编码
    flowCode: {
      type: String,
      default: "",
    },
    // id
    businessId: {
      type: String,
      default: "",
    },
    flowVersion: {
      type: String,
      default: "",
    },
  },
  data() {
    return {
      url: {
        info: "/api/system/common/statusSet/approval/getFlowConfigForShow",
      },
      // 流程图数据
  flowChartData: [
    {
      "id": "0",
      "label": "",
      "nodeName": "start",
      "connectId": [
        {
          "source": "0",
          "target": "10",
          "stub": 5
        }
      ]
    },
    {
      "id": "10",
      "label": "节点一",
      "nodeName": "",
      "connectId": [
        {
          "source": "10",
          "target": "20",
          "stub": 5
        }
      ]
    },
    {
      "id": "20",
      "label": "节点二",
      "nodeName": "",
      "connectId": [
        {
          "source": "20",
          "target": "30",
          "stub": 5
        },
        {
          "source": "20",
          "target": "60",
          "stub": 80,
          "direction": "Top"
        },
        {
          "source": "20",
          "target": "70",
          "stub": 80,
          "direction": "Top"
        }
      ]
    },
    {
      "id": "30",
      "label": "节点三",
      "nodeName": "",
      "connectId": [
        {
          "source": "30",
          "target": "40",
          "stub": 5
        },
        {
          "source": "30",
          "target": "50",
          "stub": 40,
          "direction": "Top"
        }
      ]
    },
    {
      "id": "40",
      "label": "节点四",
      "nodeName": "",
      "connectId": [
        {
          "source": "40",
          "target": "50",
          "stub": 5
        }
      ]
    },
    {
      "id": "50",
      "label": "节点五",
      "nodeName": "",
      "connectId": [
        {
          "source": "50",
          "target": "60",
          "stub": 5
        },
        {
          "source": "50",
          "target": "70",
          "stub": 40,
          "direction": "Bottom"
        }
      ]
    },
    {
      "id": "60",
      "label": "节点六",
      "nodeName": "",
      "connectId": [
        {
          "source": "60",
          "target": "70",
          "stub": 5
        }
      ]
    },
    {
      "id": "70",
      "label": "节点七",
      "nodeName": "",
      "connectId": [
        {
          "source": "70",
          "target": "999",
          "stub": 5
        }
      ]
    },
    {
      "id": "999",
      "label": "",
      "nodeName": "end",
      "connectId": []
    }
  ],
      defatltDirection: [
        "Left",
        "Right",
        "Top",
        "Bottom",
        [0.3, 0, 0, -1],
        [0.7, 0, 0, -1],
        [0.3, 1, 0, 1],
        [0.7, 1, 0, 1],
      ],
      topDirection: ["Top", "Top"],
      bottomDirection: ["Bottom", "Bottom"],
      flowChartDataList: [], // 流程图数据
      duringNode: "20", // 在节点期间
      finishedNode: "10", // 已完成节点
      plumbInsInfo: null, // 暂存流程图图像数据
    };
  },
  mounted() {
    this.initJsPlumb();
  },
  methods: {
    getColor(val) {
      let duringStatus = null;
      let finishStatus = null;
      if (this.duringNode !== null) {
        let dataInfo = this.duringNode.split(',');
        duringStatus = dataInfo.includes(val);
      }
      if (this.finishedNode !== null) {
        let dataInfo = this.finishedNode.split(',');
        finishStatus = dataInfo.includes(val);
      }
      if (duringStatus == true) {
        // 当前节点
        return "2";
      } else if (finishStatus == true) {
        // 已完成节点
        return "1";
      } else {
        return "0";
      }
    },
    initJsPlumb() {
      if(this.plumbInsInfo !== null) {
        // 首先删除所有的连线
        this.plumbInsInfo.deleteEveryConnection();
      }
      let plumbIns = jsPlumb.getInstance();
      let jsPlumbConnectList = [];
      // 处理数据
      this.flowChartData.forEach((item, index) => {
        if (item.connectId.length > 1) {
          item.connectId.forEach((eleInfo, ind) => {
            if (ind == 0) {
              let plumbInsInfo = {
                source: eleInfo.source,
                target: eleInfo.target,
                anchor: [
                  "Left",
                  "Right",
                  "Top",
                  "Bottom",
                  [0.3, 0, 0, -1],
                  [0.7, 0, 0, -1],
                  [0.3, 1, 0, 1],
                  [0.7, 1, 0, 1],
                ],
                connector: [
                  "Flowchart",
                  {
                    cornerRadius: 5,
                    alwaysRespectStubs: true,
                    stub: eleInfo.stub,
                  },
                ],
                endpoint: "Blank",
                overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
                // 添加样式
                paintStyle: {
                  stroke:
                    eleInfo.nodeDescribe == "pass"
                      ? "#008000"
                      : eleInfo.nodeDescribe == "reject"
                      ? "#ff0000"
                      : "#909399",
                  strokeWidth: 2,
                }, // connector
              };
              jsPlumbConnectList.push(plumbInsInfo);
            } else {
              let plumbInsInfo = {
                source: eleInfo.source,
                target: eleInfo.target,
                anchor:
                  eleInfo.direction == "Top"
                    ? this.topDirection
                    : eleInfo.direction == "Bottom"
                    ? this.bottomDirection
                    : this.defatltDirection,
                connector: [
                  "Flowchart",
                  {
                    cornerRadius: 5,
                    alwaysRespectStubs: true,
                    stub: eleInfo.stub,
                  },
                ],
                endpoint: "Blank",
                overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
                // 添加样式
                paintStyle: {
                  stroke:
                    eleInfo.nodeDescribe == "pass"
                      ? "#008000"
                      : eleInfo.nodeDescribe == "reject"
                      ? "#ff0000"
                      : "#909399",
                  strokeWidth: 2,
                }, // connector
              };
              jsPlumbConnectList.push(plumbInsInfo);
            }
          });
        } else {
          if (item.nodeName !== "end") {
            let plumbInsInfo = {
              source: item.connectId[0].source,
              target: item.connectId[0].target,
              anchor: [
                "Left",
                "Right",
                "Top",
                "Bottom",
                [0.3, 0, 0, -1],
                [0.7, 0, 0, -1],
                [0.3, 1, 0, 1],
                [0.7, 1, 0, 1],
              ],
              connector: [
                "Flowchart",
                {
                  cornerRadius: 5,
                  alwaysRespectStubs: true,
                  stub: item.connectId[0].stub,
                },
              ],
              endpoint: "Blank",
              overlays: [
                ["Arrow", { width: 8, length: 8, location: 1 }],
                [
                  "Label",
                  {
                    label: item.connectId[0].lableName
                      ? item.connectId[0].lableName
                      : "",
                    location: 0.5,
                    cssClass: "jsplumb-flowchart-label",
                    visible: true,
                  },
                ],
              ], // overlay
              paintStyle: {
                stroke:
                  item.connectId[0].nodeDescribe == "pass"
                    ? "#008000"
                    : item.connectId[0].nodeDescribe == "reject"
                    ? "#ff0000"
                    : "#909399",
                strokeWidth: 2,
              }, // 连接线样式
            };
            jsPlumbConnectList.push(plumbInsInfo);
          }
        }
      });
      this.flowChartDataList = this.flowChartData;
      console.log("------", jsPlumbConnectList);
      setTimeout(() => {
        plumbIns.ready(function () {
          jsPlumbConnectList.forEach((ele) => {
            plumbIns.connect(ele);
          });
        });
        this.plumbInsInfo = plumbIns;
      }, 500);
    },
  },
};
</script>

style 代码 

<style lang="less" scoped>
.title-box {
  display: flex;
  justify-content: space-between;
  border-bottom: 1px solid #2464b0;
  margin-bottom: 20px;
  .title {
    height: 40px;
    font-size: 16px;
    color: #2464b0;
    font-weight: 650;
    // border-bottom: 1px solid #2464b0;
    display: flex;
    -webkit-box-align: center;
    align-items: center;
    // margin-bottom: 20px;
  }
  .title:before {
    display: inline-block;
    height: 30px;
    margin-right: 10px;
    border-right: 7px solid #2464b0;
    content: "";
  }
}
.table-page-search-wrapper {
  padding: 150px 0 10px 0;
  .line-wrap {
    display: flex;
    margin-bottom: 100px;
    justify-content: center;
    align-items: center;
    .state-item {
      width: 120px;
      height: 100px;
      color: #606266;
      background: #f6f6f6;
      border: 2px solid rgba(0, 0, 0, 0.05);
      text-align: center;
      // line-height: 30px;
      font-family: sans-serif;
      border-radius: 4px;
      margin-right: 60px;
      font-size: 12px;
      padding: 5px 10px;
      display: flex;
      justify-content: center;
      align-items: center;
      font-weight: normal;
      .imgs {
        width: 50px;
        height: 50px;
      }
    }
    .state-item-during {
      width: 120px;
      height: 100px;
      color: green;
      background: #f6f6f6;
      border: 2px solid green;
      text-align: center;
      // line-height: 30px;
      font-family: Arial, sans-serif;
      border-radius: 8px;
      margin-right: 60px;
      font-size: 12px;
      padding: 5px 10px;
      display: flex;
      justify-content: center;
      align-items: center;
      font-weight: normal;
      .imgs {
        width: 50px;
        height: 50px;
      }
    }
    .state-item-finish {
      width: 120px;
      height: 100px;
      color: red;
      background: #f6f6f6;
      border: 2px solid red;
      text-align: center;
      // line-height: 30px;
      font-family: sans-serif;
      border-radius: 4px;
      margin-right: 60px;
      font-size: 12px;
      padding: 5px 10px;
      display: flex;
      justify-content: center;
      align-items: center;
      font-weight: normal;
      .imgs {
        width: 50px;
        height: 50px;
      }
    }
  }
}
</style>

图二简单示例:

注意:注意看 id 为"item-3"和"item-9"那条数据的连线配置

其中有几个小图片,可以用自己的本地图片代替(图标大小的)

<template>
  <div id="wrapper">
    <div class="line-wrap" v-if="flowChartData1.length == 2">
      <div :id="flowChartData1[1].id" class="state-item">
        {{ flowChartData1[1].lable }}
      </div>
    </div>
    <div class="line-wrap">
      <div v-for="(item, index) in flowChartData" :key="index" :id="item.id" :class="item.nodeName == 'start' || item.nodeName == 'end' || item.nodeName == 'summary' ? 'state-item-img' : 'state-item'">
        <img v-if="item.nodeName == 'start'" class="imgs" src="../assets/img/start.png" alt="" />
        <img v-else-if="item.nodeName == 'summary'" class="imgs" src="../assets/img/cent.png" alt="" />
        <img v-else-if="item.nodeName == 'end'" class="imgs" src="../assets/img/end.png" alt="" />
        <div v-else>
          {{ item.lable }}
        </div>
      </div>
    </div>
    <div class="line-wrap" v-if="flowChartData1.length > 0 && flowChartData1.length < 3">
      <div :id="flowChartData1[0].id" class="state-item">
        {{ flowChartData1[0].lable }}
      </div>
    </div>
  </div>
</template>
<script>
import { jsPlumb } from "jsplumb";
export default {
  name: "LiuChengTu",
  data() {
    return {
      // 一行数据的
      // flowChartData: [
      //   { id: "item-0", lable: "", nodeName: "start", connectId: [{source: "item-0", target: "item-1"}] }, // 开始
      //   { id: "item-1", lable: "改革处-经办人-发起", nodeName: "", connectId: [{source: "item-1", target: "item-2"}] },
      //   { id: "item-2", lable: "承办部门-改革联系人填报/分发", nodeName: "", connectId: [{source: "item-2", target: "item-3"}] },
      //   { id: "item-3", lable: "", nodeName: "summary", connectId: [{source: "item-3", target: "item-4"}] }, // 汇总/分发
      //   { id: "item-4", lable: "承办部门-部门主任-审批", nodeName: "", connectId: [{source: "item-4", target: "item-5"}] },
      //   { id: "item-5", lable: "改革处-经办人-合规性审查", nodeName: "", connectId: [{source: "item-5", target: "item-6"}] },
      //   { id: "item-6", lable: "改革处-处领导-合规性审查", nodeName: "", connectId: [{source: "item-6", target: "item-7"}] },
      //   { id: "item-7", lable: "", nodeName: "summary", connectId: [{source: "item-7", target: "item-8"}] }, // 汇总/分发
      //   { id: "item-8", lable: "", nodeName: "end", connectId: [] }, // 结束
      // ],
      // 两行数据的
      // flowChartData: [
      //   { id: "item-0", lable: "", nodeName: "start", connectId: [{source: "item-0", target: "item-1"}] }, // 开始
      //   { id: "item-1", lable: "改革处-经办人-发起", nodeName: "", connectId: [{source: "item-1", target: "item-2"}] },
      //   { id: "item-2", lable: "承办部门-改革联系人填报/分发", nodeName: "", connectId: [{source: "item-2", target: "item-3"}] },
      //   { id: "item-3", lable: "", nodeName: "summary", connectId: [{source: "item-3", target: "item-4"}, {source: "item-3", target: "item-9"}] }, // 汇总/分发
      //   { id: "item-4", lable: "承办部门-部门主任-审批", nodeName: "", connectId: [{source: "item-4", target: "item-5"}] },
      //   { id: "item-5", lable: "改革处-经办人-合规性审查", nodeName: "", connectId: [{source: "item-5", target: "item-6"}] },
      //   { id: "item-6", lable: "改革处-处领导-合规性审查", nodeName: "", connectId: [{source: "item-6", target: "item-7"}] },
      //   { id: "item-7", lable: "", nodeName: "summary", connectId: [{source: "item-7", target: "item-8"}] }, // 汇总/分发
      //   { id: "item-8", lable: "", nodeName: "end", connectId: [] }, // 结束
      //   { id: "item-9", lable: "改革处-经办人-接收待阅", nodeName: "handleOut", connectId: [{source: "item-9", target: "item-7"}] }, // 第二行数据
      // ],
      // 三行数据的
      flowChartData: [
        { id: "item-0", lable: "", nodeName: "start", connectId: [{source: "item-0", target: "item-1"}] }, // 开始
        { id: "item-1", lable: "改革处-经办人-发起", nodeName: "", connectId: [{source: "item-1", target: "item-2"}] },
        { id: "item-2", lable: "承办部门-改革联系人填报/分发", nodeName: "", connectId: [{source: "item-2", target: "item-3"}] },
        { id: "item-3", lable: "", nodeName: "summary", connectId: [{source: "item-3", target: "item-4"}, {source: "item-3", target: "item-9"}, {source: "item-3", target: "item-10"}] }, // 汇总/分发
        { id: "item-4", lable: "承办部门-部门主任-审批", nodeName: "", connectId: [{source: "item-4", target: "item-5"}] },
        { id: "item-5", lable: "改革处-经办人-合规性审查", nodeName: "", connectId: [{source: "item-5", target: "item-6"}] },
        { id: "item-6", lable: "改革处-处领导-合规性审查", nodeName: "", connectId: [{source: "item-6", target: "item-7"}] },
        { id: "item-7", lable: "", nodeName: "summary", connectId: [{source: "item-7", target: "item-8"}] }, // 汇总/分发
        { id: "item-8", lable: "", nodeName: "end", connectId: [] }, // 结束
        { id: "item-9", lable: "改革处-经办人-接收待阅", nodeName: "handleOut", connectId: [{source: "item-9", target: "item-7"}] }, // 第二行数据
        { id: "item-10", lable: "改革处-经办人-接收待阅123", nodeName: "handleOut", connectId: [{source: "item-10", target: "item-7"}] }, // 第二行数据
      ],
      flowChartData1: []
    };
  },
  mounted() {
    this.initJsPlumb();
  },
  methods: {
    initJsPlumb() {
      let jsPlumbConnectList = [];
      let listData = [];
      let fenfaData = [];
      // 处理数据
      this.flowChartData.forEach(ele=>{
        if(ele.connectId.length == 1) {
          if(ele.nodeName == "handleOut") {
            fenfaData.push(ele);
          }else {
            listData.push(ele);
            let plumbInsInfo = {
              source: ele.connectId[0].source,
              target: ele.connectId[0].target,
              anchor: [
                "Left",
                "Right",
                "Top",
                "Bottom",
                [0.3, 0, 0, -1],
                [0.7, 0, 0, -1],
                [0.3, 1, 0, 1],
                [0.7, 1, 0, 1],
              ],
              connector: [
                "Flowchart",
                { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
              ],
              endpoint: "Blank",
              overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
              // 添加样式
              paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
            }
            jsPlumbConnectList.push(plumbInsInfo)
          }
        }else if(ele.connectId.length == 1){
          if(ele.nodeName == "handleOut") {
            fenfaData.push(ele);
          }else {
            listData.push(ele);
            ele.connectId.forEach((itemInfo,index)=>{
              if(index == 0) {
                let plumbInsInfo = {
                  source: itemInfo.source,
                  target: itemInfo.target,
                  anchor: [
                    "Left",
                    "Right",
                    "Top",
                    "Bottom",
                    [0.3, 0, 0, -1],
                    [0.7, 0, 0, -1],
                    [0.3, 1, 0, 1],
                    [0.7, 1, 0, 1],
                  ],
                  connector: [
                    "Flowchart",
                    { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
                  ],
                  endpoint: "Blank",
                  overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
                  // 添加样式
                  paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
                }
                jsPlumbConnectList.push(plumbInsInfo)
              }else {
                let plumbInsInfo = {
                  source: itemInfo.source,
                  target: itemInfo.target,
                  anchor: ["Bottom", "Left"],
                  connector: [
                    "Flowchart",
                    { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
                  ],
                  endpoint: "Blank",
                  overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
                  // 添加样式
                  paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
                }
                jsPlumbConnectList.push(plumbInsInfo)
              }
            })
          }
        }else {
          if(ele.nodeName == "handleOut") {
            fenfaData.push(ele);
          }else {
            listData.push(ele);
            ele.connectId.forEach((itemInfo,index)=>{
              if(index == 0) {
                let plumbInsInfo = {
                  source: itemInfo.source,
                  target: itemInfo.target,
                  anchor: [
                    "Left",
                    "Right",
                    "Top",
                    "Bottom",
                    [0.3, 0, 0, -1],
                    [0.7, 0, 0, -1],
                    [0.3, 1, 0, 1],
                    [0.7, 1, 0, 1],
                  ],
                  connector: [
                    "Flowchart",
                    { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
                  ],
                  endpoint: "Blank",
                  overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
                  // 添加样式
                  paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
                }
                jsPlumbConnectList.push(plumbInsInfo)
              }else if(index == 1) {
                let plumbInsInfo = {
                  source: itemInfo.source,
                  target: itemInfo.target,
                  anchor: ["Bottom", "Left"],
                  connector: [
                    "Flowchart",
                    { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
                  ],
                  endpoint: "Blank",
                  overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
                  // 添加样式
                  paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
                }
                jsPlumbConnectList.push(plumbInsInfo)
              }else {
                let plumbInsInfo = {
                  source: itemInfo.source,
                  target: itemInfo.target,
                  anchor: ["Top", "Left"],
                  connector: [
                    "Flowchart",
                    { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
                  ],
                  endpoint: "Blank",
                  overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
                  // 添加样式
                  paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
                }
                jsPlumbConnectList.push(plumbInsInfo)
              }
            })
          }
        }
      })
      this.flowChartData = listData;
      this.flowChartData1 = fenfaData;
      if(this.flowChartData1.length > 0) {
        this.flowChartData1.forEach((ele, index)=>{
          if(index==0) {
            let plumbInsInfo = {
              source: ele.connectId[0].source,
              target: ele.connectId[0].target,
              anchor: ["Right", "Bottom"],
              connector: [
                "Flowchart",
                { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
              ],
              endpoint: "Blank",
              overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
              // 添加样式
              paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
            }
            jsPlumbConnectList.push(plumbInsInfo)
          }else {
            let plumbInsInfo = {
              source: ele.connectId[0].source,
              target: ele.connectId[0].target,
              anchor: ["Right", "Top"],
              connector: [
                "Flowchart",
                { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
              ],
              endpoint: "Blank",
              overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
              // 添加样式
              paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
            }
            jsPlumbConnectList.push(plumbInsInfo)
          }
        })
      }
      setTimeout(() => {
        let plumbIns = jsPlumb.getInstance();
        plumbIns.ready(function () {
          jsPlumbConnectList.forEach(ele=>{
            plumbIns.connect(ele);
          })
        })
      }, 500);
      return;
      // let plumbIns = jsPlumb.getInstance();
      plumbIns.ready(function () {
        plumbIns.connect({
          // 对应上述基本概念
          source: "item-0",
          target: "item-1",
          anchor: [
            "Left",
            "Right",
            "Top",
            "Bottom",
            [0.3, 0, 0, -1],
            [0.7, 0, 0, -1],
            [0.3, 1, 0, 1],
            [0.7, 1, 0, 1],
          ],
          connector: [
            "Flowchart",
            { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
          ],
          endpoint: "Blank",
          overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
          // 添加样式
          paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
          // endpointStyle: { fill: '#909399', outlineStroke: '#606266', outlineWidth: 1 } // endpoint
        });
        plumbIns.connect({
          // 对应上述基本概念
          source: "item-1",
          target: "item-2",
          anchor: [
            "Left",
            "Right",
            "Top",
            "Bottom",
            [0.3, 0, 0, -1],
            [0.7, 0, 0, -1],
            [0.3, 1, 0, 1],
            [0.7, 1, 0, 1],
          ],
          connector: [
            "Flowchart",
            { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
          ],
          endpoint: "Blank",
          overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
          // 添加样式
          paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
          // endpointStyle: { fill: '#909399', outlineStroke: '#606266', outlineWidth: 1 } // endpoint
        });
        plumbIns.connect({
          // 对应上述基本概念
          source: "item-2",
          target: "item-3",
          anchor: [
            "Left",
            "Right",
            "Top",
            "Bottom",
            [0.3, 0, 0, -1],
            [0.7, 0, 0, -1],
            [0.3, 1, 0, 1],
            [0.7, 1, 0, 1],
          ],
          connector: [
            "Flowchart",
            { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
          ],
          endpoint: "Blank",
          overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
          // 添加样式
          paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
          // endpointStyle: { fill: '#909399', outlineStroke: '#606266', outlineWidth: 1 } // endpoint
        });
        plumbIns.connect({
          // 对应上述基本概念
          source: "item-3",
          target: "item-4",
          anchor: [
            "Left",
            "Right",
            "Top",
            "Bottom",
            [0.3, 0, 0, -1],
            [0.7, 0, 0, -1],
            [0.3, 1, 0, 1],
            [0.7, 1, 0, 1],
          ],
          connector: [
            "Flowchart",
            { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
          ],
          endpoint: "Blank",
          overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
          // 添加样式
          paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
          // endpointStyle: { fill: '#909399', outlineStroke: '#606266', outlineWidth: 1 } // endpoint
        });
        plumbIns.connect({
          // 对应上述基本概念
          source: "item-4",
          target: "item-5",
          anchor: [
            "Left",
            "Right",
            "Top",
            "Bottom",
            [0.3, 0, 0, -1],
            [0.7, 0, 0, -1],
            [0.3, 1, 0, 1],
            [0.7, 1, 0, 1],
          ],
          connector: [
            "Flowchart",
            { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
          ],
          endpoint: "Blank",
          overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
          // 添加样式
          paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
          // endpointStyle: { fill: '#909399', outlineStroke: '#606266', outlineWidth: 1 } // endpoint
        });
        plumbIns.connect({
          // 对应上述基本概念
          source: "item-5",
          target: "item-6",
          anchor: [
            "Left",
            "Right",
            "Top",
            "Bottom",
            [0.3, 0, 0, -1],
            [0.7, 0, 0, -1],
            [0.3, 1, 0, 1],
            [0.7, 1, 0, 1],
          ],
          connector: [
            "Flowchart",
            { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
          ],
          endpoint: "Blank",
          overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
          // 添加样式
          paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
          // endpointStyle: { fill: '#909399', outlineStroke: '#606266', outlineWidth: 1 } // endpoint
        });
        plumbIns.connect({
          // 对应上述基本概念
          source: "item-6",
          target: "item-7",
          anchor: [
            "Left",
            "Right",
            "Top",
            "Bottom",
            [0.3, 0, 0, -1],
            [0.7, 0, 0, -1],
            [0.3, 1, 0, 1],
            [0.7, 1, 0, 1],
          ],
          connector: [
            "Flowchart",
            { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
          ],
          endpoint: "Blank",
          overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
          // 添加样式
          paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
          // endpointStyle: { fill: '#909399', outlineStroke: '#606266', outlineWidth: 1 } // endpoint
        });
        plumbIns.connect({
          // 对应上述基本概念
          source: "item-7",
          target: "item-8",
          anchor: [
            "Left",
            "Right",
            "Top",
            "Bottom",
            [0.3, 0, 0, -1],
            [0.7, 0, 0, -1],
            [0.3, 1, 0, 1],
            [0.7, 1, 0, 1],
          ],
          connector: [
            "Flowchart",
            { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
          ],
          endpoint: "Blank",
          overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
          // 添加样式
          paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
          // endpointStyle: { fill: '#909399', outlineStroke: '#606266', outlineWidth: 1 } // endpoint
        });
        plumbIns.connect({
          // 对应上述基本概念
          source: "item-3",
          target: "item-9",
          anchor: ["Bottom", "Left"],
          connector: [
            "Flowchart",
            { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
          ],
          endpoint: "Blank",
          overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
          // 添加样式
          paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
          // endpointStyle: { fill: '#909399', outlineStroke: '#606266', outlineWidth: 1 } // endpoint
        });
        plumbIns.connect({
          // 对应上述基本概念
          source: "item-9",
          target: "item-7",
          anchor: ["Right", "Bottom"],
          connector: [
            "Flowchart",
            { cornerRadius: 5, alwaysRespectStubs: true, stub: 5 },
          ],
          endpoint: "Blank",
          overlays: [["Arrow", { width: 8, length: 8, location: 1 }]], // overlay
          // 添加样式
          paintStyle: { stroke: "#909399", strokeWidth: 2 }, // connector
          // endpointStyle: { fill: '#909399', outlineStroke: '#606266', outlineWidth: 1 } // endpoint
        });
      });
    },
  },
};
</script>
<style lang="scss" scoped>
#wrapper {
  background: radial-gradient(
    ellipse at top left,
    rgba(255, 255, 255, 1) 40%,
    rgba(229, 229, 229, 0.9) 100%
  );
  padding: 60px 80px;
}
.state-item-img {
  width: 50px;
  height: 50px;
  color: #606266;
  border: 2px solid rgba(0, 0, 0, 0);
  text-align: center;
  line-height: 30px;
  font-family: sans-serif;
  border-radius: 4px;
  margin-right: 56px;
  font-size: 14px;
  .imgs {
    width: 50px;
    height: 50px;
  }
}
.state-item {
  width: 120px;
  height: 100px;
  color: #606266;
  background: #f6f6f6;
  border: 2px solid rgba(0, 0, 0, 0.05);
  text-align: center;
  line-height: 30px;
  font-family: sans-serif;
  border-radius: 4px;
  margin-right: 60px;
  font-size: 14px;
  padding: 5px 10px;
  display: flex;
  align-items: center;
}
.line-wrap {
  display: flex;
  margin-bottom: 100px;
  justify-content: center;
  align-items: center;
}
</style>

到此这篇关于vue使用 jsplumb 生成流程图的文章就介绍到这了,更多相关vue jsplumb 生成流程图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文