vue3流程图组件vue flow使用

vue3流程图组件、vue flow、typescript

1、依赖安装

$ npm i --save @vue-flow/core
# or
$ yarn add @vue-flow/core
# 其他根据需要安装,例如:
$ npm i --save @vue-flow/additional-components

2、局部引入

//样式引入
import '@vue-flow/core/dist/style.css';
import '@vue-flow/core/dist/theme-default.css';
//根据使用情况,引入相关组件
import { Background, Panel, PanelPosition, Controls } from '@vue-flow/additional-components'
import { VueFlow, useVueFlow } from '@vue-flow/core'

3、组件使用

<VueFlow fit-view-on-init class="my-flow" v-model="elements">
  <Background />
  <Panel :position="PanelPosition.TopRight">
    <div>
      <label for="ishidden">
        hidden
        <input id="ishidden" v-model="isHidden" type="checkbox" />
      </label>
    </div>
  </Panel>
  <Controls />
</VueFlow>

4、vue3、elementui完整代码

<style lang="less" scoped>
.my-flow {
  margin: 10px;
  height: 400px;

  :deep(.node-light) {
    background: none;
  }
  :deep(.node-dark) {
    background: #eeeeee;
  }
}
</style>
<template>
  <div class="container">
    <el-row :gutter="24">
      <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
        相关文档:
        <a href="https://vueflow.dev/" target="_blank">Vue Flow官方文档</a>
      </el-col>
    </el-row>

    <el-divider content-position="left">Vue Flow</el-divider>

    <el-row class="mb-4">
      <el-button type="primary" @click="resetTransform">重置</el-button>
      <el-button type="primary" @click="updatePos">修改属性</el-button>
      <el-button type="primary" @click="toggleclass">修改样式</el-button>
      <el-button type="primary" @click="logToObject">查看属性</el-button>
    </el-row>

    <VueFlow fit-view-on-init class="my-flow" v-model="elements">
      <Background />
      <Panel :position="PanelPosition.TopRight">
        <div>
          <label for="ishidden">
            hidden
            <input id="ishidden" v-model="isHidden" type="checkbox" />
          </label>
        </div>
      </Panel>
      <Controls />
    </VueFlow>
  </div>
</template>


<script lang="ts" setup name="DemoBpmn">

import '@vue-flow/core/dist/style.css';
/* import the default theme (optional) */
import '@vue-flow/core/dist/theme-default.css';

import { Background, Panel, PanelPosition, Controls } from '@vue-flow/additional-components'
import { VueFlow, useVueFlow } from '@vue-flow/core'
import { ref, watch } from 'vue'
import { ElMessage } from 'element-plus';

const data = [
  { id: '1', type: 'input', label: 'Node 1', position: { x: 250, y: 5 } },
  { id: '2', label: 'Node 2', position: { x: 100, y: 100 } },
  { id: '3', label: 'Node 3', position: { x: 400, y: 100 } },
  { id: '4', label: 'Node 4', position: { x: 400, y: 200 } },
  { id: 'e1-2', source: '1', target: '2', animated: true },
  { id: 'e1-3', source: '1', target: '3' },
]
let elements = ref(data)

const isHidden = ref(false)

let { onPaneReady, onNodeDragStop, onConnect, addEdges, setTransform, toObject, nodes, edges } = useVueFlow()

watch(isHidden, () => {
  nodes.value.forEach((n) => (n.hidden = isHidden.value))
  edges.value.forEach((e) => (e.hidden = isHidden.value))
})

onPaneReady(({ fitView }) => {
  fitView()
})
onNodeDragStop((e) => console.log('drag stop', e))
onConnect((params) => addEdges([params]))

const updatePos = () => {
  nodes.value.forEach((el) => {
    el.position = {
      x: Math.random() * 400,
      y: Math.random() * 400,
    }
  })
};

const logToObject = () => {
  ElMessage.info(JSON.stringify(toObject()));
};
const resetTransform = () => {
  elements.value = data
  setTransform({ x: 0, y: 0, zoom: 1 })
};
const toggleclass = () => nodes.value.forEach((el) => (el.class = el.class === 'node-light' ? 'node-dark' : 'node-light'))


</script>

官方文档:Vue Flow | Vue Flow

旧版本vue-flow代码例子:vue-sys-manage: vue3 + typescript + view ui后台管理系统

新版本vue-flow代码例子:vue-sys-manage-el: vue3、typescript、element plus前端管理页面

演示地址:sys

引用于华为开发者联盟:https://huaweicloud.csdn.net/638eec73dacf622b8df8dc7d.html?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-5-126368395-blog-124789416.235%5Ev36%5Epc_relevant_anti_vip_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-5-126368395-blog-124789416.235%5Ev36%5Epc_relevant_anti_vip_base&utm_relevant_index=10

Vue.js是一种流行的JavaScript框架,可以用于构建用户界面。要实现流程图组件,可以使用Vue.js结合其他库或插件来实现。以下是一个使用Vue.js和GoJS库来实现流程图组件的示例: 首先,确保你已经安装了Vue.js和GoJS库。可以通过以下命令来安装它们: ```shell npm install vue npm install gojs ``` 然后,在Vue组件中引入GoJS库,并在`mounted`生命周期钩子中初始化流程图。在模板中,可以使用`div`元素作为容器来显示流程图。 ```javascript <template> <div id="flowchart"></div> </template> <script> import go from &#39;gojs&#39;; export default { mounted() { const $ = go.GraphObject.make; const myDiagram = $(go.Diagram, &#39;flowchart&#39;); // 在这里添加流程图的定义和布局 // 示例:添加一个节点 myDiagram.nodeTemplate = $(go.Node, &#39;Auto&#39;, $(go.Shape, &#39;RoundedRectangle&#39;, { fill: &#39;lightblue&#39; }), $(go.TextBlock, { margin: 8 }, new go.Binding(&#39;text&#39;, &#39;key&#39;)) ); // 示例:添加一个连接线 myDiagram.linkTemplate = $(go.Link, $(go.Shape), $(go.Shape, { toArrow: &#39;Standard&#39; }) ); // 示例:添加一些节点和连接线 myDiagram.model = new go.GraphLinksModel( [ { key: &#39;Node1&#39; }, { key: &#39;Node2&#39; }, { key: &#39;Node3&#39; } ], [ { from: &#39;Node1&#39;, to: &#39;Node2&#39; }, { from: &#39;Node2&#39;, to: &#39;Node3&#39; } ] ); } } </script> ``` 在上述示例中,我们使用了GoJS的一些基本概念,如节点模板和连接线模板。你可以根据自己的需求自定义节点和连接线的样式。 请注意,上述示例只是一个简单的示例,你可以根据自己的需求进行更复杂的定制。同时,你还可以使用其他流程图库或自己手写一个组件来实现流程图功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值