用拓扑图呈现多层级关系图(二)

上一篇里我们用TWaver制作了一个公司内部的流程图,这一弹,我们来研究如何呈现出公司内部门和员工间的关系网图。先来看看效果:

例子中我们展示的是各部门员工之间的复杂关系图。在公司内部,不仅部门内部员工之间发生着关系往来,部门和部门之间的员工也在发生这各种往来关系。如果你还是用原先的那种表格来呈现,显然很难直观看出各种关系,用图形化的拓扑呈现就会显得一目了然。好了,我们就来分析一下这张图如何用twaver实现它。

首先我们要定义部门的网元,twaver矢量减少了我们很多定制UI的繁琐,我们直接用矢量来描述这个小圆点部分,注意小圆点的颜色需要区分鼠标滑过时的效果,这里我们定义了是否需要高亮的属性:highlighted,代码如下:

twaver.Util.registerImage(‘circle_node‘, {
	w: 200,
	h: 200,
	lineWidth:1,
	lineColor: ‘black‘,
	v: [{
		shape: ‘circle‘,
		r: 6,
		fill: function(data, view){
			if(data.getClient(‘highlighted‘)){
				return highlightedNodeColor;
			}else{
				return normalNodeColor;
			}
		}
	}]
});

第一步,小圆点描述好了,接下来就需要为圆点加上文字的显示,文字如果按照默认的显示方式显然不太好,因为我们是要让文字进行旋转,而文字所处的位置需要根据角度来计算对其方式和偏移值,当然文字也需要鼠标滑过的效果:

{
	shape: ‘text‘,
	text: ‘<%=getClient("text")%>‘,
	textAlign: function(data, view){
		var angle=data.getClient(‘angle‘	)+ball.angle;
		angle=angle%360;
		if(angle<0){
			angle=angle+360;
		}
		if(angle>90 && angle<270){
			return ‘right‘;
		}
		return ‘left‘;
	},
	textBaseline: ‘middle‘,
	font: ‘12px "Microsoft Yahei"‘,
	fill: function(data, view){
		if(data.getClient(‘highlighted‘)){
			return highlightedNodeColor;
		}else{
			return ‘black‘;
		}
	},
	x: function(data, view){
		var angle=data.getClient(‘angle‘	)+ball.angle;
		angle=angle%360;
		if(angle<0){
			angle=angle+360;
		}
		if(angle>90 && angle<270){
			return -10
		}
		return 10;
	},
}

好了,第三步需要让整个节点能旋转起来,因此我们还需要为node加上旋转的矢量描述:

rotate: function(data, view){
	var angle=data.getClient(‘angle‘)+ball.angle;
	angle=angle%360;
	if(angle<0){
		angle=angle+360;
	}
	if(angle>90 && angle<270){
		angle+=180;
	}
	return angle;
}

至此部门的节点就定制好了,是不是感觉复杂了一下,没关系,如果想要这样的功能,直接使用我们封装好的这个就可以了。

接着我们还需要来定制连线,上图中连线走向的那种方式在twaver产品中已经是很常见了,这里我们就不多描述了。

OK,准备好节点和连线的矢量描述之后就可以来填充数据了,创建好公司的所有部门以及员工之间的关系后,我们还需要给部门设置上旋转的度数:

for(var i=0;i<size;i++){
	var angle=Math.PI*2/size*i;
	var x=ball.cx+ball.width*Math.cos(angle);
	var y=ball.cy+ball.height*Math.sin(angle);
	var id=‘n‘+i;
	var degree=parseInt(angle/Math.PI*180);
	var node=createNode(box, id, x, y, ‘部门‘+i, degree);
}

这样我们上面的那张图的功能就差不多了。也许有人会觉得怎么都是呈现的是部门,如何才能看到部门下哪些员工和另外的部门有关系呢。是的,到此我们还只完成了一半,还有更精彩的内容呈现给大家。

双击部门后,可以展开这个部门,并显示部门下所有的员工。

是不是很帅,注意这里是有动画效果的,双击某个部门,这个部门会转到顶部,然后展开这个部门。这个用twaver新增的动画功能很容易来实现,这里就不多说了。下面录制了一个视频供大家欣赏。这样我们就能更清楚的知道这个部门下的员工和哪个部门下的员工有业务往来关系了。下图是一个gif图片,下载有点慢,请耐心等待。

或者直接点击看视频:

http://v.youku.com/v_show/id_XOTM2MzE1ODE2.html

想要demo的小伙伴们可发邮件到[email protected],我们会将完整代码呈现给您。

时间: 2024-11-05 11:55:32

用拓扑图呈现多层级关系图(二)的相关文章

用拓扑图呈现多层级关系图

大部分拓扑图界面都有显示“分级呈现”的需求.一个复杂的系统或组织,会有很多不同层次的节点和连接关系.如何用图形相对清晰的呈现出来,是一个需要不断探讨的话题. twaver中有很多的方式可以显示“分级”的先是方法: 1.用Group网元组显示.Group网元组是把一些网元显示在一个组中.这个组可以双击展开.闭合.在闭合状态,它和一个普通的网元节点没什么区别:有位置.有图标.有动作.双击后,默认它会把其内部的孩子显示出来,而自己变成一个覆盖所有孩子的“区域”,形状可能是圆形.方形等.也有人称之为“本

用拓扑图实现多层级关系图(三)可折叠流程图

说到TWaver的流程图却是层出不穷,千姿百态.2D的,3D的,静态的,动态的.这次要给大家呈现的是一款全矢量的,非常清新优美的流程图.先给大家看看效果: 看到这样的图,是不是觉得不就是用了几张贴图嘛,如果这样想,那么你对twaver还是有所了解的.前面我们已经提到了,这是一款全矢量的流程图,这里可没有用到任何贴图哦,下面这些网元都是矢量描述出来的,缩放不失真.接下来我们就来介绍一下如何矢量描述这些网元呢? 这里我们以第一个为例,来介绍如何用矢量来描述这个元素,首先我们需要画一个圆角正方形,并且

分析函数调用关系图(call graph)的几种方法

分析函数调用关系图(call graph)的几种方法 绘制函数调用关系图对理解大型程序大有帮助.我想大家都有过一边读源码(并在头脑中维护一个调用栈),一边在纸上画函数调用关系,然后整理成图的经历.如果运气好一点,借助调试器的单步跟踪功能和call stack窗口,能节约一些脑力.不过如果要分析的是脚本语言的代码,那多半只好老老实实用第一种方法了.如果在读代码之前,手边就有一份调用图,岂不妙哉?下面举出我知道的几种免费的分析C/C++函数调用关系的工具. 函数调用关系图(call graph)是图

Web中树形数据(层级关系数据)的实现—以行政区树为例

在Web开发中常常遇到树形数据的操作,如菜单.组织机构.行政区(省.市.县)等具有层级关系的数据. 以下以行政区为例说明树形数据(层级关系数据)的存储以及实现,效果如图所看到的. 1 数据库表结构设计 树形数据一般通过父节点和子节点实现数据之间的层级关联,层级关系在数据库中主要通过主键和外键来实现. --使用Oracle数据库 --创建行政区表 create table TB_XZQ ( code NUMBER not null, --行政区编码,主键 parent_code NUMBER, -

css盒子模型层级3D图

作为前端开发工程师,大家都应该知道盒子模型.下面用一张图来表达3D盒子模型的层级关系 大家可以看到background-color 在background-image的下一层.这个希望对大家有帮助

树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示

树状结构Java模型.层级关系Java模型.上下级关系Java模型与html页面展示 一.业务原型:公司的组织结构.传销关系网 二.数据库模型 很简单,创建 id 与 pid 关系即可.(pid:parent_id) 三.Java模型 (我们把这张网撒在html的一张表里.其实用ul来展示会简单N多,自己思考为什么LZ会选择放在表里) private class Table {        private Long id; // 当前对象的id         private int x; /

常规功能和模块自定义系统 (cfcmms)—032开发日志(用GoJS来绘制模块关系图)

032开发日志(用GoJS来绘制模块关系图) 本系统现在尚没有流程和图表的功能,现在感觉在操作模块的各种功能的时候如果有一个模块关系图,那么就会更直观.网上找了一些绘制图表的库,看了一下GoJS也不错,入门也比较容易.经过一些工作,对业务模块作了一个简单的关系图. GoJS的基础知识请看官网的介绍,在上面的模块图中,有模块节点和连线二种信息需要定义.用户业务模块数据都是由后台组织好后发送到前台的. 整个绘制流程图的界面模块是一个Panel,在render的时候从后台加载数据,然后绘制.js类如下

项目中遇到的问题:关系图组件兼容性问题解决

1.   问题背景 在开发“客户群成员关系图”功能时,用到了关系图组件MxClient库,在开发过程中,发现该组件在IE8及IE9下有兼容性问题:不能展示图形节点的背景图及样式.不能展示关系图之间的连接线.在IE8兼容模式下.在IE6及IE7下都能正常展示,在IE8标准模式及IE9标准模式下,都不能正常展示. 2.   问题现象 不能正常展示的现象如果下图所示: 3.   问题原因 在排查原因的过程中,发现同样的关系图展示代码,在另外的模块(客户族群管理),能够正常展示关系图数据,由此判断关系图

vue层级关系的数据管理

项目背景:为一些有层级关系的数据管理做一套后台管理系统,例如一个小区,里面是有许多楼,楼里有许多层,每一层有许多不同的房······,现在就是要实现对这些数据进行增删改查操作. 1.Tree(树形组件) Sublime Text 3左侧的项目目录,就是有一定层级关系的"数据"被组织成Tree,然后单击各子树,会呈现不一样的内容,因此可借用这个设计思想来设计这一套系统的导航功能.为什么要做这个导航功能,因为若要简单实现,直接用一个选择器组件,放入所有可选项让用户进行选择即可,然而这样做的