vue-topology-flow 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,95 @@
1
+ # vue-topology-flow
2
+
3
+ 独立可复用的网络拓扑组件包(Vue 3 + TypeScript)。以 **props 输入 + 事件输出** 的受控组件形式提供,宿主项目按需配置交互、自行接入业务后端,组件本身不依赖任何具体接口。
4
+
5
+ ## 主要作用
6
+
7
+ 一套代码同时满足两种拓扑场景,作为独立 npm 包提供给任意 Vue 3 项目使用:
8
+
9
+ 1. **自动拓扑(auto)**:将网络扫描结果渲染为拓扑图,支持多种布局算法(含 ELK 分层布局)、布局切换、设备绑定与详情查看,适用于"扫描出来的网络结构可视化"。
10
+ 2. **手动绘图(manual)**:基于 X6 的流程图画布,左侧图形面板拖拽建图,支持图标节点 / 文本节点 / 分组容器 / 连线编辑,适用于"人工绘制网络拓扑、流程图"。
11
+
12
+ ## 功能一览
13
+
14
+ ### 自动拓扑
15
+ - 扫描设备/链路数据渲染,未解析节点单独归类
16
+ - 多布局算法与自定义布局,布局保存与恢复
17
+ - 设备绑定/解绑、设备详情弹窗、搜索定位
18
+ - 视图操作:预览、导出(PNG/SVG/JSON)、生成缩略图
19
+
20
+ ### 手动绘图
21
+ - 左侧分组面板拖拽建节点:基础流程图形状、文本(矩形/圆形)、系统设计图、PNG/SVG 图标、分组容器
22
+ - 连线:端口吸附、正交/曲线/直线/弧线、箭头、虚实、线宽、颜色、标签编辑
23
+ - 分组容器:背景/边框/头部样式设置、重命名、解散
24
+ - 画布操作:缩放、平移、框选、撤销/重做、网格、快捷键、清空、导出
25
+ - 预览模式(只读查看)
26
+
27
+ ### 可配置交互(对宿主开放)
28
+ - **右键菜单**:内置项(查看详情/设置/重命名/关联设备/线条编辑/断开连接/删除等)可隐藏、覆盖、追加自定义项,或完全替换自绘
29
+ - **点击行为**:按元素类别(节点/连线/容器/文本)分别配置 `select`(选中)/ `detail`(详情)/ `edit`(编辑弹窗)/ `none`(仅事件)
30
+ - **工具条**:保存/缩略图/预览/导出按钮可分别隐藏
31
+ - **事件输出**:`node-click` / `edge-click` / `group-click` / `text-click` / `node-dblclick` / `blank-click` / `context-menu` / `save` / `change` / `bind` / `unbind` 等,业务逻辑由宿主处理
32
+ - 菜单组装与点击行为解析抽离为独立纯函数模块(`menu.ts` / `interactions.ts`),宿主可 import 后动态扩展
33
+
34
+ ## 技术栈
35
+
36
+ Vue 3 `<script setup>` + TypeScript · Vite 6 · AntV X6 3.x · elkjs · element-plus(peer)
37
+
38
+ ## 安装与使用
39
+
40
+ ```bash
41
+ npm install vue-topology-flow
42
+ # peer: vue ^3.3 / element-plus >= 2.4 / @antv/x6 ^3.1 / @element-plus/icons-vue ^2.3
43
+ ```
44
+
45
+ ```vue
46
+ <script setup lang="ts">
47
+ import { ref } from 'vue'
48
+ import { TopologyGraph, type TopologyDocument, type TopologyEventTarget } from 'vue-topology-flow'
49
+ import 'vue-topology-flow/index.css'
50
+
51
+ const data = ref<TopologyDocument>(/* 拓扑数据 */)
52
+ const onSave = (doc: TopologyDocument) => { /* 宿主保存到后端 */ }
53
+ const onNodeClick = (t: TopologyEventTarget) => { /* 宿主业务 */ }
54
+ </script>
55
+
56
+ <template>
57
+ <TopologyGraph mode="manual" :data="data" @save="onSave" @node-click="onNodeClick" />
58
+ </template>
59
+ ```
60
+
61
+ 也可通过 `ref` 持有 `TopologyHandle` 调用 `getData()` / `save()` / `fitView()` / `exportFile()`。
62
+
63
+ 完整演示与全部 props/events 配置见 `src/App.vue`(`npm run dev` 启动演示站)。
64
+
65
+ ## 开发
66
+
67
+ ```bash
68
+ npm install
69
+ npm run dev # 演示站 (Vite)
70
+ npm run typecheck # vue-tsc 类型检查
71
+ npm run build # lib 构建 (dist/, 含 .d.ts 声明)
72
+ npm run build:demo # 演示站构建
73
+ ```
74
+
75
+ ## 目录结构
76
+
77
+ ```
78
+ src/components/topology/
79
+ ├── TopologyGraph.vue # 统一入口 (mode=auto|manual)
80
+ ├── types.ts # 对外类型: 文档/事件目标/菜单/点击行为/工具条配置
81
+ ├── index.ts # 包出口 (组件 + 类型 + 交互配置函数)
82
+ ├── auto/ # 自动拓扑: 渲染/布局(ELK)/数据/样式
83
+ ├── manual/ # 手动绘图:
84
+ │ ├── ManualTopology.vue # 画布 + 面板 + 弹窗
85
+ │ ├── menu.ts # 右键菜单组装 (纯函数, 可扩展)
86
+ │ ├── interactions.ts # 元素分类与点击行为解析 (纯函数)
87
+ │ └── data/ # 面板图形配置
88
+ └── shared/ # 设备选择抽屉/详情弹窗
89
+ ```
90
+
91
+ ## 设计约定
92
+
93
+ - 组件不内置任何业务接口请求;数据进、事件出,业务归属宿主
94
+ - 导出文件(PNG/SVG)由组件本地生成,不依赖后端
95
+ - 第三方集成时,X6 与 element-plus 由宿主提供(peerDependencies)