【记录31】elementUI el-tree 虚线、右键、拖拽

2024-03-06 07:04

本文主要是介绍【记录31】elementUI el-tree 虚线、右键、拖拽,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

父组件

<eltree :treeData="treeData"></eltree>
import eltree from "../../components/tree.vue";
export default {name: '',components: { // org_tree ,eltree},watch: {},data() {return {orgFormchoose: {},orgForm: { type: 0, limits: 1 },operateIndex: 1, // 默认 1  查看operateDisable: true,treeData: [{ parentId: null, id: 1, level: 1, type: null, checkbox: '1', allname: '组织机构1', name:'机构1简称', code:'机构1编码', show: true, children: [{ parentId: 1, id: 101, level: 2, type: null, checkbox: '2', allname: '组织机构1-1', show: false, },{ parentId: 1, id: 102, level: 2, type: null, checkbox: '3', allname: '组织机构1-2', show: false, },] },{ parentId: null, id: 2, level: 1, type: null, checkbox: '4', allname: '组织机构2', show: true, children: [{ parentId: 2, id: 201, level: 2, type: null, checkbox: '5', allname: '组织机构2-1', show: false, },{ parentId: 2, id: 202, level: 2, type: null, checkbox: '6', allname: '组织机构2-2', show: false, children: [{ parentId: 202, id: 2001, level: 3, type: null, checkbox: '7',  allname: '组织机构2-1-1', show: false,children: [{ parentId: 2001, id: 20001, level: 3, type: null, checkbox: '8', allname: '8组织机构2-1-1', show: false, },{ parentId: 2001, id: 20002, level: 3, type: null, checkbox: '9', allname: '9组织机构2-2-2', show: false, },{ parentId: 2001, id: 20003, level: 3, type: null, checkbox: '11', allname: '11组织机构2-1-1', show: false, },{ parentId: 2001, id: 20004, level: 3, type: null, checkbox: '12', allname: '12组织机构2-2-2', show: false, },{ parentId: 2001, id: 20005, level: 3, type: null, checkbox: '13', allname: '13组织机构2-1-1', show: false, },] },{ parentId: 202, id: 2002, level: 3, type: null, checkbox: '10', allname: '组织机构2-2-2', show: false, },] },] },{ parentId: null, id: 3, level: 1, type: null, checkbox: '100', allname: '组织机构3', show: true, }],}},mounted() {},methods: {// 选择的节点信息ParentChooseOrgTree(_ulItem) {this.orgForm = _ulItem;},//  右击  删除ParentChooseDeleteOrgTree(_ulItem, _item) {this.operateIndex = _item.value;},//  组织机构点击操作//operateClick(_item, _index) {//    console.log(_item.label, _index);//    if (_index == 0 || _index == 2) {//        this.operateDisable = false;//    }else{//        this.operateDisable = true;//    }//    this.operateIndex = _index;//    if (_index === 3) {//        this.$alert('','',{//            confirmButtonText: '确定',//            callback: action  => {//                if (action  === 'confirm') {//                    this.$message.success('已悉知')//                 }//             }//         })//         this.$alert('提醒:当前组织机构树存在下级节点,无法删除!<br/>提醒:请再次确认删除本级组织机构,删除后无法恢复!', '提示', {//              confirmButtonText: '确定',//              callback: action => {//                  if (action == "confirm") {//                      this.$message.success('已悉知')//                  }//              }//          });//      }//  }}
}

子组件

<template><div><el-treeclass="tree":indent="0"ref="tree":show-checkbox="true":data="data":props="defaultProps"node-key="checkbox"empty-text="暂无节点权限,联系管理员":default-expand-all="false":check-strictly="true":check-on-click-node="true":accordion="false":highlight-current="true"@node-contextmenu="nodeMenu"@node-drop="handleDrop"draggable:allow-drop="allowDrop"style="padding-left: 0px;"><span slot-scope="{ data }"><!-- <span slot-scope="{ node, data }"> --><span class="typecss">{{ data.level == 1?'局':data.level == 2?'司':data.level == 3?'项':data.level == 4?'隧': '' }}</span><span class="identy" :style="{ color: data.type == 1?'#2762e2':data.type == 0?'#36b636': '#999' }">{{ data.type == 1?'管':data.type == 0?'用': '' }}</span><span id="LABEL">{{ data.allname }}</span><!-- <span class="idty">{{ node.level == 1?'主':node.level == 2?'次':node.level == 3?'项':node.level == 4?'隧': '其' }}</span> --></span></el-tree><!--  --><div v-show="optionCardShow" id="right-menu" ref="container" :style="{top: optionCardY  +'px', left: optionCardX  +'px'}" @contextmenu.prevent="rightrightClick($event)"><span style="position:absolute; top:0px; right:0px; color:#333;border:1px solid #999; font-size:13px;" @click="optionCardShow=false"><i class="el-icon-close"></i></span><div style="margin-top:5px;"><div class="btu" v-for="(item, index) in btuList" :key="index" @click="BtuClick(item)"><span>{{ item.label }}</span></div><!-- <div class="btu"><span>查看本级机构</span></div><div class="btu"><span>修改本级机构</span></div><div class="btu" @click="BtuClick"><span>删除本级机构</span></div><div class="btu"><span>映射本级机构</span></div> --></div></div></div>
</template>
<script>export default {props: [ 'treeData'],data() {return {optionCardShow: false,optionCardY: 100, optionCardX: 100, postionStyle:{},data:this.treeData,  //  父组件传值selectNode: {},rightoptionData: {},btuList: [{ label: '新增', value: 0 },{ label: '查看', value: 1 },{ label: '修改', value: 2 },{ label: '删除', value: 3 },{ label: '迁移', value: 4 }],btuUserList: [],defaultProps: {children: 'children',label: 'allname'}};},beforeDestroy() {window.removeEventListener('resize', this.handleResize);},mounted() {console.log(this.treeData);// this.data = this.treeData;window.addEventListener('resize', this.handleResize);},methods: {// handleDragStart(node, ev) {  // 节点开始拖拽时触发的事件//   console.log('节点开始拖拽时触发的事件  drag start', node, ev);// },// handleDragEnter(draggingNode, dropNode, ev) {  //  拖拽进入其他节点时触发的事件//   console.log('拖拽进入其他节点时触发的事件  tree drag enter: ',draggingNode, dropNode, ev);// },// handleDragLeave(draggingNode, dropNode, ev) {  //  拖拽离开某个节点时触发的事件// if (draggingNode.data.parentId !== dropNode.data.parentId) {//    alert('超出拖拽的节点范围,拖拽只能在同父节点下')// }// console.log('****************拖拽离开某个节点时触发的事件 tree drag leave: ',draggingNode, dropNode.label, ev);// },// handleDragOver(draggingNode, dropNode, ev) {  // 在拖拽节点时触发的事件(类似浏览器的 mouseover 事件)// // if (condition) {// // }//   console.log('在拖拽节点时触发的事件(类似浏览器的 mouseover 事件)  tree drag over: ', draggingNode, dropNode.label, ev);// },// handleDragEnd(draggingNode, dropNode, dropType, ev) {  //  拖拽结束时(可能未成功)触发的事件//   console.log('拖拽结束时(可能未成功)触发的事件  tree drag end: ',draggingNode, dropNode && dropNode.label, dropType, ev);// },handleDrop(draggingNode, dropNode, dropType, ev) {    //   拖拽成功完成时触发的事件this.getProjectVolumeTree();  //  拖拽成功 触发相应接口console.log('拖拽成功完成时触发的事件  tree drop: ',draggingNode, dropNode.label, dropType, ev);},allowDrop(draggingNode, dropNode, type) {  //  拖拽时判定目标节点能否被放置console.log('拖拽时判定目标节点能否被放置  allowDrop', draggingNode, dropNode, type);if (draggingNode.data.level === dropNode.data.level) {if (draggingNode.data.parentId === dropNode.data.parentId) {return type === "prev" || type === "next";} else {return false;}} else {// 不同级进行处理return false;}},//tree拖拽成功完成时触发的事件 getProjectVolumeTree() {console.log('tree拖拽成功完成时触发的事件');},allowDrag(draggingNode) {console.log('8989', draggingNode.data.allname);// return draggingNode.data.label.indexOf('三级 3-2-2') === -1;return true;},//  单选handleNodeClick (data, checked, node) {console.log(data,'ppp');console.log( checked, 'll');console.log(node);if (checked) {this.$refs.tree.setCheckedNodes([data])this.selectNode = data;this.$parent.ParentChooseOrgTree(data);}},//  右击nodeMenu(e, data, n, t) {console.log(e, data, n,t, '右击');this.optionCardShow = falsethis.optionCardX = e.x // 让右键菜单出现在鼠标右键的位置this.optionCardY = e.ythis.$parent.ParentChooseOrgTree(data);this.rightoptionData = data// this.node = n // 将当前节点保存this.optionCardShow = true // 展示右键菜单},rightMenuClose(event) {let dom = document.getElementById('right-menu')if (dom) {if (!dom.contains(event.target)) {//点击到了id为right-menu以外的区域,就隐藏菜单this.optionCardShow = false}}},// 右击demo事件BtuClick(_item) {console.log(_item);switch (_item.value) {case 0:this.$message.warning(_item.label)break;case 1:this.$message.warning(_item.label)break;case 2:this.$message.warning(_item.label)break;case 3: //删除事件this.$parent.ParentChooseDeleteOrgTree(this.selectNode, _item);  //  父组件事件,在这里是子组件调用父组件函数this.$message.warning(_item.label)break;case 4:this.$message.warning(_item.label)break;default:break;}},//rightrightClick(event) {event.preventDefault();},}};
</script>
在这里插入代码片

这篇关于【记录31】elementUI el-tree 虚线、右键、拖拽的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779214

相关文章

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

qtcreater配置opencv遇到的坑及实践记录

《qtcreater配置opencv遇到的坑及实践记录》我配置opencv不管是按照网上的教程还是deepseek发现都有些问题,下面是我的配置方法以及实践成功的心得,感兴趣的朋友跟随小编一起看看吧... 目录电脑环境下载环境变量配置qmake加入外部库测试配置我配置opencv不管是按照网上的教程还是de

使用nohup和--remove-source-files在后台运行rsync并记录日志方式

《使用nohup和--remove-source-files在后台运行rsync并记录日志方式》:本文主要介绍使用nohup和--remove-source-files在后台运行rsync并记录日... 目录一、什么是 --remove-source-files?二、示例命令三、命令详解1. nohup2.

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J