haogh 11 月之前
當前提交
d25d89c676
共有 100 個文件被更改,包括 10415 次插入0 次删除
  1. 53 0
      .gitignore
  2. 8 0
      README.txt
  3. 3 0
      WebRoot/META-INF/MANIFEST.MF
  4. 二進制
      WebRoot/WEB-INF/lib/aliyun-java-sdk-core-3.3.1.jar
  5. 二進制
      WebRoot/WEB-INF/lib/aliyun-java-sdk-dysmsapi-1.0.0.jar
  6. 二進制
      WebRoot/WEB-INF/lib/aliyun-java-sdk-dyvmsapi-1.0.0-SNAPSHOT.jar
  7. 二進制
      WebRoot/WEB-INF/lib/aliyun-sdk-mns-1.1.8.jar
  8. 二進制
      WebRoot/WEB-INF/lib/aliyun-sdk-oss-3.8.0.jar
  9. 二進制
      WebRoot/WEB-INF/lib/baidu-aip-sdk-4.11.1.jar
  10. 二進制
      WebRoot/WEB-INF/lib/commons-beanutils-1.7.0.jar
  11. 二進制
      WebRoot/WEB-INF/lib/commons-codec-1.10.jar
  12. 二進制
      WebRoot/WEB-INF/lib/commons-httpclient-3.1.jar
  13. 二進制
      WebRoot/WEB-INF/lib/commons-io-2.5.jar
  14. 二進制
      WebRoot/WEB-INF/lib/commons-logging-1.2.jar
  15. 二進制
      WebRoot/WEB-INF/lib/hmsoft-mvc-common-2.0.0.jar
  16. 二進制
      WebRoot/WEB-INF/lib/hmsoft-mvc-core-2.0.0.jar
  17. 二進制
      WebRoot/WEB-INF/lib/hmsoft-pay-2.0.0.jar
  18. 二進制
      WebRoot/WEB-INF/lib/hmsoft-sms.jar
  19. 二進制
      WebRoot/WEB-INF/lib/hmsoft-weixin-2.0.0.jar
  20. 二進制
      WebRoot/WEB-INF/lib/httpasyncclient-4.1.jar
  21. 二進制
      WebRoot/WEB-INF/lib/httpclient-4.5.7.jar
  22. 二進制
      WebRoot/WEB-INF/lib/httpcore-4.4.11.jar
  23. 二進制
      WebRoot/WEB-INF/lib/httpcore-nio-4.4.1.jar
  24. 二進制
      WebRoot/WEB-INF/lib/httpmime-4.5.11.jar
  25. 二進制
      WebRoot/WEB-INF/lib/itext7-barcodes-7.0.1.jar
  26. 二進制
      WebRoot/WEB-INF/lib/itext7-font-asian-7.0.1.jar
  27. 二進制
      WebRoot/WEB-INF/lib/itext7-forms-7.0.1.jar
  28. 二進制
      WebRoot/WEB-INF/lib/itext7-hyph-7.0.1.jar
  29. 二進制
      WebRoot/WEB-INF/lib/itext7-io-7.0.1.jar
  30. 二進制
      WebRoot/WEB-INF/lib/itext7-itext-rups-7.0.1.jar
  31. 二進制
      WebRoot/WEB-INF/lib/itext7-kernel-7.0.1.jar
  32. 二進制
      WebRoot/WEB-INF/lib/itext7-layout-7.0.1.jar
  33. 二進制
      WebRoot/WEB-INF/lib/itext7-pdfa-7.0.1.jar
  34. 二進制
      WebRoot/WEB-INF/lib/itext7-pdftest-7.0.1.jar
  35. 二進制
      WebRoot/WEB-INF/lib/itext7-sign-7.0.1.jar
  36. 二進制
      WebRoot/WEB-INF/lib/javadbf.jar
  37. 二進制
      WebRoot/WEB-INF/lib/jdom-1.1.3.jar
  38. 二進制
      WebRoot/WEB-INF/lib/json-lib-2.4-jdk15.jar
  39. 二進制
      WebRoot/WEB-INF/lib/mysql-connector-java-8.0.13.jar
  40. 二進制
      WebRoot/WEB-INF/lib/poi-4.1.0.jar
  41. 二進制
      WebRoot/WEB-INF/lib/poi-excelant-4.1.0.jar
  42. 二進制
      WebRoot/WEB-INF/lib/poi-ooxml-4.1.0.jar
  43. 二進制
      WebRoot/WEB-INF/lib/poi-ooxml-schemas-4.1.0.jar
  44. 二進制
      WebRoot/WEB-INF/lib/poi-scratchpad-4.1.0.jar
  45. 137 0
      WebRoot/admis/admis.html
  46. 133 0
      WebRoot/admis/admis.ymbk.html
  47. 122 0
      WebRoot/admis/admis.ymfz.html
  48. 118 0
      WebRoot/admis/admis.ymfz.test.html
  49. 514 0
      WebRoot/admis/css/site.css
  50. 231 0
      WebRoot/admis/css/ui.css
  51. 253 0
      WebRoot/admis/css/wechat.css
  52. 2313 0
      WebRoot/admis/css/weui.css
  53. 130 0
      WebRoot/admis/index.html
  54. 110 0
      WebRoot/admis/js/admis.js
  55. 146 0
      WebRoot/admis/js/admis.ym.js
  56. 397 0
      WebRoot/admis/js/angular.app.js
  57. 117 0
      WebRoot/admis/js/angular.filter.js
  58. 91 0
      WebRoot/admis/js/angular.init.js
  59. 390 0
      WebRoot/admis/js/angular.router.js
  60. 79 0
      WebRoot/admis/js/angular.tabbar.js
  61. 397 0
      WebRoot/admis/js/frame.app.js
  62. 32 0
      WebRoot/admis/js/func.js
  63. 0 0
      WebRoot/admis/js/jweixin-1.6.0.js
  64. 118 0
      WebRoot/admis/routes/main/main.html
  65. 180 0
      WebRoot/admis/routes/main/main.js
  66. 171 0
      WebRoot/charts/visualizedcharts/css/numbercss.css
  67. 28 0
      WebRoot/charts/visualizedcharts/css/visualizedCharts.css
  68. 二進制
      WebRoot/charts/visualizedcharts/images/headerbg.png
  69. 二進制
      WebRoot/charts/visualizedcharts/images/partbg1.png
  70. 63 0
      WebRoot/charts/visualizedcharts/images/test.html
  71. 25 0
      WebRoot/charts/visualizedcharts/js/china.js
  72. 21 0
      WebRoot/charts/visualizedcharts/js/echarts.min.js
  73. 84 0
      WebRoot/charts/visualizedcharts/js/jquery.numscroll.js
  74. 952 0
      WebRoot/charts/visualizedcharts/js/visualizedCharts.js
  75. 1105 0
      WebRoot/charts/visualizedcharts/js/visualizedCharts2.js
  76. 76 0
      WebRoot/charts/visualizedcharts/visualizedCharts.html
  77. 二進制
      WebRoot/favicon.ico
  78. 二進制
      WebRoot/fonts/10047.ttf
  79. 二進制
      WebRoot/fonts/STSONG.TTF
  80. 二進制
      WebRoot/fonts/cert.jpg
  81. 二進制
      WebRoot/fonts/school/10030.png
  82. 二進制
      WebRoot/fonts/school/10047.png
  83. 二進制
      WebRoot/fonts/school/10048-big.png
  84. 二進制
      WebRoot/fonts/school/10048-sm.png
  85. 二進制
      WebRoot/fonts/school/10048-small.png
  86. 二進制
      WebRoot/fonts/school/10048.jpg
  87. 二進制
      WebRoot/fonts/school/10331.png
  88. 二進制
      WebRoot/fonts/school/10331s.png
  89. 二進制
      WebRoot/fonts/school/10654.jpg
  90. 二進制
      WebRoot/fonts/school/10728.png
  91. 二進制
      WebRoot/fonts/school/10729.png
  92. 二進制
      WebRoot/fonts/scissor.png
  93. 二進制
      WebRoot/fonts/video_play.png
  94. 二進制
      WebRoot/fonts/yz.png
  95. 74 0
      WebRoot/judge/js/angular.app.js
  96. 92 0
      WebRoot/judge/js/angular.init.js
  97. 906 0
      WebRoot/judge/js/angular.login.js
  98. 189 0
      WebRoot/judge/js/jq-signature.js
  99. 45 0
      WebRoot/judge/judge.css
  100. 512 0
      WebRoot/judge/judge.html

+ 53 - 0
.gitignore

@@ -0,0 +1,53 @@
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+*.class
+*.log
+
+
+### Eclipse & STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+/logs/
+/log/
+/data/
+
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+
+### VS Code ###
+.vscode
+node_modules
+package-lock.json
+yarn.lock
+
+
+### Package Files ###
+*.zip
+*.war
+*.ear
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+target/
+
+.flattened-pom.xml
+.DS_Store
+

+ 8 - 0
README.txt

@@ -0,0 +1,8 @@
+艺术类招生报名的后端+考生微信端报名
+wechat:公用的微信报名页面
+wechatgk:广东开发大学-学位英语预约微信报名页
+ymbk:央美本科的微信报名页面
+ymfz:央美附中的微信报名页面
+xyfz:西音附中的微信报名页面
+web:武音的PC报名页面
+judge:评委评分页面

+ 3 - 0
WebRoot/META-INF/MANIFEST.MF

@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path: 
+

二進制
WebRoot/WEB-INF/lib/aliyun-java-sdk-core-3.3.1.jar


二進制
WebRoot/WEB-INF/lib/aliyun-java-sdk-dysmsapi-1.0.0.jar


二進制
WebRoot/WEB-INF/lib/aliyun-java-sdk-dyvmsapi-1.0.0-SNAPSHOT.jar


二進制
WebRoot/WEB-INF/lib/aliyun-sdk-mns-1.1.8.jar


二進制
WebRoot/WEB-INF/lib/aliyun-sdk-oss-3.8.0.jar


二進制
WebRoot/WEB-INF/lib/baidu-aip-sdk-4.11.1.jar


二進制
WebRoot/WEB-INF/lib/commons-beanutils-1.7.0.jar


二進制
WebRoot/WEB-INF/lib/commons-codec-1.10.jar


二進制
WebRoot/WEB-INF/lib/commons-httpclient-3.1.jar


二進制
WebRoot/WEB-INF/lib/commons-io-2.5.jar


二進制
WebRoot/WEB-INF/lib/commons-logging-1.2.jar


二進制
WebRoot/WEB-INF/lib/hmsoft-mvc-common-2.0.0.jar


二進制
WebRoot/WEB-INF/lib/hmsoft-mvc-core-2.0.0.jar


二進制
WebRoot/WEB-INF/lib/hmsoft-pay-2.0.0.jar


二進制
WebRoot/WEB-INF/lib/hmsoft-sms.jar


二進制
WebRoot/WEB-INF/lib/hmsoft-weixin-2.0.0.jar


二進制
WebRoot/WEB-INF/lib/httpasyncclient-4.1.jar


二進制
WebRoot/WEB-INF/lib/httpclient-4.5.7.jar


二進制
WebRoot/WEB-INF/lib/httpcore-4.4.11.jar


二進制
WebRoot/WEB-INF/lib/httpcore-nio-4.4.1.jar


二進制
WebRoot/WEB-INF/lib/httpmime-4.5.11.jar


二進制
WebRoot/WEB-INF/lib/itext7-barcodes-7.0.1.jar


二進制
WebRoot/WEB-INF/lib/itext7-font-asian-7.0.1.jar


二進制
WebRoot/WEB-INF/lib/itext7-forms-7.0.1.jar


二進制
WebRoot/WEB-INF/lib/itext7-hyph-7.0.1.jar


二進制
WebRoot/WEB-INF/lib/itext7-io-7.0.1.jar


二進制
WebRoot/WEB-INF/lib/itext7-itext-rups-7.0.1.jar


二進制
WebRoot/WEB-INF/lib/itext7-kernel-7.0.1.jar


二進制
WebRoot/WEB-INF/lib/itext7-layout-7.0.1.jar


二進制
WebRoot/WEB-INF/lib/itext7-pdfa-7.0.1.jar


二進制
WebRoot/WEB-INF/lib/itext7-pdftest-7.0.1.jar


二進制
WebRoot/WEB-INF/lib/itext7-sign-7.0.1.jar


二進制
WebRoot/WEB-INF/lib/javadbf.jar


二進制
WebRoot/WEB-INF/lib/jdom-1.1.3.jar


二進制
WebRoot/WEB-INF/lib/json-lib-2.4-jdk15.jar


二進制
WebRoot/WEB-INF/lib/mysql-connector-java-8.0.13.jar


二進制
WebRoot/WEB-INF/lib/poi-4.1.0.jar


二進制
WebRoot/WEB-INF/lib/poi-excelant-4.1.0.jar


二進制
WebRoot/WEB-INF/lib/poi-ooxml-4.1.0.jar


二進制
WebRoot/WEB-INF/lib/poi-ooxml-schemas-4.1.0.jar


二進制
WebRoot/WEB-INF/lib/poi-scratchpad-4.1.0.jar


+ 137 - 0
WebRoot/admis/admis.html

@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html>
+
+<meta charset="utf-8" />
+<head>
+
+<title>南京艺术学院2022年本科招生录取查询</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<meta http-equiv="pragma" content="no-cache">
+<meta http-equiv="cache-control" content="no-cache">
+<meta http-equiv="expires" content="0">
+<link href="https://lib.baomitu.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
+<link href="https://lib.baomitu.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
+<link href="css/site.css" rel="stylesheet">
+
+<!--[if lt IE 9]>
+    <script src="https://cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script>
+    <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
+  <![endif]-->
+</head>
+<script type="text/javascript" src="https://lib.baomitu.com/angular.js/1.2.32/angular.min.js"></script>
+<script src="js/admis.js"></script>
+<script src="js/frame.app.js"></script>
+<style type="text/css">
+table {border-collapse:collapse;}
+table,th, td {border: 1px solid green; padding-left:10px; padding-right:10px;}
+</style>
+<body ng-app="scoreApp" ng-controller="scoreController">
+	<header class="site-header jumbotron">
+		<div class="container">
+			<div class="row">
+				<div class="col-xs-12">
+					<h1>南京艺术学院2023年本科招生录取查询</h1>
+					<form class="form-inline" role="search">
+						<div class="form-group">
+							<input type="text" class="form-control id_card" id="cert_id" autocomplete="off" maxlength="18" ng-model="cert_id" placeholder="请输入考生证件号码" maxlength="18">
+						</div>
+						<br>
+						<div class="form-group">
+							<input type="text" class="form-control id_card" id="std_name" autocomplete="off" ng-model="std_name" placeholder="请输入考生姓名"   >
+						</div>
+						<br>
+						<div class="form-group">
+							<input type="text" class="form-control id_card" id="exam_id" autocomplete="off" ng-model="exam_id" placeholder="请输入考生号" ng-keyup="changeStdName($event)"  >
+						</div>
+						<br>						
+						<div class="form-group">
+							&nbsp;&nbsp;&nbsp;&nbsp;
+							<button type="button" class="btn btn-danger btn-lg" ng-click="goSearch()">录取查询</button>
+							&nbsp;&nbsp;&nbsp;&nbsp;
+						</div>
+					</form>
+				</div>
+			</div>
+		</div>
+	</header>
+	<div ng-if="map!=undefiend">
+		<div class="panel  text-2x">
+			<div class="panel-heading text-center">考生基本信息</div>
+			<div  align="center">
+				<table class="table table-striped b-t b-light"   >
+					<tbody>
+						<tr  >
+							<td>姓名</td>
+							<td>{{map.std_name}}</td>
+					</tr>
+						<tr >
+							<td>性别</td>
+							<td>{{map.std_sex}}</td>							
+						</tr>
+						<tr >
+							<td>生源地</td>
+							<td>{{map.province_name}}</td>
+						</tr>
+						<tr >							
+							<td>考生号</td>
+							<td>{{map.exam_id}}</td>
+						</tr>
+						<tr >
+							<td>证件号码</td>
+							<td>{{map.cert_id}}</td>
+						</tr>
+						<tr >
+							<td>录取院系</td>
+							<td>{{map.admit_depart}}</td>
+						</tr>
+						<tr >							
+							<td>录取专业</td>
+							<td>{{map.aspect_name}}</td>
+						</tr>
+						<tr >
+							<td>学制</td>
+							<td>{{map.school_system}}</td>
+						</tr>
+						<tr ng-if="map.ems!=null" >							
+							<td >EMS单号</td>
+							<td class="text-danger">{{map.ems}}</td>
+						</tr>
+					</tbody>
+				</table>
+			</div>
+		</div>
+		
+	</div>
+	<!-- 未录取考生显示 -->
+	<div ng-if="admisFlag == 'noAdmis'">
+		<div class="panel panel-success text-2x">
+			<div class="panel-heading text-center">考生基本信息</div>
+			<div  align="center">
+				<table class="table table-striped b-t b-light">
+					<tbody>
+						<tr>
+							<td>证件</td>
+							<td>{{cert_id}}</td>
+						</tr>
+						<tr>
+							<td>考生姓名</td>
+							<td>{{std_name}}</td>
+						</tr>
+						<tr>
+							<td>考试号</td>
+							<td>{{exam_id}}</td>
+						</tr>
+						<tr>
+							<td>录取情况</td>
+							<td class="text-danger">未录取</td>
+						</tr>
+					</tbody>
+				</table>
+			</div>
+		</div>
+	</div>
+
+	<div>&nbsp;</div>
+</body>
+</html>

+ 133 - 0
WebRoot/admis/admis.ymbk.html

@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html>
+
+<meta charset="utf-8" />
+<head>
+
+<title>2022年中央美术学院本科招生</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<meta http-equiv="pragma" content="no-cache">
+<meta http-equiv="cache-control" content="no-cache">
+<meta http-equiv="expires" content="0">
+<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
+<link href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
+<link href="css/site.css" rel="stylesheet">
+
+<!--[if lt IE 9]>
+    <script src="https://cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script>
+    <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
+  <![endif]-->
+</head>
+
+<script src="https://lib.baomitu.com/jquery/1.12.4/jquery.min.js"></script>
+
+<!-- jquery-weui -->
+<script src="https://lib.baomitu.com/jquery-weui/1.2.1/js/jquery-weui.min.js"></script>
+<script src="https://lib.baomitu.com/jquery-weui/1.2.1/js/swiper.min.js"></script>
+
+<!--  angular -->
+<script src="https://lib.baomitu.com/angular.js/1.7.8/angular.min.js"></script>
+<script src="https://lib.baomitu.com/angular-sanitize/1.7.8/angular-sanitize.min.js"></script>
+<script src="https://lib.baomitu.com/angular-ui-router/1.0.22/angular-ui-router.min.js"></script>
+<script src="https://lib.baomitu.com/ngStorage/0.3.11/ngStorage.min.js"></script>
+<script src="https://lib.baomitu.com/oclazyload/1.1.0/ocLazyLoad.min.js"></script>
+<!-- clipboard -->
+<script src="https://lib.baomitu.com/clipboard.js/2.0.4/clipboard.min.js"></script>
+
+<!-- private js -->
+<script src="js/jweixin-1.6.0.js?v=1.1.5"></script>
+<script src="js/func.js"></script>
+<script src="js/angular.init.js?v=1.0.6"></script>
+<script src="js/angular.filter.js?v=1.0.2"></script>
+<script src="js/angular.router.js?v=1.0.5"></script>
+<script src="js/angular.app.js?v=1.1.5"></script>
+<script src="js/angular.tabbar.js?v=1.0.8"></script>
+<script src="js/admis.ym.js?v=1.0.1"></script>
+<script src="js/frame.app.js"></script>
+<body ng-app="scoreApp" ng-controller="scoreController">
+	<header class="site-header-ym jumbotron">
+		<div class="container">
+			<div class="row">
+				<div class="col-xs-12">
+					<h1>2022年中央美术学院本科招生</h1>
+					<p>
+						<span><h2>录取查询</h2></span>
+					</p>
+					<form class="form-inline" role="search">
+						<table style="width:100%" border="0">
+							<tr>
+								<td>
+									<div class="form-group">
+										<input type="text" class="form-control id_card-ym" id="exam_id" autocomplete="off" ng-model="exam_id" placeholder="请输入考生号">
+									</div>									
+								</td>
+							</tr>
+							<tr>
+								<td>
+									<div class="form-group">
+										<input type="text" class="form-control id_card-ym" id="cert_id" autocomplete="off" maxlength="18" ng-model="cert_id" placeholder="请输入考生身份证号" maxlength="18">
+									</div>
+								</td>							
+							</tr>
+							<tr>
+								<td>
+									<div class="form-group">
+										<input type="text" class="form-control id_card-ym" id="std_name" autocomplete="off" ng-model="std_name" placeholder="请输入考生姓名" ng-keyup="changeStdName($event)">
+									</div>
+								</td>							
+							</tr>
+						</table>
+						<br>
+						<div class="form-group">
+							<button type="button" class="btn btn-danger btn-lg" ng-click="goSearchLq()">查询</button>
+							
+						</div>
+					</form>
+				</div>
+			</div>
+		</div>
+	</header>
+	<div ng-if="map!=undefiend">
+		<div class="panel panel-success text-2x">
+			<div class="panel-heading text-center">录取信息</div>
+			<div class="table-responsive" style="text-align: center;">
+				<table class="table table-striped b-t b-light">
+					<tbody>
+						<tr>
+							<td class="text-right">考生姓名:</td>
+							<td>{{map.std_name}}</td>
+						</tr>
+						<tr>
+							<td class="text-right">证件号码:</td>
+							<td>{{map.cert_id}}</td>						
+						</tr>
+						<tr>
+							<td class="text-right">录取专业:</td>
+							<td>{{map.aspect_name}}</td>					
+						</tr>
+						<tr>
+							<td class="text-right">新生学号:</td>
+							<td>{{map.std_seq}}</td>
+						</tr>
+						<tr>
+							<td class="text-right">EMS号码:</td>
+							<td>{{map.ems_id}}</td>						
+						</tr>	
+						<tr>
+							<td class="text-right">联系电话:</td>
+							<td>{{map.std_mobile}}</td>
+						</tr>
+						<tr>
+							<td class="text-right">邮寄地址:</td>
+							<td>{{map.std_addr}}</td>						
+						</tr>
+					</tbody>
+				</table>
+			</div>
+		</div>
+	</div>
+
+	<div>&nbsp;</div>
+</body>
+</html>

+ 122 - 0
WebRoot/admis/admis.ymfz.html

@@ -0,0 +1,122 @@
+<!DOCTYPE html>
+<html>
+
+<meta charset="utf-8" />
+<head>
+
+<title>中央美术学院2024年成绩查询</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<meta http-equiv="pragma" content="no-cache">
+<meta http-equiv="cache-control" content="no-cache">
+<meta http-equiv="expires" content="0">
+<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
+<link href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
+<link href="css/site.css" rel="stylesheet">
+
+<!--[if lt IE 9]>
+    <script src="https://cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script>
+    <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
+  <![endif]-->
+</head>
+
+<script src="https://lib.baomitu.com/jquery/1.12.4/jquery.min.js"></script>
+
+<!-- jquery-weui -->
+<script src="https://lib.baomitu.com/jquery-weui/1.2.1/js/jquery-weui.min.js"></script>
+<script src="https://lib.baomitu.com/jquery-weui/1.2.1/js/swiper.min.js"></script>
+
+<!--  angular -->
+<script src="https://lib.baomitu.com/angular.js/1.7.8/angular.min.js"></script>
+<script src="https://lib.baomitu.com/angular-sanitize/1.7.8/angular-sanitize.min.js"></script>
+<script src="https://lib.baomitu.com/angular-ui-router/1.0.22/angular-ui-router.min.js"></script>
+<script src="https://lib.baomitu.com/ngStorage/0.3.11/ngStorage.min.js"></script>
+<script src="https://lib.baomitu.com/oclazyload/1.1.0/ocLazyLoad.min.js"></script>
+<!-- clipboard -->
+<script src="https://lib.baomitu.com/clipboard.js/2.0.4/clipboard.min.js"></script>
+
+<!-- private js -->
+<script src="js/jweixin-1.6.0.js?v=1.1.5"></script>
+<script src="js/func.js"></script>
+<script src="js/angular.init.js?v=1.0.6"></script>
+<script src="js/angular.filter.js?v=1.0.2"></script>
+<script src="js/angular.router.js?v=1.0.5"></script>
+<script src="js/angular.app.js?v=1.1.5"></script>
+<script src="js/angular.tabbar.js?v=1.0.8"></script>
+<script src="js/admis.ym.js"></script>
+<script src="js/frame.app.js"></script>
+<body ng-app="scoreApp" ng-controller="scoreController">
+	<header class="site-header-ym jumbotron">
+		<div class="container">
+			<div class="row">
+				<div class="col-xs-12">
+					<h1>2024年附中优秀人才选拔考试</h1>
+					<p>
+					<!-- 准考证下载及 -->
+						<span><h2>成绩查询</h2> </span>
+					</p>
+					<form class="form-inline" role="search">
+						<div class="form-group">
+							<input type="text" class="form-control id_card-ym" id="cert_id" autocomplete="off" maxlength="18" ng-model="cert_id" placeholder="请输入考生18位身份证号" maxlength="18">
+						</div>
+						<br>
+						<div class="form-group">
+							<input type="text" class="form-control id_card-ym" id="std_name" autocomplete="off" ng-model="std_name" placeholder="请输入考生姓名">
+						</div>
+						<br>
+						<div class="form-group">
+							<input type="password" class="form-control id_card-ym" id="std_pwd" autocomplete="off" maxlength="6"  ng-model="std_pwd" placeholder="请输入查询密码" ng-keyup="changeStdMobileFz($event)"  >
+						</div>
+						<br>						
+						<div class="form-group">
+							<!-- <button type="button" class="btn btn-danger btn-lg" ng-click="goDownTicket()">准考证下载</button>&nbsp;&nbsp; -->
+							<button type="button" class="btn btn-danger btn-lg" ng-click="goSearchFz()">成绩查询</button>
+							
+						</div>
+					</form>
+				</div>
+			</div>
+		</div>
+	</header>
+	<div ng-if="map!=undefiend">
+		<div class="panel panel-success text-2x">
+			<div class="panel-heading text-center">成绩信息</div>
+			<div class="table-responsive">
+				<table class="table table-striped b-t b-light">
+					<tbody>
+						<tr>
+							<td class="text-right">考生姓名:</td>
+							<td>{{map.std.std_name}}</td>
+							<!-- <td class="text-right">证件号码:</td>
+							<td>{{map.std.cert_id}}</td> -->
+							<td class="text-right">报考专业:</td>
+							<td ng-if="map.scoreList.length > 0">{{map.scoreList[0].aspect_name}}</td>
+							<td class="text-right">准考证号:</td>
+							<td ng-if="map.scoreList.length > 0">{{map.scoreList[0].ticket_no}}</td>
+						</tr>
+						<tr>
+							<td class="text-right" rowspan="2" style="vertical-align: middle;">造型基础:</td>
+							<td ng-if="map.scoreList.length > 0"  rowspan="2" style="vertical-align: middle;">{{map.scoreList[0].subj_zxjc}}</td>
+							<td class="text-right"  rowspan="2" style="vertical-align: middle;">命题创作:</td>
+							<td ng-if="map.scoreList.length > 0" rowspan="2" style="vertical-align: middle;">{{map.scoreList[0].subj_mtcz}}</td>
+							<td class="text-right"  rowspan="2" style="vertical-align: middle;font-size:20px;">综合素养考核:</td>
+							<td class="text-left">在校一贯表现:{{map.scoreList[0].subj_zhsy}}</td>
+						</tr>
+						<tr style="background-color:white">
+							<td class="text-left">面试:{{map.scoreList[0].face_score}}</td>
+						</tr>
+						<tr>
+							<td class="text-right">总&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分:</td>
+							<td ng-if="map.scoreList.length > 0">{{map.scoreList[0].total_score}}</td>
+							<td class="text-right">结&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;论:</td>
+							<td ng-if="map.scoreList.length > 0" colspan="4">{{map.scoreList[0].qualified}}</td>
+						</tr>
+					</tbody>
+				</table>
+			</div>
+		</div>
+	</div>
+
+	<div>&nbsp;</div>
+</body>
+</html>

+ 118 - 0
WebRoot/admis/admis.ymfz.test.html

@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<html>
+
+<meta charset="utf-8" />
+<head>
+
+<title>央美附中2022年成绩查询</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<meta http-equiv="pragma" content="no-cache">
+<meta http-equiv="cache-control" content="no-cache">
+<meta http-equiv="expires" content="0">
+<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
+<link href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
+<link href="css/site.css" rel="stylesheet">
+
+<!--[if lt IE 9]>
+    <script src="https://cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script>
+    <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
+  <![endif]-->
+</head>
+
+<script src="https://lib.baomitu.com/jquery/1.12.4/jquery.min.js"></script>
+
+<!-- jquery-weui -->
+<script src="https://lib.baomitu.com/jquery-weui/1.2.1/js/jquery-weui.min.js"></script>
+<script src="https://lib.baomitu.com/jquery-weui/1.2.1/js/swiper.min.js"></script>
+
+<!--  angular -->
+<script src="https://lib.baomitu.com/angular.js/1.7.8/angular.min.js"></script>
+<script src="https://lib.baomitu.com/angular-sanitize/1.7.8/angular-sanitize.min.js"></script>
+<script src="https://lib.baomitu.com/angular-ui-router/1.0.22/angular-ui-router.min.js"></script>
+<script src="https://lib.baomitu.com/ngStorage/0.3.11/ngStorage.min.js"></script>
+<script src="https://lib.baomitu.com/oclazyload/1.1.0/ocLazyLoad.min.js"></script>
+<!-- clipboard -->
+<script src="https://lib.baomitu.com/clipboard.js/2.0.4/clipboard.min.js"></script>
+
+<!-- private js -->
+<script src="js/jweixin-1.6.0.js?v=1.1.5"></script>
+<script src="js/func.js"></script>
+<script src="js/angular.init.js?v=1.0.6"></script>
+<script src="js/angular.filter.js?v=1.0.2"></script>
+<script src="js/angular.router.js?v=1.0.5"></script>
+<script src="js/angular.app.js?v=1.1.5"></script>
+<script src="js/angular.tabbar.js?v=1.0.8"></script>
+<script src="js/admis.ym.js"></script>
+<script src="js/frame.app.js"></script>
+<body ng-app="scoreApp" ng-controller="scoreController">
+	<header class="site-header-ym jumbotron">
+		<div class="container">
+			<div class="row">
+				<div class="col-xs-12">
+					<h1>2022央美附中专业选拔考试</h1>
+					<p>
+						<span><h2>准考证下载及成绩查询</h2> </span>
+					</p>
+					<form class="form-inline" role="search">
+						<div class="form-group">
+							<input type="text" class="form-control id_card-ym" id="cert_id" autocomplete="off" maxlength="18" ng-model="cert_id" placeholder="请输入考生18位身份证号" maxlength="18">
+						</div>
+						<br>
+						<div class="form-group">
+							<input type="text" class="form-control id_card-ym" id="std_name" autocomplete="off" ng-model="std_name" placeholder="请输入考生姓名">
+						</div>
+						<br>
+						<div class="form-group">
+							<input type="number" class="form-control id_card-ym" id="std_mobile" autocomplete="off" ng-model="std_mobile" placeholder="请输入手机号" ng-keyup="changeStdMobileFz($event)"  >
+						</div>
+						<br>						
+						<div class="form-group">
+							<button type="button" class="btn btn-danger btn-lg" ng-click="goDownTicket()">准考证下载</button>&nbsp;&nbsp;
+							<button type="button" class="btn btn-danger btn-lg" ng-click="goSearchFz()">成绩查询</button>
+							
+						</div>
+					</form>
+				</div>
+			</div>
+		</div>
+	</header>
+	<div ng-if="map!=undefiend">
+		<div class="panel panel-success text-2x">
+			<div class="panel-heading text-center">成绩信息</div>
+			<div class="table-responsive">
+				<table class="table table-striped b-t b-light">
+					<tbody>
+						<tr>
+							<td class="text-right">考生姓名:</td>
+							<td>{{map.std.std_name}}</td>
+							<td class="text-right">证件号码:</td>
+							<td>{{map.std.cert_id}}</td>
+							<td class="text-right">准考证号:</td>
+							<td ng-if="map.scoreList.length > 0">{{map.scoreList[0].ticket_no}}</td>
+						</tr>
+						<tr>
+							<td class="text-right">造型基础:</td>
+							<td ng-if="map.scoreList.length > 0">{{map.scoreList[0].subj_zxjc}}</td>
+							<td class="text-right">命题创作:</td>
+							<td ng-if="map.scoreList.length > 0">{{map.scoreList[0].subj_mtcz}}</td>
+							<td class="text-right">面试:</td>
+							<td ng-if="map.scoreList.length > 0">{{map.scoreList[0].face_score}}</td>							
+						</tr>
+						<tr>
+							<td class="text-right">报考专业:</td>
+							<td ng-if="map.scoreList.length > 0">{{map.scoreList[0].aspect_name}}</td>
+							<td class="text-right">总分:</td>
+							<td ng-if="map.scoreList.length > 0">{{map.scoreList[0].total_score}}</td>
+							<td class="text-right">是否合格:</td>
+							<td ng-if="map.scoreList.length > 0">{{map.scoreList[0].qualified}}</td>
+						</tr>
+					</tbody>
+				</table>
+			</div>
+		</div>
+	</div>
+
+	<div>&nbsp;</div>
+</body>
+</html>

文件差異過大導致無法顯示
+ 514 - 0
WebRoot/admis/css/site.css


+ 231 - 0
WebRoot/admis/css/ui.css

@@ -0,0 +1,231 @@
+body{
+	font-family:PingFangSC-Regular,PingFang SC !important;
+}
+.ui-bg{
+	background:rgba(246,248,250,1);
+	width:100%;
+	/* height: 100%; */
+	min-height: 100%
+
+}
+
+.ui-body{
+	margin: 20px 20px 20px 20px !important;
+}
+
+.ui-body-15{
+	margin: 15px 15px 15px 15px !important;
+}
+
+.ui-txt{
+	font-size:13px;
+	font-family:PingFangSC-Regular,PingFang SC;
+	font-weight:400;
+	color:rgba(152,160,179,1);
+	line-height:20px;
+}
+.ui-txt-14{
+	font-size:14px;
+	font-family:PingFangSC-Regular,PingFang SC;
+	font-weight:400;
+	color:rgba(8,19,42,1);
+	line-height:26px;
+}
+.ui-txt-13{
+	font-size:13px;
+	font-family:PingFangSC-Regular,PingFang SC;
+	font-weight:400;
+	color:rgba(152,160,179,1);
+	line-height:20px;
+}
+.ui-title{
+	font-size:13px;
+	font-family:PingFangSC-Regular,PingFang SC;
+	font-weight:400;
+	color:rgba(152,160,179,1);
+	line-height:20px;
+	margin-top: 20px !important;
+	padding-top: 10px;
+}
+
+.ui-big-title{
+	height:28px;
+	font-size:20px;
+	margin-bottom:10px;
+	font-family:PingFangSC-Medium,PingFang SC;
+	font-weight:500;
+	color:rgba(8,19,42,1);
+	line-height:28px;
+}
+
+.ui-card{
+	background:rgba(255,255,255,1);
+	border-radius:10px;
+	/* margin: 20px 20px 20px 20px !important; */
+	margin-top: 10px !important; 
+}
+
+.ui-card-r-title{
+	font-size:20px;
+	font-family:PingFangSC-Semibold,PingFang SC;
+	font-weight:600;
+	color:rgba(8,19,42,1);
+	line-height:28px;
+	/* position: absolute; */
+	/* margin-top: 31px; */
+}
+
+.ui-card-r-content{
+	font-size:20px;
+	font-family:PingFangSC-Semibold,PingFang SC;
+	font-weight:600;
+	color:rgba(8,19,42,1);
+	line-height:28px;
+	position: absolute;
+	margin-top: 31px;
+}
+
+.ui-card-content{
+	font-size:13px;
+	font-family:PingFangSC-Regular,PingFang SC;
+	font-weight:400;
+	color:rgba(152,160,179,1);
+	line-height:20px;
+	margin-right: 20px !important;
+    /* margin-bottom: 20px !important; */
+    margin-left: 20px !important;
+}
+
+.ui-mg{
+	margin: 20px !important;
+}
+
+.weui-cells {
+    margin-top: 0px !important; 
+    font-size: 14px !important; 
+}
+
+.subject_score{
+	font-size: 13px;
+	border: 1px solid rgba(0,0,0,.1);
+	padding: 6px 6px 6px 7px;
+	background-color: lightyellow;
+}
+
+.std_no{
+	border: 1px solid rgba(0,0,0,.1);
+	width:36px;
+	height:38px;
+	vertical-align: middle;
+}
+
+.ui-warning{
+    /*color: #856404;
+    color: red;*/
+    background-color: #E0E0E0;
+    border-color: #ffeeba;
+}
+.ui-txt-warning{
+	color: #d4003d;
+}
+.ui-tb-th{
+    height: 35px;
+    font-weight: bold;
+}
+
+.ui-tb-td{
+	vertical-align: middle;
+	font-size:13px !important;
+	border-bottom: 1px solid rgba(0,0,0,.1);
+}
+
+.text-bold{
+	font-weight: bold;
+}
+
+.ui-tabbar {
+	display: inline-flex !important;
+    position: fixed !important;
+    bottom: 5px !important;
+    width: 100% !important;
+}
+
+/*
+@media screen and (max-height: 360px) {
+	.ui-tabbar{
+		display: none;
+	}
+}
+*/
+
+/*
+.ui-secondary{
+	color: #383d41;
+    background-color: #e2e3e5;
+    border-color: #d6d8db;
+}
+*/
+
+/*央美 */
+.weui-btn_primary {
+	background: linear-gradient(90deg,#d4003d 0%,#d4003d 100%) !important;
+}
+
+.weui-btn_default {
+    color:#d4003d !important;
+}
+
+/* 蓝色色调 */
+/* 
+.weui-btn_primary {
+	background: linear-gradient(90deg,rgba(74,147,255,1) 0%,rgba(64,140,255,1) 100%) !important;
+}
+
+.weui-btn_default {
+    color:rgba(64,140,255,1) !important;
+}
+*/
+
+/* 绿色色调 */
+/* 
+.weui-btn_primary {
+	background: linear-gradient(90deg,rgba(48,190,184,1) 0%,rgba(48,190,184,1) 100%) !important;
+}
+
+.weui-btn_default {
+    color:rgba(48,190,184,1) !important;
+}   
+*/
+
+/* 暗红色调 */
+/* .weui-btn_primary {
+	background: linear-gradient(90deg,rgba(255,55,60,1) 0%,rgba(255,55,60,1) 100%) !important;
+}
+
+.weui-btn_default {
+    color:rgba(255,55,60,1) !important;
+}   */
+
+
+
+
+.weui-media-box__title{
+	font-size: 17px !important;
+}
+.weui-media-box__desc{
+	font-size: 13px !important;
+}
+
+
+.ml-20{
+	margin-left:20px !important;
+}
+.mr-20{
+	margin-right:20px !important;
+}
+.mt-20{
+	margin-right:20px !important;
+}
+.mb-20{
+	margin-buttom:20px !important;
+}

+ 253 - 0
WebRoot/admis/css/wechat.css

@@ -0,0 +1,253 @@
+body, html {
+	height: 100%;
+	-webkit-tap-highlight-color: transparent;
+}
+.mt-0 {
+	margin-top:0px;
+}
+.mt-1 {
+	margin-top:1px;
+}
+.mt-2 {
+	margin-top:2px;
+}
+.mt-3 {
+	margin-top:3px;
+}
+.mt-4 {
+	margin-top:4px;
+}
+
+.mt-5 {
+	margin-top:5px;
+}
+
+
+.text-lowercase {
+  text-transform: lowercase !important;
+}
+
+.text-uppercase {
+  text-transform: uppercase !important;
+}
+
+.text-capitalize {
+  text-transform: capitalize !important;
+}
+
+.font-weight-light {
+  font-weight: 300 !important;
+}
+
+.font-weight-lighter {
+  font-weight: lighter !important;
+}
+
+.font-weight-normal {
+  font-weight: 400 !important;
+}
+
+.font-weight-bold {
+  font-weight: 700 !important;
+}
+
+.font-weight-bolder {
+  font-weight: bolder !important;
+}
+
+.font-italic {
+  font-style: italic !important;
+}
+
+.text-white {
+  color: #fff !important;
+}
+
+.text-black {
+  color: black !important;
+}
+.text-muted {
+  color: #6c757d !important;
+}
+
+.text-primary {
+  color: #007bff !important;
+}
+
+a.text-primary:hover, a.text-primary:focus {
+  color: #0056b3 !important;
+}
+
+.text-secondary {
+  color: #6c757d !important;
+}
+
+a.text-secondary:hover, a.text-secondary:focus {
+  color: #494f54 !important;
+}
+
+.text-success {
+  color: #28a745 !important;
+}
+
+a.text-success:hover, a.text-success:focus {
+  color: #19692c !important;
+}
+
+.text-info {
+  color: #17a2b8 !important;
+}
+
+a.text-info:hover, a.text-info:focus {
+  color: #0f6674 !important;
+}
+
+.text-warning {
+  color: #ffc107 !important;
+}
+a.text-warning:hover, a.text-warning:focus {
+  color: #ba8b00 !important;
+}
+
+.text-danger {
+  color: #dc3545 !important;
+}
+a.text-danger:hover, a.text-danger:focus {
+  color: #a71d2a !important;
+}
+
+.text-light {
+  color: #f8f9fa !important;
+}
+
+a.text-light:hover, a.text-light:focus {
+  color: #cbd3da !important;
+}
+
+.text-dark {
+  color: #343a40 !important;
+}
+
+a.text-dark:hover, a.text-dark:focus {
+  color: #121416 !important;
+}
+
+.text-body {
+  color: #212529 !important;
+}
+
+.text-muted {
+  color: #6c757d !important;
+}
+
+.text-black-50 {
+  color: rgba(0, 0, 0, 0.5) !important;
+}
+
+.text-white-50 {
+  color: rgba(255, 255, 255, 0.5) !important;
+}
+
+
+a.text-warning:hover, a.text-warning:focus {
+  color: #ba8b00 !important;
+}
+
+.text-danger {
+  color: #dc3545 !important;
+}
+
+
+.art-title {
+	text-align: center;
+	font-size: 20px;
+	color: #3cc51f;
+	font-weight: 400;
+	margin: 0 5%;
+}
+
+.art-sub-title {
+	text-align: center;
+	color: #888;
+	font-size: 14px;
+}
+
+.art-header {
+	padding: 15px 0;
+}
+
+.art-content-padded {
+	padding: 15px;
+}
+
+.art-second-title {
+	text-align: center;
+	font-size: 24px;
+	color: #3cc51f;
+	font-weight: 400;
+	margin: 0 15%;
+}
+
+.weui-footer {
+	margin: 25px 0 10px 0;
+}
+
+/* 重写弹框,使能居中 */
+.weui-dialog, .weui-toast {
+	-webkit-transform: translate(0%, -50%);
+	transform: translate(0%, -50%);
+}
+
+/* 重写弹框,使能居中 */
+.weui-toast {
+	margin: 0 0 0 -15%;
+}
+
+/* 重写btn,使拉长 */
+.weui-btn {
+	box-sizing: content-box;
+	width: auto;
+}
+/* 按钮区域 */
+.button-sp-area {
+	margin: 20px 20px;
+}
+
+/** 修正不显示超出部分的内容 ****/
+.weui-media-box__title {
+	white-space: normal
+}
+
+/** 重写文本描述去,使能显示所有内容 */
+.weui-media-box__desc {
+	display:block
+}
+.art-choose:after {
+    content: " ";
+    display: inline-block;
+    height: 8px;
+    width: 8px;
+    border-width: 2px 2px 0 0;
+    border-color: #b2b2b2;
+    border-style: solid;
+    -webkit-transform: matrix(.71,.71,-.71,.71,0,0);
+    transform: matrix(.71,.71,-.71,.71,0,0);
+    position: relative;
+    top: -2px;
+    position: absolute;
+    top: 50%;
+    margin-top: -5px;
+    margin-right:10px;
+    right: 0;
+}
+
+
+/** 预约分组 **/
+.appointment-group {
+	color: blue;
+}
+/** 预约科目 **/
+.appointment-subject {
+	color: rgba(0,0,0,.5);
+	font-size:10pt;
+}

+ 2313 - 0
WebRoot/admis/css/weui.css

@@ -0,0 +1,2313 @@
+/** 
+* jQuery WeUI V1.2.1 
+* By 言川
+* http://lihongxun945.github.io/jquery-weui/
+ */
+.preloader {
+  width: 20px;
+  height: 20px;
+  -webkit-transform-origin: 50%;
+          transform-origin: 50%;
+  -webkit-animation: preloader-spin 1s steps(12, end) infinite;
+          animation: preloader-spin 1s steps(12, end) infinite;
+}
+.preloader:after {
+  display: block;
+  width: 100%;
+  height: 100%;
+  content: "";
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+  background-repeat: no-repeat;
+  background-position: 50%;
+  background-size: 100%;
+}
+@-webkit-keyframes preloader-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg);
+  }
+}
+@keyframes preloader-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg);
+  }
+}
+/*
+.hairline(@position, @color) when (@position = top) {
+  border-top: 1px solid @color;
+}
+.hairline(@position, @color) when (@position = left) {
+  border-left: 1px solid @color;
+}
+.hairline(@position, @color) when (@position = bottom) {
+  border-bottom: 1px solid @color;
+}
+.hairline(@position, @color) when (@position = right) {
+  border-right: 1px solid @color;
+}
+// For right and bottom
+.hairline-remove(@position) when not (@position = left) and not (@position = top) {
+  border-left: 0;
+  border-bottom: 0;
+}
+// For left and top
+.hairline-remove(@position) when not (@position = right) and not (@position = bottom) {
+  border-right: 0;
+  border-top: 0;
+}
+// For right and bottom
+.hairline-color(@position, @color) when not (@position = left) and not (@position = top) {
+  border-right-color: @color;
+  border-bottom-color: @color;
+}
+// For left and top
+.hairline-color(@position, @color) when not (@position = right) and not (@position = bottom) {
+  border-left-color: @color;
+  border-top-color: @color;
+}
+*/
+label > * {
+  pointer-events: none;
+}
+html {
+  font-size: 20px;
+}
+body {
+  font-size: 16px;
+}
+@media only screen and (min-width: 400px) {
+  html {
+    font-size: 21.33333333px !important;
+  }
+}
+@media only screen and (min-width: 414px) {
+  html {
+    font-size: 22.08px !important;
+  }
+}
+@media only screen and (min-width: 480px) {
+  html {
+    font-size: 25.6px !important;
+  }
+}
+.weui_navbar {
+  z-index: 10;
+}
+.weui-popup-overlay,
+.weui-popup-container {
+  z-index: 1000;
+}
+.weui-mask {
+  z-index: 1000;
+}
+/* === Grid === */
+.weui-row {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-pack: justify;
+  -ms-flex-pack: justify;
+  justify-content: space-between;
+  -webkit-box-lines: multiple;
+  -moz-box-lines: multiple;
+  -ms-flex-wrap: wrap;
+  flex-wrap: wrap;
+  -webkit-box-align: start;
+  -ms-flex-align: start;
+  align-items: flex-start;
+}
+.weui-row > [class*="col-"] {
+  box-sizing: border-box;
+}
+.weui-row .col-auto {
+  width: 100%;
+}
+.weui-row .weui-col-100 {
+  width: 100%;
+  width: calc((100% - 15px*0) / 1);
+}
+.weui-row.weui-no-gutter .weui-col-100 {
+  width: 100%;
+}
+.weui-row .weui-col-95 {
+  width: 95%;
+  width: calc((100% - 15px*0.05263157894736836) / 1.0526315789473684);
+}
+.weui-row.weui-no-gutter .weui-col-95 {
+  width: 95%;
+}
+.weui-row .weui-col-90 {
+  width: 90%;
+  width: calc((100% - 15px*0.11111111111111116) / 1.1111111111111112);
+}
+.weui-row.weui-no-gutter .weui-col-90 {
+  width: 90%;
+}
+.weui-row .weui-col-85 {
+  width: 85%;
+  width: calc((100% - 15px*0.17647058823529416) / 1.1764705882352942);
+}
+.weui-row.weui-no-gutter .weui-col-85 {
+  width: 85%;
+}
+.weui-row .weui-col-80 {
+  width: 80%;
+  width: calc((100% - 15px*0.25) / 1.25);
+}
+.weui-row.weui-no-gutter .weui-col-80 {
+  width: 80%;
+}
+.weui-row .weui-col-75 {
+  width: 75%;
+  width: calc((100% - 15px*0.33333333333333326) / 1.3333333333333333);
+}
+.weui-row.weui-no-gutter .weui-col-75 {
+  width: 75%;
+}
+.weui-row .weui-col-66 {
+  width: 66.66666666666666%;
+  width: calc((100% - 15px*0.5000000000000002) / 1.5000000000000002);
+}
+.weui-row.weui-no-gutter .weui-col-66 {
+  width: 66.66666666666666%;
+}
+.weui-row .weui-col-60 {
+  width: 60%;
+  width: calc((100% - 15px*0.6666666666666667) / 1.6666666666666667);
+}
+.weui-row.weui-no-gutter .weui-col-60 {
+  width: 60%;
+}
+.weui-row .weui-col-50 {
+  width: 50%;
+  width: calc((100% - 15px*1) / 2);
+}
+.weui-row.weui-no-gutter .weui-col-50 {
+  width: 50%;
+}
+.weui-row .weui-col-40 {
+  width: 40%;
+  width: calc((100% - 15px*1.5) / 2.5);
+}
+.weui-row.weui-no-gutter .weui-col-40 {
+  width: 40%;
+}
+.weui-row .weui-col-33 {
+  width: 33.333333333333336%;
+  width: calc((100% - 15px*2) / 3);
+}
+.weui-row.weui-no-gutter .weui-col-33 {
+  width: 33.333333333333336%;
+}
+.weui-row .weui-col-25 {
+  width: 25%;
+  width: calc((100% - 15px*3) / 4);
+}
+.weui-row.weui-no-gutter .weui-col-25 {
+  width: 25%;
+}
+.weui-row .weui-col-20 {
+  width: 20%;
+  width: calc((100% - 15px*4) / 5);
+}
+.weui-row.weui-no-gutter .weui-col-20 {
+  width: 20%;
+}
+.weui-row .weui-col-15 {
+  width: 15%;
+  width: calc((100% - 15px*5.666666666666667) / 6.666666666666667);
+}
+.weui-row.weui-no-gutter .weui-col-15 {
+  width: 15%;
+}
+.weui-row .weui-col-10 {
+  width: 10%;
+  width: calc((100% - 15px*9) / 10);
+}
+.weui-row.weui-no-gutter .weui-col-10 {
+  width: 10%;
+}
+.weui-row .weui-col-5 {
+  width: 5%;
+  width: calc((100% - 15px*19) / 20);
+}
+.weui-row.weui-no-gutter .weui-col-5 {
+  width: 5%;
+}
+.weui-row .weui-col-auto:nth-last-child(1),
+.weui-row .weui-col-auto:nth-last-child(1) ~ .weui-col-auto {
+  width: 100%;
+  width: calc((100% - 15px*0) / 1);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(1),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(1) ~ .weui-col-auto {
+  width: 100%;
+}
+.weui-row .weui-col-auto:nth-last-child(2),
+.weui-row .weui-col-auto:nth-last-child(2) ~ .weui-col-auto {
+  width: 50%;
+  width: calc((100% - 15px*1) / 2);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(2),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(2) ~ .weui-col-auto {
+  width: 50%;
+}
+.weui-row .weui-col-auto:nth-last-child(3),
+.weui-row .weui-col-auto:nth-last-child(3) ~ .weui-col-auto {
+  width: 33.33333333%;
+  width: calc((100% - 15px*2) / 3);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(3),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(3) ~ .weui-col-auto {
+  width: 33.33333333%;
+}
+.weui-row .weui-col-auto:nth-last-child(4),
+.weui-row .weui-col-auto:nth-last-child(4) ~ .weui-col-auto {
+  width: 25%;
+  width: calc((100% - 15px*3) / 4);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(4),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(4) ~ .weui-col-auto {
+  width: 25%;
+}
+.weui-row .weui-col-auto:nth-last-child(5),
+.weui-row .weui-col-auto:nth-last-child(5) ~ .weui-col-auto {
+  width: 20%;
+  width: calc((100% - 15px*4) / 5);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(5),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(5) ~ .weui-col-auto {
+  width: 20%;
+}
+.weui-row .weui-col-auto:nth-last-child(6),
+.weui-row .weui-col-auto:nth-last-child(6) ~ .weui-col-auto {
+  width: 16.66666667%;
+  width: calc((100% - 15px*5) / 6);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(6),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(6) ~ .weui-col-auto {
+  width: 16.66666667%;
+}
+.weui-row .weui-col-auto:nth-last-child(7),
+.weui-row .weui-col-auto:nth-last-child(7) ~ .weui-col-auto {
+  width: 14.28571429%;
+  width: calc((100% - 15px*6) / 7);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(7),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(7) ~ .weui-col-auto {
+  width: 14.28571429%;
+}
+.weui-row .weui-col-auto:nth-last-child(8),
+.weui-row .weui-col-auto:nth-last-child(8) ~ .weui-col-auto {
+  width: 12.5%;
+  width: calc((100% - 15px*7) / 8);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(8),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(8) ~ .weui-col-auto {
+  width: 12.5%;
+}
+.weui-row .weui-col-auto:nth-last-child(9),
+.weui-row .weui-col-auto:nth-last-child(9) ~ .weui-col-auto {
+  width: 11.11111111%;
+  width: calc((100% - 15px*8) / 9);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(9),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(9) ~ .weui-col-auto {
+  width: 11.11111111%;
+}
+.weui-row .weui-col-auto:nth-last-child(10),
+.weui-row .weui-col-auto:nth-last-child(10) ~ .weui-col-auto {
+  width: 10%;
+  width: calc((100% - 15px*9) / 10);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(10),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(10) ~ .weui-col-auto {
+  width: 10%;
+}
+.weui-row .weui-col-auto:nth-last-child(11),
+.weui-row .weui-col-auto:nth-last-child(11) ~ .weui-col-auto {
+  width: 9.09090909%;
+  width: calc((100% - 15px*10) / 11);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(11),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(11) ~ .weui-col-auto {
+  width: 9.09090909%;
+}
+.weui-row .weui-col-auto:nth-last-child(12),
+.weui-row .weui-col-auto:nth-last-child(12) ~ .weui-col-auto {
+  width: 8.33333333%;
+  width: calc((100% - 15px*11) / 12);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(12),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(12) ~ .weui-col-auto {
+  width: 8.33333333%;
+}
+.weui-row .weui-col-auto:nth-last-child(13),
+.weui-row .weui-col-auto:nth-last-child(13) ~ .weui-col-auto {
+  width: 7.69230769%;
+  width: calc((100% - 15px*12) / 13);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(13),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(13) ~ .weui-col-auto {
+  width: 7.69230769%;
+}
+.weui-row .weui-col-auto:nth-last-child(14),
+.weui-row .weui-col-auto:nth-last-child(14) ~ .weui-col-auto {
+  width: 7.14285714%;
+  width: calc((100% - 15px*13) / 14);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(14),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(14) ~ .weui-col-auto {
+  width: 7.14285714%;
+}
+.weui-row .weui-col-auto:nth-last-child(15),
+.weui-row .weui-col-auto:nth-last-child(15) ~ .weui-col-auto {
+  width: 6.66666667%;
+  width: calc((100% - 15px*14) / 15);
+}
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(15),
+.weui-row.weui-no-gutter .weui-col-auto:nth-last-child(15) ~ .weui-col-auto {
+  width: 6.66666667%;
+}
+@media all and (min-width: 768px) {
+  .row .tablet-100 {
+    width: 100%;
+    width: calc((100% - 15px*0) / 1);
+  }
+  .row.no-gutter .tablet-100 {
+    width: 100%;
+  }
+  .row .tablet-95 {
+    width: 95%;
+    width: calc((100% - 15px*0.05263157894736836) / 1.0526315789473684);
+  }
+  .row.no-gutter .tablet-95 {
+    width: 95%;
+  }
+  .row .tablet-90 {
+    width: 90%;
+    width: calc((100% - 15px*0.11111111111111116) / 1.1111111111111112);
+  }
+  .row.no-gutter .tablet-90 {
+    width: 90%;
+  }
+  .row .tablet-85 {
+    width: 85%;
+    width: calc((100% - 15px*0.17647058823529416) / 1.1764705882352942);
+  }
+  .row.no-gutter .tablet-85 {
+    width: 85%;
+  }
+  .row .tablet-80 {
+    width: 80%;
+    width: calc((100% - 15px*0.25) / 1.25);
+  }
+  .row.no-gutter .tablet-80 {
+    width: 80%;
+  }
+  .row .tablet-75 {
+    width: 75%;
+    width: calc((100% - 15px*0.33333333333333326) / 1.3333333333333333);
+  }
+  .row.no-gutter .tablet-75 {
+    width: 75%;
+  }
+  .row .tablet-66 {
+    width: 66.66666666666666%;
+    width: calc((100% - 15px*0.5000000000000002) / 1.5000000000000002);
+  }
+  .row.no-gutter .tablet-66 {
+    width: 66.66666666666666%;
+  }
+  .row .tablet-60 {
+    width: 60%;
+    width: calc((100% - 15px*0.6666666666666667) / 1.6666666666666667);
+  }
+  .row.no-gutter .tablet-60 {
+    width: 60%;
+  }
+  .row .tablet-50 {
+    width: 50%;
+    width: calc((100% - 15px*1) / 2);
+  }
+  .row.no-gutter .tablet-50 {
+    width: 50%;
+  }
+  .row .tablet-40 {
+    width: 40%;
+    width: calc((100% - 15px*1.5) / 2.5);
+  }
+  .row.no-gutter .tablet-40 {
+    width: 40%;
+  }
+  .row .tablet-33 {
+    width: 33.333333333333336%;
+    width: calc((100% - 15px*2) / 3);
+  }
+  .row.no-gutter .tablet-33 {
+    width: 33.333333333333336%;
+  }
+  .row .tablet-25 {
+    width: 25%;
+    width: calc((100% - 15px*3) / 4);
+  }
+  .row.no-gutter .tablet-25 {
+    width: 25%;
+  }
+  .row .tablet-20 {
+    width: 20%;
+    width: calc((100% - 15px*4) / 5);
+  }
+  .row.no-gutter .tablet-20 {
+    width: 20%;
+  }
+  .row .tablet-15 {
+    width: 15%;
+    width: calc((100% - 15px*5.666666666666667) / 6.666666666666667);
+  }
+  .row.no-gutter .tablet-15 {
+    width: 15%;
+  }
+  .row .tablet-10 {
+    width: 10%;
+    width: calc((100% - 15px*9) / 10);
+  }
+  .row.no-gutter .tablet-10 {
+    width: 10%;
+  }
+  .row .tablet-5 {
+    width: 5%;
+    width: calc((100% - 15px*19) / 20);
+  }
+  .row.no-gutter .tablet-5 {
+    width: 5%;
+  }
+  .row .tablet-auto:nth-last-child(1),
+  .row .tablet-auto:nth-last-child(1) ~ .col-auto {
+    width: 100%;
+    width: calc((100% - 15px*0) / 1);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(1),
+  .row.no-gutter .tablet-auto:nth-last-child(1) ~ .tablet-auto {
+    width: 100%;
+  }
+  .row .tablet-auto:nth-last-child(2),
+  .row .tablet-auto:nth-last-child(2) ~ .col-auto {
+    width: 50%;
+    width: calc((100% - 15px*1) / 2);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(2),
+  .row.no-gutter .tablet-auto:nth-last-child(2) ~ .tablet-auto {
+    width: 50%;
+  }
+  .row .tablet-auto:nth-last-child(3),
+  .row .tablet-auto:nth-last-child(3) ~ .col-auto {
+    width: 33.33333333%;
+    width: calc((100% - 15px*2) / 3);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(3),
+  .row.no-gutter .tablet-auto:nth-last-child(3) ~ .tablet-auto {
+    width: 33.33333333%;
+  }
+  .row .tablet-auto:nth-last-child(4),
+  .row .tablet-auto:nth-last-child(4) ~ .col-auto {
+    width: 25%;
+    width: calc((100% - 15px*3) / 4);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(4),
+  .row.no-gutter .tablet-auto:nth-last-child(4) ~ .tablet-auto {
+    width: 25%;
+  }
+  .row .tablet-auto:nth-last-child(5),
+  .row .tablet-auto:nth-last-child(5) ~ .col-auto {
+    width: 20%;
+    width: calc((100% - 15px*4) / 5);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(5),
+  .row.no-gutter .tablet-auto:nth-last-child(5) ~ .tablet-auto {
+    width: 20%;
+  }
+  .row .tablet-auto:nth-last-child(6),
+  .row .tablet-auto:nth-last-child(6) ~ .col-auto {
+    width: 16.66666667%;
+    width: calc((100% - 15px*5) / 6);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(6),
+  .row.no-gutter .tablet-auto:nth-last-child(6) ~ .tablet-auto {
+    width: 16.66666667%;
+  }
+  .row .tablet-auto:nth-last-child(7),
+  .row .tablet-auto:nth-last-child(7) ~ .col-auto {
+    width: 14.28571429%;
+    width: calc((100% - 15px*6) / 7);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(7),
+  .row.no-gutter .tablet-auto:nth-last-child(7) ~ .tablet-auto {
+    width: 14.28571429%;
+  }
+  .row .tablet-auto:nth-last-child(8),
+  .row .tablet-auto:nth-last-child(8) ~ .col-auto {
+    width: 12.5%;
+    width: calc((100% - 15px*7) / 8);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(8),
+  .row.no-gutter .tablet-auto:nth-last-child(8) ~ .tablet-auto {
+    width: 12.5%;
+  }
+  .row .tablet-auto:nth-last-child(9),
+  .row .tablet-auto:nth-last-child(9) ~ .col-auto {
+    width: 11.11111111%;
+    width: calc((100% - 15px*8) / 9);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(9),
+  .row.no-gutter .tablet-auto:nth-last-child(9) ~ .tablet-auto {
+    width: 11.11111111%;
+  }
+  .row .tablet-auto:nth-last-child(10),
+  .row .tablet-auto:nth-last-child(10) ~ .col-auto {
+    width: 10%;
+    width: calc((100% - 15px*9) / 10);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(10),
+  .row.no-gutter .tablet-auto:nth-last-child(10) ~ .tablet-auto {
+    width: 10%;
+  }
+  .row .tablet-auto:nth-last-child(11),
+  .row .tablet-auto:nth-last-child(11) ~ .col-auto {
+    width: 9.09090909%;
+    width: calc((100% - 15px*10) / 11);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(11),
+  .row.no-gutter .tablet-auto:nth-last-child(11) ~ .tablet-auto {
+    width: 9.09090909%;
+  }
+  .row .tablet-auto:nth-last-child(12),
+  .row .tablet-auto:nth-last-child(12) ~ .col-auto {
+    width: 8.33333333%;
+    width: calc((100% - 15px*11) / 12);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(12),
+  .row.no-gutter .tablet-auto:nth-last-child(12) ~ .tablet-auto {
+    width: 8.33333333%;
+  }
+  .row .tablet-auto:nth-last-child(13),
+  .row .tablet-auto:nth-last-child(13) ~ .col-auto {
+    width: 7.69230769%;
+    width: calc((100% - 15px*12) / 13);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(13),
+  .row.no-gutter .tablet-auto:nth-last-child(13) ~ .tablet-auto {
+    width: 7.69230769%;
+  }
+  .row .tablet-auto:nth-last-child(14),
+  .row .tablet-auto:nth-last-child(14) ~ .col-auto {
+    width: 7.14285714%;
+    width: calc((100% - 15px*13) / 14);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(14),
+  .row.no-gutter .tablet-auto:nth-last-child(14) ~ .tablet-auto {
+    width: 7.14285714%;
+  }
+  .row .tablet-auto:nth-last-child(15),
+  .row .tablet-auto:nth-last-child(15) ~ .col-auto {
+    width: 6.66666667%;
+    width: calc((100% - 15px*14) / 15);
+  }
+  .row.no-gutter .tablet-auto:nth-last-child(15),
+  .row.no-gutter .tablet-auto:nth-last-child(15) ~ .tablet-auto {
+    width: 6.66666667%;
+  }
+}
+.weui-cell__hd img {
+  display: block;
+  margin-right: 5px;
+}
+.weui-cell_swiped .weui-cell__bd {
+  -webkit-transition: -webkit-transform .3s;
+  transition: -webkit-transform .3s;
+  transition: transform .3s;
+  transition: transform .3s, -webkit-transform .3s;
+}
+.swipeout-touching .weui-cell__bd {
+  -webkit-transition: none;
+  transition: none;
+}
+.weui-dialog,
+.weui-toast {
+  -webkit-transition-duration: .2s;
+          transition-duration: .2s;
+  opacity: 0;
+  -webkit-transform: translate(-50%, -50%);
+          transform: translate(-50%, -50%);
+  -webkit-transform-origin: 0 0;
+          transform-origin: 0 0;
+  visibility: hidden;
+  margin: 0;
+  top: 45%;
+  z-index: 2000;
+}
+.weui-dialog .weui-dialog__btn.default,
+.weui-toast .weui-dialog__btn.default {
+  color: #5f646e;
+}
+.weui-dialog .weui-dialog__btn + .weui-dialog__btn,
+.weui-toast .weui-dialog__btn + .weui-dialog__btn {
+  position: relative;
+}
+.weui-dialog .weui-dialog__btn + .weui-dialog__btn:after,
+.weui-toast .weui-dialog__btn + .weui-dialog__btn:after {
+  content: " ";
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 1px;
+  height: 100%;
+  border-left: 1px solid #D5D5D6;
+  color: #D5D5D6;
+  -webkit-transform-origin: 0 0;
+          transform-origin: 0 0;
+  -webkit-transform: scaleX(0.5);
+          transform: scaleX(0.5);
+}
+.weui-dialog.weui-dialog--visible,
+.weui-toast.weui-dialog--visible,
+.weui-dialog.weui-toast--visible,
+.weui-toast.weui-toast--visible {
+  opacity: 1;
+  visibility: visible;
+}
+.weui-toast_forbidden {
+  color: #F76260;
+}
+.weui-toast_cancel .weui-icon-toast:before {
+  content: "\EA0D";
+}
+.weui-toast_forbidden .weui-icon-toast:before {
+  content: "\EA0B";
+  color: #F76260;
+}
+.weui-toast_text {
+  min-height: 1em;
+  width: auto;
+  height: 45px;
+  border-radius: 25px;
+  margin-left: 0;
+  -webkit-transform: scale(0.9) translate3d(-50%, 0, 0);
+          transform: scale(0.9) translate3d(-50%, 0, 0);
+  -webkit-transform-origin: left;
+          transform-origin: left;
+}
+.weui-toast_text.weui-toast--visible {
+  -webkit-transform: scale(1) translate3d(-50%, 0, 0);
+          transform: scale(1) translate3d(-50%, 0, 0);
+}
+.weui-toast_text .weui-icon-toast {
+  display: none;
+}
+.weui-toast_text .weui-toast_content {
+  margin: 10px 15px;
+}
+.weui-mask {
+  opacity: 0;
+  -webkit-transition-duration: .3s;
+          transition-duration: .3s;
+  visibility: hidden;
+}
+.weui-mask.weui-mask--visible {
+  opacity: 1;
+  visibility: visible;
+}
+.weui-prompt-input {
+  padding: 4px 6px;
+  border: 1px solid #ccc;
+  box-sizing: border-box;
+  height: 2em;
+  width: 80%;
+  margin-top: 10px;
+}
+.weui-pull-to-refresh {
+  margin-top: -50px;
+  -webkit-transition: -webkit-transform .4s;
+  transition: -webkit-transform .4s;
+  transition: transform .4s;
+  transition: transform .4s, -webkit-transform .4s;
+}
+.weui-pull-to-refresh.refreshing {
+  -webkit-transform: translate3d(0, 50px, 0);
+          transform: translate3d(0, 50px, 0);
+}
+.weui-pull-to-refresh.touching {
+  -webkit-transition-duration: 0s;
+          transition-duration: 0s;
+}
+.weui-pull-to-refresh__layer {
+  height: 30px;
+  line-height: 30px;
+  padding: 10px;
+  text-align: center;
+}
+.weui-pull-to-refresh__layer .down {
+  display: inline-block;
+}
+.weui-pull-to-refresh__layer .up,
+.weui-pull-to-refresh__layer .refresh {
+  display: none;
+}
+.weui-pull-to-refresh__layer .weui-pull-to-refresh__arrow {
+  display: inline-block;
+  z-index: 10;
+  width: 20px;
+  height: 20px;
+  margin-right: 4px;
+  vertical-align: -4px;
+  background: no-repeat center;
+  background-size: 13px 20px;
+  -webkit-transition-duration: 300ms;
+          transition-duration: 300ms;
+  -webkit-transform: rotate(0deg) translate3d(0, 0, 0);
+          transform: rotate(0deg) translate3d(0, 0, 0);
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2026%2040'%3E%3Cpolygon%20points%3D'9%2C22%209%2C0%2017%2C0%2017%2C22%2026%2C22%2013.5%2C40%200%2C22'%20fill%3D'%238c8c8c'%2F%3E%3C%2Fsvg%3E");
+}
+.weui-pull-to-refresh__layer .weui-pull-to-refresh__preloader {
+  display: none;
+  vertical-align: -4px;
+  margin-right: 4px;
+  width: 20px;
+  height: 20px;
+  -webkit-transform-origin: 50%;
+          transform-origin: 50%;
+  -webkit-animation: preloader-spin 1s steps(12, end) infinite;
+          animation: preloader-spin 1s steps(12, end) infinite;
+}
+.weui-pull-to-refresh__layer .weui-pull-to-refresh__preloader:after {
+  display: block;
+  width: 100%;
+  height: 100%;
+  content: "";
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+  background-repeat: no-repeat;
+  background-position: 50%;
+  background-size: 100%;
+}
+.pull-up .weui-pull-to-refresh__layer .down,
+.refreshing .weui-pull-to-refresh__layer .down {
+  display: none;
+}
+.pull-up .weui-pull-to-refresh__layer .weui-pull-to-refresh__arrow {
+  display: inline-block;
+  -webkit-transform: rotate(180deg) translate3d(0, 0, 0);
+          transform: rotate(180deg) translate3d(0, 0, 0);
+}
+.pull-up .weui-pull-to-refresh__layer .up {
+  display: inline-block;
+}
+.pull-down .weui-pull-to-refresh__layer .weui-pull-to-refresh__arrow {
+  display: inline-block;
+}
+.pull-down .weui-pull-to-refresh__layer .down {
+  display: inline-block;
+}
+.refreshing .weui-pull-to-refresh__layer .weui-pull-to-refresh__arrow {
+  display: none;
+}
+.refreshing .weui-pull-to-refresh__layer .weui-pull-to-refresh__preloader {
+  display: inline-block;
+}
+.refreshing .weui-pull-to-refresh__layer .refresh {
+  display: inline-block;
+}
+@keyframes preloader-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg);
+  }
+}
+.weui-tab__bd-item.weui-pull-to-refresh {
+  position: absolute;
+  top: 50px;
+}
+.weui-tabbar__item {
+  position: relative;
+}
+.weui-tabbar__item.weui-bar__item--on .weui-tabbar__label {
+  color: #04BE02;
+}
+.weui-navbar__item {
+  color: #888;
+}
+.weui-navbar__item.weui-bar__item--on {
+  color: #666;
+  background-color: #f1f1f1;
+}
+.weui-tab__bd {
+  box-sizing: border-box;
+  height: 100%;
+}
+.weui-tab__bd .weui-tab__bd-item {
+  display: none;
+  height: 100%;
+  overflow: auto;
+}
+.weui-tab__bd .weui-tab__bd-item.weui-tab__bd-item--active {
+  display: block;
+}
+.weui-navbar + .weui-tab__bd {
+  padding-top: 50px;
+}
+.toolbar {
+  position: relative;
+  width: 100%;
+  font-size: .85rem;
+  line-height: 1.5;
+  color: #3d4145;
+  background: #f7f7f8;
+}
+.toolbar:before {
+  content: '';
+  position: absolute;
+  left: 0;
+  top: 0;
+  bottom: auto;
+  right: auto;
+  height: 1px;
+  width: 100%;
+  background-color: #d9d9d9;
+  display: block;
+  z-index: 15;
+  -webkit-transform-origin: 50% 0%;
+          transform-origin: 50% 0%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+  .toolbar:before {
+    -webkit-transform: scaleY(0.5);
+            transform: scaleY(0.5);
+  }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+  .toolbar:before {
+    -webkit-transform: scaleY(0.33);
+            transform: scaleY(0.33);
+  }
+}
+.toolbar .toolbar-inner {
+  height: 2.2rem;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  text-align: center;
+}
+.toolbar .title {
+  position: absolute;
+  display: block;
+  width: 100%;
+  padding: 0;
+  font-size: .85rem;
+  font-weight: normal;
+  line-height: 2.2rem;
+  color: #3d4145;
+  text-align: center;
+  white-space: nowrap;
+}
+.toolbar .picker-button {
+  position: absolute;
+  right: 0;
+  box-sizing: border-box;
+  height: 2.2rem;
+  line-height: 2.2rem;
+  color: #04BE02;
+  z-index: 1;
+  padding: 0 .5rem;
+}
+/* === Columns Picker === */
+.weui-picker-modal {
+  width: 100%;
+  position: absolute;
+  bottom: 0;
+  text-align: center;
+  border-radius: 0;
+  opacity: 0.6;
+  color: #3d4145;
+  -webkit-transition-duration: .3s;
+          transition-duration: .3s;
+  height: 13rem;
+  background: #EFEFF4;
+  -webkit-transform: translate3d(0, 100%, 0);
+          transform: translate3d(0, 100%, 0);
+  -webkit-transition-property: opacity, -webkit-transform;
+  transition-property: opacity, -webkit-transform;
+  transition-property: transform, opacity;
+  transition-property: transform, opacity, -webkit-transform;
+}
+.weui-picker-modal.picker-modal-inline {
+  height: 10.8rem;
+  opacity: 1;
+  position: static;
+  -webkit-transform: translate3d(0, 0, 0);
+          transform: translate3d(0, 0, 0);
+}
+.weui-picker-modal.picker-modal-inline .toolbar {
+  display: none;
+}
+.weui-picker-modal.picker-columns-single .picker-items-col {
+  width: 100%;
+}
+.weui-picker-modal.weui-picker-modal-visible {
+  opacity: 1;
+  -webkit-transform: translate3d(0, 0, 0);
+          transform: translate3d(0, 0, 0);
+}
+.weui-picker-modal .picker-modal-inner {
+  position: relative;
+  height: 10.8rem;
+}
+.weui-picker-modal .picker-columns {
+  width: 100%;
+  height: 13rem;
+  z-index: 11500;
+}
+.weui-picker-modal .picker-columns.picker-modal-inline,
+.popover .weui-picker-modal .picker-columns {
+  height: 10rem;
+}
+@media (orientation: landscape) and (max-height: 415px) {
+  .weui-picker-modal .picker-columns:not(.picker-modal-inline) {
+    height: 10rem;
+  }
+}
+.weui-picker-modal .popover.popover-picker-columns {
+  width: 14rem;
+}
+.weui-picker-modal .picker-items {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-pack: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+  width: 100%;
+  padding: 0;
+  text-align: right;
+  font-size: 1rem;
+  font-weight: normal;
+  -webkit-mask-box-image: -webkit-linear-gradient(bottom, transparent, transparent 5%, white 20%, white 80%, transparent 95%, transparent);
+  -webkit-mask-box-image: linear-gradient(to top, transparent, transparent 5%, white 20%, white 80%, transparent 95%, transparent);
+}
+.weui-picker-modal .bar + .picker-items {
+  height: 10.8rem;
+}
+.weui-picker-modal .picker-items-col {
+  overflow: hidden;
+  position: relative;
+  max-height: 100%;
+}
+.weui-picker-modal .picker-items-col.picker-items-col-left {
+  text-align: left;
+}
+.weui-picker-modal .picker-items-col.picker-items-col-center {
+  text-align: center;
+}
+.weui-picker-modal .picker-items-col.picker-items-col-right {
+  text-align: right;
+}
+.weui-picker-modal .picker-items-col.picker-items-col-divider {
+  color: #3d4145;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+}
+.weui-picker-modal .picker-items-col-wrapper {
+  -webkit-transition: 300ms;
+  transition: 300ms;
+  -webkit-transition-timing-function: ease-out;
+  transition-timing-function: ease-out;
+}
+.weui-picker-modal .picker-item {
+  height: 32px;
+  line-height: 32px;
+  padding: 0 10px;
+  white-space: nowrap;
+  position: relative;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  color: #9b9b9b;
+  left: 0;
+  top: 0;
+  width: 100%;
+  box-sizing: border-box;
+  -webkit-transition: 300ms;
+  transition: 300ms;
+}
+.picker-items-col-absolute .weui-picker-modal .picker-item {
+  position: absolute;
+}
+.weui-picker-modal .picker-item.picker-item-far {
+  pointer-events: none;
+}
+.weui-picker-modal .picker-item.picker-selected {
+  color: #3d4145;
+  -webkit-transform: translate3d(0, 0, 0);
+          transform: translate3d(0, 0, 0);
+  -webkit-transform: rotateX(0deg);
+          transform: rotateX(0deg);
+}
+.weui-picker-modal .picker-center-highlight {
+  height: 32px;
+  box-sizing: border-box;
+  position: absolute;
+  left: 0;
+  width: 100%;
+  top: 50%;
+  margin-top: -16px;
+  pointer-events: none;
+}
+.weui-picker-modal .picker-center-highlight:before {
+  content: '';
+  position: absolute;
+  left: 0;
+  top: 0;
+  bottom: auto;
+  right: auto;
+  height: 1px;
+  width: 100%;
+  background-color: #D9D9D9;
+  display: block;
+  z-index: 15;
+  -webkit-transform-origin: 50% 0%;
+          transform-origin: 50% 0%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+  .weui-picker-modal .picker-center-highlight:before {
+    -webkit-transform: scaleY(0.5);
+            transform: scaleY(0.5);
+  }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+  .weui-picker-modal .picker-center-highlight:before {
+    -webkit-transform: scaleY(0.33);
+            transform: scaleY(0.33);
+  }
+}
+.weui-picker-modal .picker-center-highlight:after {
+  content: '';
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  right: auto;
+  top: auto;
+  height: 1px;
+  width: 100%;
+  background-color: #D9D9D9;
+  display: block;
+  z-index: 15;
+  -webkit-transform-origin: 50% 100%;
+          transform-origin: 50% 100%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+  .weui-picker-modal .picker-center-highlight:after {
+    -webkit-transform: scaleY(0.5);
+            transform: scaleY(0.5);
+  }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+  .weui-picker-modal .picker-center-highlight:after {
+    -webkit-transform: scaleY(0.33);
+            transform: scaleY(0.33);
+  }
+}
+.weui-picker-modal .picker-3d .picker-items {
+  overflow: hidden;
+  -webkit-perspective: 1200px;
+  perspective: 1200px;
+}
+.weui-picker-modal .picker-3d .picker-items-col,
+.weui-picker-modal .picker-3d .picker-items-col-wrapper,
+.weui-picker-modal .picker-3d .picker-item {
+  -webkit-transform-style: preserve-3d;
+  transform-style: preserve-3d;
+}
+.weui-picker-modal .picker-3d .picker-items-col {
+  overflow: visible;
+}
+.weui-picker-modal .picker-3d .picker-item {
+  -webkit-transform-origin: center center -110px;
+  transform-origin: center center -110px;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+  -webkit-transition-timing-function: ease-out;
+  transition-timing-function: ease-out;
+}
+.weui-picker-overlay,
+.weui-picker-container {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  height: 0;
+  width: 100%;
+  z-index: 1000;
+}
+.city-picker .picker-items-col {
+  -webkit-box-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+  max-width: 7rem;
+}
+.weui-picker-container .weui-cells {
+  margin: 0;
+  text-align: left;
+}
+.datetime-picker .picker-item {
+  text-overflow: initial;
+}
+.weui-select-modal {
+  height: auto;
+}
+.weui-select-modal .weui-cells {
+  margin: 0;
+  text-align: left;
+  overflow-y: auto;
+  overflow-x: hidden;
+  max-height: 16rem;
+}
+.weui-select-modal .weui-cells:after {
+  display: none;
+}
+/* === Calendar === */
+.weui-picker-calendar {
+  background: #fff;
+  height: 15rem;
+  width: 100%;
+  overflow: hidden;
+}
+.weui-picker-calendar .picker-modal-inner {
+  overflow: hidden;
+  height: 12.8rem;
+}
+.picker-calendar-week-days {
+  height: .9rem;
+  background: #f7f7f8;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  font-size: 11px;
+  box-sizing: border-box;
+  position: relative;
+}
+.picker-calendar-week-days:after {
+  content: '';
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  right: auto;
+  top: auto;
+  height: 1px;
+  width: 100%;
+  background-color: #c4c4c4;
+  display: block;
+  z-index: 15;
+  -webkit-transform-origin: 50% 100%;
+          transform-origin: 50% 100%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+  .picker-calendar-week-days:after {
+    -webkit-transform: scaleY(0.5);
+            transform: scaleY(0.5);
+  }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+  .picker-calendar-week-days:after {
+    -webkit-transform: scaleY(0.33);
+            transform: scaleY(0.33);
+  }
+}
+.picker-calendar-week-days .picker-calendar-week-day {
+  -webkit-flex-shrink: 1;
+  -ms-flex: 0 1 auto;
+  -ms-flex-negative: 1;
+      flex-shrink: 1;
+  width: 14.28571429%;
+  width: calc(100% / 7);
+  line-height: 17px;
+  text-align: center;
+}
+.picker-calendar-week-days + .picker-calendar-months {
+  height: 11.9rem;
+}
+.picker-calendar-months {
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+  position: relative;
+}
+.picker-calendar-months-wrapper {
+  position: relative;
+  width: 100%;
+  height: 100%;
+  -webkit-transition: 300ms;
+  transition: 300ms;
+}
+.picker-calendar-month {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-orient: vertical;
+  -ms-flex-direction: column;
+  flex-direction: column;
+  width: 100%;
+  height: 100%;
+  position: absolute;
+  left: 0;
+  top: 0;
+}
+.picker-calendar-row {
+  height: 16.66666667%;
+  height: calc(100% / 6);
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-flex-shrink: 1;
+  -ms-flex: 0 1 auto;
+  -ms-flex-negative: 1;
+      flex-shrink: 1;
+  width: 100%;
+  position: relative;
+}
+.picker-calendar-row:after {
+  content: '';
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  right: auto;
+  top: auto;
+  height: 1px;
+  width: 100%;
+  background-color: #ccc;
+  display: block;
+  z-index: 15;
+  -webkit-transform-origin: 50% 100%;
+          transform-origin: 50% 100%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+  .picker-calendar-row:after {
+    -webkit-transform: scaleY(0.5);
+            transform: scaleY(0.5);
+  }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+  .picker-calendar-row:after {
+    -webkit-transform: scaleY(0.33);
+            transform: scaleY(0.33);
+  }
+}
+.weui-picker-modal .picker-calendar-row:last-child:after {
+  display: none;
+}
+.picker-calendar-day {
+  -webkit-flex-shrink: 1;
+  -ms-flex: 0 1 auto;
+  -ms-flex-negative: 1;
+      flex-shrink: 1;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-pack: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+  box-sizing: border-box;
+  width: 14.28571429%;
+  width: calc(100% / 7);
+  text-align: center;
+  color: #3d4145;
+  font-size: 15px;
+  cursor: pointer;
+}
+.picker-calendar-day.picker-calendar-day-prev,
+.picker-calendar-day.picker-calendar-day-next {
+  color: #ccc;
+}
+.picker-calendar-day.picker-calendar-day-disabled {
+  color: #d4d4d4;
+  cursor: auto;
+}
+.picker-calendar-day.picker-calendar-day-today span {
+  background: #e3e3e3;
+}
+.picker-calendar-day.picker-calendar-day-selected span {
+  background: #04BE02;
+  color: #fff;
+}
+.picker-calendar-day span {
+  display: inline-block;
+  border-radius: 100%;
+  width: 30px;
+  height: 30px;
+  line-height: 30px;
+}
+.picker-calendar-month-picker,
+.picker-calendar-year-picker {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+  -webkit-box-pack: justify;
+  -ms-flex-pack: justify;
+  justify-content: space-between;
+  width: 50%;
+  max-width: 200px;
+  -webkit-flex-shrink: 10;
+  -ms-flex: 0 10 auto;
+  -ms-flex-negative: 10;
+      flex-shrink: 10;
+}
+.picker-calendar-month-picker a.icon-only,
+.picker-calendar-year-picker a.icon-only {
+  min-width: 36px;
+}
+.picker-calendar-month-picker span,
+.picker-calendar-year-picker span {
+  -webkit-flex-shrink: 1;
+  -ms-flex: 0 1 auto;
+  -ms-flex-negative: 1;
+      flex-shrink: 1;
+  position: relative;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.popover .picker-calendar .picker-calendar-week-days,
+.picker-calendar.picker-modal-inline .picker-calendar-week-days {
+  background: none;
+}
+.popover .picker-calendar .toolbar:before,
+.picker-calendar.picker-modal-inline .toolbar:before,
+.popover .picker-calendar .picker-calendar-week-days:before,
+.picker-calendar.picker-modal-inline .picker-calendar-week-days:before {
+  display: none;
+}
+.popover .picker-calendar .toolbar:after,
+.picker-calendar.picker-modal-inline .toolbar:after,
+.popover .picker-calendar .picker-calendar-week-days:after,
+.picker-calendar.picker-modal-inline .picker-calendar-week-days:after {
+  display: none;
+}
+.popover .picker-calendar .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+.picker-calendar.picker-modal-inline .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+.popover .picker-calendar .picker-calendar-week-days ~ .picker-calendar-months:before,
+.picker-calendar.picker-modal-inline .picker-calendar-week-days ~ .picker-calendar-months:before {
+  content: '';
+  position: absolute;
+  left: 0;
+  top: 0;
+  bottom: auto;
+  right: auto;
+  height: 1px;
+  width: 100%;
+  background-color: #c4c4c4;
+  display: block;
+  z-index: 15;
+  -webkit-transform-origin: 50% 0%;
+          transform-origin: 50% 0%;
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 2) {
+  .popover .picker-calendar .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+  .picker-calendar.picker-modal-inline .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+  .popover .picker-calendar .picker-calendar-week-days ~ .picker-calendar-months:before,
+  .picker-calendar.picker-modal-inline .picker-calendar-week-days ~ .picker-calendar-months:before {
+    -webkit-transform: scaleY(0.5);
+            transform: scaleY(0.5);
+  }
+}
+@media only screen and (-webkit-min-device-pixel-ratio: 3) {
+  .popover .picker-calendar .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+  .picker-calendar.picker-modal-inline .toolbar ~ .picker-modal-inner .picker-calendar-months:before,
+  .popover .picker-calendar .picker-calendar-week-days ~ .picker-calendar-months:before,
+  .picker-calendar.picker-modal-inline .picker-calendar-week-days ~ .picker-calendar-months:before {
+    -webkit-transform: scaleY(0.33);
+            transform: scaleY(0.33);
+  }
+}
+.picker-calendar-month-picker,
+.picker-calendar-year-picker {
+  display: block;
+  line-height: 2.2rem;
+  -webkit-box-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+}
+.picker-calendar-month-picker a.icon-only,
+.picker-calendar-year-picker a.icon-only {
+  float: left;
+  width: 25%;
+  height: 2.2rem;
+  line-height: 2rem;
+}
+.picker-calendar-month-picker .current-month-value,
+.picker-calendar-year-picker .current-month-value,
+.picker-calendar-month-picker .current-year-value,
+.picker-calendar-year-picker .current-year-value {
+  float: left;
+  width: 50%;
+  height: 2.2rem;
+}
+i.icon {
+  display: inline-block;
+  vertical-align: middle;
+  background-size: 100% auto;
+  background-position: center;
+  background-repeat: no-repeat;
+  font-style: normal;
+  position: relative;
+}
+i.icon.icon-next,
+i.icon.icon-prev {
+  width: 0.75rem;
+  height: 0.75rem;
+}
+i.icon.icon-next {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2015%2015'%3E%3Cg%3E%3Cpath%20fill%3D'%2304BE02'%20d%3D'M1%2C1.6l11.8%2C5.8L1%2C13.4V1.6%20M0%2C0v15l15-7.6L0%2C0L0%2C0z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+i.icon.icon-prev {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2015%2015'%3E%3Cg%3E%3Cpath%20fill%3D'%2304BE02'%20d%3D'M14%2C1.6v11.8L2.2%2C7.6L14%2C1.6%20M15%2C0L0%2C7.6L15%2C15V0L15%2C0z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+/**
+ * Swiper 3.3.1
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
+ * 
+ * http://www.idangero.us/swiper/
+ * 
+ * Copyright 2016, Vladimir Kharlampidi
+ * The iDangero.us
+ * http://www.idangero.us/
+ * 
+ * Licensed under MIT
+ * 
+ * Released on: February 7, 2016
+ */
+.swiper-container {
+  margin: 0 auto;
+  position: relative;
+  overflow: hidden;
+  /* Fix of Webkit flickering */
+  z-index: 1;
+}
+.swiper-container-no-flexbox .swiper-slide {
+  float: left;
+}
+.swiper-container-vertical > .swiper-wrapper {
+  -webkit-box-orient: vertical;
+  -ms-flex-direction: column;
+  flex-direction: column;
+}
+.swiper-wrapper {
+  position: relative;
+  width: 100%;
+  height: 100%;
+  z-index: 1;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-transition-property: -webkit-transform;
+  transition-property: -webkit-transform;
+  transition-property: transform;
+  transition-property: transform, -webkit-transform;
+  box-sizing: content-box;
+}
+.swiper-container-android .swiper-slide,
+.swiper-wrapper {
+  -webkit-transform: translate3d(0px, 0, 0);
+  transform: translate3d(0px, 0, 0);
+}
+.swiper-container-multirow > .swiper-wrapper {
+  -webkit-box-lines: multiple;
+  -moz-box-lines: multiple;
+  -ms-flex-wrap: wrap;
+  flex-wrap: wrap;
+}
+.swiper-container-free-mode > .swiper-wrapper {
+  -webkit-transition-timing-function: ease-out;
+  transition-timing-function: ease-out;
+  margin: 0 auto;
+}
+.swiper-slide {
+  -webkit-flex-shrink: 0;
+  -ms-flex: 0 0 auto;
+  -ms-flex-negative: 0;
+      flex-shrink: 0;
+  width: 100%;
+  height: 100%;
+  position: relative;
+}
+/* Auto Height */
+.swiper-container-autoheight,
+.swiper-container-autoheight .swiper-slide {
+  height: auto;
+}
+.swiper-container-autoheight .swiper-wrapper {
+  -webkit-box-align: start;
+  -ms-flex-align: start;
+  align-items: flex-start;
+  -webkit-transition-property: -webkit-transform, height;
+  -webkit-transition-property: height, -webkit-transform;
+  transition-property: height, -webkit-transform;
+  transition-property: transform, height;
+  transition-property: transform, height, -webkit-transform;
+}
+/* a11y */
+.swiper-container .swiper-notification {
+  position: absolute;
+  left: 0;
+  top: 0;
+  pointer-events: none;
+  opacity: 0;
+  z-index: -1000;
+}
+/* IE10 Windows Phone 8 Fixes */
+.swiper-wp8-horizontal {
+  -ms-touch-action: pan-y;
+  touch-action: pan-y;
+}
+.swiper-wp8-vertical {
+  -ms-touch-action: pan-x;
+  touch-action: pan-x;
+}
+/* Arrows */
+.swiper-button-prev,
+.swiper-button-next {
+  position: absolute;
+  top: 50%;
+  width: 27px;
+  height: 44px;
+  margin-top: -22px;
+  z-index: 10;
+  cursor: pointer;
+  background-size: 27px 44px;
+  background-position: center;
+  background-repeat: no-repeat;
+}
+.swiper-button-prev.swiper-button-disabled,
+.swiper-button-next.swiper-button-disabled {
+  opacity: 0.35;
+  cursor: auto;
+  pointer-events: none;
+}
+.swiper-button-prev,
+.swiper-container-rtl .swiper-button-next {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
+  left: 10px;
+  right: auto;
+}
+.swiper-button-prev.swiper-button-black,
+.swiper-container-rtl .swiper-button-next.swiper-button-black {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-prev.swiper-button-white,
+.swiper-container-rtl .swiper-button-next.swiper-button-white {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-next,
+.swiper-container-rtl .swiper-button-prev {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
+  right: 10px;
+  left: auto;
+}
+.swiper-button-next.swiper-button-black,
+.swiper-container-rtl .swiper-button-prev.swiper-button-black {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-next.swiper-button-white,
+.swiper-container-rtl .swiper-button-prev.swiper-button-white {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
+}
+/* Pagination Styles */
+.swiper-pagination {
+  position: absolute;
+  text-align: center;
+  -webkit-transition: 300ms;
+  transition: 300ms;
+  -webkit-transform: translate3d(0, 0, 0);
+  transform: translate3d(0, 0, 0);
+  z-index: 10;
+}
+.swiper-pagination.swiper-pagination-hidden {
+  opacity: 0;
+}
+/* Common Styles */
+.swiper-pagination-fraction,
+.swiper-pagination-custom,
+.swiper-container-horizontal > .swiper-pagination-bullets {
+  bottom: 10px;
+  left: 0;
+  width: 100%;
+}
+/* Bullets */
+.swiper-pagination-bullet {
+  width: 8px;
+  height: 8px;
+  display: inline-block;
+  border-radius: 100%;
+  background: #000;
+  opacity: 0.2;
+}
+button.swiper-pagination-bullet {
+  border: none;
+  margin: 0;
+  padding: 0;
+  box-shadow: none;
+  -moz-appearance: none;
+  -ms-appearance: none;
+  -webkit-appearance: none;
+  appearance: none;
+}
+.swiper-pagination-clickable .swiper-pagination-bullet {
+  cursor: pointer;
+}
+.swiper-pagination-white .swiper-pagination-bullet {
+  background: #fff;
+}
+.swiper-pagination-bullet-active {
+  opacity: 1;
+  background: #04BE02;
+}
+.swiper-pagination-white .swiper-pagination-bullet-active {
+  background: #fff;
+}
+.swiper-pagination-black .swiper-pagination-bullet-active {
+  background: #000;
+}
+.swiper-container-vertical > .swiper-pagination-bullets {
+  right: 10px;
+  top: 50%;
+  -webkit-transform: translate3d(0px, -50%, 0);
+  transform: translate3d(0px, -50%, 0);
+}
+.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {
+  margin: 5px 0;
+  display: block;
+}
+.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {
+  margin: 0 5px;
+}
+/* Progress */
+.swiper-pagination-progress {
+  background: rgba(0, 0, 0, 0.25);
+  position: absolute;
+}
+.swiper-pagination-progress .swiper-pagination-progressbar {
+  background: #007aff;
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  -webkit-transform: scale(0);
+  transform: scale(0);
+  -webkit-transform-origin: left top;
+  transform-origin: left top;
+}
+.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar {
+  -webkit-transform-origin: right top;
+  transform-origin: right top;
+}
+.swiper-container-horizontal > .swiper-pagination-progress {
+  width: 100%;
+  height: 4px;
+  left: 0;
+  top: 0;
+}
+.swiper-container-vertical > .swiper-pagination-progress {
+  width: 4px;
+  height: 100%;
+  left: 0;
+  top: 0;
+}
+.swiper-pagination-progress.swiper-pagination-white {
+  background: rgba(255, 255, 255, 0.5);
+}
+.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar {
+  background: #fff;
+}
+.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar {
+  background: #000;
+}
+/* 3D Container */
+.swiper-container-3d {
+  -webkit-perspective: 1200px;
+  -o-perspective: 1200px;
+  perspective: 1200px;
+}
+.swiper-container-3d .swiper-wrapper,
+.swiper-container-3d .swiper-slide,
+.swiper-container-3d .swiper-slide-shadow-left,
+.swiper-container-3d .swiper-slide-shadow-right,
+.swiper-container-3d .swiper-slide-shadow-top,
+.swiper-container-3d .swiper-slide-shadow-bottom,
+.swiper-container-3d .swiper-cube-shadow {
+  -webkit-transform-style: preserve-3d;
+  transform-style: preserve-3d;
+}
+.swiper-container-3d .swiper-slide-shadow-left,
+.swiper-container-3d .swiper-slide-shadow-right,
+.swiper-container-3d .swiper-slide-shadow-top,
+.swiper-container-3d .swiper-slide-shadow-bottom {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  pointer-events: none;
+  z-index: 10;
+}
+.swiper-container-3d .swiper-slide-shadow-left {
+  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  /* Safari 4+, Chrome */
+  background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Chrome 10+, Safari 5.1+, iOS 5+ */
+  /* Firefox 3.6-15 */
+  /* Opera 11.10-12.00 */
+  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Firefox 16+, IE10, Opera 12.50+ */
+}
+.swiper-container-3d .swiper-slide-shadow-right {
+  background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  /* Safari 4+, Chrome */
+  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Chrome 10+, Safari 5.1+, iOS 5+ */
+  /* Firefox 3.6-15 */
+  /* Opera 11.10-12.00 */
+  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Firefox 16+, IE10, Opera 12.50+ */
+}
+.swiper-container-3d .swiper-slide-shadow-top {
+  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  /* Safari 4+, Chrome */
+  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Chrome 10+, Safari 5.1+, iOS 5+ */
+  /* Firefox 3.6-15 */
+  /* Opera 11.10-12.00 */
+  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Firefox 16+, IE10, Opera 12.50+ */
+}
+.swiper-container-3d .swiper-slide-shadow-bottom {
+  background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+  /* Safari 4+, Chrome */
+  background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Chrome 10+, Safari 5.1+, iOS 5+ */
+  /* Firefox 3.6-15 */
+  /* Opera 11.10-12.00 */
+  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+  /* Firefox 16+, IE10, Opera 12.50+ */
+}
+/* Coverflow */
+.swiper-container-coverflow .swiper-wrapper,
+.swiper-container-flip .swiper-wrapper {
+  /* Windows 8 IE 10 fix */
+  -ms-perspective: 1200px;
+}
+/* Cube + Flip */
+.swiper-container-cube,
+.swiper-container-flip {
+  overflow: visible;
+}
+.swiper-container-cube .swiper-slide,
+.swiper-container-flip .swiper-slide {
+  pointer-events: none;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+  z-index: 1;
+}
+.swiper-container-cube .swiper-slide .swiper-slide,
+.swiper-container-flip .swiper-slide .swiper-slide {
+  pointer-events: none;
+}
+.swiper-container-cube .swiper-slide-active,
+.swiper-container-flip .swiper-slide-active,
+.swiper-container-cube .swiper-slide-active .swiper-slide-active,
+.swiper-container-flip .swiper-slide-active .swiper-slide-active {
+  pointer-events: auto;
+}
+.swiper-container-cube .swiper-slide-shadow-top,
+.swiper-container-flip .swiper-slide-shadow-top,
+.swiper-container-cube .swiper-slide-shadow-bottom,
+.swiper-container-flip .swiper-slide-shadow-bottom,
+.swiper-container-cube .swiper-slide-shadow-left,
+.swiper-container-flip .swiper-slide-shadow-left,
+.swiper-container-cube .swiper-slide-shadow-right,
+.swiper-container-flip .swiper-slide-shadow-right {
+  z-index: 0;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+}
+/* Cube */
+.swiper-container-cube .swiper-slide {
+  visibility: hidden;
+  -webkit-transform-origin: 0 0;
+  transform-origin: 0 0;
+  width: 100%;
+  height: 100%;
+}
+.swiper-container-cube.swiper-container-rtl .swiper-slide {
+  -webkit-transform-origin: 100% 0;
+  transform-origin: 100% 0;
+}
+.swiper-container-cube .swiper-slide-active,
+.swiper-container-cube .swiper-slide-next,
+.swiper-container-cube .swiper-slide-prev,
+.swiper-container-cube .swiper-slide-next + .swiper-slide {
+  pointer-events: auto;
+  visibility: visible;
+}
+.swiper-container-cube .swiper-cube-shadow {
+  position: absolute;
+  left: 0;
+  bottom: 0px;
+  width: 100%;
+  height: 100%;
+  background: #000;
+  opacity: 0.6;
+  -webkit-filter: blur(50px);
+  filter: blur(50px);
+  z-index: 0;
+}
+/* Fade */
+.swiper-container-fade.swiper-container-free-mode .swiper-slide {
+  -webkit-transition-timing-function: ease-out;
+  transition-timing-function: ease-out;
+}
+.swiper-container-fade .swiper-slide {
+  pointer-events: none;
+  -webkit-transition-property: opacity;
+  transition-property: opacity;
+}
+.swiper-container-fade .swiper-slide .swiper-slide {
+  pointer-events: none;
+}
+.swiper-container-fade .swiper-slide-active,
+.swiper-container-fade .swiper-slide-active .swiper-slide-active {
+  pointer-events: auto;
+}
+/* Scrollbar */
+.swiper-scrollbar {
+  border-radius: 10px;
+  position: relative;
+  -ms-touch-action: none;
+  background: rgba(0, 0, 0, 0.1);
+}
+.swiper-container-horizontal > .swiper-scrollbar {
+  position: absolute;
+  left: 1%;
+  bottom: 3px;
+  z-index: 50;
+  height: 5px;
+  width: 98%;
+}
+.swiper-container-vertical > .swiper-scrollbar {
+  position: absolute;
+  right: 3px;
+  top: 1%;
+  z-index: 50;
+  width: 5px;
+  height: 98%;
+}
+.swiper-scrollbar-drag {
+  height: 100%;
+  width: 100%;
+  position: relative;
+  background: rgba(0, 0, 0, 0.5);
+  border-radius: 10px;
+  left: 0;
+  top: 0;
+}
+.swiper-scrollbar-cursor-drag {
+  cursor: move;
+}
+/* Preloader */
+.swiper-lazy-preloader {
+  width: 42px;
+  height: 42px;
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  margin-left: -21px;
+  margin-top: -21px;
+  z-index: 10;
+  -webkit-transform-origin: 50%;
+  transform-origin: 50%;
+  -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;
+  animation: swiper-preloader-spin 1s steps(12, end) infinite;
+}
+.swiper-lazy-preloader:after {
+  display: block;
+  content: "";
+  width: 100%;
+  height: 100%;
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+  background-position: 50%;
+  background-size: 100%;
+  background-repeat: no-repeat;
+}
+.swiper-lazy-preloader-white:after {
+  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+@-webkit-keyframes swiper-preloader-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+  }
+}
+@keyframes swiper-preloader-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+            transform: rotate(360deg);
+  }
+}
+.weui-actionsheet {
+  z-index: 10000;
+}
+.weui-popup__overlay,
+.weui-popup__container {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  height: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 10;
+}
+.weui-popup__overlay {
+  background-color: rgba(0, 0, 0, 0.6);
+  opacity: 0;
+  -webkit-transition: opacity .3s;
+  transition: opacity .3s;
+}
+.weui-popup__container {
+  display: none;
+}
+.weui-popup__container.weui-popup__container--visible {
+  display: block;
+}
+.weui-popup__container .weui-cells {
+  margin: 0;
+  text-align: left;
+}
+.weui-popup__modal {
+  width: 100%;
+  position: absolute;
+  z-index: 100;
+  bottom: 0;
+  border-radius: 0;
+  opacity: 0.6;
+  color: #3d4145;
+  -webkit-transition-duration: .3s;
+          transition-duration: .3s;
+  height: 100%;
+  background: #EFEFF4;
+  -webkit-transform: translate3d(0, 100%, 0);
+          transform: translate3d(0, 100%, 0);
+  -webkit-transition-property: opacity, -webkit-transform;
+  transition-property: opacity, -webkit-transform;
+  transition-property: transform, opacity;
+  transition-property: transform, opacity, -webkit-transform;
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+.popup-bottom .weui-popup__modal {
+  height: auto;
+}
+.weui-popup__modal .toolbar {
+  position: absolute;
+  left: 0;
+  top: 0;
+  right: 0;
+  z-index: 1;
+}
+.weui-popup__modal .modal-content {
+  height: 100%;
+  padding-top: 2.2rem;
+  overflow: auto;
+  box-sizing: border-box;
+}
+.weui-popup__container--visible .weui-popup__overlay {
+  opacity: 1;
+}
+.weui-popup__container--visible .weui-popup__modal {
+  opacity: 1;
+  -webkit-transform: translate3d(0, 0, 0);
+          transform: translate3d(0, 0, 0);
+}
+.weui-notification {
+  position: fixed;
+  width: 100%;
+  min-height: 3.4rem;
+  top: -2rem;
+  padding-top: 2rem;
+  left: 0;
+  right: 0;
+  z-index: 9999;
+  background-color: rgba(0, 0, 0, 0.85);
+  color: white;
+  font-size: .65rem;
+  -webkit-transform: translate3d(0, -100%, 0);
+          transform: translate3d(0, -100%, 0);
+  -webkit-transition: .4s;
+  transition: .4s;
+}
+.weui-notification.weui-notification--in {
+  -webkit-transform: translate3d(0, 0, 0);
+          transform: translate3d(0, 0, 0);
+}
+.weui-notification.weui-notification--touching {
+  -webkit-transition-duration: 0s;
+          transition-duration: 0s;
+}
+.weui-notification .weui-notification__inner {
+  padding: .4rem .6rem 1rem .6rem;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: start;
+  -ms-flex-align: start;
+  align-items: flex-start;
+}
+.weui-notification .weui-notification__content {
+  width: 100%;
+  margin: 0rem .4rem;
+}
+.weui-notification .weui-notification__title {
+  font-weight: bold;
+}
+.weui-notification .weui-notification__text {
+  line-height: 1;
+}
+.weui-notification .weui-notification__media {
+  height: 1rem;
+  width: 1rem;
+}
+.weui-notification .weui-notification__media img {
+  width: 100%;
+}
+.weui-notification .weui-notification__handle-bar {
+  position: absolute;
+  bottom: .2rem;
+  left: 50%;
+  -webkit-transform: translate3d(-50%, 0, 0);
+          transform: translate3d(-50%, 0, 0);
+  width: 2rem;
+  height: .3rem;
+  border-radius: .15rem;
+  background: white;
+  opacity: .5;
+}
+.weui-photo-browser-modal {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background: black;
+  display: none;
+  opacity: 0;
+  -webkit-transition: opacity .3s;
+  transition: opacity .3s;
+}
+.weui-photo-browser-modal.weui-photo-browser-modal-visible {
+  opacity: 1;
+}
+.weui-photo-browser-modal .swiper-container {
+  height: 100%;
+  -webkit-transform: scale(0.2);
+          transform: scale(0.2);
+  -webkit-transition: -webkit-transform .5s;
+  transition: -webkit-transform .5s;
+  transition: transform .5s;
+  transition: transform .5s, -webkit-transform .5s;
+}
+.weui-photo-browser-modal .swiper-container .swiper-pagination-bullet {
+  background: white;
+  visibility: hidden;
+}
+.weui-photo-browser-modal .swiper-container.swiper-container-visible {
+  -webkit-transform: scale(1);
+          transform: scale(1);
+}
+.weui-photo-browser-modal .swiper-container.swiper-container-visible .swiper-pagination-bullet {
+  visibility: visible;
+  -webkit-transition-property: visibility;
+  transition-property: visibility;
+  -webkit-transition-delay: .5s;
+          transition-delay: .5s;
+}
+.weui-photo-browser-modal .swiper-container .swiper-pagination {
+  bottom: 10px;
+  left: 0;
+  width: 100%;
+}
+.weui-photo-browser-modal .photo-container {
+  height: 100%;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+      -ms-flex-align: center;
+          align-items: center;
+  -webkit-box-pack: center;
+      -ms-flex-pack: center;
+          justify-content: center;
+  overflow: hidden;
+}
+.weui-photo-browser-modal .photo-container img {
+  max-width: 100%;
+  margin-top: -30px;
+}
+.weui-photo-browser-modal .caption {
+  position: absolute;
+  bottom: 40px;
+  left: 0;
+  right: 0;
+  color: white;
+  text-align: center;
+  padding: 0 12px;
+  min-height: 3rem;
+  font-size: 14px;
+  z-index: 10;
+  -webkit-transition: opacity .3s;
+  transition: opacity .3s;
+  -webkit-transition-delay: .5s;
+          transition-delay: .5s;
+  opacity: 0;
+}
+.weui-photo-browser-modal .caption .caption-item {
+  display: none;
+  opacity: 0;
+  -webkit-transition: opacity .15s;
+  transition: opacity .15s;
+}
+.weui-photo-browser-modal .caption .caption-item.active {
+  display: block;
+  opacity: 1;
+}
+.weui-photo-browser-modal .swiper-container-visible .caption {
+  opacity: 1;
+}
+.color-primary {
+  color: #04BE02;
+}
+.color-danger,
+.color-error {
+  color: #f6383a;
+}
+.color-warning {
+  color: #f60;
+}
+.color-success {
+  color: #4cd964;
+}
+.bg-primary,
+.bg-success,
+.bg-danger,
+.bg-error,
+.bg-warning {
+  color: white;
+}
+.bg-primary {
+  background-color: #04BE02;
+}
+.bg-danger,
+.bg-error {
+  background-color: #f6383a;
+}
+.bg-warning {
+  background-color: #f60;
+}
+.bg-success {
+  background-color: #4cd964;
+}
+.weui-toptips {
+  z-index: 100;
+  opacity: 0;
+  -webkit-transition: opacity .3s;
+  transition: opacity .3s;
+}
+.weui-toptips.weui-toptips_visible {
+  opacity: 1;
+}
+.weui-icon_toast {
+  font-size: 55px;
+  color: white;
+  margin-bottom: 6px;
+}
+.weui-toast--forbidden .weui-icon_toast {
+  color: #f6383a;
+}
+.weui-toast--text {
+  min-height: initial;
+  font-size: 18px;
+  padding: 8px 16px;
+  width: auto;
+  top: 40%;
+}
+.weui-toast--text .weui-icon_toast {
+  display: none;
+}
+.weui-count {
+  display: inline-block;
+  height: 25px;
+  line-height: 25px;
+}
+.weui-count .weui-count__btn {
+  height: 21px;
+  width: 21px;
+  line-height: 21px;
+  display: inline-block;
+  position: relative;
+  border: 1px solid #04BE02;
+  border-radius: 50%;
+  vertical-align: -6px;
+}
+.weui-count .weui-count__btn:after,
+.weui-count .weui-count__btn:before {
+  content: " ";
+  position: absolute;
+  height: 1px;
+  width: 11px;
+  background-color: #04BE02;
+  left: 50%;
+  top: 50%;
+  margin-left: -5.5px;
+}
+.weui-count .weui-count__btn:after {
+  height: 11px;
+  width: 1px;
+  margin-top: -5.5px;
+  margin-left: -1px;
+}
+.weui-count .weui-count__decrease:after {
+  display: none;
+}
+.weui-count .weui-count__increase {
+  background-color: #04BE02;
+}
+.weui-count .weui-count__increase:after,
+.weui-count .weui-count__increase:before {
+  background-color: white;
+}
+.weui-count .weui-count__number {
+  background-color: transparent;
+  font-size: .8rem;
+  border: 0;
+  width: 1.3rem;
+  text-align: center;
+  color: #5f646e;
+}
+.weui-panel .weui-media-box__title-after {
+  color: #9b9b9b;
+  font-size: .65rem;
+  float: right;
+}

+ 130 - 0
WebRoot/admis/index.html

@@ -0,0 +1,130 @@
+<html>
+<head>
+<meta charset="utf-8">
+<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
+<title>录取结果查询</title>
+<link rel="stylesheet" href="https://lib.baomitu.com/weui/2.1.3/style/weui.min.css">
+<!--  -->
+<link rel="stylesheet" href="https://lib.baomitu.com/jquery-weui/1.2.1/css/jquery-weui.min.css">
+<link rel="stylesheet" href="./css/wechat.css?v=1.0.5">
+<link rel="stylesheet" href="./css/ui.css?v=1.0.5">
+
+<script src="https://lib.baomitu.com/jquery/1.12.4/jquery.min.js"></script>
+
+<!-- jquery-weui -->
+<script src="https://lib.baomitu.com/jquery-weui/1.2.1/js/jquery-weui.min.js"></script>
+<script src="https://lib.baomitu.com/jquery-weui/1.2.1/js/swiper.min.js"></script>
+
+<!--  angular -->
+<script src="https://lib.baomitu.com/angular.js/1.7.8/angular.min.js"></script>
+<script src="https://lib.baomitu.com/angular-sanitize/1.7.8/angular-sanitize.min.js"></script>
+<script src="https://lib.baomitu.com/angular-ui-router/1.0.22/angular-ui-router.min.js"></script>
+<script src="https://lib.baomitu.com/ngStorage/0.3.11/ngStorage.min.js"></script>
+<script src="https://lib.baomitu.com/oclazyload/1.1.0/ocLazyLoad.min.js"></script>
+<!-- clipboard -->
+<script src="https://lib.baomitu.com/clipboard.js/2.0.4/clipboard.min.js"></script>
+
+<!-- private js -->
+<script src="./js/jweixin-1.6.0.js?v=1.1.5"></script>
+<script src="./js/func.js"></script>
+<script src="./js/angular.init.js?v=1.0.6"></script>
+<script src="./js/angular.filter.js?v=1.0.2"></script>
+<script src="./js/angular.router.js?v=1.0.5"></script>
+<script src="./js/angular.app.js?v=1.1.5"></script>
+<script src="./js/angular.tabbar.js?v=1.0.8"></script>
+
+</head>
+<body ng-app="app" ng-controller="AppCtrl" ontouchstart>
+		
+<div class="weui-panel weui-panel_access">
+		<div class="weui-panel__hd">{{param.map.year}}年{{param.map.schoolName}}录取结果查询</div>
+		<div class="weui-cells">
+			<div class="weui-cell">
+				<div class="weui-cell__hd">
+					<label class="weui-label">证件号码</label>
+				</div>
+				<div class="weui-cell__bd">
+					<input class="weui-input" type="text" placeholder="请输入证件号码" maxlength="18" ng-model="StdReg.cert_id">
+				</div>
+			</div>
+			<div class="weui-cell">
+				<div class="weui-cell__hd">
+					<label class="weui-label">考生姓名</label>
+				</div>
+				<div class="weui-cell__bd">
+					<input class="weui-input" type="text" placeholder="请输入考生姓名" maxlength="32" ng-model="StdReg.std_name">
+				</div>
+			</div>
+			<div class="weui-cell">
+				<div class="weui-cell__hd">
+					<label class="weui-label">高考考生号</label>
+				</div>
+				<div class="weui-cell__bd">
+					<input class="weui-input" type="text" placeholder="请输入高考考生号" maxlength="14" ng-model="StdReg.exam_id">
+				</div>
+			</div>
+		</div>
+		<div class="button-sp-area">
+			<a href="javascript:;" class="weui-btn weui-btn_primary" ng-click="searchStd()">录取查询</a>
+		</div>
+</div>
+<!-- <div class="weui-form-preview__bd" ng-if="currStep">
+	<div class="weui-form-preview__item">
+		<label class="weui-form-preview__label"><strong>考生姓名</strong></label>
+		<span class="weui-form-preview__value text-success">{{result.std_name}}</span>
+	</div>
+	<div class="weui-form-preview__item">
+		<label class="weui-form-preview__label"><strong>录取状态</strong></label>
+		<span class="weui-form-preview__value text-success" ng-if="currStep =='admis'">已录取</span>
+		<span class="weui-form-preview__value text-danger" ng-if="currStep =='noAdmis'">未录取</span>
+	</div>
+	<div class="weui-form-preview__item" ng-if="currStep =='admis' && result.admit_depart">
+		<label class="weui-form-preview__label"><strong>录取院系</strong></label> 
+		<span class="weui-form-preview__value text-success">{{result.admit_depart}}</span>
+	</div>
+	<div class="weui-form-preview__item" ng-if="currStep =='admis'">
+		<label class="weui-form-preview__label"><strong>录取专业</strong></label> 
+		<span class="weui-form-preview__value text-success" style="font-size: 12px;">{{result.aspect_name}}</span>
+	</div>
+	<div class="weui-form-preview__item" ng-if="currStep =='admis' && result.ems">
+		<label class="weui-form-preview__label"><strong>快递单号</strong></label>
+		<span class="weui-form-preview__value text-success">{{result.ems}}</span>
+	</div>
+</div> -->
+
+<div class="weui-cells__group weui-cells__group_form" ng-if="currStep">
+	<div class="weui-cells">
+	    <label for="js_input3" class="weui-cell weui-cell_active weui-cell_readonly">
+	      <div class="weui-cell__hd"><span class="weui-label">考生姓名</span></div>
+	      <div class="weui-cell__bd">
+	          <input id="js_input3" class="weui-input text-success" value="{{result.std_name}}" readonly/>
+	      </div>
+	    </label>
+	    
+	    <label for="js_input4" class="weui-cell weui-cell_active weui-cell_readonly">
+	      <div class="weui-cell__hd"><span class="weui-label">录取状态</span></div>
+	      <div class="weui-cell__bd">
+	          <input id="js_input4" class="weui-input text-success" ng-if="currStep =='admis'" value="已录取" readonly/>
+	           <input id="js_input4" class="weui-input text-danger" ng-if="currStep =='noAdmis'" value="未录取" readonly/>
+	      </div>
+	    </label>
+	    
+	    <label for="js_input5" class="weui-cell weui-cell_active weui-cell_readonly" ng-if="currStep =='admis'">
+	      <div class="weui-cell__hd"><span class="weui-label">录取专业</span></div>
+	      <div class="weui-cell__bd">
+	          <input id="js_input5" class="weui-input text-success" value="{{result.aspect_name}}" readonly/>
+	      </div>
+	    </label>
+	    
+	    <label for="js_input6" class="weui-cell weui-cell_active weui-cell_readonly" ng-if="currStep =='admis' && result.ems">
+	      <div class="weui-cell__hd"><span class="weui-label">快递单号</span></div>
+	      <div class="weui-cell__bd">
+	          <input id="js_input6" class="weui-input text-success" value="{{result.ems}}" readonly/>
+	      </div>
+	    </label>
+	    
+	</div>     
+</div>
+
+</body>
+</html>

+ 110 - 0
WebRoot/admis/js/admis.js

@@ -0,0 +1,110 @@
+var app = angular.module("scoreApp", []);
+app.config(function($httpProvider) {
+	$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
+	$httpProvider.defaults.headers.post['Accept'] = 'application/json, text/javascript, */*; q=0.01';
+	$httpProvider.defaults.headers.post['X-Requested-With'] = 'XMLHttpRequest';
+	$httpProvider.defaults.transformRequest = [ function(data) {
+		var param = function(obj) {
+			var query = '';
+			var name, value, fullSubName, subName, subValue, innerObj, i;
+
+			for (name in obj) {
+				value = obj[name];
+
+				if (value instanceof Array) {
+					for (i = 0; i < value.length; ++i) {
+						subValue = value[i];
+						fullSubName = name + '[]';
+						innerObj = {};
+						innerObj[fullSubName] = subValue;
+						query += param(innerObj) + '&';
+					}
+					// console.log(query);
+				} else if (value instanceof Date) {
+					query += encodeURIComponent(name) + '=' + encodeURIComponent(value.toJSON()) + '&';
+				} else if (value instanceof Object) {
+					for (subName in value) {
+						subValue = $.trim(value[subName]);
+						fullSubName = name + '[' + subName + ']';
+						innerObj = {};
+						innerObj[fullSubName] = subValue;
+						query += param(innerObj) + '&';
+					}
+				} else if (value !== undefined && value !== null) {
+					query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
+				}
+			}
+
+			// console.log(query);
+			return query.length ? query.substr(0, query.length - 1) : query;
+		};
+
+		return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
+	} ];
+});
+app.controller('scoreController', ['$scope','$http','$rootScope',function($scope, $http,$rootScope) {
+    $scope.flag = false;
+    var array = new Array();
+	for (var k = 0; k < 9; k++){
+		array.push({
+			subject_id : k
+		})
+	}
+	
+	$scope.subjectArray = array;
+	// $scope.cert_id = "";
+	$scope.goSearch = function() {
+		if ($scope.cert_id == undefined || $scope.std_name == undefined)
+			return;
+		$scope.map = undefined;
+		$http({
+			url : '../wish/std/searchNy.htm',
+			method : 'post',
+			data : {
+				cert_id : $scope.cert_id,
+				std_name : $scope.std_name,
+				exam_id : $scope.exam_id
+			}
+		}).success(function(data) {
+			if (data.success == false) {
+				alert(data.errorMsg);
+                $scope.flag = false;
+				document.getElementById('cert_id').focus();
+				return;
+			}
+            $scope.flag = true;
+            $scope.map = data.map;
+            if($scope.map == undefined) {
+            	$scope.admisFlag = 'noAdmis';
+            } else {
+            	$scope.admisFlag = 'admis';
+            }
+		}).error(function(data) {
+			$scope.flag = false;
+			alert('网络错误,请重试');
+			document.getElementById('cert_id').focus();
+		});
+	}
+
+	$scope.changeStdName = function($event) {
+		$scope.admisFlag = '';
+		if ($event.keyCode == 13)
+			$scope.goSearch();
+	}
+    $rootScope.openNewWindow = function(url) {
+        window.open(url);
+    };
+	$scope.download = function(){
+        $http({
+            url : 'std/score/download.htm',
+            method : 'post',
+			data:{
+            	cert_id :$scope.cert_id
+			}
+        }).success(function(data) {
+            $rootScope.openNewWindow('frame/file/download/template1.htm?file_name=/temp/' + data.entity);
+        }).error(function(data) {
+            alert('网络错误,请重试');
+        });
+	}
+}]);

+ 146 - 0
WebRoot/admis/js/admis.ym.js

@@ -0,0 +1,146 @@
+var app = angular.module("scoreApp", []);
+app.config(function($httpProvider) {
+	$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
+	$httpProvider.defaults.headers.post['Accept'] = 'application/json, text/javascript, */*; q=0.01';
+	$httpProvider.defaults.headers.post['X-Requested-With'] = 'XMLHttpRequest';
+	$httpProvider.defaults.transformRequest = [ function(data) {
+		var param = function(obj) {
+			var query = '';
+			var name, value, fullSubName, subName, subValue, innerObj, i;
+
+			for (name in obj) {
+				value = obj[name];
+
+				if (value instanceof Array) {
+					for (i = 0; i < value.length; ++i) {
+						subValue = value[i];
+						fullSubName = name + '[]';
+						innerObj = {};
+						innerObj[fullSubName] = subValue;
+						query += param(innerObj) + '&';
+					}
+					// console.log(query);
+				} else if (value instanceof Date) {
+					query += encodeURIComponent(name) + '=' + encodeURIComponent(value.toJSON()) + '&';
+				} else if (value instanceof Object) {
+					for (subName in value) {
+						subValue = $.trim(value[subName]);
+						fullSubName = name + '[' + subName + ']';
+						innerObj = {};
+						innerObj[fullSubName] = subValue;
+						query += param(innerObj) + '&';
+					}
+				} else if (value !== undefined && value !== null) {
+					query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
+				}
+			}
+
+			// console.log(query);
+			return query.length ? query.substr(0, query.length - 1) : query;
+		};
+
+		return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
+	} ];
+});
+app.controller('scoreController', ['$scope','$http','$rootScope',function($scope, $http,$rootScope) {
+    $scope.flag = false;
+    var array = new Array();
+	for (var k = 0; k < 9; k++){
+		array.push({
+			subject_id : k
+		})
+	}
+	$scope.subjectArray = array;
+	$scope.map = undefined;
+	$scope.goSearchFz = function() {
+		if ($scope.cert_id == undefined || $scope.std_name == undefined || $scope.std_pwd == undefined)
+			return;
+		$scope.map = undefined;
+		$http({
+			url : '../ym/fz/score.htm',
+			method : 'post',
+			data : {
+				cert_id : $scope.cert_id,
+				std_name : $scope.std_name,
+				std_pwd : $scope.std_pwd
+			}
+		}).then(function onSuccess(response) {
+			if (response.data.errorCode != 0) {
+				alert(response.data.errorMsg);
+                $scope.flag = false;
+				document.getElementById('cert_id').focus();
+				return;
+			}
+            $scope.flag = true;
+            $scope.map = response.data.map;
+            $(document).scroll(9000);
+		});
+	}
+
+	$scope.changeStdMobileFz = function($event) {
+		//$scope.admisFlag = '';
+		if ($event.keyCode == 13)
+			$scope.goSearchFz();
+	}
+    $rootScope.openNewWindow = function(url) {
+        window.open(url);
+    };
+	$scope.goDownTicket = function(){
+		//alert("预计1月12日开放准考证打印");
+        $http({
+            url : '../ym/fz/ticket/download.htm',
+            method : 'post',
+			data:{
+				cert_id : $scope.cert_id,
+				std_name : $scope.std_name,
+				std_pwd : $scope.std_pwd
+			}
+        }).then(function onSuccess(response) {
+			debugger;
+			if (response.data.errorCode != 0) {
+				alert(response.data.errorMsg);
+				document.getElementById('cert_id').focus();
+				return;
+			}
+			$rootScope.openNewWindow('http://10047.hmsoft.cn/fzimage/' + response.data.entity);
+		});
+	};
+	
+	//***************** */录取查询**********************
+	$scope.goSearchLq = function() {
+		debugger;
+		if ($scope.std_name == undefined || $scope.cert_id == undefined)
+			return;
+		$scope.map = undefined;
+		$http({
+			url : '../enrol/std/notice/ym.htm',
+			method : 'post',
+			data : {
+				exam_id : $scope.exam_id,
+				std_name : $scope.std_name,
+				cert_id : $scope.cert_id
+			}
+		}).then(function onSuccess(response) {
+			debugger;
+			if (response.data.errorCode != 0) {
+				alert(response.data.errorMsg);
+                $scope.flag = false;
+				document.getElementById('cert_id').focus();
+				return;
+			}
+			if (!response.data.map) {
+				alert("考生未被录取或考生信息输入错误,请核准信息后再查!");
+				return;
+			}
+            $scope.map = response.data.map;
+            $(document).scroll(9000);
+		});
+	};
+	
+	$scope.changeStdName = function($event) {
+		if ($event.keyCode == 13)
+			$scope.goSearchLq();
+	}	
+	
+	
+}]);

+ 397 - 0
WebRoot/admis/js/angular.app.js

@@ -0,0 +1,397 @@
+app.controller('AppCtrl', [ '$rootScope', '$scope', '$http', '$localStorage', '$location', '$q', '$timeout', '$sce', function($rootScope, $scope, $http, $localStorage, $location, $q, $timeout, $sce) {
+	
+	$scope.StdReg = {};
+	$scope.result = {};
+	$scope.param = {};
+	
+	/***************************************************************************
+	 * Frame参数
+	 */
+	$rootScope.frame = {
+		CompanyName : '',
+		FrameVersion : '2.0.0',
+		WaitWindow : false
+	};
+
+	$rootScope.ArtStdReg = undefined;
+
+	// 设置cookeis
+	$rootScope.setLocalStorage = function(name, value) {
+		$localStorage[name] = value;
+	};
+	// 获取cookies
+	$rootScope.getLocalStorage = function(name) {
+		return $localStorage[name];
+	};
+	// 内部跳转
+	$rootScope.goLocation = function(url) {
+		$location.path('app/' + url);
+	};
+	// 到首页
+	$rootScope.goWechat = function(url) {
+		window.location = './wechat.jsp';
+	};
+	$scope.closeWechat = function() {
+		WeixinJSBridge.call('closeWindow');
+	}
+
+	$rootScope.showHtml = function(html) {
+		var value = html.replace(/ /g, '&nbsp;').replace(/\n/g, '<br />');
+		return $sce.trustAsHtml(value);
+	}
+
+	// Ajax统一请求函数
+	$rootScope.ajaxRequest = function(params, fn) {
+		if (params == undefined)
+			params = {};
+		if (params.data == undefined)
+			params.data = {};
+		if ($rootScope.ArtStdReg != undefined)
+			params.data.std_id = $rootScope.ArtStdReg.std_id;
+		var params = angular.extend({
+			method : 'post'
+		}, params);
+		$http(params).then(function onSuccess(response) {
+			// $.hideLoading();
+			if (response == undefined)
+				console.log(params);
+			fn.call(undefined, response.data);
+		});
+	};
+	// 将date转换成长时间串
+	$rootScope.isAfterTime = function(date, now) {
+		if (now == undefined)
+			now = new Date();
+		if (!angular.isDate(date))
+			date = $rootScope.parseLongString(date);
+		console.log(date.getTime() - now.getTime());
+		return date.getTime() > now.getTime();
+	};
+	// 将date转换成长时间串
+	$rootScope.longDateString = function(date) {
+		if (date == undefined)
+			date = new Date();
+		if (angular.isDate(date))
+			return date.toJSON();
+		return "";
+	};
+
+	// 将date转换成长时间串
+	$rootScope.longMinuteString = function(date) {
+		return $rootScope.longDateString(date).substr(0, 15);
+	};
+	// 将日期转换成短时间串
+	$rootScope.shortDateString = function(date) {
+		if (date == undefined)
+			return "";
+		if (angular.isDate(date))
+			date = date.toJSON();
+		if (date.length > 10)
+			return date.substr(0, 10);
+		return date;
+	};
+	// 获取日期的时间串
+	$rootScope.shortTimeString = function(date) {
+		if (date == undefined)
+			return "";
+		if (angular.isDate(date))
+			date = date.toJSON();
+		if (date.length > 10)
+			return date.substr(11, 5);
+		return date;
+	}
+	// 将短日期时间串转换成日期
+	$rootScope.parseShortString = function(date) {
+		if (date == undefined)
+			date = new Date();
+		var str = $rootScope.shortDateString(date);
+		return new Date(Date.parse(str.replace(/-/g, "/")));
+	}
+	// 将长时间串转化成日期
+	$rootScope.parseLongString = function(date) {
+		if (angular.isDate(date))
+			return date;
+		if (date == undefined || date.length != 19)
+			return undefined;
+		return new Date(Date.parse(date.replace(/-/g, "/")));
+	}
+	// 获取url参数
+	$rootScope.GetQueryString = function(name) {
+		var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
+		var r = window.location.search.substr(1).match(reg);
+		if (r != null)
+			return unescape(r[2]);
+		return null;
+	};
+
+	$rootScope.initWinxinApi = function() {
+		$rootScope.ajaxRequest({
+			url : '../enrol/wx/config.htm',
+			data : {
+				url : location.href.split('#')[0]
+			}
+		}, function(data) {
+			var obj = angular.extend({
+				debug : false
+			}, data.entity, {
+				jsApiList : [ 'checkJsApi', 'hideMenuItems', 'showMenuItems', 'hideAllNonBaseMenuItem', 'showAllNonBaseMenuItem', 'translateVoice', 'startRecord', 'stopRecord', 'onVoiceRecordEnd', 'playVoice', 'onVoicePlayEnd', 'pauseVoice', 'stopVoice', 'uploadVoice', 'downloadVoice', 'chooseImage', 'previewImage', 'uploadImage', 'downloadImage', 'getNetworkType', 'openLocation', 'getLocation', 'hideOptionMenu', 'showOptionMenu', 'closeWindow', 'scanQRCode', 'chooseWXPay', 'openProductSpecificView', 'addCard', 'chooseCard', 'openCard' ]
+			});
+			wx.error(function(res) {
+				// 加载直到成功为止
+				$rootScope.initWinxinApi();
+				return false;
+			});
+			wx.config(obj);
+			wx.ready(function() {
+				wx.hideOptionMenu();
+				wx.hideAllNonBaseMenuItem();
+			});
+		});
+	};
+	$rootScope.getParamValue = function(paran_name, default_value) {
+		if ($rootScope.FrameParam[paran_name] == undefined)
+			return default_value;
+		return $rootScope.FrameParam[paran_name];
+	}
+	$rootScope.checkParamValue = function(param_name, default_value, check_value) {
+		var value = $rootScope.getParamValue(param_name, default_value);
+		if ((value + '') == (check_value + ''))
+			return true;
+		return false;
+	}
+
+	$rootScope.InitStatus = false;
+	$rootScope.loginSuccess = false;
+	$rootScope.getUserInfo = function() {
+		// 请求用户信息
+		$.ajax({
+			url : '../enrol/wx/user/info.htm',
+			async : false,
+			type : "POST",
+			dataType : "json",
+			data : {
+				code : $rootScope.GetQueryString('code')
+			},
+			success : function(data) {
+				$.hideLoading();
+				if (data.success == false) {
+					$.alert(data.errorMsg, function() {
+						WeixinJSBridge.call('closeWindow');
+					});
+					// if(data.login == false) {
+					// $.alert("微信加载出现问题,请退出重新进入公众号!", function() {
+					// WeixinJSBridge.call('closeWindow');
+					// });
+					// return;
+					// }else {
+					// $.alert(data.errorMsg, function() {
+					// WeixinJSBridge.call('closeWindow');
+					// });
+					// return;
+					// }
+					return;
+				}
+				// 初始化成功
+				$rootScope.InitStatus = true;
+				$rootScope.loginSuccess = true;
+				// 初始化参数信息
+				$rootScope.FrameParam = {};
+				angular.forEach(data.map.FrameParamArray, function(param) {
+					$rootScope.FrameParam[param.param_name] = param.param_value;
+				});
+				$rootScope.StdTypeArray = data.map.StdTypeArray;
+
+				// 设置微信抬头
+				if ($rootScope.FrameParam.EnrolTitle) {
+					document.title = $rootScope.FrameParam.EnrolTitle;
+				}
+
+				// 判断当前考务状态
+				if ($rootScope.FrameParam.ArtStatus == 'Config') {
+					// 未开放报名,
+					$rootScope.InitStatus = false;
+					WeixinJSBridge.call('closeWindow');
+					return;
+				}
+
+				$rootScope.ArtStdReg = data.map.StdReg;
+				$rootScope.WxUser = data.map.WxUser;
+				// --std_info
+				if (data.map.StdReg != undefined) {
+					// 处理考生信息
+					if (data.map.StdReg.reg_status == 'IdCard') {
+						// 上传了证件照片
+						$rootScope.goLocation('std/reg');
+					} else if (data.map.StdReg.reg_status == 'NoCrownPhoto') {
+						// 上传免冠照片
+						$rootScope.goLocation('std/reg');
+					} else if (data.map.StdReg.std_score_file == 'firstLogin') {
+						$rootScope.goLocation('std/info');
+					} else {
+						$rootScope.goLocation('main');
+					}
+				} else {
+					if ($rootScope.FrameParam.AllowStdReg == 'InActive') {
+						// 不允许考生自行注册
+						if($rootScope.FrameParam.GeneralExam == 'Active') {
+							$rootScope.goLocation('std/wybinding');
+						} else {
+							$rootScope.goLocation('std/binding');
+						}
+					} else {
+						$rootScope.goLocation('std/reg');
+					}
+					return;
+				}
+			},
+			error : function(data) {
+
+			}
+		});
+	}
+
+	$rootScope.getJudgerInfo = function() {
+		$.ajax({
+			url : '../judge/wx/judger/info.htm',
+			async : false,
+			type : "POST",
+			dataType : "json",
+			data : {
+				code : $rootScope.GetQueryString('code')
+			},
+			success : function(data) {
+				$.hideLoading();
+				if (data.success == false) {
+					$.alert(data.errorMsg, function() {
+						WeixinJSBridge.call('closeWindow');
+					});
+					return;
+				}
+
+				// 初始化成功
+				$rootScope.InitStatus = true;
+				$rootScope.loginSuccess = true;
+				// 初始化参数信息
+				$rootScope.FrameParam = {};
+				angular.forEach(data.map.FrameParamArray, function(param) {
+					$rootScope.FrameParam[param.param_name] = param.param_value;
+				});
+
+				$rootScope.WxUser = data.map.WxUser;
+
+				if (data.map.WxUser) {
+					$rootScope.goLocation('judge');
+				}
+				/*
+				 * else{ $rootScope.goLocation('judge/binding'); }
+				 */
+
+			},
+			error : function(data) {
+
+			}
+		});
+	}
+
+//	$rootScope.initWinxinApi();
+//	if (location.search.indexOf('?judge') != -1) {
+//		$rootScope.getJudgerInfo();
+//	} else {
+//		$rootScope.getUserInfo();
+//	}
+
+	$rootScope.isProvinceStd = function() {
+		if ($rootScope.ArtStdReg.std_province == $rootScope.FrameParam.SchoolProvince)
+			return true;
+		return false;
+	}
+
+	$rootScope.getTimeName = function(time_type) {
+		if (time_type + '' == '1')
+			return '上午';
+		else if (time_type + '' == '2')
+			return '下午';
+		if (time_type + '' == '3')
+			return '晚上';
+		else
+			return time_type;
+	}
+
+	$rootScope.uploadStdMaterial = function(material_type, fn, enrol_id) {
+		wx.chooseImage({
+			count : 1, // 默认9
+			sizeType : [ 'compressed' ], // 可以指定是原图还是压缩图,默认二者都有'original',
+			sourceType : [ 'album', 'camera' ], // 可以指定来源是相册还是相机,默认二者都有
+			success : function(res) {
+				var localIds = res.localIds;
+				wx.uploadImage({
+					localId : localIds[0], // 需要上传的图片的本地ID,由chooseImage接口获得
+					isShowProgressTips : 1, // 默认为1,显示进度提示
+					success : function(serverRes) {
+						var serverId = serverRes.serverId; // 返回图片的服务器端ID
+						$.showLoading("考生材料上传中,请稍候...")
+						// 上传成功,去服务器取图片
+						var vData = {
+							std_id : $rootScope.ArtStdReg.std_id,
+							media_id : serverId,
+							material_type : material_type
+						};
+						if (enrol_id)
+							vData.enrol_id = enrol_id;
+						$rootScope.ajaxRequest({
+							url : '../enrol/std/material/upload.htm',
+							method : 'post',
+							data : vData
+						}, function(data) {
+							$.hideLoading();
+							$rootScope[material_type] = data.entity;
+							if (material_type == 'NoCrownPhoto') {
+								$rootScope.ArtStdReg.std_image = data.entity.material_file;
+							}
+							if (fn)
+								fn.call(undefined, data);
+						});
+					},
+					fail : function(error) {
+						$.alert('图片服务器暂时无法访问,请稍侯再试', '错误提示');
+					}
+				});
+			}
+		});
+	}
+	
+	$rootScope.getParam = function() {
+		$rootScope.ajaxRequest({
+			url: '../wish/std/get/param.htm',
+			method: 'post'
+		},function(data) {
+			$scope.param = data;
+		});
+	}
+	$rootScope.getParam();
+	
+	
+	$rootScope.searchStd = function() {
+		
+		var url = '../wish/std/search/all.htm';
+		if($scope.param.map.schoolCode === '10331') {
+			url = 'wish/std/searchNy.htm';
+		}
+		$rootScope.ajaxRequest({
+			url : url,
+			method : 'post',
+			data : $scope.StdReg
+		},function(data) {
+			if(!data.map) {
+				$scope.currStep = "noAdmis";
+				$scope.result.std_name = $scope.StdReg.std_name;
+			} else {
+				$scope.currStep = "admis";
+				$scope.result = data.map;
+			}
+		});
+	}
+
+	
+
+} ]);

+ 117 - 0
WebRoot/admis/js/angular.filter.js

@@ -0,0 +1,117 @@
+app.filter('subjectType', function () {
+    return function (data) {
+        var result = '';
+        switch (data) {
+            case 'Interview':
+                result = '面试';
+                break;
+            case 'Written':
+                result = '笔试';
+                break;
+            case 'Machine':
+                result = '机考';
+                break;                
+        }
+
+        return result;
+    };
+}).filter('certTypeName', function () {
+    return function (data) {
+        var result = '';
+        switch (data) {
+            case 'HongKong':
+                result = '港澳台身份证';
+                break;
+            case 'WaiGuo':
+                result = '外国护照';
+                break;
+            case 'IdCard':
+                result = '大陆身份证';
+                break;
+        }
+
+        return result.length == 0 ? data : result;
+    }
+}).filter('trackChooseType', function () {
+    return function (data) {
+        var result = '';
+        switch (data) {
+            case 'Variety':
+                result = '限定品种';
+                break;
+            case 'User':
+                result = '考生自填';
+                break;
+            case 'Tracks':
+                result = '指定曲目';
+                break;
+            case 'Random':
+                result = '随机抽取';
+                break;
+        }
+
+        return result;
+    };
+}).filter('billStatus', function () {
+    return function (data) {
+        var result = '';
+        switch (data) {
+            case 'Reply':
+                result = '未支付';
+                break;
+            case 'Complete':
+                result = '支付成功';
+                break;
+            case 'Refund':
+                result = '已退款';
+                break;
+            case 'Request':
+                result = '未支付';
+                break;
+        }
+
+        return result;
+    };
+}).filter('subjectMasterFlag', function () {
+    return function (data) {
+        var result = '';
+        switch (data) {
+            case 'Active':
+                result = '主项';
+                break;
+            case 'InActive':
+                result = '副项';
+                break;
+        }
+
+        return result;
+    };
+}).filter('batchName', function () {
+    return function (data) {
+        var result = '';
+        var data = data + ''
+        switch (data) {
+            case '1':
+                result = '初试';
+                break;
+            case '2':
+                result = '复试';
+                break;
+            case '3':
+                result = '三试';
+                break;
+        }
+
+        return result;
+    };
+}).filter('numberArray', function () {
+    return function (data) {
+    	var result = [];
+    	for(var k=1;k<=data;k++){
+    		result[k-1] = k;
+    	}
+
+        return result;
+    };
+});
+

+ 91 - 0
WebRoot/admis/js/angular.init.js

@@ -0,0 +1,91 @@
+'use strict';
+angular.module('app', [ 'ngSanitize','ngStorage', 'oc.lazyLoad', 'ui.router' ]);
+var app = angular.module('app').config([ '$controllerProvider', '$compileProvider', '$filterProvider', '$provide', function($controllerProvider, $compileProvider, $filterProvider, $provide) {
+	app.controller = $controllerProvider.register;
+	app.directive = $compileProvider.directive;
+	app.filter = $filterProvider.register;
+	app.factory = $provide.factory;
+	app.service = $provide.service;
+	app.constant = $provide.constant;
+	app.value = $provide.value;
+} ]);
+
+app.factory('frameAjaxInterceptor', function($rootScope, $q, $location) {
+	return {
+	'request' : function(config) {
+		// 判断是否弹出等待框
+		var wait = config.wait || 0;
+		if (wait > 0) {
+			$.showLoading('业务提交中,请稍后...');
+		}
+		return config;
+	},
+	'requestError' : function(rejection) {
+		return $q.reject(rejection);
+	},
+	'response' : function(response) {
+		var wait = (response.config || {}).wait || 0;
+        $.hideLoading();
+		if (response.data.success == undefined)
+			return response;
+		if (response.data.success == false) {
+			if (response.data.login == false) {
+				$.alert("请退出重新进入公众号!", function() {
+					WeixinJSBridge.call('closeWindow');
+				});
+				return;
+			} else {
+				$.alert(response.data.errorMsg, '提示');
+			}
+			return $q.reject(response);
+		}
+		return response;
+	},
+	'responseError' : function(rejection) {
+		var wait = (rejection.config || {}).wait || 0;
+		if (wait > 0) {
+			$.hideLoading();
+		}
+		// toaster.error('', "服务器发生内部错误,请联系系统管理员");
+		return $q.reject(rejection);
+	}
+	};
+}).config([ '$httpProvider', function($httpProvider) {
+	// 设置http默认信息
+	$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
+	$httpProvider.defaults.headers.post['Accept'] = 'application/json, text/javascript, */*; q=0.01';
+	$httpProvider.defaults.headers.post['X-Requested-With'] = 'XMLHttpRequest';
+	$httpProvider.defaults.transformRequest = [ function(data) {
+		var param = function(obj) {
+			var query = '';
+			var name, value, fullSubName, subName, subValue, innerObj, i;
+			for (name in obj) {
+				value = obj[name];
+				if (value instanceof Array) {
+					for (i = 0; i < value.length; ++i) {
+						subValue = $.trim(value[i]);
+						fullSubName = name + '[]';
+						innerObj = {};
+						innerObj[fullSubName] = subValue;
+						query += param(innerObj) + '&';
+					}
+				} else if (value instanceof Date) {
+					query += encodeURIComponent(name) + '=' + encodeURIComponent($.trim(value.toJSON())) + '&';
+				} else if (value instanceof Object) {
+					for (subName in value) {
+						subValue = $.trim(value[subName]);
+						fullSubName = name + '[' + subName + ']';
+						innerObj = {};
+						innerObj[fullSubName] = subValue;
+						query += param(innerObj) + '&';
+					}
+				} else if (value !== undefined && value !== null) {
+					query += encodeURIComponent(name) + '=' + encodeURIComponent($.trim(value)) + '&';
+				}
+			}
+			return query.length ? query.substr(0, query.length - 1) : query;
+		};
+		return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
+	} ];
+	$httpProvider.interceptors.push('frameAjaxInterceptor');
+} ]);

+ 390 - 0
WebRoot/admis/js/angular.router.js

@@ -0,0 +1,390 @@
+'use strict';
+angular.module('app').config([ '$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
+	$urlRouterProvider.otherwise('/app/main');
+	$stateProvider.state('app', {
+		abstract : true,
+		url : '/app',
+		template : '<div ui-view class="fade-in-up"></div>'
+	}).state('app.main', {
+		url : '/main',
+		templateUrl : 'routes/main/main.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/main/main.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+    })
+	
+	.state('app.std', {
+		abstract : true,
+		url : '/std',
+		template : '<div ui-view class="fade-in-up"></div>'
+	}).state('app.std.reg', {
+		url : '/reg',
+		templateUrl : 'routes/std/reg/std_reg.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/std/reg/std_reg.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+    }).state('app.std.cert', {
+		url : '/cert',
+		templateUrl : 'routes/std/cert/std_cert.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/std/cert/std_cert.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+    }).state('app.std.info', {
+		url : '/info',
+		templateUrl : 'routes/std/info/std_info.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/std/info/std_info.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+    }).state('app.std.material', {
+		url : '/material',
+		templateUrl : 'routes/std/material/std_material.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/std/material/std_material.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+    }).state('app.std.material_info', {
+		url : '/material_info/:material_id',
+		templateUrl : 'routes/std/material/std_material_info.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/std/material/std_material_info.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+	}).state('app.std.binding', {
+		url : '/binding',
+		templateUrl : 'routes/std/binding/std_binding.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/std/binding/std_binding.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+	}).state('app.std.unbinding', {
+		url : '/unbinding',
+		templateUrl : 'routes/std/unbinding/std_unbinding.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/std/unbinding/std_unbinding.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+	}).state('app.std.admit', {
+		url : '/admit',
+		templateUrl : 'routes/std/admit/std_admit.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/std/admit/std_admit.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+	})
+	
+	.state('app.enrol', {
+		abstract : true,
+		url : '/enrol',
+		template : '<div ui-view class="fade-in-up"></div>'
+	}).state('app.enrol.guide', {
+		url : '/guide',
+		templateUrl : 'routes/enrol/guide/enrol_guide.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/enrol/guide/enrol_guide.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+    }).state('app.enrol.list', {
+		url : '/list',
+		templateUrl : 'routes/enrol/list/enrol_list.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/enrol/list/enrol_list.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+    }).state('app.enrol.info', {
+		url : '/info/:enrol_id/:autopay',
+		templateUrl : 'routes/enrol/info/enrol_info.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/enrol/info/enrol_info.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+    }).state('app.enrol.doc', {
+		url : '/doc/:enrol_id',
+		templateUrl : 'routes/enrol/doc/enrol_doc.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/enrol/doc/enrol_doc.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+    })
+    
+    .state('app.appointment', {
+		abstract : true,
+		url : '/appointment',
+		template : '<div ui-view class="fade-in-up"></div>'
+	}).state('app.appointment.list', {
+		url : '/list',
+		templateUrl : 'routes/appointment/list/appointment_list.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/appointment/list/appointment_list.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+    }).state('app.appointment.info', {
+		url : '/info/:agent_id',
+		templateUrl : 'routes/appointment/info/appointment_info.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/appointment/info/appointment_info.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+    })
+    
+	.state('app.ticket', {
+		abstract : true,
+		url : '/ticket',
+		template : '<div ui-view class="fade-in-up"></div>'
+	}).state('app.ticket.list', {
+		url : '/list',
+		templateUrl : 'routes/ticket/list/ticket_list.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/ticket/list/ticket_list.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+    }).state('app.ticket.info', {
+		url : '/info/:ly_ticket_id',
+		templateUrl : 'routes/ticket/info/ticket_info.html?v=' + new Date().getTime(),
+		resolve : {
+			deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+				return $ocLazyLoad.load(['routes/ticket/info/ticket_info.js?v=' + new Date().getTime() ]);
+			} ]
+		}
+    })
+    
+    
+    .state('app.exam', {
+		abstract : true,
+		url : '/exam',
+		template : '<div ui-view class="fade-in-up"></div>'
+	})
+	.state('app.exam.voide', {
+			url : '/voide/:enrol_id/:read',
+			templateUrl : 'routes/voide/exam/exam.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/voide/exam/exam.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    })
+	    .state('app.exam.result', {
+	    	url : '/result/:enrol_id',
+	    	templateUrl : 'routes/voide/result/result.html?v=' + new Date().getTime(),
+	    	resolve : {
+	    		deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+	    			return $ocLazyLoad.load(['routes/voide/result/result.js?v=' + new Date().getTime() ]);
+	    		} ]
+	    	}
+	    })
+   	.state('app.exam.upload', {
+			url : '/upload/:enrol_id',
+			templateUrl : 'routes/voide/upload/upload.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/voide/upload/upload.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    }) 
+	   	.state('app.exam.list', {
+			url : '/list',
+			templateUrl : 'routes/exam/list/list.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/exam/list/list.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    }) 
+	    
+	   	.state('app.exam.checkin', {
+			url : '/checkin/:agent_id/:aspect_id',
+			templateUrl : 'routes/exam/checkin/checkin.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/exam/checkin/checkin.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    }) 
+	    
+	    .state('app.judge', {
+	    	url : '/judge',
+	    	templateUrl : 'routes/judge/judge.html?v=' + new Date().getTime(),
+	    	resolve : {
+	    		deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+	    			return $ocLazyLoad.load(['routes/judge/judge.js?v=' + new Date().getTime() ]);
+	    		} ]
+	    	}
+	    }) 
+	    .state('app.exam.wait', {
+	    	url : '/wait/:agent_id/:aspect_id',
+	    	templateUrl : 'routes/exam/wait/wait.html?v=' + new Date().getTime(),
+	    	resolve : {
+	    		deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+	    			return $ocLazyLoad.load(['routes/exam/wait/wait.js?v=' + new Date().getTime() ]);
+	    		} ]
+	    	}
+	    }) 
+	    
+	    .state('app.ym', {
+			abstract : true,
+			url : '/ym',
+			template : '<div ui-view class="fade-in-up"></div>'
+		}).state('app.ym.addr', {
+			url : '/addr',
+			templateUrl : 'routes/ym/addr/ym_addr.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/ym/addr/ym_addr.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    }).state('app.ym.mobile', {
+			url : 'mobile',
+			templateUrl : 'routes/ym/mobile/ym_mobile.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/ym/mobile/ym_mobile.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    }).state('app.ym.aspect_list', {
+			url : '/aspect_list',
+			templateUrl : 'routes/ym/list/ym_aspect_list.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/ym/list/ym_aspect_list.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    }).state('app.ym.aspect_info', {
+			url : '/aspect_info/:enrol_id',
+			templateUrl : 'routes/ym/info/ym_aspect_info.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/ym/info/ym_aspect_info.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    })
+	    
+	    .state('app.reexam', {
+			abstract : true,
+			url : '/reexam',
+			template : '<div ui-view class="fade-in-up"></div>'
+		}).state('app.reexam.list', {
+			url : '/list',
+			templateUrl : 'routes/reexam/list/reexam_list.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/reexam/list/reexam_list.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    }).state('app.reexam.info', {
+			url : '/info/:enrol_id',
+			templateUrl : 'routes/reexam/info/reexam_info.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/reexam/info/reexam_info.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    }).state('app.std.wybinding', {
+			url : '/wybinding',
+			templateUrl : 'routes/std/wyBinding/wy_std_binding.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/std/wyBinding/wy_std_binding.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+		}).state('app.std.notice', {
+			url : '/notice',
+			templateUrl : 'routes/std/notice/std_notice.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/std/notice/std_notice.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+		}).state('app.reexam.search', {
+			url : '/search',
+			templateUrl : 'routes/reexam/search/search_info.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/reexam/search/search_info.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+		}).state('app.zxappointment', {
+			abstract : true,
+			url : '/zxappointment',
+			template : '<div ui-view class="fade-in-up"></div>'
+		}).state('app.zxappointment.list', {
+			url : '/list',
+			templateUrl : 'routes/zxappointment/list/zx_appointment_list.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/zxappointment/list/zx_appointment_list.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    }).state('app.zxappointment.info', {
+			url : '/info/:enrol_id/:aspect_id',
+			templateUrl : 'routes/zxappointment/info/zx_appointment_info.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/zxappointment/info/zx_appointment_info.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    }).state('app.zxnotice', {
+			abstract : true,
+			url : '/zxnotice',
+			template : '<div ui-view class="fade-in-up"></div>'
+		}).state('app.zxnotice.info', {
+			url : '/info/:flag',
+			templateUrl : 'routes/score/notice/notice_info.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/zxappointment/notice/notice_info.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    }).state('app.score', {
+			abstract : true,
+			url : '/score',
+			template : '<div ui-view class="fade-in-up"></div>'
+		}).state('app.score.list', {
+			url : '/list',
+			templateUrl : 'routes/score/cyfz/cyfz_score_list.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/score/cyfz/cyfz_score_list.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    }).state('app.score.info', {
+			url : '/info/:aspect_id',
+			templateUrl : 'routes/score/cyfz/cyfz_score_info.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/score/cyfz/cyfz_score_info.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    }).state('app.cyfz', {
+			abstract : true,
+			url : '/cyfz',
+			template : '<div ui-view class="fade-in-up"></div>'
+		}).state('app.cyfz.lq', {
+			url : '/lq',
+			templateUrl : 'routes/score/cyfz/cyfz_lq_list.html?v=' + new Date().getTime(),
+			resolve : {
+				deps : [ '$ocLazyLoad', function($ocLazyLoad) {
+					return $ocLazyLoad.load(['routes/score/cyfz/cyfz_lq_list.js?v=' + new Date().getTime() ]);
+				} ]
+			}
+	    })
+	    
+} ]);

+ 79 - 0
WebRoot/admis/js/angular.tabbar.js

@@ -0,0 +1,79 @@
+app.controller('TabbarCtrl', [ '$rootScope', '$scope', '$timeout', '$location', function($rootScope, $scope, $timeout, $location) {
+	$scope.FuncMap = {
+		'me' : [ {
+			text : '我的证件',
+			url : 'std/cert'
+		}, {
+			text : '个人信息',
+			url : 'std/info'
+		}, {
+			text : '报考材料',
+			url : 'std/material',
+			param : 'WeixinMenuMaterial'
+		} ],
+
+		'help' : [ {
+			text : '解除绑定',
+			url : 'std/unbinding'
+		}
+//		, {
+//			text : '操作手册',
+//			url : 'doc/optr'
+//		}, {
+//			text : '常见问题',
+//			url : 'doc/program'
+//		}
+		],
+
+		'enrol' : [ {
+			text : '专业报考',
+			url : 'enrol/guide',
+			param : 'WeixinMenuEnrolGuide'
+		}, {
+			text : '已报专业',
+			url : 'enrol/list'
+		}, {
+			text : '面试预约',
+			url : 'appointment/list',
+			param : 'WeixinMenuAppointment'
+		}, {
+			text : '准考证下载',
+			url : 'ticket/list',
+			param : 'WeixinMenuTicket'
+		}, {
+			text : '复试确认',
+			url : 'reexam/list',
+			param : 'WeixinMenuReExam'
+		} ],
+
+		'score' : [ {
+			text : '分数查询',
+			url : 'score/list'
+		}, {
+			text : '核查申请',
+			url : 'score/admit'
+		}, {
+			text : '合格证下载',
+			url : 'quality/download'
+		} ]
+	}
+	$scope.showMenu = function(name) {
+		var array = [];
+		angular.forEach($scope.FuncMap[name], function(m) {
+			if (m.param == undefined || m.param == '' || $rootScope.getParamValue(m.param, 'InActive') == 'Active') {
+				array.push({
+					text : m.text,
+					onClick : function() {
+						$timeout(function() {
+							$location.path('app/' + m.url);
+						}, 100);
+
+					}
+				});
+			}
+		});
+		$.actions({
+			actions : array
+		});
+	}
+} ]);

+ 397 - 0
WebRoot/admis/js/frame.app.js

@@ -0,0 +1,397 @@
+
+app.controller('AppCtrl', [ '$rootScope', '$scope', '$http', '$localStorage', '$location', '$modal', '$ocLazyLoad', '$q', 'toaster', function($rootScope, $scope,  $http, $localStorage, $location, $modal, $ocLazyLoad, $q, toaster) {
+	$rootScope.frame = {
+		CompanyName : '',
+		FrameVersion : '1.0.0',
+		WaitWindow : false,
+		// for chart colors
+		color : {
+			primary : '#7266ba',
+			info : '#23b7e5',
+			success : '#27c24c',
+			warning : '#fad733',
+			danger : '#f05050',
+			light : '#e8eff0',
+			dark : '#3a3f51',
+			black : '#1c2b36'
+		},
+		colors : [ '#23b7e5', '#27c24c', '#7266ba', '#FFB6C1', '#87CEFA', '#DB7093', '#7FFF00', '#9932CC', '#6A5ACD' ],
+		texts : [ 'text-info', 'text-success', 'text-primary', 'text-gold', 'text-lime', 'text-aliceblue', 'text-indianred', 'text-palevioletred', 'text-darkslategray' ],
+		settings : {
+			themeID : 1,
+			navbarHeaderColor : 'bg-black',
+			navbarCollapseColor : 'bg-white-only',
+			asideColor : 'bg-black',
+			headerFixed : true,
+			asideFixed : true,
+			asideFolded : false,
+			asideDock : false,
+			container : false
+		}
+	}
+	$.ajax({
+		url : 'frame/optr/init.htm',
+		async : false,
+		type : "POST",
+		dataType : "json",
+		success : function(data) {
+			if (data.success == false) {
+				window.location = "logout.html";
+				return;
+			} else
+				angular.extend($rootScope.frame, data.map);
+			// param
+			$rootScope.frame.FrameParam = {};
+			angular.forEach(data.map.FrameParamArray, function(param, key) {
+				$rootScope.frame.FrameParam[param.param_name] = param.param_value;
+			});
+			document.title = $rootScope.frame.FrameParam.FrameTitle;
+			// config
+			$rootScope.frame.configMap = {}, $rootScope.frame.configArray = {};
+			angular.forEach(data.map.FrameConfigArray, function(config, key) {
+				$rootScope.frame.configMap[config.config_name + "_" + config.config_value] = config;
+				if ($rootScope.frame.configArray[config.config_name] == undefined)
+					$rootScope.frame.configArray[config.config_name] = [];
+				$rootScope.frame.configArray[config.config_name].push(config);
+			});
+			// role
+			$rootScope.frame.FrameOptr.roleMap = {};
+			angular.forEach(data.map.FrameOptr.resMap, function(role, key) {
+				$rootScope.frame.FrameOptr.roleMap['Role' + role] = role;
+			});
+		}
+	});
+
+	$rootScope.getConfigText = function(config_name, config_value) {
+		var config = $rootScope.frame.configMap[config_name + "_" + config_value];
+		if (config) {
+			return config.config_text;
+		}
+		return config_value;
+	};
+	// 获取配置
+	$rootScope.getConfigArray = function(config_name) {
+		return $rootScope.frame.configArray[config_name];
+	};
+	// 鉴权
+	$rootScope.authOptrRole = function(role_id) {
+		return !!$rootScope.frame.FrameOptr.roleMap['Role' + role_id];
+	};
+	// 获取图标css
+	$rootScope.getIconCss = function(css) {
+		css = $.trim(css);
+		if (css != undefined && css.length > 0) {
+			if (css.indexOf('icon') == 0)
+				return 'glyphicon icon ' + css + ' ';
+			if (css.indexOf('fa') == 0)
+				return 'glyphicon fa ' + css + ' ';
+			if (css.indexOf('glyphicon') == 0)
+				return 'glyphicon ' + css + ' ';
+			return 'glyphicon ' + css + ' ';
+		} else
+			return 'glyphicon glyphicon-cog text-info-lter ';
+	};
+	// 计算文件大小:tostring
+	$rootScope.getFileSize = function(size) {
+		if (size == null || size == undefined || isNaN(size))
+			return;
+		if (size < 1024)
+			return size + ' Byte'
+		if (size < 1024 * 1024)
+			return Math.round(size / 1024 * 100) / 100 + ' KB';
+		return Math.round(size / (1024 * 1024) * 100) / 100 + ' MB';
+	}
+	// 对话框
+	$rootScope.dialog = function(params) {
+		$modal.open({
+			templateUrl : 'frame/dialog/confirm.html',
+			controller : 'FrameConfirmCtrl',
+			backdrop : 'static',
+			size : 's4',
+			keyboard : false,
+			windowClass : 'dialog',
+			// scope : true,
+			resolve : {
+				params : function() {
+					return angular.copy(params);
+				}
+			}
+		});
+	}
+	// 对话框
+	$rootScope.msg = function(params) {
+		$modal.open({
+			templateUrl : 'frame/dialog/alert.html',
+			controller : 'FrameAlertCtrl',
+			backdrop : 'static',
+			size : 's4',
+			keyboard : false,
+			windowClass : 'dialog',
+			// scope : scope,
+			resolve : {
+				params : function() {
+					return angular.copy(params);
+				}
+			}
+		});
+	}
+	// 等待
+	$rootScope.wait = function(params) {
+		$modal.open({
+			templateUrl : 'frame/dialog/wait.html',
+			controller : 'FrameWaitCtrl',
+			backdrop : 'static',
+			size : 's4',
+			keyboard : false,
+			windowClass : 'dialog',
+			// scope : true,
+			resolve : {
+				params : function() {
+					return angular.copy(params);
+				}
+			}
+		});
+	}
+	// 显示等待层
+	$rootScope.showWaitWindow = function(wait) {
+		// 已经打开了等待框
+		if ($rootScope.frame.WaitWindow == true)
+			return;
+		$rootScope.frame.WaitWindow = true;
+		$rootScope.wait({
+			seconds : wait
+		});
+	}
+	// 通用弹出层
+	$rootScope.showModal = function(params) {
+		var js = params.js || '';
+		if (js.length != 0) {
+			$ocLazyLoad.load([ js ]).then(function() {
+				$modal.open(params)
+			});
+		} else
+			$modal.open(params);
+
+	}
+
+	// 通用上传文件框
+	$rootScope.showUpload = function(url, params, fn) {
+		$ocLazyLoad.load([ 'angularFileUpload' ]).then(function() {
+			$modal.open({
+				templateUrl : 'frame/dialog/upload.html',
+				controller : 'FrameUploadCtrl',
+				backdrop : 'static',
+				size : 'lg',
+				keyboard : false,
+				windowClass : 'dialog',
+				// scope : true,
+				resolve : {
+					url : function() {
+						return angular.copy(url);
+					},
+					params : function() {
+						return angular.copy(params);
+					},
+					fn : function() {
+						return angular.copy(fn);
+					},
+				}
+			});
+		});
+
+	}
+	// 通用状态颜色
+	$rootScope.getStatusColor = function(status) {
+		if (status == 'Active')
+			return {
+				color : 'green'
+			};
+		return {
+			color : '#ADADAD'
+		}
+	}
+	// 通用编辑窗口
+	$rootScope.editEntity = function(scope, url, contorl, entity, size, js, keyboard) {
+
+		js = js || (url.substring(0, url.length - 4) + 'js');
+		$rootScope.showModal({
+			templateUrl : url,
+			controller : contorl,
+			keyboard : keyboard == undefined ? true : keyboard,
+			js : js,
+			backdrop : 'static',
+			size : size,
+			scope : scope,
+			resolve : {
+				entity : function() {
+					return angular.copy(entity);
+				}
+			}
+		});
+	}
+	$rootScope.jAjax = function(params) {
+		var aParam = angular.extend({
+			async : false,
+			type : "POST",
+			dataType : "json"
+		}, params)
+		if (params.success) {
+			aParam.success = function(data) {
+				if (data.success == false) {
+					if (data.login == false) {
+						window.location = "logout.html";
+						return;
+					}
+					toaster.error(data.errorMsg);
+					return;
+				}
+				params.success.call(this, data);
+			}
+		}
+		$.ajax(aParam);
+	}
+	$rootScope.shortDateString = function(date) {
+		if (date == undefined)
+			return "";
+		if (angular.isDate(date))
+			date = date.toJSON();
+		if (date.length > 10)
+			return date.substr(0, 10);
+		return date;
+	}
+	$rootScope.shortTimeString = function(date) {
+		if (date == undefined)
+			return "";
+		if (angular.isDate(date))
+			date = date.toJSON();
+		if (date.length > 10)
+			return date.substr(11);
+		return date;
+	}
+	$rootScope.parseShortString = function(date) {
+		if(date == undefined)
+			date = new Date();
+		var str = $rootScope.shortDateString(date);
+		return new Date(Date.parse(str.replace(/-/g, "/")));
+	}
+	$rootScope.parseLongString = function(date) {
+		if (angular.isDate(date))
+			return date;
+		if (date == undefined || date.length != 19)
+			return undefined;
+		return new Date(Date.parse(date.replace(/-/g, "/")));
+	}
+	$rootScope.shortDateOptions = {
+		formatYear : 'yyyy',
+		startingDay : 1,
+		class : 'datepicker',
+	};
+
+	$rootScope.openDatepicker = function(scope, $event, value) {
+		$event.preventDefault();
+		$event.stopPropagation();
+		scope[value] = true;
+	};
+
+	$rootScope.openNewWindow = function(url) {
+		window.open(url);
+	};
+	$rootScope.removeFirstElement = function(array) {
+		var ar = new Array();
+		if (array == undefined)
+			return;
+		for (var i = 1; i < array.length; i++)
+			ar.push(array[i]);
+		return ar;
+	};
+	$rootScope.optrSingleRecord = function(url, key, fn, dialog_msg, toaster_msg) {
+		var ajax = function() {
+			$http({
+				url : url,
+				method : 'post',
+				data : {
+					key : key
+				}
+			}).success(function(data) {
+
+				if (fn)
+					fn.call(this, data);
+				if (toaster_msg == false)
+					return;
+				toaster.success('', toaster_msg || '操作成功');
+			});
+		};
+		if (dialog_msg == undefined || dialog_msg.length == 0) {
+			ajax();
+		} else {
+			// 提交
+			$rootScope.dialog({
+				success : ajax,
+				msg : dialog_msg
+			});
+		}
+	}
+	
+	$rootScope.optrRecord = function(url, entity, fn, dialog_msg, toaster_msg) {
+		var ajax = function() {
+			$http({
+				url : url,
+				method : 'post',
+				data : entity
+			}).success(function(data) {
+
+				if (fn)
+					fn.call(this, data);
+				if (toaster_msg == false)
+					return;
+				toaster.success('', toaster_msg || '操作成功');
+			});
+		};
+		if (dialog_msg == undefined || dialog_msg.length == 0) {
+			ajax();
+		} else {
+			// 提交
+			$rootScope.dialog({
+				success : ajax,
+				msg : dialog_msg
+			});
+		}
+	}
+
+	$rootScope.totalValues = function(array, field) {
+		var value = 0;
+		angular.forEach(array, function(dr) {
+			if (dr[field])
+				value += dr[field];
+		})
+		return value;
+	}
+
+	$scope.logout = function() {
+		$rootScope.dialog({
+			success : function() {
+				$http({
+					url : 'frame/optr/logout.htm',
+				}).success(function() {
+					window.location = "./login/login.jsp"
+				});
+
+			},
+			title : '退出系统提示',
+			msg : '请问您确定要退出系统吗?'
+		});
+	}
+
+	// save settings to local storage
+	if (angular.isDefined($localStorage.settings)) {
+		$scope.frame.settings = $localStorage.settings;
+	} else {
+		$localStorage.settings = $scope.frame.settings;
+	}
+	$scope.$watch('frame.settings', function() {
+		if ($scope.frame.settings.asideDock && $scope.frame.settings.asideFixed) {
+			$scope.frame.settings.headerFixed = true;
+		}
+		$localStorage.settings = $scope.frame.settings;
+	}, true);
+} ]);

+ 32 - 0
WebRoot/admis/js/func.js

@@ -0,0 +1,32 @@
+/******************
+*通用js函数
+*
+*******************/
+'use strict';
+Date.prototype.Format = function(fmt) {
+	var o = {
+	"M+" : this.getMonth() + 1, // 月份
+	"d+" : this.getDate(), // 日
+	"h+" : this.getHours(), // 小时
+	"m+" : this.getMinutes(), // 分
+	"s+" : this.getSeconds(), // 秒
+	"q+" : Math.floor((this.getMonth() + 3) / 3), // 季度
+	"S" : this.getMilliseconds()
+	// 毫秒
+	};
+	if (/(y+)/.test(fmt))
+		fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
+	for ( var k in o)
+		if (new RegExp("(" + k + ")").test(fmt))
+			fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
+	return fmt;
+};
+Date.prototype.toJSON = function() {
+	return this.Format('yyyy-MM-dd hh:mm:ss');
+};
+String.prototype.toDate = function() {
+	if (date == undefined || date.length != 19)
+		return undefined;
+	return new Date(Date.parse(date.replace(/-/g, "/")));
+
+};

文件差異過大導致無法顯示
+ 0 - 0
WebRoot/admis/js/jweixin-1.6.0.js


+ 118 - 0
WebRoot/admis/routes/main/main.html

@@ -0,0 +1,118 @@
+
+<div ng-controller="MainCtrl">
+
+	<div style="padding: 20px; min-height: 800px;">
+		<div class="ui-card" style="margin-top: 0px !important; padding: 20px;">
+			<table>
+				<tr>
+					<td><img ng-src="{{FrameParam.EnrolMaterialWebPath + ArtStdReg.std_image}}" style="width: 80px; height: 99px"></td>
+					<td>
+						<div style="margin-left: 20px; height: 99px">
+							<span class="ui-big-title"> {{ArtStdReg.std_name}} </span> <span class="ui-title"> {{ArtStdReg.province_name}} </span>
+							<div class="ui-title">
+								证件号码:<br> {{ArtStdReg.cert_id}}
+							</div>
+						</div>
+					</td>
+				</tr>
+			</table>
+		</div>
+		
+		<div class="ui-card" style="padding: 20px" ng-if ="showAdmit && ArtStdReg.std_admit_flag=='Active'"  >
+		<div class="ui-big-title" style="margin-top: 0px !important;">考试确认已完成</div>
+				<div class="ui-title" style="margin-top: 0px !important;">你已完成考试确认,请关注我校发布的考试公告,通过本系统打印准考证。</div>
+		</div>
+
+		<div class="ui-card" ng-if="EnrolArray.length>0" style="margin-top: 0px !important; padding: 20px;">
+			<div class="weui-panel__bd">
+				<div ng-repeat="e in EnrolArray"  ng-click="goEnrol(e)">
+					<div class="weui-media-box weui-media-box_text">
+						<h4 class="weui-media-box__title {{e.pay_status=='Active'?'text-success':'text-warning'}}">
+							{{e.aspect_name}}<span ng-if="e.pay_status!='Active'" class="text-danger">(未缴费)</span>
+						</h4>
+						<p class="weui-media-box__desc" ng-if="getParamValue('EnrolShowAspectExamDate') == 'Active' && e.aa_start_date">开考日期:{{shortDateString(e.aa_start_date)}}</p>
+						<p class="weui-media-box__desc">{{e.agent_name}}</p>
+						<p class="weui-media-box__desc" ng-if="false&&e.teach_college && e.teach_college.length>0">{{getParamValue('EnrolAspectTeachCollegeText','教学院区')}}:{{e.teach_college}}</p>
+												<!-- <a href="javascript:void(0);"  class="weui-btn weui-btn_primary" ng-if=" e.pay_status ==='Active' "   ng-click="goVoide(e)">参加考试</a> -->
+					</div>
+					<!-- <a href="javascript:void(0);" class="weui-btn weui-btn_primary" style="width:120px"  ng-click="recordQrcode(e)">考试监控录制</a>
+					<img class="weui-btn qrcode" id="{{e.enrol_id}}"   style="width: 100px; height: 100px;display: none;"> -->
+					<a ng-if="FrameParam['SchoolCode'] === '10908'"  href="javascript:void(0);" class="weui-btn weui-btn_mini  weui-btn_default "  ng-click="goVoide(e)"   >上传作品及视频</a>
+					<!-- <a href="javascript:;" class="weui-btn weui-btn_primary" ng-if="getParamValue('HomeCheck') == 'Active' " ng-click="checkin(e)">检录</a>-->
+					<a href="javascript:void(0);" class="weui-btn weui-btn weui-btn_default "  ng-click="goEnrol(e)">查看详情</a>
+				</div>
+				<br>
+				
+				<a  ng-if="FrameParam['SchoolCode'] === '10908'"   href="javascript:void(0);" class="weui-btn weui-btn weui-btn_default "  ng-click="goDoc(null)"   >安卓及苹果手机压缩视频说明</a>
+				
+				<br>
+				<a href="javascript:;" class="weui-btn weui-btn_primary"  ng-if='false' ng-click="goLocation('std/material')">考生资格审查</a>
+				<!-- <div id="containerDiv" style="text-align:center;display: none;">
+					<img class="weui-btn qrcode" id="stdQrCode" style="margin:0 auto;width:220px;height:220px;display: none;">
+					<span style="font-size: 14;color:red;">使用云易考app扫码</span>
+				</div> -->
+			</div>
+			
+			<div class="button-sp-area">
+				<a href="javascript:;" class="weui-btn weui-btn_primary" ng-if="showAppointment" ng-click="goLocation('appointment/list')">面试预约</a> <a href="javascript:;" class="weui-btn weui-btn_primary"
+					ng-if="showTicket" ng-click="goLocation('ticket/list')">下载准考证</a>
+
+			</div>
+			<!-- 初试二材料办理 
+			<div class="button-sp-area">
+				<a href="javascript:;" class="weui-btn weui-btn_primary" ng-if="ArtStdReg.std_qualified_flag == 'Active'" ng-click="goLocation('reexam/list')">初试二手续办理 </a> 
+			</div>-->
+			<!-- 初试二材料办理 
+			<!-- 复试查询  
+			<div class="button-sp-area">
+			<a href="javascript:;" class="weui-btn weui-btn_primary" ng-if="ArtStdReg.std_province<70 " ng-click="goLocation('reexam/search')">进入复试查询 </a>
+			</div>-->
+			<!-- 复试查询  -->
+			<!-- 中戏复试缴费,先预约 -->
+			<!-- <div class="button-sp-area">
+				<a href="javascript:;" class="weui-btn weui-btn_primary" ng-if="ArtStdReg.std_qualified_flag =='Active'"  ng-click="goLocation('zxappointment/list')">复试手续办理 </a>
+			</div> -->
+			<!-- <div class="button-sp-area">
+				<a href="javascript:;" class="weui-btn weui-btn_primary"  ng-click="goLocation('score/list')">成绩查询 </a>
+			</div> -->
+			<div class="button-sp-area">
+				<a href="javascript:;" class="weui-btn weui-btn_primary"  ng-if="ArtStdReg.std_qualified_flag== 'Active'" ng-click="goLocation('cyfz/lq')">录取查询 </a>
+			</div>
+			<!-- 中戏复试缴费 -->
+			<!-- 合格证下载 -->
+			<a href="" style="display:none" id="ticket_url"></a>
+		<!-- 	<div class="button-sp-area">
+				<a href="javascript:;" class="weui-btn weui-btn_primary" ng-if="ArtStdReg.std_qualified_flag =='Active'"  ng-click="goDownloadCertificate('Download')">下载合格证 </a>
+			</div> -->
+			<!-- 合格证下载 -->
+		</div>
+		<div class="button-sp-area" ng-if="FrameParam.ArtStatus == 'Enrol' && EnrolArray.length < getParamValue('EnrolStdAspectLimit', '10') && enrolTimeFlag === 'Active'">
+					<a href="javascript:;" class="weui-btn weui-btn_primary" ng-click="goLocation('enrol/guide')">专业报考</a>
+		</div>
+	<a ng-if="false&&FrameParam['SchoolCode'] === '10047'" class="weui-btn weui-btn_default "   href='vod/upload.html?id=0'> 上传</a>
+		<div class="ui-card" ng-if="EnrolArray == undefined || EnrolArray.length ==0 " style="padding: 20px">
+			<div ng-if="FrameParam.ArtStatus == 'Config'">
+				<div class="ui-big-title" style="margin-top: 0px !important;">报名未开始</div>
+				<div class="ui-title" style="margin-top: 0px !important;">系统未开放报名,具体开放时间请关注我校官方网站</div>
+			</div>
+
+			<div ng-if="FrameParam.ArtStatus != 'Config' && FrameParam.EnrolStatus == 'InActive'">
+				<div class="ui-big-title" style="margin-top: 0px !important;">报名已结束</div>
+				<div class="ui-title" style="margin-top: 0px !important;">报名已经截止,不再接受考生报考,详情见招生简章。</div>
+			</div>
+		
+			<div ng-if="FrameParam.ArtStatus == 'Enrol' && FrameParam.EnrolStatus == 'Active'">
+				<div class="ui-big-title" style="margin-top: 0px !important;">报名已开放</div>
+				<div class="ui-title" style="margin-top: 0px !important;">报名已开放,你还未进行任何专业的报考,请在报名开放期间尽快完成专业报考和缴费。</div>
+
+				<div class="button-sp-area">
+					<a href="javascript:;" class="weui-btn weui-btn_primary" ng-click="goLocation('enrol/guide')">前往报考</a>
+				</div>
+			</div>
+
+		</div>
+
+	</div>
+
+
+</div>

+ 180 - 0
WebRoot/admis/routes/main/main.js

@@ -0,0 +1,180 @@
+app.controller('MainCtrl', [		'$rootScope',		'$scope','$timeout',		function($rootScope, $scope,$timeout) {
+
+			if(!$rootScope.loginSuccess)
+				return;
+			$scope.showAppointment = false;
+			$scope.showTicket = false;
+			$scope.showAdmit = false;
+			$scope.getEnrolArray = function() {
+				var today = $rootScope.shortDateString(new Date());
+				var now = new Date();
+				
+				$rootScope.ajaxRequest({
+					url : '../enrol/std/enrol/list.htm'
+				}, function(response) {
+					$scope.EnrolArray = response.array;
+
+					for (var i = 0; i < response.array.length; i++) {
+						var enrol = response.array[i];
+						if(enrol.pay_status=='Active') {
+							$scope.showAdmit = true;
+						}
+						if (enrol.pay_status == 'Active' && enrol.subscribe_status == 'Active' && today == $rootScope.shortDateString(enrol.subscribe_start_time)
+								&& $rootScope.parseLongString(enrol.subscribe_start_time) <  now && $rootScope.parseLongString(enrol.subscribe_end_time) > now) {
+							// 判断考点是否开放了预约,只处理当天
+							$scope.showAppointment = true;
+						}
+						
+						if (enrol.pay_status == 'Active' && today == $rootScope.shortDateString(enrol.ticket_start_time)
+								&& $rootScope.parseLongString(enrol.ticket_start_time) < now && $rootScope.parseLongString(enrol.ticket_end_time) > now) {
+							// 判断考点是否开放了预约,只处理当天
+							$scope.showTicket = true;
+						}
+					}
+				});
+			}
+
+			//考生二维码-app扫码登录
+			$scope.getStdQrCode = function() {
+				//alert("11 --" + $scope.EnrolArray.length);
+				if ($scope.EnrolArray && $scope.EnrolArray.length > 0) {
+					$('.qrcode').css('display','none');
+					$('#stdQrCode').attr('src', "../enrol/std/app/qrcode.htm.htm?std_id=" + $scope.EnrolArray[0].std_id);
+					$('#stdQrCode').css('display','');
+					$('#containerDiv').css('display','');
+				}
+				//alert("over --");
+				
+			}
+			
+			$scope.goEnrol = function(e) {
+				$rootScope.goLocation('enrol/info/' + e.enrol_id + '/InActive');
+			}	
+			$scope.goDoc = function(enrol_id) {
+				$rootScope.goLocation('enrol/doc/' + enrol_id );
+			}
+			
+			  //报考是否过期
+		  $scope.enrolTime = function() {
+			  $rootScope.ajaxRequest({
+				  url : '../enrol/agent/expire.htm',
+				  data: {}
+			  }, function(data) {
+				  $scope.enrolTimeFlag = data.entity;
+			  });
+		  }
+			
+			$scope.enrolTime();
+			$scope.getEnrolArray();
+			
+			$timeout(function(){
+				$scope.getStdQrCode();
+			}, 1500);
+
+			$scope.goVoide = function(e){
+				$rootScope.goLocation('exam/voide/' +  e.enrol_id+'/false');
+				
+//				$rootScope.ajaxRequest({
+//					url : '../enrol/std/enrol/find.htm',
+//					data : {
+//						enrol_id : e.enrol_id,
+//						aspect_batch : 1
+//					}
+//				}, function(response) {
+//					var voide = response.map.Voide;
+//					if(voide.note_date==null){
+//						$rootScope.goLocation('exam/voide/' +  e.enrol_id+'/false');
+//						return;
+//					}
+//						
+//					var d = new Date(voide.note_date.replace(/\-/g, "/"));
+//					if (d<new Date()){
+//						$rootScope.goLocation('exam/voide/' +  e.enrol_id+'/false');
+//					}else{
+//						$.alert('入场时间未到,请在'+voide.note_date+'后入场!');
+//					}
+//				});
+			}
+			
+			
+			$scope.recordVoide = function(e){
+				$rootScope.ajaxRequest({
+					url : '../enrol/std/video/exam/record.htm',
+					data : {
+						cert_id :$rootScope.ArtStdReg.cert_id,
+						ly_group_id : 11,
+						enrol_id:e.enrol_id
+					}
+				}, function(data) {
+					if(data.success == true){
+						window.location.href = data.entity;
+						return;
+					}
+				});
+			}
+			
+			$scope.recordQrcode = function(e){
+				$scope.videoRecordLog();
+				$rootScope.ajaxRequest({
+					url : '../enrol/conf/topic/find.htm',
+					data: {
+						aspect_id : e.aspect_id
+					}
+				}, function(data) {
+					if(data && data.entity.voide_start_date && data.entity.voide_end_date) {
+						var start_date = new Date(data.entity.voide_start_date.replace(/\-/g, "/"));
+						var end_date = new Date(data.entity.voide_end_date.replace(/\-/g, "/"));
+						var now_date = new Date();
+						if (now_date >= start_date && now_date <= end_date){
+							$('.qrcode').css('display','none')
+							$('#'+e.enrol_id).attr('src', "../enrol/std/video/qrcode.htm?cert_id="+$rootScope.ArtStdReg.cert_id+"&ly_group_id=11&enrol_id="+e.enrol_id);
+							$('#'+e.enrol_id).css('display','')
+						} else {
+							$.alert('录制时间未到,请在'+data.entity.voide_start_date+'后录制!');
+						}
+					} else {
+						$.alert('录制时间未到!');
+					}
+				});
+				
+			}
+			//录制视频日志
+			$scope.videoRecordLog = function() {
+				$rootScope.ajaxRequest({
+					url : '../enrol/voide/log.htm',
+					data: {}
+				}, function(data) {
+				});
+			}
+		
+			//首页检录
+		  $scope.checkin = function(e){
+			  $rootScope.ajaxRequest({
+					url: '../exam/online/checkin/inqueue.htm',
+					data:{agent_id:e.agent_id, aspect_id:e.aspect_id, std_id:e.std_id}
+			}, function(response) {
+				$rootScope.goLocation('exam/wait/'+e.agent_id+"/"+e.aspect_id+"/"+e.enrol_id);
+			});
+		    }
+		  //考试须知
+		  $scope.goNotice = function(e) {
+			  //美术类考试须知
+			  if(e.without_exam_apply == 'Active' || e.without_exam_apply == 'InActive') {
+				  $rootScope.goLocation('zxnotice/info/2');
+			  } else { //其他类考试须知
+				  $rootScope.goLocation('zxnotice/info/1');
+			  }
+		  }
+		  
+		  //下载合格单
+		  $scope.goDownloadCertificate = function(download_type) {
+					var url =$rootScope.FrameParam.EnrolMaterialWebPath + $rootScope.ArtStdReg.std_score_file;
+					if (download_type == 'Download') {
+						$('#ticket_url').attr('href', url);
+						document.getElementById("ticket_url").click();
+					} else {
+					}
+			};
+		  
+			
+		} ])

+ 171 - 0
WebRoot/charts/visualizedcharts/css/numbercss.css

@@ -0,0 +1,171 @@
+/*  The Digits  */
+		.digits{
+			/*width:220px;*/
+		}
+        .light{
+            /*width: 220px;*/
+            height: 60px;
+            text-align: center;
+			float:left;
+        }
+        .digits div{
+            text-align:left;
+            position:relative;
+            width: 28px;
+            height:50px;
+            display:inline-block;
+            margin:0 4px;
+        }
+        .light .digits div span {
+            background-color: #f0de78;
+            border-color: #f0de78;
+        }
+ 
+        .digits div span{
+            opacity:0;
+            position:absolute;
+            -webkit-transition:0.25s;
+            -moz-transition:0.25s;
+            transition:0.25s;
+        }
+        .digits div span:before,
+        .digits div span:after{
+            content:'';
+            position:absolute;
+            width:0;
+            height:0;
+            border:5px solid transparent;
+        }
+ 
+        .digits .d1{            height:5px;width:16px;top:0;left:6px;}
+        .digits .d1:before{ border-width:0 5px 5px 0;border-right-color:inherit;left:-5px;}
+        .digits .d1:after{  border-width:0 0 5px 5px;border-left-color:inherit;right:-5px;}
+ 
+        .digits .d2{            height:5px;width:16px;top:24px;left:6px;}
+        .digits .d2:before{ border-width:3px 4px 2px;border-right-color:inherit;left:-8px;}
+        .digits .d2:after{  border-width:3px 4px 2px;border-left-color:inherit;right:-8px;}
+ 
+        .digits .d3{            height:5px;width:16px;top:48px;left:6px;}
+        .digits .d3:before{ border-width:5px 5px 0 0;border-right-color:inherit;left:-5px;}
+        .digits .d3:after{  border-width:5px 0 0 5px;border-left-color:inherit;right:-5px;}
+ 
+        .digits .d4{            width:5px;height:14px;top:7px;left:0;}
+        .digits .d4:before{ border-width:0 5px 5px 0;border-bottom-color:inherit;top:-5px;}
+        .digits .d4:after{  border-width:0 0 5px 5px;border-left-color:inherit;bottom:-5px;}
+ 
+        .digits .d5{            width:5px;height:14px;top:7px;right:0;}
+        .digits .d5:before{ border-width:0 0 5px 5px;border-bottom-color:inherit;top:-5px;}
+        .digits .d5:after{  border-width:5px 0 0 5px;border-top-color:inherit;bottom:-5px;}
+ 
+        .digits .d6{            width:5px;height:14px;top:32px;left:0;}
+        .digits .d6:before{ border-width:0 5px 5px 0;border-bottom-color:inherit;top:-5px;}
+        .digits .d6:after{  border-width:0 0 5px 5px;border-left-color:inherit;bottom:-5px;}
+ 
+        .digits .d7{            width:5px;height:14px;top:32px;right:0;}
+        .digits .d7:before{ border-width:0 0 5px 5px;border-bottom-color:inherit;top:-5px;}
+        .digits .d7:after{  border-width:5px 0 0 5px;border-top-color:inherit;bottom:-5px;}
+ 
+ 
+        /* 1 */
+        .digits div.one .d5,
+        .digits div.one .d7{
+            opacity:1;
+        }
+ 
+        /* 2 */
+        .digits div.two .d1,
+        .digits div.two .d5,
+        .digits div.two .d2,
+        .digits div.two .d6,
+        .digits div.two .d3{
+            opacity:1;
+        }
+ 
+        /* 3 */
+        .digits div.three .d1,
+        .digits div.three .d5,
+        .digits div.three .d2,
+        .digits div.three .d7,
+        .digits div.three .d3{
+            opacity:1;
+        }
+ 
+        /* 4 */
+        .digits div.four .d5,
+        .digits div.four .d2,
+        .digits div.four .d4,
+        .digits div.four .d7{
+            opacity:1;
+        }
+ 
+        /* 5 */
+        .digits div.five .d1,
+        .digits div.five .d2,
+        .digits div.five .d4,
+        .digits div.five .d3,
+        .digits div.five .d7{
+            opacity:1;
+        }
+ 
+        /* 6 */
+        .digits div.six .d1,
+        .digits div.six .d2,
+        .digits div.six .d4,
+        .digits div.six .d3,
+        .digits div.six .d6,
+        .digits div.six .d7{
+            opacity:1;
+        }
+ 
+ 
+        /* 7 */
+        .digits div.seven .d1,
+        .digits div.seven .d5,
+        .digits div.seven .d7{
+            opacity:1;
+        }
+ 
+        /* 8 */
+        .digits div.eight .d1,
+        .digits div.eight .d2,
+        .digits div.eight .d3,
+        .digits div.eight .d4,
+        .digits div.eight .d5,
+        .digits div.eight .d6,
+        .digits div.eight .d7{
+            opacity:1;
+        }
+ 
+        /* 9 */
+        .digits div.nine .d1,
+        .digits div.nine .d2,
+        .digits div.nine .d3,
+        .digits div.nine .d4,
+        .digits div.nine .d5,
+        .digits div.nine .d7{
+            opacity:1;
+        }
+ 
+        /* 0 */
+        .digits div.zero .d1,
+        .digits div.zero .d3,
+        .digits div.zero .d4,
+        .digits div.zero .d5,
+        .digits div.zero .d6,
+        .digits div.zero .d7{
+            opacity:1;
+        }
+ 
+        /* dot */
+        .digits div.dot{
+            width: 5px;
+        }
+        .dot:after{
+            width: 5px;
+            height: 5px;
+            content: '';
+            position: absolute;
+            left: 0;
+            bottom: 0px;
+            background-color: #f0de78;
+        }

+ 28 - 0
WebRoot/charts/visualizedcharts/css/visualizedCharts.css

@@ -0,0 +1,28 @@
+.contains{background:#000a2d;height:100%;width:100%;padding:0;margin:0;}
+.header{height:80px;background-size: cover;background:#09143c url('../images/headerbg.png');background-repeat:repeat-y;background-position:center;}
+.header .title{display:flex;justify-content:center;color:#fff;font-weight:bold;font-size:0.6rem;align-items: center;height: 100%;}
+.title{display:flex;justify-content:center;color:#fff;font-weight:bold;font-size:0.5rem;align-items: center;}
+.time{margin-right: 10px;font-size: 0.3rem;margin-top: -0.8rem;color: #fff;float: right;}
+.time .label{font-weight:300}
+.container{height:calc(100vh - 80px);width:100%;}
+.item_left,.item_center,.item_right{height:100%; padding-right: 10px;padding-left: 10px;display: flex;}
+.item_left_content,.item_center_content,.item_right_content{display: flex;flex-direction: column;align-content: stretch;justify-content: stretch;width: 100%;}
+.industryChartDiv,.changeChartDiv,.ageChartDiv,.powerChartDiv,.playChatDiv,.areaChartDiv{flex:1;margin: 10px 0px;}
+.totalInfoDiv{margin: 10px 0px;background: #0a1446;padding: 10px;}
+.moveMapDiv1{position: absolute;font-size: 56.6px;width: 8.03rem; z-index: 2;animation: myfirst2 15s infinite linear;overflow:hidden;}
+.moveMapDiv{flex:4;margin: 10px 0px;display: flex;justify-content: center;justify-content: center;align-items: center;}
+.industryChartDiv,.powerChartDiv,.changeChartDiv,.ageChartDiv,.playChatDiv,.areaChartDiv{background:#08113e url('../images/partbg1.png');background-repeat: repeat;
+    background-position: center;}
+.border{border: 2px solid #02a6b5;width: 100%;height: 100%;position: relative;margin: auto;}
+#industryBar,#changeLine,#agePie,#skillAcquisitionBar,#playCounts,#roseChart,#moveMapChart{height:100%;width:100%;}
+@keyframes myfirst2
+{
+from {transform: rotate(0deg);}
+to {transform: rotate(359deg);}
+}
+
+@keyframes myfirst
+{
+from {transform: rotate(0deg);}
+to {transform: rotate(-359deg);}
+}

二進制
WebRoot/charts/visualizedcharts/images/headerbg.png


二進制
WebRoot/charts/visualizedcharts/images/partbg1.png


+ 63 - 0
WebRoot/charts/visualizedcharts/images/test.html

@@ -0,0 +1,63 @@
+<html>
+<head>
+<style type="text/css">
+    <style>
+* {
+    padding:0;
+    margin:0;
+}
+.pkbox {
+    width:155px;
+    height:219px;
+    position:relative;
+    margin:300px auto;
+}
+.pkbox > img {
+    width:100%;
+    height:100%;
+    position:absolute;
+    left:0;
+    top:0;
+    /*添加过渡*/
+            transition:transform 2s;
+    /*设置旋转轴心*/
+            transform-origin:right top;
+}
+/*添加鼠标上移的效果*/
+        .pkbox:hover >img:nth-of-type(1) {
+    transform:rotate(60deg);
+}
+.pkbox:hover >img:nth-of-type(2) {
+    transform:rotate(120deg);
+}
+.pkbox:hover >img:nth-of-type(3) {
+    transform:rotate(180deg);
+}
+.pkbox:hover >img:nth-of-type(4) {
+    transform:rotate(240deg);
+}
+.pkbox:hover >img:nth-of-type(5) {
+    transform:rotate(300deg);
+}
+.pkbox:hover >img:nth-of-type(6) {
+    transform:rotate(360deg);
+}
+
+
+
+        </style>
+</style>
+</head>
+
+<body>
+
+<div class="pkbox">
+            <img src="http://www.jq22.com/img/cs/300x500-1.png" alt="">
+            <img src="http://www.jq22.com/img/cs/300x500-2.png" alt="">
+            <img src="http://www.jq22.com/img/cs/300x500-3.png" alt="">
+            <img src="http://www.jq22.com/img/cs/300x500-4.png" alt="">
+            <img src="http://www.jq22.com/img/cs/300x500-5.png" alt="">
+            <img src="http://www.jq22.com/img/cs/300x500-6.png" alt="">
+</div>
+</body>
+</html>

文件差異過大導致無法顯示
+ 25 - 0
WebRoot/charts/visualizedcharts/js/china.js


文件差異過大導致無法顯示
+ 21 - 0
WebRoot/charts/visualizedcharts/js/echarts.min.js


+ 84 - 0
WebRoot/charts/visualizedcharts/js/jquery.numscroll.js

@@ -0,0 +1,84 @@
+/*!
+ * jquery.numscroll.js -- 数字滚动累加动画插件  (Digital rolling cumulative animation)
+ * version 1.0.0
+ * 2018-09-22
+ * author: KevinTseng < 921435247@qq.com@qq.com >
+ * 文档:  https://github.com/chaorenzeng/jquery.numscroll.js.git
+ * QQ交流群: 739574382
+ */
+
+(function($) {
+	
+	function isInt(num) {
+		//作用:是否为整数
+		//返回:true是 false否
+		var res = false;
+		try {
+			if(String(num).indexOf(".") == -1 && String(num).indexOf(",") == -1) {
+				res = parseInt(num) % 1 === 0 ? true : false;
+			}
+		} catch(e) {
+			res = false;
+		}
+		return res;
+	}
+
+	function isFloat(num) {
+		//作用:是否为小数
+		//返回:小数位数(-1不是小数)
+		var res = -1;
+		try {
+			if(String(num).indexOf(".") != -1) {
+				var index = String(num).indexOf(".") + 1; //获取小数点的位置
+				var count = String(num).length - index; //获取小数点后的个数
+				if(index > 0) {
+					res = count;
+				}
+			}
+		} catch(e) {
+			res = -1;
+		}
+		return res;
+	}
+
+	$.fn.numScroll = function(options) {
+		
+		var settings = $.extend({
+			'time': 1500,
+			'delay': 0
+		}, options);
+		
+		return this.each(function() {
+			var $this = $(this);
+			var $settings = settings;
+			
+			var num = $this.attr("data-num") || $this.text(); //实际值
+			var temp = 0; //初始值
+			$this.text(temp);
+			var numIsInt = isInt(num);
+			var numIsFloat = isFloat(num);
+			var step = (num / $settings.time) * 10; //步长
+			
+			setTimeout(function() {
+				var numScroll = setInterval(function() {
+					if(numIsInt) {
+						$this.text(Math.floor(temp));
+					} else if(numIsFloat != -1) {
+						$this.text(temp.toFixed(numIsFloat));
+					} else {
+						$this.text(num);
+						clearInterval(numScroll);
+						return;
+					}
+					temp += step;
+					if(temp > num) {
+						$this.text(num);
+						clearInterval(numScroll);
+					}
+				}, 1);
+			}, $settings.delay);
+			
+		});
+	};
+
+})(jQuery);

+ 952 - 0
WebRoot/charts/visualizedcharts/js/visualizedCharts.js

@@ -0,0 +1,952 @@
+//定义图表对象
+var myChart1 = null;
+var myChart2 = null;
+var myChart3 = null;
+var myChart4 = null;
+var myChart5 = null;
+var myChart6 = null;
+var myChart7 = null;
+var myChart8 = null;
+$(function() {
+
+	function load() {
+		$.ajax({
+			url: "c1.htm", async: false, dataType: 'json', success: function(result) {
+				industryBar(result.array);
+			}
+		});
+
+		$.ajax({
+			url: "c2.htm", async: false, dataType: 'json', success: function(result) {
+				changeChart(result.array);
+			}
+		});
+		$.ajax({
+			url: "c3.htm", async: false, dataType: 'json', success: function(result) {
+				skillAcquisitionChart(result.array);
+			}
+		});
+
+
+//		$.ajax({
+//			url: "c4.htm", async: false, dataType: 'json', success: function(result) {
+//				pieChart(result.array);
+//			}
+//		});
+
+		var currentnum = 0; allnum = 0;
+		$.ajax({
+			url: "allnum.htm", async: false, dataType: 'json', success: function(result) {
+				allnum = result.array[0].allnum;
+				currentnum = result.array[0].currentnum;
+			}
+		});
+		clocknum(currentnum, 'requiredPeoples');
+		clocknum(allnum, 'supplyPeoples');
+	}
+	load();
+
+	setInterval(function() {
+		load();
+	}, 10000);
+
+
+	//roseChart();
+
+
+
+	/* $(".digits").numScroll({
+			time:5000
+	 });*/
+
+});
+/**
+*	柱形图
+*/
+function industryBar(data) {
+	let xAxisData = data.map(v => v.college);
+	let yAxisData = data.map(v => v.currentnum);
+
+	myChart1 = echarts.init(document.getElementById('industryBar'));	// 基于准备好的dom,初始化echarts实例
+	var option = {
+		title: {
+			text: '院系报到数据',
+			left: 'center',
+			textStyle: { color: '#fff' },
+			top: '4%',
+		},
+		tooltip: {
+			trigger: 'axis',
+			axisPointer: {            // 坐标轴指示器,坐标轴触发有效
+				type: 'line'        // 默认为直线,可选为:'line' | 'shadow'
+			}
+		},
+		grid: {
+			left: '2%',
+			right: '4%',
+			top: '12%',
+			bottom: '3%',
+			containLabel: true
+		},
+		xAxis: [
+			{
+				type: 'category',
+				data: xAxisData,
+				axisTick: {
+					alignWithLabel: false
+				},
+				axisLabel: {		//x轴文字颜色
+					color: '#fff',
+					show: true,
+					formatter: function(value, index) {
+						return value.split('').join('\n');
+					}
+				},
+				axisLine: {		    //x轴线的颜色
+					lineStyle: {
+						color: ['#fff'],
+						width: 1,
+						type: 'solid',
+						opacity: 0.1
+					}
+				}
+			}
+		],
+		yAxis: [
+			{
+				type: 'value',
+				axisLabel: {		//y轴文字颜色
+					color: '#fff'
+				},
+				axisLine: {		    //y轴线的颜色
+					lineStyle: {
+						color: ['#fff'],
+						width: 1,
+						type: 'solid',
+						opacity: 1
+					}
+				},
+				splitLine: {        //网格样式
+					show: true,
+					lineStyle: {
+						color: 'rgba(255,255,255,0.3)',
+						width: 1,
+						type: 'dashed'
+					}
+				}
+			}
+		],
+		series: [
+			{
+				//				name: '直接访问',
+				type: 'bar',
+				barWidth: '50%',
+				itemStyle: {
+					normal: {
+						color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+							offset: 0,
+							color: '#248ff7'
+						}, {
+							offset: 1,
+							color: '#6851f1'
+						}]),
+						barBorderRadius: 11,
+					}
+				},
+				data: yAxisData
+			}
+		]
+	};
+	myChart1.setOption(option, true);	    // 使用刚指定的配置项和数据显示图表。
+	$(document).ready(function() {
+		myChart1.resize();
+	})
+	window.addEventListener("resize", function() {
+		myChart1.resize();
+	});
+}
+
+	var app = {
+		currentIndex: -1,
+
+	};
+	setInterval(function() {
+		var dataLen = 15;
+
+		// 取消之前高亮的图形
+		myChart1.dispatchAction({
+			type: 'downplay',
+			seriesIndex: 0,
+			dataIndex: app.currentIndex
+		});
+		app.currentIndex = (app.currentIndex + 1) % dataLen;
+		//console.log(app.currentIndex);
+		// 高亮当前图形
+		myChart1.dispatchAction({
+			type: 'highlight',
+			seriesIndex: 0,
+			dataIndex: app.currentIndex,
+		});
+		// 显示 tooltip
+		myChart1.dispatchAction({
+			type: 'showTip',
+			seriesIndex: 0,
+			dataIndex: app.currentIndex
+		});
+	}, 1000);
+
+
+/**
+*折线图
+*/
+function changeChart(data) {
+	let x = data.map(v => v.name);
+	let d1 = data.map(v => v.d1);
+	let d2 = data.map(v => v.d2);
+
+	myChart2 = echarts.init(document.getElementById('changeLine'));
+	var option = {
+		title: {
+			text: '报到接种疫苗',
+			left: 'center',
+			show:false,
+			textStyle: { color: '#fff' },
+			top: '4%',
+		},
+		grid: {
+			left: '2%',
+			right: '4%',
+			top: '8%',
+			bottom: '3%',
+			containLabel: true
+		},
+		legend: {
+			data: ['已报到', '已接种'],
+			textStyle: { color: '#fff' },
+			right: '4%',
+			top: '3%',
+			bottom: '5%',
+		},
+		xAxis: {
+			type: 'category',
+			data: x,
+			axisLabel: {		//x轴文字颜色
+				color: '#fff',
+				interval: 0,
+				// rotate:"45"
+			},
+			axisLine: {		    //x轴线的颜色
+				lineStyle: {
+					color: ['#fff'],
+					width: 1,
+					type: 'solid',
+					opacity: 0.1
+				}
+			}
+		},
+		yAxis: {
+			type: 'value',
+			axisLabel: {		//x轴文字颜色
+				color: '#fff'
+			},
+			axisLine: {		    //x轴线的颜色
+				lineStyle: {
+					color: ['#fff'],
+					width: 1,
+					type: 'solid',
+					opacity: 0.1
+				}
+			},
+			splitLine: {        //网格样式
+				show: true,
+				lineStyle: {
+					color: 'rgba(255,255,255,0.1)',
+					width: 1,
+					type: 'dashed'
+				}
+			}
+		},
+		color: ['#01dee1', "#ed3f35"],        //曲线颜色
+		series: [{
+			name: '已报到',
+			type: 'bar',
+			data: d1,
+			label: {
+				show: true
+			},
+			itemStyle: {
+				normal: {
+					color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+						offset: 0,
+						color: '#0090FF'
+					}, {
+						offset: 1,
+						color: '#0090FF'
+					}]),
+					barBorderRadius: 11,
+				}
+			}
+		}, {
+			name: '已接种',
+			type: 'bar',
+			data: d2,
+			label: {
+				show: true
+			},
+			itemStyle: {
+				normal: {
+					color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+						offset: 0,
+						color: '#ff3300'
+					}, {
+						offset: 1,
+						color: '#ff3333'
+					}]),
+					barBorderRadius: 11,
+				}
+			}
+		}]
+	};
+	myChart2.setOption(option, true);	    // 使用刚指定的配置项和数据显示图表。
+	$(document).ready(function() {
+		myChart2.resize();
+	})
+	window.addEventListener("resize", function() {
+		myChart2.resize();
+	});
+}
+/**
+*饼形图 
+*/
+function ageTrendPie() {
+	myChart3 = echarts.init(document.getElementById('agePie'));
+	var option = {
+		title: {
+			text: '年龄分析',
+			left: 'center',
+			textStyle: { color: '#fff' },
+			top: '4%',
+		},
+		tooltip: {
+			trigger: 'item',
+			formatter: '{a} <br/>{b}: {c} ({d}%)'
+		},
+		grid: {
+			left: '3%',
+			right: '4%',
+			top: '35%',
+			bottom: '3%'
+		},
+		legend: {
+			orient: 'vertical',
+			left: 10,
+			data: ['16岁', '17岁', '18岁', '19岁', '20岁', '21岁以上'],
+			textStyle: {
+				color: '#fff'
+			}
+		},
+		series: [
+			{
+				name: '年龄占比',
+				type: 'pie',
+				radius: ['50%', '70%'],
+				avoidLabelOverlap: true,
+				label: {
+					show: false,
+					position: 'center'
+				},
+				emphasis: {
+					label: {
+						show: true,
+						fontSize: '30',
+						fontWeight: 'bold'
+					}
+				},
+				labelLine: {
+					show: false
+				},
+				itemStyle: {
+					normal: {
+						label: {
+							show: true,
+							formatter: '{b} \n ({d}%)'
+						}
+					}
+				},
+				color: ['#10606b', '#0696ab', '#06a0ab', '#86c9f4', '#4da8ec', '#3a91d2', '#005fa6', '#315f97'],
+				data: [
+					{ value: 999, name: '16岁' },
+					{ value: 2000, name: '17岁' },
+					{ value: 1548, name: '18岁' },
+					{ value: 1548, name: '19岁' },
+					{ value: 1548, name: '20岁' },
+					{ value: 1548, name: '21岁以上' }
+				]
+			}
+		]
+	};
+	myChart3.setOption(option, true);	    // 使用刚指定的配置项和数据显示图表。
+	$(document).ready(function() {
+		myChart3.resize();
+	})
+	window.addEventListener("resize", function() {
+		myChart3.resize();
+	});
+}
+
+/**
+*柱形图
+*/
+function skillAcquisitionChart(cost) {
+	//var cost = [1679, 78, 60, 34, 70,80,90]//本期比上期(大于1按1处理)
+	var totalCost = [1679, 1679, 1679, 1679, "1679", "1679", "1679"]//比例综合
+	var visits = [1679, 1679, 1679, 1679, "1679", "1679", "1679"]//本期占总的百分比*100
+	var grade = ['招生处', '医务室', '保卫处', '学工部', '组织部', '公寓', '院系办公室'];
+	var myColor = ['#21BF57', '#56D0E3', '#1089E7', '#F8B448', '#F57474',];
+	var data = {
+		grade: grade,
+		cost: cost,
+		totalCost: totalCost,
+		visits: visits
+	};
+	var option = {
+		title: {
+			top: '4%',
+			left: 'center',
+			text: '节点报到数据',
+			textStyle: {
+				align: 'center',
+				color: '#fff'
+			}
+		},
+		grid: {
+			left: '50',
+			right: '35',
+			bottom: '20'
+		},
+		xAxis: {
+			show: false,
+		},
+		yAxis: {
+			type: 'category',
+			inverse: true,//倒
+			axisLabel: {
+				margin: 20,
+				show: true,
+				color: '#4DCEF8',
+				fontSize: 12,
+
+				formatter: function(value, index) {
+					return  value.split('').join('\n');
+				}
+			},
+			axisTick: {
+				show: false,
+			},
+			axisLine: {
+				show: false,
+			},
+			data: data.grade
+		},
+		series: [{//外层边框
+			type: 'bar',
+			barGap: '-65%',
+			label: {
+				normal: {
+					show: true,
+					position: 'right',
+					color: '#fff',
+					fontSize: 14,
+					formatter:
+						function(param) {
+							return data.visits[param.dataIndex];
+						},
+				}
+			},
+			barWidth: '50%',
+			itemStyle: {
+				normal: {
+					borderColor: '#4DCEF8',
+					borderWidth: 2,
+					barBorderRadius: 12,
+					color: 'rgba(102, 102, 102,0)'
+				},
+			},
+			z: 1,
+			data: data.totalCost,
+			// data: da
+		}, {//柱形图占比
+			type: 'bar',
+			barGap: '-85%',
+			barWidth: '35%',
+			itemStyle: {
+				normal: {
+					barBorderRadius: 14,
+					color: function(params) {
+						var num = myColor.length;
+						return myColor[params.dataIndex % num]
+					},
+				}
+			},
+			max: 1,
+			label: {
+				normal: {
+					show: true,
+					position: 'inside',
+					formatter: '{c}'
+				}
+			},
+			labelLine: {
+				show: true,
+			},
+			z: 2,
+			data: data.cost,
+		}]
+	}
+	myChart4 = echarts.init(document.getElementById('skillAcquisitionBar'));
+	myChart4.setOption(option, true);
+	$(document).ready(function() {
+		myChart4.resize();
+	})
+	window.addEventListener("resize", function() {
+		myChart4.resize();
+	});
+}
+
+/**
+*折线图 
+*/
+function playCounts(echartData) {
+	let bgColor = "#fff";
+	let color = [
+		"#0090FF",
+		"#36CE9E",
+		"#FFC005",
+		"#FF515A",
+		"#8B5CFF",
+		"#00CA69"
+	];
+
+
+	let xAxisData = echartData.map(v => v.name);
+	//  ["1", "2", "3", "4", "5", "6", "7", "8"]
+	let yAxisData1 = echartData.map(v => v.value1);
+	// [100, 138, 350, 173, 180, 150, 180, 230]
+	let yAxisData2 = echartData.map(v => v.value2);
+	// [233, 233, 200, 180, 199, 233, 210, 180]
+	let yAxisData3 = [233, 233, 200, 180, 199, 233, 210, 180];
+	const hexToRgba = (hex, opacity) => {
+		let rgbaColor = "";
+		let reg = /^#[\da-f]{6}$/i;
+		if (reg.test(hex)) {
+			rgbaColor = `rgba(${parseInt("0x" + hex.slice(1, 3))},${parseInt(
+				"0x" + hex.slice(3, 5)
+			)},${parseInt("0x" + hex.slice(5, 7))},${opacity})`;
+		}
+		return rgbaColor;
+	}
+	/////////////////////
+	var option = {
+		title: {
+			top: '4%',
+			left: 'center',
+			text: '本硕博 ',
+			textStyle: {
+				align: 'center',
+				color: '#fff'
+			}
+		},
+		legend: {
+			right: 10,
+			top: 10,
+			textStyle: {
+				color: "#fff"
+			}
+		},
+		tooltip: {
+			trigger: "axis",
+			formatter: function(params) {
+				let html = '';
+				params.forEach(v => {
+					console.log(v)
+					html += `<div style="color: #666;font-size: 14px;line-height: 24px">
+					<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${color[v.componentIndex]};"></span>
+					${v.seriesName}.${v.name}
+					<span style="color:${color[v.componentIndex]};font-weight:700;font-size: 18px">${v.value}</span>
+					`;
+				})
+				return html
+			},
+			extraCssText: 'border-radius: 0;box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);color: #333;',
+			axisPointer: {
+				type: 'shadow',
+				shadowStyle: {
+					color: '#ffffff',
+					shadowColor: 'rgba(225,225,225,1)',
+					shadowBlur: 5
+				}
+			}
+		},
+		grid: {
+			top: 70,
+			bottom: 10,
+			containLabel: true
+		},
+		xAxis: [{
+			type: "category",
+			boundaryGap: false,
+			axisLabel: {
+				formatter: '{value}',
+				textStyle: {
+					color: "#fff",
+					opacity: 1
+				}
+			},
+			axisLine: {
+				lineStyle: {
+					color: "#D9D9D9"
+				}
+			},
+			data: xAxisData
+		}],
+		yAxis: [{
+			type: "value",
+			//name: '单位:人 ',
+			axisLabel: {
+				textStyle: {
+					color: "#fff"
+				}
+			},
+			nameTextStyle: {
+				color: "#fff",
+				fontSize: 12,
+				lineHeight: 40
+			},
+			splitLine: {        //网格样式
+				show: true,
+				lineStyle: {
+					color: 'rgba(255,255,255,0.1)',
+					width: 1,
+					type: 'dashed'
+				}
+			},
+
+			axisLine: {
+				show: false
+			},
+			axisTick: {
+				show: false
+			}
+		}],
+		series: [{
+			name: "硕士",
+			type: "line",
+			smooth: true,
+			// showSymbol: false,/
+			symbolSize: 8,
+			zlevel: 3,
+			lineStyle: {
+				normal: {
+					color: color[0],
+					shadowBlur: 3,
+					shadowColor: hexToRgba(color[0], 0.5),
+					shadowOffsetY: 8
+				}
+			},
+			areaStyle: {
+				normal: {
+					color: new echarts.graphic.LinearGradient(
+						0,
+						0,
+						0,
+						1,
+						[{
+							offset: 0,
+							color: hexToRgba(color[0], 0.3)
+						},
+						{
+							offset: 1,
+							color: hexToRgba(color[0], 0.1)
+						}
+						],
+						false
+					),
+					shadowColor: hexToRgba(color[0], 0.1),
+					shadowBlur: 10
+				}
+			},
+			data: yAxisData1
+		}, {
+			name: "博士",
+			type: "line",
+			smooth: true,
+			// showSymbol: false,
+			symbolSize: 8,
+			zlevel: 3,
+			lineStyle: {
+				normal: {
+					color: color[1],
+					shadowBlur: 3,
+					shadowColor: hexToRgba(color[1], 0.5),
+					shadowOffsetY: 8
+				}
+			},
+			areaStyle: {
+				normal: {
+					color: new echarts.graphic.LinearGradient(
+						0,
+						0,
+						0,
+						1,
+						[{
+							offset: 0,
+							color: hexToRgba(color[1], 0.3)
+						},
+						{
+							offset: 1,
+							color: hexToRgba(color[1], 0.1)
+						}
+						],
+						false
+					),
+					shadowColor: hexToRgba(color[1], 0.1),
+					shadowBlur: 10
+				}
+			},
+			data: yAxisData2
+		}, {
+			name: "本科",
+			type: "line",
+			smooth: true,
+			// showSymbol: false,
+			symbolSize: 8,
+			zlevel: 3,
+			lineStyle: {
+				normal: {
+					color: color[1],
+					shadowBlur: 3,
+					shadowColor: hexToRgba(color[2], 0.5),
+					shadowOffsetY: 8
+				}
+			},
+			areaStyle: {
+				normal: {
+					color: new echarts.graphic.LinearGradient(
+						0,
+						0,
+						0,
+						1,
+						[{
+							offset: 0,
+							color: hexToRgba(color[2], 0.3)
+						},
+						{
+							offset: 1,
+							color: hexToRgba(color[2], 0.1)
+						}
+						],
+						false
+					),
+					shadowColor: hexToRgba(color[2], 0.1),
+					shadowBlur: 10
+				}
+			},
+			data: yAxisData3
+		}
+
+		]
+	};
+	myChart5 = echarts.init(document.getElementById('playCounts'));
+	myChart5.setOption(option, true);
+	myChart5.on("click", function (params) {
+		console.log(params.name);
+		
+	});
+	$(document).ready(function() {
+		myChart5.resize();
+	})
+	window.addEventListener("resize", function() {
+		myChart5.resize();
+	});
+}
+
+/**
+*饼图
+*/
+function pieChart(data) {
+	let legend = data.map(v => v.name);
+	var option = {
+		color: ['#6328af', '#0090FF', '#36CE9E', '#3a91d2', '#06a0ab', '#86c9f4'],
+		title: {
+			text: '本硕博',
+			left: 'center',
+			top: '4%',
+			textStyle: {
+				color: '#fff'
+			}
+		},
+		tooltip: {
+			trigger: 'item',
+			formatter: '{a} <br/>{b} : {c} ({d}%)'
+		},
+		legend: {
+			left: 'center',
+			top: 'bottom',
+			show: false,
+			data: legend,
+			textStyle: {
+				color: '#fff'
+			}
+		},
+		toolbox: {
+			show: true
+		},
+		series: [
+			{
+				name: '半径模式',
+				type: 'pie',
+				radius: [50, 100],
+				center: ['50%', '50%'],
+				label: {
+					show: true
+				},
+				emphasis: {
+					label: {
+						show: true
+					}
+				},
+				data: data
+			}
+		]
+	};
+	myChart7 = echarts.init(document.getElementById('playCounts'));
+	myChart7.setOption(option);
+	$(document).ready(function() {
+		myChart7.resize();
+	})
+	window.addEventListener("resize", function() {
+		myChart7.resize();
+	});
+}
+
+/**
+*	玫瑰图-地区分布
+*/
+function roseChart() {
+	var option = {
+		color: ['#1d9dff', '#006cff', '#60cda0', '#ed8884', '#8b78f6', '#3a91d2', '#06a0ab', '#86c9f4'],
+		title: {
+			text: '地区分布',
+			left: 'center',
+			top: '4%',
+			textStyle: {
+				color: '#fff'
+			}
+		},
+		tooltip: {
+			trigger: 'item',
+			formatter: '{a} <br/>{b} : {c} ({d}%)'
+		},
+		legend: {
+			left: 'center',
+			top: 'bottom',
+			data: ['北京', '天津', '上海', '深圳', '广州', '厦门', '珠海', '西安'],
+			textStyle: {
+				color: '#fff'
+			}
+		},
+		toolbox: {
+			show: true,
+			feature: {
+				mark: { show: true },
+				dataView: { show: true, readOnly: false },
+				magicType: {
+					show: true,
+					type: ['pie', 'funnel']
+				},
+				restore: { show: true },
+				saveAsImage: { show: true }
+			}
+		},
+		series: [
+			{
+				name: '半径模式',
+				type: 'pie',
+				radius: [15, 90],
+				center: ['50%', '50%'],
+				roseType: 'radius',
+				label: {
+					show: true
+				},
+				emphasis: {
+					label: {
+						show: true
+					}
+				},
+				data: [
+					{ value: 10, name: '北京' },
+					{ value: 15, name: '天津' },
+					{ value: 15, name: '上海' },
+					{ value: 25, name: '深圳' },
+					{ value: 20, name: '广州' },
+					{ value: 35, name: '厦门' },
+					{ value: 30, name: '珠海' },
+					{ value: 40, name: '西安' }
+				]
+			}
+		]
+	};
+	myChart6.setOption(option);
+	$(document).ready(function() {
+		myChart6.resize();
+	})
+	window.addEventListener("resize", function() {
+		myChart6.resize();
+	});
+}
+
+
+/**
+*LED液晶屏数字字符效果
+*/
+function showLEDNumber(value, id) {
+	var htmlArr = [];
+	var len = value.length;
+	for (var i = 0; i < len; i++) {
+		var number = value.charAt(i);
+		htmlArr.push('<div class="clock c' + number + '" >');
+		htmlArr.push('<div class="v n1"><div class="u"></div><div class="d"></div></div>');
+		htmlArr.push('<div class="v n2"><div class="u"></div><div class="d"></div></div>');
+		htmlArr.push('<div class="h n3"><div class="l"></div><div class="r"></div></div>');
+		htmlArr.push('<div class="v n4"><div class="u"></div><div class="d"></div></div>');
+		htmlArr.push('<div class="v n5"><div class="u"></div><div class="d"></div></div>');
+		htmlArr.push('<div class="h n6"><div class="l"></div><div class="r"></div></div>');
+		htmlArr.push('<div class="h n7"><div class="l"></div><div class="r"></div></div>');
+		htmlArr.push('</div>');
+	}
+	$("#" + id).html(htmlArr.join(""));
+}
+
+function clocknum(num, id) {
+	$('#' + id).empty();
+	var html = '';
+	var strarr = num.toString().split('');
+	var digit_to_name = 'zero one two three four five six seven eight nine'.split(' ');
+	for (var i = 0; i < strarr.length; i++) {
+		if (strarr[i] == '.') {
+			html += '<div class="dot"></div>'
+		} else {
+			var clasname = digit_to_name[strarr[i]];
+			html += '<div class="' + clasname + '">' +
+				'<span class="d1"></span>' +
+				'<span class="d2"></span>' +
+				'<span class="d3"></span>' +
+				'<span class="d4"></span>' +
+				'<span class="d5"></span>' +
+				'<span class="d6"></span>' +
+				'<span class="d7"></span>' +
+				'</div>';
+		}
+	}
+	$('#' + id).append(html);
+}

+ 1105 - 0
WebRoot/charts/visualizedcharts/js/visualizedCharts2.js

@@ -0,0 +1,1105 @@
+ //定义图表对象
+ var myChart1 = null;
+ var myChart2 = null;
+ var myChart3 = null;
+ var myChart4 = null;
+ var myChart5 = null;
+ var myChart6 = null;
+ var myChart7 = null;
+ $(function(){
+	 industryBar();
+	 changeChart();
+	 ageTrendPie();
+	 skillAcquisitionChart();
+	 playCounts();
+	 roseChart();
+	 moveMapChart();
+	 clocknum(2060,'requiredPeoples'); //执行
+	 clocknum(6990,'supplyPeoples'); 
+	/* $(".digits").numScroll({
+			time:5000
+	 });*/
+	 
+ });
+ /**
+ *	柱形图
+ */
+ function industryBar(){
+	var xAxisData = ['美术学院', '音乐学院', '影视学院', '电商学院', '旅游学院'];
+	var yAxisData = [200, 300, 300, 900, 1500];
+	
+	myChart1 =  echarts.init(document.getElementById('industryBar'));	// 基于准备好的dom,初始化echarts实例
+	var option = {
+		title: {
+			text: '院系报到数据',
+			left: 'center',
+			textStyle:{color:'#fff'},
+			top:'4%',
+		},
+		tooltip: {
+			trigger: 'axis',
+			axisPointer: {            // 坐标轴指示器,坐标轴触发有效
+				type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
+			}
+		},
+		grid: {
+			left: '2%',
+			right: '4%',
+			top:'20%',
+			bottom: '3%',
+			containLabel: true
+		},
+		xAxis: [
+			{
+				type: 'category',
+				data: xAxisData,
+				axisTick: {
+					alignWithLabel: true
+				},
+				axisLabel: {		//x轴文字颜色
+					color: '#fff'
+				},
+				axisLine: {		    //x轴线的颜色
+					lineStyle:{
+						 color: ['#fff'],
+						 width: 1,
+						 type: 'solid',
+						 opacity: 0.1
+					}
+				}
+			}
+		],
+		yAxis: [
+			{
+				type: 'value',
+				axisLabel: {		//y轴文字颜色
+					color: '#fff'
+				},
+				axisLine: {		    //y轴线的颜色
+					lineStyle:{
+						 color: ['#fff'],
+						 width: 1,
+						 type: 'solid',
+						 opacity: 0.1
+					}
+				},
+				splitLine: {        //网格样式
+					show: true,
+					lineStyle:{
+						 color: 'rgba(255,255,255,0.3)',
+						 width: 1,
+						 type: 'dashed'
+					}
+				}
+			}
+		],
+		series: [
+			{
+//				name: '直接访问',
+				type: 'bar',
+				barWidth: '50%',
+				itemStyle: {
+					normal: {
+						color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
+							offset: 0,
+							color: '#248ff7'
+						}, {
+							offset: 1,
+							color: '#6851f1'
+						}]),
+					barBorderRadius: 11,
+				}
+			  },
+				data:yAxisData 
+			}
+		]
+	};
+	myChart1.setOption(option,true);	    // 使用刚指定的配置项和数据显示图表。
+   var app = {
+	currentIndex: -1,
+	
+  };
+ setInterval(function () {
+	var dataLen = option.series[0].data.length;
+
+	// 取消之前高亮的图形
+	myChart1.dispatchAction({
+	  type: 'downplay',
+	  seriesIndex: 0,
+	  dataIndex: app.currentIndex
+	});
+	app.currentIndex = (app.currentIndex + 1) % dataLen;
+	//console.log(app.currentIndex);
+	// 高亮当前图形
+	myChart1.dispatchAction({
+	  type: 'highlight',
+	  seriesIndex: 0,
+	  dataIndex: app.currentIndex,
+	});
+	// 显示 tooltip
+	myChart1.dispatchAction({
+	  type: 'showTip',
+	  seriesIndex: 0,
+	  dataIndex: app.currentIndex
+	});
+   }, 3000);
+  	$(document).ready(function(){
+	  myChart1.resize();  
+	})
+	window.addEventListener("resize", function () {
+	  myChart1.resize();  
+	});
+}
+
+/**
+*折线图
+*/
+function changeChart(){
+	myChart2 =  echarts.init(document.getElementById('changeLine'));
+	var option = {
+    title: {
+        text: '男女比例',
+        left: 'center',
+		textStyle: {color: '#fff'},
+		top:'4%',
+    },
+    grid: {
+			left: '2%',
+			right: '4%',
+			top:'25%',
+			bottom: '3%',
+			containLabel: true
+	},
+     legend: {
+        data: ['男', '女'],
+     	textStyle: {color: '#fff'},
+		right: '4%',
+		top:'3%',
+		bottom: '5%',
+    },
+    xAxis: {
+        type: 'category',
+        data: ['美术学院', '音乐学院',   '影视学院', '电商学院',  '旅游学院'],
+		axisLabel: {		//x轴文字颜色
+				color: '#fff'
+		},
+		axisLine: {		    //x轴线的颜色
+			lineStyle:{
+				 color: ['#fff'],
+				 width: 1,
+				 type: 'solid',
+				 opacity: 0.1
+			}
+		}
+    },
+    yAxis: {
+        type: 'value',
+		axisLabel: {		//x轴文字颜色
+				color: '#fff'
+		},
+		axisLine: {		    //x轴线的颜色
+			lineStyle:{
+				 color: ['#fff'],
+				 width: 1,
+				 type: 'solid',
+				 opacity: 0.1
+			}
+		},
+		splitLine: {        //网格样式
+			show: true,
+			lineStyle:{
+				 color: 'rgba(255,255,255,0.1)',
+				 width: 1,
+				 type: 'dashed'
+			}
+		}
+    },
+    color:['#01dee1',"#ed3f35"],        //曲线颜色
+    series: [ {
+            name: '男',
+            type: 'line',
+            data: [47, 50,100, 140, 95, 220, 201,240,230,125,245,202,125],
+            smooth: true,//平滑曲线
+            markPoint: {
+                data: [
+                    {type: 'max', name: '最大值'},
+                    {type: 'min', name: '最小值'}
+                ]
+            }
+        },{
+            name: '女',
+            type: 'line',
+            data: [149, 138, 160, 130, 180, 28, 90,60,49,54,28,45],
+            smooth: true,               //平滑曲线
+            markPoint: {
+                data: [
+                    {type: 'max', name: '最大值'},
+                    {type: 'min', name: '最小值'}
+                ]
+            }
+        }]
+	};
+	myChart2.setOption(option,true);	    // 使用刚指定的配置项和数据显示图表。
+	$(document).ready(function(){
+	  myChart2.resize();  
+	})
+	window.addEventListener("resize", function () {
+	  myChart2.resize();  
+	});
+}
+ /**
+ *饼形图 
+ */
+ function ageTrendPie(){
+	myChart3 = echarts.init(document.getElementById('agePie'));
+	var option = {
+		title: {
+			text: '年龄分析',
+			left: 'center',
+			textStyle: {color: '#fff'},
+			top:'4%',
+		},
+		tooltip: {
+			trigger: 'item',
+			formatter: '{a} <br/>{b}: {c} ({d}%)'
+		},
+		grid: {
+			left: '3%',
+			right: '4%',
+			top:'35%',
+			bottom: '3%'
+		},
+		legend: {
+			orient: 'vertical',
+			left: 10,
+			data: ['16岁', '17岁','18岁','19岁','20岁','21岁以上'],
+			textStyle: {
+				color: '#fff'
+			}
+		},
+		series: [
+			{
+				name: '年龄占比',
+				type: 'pie',
+				radius: ['50%', '70%'],
+				avoidLabelOverlap: true,
+				label: {
+					show: false,
+					position: 'center'
+				},
+				emphasis: {
+					label: {
+						show: true,
+						fontSize: '30',
+						fontWeight: 'bold'
+					}
+				},
+				labelLine: {
+					show: false
+				},
+				itemStyle: {
+					normal: {
+						label:{
+							show: true,
+							formatter: '{b} \n ({d}%)'
+						}
+					}
+				},
+				color:['#10606b','#0696ab','#06a0ab','#86c9f4','#4da8ec','#3a91d2','#005fa6','#315f97'],
+				data: [
+					{value: 999, name: '16岁'},
+					{value: 2000, name: '17岁'},
+					{value: 1548, name: '18岁'},
+					{value: 1548, name: '19岁'},
+					{value: 1548, name: '20岁'},
+					{value: 1548, name: '21岁以上'}
+				]
+			}
+		]
+	};
+	myChart3.setOption(option,true);	    // 使用刚指定的配置项和数据显示图表。
+	$(document).ready(function(){
+	  myChart3.resize();  
+	})
+	window.addEventListener("resize", function () {
+	  myChart3.resize();  
+	});
+ }
+ 
+ /**
+ *柱形图
+ */
+ function  skillAcquisitionChart(){
+	var cost = [69, 78, 60,34, 70]//本期比上期(大于1按1处理)
+	var totalCost = [ 100,100, 100, 100,100]//比例综合
+	var visits = [ 664,793, 610, 350,"39/702"]//本期占总的百分比*100
+	var grade = ['医务室','保卫处', '组织部','学工部','公寓'  ]
+	var myColor = ['#21BF57','#56D0E3',  '#1089E7', '#F8B448','#F57474', ];
+	var data = {
+		grade: grade,
+		cost: cost,
+		totalCost: totalCost,
+		visits: visits
+	};
+	var option = {
+		title: {
+			top: '4%',
+			left: 'center',
+			text: '节点报到数据',
+			textStyle: {
+				align: 'center',
+				color:'#fff'
+			}
+		},
+		grid: {
+			left: '130',
+			right: '100',
+			bottom: '20'
+		},
+		xAxis: {
+			show: false,
+		},
+		yAxis: {
+			type: 'category',
+			axisLabel: {
+				margin:30,
+				show: true,
+				color: '#4DCEF8',
+				fontSize: 14
+			},
+			axisTick: {
+				show: false,
+			},
+			axisLine: {
+				show: false,
+			},
+			data: data.grade
+		},
+		series: [{//外层边框
+			type: 'bar',
+			barGap: '-65%',
+			label: {
+				normal: {
+					show: true,
+					position: 'right',
+					color: '#fff',
+					fontSize: 14,
+					formatter: 
+					function(param) {
+						return data.visits[param.dataIndex];
+					},
+				}
+			},
+			barWidth: '30%',
+			itemStyle: {
+				normal: {
+					borderColor: '#4DCEF8',
+					borderWidth: 2,
+					barBorderRadius: 15,
+					color: 'rgba(102, 102, 102,0)'
+				},
+			},
+			z: 1,
+			data: data.totalCost,
+			// data: da
+		}, {//柱形图占比
+			type: 'bar',
+			barGap: '-85%',
+			barWidth: '21%',
+			itemStyle: {
+				 normal: {
+					barBorderRadius: 16,
+					color: function(params) {
+						var num = myColor.length;
+						return myColor[params.dataIndex % num]
+					},
+				}
+			},
+			max: 1,
+			label: {
+				normal: {
+					show: true,
+					position: 'inside',
+					formatter: '{c}%'
+				}
+			},
+			labelLine: {
+				show: true,
+			},
+			z: 2,
+			data: data.cost,
+		}]
+	}
+	myChart4 = echarts.init(document.getElementById('skillAcquisitionBar'));
+	myChart4.setOption(option,true);
+	$(document).ready(function(){
+	  myChart4.resize();  
+	})
+	window.addEventListener("resize", function () {
+	  myChart4.resize();  
+	});
+}
+
+/**
+*折线图 
+*/
+function playCounts(){
+	let bgColor = "#fff";
+	let color = [
+		"#0090FF",
+		"#36CE9E",
+		"#FFC005",
+		"#FF515A",
+		"#8B5CFF",
+		"#00CA69"
+	];
+	let echartData = [{
+			name: "1",
+			value1: 100,
+			value2: 233
+		},
+		{
+			name: "2",
+			value1: 138,
+			value2: 233
+		},
+		{
+			name: "3",
+			value1: 280,
+			value2: 200
+		},
+		{
+			name: "4",
+			value1: 173,
+			value2: 180
+		},
+		{
+			name: "5",
+			value1: 180,
+			value2: 199
+		},
+		{
+			name: "6",
+			value1: 180,
+			value2: 133
+		},
+		{
+			name: "7",
+			value1: 180,
+			value2: 210
+		},
+		{
+			name: "8",
+			value1: 190,
+			value2: 150
+		},
+		{
+			name: "9",
+			value1: 160,
+			value2: 180
+		}, 
+		{
+			name: "10",
+			value1: 230,
+			value2: 180
+		},
+		{
+			name: "11",
+			value1: 130,
+			value2: 100
+		},
+		{
+			name: "12",
+			value1: 80,
+			value2: 180
+		},
+	];
+
+	let xAxisData = echartData.map(v => v.name);
+	//  ["1", "2", "3", "4", "5", "6", "7", "8"]
+	let yAxisData1 = echartData.map(v => v.value1);
+	// [100, 138, 350, 173, 180, 150, 180, 230]
+	let yAxisData2 = echartData.map(v => v.value2);
+	// [233, 233, 200, 180, 199, 233, 210, 180]
+	const hexToRgba = (hex, opacity) => {
+		let rgbaColor = "";
+		let reg = /^#[\da-f]{6}$/i;
+		if (reg.test(hex)) {
+			rgbaColor = `rgba(${parseInt("0x" + hex.slice(1, 3))},${parseInt(
+		  "0x" + hex.slice(3, 5)
+		)},${parseInt("0x" + hex.slice(5, 7))},${opacity})`;
+		}
+		return rgbaColor;
+	}
+/////////////////////
+	var option = {
+		title: {
+			top: '4%',
+			left: 'center',
+			text: '图 ',
+			textStyle: {
+				align: 'center',
+				color:'#fff'
+			}
+		},
+		legend: {
+			right: 10,
+			top: 10,
+			textStyle: {
+				color: "#fff"
+			}
+		},
+		tooltip: {
+			trigger: "axis",
+			formatter: function(params) {
+				let html = '';
+				params.forEach(v => {
+					console.log(v)
+					html += `<div style="color: #666;font-size: 14px;line-height: 24px">
+					<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${color[v.componentIndex]};"></span>
+					${v.seriesName}.${v.name}
+					<span style="color:${color[v.componentIndex]};font-weight:700;font-size: 18px">${v.value}</span>
+					万元`;
+				})
+				return html
+			},
+			extraCssText: 'border-radius: 0;box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);color: #333;',
+			axisPointer: {
+				type: 'shadow',
+				shadowStyle: {
+					color: '#ffffff',
+					shadowColor: 'rgba(225,225,225,1)',
+					shadowBlur: 5
+				}
+			}
+		},
+		grid: {
+			top: 70,
+			bottom:10,
+			containLabel: true
+		},
+		xAxis: [{
+			type: "category",
+			boundaryGap: false,
+			axisLabel: {
+				formatter: '{value}月',
+				textStyle: {
+					color: "#fff",
+					opacity: 1
+				}
+			},
+			axisLine: {
+				lineStyle: {
+					color: "#D9D9D9"
+				}
+			},
+			data: xAxisData
+		}],
+		yAxis: [{
+			type: "value",
+			//name: '单位:人 ',
+			axisLabel: {
+				textStyle: {
+					color: "#fff"
+				}
+			},
+			nameTextStyle: {
+				color: "#fff",
+				fontSize: 12,
+				lineHeight: 40
+			},
+			splitLine: {        //网格样式
+				show: true,
+				lineStyle:{
+					 color: 'rgba(255,255,255,0.1)',
+					 width: 1,
+					 type: 'dashed'
+				}
+			},
+			
+			axisLine: {
+				show: false
+			},
+			axisTick: {
+				show: false
+			}
+		}],
+		series: [{
+			name: "硕士",
+			type: "line",
+			smooth: true,
+			// showSymbol: false,/
+			symbolSize: 8,
+			zlevel: 3,
+			lineStyle: {
+				normal: {
+					color: color[0],
+					shadowBlur: 3,
+					shadowColor: hexToRgba(color[0], 0.5),
+					shadowOffsetY: 8
+				}
+			},
+			areaStyle: {
+				normal: {
+					color: new echarts.graphic.LinearGradient(
+						0,
+						0,
+						0,
+						1,
+						[{
+								offset: 0,
+								color: hexToRgba(color[0], 0.3)
+							},
+							{
+								offset: 1,
+								color: hexToRgba(color[0], 0.1)
+							}
+						],
+						false
+					),
+					shadowColor: hexToRgba(color[0], 0.1),
+					shadowBlur: 10
+				}
+			},
+			data: yAxisData1
+		}, {
+			name: "博士",
+			type: "line",
+			smooth: true,
+			// showSymbol: false,
+			symbolSize: 8,
+			zlevel: 3,
+			lineStyle: {
+				normal: {
+					color: color[1],
+					shadowBlur: 3,
+					shadowColor: hexToRgba(color[1], 0.5),
+					shadowOffsetY: 8
+				}
+			},
+			areaStyle: {
+				normal: {
+					color: new echarts.graphic.LinearGradient(
+						0,
+						0,
+						0,
+						1,
+						[{
+								offset: 0,
+								color: hexToRgba(color[1], 0.3)
+							},
+							{
+								offset: 1,
+								color: hexToRgba(color[1], 0.1)
+							}
+						],
+						false
+					),
+					shadowColor: hexToRgba(color[1], 0.1),
+					shadowBlur: 10
+				}
+			},
+			data: yAxisData2
+		}]
+	};
+	myChart5 = echarts.init(document.getElementById('playCounts'));
+	myChart5.setOption(option,true);
+	$(document).ready(function(){
+	  myChart5.resize();  
+	})
+	window.addEventListener("resize", function () {
+	  myChart5.resize();  
+	});
+}    
+
+/**
+*	玫瑰图-地区分布
+*/
+function roseChart(){
+	var option = {
+		color:['#1d9dff','#006cff','#60cda0','#ed8884','#8b78f6','#3a91d2','#06a0ab','#86c9f4'],
+		title: {
+			text: '地区分布',
+			left: 'center',
+			top:'4%',
+			textStyle: {
+				color: '#fff'
+			}
+		},
+		tooltip: {
+			trigger: 'item',
+			formatter: '{a} <br/>{b} : {c} ({d}%)'
+		},
+		legend: {
+			left: 'center',
+			top: 'bottom',
+			data: ['北京', '天津', '上海', '深圳', '广州', '厦门', '珠海', '西安'],
+			textStyle: {
+				color: '#fff'
+			}
+		},
+		toolbox: {
+			show: true,
+			feature: {
+				mark: {show: true},
+				dataView: {show: true, readOnly: false},
+				magicType: {
+					show: true,
+					type: ['pie', 'funnel']
+				},
+				restore: {show: true},
+				saveAsImage: {show: true}
+			}
+		},
+		series: [
+			{
+				name: '半径模式',
+				type: 'pie',
+				radius: [15, 90],
+				center: ['50%', '50%'],
+				roseType: 'radius',
+				label: {
+					show: true
+				},
+				emphasis: {
+					label: {
+						show: true
+					}
+				},
+				data: [
+					{value: 10, name: '北京'},
+					{value: 15, name: '天津'},
+					{value: 15, name: '上海'},
+					{value: 25, name: '深圳'},
+					{value: 20, name: '广州'},
+					{value: 35, name: '厦门'},
+					{value: 30, name: '珠海'},
+					{value: 40, name: '西安'}
+				]
+			}
+		]
+	};
+	myChart6 = echarts.init(document.getElementById('roseChart'));
+	myChart6.setOption(option);
+	$(document).ready(function(){
+	  myChart6.resize();  
+	})
+	window.addEventListener("resize", function () {
+	  myChart6.resize();  
+	});
+}
+
+/**
+*	迁徙图
+*/
+function moveMapChart(){
+	var geoCoordMap = {
+    '上海': [121.4648,31.2891],
+    '东莞': [113.8953,22.901],
+    '东营': [118.7073,37.5513],
+    '中山': [113.4229,22.478],
+    '临汾': [111.4783,36.1615],
+    '临沂': [118.3118,35.2936],
+    '丹东': [124.541,40.4242],
+    '丽水': [119.5642,28.1854],
+    '乌鲁木齐': [87.9236,43.5883],
+    '佛山': [112.8955,23.1097],
+    '保定': [115.0488,39.0948],
+    '兰州': [103.5901,36.3043],
+    '包头': [110.3467,41.4899],
+    '北京': [116.4551,40.2539],
+    '北海': [109.314,21.6211],
+    '南京': [118.8062,31.9208],
+    '南宁': [108.479,23.1152],
+    '南昌': [116.0046,28.6633],
+    '南通': [121.1023,32.1625],
+    '厦门': [118.1689,24.6478],
+    '台州': [121.1353,28.6688],
+    '合肥': [117.29,32.0581],
+    '呼和浩特': [111.4124,40.4901],
+    '咸阳': [108.4131,34.8706],
+    '哈尔滨': [127.9688,45.368],
+    '唐山': [118.4766,39.6826],
+    '嘉兴': [120.9155,30.6354],
+    '大同': [113.7854,39.8035],
+    '大连': [122.2229,39.4409],
+    '天津': [117.4219,39.4189],
+    '太原': [112.3352,37.9413],
+    '威海': [121.9482,37.1393],
+    '宁波': [121.5967,29.6466],
+    '宝鸡': [107.1826,34.3433],
+    '宿迁': [118.5535,33.7775],
+    '常州': [119.4543,31.5582],
+    '广州': [113.5107,23.2196],
+    '廊坊': [116.521,39.0509],
+    '延安': [109.1052,36.4252],
+    '张家口': [115.1477,40.8527],
+    '徐州': [117.5208,34.3268],
+    '德州': [116.6858,37.2107],
+    '惠州': [114.6204,23.1647],
+    '成都': [103.9526,30.7617],
+    '扬州': [119.4653,32.8162],
+    '承德': [117.5757,41.4075],
+    '拉萨': [91.1865,30.1465],
+    '无锡': [120.3442,31.5527],
+    '日照': [119.2786,35.5023],
+    '昆明': [102.9199,25.4663],
+    '杭州': [119.5313,29.8773],
+    '枣庄': [117.323,34.8926],
+    '柳州': [109.3799,24.9774],
+    '株洲': [113.5327,27.0319],
+    '武汉': [114.3896,30.6628],
+    '汕头': [117.1692,23.3405],
+    '江门': [112.6318,22.1484],
+    '沈阳': [123.1238,42.1216],
+    '沧州': [116.8286,38.2104],
+    '河源': [114.917,23.9722],
+    '泉州': [118.3228,25.1147],
+    '泰安': [117.0264,36.0516],
+    '泰州': [120.0586,32.5525],
+    '济南': [117.1582,36.8701],
+    '济宁': [116.8286,35.3375],
+    '海口': [110.3893,19.8516],
+    '淄博': [118.0371,36.6064],
+    '淮安': [118.927,33.4039],
+    '深圳': [114.5435,22.5439],
+    '清远': [112.9175,24.3292],
+    '温州': [120.498,27.8119],
+    '渭南': [109.7864,35.0299],
+    '湖州': [119.8608,30.7782],
+    '湘潭': [112.5439,27.7075],
+    '滨州': [117.8174,37.4963],
+    '潍坊': [119.0918,36.524],
+    '烟台': [120.7397,37.5128],
+    '玉溪': [101.9312,23.8898],
+    '珠海': [113.7305,22.1155],
+    '盐城': [120.2234,33.5577],
+    '盘锦': [121.9482,41.0449],
+    '石家庄': [114.4995,38.1006],
+    '福州': [119.4543,25.9222],
+    '秦皇岛': [119.2126,40.0232],
+    '绍兴': [120.564,29.7565],
+    '聊城': [115.9167,36.4032],
+    '肇庆': [112.1265,23.5822],
+    '舟山': [122.2559,30.2234],
+    '苏州': [120.6519,31.3989],
+    '莱芜': [117.6526,36.2714],
+    '菏泽': [115.6201,35.2057],
+    '营口': [122.4316,40.4297],
+    '葫芦岛': [120.1575,40.578],
+    '衡水': [115.8838,37.7161],
+    '衢州': [118.6853,28.8666],
+    '西宁': [101.4038,36.8207],
+    '西安': [109.1162,34.2004],
+    '贵阳': [106.6992,26.7682],
+    '连云港': [119.1248,34.552],
+    '邢台': [114.8071,37.2821],
+    '邯郸': [114.4775,36.535],
+    '郑州': [113.4668,34.6234],
+    '鄂尔多斯': [108.9734,39.2487],
+    '重庆': [107.7539,30.1904],
+    '金华': [120.0037,29.1028],
+    '铜川': [109.0393,35.1947],
+    '银川': [106.3586,38.1775],
+    '镇江': [119.4763,31.9702],
+    '长春': [125.8154,44.2584],
+    '长沙': [113.0823,28.2568],
+    '长治': [112.8625,36.4746],
+    '阳泉': [113.4778,38.0951],
+    '青岛': [120.4651,36.3373],
+    '韶关': [113.7964,24.7028]
+	};
+
+	var BJData = [
+		[{name:'北京'}, {name:'上海',value:95}],
+		[{name:'北京'}, {name:'广州',value:90}],
+		[{name:'北京'}, {name:'大连',value:80}],
+		[{name:'北京'}, {name:'南宁',value:70}],
+		[{name:'北京'}, {name:'南昌',value:60}],
+		[{name:'北京'}, {name:'拉萨',value:50}],
+		[{name:'北京'}, {name:'长春',value:40}],
+		[{name:'北京'}, {name:'包头',value:30}],
+		[{name:'北京'}, {name:'重庆',value:20}],
+		[{name:'北京'}, {name:'常州',value:10}],
+		[{name:'北京'}, {name:'北京',value:120}]
+	];
+
+ 
+
+	var planePath = 'path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z';
+
+	var convertData = function (data) {
+		var res = [];
+		for (var i = 0; i < data.length; i++) {
+			var dataItem = data[i];
+			var fromCoord = geoCoordMap[dataItem[0].name];
+			var toCoord = geoCoordMap[dataItem[1].name];
+			if (fromCoord && toCoord) {
+				res.push([{
+					coord: toCoord
+				}, {
+					coord: fromCoord
+				}]);
+			}
+		}
+		return res;
+	};
+
+	var color = ['#a6c84c', '#00eaff', '#ffde00'];
+	var series = [];
+	[['北京', BJData]].forEach(function (item, i) {
+		series.push({
+			name: item[0] + ' ',
+			type: 'lines',
+			zlevel: 1,
+			effect: {//波纹点样式
+				show: true,
+				period: 6,
+				trailLength: 0.7,
+				color: '#fff',
+				symbolSize: 5
+			},
+			lineStyle: {
+				normal: {
+					color: color[i],
+					width: 0,
+					curveness: 0.2
+				}
+			},
+			data: convertData(item[1])
+		},
+		{
+			name: item[0] + ' ',
+			type: 'lines',
+			zlevel: 2,
+			effect: {
+				show: true,
+				period: 6,
+				trailLength: 0,
+				symbol: planePath,
+				symbolSize: 15
+			},
+			lineStyle: {
+				normal: {
+					color: color[i],
+					width: 1,
+					opacity: 0.4,
+					curveness: 0.2
+				}
+			},
+			data: convertData(item[1])
+		},
+		{
+			name: item[0] + ' ',
+			type: 'effectScatter',
+			coordinateSystem: 'geo',
+			zlevel: 2,
+			rippleEffect: {
+				brushType: 'stroke'
+			},
+			label: {
+				normal: {
+					show: true,
+					position: 'right',
+					formatter: '{b}'
+				}
+			},
+			symbolSize: function (val) {
+				return val[2] / 8;
+			},
+			itemStyle: {
+				normal: {
+					color: color[i]
+				}
+			},
+			data: item[1].map(function (dataItem) {
+				return {
+					name: dataItem[1].name,
+					value: geoCoordMap[dataItem[1].name].concat([dataItem[1].value])
+				};
+			})
+		});
+	});
+
+	var option = {
+		tooltip : {
+			trigger: 'item'
+		},
+ 
+		geo: {
+			map: 'china',
+			zoom:1.9,
+			label: {
+				emphasis: {
+					show: true,
+					color:'#fff'
+				}
+			},
+			roam: true,
+			itemStyle: {
+				normal: {
+					borderWidth: 1,
+					areaColor:'rgba(7,16,44, 0.7)',
+					borderColor: 'rgba(147, 235, 248, 1)'
+				},
+				emphasis: {
+					areaColor: '#1d83e1'
+				}
+			}
+		},
+		series: series
+	};
+	myChart7 = echarts.init(document.getElementById('moveMapChart'));
+	myChart7.setOption(option,true);
+	$(document).ready(function(){
+	  myChart7.resize();  
+	})
+	window.addEventListener("resize", function () {
+	  myChart7.resize();  
+	});
+}
+
+/**
+*LED液晶屏数字字符效果
+*/
+function showLEDNumber(value,id){
+	var htmlArr = [];
+	var len = value.length;
+	for(var i=0;i<len;i++){
+		var number = value.charAt(i);
+		htmlArr.push('<div class="clock c'+number+'" >');
+		htmlArr.push('<div class="v n1"><div class="u"></div><div class="d"></div></div>');
+		htmlArr.push('<div class="v n2"><div class="u"></div><div class="d"></div></div>');
+		htmlArr.push('<div class="h n3"><div class="l"></div><div class="r"></div></div>');
+		htmlArr.push('<div class="v n4"><div class="u"></div><div class="d"></div></div>');
+		htmlArr.push('<div class="v n5"><div class="u"></div><div class="d"></div></div>');
+		htmlArr.push('<div class="h n6"><div class="l"></div><div class="r"></div></div>');
+		htmlArr.push('<div class="h n7"><div class="l"></div><div class="r"></div></div>');
+		htmlArr.push('</div>');
+	}
+	$("#"+id).html(htmlArr.join(""));
+}
+
+function clocknum(num,id) {
+       $('#'+id).empty();
+       var html = '';
+       var strarr = num.toString().split('');
+       var digit_to_name = 'zero one two three four five six seven eight nine'.split(' ');
+       for(var i=0; i<strarr.length; i++){
+           if(strarr[i] == '.'){
+               html += '<div class="dot"></div>'
+           } else {
+               var clasname = digit_to_name[strarr[i]];
+               html += '<div class="'+clasname+'">' +
+                       '<span class="d1"></span>' +
+                       '<span class="d2"></span>' +
+                       '<span class="d3"></span>' +
+                       '<span class="d4"></span>' +
+                       '<span class="d5"></span>' +
+                       '<span class="d6"></span>' +
+                       '<span class="d7"></span>' +
+                   '</div>';
+           }
+       }
+       $('#'+id).append(html);
+   }

+ 76 - 0
WebRoot/charts/visualizedcharts/visualizedCharts.html

@@ -0,0 +1,76 @@
+<html style="font-size: 56.6px;">
+<head>
+<meta chartset="utf-8">
+<title>可视化图表</title>
+<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">  
+<link rel="stylesheet" href="./css/visualizedCharts.css"/>
+<link rel="stylesheet" href="./css/numbercss.css"/>
+</head>
+<body class="contains" style="font-size: 56.6px;">
+	<div class="header">
+		<div class = "title">中央美术学院2021年新生报到实时数据统计</div>
+		<div class = "time" > <label></label></div>
+	</div>
+	<div class="container">
+		<div class="row">
+			<div class="col-md-4 item_left">
+				<div class="item_left_content">
+					<div class="powerChartDiv">
+						<div class="border">
+							<div id="skillAcquisitionBar"></div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="col-md-4 item_center">
+				<div class="item_center_content">
+					<div class="totalInfoDiv">
+						<div class="border" style="height: 90px;padding: 15px 0px;">
+							<div class="col-md-6 light" style="border-right: 1px solid #02a6b5;"><div id="requiredPeoples" class="digits" style="color:#fff;">0</div></div>
+							<div class="col-md-6 light"><div id="supplyPeoples" class="digits">0</div></div>
+						</div>
+						<div style="clear:both; margin-top: 30px;">
+							<span  class="col-md-6" style="color:#fff;display: inline-block;font-size:18px;text-align: center;">当前报到</span>
+							<span class="col-md-6"  style="color:#fff;display: inline-block;font-size:18px;text-align: center;">总人数</span>
+						</div>
+					</div>
+					<div class="changeChartDiv" >
+						<div class="border">
+							<div id="changeLine"></div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="col-md-4 item_right">
+				<div class="item_right_content">
+				
+					<div class="industryChartDiv">
+						<div class="border">
+							<div id="industryBar"></div>
+						</div>
+					</div>
+
+					<div class="playChatDiv">
+						<div class="border">
+
+							<div class = "title">&nbsp;</div> 
+							<div class = "title"><a  target="_blank" href="http://caji.cafa.edu.cn/dataView5/index.html">全部新生数据可视化分析</a></div><div class = "title">&nbsp;</div>
+							<div class = "title"><a target="_blank" href="http://caji.cafa.edu.cn/dataView51/index.html">本科数据可视化分析</a></div><div class = "title">&nbsp;</div>
+							<div class = "title"><a target="_blank" href="http://caji.cafa.edu.cn/dataView52/index.html">博士数据可视化分析</a></div><div class = "title">&nbsp;</div>
+							<div class = "title"><a target="_blank" href="http://caji.cafa.edu.cn/dataView53/index.html">硕士数据可视化分析</a></div></div>
+						</div>
+					</div>
+
+				</div>
+			</div>
+		</div>
+	</div>
+</body>
+<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
+<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
+<script src="./js/echarts.min.js"></script>
+<script src="./js/china.js"></script>
+<script src="./js/jquery.numscroll.js"></script>
+<script src="./js/visualizedCharts.js"></script>
+
+</html>

二進制
WebRoot/favicon.ico


二進制
WebRoot/fonts/10047.ttf


二進制
WebRoot/fonts/STSONG.TTF


二進制
WebRoot/fonts/cert.jpg


二進制
WebRoot/fonts/school/10030.png


二進制
WebRoot/fonts/school/10047.png


二進制
WebRoot/fonts/school/10048-big.png


二進制
WebRoot/fonts/school/10048-sm.png


二進制
WebRoot/fonts/school/10048-small.png


二進制
WebRoot/fonts/school/10048.jpg


二進制
WebRoot/fonts/school/10331.png


二進制
WebRoot/fonts/school/10331s.png


二進制
WebRoot/fonts/school/10654.jpg


二進制
WebRoot/fonts/school/10728.png


二進制
WebRoot/fonts/school/10729.png


二進制
WebRoot/fonts/scissor.png


二進制
WebRoot/fonts/video_play.png


二進制
WebRoot/fonts/yz.png


+ 74 - 0
WebRoot/judge/js/angular.app.js

@@ -0,0 +1,74 @@
+app.controller('AppCtrl', [ '$rootScope', '$scope', '$http', '$location', '$q', '$timeout', '$sce', function($rootScope, $scope, $http, $location, $q, $timeout, $sce) {
+
+	$rootScope.showHtml = function(html) {
+		var value = html.replace(/ /g, '&nbsp;').replace(/\n/g, '<br />');
+		return $sce.trustAsHtml(value);
+	}
+
+	// Ajax统一请求函数
+	$rootScope.ajaxRequest = function(params, fn) {
+		if (params == undefined)
+			params = {};
+		if (params.data == undefined)
+			params.data = {};
+		var params = angular.extend({
+			method : 'post'
+		}, params);
+		$http(params).then(function onSuccess(response) {
+			// $.hideLoading();
+			if (response == undefined)
+				console.log(params);
+			if (fn != undefined)
+				fn.call(undefined, response.data);
+		});
+	};
+
+	// 将date转换成长时间串
+	$rootScope.longDateString = function(date) {
+		date = new Date();
+		if (angular.isDate(date))
+			return date.toJSON();
+		return "";
+	};
+
+	// 将date转换成长时间串
+	$rootScope.longMinuteString = function(date) {
+		return $rootScope.longDateString(date).substr(0, 15);
+	};
+	// 将日期转换成短时间串
+	$rootScope.shortDateString = function(date) {
+		if (date == undefined)
+			return "";
+		if (angular.isDate(date))
+			date = date.toJSON();
+		if (date.length > 10)
+			return date.substr(0, 10);
+		return date;
+	};
+	// 获取日期的时间串
+	$rootScope.shortTimeString = function(date) {
+		if (date == undefined)
+			return "";
+		if (angular.isDate(date))
+			date = date.toJSON();
+		if (date.length > 10)
+			return date.substr(11, 5);
+		return date;
+	}
+	// 将短日期时间串转换成日期
+	$rootScope.parseShortString = function(date) {
+		if (date == undefined)
+			date = new Date();
+		var str = $rootScope.shortDateString(date);
+		return new Date(Date.parse(str.replace(/-/g, "/")));
+	}
+	// 将长时间串转化成日期
+	$rootScope.parseLongString = function(date) {
+		if (angular.isDate(date))
+			return date;
+		if (date == undefined || date.length != 19)
+			return undefined;
+		return new Date(Date.parse(date.replace(/-/g, "/")));
+	}
+
+} ]);

+ 92 - 0
WebRoot/judge/js/angular.init.js

@@ -0,0 +1,92 @@
+'use strict';
+angular.module('app', [ 'ngSanitize' ]);
+var app = angular.module('app').config([ '$controllerProvider', '$compileProvider', '$filterProvider', '$provide', function($controllerProvider, $compileProvider, $filterProvider, $provide) {
+	app.controller = $controllerProvider.register;
+	app.directive = $compileProvider.directive;
+	app.filter = $filterProvider.register;
+	app.factory = $provide.factory;
+	app.service = $provide.service;
+	app.constant = $provide.constant;
+	app.value = $provide.value;
+} ]);
+
+app.factory('frameAjaxInterceptor', function($rootScope, $q, $location) {
+	return {
+		'request' : function(config) {
+			// 判断是否弹出等待框
+			var wait = config.wait || 0;
+			if (wait > 0) {
+				// todo 显示提交等待框
+			}
+			return config;
+		},
+		'requestError' : function(rejection) {
+			return $q.reject(rejection);
+		},
+		'response' : function(response) {
+			var wait = (response.config || {}).wait || 0;
+			// todo 隐藏等待框
+			if (response.data.success == undefined)
+				return response;
+			if (response.data.success == false) {
+				// todo 用更友好的提示框显示
+				alert(response.data.errorMsg);
+				if (response.config.error) {
+					response.config.error.call(undefined);
+				}
+				return $q.reject(response);
+			}
+			return response;
+		},
+		'responseError' : function(rejection) {
+			var wait = (rejection.config || {}).wait || 0;
+			if (wait > 0) {
+				// todo 隐藏等待框
+			}
+			// todo 用更友好的提示框显示
+			alert('无法访问服务器!');
+			if (rejection.config.error) {
+				rejection.config.error.call(undefined);
+			}
+			return $q.reject(rejection);
+		}
+	};
+}).config([ '$httpProvider', function($httpProvider) {
+	// 设置http默认信息
+	$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
+	$httpProvider.defaults.headers.post['Accept'] = 'application/json, text/javascript, */*; q=0.01';
+	$httpProvider.defaults.headers.post['X-Requested-With'] = 'XMLHttpRequest';
+	$httpProvider.defaults.transformRequest = [ function(data) {
+		var param = function(obj) {
+			var query = '';
+			var name, value, fullSubName, subName, subValue, innerObj, i;
+			for (name in obj) {
+				value = obj[name];
+				if (value instanceof Array) {
+					for (i = 0; i < value.length; ++i) {
+						subValue = $.trim(value[i]);
+						fullSubName = name + '[]';
+						innerObj = {};
+						innerObj[fullSubName] = subValue;
+						query += param(innerObj) + '&';
+					}
+				} else if (value instanceof Date) {
+					query += encodeURIComponent(name) + '=' + encodeURIComponent($.trim(value.toJSON())) + '&';
+				} else if (value instanceof Object) {
+					for (subName in value) {
+						subValue = $.trim(value[subName]);
+						fullSubName = name + '[' + subName + ']';
+						innerObj = {};
+						innerObj[fullSubName] = subValue;
+						query += param(innerObj) + '&';
+					}
+				} else if (value !== undefined && value !== null) {
+					query += encodeURIComponent(name) + '=' + encodeURIComponent($.trim(value)) + '&';
+				}
+			}
+			return query.length ? query.substr(0, query.length - 1) : query;
+		};
+		return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
+	} ];
+	$httpProvider.interceptors.push('frameAjaxInterceptor');
+} ]);

+ 906 - 0
WebRoot/judge/js/angular.login.js

@@ -0,0 +1,906 @@
+app.controller('LoginCtrl', [ '$rootScope', '$scope', '$http', '$location', '$q', '$timeout', '$sce', function($rootScope, $scope, $http, $location, $q, $timeout, $sce) {
+
+	$scope.currStep = 'LoginName';
+	$scope.clientMac = '';
+
+//	$scope.launchFullscreen = function(element) {
+//		if (document.documentElement.requestFullscreen) {
+//			document.documentElement.requestFullscreen();
+//		} else if (document.documentElement.mozRequestFullScreen) {
+//			document.documentElement.mozRequestFullScreen();
+//		} else if (document.documentElement.webkitRequestFullscreen) {
+//			document.documentElement.webkitRequestFullscreen();
+//		} else if (document.documentElement.msRequestFullscreen) {
+//			document.documentElement.msRequestFullscreen();
+//		}
+//	}
+
+	$scope.isWillCheckPhoneCode = false;
+	$scope.checkCodeForm = {
+		phone_code : ""
+	}
+	$scope.sendPhoneCodeSuccess = "";
+	$scope.aliPlayer = null;
+
+	$scope.changeLogin = function($event) {
+		if ($event.target.value == '' || $event.target.value.length < 3)
+			return;
+		if ($event.keyCode == 13) {
+			$('#login_pass').focus();
+		}
+	}
+	
+	$scope.changeLoginName = function($event) {
+		if ($event.target.value == '' || $event.target.value.length < 3)
+			return;
+		if ($event.keyCode == 13) {
+			$scope.queryJudge($.trim($event.target.value));
+		}
+	}
+
+	$scope.showLoginName = function() {
+		$scope.group = undefined;
+		$scope.room = undefined;
+		$scope.judge = undefined;
+		$scope.currStep = 'LoginName';
+		$timeout(function() {
+			$('#login_name').focus();
+		}, 100);
+	}
+
+	$scope.queryJudge = function(login_name) {
+		var login_pass = document.getElementById('login_pass');
+		$rootScope.ajaxRequest({
+			url : '../exam/judge/grade/info/loginname.htm',
+			data : {
+				login_name : document.getElementById('login_name').value,
+				login_pass : (login_pass== undefined || login_pass == '') ?  '': login_pass.value
+			}
+		}, function(response) {
+			$scope.group = response.map.Room.group;
+			$scope.room = response.map.Room;
+			$scope.judge = response.map.Judge;
+			$scope.disArr = response.map.discipline;
+
+			// 单独评分 手机短信验证
+			$scope.isWillCheckPhoneCode = (($scope.ParamMap['ExamJudgeGradeType'] !== undefined && $scope.ParamMap['ExamJudgeGradeType'].param_value == 'Judge') ? true : false);
+			if (!$scope.isWillCheckPhoneCode)
+				$scope.currStep = 'ConfrimJudge';
+
+		})
+	}
+
+	$scope.sendPhoneCode = function() {
+		$rootScope.ajaxRequest({
+			url : '../exam/judge/sendPhoneCode.htm',
+			data : {
+				judge_id : $scope.judge.judge_id
+			}
+		}, function(response) {
+			if (response.success) {
+				$rootScope.sendPhoneCodeSuccess = true;
+
+				$scope.codeCountDown = 30;
+				$scope.countDownFn();
+				$scope.checkPhoneCodeSucMsg = "短信验证码发送成功,30秒后未收到可重新发送!";
+			} else {
+				$scope.checkPhoneCodeErrMsg = response.errorMsg;
+			}
+
+		})
+	}
+
+	$scope.checkPhoneCode = function() {
+		if ($scope.checkCodeForm.phone_code.length == 0) {
+			alert('请输入手机验证码!');
+			return;
+		}
+		$rootScope.ajaxRequest({
+			url : '../exam/judge/checkPhoneCode.htm',// TODO
+			data : {
+				phone_code : $scope.checkCodeForm.phone_code
+			}
+		}, function(response) {
+			if (response.success) {
+				$scope.isWillCheckPhoneCode = false;
+				$scope.currStep = 'ConfrimJudge';
+			}
+		})
+	}
+
+	$scope.countDownFn = function() {
+		$timeout(function() {
+			console.log($rootScope.codeCountDown);
+			$scope.codeCountDown--;
+			if ($scope.codeCountDown > 0) {
+				$scope.countDownFn();
+			}
+		}, 1000);
+	}
+	$scope.showVideo = function(){
+		var v = $('#video-player');
+		v.html('');
+		v.css("background-color","");
+		
+		$scope.aliPlayer = new Aliplayer({
+		  "id": "video-player",
+		  "source": $scope.currentStd.material_file,
+		  "width": "930px",
+		  "height": "600px",
+		  "autoplay": false,
+		  "isLive": false,
+		  "rePlay": false,
+		  "playsinline": true,
+		  "preload": true,
+		  "controlBarVisibility": "hover",
+		  "useH5Prism": true
+		}, function (player) {
+			/*
+			player.on('autoplay',function(data){
+				// 浏览器支持自动播放
+				if(!data.paramData){
+					// 自动播放
+					player.play();
+				}else{
+					// 提示用户点击播放
+				}
+				
+			})
+			*/
+			
+		  }
+		);
+	}
+	
+	$scope.closeVideo = function(){
+		$scope.aliPlayer.dispose();
+	}
+
+	$scope.changeVideoSource = function(std) {
+		$scope.aliPlayer.loadByUrl(std.material_file);
+	}
+
+	$scope.showGroup = function() {
+		$rootScope.ajaxRequest({
+			url : '../exam/judge/grade/group/list.htm',
+			data : {
+				exam_date : '2020-02-12'
+			}
+		}, function(response) {
+			$scope.groupArray = response.array;
+			$scope.currStep = 'ChooseGroup';
+		})
+	}
+
+	$scope.chooseGroup = function(group) {
+		$scope.group = group;
+		$rootScope.ajaxRequest({
+			url : '../exam/judge/grade/room/list.htm',
+			data : {
+				exam_date : '2020-02-12',
+				ly_group_id : group.ly_group_id
+			}
+		}, function(response) {
+			$scope.roomArray = response.array;
+			$scope.currStep = 'ChooseRoom';
+		})
+	}
+
+	$scope.chooseRoom = function(room) {
+		$scope.room = room;
+		$rootScope.ajaxRequest({
+			url : '../exam/judge/grade/judge/list.htm',
+			data : {
+				ly_room_id : room.ly_room_id
+			}
+		}, function(response) {
+			$scope.judgeArray = response.array;
+			$scope.currStep = 'ChooseJudge';
+		})
+	}
+
+	$scope.chooseJudge = function(judge) {
+		$scope.judge = judge;
+		$scope.currStep = 'ConfrimJudge';
+	}
+
+	$scope.judgeLogin = function() {
+		// 生成mac
+		$rootScope.ajaxRequest({
+			url : '../exam/judge/grade/login.htm',
+			data : {
+				ly_room_id : $scope.room.ly_room_id,
+				judge_id : $scope.judge.judge_id,
+				login_name : $scope.judge.login_name,
+				client_mac : ($scope.judge.room_id + '_' + $scope.judge.judge_seq + "_" + $scope.judge.room_id + "_" + $scope.clientMac)
+			}
+		}, function(response) {
+			$scope.ExamParamMap = response.map;
+			var key = "";
+			angular.forEach(response.map.Judge.des_type, function(k) {
+				if (k == '1')
+					key += response.map.Judge.judge_id;
+				else if (k == '2')
+					key += response.map.Judge.judge_seq;
+				else if (k == '3')
+					key += response.map.Judge.login_name;
+				else if (k == '4')
+					key += $scope.room.ly_room_id;
+				else if (k == '5')
+					key += $scope.room.room_key;
+				else if (k == '6')
+					key += $scope.room.ly_group_id;
+				else if (k == '7')
+					key += $scope.room.ly_agent_id;
+			});
+			// 444111
+			if (key.length < 16) {
+				var len = 16 - key.length;
+				for (var i = 0; i < len; i++)
+					key = "0" + key;
+			}
+			key = key.substring(0, 16);
+			response.map.Judge.des_key = key;
+			response.map.Judge.real_exam_seq = 0;
+			$scope.judge = response.map.Judge;
+			$scope.StdArray = [];
+			$scope.nextExamSeq();
+			$scope.currStep = 'Examing';
+			$scope.scoreStdTotal = 0;
+		})
+	}
+
+	/***************************************************************************
+	 * 评分相关函数
+	 */
+
+	$scope.getParamValue = function(param_name, default_value) {
+		if ($scope.ParamMap == undefined)
+			return undefined;
+		if ($scope.ParamMap[param_name] == undefined)
+			return default_value;
+		return $scope.ParamMap[param_name].param_value;
+	}
+
+	/***************************************************************************
+	 * 查找下一个考生
+	 */
+	$scope.nextExamSeq = function() {
+		if ($scope.judge == undefined)
+			return;
+		if ($scope.group.judge_cache_num <= $scope.StdArray.length) {
+			// 超出等待限制
+			$timeout($scope.nextExamSeq, parseInt($scope.getParamValue('NextExamSeqTicketSeconds', '5000'), 10));
+			return;
+		}
+		$scope.last_next_time = new Date();
+		$rootScope.ajaxRequest({
+			url : '../exam/judge/grade/std/next.htm',
+			data : $scope.judge,
+			error : function() {
+				// 网络错误等情况,要考虑延迟的问题
+				$timeout($scope.nextExamSeq, parseInt($scope.getParamValue('NextExamSeqTicketSeconds', '5000'), 10));
+			}
+		}, function(data) {
+			$scope.lastRequestTime = data.map.QueryNextTime;
+			$scope.jsonValue = angular.toJson(data);
+			var std = data.map.ExamStd;
+			if (data.map.ExVideo && data.map.ExVideo['video_file'])
+				std['material_file'] = data.map.ExVideo['video_file'];
+			if (data.map.RealExamSeq) {
+				$scope.judge.real_exam_seq = data.map.RealExamSeq;
+			}
+			if (std && std.std_id) {
+				// 是否是新考生
+				var flag = true;
+				for (var k = 0; k < $scope.StdArray.length; k++) {
+					if ($scope.StdArray[k].std_id - std.std_id == 0) {
+						flag = false;
+						return;
+					}
+				}
+				if (flag) {
+					std.SubjectArray = data.map.SubjectArray;
+					var avoid = false;
+					angular.forEach(std.SubjectArray, function(sb) {
+						if (sb.judge_avoid == 'Active') {
+							avoid = true;
+						} else {
+							if (sb.judge_record_score != undefined && sb.judge_record_score != sb.judge_score) {
+								sb.judge_score = sb.judge_record_score;
+							}
+						}
+					});
+					// 该考生被回避
+					if (avoid) {
+						angular.forEach(std.SubjectArray, function(sb) {
+							sb.judge_avoid = 'Active';
+							sb.judge_score = undefined;
+							sb.judge_record_score = undefined;
+						});
+						std.avoid_flag = 'Active';
+					} else {
+						std.avoid_flag = undefined;
+
+					}
+					std.tracksArray = data.map.TracksArry;
+					$scope.StdArray.push(std);
+					// 如果当前考生不为空,判断是否焦点要自动下移
+					if ($scope.currentStd != undefined) {
+						// 判断是否给过分
+						var score_flag = true;
+						angular.forEach($scope.currentStd.SubjectArray, function(sb) {
+							if (sb.judge_score == undefined && sb.judge_avoid != 'Active') {
+								score_flag = false;
+							}
+						});
+						if (score_flag) {
+							// 所有科目已经给过分,光标下移
+							//$scope.chooseStd(std);
+						}
+					} else {
+						$scope.chooseStd(std);
+					}
+					$scope.checkGradeTotol();
+				}
+				$scope.judge.real_exam_seq = std.real_exam_seq;
+				// 有新考生,1秒轮询
+				$timeout($scope.nextExamSeq, 1000);
+			} else {
+				// 没有新考生,按照规定的时间去轮询
+				$timeout($scope.nextExamSeq, parseInt($scope.getParamValue('NextExamSeqTicketSeconds', '5000'), 10));
+
+			}
+
+		});
+	}
+
+	/***************************************************************************
+	 * 选择某个考生
+	 */
+	$scope.chooseStd = function(std) {
+		var avoid = false;
+		$scope.disciplineFlag = 'InActive';
+		angular.forEach(std.SubjectArray, function(sb) {
+			if (sb.judge_avoid == 'Active') {
+				avoid = true;
+			} else {
+				// if (sb.judge_record_score != undefined &&
+				// sb.judge_record_score !=
+				// sb.judge_score) {
+				// sb.judge_score = sb.judge_record_score;
+				// }
+			}
+		});
+		// 该考生被回避
+		if (avoid) {
+			angular.forEach(std.SubjectArray, function(sb) {
+				sb.judge_avoid = 'Active';
+				sb.judge_score = undefined;
+				sb.judge_record_score = undefined;
+			});
+			std.avoid_flag = 'Active';
+		} else {
+			std.avoid_flag = undefined;
+
+		}
+
+		$scope.currentStd = std;
+		// 首次自动加载初始化视频
+		if ($scope.currentStd && $scope.getParamValue('JudgeVideoScore', 'InActive') == 'Active'
+			&& $scope.currentStd.separate_score == 'Active') {
+			setTimeout(function() {
+				var v = document.getElementById('video-player');
+				if (v) {
+					$scope.showVideo();
+					$scope.first_load = false;
+				}
+
+			}, 2000);
+		}
+		if (std.SubjectArray.length == 1) {
+			$scope.chooseSubject(std.SubjectArray[0]);
+
+		} else {
+			$scope.scoreStep = 'subjectPanel';
+		}
+	}
+
+	/***************************************************************************
+	 * 点击列表选择某个考生
+	 */
+	$scope.clickChooseStd = function(std) {
+		$scope.disciplineFlag = 'InActive';
+		var avoid = false;
+		angular.forEach(std.SubjectArray, function(sb) {
+			if (sb.judge_avoid == 'Active') {
+				avoid = true;
+			} else {
+				// if (sb.judge_record_score != undefined &&
+				// sb.judge_record_score !=
+				// sb.judge_score) {
+				// sb.judge_score = sb.judge_record_score;
+				// }
+			}
+		});
+		// 该考生被回避
+		if (avoid) {
+			angular.forEach(std.SubjectArray, function(sb) {
+				sb.judge_avoid = 'Active';
+				sb.judge_score = undefined;
+				sb.judge_record_score = undefined;
+			});
+			std.avoid_flag = 'Active';
+		} else {
+			std.avoid_flag = undefined;
+
+		}
+
+		$scope.currentStd = std;
+		//开启评委视频评分
+		if($scope.getParamValue('JudgeVideoScore', 'InActive') == 'Active' && $scope.currentStd.separate_score == 'Active') {
+			$scope.changeVideoSource(std);
+		}
+
+		if (std.SubjectArray.length == 1) {
+			$scope.chooseSubject(std.SubjectArray[0]);
+
+		} else {
+			$scope.scoreStep = 'subjectPanel';
+		}
+	}
+
+	/***************************************************************************
+	 * 选择评分科目(多科目情况下)
+	 */
+	$scope.chooseSubject = function(sb) {
+		$scope.disciplineFlag = 'InActive';
+		if ($scope.currentStd.avoid_flag == 'Active')
+			return;
+		$scope.currentSubject = sb;
+		for (var i = 0; i < $scope.ExamParamMap['SubjectScore_' + sb.subject_id].length; i++) {
+			var score = $scope.ExamParamMap['SubjectScore_' + sb.subject_id][i];
+			if (score.master_flag == 'Active') {
+				$scope.chooseScore(score)
+				break;
+			}
+		}
+		$scope.scoreStep = 'scorePanel';
+	}
+
+	/***************************************************************************
+	 * 选择评分区间
+	 */
+	$scope.chooseScore = function(score) {
+		var array = new Array();
+		for (var value = score.score_max; value >= score.score_min; value = value - (score.score_tick)) {
+
+			var score_value = value;
+			if (value < score.score_min)
+				score_value = score.score_min;
+			array.push({
+				score_value : score_value
+			});
+		}
+		$scope.currentScore = score;
+		$scope.scoreArray = array;
+
+	}
+
+	/***************************************************************************
+	 * 对某个科目进行评分(未提交)
+	 */
+	$scope.gradeScore = function(score_value) {
+		$scope.disciplineFlag = "InActive";
+		var obj = angular.extend({}, $scope.judge, {
+			judge_score : score_value,
+			std_subject_id : $scope.currentSubject.std_subject_id,
+			discipline_id: $scope.currentSubject.discipline_id
+		});
+		$rootScope.ajaxRequest({
+			url : '../exam/judge/grade/std/record.htm',
+			data : obj
+		}, function(response) {
+			$scope.currentSubject.judge_score = score_value;
+			$scope.checkGradeTotol();
+			if ($scope.currentStd.SubjectArray.length > 1) {
+				$scope.scoreStep = 'subjectPanel';
+			}
+		})
+	}
+
+	/***************************************************************************
+	 * 回避或者取消回避
+	 */
+	$scope.avoidStd = function() {
+		var obj = angular.extend({}, $scope.judge, {
+			judge_avoid : $scope.currentStd.avoid_flag == 'Active' ? 'InActive' : 'Active',
+			std_subject_id : $scope.currentStd.SubjectArray[0].std_subject_id
+		});
+		$rootScope.ajaxRequest({
+			url : '../exam/judge/grade/std/avoid.htm',
+			data : obj
+		}, function(response) {
+			$scope.currentStd.avoid_flag = ($scope.currentStd.avoid_flag == 'Active' ? undefined : 'Active');
+			angular.forEach($scope.currentStd.SubjectArray, function(sb) {
+				sb.judge_score = undefined;
+				sb.judge_record_score = undefined;
+				sb.judge_avoid = $scope.currentStd.avoid_flag;
+			});
+			$scope.checkGradeTotol();
+
+		})
+	}
+
+	/***************************************************************************
+	 * 判断已经评分的数量
+	 */
+	$scope.checkGradeTotol = function() {
+		var total = 0;
+		angular.forEach($scope.StdArray, function(std) {
+			var flag = true;
+			angular.forEach(std.SubjectArray, function(sb) {
+				if (sb.judge_avoid != 'Active' && sb.judge_score == undefined)
+					flag = false;
+			});
+			if (flag) {
+				std.score_flag = true;
+				total++;
+			} else {
+				std.score_flag = false;
+			}
+		});
+		$scope.scoreStdTotal = total;
+	}
+
+	/***************************************************************************
+	 * 提交前确认
+	 */
+	$scope.confirmScore = function() {
+		var flag = new Array();
+		for (var i = 0; i < $scope.StdArray.length; i++) {
+			flag.push($scope.StdArray[i].score_flag);
+		}
+		var truePosition = flag.lastIndexOf(true);
+		var falsePosition = flag.indexOf(false);
+		if (truePosition > falsePosition && falsePosition != -1) {
+			alert('前面的考生未打分,请打分后在提交分数!');
+			$scope.clickChooseStd($scope.StdArray[falsePosition]);
+			return;
+		}
+		var array = new Array();
+		for (var i = 0; i < $scope.StdArray.length; i++) {
+			if ($scope.StdArray[i].score_flag == true) {
+				var confirm_score_value = "";
+				for (var k = 0; k < $scope.StdArray[i].SubjectArray.length; k++) {
+					var subject = $scope.StdArray[i].SubjectArray[k];
+					confirm_score_value = confirm_score_value + (k > 0 ? "、" : "") + subject.subject_name + "【" + (subject.judge_avoid == 'Active' ? "回避" : subject.judge_score) + "】";
+				}
+				$scope.StdArray[i].confirm_score_value = confirm_score_value;
+				array.push($scope.StdArray[i]);
+			} else {
+				break;
+			}
+		}
+		if (array.length == 0)
+			return;
+		$scope.confirmStdArray = array;
+		if ($scope.getParamValue('ShowJudgeSign', 'InActive') == 'Active') {
+			$scope.setStdNumber(array);
+		}
+		$scope.currStep = 'ConfirmScore';
+	}
+
+	/***************************************************************************
+	 * 查看分数
+	 */
+	$scope.lookScore = function() {
+		$rootScope.ajaxRequest({
+			url : '../exam/judge/grade/judge/lookScore.htm',
+			data : {
+				room_id : $scope.room.ly_room_id,
+				judge_id : $scope.judge.judge_id
+			}
+		}, function(response) {
+			$scope.stdScoreArray = response.array;
+		});
+		$scope.currStep = 'LookScore';
+	}
+
+	// 选中上一个考生
+	$scope.chooseLastStd = function() {
+		$scope.disciplineFlag = 'InActive';
+		// 当前选中考生
+		var curStd = $scope.currentStd;
+		if (!curStd)
+			return;
+		for (var k = 0; k < $scope.StdArray.length; k++) {
+			var std = $scope.StdArray[k];
+			if (std.std_id === curStd.std_id) {
+				if (k > 0) {
+					$scope.currentStd = $scope.StdArray[k - 1];
+					if($scope.getParamValue('JudgeVideoScore', 'InActive') == 'Active' && $scope.currentStd.separate_score == 'Active') {
+						$scope.changeVideoSource($scope.currentStd);
+					}
+					$scope.clickChooseStd($scope.currentStd);
+					break;
+				} else {
+					alert('已经是第一个考生!')
+				}
+			}
+
+		}
+	}
+
+	// 选中下一个考生
+	$scope.chooseNextStd = function() {
+		$scope.disciplineFlag = 'InActive';
+		// 当前选中考生
+		var curStd = $scope.currentStd;
+		if (!curStd)
+			return;
+		for (var k = 0; k < $scope.StdArray.length; k++) {
+			var std = $scope.StdArray[k];
+			if (std.std_id === curStd.std_id) {
+				if ((k + 1) < $scope.StdArray.length) {
+					$scope.currentStd = $scope.StdArray[k + 1];
+					if($scope.getParamValue('JudgeVideoScore', 'InActive') == 'Active' && $scope.currentStd.separate_score == 'Active') {
+						$scope.changeVideoSource($scope.currentStd);
+					}
+					$scope.clickChooseStd($scope.currentStd);
+					break;
+				} else {
+					// 无下一个考生 提示 TODO
+					alert('已经是最后一个考生!')
+				}
+			}
+
+		}
+	}
+
+	// aes加密
+	$scope.aesValue = function(value) {
+		var key = CryptoJS.enc.Utf8.parse($scope.judge.des_key);
+		var str = CryptoJS.enc.Utf8.parse(value);
+		var base64 = CryptoJS.enc.Base64.stringify(str);
+		var encrypted = CryptoJS.AES.encrypt(str, key, {
+			mode : CryptoJS.mode.ECB,
+			padding : CryptoJS.pad.Pkcs7
+		});
+		return encrypted.toString();
+	}
+
+	/***************************************************************************
+	 * 提交分数
+	 */
+	$scope.submitScore = function() {
+		// && !$("#signature")[0].contentWindow.flag
+		if ($scope.getParamValue('ShowJudgeSign', 'InActive') == 'Active' && $("#signature")[0].contentWindow.document.getElementById('saveBtn').disabled) {
+			alert('提交分数前,请先保存签名!');
+			return;
+		}
+		if ($scope.getParamValue('ShowJudgeSign', 'InActive') == 'Active') {
+			$("#signature")[0].contentWindow.saveSignature();
+		}
+		var std = undefined;
+		$scope.commitScoreFlag = true;
+		for (var i = 0; i < $scope.confirmStdArray.length; i++) {
+			if ($scope.confirmStdArray[i].commit_flag != true) {
+				std = $scope.confirmStdArray[i];
+				break;
+			}
+		}
+		if (std == undefined) {
+			$scope.commitScoreFlag = undefined;
+			$scope.currentSubject = undefined;
+			$scope.currentScore = undefined;
+			$scope.currentStd = undefined;
+			// 已经完成评分
+			$scope.confirmStdArray = [];
+			$scope.currStep = 'Examing';
+			if ($scope.StdArray.length > 0) {
+				$scope.chooseStd($scope.StdArray[0]);
+			}
+			return;
+		}
+		if ($scope.requestingStdId == undefined) {
+			$scope.requestingStdId = std.std_id;
+			$scope.submitStdScore(std);
+		}
+		// 1秒钟等待
+
+		$timeout($scope.submitScore, 1000);
+
+	}
+
+	/***************************************************************************
+	 * 提交分数,单个考生
+	 */
+	$scope.submitStdScore = function(std) {
+		angular.forEach(std.SubjectArray, function(sb) {
+			sb.room_id = $scope.room.ly_room_id;
+			sb.agent_id = $scope.judge.agent_id;
+			sb.judge_id = $scope.judge.judge_id;
+			sb.judge_seq = $scope.judge.judge_seq;
+			sb.real_exam_seq = std.real_exam_seq;
+			if (sb.judge_avoid == 'Active')
+				std.judge_avoid = 'Active';
+		});
+		var data = angular.extend({}, $scope.judge, {
+			score_json : $scope.aesValue(angular.toJson(std.SubjectArray)),
+			std_id : std.std_id,
+			real_exam_seq : std.real_exam_seq,
+			judge_avoid : std.judge_avoid,
+			remark : std.remark,
+			discipline_id: std.discipline_id
+		});
+		$rootScope.ajaxRequest({
+			url : '../exam/judge/grade/std/score.htm',
+			data : data,
+			error : function() {
+				// $scope.submitStdScore(std);
+				// 出现评分分差,跳转到打分界面
+				$scope.confirmStdArray = [];
+				$scope.requestingStdId = undefined;
+			}
+		}, function(response) {
+			std.commit_flag = true;
+			$scope.scoreStdTotal = $scope.scoreStdTotal - 1;
+			// 移除队列
+			for (var i = 0; i < $scope.StdArray.length; i++) {
+				if ($scope.StdArray[i].std_id == std.std_id) {
+					$scope.StdArray.splice(i, 1);
+					break;
+				}
+			}
+			$scope.requestingStdId = undefined;
+		})
+	}
+
+	$scope.cancelConfirm = function() {
+		$scope.currStep = 'Examing';
+		//是否开启视频评分
+		if($scope.getParamValue('JudgeVideoScore', 'InActive') == 'Active' && $scope.currentStd.separate_score == 'Active') {
+			setTimeout(function() {
+				var v = document.getElementById('video-player');
+				if (v) {
+					$scope.showVideo();
+					$scope.first_load = false;
+				}
+				
+			}, 1000);
+		}
+	}
+
+	$scope.showJudge = function() {
+		$scope.modifyJudge = angular.extend({}, $scope.judge, {});
+		// 显示评分版
+		$('#judgeModal').modal('show')
+	}
+
+	$scope.changeJudge = function() {
+		$rootScope.ajaxRequest({
+			url : '../exam/judge/grade/judge/modify.htm',
+			data : $scope.modifyJudge
+		}, function(response) {
+			$scope.judge = response.entity;
+			// todo 更优雅的提醒方式
+			alert('评委信息已修改!')
+		})
+	}
+
+	$scope.exitJudge = function() {
+		$scope.judge = undefined;
+		$scope.currentSubject = undefined;
+		$scope.currentScore = undefined;
+		$scope.currentStd = undefined;
+		$scope.scoreStdTotal = 0;
+		$scope.StdArray = [];
+		$scope.confirmStdArray = undefined;
+		$scope.requestingStdId == undefined;
+		if ($scope.groupArray != undefined) {
+			$scope.chooseRoom($scope.room);
+		} else {
+			$scope.currStep = 'LoginName';
+		}
+
+	}
+
+	$scope.getBatchName = function(tracks) {
+		var current_batch = 1;
+		angular.forEach($scope.currentStd.tracksArray, function(t) {
+			if (t.tracks_batch > current_batch)
+				current_batch = t.tracks_batch;
+		});
+		if (current_batch == 1) {
+			return '';
+		}
+		if (tracks.tracks_batch == 2)
+			return '复试:'
+		return '三试:'
+	}
+
+	$scope.getTracksClass = function(tracks) {
+		var current_batch = 1;
+		angular.forEach($scope.currentStd.tracksArray, function(t) {
+			if (t.tracks_batch > current_batch)
+				current_batch = t.tracks_batch;
+		});
+		if (current_batch == tracks.tracks_batch) {
+			return 'text-success';
+		}
+		return '';
+	}
+
+	$scope.login = function() {
+		var login_name = document.getElementById('login_name').value;
+		if (!login_name) {
+			alert('请输入评委登录账号!');
+			return;
+		}
+		$scope.queryJudge($.trim(login_name));
+		//$scope.launchFullscreen();
+	}
+
+	$rootScope.ajaxRequest({
+		url : '../exam/judge/grade/param.htm'
+	}, function(response) {
+		var map = {};
+		for (var i = 0; i < response.array.length; i++) {
+			map[response.array[i].param_name] = response.array[i];
+		}
+		$scope.ParamMap = map;
+
+		if ($scope.getParamValue('JudgeLoginType', 'LoginName') == 'ChooseGroup') {
+			$scope.showGroup();
+		}
+	});
+
+	/***************************************************************************
+	 * 获取客户端的MAC地址
+	 */
+	$rootScope.ajaxRequest({
+		url : '../exam/judge/grade/judge/getMac.htm'
+	}, function(response) {
+		if (response) {
+			$scope.clientMac = response.entity;
+		}
+	});
+
+	/***************************************************************************
+	 * 获取提交考生的起止序号
+	 */
+	$scope.setStdNumber = function(array) {
+		$scope.numberBetween = "";
+		for (var i = 0; i < array.length; i++) {
+			if (i == 0) {
+				$scope.numberBetween += array[i].real_exam_echo;
+			}
+			if (i == array.length - 1) {
+				$scope.numberBetween += "~" + array[i].real_exam_echo;
+			}
+		}
+	}
+	// 清除签名
+	$scope.clearCanvas = function() {
+		$("#signature")[0].contentWindow.clearCanvas();
+	}
+	// 保存签名
+	$scope.saveSignature = function() {
+		if ($("#signature")[0].contentWindow.document.getElementById('saveBtn').disabled) {
+			alert('保存签名前,请先签名!');
+			return;
+		}
+		$("#signature")[0].contentWindow.saveSignature();
+	}
+	
+	//标记违纪
+	$scope.stdDiscipline = function() {
+		$scope.disciplineFlag = 'Active';
+	}
+
+	$timeout(function() {
+		$('#login_name').focus();
+		// $scope.launchFullscreen();
+	}, 100);
+} ]);

+ 189 - 0
WebRoot/judge/js/jq-signature.js

@@ -0,0 +1,189 @@
+(function(window, document, $) {
+	'use strict';
+
+  // Get a regular interval for drawing to the screen
+  window.requestAnimFrame = (function (callback) {
+    return window.requestAnimationFrame ||
+      window.webkitRequestAnimationFrame ||
+      window.mozRequestAnimationFrame ||
+      window.oRequestAnimationFrame ||
+      window.msRequestAnimaitonFrame ||
+      function (callback) {
+        window.setTimeout(callback, 1000/60);
+      };
+  })();
+
+  /*
+  * Plugin Constructor
+  */
+  var pluginName = 'jqSignature',
+      defaults = {
+        lineColor: '#222222',
+        lineWidth: 1,
+        border: '1px dashed #AAAAAA',
+        background: '#FFFFFF',
+        width: $(window).height(),
+        height: 100,
+        autoFit: false
+      },
+      canvasFixture = '<canvas></canvas>';
+
+  function Signature(element, options) {
+    // DOM elements/objects
+    this.element = element;
+    this.$element = $(this.element);
+    this.canvas = false;
+    this.$canvas = false;
+    this.ctx = false;
+    // Drawing state
+    this.drawing = false;
+    this.currentPos = {
+      x: 0,
+      y: 0
+    };
+    this.lastPos = this.currentPos;
+    // Determine plugin settings
+    this._data = this.$element.data();
+    this.settings = $.extend({}, defaults, options, this._data);
+    // Initialize the plugin
+    this.init();
+  }
+
+  Signature.prototype = {
+    // Initialize the signature canvas
+    init: function() {
+      // Set up the canvas
+      this.$canvas = $(canvasFixture).appendTo(this.$element);
+      this.$canvas.attr({
+        width: this.settings.width,
+        height: this.settings.height
+      });
+      this.$canvas.css({
+        boxSizing: 'border-box',
+        width: this.settings.width + 'px',
+        height: this.settings.height + 'px',
+        border: this.settings.border,
+        background: this.settings.background,
+        cursor: 'crosshair'
+      });
+      // Fit canvas to width of parent
+      if (this.settings.autoFit === true) {
+        this._resizeCanvas();
+        // TO-DO - allow for dynamic canvas resizing
+        // (need to save canvas state before changing width to avoid getting cleared)
+        // var timeout = false;
+        // $(window).on('resize', $.proxy(function(e) {
+        //   clearTimeout(timeout);
+        //   timeout = setTimeout($.proxy(this._resizeCanvas, this), 250);
+        // }, this));
+      }
+      this.canvas = this.$canvas[0];
+      this._resetCanvas();
+      // Set up mouse events
+      this.$canvas.on('mousedown touchstart', $.proxy(function(e) {
+        this.drawing = true;
+        this.lastPos = this.currentPos = this._getPosition(e);
+      }, this));
+      this.$canvas.on('mousemove touchmove', $.proxy(function(e) {
+        this.currentPos = this._getPosition(e);
+      }, this));
+      this.$canvas.on('mouseup touchend', $.proxy(function(e) {
+        this.drawing = false;
+        // Trigger a change event
+        var changedEvent = $.Event('jq.signature.changed');
+        this.$element.trigger(changedEvent);
+      }, this));
+      // Prevent document scrolling when touching canvas
+      $(document).on('touchstart touchmove touchend', $.proxy(function(e) {
+        if (e.target === this.canvas) {
+          e.preventDefault();
+        }
+      }, this));
+      // Start drawing
+      var that = this;
+      (function drawLoop() {
+        window.requestAnimFrame(drawLoop);
+        that._renderCanvas();
+      })();
+    },
+    // Clear the canvas
+    clearCanvas: function() {
+      this.canvas.width = this.canvas.width;
+      this._resetCanvas();
+    },
+    // Get the content of the canvas as a base64 data URL
+    getDataURL: function() {
+      return this.canvas.toDataURL();
+    },
+    // Get the position of the mouse/touch
+    _getPosition: function(event) {
+      var xPos, yPos, rect;
+      rect = this.canvas.getBoundingClientRect();
+      event = event.originalEvent;
+      // Touch event
+      if (event.type.indexOf('touch') !== -1) { // event.constructor === TouchEvent
+        xPos = event.touches[0].clientX - rect.left;
+        yPos = event.touches[0].clientY - rect.top;
+      }
+      // Mouse event
+      else {
+        xPos = event.clientX - rect.left;
+        yPos = event.clientY - rect.top;
+      }
+      return {
+        x: xPos,
+        y: yPos
+      };
+    },
+    // Render the signature to the canvas
+    _renderCanvas: function() {
+      if (this.drawing) {
+        this.ctx.moveTo(this.lastPos.x, this.lastPos.y);
+        this.ctx.lineTo(this.currentPos.x, this.currentPos.y);
+        this.ctx.stroke();
+        this.lastPos = this.currentPos;
+      }
+    },
+    // Reset the canvas context
+    _resetCanvas: function() {
+      this.ctx = this.canvas.getContext("2d");
+      this.ctx.strokeStyle = this.settings.lineColor;
+      this.ctx.lineWidth = this.settings.lineWidth;
+    },
+    // Resize the canvas element
+    _resizeCanvas: function() {
+      var width = this.$element.outerWidth();
+      this.$canvas.attr('width', width);
+      this.$canvas.css('width', width + 'px');
+    }
+  };
+
+  /*
+  * Plugin wrapper and initialization
+  */
+
+  $.fn[pluginName] = function ( options ) {
+    var args = arguments;
+    if (options === undefined || typeof options === 'object') {
+      return this.each(function () {
+        if (!$.data(this, 'plugin_' + pluginName)) {
+          $.data(this, 'plugin_' + pluginName, new Signature( this, options ));
+        }
+      });
+    }
+    else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') {
+      var returns;
+      this.each(function () {
+        var instance = $.data(this, 'plugin_' + pluginName);
+        if (instance instanceof Signature && typeof instance[options] === 'function') {
+          returns = instance[options].apply( instance, Array.prototype.slice.call( args, 1 ) );
+        }
+        if (options === 'destroy') {
+          $.data(this, 'plugin_' + pluginName, null);
+        }
+      });
+      return returns !== undefined ? returns : this;
+    }
+  };
+
+})(window, document, jQuery);

+ 45 - 0
WebRoot/judge/judge.css

@@ -0,0 +1,45 @@
+html { overflow-x: hidden; overflow-y: auto; }
+.login_title {	
+	padding-top: 40px;
+	font-size: 60px;
+	text-align: center;
+	font-weight: 900;
+}
+.login_title_30 {	
+	padding-top: 40px;
+	font-size: 30px;
+	text-align: center;
+	font-weight: 900;
+}
+
+.login_name {
+	padding-top: 0;
+	padding-bottom: 0;
+	-moz-box-sizing: border-box;
+	-webkit-box-sizing: border-box;
+	box-sizing: border-box;
+	height: 140px;
+	*height: 136px;
+	-moz-box-sizing: border-box;
+	-webkit-box-sizing: border-box;
+	box-sizing: border-box;
+	font-size: 100px;
+	text-align: center;
+	font-weight: 700;
+}
+
+.video_btn{
+    position: relative; /** 相对布局 **/
+}
+.video_btn:hover{
+    top: 2px; /**向下偏移2px **/
+    cursor: pointer
+}
+
+.div_left {
+  overflow: auto;
+  height: calc(90vh)
+}
+.div_left::-webkit-scrollbar {
+	border-width:1px;
+}

+ 512 - 0
WebRoot/judge/judge.html

@@ -0,0 +1,512 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+<meta http-equiv="pragma" content="no-cache">
+<meta http-equiv="cache-control" content="no-cache">
+<meta http-equiv="expires" content="0">
+<!-- Bootstrap CSS -->
+<link rel="stylesheet" href="../vendor/bootstrap-4.4.1/css/bootstrap.min.css">
+<link rel="stylesheet" href="../vendor/fontawesome-free-5.12.1-web/css/all.min.css">
+<link rel="stylesheet" href="./judge.css">
+<!--阿里播放组件  -->
+<link rel="stylesheet" href="../vendor/aliplayer/aliplayer-min.css">
+<script type="text/javascript" charset="utf-8" src="../vendor/aliplayer/aliplayer-min.js"></script>
+
+<!--阿里播放组件  -->
+<link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.8.7/skins/default/aliplayer-min.css" />
+<script type="text/javascript" charset="utf-8" src="https://g.alicdn.com/de/prismplayer/2.8.7/aliplayer-min.js"></script>
+
+
+
+
+<title>无纸化评分系统</title>
+</head>
+<body ng-app="app" ng-controller="AppCtrl" ontouchstart>
+	<div id="main_div" ng-controller="LoginCtrl">
+		<div class="d-flex flex-column flex-md-row align-items-center p-3 px-md-4 mb-3 bg-white border-bottom shadow-sm">
+			<h5 class="my-0 mr-md-auto font-weight-normal">启明禾木</h5>
+			<!--
+			<nav class="my-2 my-md-0 mr-md-3">
+				<a class="p-2 text-dark" href="#">笔试拍照</a> <a class="p-2 text-dark"
+					href="#">面试拍照</a> <a class="p-2 text-dark" href="#">扫描登录</a>
+					
+			</nav> -->
+			<!-- <a class="btn btn-outline-primary" href="#" id="div_fullscreen" ng-click="launchFullscreen()" style="">全屏</a>	 -->	
+			<a class="btn btn-outline-primary ml-3" href="#" ng-click="showGroup()" ng-if="currStep == 'LoginName' && getParamValue('JudgeLoginByGroup')=='Active'">选考场</a> <a class="btn btn-outline-primary" href="#" ng-click="showLoginName()" ng-if="currStep == 'ChooseGroup'">用户名登录</a> <a class="btn btn-outline-info ml-3" href="#" ng-click="showJudge()" ng-if="currStep == 'Examing'">{{judge.login_name}}</a> <a class="btn btn-outline-danger ml-3" href="#" ng-click="exitJudge()" ng-if="currStep == 'Examing'">退出登录</a>
+		</div>
+
+		<!-- 登录和选择窗口 -->
+		<div class="container" ng-if="currStep != 'Examing' && currStep !='ConfirmScore'">
+			<h6 class="my-0 login_title_30">{{getParamValue('JudgeLoginMajorText','武汉启明禾木软件服务有限公司')}}</h6>
+			<h4 class="my-0 login_title">
+			{{getParamValue('JudgeLoginTitleText','武汉启明禾木软件服务有限公司')}}
+			</h4>
+
+			<div class="card-deck mb-3 text-center mt-5">
+				<div class="card mb-4 shadow-sm" ng-if="currStep== 'LoginName'">
+					<input class="form-control  clearable" style="font-size: 50px;font-weight:10;" id="login_name" style="height: 80px;"  ng-keyup="changeLogin($event)" placeholder="请输入用户名" autocomplete="off" autofocus="" tabindex="0" maxlength=11 autocorrect="off" autocapitalize="off" spellcheck="false">
+				</div>
+				<div  ng-if="currStep== 'LoginName' && getParamValue('ExamJudgeLoginWithPassword') == 'Active'">
+					<label style="height: 80px; width:100px;"  ></label>
+				</div>
+				
+				<div class="mb-4 shadow-sm" ng-if="currStep== 'LoginName' && getParamValue('ExamJudgeLoginWithPassword', 'InActive') == 'InActive'">
+					<button type="button" class="btn btn-outline-primary" style="height: 90px; width:100px;"  ng-click="login()">登录</button>
+				</div>
+				
+			</div>
+			
+			<div class="card-deck mb-3 text-center mt-5" ng-if="getParamValue('ExamJudgeLoginWithPassword') == 'Active'">
+				<div class="card mb-4 shadow-sm"  ng-if="currStep== 'LoginName' ">
+					<input class="form-control  clearable" type="password" style="font-size: 50px;font-weight:10;" id="login_pass" style="height: 80px;" ng-keyup="changeLoginName($event)" placeholder="请输入密码" autocomplete="off" autofocus="" tabindex="0" maxlength=11 autocorrect="off" autocapitalize="off" spellcheck="false">
+				</div>
+				<div class="mb-4 shadow-sm" ng-if="currStep== 'LoginName'">
+					<button type="button" class="btn btn-outline-primary" style="height: 90px; width:100px;"  ng-click="login()">登录</button>
+				</div>
+			</div>
+			
+			<!-- 手机验证码 -->
+			<div class="card-deck mb-3 text-center mt-5" ng-if="isWillCheckPhoneCode == true">
+				<div class="card mb-4 shadow-sm" >
+					<input class="form-control login_name clearable" id="phone_code" ng-model="checkCodeForm.phone_code" placeholder="" autocomplete="off" autofocus="" tabindex="0" maxlength=11 autocorrect="off" autocapitalize="off" spellcheck="false">
+				</div>
+				
+				<div class="mb-4 shadow-sm">
+					<button type="button" class="btn btn-outline-primary mr-3" style="height: 140px; width:100px;"  ng-click="sendPhoneCode()" ng-disabled="codeCountDown > 0">发送手机验证码{{codeCountDown==0?"":codeCountDown}}</button>
+				</div>
+				
+				<center>
+					<button type="button" class="btn btn-outline-primary" style="height: 140px; width:100px;"  ng-click="checkPhoneCode()">验证</button>
+				</center>
+			</div>
+			
+			<div class="card-deck mb-3 text-center mt-5 ml-3" ng-if="isWillCheckPhoneCode == true && checkPhoneCodeSucMsg " style="font-size:40px;font-weight:600;color:green">
+				{{checkPhoneCodeSucMsg}}
+			</div>
+			
+			<div class="card-deck mb-3 text-center mt-5 ml-3" ng-if="isWillCheckPhoneCode == true && checkPhoneCodeErrMsg " style="font-size:40px;font-weight:600;color:red">
+				{{checkPhoneCodeErrMsg}}
+			</div>
+			<!-- 手机验证码 -->
+			
+			<!-- 手动选择面试项目 -->
+			<div ng-if="currStep == 'ChooseGroup'" class="container">
+				<table class="table table-bordered  table-hover">
+					<thead>
+						<tr>
+							<th scope="col">#</th>
+							<th scope="col">面试项目</th>
+							<th scope="col">评委数量</th>
+							<th scope="col"></th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr ng-repeat="group in groupArray">
+							<th scope="row">{{$index+1}}</th>
+							<td>{{group.group_name}}</td>
+							<td>{{group.room_judge_num}}</td>
+							<td><button type="button" class="btn btn-primary" ng-click="chooseGroup(group)">选择该面试</button></td>
+						</tr>
+						<tr ng-if="groupArray == undefined ||groupArray.length ==0">
+							<td colspan=4 class="text-center">本日无考试安排</td>
+						</tr>
+
+					</tbody>
+				</table>
+			</div>
+			<!-- 手动选择面试项目 -->
+
+			<!-- 手动选择考场 -->
+			<div ng-if="currStep == 'ChooseRoom'" class="container">
+				<p class="h1">面试类型:{{group.group_name}}</p>
+				<table class="table table-bordered  table-hover">
+					<thead>
+						<tr>
+							<th scope="col">#</th>
+							<th scope="col">考场地址</th>
+							<th scope="col">考场状态</th>
+							<th>{{group.group_name}}</th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr ng-repeat="room in roomArray" ng-if="room.room_status=='Active'">
+							<th scope="row">{{$index+1}}</th>
+							<td>{{room.room_addr}}</td>
+							<td><span ng-if="room.exam_status == 'Init'" class="">等待工作人员开启</span> <span ng-if="room.exam_status == 'Judge'" class="text-primary">等待评委登录</span> <span ng-if="room.exam_status == 'Examing'" class="text-success">考试中</span> <span ng-if="room.exam_status == 'Complete'" class="text-danger">考试结束</span></td>
+							<td><button type="button" class="btn btn-primary" ng-click="chooseRoom(room)" ng-if="room.exam_status=='Judge' || room.exam_status == 'Examing'">选择该考场</button></td>
+						</tr>
+						<tr>
+							<td colspan="4" class="text-center"><button type="button" class="btn btn-primary" ng-click="showGroup()">返回选择面试项目</button></td>
+						</tr>
+
+					</tbody>
+				</table>
+			</div>
+			<!-- 手动选择考场 -->
+			
+			<!-- 考场评委状态 -->
+			<div ng-if="currStep == 'ChooseJudge'" class="container">
+				<p class="h1">{{group.group_name}} - {{room.room_addr}}</p>
+				<table class="table table-bordered  table-hover">
+					<thead>
+						<tr>
+							<th scope="col">评委序号</th>
+							<th scope="col">登录名称</th>
+							<th scope="col">登录状态</th>
+							<th></th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr ng-repeat="judge in judgeArray">
+							<th scope="row">第{{judge.judge_seq}}评委</th>
+							<th>{{judge.login_name}}</th>
+							<td><span ng-if="judge.judge_status == 'Init'" class="">未登录</span> <span ng-if="judge.judge_status == 'Examing'" class="text-success">已登录</span></td>
+							<td><button type="button" class="btn btn-primary" ng-click="chooseJudge(judge)">选择该评委</button></td>
+						</tr>
+
+					</tbody>
+				</table>
+			</div>
+			<!-- 考场评委状态 -->
+
+			<div ng-if="currStep == 'ConfrimJudge'" class="container">
+				<table class="table table-bordered  table-hover">
+					<tbody>
+						<tr>
+							<td>面试项目</td>
+							<th><p class="h1">{{group.group_name}}</p></th>
+						</tr>
+						<tr>
+							<td>考场地址</td>
+							<th><p class="h1">{{room.room_addr}}</p></th>
+						</tr>
+						<tr>
+							<td>登录名称</td>
+							<th><p class="h1">{{judge.login_name}}</p></th>
+						</tr>
+						<tr>
+							<td>评委姓名</td>
+							<th><p class="h1">{{judge.judge_name}}</p></th>
+						</tr>
+						<tr>
+							<td colspan="2"><button type="button" class="btn btn-primary btn-lg" ng-click="judgeLogin()">确定登录</button>
+								<button type="button" class="btn btn-secondary btn-lg ml-5" ng-click="showLoginName()">重新选择</button></td>
+						</tr>
+
+					</tbody>
+				</table>
+			</div>
+		</div>
+		<!-- 登录和选择窗口 -->
+		
+		<div class="" ng-if="currStep == 'Examing'">
+			<div class="row">
+			 <!--左侧考生序号和考试科目  -->
+				<div class="col-xs-4 col-lg-4 col-sm-4 col-md-4 div_left">
+					<table class="table table-borderless table-hover">
+						<tbody>
+							<tr ng-repeat="std in StdArray" class="alert {{std.std_id == currentStd.std_id?'alert-warning':'alert-secondary'}}" ng-click="clickChooseStd(std)">
+								<th scope="row" style="vertical-align: middle">{{std.real_exam_echo}}</th>
+								<td> 
+								<ul class="list-group ">
+									<li class="list-group-item " ng-repeat="sb in std['SubjectArray']">{{sb.subject_name}} 
+										<span ng-if="sb.judge_score == undefined && sb.judge_avoid !='Active'" class="ml-2"><i class="fas fa-edit "></i> </span> 
+										<span ng-if="sb.judge_avoid == 'Active'" class="ml-2 text-danger">回避</span> 
+										<span ng-if="sb.judge_score != undefined" class="ml-2 text-success text-bold h2">{{sb.judge_score}}</span>
+									</li>
+								</ul></td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+				<!-- 左侧考生序号和考试科目 -->
+				
+				<div class="jumbotron col-xs-7 col-lg-7" ng-if="currStep == 'Examing' && currentStd ==undefined">
+					<h1 class="display-4">等待考生进场</h1>
+					<p class="lead">上次查询时间:{{lastRequestTime}}</p>
+					<hr class="my-4">
+					<p>工作人员正在核实考生身份,请稍候,考生进场系统将自动刷新,无需进行其他操作!</p>
+
+				</div>
+				<div class="col-xs-8 col-lg-8 col-sm-8 col-md-8" ng-if="currStep == 'Examing' && currentStd !=undefined">
+					<!-- 头部 -->
+					<div class="row" ng-if="currentStd.material_file ==undefined">
+						<!-- 序号和姓名 -->
+						<div class="col-xs-2 col-lg-2">
+							<div class="row text-center h1">{{currentStd.real_exam_echo}}号考生</div>
+							<div class="row text-center h2">{{currentStd.std_name}}</div>
+						</div>
+						<!-- 序号和姓名 -->
+						<div class="col-xs-2 col-lg-2 text-center">
+							<!-- 图片 -->
+							<img ng-if="currentStd.std_image!=undefined" ng-src="{{currentStd.std_image}}" class="rounded img-thumbnail" style="width: 120px; height: 150px;" alt="...">
+						</div>
+						<div class="col-xs-5 col-lg-5" ng-if="currentStd.aspect_name !=undefined">
+							<div class="row text-center h2">{{currentStd.aspect_name}}</div>
+						</div>
+						<div class="col-xs-3 col-lg-3" ng-if="currentStd.ticket_no !=undefined">
+							<div class="row text-center h2">{{currentStd.ticket_no}}</div>
+						</div>
+						<div class="col-xs-8 col-lg-8">
+							<div ng-repeat="t in currentStd.tracksArray">
+								<s ng-if="t.tracks_status == 'InActive'" class="text-muted">{{getBatchName(t)}}{{t.tracks_name}}</s>
+								<span ng-if="t.tracks_status == 'Active'" class="{{getTracksClass(t)}}">{{getBatchName(t)}}{{t.tracks_name}}</span>
+							</div>
+							<!-- 曲目信息 -->
+						</div>
+					</div>
+					<!-- 头部 -->
+					
+					<!-- 视频播放窗口,无用可删除 -->
+					<div class="row" ng-if="currentStd.material_file !=undefined && currentStd.material_file != '' && getParamValue('JudgeVideoScore') == 'Active' && currentStd.separate_score == 'Active'">
+						<div style="width:1320px;">
+							<div style="width:90%;margin:3px !important;background-color: #eee;font-size: 18px;font-weight: bold;">
+								<table style="width: 100%;height: 100%;">
+									<tr>
+										<td style="width: 80%;height: 60%;padding: 10px 0px 10px 10px;">
+											<!-- todo 增加判断 material_file 是否为视频文件 -->
+											<div id="video-player" style="height: 450px; width: 930px;background-color: grey;vertical-align: middle">
+											   <font style="font-size:26px;margin:20px">等待视频控件加载...</font>
+											</div>
+										</td>
+										<!--  序号,照片,姓名 -->
+										<td align="center" style="width: 20%;vertical-align: middle;">
+											考生序号:{{currentStd.real_exam_echo}}
+											<br>
+											<!-- 图片 -->
+											<img ng-if="currentStd.std_image!=undefined" ng-src="{{currentStd.std_image}}" class="rounded img-thumbnail" style="width: 120px; height: 150px;" alt="...">
+											<br>
+											{{currentStd.std_name}}
+											<br>
+											<span style="float: auto !important;">
+												<button type="button" class="btn btn-info" ng-click='chooseLastStd()'>上一个考生</button>
+												<br>
+												<button type="button" class="btn btn-info mt-2" ng-click='chooseNextStd()'>下一个考生</button>
+											</span>
+										</td>
+										<td style="width:10px">
+										</td>
+									</tr>
+								</table>
+							</div>
+							<!-- <img ng-if="currentStd.material_file!=undefined" src='../fonts/video_play.png' ng-click="showVideo(currentStd)" class="video_btn"> -->
+						</div>
+						<div class="col-xs-3 col-lg-3">
+							<div ng-repeat="t in currentStd.tracksArray">
+								<s ng-if="t.tracks_status == 'InActive'" class="text-muted">{{getBatchName(t)}}{{t.tracks_name}}</s>
+								<span ng-if="t.tracks_status == 'Active'" class="{{getTracksClass(t)}}">{{getBatchName(t)}}{{t.tracks_name}}</span>
+							</div>
+						</div>
+					</div>
+					<!-- 视频播放窗口,无用可删除 -->
+					
+					
+					
+					<!-- 多个科目的评分-->
+					<div class="row mt-5" ng-if="scoreStep == 'subjectPanel'">
+						<table class="table table-hover table-borderless">
+							<tbody>
+								<tr ng-repeat="sb in currentStd.SubjectArray" class="h2" ng-click="chooseSubject(sb)">
+									<th scope="row">{{sb.subject_name}}</th>
+									<th><span ng-if="sb.judge_score == undefined && currentStd.avoid_flag !='Active'"><i class="fas fa-edit ml-2"></i></span> <span ng-if="currentStd.avoid_flag =='Active'" class='text-danger'>回避该考生</span> <span ng-if="sb.judge_score!=undefined" class="text-bold text-success h2">{{sb.judge_score}}</span></th>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+					<!-- 多个科目的评分 -->
+					<!-- 评分区间 -->
+					<div class="mt-5 text-center align-center" ng-if="scoreStep == 'scorePanel'">
+						<div class="row mb-2 text-center" ng-if="currentStd.SubjectArray.length>1">
+							<div>
+								评分科目:<span class="h2">{{currentSubject.subject_name}}</span>
+							</div>
+						</div>
+						<!--评分区间名称  -->
+						<div class="row">
+							<div class="ml-2" ng-repeat="s in ExamParamMap['SubjectScore_' + currentSubject.subject_id]">
+								<button type="button" ng-click="chooseScore(s)" class="btn {{s.score_id==currentScore.score_id?'btn-primary':''}}">{{s.score_name}}</button>
+							</div>
+						</div>
+						<!-- 评分区间名称 -->
+						<div class="row mt-5">
+							<div class="col-xs-2 col-lg-2 mb-5" ng-repeat="s in scoreArray">
+								<button type="button" class="btn btn-lg {{currentSubject.judge_score == s.score_value?'btn-success':'btn-secondary'}} " ng-click="gradeScore(s.score_value)">{{s.score_value}}</button>
+							</div>
+						</div>
+						
+						<!-- 违规项 -->
+						<div class="row" ng-if="getParamValue('ShowAppraise') == 'Active' && disciplineFlag == 'Active' ">
+							<div class="radio" ng-repeat= "dis in disArr">
+							  <label><input type="radio" name="optradio" value="{{dis.discipline_id}}" ng-model="currentSubject.discipline_id">{{dis.discipline_value}}</label>
+							  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+							</div>
+						</div>
+						
+						<div class=" mt-5 text-center" ng-if="currentStd.SubjectArray.length > 1">
+							<button type="button" class="btn btn-warning" ng-if="getParamValue('ShowAppraise') == 'Active'" ng-click='stdDiscipline()' >标记违规</button>
+						</div>
+						<!-- 违规项 -->
+						
+						<!-- <div class="row" ng-if="getParamValue('ShowAppraise') == 'Active' && disciplineFlag == 'Active'">
+							<div class="ml-5">
+								<textarea rows="5" cols="150" placeholder="请填写考生的违纪信息" ng-model="currentStd.remark"></textarea>
+							</div>
+						</div> -->
+					</div>
+					<!-- 评分区间 -->
+					
+
+					<div class=" mt-5 text-center" ng-if="scoreStep == 'subjectPanel' || currentStd.SubjectArray.length == 1">
+						<div class="">
+							<button type="button" class="btn btn-warning mr-5" ng-if="getParamValue('JudgeAvoidFlag') == 'Active' && currentStd.avoid_flag =='Active'" ng-click="avoidStd()">取消回避,正常评分</button>
+							<button type="button" class="btn btn-danger mr-5" ng-if="getParamValue('JudgeAvoidFlag') == 'Active' && currentStd.avoid_flag !='Active'" ng-click="avoidStd()">回避该考生</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+							<button type="button" class="btn btn-warning" ng-if="getParamValue('ShowAppraise') == 'Active' && currentStd.SubjectArray.length == 1 " ng-click='stdDiscipline()' >标记违规</button>
+							<button type="button" class="btn {{scoreStdTotal == StdArray.length?'btn-success':'btn-warning'}}" ng-if="scoreStdTotal>0" ng-click='confirmScore()'>提交已评分数({{scoreStdTotal}}/{{StdArray.length}})</button>
+							<button type="button" class="btn btn-success" ng-if="getParamValue('JudgeShowSubScore') == 'Active'" ng-click='lookScore()' >查看评分</button>
+							<span style="float: right !important; margin-right:10px;" ng-if="currentStd.material_file == undefined">
+								<button type="button" class="btn btn-info mr-3" ng-click='chooseLastStd()'>上一个考生</button>
+								<button type="button" class="btn btn-info" ng-click='chooseNextStd()'>下一个考生</button>
+							</span>
+						</div>
+
+					</div>
+				</div>
+			</div>
+		</div>
+		
+		<!-- 分数确认页面 -->
+		<div class="container mt-5" ng-if="currStep == 'ConfirmScore'">
+			<p class="h2 text-center">
+				确认提交分数,本次共提交【<span class="text-success">{{confirmStdArray.length}}</span>】个考生
+			</p>
+			<table class="table table-striped mt-5">
+				<thead>
+					<tr>
+						<th scope="col">序号</th>
+						<th scope="col">科目及成绩</th>
+						<th scope="col">状态</th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr ng-repeat="std in confirmStdArray">
+						<th scope="row">{{std.real_exam_echo}}</th>
+						<td>{{std.confirm_score_value}}</td>
+						<td><span class="text-success" ng-if="std.commit_flag == true">已提交</span></td>
+					</tr>
+					<tr>
+				</tbody>
+			</table>
+			<div class="mt-5" ng-if="getParamValue('ShowJudgeSign') == 'Active'">
+				<h4>请填写签名:</h4>
+				<input type="hidden" value="{{judge.login_name}}" id="judgeName"  />
+				<input type="hidden" value="{{numberBetween}}" id="numberBetween"  />
+				<input type="hidden" value="{{room.ly_room_id}}" id="ly_room_id"  />
+				<input type="hidden" value="{{judge.judge_id}}" id="judge_id"  />
+				<iframe  src="sign.html"  id="signature" name="signature" width="100%" height="410"  frameborder="no" border="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
+			</div>
+			
+			<div class="text-center mt-2" ng-if="commitScoreFlag == undefined">
+				<button type="button" class="btn btn-danger btn-lg" ng-click="clearCanvas()" ng-if="getParamValue('ShowJudgeSign') == 'Active'">清除签名</button>
+				<!-- <button type="button" class="btn btn-success btn-lg ml-5" ng-click="saveSignature()" ng-if="getParamValue('ShowJudgeSign') == 'Active'">保存签名</button> -->
+				<button type="button" class="btn btn-primary btn-lg ml-5" ng-click="submitScore()">分数确认无误,提交</button>
+				<button type="button" class="btn btn-secondary btn-lg ml-5" ng-click="cancelConfirm()">暂不提交,返回检查</button>
+			</div>
+			<div>
+			</div>
+				
+		</div>
+		<!-- 分数确认页面 -->
+			
+		<!-- 分数回看页面 -->
+		<div class="container mt-5" ng-if="currStep == 'LookScore'">
+			<table class="table table-striped mt-5">
+				<thead>
+					<tr>
+						<th scope="col">考生序号</th>
+						<th scope="col">科目及成绩</th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr ng-repeat="score in stdScoreArray">
+						<th scope="row">{{score.real_exam_seq}}</th>
+						<td>{{score.subject_name}}</td>
+					</tr>
+				</tbody>
+			</table>
+			<div class="text-center mt-5" ng-if="commitScoreFlag == undefined">
+				<button type="button" class="btn btn-secondary btn-lg ml-5" ng-click="cancelConfirm()">返回</button>
+			</div>
+		</div>
+		<!-- 分数回看页面 -->
+		
+		<!-- 评委详细信息弹窗 -->
+		<div class="modal fade" id="judgeModal" tabindex="-1" role="dialog" aria-labelledby="judge_title" aria-hidden="true">
+			<div class="modal-dialog" role="document">
+				<div class="modal-content">
+					<div class="modal-header">
+						<h5 class="modal-title" id="judge_title">评委详细信息</h5>
+						<button type="button" class="close" data-dismiss="modal" aria-label="Close">
+							<span aria-hidden="true">&times;</span>
+						</button>
+					</div>
+					<div class="modal-body">
+						<form>
+							<div class="row">
+								<div class="form-group col-xs-12 col-lg-12">
+									<div class="form-group">
+										<label class="col-form-label">考场地址:</label> <input type="text" class="form-control" value="{{room.room_addr}}" readonly>
+									</div>
+								</div>
+							</div>
+							<div class="row" style="margin-top: -20px;">
+								<div class="form-group col-xs-6 col-lg-6">
+									<label class="col-form-label">登录帐号:</label> <input type="text" class="form-control" value="{{judge.login_name}}" readonly>
+								</div>
+								<div class="form-group col-xs-6 col-lg-6">
+									<label class="col-form-label">评委姓名:</label>
+									<input type="text" class="form-control"  ng-readonly="getParamValue('ModifyJudgeInfo') != 'Active'" ng-model="modifyJudge.judge_name">
+								</div>
+							</div>
+							<div class="row" style="margin-top: -15px;">
+								<div class="form-group col-xs-12 col-lg-12">
+									<label class="col-form-label">联系电话:</label>
+									<input type="text" class="form-control" ng-readonly="getParamValue('ModifyJudgeInfo') != 'Active'" ng-model="modifyJudge.judge_tel">
+								</div>
+							</div>
+						</form>
+					</div>
+					<div class="modal-footer">
+						<button type="button" class="btn btn-secondary" data-dismiss="modal">关闭窗口</button>
+						<button type="button" class="btn btn-primary" ng-if="getParamValue('ModifyJudgeInfo') == 'Active'" ng-click="changeJudge()">更新评委信息</button>
+					</div>
+				</div>
+			</div>
+		</div>
+		<!-- 评委详细信息弹窗 -->
+		
+		
+		<footer ng-if="currStep != 'Examing' && currStep != 'ConfirmScore'" class="my-5 pt-5 text-muted text-center text-small navbar-fixed-bottom">
+			<p class="mb-1">© 2020-2022 启明禾木</p>
+			<ul class="list-inline">
+				<li class="list-inline-item"><a href="#">无纸化评分</a></li>
+			</ul>
+		</footer>
+	</div>
+
+	<script src="../vendor/jquery-3.4.1/jquery.slim.min.js"></script>
+	<script src="../vendor/popper-1.16.0/popper.min.js"></script>
+	<script src="../vendor/bootstrap-4.4.1/js/bootstrap.min.js"></script>
+	<script src="../vendor/angular-1.7.8/angular.min.js"></script>
+	<script src="../vendor/angular-1.7.8/angular-sanitize.min.js"></script>
+	<script src="../vendor/cryptojs-3.1.2/cryptojs.min.js"></script>
+	<script src="../vendor/cryptojs-3.1.2/mode-ecb.js"></script>
+
+
+	<script src="./js/angular.init.js"></script>
+	<script src="./js/angular.app.js"></script>
+	<script src="./js/angular.login.js?v=20200519"></script>
+</body>
+</html>

部分文件因文件數量過多而無法顯示