当前位置: 首页 > article >正文

从审批流到组织架构:用AntV X6 1.x 在Vue里打造一个可交互的业务图表

从审批流到组织架构用AntV X6 1.x 在Vue里打造可交互的业务图表当我们需要在后台管理系统中实现复杂的业务流程可视化时简单的静态图表往往难以满足需求。AntV X6作为专业的图编辑引擎配合Vue框架能够帮助我们构建出既美观又实用的交互式业务图表。本文将带你从零开始实现一个完整的审批流程可视化组件并探讨如何将其扩展应用到组织架构等更多业务场景中。1. 环境准备与基础配置在开始之前我们需要确保开发环境配置正确。与简单的流程图不同业务图表往往需要处理更复杂的数据结构和交互逻辑。首先安装必要的依赖yarn add antv/x61.34.6 dagre insert-css这里我们选择X6的1.x版本主要考虑两点一是1.x版本文档和社区资源更丰富二是2.x版本API变化较大对于业务项目来说稳定性更为重要。创建一个基础的Vue组件框架template div idcontainer refcontainer/div /template script setup import { Graph } from antv/x6 import dagre from dagre import insertCss from insert-css import { onMounted, onUnmounted } from vue let graph null onMounted(() { initGraph() }) onUnmounted(() { graph?.dispose() }) /script2. 构建业务节点与连线业务图表的核心在于如何将业务实体映射为可视化元素。以审批流程为例我们需要考虑节点类型审批人、条件分支等节点状态待处理、已通过、已拒绝节点属性审批人信息、审批时限等2.1 自定义业务节点Graph.registerNode(approval-node, { width: 180, height: 60, markup: [ { tagName: rect, attrs: { class: body, rx: 4, ry: 4, fill: #FFFFFF, stroke: #5F95FF, strokeWidth: 1 } }, { tagName: text, attrs: { class: label, fill: #333, fontSize: 12, refX: 0.5, refY: 0.5, textAnchor: middle, textVerticalAnchor: middle } }, { tagName: image, attrs: { class: avatar, width: 24, height: 24, refX: 10, refY: 18 } } ], attrs: { .body: { refWidth: 100%, refHeight: 100% } } })2.2 动态样式绑定业务图表通常需要根据数据状态动态改变外观function updateNodeStyle(node, status) { const statusColor { pending: #FFD700, approved: #52C41A, rejected: #F5222D } node.attr({ .body: { stroke: statusColor[status] || #5F95FF }, .label: { text: ${node.data.name} (${status}) } }) }3. 实现业务交互功能静态图表只是开始真正的价值在于丰富的交互体验。我们需要实现以下功能节点点击查看详情右键上下文菜单状态变更实时反馈连线上的操作按钮3.1 节点点击事件graph.on(node:click, ({ node }) { const nodeData node.data // 在实际项目中这里可以触发模态框显示详细信息 console.log(点击节点:, nodeData) // 模拟审批通过操作 if (nodeData.status pending) { node.data.status approved updateNodeStyle(node, approved) } })3.2 右键菜单实现graph.on(node:contextmenu, ({ node, e }) { e.preventDefault() const menuItems [ { label: 查看详情, action: view }, { label: 转交审批, action: transfer }, { label: 加急处理, action: urgent } ] // 实际项目中应渲染自定义菜单组件 console.log(可操作项:, menuItems) })4. 数据绑定与自动布局业务图表需要与实际业务数据紧密绑定同时保持良好的可视化效果。4.1 从API加载数据async function loadApprovalData() { // 模拟API请求 const response await fetch(/api/approval-flow) const data await response.json() const nodes data.steps.map(step { return graph.createNode({ shape: approval-node, id: step.id, data: step, position: { x: 0, y: 0 }, // 布局算法会重新定位 attrs: { .label: { text: step.name }, .avatar: { xlinkHref: step.avatar } } }) }) const edges [] for (let i 1; i nodes.length; i) { edges.push( graph.createEdge({ shape: approval-edge, source: { cell: nodes[i-1].id }, target: { cell: nodes[i].id } }) ) } graph.resetCells([...nodes, ...edges]) applyDagreLayout() }4.2 自动布局优化function applyDagreLayout() { const dagreGraph new dagre.graphlib.Graph() dagreGraph.setGraph({ rankdir: LR, nodesep: 50, ranksep: 70 }) dagreGraph.setDefaultEdgeLabel(() ({})) graph.getNodes().forEach(node { dagreGraph.setNode(node.id, { width: node.getSize().width, height: node.getSize().height }) }) graph.getEdges().forEach(edge { dagreGraph.setEdge(edge.getSourceCellId(), edge.getTargetCellId()) }) dagre.layout(dagreGraph) graph.freeze() dagreGraph.nodes().forEach(id { const node graph.getCell(id) if (node) { const pos dagreGraph.node(id) node.position(pos.x, pos.y) } }) graph.unfreeze() }5. 扩展应用组织架构图同样的技术可以应用于组织架构可视化只需调整节点设计和数据映射方式。5.1 组织架构节点设计Graph.registerNode(org-node, { width: 220, height: 80, markup: [ { tagName: rect, attrs: { class: card, rx: 8, ry: 8, fill: #FAFAFA, stroke: #D9D9D9 } }, { tagName: image, attrs: { class: avatar, width: 48, height: 48, x: 16, y: 16 } }, { tagName: text, attrs: { class: name, x: 80, y: 35, fontSize: 14, fontWeight: bold } }, { tagName: text, attrs: { class: title, x: 80, y: 55, fontSize: 12 } } ] })5.2 组织架构数据映射function renderOrgChart(orgData) { const nodes orgData.employees.map(emp { return graph.createNode({ shape: org-node, id: emp.id, data: emp, attrs: { .avatar: { xlinkHref: emp.avatar }, .name: { text: emp.name }, .title: { text: emp.title } } }) }) const edges orgData.reportsTo .filter(report report.from report.to) .map(report { return graph.createEdge({ shape: org-edge, source: { cell: report.from }, target: { cell: report.to } }) }) graph.resetCells([...nodes, ...edges]) applyOrgLayout() }6. 性能优化与调试技巧随着业务数据量增加性能问题会逐渐显现。以下是一些实用优化建议按需渲染只渲染可视区域内的节点简化图形大数据量时使用简化版的节点样式批量操作使用graph.freeze()和graph.unfreeze()包裹批量更新事件节流对频繁触发的事件进行节流处理// 视口内可见性检测 function isNodeVisible(node) { const bbox node.getBBox() const viewport graph.getClientRect() return !( bbox.x viewport.x viewport.width || bbox.x bbox.width viewport.x || bbox.y viewport.y viewport.height || bbox.y bbox.height viewport.y ) }在开发过程中可以利用X6提供的调试工具// 开启调试模式 graph.enableDebug() // 查看节点状态 console.log(graph.getNodes().map(n n.getData()))

相关文章:

从审批流到组织架构:用AntV X6 1.x 在Vue里打造一个可交互的业务图表

从审批流到组织架构:用AntV X6 1.x 在Vue里打造可交互的业务图表 当我们需要在后台管理系统中实现复杂的业务流程可视化时,简单的静态图表往往难以满足需求。AntV X6作为专业的图编辑引擎,配合Vue框架,能够帮助我们构建出既美观又…...

YOLO26-seg分割优化:注意力魔改 | SimAM(无参Attention),一种轻量级的自注意力机制,效果秒杀CBAM、SE

💡💡💡SimAM是一种轻量级的自注意力机制,其网络结构与Transformer类似,但是在计算注意力权重时使用的是线性层而不是点积 💡💡💡本文改进:分别加入到YOLO26的backbone、neck、detect,助力涨点 改进1结构图: 改进2结构图: 改进3结构图:...

如何在Blender中导入MMD模型:MMD Tools插件完整教程

如何在Blender中导入MMD模型:MMD Tools插件完整教程 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools 如果…...

biliTickerBuy项目中的HTTP 429错误处理优化:3大策略提升抢票成功率

biliTickerBuy项目中的HTTP 429错误处理优化:3大策略提升抢票成功率 【免费下载链接】biliTickerBuy b站会员购购票辅助工具 项目地址: https://gitcode.com/GitHub_Trending/bi/biliTickerBuy 在B站会员购抢票工具biliTickerBuy中,HTTP 429错误处…...

如果临近上线,你的组员说有风险,你作为组长应该怎么处理

一、第一时间先稳住,别慌也别压不让组员不敢说话不让团队陷入情绪对立让组员同步完整信息:问题复现步骤、影响范围(全量 / 部分用户、核心流程 / 边缘功能)问题严重级别:崩溃 / 资损 / 流程阻断 / UI 小问题根因初步判…...

论文阅读:ICLR 2026 A Guardrail for Safety Preservation: When Safety-Sensitive Subspace Meets Harmful-Res

总目录 大模型安全研究论文整理 2026年版:https://blog.csdn.net/WhiffeYF/article/details/159047894 https://openreview.net/forum?id887vde4ZAW https://openreview.net/pdf?id887vde4ZAW A Guardrail for Safety Preservation: When Safety-Sensitive Sub…...

Microchip PIC64GX:64位RISC-V多核微处理器解析与应用

1. Microchip PIC64GX:首款64位RISC-V多核微处理器深度解析当Microchip宣布推出PIC64GX系列时,整个嵌入式行业都为之一振。作为Microchip首款64位RISC-V架构的微处理器,PIC64GX不仅填补了该公司在高性能RISC-V处理器领域的空白,更…...

终极指南:如何在Windows上轻松玩转经典Flash游戏与存档管理

终极指南:如何在Windows上轻松玩转经典Flash游戏与存档管理 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 你是否怀念那些曾经风靡一时的Flash游戏?当现代浏览器纷…...

LeetCode 接雨水:python 题解

1. 智能软件工程的范式转移:从库集成到原生框架演进 在生成式人工智能(Generative AI)从单纯的文本生成向具备自主规划与执行能力的“代理化(Agentic)”系统跨越的过程中,.NET 生态系统正在经历一场自该平台…...

XUnity.AutoTranslator完整教程:3步实现Unity游戏实时翻译

XUnity.AutoTranslator完整教程:3步实现Unity游戏实时翻译 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾因为语言障碍而无法畅玩心仪的日系RPG或欧美独立游戏?XUnity.Au…...

从‘孔径不够’到‘合成来凑’:聊聊SAR模型背后的工程智慧与那些年我们踩过的坑

从‘孔径不够’到‘合成来凑’:SAR模型背后的工程智慧与实战陷阱 雷达技术的发展史就是一部人类突破物理限制的史诗。上世纪50年代,当工程师们面对"要获得3米分辨率需要数十公里天线孔径"这一不可能任务时,合成孔径雷达&#xff08…...

Code The Hidden Language of Computer Hardware and Software 学习:CPU 控制信号电路详解

概述 这8张图描述了一个简单8位CPU的控制逻辑电路,负责在不同机器周期(取指、PC自增、执行)中,按正确时序产生各种控制信号,驱动寄存器、RAM、ALU等部件协同工作。 一、机器周期的基本结构 CPU每执行一条指令&#xff…...

99.26%降AI达标率+9平台覆盖:嘎嘎降AI 4.8元单价怎么做到的?

挑降 AI 工具的时候很多同学最关心的是"达标率"——但市面上号称"高达标率"的工具不少,真正公开具体数据并能解释数据来源的不多。 嘎嘎降AI 公开的 99.26% 达标率是这次推荐的核心数据之一。这个数字不是营销话术——是基于超过十亿字符真实处…...

知网AIGC算法升级让你的降AI工具失效?嘎嘎降AI 7天免费再处理!

很多同学买完降 AI 工具就以为万事大吉了,但 2026 年毕业季有一个被忽略的真实风险——算法升级带来的"昨天 OK 今天突然超标"。 嘎嘎降AI 的售后保障里有一条很少有工具提供的政策——7 天内 AIGC 检测平台算法升级导致 AI 率变化也能免费再处理。这条政…...

赌不起场景买降AI率工具看什么?比话降AI 3+1保障实际损失为零!

赌不起场景是降 AI 工具市场上最特殊的需求——你的论文不能延毕、不能错过答辩、不能学位审核翻车。这种场景下选工具的逻辑跟普通场景完全不同。 普通场景看单价、效果、口碑就够了。赌不起场景看的是翻车场景下的真实损失——万一工具不达标你能承受多大的成本?…...

从气象预测到金融风控:交叉小波相干性分析在Matlab中的跨界应用实战

从气象预测到金融风控:交叉小波相干性分析在Matlab中的跨界应用实战 当环境科学家试图理解厄尔尼诺现象如何影响区域降雨模式,或是金融分析师需要预测不同资产类别的联动周期时,他们面临的共同挑战是:传统统计方法难以捕捉随时间变…...

手把手教你用Python调参:让LSTM和ARIMA在时间序列预测里“各司其职”(基于PyTorch和pmdarima)

时间序列预测实战:LSTM与ARIMA融合调参全流程解析 时间序列预测一直是数据分析领域的核心挑战之一。无论是金融市场的波动预测、能源消耗的趋势分析,还是电商平台的销售预估,精准的时间序列模型都能为决策提供关键支持。传统统计方法如ARIMA擅…...

DLSS Swapper完全指南:3分钟免费提升游戏画质与性能的终极方案

DLSS Swapper完全指南:3分钟免费提升游戏画质与性能的终极方案 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 你是否曾在4K分辨率下游戏时,明明显卡性能足够,画面却依然模糊卡顿&am…...

目标检测YOLOv5前,别忘了用OpenCV给图像做个‘光照SPA’:预处理实战

目标检测YOLOv5前,别忘了用OpenCV给图像做个‘光照SPA’:预处理实战 在计算机视觉的实际工程中,我们常常过于关注模型架构的优化,却忽略了输入数据质量对最终性能的决定性影响。想象一下,即便是最先进的YOLOv5模型&…...

告别JSON臃肿:用Apache Avro为你的Kafka或Hudi数据瘦身(附实战代码)

告别JSON臃肿:用Apache Avro为你的Kafka或Hudi数据瘦身(附实战代码) 最近在优化数据管道时,发现JSON格式的数据体积膨胀得厉害——每条记录都要重复字段名,网络传输和磁盘存储的成本高得吓人。更糟的是,序列…...

基于Netty与WebSocket构建高性能物联网推送服务:从原理到实践

1. 项目概述与核心价值最近在折腾一个物联网项目,需要从一堆传感器节点里高效地收集数据。传统的轮询方式在节点数量上去之后,延迟和服务器压力都成了大问题。就在我琢磨着怎么优化架构时,偶然发现了 GitHub 上一个名为 “Caryyon/antenna” …...

Go语言WebSocket实时聊天后端架构设计与实现指南

1. 项目概述:一个轻量级的实时聊天应用后端 最近在折腾一个需要实时通信功能的小项目,不想用那些大而全的解决方案,感觉太重了,维护成本也高。于是就在开源社区里翻找,发现了 donapart/klatsch 这个项目。光看名字 “…...

终极碧蓝航线自动化脚本:Alas如何24小时解放你的双手 [特殊字符]

终极碧蓝航线自动化脚本:Alas如何24小时解放你的双手 🚢 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript …...

如何快速获取百度网盘提取码:baidupankey终极使用指南

如何快速获取百度网盘提取码:baidupankey终极使用指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘提取码而反复搜索浪费时间吗?baidupankey作为一款专业的百度网盘提取码智能获取工具…...

技术访问者的操作扩展与元素分离

技术访问者的操作扩展与元素分离:提升交互效率的新思路 在当今数字化时代,技术访问者(如自动化脚本、爬虫或API调用者)与网页元素的交互方式直接影响效率与稳定性。传统方法往往依赖固定的DOM结构,一旦页面布局变动&a…...

NVMe 2.3协议学习

文章目录1 Controller Properties1.1 如何访问1.2 Controller 初始化流程1.3 CAP - Controller Capabilities (Offset 00h, 64-bit)X 面试场景问题1 为什么Properties Host必须通过BAR访问,不能通过DMA?2 如果Host按dword访问qword的CAP会怎样&#xff1…...

深度学习篇---匈牙利算法与OC-SORT

匈牙利算法与OC-SORT,一个是解决“最优匹配”的经典运筹学方法,另一个是赋予其动态场景“感知”能力的现代多目标跟踪框架。两者结合,解决了一个核心问题:如何跨时间,将不同的“点”最合理地关联起来。🤝 匈…...

如何永久备份微信聊天记录?WeChatMsg让你的珍贵对话永不丢失

如何永久备份微信聊天记录?WeChatMsg让你的珍贵对话永不丢失 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...

c语言的练习—二维数组的练习(对称矩阵的判定)

对于此道题,所谓对称矩阵,意思就是关于左对角线对称的数字对应相等。那么我们不妨使用我上一次发表的文章的方法来进行规律的寻找。我们不妨使用题目中的第一个例子来举例接下来我以图片的方式呈现出来显然的,我们能够发现这两个三的位置和两…...

智慧树刷课插件终极指南:3分钟实现学习自动化,效率提升300% ⚡

智慧树刷课插件终极指南:3分钟实现学习自动化,效率提升300% ⚡ 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台繁琐的视频学习…...