Commit cfadd04a by manxiaoqiang

reged

parent 60859064
...@@ -69,6 +69,35 @@ ...@@ -69,6 +69,35 @@
<orderEntry type="library" name="Maven: ch.qos.logback:logback-access:1.1.3" level="project" /> <orderEntry type="library" name="Maven: ch.qos.logback:logback-access:1.1.3" level="project" />
<orderEntry type="library" name="Maven: org.logback-extensions:logback-ext-spring:0.1.2" level="project" /> <orderEntry type="library" name="Maven: org.logback-extensions:logback-ext-spring:0.1.2" level="project" />
<orderEntry type="library" name="Maven: org.javassist:javassist:3.20.0-GA" level="project" /> <orderEntry type="library" name="Maven: org.javassist:javassist:3.20.0-GA" level="project" />
<orderEntry type="module-library">
<library name="Maven: com.dianping.cat:cat-client:2.0.0">
<CLASSES>
<root url="jar://$MODULE_DIR$/lib/cat-client-2.0.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Maven: com.dianping.cat:cat-core:2.0.0">
<CLASSES>
<root url="jar://$MODULE_DIR$/lib/cat-core-2.0.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Maven: org.unidal.framework:foundation-service:4.0.0">
<CLASSES>
<root url="jar://$MODULE_DIR$/lib/foundation-service-4.0.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="Maven: io.netty:netty-all:4.0.23.Final" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:1.6" level="project" />
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.25" level="project" /> <orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.25" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.8.5" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.8.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.8.5" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.8.5" level="project" />
...@@ -246,7 +275,6 @@ ...@@ -246,7 +275,6 @@
<orderEntry type="library" name="Maven: org.codehaus.janino:janino:2.7.6" level="project" /> <orderEntry type="library" name="Maven: org.codehaus.janino:janino:2.7.6" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.janino:commons-compiler:2.7.6" level="project" /> <orderEntry type="library" name="Maven: org.codehaus.janino:commons-compiler:2.7.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.calcite:calcite-avatica:1.0.0-incubating" level="project" /> <orderEntry type="library" name="Maven: org.apache.calcite:calcite-avatica:1.0.0-incubating" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.2.4" level="project" />
<orderEntry type="library" name="Maven: jline:jline:2.12" level="project" /> <orderEntry type="library" name="Maven: jline:jline:2.12" level="project" />
<orderEntry type="library" name="Maven: org.apache.hbase:hbase-common:1.2.0-cdh5.12.1" level="project" /> <orderEntry type="library" name="Maven: org.apache.hbase:hbase-common:1.2.0-cdh5.12.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.hbase:hbase-protocol:1.2.0-cdh5.12.1" level="project" /> <orderEntry type="library" name="Maven: org.apache.hbase:hbase-protocol:1.2.0-cdh5.12.1" level="project" />
......
...@@ -54,17 +54,19 @@ ...@@ -54,17 +54,19 @@
<redis.event.port>6379</redis.event.port> <redis.event.port>6379</redis.event.port>
<redis.event.database>0</redis.event.database> <redis.event.database>0</redis.event.database>
<!--Redis setting//end--> <!--Redis setting//end-->
<admin.url>http://localhost:8080</admin.url>
<awsneed>false</awsneed> <awsneed>false</awsneed>
<mail.host>smtp.exmail.qq.com</mail.host> <mail.host>smtp.exmail.qq.com</mail.host>
<mail.username>service1@reyun.com</mail.username> <mail.username>manager@reyun.com</mail.username>
<mail.password>3xy9cUFpe4VdPuoH</mail.password> <mail.password>Reyun123</mail.password>
<mail.content_type>text/plain;charset\=GBK</mail.content_type> <mail.content_type>text/plain;charset\=GBK</mail.content_type>
<mail.list>zhangliang@reyun.com</mail.list> <mail.list>zhangliang@reyun.com</mail.list>
<mail.valid_time>4320</mail.valid_time> <mail.valid_time>4320</mail.valid_time>
<report.url>http://172.31.1.122:9010</report.url>
<presto.driver>com.facebook.presto.jdbc.PrestoDriver</presto.driver> <presto.driver>com.facebook.presto.jdbc.PrestoDriver</presto.driver>
<presto.url>jdbc:presto://172.31.21.99:18889/hive/default</presto.url> <presto.url>jdbc:presto://172.31.21.99:18889/hive/default</presto.url>
<presto.username>root</presto.username> <presto.username>root</presto.username>
...@@ -121,7 +123,7 @@ ...@@ -121,7 +123,7 @@
<hive.driver>org.apache.hive.jdbc.HiveDriver</hive.driver> <hive.driver>org.apache.hive.jdbc.HiveDriver</hive.driver>
<hive.url>jdbc:hive2://172.31.25.200:10000/tkio_bigtable</hive.url> <hive.url>jdbc:hive2://172.31.25.200:10000/tkio_bigtable</hive.url>
<hive.username>root</hive.username> <hive.username>root</hive.username>
<report.url>http://172.31.1.122:9010</report.url>
<!--trackingio域名服务地址--> <!--trackingio域名服务地址-->
<account.check.url>http://52.83.173.174:8005</account.check.url> <account.check.url>http://52.83.173.174:8005</account.check.url>
...@@ -468,7 +470,39 @@ ...@@ -468,7 +470,39 @@
<version>3.20.0-GA</version> <version>3.20.0-GA</version>
</dependency> </dependency>
<!-- logger end --> <!-- logger end -->
<!-- cat -->
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-client</artifactId>
<version>2.0.0</version>
<scope>system</scope>
<systemPath>${pom.basedir}/lib/cat-client-2.0.0.jar</systemPath>
</dependency>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-core</artifactId>
<version>2.0.0</version>
<scope>system</scope>
<systemPath>${pom.basedir}/lib/cat-core-2.0.0.jar</systemPath>
</dependency>
<dependency>
<groupId>org.unidal.framework</groupId>
<artifactId>foundation-service</artifactId>
<version>4.0.0</version>
<scope>system</scope>
<systemPath>${pom.basedir}/lib/foundation-service-4.0.0.jar</systemPath>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.0.23.Final</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>1.6</version>
</dependency>
<!-- cat //End-->
<!-- database begin --> <!-- database begin -->
<dependency> <dependency>
......
package com.reyun.controller.manage; package com.reyun.controller.manage;
import com.dianping.cat.Cat;
import com.reyun.dic.LogEnumType; import com.reyun.dic.LogEnumType;
import com.reyun.model.Account; import com.reyun.model.Account;
import com.reyun.model.App; import com.reyun.model.App;
...@@ -14,9 +15,12 @@ import com.reyun.util.CipherUtil; ...@@ -14,9 +15,12 @@ import com.reyun.util.CipherUtil;
import com.reyun.util.Constant; import com.reyun.util.Constant;
import com.reyun.util.DateUtil; import com.reyun.util.DateUtil;
import com.reyun.util.HashAlgorithms; import com.reyun.util.HashAlgorithms;
import com.reyun.util.HttpClientUtil;
import com.reyun.util.IPAddrUtil; import com.reyun.util.IPAddrUtil;
import com.reyun.util.MailUtils; import com.reyun.util.MailUtils;
import com.reyun.util.RedisUtilNew;
import com.reyun.util.ResultModel; import com.reyun.util.ResultModel;
import com.reyun.util.StringUtil;
import com.reyun.util.ValidateUtil; import com.reyun.util.ValidateUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -56,23 +60,25 @@ public class RegedController { ...@@ -56,23 +60,25 @@ public class RegedController {
@Autowired @Autowired
UserLogService userLogService; UserLogService userLogService;
@Autowired @Autowired
BussinessManRepository bussinessManRepository; BussinessManRepository bussinessManRepository;
@Autowired @Autowired
AuthService authService; AuthService authService;
@Autowired @Autowired
BussinessManRepository bussinessRepository; BussinessManRepository bussinessRepository;
@Autowired
SystemParamRepository systemParamRepository;
private static final String ACTIVE_EMAIL_SEND_URL = Constant.accountCheckUrl + "/api/reged/active/"; @Autowired
SystemParamRepository systemParamRepository;
private static final String VERIFY_EMAIL_SEND_URL = Constant.adminUrl + "/api/tool/account/sendemail/";
private static final int VALID_EMAIL_EXPIRE_TIME = 5; private static final String ACTIVE_EMAIL_SEND_URL = Constant.accountCheckUrl + "/api/reged/active/";
/** private static final int VALID_EMAIL_EXPIRE_TIME = 5;
/**
* 网站首页注册帐号并发送激活邮件 * 网站首页注册帐号并发送激活邮件
* @param request * @param request
* @param resource * @param resource
...@@ -81,6 +87,7 @@ public class RegedController { ...@@ -81,6 +87,7 @@ public class RegedController {
@RequestMapping(value = "regedaccount",method = RequestMethod.POST) @RequestMapping(value = "regedaccount",method = RequestMethod.POST)
@ResponseBody @ResponseBody
public ResultModel createOrigi(HttpServletRequest request, @RequestBody Account resource) { public ResultModel createOrigi(HttpServletRequest request, @RequestBody Account resource) {
Cat.logMetricForCount("帐号注册(首页)");
Account accountDB = authService.check(resource.getEmail()); Account accountDB = authService.check(resource.getEmail());
if (accountDB != null) { if (accountDB != null) {
...@@ -96,8 +103,8 @@ public class RegedController { ...@@ -96,8 +103,8 @@ public class RegedController {
resource.setIsChannelPerson(false); resource.setIsChannelPerson(false);
resource.setActiveTime(System.currentTimeMillis()); resource.setActiveTime(System.currentTimeMillis());
resource.setActiveStatus(false); resource.setActiveStatus(false);
resource.setRoleCategory(0L); resource.setRoleCategory(0L);
resource.setDelFlag(false); resource.setDelFlag(false);
try { try {
resource.setRegIpAddr(IPAddrUtil.getIpAddr(request)); resource.setRegIpAddr(IPAddrUtil.getIpAddr(request));
resource.setRegIpLocation(IPAddrUtil.getLocationFromIpAddr(resource.getRegIpAddr())); resource.setRegIpLocation(IPAddrUtil.getLocationFromIpAddr(resource.getRegIpAddr()));
...@@ -106,16 +113,16 @@ public class RegedController { ...@@ -106,16 +113,16 @@ public class RegedController {
} }
Account account = accountRepository.save(resource); Account account = accountRepository.save(resource);
//更新rootParent //更新rootParent
account.setRootParent(account.getId()); account.setRootParent(account.getId());
accountRepository.save(account); accountRepository.save(account);
String token = HashAlgorithms.MD5("superuser_" + account.getId() + account.getActiveTime()); String token = HashAlgorithms.MD5("superuser_" + account.getId() + account.getActiveTime());
//2.发送邮件,激活 //2.发送邮件,激活
String activeInterfaceUrl = ACTIVE_EMAIL_SEND_URL+0+token+resource.getId(); String activeInterfaceUrl = ACTIVE_EMAIL_SEND_URL+0+token+resource.getId();
String subject = "TrackingIo账号激活"; String subject = "Io账号激活";
StringBuilder content = new StringBuilder(); StringBuilder content = new StringBuilder();
content.append("<!doctype html> <html><head></head><body> ") content.append("<!doctype html> <html><head></head><body> ")
...@@ -160,6 +167,7 @@ public class RegedController { ...@@ -160,6 +167,7 @@ public class RegedController {
@RequestMapping(value = "active/{message}" ,method = RequestMethod.GET) @RequestMapping(value = "active/{message}" ,method = RequestMethod.GET)
@ResponseBody @ResponseBody
public ModelAndView active(HttpServletRequest httpServletRequest,@PathVariable String message) throws IOException { public ModelAndView active(HttpServletRequest httpServletRequest,@PathVariable String message) throws IOException {
Cat.logMetricForCount("帐号激活");
String flagstr = message.substring(0,1); String flagstr = message.substring(0,1);
String tokenstr = message.substring(1,33); String tokenstr = message.substring(1,33);
...@@ -180,16 +188,33 @@ public class RegedController { ...@@ -180,16 +188,33 @@ public class RegedController {
//flag=0表示新用户激活 防止二次点击修改status //flag=0表示新用户激活 防止二次点击修改status
if(flagstr.equals("0") && one.getStatus()!= -1) if(flagstr.equals("0") && one.getStatus()!= -1)
{ {
one.setStatus(1); one.setStatus(-2);
} }
one.setActiveStatus(true); one.setActiveStatus(true);
one.setFlowRestrict(true); one.setFlowRestrict(true);
one.setPricelevel(6L);
one.setAllowBehavior(true);
one.setPastDate(DateUtil.getBeforeDays(-365));
Account result = this.accountRepository.save(one); Account result = this.accountRepository.save(one);
logger.info(result.toString()); logger.info(result.toString());
//加上判断,防止多次点击 和 老用户不用审核
if(one.getStatus() != -1 && "0".equals(flagstr)) {
/**
* 激活成功发送审核请求
*/
String ip = "unknown";
try {
ip = IPAddrUtil.getIpAddr(httpServletRequest);
} catch (Exception e) {
e.printStackTrace();
}
if (RedisUtilNew.getInstance().tryLock(account.getEmail()+account.getId(), VALID_EMAIL_EXPIRE_TIME) != null) {
logger.info("enter trylock_____________");
this.regedService.verifyAccount(result, ip);
}
else
{
logger.info("重复的审核请求");
}
}
return new ModelAndView("redirect:/success.html"); return new ModelAndView("redirect:/success.html");
} }
...@@ -204,6 +229,35 @@ public class RegedController { ...@@ -204,6 +229,35 @@ public class RegedController {
} }
} }
/**
* 激活后审核接口
* @param httpServletRequest
* @param id
* @return
*/
@RequestMapping(value = "verify/{id}" ,method = RequestMethod.GET)
@ResponseBody
public ResultModel verify(HttpServletRequest httpServletRequest,@PathVariable Long id)
{
Cat.logMetricForCount("帐号审核");
Account account = this.accountRepository.findOne(id);
//状态改为审核中
account.setStatus(-1);
account.setVerifyEmail(false);
Account result = this.accountRepository.save(account);
String token = HashAlgorithms.MD5("superuser_" + id);
String ipAddr = IPAddrUtil.getIpAddr(httpServletRequest);
//审核
logger.info("调用office系统接口, 发送审核邮件. accountid: {}", account.getId());
final String sendEmailUrl = VERIFY_EMAIL_SEND_URL + account.getId() + "/" + token + "?ip=" + (StringUtil.isEmpty(ipAddr) ? "" : ipAddr);
String reqResult = HttpClientUtil.doHttpGetRequest(sendEmailUrl, "io"); logger.info("调用office系统接口, 发送审核邮件. accountid: {}, result:{}", account.getId(), reqResult);
return ResultModel.OK(result);
}
/** /**
* 修改用户email * 修改用户email
...@@ -277,29 +331,29 @@ public class RegedController { ...@@ -277,29 +331,29 @@ public class RegedController {
String result = "failure"; String result = "failure";
Account account = this.accountRepository.findOne(id); Account account = this.accountRepository.findOne(id);
//判断用户是否已经激活 //判断用户是否已经激活
if (account.getStatus() > -2 && flag == 0) { if (account.getStatus() > -2 && flag == 0) {
result = "actived"; result = "actived";
} else if (account.getIsSuperUser()) { } else if (account.getIsSuperUser()) {
//更新激活时间 //更新激活时间
account.setActiveTime(new Date().getTime()); account.setActiveTime(new Date().getTime());
account.setActiveStatus(false); account.setActiveStatus(false);
this.accountRepository.save(account); this.accountRepository.save(account);
String token = HashAlgorithms.MD5("superuser_" + id + account.getActiveTime()); String token = HashAlgorithms.MD5("superuser_" + id + account.getActiveTime());
String activeInterfaceUrl = ACTIVE_EMAIL_SEND_URL + flag + token + id; String activeInterfaceUrl = ACTIVE_EMAIL_SEND_URL + flag + token + id;
Boolean emailResult = this.regedService.sendActiceEmail(activeInterfaceUrl, account.getId()); Boolean emailResult = this.regedService.sendActiceEmail(activeInterfaceUrl, account.getId());
if (emailResult) { if (emailResult) {
result = "success"; result = "success";
} else { } else {
return new ResultModel(250, "邮件发送失败", "邮件发送失败"); return new ResultModel(250, "邮件发送失败", "邮件发送失败");
} }
} }
return ResultModel.OK(result); return ResultModel.OK(result);
} }
...@@ -335,14 +389,14 @@ public class RegedController { ...@@ -335,14 +389,14 @@ public class RegedController {
Account account = this.accountRepository.findOne(id); Account account = this.accountRepository.findOne(id);
if(ValidateUtil.isValid(account)) if(ValidateUtil.isValid(account))
{ {
if("admin@reyun.com".equals(account.getEmail())||"demo@reyun.com".equals(account.getEmail())) if("admin@reyun.com".equals(account.getEmail())||"demo@reyun.com".equals(account.getEmail()))
{ {
result = "该账号密码不能修改"; result = "该账号密码不能修改";
} }
else else
{ {
result = this.regedService.updatepwd(id,pwd.get("newpwd"),pwd.get("token")); result = this.regedService.updatepwd(id,pwd.get("newpwd"),pwd.get("token"));
} }
} }
else else
......
...@@ -23,4 +23,6 @@ public interface RegedService { ...@@ -23,4 +23,6 @@ public interface RegedService {
public Boolean sendactivewhenUpdateEmail(String url,String newemail,Long time); public Boolean sendactivewhenUpdateEmail(String url,String newemail,Long time);
public void verifyAccount(Account account,String ip);
} }
...@@ -22,6 +22,7 @@ public class RegedServiceImpl implements RegedService { ...@@ -22,6 +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/";
@Override @Override
public Boolean sendActiceEmail(String url, Long id) { public Boolean sendActiceEmail(String url, Long id) {
...@@ -263,6 +264,24 @@ public class RegedServiceImpl implements RegedService { ...@@ -263,6 +264,24 @@ public class RegedServiceImpl implements RegedService {
return result; return result;
} }
@Override
public void verifyAccount(Account account, String ip) {
account.setStatus(-1);
Account result = this.accountRepository.save(account);
String token = HashAlgorithms.MD5("superuser_" + account.getId());
//审核
final String sendEmailUrl = VERIFY_EMAIL_SEND_URL + account.getId()+"/"+token + "?ip=" + (StringUtil.isEmpty(ip)?"":ip);
Thread sendEmailThread = new Thread(){
@Override
public void run(){
HttpClientUtil.doHttpGetRequest(sendEmailUrl,"trackingio");
}
};
sendEmailThread.setName("sendEmailThread");
sendEmailThread.start();
}
} }
...@@ -51,8 +51,8 @@ module.exports = function(grunt) { ...@@ -51,8 +51,8 @@ module.exports = function(grunt) {
connect: { connect: {
proxies: [{ proxies: [{
context: ['/api'], context: ['/api'],
host: 'localhost', // host: 'localhost',
//host: '192.168.2.9', host: '192.168.2.37',
port: 8091, port: 8091,
https: false, https: false,
xforward: true, xforward: true,
...@@ -152,7 +152,7 @@ module.exports = function(grunt) { ...@@ -152,7 +152,7 @@ module.exports = function(grunt) {
} }
} }
}, },
useminPrepare: { useminPrepare: {
html: ["<%= yeoman.app %>/index.html","<%= yeoman.app %>/login.html","<%= yeoman.app %>/activation.html","<%= yeoman.app %>/failure.html","<%= yeoman.app %>/forget.html","<%= yeoman.app %>/register.html","<%= yeoman.app %>/success.html","<%= yeoman.app %>/resetpwd.html","<%= yeoman.app %>/olduser.html","<%= yeoman.app %>/demo.html","<%= yeoman.app %>/home.html","<%= yeoman.app %>/main.html"], html: ["<%= yeoman.app %>/index.html","<%= yeoman.app %>/login.html","<%= yeoman.app %>/activation.html","<%= yeoman.app %>/failure.html","<%= yeoman.app %>/forget.html","<%= yeoman.app %>/register.html","<%= yeoman.app %>/success.html","<%= yeoman.app %>/resetpwd.html","<%= yeoman.app %>/olduser.html","<%= yeoman.app %>/demo.html","<%= yeoman.app %>/home.html","<%= yeoman.app %>/main.html"],
options: { options: {
...@@ -217,13 +217,13 @@ module.exports = function(grunt) { ...@@ -217,13 +217,13 @@ module.exports = function(grunt) {
"template/**/*.jpg", "template/**/*.jpg",
"*.ico" "*.ico"
] ]
}, },
{ {
expand: true, expand: true,
cwd: ".tmp/images", cwd: ".tmp/images",
dest: "<%= yeoman.dist %>/images", dest: "<%= yeoman.dist %>/images",
src: ["generated/*"] src: ["generated/*"]
}, },
{ {
expand: true, expand: true,
cwd: "", cwd: "",
...@@ -327,7 +327,7 @@ module.exports = function(grunt) { ...@@ -327,7 +327,7 @@ module.exports = function(grunt) {
else{ else{
dd.setDate(m-i); dd.setDate(m-i);
} }
arr.unshift(this.date(dd,'YYYY-MM-DD')); arr.unshift(this.date(dd,'YYYY-MM-DD'));
} }
return arr; return arr;
...@@ -388,6 +388,6 @@ module.exports = function(grunt) { ...@@ -388,6 +388,6 @@ module.exports = function(grunt) {
}); });
grunt.registerTask("build", ["clean:dist", "useminPrepare", "concurrent:dist", "copy:dist", "concat", "cssmin", "uglify", "usemin"]); grunt.registerTask("build", ["clean:dist", "useminPrepare", "concurrent:dist", "copy:dist", "concat", "cssmin", "uglify", "usemin"]);
return grunt.registerTask("default", ["build"]); return grunt.registerTask("default", ["build"]);
}; };
...@@ -7,10 +7,10 @@ ...@@ -7,10 +7,10 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <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"> <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="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/login.css?r=0.2909022173844278"> <link rel="stylesheet" href="styles/login.css?r=0.3226349928881973">
<script src="scripts/change.js?r=0.030827486654743552"></script> <script src="scripts/change.js?r=0.7112433344591409"></script>
<script src="scripts/regcom1.js?r=0.3052951830904931"></script> <script src="scripts/regcom1.js?r=0.8485788230318576"></script>
<script src="scripts/regui.js?r=0.25714277545921504"></script> <script src="scripts/regui.js?r=0.6336440013255924"></script>
</head> </head>
<body ng-app="app" ng-controller="acvitationCtrl"> <body ng-app="app" ng-controller="acvitationCtrl">
......
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <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"> <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="shortcut icon" href="favicon.ico" type="image/x-icon">
<script src="scripts/change.js?r=0.08680267073214054"></script> <script src="scripts/change.js?r=0.8273717106785625"></script>
<script src="scripts/demo.js?r=0.045918663730844855"></script> <script src="scripts/demo.js?r=0.6742043008562177"></script>
<script type="text/javascript"> <script type="text/javascript">
$.get("/api/demo",function(data) { $.get("/api/demo",function(data) {
......
...@@ -7,10 +7,10 @@ ...@@ -7,10 +7,10 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <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"> <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="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/login.css?r=0.37783288047648966"> <link rel="stylesheet" href="styles/login.css?r=0.004987573949620128">
<script src="scripts/change.js?r=0.3716961811296642"></script> <script src="scripts/change.js?r=0.7360319485887885"></script>
<script src="scripts/regcom2.js?r=0.37709248601458967"></script> <script src="scripts/regcom2.js?r=0.9184650341048837"></script>
<script src="scripts/failure.js?r=0.3122320701368153"></script> <script src="scripts/failure.js?r=0.9326669548172504"></script>
</head> </head>
<body ng-app="app" ng-controller="failureCtrl"> <body ng-app="app" ng-controller="failureCtrl">
......
...@@ -7,10 +7,10 @@ ...@@ -7,10 +7,10 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <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"> <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="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/login.css?r=0.6608913082163781"> <link rel="stylesheet" href="styles/login.css?r=0.8714517550542951">
<script src="scripts/change.js?r=0.30872130882926285"></script> <script src="scripts/change.js?r=0.722045328002423"></script>
<script src="scripts/regcom3.js?r=0.47114668297581375"></script> <script src="scripts/regcom3.js?r=0.9209529019426554"></script>
<script src="scripts/forget.js?r=0.03463357547298074"></script> <script src="scripts/forget.js?r=0.02848458243533969"></script>
</head> </head>
<body ng-app="app" ng-controller="forgetCtrl"> <body ng-app="app" ng-controller="forgetCtrl">
......
...@@ -7,11 +7,11 @@ ...@@ -7,11 +7,11 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <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"> <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="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/home.css?r=0.8068126861471683"> <link rel="stylesheet" href="styles/home.css?r=0.12386019225232303">
<script src="scripts/change.js?r=0.7223377269692719"></script> <script src="scripts/change.js?r=0.012064240872859955"></script>
<script src="scripts/home.js?r=0.3399517161305994"></script> <script src="scripts/home.js?r=0.8174812090583146"></script>
<script src="scripts/homectrl.js?r=0.7286222137045115"></script> <script src="scripts/homectrl.js?r=0.19571213447488844"></script>
<script> <script>
var _hmt = _hmt || []; var _hmt = _hmt || [];
......
...@@ -8,12 +8,12 @@ ...@@ -8,12 +8,12 @@
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport"> <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="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/index.css?r=0.15496363677084446"> <link rel="stylesheet" href="styles/index.css?r=0.37707017827779055">
<script src="scripts/change.js?r=0.8926405222155154"></script> <script src="scripts/change.js?r=0.820802059955895"></script>
<script src="scripts/com.js?r=0.8612561319023371"></script> <script src="scripts/com.js?r=0.2901791038457304"></script>
<script src="scripts/app.js?r=0.24742182483896613"></script> <script src="scripts/app.js?r=0.8841697168536484"></script>
<script src="scripts/ui.js?r=0.9506633128039539"></script> <script src="scripts/ui.js?r=0.6637934029567987"></script>
</head> </head>
<body ng-app="app" ng-controller="indexCtrl" ng-class="{'noreport':backReport}"> <body ng-app="app" ng-controller="indexCtrl" ng-class="{'noreport':backReport}">
...@@ -26,8 +26,8 @@ ...@@ -26,8 +26,8 @@
</div> </div>
<div class="rightHeader clearfix"> <div class="rightHeader clearfix">
<div class="mainMenu" ng-class="{'mainShow':hasMenuFlag || isall}"> <div class="mainMenu" ng-class="{'mainShow':hasMenuFlag || isall}">
<div ng-class="{'active':mainMenu=='behavior'}" ng-click="showSubMenus('behavior')" ng-if="showMenuFlag.behavior || isall">行为分析</div> <div ng-class="{'active':mainMenu=='behavior'}" ng-click="showSubMenus('behavior')">行为分析</div>
<!-- <div ng-class="{'active':mainMenu=='export'}" ng-click="showSubMenus('export')" ng-if="showMenuFlag.export || isall">数据导出</div> --> <div ng-class="{'active':mainMenu=='export'}" ng-click="showSubMenus('export')">数据导出</div>
<div ng-class="{'active':mainMenu=='management'}" ng-click="showSubMenus('management')">管理中心</div> <div ng-class="{'active':mainMenu=='management'}" ng-click="showSubMenus('management')">管理中心</div>
</div> </div>
...@@ -46,6 +46,19 @@ ...@@ -46,6 +46,19 @@
<span class="mr10">注册会员</span> <span class="mr10">注册会员</span>
<span style="cursor: default;">升级套餐,请联系商务</span> <span style="cursor: default;">升级套餐,请联系商务</span>
</div> </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"> <div class="itemInfo light" ng-if="!preStatus">
有效期至:<span ng-class="{'error':pastLong <= 0}">{{userPastDate}}</span> 有效期至:<span ng-class="{'error':pastLong <= 0}">{{userPastDate}}</span>
</div> </div>
...@@ -127,8 +140,40 @@ ...@@ -127,8 +140,40 @@
<div class="btn8" ng-click="okCust()">确定</div> <div class="btn8" ng-click="okCust()">确定</div>
</div> </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>
<div class="helpTipWrap winTips" id="winTC"></div> <div class="helpTipWrap winTips" id="winTC"></div>
</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> </body>
</html> </html>
...@@ -7,11 +7,11 @@ ...@@ -7,11 +7,11 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <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"> <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="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/login.css?r=0.6724015795625746"> <link rel="stylesheet" href="styles/login.css?r=0.09618336986750364">
<script src="scripts/change.js?r=0.37141271703876555"></script> <script src="scripts/change.js?r=0.05420921300537884"></script>
<script src="scripts/lgcom4.js?r=0.6735840095207095"></script> <script src="scripts/lgcom4.js?r=0.7121068546548486"></script>
<script src="scripts/lgui.js?r=0.5855049260426313"></script> <script src="scripts/lgui.js?r=0.24842062732204795"></script>
<script> <script>
var _hmt = _hmt || []; var _hmt = _hmt || [];
...@@ -58,10 +58,10 @@ ...@@ -58,10 +58,10 @@
<div class="errorWrap"></div> <div class="errorWrap"></div>
<div class="loginBtn" ng-click="doLogin()">登录</div> <div class="loginBtn" ng-click="doLogin()">登录</div>
<!-- <div class="forgetWrap"> <div class="forgetWrap">
<span class="ml10">还没有账号?<a href="register.html"><span class="under">立即注册</span></a></span> <span class="ml10">还没有账号?<a href="register.html"><span class="under">立即注册</span></a></span>
<span class="right under">体验DEMO</span> <!-- <span class="right under">体验DEMO</span> -->
</div> --> </div>
</div> </div>
</div> </div>
<div class="openBgDiv" ng-show="noActive==1" ng-cloak></div> <div class="openBgDiv" ng-show="noActive==1" ng-cloak></div>
......
...@@ -7,10 +7,10 @@ ...@@ -7,10 +7,10 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <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"> <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="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/login.css?r=0.5317122181877494"> <link rel="stylesheet" href="styles/login.css?r=0.31149819074198604">
<script src="scripts/change.js?r=0.7924824352376163"></script> <script src="scripts/change.js?r=0.8929546170402318"></script>
<script src="scripts/regcom5.js?r=0.4877237342298031"></script> <script src="scripts/regcom5.js?r=0.5510864944662899"></script>
<script src="scripts/olduser.js?r=0.97215764853172"></script> <script src="scripts/olduser.js?r=0.7056754943914711"></script>
</head> </head>
<body ng-app="app" ng-controller="olduserCtrl"> <body ng-app="app" ng-controller="olduserCtrl">
......
...@@ -7,10 +7,10 @@ ...@@ -7,10 +7,10 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <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"> <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="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/login.css?r=0.5324887416791171"> <link rel="stylesheet" href="styles/login.css?r=0.9104294695425779">
<script src="scripts/change.js?r=0.8414971525780857"></script> <script src="scripts/change.js?r=0.6640091622248292"></script>
<script src="scripts/regcom6.js?r=0.13982015755027533"></script> <script src="scripts/regcom6.js?r=0.7040833386126906"></script>
<script src="scripts/register.js?r=0.6793806061614305"></script> <script src="scripts/register.js?r=0.0359445393551141"></script>
<script> <script>
var _hmt = _hmt || []; var _hmt = _hmt || [];
......
...@@ -7,10 +7,10 @@ ...@@ -7,10 +7,10 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <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"> <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="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/login.css?r=0.12542712758295238"> <link rel="stylesheet" href="styles/login.css?r=0.5230596014298499">
<script src="scripts/change.js?r=0.9124180839862674"></script> <script src="scripts/change.js?r=0.7893789829686284"></script>
<script src="scripts/regcom7.js?r=0.9299184740521014"></script> <script src="scripts/regcom7.js?r=0.5114126577973366"></script>
<script src="scripts/resetpwd.js?r=0.9602820398285985"></script> <script src="scripts/resetpwd.js?r=0.8044941681437194"></script>
</head> </head>
<body ng-app="app" ng-controller="resetpwdCtrl"> <body ng-app="app" ng-controller="resetpwdCtrl">
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -7,10 +7,10 @@ ...@@ -7,10 +7,10 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <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"> <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="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="styles/login.css?r=0.033736487152054906"> <link rel="stylesheet" href="styles/login.css?r=0.055841729044914246">
<script src="scripts/change.js?r=0.2593456201720983"></script> <script src="scripts/change.js?r=0.5346511888783425"></script>
<script src="scripts/regcom8.js?r=0.6496113596949726"></script> <script src="scripts/regcom8.js?r=0.2486923444084823"></script>
<script src="scripts/success.js?r=0.6613843908999115"></script> <script src="scripts/success.js?r=0.444347481476143"></script>
</head> </head>
<body ng-app="app" ng-controller="successCtrl"> <body ng-app="app" ng-controller="successCtrl">
......
<div class="eptWrap" ng-click="exportData()" ng-style="style1" ng-hide="iscanExport"> <div class="eptWrap" ng-click="exportData()" ng-style="style1">
<span class="eptOut"></span> <span class="eptOut"></span>
</div> </div>
...@@ -39,10 +39,10 @@ ...@@ -39,10 +39,10 @@
</div> </div>
</ul> </ul>
<ul class="sidebarNav" ng-if="mainMenu=='export'"> <ul class="sidebarNav" ng-if="mainMenu=='export'">
<!-- <li ng-class="{'active':pagePath=='logtool'}" ng-click="goPage('collect.logtool')" ng-if="showMenu('logtool')"> <li ng-class="{'active':pagePath=='logtool'}" ng-click="goPage('collect.logtool')" ng-if="showMenu('logtool')">
<i class="iconfont icon-logtool"></i> <i class="iconfont icon-logtool"></i>
<a>日志流</a> <a>日志流</a>
</li> --> </li>
<li ng-class="{'active':pagePath=='report'}" ng-click="goPage('collect.report')" ng-if="showMenu('report')"> <li ng-class="{'active':pagePath=='report'}" ng-click="goPage('collect.report')" ng-if="showMenu('report')">
<i class="iconfont icon-report"></i> <i class="iconfont icon-report"></i>
<a>下载报表</a> <a>下载报表</a>
...@@ -135,7 +135,7 @@ ...@@ -135,7 +135,7 @@
</li> </li>
</ul> </ul>
<ul class="sidebarNav" ng-if="mainMenu=='export'"> <ul class="sidebarNav" ng-if="mainMenu=='export'">
<!-- <li ng-class="{'active':pagePath=='logtool'}" ng-click="goPage('collect.logtool')" ng-if="showMenu('logtool')" ng-mouseenter="hoverMenu='日志流'" ng-mouseleave="hoverMenu=''" > <li ng-class="{'active':pagePath=='logtool'}" ng-click="goPage('collect.logtool')" ng-if="showMenu('logtool')" ng-mouseenter="hoverMenu='日志流'" ng-mouseleave="hoverMenu=''" >
<i class="iconfont icon-logtool"></i> <i class="iconfont icon-logtool"></i>
<div class="outDiv" ng-if="hoverMenu=='日志流'"> <div class="outDiv" ng-if="hoverMenu=='日志流'">
<span class="arrIcon"></span> <span class="arrIcon"></span>
...@@ -143,7 +143,7 @@ ...@@ -143,7 +143,7 @@
<li ng-class="{'active':pagePath=='logtool'}"><a>日志流</a></li> <li ng-class="{'active':pagePath=='logtool'}"><a>日志流</a></li>
</ul> </ul>
</div> </div>
</li> --> </li>
<li ng-class="{'active':pagePath=='report'}" ng-click="goPage('collect.report')" ng-if="showMenu('report')" ng-mouseenter="hoverMenu='下载报表'" ng-mouseleave="hoverMenu=''" > <li ng-class="{'active':pagePath=='report'}" ng-click="goPage('collect.report')" ng-if="showMenu('report')" ng-mouseenter="hoverMenu='下载报表'" ng-mouseleave="hoverMenu=''" >
<i class="iconfont icon-report"></i> <i class="iconfont icon-report"></i>
<div class="outDiv" ng-if="hoverMenu=='下载报表'"> <div class="outDiv" ng-if="hoverMenu=='下载报表'">
......
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