Commit b95ec75a by yangfangfang

Merge branch 'master' of git.minrow.com:reyun/saasio

# Conflicts: # src/main/webapp/activation.html # src/main/webapp/demo.html # src/main/webapp/failure.html # src/main/webapp/forget.html # src/main/webapp/home1.html # src/main/webapp/index.html # src/main/webapp/login.html # src/main/webapp/olduser.html # src/main/webapp/resetpwd.html # src/main/webapp/scripts/lgui.js # src/main/webapp/success.html
parents aeeb6978 6189adc0
...@@ -57,6 +57,11 @@ ...@@ -57,6 +57,11 @@
<admin.url>http://localhost:8080</admin.url> <admin.url>http://localhost:8080</admin.url>
<awsneed>false</awsneed> <awsneed>false</awsneed>
<report.url>http://172.31.1.122:9010</report.url>
<admin.url>http://localhost:8080</admin.url>
<receiver.host>172.31.30.1,172.31.22.39,172.31.22.38,172.31.4.0,172.31.3.123,172.31.16.68,172.31.30.154,172.31.26.177</receiver.host>
<receiver.port>8080</receiver.port>
<mail.host>smtp.exmail.qq.com</mail.host> <mail.host>smtp.exmail.qq.com</mail.host>
<mail.username>manager@reyun.com</mail.username> <mail.username>manager@reyun.com</mail.username>
......
package com.reyun.controller;
import com.reyun.model.Account;
import com.reyun.model.App;
import com.reyun.repository.AccountRepository;
import com.reyun.repository.AppRepository;
import com.reyun.repository.TranslationRepository;
import com.reyun.security.annotation.CurrentAccount;
import com.reyun.util.Constant;
import com.reyun.util.HttpClientUtil;
import com.reyun.util.MailUtils;
import com.reyun.util.StringUtil;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@Controller
@RequestMapping(value = "/logtool/{appid}")
public class LogController {
protected static Logger logger = LoggerFactory.getLogger(LogController.class);
@Autowired
AppRepository apprepository;
@Autowired
AccountRepository accountrepository;
@Autowired
TranslationRepository translationRepository;
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public List getlogs(HttpServletRequest request, @PathVariable Long appid, @CurrentAccount Account loginAccount) {
App app = apprepository.findOne(appid);
Account parent = accountrepository.findOne(app.getAccount());
Account account = loginAccount;
List result = null;
try {
result = getLogs(app.getAppkey());
} catch (IOException e) {
e.printStackTrace();
}
if(result==null) {
result = new ArrayList();
}
return result;
}
public List getLogs(String appId) throws IOException {
List<JSONObject> obList = new ArrayList<JSONObject>();
String[] hostArray = Constant.receiverHost.split(",");
for (String host : hostArray) {
String url = "http://"+host.trim()+":"+ Constant.receiverPort+"/receive/newlylogs/"+appId;
try {
String httpresult = HttpClientUtil.doHttpGetRequest(url, host);
if (!StringUtil.isEmpty(httpresult)) {
try {
JSONObject httpresultObject = new JSONObject(httpresult);
if (httpresultObject.has("result")) {
JSONArray resultArray = httpresultObject.getJSONArray("result");
for (int i=0; i<resultArray.length(); i++) {
JSONObject ob = resultArray.getJSONObject(i);
obList.add(ob);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
logger.error("url: {}", url, e);
try {
MailUtils.sendSimpleEmail("日志流服务", "日志流服务暂不可用, url: " + url + ", message:" + e.getMessage(), Constant.mlist);
} catch (Exception e1) {
logger.error("邮件服务不可用 getLogs()");
}
continue;
}
}
Collections.sort(obList, new Comparator<JSONObject>() {
public int compare(JSONObject arg0, JSONObject arg1) {
try {
return (arg1.getString("when")).compareTo((String) arg0.getString("when"));
} catch (JSONException e) {
e.printStackTrace();
}
return 0;
}
});
List<String> resultList = new ArrayList<String>();
/*
if (obList.size() >= 40) {
for (int i=0; i<40; i++) {
resultList.add(obList.get(i).toString());
}
} else {
for (int i=0; i<obList.size(); i++) {
resultList.add(obList.get(i).toString());
}
}*/
for (JSONObject ob : obList) {
resultList.add(ob.toString());
}
return resultList;
}
}
...@@ -95,11 +95,7 @@ public class LoginController ...@@ -95,11 +95,7 @@ public class LoginController
Account rootAccount = accountRepository.findOne(rootParent); Account rootAccount = accountRepository.findOne(rootParent);
if (trackAndIoBothExhaust) { if (trackAndIoBothExhaust) {
if (rootAccount.getAllowBehavior()) { if (rootAccount.getAllowBehavior()) {
rtnMap.put("msg", "广告效果监控流量和行为分析流量均用尽!"); rtnMap.put("msg", "行为分析流量用尽!");
rtnMap.put("code", 211);
return ResultModel.OK(rtnMap);
} else {
rtnMap.put("msg", "广告效果监控流量已经用尽!");
rtnMap.put("code", 211); rtnMap.put("code", 211);
return ResultModel.OK(rtnMap); return ResultModel.OK(rtnMap);
} }
......
package com.reyun.model;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* Created by admin on 2017/3/3.
*/
@Entity
public class IONotice {
private Long id;
@NotNull
private String title;
@NotNull
private String content;
private Boolean isdeploy;
private Date deployDate;
private Date createDate;
private Date endDate;
private String createUser;
private Date modifyDate;
private String modifyUser;
private Boolean is_top;
private Long deployAccountId;
private String deployUserName;
private String deployAccountEmail;
private Long ioAccount;
private Long trackAccount;
private String trackAccountList;
private String ioAccountList;
private Boolean trackAll;
private Boolean ioAll;
private String accountType;
private Boolean release;
private boolean isRead;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Boolean getIsdeploy() {
return isdeploy;
}
public void setIsdeploy(Boolean isdeploy) {
this.isdeploy = isdeploy;
}
public Date getDeployDate() {
return deployDate;
}
public void setDeployDate(Date deployDate) {
this.deployDate = deployDate;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public String getCreateUser() {
return createUser;
}
public void setCreateUser(String createUser) {
this.createUser = createUser;
}
public Date getModifyDate() {
return modifyDate;
}
public void setModifyDate(Date modifyDate) {
this.modifyDate = modifyDate;
}
public String getModifyUser() {
return modifyUser;
}
public void setModifyUser(String modifyUser) {
this.modifyUser = modifyUser;
}
public Boolean getIs_top() {
return is_top;
}
public void setIs_top(Boolean is_top) {
this.is_top = is_top;
}
public Long getDeployAccountId() {
return deployAccountId;
}
public void setDeployAccountId(Long deployAccountId) {
this.deployAccountId = deployAccountId;
}
public String getDeployUserName() {
return deployUserName;
}
public void setDeployUserName(String deployUserName) {
this.deployUserName = deployUserName;
}
public String getDeployAccountEmail() {
return deployAccountEmail;
}
public void setDeployAccountEmail(String deployAccountEmail) {
this.deployAccountEmail = deployAccountEmail;
}
public Long getIoAccount() {
return ioAccount;
}
public void setIoAccount(Long ioAccount) {
this.ioAccount = ioAccount;
}
@Transient
public Long getTrackAccount() {
return trackAccount;
}
public void setTrackAccount(Long trackAccount) {
this.trackAccount = trackAccount;
}
public String getTrackAccountList() {
return trackAccountList;
}
public void setTrackAccountList(String trackAccountList) {
this.trackAccountList = trackAccountList;
}
public String getIoAccountList() {
return ioAccountList;
}
public void setIoAccountList(String ioAccountList) {
this.ioAccountList = ioAccountList;
}
public String getAccountType() {
return accountType;
}
public void setAccountType(String accountType) {
this.accountType = accountType;
}
public Boolean getTrackAll() {
return trackAll;
}
public void setTrackAll(Boolean trackAll) {
this.trackAll = trackAll;
}
public Boolean getIoAll() {
return ioAll;
}
public void setIoAll(Boolean ioAll) {
this.ioAll = ioAll;
}
@Transient
public Boolean getRelease() {
return release;
}
public void setRelease(Boolean release) {
this.release = release;
}
@Transient
public boolean getIsRead() {
return isRead;
}
public void setIsRead(boolean isRead) {
this.isRead = isRead;
}
}
package com.reyun.repository; package com.reyun.repository;
import com.reyun.model.Notice; import com.reyun.model.IONotice;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
* Created by sunhao on 17/3/1. * Created by sunhao on 17/3/1.
*/ */
@Transactional @Transactional
public interface NoticeRepository extends JpaRepository<Notice, Long> { public interface NoticeRepository extends JpaRepository<IONotice, Long> {
@Query(value = "select * from (select * from notice n where n.isdeploy is true and n.deploy_date <= ?1 and end_date > ?1 order by deploy_date desc ) as notice_top " + @Query(value = "select * from ionotice n where n.isdeploy is true and (io_account = ?1 or io_account = -1) order by id desc", nativeQuery = true)
" union select * from (select * from notice n where n.isdeploy is true and n.deploy_date <= ?1 and end_date is null order by deploy_date desc limit 3) as notice_normal " List<IONotice> listRecentDeployNotice(Long account);
, nativeQuery = true)
List<Notice> listRecentDeployNotice(Date currentDate);
} }
package com.reyun.service; package com.reyun.service;
import com.reyun.model.IONotice;
import com.reyun.model.Notice; import com.reyun.model.Notice;
import com.reyun.model.UserNoticeLog; import com.reyun.model.UserNoticeLog;
...@@ -15,7 +16,7 @@ public interface NoticeService { ...@@ -15,7 +16,7 @@ public interface NoticeService {
* @param accountId * @param accountId
* @return * @return
*/ */
List<Notice> listRecentDeployNotice(Long accountId); List<IONotice> listRecentDeployNotice(Long accountId);
/** /**
* 存储用户已读公告数据 * 存储用户已读公告数据
......
...@@ -637,9 +637,7 @@ public class AccountFlowRestrictServiceImpl implements AccountFlowRestrictServic ...@@ -637,9 +637,7 @@ public class AccountFlowRestrictServiceImpl implements AccountFlowRestrictServic
if (!packageType.getSuperLevel() && flowRestrict) { if (!packageType.getSuperLevel() && flowRestrict) {
if (rootAccount.getAllowBehavior()) { if (rootAccount.getAllowBehavior()) {
isBothExhaust = (packageType.getTrackFlow().doubleValue() - clickNum.doubleValue() < 0) && thisMonthRemainingFlow.doubleValue() < 0; isBothExhaust = thisMonthRemainingFlow.doubleValue() < 0;
} else {
isBothExhaust = (packageType.getTrackFlow().doubleValue() - clickNum.doubleValue() < 0);
} }
} }
} }
......
...@@ -2,6 +2,7 @@ package com.reyun.service.impl; ...@@ -2,6 +2,7 @@ package com.reyun.service.impl;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.reyun.model.IONotice;
import com.reyun.model.Notice; import com.reyun.model.Notice;
import com.reyun.model.UserNoticeLog; import com.reyun.model.UserNoticeLog;
import com.reyun.repository.NoticeRepository; import com.reyun.repository.NoticeRepository;
...@@ -27,15 +28,15 @@ public class NoticeServiceImpl implements NoticeService { ...@@ -27,15 +28,15 @@ public class NoticeServiceImpl implements NoticeService {
private UserNoticeLogRepository userNoticeLogRepository; private UserNoticeLogRepository userNoticeLogRepository;
@Override @Override
public List<Notice> listRecentDeployNotice(Long accountId) { public List<IONotice> listRecentDeployNotice(Long accountId) {
List<Notice> recentDeployNoticeList = noticeRepository.listRecentDeployNotice(new Date()); List<IONotice> recentDeployNoticeList = noticeRepository.listRecentDeployNotice(accountId);
if (!CollectionUtils.isEmpty(recentDeployNoticeList)) { if (!CollectionUtils.isEmpty(recentDeployNoticeList)) {
List<Long> noticeIdList = Lists.transform(recentDeployNoticeList, new Function<Notice, Long>() { List<Long> noticeIdList = Lists.transform(recentDeployNoticeList, new Function<IONotice, Long>() {
@Override @Override
public Long apply(Notice notice) { public Long apply(IONotice notice) {
return notice.getId(); return notice.getId();
} }
}); });
...@@ -43,7 +44,7 @@ public class NoticeServiceImpl implements NoticeService { ...@@ -43,7 +44,7 @@ public class NoticeServiceImpl implements NoticeService {
for (UserNoticeLog userNoticeLog : userNoticeLogList) { for (UserNoticeLog userNoticeLog : userNoticeLogList) {
for (Notice notice : recentDeployNoticeList) { for (IONotice notice : recentDeployNoticeList) {
if (notice.getId().equals(userNoticeLog.getNoticeid())) { if (notice.getId().equals(userNoticeLog.getNoticeid())) {
notice.setIsRead(true); notice.setIsRead(true);
......
...@@ -22,7 +22,7 @@ public class RegedServiceImpl implements RegedService { ...@@ -22,7 +22,7 @@ public class RegedServiceImpl implements RegedService {
@Autowired @Autowired
AccountRepository accountRepository; AccountRepository accountRepository;
private static final String VERIFY_EMAIL_SEND_URL = Constant.adminUrl + "/api/tool/account/sendemail/"; private static final String VERIFY_EMAIL_SEND_URL = Constant.adminUrl + "/api/tool/ioaccount/sendemail/";
@Override @Override
public Boolean sendActiceEmail(String url, Long id) { public Boolean sendActiceEmail(String url, Long id) {
......
...@@ -51,6 +51,8 @@ public class Constant { ...@@ -51,6 +51,8 @@ public class Constant {
public static String mailPassword = mailBundle.getString("mail.password"); public static String mailPassword = mailBundle.getString("mail.password");
public static String mailContentType = mailBundle.getString("mail.content_type"); public static String mailContentType = mailBundle.getString("mail.content_type");
public static String mailValidTime = mailBundle.getString("mail.valid_time"); public static String mailValidTime = mailBundle.getString("mail.valid_time");
public static String mailList = mailBundle.getString("mail.list");
public static List<String> mlist = Arrays.asList(mailList.split(","));
public static ResourceBundle redis = ResourceBundle.getBundle("redis"); public static ResourceBundle redis = ResourceBundle.getBundle("redis");
......
...@@ -2,4 +2,5 @@ mail.host=${mail.host} ...@@ -2,4 +2,5 @@ mail.host=${mail.host}
mail.username=${mail.username} mail.username=${mail.username}
mail.password=${mail.password} mail.password=${mail.password}
mail.content_type=${mail.content_type} mail.content_type=${mail.content_type}
mail.valid_time=${mail.valid_time} mail.valid_time=${mail.valid_time}
\ No newline at end of file mail.list=${mail.list}
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>灵犀</title>
<meta name="keywords" content="热云数据 灵犀" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/login.css?r=0.41036946419626474">
<script src="scripts/change.js?r=0.5875886247958988"></script>
<script src="scripts/regcom1.js?r=0.49364342424087226"></script>
<script src="scripts/regui.js?r=0.5866878852248192"></script>
</head>
<body ng-app="app" ng-controller="acvitationCtrl">
<div class="loginWrap register">
<div class="activationWrap">
<a class="logo" href="login.html"></a>
<div class="registerActivation">注册激活</div>
<div class="activationEmail" ng-show="acvitation == 0">激活邮件已发送至您的邮箱:{{registerEmail}}</div>
<div class="activationEmail" ng-show="acvitation == 1">激活邮件发送失败,请检查您的邮箱:{{registerEmail}}</div>
<div class="activationText" ng-show="acvitation == 0">请点击邮箱的链接完成账号注册!</div>
<div class="activationButton" ng-click="loginEmail()">立即登录邮箱</div>
<div class="sendChange">
<li>没有收到邮件?<a ng-show="sendtype==1" href ng-click="sendAgain()">重新发一封</a><a ng-show="sendtype==2" href>{{time/1000}}秒后可重新发送</a></li>
<li>邮箱填错了?<a ng-show="sendtype==1" href ng-click="changeEmail()">更改邮箱</a><a ng-show="sendtype==2" href style="color:#a3a3b2;">更改邮箱</a></li>
</div>
</div>
</div>
<div class="openTipWin" ng-show="winFlag==1" style="z-index: 98">
<div class="closeGray" ng-click="closeWin()"></div>
<p class="title">更改邮箱</p>
<div class="tipCont">
<div class="formDetailItem">
<div class="iptlabel must">注册邮箱:</div>
<input type="text" class="iptform" ng-model="oldemail" placeholder="请输入注册邮箱" readonly="readonly" style="background: #f3f3f3; color: #999; border: none">
<div class="em">
<em class="error" ng-if="tip.oldemail.status">{{tip.oldemail.txt}}</em>
</div>
</div>
<div class="formDetailItem">
<div class="iptlabel must">新邮箱:</div>
<input type="text" class="iptform" ng-model="newemail" placeholder="请输入新邮箱">
<div class="em">
<em class="error" ng-if="tip.newemail.status">{{tip.newemail.txt}}</em>
</div>
</div>
</div>
<div class="openBtnGroup clearfix">
<div class="btn" ng-click="saveNewEmail()">发送验证邮件</div>
</div>
</div>
<div class="copyright regt" ng-class="{'static':!hasReged}">
2017 TrackingIO.com All Rights Reserved <a href="http://www.miitbeian.gov.cn/" target="_blank">京ICP备14021832号</a>
</div>
<div class="alphaDiv" id="sysLoad" style="display: none;z-index: 99;">
<div class="spinner">
<div class="rect1"></div>
<div class="rect2"></div>
<div class="rect3"></div>
<div class="rect4"></div>
<div class="rect5"></div>
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>灵犀</title>
<meta name="keywords" content="热云数据 灵犀" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<script src="scripts/change.js?r=0.16010478581301868"></script>
<script src="scripts/demo.js?r=0.6772886510007083"></script>
<script type="text/javascript">
$.get("/api/demo",function(data) {
data = JSON.parse(data);
var account = data.content.account,token = data.content.token;
$.cookie("ryioUid",account.id);
$.cookie("ryioUname",account.email);
// $.cookie("ryioUauth",account.authStr);
window.localStorage.setItem("ryioUauth",account.authStr);
$.cookie("ryioToken",token);
$.cookie("ryioPastDate",account.pastDate);
var isSuper = account.isSuperUser == true && account.isChannelPerson!=true;
$.cookie("ryioIsSuper",isSuper);
window.location.href="index.html";
});
</script>
</head>
<body>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>灵犀</title>
<meta name="keywords" content="热云数据 灵犀" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/login.css?r=0.9322576317936182">
<script src="scripts/change.js?r=0.41538010514341295"></script>
<script src="scripts/regcom2.js?r=0.2466718212235719"></script>
<script src="scripts/failure.js?r=0.16402682894840837"></script>
</head>
<body ng-app="app" ng-controller="failureCtrl">
<div class="loginWrap register">
<div class="activationWrap">
<a class="logo" href="login.html"></a>
<div class="registerActivation">激活失败</div>
<div class="activationText">激活链接已失效!</div>
<div class="failureButton successButton" ng-click="sendAgain()" ng-show="failureType==1">重新激活</div>
<div class="failureButton successButton" ng-show="failureType==2" style="background:#a9a9a9;">重新激活</div>
<p class="failureError">{{failureText}}</p>
</div>
</div>
<div class="copyright regt" ng-class="{'static':!hasReged}">
2017 TrackingIO.com All Rights Reserved <a href="http://www.miitbeian.gov.cn/" target="_blank">京ICP备14021832号</a>
</div>
<div class="alphaDiv" id="sysLoad" style="display: none;z-index: 99;">
<div class="spinner">
<div class="rect1"></div>
<div class="rect2"></div>
<div class="rect3"></div>
<div class="rect4"></div>
<div class="rect5"></div>
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>灵犀</title>
<meta name="keywords" content="热云数据 灵犀" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/login.css?r=0.24020749446935952">
<script src="scripts/change.js?r=0.9423119300045073"></script>
<script src="scripts/regcom3.js?r=0.4566480740904808"></script>
<script src="scripts/forget.js?r=0.7468544060830027"></script>
</head>
<body ng-app="app" ng-controller="forgetCtrl">
<div class="loginWrap register">
<div class="activationWrap">
<a class="logo" href="login.html"></a>
<div class="registerActivation">找回密码</div>
<div class="forgetText" ng-show="forgettype!='success'">我们将会给您的电子邮箱发送一个新的密码,有效期为72小时,请及时登录并修改密码!</div>
<div class="formDetailItem forgetInput" ng-show="forgettype!='success'">
<div class="iptlabel must">邮箱:</div>
<input type="text" class="iptform" ng-model="email" placeholder="请输入邮箱">
<button ng-click="save()">确定</button>
<div class="em">
<em class="error" ng-if="tip.email.status">{{tip.email.txt}}</em>
</div>
</div>
</div>
<div class="regedover" ng-show="forgettype=='success'">
<div class="tipsucc"><span class="succIcon"></span>发送邮件成功</div>
<div class="activationButton" ng-click="loginEmail()" style="margin-top: 50px;">立即登录邮箱</div>
</div>
</div>
<div class="openBgDiv" ng-show="noActive==1" ng-cloak></div>
<div class="openTipWin" ng-show="noActive==1" ng-cloak>
<div class="closeGray" ng-click="closeWin()"></div>
<p class="titleLogin" ng-show="!newNoRegister">该账户未激活,请点击激活。</p>
<p class="titleLogin" ng-show="newNoRegister">该子账号未激活,若未收到激活邮件,请联系主账号。</p>
<div class="openBtnGroup clearfix" ng-show="!newNoRegister">
<div class="btn" ng-click="sendAgain()" ng-show="loginSend=='yes'">发送激活邮箱</div>
<div class="btn1" ng-show="loginSend=='no'">发送激活邮箱</div>
</div>
<div class="openBtnGroup clearfix" ng-show="newNoRegister">
<div class="btn" ng-click="closeWin()">确定</div>
</div>
</div>
<div class="copyright regt" ng-class="{'static':!hasReged}">
2017 TrackingIO.com All Rights Reserved <a href="http://www.miitbeian.gov.cn/" target="_blank">京ICP备14021832号</a>
</div>
<div class="alphaDiv" id="sysLoad" style="display: none;z-index: 99;">
<div class="spinner">
<div class="rect1"></div>
<div class="rect2"></div>
<div class="rect3"></div>
<div class="rect4"></div>
<div class="rect5"></div>
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>灵犀</title>
<meta name="keywords" content="热云数据 灵犀" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/home.css?r=0.9637537989765406">
<script src="scripts/change.js?r=0.34539868822321296"></script>
<script src="scripts/home.js?r=0.26635574689134955"></script>
<script src="scripts/homectrl.js?r=0.15901376772671938"></script>
<script>
var _hmt = _hmt || [];
(function() {
var uid = $.cookie("ryioUid");
if(!uid){return false;}
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?3c5292cf6a78c16bc4f8127ca28f6ad5";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</head>
<body ng-app="app" ng-controller="homeCtrl">
<div class="homeWrap">
<div class="menuWrap">
<div class="content">
<a href="/home.html"><div class="logoimg">热云旗下产品</div></a>
<div class="menuList">
<a target="_blank" href="http://blog.trackingio.com/">博客</a>
<a target="_blank" href="http://doc.trackingio.com/">文档中心</a>
<a href="/home.html#/home/main">申请演示</a>
<a href="/home.html#/home/demolist">体验DEMO</a>
</div>
<div ng-show="HomeId != ''" class="userinfo" ng-mouseenter="showinfo=true;" ng-mouseleave="showinfo=false" ng-cloak>
<span class="userIconN"></span>
<div class="userInfoWrap" ng-show="showinfo">
<div class="userInfoDetail">
<div class="itemInfo">
<span class="userIcon"></span>{{Homename}}
</div>
</div>
<div class="userInfoBottom" ng-class="{'third':isSuper || isManage}">
<div class="itemInfo light" ng-mouseenter="us = true;" ng-mouseleave="us = false;" ng-click="goSet()">
<span class="usetIcon" ng-class="{'active':us}" style=""></span>账号管理
</div>
<div class="itemInfo light" ng-mouseenter="ap = true;" ng-mouseleave="ap = false;" ng-click="goApp()" ng-show="isSuper || isManage">
<span class="appLIcon" ng-class="{'active':ap}"></span>应用管理
</div>
<div class="itemInfo light" ng-mouseenter="lgo = true;" ng-mouseleave="lgo = false;" ng-click="Logout()">
<span class="logoutIcon" ng-class="{'active':lgo}" style=""></span>注销
</div>
</div>
</div>
</div>
<a href="register.html"><div ng-show="HomeId == ''" class="menuIcon">注册</div></a>
<a href="login.html"><div ng-show="HomeId == ''" class="menuIcon">登录</div></a>
</div>
</div>
<div class="bodyWrap" ui-view="home">
<div class="tkioWrap">
<div class="trackingiobg">
<div class="trackingioview">
<p class="tkiotilte">TrackingIO</p>
<p class="tkiotext">数据驱动2.0时代产品,打通市场投放和产品用户行为数据<br>帮市场省钱,助产品赚钱</p>
<div class="tkiobutton">
<a ng-show="HomeId == ''" href="login.html"><div class="btn1 button">登录使用</div></a>
<a ng-show="HomeId != '' && Homename !='demo@reyun.com'" ng-click="userNow()"><div class="btn1 button" ng-cloak>立即使用</div></a>
<a ng-show="HomeId != '' && Homename =='demo@reyun.com'" ng-click="HomeDemo()"><div class="btn1 button" ng-cloak>立即使用</div></a>
<a href="/home.html#/home/demolist"><div class="btn2 button">体验DEMO</div></a>
</div>
</div>
</div>
<div class="trackingiobgColor">
<div class="left"></div>
<div class="right"></div>
<div class="clear"></div>
</div>
</div>
<div class="mainTitle">TrackingIO优势</div>
<div class="content" style="padding: 0 15px">
<div class="trackText">
<img src="images/ys1.png">
<p class="trackTextTitle">全网防作弊</p>
<div class="trackTextText">
完善的反作弊体系助您过滤无效的广告数据,精准的广告数据统计为您提供中立的广告效果监测。
</div>
</div>
<div class="trackText">
<img src="images/ys2.png">
<p class="trackTextTitle">推广渠道归因</p>
<div class="trackTextText">
科学的分析方法帮您计算推广或渠道带来的价值,深入的数据研究助您探索优质渠道。
</div>
</div>
<div class="trackText">
<img src="images/ys3.png">
<p class="trackTextTitle">用户行为分析</p>
<div class="trackTextText">
事件、留存、漏斗等多维分析工具帮您分析不同渠道、不同特征用户的行为及用户质量,助您深入了解您的用户,并寻找产品改进的突破点。
</div>
</div>
<div class="trackText">
<img src="images/ys4.png">
<p class="trackTextTitle">大数据引擎</p>
<div class="trackTextText">
整套系统建立在Hadoop生态之上,使用自有研发的ETL执行引擎来对任务进行调度,为您提供优质的技术保障。
</div>
</div>
<div class="clear"></div>
</div>
<div class="gruybg">
<div class="mainTitle">产品功能</div>
<div class="proWrap pro1">
<div class="proLeft">
<p class="proTitle">广告效果监测</p>
<p class="proText">监测,实时数据监测,帮您实时监控推广数据,及时调整广告策略;<br>效果,渠道价值分析,帮您深入分析渠道数据,筛选优质的推广渠道。</p>
</div>
</div>
<div class="proWrap pro2">
<div class="proRight">
<p class="proTitle">用户行为分析</p>
<p class="proText">看单,行业概览查看,帮您整理行业数据报表,快速了解产品用户情况;<br>工具,事件分析工具,分析app的事件,留存,漏斗,用户画像等数据,详细了解用户行为。</p>
</div>
</div>
</div>
<div class="mainTitle">有哪些企业正在使用</div>
<div class="content">
<div class="userWrap">
<img ng-repeat="idx in [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]" src="images/logo/u{{idx}}.png">
<div ng-if="companyMoreType" class="channelMore" ng-click="companyMore()">MORE>></div>
<img ng-if="!companyMoreType" ng-repeat="idx in [24,25,26,27,28,29,30,31,32]" src="images/logo/u{{idx}}.png">
<div class="clear"></div>
</div>
<div class="clear"></div>
</div>
<div class="gruybg">
<div class="mainTitle gruybg">我们已经合作了300余家渠道</div>
<div class="content channelWrap">
<img ng-repeat="imgs in [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]" ng-src="images/coop/h{{imgs}}.png">
<div ng-if="channelMoreType" class="channelMore" ng-click="clickMore()">MORE>></div>
<img ng-if="!channelMoreType" ng-repeat="imgs in [24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]" ng-src="images/coop/h{{imgs}}.png">
<div class="clear"></div>
</div>
<div class="clear"></div>
</div>
</div>
<footer>
<div class="footermenu">
<div class="fmenu">
<p class="ftitle">首页</p>
<p class="flink"><a target="_blank" href="http://www.reyun.com/index.html">首页</a></p>
</div>
<div class="fmenu">
<p class="ftitle">产品</p>
<p class="flink"><a target="_blank" href="http://www.reyun.com/trackingio.html">广告与行为分析平台</a></p>
<p class="flink"><a target="_blank" href="http://www.reyun.com/game.html">游戏运营支撑平台</a></p>
<p id="track" class="flink"><a href="http://track.reyun.com/login.html" target="_blank">移动广告效果检测平台</a></p>
</div>
<div class="fmenu">
<p class="ftitle">关于我们</p>
<p class="flink"><a target="_blank" href="http://www.reyun.com/aboutus.html">公司介绍</a></p>
<p class="flink"><a target="_blank" href="http://www.reyun.com/aboutus.html#joinus">职位招聘</a></p>
</div>
<div class="erweima">
微信关注<br>
公众号:<br>
reyunshuju
</div>
</div>
<div class="footertext">
<p class="frinedText">友情链接:</p>
<div class="frinedLink">
<a href="http://www.sfw.cn/" target="_blank"><img class="link1" src="images/link/1.png"></a>
<a href="http://www.huodonghezi.com/" target="_blank"><img class="link2" src="images/link/2.png"></a>
<a href="http://www.gupowang.com/" target="_blank"><img class="link3" src="images/link/3.png"></a>
<a href="http://www.appganhuo.com/" target="_blank"><img class="link4" src="images/link/4.png"></a>
<a href="http://app.asm.liangjianghu.com/asm-search/#/index" target="_blank"><img class="link5" src="images/link/5.png"></a>
<a href="http://www.zishu010.com/" target="_blank"><img class="link6" src="images/link/6.png"></a>
<a href="http://www.ctoutiao.com/" target="_blank"><img class="link7" src="images/link/7.png"></a>
<a href="http://www.27sem.com/" target="_blank"><img class="link8" src="images/link/8.png"></a>
<a href="http://www.galaxyspace.com/" target="_blank"><img class="link9" src="images/link/9.png"></a>
<a href="http://www.bianxianmao.com" target="_blank"><img class="link10" src="images/link/10.png"></a>
<a href="https://www.appgrowing.cn" target="_blank"><img class="link11" src="images/link/11.png"></a>
</div>
<p>总部:北京市朝阳区望京SOHO T1 A座 1511室 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;华南区:广州市天河区天河路490号壬丰大厦3209室</p>
<p>Copyright&copy;2013-2017 reyun.com All Rights Reserved 京ICP备14021832号-4</p>
<div style="width:200px;margin:0 auto; padding:0 0 20px 0;text-align: center;">
<a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010502032980" style="text-align:center;text-decoration:none;height:20px;line-height:20px;"><img src="images/police.png" style="float:left;"/><p style="float:left;height:20px;line-height:20px;margin: 0px 0px 0px 5px; color:#939393;">京公网安备 11010502032980号</p></a>
</div>
</div>
</footer>
<div class="talkWarp" ng-mouseenter="showQQ=true;" ng-mouseleave="showQQ=false">
<img src="images/talk.png"><br>咨询
<div class="PhoneTalk" ng-show="showQQ">
<div class="PhoneTalkDiv">
<div class="phone"><img src="images/phone400.png">热线电话: 400-001-5680</div>
<div class="QQtalk">
<a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=1870174944&site=qq&menu=yes"><img src="images/qq.png">商务咨询</a>
<a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=314806858&site=qq&menu=yes"><img src="images/qq.png">商务咨询</a>
</div>
</div>
<div class="arrowRight">
</div>
</div>
</div>
</div>
<div class="alphaDiv" id="sysLoad" style="display: none;z-index: 99;">
<div class="spinner">
<div class="rect1"></div>
<div class="rect2"></div>
<div class="rect3"></div>
<div class="rect4"></div>
<div class="rect5"></div>
</div>
</div>
<div class="infoTips toggle" ng-if="operShow" ng-cloak>{{operMsg}}</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>灵犀</title>
<meta name="keywords" content="热云数据 灵犀" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/index.css?r=0.48852341808378696">
<script src="scripts/change.js?r=0.20058486447669566"></script>
<script src="scripts/com.js?r=0.8575117164291441"></script>
<script src="scripts/app.js?r=0.5790868964977562"></script>
<script src="scripts/ui.js?r=0.03460360551252961"></script>
</head>
<body ng-app="app" ng-controller="indexCtrl" ng-class="{'noreport':backReport}">
<div class="mainBody">
<div class="header">
<div class="leftHeader">
<a href="javascript:void(0)">
<div class="iconfont icon-logo"></div>
</a>
</div>
<div class="rightHeader clearfix">
<div class="mainMenu" ng-class="{'mainShow':hasMenuFlag || isall}">
<div ng-class="{'active':mainMenu=='behavior'}" ng-click="showSubMenus('behavior')">行为分析</div>
<div ng-class="{'active':mainMenu=='export'}" ng-click="showSubMenus('export')">数据导出</div>
<div ng-class="{'active':mainMenu=='management'}" ng-click="showSubMenus('management')">管理中心</div>
</div>
<div class="flowinfo">
<div class="flowCircle" ng-if="flowKnow && !flowRestrict"></div>
</div>
<div class="userinfo" ng-mouseenter="showinfo=true;" ng-mouseleave="showinfo=false" ng-class="{'active':showinfo}" ng-cloak>
<span class="userIconN"></span>
<div class="userInfoWrap" ng-show="showinfo">
<div class="userInfoDetail">
<div class="itemInfo">
<div class="userflowText"><span class="userIcon"></span>{{loginuserName}}</div>
</div>
<div class="itemInfo" ng-if="flowRestrict">
<span class="userPrizeIcon regPrize"></span>
<span class="mr10">注册会员</span>
<span style="cursor: default;">升级套餐,请联系商务</span>
</div>
<div class="itemInfo light" ng-if="!byflow && !flowRestrict && behaviorAuth && (isSuper || isManage)">
用户行为分析 :本月已使用流量 {{ioUsed}}K
</div>
<div class="itemInfo light" ng-if="byflow && !flowRestrict && behaviorAuth && (isSuper || isManage)">
<div class="userflowText">用户行为分析(月流量):</div>
<div class="allflow">
<div class="useflow" ng-class="{'useflowRed': ioPercent >= 0.8}" style="width: {{ioPercent*70}}px; max-width: 70px"></div>
</div>
<div class="userflowText">{{ioUsed}}K/{{ioAll}}K</div>
</div>
<div class="itemInfo light" ng-if="!preStatus">
有效期至:<span ng-class="{'error':pastLong <= 0}">{{userPastDate}}</span>
</div>
</div>
<div class="userInfoBottom" ng-class="{'third':isSuper || isManage}">
<div class="itemInfo light" ng-mouseenter="us = true;" ng-mouseleave="us = false;" ng-click="goPage('collect.userinfo')" ng-class="{'userInfoBotton':!isSuper && !isManage && byflow}">
<span class="usetIcon" ng-class="{'active':us}"></span>账号管理
</div>
<div class="itemInfo light" ng-mouseenter="ap = true;" ng-mouseleave="ap = false;" ng-click="goPage('collect.app')" ng-show="isSuper || isManage">
<span class="appLIcon" ng-class="{'active':ap}"></span>应用管理
</div>
<div class="itemInfo light" ng-mouseenter="lgo = true;" ng-mouseleave="lgo = false;" ng-click="userLogout()" ng-class="{'userInfoBotton':!isSuper && !isManage && byflow}">
<span class="logoutIcon" ng-class="{'active':lgo}"></span>注销
</div>
</div>
</div>
</div>
<a ng-if="!preStatus" class="wapSetInfo" href="http://doc.trackingio.com" target="_blank" title="帮助中心"><span class="helpIconN"></span></a>
<div class="wapSetInfo p" ng-show="mainMenu!='management' && pagePath!='userinfo'">
<select-list meau-info="applistInfo" meau-id="appid" meau-data="appidInit" meau-refresh="appfresh" class="appWrap" icon-type="white" style="margin:0px;"></select-list>
</div>
<div ng-if="!preStatus" class="nociceInfo" ng-click="showNoticeWin()" ng-show="noticeList.length>0" ng-cloak>
<span class="noticeNews" ng-class="{'noticeIcon':newNoticeInfo.isRead,'noticeNews':!newNoticeInfo.isRead}"></span>
{{newNoticeInfo.title}}
</div>
</div>
</div>
<div class="contentWrap">
<div class="alphaDiv" id="sysLoad" style="display: none;z-index: 999;">
<div class="spinner">
<div class="rect1"></div>
<div class="rect2"></div>
<div class="rect3"></div>
<div class="rect4"></div>
<div class="rect5"></div>
</div>
</div>
<div class="alphaDiv" id="alpLoad" style="display: none;z-index: 99;"></div>
<!-- <div class="infoTips spin-toggle" ng-if="operShow">{{operMsg}}</div> -->
<div class="infoTips toggle" ng-if="operShow" ng-cloak>{{operMsg}}</div>
<div class="leftSidebar slide-down" ng-show="pagePath!='userinfo' && pagePath!='nopower'">
<div ui-view></div>
</div>
<div class="rightWrap">
<div class="rightContent slide-top" ui-view="content" ng-style="resizeStyle()"></div>
<div class="copyright">
2017 TrackingIO.com All Rights Reserved <a href="http://www.miitbeian.gov.cn/" target="_blank">京ICP备14021832号</a>
</div>
</div>
<div class="dialogDescWin noticeWin" ng-class="{'myNotice':showNoticew}">
<div class="dlgTitle">
TrackingIO系统公告
<div class="right closeGray" ng-click="hideNoticeWin()"></div>
</div>
<div class="dlgCnt">
<div class="noticeItem" ng-repeat="news in noticeList track by $index">
<div class="noticeTitle" ng-click="clickNotice(news)">
<h6><span ng-class="{'redSpan':!news.isTop && !news.isRead,'noticeTopIcon':news.isTop}"></span>{{news.title}}</h6>
<em>{{news.deployDate | date:'yyyy-MM-dd HH:mm:ss'}}</em>
</div>
<div class="noticeContent" ng-bind-html="news.content | filterHtml" ng-if="curNoticeId==news.id"></div>
</div>
</div>
</div>
<div class="openTipWin" ng-if="tipCustom" ng-controller="collectCtrl" ng-cloak>
<div class="closeGray" ng-click="closeTip()"></div>
<div class="tipCont">
当前没有看单,请创建一个新看单。
</div>
<div class="openBtnGroup clearfix">
<div class="btn8 mr20" ng-click="closeTip()">取消</div>
<div class="btn8" ng-click="okCust()">确定</div>
</div>
</div>
<!--行为分析 流量用户-->
<div class="openTipWin" ng-if="ioAlert && byflow && ioPercentRel <= 0.2 && behaviorAuth && !flowRestrict" ng-controller="collectCtrl" ng-cloak style="z-index: 999;">
<div class="closeGray" ng-click="closeFlow('ioAlert')"></div>
<div class="tipCont" style="height: 100px;">
<p ng-if="ioPercentRel > 0.05 && ioPercentRel <= 0.2">您订阅的用户行为分析“{{flowName}}”中本月的{{ioAll}}K事件数已经使用{{ioUsed}}K,请关注您的套餐流量使用情况。<br>&nbsp;</p>
<p ng-if="ioPercentRel > 0 && ioPercentRel < 0.05">您订阅的用户行为分析“{{flowName}}”中本月的{{ioAll}}K事件数已经使用{{ioUsed}}K,流量即将用尽,超出部分将占用下月流量限额,最高使用量不超出5%。服务到期后我们将会继续支持您的数据上报和接收,但数据展示服务将暂时无法使用。</p>
<p ng-if="ioPercentRel <= 0 && ioPercentRel > -0.05">您订阅的用户行为分析“{{flowName}}”中本月的{{ioAll}}K事件数已经用完,本月超出部分将占用下月流量限额,最高使用量不超出5%。服务到期后我们将会继续支持您的数据上报和接收,但数据展示服务将暂时无法使用。请您预估下月的流量使用,如果产品统计需求增加,请联系商务升级您的套餐。</p>
<p ng-if="ioPercentRel <= -0.05">
<span ng-hide="behaviorAuth && ioPercentRel <= -0.05">您订阅的用户行为分析“{{flowName}}”中本月的{{ioAll}}K事件数已经用完,本月超出部分将占用下月流量限额,最高使用量不超出5%。服务到期后我们将会继续支持您的数据上报和接收,但数据展示服务将暂时无法使用。请您预估下月的流量使用,如果产品统计需求增加,请联系商务升级您的套餐。</span>
<span ng-show="behaviorAuth && ioPercentRel <= -0.05">您购买的“{{flowName}}”已经用完,账号将自动退出,为了不影响您的正常使用,请尽快联系商务续订服务。流量用尽后我们将会继续支持您的数据上报和接收,但数据展示服务将暂时无法使用。<br>&nbsp;</span>
</p>
</div>
<div class="openBtnGroup clearfix">
<div class="btn8" ng-click="closeFlow('ioAlert')" style="margin-left: 65px;">我知道了</div>
</div>
</div>
<!--行为分析 流量用户到期-->
<div class="openTipWin" ng-if="ioDateAlert && pastLong <= 30 && behaviorAuth && !flowRestrict" ng-controller="collectCtrl" ng-cloak>
<div class="closeGray" ng-click="closeFlow('ioDateAlert')"></div>
<div class="tipCont" style="height: 100px;">
<p ng-if="pastLong > 0 && pastLong <= 30">您购买的用户行为分析“{{flowName}}”将在<span ng-if="pastLong!= 30">{{pastLong}}天</span><span ng-if="pastLong== 30">一个月</span>后({{userPastDate}})到期,为了不影响您的正常使用,请尽快联系商务续订服务。服务到期后我们将会继续支持您的数据上报和接收,但数据展示服务将暂时无法使用。</p>
<p ng-if="pastLong==0">您购买的用户行为分析“{{flowName}}”将在明天过期,为了不影响您的正常使用,请尽快联系商务续订服务。服务到期后我们将会继续支持您的数据上报和接收,但数据展示服务将暂时无法使用。</p>
<p ng-if="pastLong < 0">您购买的用户行为分析“{{flowName}}”已经到期,为了不影响您的正常使用,请尽快联系商务续订服务。服务到期后我们将会继续支持您的数据上报和接收,但数据展示服务将暂时无法使用。</p>
</div>
<div class="openBtnGroup clearfix">
<div class="btn8" ng-click="closeFlow('ioDateAlert')" style="margin-left: 65px;">我知道了</div>
</div>
</div>
</div>
<div class="helpTipWrap winTips" id="winTC"></div>
</div>
<div class="alphaDiv" ng-if="ioAlert && byflow && ioPercentRel <= 0.2 && behaviorAuth && !flowRestrict" style="z-index: 997"></div>
<div class="alphaDiv" ng-if="ioDateAlert && pastLong <= 30 && behaviorAuth && !flowRestrict" style="z-index: 997"></div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>灵犀</title>
<meta name="keywords" content="热云数据 灵犀" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/login.css?r=0.11575359338894486">
<script src="scripts/change.js?r=0.6097557554021478"></script>
<script src="scripts/lgcom4.js?r=0.33344802912324667"></script>
<script src="scripts/lgui.js?r=0.2212034841068089"></script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?7899fb5e9a59c7f4cdcbb69d51396b0b";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</head>
<body ng-app="app" ng-controller="loginCtrl">
<div class="loginWrap" ng-keyup="keyEvt($event)">
<div class="mapWrap">
<div id="mapInfo"></div>
</div>
<div class="infoWrap loginPosition">
<a class="logo logoMB"></a>
<input type="text" class="iptform" ng-model="name" placeholder="请输入您的注册邮箱">
<div class="errorWrap">
<div class="error" ng-if="tip.name.status">{{tip.name.txt}}</div>
</div>
<input type="password" class="iptform" ng-model="password" placeholder="请输入您的密码">
<div class="errorWrap">
<div class="error" ng-if="tip.password.status">{{tip.password.txt}}</div>
</div>
<input type="text" class="iptform yma" ng-model="yema" placeholder="请输入验证码">
<div class="yawarp hand" ng-click="getImgInfo()">
<img src="" alt="" id="imgMa">
</div>
<div class="errorWrap">
<div class="error" ng-if="tip.yema.status">{{tip.yema.txt}}</div>
</div>
<div>
<span class="ml10 hand" ng-click="isrember=!isrember">
<span class="checkbox" ng-class="{'active':isrember}"></span>记住密码
</span>
<span class="ml10 hand" ng-click="isonline=!isonline">
<span class="checkbox" ng-class="{'active':isonline}"></span>自动登录7天
</span>
<span class="right hand"><a class="under" href="forget.html">忘记密码?</a></span>
</div>
<div class="errorWrap"></div>
<div class="loginBtn" ng-click="doLogin()">登录</div>
<div class="forgetWrap">
<span class="ml10">还没有账号?<a href="register.html"><span class="under">立即注册</span></a></span>
<!-- <span class="right under">体验DEMO</span> -->
</div>
</div>
</div>
<div class="openBgDiv" ng-show="noActive==1" ng-cloak></div>
<div class="openTipWin" ng-show="noActive==1" ng-cloak>
<div class="closeGray" ng-click="closeWin()"></div>
<p class="titleLogin">该账户未激活,请点击激活。</p>
<div class="openBtnGroup clearfix">
<div class="btn" ng-click="sendAgain()" ng-show="loginSend=='yes'">发送激活邮箱</div>
<div class="btn1" ng-show="loginSend=='no'">发送激活邮箱</div>
</div>
</div>
<div class="copyright">
2017 TrackingIO.com All Rights Reserved <a href="http://www.miitbeian.gov.cn/" target="_blank">京ICP备14021832号</a>
</div>
<script>
var date = new Date();
date.setDate(date.getDate()-1);
var year = date.getFullYear();
var month = date.getMonth()+1;
var day = date.getDate();
var datetime = year+"-"+month+"-"+day;
$.get('/data/login.json',function(data){
var report = data.val;
var reportVal = data.prondau;
var myChart = echarts.init(document.getElementById('mapInfo'));
var option = {
backgroundColor: '#01010c',
color: [
'rgba(255, 255, 255, 1)',
'rgba(0, 228, 255, 1)',
'rgba(9, 107, 255, 1)'
],
title : {
text: '',
subtext: '',
x:'center',
textStyle : {
color: '#fff'
}
},
legend: {
orient: 'vertical',
x:'left',
data:[],
textStyle : {
color: '#fff'
}
},
tooltip : {
trigger: 'item',
backgroundColor:'#f2f2f3',
borderColor:'#00a9e8',
textStyle:{ color:'#000' },
//formatter: '{b}:{c}'
formatter: function(params) {
var res = params.name.toString();
var resNum = reportVal[res];
if(resNum == undefined){
resNum = 0;
}
return res+":"+resNum;
}
},
toolbox: {
show : false,
orient : 'vertical',
x: 'right',
y: 'center',
feature : {
mark : {show: false},
dataView : {show: false, readOnly: false},
restore : {show: false},
saveAsImage : {show: false}
}
},
series : [
{
name: '弱',
type: 'map',
mapType: 'china',
itemStyle:{
normal:{
borderColor:'rgba(7,53,77,1)',
borderWidth:1.5,
areaStyle:{
color: '#020211'
}
}
},
data : [],
markPoint : {
symbolSize: 2,
large: true,
effect : {
show: true
},
data : (function(){
return report[2];
})()
}
},
{
name: '中',
type: 'map',
mapType: 'china',
itemStyle:{
normal:{
borderColor:'rgba(7,53,77,1)',
borderWidth:1.5,
areaStyle:{
color: '#020211'
}
}
},
data : [],
markPoint : {
symbolSize: 3,
large: true,
effect : {
show: true
},
data : (function(){
return report[1];
})()
}
},
{
name: '强',
type: 'map',
mapType: 'china',
hoverable: false,
roam:false,
itemStyle:{
normal:{
borderColor:'rgba(7,53,77,1)',
borderWidth:1.5,
areaStyle:{
color: '#020211'
}
}
},
data : [],
markPoint : {
symbol : 'diamond',
symbolSize: 6,
large: true,
effect : {
show: true
},
data : (function(){
return report[0];
})()
}
}
]
};
myChart.setOption(option);
});
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>灵犀</title>
<meta name="keywords" content="热云数据 灵犀" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/login.css?r=0.7841710445936769">
<script src="scripts/change.js?r=0.4421499124728143"></script>
<script src="scripts/regcom5.js?r=0.2624261521268636"></script>
<script src="scripts/olduser.js?r=0.6676868912763894"></script>
</head>
<body ng-app="app" ng-controller="olduserCtrl">
<div class="loginWrap register">
<div class="activationWrap">
<a class="logo" href="login.html"></a>
<div class="registerActivation">注册激活</div>
<div class="activationText oldUser">我们当前正在为开发者做更多的权限和安全设计,为了您的账户安全,请激活您的邮箱。</div>
<div class="activationButton" ng-click="oldEmail()">发送激活邮件</div>
<div class="activationText"><a href="index.html">跳过,下次再显示</a></div>
</div>
</div>
<div class="copyright regt" ng-class="{'static':!hasReged}">
2017 TrackingIO.com All Rights Reserved <a href="http://www.miitbeian.gov.cn/" target="_blank">京ICP备14021832号</a>
</div>
<div class="alphaDiv" id="sysLoad" style="display: none;z-index: 99;">
<div class="spinner">
<div class="rect1"></div>
<div class="rect2"></div>
<div class="rect3"></div>
<div class="rect4"></div>
<div class="rect5"></div>
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>灵犀</title>
<meta name="keywords" content="热云数据 灵犀" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/login.css?r=0.8538161558099091">
<script src="scripts/change.js?r=0.33458543848246336"></script>
<script src="scripts/regcom7.js?r=0.6433788833674043"></script>
<script src="scripts/resetpwd.js?r=0.8525168120395392"></script>
</head>
<body ng-app="app" ng-controller="resetpwdCtrl">
<div class="loginWrap register">
<div class="activationWrap" ng-show="resetTpye=='yes'">
<a class="logo" href="login.html"></a>
<div class="pwdActivation">修改密码</div>
<div class="formDetailItem pwdInput">
<div class="iptlabel must">请输入新密码:</div>
<input type="password" class="iptform" ng-model="newpwd" placeholder="请输入新密码">
<div class="error" ng-if="tip.newpwd.status" ng-class="{'long':tip.newpwd.txt.length>15}">{{tip.newpwd.txt}}</div>
</div>
<div class="formDetailItem pwdInput">
<div class="iptlabel must">请再次输入新密码:</div>
<input type="password" class="iptform" ng-model="crmpwd" placeholder="请再次输入新密码">
<div class="error" ng-if="tip.crmpwd.status" ng-class="{'long':tip.crmpwd.txt.length>15}">{{tip.crmpwd.txt}}</div>
</div>
<div class="resetpwdButton" ng-click="save()">确定</div>
</div>
<div class="activationWrap" ng-show="resetTpye=='no'">
<a class="logo" href="login.html"></a>
<div class="registerActivation">修改密码</div>
<div class="activationText">修改密码链接已失效!<span ng-if="isShowSend">请联系母账号</span></div>
<div class="activationButton successButton" ng-click="sendEmail()" ng-if="!isShowSend">重新发送邮件</div>
<div class="error" ng-if="tip.send.status">{{tip.send.txt}}</div>
</div>
<div class="activationWrap" ng-show="resetTpye=='send'">
<a class="logo" href="login.html"></a>
<div class="registerActivation">修改密码</div>
<div class="regedover">
<div class="tipsucc"><span class="succIcon"></span>发送邮件成功</div>
<div class="activationButton" ng-click="loginEmail()" style="margin-top: 50px;">立即登录邮箱</div>
</div>
</div>
</div>
<div class="copyright regt" ng-class="{'static':!hasReged}">
2017 TrackingIO.com All Rights Reserved <a href="http://www.miitbeian.gov.cn/" target="_blank">京ICP备14021832号</a>
</div>
<div class="alphaDiv" id="sysLoad" style="display: none;z-index: 99;">
<div class="spinner">
<div class="rect1"></div>
<div class="rect2"></div>
<div class="rect3"></div>
<div class="rect4"></div>
<div class="rect5"></div>
</div>
</div>
</body>
</html>
!function(){var a={isNull:"必填",errorLetter:"含特殊字符或过长",errorLength:"40字符以内",errorFormat:"格式不对",lowLetter:"输入小写字母",errorEmail:"请输入48位以内的正确邮箱",errorNum:"输入数字",errorPwd:"仅支持数字,大小写字母,且至少包含其中2种,长度限制为6-18位",errorQQ:"请输入正确QQ号码",errorCrm:"两次密码不一致,请重新输入",errorCompany:"公司名称,支持48位内汉字或96位内字母数字",errorUsername:"您的姓名,支持16位内汉字或32位内字母数字",errorWechat:"6-20位数字,字母,下划线或中划线,须以数字或字母开头",errorUrl:"以http://或https://开头的合法url",errorName:"名称不合法或过长"},b=function(a){if(!a.val)return a.nullTxt||"必填";var b=a.val.replace(/[^\x00-\xff]/g,"00");return a.min&&b.length<a.min||a.max&&b.length>a.max?a.regTxt:a.regFlag&&a.reg.test(a.val)?a.regTxt:a.regFlag||!a.reg||a.reg.test(a.val)?"succ":a.regTxt},c={isNull:function(c){var d={val:c.val,name:c.txt||a.isNull};return b(d)},nameLen:function(c){var d={val:c.val,max:c.max||40,min:c.min||2,regTxt:c.txt||a.errorLength};return b(d)},isMaxLen:function(a){var c={val:a.val,max:a.max||40,min:a.min||2,regTxt:a.txt};return b(c)},name:function(c){var d={val:c.val,max:c.max||40,min:c.min||2,reg:/[`~!@#\$%\^\&\*\(\)\+<>\?:"\{\},\.\\\/;'\[\]]/im,regFlag:!0,regTxt:c.txt||a.errorLetter};return b(d)},nameFormat:function(c){var d={val:c.val,max:c.max||40,min:c.min||1,reg:/^[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~\\!(\)《》?:·“ ”,。、;`‘’【】——……¥「」/a-zA-Z0-9\u4E00-\u9FA5]+$/,regFlag:!1,regTxt:c.txt||a.errorName};return b(d)},spcname:function(c){var d={val:c.val,max:c.max||40,min:c.min||1,reg:/^[a-zA-Z0-9_\-\u4E00-\u9FA5]+$/,regFlag:!1,regTxt:c.txt||a.errorLetter};return b(d)},spcname1:function(c){var d={val:c.val,max:c.max||40,min:c.min||1,reg:/^[a-zA-Z0-9_\-\·\u4E00-\u9FA5]+$/,regFlag:!1,regTxt:c.txt||a.errorLetter};return b(d)},spcname2:function(c){var d={val:c.val,max:c.max||40,min:c.min||1,reg:/^[a-zA-Z0-9_\u4E00-\u9FA5]+$/,regFlag:!1,regTxt:c.txt||a.errorLetter};return b(d)},keyword:function(c){var d={val:c.val,max:c.max||40,min:c.min||1,reg:/^[a-zA-Z0-9\.\-\u4E00-\u9FA5]+$/,regFlag:!1,regTxt:c.txt||a.errorLetter};return b(d)},companyname:function(c){var d={val:c.val,max:c.max||96,reg:/^[a-zA-Z0-9_\-\u4E00-\u9FA5]+$/,regFlag:!1,regTxt:c.txt||a.errorCompany};return b(d)},username:function(c){var d={val:c.val,max:c.max||32,reg:/^[a-zA-Z0-9_\-\u4E00-\u9FA5]+$/,regFlag:!1,regTxt:c.txt||a.errorUsername};return b(d)},numLetter:function(c){var d={val:c.val,max:c.max||32,reg:/^[a-zA-Z0-9\u4E00-\u9FA5]+$/,regFlag:!1,regTxt:c.txt||a.errorUsername,nullTxt:c.nullTxt};return b(d)},onelink:function(c){var d={val:c.val,max:c.max||40,reg:/^[a-zA-Z0-9_\_\-\u4E00-\u9FA5]+$/,regFlag:!1,regTxt:c.txt||a.errorUsername};return b(d)},wechat:function(c){var d={val:c.val,reg:/^[a-zA-Z0-9]{1}[a-zA-Z\d_\d-]{5,19}$/,regFlag:!1,regTxt:c.txt||a.errorWechat,nullTxt:c.nullTxt};return b(d)},email:function(c){var d={val:c.val,max:c.max||48,reg:/^([a-zA-Z0-9]+[_|\_|\.|\-]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.|\-]?)*[a-zA-Z0-9]+\.[a-zA-Z]{1,63}$/,regFlag:!1,regTxt:c.txt||a.errorEmail,nullTxt:c.nullTxt};return b(d)},url:function(c){var d={val:c.val,reg:/(http|https):\/\/[^\s]+/,regFlag:!1,regTxt:c.txt||a.errorUrl,nullTxt:c.nullTxt};return b(d)},num:function(c){var d={val:c.val,reg:/\D/g,max:c.max||64,min:c.min||1,regFlag:!0,regTxt:c.txt||a.errorNum,nullTxt:c.nullTxt};return b(d)},qq:function(c){var d={val:c.val,reg:/\D/g,max:c.max||12,min:c.min||6,regFlag:!0,regTxt:c.txt||a.errorQQ};return b(d)},numFloat:function(c){var d={val:c.val,reg:/^\d+(\.\d{1,2})?$/,regFlag:!1,regTxt:c.txt||a.errorFormat};return b(d)},isLowLetter:function(c){var d={val:c.val,reg:/^[a-z]+$/,regFlag:!1,regTxt:c.txt||a.lowLetter};return b(d)},pwd:function(c){var d={val:c.val,reg:/^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?![\-_]+$)[0-9A-Za-z]{6,18}$/,regFlag:!1,regTxt:c.txt||a.errorPwd};return b(d)},cellphone:function(a){var c={val:a.val,reg:/^((\d{3,4}-\d{7,14}))|(^1(3|4|5|7|8)\d{9})$/,regFlag:!1,regTxt:a.txt||"号码有误"};return b(c)},ipError:function(a){var c={val:a.val,reg:/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/,regFlag:!1,regTxt:a.txt||"支持数字和“.”"};return b(c)}};formJudge=function(a){var b=[],d={};for(x in a){var e=a[x];info=c[a[x].key](e),status=!1,"succ"!=info&&(b.push(info),status=!0,d[x]={status:status,txt:info})}if(b.length>0){d.succ=!1;for(i in d)if("succ"!=d[i].txt&&(d[i].status=!0),"true"==d[i].status){document.getElementById(i).focus();var f=document.getElementById(i).offsetTop;document.documentElement.scrollTop=f-70;break}}else d={succ:!0};return d}}(),function(){"use strict";angular.module("app",["app.login"]),angular.module("app.login",[])}(),function(){function a(a,b,c){var d={};return d.loginTimeout=function(a){null!=a&&a.code&&-1002==a.code&&d.logOutCookie()},d.noLogin=function(a){if(angular.isUndefined(a)||-1==a.indexOf("login")){var b=c.getCookie("ryioUid");c.isNullStr(b)&&d.logOutCookie()}},d.logOutCookie=function(){c.setCookie("ryioUid",""),window.localStorage.setItem("ryioUauth",""),c.setCookie("ryioToken",""),c.setCookie("ryioIsSuper",""),window.location.href="/login.html"},d.getInfo=function(c,e,f){f||d.noLogin(c);var g=b.defer(),h="";for(var i in e)h+="&"+i+"="+e[i];-1==c.indexOf("?")?c+="?r="+Math.random():c+="&r="+Math.random(),c+=h;a.get("/api/"+c).success(function(a){d.loginTimeout(a),a.code&&200!=a.code?g.reject(a):g.resolve(a.content||a)}).error(function(a){d.loginTimeout(a),g.reject(a)});return g.promise},d.getInfoByUrl=function(c){d.noLogin();var e=b.defer();a.get(c).success(function(a){d.loginTimeout(a),e.resolve(a.content||a)}).error(function(a){d.loginTimeout(a),e.reject(a)});return e.promise},d.getReportData=function(e,f){d.noLogin();var g=b.defer(),h=c.cloneJSON(f),i=h.appid;delete h.appid;var j="?r="+Math.random();for(var k in h)j+="&"+k+"="+h[k];a.get("/api/report/"+i+"/"+e+j).success(function(a){d.loginTimeout(a),a.code&&200!=a.code?g.reject(a):g.resolve(a.content||a)}).error(function(a){d.loginTimeout(a),g.reject(a)});return g.promise},d.postInfo=function(c,e,f){f||d.noLogin(c);var g=b.defer();-1==c.indexOf("?")?c+="?r="+Math.random():c+="&r="+Math.random();a.post("/api/"+c,e).success(function(a,b){d.loginTimeout(a),a.status=b,a.code&&-5e3==a.code?g.resolve(a):a.code&&-6001==a.code?g.resolve(a):g.resolve(a.content||a)}).error(function(a){d.loginTimeout(a),g.reject(a)});return g.promise},d.postInfoByUrl=function(c,e){d.noLogin();var f=b.defer();-1==c.indexOf("?")?c+="?r="+Math.random():c+="&r="+Math.random();a.post(c,e).success(function(a){f.resolve(a.content||a)}).error(function(a){d.loginTimeout(a),f.reject(a)});return f.promise},d.putInfo=function(c,e){d.noLogin(c);var f=b.defer();-1==c.indexOf("?")?c+="?r="+Math.random():c+="&r="+Math.random();a.put("/api/"+c,e).success(function(a,b){d.loginTimeout(a),a.status=b,a.code&&a.code<0?f.reject(a):f.resolve(a.content||a)}).error(function(a){d.loginTimeout(a),f.reject(a)});return f.promise},d.deleteInfo=function(c){d.noLogin();var e=b.defer();-1==c.indexOf("?")?c+="?r="+Math.random():c+="&r="+Math.random();a.delete("/api/"+c).success(function(a,b){d.loginTimeout(a),a.status=b,e.resolve(a.content||a)}).error(function(a){d.loginTimeout(a),e.reject(a)});return e.promise},d.downFile=function(c,d){var e=b.defer();return-1==c.indexOf("api")&&(c="/api/"+c),a({method:"GET",url:c,params:d,responseType:"arraybuffer"}).success(function(a,b,c){if(204==b)return e.resolve({code:-1}),!1;e.resolve({code:1}),c=c();var d=c.filename,f=c["content-type"],g=document.createElement("a");try{var h=new Blob([a],{type:f}),i=window.URL.createObjectURL(h);g.setAttribute("href",i),g.setAttribute("download",decodeURIComponent(d));var j=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1});g.dispatchEvent(j)}catch(k){}}).error(function(a){}),e.promise},d}angular.module("app").factory("HttpService",["$http","$q","UtilService",a])}(),function(){"use strict";function a(){var a={};return a.randRange=function(a,b){return Math.floor(Math.random()*(b-a+1))+a},a.sortArray=function(a,b){return"desc"==b?a.sort(function(a,b){return a==b?0:a>b?-1:1}):a.sort(function(a,b){return a==b?0:a>b?1:-1})},a.getMaxByArray=function(b){var c=a.cloneJSON(b);return c=c.sort(function(a,b){return a==b?0:a>b?-1:1}),c[0]},a.sortArray2=function(a,b,c,d){var e=[],f=a.length;f>0&&(b.filter(function(b,c){for(var d=[],g=0;g<f;g++)d.push(a[g][c]);d.push(b),e.push(d)}),"desc"==d?e.sort(function(a,b){return a[c]==b[c]?0:a[c]>b[c]?-1:1}):e.sort(function(a,b){return a[c]==b[c]?0:a[c]>b[c]?1:-1}),e.filter(function(c,d){b[d]=c.pop();for(var e=0;e<f;e++)a[e][d]=c[e]}))},a.sumArray=function(a){for(var b=0,c=0;c<a.length;c++)null!=a[c]&&(b+=a[c]);return b},a.decimal2=function(a,b){b=b||2;for(var c="1",d=1,e=0;e<b;e++)c+="0";d=parseInt(c);var f=Math.round(a*d)/d,g=f+"",h=g.indexOf(".");return h>0&&g.substring(h,g.length)>2&&(g=g.substring(0,g.length-2),f=parseFloat(g)),f},a.getDay=function(a){var b=new Date,c=function(a){var b=a.getFullYear(),c=a.getMonth()+1,d=a.getDate();return c<10&&(c="0"+c),d<10&&(d="0"+d),b+"-"+c+"-"+d},d=b.getTime()+864e5*a;return b.setTime(d),c(b)},a.getLastMonthsDate=function(a,b){var c=new Date(a);return c.setMonth(c.getMonth()-Number(b)),c.Format("yyyy-MM-dd")},a.getYearWeekList=function(a){if(void 0===a){a=(new Date).getFullYear()}var b=[],c=new Date(a,0,1),d=c.getDay(),e=new Date(a,11,31);d=0==d?7:d;var f=c.clone().addDays(7-d),g=0;for(d>0&&d<5&&(g=1,b.push({week:g,date:f,year:a}));f<e&&!e.isSameDay(f);)g++,f=f.clone().addDays(7),b.push({week:g,date:f,year:a});var h=new Date(a,11,31),i=h.getDay();return i>0&&i<4&&b.pop(),b},a.getYearWeekCount=function(b){return a.getYearWeekList(b).length},a.getNowWeekNum=function(){var a=Date.today(),b=new Date(a.getFullYear(),0,1),c=b.getDay(),d=b.clone(),e=0;c>0&&(d=d.addDays(8-c),e=1);var f=diffDate(d,a);return Math.ceil(f/7)+e},a.cloneJSON=function(a){var b=Object.prototype.toString.call(a);return b.indexOf("Object")>-1?jQuery.extend(!0,{},a):b.indexOf("Array")>0?a.concat():a},a.splitString=function(a,b){for(var c="",d=0,e=new RegExp(/[^\x00-\xff]/),f=0;f<a.length;f++){var g=a.charAt(f);d+=e.test(g)?2:1,d<=b&&(c+=g)}return{str:c,len:d}},a.merge=function(){return Array.prototype.concat.apply([],arguments)},a.isNullStr=function(a){return!(!angular.isUndefined(a)&&""!=a&&null!=a&&"null"!=a)},a.getStr=function(a){return a<10?"0"+a:a+""},a.setCookie=function(a,b,c){$.cookie(a,b,{expires:c,path:"/",secure:!1,raw:!1})},a.getCookie=function(a){return $.cookie(a)},a.setItem=function(a,b){window.localStorage.setItem(a,b)},a.getItem=function(a){return window.localStorage.getItem(a)},a.copyTxt=function(a){$(a).select();var b=!1;try{b=document.execCommand("Copy","false",null)}catch(c){b=!1}return b},a.randRangeId=function(){if(a.getCookie("tkRmdId"))return a.getCookie("tkRmdId");var b=(new Date).getTime()+a.randRange(3,5);return a.setCookie("tkRmdId",b,1095),b},a.randDeviceId=function(){if(localStorage.getItem("rmdDeviceId"))return localStorage.getItem("rmdDeviceId");var b=(new Date).getTime()+a.randRange(3,10);return localStorage.setItem("rmdDeviceId",b),b},a.getTKAppkey=function(){return"f0f251af10e66a0c94d2e923d8863105"},a.getLogRoot=function(){return"http://log.reyun.com"},a.deviceInfo=function(){return{versions:function(){var a=navigator.userAgent;navigator.appVersion;return{trident:a.indexOf("Trident")>-1,presto:a.indexOf("Presto")>-1,webKit:a.indexOf("AppleWebKit")>-1,gecko:a.indexOf("Gecko")>-1&&-1==a.indexOf("KHTML"),mobile:!!a.match(/AppleWebKit.*Mobile.*/),ios:!!a.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),android:a.indexOf("Android")>-1||a.indexOf("Linux")>-1,iPhone:a.indexOf("iPhone")>-1,iPad:a.indexOf("iPad")>-1,webApp:-1==a.indexOf("Safari")}}(),language:(navigator.browserLanguage||navigator.language).toLowerCase()}},a.operatorSystem=function(){var a=navigator.userAgent,b="Win32"==navigator.platform||"Windows"==navigator.platform,c="Mac68K"==navigator.platform||"MacPPC"==navigator.platform||"Macintosh"==navigator.platform||"MacIntel"==navigator.platform;if(c)return"Mac";if("ipad"==a.match(/ipad/i))return"ipad";if("iPhone"==navigator.platform)return"iPhone";if("X11"==navigator.platform&&!b&&!c)return"Unix";var d=String(navigator.platform).indexOf("Linux")>-1,e="android"==a.toLowerCase().match(/android/i);if(d)return e?"Android":"Linux";if(b){if(a.indexOf("Windows NT 5.0")>-1||a.indexOf("Windows 2000")>-1)return"Win2000";if(a.indexOf("Windows NT 5.1")>-1||a.indexOf("Windows XP")>-1)return"WinXP";if(a.indexOf("Windows NT 5.2")>-1||a.indexOf("Windows 2003")>-1)return"Win2003";if(a.indexOf("Windows NT 6.0")>-1||a.indexOf("Windows Vista")>-1)return"WinVista";if(a.indexOf("Windows NT 6.1")>-1||a.indexOf("Windows 7")>-1)return"Win7";if(a.indexOf("Windows NT 6.2")>-1||a.indexOf("Windows 8")>-1)return"Win8"}return"other"},a.getBrowser=function(a){var b=window.navigator.userAgent,c="",d="";b.toLowerCase().indexOf("micromessenger")>-1?c="wechat":/Firefox/g.test(b)?(b=b.split(" "),c="Firefox",d=b[b.length-1].split("/")[1]):/MSIE/g.test(b)?(c="IE",b.indexOf("QQBrowser")>-1&&(c="QQBrowser"),b=b.split(";"),d=b[1].split(" ")[2]):/Opera/g.test(b)?(b=b.split(" "),c="Opera",d=b[b.length-1].split("/")[1]):/Chrome/g.test(b)?(b=b.split(" "),c="Chrome",d=b[b.length-2].split("/")[1]):/^apple\s+/i.test(navigator.vendor)?(b=b.split(" "),c="Safair",d=b[b.length-2].split("/")[1]):c="others";var e=d.split(".");return e.length>1&&(d=e[0]+"."+e[1]),a?c+d:c},a}angular.module("app").factory("UtilService",a)}(),function(){function a(a,c){var d={},e={line:1,column:2,columnstack:3,bar:4,area:5,areastack:6,arealiner:7,pie:8,funnel:9,columnline:10,barY:11};d.getOption=function(d,f,g){var h=new b(c,g,a),i=h.init(d,g),j=[];if(e[f]==e.line)j=h.lineChart();else if(e[f]==e.area)j=h.areaChart();else if(e[f]==e.areastack)j=h.areaChart(!0,!1);else if(e[f]==e.arealiner)j=h.areaChart(!1,!0);else if(e[f]==e.column)j=h.columnChart(!1),i.yAxis[0].axisTick=i.xAxis[0].axisTick,i.yAxis[0].axisLine=i.xAxis[0].axisLine;else if(e[f]==e.columnstack)j=h.columnChart(!0,g.flag),i.yAxis[0].axisTick=i.xAxis[0].axisTick,i.yAxis[0].axisLine=i.xAxis[0].axisLine;else if(e[f]==e.bar)j=h.barChart(),i.yAxis[0]=h.getXaxis2(),i.xAxis[0]=h.getYaxis2(),i.grid.right=20;else if(e[f]==e.funnel)j=h.funnelChart(),i.tooltip=h.funnelTooltip();else if(e[f]==e.columnline)j=h.columnLineChart(),i.yAxis[0].axisTick=i.xAxis[0].axisTick,i.yAxis[0].axisLine=i.xAxis[0].axisLine,i.yAxis.push(h.getYaxis(!0));else if(e[f]==e.barY){j=h.barChart(!0),i.yAxis[0]=h.getXaxis2(),i.xAxis[0]=h.getYaxis2(),i.grid.right=20,i.grid.top=0;for(var k=d.name,l=k.length-1,m=0;m<l;m++)i.xAxis.push(h.getYaxis2()),i.xAxis[m+1].show=!1}return i.series=j,angular.isDefined(g.color)&&(i.color=g.color),angular.isDefined(g.legend)&&(i.legend.show=g.legend),i};var f=new b(c);return d.getPieOption=function(a,b,c){return f.pieChart(a,c)},d.getMapOption=function(a,b,c){return f.mapChart(a,c)},d.getLoginMapOption=function(a,b,c){return f.loginMapChart(a,c)},d}function b(a,b,d){var e="#666666",f="#d5d7d8",g="SimHei,Arial",h="#666666",i=12;this.UtilService=a,this.init=function(a,b){this.data=a.val,this.name=a.name,this.key=a.key,this.chartData=a,this.config=b;var c=this.commonOptions();return c.xAxis=[this.getXaxis()],c.yAxis=[this.getYaxis()],c},this.commonOptions=function(a){var c="";this.config.ispercent&&1==this.config.ispercent&&(c+="%");var e=[],j=0,k={};if(this.name&&this.name.length>0){for(var l=0;l<this.name.length;l++){var m=this.name[l].lastIndexOf("_");e.push({name:b.flag?this.name[l].slice(0,-1==m?this.name[l].length-1:m):this.name[l],icon:"rect"})}if(this.config.hidelast)for(var l=this.config.hidelast;l>0;l--){var n=this.name.slice(0-l)[0];k[n]=!1}}var o="",p=this;return this.config.title&&(o=this.config.title,0!=this.config.legend&&(j=30)),{title:{text:o,textStyle:{color:h,fontSize:i,fontFamily:g},left:"center"},legend:{data:e,top:j,textStyle:{color:h,fontSize:i,fontFamily:g},itemWidth:10,itemHeight:10,formatter:function(a){return e.length>2?echarts.format.truncateText(a,80,"14px Microsoft Yahei","…"):a},tooltip:{show:!0},selected:k},grid:{left:10,top:j+40,bottom:10,right:0,containLabel:!0},tooltip:{trigger:b.flag&&"hasGro"!=b.flag&&"nohasGro"!=b.flag?"item":"axis",formatter:function(a){var e,f=a.length,g="";if(b.flag&&"hasGro"!=b.flag&&"nohasGro"!=b.flag){var h=a.seriesName;return null!=a.value&&"-"!=a.value&&(g+='<span style="color:'+a.color+'">●</span>'+h+" : "+p.UtilService.decimal2(a.value,2)+c,p.config.lastprecent&&(g+="%"),p.config.namesub&&p.config.namesub.length>0&&p.config.namesub[a.seriesIndex]&&(g+=p.config.namesub[a.seriesIndex]),g+="<br/>"),g=a.name+"<br/>"+g}for(var i=0;i<f;i++){e=a[i];var h=e.seriesName;null!=e.value&&"-"!=e.value&&(g+='<span style="color:'+e.color+'">●</span>'+h+" : "+p.UtilService.decimal2(e.value,2)+c,p.config.lastprecent&&i==f-1&&(g+="%"),p.config.namesub&&p.config.namesub.length>0&&p.config.namesub[i]&&(g+=p.config.namesub[i]),g+="<br/>")}return g=e.name+"<br/>"+g,b.id?(d.$emit("tooltipObj",{objs:a,id:b.id,flag:b.flag}),""):g},axisPointer:{type:"hasGro"==b.flag||"nohasGro"==b.flag?"shadow":"line",lineStyle:{color:f}}},toolbox:{show:!0,feature:{mark:{show:!1},dataView:{show:!1,readOnly:!1},saveAsImage:{show:!1}}},calculable:!1,color:["#e8340e","#0088cc","#61a0a8","#d48265","#91c7ae","#749f83","#ca8622","#bda29a","#6e7074","#546570","#2f4554","#006000","#642100","#6c3365","#484891","#844200","#006030","#003e3e","#584b00","#336666"]}},this.getXaxis=function(a){var b=this;return{type:"category",data:this.key,splitLine:{show:!1},axisLabel:{textStyle:{color:e,fontSize:i,fontFamily:g},formatter:function(a){if(a){var c=b.UtilService.splitString(a,12);return b.config.issmart&&c.len>12?c.str+"...":a}}},axisTick:{lineStyle:{color:f}},axisLine:{lineStyle:{color:f}}}},this.getXaxis2=function(a){var b=this;return{type:"category",data:this.key,splitLine:{show:!1},axisLabel:{textStyle:{color:e,fontSize:i,fontFamily:g},formatter:function(a){if(angular.isUndefined(a))return"";var c=b.UtilService.splitString(a,12);return c.len>12?c.str+"...":a}},axisTick:{lineStyle:{color:f}},axisLine:{lineStyle:{color:f}},inverse:!0}},this.getYaxis=function(a){var b="";return(this.config.ispercent&&1==this.config.ispercent||a)&&(b+="%"),{type:"value",axisLabel:{textStyle:{color:e,fontSize:i,fontFamily:g},formatter:function(a){return c(a)+b}},axisTick:{show:!1,lineStyle:{opacity:0}},axisLine:{show:!1},splitLine:{show:!0,lineStyle:{color:f,type:"dashed"}},min:0,splitNumber:4}},this.getYaxis2=function(){var a="";return this.config.ispercent&&1==this.config.ispercent&&(a+="%"),{type:"value",axisLabel:{textStyle:{color:e,fontSize:i,fontFamily:g},formatter:function(b){return c(b)+a}},axisTick:{lineStyle:{color:f}},axisLine:{lineStyle:{color:f}},splitLine:{show:!1},min:0,splitNumber:3}},this.lineChart=function(){for(var a=[],b=0;b<this.name.length;b++){var c={};c.name=this.name[b],c.type="line",c.lineStyle={normal:{width:1.2}},c.smooth=!0,c.data=this.data[b],a[b]=c}return a},this.areaChart=function(a,b){var c=[],d=.25;this.config.opacity&&(d=this.config.opacity);for(var e=0;e<this.name.length;e++){var f={};f.name=this.name[e],f.type="line",f.data=this.data[e],a&&(f.stack="总量"),f.smooth=!0,f.areaStyle={normal:{opacity:d}},b&&(f.areaStyle.normal.color=new echarts.graphic.LinearGradient(0,0,0,1,[{offset:0,color:this.config.color[e]},{offset:1,color:"#fff"}])),f.lineStyle={normal:{width:1.2}},c[e]=f}return c},this.columnChart=function(a,b){for(var c=[],d=[],e=0;e<this.name.length;e++){var f={},g=this.name[e].lastIndexOf("_");f.name=b?this.name[e].slice(0,-1==g?this.name[e].length:g):this.name[e],f.type="bar",f.barMaxWidth=18,f.barGap=0,f.data=this.data[e],a&&(f.stack="总量"+(b?this.name[e].slice(-1==g?0:g):""));var h="";h=d.indexOf(f.name)>-1?c[e-1].itemStyle.normal.color:this.config.color[e],f.itemStyle={normal:{color:h}},b||(f.itemStyle.emphasis={color:this.config.color[e]}),d.push(f.name),c[e]=f}return c},this.barChart=function(a){for(var b=[],d=0;d<this.name.length;d++){var e={};e.name=this.name[d],e.type="bar",this.config.barwidth?e.barMaxWidth=this.config.barwidth:(e.barMaxWidth=18,e.barGap=0),a&&(e.xAxisIndex=d),e.data=this.data[d],this.config.isbartext&&1==this.config.isbartext&&(e.label={normal:{show:!0,position:"right",formatter:function(a){var b=a.data;return b>0?c(b):""}}}),b[d]=e}return b},this.pieChart=function(a,b){var c=a.name,d=a.key,e=a.val[0],f=[];return e&&d.filter(function(b,d){var g=[];c.filter(function(a,c){g.push({value:e[b][c],name:a})});var h={type:"pie",clockwise:!1,label:{normal:{show:!(c.length>20)}},radius:[0,120],center:1==a.key.length?["50%","50%"]:0==d?["25%","50%"]:["75%","50%"],selectedOffset:5,data:g};f.push(h)}),{tooltip:{trigger:"item",formatter:"{b}: {c} ({d}%)"},legend:{show:!1},color:b.color,series:f}},this.funnelTooltip=function(){var a=this,b="用户";return 0==this.config.isdevice&&(b="用户"),{trigger:"axis",formatter:function(c){if("markPoint"==c.componentType)return"转化率"+c.value;c.length>0&&(c=c[0]);var d=c.dataIndex;if(d>0){var e="";return c?(e=c.name+"的"+b+"个数:"+a.data[2][d]+"<br/>",e+=a.key[0]+"到"+c.name+"的"+b+"转化成功率:"+a.data[0][d]+"%"):e="",e}return c.name+"的"+b+"个数:"+a.data[2][0]}}},this.funnelChart=function(){var a=this,b=this.config.barwidth,c=[],d=[],e="image:///images/chartarrow.png",f=[54,26],h=this.key.length;if(h>0){var i=(b-70)/h,j=80,k="insideTop",l="#ffffff";if(h>5&&(j=40),1==this.config.issmart)h>5?(e="image:///images/chartarrow2.png",f=[10,10],i=(b-20)/h,j=30,k="insideTop",l="#666"):j=45;else for(var m=this.chartData.trans4last,n=0;n<m.length;n++)c.push({value:m[n]+"%",x:40+5*n+i*(n+1)+"px",y:"50%"});for(var n=0;n<2;n++){var o={};o.type="bar",o.stack="转化率",o.barMaxWidth=j,o.barGap=0,o.data=this.data[n],0==n&&(o.label={normal:{show:!0,position:k,formatter:function(b){return 0==b.value&&0==a.data[2][b.dataIndex]||b.value<10?"":a.UtilService.decimal2(b.value)+"%"},textStyle:{color:l,fontFamily:g}}},o.itemStyle={normal:{color:this.config.color[0],textStyle:{color:"#ffffff",fontFamily:g}}}),1==n&&(o.itemStyle={normal:{color:this.config.color[1]},emphasis:{color:this.config.color[1]}}),o.markPoint={show:!0,symbol:e,symbolSize:f,label:{normal:{formatter:function(b){return h>5&&1==a.config.issmart?"":b.value},textStyle:{color:"#ffffff",fontFamily:g}},emphasis:{formatter:function(a){return a.value}}},data:c},d[n]=o}}return d},this.mapChart=function(a,b){var c=a.name,d=a.key,f=a.val[0],h=[],i=0;if(f&&f.length>0){var i=this.UtilService.getMaxByArray(f);i=100*Math.ceil(i/100),d.filter(function(a,b){h.push({value:f[b],name:a})})}return{tooltip:{trigger:"item",formatter:function(a){return isNaN(a.value)?a.name:a.name+"<br/>"+a.seriesName+":"+a.value}},visualMap:{min:0,max:i,color:["#7ec3f2","#dcebf4"]},series:[{name:c[0],type:"map",mapType:"china",selectedMode:"multiple",top:20,bottom:20,label:{normal:{show:!0,textStyle:{fontSize:4,color:e,fontFamily:g}},emphasis:{show:!0}},itemStyle:{normal:{areaColor:"#eeeeee",borderColor:"#858585"},emphasis:{areaColor:"#1fb9e9"}},data:h}]}},this.loginMapChart=function(a,b){var c=a.name,d=a.key,f=a.val[0],h=[],i=0;if(f&&f.length>0){var i=this.UtilService.getMaxByArray(f);i=100*Math.ceil(i/100),d.filter(function(a,b){h.push({value:f[b],name:a})})}return{tooltip:{trigger:"item",show:!1,formatter:function(a){return isNaN(a.value)?a.name:a.name+"<br/>"+a.seriesName+":"+a.value}},series:[{name:c[0],type:"map",mapType:"china",selectedMode:"multiple",top:20,bottom:20,label:{normal:{show:!1,textStyle:{fontSize:4,color:e,fontFamily:g}},emphasis:{show:!0}},itemStyle:{normal:{areaColor:"#424250",borderColor:"#1e1e26"},emphasis:{areaColor:"#3c3c4a"}},data:h}]}},this.columnLineChart=function(){for(var a=[],b=this.name.length,c=0;c<b;c++){var d={};d.name=this.name[c],d.barMaxWidth=18,d.barGap=0,d.data=this.data[c],c==b-1?(d.type="line",d.yAxisIndex=1):d.type="bar",d.itemStyle={normal:{color:this.config.color[c]},emphasis:{color:this.config.color[c]}},a[c]=d}return a}}function c(a){return a>999&a<1e4?(a/1e3).toFixed(1).toString()+"k":a>=1e4&&a<1e6?(a/1e4).toFixed(1).toString()+"w":a>=1e6&&a<1e9?(a/1e6).toFixed(1).toString()+"m":a>=1e9?(a/1e9).toFixed(1).toString()+"b":a}angular.module("app").factory("OptionService",["$rootScope","UtilService",a])}(),function(){"use strict";function a(){var a={};return a.getDay=function(a){var b=new Date,c=function(a){var b=a.getFullYear(),c=a.getMonth()+1,d=a.getDate();return c<10&&(c="0"+c),d<10&&(d="0"+d),b+"-"+c+"-"+d},d=b.getTime()+864e5*a;return b.setTime(d),c(b)},a.getYearWeekList=function(a){if(void 0===a){a=(new Date).getFullYear()}var b=[],c=new Date(a,0,1),d=c.getDay(),e=new Date(a,11,31);d=0==d?7:d;var f=c.clone().addDays(7-d),g=0;for(d>0&&d<5&&(g=1,b.push({week:g,date:f,year:a}));f<e&&!e.isSameDay(f);)g++,f=f.clone().addDays(7),b.push({week:g,date:f,year:a});var h=new Date(a,11,31),i=h.getDay();return i>0&&i<4&&b.pop(),b},a.getYearWeekCount=function(b){return a.getYearWeekList(b).length},a.getNowWeekNum=function(){var a=Date.today(),b=new Date(a.getFullYear(),0,1),c=b.getDay(),d=b.clone(),e=0;c>0&&(d=d.addDays(8-c),e=1);var f=diffDate(d,a);return Math.ceil(f/7)+e},a.getToday=function(){return{startDate:a.getDay(0),endDate:a.getDay(0)}},a.getYesDay=function(){return{startDate:a.getDay(-1),endDate:a.getDay(-1)}},a.getLastDays=function(b,c){return angular.isUndefined(c)&&(c=-1),0==c&&b<0&&(b+=1),0==c&&b>0&&(b-=1),{startDate:a.getDay(b),endDate:a.getDay(c)}},a.getLastWeeks=function(b){var c=a.getNowWeekNum(),d=new Date,e=d.getFullYear(),f={end:e+a.getStr(c)},g=b+c+1;if(g>0)f.start=e+a.getStr(g);else{var h=a.getYearWeekCount(e-1);f.start=e-1+a.getStr(h+g)}return f},a.getLastMonths=function(b){var c=new Date,d=c.getFullYear(),e=c.getMonth()+1,f={end:d+a.getStr(e)},g=e+b+1;return f.start=g>0?d+a.getStr(g):d-1+a.getStr(12+g),f},a.getStr=function(a){return a<10?"0"+a:a+""},a.getWeekRangeDate=function(a,b){a=a||0;var c=new Date,d=c.getDay();d=0==d?7:d;var e=c.clone().addDays(1-d),f=c;return a>0?(e=e.clone().addDays(7*a),f=e.clone().addDays(6)):a<0&&(f=e.clone().addDays(7*(a+1)-1),e=e.clone().addDays(7*a)),b&&-1==b&&Date.isSameDay(f,Date.today())&&(e==f?e=f=f.clone().addDays(-1):f=f.clone().addDays(-1)),{startDate:e.Format("yyyy-MM-dd"),endDate:f.Format("yyyy-MM-dd")}},a.getMonthRangeDate=function(a,b){a=a||0;var c=new Date,d=c.getFullYear(),e=c.getMonth(),f=c.getDate(),g=null,h=null;return 0!=a?(e+=a,e<0&&(e+=11,--d),f=Date.getDaysInMonth(d,e),h=new Date(d,e,f),g=h.clone(),g.setDate(1)):(b&&-1==b&&(f+=-1),g=c.clone(),h=c,g.setDate(1),h.setDate(f)),{startDate:g.Format("yyyy-MM-dd"),endDate:h.Format("yyyy-MM-dd")}},a.getDaysNum=function(a,b){var c,d,e="-";c=a.split(e),d=b.split(e);var f=new Date(c[0],c[1]-1,c[2]),g=new Date(d[0],d[1]-1,d[2]);return parseInt(Math.abs(f-g)/1e3/60/60/24)},a}angular.module("app").factory("DateService",a)}(),function(){function a(a,b,c,d,e,f){TrackingIO.init(e.getTKAppkey()),a.now=c.getYesDay().startDate,a.reportDate=c.getYesDay().startDate,a.isrember=!1,a.isonline=!0;var g=e.getCookie("ryioUname"),h=e.getCookie("ryioUpass");e.isNullStr(g)||(a.name=g),e.isNullStr(h)||(a.password=h);var i="";a.getImgInfo=function(){var a=new Array(1,2,3,4,5,6,7,8,9,"a","b","c","d","e","f","g","h","j","k","l","m","n","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z");i="";for(var b=a.length,c=0;c<4;c++){var d=Math.floor(Math.random()*b);i+=a[d]}document.getElementById("imgMa").src="api/login/getvalidcode?code="+i},a.getImgInfo(),a.doLogin=function(){var b={email:a.name,password:a.password,autologin:a.isonline,isrember:a.isrember},c={name:{key:"isNull",val:b.email},password:{key:"isNull",val:b.password},yema:{key:"isNull",val:a.yema}};return a.tip=formJudge(c),1==a.tip.succ&&(angular.uppercase(a.yema)!=angular.uppercase(i)?(a.tip={yema:{status:!0,txt:"验证码错误"}},a.getImgInfo(),!1):void f.getInfo("login/loginweb",b).then(function(b){if(200==b.code){var c=b.account,d=b.token;if(-3==c.status)a.noActive=1,a.registerId=c.id,e.setCookie("regId",c.id,7),e.setCookie("regEmail",a.name,7),e.setCookie("regFlag",0,7);else{TrackingIO.loggedin(c.email),e.setCookie("ryioUid",c.id,7),e.setCookie("ryioUname",c.email,7),window.localStorage.setItem("ry_user",JSON.stringify(c)),e.setCookie("ryioToken",d,7),e.setCookie("ryioPastDate",c.pastDate,7),e.setCookie("ryioStatus",c.status,7),e.setCookie("ryioActiveStatus",c.activeStatus,7),e.setCookie("ryioIcon",0,7);var f=1==c.isSuperUser&&1!=c.isChannelPerson;e.setCookie("ryioIsSuper",f,7),e.setCookie("ryioRole",c.roleCategory,7),1!=b.account.activeStatus&&1==b.account.status&&1==f?(e.setCookie("regId",c.id,7),e.setCookie("regEmail",a.name,7),e.setCookie("regFlag",1,7),window.location.href="olduser.html"):1==b.account.status?1==c.roleCategory||f?window.location.href="index.html#/manage/app":window.location.href="index.html":window.location.href="index.html#/active/product"}}else a.tip={password:{status:!0,txt:b.msg}}}))},a.noActive=0,a.closeWin=function(){a.noActive=0,a.loginSend="yes"},a.loginSend="yes",a.sendAgain=function(){a.loginSend="no",f.getInfo("reged/sendeactivemail/"+a.registerId+"/0").then(function(a){window.location.href="activation.html"})},a.keyEvt=function(b){13==b.keyCode&&a.doLogin()}}angular.module("app.login").controller("loginCtrl",["$scope","OptionService","DateService","$filter","UtilService","HttpService",a])}();
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>灵犀</title>
<meta name="keywords" content="热云数据 灵犀" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/login.css?r=0.760400326224044">
<script src="scripts/change.js?r=0.6985495439730585"></script>
<script src="scripts/regcom8.js?r=0.22244378668256104"></script>
<script src="scripts/success.js?r=0.7736186757683754"></script>
</head>
<body ng-app="app" ng-controller="successCtrl">
<div class="loginWrap register">
<div class="activationWrap">
<a class="logo" href="login.html"></a>
<div class="registerActivation">已激活成功</div>
<a href="/login.html"><div class="activationButton successButton">立即登录</div></a>
</div>
</div>
<div class="copyright regt" ng-class="{'static':!hasReged}">
2017 TrackingIO.com All Rights Reserved <a href="http://www.miitbeian.gov.cn/" target="_blank">京ICP备14021832号</a>
</div>
<div class="alphaDiv" id="sysLoad" style="display: none;z-index: 99;">
<div class="spinner">
<div class="rect1"></div>
<div class="rect2"></div>
<div class="rect3"></div>
<div class="rect4"></div>
<div class="rect5"></div>
</div>
</div>
</body>
</html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment