wangchuanjin 9 rokov pred
rodič
commit
b8ad8bf2cd

+ 4 - 3
core/src/qfw/search/search.go

@@ -9,9 +9,10 @@ import (
 
 type Search struct {
 	*xweb.Action
-	getEnterpriseList xweb.Mapper `xweb:"/search/enterprise/([^.]*)ent([^.]*).html"` //查询企业列表
-	sim               xweb.Mapper `xweb:"POST /search/sim"`                          //即时搜索
-	searchEntSer      xweb.Mapper `xweb:"/searchEntSer/(.*)"`                        //获取企业的服务列表
+	getEnterpriseList  xweb.Mapper `xweb:"/search/enterprise/([^.]*)ent([^.]*).html"` //查询企业列表
+	sim                xweb.Mapper `xweb:"POST /search/sim"`                          //即时搜索
+	searchEntSer       xweb.Mapper `xweb:"/searchEntSer/(.*)"`                        //获取企业的服务列表
+	findServiceByEntId xweb.Mapper `xweb:"/front/findServiceByEntId"`                 //获取企业的服务列表
 }
 
 func init() {

+ 51 - 0
core/src/qfw/search/searchService.go

@@ -78,6 +78,57 @@ func (search *Search) SearchEntSer(id string) error {
 	return nil
 }
 
+func (search *Search) FindServiceByEntId() error {
+	if search.Method() == "POST" {
+		id := search.GetString("entId")
+		limit, _ := search.GetInteger("pageSize")
+		currentPage, _ := search.GetInteger("currentPage")
+		start := (currentPage - 1) * limit
+		var count int64
+		//分页
+		mustnot := `{"term" : {"i_status" : 1 }}`
+		var fields, collection, query, tempstrquery string
+		collection = "service"
+		tempstrquery = `{"query_string":{"default_field": "s_enterpriseid","query":"` + id + `"}}`
+		servicequery := ""
+		if search.GetSession("entid") == nil || search.GetSession("entid").(string) != id {
+			servicequery = `,"must_not" : [` + mustnot + `]`
+		}
+		query = `{"query": {
+		    "bool": {
+			  "must":[` + tempstrquery + `]` + servicequery + `
+		    }
+		  }}`
+		//需要查到的字段信息
+		fields = `"_id","s_name","s_introduction","s_images","s_enterpriseid","s_isshow","i_status"`
+		if currentPage == 1 {
+			count = elastic.Count("service", collection, query)
+		}
+		//查询服务列表数据
+		result := elastic.Get("service", collection, `{"query":{"bool": {"must":[`+tempstrquery+`]`+servicequery+`}},
+		_source:[`+fields+`],
+		sort:{"l_createdate":"desc"},
+		from:`+fmt.Sprintf("%v", start)+`,
+		size:`+fmt.Sprintf("%v", limit)+`
+		}`)
+		for _, v := range *result {
+			b, _ := CheckAuth(v)
+			if b {
+				v["s_isEdit"] = "1"
+			} else {
+				v["s_isEdit"] = "0"
+			}
+			if IntAll(v["i_status"]) == 1 {
+				v["s_remove"] = 1
+			} else {
+				v["s_remove"] = 0
+			}
+		}
+		search.ServeJson(&map[string]interface{}{"list": result, "count": count})
+	}
+	return nil
+}
+
 //企业列表
 func (n *Search) GetEnterpriseList(reqType, param /*参数*/ string) error {
 	//必须是登录之后的已认证用户才可以进入企业社区

+ 2 - 0
core/src/qfw/yellowpage/yellowpage.go

@@ -15,6 +15,8 @@ type Yellowpage struct {
 	enterpriseInfo xweb.Mapper `xweb:"/enterprise/(\\w+).html"`
 	//根据企业注册号进入企业黄页
 	enterpriseInfoByRegNO xweb.Mapper `xweb:"/enterpriseInfoByRegNO/(\\w+).html"`
+	//获取关系网数据
+	getRelation xweb.Mapper `xweb:"/member/getRelation"`
 }
 
 func (yp *Yellowpage) EnterpriseInfoByRegNO(regNO string) error {

+ 13 - 3
core/src/qfw/yellowpage/yellowpagemanager.go

@@ -244,9 +244,18 @@ func isContainInQueryCache(querykey string, cache *list.List) bool {
 }
 
 func (yp *Yellowpage) GetRelation() error {
-	relation := makeRelation(yp.GetString("regNo"), yp.GetString("entName"))
-	if relation != nil {
-		yp.ServeJson(M{"relation": relation})
+	if util.IntAll(yp.GetSession("identWay")) == 1 {
+		regNo := yp.GetString("regNo")
+		entName := yp.GetString("entName")
+		if regNo == "" || entName == "" {
+			return nil
+		}
+		relation := makeRelation(regNo, entName)
+		if relation != nil {
+			yp.ServeJson(M{"flag": true, "relation": relation})
+		}
+	} else {
+		yp.ServeJson(M{"flag": false})
 	}
 	return nil
 }
@@ -283,6 +292,7 @@ func makeRelation(mnregno, mnname string) interface{} {
 
 	for el := ls.Front(); el != nil; el = el.Next() {
 		v, _ := el.Value.([]string)
+		log.Println(v)
 		//加投资人
 		if _, ok := node[v[1]]; !ok {
 			node[v[1]] = map[string]string{

+ 3 - 0
core/src/web/staticres/css/dev-qfw.css

@@ -4,6 +4,9 @@ body {
 	font-family: tahoma, arial, 'Hiragino Sans GB', 'Microsoft YaHei', 宋体, sans-serif;
 	color: #666;
 }
+.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6{
+	font-family: tahoma, arial, 'Hiragino Sans GB', 'Microsoft YaHei', 宋体, sans-serif;
+}
 table{
 	font-size: 14px;
 }

+ 97 - 72
core/src/web/staticres/css/entcommunity.css

@@ -152,7 +152,6 @@ a:focus, a:hover{
 }
 .entinfo-page .b-com-head .b-com-last a{
 	color: blue;
-	margin-left: 10px;
 }
 .white_content {
 	display: none;
@@ -198,12 +197,12 @@ a:focus, a:hover{
 	width: 60px;
 	cursor: pointer;
 }
-.entinfo-tab{
+.ent-tab{
 	height: 50px;
 	background-color: #F6F8FA;
 	padding-left: 20px;
 }
-.entinfo-tab li{
+.ent-tab li{
 	padding: 0px 20px;
 	border-top-width: 3px;
 	height: 47px;
@@ -213,37 +212,21 @@ a:focus, a:hover{
 	border-right: 1px solid #FFFFFF;
 	font-weight: bold;
 }
-.entinfo-tab .entinfo-active{
+.ent-tab .ent-active{
 	border-top-color: #16a086;
 	background-color: #FFFFFF;
 	color: #16a086;
 	border-right-width: 0px
 }
-.entinfo-tab-content{
+.ent-tab-content{
 	margin-top: 10px;
 	background-color: #FFFFFF;
 	padding-top: 20px;
+	padding-bottom: 20px;
 }
 /********************企业画像**********************/
-.entinfo-basicinfo{
-	padding: 0px 20px;
-}
-.entinfo-basicinfo .b-com-title{
-	font-size: 18px;
-	padding-left: 5px;
-	border-bottom: 1px solid #DFE0E2;
-	padding-bottom: 10px;
-}
-.entinfo-basicinfo .b-com-title span{
-	color: #16a086;
-	margin-right: 5px;
-}
-.entinfo-basicinfo .b-com-title font{
-	font-size: 14px;
-	margin-left: 5px;
-}
 .entinfo-basicinfo .b-com-content{
-	padding: 90px 0px;
+	padding: 60px 0px;
 }
 .entinfo-basicinfo .entinfo-round{
 	border: 1px solid #DFE0E2;
@@ -257,7 +240,7 @@ a:focus, a:hover{
 	position: absolute;
 }
 .entinfo-basicinfo .entinfo-round>div:first-child{
-	top: 130px;
+	top: 100px;
 	left: 15px;
 	width: 320px;
 	padding-left: 50px;
@@ -266,10 +249,14 @@ a:focus, a:hover{
 	position: relative;
 	display: block;
 	width: 320px;
-	margin-bottom: 10px;
 	margin-left: -50px;
 	text-align: center;
 }
+.entinfo-basicinfo .entinfo-round>div:first-child>span>img{
+	width: 15px;
+	height: 11px;
+	margin: 5px 0px;
+}
 .entinfo-basicinfo .entinfo-round>div:first-child>span>div:first-child{
 	font-size: 18px;
 	font-weight: bold;
@@ -334,8 +321,8 @@ a:focus, a:hover{
 	text-align: right;
 }
 .entinfo-basicinfo .entinfo-estdate>img{
-	width: 30px;
-	height: 67px;
+	width: 34px;
+	height: 76.5px;
 	margin-top: -20px;
 	right: -35px !important;
 }
@@ -350,8 +337,8 @@ a:focus, a:hover{
 	text-align: right;
 }
 .entinfo-basicinfo .entinfo-regcap>img{
-	width: 40px;
-	height: 40px;
+	width: 36px;
+	height: 36.5px;
 }
 .entinfo-basicinfo .entinfo-regcap-round{
 	top: 120px;
@@ -378,8 +365,8 @@ a:focus, a:hover{
 	text-align: right;
 }
 .entinfo-basicinfo .entinfo-lerep>img{
-	width: 40px;
-	height: 42.5px;
+	width: 48px;
+	height: 51px;
 }
 .entinfo-basicinfo .entinfo-lerep-round{
 	top: 315px;
@@ -391,8 +378,8 @@ a:focus, a:hover{
 	top: 330px;
 }
 .entinfo-basicinfo .entinfo-entscale>img{
-	width: 40px;
-	height: 33px;
+	width: 50.5px;
+	height: 43.5px;
 	left: -45px;
 }
 .entinfo-basicinfo .entinfo-entscale-round{
@@ -405,8 +392,8 @@ a:focus, a:hover{
 	top: 225px
 }
 .entinfo-basicinfo .entinfo-regorgname>img{
-	width: 40px;
-	height: 51px;
+	width: 37px;
+	height: 48px;
 	left: -45px;
 }
 .entinfo-basicinfo .entinfo-regorgname-round{
@@ -419,8 +406,8 @@ a:focus, a:hover{
 	left: 380px;
 }
 .entinfo-basicinfo .entinfo-dom>img{
-	width: 30px;
-	height: 40px;
+	width: 33px;
+	height: 45px;
 	left: -35px;
 }
 .entinfo-basicinfo .entinfo-dom-round{
@@ -433,8 +420,8 @@ a:focus, a:hover{
 	top: -28px;
 }
 .entinfo-basicinfo .entinfo-operperiod>img{
-	width: 40px;
-	height: 40px;
+	width: 49.5px;
+	height: 49.5px;
 	left: -45px;
 }
 .entinfo-basicinfo .entinfo-operperiod-round{
@@ -442,28 +429,6 @@ a:focus, a:hover{
 	right: 100px;
 }
 /*股东信息*/
-.entinfo-shareholderinfo>div{
-	margin-bottom: 30px;
-}
-.entinfo-shareholderinfo>div{
-	font-size: 16px;
-	color: #16a086;
-}
-.entinfo-shareholderinfo>div>span{
-	background-color: #AEE7D6;
-	font-size: 14px;
-	margin-right: 10px;
-	display: inline-block;
-	line-height: 25px;
-	text-align: center;
-	width: 25px;
-	height: 25px;
-	color: #FFFFFF;
-}
-.entinfo-shareholderinfo ul{
-	padding-left: 50px;
-	padding-bottom: 60px;
-}
 .entinfo-shareholderinfo li{
 	margin-right: 40px;
 	margin-bottom: 20px;
@@ -487,11 +452,12 @@ a:focus, a:hover{
 }
 /********************关系网**********************/
 .entrelation{
-	
+	position: relative;
+	padding: 0px 20px;
 }
-.entrelation-legend{
-	float:left;
-	height:500px;
+.entrelation svg{
+	position: relative;
+	z-index: 1;
 }
 .legend-text-bg>div{
     position: absolute;
@@ -502,35 +468,35 @@ a:focus, a:hover{
     line-height: 25px;
     text-align: center;
 	margin-top: -3px;
-	z-index: -1;
 }
 .legend-text-bg>span{
 	position: relative;
 }
 /*全屏代码*/
-.entrelation-infovis .entrelation-controlls{
+.entrelation .entrelation-controlls{
 	position: absolute;
 	margin-top: 10px;
+	z-index: 2;
 }
-.entrelation-infovis .entrelation-controlls .entrelation-item{
+.entrelation .entrelation-controlls .entrelation-item{
 	border-radius: 2px;
 	box-shadow: 0 1px 4px rgba(0,0,0,0.3);
 	cursor: pointer;
 	margin-bottom: 8px;
 	float:left;
 }
-.entrelation-infovis .entrelation-controlls .entrelation-box{
+.entrelation .entrelation-controlls .entrelation-box{
 	padding:10px;
 	float:left;
 }
-.entrelation-infovis .entrelation-controlls .entrelation-box div{
+.entrelation .entrelation-controlls .entrelation-box div{
 	background: url(/images/view_icons.png) no-repeat;
 	width: 16px;
 	height: 16px;
 	opacity: 0.6;
 }
-:-moz-full-screen .entrelation-infovis,:-webkit-full-screen .entrelation-infovis,:-o-full-screen .entrelation-infovis,
-:-ms-full-screen .entrelation-infovis,:fullscreen .entrelation-infovis,:-ms-fullscreen .entrelation-infovis,:full-screen .entrelation-infovis{
+:-moz-full-screen .entrelation,:-webkit-full-screen .entrelation,:-o-full-screen .entrelation,
+:-ms-full-screen .entrelation,:fullscreen .entrelation,:-ms-fullscreen .entrelation,:full-screen .entrelation{
   width: 100%;
   height: 100%;
   background-color:#fff;
@@ -556,3 +522,62 @@ a:focus, a:hover{
 :full-screen {
 	background: #fff; 
 }
+.ent-findnull{
+	text-align: center;
+	padding: 50px 0px;
+}
+.entrelation-limit>div{
+	border-bottom: 1px solid #e5e6e9;
+	padding-top: 50px;
+	padding-bottom: 85px;
+}
+.entrelation-limit>img{
+	margin-top: 10px;
+}
+.entrelation-limit .btn{
+	margin-top: 20px;
+	width: 200px;
+}
+/************公用****************/
+.ent-layout-up{
+	padding: 0px 20px;
+}
+.ent-layout-up .b-com-title{
+	font-size: 18px;
+	padding-left: 5px;
+	border-bottom: 1px solid #DFE0E2;
+	padding-bottom: 10px;
+}
+.ent-layout-up .b-com-title span{
+	color: #16a086;
+	margin-right: 5px;
+}
+.ent-layout-up .b-com-title font{
+	font-size: 14px;
+	margin-left: 5px;
+}
+.ent-layout-up .b-com-content{
+	margin-top: 20px;
+}
+.ent-layout-down{
+	padding-top: 20px;
+}
+.ent-layout-down .b-com-content{
+	padding: 0px 25px;
+}
+.ent-layout-down .b-com-title{
+	margin-bottom: 30px;
+	font-size: 16px;
+	color: #16a086;
+}
+.ent-layout-down .b-com-title>span{
+	background-color: #AEE7D6;
+	font-size: 14px;
+	margin-right: 10px;
+	display: inline-block;
+	line-height: 25px;
+	text-align: center;
+	width: 25px;
+	height: 25px;
+	color: #FFFFFF;
+}

BIN
core/src/web/staticres/fonts.zip


BIN
core/src/web/staticres/fonts/qimingxing.eot


BIN
core/src/web/staticres/fonts/qimingxing.svg


BIN
core/src/web/staticres/fonts/qimingxing.ttf


BIN
core/src/web/staticres/fonts/qimingxing.woff


BIN
core/src/web/staticres/images/entcommunity/qq.png


BIN
core/src/web/staticres/images/entcommunity/relation.png


BIN
core/src/web/staticres/images/entcommunity/triangle.png


+ 73 - 752
core/src/web/staticres/js/entportrait.js

@@ -1,25 +1,31 @@
 var entType = "企业";
+var relation = null;
+var serviceList = null;
 with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];
 //解析服务列表
-$(function(){	
-	//重绘关系网
-	try{		
-	//	redraw();	
-	}catch(e){}
+$(function(){
 	//联系地址
-	if($chiancity){
-		setcxSelect();	
-		var pt=province?($("#provincesel option[value="+province+"]").text()):"";
-		var ct=city?($("#citysel option[value="+city+"]").text()):"";
-		var at=area?($("#areasel option[value="+area+"]").text()):"";
-		//设置地图上显示的位置
-		$("#location").attr("value",as1);
-		$("#cityname").attr("value",pt.trim()+ct.trim()+at.trim());		
-		//获取地图的经纬度
-		doOptions();
-		$("#city_china").text(pt+ct+at+as1);
-	}else{	
-		setcxSelect();
+	if(address){
+		loadJS("/js/jquery.cxselect.js",function(){
+			$('#city_china').cxSelect({
+				selects: ['province', 'city', 'area'],
+				required:0
+			});
+			$.cxSelect.setVal(province,city,area);
+			var pt=province?($("#provincesel option[value="+province+"]").text()):"";
+			var ct=city?($("#citysel option[value="+city+"]").text()):"";
+			var at=area?($("#areasel option[value="+area+"]").text()):"";
+			//设置地图上显示的位置
+			$("#location").attr("value",as1);
+			$("#cityname").attr("value",pt.trim()+ct.trim()+at.trim());		
+			//获取地图的经纬度
+			loadJS("http://api.map.baidu.com/getscript?v=2&ak=AFd8b176f363f23e6a23d516f4cfb742&services=&t=20150522093217",function(){
+				loadJS("/js/geocoder.js",function(){
+					doOptions();
+				});
+			});
+			$("#city_china").text(pt+ct+at+as1);
+		});
 	}
 	//隐藏地图
 	$("#fade").click(closeMap);
@@ -28,14 +34,19 @@ $(function(){
 		$(".bdsharebuttonbox").show();
 	});
 	//切换
-	$(".entinfo-tab>li").click(function(){
-		$(".entinfo-tab>li").removeClass("entinfo-active");
-		$(this).addClass("entinfo-active");
-		$(".entinfo-tab-content>div").addClass("hide");
-		$(".entinfo-tab-content>div:eq("+$(this).index()+")").removeClass("hide");
+	$(".ent-tab>li").click(function(){
+		$(".ent-tab>li").removeClass("ent-active");
+		$(this).addClass("ent-active");
+		$(".ent-tab-content>div").addClass("hide");
+		$(".ent-tab-content>div:eq("+$(this).index()+")").removeClass("hide");
+		if($(this).index() == 1){
+			initRelation();
+		}else if($(this).index() == 5 && serviceList == null){
+			//加载服务列表
+			serviceList = new ServiceList();
+		}
 	});
-	//加载服务列表
-	initServiceList();
+	new ServiceList();
 });
 //显示地图
 function showMap(){
@@ -51,699 +62,50 @@ function closeMap(){
 	document.getElementById('fade').style.display = 'none';
 	$("html,body").removeClass("overflow-hidden");
 }
-//关系网初始化
-function Relation(data){
-	this.zoomlevel = 1;
-	//关系网的设置
-	$("#entrelation-fullscreen").bind("click",initFullScreen);
-	var w = parseInt($("#entrelation").css("width").replace("px","")) - 80;
-	$("#entrelation-infovis").css("width",w+"px");
-	var h = $("#entrelation-infovis").height();
-	if($(".entrelation-controlls").length>0){
-		$(".entrelation-controlls").css({left:$("#entrelation").width()-$(".entrelation-controlls").width()-30});
-	}
-	//查找逻辑
-	var index=-1;
-	var reg = new RegExp(/(有限公司|有限责任公司|股份有限公司|总公司|分公司|公司|事务所|合伙企业)$|\(.*\)|\(.*\)/g);
-	/*var provinces = [];
-	$.ajax({
-		url: "/js/provinceData.min.json",
-		dataType: "json",
-		cache: true,
-		async: false,
-		success: function(json){
-			provinces = json;
-		}
-	});*/
-	var filterEntName = function(text){
-		this.allProvinces = "河南省、青海省、山西省、黑龙江省、安徽省、广西壮族自治区、西藏自治区";
-		this.commonReplace = function(t){
-			if(t.length > 1 && text.startWith(t)){
-				var textCopy = text.replace(new RegExp("^"+t),"");
-				if(textCopy.length > 2){
-					text = textCopy;
-				}
-				return true;
-			}
-			return false;
-		};
-		this.replaceStart = function(t,f){
-			var flag = false;
-			var minus = null;
-			if(this.commonReplace(t)){//替换省、市、县、区
-				return true;
-			}
-			if(f){//不替换
-				flag = false;
-			}else if(t.endWith("维吾尔自治区")){
-				flag = true;
-				minus = 6;
-			}else if(t.endWith("回族自治区") || t.endWith("壮族自治区") || t.endWith("特别行政区")){
-				flag = true;
-				minus = 5;
-			}else if(t.endWith("自治州") || t.endWith("自治县") || t.endWith("自治区")){
-				flag = true;
-				minus = 3;
-			}else if(t.endWith("地区")){
-				flag = true;
-				minus = 2;
-			}else if(t.endWith("省") || t.endWith("市") || t.endWith("区")){
-				flag = true;
-				minus = 1;
-			}
-			if(flag){
-				return this.commonReplace(t.substring(0,t.length-minus));
-			}
-			return false;
-		};
-		this.replaceCity = function(citys){
-			if(citys){
-				for(var c in citys){//市
-					var c_name = citys[c].n;
-					if(this.replaceStart(c_name)){
-						this.replaceAreas(citys[c].s);
-						return true;
-					}else if(this.replaceAreas(citys[c].s)){
-						return true;
-					}
-				}
-			}
-		};
-		this.replaceAreas = function(areas){
-			if(areas){
-				for(var a in areas){//县、区
-					var a_name = areas[a].n;
-					if(this.replaceStart(a_name,true)){
-						return true;
-					}
-				}
-			}
-		};
-		for(var p in provinces){//省
-			var p_name = provinces[p].n;
-			if(this.allProvinces.indexOf(p_name) == -1){
-				continue;
-			}
-			if(this.replaceStart(p_name)){
-				this.replaceCity(provinces[p].s);
-				break;
-			}else if(this.replaceCity(provinces[p].s)){
-				break;
-			}
-		}
-		return text;
-	}
-	for(var i=0;i<data.nodes.length;i++){
-		var nodeObj = data.nodes[i];
-		nodeObj.text = $.trim(nodeObj.text);
-		nodeObj.shortText = nodeObj.text;
-		if(nodeObj.type == "e" || nodeObj.type == "ce"){
-			var text = nodeObj.shortText;
-			if(text.length > 2){//先替换结尾
-				text = text.replace(reg,"");
-			}
-			if(text.length > 2){//再替换开头
-				//text = filterEntName(text);
-			}
-			if(text.length > 2){//小于两个字符不生效
-				nodeObj.shortText = text;
-			}
-			if(nodeObj.name==regno){//先找本企业位置
-				index=i;
-				nodeObj["regcap"] = (typeof(d1) == "undefined")?0:d1;
-				nodeObj["legcerno"] = legcerno;
-			}
-		}
-	}
-	/*********************************连线处理***********************************/
-	var minLink=-1,maxLink=-1;
-	for(var i=0;i<data.links.length;i++){
-		var linkObj = data.links[i];
-		if(linkObj.target==index && data.nodes[linkObj.source].name==legcerno){
-			//data.nodes[linkObj.source].type="cp";
-			linkObj.type = "cp"
-			linkObj.isLegal = 1;
-		}
-		//
-		data.nodes[linkObj.target]["istarget"] = 1;
-		if(data.nodes[linkObj.source].name == data.nodes[linkObj.target].invlegcerno || data.nodes[linkObj.source].name ==	data.nodes[linkObj.target].legcerno){
-			linkObj.isLegal = 1;
-		}
-		if(typeof(linkObj.invacconam) == "undefined"){
-			continue;
-		}
-		var invacconam = new Number(linkObj.invacconam);
-		if(minLink == -1 && maxLink == -1){
-			minLink = invacconam;
-			maxLink = invacconam;
-		}else if(invacconam > maxLink){
-			maxLink = invacconam; 
-		}else if(invacconam < minLink){
-			minLink = invacconam;
-		}
-	}
-	var getLineSectionArray = function(){
-		var countSection = 6;
-		var section = (maxLink - minLink) / countSection;
-		var sectionArr = [];
-		for(var i=2;i<=countSection;i++){
-			var minVal = minLink;
-			if(sectionArr.length > 0){
-				minVal = sectionArr[sectionArr.length - 1].maxVal;
-			}
-			var maxVal = minLink+section*i;
-			if(i == countSection){
-				maxVal += section;
-			}
-			var sectionObj = {linkVal:i,minVal:minVal,maxVal:maxVal};
-			sectionArr.push(sectionObj);
-		}
-		return sectionArr;
-	}
-	/////////////
-	var linkSectionArray = getLineSectionArray();
-	for(var i=0;i<data.links.length;i++){
-		var linksObj = data.links[i];
-		linksObj["linkVal"] = 2;
-		if(typeof(linkObj.invacconam) == "undefined"){
-			continue;
-		}
-		var invacconam = new Number(linksObj.invacconam);
-		for(var s in linkSectionArray){
-			var sectionObj = linkSectionArray[s];
-			if(invacconam >= sectionObj.minVal && invacconam < sectionObj.maxVal){
-				linksObj["linkVal"] = sectionObj.linkVal;
-				continue;
-			}
-		}
-	}
-	/*********************************节点处理***********************************/
-	var minNode=-1,maxNode=-1;
-	for(var i=0;i<data.nodes.length;i++){
-		var nodeObj = data.nodes[i];
-		if(nodeObj.type == "e" || nodeObj.type == "ce"){
-			var regcap = nodeObj.regcap;
-			if(minNode == -1 && maxNode == -1){
-				minNode = regcap;
-				maxNode = regcap;
-			}else if(regcap > maxNode){
-				maxNode = regcap; 
-			}else if(regcap < minNode){
-				minNode = regcap;
-			}
-		}
-	}
-	var getNodeSectionArray = function(){
-		var countSection = 7;
-		var section = (maxNode - minNode) / countSection;
-		var sectionArr = [];
-		for(var i=1;i<=countSection;i++){
-			var minVal = minNode;
-			if(sectionArr.length > 0){
-				minVal = sectionArr[sectionArr.length - 1].maxVal;
-			}
-			var maxVal = minNode+section*i;
-			if(i == countSection){
-				maxVal += section;
-			}
-			var sectionObj = {nodeVal:6+i,minVal:minVal,maxVal:maxVal};
-			sectionArr.push(sectionObj);
-		}
-		return sectionArr;
-	}
-	var nodeSectionArray = getNodeSectionArray();
-	for(var i=0;i<data.nodes.length;i++){
-		var nodeObj = data.nodes[i];
-		nodeObj["nodeVal"] = 7;
-		if(nodeObj.type == "e" || nodeObj.type == "ce"){
-			var invacconam = new Number(nodeObj.invacconam);
-			var regcap = new Number(nodeObj.regcap);
-			for(var s in nodeSectionArray){
-				var sectionObj = nodeSectionArray[s];
-				if(regcap >= sectionObj.minVal && regcap < sectionObj.maxVal){
-					nodeObj["nodeVal"] = sectionObj.nodeVal;
-					continue;
-				}
-			}
-		}
-	}
-	//屏蔽鼠标右点击事件
-	if(document.getElementById("entrelation-infovis")){
-		document.getElementById("entrelation-infovis").oncontextmenu=function(){return false;};
-	}
-	$("#entrelation-fullscreen").attr("title","进入全屏视图"+((!!window.ActiveXObject || "ActiveXObject" in window)?"":" (F11)"));	
- 	//处理全屏
- 	function launchFullScreen(element) {
-	  	if(element){
-		  	if (element.requestFullscreen) {
-		      element.requestFullscreen();
-		    } else if (element.msRequestFullscreen) {
-		      element.msRequestFullscreen();
-		    } else if (element.mozRequestFullScreen) {
-		      element.mozRequestFullScreen();
-		    } else if (element.webkitRequestFullscreen) {
-				// 对 Chrome 特殊处理,
-		        // 参数 Element.ALLOW_KEYBOARD_INPUT 使全屏状态中可以键盘输入。
-		        if ( window.navigator.userAgent.toUpperCase().indexOf( 'CHROME' ) >= 0 ) {
-		              element.webkitRequestFullScreen( Element.ALLOW_KEYBOARD_INPUT );
-		        }else {
-					// Safari 浏览器中,如果方法内有参数,则 Fullscreen 功能不可用。
-		           element.webkitRequestFullScreen();
-		        }
-		    }
-	  	}
-	}
-	function cancelFullScreen() {
-		h = $("#entrelation-infovis").height();  
-		$("#entrelation-fullscreen").attr("title","进入全屏视图"+((!!window.ActiveXObject || "ActiveXObject" in window)?"":" (F11)"));	
-		//force.linkDistance(120).charge(-200).size([w,h]).resume();
-		$("#entrelation-infovis").css({width:w,height:h});
-		//设置svg标签的宽度与高度
-		d3.select("svg").attr("width", w).attr("height", h);
-		$(".entrelation-controlls").css({left:$("#entrelation").width()-$(".entrelation-controlls").width()-30});
-	    if(document.exitFullscreen) {
-	      document.exitFullscreen();
-	    } else if (document.msExitFullscreen) {
-	      document.msExitFullscreen();
-	    } else if (document.mozCancelFullScreen) {
-	      document.mozCancelFullScreen();
-	    } else if (document.webkitExitFullscreen) {
-	      document.webkitExitFullscreen();
-	    }
-	}
-	$(document).on('webkitfullscreenchange mozfullscreenchange msfullscreenchange fullscreenchange', function(){
-	    if (!document.fullscreenElement &&    // alternative standard method
-	    !document.mozFullScreenElement && 
-	    !document.webkitFullscreenElement && 
-	    !document.msFullscreenElement ) {
-		//退出
-		cancelFullScreen();
-	});
-   	var infovisdiv = document.getElementById("entrelation-infovis");
-	document.onkeydown=function(event){
-        var e = event || window.event || arguments.callee.caller.arguments[0];
-        if(e && e.keyCode==122){
-			event.preventDefault?event.preventDefault():window.event.returnValue = false;
-			if(!!window.ActiveXObject || "ActiveXObject" in window){//ie下F11不能用,屏蔽掉
-				if($(".exit").length == 0){
-					return;
-				}
-			}
-			initFullScreen();
-        }else if(e && e.keyCode==27){
-			event.preventDefault?event.preventDefault():window.event.returnValue = false;
-			cancelFullScreen();
-		}
-    };  
-	function initFullScreen(){
-		var fullscreenElement =
-        document.fullscreenElement ||
-        document.mozFullScreenElement ||
-        document.webkitFullscreenElement ||
-		document.msFullscreenElement;
-	    $(".entrelation-fullscreen").toggleClass("exit");
-		if(!fullscreenElement || fullscreenElement==null){
-			redrawflag = true;
-			$("#entrelation-fullscreen").attr("title","退出全屏视图 (F11)");
-			launchFullScreen(infovisdiv);
-			var timeout = 100;
-			if(!!window.ActiveXObject || "ActiveXObject" in window){
-				timeout = 200;
-			}
-			setTimeout(function(){
-				if(force!=undefined){
-					//重绘
-					var w=document.body.clientWidth;
-					var h=document.body.clientHeight;
-					//if(w>1200){
-						//w= 1200
-					//}
-					$("#entrelation-infovis").css({width:w,height:h});
-					d3.select("svg").attr("width", w).attr("height", h);
-					$(".entrelation-controlls").css({left:w-$(".entrelation-controlls").width() - 70});
-					force.linkDistance(h).charge(-700).size([w,h]).resume();
-				}
-				
-			},timeout);
-		}else{
-			cancelFullScreen();
-		}
-	}
-	//计算点之间的距离
-	var chargeArray = [[0,10],[10,20],[20,30],[30,40],[40,50],[50,60],[60,70],[70,80],[80,90],[90,100],[100,110]];
-	var chargeVal = -1600;
-	var nodeCount = data.nodes.length;
-	for(var i in chargeArray){
-		if(nodeCount >= chargeArray[i][0] && nodeCount < chargeArray[i][1]){
-			chargeVal += i*100;
-			break;
-		}else if(i == chargeArray.length){
-			chargeVal += i*100;
-		}
-	}
-	var tick=function (e) {
-		lines.attr("d", function(d) {
-			var sy   = d.source.y,
-				x    = d.target.x,
-	            y    = d.target.y;
-			if(sy > y){
-				sy -= 12;
-			}else{
-				sy += 5;
-			}
-			var line = new geo.LineSegment(d.source.x, sy, x, y);
-			for (var e in d.target.edge) {
-	            var ix = line.intersect(d.target.edge[e].offset(x, y));
-	            if (ix.in1 && ix.in2) {
-	                x = ix.x;
-	                y = ix.y;
-	                break;
-	            }
-	        }
-	        var dx = x - d.source.x,
-		        dy = y - sy,
-		        dr = Math.sqrt(dx * dx + dy * dy),
-		        theta = Math.atan2(dy, dx) + Math.PI / 7.85,
-		        d90 = Math.PI / 2,
-		        dtxs = x - Math.cos(theta),
-		        dtys = y - Math.sin(theta);
-		    return "M" + d.source.x + "," + sy + "A" + dr + "," + dr + " 0 0 1," + x + "," + y + "A" + dr + "," + dr + " 0 0 0," + d.source.x + "," + sy + "M" + dtxs + "," + dtys +  "l" + (3.5 * Math.cos(d90 - theta) - 10 * Math.cos(theta)) + "," + (-3.5 * Math.sin(d90 - theta) - 10 * Math.sin(theta)) + "L" + (dtxs - 3.5 * Math.cos(d90 - theta) - 10 * Math.cos(theta)) + "," + (dtys + 3.5 * Math.sin(d90 - theta) - 10 * Math.sin(theta)) + "z";
-		});	
-		nodes.attr("transform", function(d) {
-			return "translate(" + d.x + "," + d.y + ")scale(" + zoomlevel+ ")";
-		});
+function b_afterLogin(flag){
+	if($(".ent-tab>li:eq(1)").hasClass("ent-active") && relation == null){
+		initRelation();
 	}
-	var force = d3.layout.force()
-	    .nodes(data.nodes)
-	    .links(data.links)
-	    .size([w, h])
-	    .linkDistance(function(p){
-			return Math.floor(Math.random()*60)+90;
-		})
-		.chargeDistance(600)
-	    .charge(chargeVal)
-		.linkStrength(1)
-		.on('tick',tick);
-	var dragstatus = false,
-	mouseoverstatus = false;
-	var drag = force.drag()
-		.on("dragstart",function(d,i){
-			d.fixed = true;    //拖拽开始后设定被拖拽对象为固定
-			d3.event.sourceEvent.stopPropagation(); // Prevent panning
-		})
-		.on("drag",function(d,i){
-			dragstatus = true;
-			mouseoverstatus = true;
-		})
-		.on("dragend",function(d,i){
-			mouseoverstatus = false;
-			setTimeout(function(){
-				dragstatus = false;
-			},500)
-		});
-	function zoomed() {
-		svg.attr("transform", 
-			"translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
-	}
-	//处理缩放
-	var zoom = d3.behavior.zoom().scaleExtent([0.4, 10]).on("zoom", zoomed);
-	var svg = d3.select("#entrelation-infovis").append("svg:svg")
-	    .attr("width", w)
-	    .attr("height", h)
-		.call(zoom)
-		.append("g");
-		
-	var lines = svg.append("svg:g")
-	    .selectAll("path")
-	    .data(force.links())
-	    .enter().append("path")
-		.style("fill", function(p){
-	    	return (p.type=="cp" || p.isLegal)?"#cd93d7":"#cecece";
-	    })
-		.style("stroke", function(p){
-	    	return (p.type=="cp" || p.isLegal)?"#cd93d7":"#cecece";
-	    })
-		.attr("stroke-width",function (e,i){
-			return e.linkVal;
-		});
-		lines.each(function (d,i){
-			var invacconam = new Number(d.invacconam);
-			if(invacconam > 0){
-				var lenInvacconam = (invacconam + "").length;
-				if(lenInvacconam > 4 && (invacconam + "").indexOf(".") > -1 && (lenInvacconam - (invacconam + "").indexOf(".")) > 4){
-					invacconam = (new Number(invacconam)).toFixed(4);
-				}
-				d3.select(this).append("title").text("投资金额:"+invacconam+"万元");
-			}
-		});
-	var nodes = svg.append("svg:g")
-	    .selectAll(".node")
-	    .data(force.nodes())
-	  	.enter()
-		.append("g")
-		.call(force.drag)
-		.attr('class', 'node')
-		.on('mouseover', function(d) {
-	        highlightObject(this,true);
-	    })
-	    .on('mouseout', function(d) {
-			highlightObject(this,false);
-	    })
-		.on("mousedown",function (e,i){
-			d3.event.preventDefault();
-			removeNode(this);
-		});
-	nodes.append("rect")
-		.attr("rx", 5)
-	    .attr("ry", 5)
-		.attr('height', 20)
-		.attr("fill", function(p){
-			if(p.type == "e" && (p.opstate == "11" || p.opstate == "07")){
-				return "#cecece";
-			}
-	    	return p.type=="p"?"#2196f3":p.type=="ce"?"#ff9800":"#cddc39";
-	    })
-		.attr("stroke", function(p){
-			if(p.type == "e" && (p.opstate == "11" || p.opstate == "07")){
-				return "#cecece";
-			}
-	    	return p.type=="p"?"#2196f3":p.type=="ce"?"#ff9800":"#cddc39";
-	    }).style("opacity",function(p){
-			if(p.type=="e" && (p.opstate != "11" || p.opstate != "07")){
-				return "0.5";
-			}
-			return "1";
-		});
-	nodes.each(function (d,i){
-		if(d.type == "ce" || d.type == "e"){
-			var title = "";
-			if(d.text != d.shortText){
-				title = d.text;
-			}
-			var regcap = d.regcap;
-			if(regcap > 0){
-				var lenRegcap = (regcap + "").length;
-				if(lenRegcap > 4 && (regcap + "").indexOf(".") > -1 && (lenRegcap - (regcap + "").indexOf(".")) > 4){
-					regcap = (new Number(regcap)).toFixed(4);
-				}
-				if(title != ""){
-					title += "\n";
-				}
-				title += "注册资本:"+regcap+"万元";
-			}
-			if(title != ""){
-				d3.select(this).append("title").text(title);
-			}
-		}
-	});
-	nodes.append('text')
-    .text(function(d){
-		return d.shortText;
-	})
-	.style("cursor",function (d,i){
-		if(d.type == "e"){
-			return "pointer";
-		}else{
-			return "auto";
-		}
-	})
-	.on("click",function (d,i){
-		if(!dragstatus && d.type == "e"){
-			window.open("/enterpriseInfoByRegNO/"+d.name+".html");
-		}
-	});
-	setTimeout(function() {
-	    nodes.each(function(d) {
-	        var node   = d3.select(this),
-	            text   = node.selectAll('text'),
-	            bounds = {},
-	            first  = true;
-				
-			text.each(function() {
-	            var box = this.getBBox();
-	            if (first || box.x < bounds.x1) {
-	                bounds.x1 = box.x;
-	            }
-	            if (first || box.y < bounds.y1) {
-	                bounds.y1 = box.y;
-	            }
-	            if (first || box.x + box.width > bounds.x2) {
-	                bounds.x2 = box.x + box.width;
-	            }
-	            if (first || box.y + box.height > bounds.y2) {
-	                bounds.y2 = box.y + box.height;
-	            }
-	            first = false;
-	        }).attr('text-anchor', 'middle');
-				
-	        var padding  = {"left":3,"right":3,"top":2,"bottom":2},
-	            margin   = {"left":3,"right":3,"top":2,"bottom":2},
-	            oldWidth = bounds.x2 - bounds.x1;
-	
-	        bounds.x1 -= oldWidth / 2;
-	        bounds.x2 -= oldWidth / 2;
-	
-	        bounds.x1 -= padding.left;
-	        bounds.y1 -= padding.top;
-	        bounds.x2 += padding.left + padding.right;
-	        bounds.y2 += padding.top  + padding.bottom;
-			
-			var width = bounds.x2 - bounds.x1;
-			var height = bounds.y2 - bounds.y1;
-	        node.select('rect')
-	            .attr('x', bounds.x1)
-	            .attr('y', bounds.y1)
-				//.attr('height', height)
-	            .attr('width', width);
-	            
-	        d.edge = {
-	            left   : new geo.LineSegment(bounds.x1, bounds.y1, bounds.x1, bounds.y2),
-	            right  : new geo.LineSegment(bounds.x2, bounds.y1, bounds.x2, bounds.y2),
-	            top    : new geo.LineSegment(bounds.x1, bounds.y1, bounds.x2, bounds.y1),
-	            bottom : new geo.LineSegment(bounds.x1, bounds.y2, bounds.x2, bounds.y2)
-	        };
-	    });
-	    force.start();
-	},10);
-	function highlightObject(obj,flag){
-		if(mouseoverstatus){
-			return;
-		}
-		if(!flag){
-			d3.selectAll(".node").each(function (){
-				d3.select(this).style("opacity","1");
-			});
-			d3.selectAll("path").each(function (){
-				d3.select(this).style("opacity","1");
-			});
-			return;
-		}
-		var name = obj.__data__.name;
-		d3.selectAll(".node").each(function (){
-			if(name != this.__data__.name){
-				d3.select(this).style("opacity","0.2");
-			}
-		});
-		d3.selectAll("path").each(function (){
-			var targetName = this.__data__.target.name;
-			var sourceName = this.__data__.source.name;
-			if(name != targetName && name != sourceName){
-				d3.select(this).style("opacity","0.2");
+}
+//加载关系网
+function initRelation(){
+	if(isLogined){
+		$.post("/member/getRelation",{regNo:regNo,entName:entName},function(r){
+			if(r.flag == false){
+				$("#entrelation-nologin").addClass("hide");
+				$("#entrelation-limit,#entrelation-noauthe").removeClass("hide");
+				$("#entrelation-infovis").hide();
+			}else if(r.flag == true && (typeof(r) == "undefined" || r == null || r == "")){
+				$("#entrelation-infovis").hide();
+				$("#entrelation-findnull").removeClass("hide");
 			}else{
-				d3.selectAll(".node").each(function (){
-					if(targetName == this.__data__.name || sourceName == this.__data__.name){
-						d3.select(this).style("opacity","1");
-					}
+				loadJS("/js/d3.v3.min.js",function(){
+					loadJS("/js/geometry.js",function(){
+						loadJS("/js/relation.js",function(){
+							$("#entrelation-limit").addClass("hide");
+							$(".entrelation").height(500);
+							relation = new Relation(legcerNo,regNo,r.relation);
+							relation.init();
+						});
+					});
 				});
 			}
 		});
+	}else{
+		$("#entrelation-limit,#entrelation-nologin").removeClass("hide");
 	}
-	function removeNode(obj){
-		if(d3.event.which != 3){
-			return;
-		}
-		highlightObject(obj,false);
-		d3.select(obj).remove();
-		var name = obj.__data__.name;
-		var removeAloneNode = function(removeNodeName){
-			var isRemoveAloneNode = true;
-			d3.selectAll("path").each(function (i){
-				if(removeNodeName == this.__data__.source.name || removeNodeName == this.__data__.target.name){
-					isRemoveAloneNode = false;
-					return true;
-				}
-			});
-			if(isRemoveAloneNode){
-				d3.selectAll("rect").each(function (){
-					if(this.__data__.name == removeNodeName){
-						d3.select(this).remove();
-						return true;
-					}
-				});
-				d3.selectAll("text").each(function (){
-					if(this.__data__.name == removeNodeName){
-						d3.select(this).remove();
-						return true;
-					}
-				});
-			}
-		}
-		d3.selectAll("path").each(function (){
-			if(name == this.__data__.target.name){
-				var fromNodeName = this.__data__.source.name;
-				d3.select(this).remove();
-				removeAloneNode(fromNodeName);
-			}else if(name == this.__data__.source.name){
-				var toNodeName = this.__data__.target.name;
-				d3.select(this).remove();
-				removeAloneNode(toNodeName);
-			}
-		});
-		d3.selectAll("rect").each(function (){
-			if(name == this.__data__.name){
-				d3.select(this).remove();
-			}
-		});
-		d3.selectAll("text").each(function (){
-			if(name == this.__data__.name){
-				d3.select(this).remove();
+}
+//服务列表
+function ServiceList(){
+	loadJS("/js/paging.js",function(){
+		paging = new Paging("serviceList","/front/findServiceByEntId",{entId:entId},6,function(r){
+			var html = '';
+			for(var i=0;i<r.length;i++){
+				
 			}
+			$("#serviceList").html(html);
 		});
-	}
-	var diagonal = d3.svg.diagonal().projection(function(d) { return [d.y, d.x]; });
-	/////////////重绘画布///////////////////
-	var redrawflag=false;
-	//重绘
-	function redraw(){
-		if(force!=undefined){
-			var w = parseInt($("#entrelation").css("width").replace("px","")) - 80;
-			var h = parseInt($("#entrelation").css("height").replace("px",""))-10;
-			d3.select("svg").attr("width", w).attr("height", h);
-			force.size([w,h]).resume();
-			$("#entrelation-infovis").css({width:w,height:h});
-			//
-			redrawflag=false;
-		}
-	}
-	$(window).resize(function(){
-		if(!redrawflag){
-		    //1秒后重绘
-			redrawflag=true;
-			setTimeout(redraw,1000);
-		}
-		firstresize=false;
 	});
-	///////////////////////关系网实例////////////////////////////
-	var htmls="<div style='position:absolute;' class='legend'>";
-	htmls= htmls+ "<div class='legend-text-bg' style='margin-top: 10px;'><div style='background-color: #ff9800;'></div><span style='margin-left: 20px;'>本企业</span></div>";
-	htmls= htmls+ "<div class='legend-text-bg' style='margin-top: 10px;'><div style='background-color: #cddc39;opacity:0.5;'></div><span style='margin-left: 12px;'>其他企业</span></div>";
-	htmls= htmls+ "<div class='legend-text-bg' style='margin-top: 10px;'><div style='background-color: #2196f3;'></div><span style='margin-left: 25px;'>个人</span></div>";
-	htmls= htmls+ "<div class='legend-text-bg' style='margin-top: 10px;margin-bottom: 10px;'><div style='background-color: #cecece;'></div><span style='margin-left: 5px;'>注吊销企业</span></div>";
-	htmls= htmls+ "<div><span style='font-size: 20px;font-weight: bold;color: #cecece;'>→</span><span style=''>投资关系(股东→企业)</span></div>";
-	htmls= htmls+ "<div><span style='font-size: 20px;font-weight: bold;color: #cd93d7;'>→</span><span style=''>法定代表人</span></div>";
-	htmls= htmls+ "<div style='margin:10px 0px;' class='hidden-sm hidden-xs'><span class='text-muted'>提示:点击鼠标右键可以删除不想看的节点。</span></div>";
-	htmls= htmls+"</div>"
-	$("#entrelation-legend").html(htmls);
 }
 
 
@@ -756,11 +118,6 @@ function Relation(data){
 
 
 
-
-
-
-
-
 /*
 function getCityN(code){
 	if(code){
@@ -1064,34 +421,7 @@ function clickservicename(id,isshow){
 		window.location.href="/market/showservice/"+id+".html"
 	}
 }
-function initServiceList(){	
-	$("#service_list").datatable({
-	   perPage: perPage
-	  ,showPagination:false
-	  ,checkbox:"" 
-	  ,checkboxHeader:false
-	  ,showHeader:false
-	  ,idField:"_id"
-	  ,classname:"table-hover"
-	  ,url: '/searchEntSer/' + $entid
-	  ,rowCallback: analyList,
-	   ajaxSuccess:function(res,o){	
-		if(!res || res === undefined || !res.data || res.data.length == 0) {
-			o.continueBody=false;
-			$("#loadMore").hide();
-			$("#service").hide();
-		}else{
-			$("#service").show();
-		}
-		//判断加载更多是否显示
-		if(res.totalRows>5){
-			$("#loadMore").show();
-		}else{
-			$("#loadMore").hide();
-		}
-	   }
-	});
-}
+
 
 
 //显示二维码图片
@@ -1128,7 +458,7 @@ function analyList(rowHtml, rowData) {
 }
 //加载更多
 function loadMore(){
-	$.post('/searchEntSer/'+$entid ,{currentPage:currentPage+1,perPage:perPage},function(data){
+	$.post('/searchEntSer/'+entId ,{currentPage:currentPage+1,perPage:perPage},function(data){
 		if(data){
 			var res=data["data"]
 			if(!res || res === undefined || res.length == 0) {
@@ -1149,13 +479,4 @@ function loadMore(){
 			$("#service_list table tbody").append(str);
 		}
 	})
-}
-
-//设置级联位置信息
-function setcxSelect(){
-	$('#city_china').cxSelect({
-		selects: ['province', 'city', 'area'],
-		required:0
-	});
-	$.cxSelect.setVal(province,city,area);	
 }

+ 18 - 18
core/src/web/staticres/js/qfw.js

@@ -413,24 +413,24 @@ function addCssByLink(url){
         doc.documentElement.appendChild(link);
 }
 //动态加载js
-function loadJS(url, success) {
-  var scripts=document.getElementsByTagName('script')
-  for(var i=0;i<scripts.length;i++){
-	if(scripts[i].src&&scripts[i].src.indexOf(url)>-1){
-		if(success) success();
-		return;
-	}
-  }
-  var domScript = document.createElement('script');
-  domScript.src = url;
-  success = success || function(){};
-  domScript.onload = domScript.onreadystatechange = function() {
-    if (!this.readyState || 'loaded' === this.readyState || 'complete' === this.readyState) {
-      success();
-      this.onload = this.onreadystatechange = null;
-      //this.parentNode.removeChild(this);
-    }
-  }
+function loadJS(url, success){
+  	var scripts=document.getElementsByTagName('script')
+	for(var i=0;i<scripts.length;i++){
+		if(scripts[i].src&&scripts[i].src.indexOf(url)>-1){
+			if(success) success();
+			return;
+		}
+  	}
+  	var domScript = document.createElement('script');
+  	domScript.src = url;
+  	success = success || function(){};
+  	domScript.onload = domScript.onreadystatechange = function() {
+	    if (!this.readyState || 'loaded' === this.readyState || 'complete' === this.readyState) {
+	      	success();
+	      	this.onload = this.onreadystatechange = null;
+	      	//this.parentNode.removeChild(this);
+	    }
+  	}
   document.getElementsByTagName('head')[0].appendChild(domScript);
 }
 //判断对象是否为空对象{}

+ 722 - 0
core/src/web/staticres/js/relation.js

@@ -0,0 +1,722 @@
+function Relation(legcerNo,regNo,data){
+	this.legcerNo = legcerNo;
+	this.regNo = regNo;
+	this.data = data;
+	this.zoomlevel = 1;
+	this.w = 0;
+	this.h = 0;
+	this.index = -1;
+	this.redrawflag = false;
+	this.infovisdiv = null;
+	this.svg = null;
+	this.force = null;
+	this.lines = null;
+	this.nodes = null;
+	this.mouseoverstatus = false;
+	this.chargeVal = -1600;
+}
+Relation.prototype.init = function(){
+	var thisClass = this;
+	$(function(){
+		$("#entrelation-fullscreen").bind("click",function(){
+			thisClass.initFullScreen();
+		});
+		thisClass.w = $("#entrelation").width();
+		thisClass.h = $("#entrelation").height();
+		$("#entrelation-infovis").width(thisClass.w).append(
+			'<div class="entrelation-controlls hidden-sm hidden-xs">'
+				+'<div class="entrelation-item">'
+					+'<div id="entrelation-fullscreen" class="entrelation-box" title_pos="left"><div class="entrelation-fullscreen"></div></div>'
+				+'</div>'
+			+'</div>'
+		);
+		if($(".entrelation-controlls").length>0){
+			$(".entrelation-controlls").css({left:$("#entrelation").width()-$(".entrelation-controlls").width()});
+		}
+	});
+	//处理全屏
+	$(document).on('webkitfullscreenchange mozfullscreenchange msfullscreenchange fullscreenchange', function(){
+	    if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement){
+			//退出
+			thisClass.cancelFullScreen();
+		}
+	});
+   	this.infovisdiv = document.getElementById("entrelation-infovis");
+	document.onkeydown=function(event){
+        var e = event || window.event || arguments.callee.caller.arguments[0];
+        if(e && e.keyCode==122){
+			event.preventDefault?event.preventDefault():window.event.returnValue = false;
+			if(!!window.ActiveXObject || "ActiveXObject" in window){//ie下F11不能用,屏蔽掉
+				if($(".exit").length == 0){
+					return;
+				}
+			}
+			thisClass.initFullScreen();
+        }else if(e && e.keyCode==27){
+			event.preventDefault?event.preventDefault():window.event.returnValue = false;
+			thisClass.cancelFullScreen();
+		}
+    };
+	$(window).resize(function(){
+		if(!thisClass.redrawflag){
+		    //1秒后重绘
+			thisClass.redrawflag=true;
+			setTimeout(thisClass.redraw,1000);
+		}
+		firstresize=false;
+	});
+	if(document.getElementById("entrelation-infovis")){
+		document.getElementById("entrelation-infovis").oncontextmenu=function(){return false;};
+	}
+	$("#entrelation-fullscreen").attr("title","进入全屏视图"+((!!window.ActiveXObject || "ActiveXObject" in window)?"":" (F11)"));
+	///////////////////////关系网实例////////////////////////////
+	var htmls="<div style='position:absolute;top:0px;' class='legend'>";
+	htmls= htmls+ "<div class='legend-text-bg' style='margin-top: 10px;'><div style='background-color: #ff9800;'></div><span style='margin-left: 20px;'>本企业</span></div>";
+	htmls= htmls+ "<div class='legend-text-bg' style='margin-top: 10px;'><div style='background-color: #cddc39;opacity:0.5;'></div><span style='margin-left: 12px;'>其他企业</span></div>";
+	htmls= htmls+ "<div class='legend-text-bg' style='margin-top: 10px;'><div style='background-color: #2196f3;'></div><span style='margin-left: 25px;'>个人</span></div>";
+	htmls= htmls+ "<div class='legend-text-bg' style='margin-top: 10px;margin-bottom: 10px;'><div style='background-color: #cecece;'></div><span style='margin-left: 5px;'>注吊销企业</span></div>";
+	htmls= htmls+ "<div><span style='font-size: 20px;font-weight: bold;color: #cecece;'>→</span><span style=''>投资关系(股东→企业)</span></div>";
+	htmls= htmls+ "<div><span style='font-size: 20px;font-weight: bold;color: #cd93d7;'>→</span><span style=''>法定代表人</span></div>";
+	htmls= htmls+ "<div style='margin:10px 0px;' class='hidden-sm hidden-xs'><span class='text-muted'>提示:点击鼠标右键可以删除不想看的节点。</span></div>";
+	htmls= htmls+"</div>"
+	$("#entrelation").append(htmls);
+	this.dataProcess();
+	this.makeRelation();
+	this.redraw();
+}
+Relation.prototype.dataProcess = function(){
+	var reg = new RegExp(/(有限公司|有限责任公司|股份有限公司|总公司|分公司|公司|事务所|合伙企业)$|\(.*\)|\(.*\)/g);
+	/*var provinces = [];
+	$.ajax({
+		url: "/js/provinceData.min.json",
+		dataType: "json",
+		cache: true,
+		async: false,
+		success: function(json){
+			provinces = json;
+		}
+	});*/
+	for(var i=0;i<this.data.nodes.length;i++){
+		var nodeObj = this.data.nodes[i];
+		nodeObj.text = $.trim(nodeObj.text);
+		nodeObj.shortText = nodeObj.text;
+		if(nodeObj.type == "e" || nodeObj.type == "ce"){
+			var text = nodeObj.shortText;
+			if(text.length > 2){//先替换结尾
+				text = text.replace(reg,"");
+			}
+			if(text.length > 2){//再替换开头
+				//text = this.filterEntName(text);
+			}
+			if(text.length > 2){//小于两个字符不生效
+				nodeObj.shortText = text;
+			}
+			if(nodeObj.name == this.regno){//先找本企业位置
+				this.index = i;
+				nodeObj["regcap"] = (typeof(d1) == "undefined")?0:d1;
+				nodeObj["legcerno"] = this.legcerNo;
+			}
+		}
+	}
+	/*********************************连线处理***********************************/
+	var minLink=-1,maxLink=-1;
+	for(var i=0;i<this.data.links.length;i++){
+		var linkObj = this.data.links[i];
+		if(linkObj.target==this.index && this.data.nodes[linkObj.source].name==this.legcerNo){
+			//this.data.nodes[linkObj.source].type="cp";
+			linkObj.type = "cp"
+			linkObj.isLegal = 1;
+		}
+		//
+		this.data.nodes[linkObj.target]["istarget"] = 1;
+		if(this.data.nodes[linkObj.source].name == this.data.nodes[linkObj.target].invlegcerno || this.data.nodes[linkObj.source].name == this.data.nodes[linkObj.target].legcerno){
+			linkObj.isLegal = 1;
+		}
+		if(typeof(linkObj.invacconam) == "undefined"){
+			continue;
+		}
+		var invacconam = new Number(linkObj.invacconam);
+		if(minLink == -1 && maxLink == -1){
+			minLink = invacconam;
+			maxLink = invacconam;
+		}else if(invacconam > maxLink){
+			maxLink = invacconam; 
+		}else if(invacconam < minLink){
+			minLink = invacconam;
+		}
+	}
+	/////////////
+	var linkSectionArray = this.getLineSectionArray(minLink,maxLink);
+	for(var i=0;i<this.data.links.length;i++){
+		var linksObj = this.data.links[i];
+		linksObj["linkVal"] = 2;
+		if(typeof(linkObj.invacconam) == "undefined"){
+			continue;
+		}
+		var invacconam = new Number(linksObj.invacconam);
+		for(var s in linkSectionArray){
+			var sectionObj = linkSectionArray[s];
+			if(invacconam >= sectionObj.minVal && invacconam < sectionObj.maxVal){
+				linksObj["linkVal"] = sectionObj.linkVal;
+				continue;
+			}
+		}
+	}
+	/*********************************节点处理***********************************/
+	var minNode=-1,maxNode=-1;
+	for(var i=0;i<this.data.nodes.length;i++){
+		var nodeObj = this.data.nodes[i];
+		if(nodeObj.type == "e" || nodeObj.type == "ce"){
+			var regcap = nodeObj.regcap;
+			if(minNode == -1 && maxNode == -1){
+				minNode = regcap;
+				maxNode = regcap;
+			}else if(regcap > maxNode){
+				maxNode = regcap; 
+			}else if(regcap < minNode){
+				minNode = regcap;
+			}
+		}
+	}
+	var nodeSectionArray = this.getNodeSectionArray(minNode,maxNode);
+	for(var i=0;i<this.data.nodes.length;i++){
+		var nodeObj = this.data.nodes[i];
+		nodeObj["nodeVal"] = 7;
+		if(nodeObj.type == "e" || nodeObj.type == "ce"){
+			var invacconam = new Number(nodeObj.invacconam);
+			var regcap = new Number(nodeObj.regcap);
+			for(var s in nodeSectionArray){
+				var sectionObj = nodeSectionArray[s];
+				if(regcap >= sectionObj.minVal && regcap < sectionObj.maxVal){
+					nodeObj["nodeVal"] = sectionObj.nodeVal;
+					continue;
+				}
+			}
+		}
+	}
+	//计算点之间的距离
+	var chargeArray = [[0,10],[10,20],[20,30],[30,40],[40,50],[50,60],[60,70],[70,80],[80,90],[90,100],[100,110]];
+	var nodeCount = this.data.nodes.length;
+	for(var i in chargeArray){
+		if(nodeCount >= chargeArray[i][0] && nodeCount < chargeArray[i][1]){
+			this.chargeVal += i*100;
+			break;
+		}else if(i == chargeArray.length){
+			this.chargeVal += i*100;
+		}
+	}
+}
+Relation.prototype.filterEntName = function(text){
+	this.allProvinces = "河南省、青海省、山西省、黑龙江省、安徽省、广西壮族自治区、西藏自治区";
+	this.commonReplace = function(t){
+		if(t.length > 1 && text.startWith(t)){
+			var textCopy = text.replace(new RegExp("^"+t),"");
+			if(textCopy.length > 2){
+				text = textCopy;
+			}
+			return true;
+		}
+		return false;
+	};
+	this.replaceStart = function(t,f){
+		var flag = false;
+		var minus = null;
+		if(this.commonReplace(t)){//替换省、市、县、区
+			return true;
+		}
+		if(f){//不替换
+			flag = false;
+		}else if(t.endWith("维吾尔自治区")){
+			flag = true;
+			minus = 6;
+		}else if(t.endWith("回族自治区") || t.endWith("壮族自治区") || t.endWith("特别行政区")){
+			flag = true;
+			minus = 5;
+		}else if(t.endWith("自治州") || t.endWith("自治县") || t.endWith("自治区")){
+			flag = true;
+			minus = 3;
+		}else if(t.endWith("地区")){
+			flag = true;
+			minus = 2;
+		}else if(t.endWith("省") || t.endWith("市") || t.endWith("区")){
+			flag = true;
+			minus = 1;
+		}
+		if(flag){
+			return this.commonReplace(t.substring(0,t.length-minus));
+		}
+		return false;
+	};
+	this.replaceCity = function(citys){
+		if(citys){
+			for(var c in citys){//市
+				var c_name = citys[c].n;
+				if(this.replaceStart(c_name)){
+					this.replaceAreas(citys[c].s);
+					return true;
+				}else if(this.replaceAreas(citys[c].s)){
+					return true;
+				}
+			}
+		}
+	};
+	this.replaceAreas = function(areas){
+		if(areas){
+			for(var a in areas){//县、区
+				var a_name = areas[a].n;
+				if(this.replaceStart(a_name,true)){
+					return true;
+				}
+			}
+		}
+	};
+	for(var p in provinces){//省
+		var p_name = provinces[p].n;
+		if(this.allProvinces.indexOf(p_name) == -1){
+			continue;
+		}
+		if(this.replaceStart(p_name)){
+			this.replaceCity(provinces[p].s);
+			break;
+		}else if(this.replaceCity(provinces[p].s)){
+			break;
+		}
+	}
+	return text;
+}
+Relation.prototype.getLineSectionArray = function(minLink,maxLink){
+	var countSection = 6;
+	var section = (maxLink - minLink) / countSection;
+	var sectionArr = [];
+	for(var i=2;i<=countSection;i++){
+		var minVal = minLink;
+		if(sectionArr.length > 0){
+			minVal = sectionArr[sectionArr.length - 1].maxVal;
+		}
+		var maxVal = minLink+section*i;
+		if(i == countSection){
+			maxVal += section;
+		}
+		var sectionObj = {linkVal:i,minVal:minVal,maxVal:maxVal};
+		sectionArr.push(sectionObj);
+	}
+	return sectionArr;
+}
+Relation.prototype.getNodeSectionArray = function(minNode,maxNode){
+	var countSection = 7;
+	var section = (maxNode - minNode) / countSection;
+	var sectionArr = [];
+	for(var i=1;i<=countSection;i++){
+		var minVal = minNode;
+		if(sectionArr.length > 0){
+			minVal = sectionArr[sectionArr.length - 1].maxVal;
+		}
+		var maxVal = minNode+section*i;
+		if(i == countSection){
+			maxVal += section;
+		}
+		var sectionObj = {nodeVal:6+i,minVal:minVal,maxVal:maxVal};
+		sectionArr.push(sectionObj);
+	}
+	return sectionArr;
+}
+Relation.prototype.launchFullScreen = function(element) {
+  	if(element){
+	  	if (element.requestFullscreen) {
+	      element.requestFullscreen();
+	    } else if (element.msRequestFullscreen) {
+	      element.msRequestFullscreen();
+	    } else if (element.mozRequestFullScreen) {
+	      element.mozRequestFullScreen();
+	    } else if (element.webkitRequestFullscreen) {
+			// 对 Chrome 特殊处理,
+	        // 参数 Element.ALLOW_KEYBOARD_INPUT 使全屏状态中可以键盘输入。
+	        if ( window.navigator.userAgent.toUpperCase().indexOf( 'CHROME' ) >= 0 ) {
+	              element.webkitRequestFullScreen( Element.ALLOW_KEYBOARD_INPUT );
+	        }else {
+				// Safari 浏览器中,如果方法内有参数,则 Fullscreen 功能不可用。
+	           element.webkitRequestFullScreen();
+	        }
+	    }
+  	}
+}
+Relation.prototype.cancelFullScreen = function(){
+	this.h = $("#entrelation-infovis").height();  
+	$("#entrelation-fullscreen").attr("title","进入全屏视图"+((!!window.ActiveXObject || "ActiveXObject" in window)?"":" (F11)"));	
+	//force.linkDistance(120).charge(-200).size([w,h]).resume();
+	$("#entrelation-infovis").css({width:this.w,height:this.h});
+	//设置svg标签的宽度与高度
+	d3.select("svg").attr("width", this.w).attr("height", this.h);
+	$(".entrelation-controlls").css({left:$("#entrelation").width()-$(".entrelation-controlls").width()-30});
+    if(document.exitFullscreen) {
+      document.exitFullscreen();
+    } else if (document.msExitFullscreen) {
+      document.msExitFullscreen();
+    } else if (document.mozCancelFullScreen) {
+      document.mozCancelFullScreen();
+    } else if (document.webkitExitFullscreen) {
+      document.webkitExitFullscreen();
+    }
+}
+Relation.prototype.initFullScreen = function(){
+	var thisClass = this;
+	var fullscreenElement =
+       	document.fullscreenElement ||
+       	document.mozFullScreenElement ||
+       	document.webkitFullscreenElement ||
+		document.msFullscreenElement;
+    $(".entrelation-fullscreen").toggleClass("exit");
+	if(!fullscreenElement || fullscreenElement==null){
+		this.redrawflag = true;
+		$("#entrelation-fullscreen").attr("title","退出全屏视图 (F11)");
+		this.launchFullScreen(this.infovisdiv);
+		var timeout = 100;
+		if(!!window.ActiveXObject || "ActiveXObject" in window){
+			timeout = 200;
+		}
+		setTimeout(function(){
+			if(thisClass.force != null){
+				//重绘
+				var w=document.body.clientWidth;
+				var h=document.body.clientHeight;
+				//if(w>1200){
+					//w= 1200
+				//}
+				$("#entrelation-infovis").css({width:w,height:h});
+				d3.select("svg").attr("width", w).attr("height", h);
+				$(".entrelation-controlls").css({left:w-$(".entrelation-controlls").width() - 70});
+				thisClass.force.linkDistance(h).charge(-700).size([w,h]).resume();
+			}
+			
+		},timeout);
+	}else{
+		this.cancelFullScreen();
+	}
+}
+//重绘
+Relation.prototype.redraw = function(){
+	if(this.force != undefined){
+		d3.select("svg").attr("width",this.w).attr("height", this.h);
+		this.force.size([this.w,this.h]).resume();
+		$("#entrelation-infovis").css({width:this.w,height:this.h});
+		//
+		this.redrawflag = false;
+	}
+}
+Relation.prototype.removeNode = function(obj){
+	if(d3.event.which != 3){
+		return;
+	}
+	this.highlightObject(obj,false);
+	d3.select(obj).remove();
+	var name = obj.__data__.name;
+	var removeAloneNode = function(removeNodeName){
+		var isRemoveAloneNode = true;
+		d3.selectAll("path").each(function (i){
+			if(removeNodeName == this.__data__.source.name || removeNodeName == this.__data__.target.name){
+				isRemoveAloneNode = false;
+				return true;
+			}
+		});
+		if(isRemoveAloneNode){
+			d3.selectAll("rect").each(function (){
+				if(this.__data__.name == removeNodeName){
+					d3.select(this).remove();
+					return true;
+				}
+			});
+			d3.selectAll("text").each(function (){
+				if(this.__data__.name == removeNodeName){
+					d3.select(this).remove();
+					return true;
+				}
+			});
+		}
+	}
+	d3.selectAll("path").each(function (){
+		if(name == this.__data__.target.name){
+			var fromNodeName = this.__data__.source.name;
+			d3.select(this).remove();
+			removeAloneNode(fromNodeName);
+		}else if(name == this.__data__.source.name){
+			var toNodeName = this.__data__.target.name;
+			d3.select(this).remove();
+			removeAloneNode(toNodeName);
+		}
+	});
+	d3.selectAll("rect").each(function (){
+		if(name == this.__data__.name){
+			d3.select(this).remove();
+		}
+	});
+	d3.selectAll("text").each(function (){
+		if(name == this.__data__.name){
+			d3.select(this).remove();
+		}
+	});
+}
+Relation.prototype.tick = function(e){
+	var thisClass = this;
+	this.lines.attr("d", function(d){
+		var sy   = d.source.y,
+			x    = d.target.x,
+            y    = d.target.y;
+		if(sy > y){
+			sy -= 12;
+		}else{
+			sy += 5;
+		}
+		var line = new geo.LineSegment(d.source.x, sy, x, y);
+		for (var e in d.target.edge) {
+            var ix = line.intersect(d.target.edge[e].offset(x, y));
+            if (ix.in1 && ix.in2) {
+                x = ix.x;
+                y = ix.y;
+                break;
+            }
+        }
+        var dx = x - d.source.x,
+	        dy = y - sy,
+	        dr = Math.sqrt(dx * dx + dy * dy),
+	        theta = Math.atan2(dy, dx) + Math.PI / 7.85,
+	        d90 = Math.PI / 2,
+	        dtxs = x - Math.cos(theta),
+	        dtys = y - Math.sin(theta);
+	    return "M" + d.source.x + "," + sy + "A" + dr + "," + dr + " 0 0 1," + x + "," + y + "A" + dr + "," + dr + " 0 0 0," + d.source.x + "," + sy + "M" + dtxs + "," + dtys +  "l" + (3.5 * Math.cos(d90 - theta) - 10 * Math.cos(theta)) + "," + (-3.5 * Math.sin(d90 - theta) - 10 * Math.sin(theta)) + "L" + (dtxs - 3.5 * Math.cos(d90 - theta) - 10 * Math.cos(theta)) + "," + (dtys + 3.5 * Math.sin(d90 - theta) - 10 * Math.sin(theta)) + "z";
+	});	
+	this.nodes.attr("transform", function(d) {
+		return "translate(" + d.x + "," + d.y + ")scale(" + thisClass.zoomlevel+ ")";
+	});
+}
+Relation.prototype.zoomed = function() {
+	this.svg.attr("transform", 
+		"translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
+}
+Relation.prototype.highlightObject = function(obj,flag){
+	if(this.mouseoverstatus){
+		return;
+	}
+	if(!flag){
+		d3.selectAll(".node").each(function (){
+			d3.select(this).style("opacity","1");
+		});
+		d3.selectAll("path").each(function (){
+			d3.select(this).style("opacity","1");
+		});
+		return;
+	}
+	var name = obj.__data__.name;
+	d3.selectAll(".node").each(function (){
+		if(name != this.__data__.name){
+			d3.select(this).style("opacity","0.2");
+		}
+	});
+	d3.selectAll("path").each(function (){
+		var targetName = this.__data__.target.name;
+		var sourceName = this.__data__.source.name;
+		if(name != targetName && name != sourceName){
+			d3.select(this).style("opacity","0.2");
+		}else{
+			d3.selectAll(".node").each(function (){
+				if(targetName == this.__data__.name || sourceName == this.__data__.name){
+					d3.select(this).style("opacity","1");
+				}
+			});
+		}
+	});
+}
+Relation.prototype.makeRelation = function(){
+	var thisClass = this;
+	this.force = d3.layout.force()
+	    .nodes(this.data.nodes)
+	    .links(this.data.links)
+	    .size([this.w, this.h])
+	    .linkDistance(function(p){
+			return Math.floor(Math.random()*60)+90;
+		})
+		.chargeDistance(600)
+	    .charge(this.chargeVal)
+		.linkStrength(1)
+		.on('tick',function(){
+			thisClass.tick();
+		});
+	var dragstatus = false;
+	var drag = this.force.drag()
+		.on("dragstart",function(d,i){
+			d.fixed = true;    //拖拽开始后设定被拖拽对象为固定
+			d3.event.sourceEvent.stopPropagation(); // Prevent panning
+		})
+		.on("drag",function(d,i){
+			dragstatus = true;
+			thisClass.mouseoverstatus = true;
+		})
+		.on("dragend",function(d,i){
+			thisClass.mouseoverstatus = false;
+			setTimeout(function(){
+				dragstatus = false;
+			},500)
+		});
+	
+	//处理缩放
+	var zoom = d3.behavior.zoom().scaleExtent([0.4, 10]).on("zoom", function(){
+		thisClass.zoomed();
+	});
+	this.svg = d3.select("#entrelation-infovis").append("svg:svg")
+	    .attr("width", this.w)
+	    .attr("height", this.h)
+		.call(zoom)
+		.append("g");
+	this.lines = this.svg.append("svg:g")
+	    .selectAll("path")
+	    .data(this.force.links())
+	    .enter().append("path")
+		.style("fill", function(p){
+	    	return (p.type=="cp" || p.isLegal)?"#cd93d7":"#cecece";
+	    })
+		.style("stroke", function(p){
+	    	return (p.type=="cp" || p.isLegal)?"#cd93d7":"#cecece";
+	    })
+		.attr("stroke-width",function (e,i){
+			return e.linkVal;
+		});
+	this.lines.each(function (d,i){
+		var invacconam = new Number(d.invacconam);
+		if(invacconam > 0){
+			var lenInvacconam = (invacconam + "").length;
+			if(lenInvacconam > 4 && (invacconam + "").indexOf(".") > -1 && (lenInvacconam - (invacconam + "").indexOf(".")) > 4){
+				invacconam = (new Number(invacconam)).toFixed(4);
+			}
+			d3.select(this).append("title").text("投资金额:"+invacconam+"万元");
+		}
+	});
+	this.nodes = this.svg.append("svg:g")
+	    .selectAll(".node")
+	    .data(this.force.nodes())
+	  	.enter()
+		.append("g")
+		.call(this.force.drag)
+		.attr('class', 'node')
+		.on('mouseover', function(d) {
+	        thisClass.highlightObject(this,true);
+	    })
+	    .on('mouseout', function(d) {
+			thisClass.highlightObject(this,false);
+	    })
+		.on("mousedown",function (e,i){
+			d3.event.preventDefault();
+			thisClass.removeNode(this);
+		});
+	this.nodes.append("rect")
+		.attr("rx", 5)
+	    .attr("ry", 5)
+		.attr('height', 20)
+		.attr("fill", function(p){
+			if(p.type == "e" && (p.opstate == "11" || p.opstate == "07")){
+				return "#cecece";
+			}
+	    	return p.type=="p"?"#2196f3":p.type=="ce"?"#ff9800":"#cddc39";
+	    })
+		.attr("stroke", function(p){
+			if(p.type == "e" && (p.opstate == "11" || p.opstate == "07")){
+				return "#cecece";
+			}
+	    	return p.type=="p"?"#2196f3":p.type=="ce"?"#ff9800":"#cddc39";
+	    }).style("opacity",function(p){
+			if(p.type=="e" && (p.opstate != "11" || p.opstate != "07")){
+				return "0.5";
+			}
+			return "1";
+		});
+	this.nodes.each(function (d,i){
+		if(d.type == "ce" || d.type == "e"){
+			var title = "";
+			if(d.text != d.shortText){
+				title = d.text;
+			}
+			var regcap = d.regcap;
+			if(regcap > 0){
+				var lenRegcap = (regcap + "").length;
+				if(lenRegcap > 4 && (regcap + "").indexOf(".") > -1 && (lenRegcap - (regcap + "").indexOf(".")) > 4){
+					regcap = (new Number(regcap)).toFixed(4);
+				}
+				if(title != ""){
+					title += "\n";
+				}
+				title += "注册资本:"+regcap+"万元";
+			}
+			if(title != ""){
+				d3.select(this).append("title").text(title);
+			}
+		}
+	});
+	this.nodes.append('text')
+    .text(function(d){
+		return d.shortText;
+	})
+	.style("cursor",function (d,i){
+		if(d.type == "e"){
+			return "pointer";
+		}else{
+			return "auto";
+		}
+	})
+	.on("click",function (d,i){
+		if(!dragstatus && d.type == "e"){
+			window.open("/enterpriseInfoByRegNO/"+d.name+".html");
+		}
+	});
+	setTimeout(function() {
+	    thisClass.nodes.each(function(d) {
+	        var node   = d3.select(this),
+	            text   = node.selectAll('text'),
+	            bounds = {},
+	            first  = true;
+				
+			text.each(function() {
+	            var box = this.getBBox();
+	            if (first || box.x < bounds.x1) {
+	                bounds.x1 = box.x;
+	            }
+	            if (first || box.y < bounds.y1) {
+	                bounds.y1 = box.y;
+	            }
+	            if (first || box.x + box.width > bounds.x2) {
+	                bounds.x2 = box.x + box.width;
+	            }
+	            if (first || box.y + box.height > bounds.y2) {
+	                bounds.y2 = box.y + box.height;
+	            }
+	            first = false;
+	        }).attr('text-anchor', 'middle');
+				
+	        var padding  = {"left":3,"right":3,"top":2,"bottom":2},
+	            margin   = {"left":3,"right":3,"top":2,"bottom":2},
+	            oldWidth = bounds.x2 - bounds.x1;
+	
+	        bounds.x1 -= oldWidth / 2;
+	        bounds.x2 -= oldWidth / 2;
+	
+	        bounds.x1 -= padding.left;
+	        bounds.y1 -= padding.top;
+	        bounds.x2 += padding.left + padding.right;
+	        bounds.y2 += padding.top  + padding.bottom;
+			
+			var width = bounds.x2 - bounds.x1;
+			var height = bounds.y2 - bounds.y1;
+	        node.select('rect')
+	            .attr('x', bounds.x1)
+	            .attr('y', bounds.y1)
+				//.attr('height', height)
+	            .attr('width', width);
+	            
+	        d.edge = {
+	            left   : new geo.LineSegment(bounds.x1, bounds.y1, bounds.x1, bounds.y2),
+	            right  : new geo.LineSegment(bounds.x2, bounds.y1, bounds.x2, bounds.y2),
+	            top    : new geo.LineSegment(bounds.x1, bounds.y1, bounds.x2, bounds.y1),
+	            bottom : new geo.LineSegment(bounds.x1, bounds.y2, bounds.x2, bounds.y2)
+	        };
+	    });
+	   thisClass.force.start();
+	},10);
+	//var diagonal = d3.svg.diagonal().projection(function(d) { return [d.y, d.x]; });
+}

+ 10 - 12
core/src/web/templates/_err.html

@@ -3,20 +3,18 @@
 	<title>企明星----网页错误</title>
 	{{include "/common/inc.html"}}
 	<body>
-	<div class="container-fluid">
-	<div class="row page-header" style="height:100px;margin:20px 0;">
-	 <a href="/"><img  src="/images/logo.png" class="header_logo"/></a>
-	</div>
-	<div class="row" style="margin:50px 0;">
-		<div class="col-lg-6 col-md-6 col-sm-6 " style="text-align:right">
-		 <img src="/images/404.png" width="200" height="275"/>
-		</div>
-		<div class="col-lg-6 col-md-6 col-sm-6 " style="padding-top: 50px;padding-bottom: 50px;">
-			<div style="padding-left: 55px;"><h4><strong class="text-muted">网络错误,页面找不到</strong></h4></div>
-			<div id="alink" class="text-center" style="width:300px;margin-top:30px;"><h4 style="display:inline-block;"><a href="{{.T.refer}}"><img s1="reload.png" s2="u170.png" src="/images/reload.png" style="width:18px;margin-right:5px;">刷新页面</a> | </h4><h4 style="display:inline-block"><a href="/"><img s1="home1.png" s2="home2.png" src="/images/home1.png" style="width:18px;margin-right:5px;">返回首页</a></h4></div>
+	{{include "/common/errorhead.html"}}
+	<div class="container-fluid b-content">
+		<div class="row" style="margin:50px 0;">
+			<div class="col-lg-6 col-md-6 col-sm-6" style="text-align:right">
+			 <img src="/images/404.png" width="200" height="275"/>
+			</div>
+			<div class="col-lg-6 col-md-6 col-sm-6" style="padding-top: 100px;padding-bottom: 50px;">
+				<div style="padding-left: 55px;"><h4><strong class="text-muted">网络错误,页面找不到</strong></h4></div>
+				<div id="alink" class="text-center" style="width:300px;margin-top:30px;"><h4 style="display:inline-block;"><a href="{{.T.refer}}"><img s1="reload.png" s2="u170.png" src="/images/reload.png" style="width:18px;margin-right:5px;">刷新页面</a> | </h4><h4 style="display:inline-block"><a href="/"><img s1="home1.png" s2="home2.png" src="/images/home1.png" style="width:18px;margin-right:5px;">返回首页</a></h4></div>
+			</div>
 		</div>
 	</div>
-	</div>
 	<script>
 	$(function(){
 		$("#alink a").hover(function(){

+ 9 - 0
core/src/web/templates/common/errorhead.html

@@ -0,0 +1,9 @@
+<div class="b-head">
+	{{include "/common/top.html"}}
+	<div class="b-nav">
+		<ul>
+			<li class="b-nav-logo"><a href="/"><img src="/images/logo.png" class="logo"></a></li>
+			<li class="pull-right b-loginStatus" id="b-loginStatus"></li>
+		</ul>
+	</div>
+</div>

+ 0 - 4
core/src/web/templates/common/login.html

@@ -57,7 +57,6 @@
 </style>
 <script src="/js/validform-min.js"></script>
 <script type="text/javascript">
-
 //打开登录窗口
 function loginModalShow(lbt){
 	$("#head-navbar").toggleClass("hidden-xs");
@@ -69,9 +68,6 @@ function loginModalShow(lbt){
 		}
 	}
 	if(lbt>7)loginBackType = lbt;
-
-
-
 	$("#wxPic").attr("src","");
 	$.post("/front/wxlogin/getNum",function(data){
 		if(data&&data.num){		

+ 2 - 2
core/src/web/templates/common/swordfishhead.html

@@ -18,8 +18,8 @@ function open_window(link){
 	}
 	window.open("/visit/redirect?url="+escape(link));
 }
-function b_loadTopCallBack(result){
-	if(isLogined){
+function b_afterLogin(flag,result){
+	if(flag){
 		//立即体验
 		$("#experience").click(function(){
 			window.location.href = "/member/swordfish/rssset";

+ 1 - 1
core/src/web/templates/common/top.html

@@ -103,7 +103,7 @@ function b_loadTop(){
 				$("body").append('{{include "/common/login.html"}}');
 			}
 			try{
-				b_loadTopCallBack(result);
+				b_afterLogin(isLogined,result);
 			}catch(e){}
 		},
 		error: function(e){

+ 133 - 80
core/src/web/templates/yellowpage/enterpriseinfo.html

@@ -6,9 +6,7 @@
 <meta name="Keywords" content="{{.T.res.EntName}},{{.T.res.EntName}}地址,{{.T.res.EntName}}怎么样"/>
 <meta name="Description" content="{{.T.res.OpScope}}"/>
 <link href="/css/entcommunity.css" rel="stylesheet">
-<script src="/js/geocoder.js"></script>
-<script type="text/javascript" src="http://api.map.baidu.com/getscript?v=2&ak=AFd8b176f363f23e6a23d516f4cfb742&services=&t=20150522093217"></script>  
-<script src="/js/jquery.cxselect.js"></script>
+<script src="/js/entportrait.js"></script>
 </head>
 <body class="entinfo-page">
 {{include "/common/enthead.html"}}
@@ -53,7 +51,23 @@
 			<div class="b-com-last">
 				{{if .T.res.s_persion}}<span class="glyphicon ren2"></span>{{.T.res.s_persion}}<span class="margin-r-15"></span>{{end}}
 				{{if .T.res.s_mobile}}<span class="glyphicon shouji"></span>{{.T.res.s_mobile}}<span class="margin-r-15"></span>{{end}}
-				{{if .T.res.s_qq}}<span class="glyphicon qq1"></span>{{.T.res.s_qq}}{{end}}
+				{{if .T.res.s_qq}}
+					<span class="glyphicon qq1"></span>
+					<script type="text/javascript">
+					    var online = new Array();
+					</script>
+					<script type= "text/javascript" src="http://webpresence.qq.com/getonline?Type=1&{{.T.res.s_qq}}:"></script>
+					<script type="text/javascript">
+						var imgSrc = "";
+				        if(online[0] == 1) {
+							imgSrc = "/images/entcommunity/qq_online.gif";
+				        }else{
+							imgSrc = "/images/qq_offline.gif";
+						}
+						imgSrc = "/images/entcommunity/qq.png";
+						document.write('<a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin={{.T.res.s_qq}}&site=qq&menu=yes"><img src="'+imgSrc+'" alt="点击这里给我发消息" title="点击这里给我发消息" border="0" width="82" height="23.5"/></a>');
+					</script>
+				{{end}}
 				<br>
 				{{if .T.res.s_email}}
 					<span class="glyphicon youjian2"></span>{{.T.res.s_email}}<span class="margin-r-15"></span>
@@ -63,14 +77,14 @@
 				{{if .T.res.s_enturl}}<span class="glyphicon wangzhi1"></span>{{.T.res.s_enturl}}{{end}}
 				<br>
 				{{if or .T.res.i_province .T.res.i_city .T.res.i_area .T.res.s_address}}
-					<span class="glyphicon dizhi"></span>
+					<span class="glyphicon dizhi margin-0"></span>
 					<span id="city_china">
-						<select class="province cxselect select" id="provincesel" name="province" data-first-title="全国"></select>								
-						<select class="city cxselect select" id="citysel" name="city" data-first-title="选择市"></select>
-						<select class="area cxselect select" id="areasel" name="area" data-first-title="选择县"></select>
-						<input id="location" type="hidden">
-						<input id="cityname" type="hidden">
+						<select class="province cxselect select hide" id="provincesel" name="province" data-first-title="全国"></select>								
+						<select class="city cxselect select hide" id="citysel" name="city" data-first-title="选择市"></select>
+						<select class="area cxselect select hide" id="areasel" name="area" data-first-title="选择县"></select>
 					</span>
+					<input id="location" type="hidden">
+					<input id="cityname" type="hidden">
 					{{if .T.res.s_address}}
 					<a href="javascript:void(0)" onclick="showMap()">查看详细地图</a>
 					{{end}}
@@ -83,8 +97,8 @@
 		</div>
 	</div>
 	<!--切换-->
-	<ul class="entinfo-tab">
-		<li class="entinfo-active">企业画像</li>
+	<ul class="ent-tab">
+		<li class="ent-active">企业画像</li>
 		<li>关系网</li>
 		<li>公司简介</li>
 		<li>变更信息</li>
@@ -92,10 +106,10 @@
 		<li>产品服务信息</li>
 		<li class="border-r-0">招聘</li>
 	</ul>
-	<div class="entinfo-tab-content hide">
-		<div>
+	<div class="ent-tab-content">
+		<div class='hide'>
 			{{if .T.res.gs}}
-			<div class="entinfo-basicinfo">
+			<div class="entinfo-basicinfo ent-layout-up">
 				<div class="b-com-title">
 					<span class="glyphicon jianzhu"></span>基本信息
 					<font>(来源:<a href="http://gsxt.saic.gov.cn/" rel="nofollow" style="text-decoration: underline;color: #0099FF;">全国企业信用信息公示系统</a>)</font>
@@ -119,6 +133,7 @@
 									{{end}}
 									{{if .T.res.EntName}}{{.T.res.EntName}}{{end}}
 								</div>
+								<br><img src="/images/entcommunity/triangle.png">
 							</span>
 							<div><span>注册号</span><span>{{if .T.res.RegNo}}{{.T.res.RegNo}}{{end}}</span></div>
 							<div><span>行业</span><span>{{if .T.res.IndustryPhyName}}{{.T.res.IndustryPhyName}}{{end}}</span></div>
@@ -214,45 +229,110 @@
 					</div>
 				</div>
 			</div>
-			<div class="entinfo-shareholderinfo">
-				<div>
+			{{end}}
+			{{if .T.res.investor}}
+			<div class="entinfo-shareholderinfo ent-layout-down">
+				<div class="b-com-title">
 					<span><span class="bootstrap-glyphicon glyphicon-menu-right"></span></span>股东信息
 				</div>
-				{{if .T.res.investor}}
-				<ul>
-					{{range $k,$v := .T.res.investor}}
-					{{if $v.InvType}}
-					<li>
-						{{if eq $v.InvType "20" "21" "22"}}
-						<img src="/images/entcommunity/ziranren.png">
-						{{else}}
-						<img src="/images/entcommunity/faren.png">
+				<div class="b-com-content">
+					<ul>
+						{{range $k,$v := .T.res.investor}}
+						{{if $v.InvType}}
+						<li>
+							{{if eq $v.InvType "20" "21" "22"}}
+							<img src="/images/entcommunity/ziranren.png">
+							{{else}}
+							<img src="/images/entcommunity/faren.png">
+							{{end}}
+							<span><b>{{$v.InvTypeName}}</b></span>
+							<span>{{$v.Inv}}</span>
+						</li>
 						{{end}}
-						<span><b>{{$v.InvTypeName}}</b></span>
-						<span>{{$v.Inv}}</span>
-					</li>
-					{{end}}
-					{{end}}
-					<div class="clearfix"></div>
-				</ul>
-				{{end}}
+						{{end}}
+						<div class="clearfix"></div>
+					</ul>
+				</div>
+			</div>
+			{{end}}
+			{{if and (not .T.res.gs) (not .T.res.investor)}}
+			<div class="ent-findnull">
+				<img src="/images/findnull.png" class="b-findnull">
+				<h4>抱歉,未找到相关数据!</h4>
 			</div>
 			{{end}}
 		</div>
-		<div class="entrelation" id="entrelation">
-			<div id="entrelation-legend" class="entrelation-legend"></div>
-			<div class="entrelation-infovis">			
-				 <div class="entrelation-controlls hidden-sm hidden-xs">
-					<div class="entrelation-item">
-						<div id="entrelation-fullscreen" class="entrelation-box" title_pos="left"><div class="entrelation-fullscreen"></div></div>
-					</div>
+		<div class="entrelation hide" id="entrelation">
+			<div id="entrelation-infovis"></div>
+			<div id="entrelation-limit" class="hide entrelation-limit">
+				<div id="entrelation-nologin" class="hide text-center">
+					<img src="/images/findnull.png" class="b-findnull">
+					<h5>扫码登录认证后,即可查看企业股东信息,投资关系,公司关系脉络图等内容</h5>
+					<button class="btn btn-primary" onclick="loginModalShow();">扫码登录</button>
 				</div>
+				<div id="entrelation-noauthe" class="hide text-center">
+					<img src="/images/findnull.png" class="b-findnull">
+					<h5>认证后即可查看企业股东信息,投资关系,公司关系脉络图等内容</h5>
+					<a href="/member/accountset/index" class="btn btn-primary">认证</a>
+				</div>
+				<img src="/images/entcommunity/relation.png">
+			</div>
+			<div id="entrelation-findnull" class="entrelation-findnull hide">
+				<img src="/images/findnull.png" class="b-findnull">
+				<h4>抱歉,未找到相关数据!</h4>
+			</div>
+		</div>
+		<div class="hide">
+			<div class="ent-layout-up">
+				<div class="b-com-title">
+					<span class="glyphicon jianzhu"></span>公司简介
+				</div>
+				<div class="b-com-content"></div>
+			</div>
+			<div class="ent-layout-down">
+				{{if .T.res.OpScope}}
+				<div class="b-com-title">
+					<span><span class="bootstrap-glyphicon glyphicon-menu-right"></span></span>经营范围
+				</div>
+				<div class="b-com-content">{{.T.res.OpScope}}</div>
+				{{end}}
+				{{if .T.res.s_synopsis}}
+				<div class="b-com-title">
+					<span><span class="bootstrap-glyphicon glyphicon-menu-right"></span></span>公司介绍
+				</div>
+				<div class="b-com-content">{{.T.res.s_synopsis}}</div>
+				{{end}}
+			</div>
+		</div>
+		<div class="hide">
+		
+		</div>
+		<div class="hide">
+			<div class="ent-findnull">
+				<img src="/images/findnull.png" class="b-findnull">
+				<h4>抱歉,未找到相关数据!</h4>
+			</div>
+		</div>
+		<div class="hide">
+			<table class="table a-table" id="serviceList">
+				<tr id="tableTitle">
+					<td width="30%">我的预约</td>
+					<td width="30%" align="center">服务商名称</td>
+					<td width="20%" align="center">预约时间</td>
+					<td	width="10%" align="center">订单状态</td>
+					<td width="10%" align="center">操作</td>
+				</tr>
+				<tr>
+					<td colspan="5" class="text-center" id="myAppointmentPaging"></td>
+				</tr>
+			</table>
+		</div>
+		<div class="hide">
+			<div class="ent-findnull">
+				<img src="/images/findnull.png" class="b-findnull">
+				<h4>抱歉,未找到相关数据!</h4>
 			</div>
 		</div>
-		<div class="hide"></div>
-		<div class="hide"></div>
-		<div class="hide"></div>
-		<div class="hide"></div>
 	</div>
 </div>
 <!--显示地图信息-->
@@ -262,47 +342,20 @@
 {{include "/common/bottom.html"}}
 </body>
 <script type="text/javascript">
-
-
-var entsel="",btempwords,chf1,czb;
-
-//企业信息ID
- var id = {{.T.res._id}}
-//公式信息的变量
-var $gs = {{.T.res.gs}};
-//关系网上的变量
-var  $relationlen = "";
-
-//服务模板
-var template_content = "<tr><td><div class='row service_row'> "
-+"<div class='col-sm-1'><div style='width:120px; height:120px; background-color:#eee;'><img class='hidden-xs' src='${s_images}' style='width:120px;height:120px'></div></div>"
-+" <div class='col-sm-9'>"
-+"<div class='linebser service_des'><div class='servicename text-primary'><a class='text-primary' target='_blank' onclick='clickservicename(\"${_id}\",\"${s_isshow}\")'>${s_name}</a></div><div class='text-muted'>${s_introduction}</div></div>"
-+"</div></td><tr>"
-//关系网数据
-data= "";
-//注册号
-var regno="{{.T.res.RegNo}}";
-
-var legcerno = "{{.T.res.LegCerNO}}";
-var lerep="{{.T.res.LeRep}}";
+var entId = {{.T.res._id}};
+var regNo = {{.T.res.RegNo}};
+var legcerNo = {{.T.res.LegCerNO}};
+var entName = {{.T.res.EntName}};
 //联系地址
+//定义默认的郑州经纬度
+var ptlat=113.69884285509,  ptlng=34.791342526551;
 var province = {{.T.res.i_province}};
 var city = {{.T.res.i_city}};
 var area = {{.T.res.i_area}};
 var as1="{{.T.res.s_address}}";
-var $chiancity= false,$listent=false;
+var address=false,$listent=false;
 {{if or .T.res.i_province .T.res.i_city .T.res.i_area .T.res.s_address}}
-	$chiancity= true;
+	address = true;
 {{end}}
-
-var $resdata = {{.T.res.data}};
-var $entid = {{.T.res._id}};
-//定义默认的郑州经纬度
-var ptlat=113.69884285509,  ptlng=34.791342526551;
-var $res = {{.T.res}};
 </script>
-<script src="/js/entportrait.js"></script>
-<script src="/js/qfwtable.js"></script>
-
 </html>

+ 9 - 11
core/src/web/templates/yellowpage/error.html

@@ -3,19 +3,17 @@
 	<title>企明星----未收录</title>
 	{{include "/common/inc.html"}}
 	<body>
-	<div class="container-fluid">
-	<div class="row page-header" style="height:100px;margin:20px 0;">
-	 <a href="/"><img  src="/images/logo.png" class="header_logo"/></a>
-	</div>
-	<div class="row" style="margin:50px 0;">
-		<div class="col-lg-6 col-md-6 col-sm-6 " style="text-align:right">
-		 <img src="/images/findnull.png" class="b-findnull"/>
-		</div>
-		<div class="col-lg-6 col-md-6 col-sm-6 " style="padding-top: 70px;">
-			<div style="text-indent:20px;"><h4><strong class="text-muted">抱歉!企明星网站暂未收录该企业信息。</strong></h4></div>
+	{{include "/common/errorhead.html"}}
+	<div class="container-fluid b-content">
+		<div class="row" style="margin:50px 0;">
+			<div class="col-lg-6 col-md-6 col-sm-6" style="text-align:right">
+			 <img src="/images/findnull.png" class="b-findnull"/>
+			</div>
+			<div class="col-lg-6 col-md-6 col-sm-6" style="padding-top: 70px;">
+				<div style="text-indent:20px;"><h4><strong class="text-muted">抱歉!企明星网站暂未收录该企业信息。</strong></h4></div>
+			</div>
 		</div>
 	</div>
-	</div>
 	{{include "/common/bottom.html"}}
 	</body>
 </html>