vue-orgchart 实现节点的增 删 改 功能

article/2025/10/6 23:36:49

UI框架是 ant-design-vue 导出图片我是自己重新写的,要下载 html2canvas
vue-orgchart 属性说明 在 这篇文章中https://blog.csdn.net/weixin_44164867/article/details/110871475
https://balkan.app/OrgChartJS-Demos/ 官网有好多例子可以使用
在这里插入图片描述

<template><a-drawertitle="Basic Drawer"placement="top":closable="false":visible="visible"@close="handleOk":destroyOnClose="true"height="700"><div v-if="showAddNode"><a-input placeholder="职位" v-model="position" style="width: 200px"/><a-input placeholder="负责人" v-model="name" style="width: 200px"/><a-button-group><a-button type="primary" @click="addNewNode(1)">添加新节点</a-button><a-button style="background:green;color:#fff" @click="addNewNode(2)">修改当前节点名称</a-button><a-button type="danger"  @click="addNewNode(3)">删除当前节点</a-button></a-button-group></div><div style="width:100%;height:500px;background:#999" ><vo-basic ref="imageWrapper" v-if="Object.keys(chartData).length > 0" style="width:100%;height:500px;" :nodeContent="'nodeContent'" :nodeTemplate="nodeTemplateFun" :createNode="nodeOrg" :pan="true"  :zoom="true" :data="chartData"></vo-basic></div><a-divider orientation="right">操作</a-divider><div style="width:100%;text-align:right"> <a-button type="primary" @click="exportPng">导出图片</a-button></div></a-drawer></template><script>
import { VoBasic } from 'vue-orgchart'
import html2canvas from "html2canvas"
import 'vue-orgchart/dist/style.min.css'
export default {components: { VoBasic },props:{visible:{type:Boolean,default:false,},orgChartData:{type:Object,default:{},require:true,}},data(){return{chartData:{},showAddNode:true,position:null,name:null,selectNode:null,//选中的节点newNode:null,//新节点sumId:0,}},methods:{nodeTemplateFun(age){// console.log("11112",age);},nodeOrg(age){age.onclick = function(){$VueThis.selectNode = this;//当前选中的父节点}},//添加新节点addNewNode(type){let Clength = Object.keys(this.chartData).length;//存在父节点但未选择父节点if(Clength > 0 && !this.selectNode){this.$message.error("请选择父节点");return;}//存在父节点添加子节点if(Clength > 0 && this.selectNode){//取出父节点的idlet dataSource = this.selectNode.getAttribute("data-source");let id = null;if(!!dataSource){try {let dataSourceObject = JSON.parse(dataSource);id = dataSourceObject.id;this.addNode(id,type);} catch (error) {this.$message.error("添加失败")}}else{this.$message.error("添加失败")}return;}this.chartData = {name: this.position,nodeContent:this.name,id:0,}},//创建节点createNode(id){let U =  {name: this.position,nodeContent:this.name,id: this.sumId + 1,parentid:id,}this.sumId = this.sumId + 1;return U;},//添加节点addNode(id,type){let chartData = JSON.parse(JSON.stringify(this.chartData));this.newNode = this.createNode(id);let newChartData = null;if(type == 1){newChartData =  this.recursionAddNewNode(chartData,id);}if(type == 2){newChartData =  this.editNodeName(chartData,id);}if(type == 3){newChartData =  this.delNode(chartData,id);}console.log(newChartData)this.chartData = {};this.selectNode = null;setTimeout(()=>{this.chartData = newChartData;},0)},//删除节点delNode(data,id){if(data.id == id){return true;}else if("children" in data){let children = data.children;if(Array.isArray(children)){for(let i = 0;i<children.length;i++){let d =  this.delNode(children[i],id)console.log("dddd",d);if(!!d){if( Object.prototype.toString.call(d)=="[object Boolean]"){children.splice(i,1);}return data;}}}}},//修改节点名称editNodeName(data,id){if(data.id == id){data.name = this.position;data.nodeContent = this.name;return data;}else if("children" in data){let children = data.children;if(Array.isArray(children)){for(let i = 0;i<children.length;i++){let d =  this.editNodeName(children[i],id)if(!!d){return data;}}}}},//添加节点recursionAddNewNode(data,id){if(data.id == id){if("children" in data){data.children.push(this.newNode);}else{data["children"] = [JSON.parse(JSON.stringify(this.newNode))];this.newNode = null;}return data;}else if("children" in data){let children = data.children;if(Array.isArray(children)){for(let i = 0;i<children.length;i++){let d =  this.recursionAddNewNode(children[i],id)if(!!d){return data;}}}}},//导出exportPng(){html2canvas(document.querySelectorAll(".orgchart")[0]).then(canvas => {let dataURL = canvas.toDataURL("image/png");this.imgUrl = dataURL;if (this.imgUrl !== "") {// this.dialogTableVisible = true;var a = document.createElement('a');// var url = window.URL.createObjectURL(dataURL);var filename = '图片.png';a.href = dataURL;a.download = filename;a.click();//window.URL.revokeObjectURL(url);}});},handleOk(){this.$emit("ok");}},created () {window.$VueThis = this;}
}
</script>

http://chatgpt.dhexx.cn/article/8OJZlS3M.shtml

相关文章

最需要的时候遇见你OrgChart

聊聊OrgChart 使用&#xff0c;优雅的方式为你展现舒服的组织架构图&#xff0c; 前言 闲来无事写一个多级用户关系层&#xff0c;于是就存在展示的问题。这时OrgChart就派上了用场。 在用的过程中&#xff0c;有一耐耐的小问题&#xff0c;咔咔就借着问题点&#xff0c;给大…

使用OrgChart插件生成家谱组织结构图

1.orgchart插件&#xff1a; github地址&#xff1a;https://github.com/dabeng/OrgChart 2.前端代码&#xff1a; //1.加载树形数据&#xff1a;ajax请求获取json格式的数据&#xff08;flag参数可以无视&#xff0c;我自己的业务逻辑需要&#xff09;function setTreeInfo(fl…

OrgChart页面模仿编程简单记录

OrgChart页面模仿编程简单记录 导航栏 整体来看&#xff0c;导航栏设计的还是比较简洁&#xff0c;顶部有8个导航模块&#xff0c;每个模块点击后会跳转到相应模块页面。可以使用在App.js页面中使用<Router> <Navlink>来实现。 <Router> <nav> <…

如何在react中使用OrgChart?

最近在将OrgChart嵌入至React时&#xff0c;碰见了一些坑&#xff0c;希望能以此记录我是怎么爬出来的~ 一、什么是OrgChart&#xff1f; 一款基于jquery来画组织架构图的插件。有以下特点&#xff1a; 支持本地数据和远程数据&#xff08;JSON&#xff09;基于CSS3转换的平滑…

orgChart的应用

文档地址&#xff1a;https://balkangraph.com/OrgChartJS/Demos/FirstLook 效果 html: <div id"tree" style"height: 500px;width: 100%;"></div><script src"__TMPL__/public/assets/js/orgchart.js"></script> <…

vue-orgchart拓扑图

安装vue-orgchart npm install vue-orgchart -S//main.js引入样式 import vue-orgchart/dist/style.min.css//使用页面引入 <template><div class"orgchart_Box_Y"><div class"box_right_container" v-if"ifLoading"><Vo…

jquery.orgchart.js

<!doctype html> <html> <head> <meta charset"utf-8"> <title>geovindu,Geovin Du,涂聚文</title><link rel"stylesheet" href"css/jquery.orgchart.css"> <script type"text/javascript&qu…

orgchart实现组织结构图

之前项目需要我搞一个组织架构图&#xff0c;用大约一周时间挑选了框架并开发&#xff0c;最后用orgchart搞出来了&#xff0c;先上结果图 orgchart下载地址 &#xff1a;https://github.com/dabeng/OrgChart 打开下载的压缩包&#xff0c;如下图 然后可以打开demo目录&#x…

orgChart的简单使用,实现树状图结构

还不知道这个插件的小伙伴可以先去官网下载&#xff0c;orgchart官网链接 呐&#xff0c;下载下来就是这样的&#xff1a; 我们把他解压出来&#xff1a; 点进去以后&#xff0c;直接找到index.html文件用浏览器打开&#xff0c;就是这样的啦&#xff1a; 这1--24都是样式样例…

orgChart生成组织结构图应用

orgChart 是一个开源JS&#xff0c;可用于生成组织结构图。现构建如下&#xff1a; 1&#xff09;动态生成HTML作为数据source var preTitle "";var content "<ul idbasic-stacking-source classhide><li>Band<ul>"; // header$.each…

OrgChart - 配置项详解 (精选+原创)

OrgChart 使用教程 &#xff08;一&#xff09; 没用开场白… 近日来&#xff0c;公司要求做一份web组织架构图&#xff0c;正好我使用的框架是vue &#xff0c;自己写太麻烦&#xff0c;于是找一找有没有合适的组件&#xff0c;直接套用。 于是找到了 OrgChart 这个 开源的组…

orgChart实现竖向排列组织图(js实现组织机构图)

一、前言 快过年了&#xff0c;博主这几天不算忙&#xff0c;又刚好用到orgChart来做组织机构图&#xff0c;写了这篇文章&#xff0c;欢迎大家指正。注意&#xff1a;我说的竖向是指文字竖着排列。 依赖库&#xff1a;jquery&#xff0c;jquery颜色选择器&#xff0c;orgCha…

武汉python自动化测试招聘,python自动化测试工程师招聘_Python-自动化测试面试

1、以你做过的项目&#xff0c;举例来说一下你的自动化测试是怎么做的&#xff1f; 参考答案&#xff1a;就拿简历上的ecshop项目来说吧&#xff0c;在编写脚本前&#xff0c;我们会对系统进行评估&#xff0c;确认这个系统可不可以实现UI自动化&#xff0c;如果可以的话&#…

测试ai模糊软件,AE/PR人工智能自动人脸检测马赛克模糊插件

Blace – AI Face Detection是一款作用在AE以及PR软件中的AI插件&#xff0c;能够自动识别检测人脸并智能添加马赛克边框&#xff0c;易于使用且基于AI的检测&#xff0c;控制检测区域并排除检测&#xff0c;有需要的用户不要错过了&#xff0c;赶快来下载吧&#xff01; 兼容性…

自动化面试题

自动化面试题 自动化&#xff1a;将人工测试转换成自动化脚本/工具去运行 优势&#xff1a;节省时间&#xff08;20% - 30%&#xff09;&#xff0c;提高工作效率 Python selenium/appium/airtest/requests unittest Jenkins WEB自动化 1. 什么样的项目适合做自动化&…

Python&OpenCV自动人脸打马赛克&调色系统[源码&UI操作界面&部署教程]

1.视频演示&#xff1a; [项目分享]Python&#xff06;OpenCV自动人脸打马赛克&#xff06;调色系统[源码&#xff06;UI操作界面&#xff06;部署教程] 2.图片演示&#xff1a; 3.图像颜色检索&#xff06;替换&#xff1a; 4.马赛克分类&#xff1a; 使用opencv库中的haar…

Python opencv:人眼/人脸识别并实时打码处理

利用Pythonopencv实现从摄像头捕获图像&#xff0c;识别其中的人眼/人脸&#xff0c;并打上马赛克。 系统环境&#xff1a;Windows 7 Python 3.6.3 opencv 3.4.2 一、系统、资源准备 要想达成该目标&#xff0c;需要满足一下几个条件&#xff1a; 找一台带有摄像头的电脑…

seleniumxpath打码平台

selenium使用 一 bs4搜索文档树二 css选择器三 selenium基本使用四 无界面浏览器五 selenium其它用法5.1 登录百度5.2 获取位置属性大小&#xff0c;文本5.3 元素操作5.4 执行js代码5.5 切换选项卡5.6 浏览器前进后退5.7 异常处理 六 selenium登录cnblogs获取cookie七 抽屉半自…

第十一章 自动编码器

简介&#xff1a;自动编码器是一种可以进行无监督学习的神经网络模型。一般而言&#xff0c;一个完整的自动编码器主要由两部分组成&#xff0c;分别是用于核心特征提取的编码部分和可以实现数据重构的解码部分。 1.自动编码器入门 在自动编码器中负责编码的部分也叫做编码器&a…

Python 题库自动化面试题

1、自动化代码中,用到了哪些设计模式? 单例设计模式 工厂模式 PO设计模式 数据驱动模式 面向接口编程设计模式 2、什么是断言( Assert) ? 断言 Assert 用于在代码中验证实际结果是不是符合预期结果&#xff0c; 如果测试用例执行失败会抛出异常并提供断言日志 3、什么…