# topology-vue3
**Repository Path**: JerryCodeCloud/topology-vue3
## Basic Information
- **Project Name**: topology-vue3
- **Description**: flow-topology-ve3 是一个用于创建流拓扑图的 Vue 3 组件库, 导出 Topology、TemplateWrapper、AnchorWrapper 组件。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-06-06
- **Last Updated**: 2025-09-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## flow-topology-vue3 是一个用于创建流拓扑图的 Vue 3 组件库, 导出 Topology、TemplateWrapper、AnchorWrapper 组件。
### 示例图:

### 留言板:
[留言板](https://blog.csdn.net/qq_40040585/article/details/148478175?sharetype=blogdetail&sharerId=148478175&sharerefer=PC&sharesource=qq_40040585&spm=1011.2480.3001.8118)
### 特性
- 纯 div + svg 实现,无依赖。
- 支持拖拽节点、连线。
- 支持自定义节点样式和锚点(分支)样式。
- 模板化节点开发(通过 TemplateWrapper)。
- 支持全选、放大、缩小、截图。
- 支持锚点(分支)连接多个节点。
### 环境
- Vue3
- Node.js 18.x+(兼容更高版本)
## 安装
```bash
npm install flow-topology-vue3
```
## 使用
- 全局引入
```js
import { createApp } from 'vue'
import App from './App.vue'
import FlowTopologyVue3 from 'flow-topology-vue3'
import 'flow-topology-vue3/dist/flow-topology-vue3.css'
const app = createApp(App)
app.use(FlowTopologyVue3)
app.mount('#app')
```
- 按需引入
```js
类型名称 | 值 | 说明 |
---|---|---|
Ftv3BranchVO | { id: string | number, label: string, to?: (string | number)[], } | 分支数据类型,用于定义节点的分支信息。 |
Ftv3LineVO | {
id: string | number
label: string
to?: Array |
连线数据类型,用于定义节点之间的连接线信息。 |
Ftv3NodeVO | { id: string | number, position: { x: number, y: number, }, canDrag?: boolean, title?: string, content?: string, width?: number, branches: Ftv3LineVO[], [prop: string]: any, } | 节点数据类型,用于定义节点的位置、大小、分支等信息。 |
参数 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|
v-model/model-value | Array as PropType<{ id: string | number, position: { x: number, y: number, }, canDrag?: boolean, title?: string, content?: string, width?: number, branches: { id: string | number, label: string, to?: (string | number)[], }[], [prop: string]: any, }[]> | 是 | [] | 所有节点和连线数据 |
containerWidth | [Number, String] | 否 | 100% | 画布外容器宽度 支持数字 px % 等 |
containerHeight | [Number, String] | 否 | 100vh | 画布外容器高度 支持数字 px % 等 |
containerBackgroundColor | String | 否 | #f9f9f9 | 画布外容器背景 |
canvasWidth | Number | 否 | 100vh | 画布宽度 仅支持数字 |
canvasHeight | Number | 否 | 100vh | 画布高度 仅支持数字 |
showGridPattern | Boolean | 否 | true | 是否显示网格 |
gridPatternColor | String | 否 | #e5e5e5 | 网格线颜色 |
gridPatternGap | Number | 否 | 20 | 网格大小 |
showToolsBar | Boolean | 否 | true | 是否显示工具栏 |
toolsBarList | Array as PropType<{ ViewCenter = 'viewCenter', ToggleSelect = 'toggleSelect', Zoom = 'zoom', Capture = 'capture' }[]> | 否 | ['viewCenter', 'toggleSelect', 'zoom', 'capture'] | 工具栏种类(定位中心、全选/反选、缩放、截图) |
toolsBarPosition | String as PropType<{ Top = 'top', TopStart = 'top-start', TopEnd = 'top-end', Bottom = 'bottom', BottomStart = 'bottom-start', BottomEnd = 'bottom-end', Left = 'left', Right = 'right' }> | 否 | bottom-end | 工具栏位置 |
toolsBarPositionOffset | Number | 否 | 20 | 工具栏距离容器边距位置 |
readOnly | Boolean | 否 | false | 是否只读 |
beforeDeleteLine | Function as PropType<(line: {
fromNodeId: string | number
fromBranchId: string | number
toNodeId: string | number
}) => boolean | Promise |
否 | () => true | 删除连线前的钩子,参数是删除的线 若返回false时或者Promise.reject()阻止删除 |
beforeDeleteNode | Function as PropType<(node: {
id: string | number,
position: {
x: number,
y: number,
},
canDrag?: boolean,
title?: string,
content?: string,
width?: number,
branches: {
id: string | number,
label: string,
to?: string | number,
}[],
[prop: string]: any,
}) => boolean | Promise |
否 | () => true | 删除节点前的钩子,参数是删除的节点,若返回false时或者Promise.reject()阻止删除 |
beforeDeleteAllNode | Function as PropType<() => boolean | Promise |
否 | () => true | 删除所有节点前的钩子,若返回false时或者Promise.reject()阻止删除 |
renderItem | Function as PropType<(nodeVO: NodeVO) => any> | 否 | null | 自定义函数渲染节点内容,参数是节点数据对象,返回自定义渲染内容 |
captureBackgroundColor | String | 否 | 容器背景色 | 截图背景色, 若不设置则使用容器背景色 |
canConnectMultiLines | Boolean | 否 | false | 是否允许多条连线, 若为true则连线时一个锚点(分支)支持多个连线, 若为false则连线时一个锚点(分支)只支持一条连线 |
事件名 | 参数 | 说明 |
---|---|---|
change | { type: 'add_node' | 'delete_node' | 'update_node_position' | 'add_line' | 'delete_line' | 'delete_node_line' , data: any} | 节点和线改变,参数为响应操作的数据,tips:删除接点和连接线请使用键盘delete键 |
selectNode | NodeVO | 选中节点,参数为选中的节点数据 |
capture | string | 截图, 参数为base64 |
参数 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|
generator | { id: string | number, position: { x: number, y: number, }, canDrag?: boolean, title?: string, content?: string, width?: number, branches: { id: string | number, label: string, to?: string | number, }[], [prop: string]: any, } | 是 | - | 节点的数据 |
disabled | Boolean | 否 | false | 是否允许拖拽 |
参数 | 类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|
node | { id: string | number, position: { x: number, y: number, }, canDrag?: boolean, title?: string, content?: string, width?: number, branches: { id: string | number, label: string, to?: string | number, }[], [prop: string]: any, } | 是 | - | 节点的数据 |
branch | { id: string | number label: string to?: string | number } | 是 | 当前节点分支 |
方法名 | 参数 | 说明 |
---|---|---|
selectNode | id:string | number | 选中节点 |
deleteNode | id:string | number | 删除单个节点 |
deleteAllNode | - | 删除所有节点 |