沃梦达 / IT编程 / 前端开发 / 正文

jsPlumb+vue创建字段映射关系

项目中需要将ES数据库表字段和其他库表字段做映射,研究了下jsPlumb,做一下记录;1: yarn add jsPlumb2: import {jsPlumb} from ‘jsplumb’3: ` created(){this.plumbIns = jsPlumb.getInstance({Container:p...

项目中需要将ES数据库表字段和其他库表字段做映射,研究了下jsPlumb,做一下记录;

1: yarn add jsPlumb

2: import {jsPlumb} from ‘jsplumb’

3: `
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(()=>{})
    })
		})
	},
	}`

参考链接: https://wdd.js.org/jsplumb-chinese-tutorial
https://jsplumbtoolkit.com/community

本文标题为:jsPlumb+vue创建字段映射关系