赞
踩
项目中需要将ES数据库表字段和其他库表字段做映射,研究了下jsPlumb,做一下记录;
1: 安装 yarn add jsPlumb
2: 引入 import {jsPlumb} from ‘jsplumb’
created(){ this.plumbIns = jsPlumb.getInstance({ Container:"plumbContainer", //选择器id ConnectionsDetachable: false, // 再次拖动时不取消选择 maxConnections: 1, uniqueEndpoint:true, Endpoint: "Dot", EndpointStyle: { radius: 7, fill: "#fff", outlineRadius: 5, outlineStroke: '#47a3f8', outlineWidth: 3}, //端点样式 EndpointHoverStyle: { fill: '#47a3f8', radius:7 }, // 端点悬停样式 PaintStyle: { // 绘画样式,默认8px线宽 #456 fill: 'white', outlineStroke: '#47a3f8', strokeWidth: 2, outlineStrokeWidth: 3, radius: 7, outlineRadius: 10 }, HoverPaintStyle: { // 默认悬停样式 默认为null outlineStroke: 'lightblue' }, ConnectorStyle: { outlineStroke: '#47a3f8', strokeWidth: 1 }, ConnectorHoverStyle: { strokeWidth: 2 }, ConnectionOverlays:[ //连线上的默认样式 这里是箭头 ["Arrow",{ width: 12, length: 12, location: 1 , paintStyle: { stroke: '#00688B', fill: '#00688B', } }] ], Connector:["Straight",{gap:1}] //要使用的默认连接器的类型:折线,流程等 })}, mounted(){ let ins = this.plumbIns; ins.batch(() => { this.initAll(); this.connectionAll(); }); },
methods:{
initAll () { let rl = this.leftDataListCopy; for (let i = 0; i < rl.length; i++) { this.init(rl[i].id, 0) } let rl2 = this.rightDataListCopy; for (let i = 0; i < rl2.length; i++) { this.init(rl2[i].id, 1) } }, // 初始化规则使其可以连线、拖拽 init (id, type) { let ins = this.plumbIns, elem = document.getElementById(id); const defaultParam = { anchor: ["Perimeter", {anchorCount:200, shape:"Rectangle"}], allowLoopback: false, maxConnections: 1, } const common = { // connector: 'Straight', } if (type === 1) { ins.addEndpoint(elem, { anchors: ['Left'], uuid: id }, {...common, isSource: false,isTarget: true}) } else { ins.addEndpoint(elem, { anchors: ['Right'], uuid: id }, {...common, isSource: true,isTarget: false}) } ins.draggable(elem,{ containment: true }); }, connectionAll () { let ins = this.plumbIns; ins.ready(() => { for (let i = 0; i < this.connlist.length; i++) { let conn = this.connlist[i], connection = ins.connect({ uuids: [`${conn.sourceNodeId}`, `${conn.targetNodeId}`], }); } ins.bind('click', (conn, originalEvent)=> { this.$confirm('确认删除映射么?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { ins.deleteConnection(conn) }).catch(()=>{}) }) }) }, }`
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。