用拓扑图展现层级和组织关系(二)

上一篇里我们用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-08 22:02:08

用拓扑图展现层级和组织关系(二)的相关文章

用拓扑图展现层级和组织关系(一)

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

用拓扑图展现层级和组织关系(四)

最近冰冰很火,<万物生长>里风情万种,<跑男>里敢抢敢拼,为了缓解各位攻城狮的工作压力,我们特地制作了一款颜值爆表的组织结构图,欢迎大家来领取各自的男神女神 组织结构图的呈现方式多种多样,用途也是非常广泛,可以应用于集团内部,企业各部门之间的组织关系呈现.我们就来看看twaver实现出来的效果. 上下布局: 圆形布局: 这些布局用twaver来实现是非常的合适,实现起来也是很容易,twaver内部就提供了多种布局方式:自左向右,从下向上,具体可以看twaver的官方文档介绍.这里就

用拓扑图展现层级和组织关系(三)

互联网购物成了当今非常热门的话题,各种购物网站,手机APP如雨后春笋般涌现出来.什么买衣服,买水果,买米,买油都得到了解决,自从有了这些app,再也不用去超市排着超长的队伍,扛着超重货物,骑着超累的车子了.之前每出一趟门买东西简直是跟参加了一场马拉松似的,现在好了,直接送货到家.那么在购物的背后又有什么样的流程呢,今天我们给大家介绍的是TWaver的另一款流程图. 说到TWaver的流程图却是层出不穷,千姿百态.2D的,3D的,静态的,动态的.这次要给大家呈现的是一款全矢量的,非常清新优美的流程

selenium python (七)层级定位(二次定位)

#!/usr/bin/python# -*- coding: utf-8 -*-__author__ = 'zuoanvip' #在实际测试过程中,一个页面可能有多个属性基本相同的元素,如果要定位到其中的一个,这时候需要用到层级定位.先定位到父元素,然后再通过父元素定位子孙元素 #导入包from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.commo

前端之路——CSS基础(二)

一. css介绍 什么是css:就是网页的布局和渲染效果 什么是查找标签:就是操作标签. 如何进行查找标签:将需要操作的标签查找方法写在style标签里面,在这个里面之姐就可以操作,对相对应的标签进行布局和渲染   style标签:里面写的都是css代码,进行操作标签,使标签的展现更加美观. 二.css的引入方式 1 行列式:直接在标签的里面加上style属性,后面写上操作 <p style="background-color: rebeccapurple">hello y

二维数组元素及其地址表示的完美解读

一,二维数组的架构与逻辑 1.a[3][4] = {a[0], a[1], a[2]} ={{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; 二维m×n  -->  m个一维数组  -->  每个一维数组包含n个元素 不废话,直接看图 2,确定的公式 a[0] = a[0]+0 = &a[0][0] = *(a+0)+0 = *a a = &a[0] = &(&a[0][0]) = &(*a) a; 二, 二维数

[opencv]QRcodeScanner二维码相关技术集成

#include <utility> /** * @User: leoxae * @Date: 2019-08-22 * @Time: 10:56 * */ #include "QRCodeScanner.h" #include "ImgProcession.h" #include "../math/PlaneGeometry.h" using namespace std; using namespace cv; /** * 获取二维

高大上必备!D3.js对产品的贡献度剖析

在这个用数据说话的时代(靠脸吃饭的年代),没有一个好的展现形态(没有一张帅气清秀的脸蛋),对于整个产品产生的影响,那简直... 在数据可视化竞争的战场,互联网的各家各户都很注重自家产品的前端展现.这也造成了目前前端各种火到爆,火的不要不要的原因之一.各类新型的框架也是接踵而至,如:emberjs.angluarjs.backbonejs.vuejs以及reactjs等等,这个对目前企业的发展也造成了一定的困扰. 追星派:此派弟子非常注重对新技能的渴求,看到新的技能书,不管前方道路如何坎坷,练了再

解密小米:到底想做什么?

即使估值已经超过450亿美元,小米依然是一家很饥渴的公司. 这家公司的创始人兼首席执行官雷军在最近的一个月中,带着他的自拍杆多次出现在了全球媒体的镜头中,46岁的他看上去意得志满.3月15日,他在朋友圈中贴出了李克强总理答记者问的一段话——“最近互联网上流行的一个词叫风口,我想站在‘互联网+’的风口上顺势而为,会使中国经济飞起来.” 雷军成功地将他的“风口”和“顺势而为”理论输出到了国家领导层.他的另一个身份是全国人大代表,根据耶鲁大学Rory Truex的调查,如果一家公司的CEO当上全国人大