jsPlumb+vue创建字段映射关系

项目中需要将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(()=>{})
    })
		})
	},
	}`

参考链接: 中文介绍
官网

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值