@antv/x6 再vue中 ,自定义图形,画流程图、数据建模、er图等图形

X6 是基于 HTML 和 SVG 的图编辑引擎,提供低成本的定制能力和开箱即用的内置扩展,方便我们快速搭建 DAG 图、ER 图、流程图、血缘图等应用。

最终效果图

1.安装

npm install @antv/x6 --save  //x6主要包

npm install  @antv/x6-vue-shape  //使用vue组件画图插件
npm install @antv/x6-plugin-dnd //拖拽 添加元素图形插件

2.直接上代码

dom元素 form.vue

<template><!-- 新增、编辑弹窗--><el-dialog width="1200px" class="flow-dialog" top="5vh" title="实体编辑" :visible.sync="show" :append-to-body="true" :close-on-click-modal = "false" v-el-drag-dialog><div class="content"><!--左侧工具栏--><div class="stencil" ><p>流程编辑器</p><span @mousedown="startDragToGraph(item, $event)" v-for="item in list" :key="item" @click="test(item)" class="percentage-value"><i style="margin-right: 5px;cursor: pointer;"  class="el-icon-setting"/><span class="percentage-content">{{ item }}</span></span></div><div class="panel"><!--流程图工具栏--><div class="toolbar"><el-button class="float-btn" icon="el-icon-s-claim" type="primary" @click="save()">保存</el-button><el-button class="float-btn" icon="el-icon-s-home" type="danger" @click="show=false">退出</el-button><el-button style="margin-left: 100px;" class="float-btn" icon="el-icon-s-tools" type="success" @click="">设置预览参数</el-button><el-button class="float-btn" icon="el-icon-notebook-2" type="info" @click="">预览节点数据</el-button><el-button class="float-btn" icon="el-icon-refresh" type="success" @click="">重算预览数据</el-button></div><!--流程图画板--><div id="containerShape" /></div></div></el-dialog></template>

js部分

<script>import elDragDialog from '@/directive/el-drag-dialog'import { register } from '@antv/x6-vue-shape'import { Graph,Shape} from "@antv/x6";import CustomNode from './CustomNode.vue'import { Dnd } from '@antv/x6-plugin-dnd'export default {directives: { elDragDialog },data() {return {show:false,list: ['数据查询', '横向连接', '追加合并', '分组汇总', '数据过滤','字段设置','输出'],graph:{}}},mounted() {const attrs = {circle: {r: 4,magnet: true,fill: '#fff',stroke: '#85A5FF',strokeWidth: 1,},};register({shape: 'custom-vue-node',component: CustomNode,width: 180,height: 40,// port默认不可见ports: {groups: {in: {position: {name:'left',args: {dx: -10,y: '50%',},},attrs: attrs},out: {position: {name:'right',args: {x: '100%',dx: 10,y: '50%',},},attrs: attrs},},},})},methods: {open() {this.show = true;this.$nextTick(() => {this.init("containerShape");});},init(id){const graph = new Graph({container: document.getElementById(id),width: 1000,height: 1000,connecting: {router: 'manhattan',anchor: 'center',connectionPoint: 'anchor',createEdge() {return new Shape.Edge({attrs: {line: {stroke: '#52c41a',strokeWidth: 1,strokeDasharray: 5,targetMarker: 'classic',style: {animation: 'ant-line 30s infinite linear',},},},zIndex: 0,})},}})graph.addNode({shape: 'custom-vue-node',x: 100,y: 100,ports: [{group: 'in'},{group: 'out'}],data:{percentage: 30}})this.graph = graph;},save() {this.graph.addNode({shape: 'custom-vue-node',x: 200,y: 300,ports: [{group: 'in'},{group: 'out'}],data:{percentage: '数据流程飒飒飒飒拉开阿斯兰的卡死了的科目来打开'}})},// 自定义一个拖拽方法,也可以单独封装成一个js文件(方便调用)// 这里直接写到vue文件的methods方法里了// 需求:未置灰的可以拖拽,置灰的无法拖拽即禁用状态startDragToGraph(item, e) {const node = this.graph.createNode({shape: 'custom-vue-node',x: 200,y: 300,ports: [{group: 'in'},{group: 'out'}],data:{percentage: item}});const dnd = new Dnd({target: this.graph,// ☆拖拽结束时,验证节点是否可以放置到目标画布中。validateNode: () => {console.log('成功拖拽至目标画布')},})dnd.start(node, e)},}}
</script>

css部分

<style type="text/css">@keyframes ant-line {to {stroke-dashoffset: -1000}}
</style><style type="text/css" scoped>.flow-dialog ::v-deep .el-dialog__body{max-height: 85vh;padding: 0;}.toolbar ::v-deep .el-button--small{padding: 5px 10px;}.content {width: 1180px;height: 85vh;display: flex;}.stencil {width: 230px;height: 100%;position: relative;margin-right: 10px;border-right: 1px solid rgba(0, 0, 0, 0.08);box-sizing: border-box;text-align: center;}.stencil p{margin: 0;line-height: 37px;border-bottom: 1px solid #00000008;background-color: #f7f9fb;font-size: 14px;padding-left: 5px;text-align: left;}.panel {width: calc(100% - 230px);height: 100%;}.panel .toolbar {width: 100%;height: 38px;display: flex;align-items: center;background-color: #f7f9fb;border-bottom: 1px solid rgba(0, 0, 0, 0.08);}.panel #containerShape {width: 100%;height: calc(100% - 10px) !important;}.percentage-value{display: inline-block;width: max-content;background-color: #fff;border: 1px solid #c2c8d5;border-left: 4px solid #5F95FF;border-radius: 4px;box-shadow: 0 2px 5px 1px rgba(0, 0, 0, 0.06);padding: 8px;font-size: 16px;margin-top: 10px;text-align: left;}.percentage-content{width: 100px;max-width: 150px;overflow: hidden;font-size: 12px;display: inline-block;}</style>

CustomNode.vue节点元素dom

<template><span class="percentage-value"><i style="margin-right: 5px;cursor: pointer;" @click="save()" class="el-icon-setting"/><span class="percentage-content">{{ percentage }}%</span><i @click="save()" class="el-icon-success data-start"/></span>
</template><script>export default {inject: ['getNode'],data() {return {percentage: 50,}},mounted() {const cell = this.getNode();this.percentage = cell.data.percentage;},methods: {save(){console.log("点击成功")}}}
</script>
<style type="text/css" scoped>.percentage-value{display: inline-block;width: max-content;background-color: #fff;border: 1px solid #c2c8d5;border-left: 4px solid #5F95FF;border-radius: 4px;box-shadow: 0 2px 5px 1px rgba(0, 0, 0, 0.06);padding: 10px;font-size: 16px;}.percentage-content{width: 100px;max-width: 150px;overflow: hidden;font-size: 12px;display: inline-block;}.data-start{margin-right: 5px;margin-left: 10px;cursor: pointer;color: #6bcc00;}
</style>

相关官方文档x6.antv官网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/482824.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode + conda + qt联合开发

安装vscode 安装conda 清华大学开源软件镜像(Anaconda下载)_清华大学镜像-CSDN博客 conda create新建一个环境&#xff0c;激活这个环境&#xff0c;然后安装pyside6 pip install pyside6 -i https://pypi.tuna.tsinghua.edu.cn/simple 安装成功后输入 pip list查看是否安装…

debian 11 虚拟机环境搭建过坑记录

目录 安装过程系统配置修改 sudoers 文件网络配置换源安装桌面mount nfs 挂载安装复制功能tab 无法补全其他安装 软件配置eclipse 配置git 配置老虚拟机硬盘挂载 参考 原来去 debian 官网下载了一个最新的 debian 12&#xff0c;安装后出现包依赖问题&#xff0c;搞了半天&…

WPF DataGrid 列隐藏

Window节点加上下面的 <Window.Resources><FrameworkElement x:Key"ProxyElement" DataContext"{Binding}" /></Window.Resources>然后随便加一个隐藏控件 <ContentControl Content"{StaticResource ProxyElement}" Visi…

【实体配置】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

手机卡限速丨中国移动5G变3G,网速500kb

以下猜测错误&#xff0c;又有新的猜测&#xff1a;河南移动的卡出省限速。可能是因为流量结算。 “2024年7月1日起&#xff0c;中国移动集团内部将开启跨省流量结算” 在深圳四五年了&#xff0c;之前没有过&#xff0c;就从上个月开始。11月底解除限速&#xff0c;12月刚开…

不同云计算网络安全等级

导读云计算的本质是服务&#xff0c;如果不能将计算资源规模化/大范围的进行共享&#xff0c;如果不能真正以服务的形式提供&#xff0c;就根本算不上云计算。 等级保护定级流程 定级是开展网络安全等级保护工作的 “基本出发点”&#xff0c;虚拟化技术使得传统的网络边界变…

【python】OpenCV—Tracking(10.5)—dlib

文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、涉及到的库函数dlib.correlation_tracker() 6、参考 1、功能描述 基于 dlib 库&#xff0c;实现指定类别的目标检测和单目标跟踪 2、代码实现 caffe 模型 https://github.com/MediosZ/MobileNet-SSD/tree/master/…

通义灵码走进北京大学创新课堂丨阿里云云原生 10 月产品月报

云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》&#xff0c;从趋势热点、产品新功能、服务客户、开源与开发者动态等方面&#xff0c;为企业提供数字化的路径与指南。 趋势热点 &#x1f947; 通义灵码走进北京大学创新课堂&#xff0c;与 400…

Flink双流Join

在离线 Hive 中&#xff0c;我们经常会使用 Join 进行多表关联。那么在实时中我们应该如何实现两条流的 Join 呢&#xff1f;Flink DataStream API 为我们提供了3个算子来实现双流 join&#xff0c;分别是&#xff1a; join coGroup intervalJoin 下面我们分别详细看一下这…

Vue3学习宝典

1.ref函数调用的方式生成响应式数据&#xff0c;可以传复杂和简单数据类型 <script setup> // reactive接收一个对象类型的数据 import { reactive } from vue;// ref用函数调用的方式生成响应式数据&#xff0c;可以传复杂和简单数据类型 import { ref } from vue // 简…

C++(4个类型转换)

1. C语言中的类型转换 1. 隐式 类型转换&#xff1a; 具有相近的类型才能进行互相转换&#xff0c;如&#xff1a;int,char,double都表示数值。 2. 强制类型转换&#xff1a;能隐式类型转换就能强制类型转换&#xff0c;隐式类型之间的转换类型强相关&#xff0c;强制类型转换…

《DSL-FIQA》论文翻译

《DSL-FIQA: Assessing Facial Image Quality Via Dual-Set Degradation Learning and Landmark-Guided Transformer》 原文链接&#xff1a;DSL-FIQA: Assessing Facial Image Quality via Dual-Set Degradation Learning and Landmark-Guided Transformer | IEEE Conference…

mac终端自定义命令打开vscode

1.打开终端配置文件 open -e ~/.bash_profile终端安装了zsh&#xff0c;那么配置文件是.zshrc&#xff08;打开zsh配置&#xff0c;这里举&#x1f330;使用zsh&#xff09; sudo open -e ~/.zshrc 2.在zshrc配置文件中添加新的脚本&#xff08;这里的code就是快捷命令可以进…

vue基础之6:计算属性、姓名案例、简写计算属性

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

Qt桌面应用开发 第十天(综合项目二 翻金币)

目录 1.主场景搭建 1.1重载绘制事件&#xff0c;绘制背景图和标题图片 1.2设置窗口标题&#xff0c;大小&#xff0c;图片 1.3退出按钮对应关闭窗口&#xff0c;连接信号 2.开始按钮创建 2.1封装MyPushButton类 2.2加载按钮上的图片 3.开始按钮跳跃效果 3.1按钮向上跳…

【从零开始的LeetCode-算法】35. 搜索插入位置

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示例 2: 输入: …

掌上单片机实验室 — RT - Thread+ROS2 浅尝(26)

前面化解了Micro_ROS通讯问题&#xff0c;并在 RT-Thread Studio 环境下&#xff0c;使用Micro_ROS软件包中的例程&#xff0c;实现了STM32F411CE核心板和ROS2主机的通讯。之后还尝试修改例程 micro_ros_sub_twist.c &#xff0c;实现了接收 turtle_teleop_key 所发出的 turtle…

展现运动类型

同样&#xff0c;我们通过函数的方式将运动类型插入我们的HTML代码中 _renderWorkout(workout) {let html <li class"workout workout-${workout.type}" data-id"${workout.id}"><h2 class"workout__title">${workout.description}…

vscode 怎么下载 vsix 文件?

参考&#xff1a;https://marketplace.visualstudio.com/items?itemNameMarsCode.marscode-extension 更好的办法&#xff1a;直接去相关插件的 github repo 下载老版本 https://github.com/VSCodeVim/Vim/releases?page5 或者&#xff0c;去 open-vsx.org 下载老版本 点击这…

python 练习题

目录 1&#xff0c;输入三个整数&#xff0c;按升序输出 2&#xff0c;输入年份及1-12月份&#xff0c;判断月份属于大月&#xff0c;小月&#xff0c;闰月&#xff0c;平月&#xff0c;并输出本月天数 3&#xff0c;输入一个整数&#xff0c;显示其所有是素数因子 4&#…