dagre-d3画流程图

dagre-d3画流程图,效果:

<!doctype html>

<meta charset="utf-8">
<title>Process</title>
<script src="/d3.v4.min.js" charset="utf-8"></script>
<script src="/dagre-d3.min.js"></script>
<script src="/jquery.min.js"></script>
<script src="/server.js"></script>
<script src="/login.js"></script>

<style id="css">
    g.type-current > rect {
        fill: #1E9FFF;
    }
    g.type-success > rect {
        fill: green;
    }
    g.type-fail > rect {
        fill: red;
    }

    text {
        font-weight: 300;
        font-family: "Helvetica Neue", Helvetica, Arial, sans-serf;
        font-size: 14px;
    }

    .node rect {
        stroke: #999;
        fill: #fff;
        stroke-width: 1.5px;
    }

    .edgePath path {
        stroke: #333;
        stroke-width: 1.5px;
    }
</style>

<svg id="svg-canvas" width=700 height=300></svg>

<script >
  var topicId = sessionStorage.getItem('dataFlowTopicId');
  var v= [1,2,3];

  var a = {'age':30,'sex':'male'};
function count(o){
var t = typeof o;

if(t == 'string'){
return o.length;

}else if(t == 'object'){

var n = 0;

for(var i in o){

n++;

}

return n;
}
return false;

}

  var dataFlow = {
    0: '事项受理',
    1: '事项办结',
    2: '初审',
    3: '复审',
    4: '初审回复',
    5: '初审办结完成',
    6: '初审补正',
    7: '复审回复',
    8: '复审办结完成',
    9: '复审补正',
    10: '事项办结',
   };
   
  // Create the input graph
  var g = new dagreD3.graphlib.Graph()
    .setGraph({})
    .setDefaultEdgeLabel(function() { return {}; });

    for (var i = 0; i < count(dataFlow); i++) {
      g.setNode(i, {
        label:dataFlow[i],
        class: "type-no",
        id: "status"+i
      });
    }
    // g.setNode(20, {
    //   label: dataFlow[20],
    //   class:'type-no',
    //   id: 'status20'
    // });
  g.nodes().forEach(function(v) {
    var node = g.node(v);
    // Round the corners of the nodes
    node.rx = node.ry = 5;
  });

  // Set up edges, no special attributes.

  g.setEdge(0, 1,{label: "不予受理"});
  g.setEdge(0, 2,{label: "予以受理"});
  g.setEdge(2, 6,{label: "补正"});
  g.setEdge(6, 2,{label: "补正完毕"});
  g.setEdge(2, 4,{label: "不予受理"});
  g.setEdge(4, 5,{label: "初审不通过"});
  g.setEdge(2, 3,{label: "初审通过"});
  g.setEdge(3, 9,{label: "补正"});
  g.setEdge(3, 7,{label: "复审不通过"});
  g.setEdge(7, 8,{label: "回复完毕"});
  g.setEdge(3, 10,{label: "审批通过"});

  // Create the renderer
  var render = new dagreD3.render();

  // Set up an SVG group so that we can translate the final graph.
  var svg = d3.select("svg"),
    svgGroup = svg.append("g");

  // Run the renderer. This is what draws the final graph.
  render(d3.select("svg g"), g);

  var xCenterOffset = (svg.attr("width") - g.graph().width) / 2;
  svgGroup.attr("transform", "translate(" + xCenterOffset + ", 20)");
  svg.attr("height", g.graph().height + 40);

</script>
<script>
  
</script>
--------------------- 
作者:ym563099457 
来源:CSDN 
原文:https://blog.csdn.net/ym563099457/article/details/85102115 
版权声明:本文为博主原创文章,转载请附上博文链接!

要自定义 Dagre-D3 流程图节点,您需要了解以下几个方面: 1. 节点数据结构:在 Dagre-D3 中,节点通常是一个 JavaScript 对象,包含一些必要的属性,如节点的 ID、宽度、高度、位置等。您可以根据您的需求来定义自己的节点数据结构。 2. 节点渲染:Dagre-D3 通过 SVG 来渲染节点。您可以使用 SVG 的各种元素(如 rect、circle、path 等)来定义您的节点外观和样式。您可以使用 Dagre-D3 提供的一些默认样式,也可以根据自己的需求来定义自己的样式。 3. 节点交互:如果您需要为节点添加交互功能,例如鼠标悬停、点击等,您可以使用 D3.js 提供的事件处理函数来实现。您可以在节点元素上绑定事件处理函数,并在函数中实现您的逻辑。 下面是一个简单的自定义节点的示例代码: ```javascript // 定义节点数据结构 var node = { id: 'node1', width: 80, height: 40, x: 100, y: 100 }; // 渲染节点 var svg = d3.select('svg'); var g = svg.append('g'); var rect = g.append('rect') .attr('width', node.width) .attr('height', node.height) .attr('x', node.x) .attr('y', node.y) .attr('fill', '#ccc'); // 添加节点交互 rect.on('mouseover', function() { d3.select(this).attr('fill', '#f00'); }).on('mouseout', function() { d3.select(this).attr('fill', '#ccc'); }); ``` 在这个示例中,我们首先定义了一个简单的节点数据结构,然后使用 SVG 的 rect 元素来渲染节点。最后,我们为 rect 元素添加了鼠标悬停和鼠标移出事件,以改变节点的填充颜色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值