【vue】ant-design-vue的树结构实现节点增删改查

根据业务需要,实现树结构的节点新增编辑删除功能,主要逻辑是利用树节点的scopedSlots属性对其进行自定义改造,监听悬停事件在节点右侧出现增删改对应图标,点击图标出现弹窗表单对内容进行修改,具体代码如下:

// 模板部分
<template><a-treev-if="factorTreeData.length > 0"show-icondefault-expand-parent:tree-data="factorTreeData":defaultExpandAll="true":autoExpandParent="true":default-selected-keys="selectedKeys"@select="onTreeSelect"><template slot="custom" slot-scope="item"><div @mouseenter="onMouseEnter(item)" style="position: relative;"><span class="treeMode"><a-icon v-if="!item.isLeaf" :type="item.expanded ? 'folder-open' : 'folder'" /><a-icon type="file" v-if="item.isLeaf"/><span style="margin-left: 5px">{{ item.title }}</span></span><a-space@click.stopv-if="mouseItemId === item.key"style="position: absolute; right: 5px; top: 0"><a-button type="primary" size="small" icon="plus" @click="addTreeNode(item)" /><a-button type="primary" size="small" icon="edit" @click="editTreeNode(item)" /><a-button type="primary" size="small" icon="delete" @click="delTreeNode(item)" /></a-space></div></template></a-tree><a-modalv-drag-modalv-model="visible":title="modalTitle":destroyOnClose="true"@ok="handleSave":width="800":bodyStyle="{'height': '480px', 'overflow-y': 'auto'}"centered><ItemModal ref="childModal" :formObj="formObj"/></a-modal>
</template>//js部分
<script>export default {components: {ItemModal: () => import ('./item-modal') // 表单弹窗},data () {return {// 树结构factorTreeData: [],expandedKeys: [],selectedKeys: [],mouseItemId: '',// 弹窗modalTitle: '',visible: false,formObj: {}}},mounted () {this.getTreeData()},methods: {// 获取树(模拟数据)getTreeData () {this.factorTreeData= [{title: '0-0',key: '0-0',children: [{title: '0-0-0',key: '0-0-0',children: [{ title: '0-0-0-0', key: '0-0-0-0' },{ title: '0-0-0-1', key: '0-0-0-1' },{ title: '0-0-0-2', key: '0-0-0-2' },],},{title: '0-0-1',key: '0-0-1',children: [{ title: '0-0-1-0', key: '0-0-1-0' },{ title: '0-0-1-1', key: '0-0-1-1' },{ title: '0-0-1-2', key: '0-0-1-2' },],},],}]this.dealTreeData(this.factorTreeData || [])this.selectedKeys = [this.factorTreeData.children[0].key]this.mouseItemId = this.factorTreeData.children[0].key},// 给每个节点添加自定义属性dealTreeData (dataArr) {dataArr.forEach((el, i) => {el.value = el.key if (el.children && el.children.length > 0) {el.isLeaf = falseel.selectable = falseel['scopedSlots'] = { title: 'custom' } this.dealTreeData(el.children)} else {el.isLeaf = trueel['scopedSlots'] = { title: 'custom' }}})},// 节点选择事件onTreeSelect (selectedKeys) {},// 树鼠标悬停事件onMouseEnter (item) {this.mouseItemId = item.key},// 添加树节点addTreeNode (item) {this.formObj = {id: null,pid: item.parentId,name: '',displayOrder: '',status: '',remark: ''}this.modalTitle = '新增'this.visible = true},// 编辑树节点editTreeNode (item) {getTreeInfo({ id: item.id }).then(res => {if (res.code === 200) {this.formObj = {id: res.result[0].id,pid: res.result[0].pid,name: res.result[0].name,displayOrder: res.result[0].displayOrder,status: res.result[0].status,remark: res.result[0].remark}this.modalTitle = '编辑'this.visible = true}}).catch(err => console.log(err))},// 保存树节点handleSave() {},// 删除树节点delTreeNode (item) {const that = thisthis.$confirm({title: '确定要删除吗?',onOk () {delTree({ ids: item.id }).then(res => {if (res.code === 200) {that.$message.success('删除成功!')that.getTree() // 重新请求树数据} else {that.$message.error('删除失败!')}}).catch(err => {console.log(err)this.$message.error('删除失败!')})}})}}
</script><style lang="less" scoped>// 树::v-deep .ant-tree {li {padding: 1px 0;}.ant-tree-node-content-wrapper {width: calc(100% - 24px);height: 32px;line-height: 32px;}.treeMode {height: 30px;width: 70%;display: flex;align-items: center;span {height: 30px;display: inline-block;max-width: 80%;overflow: hidden;text-overflow: ellipsis;padding-right: 5px;}}}::v-deep .ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper::before {height: 32px;}</style>

示例:
在这里插入图片描述

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

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

相关文章

蓝桥杯每日一题2023.11.23

题目描述 题目分析 本题使用递归模拟即可&#xff0c;将每一个大格子都可以拆分看成几个小格子&#xff0c;先将最开始的数字进行填入&#xff0c;使每一个对应小格子的值都为大格子对应的数&#xff0c;搜索找到符合要求的即可 &#xff08;答案&#xff1a;50 33 30 41&am…

Python爬取京东商品销售数据进行数据分析示例代码,以口红为例

文章目录 一、准备工作驱动安装模块使用与介绍 二、流程解析三、完整代码四、效果展示关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资…

2023年中国钒铁产量及行业进出口现状分析[图]

钒铁&#xff0c;银白色块状&#xff0c;一般分为桶装或吨袋包装&#xff0c;根据钒含量的不同分为50钒铁&#xff08;FeV50&#xff09;和80钒铁&#xff08;FeV80&#xff09;,通过炉外法或电炉法冶炼生产&#xff0c;北方多以炉外法制取&#xff0c;南方多为电炉法生产。 钒…

Faster R-CNN源码解析(一)

目录 前言训练脚本(train_mobilenetv2.py)自定义数据集(my_dataset.py) 前言 Faster R-CNN 是经典的two-stage目标检测模型&#xff0c; 原理上并不是很复杂&#xff0c;也就是RPNFast R-CNN&#xff0c;但是在代码的实现上确实有很多细节&#xff0c;并且源码也非常的多&…

chatglm3部署使用

chatglm3部署使用 1.部署2.使用3.接入微信4.vue前端 1.部署 1.首先去github下载chatglm3代码。Huggingface下载模型一直失败&#xff0c;所以用阿里的魔塔社区下载。 git clone https://github.com/THUDM/ChatGLM3.git git clone https://www.modelscope.cn/ZhipuAI/chatglm3…

python-opencv划痕检测

python-opencv划痕检测 这次实验&#xff0c;我们将对如下图片进行划痕检测&#xff0c;其实这个比较有难度&#xff0c;因为清晰度太差了。 我们做法如下&#xff1a; &#xff08;1&#xff09;读取图像为灰度图像&#xff0c;进行自适应直方图均衡化处理&#xff0c;增强图…

thingsboard3.6的mailConfigTemplateController错误

1、bug内容 使用3.6版本的tb代码进行打包生成boot的jar包,在启动的时候会报错mailConfigTemplateController bean初始化找不到文件路径。 Error creating bean with name mailConfigTemplateController defined in URL [jar:file:/D:/yuxinwei/AE/thingsboard/thingsboard-3…

vue2.0+elementui集成file-loader之后图标失效问题

背景 跑vue2elementUI项目时&#xff0c;由于前端这边需要在本地存放xlsx模板文件&#xff0c;供用户下载模板文件&#xff0c;所以需要在webpack构建的时候增加file-loader进行解析xlsx文件打包。 vue版本2.x element-ui 版本 2.13.x 注意 npm i -D file-loader版本号给vue项…

操作系统 day12(调度算法的评价指标)

评价指标 CPU利用率 系统吞吐量 周转时间 带权周转时间 等待时间 响应时间

2022-1-25 机器人运动规划方法综述 航空学报

论文PDF abstract 随着应用场景的日益复杂&#xff0c;机器人对旨在生成无碰撞路径&#xff08;轨迹&#xff09;的自主运动规划技术的需求也变得更加迫 切。虽然目前已产生了大量适应于不同场景的规划算法&#xff0c;但如何妥善地对现有成果进行归类&#xff0c;并分析不同…

Spark---基于Standalone模式提交任务

Standalone模式两种提交任务方式 一、Standalone-client提交任务方式 1、提交命令 ./spark-submit --master spark://mynode1:7077 --class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100 或者 ./spark-submit --master spark…

给数据库查询结果添加一个额外的自增编号

1、在mysql数据库可以执行的sql SELECT( i : i 1 ) num,M.* FROMuser M,( SELECT i : 0 ) AS ID GROUP BYM.ID ORDER BYM.create_time SELECT (i :i 1) 是为了生成自增的序列号字段 SELECT i : 0 是为了将i进行初始化每次查询的序列号都会从1开始进行排序生成序列号 在…

在springboot中实现WebSocket协议通信

前面介绍了使用netty实现websocket通信&#xff0c;有些时候&#xff0c;如果我们的服务并不复杂或者连接数并不高&#xff0c;单独搭建一个websocket服务端有些浪费资源&#xff0c;这时候我们就可以在web服务内提供简单的websocket连接支持。其实springboot已经支持了websock…

20230511 Windows Ubuntu vscode remote-ssh 连接配置

参考 &#xff1a; VSCode SSH 连接远程ubuntu Linux 主机 VSCode通过Remote SSH扩展连接到内网Ubuntu主机 Ubuntu 安装 sudo apt-get install openssh-server vscode: 安装remote-ssh 插件 连接到服务器IP 免密登录的公钥密钥传递用filezillaUbuntu 和 Windows 文件互传 …

PMP对项目工程师有用吗?

一、什么是项目工程师&#xff1f; 项目工程师是指在各个领域负责技术操作、设计、管理以及评估能力的人员。他们通常担当项目的实施和执行角色&#xff0c;在开发或控制类项目中发挥重要作用。有时&#xff0c;项目工程师的称号还可以用来表示在某个领域取得专业资格的人员。…

深入理解路由协议:从概念到实践

路由技术是Internet得以持续运转的关键所在&#xff0c;路由是极其有趣而又复杂的课题&#xff0c;永远的话题。 SO&#xff1a;这是一个解析路由协议的基础文章。 目录 前言路由的概念路由协议的分类数据包在网络中的路由过程理解路由表的结构路由器关键功能解析 前言 在互联…

求解Beamforming-SOCP(CVX求解)

时间&#xff1a;2023年11月23日14:00:16&#xff1a; 直接上代码&#xff08;辛苦两天才改出来的&#xff09; clear all; K 4; %user number N4; %base station number var1e-9; H []; %initialize H matrix for i1:Kh 1/sqrt(2*K)*mvnrnd(zeros(N,1),eye(N),1)1i/sqrt(2*…

【C++】泛型编程 ⑫ ( 类模板 static 关键字 | 类模板 static 静态成员 | 类模板使用流程 )

文章目录 一、类模板使用流程1、类模板 定义流程2、类模板 使用3、类模板 函数 外部实现 二、类模板 static 关键字1、类模板 static 静态成员2、类模板 static 关键字 用法3、完整代码示例 将 类模板 函数声明 与 函数实现 分开进行编码 , 有 三种 方式 : 类模板 的 函数声明…

【8】Spring Boot 3 集成组件:安全组件 spring security【官网概念篇】

目录 【8】Spring Boot 3 集成组件&#xff1a;安全组件 spring securitySpring Security 简介先决条件引入依赖身份验证密码存储密码存储历史DelegatingPasswordEncoder密码存储格式密码加解密类自定义密码存储 体系结构 ArchitectureServlet 过滤器DelegatingFilterProxyFilt…

第二十章 多线程

20.2创建线程 20.2.1继承Thread类 Thread类是Java.lang包中的一个类&#xff0c;从这个类中实例化的对象代表线程&#xff0c;程序员启动一个新线程需要建议Thread实例。 public class ThreadTest extedns Thread{} run方法格式&#xff1a; public void run(){} 20.1让线程循…