李天标 5 роки тому
батько
коміт
cfe6d9d10d
35 змінених файлів з 10380 додано та 175 видалено
  1. 1 1
      app-backend-web/src/main/java/com/hboxs/control/admin/CommonController.java
  2. 10 1
      app-backend-web/src/main/java/com/hboxs/control/admin/IndexController.java
  3. 2 1
      app-backend-web/src/main/resources/applicationContext-shiro.xml
  4. 242 171
      app-backend-web/src/main/webapp/WEB-INF/template/admin/common/index.ftl
  5. 177 0
      app-backend-web/src/main/webapp/WEB-INF/template/admin/common/indexOld.ftl
  6. 2 0
      app-backend-web/src/main/webapp/WEB-INF/template/admin/common/main.ftl
  7. 4 1
      app-backend-web/src/main/webapp/asl-admin/login.jsp
  8. 2544 0
      app-backend-web/src/main/webapp/resources/index/css/animsition.css
  9. 100 0
      app-backend-web/src/main/webapp/resources/index/css/jquery.shCircleLoader.css
  10. 23 0
      app-backend-web/src/main/webapp/resources/index/css/reset.css
  11. 2436 0
      app-backend-web/src/main/webapp/resources/index/css/scanboard.css
  12. 241 0
      app-backend-web/src/main/webapp/resources/index/css/scanboardLogin.css
  13. BIN
      app-backend-web/src/main/webapp/resources/index/images/bg.jpg
  14. BIN
      app-backend-web/src/main/webapp/resources/index/images/bgImg.png
  15. BIN
      app-backend-web/src/main/webapp/resources/index/images/gz.png
  16. BIN
      app-backend-web/src/main/webapp/resources/index/images/infoBg.png
  17. BIN
      app-backend-web/src/main/webapp/resources/index/images/loginBg.jpg
  18. BIN
      app-backend-web/src/main/webapp/resources/index/images/logo.png
  19. BIN
      app-backend-web/src/main/webapp/resources/index/images/s_ico2.png
  20. BIN
      app-backend-web/src/main/webapp/resources/index/images/s_ico3.png
  21. BIN
      app-backend-web/src/main/webapp/resources/index/images/s_ico5.png
  22. BIN
      app-backend-web/src/main/webapp/resources/index/images/s_ico6.png
  23. BIN
      app-backend-web/src/main/webapp/resources/index/images/s_ico7.png
  24. BIN
      app-backend-web/src/main/webapp/resources/index/images/s_ico8.png
  25. BIN
      app-backend-web/src/main/webapp/resources/index/images/titBg.png
  26. 133 0
      app-backend-web/src/main/webapp/resources/index/js/app.js
  27. 104 0
      app-backend-web/src/main/webapp/resources/index/js/bg.js
  28. 1 0
      app-backend-web/src/main/webapp/resources/index/js/echarts.min.js
  29. 61 0
      app-backend-web/src/main/webapp/resources/index/js/fontscroll.js
  30. 233 0
      app-backend-web/src/main/webapp/resources/index/js/jquery.animsition.js
  31. 4 0
      app-backend-web/src/main/webapp/resources/index/js/jquery.min.js
  32. 3720 0
      app-backend-web/src/main/webapp/resources/index/js/jquery.nicescroll.js
  33. 9 0
      app-backend-web/src/main/webapp/resources/index/js/jquery.shCircleLoader-min.js
  34. 9 0
      app-backend-web/src/main/webapp/resources/index/js/particles.min.js
  35. 324 0
      app-backend-web/src/main/webapp/resources/index/js/scanboard.js

+ 1 - 1
app-backend-web/src/main/java/com/hboxs/control/admin/CommonController.java

@@ -159,7 +159,7 @@ public class CommonController implements ServletContextAware {
         model.addAttribute("personageCount" , personageCount);
         model.addAttribute("equipmentCount" ,equipmentCount);
 
-        return "/admin/common/index";
+        return "/admin/common/indexOld";
     }
 
     /**

+ 10 - 1
app-backend-web/src/main/java/com/hboxs/control/admin/IndexController.java

@@ -16,6 +16,7 @@ import com.hboxs.service.*;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -25,6 +26,7 @@ import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -48,7 +50,14 @@ public class IndexController extends BaseController {
     private CleanHistoryService cleanHistoryService;
     @Resource(name = "alarmRecordServiceImpl")
     private AlarmRecordService alarmRecordService;
-
+    /**
+     * 主页
+     */
+    @RequestMapping(value = "/index", method = RequestMethod.GET)
+    public String main(HttpServletRequest request, Model model) {
+        model.addAttribute("admin" , adminService.getCurrent());
+        return "/admin/common/index";
+    }
     /**
      *今日人流量
      */

+ 2 - 1
app-backend-web/src/main/resources/applicationContext-shiro.xml

@@ -8,7 +8,8 @@
     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
         <property name="securityManager" ref="securityManager"/>
         <property name="loginUrl" value="/asl-admin/login.jsp"/>
-        <property name="successUrl" value="/asl-admin/common/main.htm"/>
+        <!--<property name="successUrl" value="/asl-admin/common/main.htm"/>-->
+        <property name="successUrl" value="/asl-admin/index/index.htm"/>
         <property name="unauthorizedUrl" value="/asl-admin/login.jsp"/>
         <property name="filterChainDefinitions">
             <value>

+ 242 - 171
app-backend-web/src/main/webapp/WEB-INF/template/admin/common/index.ftl

@@ -1,177 +1,248 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
+<!DOCTYPE html>
+<html>
 <head>
-    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
-    <title>首页</title>
-    <link href="/resources/admin/layui/css/layui.css" rel="stylesheet" type="text/css" />
-    <link href="/resources/admin/iconfont/iconfont.css" rel="stylesheet" type="text/css"/>
-    <link href="/resources/admin/css/common.css" rel="stylesheet" type="text/css"/>
-    <script type="text/javascript" src="/resources/admin/js/jquery.js"></script>
-    <script type="text/javascript" src="/resources/admin/js/jquery.tools.js"></script>
-    <script type="text/javascript" src="/resources/admin/js/jquery.validate.js"></script>
-    <script type="text/javascript" src="/resources/admin/layui/layui.js"></script>
-    <script type="text/javascript" src="/resources/admin/js/common.js"></script>
-    <script type="text/javascript" src="/resources/admin/js/input.js"></script>
-    <style type="text/css">
-        .systemList{
-            width: auto;
-            padding: 10px;
-            float: left;
-        }
-        .systemList table{
-            margin: 0;
-        }
-        .systemList table tr td{
-            padding: 10px;
-            font-size: 14px;
-            background: #eeeeee;
-            color: #000000;
-        }
-        .systemList table tr td.type{
-            color: #f03d0d;
-            font-weight: bold;
-            font-size: 14px;
-            background: #ffffff;
-        }
-        .systemList table tr td.managerId{
-            font-weight: bold;
-            color: #06a831;
-            font-size: 14px;
-            background: #ffffff;
-        }
-        .systemList table tr td.url{
-            color: #000000;
-            font-size: 14px;
-            background: #ffffff;
-        }
-        .data{
-            padding: 10px 0 ;
-        }
-        .data .count{
-            text-align: center;
-            border: 1px solid #e8e8e8;
-            border-radius: 3px;
-            margin: 10px 10px 0 0;
-            padding: 20px 0 24px 0;
-            background: #f9f9f9;
-        }
-        .data .count p{
-            font-size: 44px;
-            margin-bottom: 5px;
-            color: #000000;
-        }
-    </style>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
+<title>申泽智能</title>
+<link rel="stylesheet" type="text/css" href="/resources/index/css/reset.css" />
+<link rel="stylesheet" type="text/css" href="/resources/index/css/scanboard.css" />
+<link rel="stylesheet" type="text/css" href="/resources/index/css/animsition.css" />
+<link rel="stylesheet" type="text/css" href="/resources/index/css/jquery.shCircleLoader.css" />
+<script type="text/javascript" src="/resources/index/js/jquery.min.js"></script>
+<script type="text/javascript" src="/resources/index/js/jquery.shCircleLoader-min.js"></script>
 </head>
 <body>
-<div class="path">
-    首页
-</div>
-<div class="systemList">
-    <table class="layui-table">
-        <tr>
-            <td>当前账号</td>
-            <td class="type">${admin.username}(${admin.type.toValue()})</td>
-            <td>管理系统ID</td>
-            <td class="managerId">${admin.managerId} (设备初始化使用)</td>
-        [#if admin.type=="admin"]
-            <td>省级登陆链接</td>
-            <td class="url">http://app.sunzee.com.cn/asl-admin/login.jsp?type=agency</td>
-        [#elseif admin.type=="agency"]
-            <td>经销商登陆链接</td>
-            <td class="url">http://app.sunzee.com.cn/asl-admin/login.jsp?type=merchant&p=${admin.agencyUid}</td>
-        [#elseif admin.type=="merchant"]
-            <td>终端登陆链接</td>
-            <td class="url">http://app.sunzee.com.cn/asl-admin/login.jsp?type=personage&p=${admin.merchantUid}</td>
-        [#elseif admin.type=="personage"]
-            <td>我的登陆链接</td>
-            <td class="url">http://app.sunzee.com.cn/asl-admin/login.jsp?type=personage&p=${admin.merchantUid}</td>
-        [/#if]
-            </tr>
-    </table>
+	<div id="loader"></div>
+	<script type="text/javascript">
+		$('#loader').shCircleLoader({color: "#00deff"});
+	</script>
+	<!--Top Start!-->
+	<div class="scanboardWp animsition">
+		<div id="top">
+			<div class="wp clearfix">
+				<div class="left topBar">
+					<div class="topTime">时间加载中...</div>
+				</div>
 
-    [#if admin.type=="admin"]
-    <div class="data">
-        <div class="layui-row">
-            <div class="layui-col-md3">
-                <div class="count">
-                    <p>${agencyCount}</p>
-                    <a>省级数</a>
-                </div>
-            </div>
-            <div class="layui-col-md3">
-                <div class="count">
-                    <p>${merchantCount}</p>
-                    <a>市级</a>
-                </div>
-            </div>
-            <div class="layui-col-md3">
-                <div class="count">
-                    <p>${personageCount}</p>
-                    <a>终端数</a>
-                </div>
-            </div>
-            <div class="layui-col-md3">
-                <div class="count">
-                    <p>${equipmentCount}</p>
-                    <a>设备</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    [#elseif admin.type="agency"]
-    <div class="data">
-        <div class="layui-row">
-            <div class="layui-col-md3">
-                <div class="count">
-                    <p>${merchantCount}</p>
-                    <a>市级</a>
-                </div>
-            </div>
-            <div class="layui-col-md3">
-                <div class="count">
-                    <p>${personageCount}</p>
-                    <a>终端数</a>
-                </div>
-            </div>
-            <div class="layui-col-md3">
-                <div class="count">
-                    <p>${equipmentCount}</p>
-                    <a>设备</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    [#elseif admin.type="merchant"]
-    <div class="data">
-        <div class="layui-row">
-            <div class="layui-col-md3">
-                <div class="count">
-                    <p>${personageCount}</p>
-                    <a>终端数</a>
-                </div>
-            </div>
-            <div class="layui-col-md3">
-                <div class="count">
-                    <p>${equipmentCount}</p>
-                    <a>设备</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    [#elseif admin.type="personage"]
-    <div class="data">
-        <div class="layui-row">
-            <div class="layui-col-md3">
-                <div class="count">
-                    <p>${equipmentCount}</p>
-                    <a>设备</a>
-                </div>
-            </div>
-        </div>
-    </div>
-    [/#if]
-</div>
+				<div class="center topLogo">
+					<div class="title">智能洗手间物联系统</div>
+<!--					<a href="#"><img src="images/logo.png"></a>-->
+				</div>
+				<div class="right pageTit">
+					<#--<a class="summaryBtn" href="javascript:;">进入后台</a>-->
+					<a class="summaryBtn" href="/asl-admin/common/main.htm">进入后台</a>
+					<div class="shebei"></div>
+					<#--<div class="shebei">设备编号:33333444</div>-->
+				</div>
+			</div>
+		</div>
+		<!--Top End!-->
+		
+		<!--Main Start!-->
+		<div id="main" class="wp clearfix">
+			<div class="left">
+				<!-- 今日人流量、在线机台数量 -->
+				<div class="item total left1">
+					<div class="itemTit">
+						<span class="border-yellow">今日人流量、在线机台数量</span>
+					</div>
+					<div class="tag1 itembg">
+						<ul>
+							<li style="font-size: 30px;color: aqua;">7677</li><li style="font-size: 30px;color: aqua;">12/<span style="font-size: 30px;color: #ffd220;">76</span></li>
+						</ul>
+						<ul>
+							<li style="font-size: 16px;color: #fff;">人流量</li><li style="font-size: 16px;color: #fff;">在线设备</li>
+						</ul>
+					</div>
+				</div>
+				<!--能耗-->
+				<div class="item left2">
+					<div class="itemTit">
+						<span class="border-green">使用统计</span>
+					</div>
+					<div id="myChart1"></div>
 
+				</div>
+
+				<!--问题占比-->
+				<div class="item left3">
+					<div class="itemTit">
+						<span class="border-blue">问题占比</span>
+					</div>
+					<div id="myChart2"></div>
+				</div>
+			</div>
+
+			<div class="center">
+				<div class="centerWp">
+					<!--中间大地图-->
+					<div class="center1 item total itembg">
+						<div class="itemCon tag2">
+							<ul>
+								<li>767次</li>
+								<li class="totalNum"><strong id="totalNum" total="368082">0</strong><span>次</span></li>
+								<li>88次</li>
+							</ul>
+							<ul>
+								<li>今日随机清洗次数</li>
+								<li>今日总清洗次数</li>
+								<li>今日定时清洗次数</li>
+							</ul>
+						</div>
+					</div>
+					<div class="center2">
+						<div class="itemTit">
+							<span class="border-yellow">环境检测</span>
+						</div>
+						<div class="itemCon itembg">
+							<div class="infoPie2">
+								<ul class="clearfix">
+									<li class="color-zi">
+										<span class="border-zi">99%</span>
+										<p>气味浓度</p>
+									</li>
+									<li class="color-blue">
+										<span class="border-blue">23℃</span>
+										<p>温度</p>
+									</li>
+									<li class="color-yellow">
+										<span class="border-yellow">36%</span>
+										<p>湿度</p>
+									</li>
+									<li class="color-green">
+										<span class="border-green">89%</span>
+										<p>环境舒适度</p>
+									</li>
+								</ul>
+							</div>
+						</div>
+					</div>
+					<!--故障处理-->
+					<div class="center3 item billState">
+						<div class="itemTit">
+							<span class="border-blue">故障处理</span>
+						</div>
+						<div class="itemCon">
+							<div class="StateBox">
+								<div class="StateTit">
+									<span>设备唯一码</span>
+									<span>设备名称</span>
+									<span>报警内容</span>
+									<span>报警时间</span>
+									<span>区域</span>
+									<span>全部状态</span>
+								</div>
+								<div id="FontScroll">
+									<ul>
+										<li>
+											<div class="fontInner clearfix">
+												<span>ZC1712120023</span>
+												<span>机器人1</span>
+												<span>尾部喷水异常</span>
+												<span>2小时15分</span>
+												<span>申泽1层</span>
+												<span>待处理</span>
+											</div>
+										</li>
+										<li>
+											<div class="fontInner clearfix">
+												<span>ZC1712120023</span>
+												<span>机器人1</span>
+												<span>尾部喷水异常</span>
+												<span>2小时15分</span>
+												<span>申泽1层</span>
+												<span>待处理</span>
+											</div>
+										</li>
+										<li>
+											<div class="fontInner clearfix">
+												<span>ZC1712120023</span>
+												<span>机器人1</span>
+												<span>尾部喷水异常</span>
+												<span>2小时15分</span>
+												<span>申泽1层</span>
+												<span>待处理</span>
+											</div>
+										</li>
+									</ul>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+
+			<div class="right">
+				<!--剩余物料-->
+				<div class="right1 item waybill">
+					<div class="itemTit">
+						<span class="border-yellow">剩余物料</span>
+					</div>
+					<div class="itemCon">
+						<div class="progress" progress="100%">
+							<h3 class="clearfix"><span>清洁剂</span><i>100%</i></h3>
+							<div class="progressBar">
+								<span></span>
+							</div>
+						</div>
+						<div class="progress" progress="40%">
+							<h3 class="clearfix"><span>消毒水</span><i>40%</i></h3>
+							<div class="progressBar">
+								<span></span>
+							</div>
+						</div>
+						<div class="progress" progress="60%">
+							<h3 class="clearfix"><span>清新剂</span><i>60%</i></h3>
+							<div class="progressBar">
+								<span></span>
+							</div>
+						</div>
+					</div>
+				</div>
+
+				<!--使用统计-->
+				<div class="right2 item basicInfo">
+					<div class="itemTit">
+						<span class="border-green">能耗</span>
+					</div>
+					<div class="itemCon itembg">
+						<div class="infoPie">
+							<ul class="clearfix">
+								<li class="color-yellow">
+									<span class="border-yellow">32</span>
+									<p>水耗(吨)</p>
+								</li>
+								<li class="color-green">
+									<span class="border-green">65</span>
+									<p>电耗(度)</p>
+								</li>
+								<li class="color-blue">
+									<p>水费:66元</p>
+									<p>电费:66元</p>
+								</li>
+							</ul>
+						</div>
+					</div>
+				</div>
+
+				<!--使用统计-->
+				<div class="right3 item billState">
+					<div class="itemTit">
+						<span class="border-green">使用统计</span>
+					</div>
+					<div id="myChart3"></div>
+				</div>
+			</div>
+		</div>
+		<!--Main End!-->
+	</div>
+
+	<canvas id="canvas" style="position: absolute;top: 0;left: 0;"></canvas>
 </body>
-</html>
+<script type="text/javascript" src="/resources/index/js/bg.js"></script>
+<script type="text/javascript" src="/resources/index/js/scanboard.js"></script>
+<script type="text/javascript" src="/resources/index/js/fontscroll.js"></script>
+<script type="text/javascript" src="/resources/index/js/jquery.animsition.js"></script>
+<script type="text/javascript" src="/resources/index/js/jquery.nicescroll.js"></script>
+<script type="text/javascript" src="/resources/index/js/echarts.min.js"></script>
+</html>

+ 177 - 0
app-backend-web/src/main/webapp/WEB-INF/template/admin/common/indexOld.ftl

@@ -0,0 +1,177 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
+    <title>首页</title>
+    <link href="/resources/admin/layui/css/layui.css" rel="stylesheet" type="text/css" />
+    <link href="/resources/admin/iconfont/iconfont.css" rel="stylesheet" type="text/css"/>
+    <link href="/resources/admin/css/common.css" rel="stylesheet" type="text/css"/>
+    <script type="text/javascript" src="/resources/admin/js/jquery.js"></script>
+    <script type="text/javascript" src="/resources/admin/js/jquery.tools.js"></script>
+    <script type="text/javascript" src="/resources/admin/js/jquery.validate.js"></script>
+    <script type="text/javascript" src="/resources/admin/layui/layui.js"></script>
+    <script type="text/javascript" src="/resources/admin/js/common.js"></script>
+    <script type="text/javascript" src="/resources/admin/js/input.js"></script>
+    <style type="text/css">
+        .systemList{
+            width: auto;
+            padding: 10px;
+            float: left;
+        }
+        .systemList table{
+            margin: 0;
+        }
+        .systemList table tr td{
+            padding: 10px;
+            font-size: 14px;
+            background: #eeeeee;
+            color: #000000;
+        }
+        .systemList table tr td.type{
+            color: #f03d0d;
+            font-weight: bold;
+            font-size: 14px;
+            background: #ffffff;
+        }
+        .systemList table tr td.managerId{
+            font-weight: bold;
+            color: #06a831;
+            font-size: 14px;
+            background: #ffffff;
+        }
+        .systemList table tr td.url{
+            color: #000000;
+            font-size: 14px;
+            background: #ffffff;
+        }
+        .data{
+            padding: 10px 0 ;
+        }
+        .data .count{
+            text-align: center;
+            border: 1px solid #e8e8e8;
+            border-radius: 3px;
+            margin: 10px 10px 0 0;
+            padding: 20px 0 24px 0;
+            background: #f9f9f9;
+        }
+        .data .count p{
+            font-size: 44px;
+            margin-bottom: 5px;
+            color: #000000;
+        }
+    </style>
+</head>
+<body>
+<div class="path">
+    首页
+</div>
+<div class="systemList">
+    <table class="layui-table">
+        <tr>
+            <td>当前账号</td>
+            <td class="type">${admin.username}(${admin.type.toValue()})</td>
+            <td>管理系统ID</td>
+            <td class="managerId">${admin.managerId} (设备初始化使用)</td>
+        [#if admin.type=="admin"]
+            <td>省级登陆链接</td>
+            <td class="url">http://app.sunzee.com.cn/asl-admin/login.jsp?type=agency</td>
+        [#elseif admin.type=="agency"]
+            <td>经销商登陆链接</td>
+            <td class="url">http://app.sunzee.com.cn/asl-admin/login.jsp?type=merchant&p=${admin.agencyUid}</td>
+        [#elseif admin.type=="merchant"]
+            <td>终端登陆链接</td>
+            <td class="url">http://app.sunzee.com.cn/asl-admin/login.jsp?type=personage&p=${admin.merchantUid}</td>
+        [#elseif admin.type=="personage"]
+            <td>我的登陆链接</td>
+            <td class="url">http://app.sunzee.com.cn/asl-admin/login.jsp?type=personage&p=${admin.merchantUid}</td>
+        [/#if]
+            </tr>
+    </table>
+
+    [#if admin.type=="admin"]
+    <div class="data">
+        <div class="layui-row">
+            <div class="layui-col-md3">
+                <div class="count">
+                    <p>${agencyCount}</p>
+                    <a>省级数</a>
+                </div>
+            </div>
+            <div class="layui-col-md3">
+                <div class="count">
+                    <p>${merchantCount}</p>
+                    <a>市级</a>
+                </div>
+            </div>
+            <div class="layui-col-md3">
+                <div class="count">
+                    <p>${personageCount}</p>
+                    <a>终端数</a>
+                </div>
+            </div>
+            <div class="layui-col-md3">
+                <div class="count">
+                    <p>${equipmentCount}</p>
+                    <a>设备</a>
+                </div>
+            </div>
+        </div>
+    </div>
+    [#elseif admin.type="agency"]
+    <div class="data">
+        <div class="layui-row">
+            <div class="layui-col-md3">
+                <div class="count">
+                    <p>${merchantCount}</p>
+                    <a>市级</a>
+                </div>
+            </div>
+            <div class="layui-col-md3">
+                <div class="count">
+                    <p>${personageCount}</p>
+                    <a>终端数</a>
+                </div>
+            </div>
+            <div class="layui-col-md3">
+                <div class="count">
+                    <p>${equipmentCount}</p>
+                    <a>设备</a>
+                </div>
+            </div>
+        </div>
+    </div>
+    [#elseif admin.type="merchant"]
+    <div class="data">
+        <div class="layui-row">
+            <div class="layui-col-md3">
+                <div class="count">
+                    <p>${personageCount}</p>
+                    <a>终端数</a>
+                </div>
+            </div>
+            <div class="layui-col-md3">
+                <div class="count">
+                    <p>${equipmentCount}</p>
+                    <a>设备</a>
+                </div>
+            </div>
+        </div>
+    </div>
+    [#elseif admin.type="personage"]
+    <div class="data">
+        <div class="layui-row">
+            <div class="layui-col-md3">
+                <div class="count">
+                    <p>${equipmentCount}</p>
+                    <a>设备</a>
+                </div>
+            </div>
+        </div>
+    </div>
+    [/#if]
+</div>
+
+</body>
+</html>

+ 2 - 0
app-backend-web/src/main/webapp/WEB-INF/template/admin/common/main.ftl

@@ -155,6 +155,8 @@
                 <i class="iconfont icon-huiyuan"></i> <a href="javascript:void(0)" data-url="../profile/edit.htm"
                                                          data-id="admin:profileEdit">[@shiro.principal /]<i
                     class="iconfont icon-bianji1"></i></a> <span class="type">${admin.type.toValue()}</span>
+                <a href="/asl-admin/index/index.htm"
+                   class="am-btn am-btn-danger am-radius am-btn-sm" target="_top">首页</a>
                 [#if admin.type == "merchant" || admin.type == "personage"]
                     <a href="../logout.jsp?type=${admin.type}&p=${admin.agencyUid}"
                        class="am-btn am-btn-danger am-radius am-btn-sm" target="_top">退出</a>

+ 4 - 1
app-backend-web/src/main/webapp/asl-admin/login.jsp

@@ -20,8 +20,11 @@
     if (applicationContext != null) {
 %>
 <shiro:authenticated>
+    <%--<%--%>
+        <%--response.sendRedirect(base + "/asl-admin/common/main.htm");--%>
+    <%--%>--%>
     <%
-        response.sendRedirect(base + "/asl-admin/common/main.htm");
+        response.sendRedirect(base + "/asl-admin/index/index.htm");
     %>
 </shiro:authenticated>
 <%

Різницю між файлами не показано, бо вона завелика
+ 2544 - 0
app-backend-web/src/main/webapp/resources/index/css/animsition.css


+ 100 - 0
app-backend-web/src/main/webapp/resources/index/css/jquery.shCircleLoader.css

@@ -0,0 +1,100 @@
+/*!
+ * SunHater Circle Loader v0.2 (2013-12-28)
+ * jQuery plugin
+ * Copyright (c) 2014 Pavel Tzonkov <sunhater@sunhater.com>
+ * Dual licensed under the MIT and GPL licenses.
+ * http://opensource.org/licenses/MIT
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * External css example, when using externalCss:true option
+ */
+
+
+/* Loader container */
+.shcl {
+    position: relative;
+    width: 100px;
+    height: 100px;
+    margin: 0 auto;
+}
+
+
+/* Progress status */
+.shcl > span {
+    font-family: Verdana, Tahoma, Arial, sans-serif;
+    font-size: 14px;
+    color: black;
+}
+
+
+/* Loader dots */
+.shcl > div {
+    position: absolute;
+    visibility: hidden;
+    width: 10px;
+    height: 10px;
+    background: transparent;
+    box-shadow: 0 0 10px black;
+
+    -webkit-border-radius: 5px;
+    -webkit-animation-name: shcl_bounce;
+    -webkit-animation-duration: 1s;
+    -webkit-animation-iteration-count: infinite;
+    -webkit-animation-direction: linear;
+
+    -moz-border-radius: 5px;
+    -moz-animation-name: shcl_bounce;
+    -moz-animation-duration: 1s;
+    -moz-animation-iteration-count: infinite;
+    -moz-animation-direction: linear;
+
+    -o-border-radius: 5px;
+    -o-animation-name: shcl_bounce;
+    -o-animation-duration: 1s;
+    -o-animation-iteration-count: infinite;
+    -o-animation-direction: linear;
+
+    -ms-border-radius: 5px;
+    -ms-animation-name: shcl_bounce;
+    -ms-animation-duration: 1s;
+    -ms-animation-iteration-count: infinite;
+    -ms-animation-direction: linear;
+
+    border-radius: 5px;
+    animation-name: shcl_bounce;
+    animation-duration: 1s;
+    animation-iteration-count: infinite;
+    animation-direction: linear;
+}
+
+/* Animation keyframes */
+
+@-webkit-keyframes shcl_bounce {
+    0% {-webkit-transform: scale(1);}
+    80% {-webkit-transform: scale(.3);}
+    100% {-webkit-transform: scale(1);}
+}
+
+@-moz-keyframes shcl_bounce {
+    0% {-moz-transform: scale(1);}
+    80% {-moz-transform: scale(.3);}
+    100% {-moz-transform: scale(1);}
+}
+
+@-o-keyframes shcl_bounce {
+    0% {-o-transform: scale(1);}
+    80% {-o-transform: scale(.3);}
+    100% {-o-transform: scale(1);}
+}
+
+@-ms-keyframes shcl_bounce {
+    0% {-ms-transform: scale(1);}
+    80% {-ms-transform: scale(.3);}
+    100% {-ms-transform: scale(1);}
+}
+
+@keyframes shcl_bounce {
+    0% {transform: scale(1);}
+    80% {transform: scale(.3);}
+    100% {transform: scale(1);}
+}

+ 23 - 0
app-backend-web/src/main/webapp/resources/index/css/reset.css

@@ -0,0 +1,23 @@
+/** reset **/
+body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td, img{border:medium none;margin: 0;padding: 0;font-size: 100%;}
+body,button, input, select, textarea{font-size: 14px;line-height: 1.5;font-family: Arial, 'Microsoft Yahei';}
+h1, h2, h3, h4, h5, h6{font-weight: normal;}
+em{font-style:normal;}
+ul, ol{list-style: none;}
+input,button{background: none;border: none;outline: none;-webkit-appearance: none;}
+textarea{resize: none;}
+a{text-decoration: none;color:#333;}
+a:hover{text-decoration: none;
+		color:#ffd220;
+		-moz-transition: all 0.3s ease-in;
+		-webkit-transition: all 0.3s ease-in;
+		-o-transition: all 0.3s ease-in;
+		transition: all 0.3s ease-in;
+}
+img{border:0px;  outline-width:0px;  vertical-align:top;}
+.clearfix { *zoom: 1; } 
+.clearfix:before, .clearfix:after {  display: table; line-height: 0; content: ""; } 
+.clearfix:after { clear: both; } 
+.fl { float:left;}
+.fr { float:right;}
+.hide { display:none;}

Різницю між файлами не показано, бо вона завелика
+ 2436 - 0
app-backend-web/src/main/webapp/resources/index/css/scanboard.css


+ 241 - 0
app-backend-web/src/main/webapp/resources/index/css/scanboardLogin.css

@@ -0,0 +1,241 @@
+html,body{
+	height: 100%;
+	overflow: hidden;
+}
+body{
+	background: url(../images/loginBg.jpg);
+	background-size: 100% 100%;
+}
+input:-webkit-autofill,
+textarea:-webkit-autofill,
+select:-webkit-autofill {
+        -webkit-box-shadow: 0 0 0 1000px transparent inset;
+        background-color: none;
+}
+.wp{
+	height: 100%;
+	/* background: url(../images/bgImg.png) no-repeat center 0;
+	background-size: auto 100%; */
+	position: relative;
+	z-index: 2;
+}
+#particles-js{
+	position: absolute;
+	top: 0;
+	left: 0%;
+	width: 100%;
+	height: 100%;
+	z-index: 1;
+	opacity: 0.5;
+}
+.boardLogin{
+	width: 16.8%;
+	min-width: 200px;
+	margin: 0 auto;
+	position: relative;
+	top: 50%;
+	-webkit-transform: translateY(-50%);
+	-moz-transform: translateY(-50%);
+	-ms-transform: translateY(-50%);
+	-o-transform: translateY(-50%);
+	transform: translateY(-50%);
+}
+.boardLogin .logo{
+	display: block;
+	margin-bottom: 40px;
+	text-align: center;
+}
+.boardLogin .logo img{
+	width: 100%;
+	max-width: 326px;
+}
+
+.boardLogin .inpGroup{
+	height: 20px;
+	padding: 14px 24px 14px 52px;
+	background: #2a658a;
+	background: rgba(255,255,255,0.1);
+	border-radius: 24px;
+	position: relative;
+}
+.boardLogin .inpGroup span{
+	display: block;
+	width: 20px;
+	height: 20px;
+	position: absolute;
+	top: 14px;
+	left: 24px;
+}
+.boardLogin .inpGroup span.loginIco1{
+	background: url(../images/s_ico6.png);
+}
+.boardLogin .inpGroup span.loginIco2{
+	background: url(../images/s_ico7.png);
+}
+.boardLogin .inpGroup input{
+	display: block;
+	width: 100%;
+	height: 20px;
+	line-height: 20px;
+	color: #fff;
+}
+.boardLogin .inpGroup input:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
+    color: #fff; opacity:1; 
+}
+
+.boardLogin .inpGroup input::-moz-placeholder { /* Mozilla Firefox 19+ */
+    color: #fff;opacity:1;
+}
+
+.boardLogin .inpGroup input:-ms-input-placeholder{
+    color: #fff;opacity:1;
+}
+
+.boardLogin .inpGroup input::-webkit-input-placeholder{
+    color: #fff;opacity:1;
+}
+.boardLogin .prompt{
+	min-height: 20px;
+	padding: 5px 24px 10px 24px;
+}
+.boardLogin p{
+	line-height: 16px;
+	font-size: 12px;
+	display: none;
+	
+}
+.boardLogin p.error{
+	color: #f60;
+}
+.boardLogin p.success{
+	color: #449d44;
+}
+.boardLogin .submit{
+	width: 100%;
+	box-sizing: border-box;
+	display: block;
+	height: 40px;
+	line-height: 38px;
+	text-align: center;
+	border: 1px solid #01d1f2;
+	border-radius: 20px;
+	color: #fff;
+	cursor: pointer;
+	-webkit-transition: 0.3s ease-in-out;
+	-moz-transition: 0.3s ease-in-out;
+	-ms-transition: 0.3s ease-in-out;
+	-o-transition: 0.3s ease-in-out;
+	transition: 0.3s ease-in-out;
+}
+.boardLogin .submit:hover{
+	background: #01d1f2;
+	-webkit-transition: 0.3s ease-in-out;
+	-moz-transition: 0.3s ease-in-out;
+	-ms-transition: 0.3s ease-in-out;
+	-o-transition: 0.3s ease-in-out;
+	transition: 0.3s ease-in-out;
+}
+
+
+@media screen and (max-width: 1919px) and (min-width: 1680px){
+	.boardLogin .logo{
+		margin-bottom: 38px;
+	}
+	.boardLogin .inpGroup{
+		padding: 12px 22px 12px 50px;
+		border-radius: 22px;
+	}
+	.boardLogin .inpGroup span{
+		width: 20px;
+		height: 20px;
+		top: 12px;
+		left: 22px;
+	}
+	.boardLogin .prompt{
+		min-height: 20px;
+		padding: 5px 22px 10px 22px;
+	}
+	.boardLogin p{
+		line-height: 16px;
+		
+	}
+	.boardLogin .submit{
+		height: 38px;
+		line-height: 36px;
+		border-radius: 20px;
+	}
+}
+
+@media screen and (max-width: 1679px) and (min-width: 1440px){
+	.boardLogin .logo{
+		margin-bottom: 34px;
+	}
+	.boardLogin .inpGroup{
+		padding: 8px 18px 8px 48px;
+		border-radius: 18px;
+	}
+	.boardLogin .inpGroup span{
+		width: 18px;
+		height: 18px;
+		top: 8px;
+		left: 18px;
+	}
+	.boardLogin .inpGroup span.loginIco1{
+		background: url(../images/s_ico6.png);
+		background-size: 100% 100%;
+	}
+	.boardLogin .inpGroup span.loginIco2{
+		background: url(../images/s_ico7.png);
+		background-size: 100% 100%;
+	}
+	.boardLogin .prompt{
+		min-height: 20px;
+		padding: 5px 18px 10px 18px;
+	}
+	.boardLogin p{
+		line-height: 16px;
+		
+	}
+	.boardLogin .submit{
+		height: 36px;
+		line-height: 34px;
+		border-radius: 18px;
+	}
+}
+
+@media screen and (max-width: 1439px){
+	.boardLogin .logo{
+		margin-bottom: 30px;
+	}
+	.boardLogin .inpGroup{
+		padding: 6px 16px 6px 46px;
+		border-radius: 16px;
+	}
+	.boardLogin .inpGroup span{
+		width: 18px;
+		height: 18px;
+		top: 6px;
+		left: 16px;
+	}
+	.boardLogin .inpGroup span.loginIco1{
+		background: url(../images/s_ico6.png);
+		background-size: 100% 100%;
+	}
+	.boardLogin .inpGroup span.loginIco2{
+		background: url(../images/s_ico7.png);
+		background-size: 100% 100%;
+	}
+	.boardLogin .prompt{
+		min-height: 20px;
+		padding: 2px 16px 6px 16px;
+	}
+	.boardLogin p{
+		line-height: 16px;
+		
+	}
+	.boardLogin .submit{
+		height: 32px;
+		line-height: 30px;
+		border-radius: 16px;
+	}
+}

BIN
app-backend-web/src/main/webapp/resources/index/images/bg.jpg


BIN
app-backend-web/src/main/webapp/resources/index/images/bgImg.png


BIN
app-backend-web/src/main/webapp/resources/index/images/gz.png


BIN
app-backend-web/src/main/webapp/resources/index/images/infoBg.png


BIN
app-backend-web/src/main/webapp/resources/index/images/loginBg.jpg


BIN
app-backend-web/src/main/webapp/resources/index/images/logo.png


BIN
app-backend-web/src/main/webapp/resources/index/images/s_ico2.png


BIN
app-backend-web/src/main/webapp/resources/index/images/s_ico3.png


BIN
app-backend-web/src/main/webapp/resources/index/images/s_ico5.png


BIN
app-backend-web/src/main/webapp/resources/index/images/s_ico6.png


BIN
app-backend-web/src/main/webapp/resources/index/images/s_ico7.png


BIN
app-backend-web/src/main/webapp/resources/index/images/s_ico8.png


BIN
app-backend-web/src/main/webapp/resources/index/images/titBg.png


+ 133 - 0
app-backend-web/src/main/webapp/resources/index/js/app.js

@@ -0,0 +1,133 @@
+/* -----------------------------------------------
+/* How to use? : Check the GitHub README
+/* ----------------------------------------------- */
+
+/* To load a config file (particles.json) you need to host this demo (MAMP/WAMP/local)... */
+/*
+particlesJS.load('particles-js', 'particles.json', function() {
+  console.log('particles.js loaded - callback');
+});
+*/
+
+/* Otherwise just put the config content (json): */
+
+particlesJS('particles-js',
+  
+  {
+    "particles": {
+      "number": {
+        "value": 40,
+        "density": {
+          "enable": true,
+          "value_area": 800
+        }
+      },
+      "color": {
+        "value": "#ffffff"
+      },
+      "shape": {
+        "type": "circle",
+        "stroke": {
+          "width": 0,
+          "color": "#000000"
+        },
+        "polygon": {
+          "nb_sides": 5
+        },
+        "image": {
+          "src": "img/github.svg",
+          "width": 100,
+          "height": 100
+        }
+      },
+      "opacity": {
+        "value": 0.5,
+        "random": false,
+        "anim": {
+          "enable": false,
+          "speed": 1,
+          "opacity_min": 0.1,
+          "sync": false
+        }
+      },
+      "size": {
+        "value": 5,
+        "random": true,
+        "anim": {
+          "enable": false,
+          "speed": 40,
+          "size_min": 0.1,
+          "sync": false
+        }
+      },
+      "line_linked": {
+        "enable": true,
+        "distance": 150,
+        "color": "#ffffff",
+        "opacity": 0.4,
+        "width": 1
+      },
+      "move": {
+        "enable": true,
+        "speed": 3,
+        "direction": "none",
+        "random": false,
+        "straight": false,
+        "out_mode": "out",
+        "attract": {
+          "enable": false,
+          "rotateX": 600,
+          "rotateY": 1200
+        }
+      }
+    },
+    "interactivity": {
+      "detect_on": "canvas",
+      "events": {
+        "onhover": {
+          "enable": true,
+          "mode": "repulse"
+        },
+        "onclick": {
+          "enable": true,
+          "mode": "push"
+        },
+        "resize": true
+      },
+      "modes": {
+        "grab": {
+          "distance": 400,
+          "line_linked": {
+            "opacity": 1
+          }
+        },
+        "bubble": {
+          "distance": 400,
+          "size": 40,
+          "duration": 2,
+          "opacity": 8,
+          "speed": 3
+        },
+        "repulse": {
+          "distance": 200
+        },
+        "push": {
+          "particles_nb": 4
+        },
+        "remove": {
+          "particles_nb": 2
+        }
+      }
+    },
+    "retina_detect": true,
+    "config_demo": {
+      "hide_card": false,
+      "background_color": "#b61924",
+      "background_image": "",
+      "background_position": "50% 50%",
+      "background_repeat": "no-repeat",
+      "background_size": "cover"
+    }
+  }
+
+);

+ 104 - 0
app-backend-web/src/main/webapp/resources/index/js/bg.js

@@ -0,0 +1,104 @@
+//宇宙特效
+//最新最全最好的Bootstrap模板:http://www.bootstrapmb.com
+"use strict";
+var canvas = document.getElementById('canvas'),
+  ctx = canvas.getContext('2d'),
+  w = canvas.width = window.innerWidth,
+  h = canvas.height = window.innerHeight,
+
+  hue = 217,
+  stars = [],
+  count = 0,
+  maxStars = 1300;//星星数量
+
+var canvas2 = document.createElement('canvas'),
+  ctx2 = canvas2.getContext('2d');
+canvas2.width = 100;
+canvas2.height = 100;
+var half = canvas2.width / 2,
+  gradient2 = ctx2.createRadialGradient(half, half, 0, half, half, half);
+gradient2.addColorStop(0.025, '#CCC');
+gradient2.addColorStop(0.1, 'hsl(' + hue + ', 61%, 33%)');
+gradient2.addColorStop(0.25, 'hsl(' + hue + ', 64%, 6%)');
+gradient2.addColorStop(1, 'transparent');
+
+ctx2.fillStyle = gradient2;
+ctx2.beginPath();
+ctx2.arc(half, half, half, 0, Math.PI * 2);
+ctx2.fill();
+
+// End cache
+
+function random(min, max) {
+  if (arguments.length < 2) {
+    max = min;
+    min = 0;
+  }
+
+  if (min > max) {
+    var hold = max;
+    max = min;
+    min = hold;
+  }
+
+  return Math.floor(Math.random() * (max - min + 1)) + min;
+}
+
+function maxOrbit(x, y) {
+  var max = Math.max(x, y),
+    diameter = Math.round(Math.sqrt(max * max + max * max));
+  return diameter / 2;
+  //星星移动范围,值越大范围越小,
+}
+
+var Star = function() {
+
+  this.orbitRadius = random(maxOrbit(w, h));
+  this.radius = random(60, this.orbitRadius) / 8; 
+  //星星大小
+  this.orbitX = w / 2;
+  this.orbitY = h / 2;
+  this.timePassed = random(0, maxStars);
+  this.speed = random(this.orbitRadius) / 1000000; 
+  //星星移动速度
+  this.alpha = random(2, 10)/1000;
+
+  count++;
+  stars[count] = this;
+}
+
+Star.prototype.draw = function() {
+  var x = Math.sin(this.timePassed) * this.orbitRadius + this.orbitX,
+    y = Math.cos(this.timePassed) * this.orbitRadius + this.orbitY,
+    twinkle = random(10);
+
+  if (twinkle === 1 && this.alpha > 0) {
+    this.alpha -= 0.05;
+  } else if (twinkle === 2 && this.alpha < 1) {
+    this.alpha += 0.05;
+  }
+
+  ctx.globalAlpha = this.alpha;
+  ctx.drawImage(canvas2, x - this.radius / 2, y - this.radius / 2, this.radius, this.radius);
+  this.timePassed += this.speed;
+}
+
+for (var i = 0; i < maxStars; i++) {
+  new Star();
+}
+
+function animation() {
+  ctx.globalCompositeOperation = 'source-over';
+  ctx.globalAlpha = 0.5; //尾巴
+  ctx.fillStyle = 'hsla(' + hue + ', 64%, 6%, 2)';
+  ctx.fillRect(0, 0, w, h)
+
+  ctx.globalCompositeOperation = 'lighter';
+  for (var i = 1, l = stars.length; i < l; i++) {
+    stars[i].draw();
+  };
+
+  window.requestAnimationFrame(animation);
+}
+
+animation();

Різницю між файлами не показано, бо вона завелика
+ 1 - 0
app-backend-web/src/main/webapp/resources/index/js/echarts.min.js


+ 61 - 0
app-backend-web/src/main/webapp/resources/index/js/fontscroll.js

@@ -0,0 +1,61 @@
+/**
+ +-------------------------------------------------------------------
+ * jQuery FontScroll - 文字行向上滚动插件 - http://java2.sinaapp.com
+ +-------------------------------------------------------------------
+ * @version    1.0.0 beta
+ * @since      2014.06.12
+ * @author     kongzhim <kongzhim@163.com> <http://java2.sinaapp.com>
+ * @github     http://git.oschina.net/kzm/FontScroll
+ +-------------------------------------------------------------------
+ */
+
+(function($){
+    $.fn.FontScroll = function(options){
+        var d = {time: 3000,s: 'fontColor',num: 1}
+        var o = $.extend(d,options);
+        
+
+        this.children('ul').addClass('line');
+        var _con = $('.line').eq(0);
+        var _conH = _con.height(); //滚动总高度
+        var _conChildH = _con.children().eq(0).height();//一次滚动高度
+        var _temp = _conChildH;  //临时变量
+        var _time = d.time;  //滚动间隔
+        var _s = d.s;  //滚动间隔
+
+
+        _con.clone().insertAfter(_con);//初始化克隆
+
+        //样式控制
+        var num = d.num;
+        var _p = this.find('li');
+        var allNum = _p.length;
+
+        _p.eq(num).addClass(_s);
+
+
+        var timeID = setInterval(Up,_time);
+		this.hover(function(){clearInterval(timeID)},function(){timeID = setInterval(Up,_time);});
+
+        function Up(){
+            _con.animate({marginTop: '-'+_conChildH});
+            //样式控制
+            _p.removeClass(_s);
+            num += 1;
+            _p.eq(num).addClass(_s);
+            
+            if(_conH == _conChildH){
+                _con.animate({marginTop: '-'+_conChildH},"normal",over);
+            } else {
+                _conChildH += _temp;
+            }
+        }
+        function over(){
+            _con.attr("style",'margin-top:0');
+            _conChildH = _temp;
+            num = 1;
+            _p.removeClass(_s);
+            _p.eq(num).addClass(_s);
+        }
+    }
+})(jQuery);

+ 233 - 0
app-backend-web/src/main/webapp/resources/index/js/jquery.animsition.js

@@ -0,0 +1,233 @@
+/*!
+ * animsition v3.4.3
+ * http://blivesta.github.io/animsition/
+ * Licensed under MIT
+ * Author : blivesta
+ * http://blivesta.com/
+ */
+(function($) {
+  "use strict";
+  var namespace = "animsition";
+  var methods = {
+    init: function(options) {
+      options = $.extend({
+        inClass: "fade-in",
+        outClass: "fade-out",
+        inDuration: 1500,
+        outDuration: 800,
+        linkElement: ".animsition-link",
+        loading: true,
+        loadingParentElement: "body",
+        loadingClass: "animsition-loading",
+        unSupportCss: [ "animation-duration", "-webkit-animation-duration", "-o-animation-duration" ],
+        overlay: false,
+        overlayClass: "animsition-overlay-slide",
+        overlayParentElement: "body"
+      }, options);
+      var support = methods.supportCheck.call(this, options);
+      if (!support) {
+        if (!("console" in window)) {
+          window.console = {};
+          window.console.log = function(str) {
+            return str;
+          };
+        }
+        console.log("Animsition does not support this browser.");
+        return methods.destroy.call(this);
+      }
+      var overlayMode = methods.optionCheck.call(this, options);
+      if (overlayMode) {
+        methods.addOverlay.call(this, options);
+      }
+      if (options.loading) {
+        methods.addLoading.call(this, options);
+      }
+      return this.each(function() {
+        var _this = this;
+        var $this = $(this);
+        var $window = $(window);
+        var data = $this.data(namespace);
+        if (!data) {
+          options = $.extend({}, options);
+          $this.data(namespace, {
+            options: options
+          });
+          $window.on("load." + namespace + " pageshow." + namespace, function() {
+            methods.pageIn.call(_this);
+          });
+          $window.on("unload." + namespace, function() {});
+          $(options.linkElement).on("click." + namespace, function(event) {
+            event.preventDefault();
+            var $self = $(this);
+            methods.pageOut.call(_this, $self);
+          });
+        }
+      });
+    },
+    addOverlay: function(options) {
+      $(options.overlayParentElement).prepend('<div class="' + options.overlayClass + '"></div>');
+    },
+    addLoading: function(options) {
+      $(options.loadingParentElement).append('<div class="' + options.loadingClass + '"></div>');
+    },
+    removeLoading: function() {
+      var $this = $(this);
+      var options = $this.data(namespace).options;
+      var $loading = $(options.loadingParentElement).children("." + options.loadingClass);
+      $loading.fadeOut().remove();
+    },
+    supportCheck: function(options) {
+      var $this = $(this);
+      var props = options.unSupportCss;
+      var propsNum = props.length;
+      var support = false;
+      if (propsNum === 0) {
+        support = true;
+      }
+      for (var i = 0; i < propsNum; i++) {
+        if (typeof $this.css(props[i]) === "string") {
+          support = true;
+          break;
+        }
+      }
+      return support;
+    },
+    optionCheck: function(options) {
+      var $this = $(this);
+      var overlayMode;
+      if (options.overlay || $this.data("animsition-overlay")) {
+        overlayMode = true;
+      } else {
+        overlayMode = false;
+      }
+      return overlayMode;
+    },
+    animationCheck: function(data, stateClass, stateIn) {
+      var $this = $(this);
+      var options = $this.data(namespace).options;
+      var dataType = typeof data;
+      var dataDuration = !stateClass && dataType === "number";
+      var dataClass = stateClass && dataType === "string" && data.length > 0;
+      if (dataDuration || dataClass) {
+        data = data;
+      } else if (stateClass && stateIn) {
+        data = options.inClass;
+      } else if (!stateClass && stateIn) {
+        data = options.inDuration;
+      } else if (stateClass && !stateIn) {
+        data = options.outClass;
+      } else if (!stateClass && !stateIn) {
+        data = options.outDuration;
+      }
+      return data;
+    },
+    pageIn: function() {
+      var _this = this;
+      var $this = $(this);
+      var options = $this.data(namespace).options;
+      var thisInDuration = $this.data("animsition-in-duration");
+      var thisInClass = $this.data("animsition-in");
+      var inDuration = methods.animationCheck.call(_this, thisInDuration, false, true);
+      var inClass = methods.animationCheck.call(_this, thisInClass, true, true);
+      var overlayMode = methods.optionCheck.call(_this, options);
+      if (options.loading) {
+        methods.removeLoading.call(_this);
+      }
+      if (overlayMode) {
+        methods.pageInOverlay.call(_this, inClass, inDuration);
+      } else {
+        methods.pageInBasic.call(_this, inClass, inDuration);
+      }
+    },
+    pageInBasic: function(inClass, inDuration) {
+      var $this = $(this);
+      $this.css({
+        "animation-duration": inDuration / 1e3 + "s"
+      }).addClass(inClass).animateCallback(function() {
+        $this.removeClass(inClass).css({
+          opacity: 1
+        });
+      });
+    },
+    pageInOverlay: function(inClass, inDuration) {
+      var $this = $(this);
+      var options = $this.data(namespace).options;
+      $this.css({
+        opacity: 1
+      });
+      $(options.overlayParentElement).children("." + options.overlayClass).css({
+        "animation-duration": inDuration / 1e3 + "s"
+      }).addClass(inClass);
+    },
+    pageOut: function($self) {
+      var _this = this;
+      var $this = $(this);
+      var options = $this.data(namespace).options;
+      var selfOutClass = $self.data("animsition-out");
+      var thisOutClass = $this.data("animsition-out");
+      var selfOutDuration = $self.data("animsition-out-duration");
+      var thisOutDuration = $this.data("animsition-out-duration");
+      var isOutClass = selfOutClass ? selfOutClass : thisOutClass;
+      var isOutDuration = selfOutDuration ? selfOutDuration : thisOutDuration;
+      var outClass = methods.animationCheck.call(_this, isOutClass, true, false);
+      var outDuration = methods.animationCheck.call(_this, isOutDuration, false, false);
+      var overlayMode = methods.optionCheck.call(_this, options);
+      var url = $self.attr("href");
+      if (overlayMode) {
+        methods.pageOutOverlay.call(_this, outClass, outDuration, url);
+      } else {
+        methods.pageOutBasic.call(_this, outClass, outDuration, url);
+      }
+    },
+    pageOutBasic: function(outClass, outDuration, url) {
+      var $this = $(this);
+      $this.css({
+        "animation-duration": outDuration / 1e3 + "s"
+      }).addClass(outClass).animateCallback(function() {
+        location.href = url;
+      });
+    },
+    pageOutOverlay: function(outClass, outDuration, url) {
+      var _this = this;
+      var $this = $(this);
+      var options = $this.data(namespace).options;
+      var thisInClass = $this.data("animsition-in");
+      var inClass = methods.animationCheck.call(_this, thisInClass, true, true);
+      $(options.overlayParentElement).children("." + options.overlayClass).css({
+        "animation-duration": outDuration / 1e3 + "s"
+      }).removeClass(inClass).addClass(outClass).animateCallback(function() {
+        $this.css({
+          opacity: 0
+        });
+        location.href = url;
+      });
+    },
+    destroy: function() {
+      return this.each(function() {
+        var $this = $(this);
+        $(window).unbind("." + namespace);
+        $this.css({
+          opacity: 1
+        }).removeData(namespace);
+      });
+    }
+  };
+  $.fn.animateCallback = function(callback) {
+    var end = "animationend webkitAnimationEnd mozAnimationEnd oAnimationEnd MSAnimationEnd";
+    return this.each(function() {
+      $(this).bind(end, function() {
+        $(this).unbind(end);
+        return callback.call(this);
+      });
+    });
+  };
+  $.fn.animsition = function(method) {
+    if (methods[method]) {
+      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+    } else if (typeof method === "object" || !method) {
+      return methods.init.apply(this, arguments);
+    } else {
+      $.error("Method " + method + " does not exist on jQuery." + namespace);
+    }
+  };
+})(jQuery);

Різницю між файлами не показано, бо вона завелика
+ 4 - 0
app-backend-web/src/main/webapp/resources/index/js/jquery.min.js


Різницю між файлами не показано, бо вона завелика
+ 3720 - 0
app-backend-web/src/main/webapp/resources/index/js/jquery.nicescroll.js


Різницю між файлами не показано, бо вона завелика
+ 9 - 0
app-backend-web/src/main/webapp/resources/index/js/jquery.shCircleLoader-min.js


Різницю між файлами не показано, бо вона завелика
+ 9 - 0
app-backend-web/src/main/webapp/resources/index/js/particles.min.js


+ 324 - 0
app-backend-web/src/main/webapp/resources/index/js/scanboard.js

@@ -0,0 +1,324 @@
+$(function(){
+	//页面淡入效果
+	$(".animsition").animsition({
+	    inClass               :   'fade-in',
+	    outClass              :   'fade-out',
+	    inDuration            :    300,
+	    outDuration           :    1000,
+	    // e.g. linkElement   :   'a:not([target="_blank"]):not([href^=#])'
+	    loading               :    false,
+	    loadingParentElement  :   'body', //animsition wrapper element
+	    loadingClass          :   'animsition-loading',
+	    unSupportCss          : [ 'animation-duration',
+	                              '-webkit-animation-duration',
+	                              '-o-animation-duration'
+	                            ],
+	    //"unSupportCss" option allows you to disable the "animsition" in case the css property in the array is not supported by your browser.
+	    //The default setting is to disable the "animsition" in a browser that does not support "animation-duration".
+
+	    overlay               :   false,
+
+	    overlayClass          :   'animsition-overlay-slide',
+	    overlayParentElement  :   'body'
+  	});
+
+	document.onreadystatechange = subSomething;
+	function subSomething()
+	{
+		if(document.readyState == "complete"){
+			$('#loader').hide();
+		}
+	}
+
+	//顶部时间
+	function getTime(){
+		var myDate = new Date();
+		var myYear = myDate.getFullYear(); //获取完整的年份(4位,1970-????)
+		var myMonth = myDate.getMonth()+1; //获取当前月份(0-11,0代表1月)
+		var myToday = myDate.getDate(); //获取当前日(1-31)
+		var myDay = myDate.getDay(); //获取当前星期X(0-6,0代表星期天)
+		var myHour = myDate.getHours(); //获取当前小时数(0-23)
+		var myMinute = myDate.getMinutes(); //获取当前分钟数(0-59)
+		var mySecond = myDate.getSeconds(); //获取当前秒数(0-59)
+		var week = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
+		var nowTime;
+
+		nowTime = myYear+'-'+fillZero(myMonth)+'-'+fillZero(myToday)+'&nbsp;&nbsp;'+week[myDay]+'&nbsp;&nbsp;'+fillZero(myHour)+':'+fillZero(myMinute)+':'+fillZero(mySecond);
+		$('.topTime').html(nowTime);
+	};
+	function fillZero(str){
+		var realNum;
+		if(str<10){
+			realNum	= '0'+str;
+		}else{
+			realNum	= str;
+		}
+		return realNum;
+	}
+	setInterval(getTime,1000);
+
+	function totalNum(obj,speed){
+		var singalNum = 0;
+		var timer;
+		var totalNum = obj.attr('total');
+
+		if(totalNum){
+			timer = setInterval(function(){
+				singalNum+=speed;
+				if(singalNum>=totalNum){
+					singalNum=totalNum;
+					clearInterval(timer);
+				}
+				obj.html(singalNum);
+			},1);
+		}
+	}
+
+
+
+    var myChart1 = echarts.init(document.getElementById('myChart1'));
+    var myChart2 = echarts.init(document.getElementById('myChart2'));
+    var myChart3 = echarts.init(document.getElementById('myChart3'));
+
+	var option1 = {
+		tooltip: {
+			trigger: 'item',
+            formatter: function(params) {
+                var res = params.name+'使用次数:'+params.data;
+                return res;
+            }
+		},
+		grid: {
+			top: '5%',
+			left: '0%',
+	        width: '100%',
+	        height: '95%',
+	        containLabel: true
+	    },
+		xAxis: {
+			data: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'],
+			axisLabel: {
+                show: true,
+                textStyle: {
+                    fontSize: '12px',
+                    color: '#fff',
+                }
+           	},
+           	axisLine:{
+                lineStyle:{
+                    color:'#fff',
+                    width:1,
+                }
+            }
+		},
+
+		yAxis: {
+			axisLabel: {
+                show: true,
+                textStyle: {
+                    fontSize: '12px',
+                    color: '#fff',
+                }
+           	},
+           	axisLine:{
+                lineStyle:{
+                    color:'#fff',
+                    width:1,
+                }
+            },
+            splitLine:{
+	            show:false,
+    		}
+		},
+
+		series :{
+			type: 'line',
+			data: ['5','14','3','6','8','18','11','4','8','7','16','13'],
+			itemStyle: {
+                normal: {
+                	barBorderRadius:[5, 5, 5, 5],
+                    color: new echarts.graphic.LinearGradient(
+                        0, 0, 0, 1,
+                        [
+                            {offset: 0, color: '#3876cd'},
+                            {offset: 0.5, color: '#45b4e7'},
+                            {offset: 1, color: '#54ffff'}
+                        ]
+                    ),
+                },
+            },
+		},
+	}
+	var option2 = {
+		legend: {
+			type: 'scroll',
+			orient: 'vertical',
+			right: 10,
+			top: 20,
+			bottom: 20,
+			textStyle:{//图例文字的样式
+				color:'#ccc'
+			},
+			data: [
+				{value: 10, name: '缺水报警'},
+				{value: 5, name: '缺清洁剂'},
+				{value: 15, name: '缺消毒水'},
+				{value: 25, name: '复位异常'},
+				{value: 20, name: '阻碍物异常'},
+				{value: 35, name: '断电异常'}
+			],
+		},
+		series: [
+			{
+				// name: '姓名',
+				type: 'pie',
+				radius: '55%',
+				label: {
+					normal: {
+						position: 'inner',
+						show : false
+					}
+				},
+				center: ['40%', '50%'],
+				data: [
+					{value: 10, name: '缺水报警'},
+					{value: 5, name: '缺清洁剂'},
+					{value: 15, name: '缺消毒水'},
+					{value: 25, name: '复位异常'},
+					{value: 20, name: '阻碍物异常'},
+					{value: 35, name: '断电异常'}
+				],
+				emphasis: {
+					itemStyle: {
+						shadowBlur: 10,
+						shadowOffsetX: 0,
+						shadowColor: 'rgba(0, 0, 0, 0.5)'
+					}
+				}
+			}
+		]
+	};
+	var option3 = {
+
+		tooltip: {
+			trigger: 'item',
+			formatter: function(params) {
+				var res = '本月'+params.name+'号运单数:'+params.data;
+				return res;
+			}
+		},
+		grid: {
+			top: '5%',
+			left: '0%',
+			width: '100%',
+			height: '95%',
+			containLabel: true
+		},
+		xAxis: {
+			data: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'],
+			axisLabel: {
+				show: true,
+				textStyle: {
+					fontSize: '12px',
+					color: '#fff',
+				}
+			},
+			axisLine:{
+				lineStyle:{
+					color:'#fff',
+					width:1,
+				}
+			}
+		},
+
+		yAxis: {
+			axisLabel: {
+				show: true,
+				textStyle: {
+					fontSize: '12px',
+					color: '#fff',
+				}
+			},
+			axisLine:{
+				lineStyle:{
+					color:'#fff',
+					width:1,
+				}
+			},
+			splitLine:{
+				show:false,
+			}
+		},
+
+		series :{
+			name: '',
+			type: 'bar',
+			barWidth : 10,
+			data: ['5','14','3','6','8','18','11','4','8','7','16','13'],
+			itemStyle: {
+				normal: {
+					barBorderRadius:[5, 5, 5, 5],
+					color: new echarts.graphic.LinearGradient(
+						0, 0, 0, 1,
+						[
+							{offset: 0, color: '#3876cd'},
+							{offset: 0.5, color: '#45b4e7'},
+							{offset: 1, color: '#54ffff'}
+						]
+					),
+				},
+			},
+		},
+	}
+	//列表文字滚动
+	$('#FontScroll').FontScroll({time: 3000,num: 1});
+
+	setTimeout(function(){
+
+		$('.progress').each(function(i,ele){
+			var PG = $(ele).attr('progress');
+			var PGNum = parseInt(PG);
+			var zero = 0;
+			var speed = 50;
+			var timer;
+
+			$(ele).find('h4').html(zero+'%');
+			if(PGNum<10){
+				$(ele).find('.progressBar span').addClass('bg-red');
+				$(ele).find('h3 i').addClass('color-red');
+			}else if(PGNum>=10 && PGNum<50){
+				$(ele).find('.progressBar span').addClass('bg-yellow');
+				$(ele).find('h3 i').addClass('color-yellow');
+			}else if(PGNum>=50 && PGNum<100){
+				$(ele).find('.progressBar span').addClass('bg-blue');
+				$(ele).find('h3 i').addClass('color-blue');
+			}else{
+				$(ele).find('.progressBar span').addClass('bg-green');
+				$(ele).find('h3 i').addClass('color-green');
+			}
+			$(ele).find('.progressBar span').animate({width: PG},PGNum*speed);
+			timer = setInterval(function(){
+				zero++;
+				$(ele).find('h4').html(zero+'%');
+				if(zero==PGNum){
+					clearInterval(timer);
+				}
+			},speed);
+		});
+
+		//总计清洗次数
+		totalNum($('#totalNum'),1000);
+
+		myChart1.setOption(option1);
+		myChart2.setOption(option2);
+		myChart3.setOption(option3);
+
+	},500);
+
+	$(window).resize(function(){
+		myChart1.resize();
+		myChart2.resize();
+		myChart3.resize();
+	});
+
+});