Vue3 + Element Plus + AntV X6 实现拖拽树组件
Vue3 + Element Plus + AntV X6 实现拖拽树组件
介绍
在本篇文章中,我们将介绍如何使用 Vue 3 和 Element Plus 结合 @antv/x6 实现树形结构的拖拽功能。用户可以将树节点拖拽到图形区域,自动创建相应的节点。我们将会通过简单的示例来一步步讲解实现过程。
代码实现
1. 使用 el-tree 组件
首先,我们需要在 Vue 组件中使用 el-tree 组件。el-tree 组件是 Element Plus 提供的树形结构组件,它支持丰富的功能,包括节点的拖拽、展开、折叠等。
<template><el-tree:data="treeData":props="{ label: 'label', children: 'children' }"ref="deptTreeRef"default-expand-all><template #default="{ node, data }"><divclass="custom-tree-node"@mousedown="startDrag($event, node, data)"><imgv-if="node.level === 1 && data.type === '1'"src="@/assets/system/images/dpp/tsr.png"alt="icon"class="icon-img"/><imgv-if="node.level === 1 && data.type === '2'"src="@/assets/system/images/dpp/tsc.png"alt="icon"class="icon-img"/><span class="treelable">{{ data.label }}</span></div></template></el-tree>
</template>
代码解析
el-tree 组件:用来展示树形数据。我们通过 :data 属性传入树的数据,并通过 :props 设置节点的显示字段。
default-expand-all:使所有节点默认展开。
@mousedown=“startDrag($event, node, data)”:在鼠标按下时触发 startDrag 方法,开始拖拽。
- 拖拽逻辑
在 startDrag 方法中,我们会处理节点的拖拽逻辑。首先判断点击的树节点是否是二级节点,如果是,则根据节点的类型创建一个图形节点,并启动拖拽操作。
const startDrag = (e, treeNode, data) => {// 只处理二级节点的拖拽if (treeNode.level === 2) {// 判断是否可以拖拽if (!data.componentType) {return alert("该组件正在开发中!");}// 创建一个新节点并设置数据const node = graph.createNode({shape: "rect", // 图形的形状width: 180,height: 50,label: data.label, // 节点的标签data: { // 节点的附加数据 (所有自定义的数据都可以写里面 )taskType: data.taskType,componentType: data.componentType,icon: data.icon,},});// 启动拖拽操作dnd.start(node, e);}
};
代码解析
graph.createNode:在图形区域中创建一个新节点,设置节点的形状、宽高、标签等属性。
dnd.start(node, e):调用 @antv/x6 提供的拖拽接口,启动拖拽操作。
- 图标和节点数据
我们根据 data.icon 动态设置节点图标。如果树节点有自定义的图标路径,会显示该图标。如果没有,则显示默认的图标。
<imgv-if="data.icon":src="data.icon"alt="icon"class="icon-img"
/>
通过这种方式,我们能灵活地控制每个节点的显示内容。
总结
通过上述代码,我们展示了如何在 Vue3 中结合 Element Plus 和 AntV X6 实现树形节点的拖拽功能。主要步骤包括:
使用 el-tree 展示树结构。
通过 @mousedown 事件触发拖拽操作。
动态创建图形节点并启动拖拽。
这种方式不仅能提高用户体验,还能为后续更复杂的图形编辑功能奠定基础。希望本文能帮助你更好地理解如何实现树形节点的拖拽和自定义图标展示。
相关文章:
Vue3 + Element Plus + AntV X6 实现拖拽树组件
Vue3 Element Plus AntV X6 实现拖拽树组件 介绍 在本篇文章中,我们将介绍如何使用 Vue 3 和 Element Plus 结合 antv/x6 实现树形结构的拖拽功能。用户可以将树节点拖拽到图形区域,自动创建相应的节点。我们将会通过简单的示例来一步步讲解实现过程…...
从零开始跑通3DGS教程:介绍
写在前面 本文内容 本文所属《从零开始跑通3DGS教程》系列文章,将实现从原始图像(有序、无序)数据开始,经过处理(视频抽帧成有序),SFM,3DGS训练、编辑、渲染等步骤,完整地呈现从原始图像到新视角合成的全部流程&#x…...
聊聊Spring AI的Chat Model
序 本文主要研究一下Spring AI的Chat Model Model spring-ai-core/src/main/java/org/springframework/ai/model/Model.java public interface Model<TReq extends ModelRequest<?>, TRes extends ModelResponse<?>> {/*** Executes a method call to …...
将mysql配置成服务的方法
第一步:配置环境变量 1)新建MYSQL_HOME变量,并配置:C:\Program Files\MySQL\MySQL Server 5.6 MYSQL_HOME:C:\Program Files\MySQL\MySQL Server 5.6 2)编辑path系统变量,将%MYSQL_HOME%\bin添加到path变量后。配置path环境变量…...
GaussDB(for PostgreSQL) 存储引擎:ASTORE 与 USTORE 详细对比
GaussDB(for PostgreSQL) 存储引擎:ASTORE 与 USTORE 详细对比 1. 背景说明 GaussDB(for PostgreSQL) 是华为基于 PostgreSQL 开发的企业级分布式数据库,其存储引擎分为 ASTORE 和 USTORE 两种类型,分别针对不同场景优化。 2. 核心对比 (1)…...
英语口语 -- 常用 1368 词汇
英语口语 -- 常用 1368 词汇 介绍常用单词List1 (96 个)时间类气候类自然类植物类动物类昆虫类其他生物地点类 List2 (95 个)机构类声音类食品类餐饮类蔬菜类水果类食材类饮料类营养类疾病类房屋类家具类服装类首饰类化妆品类 Lis…...
SpringBoot+Vue 中 WebSocket 的使用
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它使得客户端和服务器之间可以进行实时数据传输,打破了传统 HTTP 协议请求 - 响应模式的限制。 下面我会展示在 SpringBoot Vue 中,使用WebSocket进行前后端通信。 后端 1、引入 j…...
关于依赖注入框架VContainer DIIOC 的学习记录
文章目录 前言一、VContainer核心概念1.DI(Dependency Injection(依赖注入))2.scope(域,作用域) 二、练习例子1.Hello,World!步骤一,编写一个底类。HelloWorldService步骤二,编写使用低类的类。GamePresenter步骤三&am…...
LRU缓存是什么
LRU缓存是什么 LRU(Least Recently Used)即最近最少使用,是一种缓存淘汰策略。在缓存空间有限的情况下,当新的数据需要存入缓存,而缓存已满时,LRU 策略会优先淘汰最近最少使用的数据,以此保证缓存中存储的是最近最常使用的数据。 LRU缓存的工作原理 LRU 缓存的核心思…...
Qt常用控件第一部分
1.控件概述 Widget 是 Qt 中的核⼼概念. 英⽂原义是 "⼩部件", 我们此处也把它翻译为 "控件" . 控件是构成⼀个图形化界⾯的基本要素. 像上述⽰例中的, 按钮, 列表视图, 树形视图, 单⾏输⼊框, 多⾏输⼊框, 滚动条, 下拉框等, 都可以称为 "控件"…...
docker存储卷及dockers容器源码部署httpd
1. COW机制 Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。 如果运行中的容器修改了现有的一个已经存在的文件,那么该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本依然存在,只是已经被读写层中该文件…...
JMeter接口自动化发包与示例
前言 JMeter接口自动化发包与示例 近期需要完成对于接口的测试,于是了解并简单做了个测试示例,看了看这款江湖上声名远播的强大的软件-Jmeter靠不靠谱。 官网:Apache JMeter - Apache JMeter™ 1简介 Apache-Jmeter是一个使用java语言编写且开源&…...
INFINI Console 极限控制台密码忘记了,如何重置?
在使用 INFINI Console(极限控制台)时,可能会遇到忘记密码的情况,这对于管理员来说是一个常见但棘手的问题。 本文将详细介绍如何处理 INFINI Console 密码忘记的情况,并提供两种可能的解决方案,帮助您快速…...
Python运算符的理解及简单运用
免责声明 如有异议请在评论区友好交流,或者私信 内容纯属个人见解,仅供学习参考 如若从事非法行业请勿食用 如有雷同纯属巧合 版权问题请直接联系本人进行删改 前言 提示:这里可以添加本文要记录的大概内容: 提示:以…...
汇编学习之《jcc指令》
JCC(Jump on Condition Code)指的是条件跳转指令,c中的就是if-else, while, for 等分支循环条件判断的逻辑。它包括很多指令集,各自都不太一样,接下来我尽量将每一个指令的c 源码和汇编代码结合起来看,加深…...
k8s的容器操作指令
几个命令目录 1、kubectl exec -n ithmp-prod -it <pod-name> /bin/bash命令组成部分使用场景注意事项 2、docker ps基本用法输出格式常用选项1. 列出所有容器(包括已停止的)2. 显示最近创建的容器3. 显示最近创建的几个容器4. 显示容器的详细信息…...
从零构建大语言模型全栈开发指南:第四部分:工程实践与部署-4.3.3低代码开发:快速构建行业应用(电商推荐与金融风控案例)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 从零构建大语言模型全栈开发指南-第四部分:工程实践与部署4.3.3 低代码开发:快速构建行业应用(电商推荐与金融风控案例)1. 低代码与AI结合的核心价值2. 电商推荐系统案例2.1 技术架构与实现2.2 性能…...
基于vue框架的智能服务旅游管理系统54kd3(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
系统程序文件列表 项目功能:用户,景点信息,门票预订,酒店客房,客房预订,旅游意向,推荐景点,景点分类 开题报告内容 基于Vue框架的智能服务旅游管理系统开题报告 一、研究背景与意义 1.1 行业现状与挑战 传统系统局限性:当前旅游管理系统普遍存在信息…...
用Python实现TCP代理
依旧是Python黑帽子这本书 先附上代码,我在原书代码上加了注释,更好理解 import sys import socket import threading#生成可打印字符映射 HEX_FILTER.join([(len(repr(chr(i)))3) and chr(i) or . for i in range(256)])#接收bytes或string类型的输入…...
MySQL的进阶语法7(索引-B+Tree 、Hash、聚集索引 、二级索引(回表查询)、索引的使用及设计原则
目录 一、索引概述 1.1 基本介绍 1.2 基本演示 1.3 特点及优势 二、索引结构 2.1 概述 2.2 二叉树 2.3 B-Tree 2.4 BTree 2.5 Hash 2.5.1 结构 2.5.2 特点 2.5.3 存储引擎支持 三、索引的分类 3.1 索引分类 3.2 聚集索引和二级索引 3.2.1 聚集索引和二级…...
【CSS3】04-标准流 + 浮动 + flex布局
本文介绍浮动与flex布局。 目录 1. 标准流 2. 浮动 2.1 基本使用 特点 脱标 2.2 清除浮动 2.2.1 额外标签法 2.2.2 单伪元素法 2.2.3 双伪元素法(推荐) 2.2.4 overflow(最简单) 3. flex布局 3.1 组成 3.2 主轴与侧轴对齐方式 3.2.1 主轴 3.2.2 侧轴 3.3 修改主…...
内网环境将nginx的http改完https访问
原文参考链接:https://www.cnblogs.com/leilcoding/p/16138778.html 编写生成证书的脚本 vim gen-ssl.sh #!/bin/sh # create self-signed server certificate: read -p "Enter your domain [www.example.com]: " DOMAIN echo "Create server key…...
使用 libevent 处理 TCP 粘包问题(基于 Content-Length 或双 \r\n)
在基于 libevent 的 TCP 服务器开发中,处理消息边界是常见需求。以下是两种主流分包方案的完整实现: 一、基于 Content-Length 的分包方案 1.1 数据结构设计 typedef struct {struct bufferevent *bev;int content_length; // 当前消息的预期长度int received_bytes; //…...
论坛系统的测试
项目背景 论坛系统采用前后端分离的方式来实现,同时使用数据库 来处理相关的数据,同时将其部署到服务器上。前端主要有7个页面组成:登录页,列表页,论坛详情页,编辑页,个人信息页,我…...
宠物店小程序怎么做?助力实体店实现营销突破
宠物店小程序怎么做?助力实体店实现营销突破 ——一个宠物店老板的“真香”实战分享 一、行业现状:线下宠物店的“流量焦虑” 作为开了3年宠物店的“铲屎官供应商”,这两年明显感觉生意难做了:某宝9.9包邮的狗粮、某团“满…...
《Mycat核心技术》第21章:高可用负载均衡集群的实现(HAProxy + Keepalived + Mycat)
作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀,…...
obsidian ios git同步
首先感谢几位博主的文章,我现在时间久了,未保存原文地址。以下是我自己的执行步骤总结。 应用商店安装 iSH 打开iSH,执行 apk update 安装下面软件,(我觉得只安装第一个应该就行,下次测试)。 …...
当 “原子” 遇上 “光腔”:量子计算的新舞台
在微观世界里,原子就像一个个会 “跳舞” 的小精灵,而科学家正试图用 “光的牢笼” 困住它们,让这些小精灵为量子计算 “打工”。最近,哈佛大学和 MIT 的研究团队在《科学》杂志上发表了一项突破性研究,他们让单个原子…...
移动端六大语言速记:第1部分 - 基础语法与控制结构
移动端六大语言速记:第1部分 - 基础语法与控制结构 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的基础语法与控制结构,帮助开发者快速理解各语言间的差异与共性。 1. 基础语法 1.1 数据类型 各语言的基本数据…...
针对 SQL 查询中 IN 子句性能优化 以及 等值 JOIN 和不等值 JOIN 对比 的详细解决方案、代码示例及表格总结
以下是针对 SQL 查询中 IN 子句性能优化 以及 等值 JOIN 和不等值 JOIN 对比 的详细解决方案、代码示例及表格总结: 问题 1:IN 的候选值过多(如超过 1000 个) 问题描述 当 IN 列表中的值过多时,SQL 会逐个比较每个值…...
