首页 > 其他 > 详细

G6策略树

时间:2021-05-28 14:34:12      阅读:33      评论:0      收藏:0      [点我收藏+]
//G6组件
<template> <div id="container" :style="{ height: ‘500px‘, width: ‘100%‘ }" /> </template> <script> import G6 from ‘@antv/g6‘ export default { data() { return { contorlGraph: ‘‘ } }, methods: { CheckChange(val) { const container = document.getElementById(‘container‘) const graph = new G6.TreeGraph({ container: ‘container‘, width: container.clientWidth, height: container.clientHeight, modes: { default: [ { type: ‘collapse-expand‘, onChange: function onChange(item, collapsed) { const data = item.getModel() data.collapsed = collapsed return true } }, ‘drag-canvas‘, ‘zoom-canvas‘ ] }, defaultNode: { size: 26, anchorPoints: [ [0, 0.5], [1, 0.5] ] }, defaultEdge: { type: ‘cubic-horizontal‘ }, nodeStateStyles: { // hover 状态为 true 时的样式 hover: { fill: ‘#4d78cc‘ } }, layout: { type: ‘compactBox‘, direction: ‘LR‘, getId: function getId(d) { return d.id }, getHeight: function getHeight() { return 16 }, getWidth: function getWidth() { return 16 }, getVGap: function getVGap() { return 10 }, getHGap: function getHGap() { return 100 } } }) graph.node(function (node) { return { label: node.data.label, labelCfg: { offset: 10, position: node.children && node.children.length > 0 ? ‘left‘ : ‘right‘, style: { fill: node.depth === 3 ? node.status ? ‘#6b9bfa‘ : ‘#000000‘ : ‘#6b9bfa‘ } } } }) // 闪开功能 // G6.Util.traverseTree(val, function (item) { // if (item.data.hasChild === true) { // item.collapsed = true // } // }) graph.on(‘node:click‘, (ev) => { const { item } = ev // console.log(item) if (item._cfg.model.data.response) { graph.setItemState(item, ‘hover‘, true) this.$emit(‘treeDataResponse‘, item._cfg.model.data) return { style: { fill: ‘#00a23c‘, stroke: ‘#ea7171‘ } } } }) // 监听鼠标离开节点 graph.on(‘node:mouseleave‘, (ev) => { const { item } = ev // 设置目标节点的 hover 状态 false setTimeout(() => { graph.setItemState(item, ‘hover‘, false) }, 500) }) this.contorlGraph = graph graph.data(val) graph.render() graph.fitView() }, handleCheckChange(val) { // 如果画布没有渲染节点的情况 if (!this.contorlGraph.cfg) { this.CheckChange(val) this.destroyDrag() this.CheckChange(val) } else { // 有渲染节点,再次点击到有节点的数据,避免重复渲染 this.destroyDrag() setTimeout(() => { this.CheckChange(val) }, 20) } }, // 销毁画布 destroyDrag() { // 如果画布已经被销毁,则不再执行 if (this.contorlGraph.cfg !== null) { this.contorlGraph.destroy() } else { return false } } } } </script> <style lang="scss" scoped> #container { margin-left: 75px; width: 100%; height: 100%; border: 1px solid #eee; } </style>

 

使用组件

 
//引入组件

<dataTreeref="TREE_DATA"@treeDataResponse="treeDataResponse" />

//给组件传值
his.$refs.TREE_DATA.handleCheckChange(res.data)
 
//获取选中节点的值
    treeDataResponse(val) {
      // 获取节点名称
      console.log(val);
       this.$forceUpdate()
    },
 

效果图

技术分享图片

 

G6策略树

原文:https://www.cnblogs.com/0520euv/p/14821847.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!