Browse Source

first commit

YinBin 1 year ago
commit
9f3edf516f
100 changed files with 11272 additions and 0 deletions
  1. 43 0
      .project
  2. 6 0
      AppTopAccount.cfg
  3. 1 0
      README.md
  4. 144 0
      app/card.html
  5. 230 0
      app/chapter.html
  6. 299 0
      app/course.html
  7. 353 0
      app/login.html
  8. 62 0
      app/msg-center.html
  9. 103 0
      app/note.html
  10. 138 0
      app/personal-info.html
  11. 238 0
      app/personal.html
  12. 364 0
      app/question.html
  13. 286 0
      app/resolution.html
  14. 129 0
      app/review-chapter.html
  15. 282 0
      app/review-resolution.html
  16. 128 0
      app/review-section.html
  17. 275 0
      app/section.html
  18. 63 0
      app/seting.html
  19. 251 0
      app/submit.html
  20. 194 0
      app/verifyCode.html
  21. 34 0
      css/iconfont.css
  22. 3223 0
      css/mui.min.css
  23. 159 0
      db/category.js
  24. 37 0
      db/others.js
  25. 15 0
      default.html
  26. 578 0
      dragIndex.html
  27. BIN
      fonts/iconfont.ttf
  28. BIN
      fonts/iconfont2.ttf
  29. BIN
      fonts/mui.ttf
  30. 77 0
      image.html
  31. BIN
      images/English-qishiyendao1.jpg
  32. BIN
      images/English-qishiyendao2.jpg
  33. BIN
      images/English-qishiyendao3.jpg
  34. BIN
      images/englishchatu-1.png
  35. BIN
      images/englishchatu-2.png
  36. BIN
      images/englishchatu-3.png
  37. BIN
      images/englishchatu-4.png
  38. BIN
      images/englishchatu-5.png
  39. BIN
      images/englishchatu-6.png
  40. BIN
      images/person/my-person-xiaoxi.png
  41. BIN
      images/person/my-person-xitongshezhi.png
  42. BIN
      images/person/person-header.jpg
  43. BIN
      images/pull_arrow.png
  44. BIN
      images/pull_fresh.png
  45. BIN
      images/qidongye/baoming1882x1080.jpg
  46. BIN
      images/qidongye/baoming240x282.jpg
  47. BIN
      images/qidongye/baoming320x442.jpg
  48. BIN
      images/qidongye/baoming480x762.jpg
  49. BIN
      images/qidongye/baoming720x1242.jpg
  50. 474 0
      index.html
  51. 192 0
      js/.project
  52. 455 0
      js/app.js
  53. 179 0
      js/common.js
  54. 157 0
      js/createDb.js
  55. 0 0
      js/des.js
  56. 5 0
      js/mui.min.js
  57. 145 0
      js/routes.js
  58. 1124 0
      js/service.js
  59. 192 0
      js/update.js
  60. 386 0
      manifest.json
  61. 66 0
      push.html
  62. 32 0
      testdb.html
  63. 152 0
      unpackage/.confirmed_dependencies
  64. 1 0
      unpackage/.dependencies
  65. BIN
      unpackage/release/H5A0376FC.apk
  66. BIN
      unpackage/release/H5A0376FC.ipa
  67. BIN
      unpackage/release/H5A0376FC_0328214256.ipa
  68. BIN
      unpackage/res/2mstar.p12
  69. BIN
      unpackage/res/english.mobileprovision
  70. BIN
      unpackage/res/icons/100x100.png
  71. BIN
      unpackage/res/icons/114x114.png
  72. BIN
      unpackage/res/icons/120x120.png
  73. BIN
      unpackage/res/icons/144x144.png
  74. BIN
      unpackage/res/icons/152x152.png
  75. BIN
      unpackage/res/icons/180x180.png
  76. BIN
      unpackage/res/icons/29x29.png
  77. BIN
      unpackage/res/icons/40x40.png
  78. BIN
      unpackage/res/icons/48x48.png
  79. BIN
      unpackage/res/icons/50x50.png
  80. BIN
      unpackage/res/icons/57x57.png
  81. BIN
      unpackage/res/icons/58x58.png
  82. BIN
      unpackage/res/icons/72x72.png
  83. BIN
      unpackage/res/icons/76x76.png
  84. BIN
      unpackage/res/icons/80x80.png
  85. BIN
      unpackage/res/icons/87x87.png
  86. BIN
      unpackage/res/icons/96x96.png
  87. BIN
      unpackage/res/qidong/Ios/qd1024x748.png
  88. BIN
      unpackage/res/qidong/Ios/qd1024x768.png
  89. BIN
      unpackage/res/qidong/Ios/qd1536x2008.png
  90. BIN
      unpackage/res/qidong/Ios/qd1536x2048.png
  91. BIN
      unpackage/res/qidong/Ios/qd2048X1496.png
  92. BIN
      unpackage/res/qidong/Ios/qd2048x1536.png
  93. BIN
      unpackage/res/qidong/Ios/qd768X1004.png
  94. BIN
      unpackage/res/qidong/Ios/qd768X1024.png
  95. BIN
      unpackage/res/qidong/andrios/english1882x1080.png
  96. BIN
      unpackage/res/qidong/andrios/english240x282.png
  97. BIN
      unpackage/res/qidong/andrios/english320x442.png
  98. BIN
      unpackage/res/qidong/andrios/english480x762.png
  99. BIN
      unpackage/res/qidong/andrios/english720x1242.png
  100. BIN
      unpackage/res/qidong/ipad/qd1242X2208.png

+ 43 - 0
.project

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>托普统考英语</name>
+	<comment>Create By HBuilder</comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.pandora.projects.ui.MKeyBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.aptana.ide.core.unifiedBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>com.pandora.projects.ui.MKeyNature</nature>
+		<nature>com.aptana.projects.webnature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1427245287470</id>
+			<name></name>
+			<type>10</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.orFilterMatcher</id>
+				<arguments>
+					<matcher>
+						<id>org.eclipse.ui.ide.multiFilter</id>
+						<arguments>1.0-projectRelativePath-matches-false-false-bin</arguments>
+					</matcher>
+					<matcher>
+						<id>org.eclipse.ui.ide.multiFilter</id>
+						<arguments>1.0-projectRelativePath-matches-false-false-setting</arguments>
+					</matcher>
+				</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>

+ 6 - 0
AppTopAccount.cfg

@@ -0,0 +1,6 @@
+
+appid=H54959F6B
+version=1.0
+url=http://192.168.1.133:28080/app/tuo.apk
+title=更新提示
+note=发现新版本,是否更新?

+ 1 - 0
README.md

@@ -0,0 +1 @@
+# english-app

+ 144 - 0
app/card.html

@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title></title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+
+		<link rel="stylesheet" href="../css/mui.min.css">
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/app.js"></script>
+		<script src="../js/service.js"></script>
+		<style>
+			html,
+			body {
+				background-color: #efeff4;
+			}
+			.my-footer {
+				height: 120px;
+				bottom: 0;
+				padding-left: 30px;
+				padding-right: 30px;
+				padding-top: 30px;
+				right: 0;
+				left: 0;
+				z-index: 10;
+			}
+			.my-mui-icon {
+				font-size: 25px;
+				margin: 5px;
+				width: 55px;
+				height: 55px;
+				display: inline-block;
+				border-radius: 5px;
+				padding-top:16px;
+				background-color: white;
+				border: 2px ridge #6B6B6B;
+				color: black;
+			}
+			.mui-btn-block{
+				background-color: #2CA210;
+				border: 0;
+			}
+		</style>
+
+	</head>
+
+	<body>
+		<header class="mui-bar mui-bar-nav">
+			<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
+			<h1 class="mui-title">答题卡</h1>
+		</header>
+		<div class="mui-content">
+			<div id="exam-order-id" style="text-align: center;padding-top: 40px;">
+			</div>
+			<div id="exam-submit" class="my-footer">
+				<a data-href="submit.html" class="mui-btn mui-btn-block mui-btn-primary" style="font-size: 25px;padding: 5px 0px;">
+					交卷
+				</a>
+			</div>
+		</div>
+		<script type="text/html" id="template-question-id">
+			<a style="{active}" data-indexed="{indexed}" class="my-mui-icon">{indexed}</a>
+		</script>
+		<script type="text/javascript">
+			mui.plusReady(function() {
+				var self = plus.webview.currentWebview();
+				window.sectionId = self.sectionId;
+				window.serviceObj = self.serviceObj;
+				window._disableSubmit = self.disableSubmit;
+				if(window._disableSubmit){
+					document.getElementById("exam-submit").innerHTML = '';
+				}
+				var tp = document.getElementById("template-question-id").innerHTML;
+				var htmlStr = document.getElementById("exam-order-id").innerHTML;
+				for (var i = 0; i < window.serviceObj.questionList.length; i++) {
+					var questionAll = window.serviceObj.questionList[i];
+					var userAnswer = questionAll.question.userAnswer;
+					var indexed = questionAll.question.indexed;
+					if (userAnswer) {
+						userAnswer = 'color: white;background-color: #474747;';
+					}
+					htmlStr += render(tp, {
+						active: userAnswer,
+						indexed: indexed
+					});
+				}
+				document.getElementById("exam-order-id").innerHTML = htmlStr;
+
+			});
+
+			mui("#exam-order-id").on('tap', 'a', function() {
+				var indexed = this.getAttribute("data-indexed");
+				var self = plus.webview.currentWebview();
+				self.opener().evalJS("show(" + (indexed - 1) + ")");
+				mui.back();
+			});
+
+			mui('#exam-submit').on('tap', 'a', function() {
+				var url = this.getAttribute("data-href");
+				window.serviceObj = minix(window.serviceObj);
+
+				function inner() {
+					window.serviceObj.saveCollect();
+					mui.openWindow({
+						id: "submit-win-"+window.sectionId,
+						url: url,
+						extras: {
+							sectionId:window.sectionId,
+							chapterId:window.chapterId,
+							serviceObj: window.serviceObj
+						}
+					});
+				}
+
+				if (window.serviceObj.isAllDo()) {
+					inner();
+				} else {
+					var msg = '您还没有完成答题,是否要坚持提交答案?';
+					var btnArray = ['是', '否'];
+					mui.confirm(msg, '', btnArray, function(e) {
+						if (e.index == 0) {
+							inner();
+						}
+					})
+				}
+			});
+			
+			var old_back = mui.back;
+			mui.myBack = function() {
+				var self = plus.webview.currentWebview();
+				window.chapterId= self.chapterId;
+				setTimeout(function() {
+					self.opener().evalJS('mui.myBack();');
+				});
+				//执行mui封装好的窗口关闭逻辑;
+				old_back();
+			};
+		</script>
+	</body>
+
+</html>

+ 230 - 0
app/chapter.html

@@ -0,0 +1,230 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title>chapter</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+		<link rel="stylesheet" href="../css/mui.min.css">
+		<link rel="stylesheet" href="../css/iconfont.css">
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/app.js"></script>
+		<script src="../js/service.js"></script>
+		<style type="text/css">
+			#list {
+				/*避免导航边框和列表背景边框重叠,看起来像两条边框似得;*/
+				
+				margin-top: -1px;
+			}
+			#topPopover {
+				position: fixed;
+				top: 16px;
+				right: 6px;
+			}
+			#topPopover .mui-popover-arrow {
+				left: auto;
+				right: 6px;
+			}
+			.mui-popover {
+				height: 100px;
+			}
+			.kaishi {
+				width: 100px;
+				height: 30px;
+				border-radius: 4px;
+				margin-left: auto;
+				margin-right: auto;
+				padding-top: 6px;
+				background-color: #EA5555;
+				color: white;
+				font-size: 14px;
+			}
+			.biaoti {
+				word-wrap: break-word;
+				word-break: normal;
+				white-space: normal;
+				height: 70px;
+				padding-top: 20px;
+				padding-left: 15px;
+				padding-right: 15px;
+			}
+			.zhang {
+				height: 120px;
+				width: 90%;
+				margin: 0 auto;
+				border: 1px solid lightgray;
+				background-color: white;
+				border-radius: 4px;
+			}
+			.mui-media-li-self {
+				margin-top: 30px;
+			}
+			.jindulan {
+				height: 100%;
+				background-color: #428bca;
+				border-bottom-left-radius: 4px;
+				border-top-left-radius: 4px;
+			}
+			.jindu {
+				text-align: center;
+				font-size: 12px;
+				margin: 0 auto;
+				width: 60%;
+				height: 20px;
+				border-radius: 4px;
+				background-color: lightgray;
+			}
+			.mui-popover {
+				width: 150px !important;
+			}
+		</style>
+	</head>
+
+	<body>
+		<div class="mui-content">
+			<ul id="list" class="mui-table-view mui-grid-view" style="padding-top: 30px;
+			padding-bottom: 30px;background-color: #F3F3F3;">
+			</ul>
+		</div>
+		<!--右上角弹出菜单-->
+		<div id="topPopover" class="mui-popover ">
+			<div class="mui-scroll-wrapper">
+				<div class="mui-scroll">
+					<ul class="mui-table-view">
+						<li class="mui-table-view-cell">
+							<a id="cuotiben" data-course-id="" data-href="review-chapter.html" data-type='2' style="color: red;">
+								<i class="mui-icon icon iconfont icon-zhangben" style="margin-right: 10px;"></i>错题本
+							</a>
+						</li>
+						<li class="mui-table-view-cell">
+							<a id="shoucangben" data-course-id="" data-href="review-chapter.html" data-type='1' style="color: blue;">
+								<i class="mui-icon icon iconfont icon-shu" style="margin-right: 10px;"></i>收藏本
+							</a>
+						</li>
+					</ul>
+				</div>
+			</div>
+		</div>
+		<script type="text/html" id="template-chapter-id">
+			<li class="mui-table-view-cell mui-media mui-col-xs-12 mui-media-li-self">
+				<a href="section.html" data-title="{name}" data-chapter-id='{code}'>
+					<div class="zhang">
+						<div class=" biaoti">
+							{name}
+						</div>
+						<div class="jindu" style="text-align: center;">
+							<div class="jindulan" style="width: {progress}%;">
+							</div>
+							<div style="margin-top:-20px;font-size: 12px;color: #4D4D4D;">已完成{progress}%</div>
+						</div>
+					</div>
+				</a>
+			</li>
+		</script>
+		<script>
+			function initDom() {
+				var courseId = window.self.courseId;
+				queryCategory(courseId, function(rows) {
+					var scriptCourse = document.getElementById('template-chapter-id');
+					var template = scriptCourse.innerHTML;
+					var htmlStr = '';
+					for (var i = 0; i < rows.length; i++) {
+						var row = rows[i];
+						htmlStr += render(template, row);
+					}
+					var ct = document.getElementById('list');
+					ct.innerHTML = htmlStr;
+				});
+			}
+
+			function chapterTapEvent() {
+				mui('#list').on('tap', 'a', function() {
+					var chapterTitle = this.getAttribute('data-title');
+					var chapterId = this.getAttribute('data-chapter-id');
+					mui.openWindow({
+						id: 'section-win',
+						url: this.href,
+						waiting: {
+							autoShow: true
+						},
+						extras: {
+							chapterTitle: chapterTitle,
+							chapterId: chapterId
+						}
+					})
+				});
+			}
+
+			 //右上角菜单点击事件(收藏本、错题本)
+			function rightBarTapEvent() {
+				mui('#topPopover').on('tap', 'a', function() {
+					var courseId = this.getAttribute('data-course-id');
+					var href = this.getAttribute('data-href');
+					var type = this.getAttribute('data-type');
+					var title = this.innerHTML;
+					mui.openWindow({
+						id: 'bar-' + courseId,
+						url: href,
+						waiting: {
+							autoShow: true
+						},
+						extras: {
+							barTitle: title,
+							courseId: courseId,
+							type: type
+						}
+					})
+					mui("#topPopover").popover("toggle");
+				});
+			}
+
+			 //只有ios支持的功能需要在Android平台隐藏;
+			if (mui.os.android) {
+				var list = document.querySelectorAll('.ios-only');
+				if (list) {
+					for (var i = 0; i < list.length; i++) {
+						list[i].style.display = 'none';
+					}
+				}
+			}
+
+			mui.plusReady(function() {
+				window.self = plus.webview.currentWebview();
+				initDom();
+
+				var cuotiben = document.getElementById('cuotiben');
+				var shoucangben = document.getElementById('shoucangben');
+				cuotiben.setAttribute("data-course-id", window.self.courseId);
+				shoucangben.setAttribute('data-course-id', window.self.courseId);
+				chapterTapEvent();
+
+				rightBarTapEvent();
+
+				//关闭splash页面;
+				plus.navigator.closeSplashscreen();
+			});
+
+			var index = null; //主页面
+			function openMenu() {
+				!index && (index = mui.currentWebview.parent());
+				mui.fire(index, "menu:open");
+			}
+
+			 //在android4.4.2中的swipe事件,需要preventDefault一下,否则触发不正常
+//			window.addEventListener('dragright', function(e) {
+//				e.detail.gesture.preventDefault();
+//			});
+//
+//			 //监听右滑事件,若侧滑菜单未显示,右滑要显示菜单;
+//			window.addEventListener("swiperight", function(e) {
+//				//默认滑动角度在-45度到45度之间,都会触发右滑菜单,为避免误操作,可自定义限制滑动角度;
+//				if (Math.abs(e.detail.angle) < 4) {
+//					openMenu();
+//				}
+//			});
+		</script>
+	</body>
+
+</html>

+ 299 - 0
app/course.html

@@ -0,0 +1,299 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title>Hello MUI</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+
+		<link rel="stylesheet" href="../css/mui.min.css">
+		<link rel="stylesheet" href="../css/iconfont.css">
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/app.js"></script>
+		<script src="../js/service.js"></script>
+		<style>
+			html,
+			body {
+				background-color: #efeff4;
+			}
+			.title {
+				margin: 35px 15px 10px;
+				margin-bottom: 20px;
+				font-size: 24px;
+				font-weight: 700;
+				color: green;
+			}
+			.title+.content {
+				margin: 10px 15px 35px;
+				color: #bbb;
+				text-indent: 1em;
+				font-size: 14px;
+				line-height: 24px;
+			}
+			#list {
+				/*避免导航边框和列表背景边框重叠,看起来像两条边框似得;*/
+				
+				margin-top: -1px;
+			}
+			#topPopover {
+				position: fixed;
+				top: 16px;
+				right: 6px;
+				width: 150px !important;
+				z-index: 2;
+				top: 60px !important;
+			}
+			#topPopover .mui-popover-arrow {
+				left: auto;
+				right: 6px;
+			}
+			.mui-popover {
+				height: 100px;
+			}
+			.kaishi {
+				width: 100px;
+				height: 30px;
+				border-radius: 4px;
+				margin-left: auto;
+				margin-right: auto;
+				padding-top: 6px;
+				background-color: #EA5555;
+				color: white;
+				font-size: 14px;
+			}
+			.biaoti {
+				word-wrap: break-word;
+				word-break: normal;
+				white-space: normal;
+				height: 90px;
+				padding-top: 20px;
+				padding-left: 15px;
+				padding-right: 15px;
+				font-size: 18px;
+			}
+			.zhang {
+				height: 140px;
+				width: 90%;
+				margin: 0 auto;
+				border: 1px solid lightgray;
+				background-color: #F8F8F8;
+				border-radius: 6px;
+			}
+			.zhang:active {
+				background-color: #95DECA;
+				border: 1px solid #95DECA;
+			}
+			.mui-media-li-self {
+				margin-top: 30px;
+			}
+			.jindulan {
+				height: 100%;
+				background-color: #428bca;
+				border-bottom-left-radius: 4px;
+				border-top-left-radius: 4px;
+			}
+			.jindu {
+				text-align: center;
+				font-size: 12px;
+				margin: 0 auto;
+				width: 78%;
+				height: 25px;
+				border-radius: 4px;
+				background-color: #E2E6E5;
+			}
+			.my-course-img-1 {
+				/*margin-top: 50px !important;*/
+				
+				padding-top: 110px !important;
+				padding-bottom: 80px !important;
+				/*background-image: url(images/kuaiji.png);*/
+				
+				background-size: 100% 150px;
+				background-repeat: no-repeat;
+			}
+			.my-course-active {
+				width: 3px;
+				height: 100%;
+				background-color: red;
+				position: absolute;
+				margin-top: -32px;
+				margin-left: -10px;
+			}
+			.my-mui-navigate-right {
+				background-color: red !important;
+			}
+			.my-mui-table-view {
+				background-color: #EBEBEB !important;
+			}
+		</style>
+	</head>
+
+	<body style="margin: 0;padding: 0;">
+		<header class="mui-bar mui-bar-nav">
+			<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
+			<h1 id="title-id" class="mui-title"></h1>
+			<a id="info" class="mui-icon mui-pull-right"><i class="icon iconfont">&#xe730;</i></a>
+		</header>
+		<div id="offCanvasContentScroll" class="mui-content">
+			<div class="mui-scroll" id="my-scroll">
+				<ul id="list" class="mui-table-view mui-grid-view my-course-img-1 my-mui-table-view">
+				</ul>
+			</div>
+		</div>
+		<!--右上角弹出菜单-->
+		<div id="topPopover" class="mui-popover">
+			<div class="mui-scroll-wrapper">
+				<div class="mui-scroll">
+					<ul class="mui-table-view">
+						<li class="mui-table-view-cell">
+							<a id="cuotiben" data-course-id="" data-href="review-chapter.html" data-type='2' style="color: red;">
+								<i class="mui-icon icon iconfont icon-zhangben" style="margin-right: 10px;"></i>错题本
+							</a>
+						</li>
+						<li class="mui-table-view-cell">
+							<a id="shoucangben" data-course-id="" data-href="review-chapter.html" data-type='1' style="color: blue;">
+								<i class="mui-icon icon iconfont icon-shu" style="margin-right: 10px;"></i>收藏本
+							</a>
+						</li>
+					</ul>
+				</div>
+			</div>
+		</div>
+		<script type="text/html" id="template-course-id">
+			<li class="mui-table-view-cell">
+				<a class="mui-navigate-right" data-id="{code}" data-href="../dragIndex.html">{name}</a>
+			</li>
+		</script>
+		<script type="text/html" id="template-chapter-id">
+			<li class="mui-table-view-cell mui-media mui-col-xs-12 mui-media-li-self">
+				<a href="section.html" data-title="{name}" data-chapter-id='{code}'>
+					<div class="zhang">
+						<div class=" biaoti">
+							{name}
+						</div>
+						<div class="jindu" style="text-align: center;">
+							<div class="jindulan" style="width: {progress}%;">
+							</div>
+							<div style="margin-top:-22px;font-size: 12px;color: #4D4D4D;">已完成{progress}%</div>
+						</div>
+					</div>
+				</a>
+			</li>
+		</script>
+		<script>
+			/**
+			 * 初始化章
+			 */
+			function initChapterDom() {
+					queryCategory(window.self.courseId, function(rows) {
+						var scriptCourse = document.getElementById('template-chapter-id');
+						var template = scriptCourse.innerHTML;
+						var htmlStr = '';
+						for (var i = 0; i < rows.length; i++) {
+							var row = rows[i];
+							htmlStr += render(template, row);
+						}
+						var ct = document.getElementById('list');
+						ct.innerHTML = htmlStr;
+//						document.getElementById("list").style.backgroundImage = window.myimage; TODO 这里已删除,等需要背景图片的时候再打开吧
+					});
+				}
+				/**
+				 * 设置背景图片
+				 */
+
+			function setBackgrounImage() {
+					if (window.self.courseTitle == "会计基础") {
+						window.myimage = 'url(../images/kuaiji.png)';
+					} else if (window.self.courseTitle == "财经法规") {
+						window.myimage = 'url(../images/caijing.png)';
+					} else {
+						window.myimage = 'url(../images/diansuanhua.png)';
+					}
+				}
+				/**
+				 * 点击章时间
+				 */
+
+			function chapterTapEvent() {
+					mui('#list').on('tap', 'a', function() {
+						var chapterTitle = this.getAttribute('data-title');
+						var chapterId = this.getAttribute('data-chapter-id');
+						mui.openWindow({
+							id: 'section-win-' + chapterId,
+							url: this.href,
+							waiting: {
+								autoShow: true
+							},
+							extras: {
+								chapterTitle: chapterTitle,
+								chapterId: chapterId
+							}
+						})
+					});
+				}
+				//右上角菜单点击事件(收藏本、错题本)
+
+			function rightBarTapEvent() {
+					mui('#topPopover').on('tap', 'a', function() {
+						var courseId = this.getAttribute('data-course-id');
+						var href = this.getAttribute('data-href');
+						var type = this.getAttribute('data-type');
+						var title = this.innerHTML;
+						mui.openWindow({
+							id: 'bar-' + courseId,
+							url: href,
+							waiting: {
+								autoShow: true
+							},
+							extras: {
+								barTitle: title,
+								courseId: courseId,
+								type: type
+							}
+						})
+						mui("#topPopover").popover("toggle");
+					});
+				}
+				/**
+				 * 更新标题
+				 */
+			function updateTitle() {
+					var courseTitle = window.self.courseTitle;
+					if (courseTitle) {
+						var titleDom = document.getElementById('title-id');
+						titleDom.innerHTML = courseTitle;
+					}
+					setBackgrounImage();
+				}
+				/**
+				 * 点击应用,打开收藏本、错题本
+				 */
+
+			function infoTapEvent() {
+					document.getElementById('info').addEventListener('tap', function() {
+						mui("#topPopover").popover("toggle");
+					});
+				}
+			 mui.plusReady(function() {
+				window.self = plus.webview.currentWebview();
+				updateTitle();
+				initChapterDom();
+				infoTapEvent();
+				rightBarTapEvent();
+				chapterTapEvent();
+			});
+			
+			var old_back = mui.back;
+			mui.back = function() {
+				var self = plus.webview.currentWebview();
+				self.opener().evalJS('initDenglu();');
+				//执行mui封装好的窗口关闭逻辑;
+				old_back();
+			}
+		</script>
+	</body>
+
+</html>

+ 353 - 0
app/login.html

@@ -0,0 +1,353 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title></title>
+		<meta charset="utf-8">
+		<title>会计自学</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+
+		<link rel="stylesheet" href="../css/mui.min.css">
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/app.js"></script>
+		<script src="../js/service.js"></script>
+		<script src="../js/des.js"></script>
+		<script src="../js/routes.js"></script>
+		<style>
+			html,
+			body {
+				background-color: #efeff4;
+			}
+			header.mui-bar {
+				/*display: none;*/
+			}
+			.mui-bar-nav~.mui-content {
+				padding: 0;
+			}
+			.mui-content-padded {
+				/*padding: 10px;*/
+			}
+			.mui-content-padded a {
+				margin: 5px;
+				width: 45px;
+				height: 45px;
+				display: inline-block;
+				border-radius: 5px;
+				padding-top: 16px;
+			}
+			.mui-content-padded a {
+				margin-top: 12px;
+			}
+			.mui-content a {
+				color: #8F8F94;
+			}
+			.mui-content a.active {
+				color: #007aff;
+			}
+			.mui-input-row {
+				padding-top: 9px !important;
+				height: 50px !important;
+			}
+			.mui-input-row:after {
+				right: 15px !important;
+			}
+		</style>
+	</head>
+
+	<body>
+		<header class="mui-bar mui-bar-nav">
+			<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
+			<h1 id="title-id" class="mui-title">登录</h1>
+			<a id="retrieve-password-id" href="#context-retrieve-id" class="mui-pull-right mui-tab-item" style="font-size: 16px;padding-top:15px;">忘记密码</a>
+		</header>
+		<div class="mui-content" style="padding: 0px 20px;">
+
+			<div id="context-login-id" class="mui-control-content mui-active">
+				<form class="mui-input-group" style="margin-top: 80px;">
+					<div class="mui-input-row">
+						<label>手机号</label>
+						<input id="login-username-input-id" type="text"
+							value="15866668888" placeholder="请输入手机号码">
+					</div>
+					<div class="mui-input-row">
+						<label>密码</label>
+						<input id="login-password-input-id" type="password"
+							value="111111" placeholder="请输入密码">
+					</div>
+					<div class="mui-button-row" style="margin-top: 20px;">
+						<button id="login-login-btn-id" class="mui-btn mui-btn-primary" style="width: 80%;" onclick="return false;">登录</button>&nbsp;&nbsp;
+					</div>
+					<div class="mui-button-row" style="margin-top: 20px;">
+						<div class="mui-text-center">
+							<span style="font-size: 0.8em;">还没有账号</span>&nbsp;&nbsp;
+							<a id="login-register-id" onclick="return false;" href="#context-register-id" class="mui-tab-item" style="color:darkred;text-decoration: underline;">去免费注册</a>
+						</div>
+					</div>
+				</form>
+				<script type="text/javascript">
+					/**
+					 * 登录表單中控件的事件注册
+					 */
+					function eventLogin() {
+						var loginBtn = document.getElementById("login-login-btn-id");
+						var usernameBtn = document.getElementById("login-username-input-id");
+						var passwordBtn = document.getElementById("login-password-input-id");
+						loginBtn.addEventListener('tap', function() {
+							if (!toastNetworkInfo("网络异常,请检查")) {
+								return;
+							}
+							var username = usernameBtn.value;
+							var password = passwordBtn.value;
+							if (username.length == 0) {
+								mui.toast('请输入手机号码');
+								return false;
+							}
+							if (username.length != 11) {
+								mui.toast('请输入有效的手机号码');
+								return false;
+							}
+							if (!myreg.test(username)) {
+								mui.toast('请输入有效的手机号码');
+								return false;
+							}
+							if (password.length == 0) {
+								mui.toast('请输入密码');
+								return;
+							}
+							mui.ajax(Routes.urls.user.login, {
+								data: {
+									username: username,
+									password: password
+								},
+								dataType: 'json', //服务器返回json格式数据
+								type: 'post', //HTTP请求类型
+								timeout: 10000, //超时时间设置为10秒;
+								success: function(data) {
+									if (data && data.success) {
+										//记录用户登录信息
+										window.localStorage.setItem('isAlreadyLogin', true);
+										window.localStorage.setItem("phone", username);
+										window.localStorage.setItem("password", password);
+										updateUserInfoToLocal();
+										mui.openWindow({
+											id: window.gotoUrl.replace('.html', '') + '-win-' + window.sectionId,
+											url: window.gotoUrl,
+											extras: {
+												title: window.title,
+												chapterTitle: window.title,
+												chapterId: window.chapterId,
+												sectionId: window.sectionId,
+												isFromLoginPage: true,
+												serviceObj: window.serviceObj
+											}
+										});
+									} else {
+										window.localStorage.setItem('isAlreadyLogin', false);
+										mui.toast(data.message);
+									}
+								},
+								error: function() {
+									window.localStorage.setItem('isAlreadyLogin', false);
+									mui.toast("网络异常");
+								}
+							});
+						});
+					};
+				</script>
+			</div>
+
+			<div id="context-register-id" class="mui-control-content">
+				<form class="mui-input-group" style="margin-top: 80px;">
+					<div class="mui-input-row">
+						<label>手机号</label>
+						<input id="register-username-input-id"
+							value="15866668888" type="text" placeholder="请输入手机号码">
+					</div>
+					<div class="mui-button-row" style="margin-top: 10px;margin-bottom: 10px;">
+						<button id="register-send-btn-id" class="mui-btn mui-btn-primary" style="width: 80%;" onclick="return false;">发送验证码</button>
+					</div>
+				</form>
+				<script type="text/javascript">
+					/**
+					 * 注册表單中控件的事件注册
+					 */
+					function evenRegister() {
+						var registerSendBtn = document.getElementById("register-send-btn-id");
+						var usernameInput = document.getElementById("register-username-input-id");
+						registerSendBtn.addEventListener('tap', function() {
+							if (!toastNetworkInfo("网络异常,请检查")) {
+								return;
+							}
+							var username = usernameInput.value;
+							sendCode(username, registerSendBtn, function(data) {
+								mui.openWindow({
+									id: "verifyCode-win",
+									url: "verifyCode.html",
+									waiting: {
+										autoShow: false
+									},
+									extras: {
+										title:window.title,
+										chapterId:window.chapterId,
+										sectionId: window.sectionId,
+										isFromLoginPage: true,
+										serviceObj: window.serviceObj,
+										gotoUrl: window.gotoUrl,
+										isRegister: true,
+										phone: username,
+										code: data
+									}
+								});
+							});
+						});
+					};
+				</script>
+			</div>
+
+			<div id="context-retrieve-id" class="mui-control-content">
+				<form class="mui-input-group" style="margin-top: 80px;">
+					<div class="mui-input-row">
+						<label>手机号</label>
+						<input id="retrieve-username-input-id" type="text" placeholder="请输入手机号码">
+					</div>
+					<div class="mui-button-row" style="margin-top: 10px;margin-bottom: 10px;">
+						<button id="retrieve-send-btn-id" class="mui-btn mui-btn-primary" style="width: 80%;" onclick="return false;">发送验证码</button>
+					</div>
+				</form>
+				<script type="text/javascript">
+					/**
+					 * 找回密码表單中控件的事件注册
+					 */
+					function evenRetrieve() {
+						var retrieveBtn = document.getElementById("retrieve-send-btn-id");
+						var usernameInput = document.getElementById("retrieve-username-input-id");
+						retrieveBtn.addEventListener('tap', function() {
+							if (!toastNetworkInfo("网络异常,请检查")) {
+								return;
+							}
+							var username = usernameInput.value;
+							sendCode(username, retrieveBtn, function(data) {
+//								console.log(data);
+								mui.openWindow({
+									id: "verifyCode-win",
+									url: "verifyCode.html",
+									waiting: {
+										autoShow: false
+									},
+									extras: {
+										title:window.title,
+										chapterId:window.chapterId,
+										sectionId: window.sectionId,
+										isFromLoginPage: true,
+										serviceObj: window.serviceObj,
+										gotoUrl: window.gotoUrl,
+										isRegister: false,
+										phone: username,
+										code: data
+									}
+								});
+							});
+						});
+					};
+				</script>
+			</div>
+
+		</div>
+
+		<script type="text/javascript">
+			/**
+			 * 更新标题
+			 * @param {Object} text
+			 */
+			function updateTitle(text) {
+					document.getElementById("title-id").innerText = text;
+				}
+				/**
+				 * 显示div:注册、登录、找回密码
+				 * @param {Object} contextId
+				 */
+
+			function showContextDiv(contextId) {
+					var allDiv = document.getElementsByClassName('mui-control-content');
+					for (var i = 0; i < allDiv.length; i++) {
+						var contextDiv = allDiv[i];
+						contextDiv.classList.remove('mui-active');
+					}
+					document.getElementById(contextId).classList.add('mui-active');
+				}
+				/**
+				 * 点击忘记密码
+				 */
+
+			function eventRetrievePwdBtn() {
+					document.getElementById("retrieve-password-id")
+						.addEventListener("tap", function(evt) {
+							updateTitle('忘记密码');
+							mui.back = function() {
+								showContextDiv('context-login-id');
+								mui.back = old_back;
+								evt.target.style.display = 'block';
+								updateTitle('登录');
+							};
+							evt.target.style.display = 'none';
+						});
+				}
+				/**
+				 * 点击注册
+				 */
+
+			function eventRegisterBtn() {
+				document.getElementById("login-register-id")
+					.addEventListener('tap', function(evt) {
+						updateTitle('注册');
+						document.getElementById("retrieve-password-id").style.display = 'none';
+						mui.back = function() {
+							showContextDiv('context-login-id');
+							mui.back = old_back;
+							document.getElementById("retrieve-password-id").style.display = 'block';
+							updateTitle('登录');
+						};
+					});
+			}
+
+			function ajaxErrorHandler(xhr, type, errorThrown) {
+				//异常处理;
+				console.error(type);
+			}
+			mui.plusReady(function() {
+				var self = plus.webview.currentWebview();
+				window.sectionId = self.sectionId;
+				window.chapterId = self.chapterId;
+				window.gotoUrl = self.gotoUrl;
+				window.serviceObj = self.serviceObj;
+				window.title = self.title;
+				// ------------------------ form表单事件处理
+				eventLogin();
+				evenRegister();
+				evenRetrieve();
+				// ------------------------- 视图跳转事件处理
+				eventRetrievePwdBtn(); //找回密码按钮事件
+				eventRegisterBtn(); // 注册按钮事件
+			});
+			 // H5 plus事件处理
+			function showImm() {
+				var Context = plus.android.importClass("android.content.Context");
+				var InputMethodManager = plus.android.importClass("android.view.inputmethod.InputMethodManager");
+				var main = plus.android.runtimeMainActivity();
+				var imm = main.getSystemService(Context.INPUT_METHOD_SERVICE);
+				imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
+			}
+			document.addEventListener("plusready", showImm, false);
+			var old_back = mui.back;
+			mui.back = function() {
+//				console.log(old_back)
+				old_back();
+			};
+			var myreg = /^(13|14|15|18)\d{9}$/;
+		</script>
+	</body>
+
+</html>

+ 62 - 0
app/msg-center.html

@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<title></title>
+		<meta charset="utf-8">
+		<title>会计自学</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+
+		<link rel="stylesheet" href="../css/mui.min.css">
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/app.js"></script>
+		<script src="../js/service.js"></script>
+
+	</head>
+
+	<body>
+
+		<header class="mui-bar mui-bar-nav">
+			<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
+			<h1 class="mui-title">消息中心</h1>
+		</header>
+		<div class="mui-content">
+			<ul class="mui-table-view" id="list">
+			</ul>
+		</div>
+		<script type="text/html" id="template-message-id">
+			<li class="mui-table-view-cell">
+				<div>
+					{title}
+					<span class="mui-pull-right mui-h5">{datetime}</span>
+				</div>
+				<p>{content}</p>
+			</li>
+		</script>
+		<script type="text/javascript">
+			function initDom() {
+				var list = document.getElementById("list");
+				list.innerHTML = '';
+				var messageTemplate = document.getElementById("template-message-id").innerHTML;
+				queryAllMessage(function(rows) {
+					var htmlStr = '';
+					for (var i = 0; i < rows.length; i++) {
+						htmlStr += render(messageTemplate, rows[i]);
+					}
+					if(rows.length<1){
+						list.innerHTML = "<li><div style='text-align: center;color: lightgray;'>还没有消息</div></li>";
+					}else{
+						list.innerHTML = htmlStr;
+					}
+				});
+			}
+			mui.init();
+			mui.plusReady(function() {
+				initDom();
+			});
+		</script>
+	</body>
+
+</html>

+ 103 - 0
app/note.html

@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+		<link rel="stylesheet" href="../css/iconfont.css">
+		<link rel="stylesheet" href="../css/mui.min.css">
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/app.js"></script>
+		<script src="../js/service.js"></script>
+		<style>
+			html,
+			body {
+				background-color: #efeff4;
+			}
+			/*按钮样式*/
+.my-botton-demo{width:200px; height:60px;float:right;}
+.button {
+	display: inline-block;
+	outline: none;
+	cursor: pointer;
+	text-align: center;
+	text-decoration: none;
+	font: 12px/100% 'Microsoft yahei',Arial, Helvetica, sans-serif;
+	padding: .5em 2em .55em;
+	text-shadow: 0 1px 1px rgba(0,0,0,.3);
+	-webkit-border-radius: .5em; 
+	-moz-border-radius: .5em;
+	border-radius: .5em;
+	-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.2);
+	-moz-box-shadow: 0 1px 2px rgba(0,0,0,.2);
+	box-shadow: 0 1px 2px rgba(0,0,0,.2);
+	float:right;
+}
+.button:hover {
+	text-decoration: none;
+}
+.button:active {
+	position: relative;
+	top: 1px;
+}
+.bigrounded {
+	-webkit-border-radius: 2em;
+	-moz-border-radius: 2em;
+	border-radius: 2em;
+}
+/* green */
+.green {
+	color: #e8f0de;
+	border: solid 1px #538312;
+	background: #64991e;
+	background: -webkit-gradient(linear, left top, left bottom, from(#7db72f), to(#4e7d0e));
+	background: -moz-linear-gradient(top,  #7db72f,  #4e7d0e);
+	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#7db72f', endColorstr='#4e7d0e');
+}
+.green:hover {
+	background: #538018;
+	background: -webkit-gradient(linear, left top, left bottom, from(#6b9d28), to(#436b0c));
+	background: -moz-linear-gradient(top,  #6b9d28,  #436b0c);
+	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#6b9d28', endColorstr='#436b0c');
+}
+.green:active {
+	color: #a9c08c;
+	background: -webkit-gradient(linear, left top, left bottom, from(#4e7d0e), to(#7db72f));
+	background: -moz-linear-gradient(top,  #4e7d0e,  #7db72f);
+	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#4e7d0e', endColorstr='#7db72f');
+}
+/*定义文本框样式*/
+.my-textarea-note {
+	width:100%;
+	height:500px;
+}
+</style>
+</head>
+		</style>
+	</head>
+	<body>
+		<header class="mui-bar mui-bar-nav">
+			<a id="back" class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
+			<h1 id="title" class="mui-title">笔&nbsp;&nbsp;&nbsp;&nbsp;记</h1>
+		</header>
+		
+		<div  class="mui-content">
+			<div style="padding:20px;">
+				<textarea class="my-textarea-note"></textarea>
+				 <div class="my-botton-demo">
+				 		<a href="#" class="button green">新建</a> 
+				 		<a href="#" class="button green" style="margin-right:15%;">修改</a> 
+	</div>
+			</div>
+		</div>
+		<script>
+			mui.plusReady(function() {
+				var self = plus.webview.currentWebview();
+				
+			});
+		</script>
+	</body>
+
+</html>

+ 138 - 0
app/personal-info.html

@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+		<title></title>
+		<script src="../js/mui.min.js"></script>
+		<script type="text/javascript" src="../js/common.js"></script>
+		<script src="../js/routes.js"></script>
+		<link href="../css/mui.min.css" rel="stylesheet" />
+		<style>
+			.mui-input-row {
+				padding-top: 9px !important;
+				height: 50px !important;
+			}
+			.mui-input-row:after {
+				right: 15px !important;
+			}
+			.my-picture {
+				height: 100px !important;
+			}
+			.my-radio {
+				height: 30px;
+				padding: 11px 15px;
+				overflow: hidden;
+				position: relative;
+			}
+			.my-span {
+				position: relative;
+			}
+			label {
+				width: 30% !important;
+			}
+			.my-mui-input-row:after {
+				height: 0px !important;
+			}
+		</style>
+	</head>
+
+	<body>
+		<header class="mui-bar mui-bar-nav">
+			<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
+			<h1 id="title-id" class="mui-title">个人信息完善</h1>
+		</header>
+		<div class="mui-content">
+			<form id="info-form" class="mui-input-group" style="padding-top: 40px;">
+				<div class="mui-input-row">
+					<label>姓名</label>
+					<input id="name" name="name" type="text" placeholder="请输入姓名">
+				</div>
+				<div class="mui-input-row">
+					<label>身份证</label>
+					<input id="code" name="code" type="text" placeholder="请输入身份证号">
+				</div>
+				<div class="mui-button-row" style="margin-top: 20px;padding-bottom: 30px;height: 50px !important;">
+					<button type="button" id="sign-up-btn-id" class="mui-btn mui-btn-primary" style="width: 80%;" onclick="return false;">保存</button>&nbsp;&nbsp;
+				</div>
+			</form>
+		</div>
+		<script type="text/javascript">
+			 //报名
+			function baoming() {
+					var _name = document.getElementById('name').value.replace(/\s+/g, "");
+					if (_name.length == 0) {
+						mui.toast('请输入姓名');
+						return;
+					}
+					var code = document.getElementById('code').value.replace(/\s+/g, "");
+					var reg = new RegExp("^[1-9]([0-9]{16}|[0-9]{13})[xX0-9]$");
+					if (code.length == 0) {
+						mui.toast('请输入身份证');
+						return;
+					}
+//					if (!reg.test(code)) {
+//						mui.toast('请输入正确的身份证');
+//						return;
+//					}
+					var url = Routes.urls.user.completeUserInfo;
+					var param = {
+						data: {
+							username: _name,
+							idcard: code,
+							phone: window.phone,
+							id:window.localStorage.getItem('userId')
+						},
+						dataType: 'json', //服务器返回json格式数据
+						type: 'post', //HTTP请求类型
+						timeout: 10000, //超时时间设置为10秒;
+						success: function(data) {
+							if (data && data.success) {
+								mui.toast('更新完成');
+								window.localStorage.setItem('username', _name);
+								window.localStorage.setItem('idcard', code);
+								mui.back();
+							} else {
+								if (data.message) {
+									mui.toast(data.message);
+								} else {
+									mui.toast("系统繁忙,请稍候再试");
+								}
+							}
+						},
+						error: function(xhr, type, errorThrown) {
+							mui.toast("网络异常");
+						}
+					};
+					console.log(JSON.stringify(param))
+					mui.ajax(url, param);
+				}
+				/**
+				 *	加载用户详细信息
+				 */
+
+			function loadUserInfo() {
+				var _userName = window.localStorage.getItem('username');
+				var idcard = window.localStorage.getItem('idcard');
+				if (_userName != "undefined") {
+					document.getElementById('name').value = _userName;
+					document.getElementById("code").value = idcard;
+				}
+			}
+			mui.init();
+			mui.plusReady(function() {
+				window.phone = window.localStorage.getItem('phone');
+				toastNetworkInfo("网络异常,请检查");
+				loadUserInfo();
+				document.getElementById("sign-up-btn-id").addEventListener('tap', function() {
+					var result = toastNetworkInfo("网络异常,请检查");
+					if (result) {
+						baoming();
+					}
+				});
+			});
+		</script>
+	</body>
+
+</html>

+ 238 - 0
app/personal.html

@@ -0,0 +1,238 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title>Hello MUI</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/app.js"></script>
+		<link rel="stylesheet" href="../css/mui.min.css">
+		<style>
+			html,
+			body {
+				background-color: #efeff4;
+			}
+			.mui-bar-nav~.mui-content {
+				padding: 0;
+			}
+			.my-footer {
+				height: 100px;
+				position: fixed;
+				bottom: 0;
+				padding-left: 30px;
+				padding-right: 30px;
+				right: 0;
+				left: 0;
+				z-index: 10;
+			}
+			.my-mui-media-body {
+				font-size: 20px !important;
+				height: 35px !important;
+				line-height: 25px !important;
+				position: absolute;
+				top: 130px;
+				left: 130px;
+			}
+			.my-mui-grid-9 {
+				margin-top: 20px !important;
+				background-color: whitesmoke!important;
+			}
+			/*个人中心带底图的块*/
+			
+			.my-person-header {
+				width: 100%;
+			}
+			/*按钮的样式*/
+			
+			.my-baoming {
+				position: absolute;
+				top: 200px;
+				right: 40px;
+				font-size: 14px;
+			}
+			.my-baoming span {
+				color: #00cc00;
+			}
+			.button {
+				display: inline-block;
+				outline: none;
+				cursor: pointer;
+				text-align: center;
+				text-decoration: none;
+				font: 14px 'Microsoft yahei', Arial, Helvetica, sans-serif;
+				padding: 0.2em 2em;
+				text-shadow: 0 1px 1px rgba(0, 0, 0, .3);
+				-webkit-border-radius: .5em;
+				-moz-border-radius: .5em;
+				border-radius: .5em;
+				-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .2);
+				-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, .2);
+				box-shadow: 0 1px 2px rgba(0, 0, 0, .2);
+				float: right;
+			}
+			.button:hover {
+				text-decoration: none;
+			}
+			.button:active {
+				position: relative;
+				top: 1px;
+			}
+			/* 深绿色按钮的样式 */
+			
+			.deepgreen {
+				color: white;
+				line-height: 30px;
+				background: #113f4a;
+				text-align: center;
+				background: -webkit-gradient(linear, left top, left bottom, from(#2e5e6a), to(#113f4a));
+				background: -moz-linear-gradient(top, #00adee, #0078a5);
+				filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#00adee', endColorstr='#0078a5');
+			}
+			.deepgreen:hover {
+				background: #d21910;
+				background: -webkit-gradient(linear, left top, left bottom, from(#de5852), to(#d21910));
+				background: -moz-linear-gradient(top, #0095cc, #00678e);
+				filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#0095cc', endColorstr='#00678e');
+			}
+		</style>
+
+	</head>
+
+	<body>
+		<header class="mui-bar mui-bar-nav">
+			<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
+			<h1 class="mui-title">个人中心</h1>
+		</header>
+		<div class="mui-content">
+			<img src="../images/person/person-header-tu.jpg" width="100%" height="auto" />
+			<div class="my-mui-media-body">账号:
+				<a id="personal-id" href="javascript:;"></a>
+			</div>
+			<!--<div class="my-baoming">
+				<a href="javascript:;" class="button deepgreen">报名入口</a>
+			</div>-->
+			<div class="my-baoming">
+				已用时长:<span id="all-time-id"></span>&nbsp;&nbsp; 可用学时:
+				<span id="available-time-id"></span>
+			</div>
+			<ul class="my-mui-grid-9 mui-table-view mui-grid-view mui-grid-9">
+				<li class="mui-table-view-cell mui-media mui-col-xs-6 mui-col-sm-3">
+					<a href="javascript:;" id="xitongshezhi-id">
+						<img src="../images/person/my-person-xitongshezhi.png" style="width: 100%;height: auto;" />
+						<div class="mui-media-body">系统设置</div>
+					</a>
+				</li>
+				<li class="mui-table-view-cell mui-media mui-col-xs-6 mui-col-sm-3">
+					<a href="javascript:;" id="xiaoxizhongxin-id">
+						<img src="../images/person/my-person-xiaoxi.png" style="width: 100%;height: auto;" />
+						<div class="mui-media-body">消息中心</div>
+					</a>
+				</li>
+			</ul>
+			<div id="tuichu-id" style="margin: 0px 20%;margin-top: 20px;">
+				<a class="mui-btn mui-btn-block mui-btn-primary" style="font-size: 22px;padding: 5px 0px;">
+					退出账号
+				</a>
+			</div>
+			<script type="text/javascript">
+				/**
+				 * 点击账号跳转补充完善用户信息
+				 */
+				function personalInfoEvent() {
+						document.getElementById("personal-id").addEventListener('tap', function() {
+							mui.openWindow({
+								id: 'personalInfo-win',
+								url: 'personal-info.html'
+							})
+						})
+					}
+					/**
+					 * 设置用户账号信息
+					 */
+
+				function setAccount() {
+						var isAlreadyLogin = window.localStorage.getItem('isAlreadyLogin');
+						var phone = window.localStorage.getItem('phone');
+						if (isAlreadyLogin) {
+							var personal = document.getElementById("personal-id");
+							personal.innerHTML = phone;
+						}
+					}
+					/**
+					 * 退出登录状态
+					 */
+
+				function tuichuEvent() {
+						document.getElementById("tuichu-id").addEventListener('tap', function() {
+							var btnArray = ['是', '否'];
+							mui.confirm('确定要注销登录吗?', '', btnArray, function(e) {
+								if (e.index == 0) {
+									window.localStorage.setItem('isAlreadyLogin', false);
+									window.localStorage.setItem('phone', '');
+									mui.openWindow({
+										id: 'dragIndex-win',
+										url: '../dragIndex.html',
+										waiting: {
+											autoShow: false
+										}
+									});
+								};
+							});
+						});
+					}
+					/**
+					 * 点击消息中心
+					 */
+
+				function xiaoxizhongxinEvent() {
+						document.getElementById("xiaoxizhongxin-id").addEventListener('tap', function() {
+							mui.openWindow({
+								id: 'msg-center-win',
+								url: 'msg-center.html',
+								waiting: {
+									autoShow: false
+								}
+							});
+						})
+					}
+					/**
+					 * 点击设置
+					 */
+
+				function xitongshezhiEvent() {
+						document.getElementById("xitongshezhi-id").addEventListener('tap', function() {
+							mui.openWindow({
+								id: 'seting-win',
+								url: 'seting.html',
+								waiting: {
+									autoShow: false
+								}
+							});
+						});
+					}
+					/**
+					 * 设置学习时长
+					 */
+
+				function setTimeEvent() {
+				
+					document.getElementById("all-time-id").innerText = getRemainTime() +'分钟';
+					document.getElementById("available-time-id").innerText = getAvaliableTime() +'分钟';
+				}
+				mui.init();
+				mui.plusReady(function() {
+					setAccount();
+					tuichuEvent();
+					xiaoxizhongxinEvent();
+					xitongshezhiEvent();
+					personalInfoEvent();
+					setTimeEvent();
+				});
+			</script>
+	</body>
+
+</html>

+ 364 - 0
app/question.html

@@ -0,0 +1,364 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title>exam</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+		<link rel="stylesheet" href="../css/iconfont.css">
+		<link rel="stylesheet" href="../css/mui.min.css">
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/routes.js"></script>
+		<script src="../js/app.js"></script>
+		<script src="../js/des.js"></script>
+		<script src="../js/service.js"></script>
+		<style>
+			html,
+			body {
+				background-color: #efeff4;
+			}
+			.youbar {
+				margin-right: 40px !important;
+			}
+		</style>
+
+	</head>
+
+	<body>
+		<header class="mui-bar mui-bar-nav">
+			<a id="back" class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
+			<a id="dati" data-section-id='' data-name="答题卡" data-href="card.html" class="youbar mui-pull-right">
+				<i class="mui-icon icon iconfont icon-24"></i>
+			</a>
+			<a id="shoucang" data-section-id='' data-name="收藏本" data-href='' class="youbar mui-pull-right">
+				<i class="mui-icon icon iconfont icon-shoucang2"></i>
+			</a>
+			<h1 id="title" class="mui-title"></h1>
+		</header>
+		<footer class="mui-bar mui-bar-footer">
+			<ul class="mui-pager" style="margin-top: 5px;">
+				<li id="pre-id" class="mui-disabled">
+					<a> &nbsp;&nbsp;上&nbsp;&nbsp;一&nbsp;&nbsp;题&nbsp;&nbsp; </a>
+				</li>
+				<li id="next-id" style="margin-left: 50px;">
+					<a> &nbsp;&nbsp;下&nbsp;&nbsp;一&nbsp;&nbsp;题&nbsp;&nbsp; </a>
+				</li>
+			</ul>
+		</footer>
+		<div class="mui-content" id="my-content-id">
+			<div class="my-pagination" style="margin-top: 20px;" id="list">
+				<ul class="mui-table-view">
+					<li class="mui-table-view-cell mui-media">
+						<div class="mui-media-body" style="text-align: center;">
+							<p class='mui-ellipsis' style="">正在加载数据</p>
+						</div>
+					</li>
+				</ul>
+			</div>
+
+		</div>
+		<script type="text/html" id="template-question-id">
+			<li class="mui-table-view-cell">
+				<b style="color: blue;">{indexed}/{pageSize}({type})</b>: {name}
+			</li>
+		</script>
+		<script type="text/html" id="template-option-id">
+			<li class="mui-table-view-cell mui-{inputType} mui-left my-auto-next">
+				<input class="question" name="{inputName}" type="{inputType}" data-checked="false" {checked} data-label="{label}">{label}:{name}
+			</li>
+		</script>
+		<script type="text/html" id="template-option-disable-id">
+			<li class="mui-table-view-cell mui-{inputType} mui-left my-auto-next">
+				<input class="question" name="{inputName}" type="{inputType}" disabled data-checked="false" {checked} data-label="{label}">{label}:{name}
+			</li>
+		</script>
+		<script type="text/html" id="template-resolution-id">
+			<li class="mui-table-view-cell my-table-cell-jiexi">解析:</li>
+			<li class="mui-table-view-cell">{name}</li>
+		</script>
+		<script type="text/html" id="template-correct-id">
+
+			<li class="mui-table-view-cell" style="color: {isOkStyle};">你的答案:{userAnswer},正确答案:{questionAnswer}</li>
+		</script>
+		<script type="text/html" id="template-material-id">
+			<li class="mui-table-view-cell">{name}</li>
+		</script>
+		<script type="text/html" id="template-fanyi-id">
+			<li class="mui-table-view-cell">{fanyi}</li>
+		</script>
+		<script>
+			function autoNextEvent() {
+				mui('#list').on('tap', '.my-auto-next', function() {
+					var self = this;
+					var timeout = setTimeout(function() {
+						var inputType = self.children[0].getAttribute('type');
+						if (inputType == 'radio') {
+							next();
+						}
+						clearTimeout(timeout);
+					}, 500);
+				});
+			}
+
+			function preAndNextEvent() {
+				var preDom = document.getElementById("pre-id");
+				preDom.addEventListener('tap', function() {
+					prev();
+				});
+				var nextDom = document.getElementById("next-id");
+				nextDom.addEventListener('tap', function() {
+					next();
+				});
+			}
+			var childPagination = null;
+
+			function hideAll() {
+				for (var i = 0; i < childPagination.length; i++) {
+					var child = childPagination[i];
+					child.style.display = 'none';
+				}
+			}
+
+			function showFirst() {
+				childPagination[0].style.display = 'block';
+			}
+			window.currentNo = 0;
+
+			function show(idx) {
+				hideAll();
+				window.currentNo = idx;
+				for (var i = 0; i < childPagination.length; i++) {
+					if (i == idx) {
+						var child = childPagination[i];
+						child.style.display = 'block';
+					}
+				}
+				if (window.currentNo == 0) {
+					document.getElementById("pre-id").classList.add('mui-disabled');
+				} else {
+					document.getElementById("pre-id").classList.remove('mui-disabled');
+				}
+				if (window.currentNo == (childPagination.length - 1)) {
+					if (window._disableSubmit) {
+						document.getElementById("next-id").children[0].innerHTML = '&nbsp;&nbsp;答&nbsp;&nbsp;题&nbsp;&nbsp;卡&nbsp;&nbsp; ';
+					} else {
+						document.getElementById("next-id").children[0].innerHTML = '&nbsp;&nbsp;提&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;交&nbsp;&nbsp;';
+					}
+				} else {
+					document.getElementById("next-id").children[0].innerHTML = '&nbsp;&nbsp;下&nbsp;&nbsp;一&nbsp;&nbsp;题&nbsp;&nbsp; ';
+				}
+			}
+
+			function preBtnEffect() {
+				if (window.currentNo <= 1) {
+					document.getElementById("pre-id").classList.add('mui-disabled');
+				}
+				if (window.currentNo < childPagination.length) {
+					document.getElementById("next-id").children[0].innerHTML = '&nbsp;&nbsp;下&nbsp;&nbsp;一&nbsp;&nbsp;题&nbsp;&nbsp; ';
+				}
+			}
+
+			function nextBtnEffect() {
+				if (window.currentNo >= 0 && (window.serviceObj.questionList.length > 1)) {
+					document.getElementById("pre-id").classList.remove('mui-disabled');
+				}
+				if (window.currentNo >= (childPagination.length - 2)) {
+					document.getElementById("next-id").children[0].innerHTML = '&nbsp;&nbsp;提&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;交&nbsp;&nbsp;';
+				}
+			}
+
+			function prev(event) {
+				preBtnEffect();
+				//				if (Math.abs(event.detail.angle) > 170) {
+				if (window.currentNo) {
+					window.currentNo = window.currentNo - 1;
+					show(window.currentNo);
+					var _self = childPagination[currentNo]
+					var _questionId = _self.getAttribute("data-id");
+					var questionAll = window.serviceObj.getQuestion(_questionId);
+					updateBookmarkIco(questionAll);
+				}
+				//				event.detail.gesture.preventDefault();
+				//				}
+			}
+
+			function next(event) {
+					nextBtnEffect();
+					//				if (Math.abs(event.detail.angle) > 170) {
+					if (window.currentNo < (childPagination.length - 1)) {
+						window.currentNo = window.currentNo + 1;
+						show(window.currentNo);
+						//						grade(window.currentNo); // 下一屏的时候进行判分
+						var _self2 = childPagination[currentNo]
+						var _questionId2 = _self2.getAttribute("data-id");
+						var questionAll = window.serviceObj.getQuestion(_questionId2);
+						updateBookmarkIco(questionAll);
+						//					event.detail.gesture.preventDefault();
+						return false;
+					} else {
+						//					if (window.serviceObj.isAllReply()) {
+						daTiTapHandler.apply(window.datiDom);
+						//					} else {
+						//							var msg = '您还没有完成答题,是否继续答题';
+						//						var btn = ["是", "否"];
+						//						mui.confirm(msg, '', btn, function(e) {
+						//							if (e.index != 0) {
+						//								daTiTapHandler.apply(window.datiDom);
+						//							}
+						//						});
+						//					}
+						//					event.detail.gesture.preventDefault();
+						return true;
+					}
+					//				}
+				}
+				//			var myContentDom = document.getElementById("my-content-id");
+			window.addEventListener("swiperight", prev);
+			window.addEventListener("swipeleft", next);
+			/**
+			 * 判分、错题
+			 * @param {Object} currentNo
+			 */
+			function grade() {
+				var userResult = [];
+				for (var i = 0; i < childPagination.length; i++) {
+					var _questionDiv = childPagination[i];
+					var _questionId = _questionDiv.getAttribute("data-id");
+					var inputs = _questionDiv.children[0].getElementsByClassName('question');
+					var userAnswerList = [];
+					for (var k = 0; k < inputs.length; k++) {
+						var option = inputs[k];
+						if (option.checked) {
+							userAnswerList.push(option.getAttribute("data-label"));
+						}
+					}
+					userResult.push({
+						questionId: _questionId,
+						userAnswerList: userAnswerList
+					});
+				}
+				window.serviceObj.grade(userResult);
+			}
+
+			function daTiTapHandler() {
+					grade();
+					var href = this.getAttribute("data-href");
+					var name = this.getAttribute("data-name");
+					var sectionId = this.getAttribute("data-section-id");
+					var questionList = window.serviceObj.questionList;
+					for (var i = 0; i < questionList.length; i++) {
+						var questionAll = questionList[i];
+					}
+					mui.openWindow({
+						id: 'card-win-' + sectionId,
+						url: href,
+						extras: {
+							name: name,
+							sectionId: sectionId,
+							chapterId: window.chapterId,
+							serviceObj: window.serviceObj,
+							disableSubmit: window._disableSubmit
+						}
+					})
+				}
+				//点击答题卡,打开答题卡页面
+
+			function openSheetEvent() {
+					document.getElementById('dati').addEventListener('tap', daTiTapHandler);
+				}
+				//更新收藏图标,显示当前题是否被收藏
+
+			function updateBookmarkIco(questionAll) {
+					var questionId = questionAll.question.id;
+					var hasCollect = questionAll.hasCollect;
+					var shoucangDom = document.getElementById("shoucang");
+					shoucangDom.setAttribute("data-question-id", questionId);
+					if (hasCollect) {
+						shoucangDom.style.color = "red";
+					} else {
+						shoucangDom.style.color = "white";
+					}
+				}
+				//点击收藏,收藏此试题
+
+			function collectEvent() {
+					document.getElementById('shoucang').addEventListener('tap', function() {
+						var _questionId = this.getAttribute('data-question-id');
+						var questionAll = window.serviceObj.getQuestion(_questionId);
+						if (questionAll.hasCollect) {
+							mui.toast('已取消收藏');
+						} else {
+							mui.toast('已添加收藏');
+						}
+						window.serviceObj.updateBookMark(questionAll);
+						updateBookmarkIco(questionAll);
+					});
+				}
+				/**
+				 * 元数据配置
+				 */
+			var questionMetadata = {
+				'单选题': ["materialName", "question", "option"],
+				'填空题': ["materialName", "question", "option"],
+				'英译汉': ["question", "resolution"],
+				'作文': ["question", "materialName"]
+			};
+
+			function myOnReady(sectionId) {
+				//获取节下的所有试题
+				queryQuestionAll(sectionId, function(all) {}, function(serviceObj) {
+					window.serviceObj = serviceObj;
+					initDom();
+					childPagination = document.getElementsByClassName("my-pagination")[0].children;
+					hideAll();
+					showFirst();
+					updateBookmarkIco(window.serviceObj.questionList[0]);
+					openSheetEvent();
+					collectEvent();
+					autoNextEvent();
+					preAndNextEvent();
+					//					document.getElementById("pre-id").classList.add('mui-disabled');
+					if (window.serviceObj.questionList.length <= 1) {
+						//						document.getElementById("next-id").children[0].innerHTML = '&nbsp;&nbsp;提&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;交&nbsp;&nbsp;';
+						if (window._disableSubmit) {
+							document.getElementById("next-id").children[0].innerHTML = '&nbsp;&nbsp;答&nbsp;&nbsp;题&nbsp;&nbsp;卡&nbsp;&nbsp; ';
+						} else {
+							document.getElementById("next-id").children[0].innerHTML = '&nbsp;&nbsp;提&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;交&nbsp;&nbsp;';
+						}
+					}
+				});
+			}
+			mui.plusReady(function() {
+				var self = plus.webview.currentWebview();
+				var sectionId = self.sectionId;
+				window.chapterId = self.chapterId
+					// 设置答题卡按钮的参数,答题卡页面用
+				window.datiDom = document.getElementById('dati');
+				datiDom.setAttribute("data-section-id", sectionId);
+				myOnReady(sectionId);
+			});
+			var old_back = mui.back;
+			mui.back = function() {
+				var btn = ["退出", "取消"];
+				mui.confirm('您还未提交答案,是否要坚持退出?退出后答题记录将不予保留。', '', btn, function(e) {
+					if (e.index == 0) {
+						var self = plus.webview.currentWebview();
+						self.opener().evalJS('initDom();');
+						//执行mui封装好的窗口关闭逻辑;
+						old_back();
+					}
+				});
+			}
+			mui.myBack = function() {
+				var self = plus.webview.currentWebview();
+				self.opener().evalJS('initDom();');
+				//执行mui封装好的窗口关闭逻辑;
+				old_back();
+			}
+		</script>
+
+	</body>
+
+</html>

+ 286 - 0
app/resolution.html

@@ -0,0 +1,286 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title>exam</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+		<link rel="stylesheet" href="../css/iconfont.css">
+		<link rel="stylesheet" href="../css/mui.min.css">
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/app.js"></script>
+		<script src="../js/service.js"></script>
+		<style>
+			html,
+			body {
+				background-color: #efeff4;
+			}
+			.my-shouceng-pos {
+				margin-right: 15px !important;
+			}
+			.my-biji-pos {
+				margin-right: 30px !important;
+			}
+			.my-table-cell-jiexi:after {
+				content: "" !important;
+				background-color: white !important;
+			}
+			.my-table-cell-jiexi21:before {
+				position: absolute;
+				right: 0;
+				top: 0;
+				left: 15px;
+				height: 1px;
+				content: '';
+				background-color: #c8c7cc !important;
+			}
+		</style>
+	</head>
+
+	<body>
+		<header class="mui-bar mui-bar-nav">
+			<a id="back" class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
+			<a id="shoucang" data-section-id="" data-name="收藏本" data-href="" class="my-shouceng-pos mui-pull-right">
+				<i class="mui-icon icon iconfont icon-shoucang2"></i>
+			</a>
+			<a id="biji" data-section-id="" data-name="笔记" data-href="" class="my-biji-pos mui-pull-right">
+				<span class="mui-icon mui-icon-compose"></span>
+			</a>
+			<h1 id="title" class="mui-title">试题解析</h1>
+		</header>
+		<footer class="mui-bar mui-bar-footer">
+			<ul class="mui-pager" style="margin-top: 5px;">
+				<li id="pre-id" class="mui-disabled">
+					<a> &nbsp;&nbsp;上&nbsp;&nbsp;一&nbsp;&nbsp;题&nbsp;&nbsp; </a>
+				</li>
+				<li id="next-id" style="margin-left: 50px;">
+					<a> &nbsp;&nbsp;下&nbsp;&nbsp;一&nbsp;&nbsp;题&nbsp;&nbsp; </a>
+				</li>
+			</ul>
+		</footer>
+		<div class="mui-content">
+			<div class="my-pagination" style="margin-top: 20px;margin-bottom: 20px;" id="list">
+			</div>
+		</div>
+		<script type="text/html" id="template-question-id">
+			<li class="mui-table-view-cell">
+				<b style="color: blue;">{indexed}/{pageSize}({type})</b>: {name}
+			</li>
+		</script>
+		<script type="text/html" id="template-option-id">
+			<li class="mui-table-view-cell mui-{inputType} mui-left">
+				<input class="question" name="{inputName}" type="{inputType}" disabled data-checked="false" {checked} data-label="{label}">{label}:{name}
+			</li>
+		</script>
+		<script type="text/html" id="template-resolution-id">
+			<li class="mui-table-view-cell my-table-cell-jiexi">解析:</li>
+			<li class="mui-table-view-cell">{name}</li>
+		</script>
+		<script type="text/html" id="template-correct-id">
+			<li class="mui-table-view-cell" style="color: {isOkStyle};">你的答案:{userAnswer},正确答案:{questionAnswer}</li>
+		</script>
+		<script type="text/html" id="template-material-id">
+			<li class="mui-table-view-cell">{name}</li>
+		</script>
+		<script type="text/html" id="template-fanyi-id">
+			<li class="mui-table-view-cell">{fanyi}</li>
+		</script>
+		<script>
+			function preAndNextEvent() {
+				var preDom = document.getElementById("pre-id");
+				preDom.addEventListener('tap', function() {
+					prev();
+				});
+				var nextDom = document.getElementById("next-id");
+				nextDom.addEventListener('tap', function() {
+					next();
+				});
+			}
+			var childPagination = null;
+
+			function hideAll() {
+				for (var i = 0; i < childPagination.length; i++) {
+					var child = childPagination[i];
+					child.style.display = 'none';
+				}
+			}
+
+			function showFirst() {
+				childPagination[0].style.display = 'block';
+			}
+			window.currentNo = 0;
+
+			function show(idx) {
+				hideAll();
+				window.currentNo = idx;
+				for (var i = 0; i < childPagination.length; i++) {
+					if (i == idx) {
+						var child = childPagination[i];
+						child.style.display = 'block';
+					}
+				}
+				if (window.currentNo == 0) {
+					document.getElementById("pre-id").classList.add('mui-disabled');
+				} else {
+					document.getElementById("pre-id").classList.remove('mui-disabled');
+				}
+				if (window.currentNo == (childPagination.length - 1)) {
+					document.getElementById("next-id").classList.add('mui-disabled');
+				} else {
+					document.getElementById("next-id").classList.remove('mui-disabled');
+				}
+			}
+
+			function preBtnEffect() {
+				if (window.currentNo <= 1) {
+					document.getElementById("pre-id").classList.add('mui-disabled');
+				}
+				if (window.currentNo < childPagination.length) {
+					document.getElementById("next-id").classList.remove('mui-disabled');
+				}
+			}
+
+			function nextBtnEffect() {
+				if (window.currentNo >= 0) {
+					document.getElementById("pre-id").classList.remove('mui-disabled');
+				}
+				if (window.currentNo >= (childPagination.length - 2)) {
+					document.getElementById("next-id").classList.add('mui-disabled');
+				}
+			}
+
+			function prev() {
+				preBtnEffect();
+				if (window.currentNo) {
+					window.currentNo = window.currentNo - 1;
+					show(window.currentNo);
+					var _self = childPagination[currentNo]
+					var _questionId = _self.getAttribute("data-id");
+					var questionAll = window.serviceObj.getQuestion(_questionId);
+					updateBookmarkIco(questionAll);
+					updateNoteIco(questionAll);
+				}
+			}
+
+			function next() {
+				nextBtnEffect();
+				if (window.currentNo < (childPagination.length - 1)) {
+					window.currentNo = window.currentNo + 1;
+					show(window.currentNo);
+					var _self2 = childPagination[currentNo]
+					var _questionId2 = _self2.getAttribute("data-id");
+					var questionAll = window.serviceObj.getQuestion(_questionId2);
+					updateBookmarkIco(questionAll);
+					updateNoteIco(questionAll);
+					return false;
+				} else {
+					return true;
+				}
+			}
+			window.addEventListener("swiperight", prev);
+			window.addEventListener("swipeleft", next);
+			 //更新收藏图标,显示当前题是否被收藏
+			function updateBookmarkIco(questionAll) {
+					var questionId = questionAll.question.id;
+					var hasCollect = questionAll.hasCollect;
+					var shoucangDom = document.getElementById("shoucang");
+					shoucangDom.setAttribute("data-question-id", questionId);
+					if (hasCollect) {
+						shoucangDom.style.color = "red";
+					} else {
+						shoucangDom.style.color = "white";
+					}
+				}
+			
+			function updateNoteIco(questionAll){
+				var questionId = questionAll.question.id;
+				var bijiDom = document.getElementById("biji");
+				bijiDom.setAttribute('data-question-id',questionId);
+			}
+				//点击收藏,收藏此试题
+
+			function collectEvent() {
+					document.getElementById('shoucang').addEventListener('tap', function() {
+						var _questionId = this.getAttribute('data-question-id');
+						var questionAll = window.serviceObj.getQuestion(_questionId);
+						if (questionAll.hasCollect) {
+							mui.toast('已取消收藏');
+						} else {
+							mui.toast('已添加收藏');
+						}
+						window.serviceObj.updateBookMark(questionAll);
+						updateBookmarkIco(questionAll);
+					});
+				}
+				/**
+				 * 元数据配置
+				 */
+			var questionMetadata = {
+				'单选题': ["materialName", "question", "answer", "option", "resolution", "materialFanyi"],
+				'填空题': ["materialName", "question", "answer", "option", "resolution", "materialFanyi"],
+				'英译汉': ["question", "resolution"],
+				'作文': ["question", "materialName"]
+			};
+ 
+			mui.plusReady(function() {
+				var self = plus.webview.currentWebview();
+				window.sectionId = self.sectionId;
+				window.isFromLoginPage = self.isFromLoginPage;
+				window.serviceObj = minix(self.serviceObj);
+				if (window.serviceObj.questionList.length <= 1) {
+					var footer = document.getElementsByTagName("footer")[0];
+					footer.parentElement.removeChild(footer);
+				}
+				initDom();
+				eventBiji();
+				collectEvent();
+				updateBookmarkIco(window.serviceObj.questionList[0]);
+				updateNoteIco(window.serviceObj.questionList[0]);
+				childPagination = document.getElementsByClassName("my-pagination")[0].children;
+				hideAll();
+				showFirst();
+				var indexed = self.indexed; //点击解析上的具体哪个试题获取到的试题的题号
+				if (indexed) {
+					show(indexed - 1);
+				}
+				preAndNextEvent();
+			});
+			var old_back = mui.back;
+			mui.back = function() {
+				if (window.isFromLoginPage) {
+					var wv = plus.webview;
+					var sectionId = window.sectionId;
+					console.log(sectionId);
+					wv.close('login-win-' + sectionId);
+					wv.close('resolution-win-' + sectionId);
+					wv.show('submit-win-' + sectionId);
+				} else {
+					old_back();
+				}
+			};
+			
+			/**
+			 * 给收藏按钮添加事件 
+			 */
+			function eventBiji(){
+				document.getElementById("biji").addEventListener('tap',function(evt){
+					var questionId = this.getAttribute('data-question-id');
+					mui.openWindow({
+						id: 'biji-win-' + questionId,
+						url: 'note.html',
+						waiting: {
+							autoShow: false
+						},
+						extras: {
+							questionId:questionId
+						}
+					});
+				});
+			}
+		</script>
+
+	</body>
+
+</html>

+ 129 - 0
app/review-chapter.html

@@ -0,0 +1,129 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title>Hello MUI</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+
+		<link rel="stylesheet" href="../css/mui.min.css">
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/app.js"></script>
+		<script src="../js/service.js"></script>
+		<style>
+			html,
+			body {
+				background-color: #efeff4;
+			}
+			.mui-ellipsis {
+				font-size: 18px;
+				font-weight: 1000 !important;
+			}
+		</style>
+		<script>
+			 //右上角菜单点击事件(收藏本、错题本)
+			function sectionATapEvent() {
+				mui('#list').on('tap', 'a', function() {
+					var chapterId = this.getAttribute('data-chapter-id');
+					var href = this.getAttribute('data-href');
+					var type = this.getAttribute("data-type");
+					mui.openWindow({
+						id: 'bar-' + chapterId,
+						url: href,
+						waiting: {
+							autoShow: false
+						},
+						extras: {
+							chapterId: chapterId,
+							type: type,
+							barTitle:window.barTitle
+						}
+					})
+				});
+			}
+
+			function updateTitle() {
+				var self = plus.webview.currentWebview();
+				window.barTitle = self.barTitle;
+				if (window.barTitle) {
+					var titleDom = document.getElementById('title');
+					titleDom.innerHTML = window.barTitle;
+				}
+			}
+
+			function initDom() {
+				var courseId = window.courseId;
+				var type = window.type;
+				var scriptCourse = document.getElementById('template-chapter-id');
+				var template = scriptCourse.innerHTML;
+				var ct = document.getElementById('list');
+				ct.innerHTML = '<li class="mui-table-view-cell mui-media">'+
+						'<div class="mui-media-body" style="text-align: center;">'+
+							'<p class="mui-ellipsis" style="">没有数据</p>'+
+						'</div>'+
+					'</li>';
+				queryCourseCount(courseId, type, function(rows) {
+
+					var htmlStr = '';
+					if (rows.length < 1) return;
+					
+					ct.innerHTML = '';
+					for (var i = 0; i < rows.length; i++) {
+						var row = rows[i];
+						row.chapterId = row.code;
+						row.type = type;
+						htmlStr += render(template, row);
+					}
+					ct.innerHTML = htmlStr;
+				});
+			}
+			mui.init();
+
+			mui.plusReady(function() {
+				updateTitle();
+
+				var self = plus.webview.currentWebview();
+				window.courseId = self.courseId;
+				window.type = self.type;
+
+				initDom();
+
+				sectionATapEvent();
+			});
+		</script>
+	</head>
+
+	<body>
+		<header class="mui-bar mui-bar-nav">
+			<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
+			<h1 id="title" class="mui-title">错题本</h1>
+		</header>
+		<div class="mui-content">
+			<br />
+			<p style="text-align: center;display: none;" class="mui-content" id="tishu"></p>
+			<br />
+			<div class="mui-card">
+				<ul class="mui-table-view" id="list">
+					<li class="mui-table-view-cell mui-media">
+						<div class="mui-media-body" style="text-align: center;">
+							<p class='mui-ellipsis' style="">没有数据</p>
+						</div>
+					</li>
+				</ul>
+			</div>
+		</div>
+		<script type="text/html" id="template-chapter-id">
+			<li class="mui-table-view-cell mui-media">
+				<a data-href="review-section.html" data-chapter-id="{chapterId}" data-type="{type}" style="height: 60px;padding-top: 20px;">
+					<span class="mui-pull-right"><span style="color: gray;font-size: 14px;">{count}道</span><span class="mui-icon mui-icon-forward "></span></span>
+					<div class="mui-media-body">
+						<p class='mui-ellipsis' style="">{name}</p>
+					</div>
+				</a>
+			</li>
+		</script>
+	</body>
+
+</html>

+ 282 - 0
app/review-resolution.html

@@ -0,0 +1,282 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title>exam</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+		<link rel="stylesheet" href="../css/iconfont.css">
+		<link rel="stylesheet" href="../css/mui.min.css">
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/app.js"></script>
+		<script src="../js/des.js"></script>
+		<script src="../js/service.js"></script>
+		<style>
+			html,
+			body {
+				background-color: #efeff4;
+			}
+			.youbar {
+				margin-right: 15px !important;
+			}
+		</style>
+
+	</head>
+
+	<body>
+		<header class="mui-bar mui-bar-nav">
+			<a id="back" class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
+			<a id="shoucang" data-section-id='' data-name="收藏本" data-href='' class="youbar mui-pull-right">
+				<i class="mui-icon icon iconfont icon-shoucang2"></i>
+			</a>
+			<h1 id="title" class="mui-title">试题解析</h1>
+		</header>
+		<footer class="mui-bar mui-bar-footer">
+			<ul class="mui-pager" style="margin-top: 5px;">
+				<li id="pre-id" class="mui-disabled">
+					<a> &nbsp;&nbsp;上&nbsp;&nbsp;一&nbsp;&nbsp;题&nbsp;&nbsp; </a>
+				</li>
+				<li id="next-id" style="margin-left: 50px;">
+					<a> &nbsp;&nbsp;下&nbsp;&nbsp;一&nbsp;&nbsp;题&nbsp;&nbsp; </a>
+				</li>
+			</ul>
+		</footer>
+		<div class="mui-content">
+			<div class="my-pagination" style="margin-top: 20px;margin-bottom: 20px;" id="list">
+			</div>
+		</div>
+		<script type="text/html" id="template-question-id">
+			<div class="mui-card duoxuan" data-id="{id}" style="padding-top: 6px;padding-bottom: 6px;display: none;">
+				<ul class="mui-table-view">
+					<li class="mui-table-view-cell">
+						<b style="color: blue;">{indexed}/{pageSize}({type})</b>: {name}
+					</li>
+		</script>
+		<script type="text/html" id="template-option-id">
+			<li class="mui-table-view-cell mui-{inputType} mui-left">
+				<input class="question" name="{inputName}" type="{inputType}" disabled data-checked="false" {checked} data-label="{label}">{label}:{name}
+			</li>
+		</script>
+		<script type="text/html" id="template-resolution-id">
+			<li class="mui-table-view-cell">解析:</li>
+			<li class="mui-table-view-cell">{name}</li>
+		</script>
+		<script type="text/html" id="template-correct-id">
+
+			<li class="mui-table-view-cell" style="color: {isOkStyle};">你的答案:{userAnswer},正确答案:{questionAnswer}</li>
+		</script>
+		<script type="text/html" id="template-material-id">
+			<li class="mui-table-view-cell" style="display: {display};">{name}</li>
+		</script>
+		<script>
+			function preAndNextEvent() {
+				var preDom = document.getElementById("pre-id");
+				preDom.addEventListener('tap', function() {
+					prev();
+				});
+				var nextDom = document.getElementById("next-id");
+				nextDom.addEventListener('tap', function() {
+					next();
+				});
+			}
+			var childPagination = null;
+
+			function hideAll() {
+				for (var i = 0; i < childPagination.length; i++) {
+					var child = childPagination[i];
+					child.style.display = 'none';
+				}
+			}
+
+
+			function showFirst() {
+				childPagination[0].style.display = 'block';
+			}
+
+
+			window.currentNo = 0;
+
+			function show(idx) {
+				hideAll();
+				window.currentNo = idx;
+				for (var i = 0; i < childPagination.length; i++) {
+					if (i == idx) {
+						var child = childPagination[i];
+						child.style.display = 'block';
+					}
+				}
+			}
+
+			function preBtnEffect() {
+				if (window.currentNo <= 1) {
+					document.getElementById("pre-id").classList.add('mui-disabled');
+				}
+				if (window.currentNo < childPagination.length) {
+					document.getElementById("next-id").classList.remove('mui-disabled');
+				}
+			}
+
+			function nextBtnEffect() {
+				if (window.currentNo >= 0) {
+					document.getElementById("pre-id").classList.remove('mui-disabled');
+				}
+				if (window.currentNo >= (childPagination.length - 2)) {
+					document.getElementById("next-id").classList.add('mui-disabled');
+				}
+			}
+
+			function prev() {
+				preBtnEffect();
+				if (window.currentNo) {
+					window.currentNo = window.currentNo - 1;
+					show(window.currentNo);
+					var _self = childPagination[currentNo]
+					var _questionId = _self.getAttribute("data-id");
+					var questionAll = window.serviceObj.getQuestion(_questionId);
+					updateBookmarkIco(questionAll);
+				}
+			}
+
+			function next() {
+				nextBtnEffect();
+				if (window.currentNo < (childPagination.length - 1)) {
+					window.currentNo = window.currentNo + 1;
+					show(window.currentNo);
+
+					var _self2 = childPagination[currentNo]
+					var _questionId2 = _self2.getAttribute("data-id");
+					var questionAll = window.serviceObj.getQuestion(_questionId2);
+					updateBookmarkIco(questionAll);
+					return false;
+				} else {
+					return true;
+				}
+
+			}
+
+			window.addEventListener("swiperight", prev);
+			window.addEventListener("swipeleft", next);
+
+			 //更新收藏图标,显示当前题是否被收藏
+			function updateBookmarkIco(questionAll) {
+				var questionId = questionAll.question.id;
+				var hasCollect = questionAll.hasCollect;
+				var shoucangDom = document.getElementById("shoucang");
+				shoucangDom.setAttribute("data-question-id", questionId);
+				if (hasCollect) {
+					shoucangDom.style.color = "red";
+				} else {
+					shoucangDom.style.color = "white";
+				}
+			}
+
+			 //点击收藏,收藏此试题
+			function collectEvent() {
+				document.getElementById('shoucang').addEventListener('tap', function() {
+					var _questionId = this.getAttribute('data-question-id');
+					var questionAll = window.serviceObj.getQuestion(_questionId);
+					if (questionAll.hasCollect) {
+						mui.toast('已取消收藏');
+					} else {
+						mui.toast('已添加收藏');
+					}
+					window.serviceObj.updateBookMark(questionAll);
+					updateBookmarkIco(questionAll);
+				});
+			}
+
+			function initDom() {
+				var tq = document.getElementById('template-question-id').innerHTML;
+				var to = document.getElementById('template-option-id').innerHTML;
+				var tr = document.getElementById("template-resolution-id").innerHTML;
+				var tc = document.getElementById("template-correct-id").innerHTML;
+				var tm = document.getElementById("template-material-id").innerHTML;
+				
+				var list = document.getElementById('list');
+
+				queryQuestionAllForReview(window.sectionId, window.type, function(all) {
+
+				}, function(serviceObj) {
+					window.serviceObj = minix(serviceObj);
+
+					var tempHtml = '';
+					for (var i = 0; i < window.serviceObj.questionList.length; i++) {
+						var all = window.serviceObj.questionList[i];
+						var htmlStr = '';
+						if (!all.question.isOk) {
+							all.question.isOkStyle = 'red';
+						} else {
+							all.question.isOkStyle = 'green';
+						}
+						if (all.material.id) {
+							all.material.display = 'block';
+						} else {
+							all.material.display = "none";
+						}
+
+						htmlStr += render(tq, all.question);
+						for (var j = 0; j < all.options.length; j++) {
+							var option = all.options[j];
+							if (option.isSelected) {
+								option.checked = 'checked';
+							} else {
+
+							}
+							htmlStr += render(to, option);
+						}
+						htmlStr += render(tc, all.question);
+						htmlStr += render(tm, all.material);
+						htmlStr += render(tr, all.resolution);
+						htmlStr += "</ul></div>";
+						tempHtml += htmlStr;
+					}
+					list.innerHTML = list.innerHTML + tempHtml;
+
+					childPagination = document.getElementsByClassName("my-pagination")[0].children;
+					hideAll();
+					showFirst();
+					var indexed = self.indexed; //点击解析上的具体哪个试题获取到的试题的题号
+					if (indexed) {
+						show(indexed - 1);
+					}
+					preAndNextEvent();
+					updateBookmarkIco(window.serviceObj.questionList[0]);
+					collectEvent();
+					
+					if (window.serviceObj.questionList.length <= 1) {
+						var footer = document.getElementsByTagName("footer")[0];
+						footer.parentElement.removeChild(footer);
+					}
+				})
+
+			}
+
+			function disableBookmarkBtn() {
+				if (window.type == 2) {
+					document.getElementById("shoucang").style.display = 'none';
+				}
+			}
+
+			mui.plusReady(function() {
+				var self = plus.webview.currentWebview();
+
+				window.sectionId = self.sectionId;
+				window.type = self.type;
+				disableBookmarkBtn();
+				initDom();
+			});
+
+			var old_back = mui.back;
+			mui.back = function() {
+				var self = plus.webview.currentWebview();
+				self.opener().evalJS('initDom();');
+				//执行mui封装好的窗口关闭逻辑;
+				old_back();
+			}
+		</script>
+
+	</body>
+
+</html>

+ 128 - 0
app/review-section.html

@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title>Hello MUI</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+
+		<link rel="stylesheet" href="../css/mui.min.css">
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/app.js"></script>
+		<script src="../js/service.js"></script>
+		<style>
+			html,
+			body {
+				background-color: #efeff4;
+			}
+		</style>
+		<script>
+			mui.init();
+		</script>
+	</head>
+
+	<body>
+		<header class="mui-bar mui-bar-nav">
+			<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
+			<h1 id="title" class="mui-title">错题本</h1>
+		</header>
+		<div class="mui-content">
+			<div class="mui-card">
+				<ul class="mui-table-view" id="list">
+					<li class="mui-table-view-cell mui-media">
+						<div class="mui-media-body" style="text-align: center;">
+							<p class='mui-ellipsis' style="">没有数据</p>
+						</div>
+					</li>
+				</ul>
+			</div>
+		</div>
+		<script type="text/html" id="template-chapter-id">
+			<li class="mui-table-view-cell mui-media">
+				<a data-href="review-resolution.html" data-section-id="{sectionId}" data-type="{type}" style="height: 60px;padding-top: 20px;">
+					<span class="mui-pull-right"><span style="color: gray;font-size: 14px;">{count}道</span><span class="mui-icon mui-icon-forward "></span></span>
+					<div class="mui-media-body">
+						<p class='mui-ellipsis' style="">{name}</p>
+					</div>
+				</a>
+			</li>
+		</script>
+		<script type="text/javascript">
+			 //
+			function sectionATapEvent() {
+				mui('#list').on('tap', 'a', function() {
+					var sectionId = this.getAttribute('data-section-id');
+					var href = this.getAttribute('data-href');
+					var type = this.getAttribute("data-type");
+					mui.openWindow({
+						id: 'bar-' + sectionId,
+						url: href,
+						waiting: {
+							autoShow: false
+						},
+						extras: {
+							sectionId: sectionId,
+							type: type
+						}
+					})
+				});
+			}
+
+			function updateTitle() {
+				var self = plus.webview.currentWebview();
+				var barTitle = self.barTitle;
+				if (barTitle) {
+					var titleDom = document.getElementById('title');
+					titleDom.innerHTML = barTitle;
+				}
+			}
+
+			function initDom() {
+				var chapterId = window.chapterId;
+				var type = window.type;
+				var scriptCourse = document.getElementById('template-chapter-id');
+				var template = scriptCourse.innerHTML;
+				var ct = document.getElementById('list');
+				ct.innerHTML = '<li class="mui-table-view-cell mui-media">' +
+					'<div class="mui-media-body" style="text-align: center;">' +
+					'<p class="mui-ellipsis" style="">没有数据</p>' +
+					'</div>' +
+					'</li>';
+				queryChapterCount(chapterId, type, function(rows) {
+					if (rows.length < 1) {
+						return;
+					}
+					ct.innerHTML = "";
+					var htmlStr = '';
+					for (var i = 0; i < rows.length; i++) {
+						var row = rows[i];
+						row.sectionId = row.code;
+						row.type = type;
+						htmlStr += render(template, row);
+					}
+					ct.innerHTML = htmlStr;
+				});
+			}
+			mui.init();
+			mui.plusReady(function() {
+				updateTitle();
+				var self = plus.webview.currentWebview();
+				window.chapterId = self.chapterId;
+				window.type = self.type;
+				initDom();
+				sectionATapEvent();
+			});
+			var old_back = mui.back;
+			mui.back = function() {
+				var self = plus.webview.currentWebview();
+				self.opener().evalJS('initDom();');
+				//执行mui封装好的窗口关闭逻辑;
+				old_back();
+			}
+		</script>
+
+	</body>
+
+</html>

+ 275 - 0
app/section.html

@@ -0,0 +1,275 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title>section</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+		<link rel="stylesheet" href="../css/mui.min.css">
+		<link rel="stylesheet" href="../css/iconfont.css">
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/routes.js"></script>
+		<script src="../js/app.js"></script>
+		<script src="../js/service.js"></script>
+		<style type="text/css">
+			#list {
+				/*避免导航边框和列表背景边框重叠,看起来像两条边框似得;*/
+				
+				margin-top: -1px;
+			}
+			.kaishi {
+				width: 70px;
+				height: 25px;
+				border-radius: 3px;
+				margin-left: auto;
+				margin-right: auto;
+				padding-top: 3px;
+				background-color: #EA5555;
+				color: white;
+				font-size: 14px;
+			}
+			.biaoti {
+				word-wrap: break-word;
+				word-break: normal;
+				white-space: normal;
+				height: 50px;
+				padding-left: 5px;
+				padding-right: 5px;
+			}
+			.jie {
+				height: 100px;
+				width: 100%;
+				min-width: 70px;
+				padding-top: 10px;
+				text-align: center;
+				border: 1px solid lightgray;
+				background-color: #FBF8F8;
+				border-radius: 2px;
+				font-size: 17px;
+			}
+			.my-li-active:active {
+				background-color: #95DECA;
+			}
+			.suo {
+				background-color: green;
+				background-clip: padding-box;
+				color: white;
+				z-index: 9999;
+				border-radius: 35px;
+				width: 40px;
+				height: 40px;
+				position: absolute;
+				top: 40px;
+				padding-top: 9px;
+				position: absolute;
+				left: 50%;
+				margin-left: -12px;
+			}
+			.zhezhao {
+				position: absolute;
+				width: 100%;
+				height: 100px;
+				z-index: 99;
+				background-color: black;
+				top: 10px;
+				opacity: 0.4;
+			}
+			.mui-table-view:before {
+				height: 0px !important;
+			}
+			.mui-table-view:after {
+				height: 0px !important;
+			}
+		</style>
+	</head>
+
+	<body>
+		<header class="mui-bar mui-bar-nav">
+			<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
+			<h1 id="title" class="mui-title">标题</h1>
+		</header>
+		<div class="mui-content">
+			<ul id="list" class="mui-table-view mui-grid-view" style="padding-top: 10px;margin-bottom: 0px;height: 100%;">
+			</ul>
+		</div>
+
+		<script type="text/html" id="template-section-yes-id">
+			<li class="mui-table-view-cell mui-media mui-col-xs-6">
+				<a href="question.html" data-section-id="{code}">
+					<div class="jie my-li-active">
+						<div class="biaoti">
+							{name}
+						</div>
+						<div class="kaishi">
+							开始
+						</div>
+					</div>
+				</a>
+			</li>
+		</script>
+
+		<script type="text/html" id="template-section-no-id">
+			<li class="mui-table-view-cell mui-media mui-col-xs-6">
+				<a data-section-id="{code}">
+					<div class="jie">
+						<div class="biaoti" style="color: black;">
+							{name}
+						</div>
+						<div class="kaishi">
+							开始
+						</div>
+						<div class="zhezhao">
+						</div>
+						<span class="suo"><span class=" icon iconfont icon-suo1"></span></span>
+					</div>
+				</a>
+			</li>
+		</script>
+
+		<script>
+			function initDom() {
+				var chapterId = window.self.chapterId;
+				var ct = document.getElementById('list');
+				ct.innerHTML = '';
+				queryCategory(chapterId, function(rows) {
+					var scriptSectionNo = document.getElementById('template-section-no-id');
+					var scriptSectionYes = document.getElementById('template-section-yes-id');
+					var noTemplate = scriptSectionNo.innerHTML;
+					var yesTemplate = scriptSectionYes.innerHTML;
+					var htmlStr = '';
+					for (var i = 0; i < rows.length; i++) {
+						var row = rows[i];
+						if (row.status == 1) { // 不锁住
+							htmlStr += render(yesTemplate, row);
+						} else if (row.status == -1) { // 锁住
+							htmlStr += render(noTemplate, row);
+						}
+					}
+					ct.innerHTML = htmlStr;
+				});
+			}
+
+			function chapterTapEvent() {
+					mui('#list').on('tap', 'a', function() {
+						var name = this.getAttribute('name');
+						var sectionId = this.getAttribute('data-section-id');
+						var myhref = this.href;
+						var cantSee = !!window.localStorage.getItem("__cant_see");
+						console.log('------------------>是否可以用:'+cantSee)
+						if (checkIsContinue(sectionId)) { // 可以免费看的内容
+							mui.openWindow({
+								id: 'question-win-' + sectionId,
+								url: myhref,
+								waiting: {
+									autoShow: false
+								},
+								extras: {
+									name: name,
+									sectionId: sectionId
+								}
+							});
+						} else {
+							alreadyLogin(function() {
+								if (cantSee) {
+									//									mui.toast('使用时间已超出您购买的时长,请先续费');
+									mui.toast('此内容需要购买,我们会在24小时之内电话联系您进行购买');
+								} else {
+									mui.openWindow({
+										id: 'question-win-' + sectionId,
+										url: myhref,
+										waiting: {
+											autoShow: false
+										},
+										extras: {
+											name: name,
+											sectionId: sectionId
+										}
+									});
+								}
+							}, function() {
+								mui.openWindow({
+									id: 'login-win-' + window.chapterId,
+									url: 'login.html',
+									waiting: {
+										autoShow: false
+									},
+									extras: {
+										title: window.chapterTitle,
+										sectionId: window.chapterId,
+										chapterId: window.chapterId,
+										gotoUrl: 'section.html'
+									}
+								});
+							});
+						}
+					});
+				}
+				//只有ios支持的功能需要在Android平台隐藏;
+			if (mui.os.android) {
+				var list = document.querySelectorAll('.ios-only');
+				if (list) {
+					for (var i = 0; i < list.length; i++) {
+						list[i].style.display = 'none';
+					}
+				}
+			}
+			mui.plusReady(function() {
+				window.self = plus.webview.currentWebview();
+				window.isFromLoginPage = window.self.isFromLoginPage;
+				window.chapterId = self.chapterId;
+				window.chapterTitle = self.chapterTitle;
+				initDom();
+				chapterTapEvent();
+				var titleElem = document.getElementById("title")
+				titleElem.innerHTML = self.chapterTitle;
+				titleElem.className = "mui-title mui-fadein";
+				
+				// 获取所有Webview窗口
+	var wvs=plus.webview.all();
+	for(var i=0;i<wvs.length;i++){
+		console.log("webview"+i+": "+wvs[i].id);
+	}
+			});
+			var index = null; //主页面
+			function openMenu() {
+					!index && (index = mui.currentWebview.parent());
+					mui.fire(index, "menu:open");
+				}
+				//在android4.4.2中的swipe事件,需要preventDefault一下,否则触发不正常
+			window.addEventListener('dragright', function(e) {
+				e.detail.gesture.preventDefault();
+			});
+			 //监听右滑事件,若侧滑菜单未显示,右滑要显示菜单;
+			window.addEventListener("swiperight", function(e) {
+				//默认滑动角度在-45度到45度之间,都会触发右滑菜单,为避免误操作,可自定义限制滑动角度;
+				if (Math.abs(e.detail.angle) < 4) {
+					openMenu();
+				}
+			});
+			var old_back = mui.back;
+			mui.back = function() {
+				var self = plus.webview.currentWebview();
+				try {
+					self.opener().evalJS('try{updateDengluMenu();}catch(e){} try{initChapterDom();}catch(e){} try{mui.back=old_back;}catch(e){}');
+				} catch (e) {}
+				if (window.isFromLoginPage) {
+					try {
+						var wv = plus.webview;
+						var chapterId = window.chapterId;
+						wv.close('login-win');
+						wv.close('verifyCode-win');
+						wv.show('dragIndex-win');
+					} catch (e) {
+						console.log(JSON.stringify(e))
+					}
+				} else {
+					//执行mui封装好的窗口关闭逻辑;
+					old_back();
+				}
+			}
+		</script>
+	</body>
+
+</html>

+ 63 - 0
app/seting.html

@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title>Hello MUI</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+
+		<link rel="stylesheet" href="../css/mui.min.css">
+		<style>
+			html,
+			body {
+				background-color: #efeff4;
+			}
+		</style>
+	</head>
+
+	<body>
+
+		<header class="mui-bar mui-bar-nav">
+			<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
+			<h1 class="mui-title">设置</h1>
+		</header>
+		<div class="mui-content">
+			<br />
+			<ul class="mui-table-view">
+				<li class="mui-table-view-cell">
+					<span>
+						<span class="mui-h6">解释:WIFI模式,即所有数据都是通过网络在线获取最新的,比较耗流量。</span>
+						<br /><br />
+						<span id="wifi-label-id"></span>
+						<div class="mui-switch mui-pull-right" id="set-wifi-id">
+							<div class="mui-switch-handle"></div>
+						</div>
+					</span>
+				</li>
+			</ul>
+		</div>
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/app.js"></script>
+		<script>
+			mui('.mui-content .mui-switch').each(function() { //循环所有toggle
+				//toggle.classList.contains('mui-active') 可识别该toggle的开关状态
+				var loadWifi = loadWifiMode();
+				document.getElementById("wifi-label-id").innerText = 'WiFi模式:' + (loadWifi ? '开启' : '关闭');
+				if (loadWifi) {
+					document.getElementById("set-wifi-id").classList.add('mui-active');
+				}
+				/**
+				 * toggle 事件监听
+				 */
+				this.addEventListener('toggle', function(event) {
+					//event.detail.isActive 可直接获取当前状态
+					this.parentNode.querySelector('span').innerText = 'WiFi模式:' + (event.detail.isActive ? '开启' : '关闭');
+					switchWifiMode((event.detail.isActive ? true : false));
+				});
+			});
+		</script>
+	</body>
+
+</html>

+ 251 - 0
app/submit.html

@@ -0,0 +1,251 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title></title>
+		<meta charset="utf-8">
+		<title>会计自学</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+
+		<link rel="stylesheet" href="../css/mui.min.css">
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/app.js"></script>
+		<script src="../js/service.js"></script>
+		<style>
+			html,
+			body {
+				background-color: #efeff4;
+			}
+			header.mui-bar {
+				/*display: none;*/
+			}
+			.mui-bar-nav~.mui-content {
+				padding: 0;
+			}
+			.mui-content-padded {
+				/*padding: 10px;*/
+			}
+			.mui-content-padded a {
+				margin: 5px;
+				width: 45px;
+				height: 45px;
+				display: inline-block;
+				border-radius: 5px;
+				padding-top: 16px;
+			}
+			.mui-content-padded a {
+				margin-top: 12px;
+			}
+			.mui-content a {
+				color: #8F8F94;
+			}
+			.mui-content a.active {
+				color: #007aff;
+			}
+			.my-result-span {
+				color: white;
+				font-size: 25px;
+			}
+			.my-jieguo {
+				text-align: center;
+				margin-top: 70px;
+				font-size: 50px;
+				font-family: '宋体';
+				font-weight: 900;
+			}
+			.my-dati {
+				text-align: center;
+				font-size: 25px;
+				margin-top: 20px;
+			}
+			.my-chengjidan {
+				text-align: center;
+				font-size: 1.5em;
+				font-weight: bold;
+				color: white;
+				margin-top: 20px;
+				margin-bottom: 30px;
+			}
+			.my-button {
+				background-color: #323333;
+				font-size: 1.3em;
+				font-weight: bolder;
+				margin-top: 30px;
+				margin-bottom: 20px;
+				color: white;
+				border: 0px;
+				padding: 10px 0px;
+			}
+			.my-div-outer {
+				padding-right: 20px;
+				padding-left: 20px;
+			}
+			.my-mui-card {
+				background-color: #535353;
+				top: 200px;
+				margin: 20px;
+				height: 300px;
+				width: 90%;
+				position: absolute;
+			}
+		</style>
+	</head>
+
+	<body>
+		<header class="mui-bar mui-bar-nav">
+			<a class="mui-action-back mui-icon mui-pull-left" style="font-size: 18px;margin-top:5px;margin-left: 2px;">退出</a>
+			<h1 class="mui-title">显示结果</h1>
+		</header>
+		<div class="mui-content">
+			<h1 class="my-jieguo" id="result-id"></h1>
+			<p id="overview-msg-id" class="my-dati"></p>
+			<div class="mui-content-padded mui-card my-mui-card" style="height: auto;">
+				<p class="my-chengjidan">成绩单</p>
+				<div id="exam-order-id" style="text-align: center;">
+				</div>
+				<div class="my-div-outer">
+					<button id="exam-parse" data-href="resolution.html" class="mui-btn mui-btn-block my-button">全部解析</button>
+				</div>
+			</div>
+		</div>
+		<script type="text/html" id="template-parse-id">
+			<a style="{isOk}" data-indexed="{indexed}"><span class="my-result-span">{indexed}</span></a>
+		</script>
+		<script>
+			function haveNoLogin() {
+				mui.openWindow({
+					id: 'login-win-' + window.sectionId,
+					url: 'login.html',
+					waiting: {
+						autoShow: false
+					},
+					extras: {
+						sectionId: window.sectionId,
+						gotoUrl: 'resolution.html',
+						serviceObj: window.serviceObj
+					}
+				});
+			}
+
+			function isGotoLogin() {
+				var isAlreadyLogin = true;//window.localStorage.getItem('isAlreadyLogin');
+				if (!isAlreadyLogin) {
+					mui.openWindow({
+						id: 'login-win-' + window.sectionId,
+						url: 'login.html',
+						waiting: {
+							autoShow: false
+						},
+						extras: {
+							sectionId: window.sectionId,
+							gotoUrl:'resolution.html',
+							serviceObj: window.serviceObj
+						}
+					});
+					return false;
+				}
+				return true; //已经登陆
+			}
+
+			function parseEvent() {
+				var examParse = document.getElementById('exam-parse');
+				examParse.addEventListener('tap', function() {
+					var href = this.getAttribute('data-href');
+					alreadyLogin(function() { //已经登陆
+							mui.openWindow({
+								id: 'resolution-win-' + window.sectionId,
+								url: href,
+								waiting: {
+									autoShow: false
+								},
+								extras: {
+									sectionId: window.sectionId,
+									isFromLoginPage: false,
+									serviceObj: window.serviceObj
+								}
+							});
+						}, haveNoLogin // 还没有登陆
+					);
+				});
+			}
+			mui("#exam-order-id").on('tap', 'a', function() {
+				var indexed = this.getAttribute("data-indexed");
+				alreadyLogin(function() { //已经登陆
+						mui.openWindow({
+							id: 'resolution-win-' + window.sectionId,
+							url: "resolution.html",
+							waiting: {
+								autoShow: false
+							},
+							extras: {
+								indexed: indexed,
+								serviceObj: window.serviceObj
+							}
+						});
+					}, haveNoLogin // 还没有登陆
+				);
+			});
+
+			mui.plusReady(function() {
+				var self = plus.webview.currentWebview();
+				window.sectionId = self.sectionId;
+				window.serviceObj = minix(self.serviceObj);
+
+				window.questionList = window.serviceObj.questionList;
+				var resultMsg = window.serviceObj.getResultMsg();
+				if (resultMsg == "2") {
+					resultMsg = "遗憾,不及格";
+					document.getElementById("result-id").style.color = "red";
+				} else {
+					resultMsg = "恭喜,已及格";
+					document.getElementById("result-id").style.color = "green";
+				}
+				document.getElementById("result-id").innerHTML = resultMsg;
+
+				var questionCount = window.questionList.length;
+				var okCount = 0;
+
+				var tp = document.getElementById("template-parse-id").innerHTML;
+				var htmlStr = '';
+				for (var i = 0; i < window.questionList.length; i++) {
+					var questionAll = window.questionList[i]
+					var isOk = questionAll.question.isOk;
+					if (isOk) {
+						okCount = okCount + 1;
+						isOk = 'padding-top: 13px;background-color: #2EB348';
+					} else {
+						isOk = 'padding-top: 13px;background-color: #FB1C1C';
+					}
+					htmlStr += render(tp, {
+						isOk: isOk,
+						indexed: questionAll.question.indexed
+					});
+				}
+				document.getElementById("exam-order-id").innerHTML = htmlStr;
+
+				document.getElementById('overview-msg-id').innerHTML = '共' + questionCount + '题,答对' + okCount + '道题';
+
+				parseEvent();
+
+			});
+
+			var old_back = mui.back;
+			mui.back = function() {
+				var wv = plus.webview;
+				var sectionId = window.serviceObj.getSectionId();
+				var chapterId = window.serviceObj.getChapterId();
+				plus.webview.getWebviewById('section-win-' + chapterId).evalJS('initDom();');
+				wv.close('question-win-' + sectionId);
+				wv.close('card-win-' + sectionId);
+				wv.close('submit-win-' + sectionId);
+				wv.show('section-win-' + chapterId)
+					//执行mui封装好的窗口关闭逻辑;
+					//				old_back();
+			};
+		</script>
+	</body>
+
+</html>

+ 194 - 0
app/verifyCode.html

@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+		<title></title>
+		<script src="../js/mui.min.js"></script>
+		<script src="../js/service.js"></script>
+		<script src="../js/des.js"></script>
+		<script src="../js/routes.js"></script>
+		<link href="../css/mui.min.css" rel="stylesheet" />
+		<style>
+			html,
+			body {
+				background-color: #efeff4;
+			}
+			.mui-input-row {
+				padding-top: 9px !important;
+				height: 50px !important;
+			}
+			.mui-input-row:after {
+				right: 15px !important;
+			}
+		</style>
+		<script type="text/javascript" charset="utf-8">
+			mui.init();
+			mui.plusReady(function() {
+				var self = plus.webview.currentWebview();
+				window.chapterId = self.chapterId;
+				window.sectionId = self.sectionId;
+				window.serviceObj = self.serviceObj;
+				window.gotoUrl = self.gotoUrl;
+				window.isRegister = self.isRegister;
+				window.phone = self.phone;
+				window.code = self.code;
+				window.title = self.title;
+				updateTitle(); //更新header
+				controlSendBtn(); //更新设置发送验证码按钮
+				sendCodeEvent(); //点击再次发送验证码
+				evenFinish(); //注册完成事件
+			});
+			/**
+			 *	点击再次发送验证码(事件)
+			 */
+			function sendCodeEvent() {
+					var sendCodeBtn = document.getElementById("send-btn-id");
+					sendCodeBtn.addEventListener('tap', function() {
+						sendCode(window.phone, sendCodeBtn, function(data) {
+							sendCodeBtn.setAttribute('issend', 1);
+							window.code = data;
+							controlSendBtn();
+						});
+					});
+				}
+				/**
+				 * 设置发送验证码的按钮:已经发送验证码,时间在60秒之内,则该按钮不可用;
+				 * 超过60秒,用户可以再次发送验证码
+				 */
+
+			function controlSendBtn() {
+					var sendBtn = document.getElementById("send-btn-id");
+					sendBtn.classList.add('mui-disabled');
+					var second = 59;
+					var si = setInterval(function() {
+						sendBtn.innerText = second + '秒后再发送';
+						second = second - 1;
+					}, 1000);
+					var st = setTimeout(function() {
+						sendBtn.innerText = '再次发送验证码';
+						clearInterval(si);
+						sendBtn.classList.remove('mui-disabled');
+						sendBtn.setAttribute('issend', 0);
+						clearTimeout(st);
+						issend = 0;
+					}, second * 1000);
+				}
+				/**
+				 * 更新标题
+				 * @param {Object} text
+				 */
+
+			function updateTitle() {
+				var text = '注册';
+				if (!window.isRegister) {
+					text = '忘记密码';
+				}
+				document.getElementById("title").innerText = text;
+			};
+			/**
+			 * 注册表單中控件的事件注册
+			 */
+			function evenFinish() {
+				var finishBtn = document.getElementById("finish-btn-id");
+				var codeInput = document.getElementById("code-input-id");
+				var pwdInput = document.getElementById("pwd-id");
+				var url = Routes.urls.user.register;
+				if (!window.isRegister) {
+					url = Routes.urls.user.updatePassword;
+				}
+				finishBtn.addEventListener('tap', function() {
+					var username = window.phone;
+					var code = codeInput.value;
+					var password = pwdInput.value;
+					if (code.length != 6) {
+						mui.toast('请输入6位验证码');
+						return;
+					}
+					if (code != window.code) {
+						mui.toast('验证码错误');
+						return;
+					}
+					if (password.length < 6) {
+						mui.toast("密码长度至少为6位");
+						return;
+					}
+					mui.ajax(url, {
+						data: {
+							username: username,
+							verifycode: code,
+							password1: password
+						},
+						dataType: 'json', //服务器返回json格式数据
+						type: 'post', //HTTP请求类型
+						timeout: 10000, //超时时间设置为10秒;
+						success: function(data) {
+							if (data && data.success) {
+								//注册成功自动登录
+								window.localStorage.setItem('isAlreadyLogin', true);
+								window.localStorage.setItem("phone", username);
+								window.localStorage.setItem("password", password);
+								mui.openWindow({
+									id: window.gotoUrl.replace('.html', '') + '-win-' + window.sectionId,
+									url: window.gotoUrl,
+									waiting: {
+										autoShow: false
+									},
+									extras: {
+										title: window.title,
+										chapterTitle: window.title,
+										chapterId: window.chapterId,
+										sectionId: window.sectionId,
+										isFromLoginPage: true,
+										serviceObj: window.serviceObj
+									}
+								});
+							} else {
+								mui.toast(data.message);
+								window.localStorage.setItem('isAlreadyLogin', false);
+							}
+						},
+						error: function() {
+							window.localStorage.setItem('isAlreadyLogin', false);
+							mui.toast("网络异常");
+						}
+					});
+				});
+			};
+			 //
+			var old_back = mui.back;
+			mui.back = function() {
+				var self = plus.webview.currentWebview();
+				try {
+					self.opener().evalJS('try{mui.back=old_back}catch(e){}');
+				} catch (e) {}
+				old_back();
+			};
+		</script>
+	</head>
+
+	<body>
+		<header class="mui-bar mui-bar-nav">
+			<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
+			<h1 id="title" class="mui-title">验证</h1>
+		</header>
+		<div class="mui-content" style="padding: 0px 20px;">
+			<form class="mui-input-group" style="margin-top: 80px;">
+				<div class="mui-input-row">
+					<label>验证码</label>
+					<input id="code-input-id" type="text" placeholder="请输入验证码">
+				</div>
+				<div class="mui-input-row">
+					<label>密码</label>
+					<input id="pwd-id" type="password" placeholder="请输入密码" />
+				</div>
+				<div class="mui-button-row">
+					<button id="finish-btn-id" class="mui-btn mui-btn-primary" style="width: 40%;" onclick="return false;">完成</button>&nbsp;&nbsp;
+					<button id="send-btn-id" class="mui-btn mui-btn-primary mui-disabled" style="width: 40%;" onclick="return false;">60秒后再发送</button>
+				</div>
+			</form>
+		</div>
+	</body>
+
+</html>

+ 34 - 0
css/iconfont.css

@@ -0,0 +1,34 @@
+@font-face {
+	font-family: "iconfont";
+	src: url('../fonts/iconfont.ttf') format('truetype');
+}
+.iconfont {
+	font-family: "iconfont" !important;
+	font-size: 20px;
+	font-style: normal;
+	-webkit-font-smoothing: antialiased;
+	-webkit-text-stroke-width: 0.2px;
+}
+.icon-bangzhu:before { content: "\e67f"; }
+.icon-bangzhu1:before { content: "\e655"; }
+.icon-zhangben:before { content: "\e631"; }
+.icon-weibiaoti1:before { content: "\e62e"; }
+.icon-yuxinrijiben:before { content: "\e613"; }
+.icon-shoucang:before { content: "\e616"; }
+.icon-shu:before { content: "\343f"; }
+.icon-book:before { content: "\e605"; }
+.icon-suo:before { content: "\e606"; }
+.icon-lock:before { content: "\e612"; }
+.icon-suo1:before { content: "\e689"; }
+.icon-lock-line:before { content: "\e67b"; }
+.icon-huansuo:before { content: "\e64f"; }
+.icon-yingyongzhuce:before { content: "\e730"; }
+.icon-yingyong:before { content: "\e64e"; }
+.icon-yingyong1:before { content: "\e634"; }
+.icon-shoucang1:before { content: "\e639"; }
+.icon-shoucang2:before { content: "\e656"; }
+.icon-danxianjishiben:before { content: "\e842"; }
+.icon-24:before { content: "\e618"; }
+.icon-wenzhang:before { content: "\3479"; }
+
+  

+ 3223 - 0
css/mui.min.css

@@ -0,0 +1,3223 @@
+/*!
+ * =====================================================
+ * Mui v1.1.1 (https://github.com/dcloudio/mui)
+ * =====================================================
+ */
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
+
+html {
+	font-family: sans-serif;
+	-webkit-text-size-adjust: 100%
+}
+body {
+	margin: 0
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+	display: block
+}
+audio,
+canvas,
+progress,
+video {
+	display: inline-block;
+	vertical-align: baseline
+}
+audio:not([controls]) {
+	display: none;
+	height: 0
+}
+[hidden],
+template {
+	display: none
+}
+a {
+	background: 0 0
+}
+a:active,
+a:hover {
+	outline: 0
+}
+abbr[title] {
+	border-bottom: 1px dotted
+}
+b,
+strong {
+	font-weight: 700
+}
+dfn {
+	font-style: italic
+}
+h1 {
+	margin: .67em 0
+}
+mark {
+	color: #000;
+	background: #ff0
+}
+small {
+	font-size: 80%
+}
+sub,
+sup {
+	position: relative;
+	font-size: 75%;
+	line-height: 0;
+	vertical-align: baseline
+}
+sup {
+	top: -.5em
+}
+sub {
+	bottom: -.25em
+}
+img {
+	border: 0
+}
+svg:not(:root) {
+	overflow: hidden
+}
+figure {
+	margin: 1em 40px
+}
+hr {
+	height: 0;
+	box-sizing: content-box
+}
+pre {
+	overflow: auto
+}
+code,
+kbd,
+pre,
+samp {
+	font-family: monospace, monospace;
+	font-size: 1em
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+	margin: 0;
+	font: inherit;
+	color: inherit
+}
+button {
+	overflow: visible
+}
+button,
+select {
+	text-transform: none
+}
+button,
+html input[type=button],
+input[type=reset],
+input[type=submit] {
+	-webkit-appearance: button;
+	cursor: pointer
+}
+button[disabled],
+html input[disabled] {
+	cursor: default
+}
+input {
+	line-height: normal
+}
+input[type=checkbox],
+input[type=radio] {
+	box-sizing: border-box;
+	padding: 0
+}
+input[type=number]::-webkit-inner-spin-button,
+input[type=number]::-webkit-outer-spin-button {
+	height: auto
+}
+input[type=search]::-webkit-search-cancel-button,
+input[type=search]::-webkit-search-decoration {
+	-webkit-appearance: none
+}
+fieldset {
+	padding: .35em .625em .75em;
+	margin: 0 2px;
+	border: 1px solid silver
+}
+legend {
+	padding: 0;
+	border: 0
+}
+textarea {
+	overflow: auto
+}
+optgroup {
+	font-weight: 700
+}
+table {
+	border-spacing: 0;
+	border-collapse: collapse
+}
+td,
+th {
+	padding: 0
+}
+* {
+	-webkit-box-sizing: border-box;
+	box-sizing: border-box;
+	-webkit-user-select: none;
+	outline: 0;
+	-webkit-tap-highlight-color: transparent;
+	-webkit-tap-highlight-color: transparent
+}
+body {
+	-webkit-overflow-scrolling: touch;
+	font-family: "Helvetica Neue", Helvetica, sans-serif;
+	font-size: 17px;
+	line-height: 21px;
+	color: #000;
+	background-color: #fff
+}
+a {
+	color: #007aff;
+	text-decoration: none
+}
+a:active {
+	color: #0062cc
+}
+.mui-content {
+	-webkit-overflow-scrolling: touch;
+	background-color: #efeff4
+}
+.mui-bar-nav~.mui-content {
+	padding-top: 44px
+}
+.mui-bar-nav~.mui-content.mui-scroll-wrapper .mui-scrollbar-vertical {
+	top: 44px
+}
+.mui-bar-header-secondary~.mui-content {
+	padding-top: 88px
+}
+.mui-bar-header-secondary~.mui-content.mui-scroll-wrapper .mui-scrollbar-vertical {
+	top: 88px
+}
+.mui-bar-footer~.mui-content {
+	padding-bottom: 44px
+}
+.mui-bar-footer~.mui-content.mui-scroll-wrapper .mui-scrollbar-vertical {
+	bottom: 44px
+}
+.mui-bar-footer-secondary~.mui-content {
+	padding-bottom: 88px
+}
+.mui-bar-footer-secondary~.mui-content.mui-scroll-wrapper .mui-scrollbar-vertical {
+	bottom: 88px
+}
+.mui-bar-tab~.mui-content {
+	padding-bottom: 50px
+}
+.mui-bar-tab~.mui-content.mui-scroll-wrapper .mui-scrollbar-vertical {
+	bottom: 50px
+}
+.mui-bar-footer-secondary-tab~.mui-content {
+	padding-bottom: 94px
+}
+.mui-bar-footer-secondary-tab~.mui-content.mui-scroll-wrapper .mui-scrollbar-vertical {
+	bottom: 94px
+}
+.mui-content-padded {
+	margin: 10px
+}
+.mui-inline {
+	display: inline-block;
+	vertical-align: top
+}
+.mui-block {
+	display: block!important
+}
+.mui-visibility {
+	visibility: visible!important
+}
+.mui-hidden {
+	display: none!important
+}
+.mui-ellipsis {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap
+}
+.mui-ellipsis-2 {
+	display: -webkit-box;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	word-wrap: break-word;
+	white-space: normal!important;
+	-webkit-line-clamp: 2;
+	-webkit-box-orient: vertical
+}
+.mui-table {
+	display: table;
+	width: 100%;
+	table-layout: fixed
+}
+.mui-table-cell {
+	position: relative;
+	display: table-cell
+}
+.mui-text-left {
+	text-align: left!important
+}
+.mui-text-center {
+	text-align: center!important
+}
+.mui-text-justify {
+	text-align: justify!important
+}
+.mui-text-right {
+	text-align: right!important
+}
+.mui-pull-left {
+	float: left
+}
+.mui-pull-right {
+	float: right
+}
+.mui-list-unstyled {
+	padding-left: 0;
+	list-style: none
+}
+.mui-list-inline {
+	padding-left: 0;
+	margin-left: -5px;
+	list-style: none
+}
+.mui-list-inline>li {
+	display: inline-block;
+	padding-right: 5px;
+	padding-left: 5px
+}
+.mui-clearfix:after,
+.mui-clearfix:before {
+	display: table;
+	content: " "
+}
+.mui-clearfix:after {
+	clear: both
+}
+.mui-bg-primary {
+	background-color: #007aff
+}
+.mui-bg-positive {
+	background-color: #4cd964
+}
+.mui-bg-negative {
+	background-color: #dd524d
+}
+.mui-error {
+	padding: 10px;
+	margin: 88px 35px;
+	background-color: #bbb;
+	border-radius: 6px
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+	margin-top: 5px;
+	margin-bottom: 5px;
+	line-height: 1
+}
+.mui-h1,
+h1 {
+	font-size: 36px
+}
+.mui-h2,
+h2 {
+	font-size: 30px
+}
+.mui-h3,
+h3 {
+	font-size: 24px
+}
+.mui-h4,
+h4 {
+	font-size: 18px
+}
+.mui-h5,
+h5 {
+	font-size: 14px;
+	font-weight: 400;
+	color: #8f8f94
+}
+.mui-h6,
+h6 {
+	font-size: 12px;
+	font-weight: 400;
+	color: #8f8f94
+}
+p {
+	margin-top: 0;
+	margin-bottom: 10px;
+	font-size: 14px;
+	color: #8f8f94
+}
+.mui-col-xs-12 {
+	width: 100%
+}
+.mui-col-xs-11 {
+	width: 91.66666667%
+}
+.mui-col-xs-10 {
+	width: 83.33333333%
+}
+.mui-col-xs-9 {
+	width: 75%
+}
+.mui-col-xs-8 {
+	width: 66.66666667%
+}
+.mui-col-xs-7 {
+	width: 58.33333333%
+}
+.mui-col-xs-6 {
+	width: 50%
+}
+.mui-col-xs-5 {
+	width: 41.66666667%
+}
+.mui-col-xs-4 {
+	width: 33.33333333%
+}
+.mui-col-xs-3 {
+	width: 25%
+}
+.mui-col-xs-2 {
+	width: 16.66666667%
+}
+.mui-col-xs-1 {
+	width: 8.33333333%
+}
+@media (min-width: 400px) {
+	.mui-col-sm-12 {
+		width: 100%
+	}
+	.mui-col-sm-11 {
+		width: 91.66666667%
+	}
+	.mui-col-sm-10 {
+		width: 83.33333333%
+	}
+	.mui-col-sm-9 {
+		width: 75%
+	}
+	.mui-col-sm-8 {
+		width: 66.66666667%
+	}
+	.mui-col-sm-7 {
+		width: 58.33333333%
+	}
+	.mui-col-sm-6 {
+		width: 50%
+	}
+	.mui-col-sm-5 {
+		width: 41.66666667%
+	}
+	.mui-col-sm-4 {
+		width: 33.33333333%
+	}
+	.mui-col-sm-3 {
+		width: 25%
+	}
+	.mui-col-sm-2 {
+		width: 16.66666667%
+	}
+	.mui-col-sm-1 {
+		width: 8.33333333%
+	}
+}
+.mui-scroll-wrapper {
+	position: absolute;
+	top: 0;
+	bottom: 0;
+	left: 0;
+	z-index: 1;
+	width: 100%;
+	overflow: hidden;
+	-webkit-backface-visibility: hidden
+}
+.mui-scroll {
+	position: absolute;
+	z-index: 1;
+	width: 100%;
+	-webkit-transform: translateZ(0);
+	transform: translateZ(0);
+	-webkit-backface-visibility: hidden
+}
+.mui-scrollbar {
+	position: absolute;
+	z-index: 9998;
+	overflow: hidden;
+	pointer-events: none;
+	opacity: 0;
+	-webkit-transition: 500ms;
+	transition: 500ms;
+	transform: translateZ(0px)
+}
+.mui-scrollbar-vertical {
+	top: 0;
+	right: 1px;
+	bottom: 2px;
+	width: 4px
+}
+.mui-scrollbar-vertical .mui-scrollbar-indicator {
+	width: 100%
+}
+.mui-scrollbar-horizontal {
+	right: 2px;
+	bottom: 0;
+	left: 2px;
+	height: 4px
+}
+.mui-scrollbar-horizontal .mui-scrollbar-indicator {
+	height: 100%
+}
+.mui-scrollbar-indicator {
+	position: absolute;
+	display: block;
+	box-sizing: border-box;
+	background: rgba(0, 0, 0, .39804);
+	border: 1px solid rgba(255, 255, 255, .80196);
+	border-radius: 2px;
+	-webkit-transition: .01s cubic-bezier(.1, .57, .1, 1);
+	transition: .01s cubic-bezier(.1, .57, .1, 1);
+	transform: translate(0px, 0) translateZ(0px)
+}
+.mui-plus-pullrefresh .mui-scroll-wrapper {
+	position: static;
+	top: auto;
+	bottom: auto;
+	left: auto;
+	width: auto;
+	overflow: auto
+}
+.mui-plus-pullrefresh .mui-scroll {
+	position: static;
+	width: auto
+}
+.mui-off-canvas-wrap .mui-bar {
+	position: absolute!important
+}
+.mui-off-canvas-wrap {
+	position: relative;
+	z-index: 1;
+	width: 100%;
+	height: 100%;
+	overflow: hidden
+}
+.mui-off-canvas-wrap .mui-inner-wrap {
+	position: relative;
+	z-index: 1;
+	width: 100%;
+	height: 100%
+}
+.mui-off-canvas-wrap .mui-inner-wrap.mui-transitioning {
+	-webkit-transition: -webkit-transform 200ms ease;
+	transition: transform 200ms ease
+}
+.mui-off-canvas-wrap .mui-inner-wrap .mui-off-canvas-left {
+	-webkit-transform: translate3d(-100%, 0, 0);
+	transform: translate3d(-100%, 0, 0)
+}
+.mui-off-canvas-wrap .mui-inner-wrap .mui-off-canvas-right {
+	-webkit-transform: translate3d(100%, 0, 0);
+	transform: translate3d(100%, 0, 0)
+}
+.mui-off-canvas-wrap.mui-active {
+	height: 100%;
+	overflow: hidden
+}
+.mui-off-canvas-wrap.mui-active .mui-off-canvas-backdrop {
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	z-index: 998;
+	display: block;
+	background: rgba(0, 0, 0, .4);
+	box-shadow: -4px 0 4px rgba(0, 0, 0, .5), 4px 0 4px rgba(0, 0, 0, .5);
+	transition: background 200ms ease;
+	-webkit-backface-visibility: hidden;
+	-webkit-tap-highlight-color: transparent
+}
+.mui-off-canvas-wrap.mui-slide-in .mui-off-canvas-right {
+	z-index: 10000!important;
+	-webkit-transform: translate3d(100%, 0, 0)
+}
+.mui-off-canvas-wrap.mui-slide-in .mui-off-canvas-left {
+	z-index: 10000!important;
+	-webkit-transform: translate3d(-100%, 0, 0)
+}
+.mui-off-canvas-left,
+.mui-off-canvas-right {
+	position: absolute;
+	top: 0;
+	bottom: 0;
+	z-index: -1;
+	width: 70%;
+	min-height: 100%;
+	box-sizing: content-box;
+	-webkit-overflow-scrolling: touch;
+	visibility: hidden;
+	background: #333;
+	-webkit-backface-visibility: hidden
+}
+.mui-off-canvas-left.mui-transitioning,
+.mui-off-canvas-right.mui-transitioning {
+	-webkit-transition: -webkit-transform 200ms ease;
+	transition: transform 200ms ease
+}
+.mui-off-canvas-left {
+	left: 0
+}
+.mui-off-canvas-right {
+	right: 0
+}
+.mui-loading .mui-spinner {
+	display: block;
+	margin: 0 auto
+}
+.mui-spinner {
+	display: inline-block;
+	width: 24px;
+	height: 24px;
+	-webkit-transform-origin: 50%;
+	transform-origin: 50%;
+	-webkit-animation: spinner-spin 1s step-end infinite;
+	animation: spinner-spin 1s step-end infinite
+}
+.mui-spinner:after {
+	display: block;
+	width: 100%;
+	height: 100%;
+	content: "";
+	background-image: url("data:image/svg+xml;charset=utf-8,<svg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><defs><line id='l' x1='60' x2='60' y1='7' y2='27' stroke='%236c6c6c' stroke-width='11' stroke-linecap='round'/></defs><g><use xlink:href='%23l' opacity='.27'/><use xlink:href='%23l' opacity='.27' transform='rotate(30 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(60 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(90 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(120 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(150 60,60)'/><use xlink:href='%23l' opacity='.37' transform='rotate(180 60,60)'/><use xlink:href='%23l' opacity='.46' transform='rotate(210 60,60)'/><use xlink:href='%23l' opacity='.56' transform='rotate(240 60,60)'/><use xlink:href='%23l' opacity='.66' transform='rotate(270 60,60)'/><use xlink:href='%23l' opacity='.75' transform='rotate(300 60,60)'/><use xlink:href='%23l' opacity='.85' transform='rotate(330 60,60)'/></g></svg>");
+	background-repeat: no-repeat;
+	background-position: 50%;
+	background-size: 100%
+}
+.mui-spinner-white:after {
+	background-image: url("data:image/svg+xml;charset=utf-8,<svg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><defs><line id='l' x1='60' x2='60' y1='7' y2='27' stroke='%23fff' stroke-width='11' stroke-linecap='round'/></defs><g><use xlink:href='%23l' opacity='.27'/><use xlink:href='%23l' opacity='.27' transform='rotate(30 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(60 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(90 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(120 60,60)'/><use xlink:href='%23l' opacity='.27' transform='rotate(150 60,60)'/><use xlink:href='%23l' opacity='.37' transform='rotate(180 60,60)'/><use xlink:href='%23l' opacity='.46' transform='rotate(210 60,60)'/><use xlink:href='%23l' opacity='.56' transform='rotate(240 60,60)'/><use xlink:href='%23l' opacity='.66' transform='rotate(270 60,60)'/><use xlink:href='%23l' opacity='.75' transform='rotate(300 60,60)'/><use xlink:href='%23l' opacity='.85' transform='rotate(330 60,60)'/></g></svg>")
+}
+@-webkit-keyframes spinner-spin {
+	0% {
+		-webkit-transform: rotate(0deg)
+	}
+	8.33333333% {
+		-webkit-transform: rotate(30deg)
+	}
+	16.66666667% {
+		-webkit-transform: rotate(60deg)
+	}
+	25% {
+		-webkit-transform: rotate(90deg)
+	}
+	33.33333333% {
+		-webkit-transform: rotate(120deg)
+	}
+	41.66666667% {
+		-webkit-transform: rotate(150deg)
+	}
+	50% {
+		-webkit-transform: rotate(180deg)
+	}
+	58.33333333% {
+		-webkit-transform: rotate(210deg)
+	}
+	66.66666667% {
+		-webkit-transform: rotate(240deg)
+	}
+	75% {
+		-webkit-transform: rotate(270deg)
+	}
+	83.33333333% {
+		-webkit-transform: rotate(300deg)
+	}
+	91.66666667% {
+		-webkit-transform: rotate(330deg)
+	}
+	100% {
+		-webkit-transform: rotate(360deg)
+	}
+}
+@keyframes spinner-spin {
+	0% {
+		transform: rotate(0deg)
+	}
+	8.33333333% {
+		transform: rotate(30deg)
+	}
+	16.66666667% {
+		transform: rotate(60deg)
+	}
+	25% {
+		transform: rotate(90deg)
+	}
+	33.33333333% {
+		transform: rotate(120deg)
+	}
+	41.66666667% {
+		transform: rotate(150deg)
+	}
+	50% {
+		transform: rotate(180deg)
+	}
+	58.33333333% {
+		transform: rotate(210deg)
+	}
+	66.66666667% {
+		transform: rotate(240deg)
+	}
+	75% {
+		transform: rotate(270deg)
+	}
+	83.33333333% {
+		transform: rotate(300deg)
+	}
+	91.66666667% {
+		transform: rotate(330deg)
+	}
+	100% {
+		transform: rotate(360deg)
+	}
+}
+.mui-btn,
+button,
+input[type=button],
+input[type=reset],
+input[type=submit] {
+	position: relative;
+	display: inline-block;
+	padding: 6px 12px;
+	margin-bottom: 0;
+	font-size: 14px;
+	font-weight: 400;
+	line-height: 1.42;
+	color: #333;
+	text-align: center;
+	white-space: nowrap;
+	vertical-align: top;
+	cursor: pointer;
+	background-color: #fff;
+	background-clip: padding-box;
+	border: 1px solid #ccc;
+	border-radius: 3px;
+	-webkit-transition: all;
+	transition: all;
+	-webkit-transition-timing-function: linear;
+	transition-timing-function: linear;
+	-webkit-transition-duration: .2s;
+	transition-duration: .2s
+}
+.mui-btn.mui-active,
+.mui-btn:active,
+button.mui-active,
+button:active,
+input[type=button].mui-active,
+input[type=button]:active,
+input[type=reset].mui-active,
+input[type=reset]:active,
+input[type=submit].mui-active,
+input[type=submit]:active {
+	color: #fff;
+	background-color: #929292
+}
+.mui-btn.mui-disabled,
+.mui-btn:disabled,
+button.mui-disabled,
+button:disabled,
+input[type=button].mui-disabled,
+input[type=button]:disabled,
+input[type=reset].mui-disabled,
+input[type=reset]:disabled,
+input[type=submit].mui-disabled,
+input[type=submit]:disabled {
+	opacity: .6
+}
+.mui-btn-blue,
+.mui-btn-primary,
+input[type=submit] {
+	color: #fff;
+	background-color: #007aff;
+	border: 1px solid #007aff
+}
+.mui-btn-blue.mui-active,
+.mui-btn-blue:active,
+.mui-btn-primary.mui-active,
+.mui-btn-primary:active,
+input[type=submit].mui-active,
+input[type=submit]:active {
+	color: #fff;
+	background-color: #0062cc;
+	border: 1px solid #0062cc
+}
+.mui-btn-green,
+.mui-btn-positive,
+.mui-btn-success {
+	color: #fff;
+	background-color: #4cd964;
+	border: 1px solid #4cd964
+}
+.mui-btn-green.mui-active,
+.mui-btn-green:active,
+.mui-btn-positive.mui-active,
+.mui-btn-positive:active,
+.mui-btn-success.mui-active,
+.mui-btn-success:active {
+	color: #fff;
+	background-color: #2ac845;
+	border: 1px solid #2ac845
+}
+.mui-btn-warning,
+.mui-btn-yellow {
+	color: #fff;
+	background-color: #f0ad4e;
+	border: 1px solid #f0ad4e
+}
+.mui-btn-warning.mui-active,
+.mui-btn-warning:active,
+.mui-btn-yellow.mui-active,
+.mui-btn-yellow:active {
+	color: #fff;
+	background-color: #ec971f;
+	border: 1px solid #ec971f
+}
+.mui-btn-danger,
+.mui-btn-negative,
+.mui-btn-red {
+	color: #fff;
+	background-color: #dd524d;
+	border: 1px solid #dd524d
+}
+.mui-btn-danger.mui-active,
+.mui-btn-danger:active,
+.mui-btn-negative.mui-active,
+.mui-btn-negative:active,
+.mui-btn-red.mui-active,
+.mui-btn-red:active {
+	color: #fff;
+	background-color: #cf2d28;
+	border: 1px solid #cf2d28
+}
+.mui-btn-purple,
+.mui-btn-royal {
+	color: #fff;
+	background-color: #8a6de9;
+	border: 1px solid #8a6de9
+}
+.mui-btn-purple.mui-active,
+.mui-btn-purple:active,
+.mui-btn-royal.mui-active,
+.mui-btn-royal:active {
+	color: #fff;
+	background-color: #6641e2;
+	border: 1px solid #6641e2
+}
+.mui-btn-grey {
+	color: #fff;
+	background-color: #c7c7cc;
+	border: 1px solid #c7c7cc
+}
+.mui-btn-grey.mui-active,
+.mui-btn-grey:active {
+	color: #fff;
+	background-color: #acacb4;
+	border: 1px solid #acacb4
+}
+.mui-btn-outlined {
+	background-color: transparent
+}
+.mui-btn-outlined.mui-btn-blue,
+.mui-btn-outlined.mui-btn-primary {
+	color: #007aff
+}
+.mui-btn-outlined.mui-btn-green,
+.mui-btn-outlined.mui-btn-positive,
+.mui-btn-outlined.mui-btn-success {
+	color: #4cd964
+}
+.mui-btn-outlined.mui-btn-warning,
+.mui-btn-outlined.mui-btn-yellow {
+	color: #f0ad4e
+}
+.mui-btn-outlined.mui-btn-danger,
+.mui-btn-outlined.mui-btn-negative,
+.mui-btn-outlined.mui-btn-red {
+	color: #dd524d
+}
+.mui-btn-outlined.mui-btn-purple,
+.mui-btn-outlined.mui-btn-royal {
+	color: #8a6de9
+}
+.mui-btn-outlined.mui-btn-blue:active,
+.mui-btn-outlined.mui-btn-danger:active,
+.mui-btn-outlined.mui-btn-green:active,
+.mui-btn-outlined.mui-btn-negative:active,
+.mui-btn-outlined.mui-btn-positive:active,
+.mui-btn-outlined.mui-btn-primary:active,
+.mui-btn-outlined.mui-btn-purple:active,
+.mui-btn-outlined.mui-btn-red:active,
+.mui-btn-outlined.mui-btn-royal:active,
+.mui-btn-outlined.mui-btn-success:active,
+.mui-btn-outlined.mui-btn-warning:active,
+.mui-btn-outlined.mui-btn-yellow:active {
+	color: #fff
+}
+.mui-btn-link {
+	padding-top: 6px;
+	padding-bottom: 6px;
+	color: #007aff;
+	background-color: transparent;
+	border: 0
+}
+.mui-btn-link.mui-active,
+.mui-btn-link:active {
+	color: #0062cc;
+	background-color: transparent
+}
+.mui-btn-block {
+	display: block;
+	width: 100%;
+	padding: 15px 0;
+	margin-bottom: 10px;
+	font-size: 18px
+}
+.mui-btn .mui-badge {
+	margin: -2px -4px -2px 4px;
+	font-size: 14px;
+	background-color: rgba(0, 0, 0, .15)
+}
+.mui-btn .mui-badge-inverted,
+.mui-btn:active .mui-badge-inverted {
+	background-color: transparent
+}
+.mui-btn-negative:active .mui-badge-inverted,
+.mui-btn-positive:active .mui-badge-inverted,
+.mui-btn-primary:active .mui-badge-inverted {
+	color: #fff
+}
+.mui-btn-block .mui-badge {
+	position: absolute;
+	right: 0;
+	margin-right: 10px
+}
+.mui-btn .mui-icon {
+	font-size: inherit
+}
+.mui-btn.mui-icon {
+	font-size: 14px;
+	line-height: 1.42
+}
+.mui-btn.mui-fab {
+	width: 56px;
+	height: 56px;
+	padding: 16px;
+	border-radius: 50%;
+	outline: 0
+}
+.mui-btn.mui-fab.mui-btn-mini {
+	width: 40px;
+	height: 40px;
+	padding: 8px
+}
+.mui-btn.mui-fab .mui-icon {
+	width: 24px;
+	height: 24px;
+	font-size: 24px;
+	line-height: 24px
+}
+.mui-bar {
+	position: fixed;
+	right: 0;
+	left: 0;
+	z-index: 10;
+	height: 44px;
+	padding-right: 10px;
+	padding-left: 10px;
+	background-color: rgba(247, 247, 247, .98);
+	border-bottom: 0;
+	-webkit-box-shadow: 0 0 1px rgba(0, 0, 0, .85);
+	box-shadow: 0 0 1px rgba(0, 0, 0, .85);
+	-webkit-backface-visibility: hidden;
+	backface-visibility: hidden
+}
+.mui-bar .mui-title {
+	right: 40px;
+	left: 40px;
+	width: auto;
+	margin: 0;
+	overflow: hidden;
+	text-overflow: ellipsis
+}
+.mui-bar .mui-backdrop {
+	background: 0 0
+}
+.mui-bar-header-secondary {
+	top: 44px
+}
+.mui-bar-footer {
+	bottom: 0
+}
+.mui-bar-footer-secondary {
+	bottom: 44px
+}
+.mui-bar-footer-secondary-tab {
+	bottom: 50px
+}
+.mui-bar-footer,
+.mui-bar-footer-secondary,
+.mui-bar-footer-secondary-tab {
+	border-top: 0
+}
+.mui-bar-nav {
+	top: 0;
+	-webkit-box-shadow: 0 1px 6px #ccc;
+	box-shadow: 0 1px 6px #ccc;
+	background-color: #243A41;
+}
+.mui-bar-nav a{
+	color: white;
+}
+.mui-bar-nav~.mui-content .mui-anchor {
+	display: block;
+	height: 45px;
+	margin-top: -45px;
+	visibility: hidden
+}
+.mui-bar-nav.mui-bar .mui-icon {
+	padding-right: 10px;
+	padding-left: 10px;
+	margin-right: -10px;
+	margin-left: -10px
+}
+.mui-title {
+	position: absolute;
+	display: block;
+	width: 100%;
+	padding: 0;
+	margin: 0 -10px;
+	font-size: 17px;
+	font-weight: 800;
+	line-height: 44px;
+	color: white;
+	text-align: center;
+	white-space: nowrap
+}
+.mui-title a {
+	color: inherit
+}
+.mui-bar-tab {
+	bottom: 0;
+	display: table;
+	width: 100%;
+	height: 50px;
+	padding: 0;
+	table-layout: fixed;
+	border-top: 0;
+	border-bottom: 0;
+	-webkit-touch-callout: none
+}
+.mui-bar-tab .mui-tab-item {
+	display: table-cell;
+	width: 1%;
+	height: 50px;
+	overflow: hidden;
+	color: #929292;
+	text-align: center;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	vertical-align: middle
+}
+.mui-bar-tab .mui-tab-item.mui-active {
+	color: #007aff
+}
+.mui-bar-tab .mui-tab-item .mui-icon {
+	top: 3px;
+	width: 24px;
+	height: 24px;
+	padding-top: 0;
+	padding-bottom: 0
+}
+.mui-bar-tab .mui-tab-item .mui-icon~.mui-tab-label {
+	display: block;
+	overflow: hidden;
+	font-size: 11px;
+	text-overflow: ellipsis
+}
+.mui-bar-tab .mui-tab-item .mui-icon:active {
+	background: 0 0
+}
+.mui-focusin>.mui-bar {
+	position: absolute
+}
+.mui-focusin>.mui-bar-footer,
+.mui-focusin>.mui-bar-footer-secondary,
+.mui-focusin>.mui-bar-footer-secondary-tab,
+.mui-focusin>.mui-bar-tab {
+	position: static
+}
+.mui-bar .mui-btn {
+	position: relative;
+	top: 7px;
+	z-index: 20;
+	padding: 6px 12px 7px;
+	margin-top: 0;
+	font-weight: 400
+}
+.mui-bar .mui-btn.mui-pull-right {
+	margin-left: 10px
+}
+.mui-bar .mui-btn.mui-pull-left {
+	margin-right: 10px
+}
+.mui-bar .mui-btn-link {
+	top: 0;
+	padding: 0;
+	font-size: 16px;
+	line-height: 44px;
+	color: #007aff;
+	border: 0
+}
+.mui-bar .mui-btn-link.mui-active,
+.mui-bar .mui-btn-link:active {
+	color: #0062cc
+}
+.mui-bar .mui-btn-block {
+	top: 6px;
+	padding: 5px 0;
+	margin-bottom: 0;
+	font-size: 16px
+}
+.mui-bar .mui-btn-nav.mui-pull-left {
+	margin-left: -5px
+}
+.mui-bar .mui-btn-nav.mui-pull-left .mui-icon-left-nav {
+	margin-right: -3px
+}
+.mui-bar .mui-btn-nav.mui-pull-right {
+	margin-right: -5px
+}
+.mui-bar .mui-btn-nav.mui-pull-right .mui-icon-right-nav {
+	margin-left: -3px
+}
+.mui-bar .mui-btn-nav:active {
+	opacity: .3
+}
+.mui-bar .mui-icon {
+	position: relative;
+	z-index: 20;
+	padding-top: 10px;
+	padding-bottom: 10px;
+	font-size: 24px
+}
+.mui-bar .mui-icon:active {
+	opacity: .3
+}
+.mui-bar .mui-btn .mui-icon {
+	top: 3px;
+	padding: 0;
+	margin: 0
+}
+.mui-bar .mui-title .mui-icon {
+	padding: 0;
+	margin: 0
+}
+.mui-bar .mui-title .mui-icon.mui-icon-caret {
+	top: 4px;
+	margin-left: -5px
+}
+.mui-bar input[type=search] {
+	height: 29px;
+	margin: 6px 0
+}
+.mui-bar .mui-segmented-control {
+	top: 7px;
+	width: auto;
+	margin: 0 auto
+}
+.mui-badge {
+	display: inline-block;
+	padding: 3px 6px;
+	font-size: 12px;
+	line-height: 1;
+	color: #333;
+	background-color: rgba(0, 0, 0, .15);
+	border-radius: 100px
+}
+.mui-badge.mui-badge-inverted {
+	padding: 0 5px 0 0;
+	color: #929292;
+	background-color: transparent
+}
+.mui-badge-blue,
+.mui-badge-primary {
+	color: #fff;
+	background-color: #007aff
+}
+.mui-badge-blue.mui-badge-inverted,
+.mui-badge-primary.mui-badge-inverted {
+	color: #007aff;
+	background-color: transparent
+}
+.mui-badge-green,
+.mui-badge-success {
+	color: #fff;
+	background-color: #4cd964
+}
+.mui-badge-green.mui-badge-inverted,
+.mui-badge-success.mui-badge-inverted {
+	color: #4cd964;
+	background-color: transparent
+}
+.mui-badge-warning,
+.mui-badge-yellow {
+	color: #fff;
+	background-color: #f0ad4e
+}
+.mui-badge-warning.mui-badge-inverted,
+.mui-badge-yellow.mui-badge-inverted {
+	color: #f0ad4e;
+	background-color: transparent
+}
+.mui-badge-danger,
+.mui-badge-red {
+	color: #fff;
+	background-color: #dd524d
+}
+.mui-badge-danger.mui-badge-inverted,
+.mui-badge-red.mui-badge-inverted {
+	color: #dd524d;
+	background-color: transparent
+}
+.mui-badge-purple,
+.mui-badge-royal {
+	color: #fff;
+	background-color: #8a6de9
+}
+.mui-badge-purple.mui-badge-inverted,
+.mui-badge-royal.mui-badge-inverted {
+	color: #8a6de9;
+	background-color: transparent
+}
+.mui-icon .mui-badge {
+	position: absolute;
+	top: -2px;
+	left: 100%;
+	padding: 1px 5px;
+	margin-left: -10px;
+	font-size: 10px;
+	line-height: 1.4;
+	color: #fff;
+	background: red
+}
+.mui-card {
+	margin: 0 15px;
+	overflow: hidden;
+	background-color: #fff;
+	background-clip: padding-box;
+	border: 1px solid #ddd;
+	border-radius: 6px
+}
+.mui-content>.mui-card:first-child {
+	margin-top: 15px
+}
+.mui-card .mui-input-group .mui-input-row:last-child:after,
+.mui-card .mui-input-group .mui-input-row:last-child:before,
+.mui-card .mui-input-group:after,
+.mui-card .mui-input-group:before {
+	height: 0
+}
+.mui-card .mui-table-view {
+	margin-bottom: 0;
+	border-top: 0;
+	border-bottom: 0;
+	border-radius: 6px
+}
+.mui-card .mui-table-view .mui-table-view-divider:first-child {
+	top: 0;
+	border-top-left-radius: 6px;
+	border-top-right-radius: 6px
+}
+.mui-card .mui-table-view .mui-table-view-divider:last-child {
+	border-bottom-right-radius: 6px;
+	border-bottom-left-radius: 6px
+}
+.mui-card .mui-table-view:after,
+.mui-card .mui-table-view:before,
+.mui-card>.mui-table-view>.mui-table-view-cell:last-child:after,
+.mui-card>.mui-table-view>.mui-table-view-cell:last-child:before {
+	height: 0
+}
+.mui-table-view {
+	position: relative;
+	padding-left: 0;
+	margin-top: 0;
+	margin-bottom: 0;
+	list-style: none;
+	background-color: #fff
+}
+.mui-table-view:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	background-color: #c8c7cc;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-table-view:before {
+	position: absolute;
+	top: 0;
+	right: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	background-color: #c8c7cc;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-table-view-chevron .mui-table-view-cell {
+	padding-right: 65px
+}
+.mui-table-view-chevron .mui-table-view-cell>a:not(.mui-btn) {
+	margin-right: -65px
+}
+.mui-table-view-inverted {
+	color: #fff;
+	background: #333
+}
+.mui-table-view-inverted:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	background-color: #222;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-table-view-inverted:before {
+	position: absolute;
+	top: 0;
+	right: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	background-color: #222;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-table-view-inverted .mui-table-view-cell:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 15px;
+	height: 1px;
+	content: '';
+	background-color: #222;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-table-view-inverted .mui-table-view-cell.mui-active,
+.mui-table-view-inverted .mui-table-view-cell>a:not(.mui-btn).mui-active {
+	background-color: #242424
+}
+.mui-table-view-cell {
+	position: relative;
+	padding: 11px 15px;
+	overflow: hidden;
+	-webkit-touch-callout: none
+}
+.mui-table-view-cell:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 15px;
+	height: 1px;
+	content: '';
+	background-color: #c8c7cc;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-table-view-cell.mui-checkbox input[type=checkbox],
+.mui-table-view-cell.mui-radio input[type=radio] {
+	top: 8px
+}
+.mui-table-view-cell.mui-checkbox.mui-left,
+.mui-table-view-cell.mui-radio.mui-left {
+	padding-left: 58px
+}
+.mui-table-view-cell.mui-active {
+	background-color: #eee
+}
+.mui-table-view-cell:last-child:after,
+.mui-table-view-cell:last-child:before {
+	height: 0
+}
+.mui-table-view-cell>a:not(.mui-btn) {
+	position: relative;
+	display: block;
+	padding: inherit;
+	margin: -11px -15px;
+	overflow: hidden;
+	color: inherit;
+	text-overflow: ellipsis;
+	white-space: nowrap
+}
+.mui-table-view-cell>a:not(.mui-btn).mui-active {
+	background-color: #eee
+}
+.mui-table-view-cell p {
+	margin-bottom: 0
+}
+.mui-table-view-cell.mui-transitioning>.mui-slider-handle,
+.mui-table-view-cell.mui-transitioning>.mui-slider-left .mui-btn,
+.mui-table-view-cell.mui-transitioning>.mui-slider-right .mui-btn {
+	-webkit-transition: 300ms;
+	transition: 300ms
+}
+.mui-table-view-cell>.mui-slider-handle,
+.mui-table-view-cell>.mui-slider-left .mui-btn,
+.mui-table-view-cell>.mui-slider-right .mui-btn {
+	-webkit-transition: 0ms;
+	transition: 0ms
+}
+.mui-table-view-cell>.mui-slider-left,
+.mui-table-view-cell>.mui-slider-right {
+	position: absolute;
+	top: 0;
+	display: -webkit-box;
+	display: -webkit-flex;
+	display: flex;
+	height: 100%
+}
+.mui-table-view-cell>.mui-slider-left>.mui-btn,
+.mui-table-view-cell>.mui-slider-right>.mui-btn {
+	position: relative;
+	left: 0;
+	display: -webkit-box;
+	display: -webkit-flex;
+	display: flex;
+	padding: 0 30px;
+	color: #fff;
+	border: 0;
+	border-radius: 0;
+	-webkit-box-align: center;
+	-webkit-align-items: center;
+	align-items: center
+}
+.mui-table-view-cell>.mui-slider-left>.mui-btn:after,
+.mui-table-view-cell>.mui-slider-right>.mui-btn:after {
+	position: absolute;
+	top: 0;
+	z-index: -1;
+	width: 600%;
+	height: 100%;
+	content: '';
+	background: inherit
+}
+.mui-table-view-cell>.mui-slider-left>.mui-btn.mui-icon,
+.mui-table-view-cell>.mui-slider-right>.mui-btn.mui-icon {
+	font-size: 30px
+}
+.mui-table-view-cell>.mui-slider-right {
+	right: 0;
+	-webkit-transform: translateX(100%);
+	transform: translateX(100%)
+}
+.mui-table-view-cell>.mui-slider-left {
+	left: 0;
+	-webkit-transform: translateX(-100%);
+	transform: translateX(-100%)
+}
+.mui-table-view-cell>.mui-slider-left>.mui-btn:after {
+	right: 100%;
+	margin-right: -1px
+}
+.mui-table-view-divider {
+	position: relative;
+	padding-top: 6px;
+	padding-bottom: 6px;
+	padding-left: 15px;
+	margin-top: -1px;
+	margin-left: 0;
+	font-weight: 500;
+	color: #999;
+	background-color: #fafafa
+}
+.mui-table-view-divider:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	background-color: #c8c7cc;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-table-view-divider:before {
+	position: absolute;
+	top: 0;
+	right: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	background-color: #c8c7cc;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-table-view .mui-media,
+.mui-table-view .mui-media-body {
+	overflow: hidden
+}
+.mui-table-view .mui-media-object {
+	max-width: 42px;
+	height: 42px;
+	line-height: 42px
+}
+.mui-table-view .mui-media-object.mui-pull-left {
+	margin-right: 10px
+}
+.mui-table-view .mui-media-object.mui-pull-right {
+	margin-left: 10px
+}
+.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object {
+	max-width: 29px;
+	height: 29px;
+	margin: -4px 0;
+	line-height: 29px
+}
+.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object img {
+	max-width: 29px;
+	height: 29px;
+	line-height: 29px
+}
+.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object.mui-pull-left {
+	margin-right: 10px
+}
+.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object .mui-icon {
+	font-size: 29px
+}
+.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-body:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 55px;
+	height: 1px;
+	content: '';
+	background-color: #c8c7cc;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-table-view .mui-table-view-cell.mui-media-icon:after {
+	height: 0!important
+}
+.mui-table-view.mui-unfold .mui-table-view-cell.mui-collapse .mui-table-view {
+	display: block
+}
+.mui-table-view.mui-unfold .mui-table-view-cell.mui-collapse .mui-table-view:after,
+.mui-table-view.mui-unfold .mui-table-view-cell.mui-collapse .mui-table-view:before {
+	height: 0!important
+}
+.mui-table-view.mui-unfold .mui-table-view-cell.mui-media-icon.mui-collapse .mui-media-body:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 70px;
+	height: 1px;
+	content: '';
+	background-color: #c8c7cc;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-table-view-cell>.mui-badge,
+.mui-table-view-cell>.mui-btn,
+.mui-table-view-cell>.mui-switch,
+.mui-table-view-cell>a>.mui-badge,
+.mui-table-view-cell>a>.mui-btn,
+.mui-table-view-cell>a>.mui-switch {
+	position: absolute;
+	top: 50%;
+	right: 15px;
+	-webkit-transform: translateY(-50%);
+	transform: translateY(-50%)
+}
+.mui-table-view-cell .mui-navigate-left>.mui-badge,
+.mui-table-view-cell .mui-navigate-left>.mui-btn,
+.mui-table-view-cell .mui-navigate-left>.mui-switch,
+.mui-table-view-cell .mui-navigate-right>.mui-badge,
+.mui-table-view-cell .mui-navigate-right>.mui-btn,
+.mui-table-view-cell .mui-navigate-right>.mui-switch,
+.mui-table-view-cell .mui-push-left>.mui-badge,
+.mui-table-view-cell .mui-push-left>.mui-btn,
+.mui-table-view-cell .mui-push-left>.mui-switch,
+.mui-table-view-cell .mui-push-right>.mui-badge,
+.mui-table-view-cell .mui-push-right>.mui-btn,
+.mui-table-view-cell .mui-push-right>.mui-switch,
+.mui-table-view-cell>a .mui-navigate-left>.mui-badge,
+.mui-table-view-cell>a .mui-navigate-left>.mui-btn,
+.mui-table-view-cell>a .mui-navigate-left>.mui-switch,
+.mui-table-view-cell>a .mui-navigate-right>.mui-badge,
+.mui-table-view-cell>a .mui-navigate-right>.mui-btn,
+.mui-table-view-cell>a .mui-navigate-right>.mui-switch,
+.mui-table-view-cell>a .mui-push-left>.mui-badge,
+.mui-table-view-cell>a .mui-push-left>.mui-btn,
+.mui-table-view-cell>a .mui-push-left>.mui-switch,
+.mui-table-view-cell>a .mui-push-right>.mui-badge,
+.mui-table-view-cell>a .mui-push-right>.mui-btn,
+.mui-table-view-cell>a .mui-push-right>.mui-switch {
+	right: 35px
+}
+.mui-content>.mui-table-view:first-child {
+	margin-top: 15px
+}
+.mui-table-view-cell.mui-collapse>.mui-navigate-right:after,
+.mui-table-view-cell.mui-collapse>.mui-push-right:after {
+	content: '\e581'
+}
+.mui-table-view-cell.mui-collapse.mui-active .mui-collapse-content,
+.mui-table-view-cell.mui-collapse.mui-active .mui-table-view {
+	display: block
+}
+.mui-table-view-cell.mui-collapse.mui-active>.mui-navigate-right:after,
+.mui-table-view-cell.mui-collapse.mui-active>.mui-push-right:after {
+	content: '\e580'
+}
+.mui-table-view-cell.mui-collapse .mui-collapse-content {
+	position: relative;
+	display: none;
+	padding: 8px 15px;
+	margin: 11px -15px -11px;
+	overflow: hidden;
+	background: #fff;
+	border: 1px solid #ddd;
+	-webkit-transition: height .35s ease;
+	-o-transition: height .35s ease;
+	transition: height .35s ease
+}
+.mui-table-view-cell.mui-collapse .mui-collapse-content>.mui-input-group,
+.mui-table-view-cell.mui-collapse .mui-collapse-content>.mui-slider {
+	width: auto;
+	height: auto;
+	margin: -8px -15px
+}
+.mui-table-view-cell.mui-collapse .mui-collapse-content>.mui-slider {
+	margin: -8px -16px
+}
+.mui-table-view-cell.mui-collapse .mui-table-view {
+	display: none;
+	margin-top: 11px;
+	margin-right: -15px;
+	margin-bottom: -11px;
+	margin-left: -15px;
+	border: 0
+}
+.mui-table-view-cell.mui-collapse .mui-table-view.mui-table-view-chevron {
+	margin-right: -65px
+}
+.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell {
+	padding-left: 31px;
+	background-position: 31px 100%
+}
+.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 30px;
+	height: 1px;
+	content: '';
+	background-color: #c8c7cc;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-table-view.mui-grid-view {
+	display: block;
+	width: 100%;
+	padding: 0 10px 10px 0;
+	font-size: 0;
+	white-space: normal
+}
+.mui-table-view.mui-grid-view .mui-table-view-cell {
+	display: inline-block;
+	padding: 10px 0 0 14px;
+	margin-right: -4px;
+	font-size: 17px;
+	text-align: center;
+	vertical-align: middle;
+	background: 0 0
+}
+.mui-table-view.mui-grid-view .mui-table-view-cell .mui-media-object {
+	width: 100%;
+	max-width: 100%;
+	height: auto
+}
+.mui-table-view.mui-grid-view .mui-table-view-cell>a:not(.mui-btn) {
+	margin: -10px 0 0 -14px
+}
+.mui-table-view.mui-grid-view .mui-table-view-cell>a:not(.mui-btn).mui-active,
+.mui-table-view.mui-grid-view .mui-table-view-cell>a:not(.mui-btn):active {
+	background: 0 0
+}
+.mui-table-view.mui-grid-view .mui-table-view-cell .mui-media-body {
+	display: block;
+	width: 100%;
+	height: 15px;
+	margin-top: 8px;
+	font-size: 15px;
+	line-height: 15px;
+	color: #333;
+	text-overflow: ellipsis
+}
+.mui-table-view.mui-grid-view .mui-table-view-cell:after,
+.mui-table-view.mui-grid-view .mui-table-view-cell:before {
+	height: 0
+}
+.mui-grid-view.mui-grid-9 {
+	padding: 1px 0;
+	padding-right: 0;
+	background-color: #f2f2f2
+}
+.mui-grid-view.mui-grid-9 .mui-table-view-cell {
+	padding: 11px 15px;
+	margin: -1px 0 0 -1px;
+	vertical-align: top;
+	border-top: 1px solid #eee;
+	border-left: 1px solid #eee
+}
+.mui-grid-view.mui-grid-9 .mui-table-view-cell.mui-active {
+	background-color: #eee
+}
+.mui-grid-view.mui-grid-9 .mui-table-view-cell>a:not(.mui-btn) {
+	padding: 10px 0;
+	margin: 0
+}
+.mui-grid-view.mui-grid-9 .mui-media {
+	color: #797979
+}
+.mui-grid-view.mui-grid-9 .mui-media .mui-icon {
+	position: relative;
+	font-size: 2.4em
+}
+.mui-slider-cell {
+	position: relative
+}
+.mui-slider-cell>.mui-slider-handle {
+	z-index: 1
+}
+.mui-slider-cell>.mui-slider-left,
+.mui-slider-cell>.mui-slider-right {
+	position: absolute;
+	top: 0;
+	bottom: 0;
+	z-index: 0
+}
+.mui-slider-cell>.mui-slider-left {
+	left: 0
+}
+.mui-slider-cell>.mui-slider-right {
+	right: 0
+}
+input,
+select,
+textarea {
+	font-family: "Helvetica Neue", Helvetica, sans-serif;
+	font-size: 17px;
+	-webkit-tap-highlight-color: transparent;
+	-webkit-tap-highlight-color: transparent
+}
+input:focus,
+select:focus,
+textarea:focus {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-tap-highlight-color: transparent;
+	-webkit-user-modify: read-write-plaintext-only
+}
+input[type=color],
+input[type=date],
+input[type=datetime-local],
+input[type=datetime],
+input[type=email],
+input[type=month],
+input[type=number],
+input[type=password],
+input[type=search],
+input[type=tel],
+input[type=text],
+input[type=time],
+input[type=url],
+input[type=week],
+select,
+textarea {
+	width: 100%;
+	height: 40px;
+	-webkit-appearance: none;
+	padding: 10px 15px;
+	margin-bottom: 15px;
+	line-height: 21px;
+	-webkit-user-select: text;
+	background-color: #fff;
+	border: 1px solid rgba(0, 0, 0, .2);
+	border-radius: 3px;
+	outline: 0
+}
+input[type=search] {
+	height: 34px;
+	-webkit-box-sizing: border-box;
+	box-sizing: border-box;
+	font-size: 16px;
+	text-align: center;
+	background-color: rgba(0, 0, 0, .1);
+	border: 0;
+	border-radius: 6px
+}
+input[type=search]:focus {
+	text-align: left
+}
+textarea {
+	height: auto;
+	resize: none
+}
+select {
+	height: auto;
+	margin-top: 1px;
+	font-size: 14px;
+	background-color: #fff;
+	border: 0!important
+}
+select:focus {
+	-webkit-user-modify: read-only
+}
+.mui-input-group {
+	position: relative;
+	padding: 0;
+	background-color: #fff;
+	border: 0
+}
+.mui-input-group:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	background-color: #c8c7cc;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-input-group:before {
+	position: absolute;
+	top: 0;
+	right: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	background-color: #c8c7cc;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-input-group input[type=text],
+.mui-input-group textarea {
+	margin-bottom: 0;
+	background-color: transparent;
+	border: 0;
+	border-radius: 0;
+	-webkit-box-shadow: none;
+	box-shadow: none
+}
+.mui-input-group input[type=text]:after,
+.mui-input-group textarea:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 15px;
+	height: 1px;
+	content: '';
+	background-color: #c8c7cc;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-input-group input[type=search] {
+	background: 0 0
+}
+.mui-input-group input:last-child {
+	background-image: none
+}
+.mui-input-row {
+	overflow: hidden;
+	clear: left
+}
+.mui-input-row select {
+	height: 37px;
+	padding: 0;
+	font-size: 17px
+}
+.mui-input-row label+input,
+.mui-input-row:last-child {
+	background-image: none
+}
+.mui-input-group .mui-input-row {
+	height: 40px
+}
+.mui-input-group .mui-input-row:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 15px;
+	height: 1px;
+	content: '';
+	background-color: #c8c7cc;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-input-row label {
+	float: left;
+	width: 35%;
+	padding: 10px 15px;
+	font-family: "Helvetica Neue", Helvetica, sans-serif;
+	line-height: 1.1
+}
+.mui-input-row label~input,
+.mui-input-row label~select,
+.mui-input-row label~textarea {
+	float: right;
+	width: 65%;
+	padding-left: 0;
+	margin-bottom: 0;
+	border: 0
+}
+.mui-button-row {
+	position: relative;
+	padding-top: 5px;
+	text-align: center
+}
+.mui-input-group .mui-button-row {
+	height: 45px
+}
+.mui-input-row {
+	position: relative
+}
+.mui-input-row.mui-input-range {
+	padding-right: 20px;
+	overflow: visible
+}
+.mui-input-row .mui-inline {
+	padding: 8px 0
+}
+.mui-input-row .mui-input-clear~.mui-icon-clear,
+.mui-input-row .mui-input-speech~.mui-icon-speech {
+	position: absolute;
+	top: 10px;
+	right: 0;
+	z-index: 1;
+	width: 38px;
+	height: 38px;
+	font-size: 20px;
+	color: #999;
+	text-align: center
+}
+.mui-input-row .mui-input-speech~.mui-icon-speech {
+	top: 8px;
+	font-size: 24px
+}
+.mui-input-row .mui-input-clear~.mui-icon-clear~.mui-icon-speech {
+	display: none
+}
+.mui-input-row .mui-input-clear~.mui-icon-clear.mui-hidden~.mui-icon-speech {
+	display: inline-block
+}
+.mui-input-row .mui-icon-speech~.mui-placeholder {
+	right: 38px
+}
+.mui-input-row.mui-search .mui-icon-clear {
+	top: 7px
+}
+.mui-input-row.mui-search .mui-icon-speech {
+	top: 5px
+}
+.mui-checkbox,
+.mui-radio {
+	position: relative
+}
+.mui-checkbox label,
+.mui-radio label {
+	display: inline-block;
+	float: none;
+	width: 100%
+}
+.mui-checkbox.mui-left input[type=checkbox],
+.mui-radio.mui-left input[type=radio] {
+	left: 20px
+}
+.mui-checkbox.mui-left label,
+.mui-radio.mui-left label {
+	padding-left: 58px
+}
+.mui-checkbox input[type=checkbox],
+.mui-radio input[type=radio] {
+	position: absolute;
+	top: 4px;
+	right: 20px;
+	display: inline-block;
+	width: 28px;
+	height: 26px;
+	-webkit-appearance: none;
+	background-color: transparent;
+	border: 0;
+	outline: 0!important
+}
+.mui-checkbox input[type=checkbox]:before{
+	font-family: iconfont2;
+	font-size: 22px;
+	font-weight: 400;
+	line-height: 1;
+	color: rgba(170, 170, 170, .6);
+	text-decoration: none;
+	background: 0 0;
+	border-radius: 0;
+	-webkit-font-smoothing: antialiased
+}
+
+.mui-radio input[type=radio]:before {
+	font-family: Muiicons;
+	font-size: 28px;
+	font-weight: 400;
+	line-height: 1;
+	color: rgba(170, 170, 170, .6);
+	text-decoration: none;
+	background: 0 0;
+	border-radius: 0;
+	-webkit-font-smoothing: antialiased
+}
+.mui-checkbox input[type=checkbox]:checked:before,
+.mui-radio input[type=radio]:checked:before {
+	color: #007aff
+}
+.mui-radio input[type=radio]:before {
+	content: "\e411"
+}
+.mui-radio input[type=radio]:checked:before {
+	content: "\e441"
+}
+.mui-checkbox input[type=checkbox]:before {
+	content: "\e648"
+}
+.mui-checkbox input[type=checkbox]:checked:before {
+	content: "\e649"
+}
+.mui-select {
+	position: relative
+}
+.mui-select:before {
+	position: absolute;
+	top: 8px;
+	right: 21px;
+	font-family: Muiicons;
+	color: rgba(170, 170, 170, .6);
+	content: '\e581'
+}
+.mui-input-row .mui-switch {
+	float: right;
+	margin-top: 5px;
+	margin-right: 20px
+}
+.mui-input-range input[type=range] {
+	position: relative;
+	width: 100%;
+	height: 2px;
+	-webkit-appearance: none!important;
+	padding: 0;
+	margin: 17px 0;
+	cursor: pointer;
+	background-color: #999;
+	border: 0;
+	border-radius: 3px;
+	outline: 0
+}
+.mui-input-range input[type=range]::-webkit-slider-thumb {
+	width: 28px;
+	height: 28px;
+	-webkit-appearance: none!important;
+	background-color: #007aff;
+	background-clip: padding-box;
+	border-color: #0062cc;
+	border-radius: 50%
+}
+.mui-input-range label~input[type=range] {
+	width: 65%
+}
+.mui-input-range .mui-tooltip {
+	position: absolute;
+	top: -70px;
+	z-index: 1;
+	width: 64px;
+	height: 64px;
+	font-size: 36px;
+	line-height: 64px;
+	color: #333;
+	text-align: center;
+	text-shadow: 0 1px 0 #f3f3f3;
+	background-color: #fff;
+	border: 1px solid #ddd;
+	border-radius: 6px;
+	opacity: .8
+}
+.mui-search {
+	position: relative
+}
+.mui-search input[type=search] {
+	padding-left: 30px
+}
+.mui-search .mui-placeholder {
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	z-index: 1;
+	display: inline-block;
+	height: 34px;
+	font-size: 16px;
+	line-height: 34px;
+	color: #999;
+	text-align: center;
+	background: 0 0;
+	border: 0;
+	border-radius: 6px
+}
+.mui-search .mui-placeholder .mui-icon {
+	font-size: 20px;
+	color: #333
+}
+.mui-search:before {
+	position: absolute;
+	top: 50%;
+	right: 50%;
+	display: none;
+	margin-top: -18px;
+	margin-right: 31px;
+	font-family: Muiicons;
+	font-size: 20px;
+	font-weight: 400;
+	content: '\e466'
+}
+.mui-search.mui-active:before {
+	right: auto;
+	left: 5px;
+	display: block;
+	margin-right: 0;
+	font-size: 20px
+}
+.mui-search.mui-active input[type=search] {
+	text-align: left
+}
+.mui-search.mui-active .mui-placeholder {
+	display: none
+}
+.mui-segmented-control {
+	position: relative;
+	display: table;
+	width: 100%;
+	overflow: hidden;
+	font-size: 15px;
+	font-weight: 400;
+	table-layout: fixed;
+	background-color: transparent;
+	border: 1px solid #007aff;
+	border-radius: 3px;
+	-webkit-touch-callout: none
+}
+.mui-segmented-control.mui-scroll-wrapper {
+	height: 38px
+}
+.mui-segmented-control.mui-scroll-wrapper .mui-scroll {
+	width: auto;
+	height: 40px;
+	white-space: nowrap
+}
+.mui-segmented-control.mui-scroll-wrapper .mui-control-item {
+	display: inline-block;
+	width: auto;
+	padding: 0 20px;
+	border: 0
+}
+.mui-segmented-control .mui-control-item {
+	display: table-cell;
+	width: 1%;
+	overflow: hidden;
+	line-height: 38px;
+	color: #007aff;
+	text-align: center;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	border-color: #007aff;
+	border-left: 1px solid #007aff;
+	-webkit-transition: background-color .1s linear;
+	transition: background-color .1s linear
+}
+.mui-segmented-control .mui-control-item:first-child {
+	border-left-width: 0
+}
+.mui-segmented-control .mui-control-item.mui-active {
+	color: #fff;
+	background-color: #007aff
+}
+.mui-segmented-control.mui-segmented-control-inverted {
+	width: 100%;
+	border: 0;
+	border-radius: 0
+}
+.mui-segmented-control.mui-segmented-control-inverted .mui-control-item {
+	color: inherit;
+	border: 0
+}
+.mui-segmented-control.mui-segmented-control-inverted .mui-control-item.mui-active {
+	color: #007aff;
+	background: 0 0;
+	border-bottom: 2px solid #007aff
+}
+.mui-segmented-control.mui-segmented-control-inverted~.mui-slider-progress-bar {
+	background-color: #007aff
+}
+.mui-segmented-control-positive {
+	border: 1px solid #4cd964
+}
+.mui-segmented-control-positive .mui-control-item {
+	color: #4cd964;
+	border-color: inherit
+}
+.mui-segmented-control-positive .mui-control-item.mui-active {
+	color: #fff;
+	background-color: #4cd964
+}
+.mui-segmented-control-positive.mui-segmented-control-inverted .mui-control-item.mui-active {
+	color: #4cd964;
+	background: 0 0;
+	border-bottom: 2px solid #4cd964
+}
+.mui-segmented-control-positive.mui-segmented-control-inverted~.mui-slider-progress-bar {
+	background-color: #4cd964
+}
+.mui-segmented-control-negative {
+	border: 1px solid #dd524d
+}
+.mui-segmented-control-negative .mui-control-item {
+	color: #dd524d;
+	border-color: inherit
+}
+.mui-segmented-control-negative .mui-control-item.mui-active {
+	color: #fff;
+	background-color: #dd524d
+}
+.mui-segmented-control-negative.mui-segmented-control-inverted .mui-control-item.mui-active {
+	color: #dd524d;
+	background: 0 0;
+	border-bottom: 2px solid #dd524d
+}
+.mui-segmented-control-negative.mui-segmented-control-inverted~.mui-slider-progress-bar {
+	background-color: #dd524d
+}
+.mui-control-content {
+	position: relative;
+	display: none
+}
+.mui-control-content.mui-active {
+	display: block
+}
+.mui-popover {
+	position: absolute;
+	z-index: 999;
+	display: none;
+	width: 280px;
+	background-color: rgba(247, 247, 247, .98);
+	border-radius: 7px;
+	-webkit-box-shadow: 0 0 15px rgba(0, 0, 0, .1);
+	box-shadow: 0 0 15px rgba(0, 0, 0, .1);
+	opacity: 0;
+	-webkit-transition: opacity .3s;
+	transition: opacity .3s;
+	-webkit-transition-property: opacity;
+	transition-property: opacity;
+	-webkit-transform: none;
+	transform: none
+}
+.mui-popover .mui-popover-arrow {
+	position: absolute;
+	top: -25px;
+	left: 0;
+	z-index: 1000;
+	width: 26px;
+	height: 26px;
+	overflow: hidden
+}
+.mui-popover .mui-popover-arrow:after {
+	position: absolute;
+	top: 19px;
+	left: 0;
+	width: 26px;
+	height: 26px;
+	content: ' ';
+	background: rgba(247, 247, 247, .98);
+	border-radius: 3px;
+	-webkit-transform: rotate(45deg);
+	transform: rotate(45deg)
+}
+.mui-popover .mui-popover-arrow.mui-bottom {
+	top: 100%;
+	left: -26px;
+	margin-top: -1px
+}
+.mui-popover .mui-popover-arrow.mui-bottom:after {
+	top: -19px;
+	left: 0
+}
+.mui-popover.mui-popover-action {
+	bottom: 0;
+	width: 100%;
+	background: 0 0;
+	border-radius: 0;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	-webkit-transition: -webkit-transform .3s, opacity .3s;
+	transition: transform .3s, opacity .3s;
+	-webkit-transform: translate3d(0, 100%, 0);
+	transform: translate3d(0, 100%, 0)
+}
+.mui-popover.mui-popover-action .mui-popover-arrow {
+	display: none
+}
+.mui-popover.mui-popover-action.mui-active {
+	-webkit-transform: translate3d(0, 0, 0);
+	transform: translate3d(0, 0, 0)
+}
+.mui-popover.mui-popover-action .mui-table-view {
+	margin: 8px;
+	color: #007aff;
+	text-align: center;
+	border-radius: 4px
+}
+.mui-popover.mui-popover-action .mui-table-view .mui-table-view-cell:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	background-color: #c8c7cc;
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5)
+}
+.mui-popover.mui-popover-action .mui-table-view small {
+	display: block;
+	font-weight: 400;
+	line-height: 1.3
+}
+.mui-popover.mui-active {
+	display: block;
+	opacity: 1
+}
+.mui-popover .mui-bar~.mui-table-view {
+	padding-top: 44px
+}
+.mui-backdrop {
+	position: fixed;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	z-index: 1;
+	background-color: rgba(0, 0, 0, .3)
+}
+.mui-bar-backdrop.mui-backdrop {
+	bottom: 50px;
+	background: 0 0
+}
+.mui-backdrop-action.mui-backdrop {
+	background-color: rgba(0, 0, 0, .3)
+}
+.mui-backdrop-action.mui-backdrop,
+.mui-bar-backdrop.mui-backdrop {
+	opacity: 0
+}
+.mui-backdrop-action.mui-backdrop.mui-active,
+.mui-bar-backdrop.mui-backdrop.mui-active {
+	opacity: 1;
+	-webkit-transition: all .4s ease;
+	transition: all .4s ease
+}
+.mui-popover .mui-btn-block {
+	margin-bottom: 5px
+}
+.mui-popover .mui-btn-block:last-child {
+	margin-bottom: 0
+}
+.mui-popover .mui-bar {
+	-webkit-box-shadow: none;
+	box-shadow: none
+}
+.mui-popover .mui-bar-nav {
+	border-bottom: 1px solid rgba(0, 0, 0, .15);
+	border-top-left-radius: 12px;
+	border-top-right-radius: 12px;
+	-webkit-box-shadow: none;
+	box-shadow: none
+}
+.mui-popover .mui-scroll-wrapper {
+	margin: 7px 0;
+	background-clip: padding-box;
+	border-radius: 7px
+}
+.mui-popover .mui-scroll .mui-table-view {
+	max-height: none
+}
+.mui-popover .mui-table-view {
+	max-height: 300px;
+	margin-bottom: 0;
+	overflow: auto;
+	-webkit-overflow-scrolling: touch;
+	background-color: rgba(247, 247, 247, .98);
+	background-image: none;
+	border-radius: 7px
+}
+.mui-popover .mui-table-view:after,
+.mui-popover .mui-table-view:before {
+	height: 0
+}
+.mui-popover .mui-table-view .mui-table-view-cell:first-child,
+.mui-popover .mui-table-view .mui-table-view-cell:first-child>a:not(.mui-btn) {
+	border-top-left-radius: 12px;
+	border-top-right-radius: 12px
+}
+.mui-popover .mui-table-view .mui-table-view-cell:last-child,
+.mui-popover .mui-table-view .mui-table-view-cell:last-child>a:not(.mui-btn) {
+	border-bottom-right-radius: 12px;
+	border-bottom-left-radius: 12px
+}
+.mui-popover.mui-bar-popover .mui-table-view {
+	width: 106px
+}
+.mui-popover.mui-bar-popover .mui-table-view .mui-table-view-cell {
+	padding: 11px 15px;
+	background-position: 0 100%
+}
+.mui-popover.mui-bar-popover .mui-table-view .mui-table-view-cell>a:not(.mui-btn) {
+	margin: -11px -15px -11px -15px
+}
+.mui-pagination {
+	display: inline-block;
+	padding-left: 0;
+	margin: 0 auto;
+	border-radius: 6px
+}
+.mui-pagination>li {
+	display: inline
+}
+.mui-pagination>li>a,
+.mui-pagination>li>span {
+	position: relative;
+	float: left;
+	padding: 6px 12px;
+	margin-left: -1px;
+	line-height: 1.428571429;
+	color: #007aff;
+	text-decoration: none;
+	background-color: #fff;
+	border: 1px solid #ddd
+}
+.mui-pagination>li:first-child>a,
+.mui-pagination>li:first-child>span {
+	margin-left: 0;
+	background-clip: padding-box;
+	border-top-left-radius: 6px;
+	border-bottom-left-radius: 6px
+}
+.mui-pagination>li:last-child>a,
+.mui-pagination>li:last-child>span {
+	background-clip: padding-box;
+	border-top-right-radius: 6px;
+	border-bottom-right-radius: 6px
+}
+.mui-pagination>li.mui-active>a,
+.mui-pagination>li.mui-active>a:active,
+.mui-pagination>li.mui-active>span,
+.mui-pagination>li.mui-active>span:active,
+.mui-pagination>li:active>a,
+.mui-pagination>li:active>a:active,
+.mui-pagination>li:active>span,
+.mui-pagination>li:active>span:active {
+	z-index: 2;
+	color: #fff;
+	cursor: default;
+	background-color: #007aff;
+	border-color: #007aff
+}
+.mui-pagination>li.mui-disabled>a,
+.mui-pagination>li.mui-disabled>a:active,
+.mui-pagination>li.mui-disabled>span,
+.mui-pagination>li.mui-disabled>span:active {
+	color: #777;
+	background-color: #fff;
+	border: 1px solid #ddd;
+	opacity: .6
+}
+.mui-pagination-lg>li>a,
+.mui-pagination-lg>li>span {
+	padding: 10px 16px;
+	font-size: 18px
+}
+.mui-pagination-sm>li>a,
+.mui-pagination-sm>li>span {
+	padding: 5px 10px;
+	font-size: 12px
+}
+.mui-pager {
+	padding-left: 0;
+	text-align: center;
+	list-style: none
+}
+.mui-pager:after,
+.mui-pager:before {
+	display: table;
+	content: " "
+}
+.mui-pager:after {
+	clear: both
+}
+.mui-pager li {
+	display: inline
+}
+.mui-pager li>a,
+.mui-pager li>span {
+	display: inline-block;
+	padding: 5px 14px;
+	background-color: #fff;
+	background-clip: padding-box;
+	border: 1px solid #ddd;
+	border-radius: 6px
+}
+.mui-pager li.mui-active>a,
+.mui-pager li.mui-active>span,
+.mui-pager li:active>a,
+.mui-pager li:active>span {
+	color: #fff;
+	text-decoration: none;
+	cursor: default;
+	background-color: #007aff;
+	border-color: #007aff
+}
+.mui-pager .mui-next>a,
+.mui-pager .mui-next>span {
+	float: right
+}
+.mui-pager .mui-previous>a,
+.mui-pager .mui-previous>span {
+	float: left
+}
+.mui-pager .mui-disabled>a,
+.mui-pager .mui-disabled>a:active,
+.mui-pager .mui-disabled>span,
+.mui-pager .mui-disabled>span:active {
+	color: #777;
+	background-color: #fff;
+	border: 1px solid #ddd;
+	opacity: .6
+}
+.mui-modal {
+	position: fixed;
+	top: 0;
+	z-index: 999;
+	width: 100%;
+	min-height: 100%;
+	overflow: hidden;
+	background-color: #fff;
+	opacity: 0;
+	-webkit-transition: -webkit-transform .25s, opacity 1ms .25s;
+	transition: transform .25s, opacity 1ms .25s;
+	-webkit-transition-timing-function: cubic-bezier(.1, .5, .1, 1);
+	transition-timing-function: cubic-bezier(.1, .5, .1, 1);
+	-webkit-transform: translate3d(0, 100%, 0);
+	transform: translate3d(0, 100%, 0)
+}
+.mui-modal.mui-active {
+	height: 100%;
+	opacity: 1;
+	-webkit-transition: -webkit-transform .25s;
+	transition: transform .25s;
+	-webkit-transition-timing-function: cubic-bezier(.1, .5, .1, 1);
+	transition-timing-function: cubic-bezier(.1, .5, .1, 1);
+	-webkit-transform: translate3d(0, 0, 0);
+	transform: translate3d(0, 0, 0)
+}
+.mui-android .mui-modal .mui-bar {
+	position: static
+}
+.mui-android .mui-modal .mui-bar-nav~.mui-content {
+	padding-top: 0
+}
+.mui-slider {
+	position: relative;
+	width: 100%;
+	overflow: hidden
+}
+.mui-slider .mui-segmented-control.mui-segmented-control-inverted .mui-control-item.mui-active {
+	border-bottom: 0
+}
+.mui-slider .mui-segmented-control.mui-segmented-control-inverted~.mui-slider-group .mui-slider-item {
+	border-top: 1px solid #c8c7cc;
+	border-bottom: 1px solid #c8c7cc
+}
+.mui-slider .mui-slider-group {
+	position: relative;
+	font-size: 0;
+	white-space: nowrap;
+	-webkit-transition: all 0s linear;
+	transition: all 0s linear
+}
+.mui-slider .mui-slider-group .mui-slider-item {
+	position: relative;
+	display: inline-block;
+	width: 100%;
+	height: 100%;
+	font-size: 14px;
+	vertical-align: top
+}
+.mui-slider .mui-slider-group .mui-slider-item>a:not(.mui-control-item) {
+	position: relative;
+	display: block;
+	line-height: 0
+}
+.mui-slider .mui-slider-group .mui-slider-item img {
+	width: 100%
+}
+.mui-slider .mui-slider-group .mui-slider-item .mui-table-view:after,
+.mui-slider .mui-slider-group .mui-slider-item .mui-table-view:before {
+	height: 0
+}
+.mui-slider .mui-slider-group.mui-slider-loop {
+	-webkit-transform: translate(-100%, 0);
+	transform: translate(-100%, 0)
+}
+.mui-slider-title {
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	width: 100%;
+	height: 30px;
+	margin: 0;
+	line-height: 30px;
+	text-align: left;
+	text-indent: 12px;
+	background-color: #000;
+	opacity: .8
+}
+.mui-slider-indicator {
+	position: absolute;
+	bottom: 8px;
+	width: 100%;
+	text-align: center;
+	background: 0 0
+}
+.mui-slider-indicator.mui-segmented-control {
+	position: relative;
+	bottom: auto
+}
+.mui-slider-indicator .mui-indicator {
+	display: inline-block;
+	width: 6px;
+	height: 6px;
+	margin: 1px 6px;
+	cursor: pointer;
+	background: #aaa;
+	border-radius: 50%;
+	-webkit-box-shadow: 0 0 1px 1px rgba(130, 130, 130, .7);
+	box-shadow: 0 0 1px 1px rgba(130, 130, 130, .7)
+}
+.mui-slider-indicator .mui-active.mui-indicator {
+	background: #fff
+}
+.mui-slider-indicator .mui-icon {
+	width: 40px;
+	height: 30px;
+	margin: 3px;
+	font-size: 20px;
+	line-height: 30px;
+	text-align: center;
+	border: 1px solid #ddd
+}
+.mui-slider-indicator .mui-number {
+	display: inline-block;
+	width: 58px;
+	line-height: 32px
+}
+.mui-slider-indicator .mui-number span {
+	color: #ff5053
+}
+.mui-slider-progress-bar {
+	z-index: 1;
+	height: 2px;
+	-webkit-transform: translateZ(0);
+	transform: translateZ(0);
+	-webkit-backface-visibility: hidden
+}
+.mui-switch {
+	position: relative;
+	display: block;
+	width: 74px;
+	height: 30px;
+	background-color: #fff;
+	background-clip: padding-box;
+	border: 2px solid #ddd;
+	border-radius: 20px;
+	-webkit-transition-timing-function: ease-in-out;
+	transition-timing-function: ease-in-out;
+	-webkit-transition-duration: .2s;
+	transition-duration: .2s;
+	-webkit-transition-property: background-color, border;
+	transition-property: background-color, border
+}
+.mui-switch .mui-switch-handle {
+	position: absolute;
+	top: -1px;
+	left: -1px;
+	z-index: 1;
+	width: 28px;
+	height: 28px;
+	background-color: #fff;
+	background-clip: padding-box;
+	border-radius: 16px;
+	-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, .4);
+	box-shadow: 0 2px 5px rgba(0, 0, 0, .4);
+	-webkit-transition: .2s ease-in-out;
+	transition: .2s ease-in-out;
+	-webkit-transition-property: -webkit-transform, width, left;
+	transition-property: transform, width, left
+}
+.mui-switch:before {
+	position: absolute;
+	top: 3px;
+	right: 11px;
+	font-size: 13px;
+	color: #999;
+	text-transform: uppercase;
+	content: "Off"
+}
+.mui-switch.mui-dragging {
+	background-color: rgba(247, 247, 247, .98);
+	border-color: rgba(247, 247, 247, .98)
+}
+.mui-switch.mui-dragging .mui-switch-handle {
+	width: 38px
+}
+.mui-switch.mui-dragging.mui-active .mui-switch-handle {
+	left: -11px;
+	width: 38px
+}
+.mui-switch.mui-active {
+	background-color: #4cd964;
+	border-color: #4cd964
+}
+.mui-switch.mui-active .mui-switch-handle {
+	-webkit-transform: translate3d(43px, 0, 0);
+	transform: translate3d(43px, 0, 0)
+}
+.mui-switch.mui-active:before {
+	right: auto;
+	left: 15px;
+	color: #fff;
+	content: "On"
+}
+.mui-switch input[type=checkbox] {
+	display: none
+}
+.mui-switch-mini {
+	width: 47px
+}
+.mui-switch-mini:before {
+	display: none
+}
+.mui-switch-mini.mui-active .mui-switch-handle {
+	-webkit-transform: translate3d(16px, 0, 0);
+	transform: translate3d(16px, 0, 0)
+}
+.mui-switch-blue.mui-active {
+	background-color: #007aff;
+	border: 2px solid #007aff
+}
+.mui-content.mui-fade {
+	left: 0;
+	opacity: 0
+}
+.mui-content.mui-fade.mui-in {
+	opacity: 1
+}
+.mui-content.mui-sliding {
+	z-index: 2;
+	-webkit-transition: -webkit-transform .4s;
+	transition: transform .4s;
+	-webkit-transform: translate3d(0, 0, 0);
+	transform: translate3d(0, 0, 0)
+}
+.mui-content.mui-sliding.mui-left {
+	z-index: 1;
+	-webkit-transform: translate3d(-100%, 0, 0);
+	transform: translate3d(-100%, 0, 0)
+}
+.mui-content.mui-sliding.mui-right {
+	z-index: 3;
+	-webkit-transform: translate3d(100%, 0, 0);
+	transform: translate3d(100%, 0, 0)
+}
+.mui-navigate-left:after,
+.mui-navigate-right:after,
+.mui-push-left:after,
+.mui-push-right:after {
+	position: absolute;
+	top: 50%;
+	display: inline-block;
+	font-family: Muiicons;
+	font-size: inherit;
+	line-height: 1;
+	color: #bbb;
+	text-decoration: none;
+	-webkit-transform: translateY(-50%);
+	transform: translateY(-50%);
+	-webkit-font-smoothing: antialiased
+}
+.mui-navigate-left:after,
+.mui-push-left:after {
+	left: 15px;
+	content: '\e582'
+}
+.mui-navigate-right:after,
+.mui-push-right:after {
+	right: 15px;
+	content: '\e583'
+}
+.mui-pull-bottom-pocket,
+.mui-pull-top-pocket {
+	position: absolute;
+	left: 0;
+	display: block;
+	width: 100%;
+	height: 50px;
+	overflow: hidden;
+	visibility: hidden
+}
+.mui-plus-pullrefresh .mui-pull-bottom-pocket,
+.mui-plus-pullrefresh .mui-pull-top-pocket {
+	display: none;
+	visibility: visible
+}
+.mui-pull-top-pocket {
+	top: 0
+}
+.mui-bar-nav~.mui-content .mui-pull-top-pocket {
+	top: 44px
+}
+.mui-pull-bottom-pocket {
+	position: relative;
+	bottom: 0;
+	height: 40px
+}
+.mui-pull-bottom-pocket .mui-pull-loading {
+	display: none
+}
+.mui-pull-bottom-pocket .mui-pull-loading.mui-in {
+	display: inline-block
+}
+.mui-pull {
+	position: absolute;
+	right: 0;
+	bottom: 10px;
+	left: 0;
+	font-weight: 700;
+	color: #777;
+	text-align: center
+}
+.mui-pull-loading {
+	margin-right: 10px;
+	vertical-align: middle;
+	-webkit-transition: -webkit-transform .4s;
+	transition: transform .4s;
+	-webkit-transition-duration: 400ms;
+	transition-duration: 400ms;
+	-webkit-backface-visibility: hidden
+}
+.mui-pull-loading.mui-reverse {
+	-webkit-transform: rotate(180deg) translateZ(0);
+	transform: rotate(180deg) translateZ(0)
+}
+.mui-pull-caption {
+	position: relative;
+	display: inline-block;
+	margin-top: 0;
+	overflow: visible;
+	font-size: 15px;
+	line-height: 24px;
+	vertical-align: middle
+}
+.mui-pull-caption span {
+	display: none
+}
+.mui-pull-caption span.mui-in {
+	display: inline
+}
+.mui-toast-container {
+	position: fixed;
+	bottom: 50px;
+	z-index: 9999;
+	width: 100%
+}
+.mui-toast-message {
+	width: 270px;
+	padding: 5px;
+	margin: 5px auto;
+	font-size: 14px;
+	color: #000;
+	text-align: center;
+	background-color: #d8d8d8;
+	border-radius: 7px
+}
+@font-face {
+	font-family: Muiicons;
+	font-style: normal;
+	font-weight: 400;
+	src: url(../fonts/mui.ttf) format("truetype")
+}
+@font-face {
+	font-family: "iconfont2";
+	src: url('../fonts/iconfont2.ttf') format('truetype');
+}
+.mui-icon {
+	display: inline-block;
+	font-family: Muiicons;
+	font-size: 24px;
+	font-style: normal;
+	font-weight: 400;
+	line-height: 1;
+	text-decoration: none;
+	-webkit-font-smoothing: antialiased
+}
+.mui-icon.mui-right:before {
+	float: right;
+	padding-left: .2em
+}
+.mui-icon-contact:before {
+	content: "\e100"
+}
+.mui-icon-person:before {
+	content: "\e101"
+}
+.mui-icon-personadd:before {
+	content: "\e102"
+}
+.mui-icon-contact-filled:before {
+	content: "\e130"
+}
+.mui-icon-person-filled:before {
+	content: "\e131"
+}
+.mui-icon-personadd-filled:before {
+	content: "\e132"
+}
+.mui-icon-phone:before {
+	content: "\e200"
+}
+.mui-icon-email:before {
+	content: "\e201"
+}
+.mui-icon-chatbubble:before {
+	content: "\e202"
+}
+.mui-icon-chatboxes:before {
+	content: "\e203"
+}
+.mui-icon-phone-filled:before {
+	content: "\e230"
+}
+.mui-icon-email-filled:before {
+	content: "\e231"
+}
+.mui-icon-chatbubble-filled:before {
+	content: "\e232"
+}
+.mui-icon-chatboxes-filled:before {
+	content: "\e233"
+}
+.mui-icon-weibo:before {
+	content: "\e260"
+}
+.mui-icon-weixin:before {
+	content: "\e261"
+}
+.mui-icon-pengyouquan:before {
+	content: "\e262"
+}
+.mui-icon-chat:before {
+	content: "\e263"
+}
+.mui-icon-videocam:before {
+	content: "\e300"
+}
+.mui-icon-camera:before {
+	content: "\e301"
+}
+.mui-icon-mic:before {
+	content: "\e302"
+}
+.mui-icon-location:before {
+	content: "\e303"
+}
+.mui-icon-mic-filled:before,
+.mui-icon-speech:before {
+	content: "\e332"
+}
+.mui-icon-location-filled:before {
+	content: "\e333"
+}
+.mui-icon-micoff:before {
+	content: "\e360"
+}
+.mui-icon-image:before {
+	content: "\e363"
+}
+.mui-icon-map:before {
+	content: "\e364"
+}
+.mui-icon-compose:before {
+	content: "\e400"
+}
+.mui-icon-trash:before {
+	content: "\e401"
+}
+.mui-icon-upload:before {
+	content: "\e402"
+}
+.mui-icon-download:before {
+	content: "\e403"
+}
+.mui-icon-close:before {
+	content: "\e404"
+}
+.mui-icon-redo:before {
+	content: "\e405"
+}
+.mui-icon-undo:before {
+	content: "\e406"
+}
+.mui-icon-refresh:before {
+	content: "\e407"
+}
+.mui-icon-star:before {
+	content: "\e408"
+}
+.mui-icon-plus:before {
+	content: "\e409"
+}
+.mui-icon-minus:before {
+	content: "\e410"
+}
+.mui-icon-checkbox:before,
+.mui-icon-circle:before {
+	content: "\e411"
+}
+.mui-icon-clear:before,
+.mui-icon-close-filled:before {
+	content: "\e434"
+}
+.mui-icon-refresh-filled:before {
+	content: "\e437"
+}
+.mui-icon-star-filled:before {
+	content: "\e438"
+}
+.mui-icon-plus-filled:before {
+	content: "\e439"
+}
+.mui-icon-minus-filled:before {
+	content: "\e440"
+}
+.mui-icon-circle-filled:before {
+	content: "\e441"
+}
+.mui-icon-checkbox-filled:before {
+	content: "\e442"
+}
+.mui-icon-closeempty:before {
+	content: "\e460"
+}
+.mui-icon-refreshempty:before {
+	content: "\e461"
+}
+.mui-icon-reload:before {
+	content: "\e462"
+}
+.mui-icon-starhalf:before {
+	content: "\e463"
+}
+.mui-icon-spinner:before {
+	content: "\e464"
+}
+.mui-icon-spinner-cycle:before {
+	content: "\e465"
+}
+.mui-icon-search:before {
+	content: "\e466"
+}
+.mui-icon-plusempty:before {
+	content: "\e468"
+}
+.mui-icon-forward:before {
+	content: "\e470"
+}
+.mui-icon-back:before,
+.mui-icon-left-nav:before {
+	content: "\e471"
+}
+.mui-icon-checkmarkempty:before {
+	content: "\e472"
+}
+.mui-icon-home:before {
+	content: "\e500"
+}
+.mui-icon-navigate:before {
+	content: "\e501"
+}
+.mui-icon-gear:before {
+	content: "\e502"
+}
+.mui-icon-paperplane:before {
+	content: "\e503"
+}
+.mui-icon-info:before {
+	content: "\e504"
+}
+.mui-icon-help:before {
+	content: "\e505"
+}
+.mui-icon-locked:before {
+	content: "\e506"
+}
+.mui-icon-more:before {
+	content: "\e507"
+}
+.mui-icon-flag:before {
+	content: "\e508"
+}
+.mui-icon-home-filled:before {
+	content: "\e530"
+}
+.mui-icon-gear-filled:before {
+	content: "\e532"
+}
+.mui-icon-info-filled:before {
+	content: "\e534"
+}
+.mui-icon-help-filled:before {
+	content: "\e535"
+}
+.mui-icon-more-filled:before {
+	content: "\e537"
+}
+.mui-icon-settings:before {
+	content: "\e560"
+}
+.mui-icon-list:before {
+	content: "\e562"
+}
+.mui-icon-bars:before {
+	content: "\e563"
+}
+.mui-icon-loop:before {
+	content: "\e565"
+}
+.mui-icon-paperclip:before {
+	content: "\e567"
+}
+.mui-icon-arrowup:before {
+	content: "\e580"
+}
+.mui-icon-arrowdown:before {
+	content: "\e581"
+}
+.mui-icon-arrowleft:before {
+	content: "\e582"
+}
+.mui-icon-arrowright:before {
+	content: "\e583"
+}
+.mui-icon-arrowthinup:before {
+	content: "\e584"
+}
+.mui-icon-arrowthindown:before {
+	content: "\e585"
+}
+.mui-icon-arrowthinleft:before {
+	content: "\e586"
+}
+.mui-icon-arrowthinright:before {
+	content: "\e587"
+}
+.mui-icon-pulldown:before {
+	content: "\e588"
+}
+.mui-fullscreen {
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	width: 100%;
+	height: 100%
+}
+.mui-fullscreen .mui-slider-group {
+	height: 100%
+}
+.mui-fullscreen .mui-segmented-control~.mui-slider-group {
+	position: absolute;
+	top: 40px;
+	bottom: 0;
+	width: 100%;
+	height: auto
+}
+.mui-fullscreen .mui-slider-item>a {
+	top: 50%;
+	-webkit-transform: translateY(-50%);
+	transform: translateY(-50%)
+}
+.mui-bar-tab~.mui-content .mui-slider.mui-fullscreen .mui-segmented-control~.mui-slider-group {
+	bottom: 50px
+}
+
+/*-------------------------------自定义(重写mui样式)-------------------------------*/
+.mui-bar {
+	height: 50px;
+	padding-top: 3px;
+	margin: 0;
+}
+.mui-title{
+	font-size: 18px;
+}

+ 159 - 0
db/category.js

@@ -0,0 +1,159 @@
+function createTableCategory(tx) {
+	console.log("add category data");
+	tx.executeSql('DROP TABLE IF EXISTS category', []);
+	//科目,课、章、节,status1为正常,0为锁定,process为进度,deleted为会否删除,local_version为本地版本号,remote_version为服务器端版本号
+	tx.executeSql('create table if not exists category(id INTEGER,code text,name text,status INTEGER,progress float,deleted INTEGER,local_version INTEGER,remote_version INTEGER,have_data INTEGGER)', []);
+
+	try {
+		// 未联网的情况下也是可以看到分类的。so,这个需要insert好多的基础数据
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [0, '0', '托普统考英语', 1, null, null, 1, 1, 2]);
+
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [1, '0001', '交际英语', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [2, '00010001', 'A级基础', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [3, '000100010001', '第1节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [4, '000100010002', '第2节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [5, '000100010003', '第3节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [6, '000100010004', '第4节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [7, '000100010005', '第5节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [8, '00010002', 'B级强化', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [9, '000100020001', '第1节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [10, '000100020002', '第2节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [11, '000100020003', '第3节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [12, '000100020004', '第4节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [13, '000100020005', '第5节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [14, '00010003', 'C级进阶 ', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [15, '000100030001', '第1节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [16, '000100030002', '第2节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [17, '000100030003', '第3节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [18, '000100030004', '第4节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [19, '000100030005', '第5节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [20, '0002', '阅读理解', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [21, '00020001', '判断对错', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [22, '000200010001', '第1节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [23, '000200010002', '第2节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [24, '000200010003', '第3节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [25, '000200010004', '第4节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [26, '000200010005', '第5节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [27, '000200010006', '第6节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [28, '000200010007', '第7节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [29, '000200010008', '第8节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [30, '000200010009', '第9节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [31, '000200010010', '第10节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [32, '000200010011', '第11节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [33, '000200010012', '第12节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [34, '000200010013', '第13节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [35, '000200010014', '第14节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [36, '000200010015', '第15节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [37, '000200010016', '第16节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [38, '000200010017', '第17节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [39, '000200010018', '第18节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [40, '000200010018', '第19节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [41, '00020002', '阅读选择', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [42, '000200020001', '第1节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [43, '000200020002', '第2节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [44, '000200020003', '第3节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [45, '000200020004', '第4节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [46, '000200020005', '第5节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [47, '000200020006', '第6节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [48, '000200020007', '第7节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [49, '000200020008', '第8节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [50, '000200020009', '第9节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [51, '000200020010', '第10节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [52, '000200020011', '第11节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [53, '000200020012', '第12节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [54, '000200020013', '第13节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [55, '000200020014', '第14节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [56, '000200020015', '第15节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [57, '000200020016', '第16节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [58, '000200020017', '第17节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [59, '000200020018', '第18节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [60, '000200020019', '第19节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [61, '000200020020', '第20节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [62, '000200020021', '第21节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [63, '0003', '词汇与结构', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [64, '00030001', '基础部分', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [65, '000300010001', '第1节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [66, '000300010002', '第2节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [67, '000300010003', '第3节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [68, '000300010004', '第4节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [69, '000300010005', '第5节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [70, '00030002', '重点部分', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [71, '000300020001', '第1节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [72, '000300020002', '第2节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [73, '000300020003', '第3节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [74, '000300020004', '第4节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [75, '000300020005', '第5节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [77, '0004', '完形填空', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [78, '00040001', '基础', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [79, '000400010001', '第1节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [80, '000400010002', '第2节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [81, '000400010003', '第3节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [82, '000400010004', '第4节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [83, '000400010005', '第5节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [84, '000400010006', '第6节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [85, '000400010007', '第7节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [86, '000400010008', '第8节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [87, '000400010009', '第9节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [88, '000400010010', '第10节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [89, '000400010011', '第11节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [90, '000400010012', '第12节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [91, '000400010013', '第13节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [92, '000400010014', '第14节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [93, '000400010015', '第15节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [94, '000400010016', '第16节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [95, '000400010017', '第17节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [96, '000400010018', '第18节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [97, '000400010019', '第19节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [98, '000400010020', '第20节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [99, '00040002', '强化', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [100, '000400020001', '第1节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [101, '000400020002', '第2节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [102, '000400020003', '第3节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [103, '000400020004', '第4节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [104, '000400020005', '第5节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [105, '000400020006', '第6节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [106, '000400020007', '第7节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [107, '000400020008', '第8节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [108, '000400020009', '第9节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [109, '000400020010', '第10节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [110, '000400020011', '第11节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [111, '000400020012', '第12节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [112, '000400020013', '第13节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [113, '000400020014', '第14节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [114, '000400020015', '第15节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [116, '0005', '英译汉复习资料', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [117, '00050001', '重点复习部分', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [118, '000500010001', '第1节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [119, '000500010002', '第2节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [120, '000500010003', '第3节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [121, '000500010004', '第4节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [122, '000500010005', '第5节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [123, '00050002', '尽量掌握部分', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [124, '000500020001', '第1节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [125, '000500020002', '第2节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [126, '000500020003', '第3节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [127, '000500020004', '第4节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [128, '000500020005', '第5节', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [129, '0006', '作文复习资料', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [130, '00060001', '基础背诵资料', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [131, '000600010001', '第1类:我的某某人', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [132, '000600010002', '第2类:计划类', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [133, '000600010003', '第3类:英语学习类', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [134, '000600010004', '第4类:优点和缺点', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [135, '000600010005', '第5类:运动类', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [136, '000600010006', '第6类:远程教育学习类', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [137, '000600010007', '第7类:书信类', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [138, '000600010008', '第8类:最喜爱的某某', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [139, '000600010009', '第9类:见解看法类', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [140, '000600010010', '第10类:议论文', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [141, '000600010011', '第11类:感谢信', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [142, '00060002', '万能套用模板', 1, 0, 1, 1, 1, 1]);
+		tx.executeSql('INSERT INTO category values(?,?,?,?,?,?,?,?,?)', [143, '000600020001', '适用所有作文类型', 1, 0, 1, 1, 1, 1]);
+	} catch (e) {
+		console.log('error---------------------');
+		console.log(e);
+	}
+	tx.executeSql('select * from category', [], function(tx, rs) {
+		console.log('category:' + rs.rows.length)
+	}, onError);
+}

+ 37 - 0
db/others.js

@@ -0,0 +1,37 @@
+function createTableOthers(tx) {
+	tx.executeSql('DROP TABLE IF EXISTS en_note', []);
+	tx.executeSql('create table if not exists en_note(id INTEGER PRIMARY KEY,user_id INTEGER,question_id INTEGER,note TEXT,create_time TEXT,deleted INTEGER,parent_id INTEGER)', []);
+
+	//tx.executeSql('INSERT INTO en_discuss values(?,?,?,?,?,?,?)', [1, 2, 3, '  sdf ', '',null,null]);
+
+	console.log(1)
+	tx.executeSql('DROP TABLE IF EXISTS en_discuss', []);
+	tx.executeSql('create table if not exists en_discuss(id INTEGER PRIMARY KEY,user_id INTEGER,question_id INTEGER,discuss TEXT,create_time TEXT,deleted INTEGER,parent_id INTEGER)', []);
+
+	console.log(2)
+	tx.executeSql('DROP TABLE IF EXISTS en_studytime', []);
+	tx.executeSql('create table if not exists en_studytime(id INTEGER PRIMARY KEY,user_id INTEGER,section_id INTEGER,study_time INTEGER,create_time TEXT,deleted INTEGER)', []);
+
+	console.log(3)
+	tx.executeSql('DROP TABLE IF EXISTS sys_user', []);
+	tx.executeSql('create table if not exists sys_user(id INTEGER PRIMARY KEY,phone TEXT,passwd TEXT,status INTEGER,deleted INTEGER,create_time TEXT,online INTEGER,key TEXT,available_time INTEGER,remain_time INTEGER)', []);
+
+
+	console.log('ok!!!!!!!!!!!!!!!')
+	tx.executeSql('select * from en_note', [], function(tx, rs) {
+		console.log('en_note:' + rs.rows.length)
+	}, onError);
+
+	tx.executeSql('select * from en_discuss', [], function(tx, rs) {
+		console.log('en_discuss:' + rs.rows.length)
+	}, onError);
+
+	tx.executeSql('select * from en_studytime', [], function(tx, rs) {
+		console.log('en_studytime:' + rs.rows.length)
+	}, onError);
+
+	tx.executeSql('select * from sys_user', [], function(tx, rs) {
+		console.log('sys_user:' + rs.rows.length)
+	}, onError);
+	console.log('ok!!!!!!!!!!!!!!!')
+}

+ 15 - 0
default.html

@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+		<title>初始化数据库</title>
+		<link href="css/mui.min.css" rel="stylesheet" />
+		<script src="js/mui.min.js"></script>
+		<script src="db/category.js" type="text/javascript" charset="utf-8"></script>
+		<script src="db/others.js" type="text/javascript" charset="utf-8"></script>
+		<script src="js/createDb.js" type="text/javascript" charset="utf-8"></script>
+	</head>
+
+</html>

+ 578 - 0
dragIndex.html

@@ -0,0 +1,578 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title>Hello MUI</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+
+		<link rel="stylesheet" href="css/mui.min.css">
+		<link rel="stylesheet" href="css/iconfont.css">
+		<script src="js/mui.min.js"></script>
+		<script src="js/routes.js"></script>
+		<script src="js/app.js"></script>
+		<script src="js/service.js"></script>
+		<script src="js/update.js"></script>
+		<style>
+			html,
+			body {
+				background-color: #efeff4;
+			}
+			.mui-off-canvas-left {
+				/*color: #fff;*/
+			}
+			.title {
+				margin: 35px 15px 10px;
+				margin-bottom: 20px;
+				font-size: 24px;
+				font-weight: 700;
+				color: green;
+			}
+			.title+.content {
+				margin: 10px 15px 35px;
+				color: #bbb;
+				text-indent: 1em;
+				font-size: 14px;
+				line-height: 24px;
+			}
+			#list {
+				/*避免导航边框和列表背景边框重叠,看起来像两条边框似得;*/
+				
+				padding-top: 130px;
+				margin-top: -1px;
+			}
+			#topPopover {
+				position: fixed;
+				top: 16px;
+				right: 6px;
+				width: 150px !important;
+				z-index: 2;
+				top: 60px !important;
+				height: 140px;
+			}
+			#topPopover .mui-popover-arrow {
+				left: auto;
+				right: 6px;
+			}
+			.mui-popover {
+				height: 100px;
+			}
+			.kaishi {
+				width: 100px;
+				height: 30px;
+				border-radius: 4px;
+				margin-left: auto;
+				margin-right: auto;
+				padding-top: 6px;
+				background-color: #EA5555;
+				color: white;
+				font-size: 14px;
+			}
+			.biaoti {
+				word-wrap: break-word;
+				word-break: normal;
+				white-space: normal;
+				height: 90px;
+				padding-top: 20px;
+				padding-left: 15px;
+				padding-right: 15px;
+				font-size: 18px;
+			}
+			.zhang {
+				height: 140px;
+				width: 90%;
+				margin: 0 auto;
+				border: 1px solid lightgray;
+				background-color: #F8F8F8;
+				border-radius: 6px;
+			}
+			.zhang:active {
+				background-color: #95DECA;
+				border: 1px solid #95DECA;
+			}
+			.mui-media-li-self {
+				margin-top: 30px;
+			}
+			.jindulan {
+				height: 100%;
+				background-color: #428bca;
+				border-bottom-left-radius: 4px;
+				border-top-left-radius: 4px;
+			}
+			.jindu {
+				text-align: center;
+				font-size: 12px;
+				margin: 0 auto;
+				width: 78%;
+				height: 25px;
+				border-radius: 4px;
+				background-color: #E2E6E5;
+			}
+			.my-course-img-1 {
+				/*margin-top: 50px !important;*/
+				
+				padding-bottom: 80px !important;
+				background-size: 100% 150px;
+				background-repeat: no-repeat;
+			}
+			.my-course-active {
+				width: 3px;
+				height: 100%;
+				background-color: red;
+				position: absolute;
+				margin-top: -32px;
+				margin-left: -10px;
+			}
+			.my-mui-navigate-right {
+				background-color: red !important;
+			}
+			.my-mui-table-view {
+				background-color: #EBEBEB !important;
+			}
+		</style>
+	</head>
+
+	<body style="margin: 0;padding: 0;">
+		<div id="offCanvasWrapper" class="mui-off-canvas-wrap mui-draggable">
+			<!--侧滑菜单部分-->
+			<aside id="offCanvasSide" class="mui-off-canvas-left">
+				<!--<div id="offCanvasSideScroll" class="mui-scroll-wrapper"><div class="mui-scroll">-->
+				<div class="title">课程</div>
+				<ul id="course-target-id" class="mui-table-view mui-table-view-chevron mui-table-view-inverted">
+				</ul>
+				<div id="btn-denglu-id" style="bottom: 30px;position: fixed;font-size: 20px;font-weight: 800;width: 100%;">
+					<hr />
+					<br />
+					<a style="padding:10px;margin-left:10%;border-radius: 3px;">
+						<span class="mui-icon mui-icon-person"></span>
+						<span id="span-login-id">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;登&nbsp;&nbsp;录&nbsp;&nbsp;</span>
+					</a>
+				</div>
+				<!--</div></div>-->
+			</aside>
+			<!--主界面部分-->
+			<div class="mui-inner-wrap" style="position: fixed !important;top: -2px !important;">
+				<header class="mui-bar mui-bar-nav">
+					<a href="#offCanvasSide" class="mui-icon mui-action-menu mui-icon-bars mui-pull-left"></a>
+					<a id="info" class="mui-icon mui-pull-right"><i class="icon iconfont">&#xe730;</i></a>
+					<h1 id="title" class="mui-title">交际英语</h1>
+				</header>
+				<div id="offCanvasContentScroll" class="mui-content mui-scroll-wrapper">
+					<div class="mui-scroll" id="my-scroll">
+						<ul id="list" class="mui-table-view mui-grid-view my-course-img-1 my-mui-table-view" style="height: 100% !important;">
+
+						</ul>
+					</div>
+
+				</div>
+				<!-- off-canvas backdrop -->
+				<div class="mui-off-canvas-backdrop"></div>
+			</div>
+		</div>
+					<!--右上角弹出菜单-->
+		<div id="topPopover" class="mui-popover">
+			<div class="mui-scroll-wrapper">
+				<div class="mui-scroll">
+					<ul class="mui-table-view">
+						<li class="mui-table-view-cell">
+							<a id="cuotiben" data-course-id="" data-href="app/review-chapter.html" data-type='2' style="color: red;">
+								<i class="mui-icon icon iconfont icon-zhangben" style="margin-right: 10px;"></i>错题本
+							</a>
+						</li>
+						<li class="mui-table-view-cell">
+							<a id="shoucangben" data-course-id="" data-href="app/review-chapter.html" data-type='1' style="color: dodgerblue;">
+								<i class="mui-icon icon iconfont icon-shu" style="margin-right: 10px;"></i>收藏本
+							</a>
+						</li>
+						<li class="mui-table-view-cell">
+							<a id="bijiben" data-course-id="" data-href="app/review-chapter.html" data-type='3' style="color: green;">
+								<i class="mui-icon icon iconfont icon-shu" style="margin-right: 10px;"></i>笔记本
+							</a>
+						</li>
+					</ul>
+				</div>
+			</div>
+		</div>
+
+		<script type="text/html" id="template-course-id">
+			<li class="mui-table-view-cell">
+				<a class="mui-navigate-right" data-id="{code}" data-href="dragIndex.html">{name}</a>
+			</li>
+		</script>
+		<script type="text/html" id="template-chapter-id">
+			<li class="mui-table-view-cell mui-media mui-col-xs-12 mui-media-li-self">
+				<a href="app/section.html" data-title="{name}" data-chapter-id='{code}'>
+					<div class="zhang">
+						<div class=" biaoti">
+							{name}
+						</div>
+						<div class="jindu" style="text-align: center;">
+							<div class="jindulan" style="width: {progress}%;">
+							</div>
+							<div style="margin-top:-22px;font-size: 12px;color: #4D4D4D;">已完成{progress}%</div>
+						</div>
+					</div>
+				</a>
+			</li>
+		</script>
+		<script type="text/javascript">
+			function setBackgrounImage() {
+					//课程上部插图
+					if (window.self.courseTitle == "交际英语") {
+						window.myimage = 'url(images/englishchatu-1.png)';
+					} else if (window.self.courseTitle == "阅读理解") {
+						window.myimage = 'url(images/englishchatu-2.png)';
+					} else if (window.self.courseTitle == "词汇与结构") {
+						window.myimage = 'url(images/englishchatu-3.png)';
+					} else if (window.self.courseTitle == "完形填空") {
+						window.myimage = 'url(images/englishchatu-4.png)';
+					} else if (window.self.courseTitle == "英译汉复习资料") {
+						window.myimage = 'url(images/englishchatu-5.png)';
+					} else {
+						window.myimage = 'url(images/englishchatu-6.png)';
+					}
+				}
+				/*--------------------------------------------------------------------------------------------------*/
+				/**
+				 * 初始化章
+				 */
+
+			function initChapterDom() {
+					queryCategory(window.self.courseId, function(rows) {
+						var scriptCourse = document.getElementById('template-chapter-id');
+						var template = scriptCourse.innerHTML;
+						var htmlStr = '';
+						for (var i = 0; i < rows.length; i++) {
+							var row = rows[i];
+							htmlStr += render(template, row);
+						}
+						var ct = document.getElementById('list');
+						ct.innerHTML = htmlStr;
+						mui('#offCanvasContentScroll').scroll().scrollTo(0, 0);
+						document.getElementById("list").style.backgroundImage = window.myimage;
+					});
+				}
+				/**
+				 * 初始化菜单
+				 * @param {Object} rows
+				 */
+
+			function initMenuDom(rows) {
+					var scriptCourse = document.getElementById('template-course-id');
+					var template = scriptCourse.innerHTML;
+					var htmlStr = '';
+					for (var i = 0; i < rows.length; i++) {
+						var row = rows[i];
+						htmlStr += render(template, row);
+					}
+					var ct = document.getElementById('course-target-id');
+					ct.innerHTML = htmlStr;
+				}
+				/**
+				 * 菜单点击
+				 */
+
+			function courseClickEvent() {
+					mui('#course-target-id').on('tap', 'a', function() {
+						window.offCanvasWrapper.offCanvas('close');
+						var courseId = this.getAttribute('data-id');
+						window.self.courseTitle = ('' + this.innerHTML).trim();
+						updateTitle();
+						setBackgrounImage();
+						window.self.courseId = courseId;
+						initCourseId();
+						initChapterDom();
+					});
+				}
+				/**
+				 * 点击章时间
+				 */
+
+			function chapterTapEvent() {
+					mui('#list').on('tap', 'a', function() {
+						var chapterTitle = this.getAttribute('data-title');
+						var chapterId = this.getAttribute('data-chapter-id');
+						mui.openWindow({
+							id: 'section-win-' + chapterId,
+							url: this.href,
+							waiting: {
+								autoShow: true
+							},
+							extras: {
+								chapterTitle: chapterTitle,
+								chapterId: chapterId
+							}
+						})
+					});
+				}
+				//右上角菜单点击事件(收藏本、错题本)
+
+			function rightBarTapEvent() {
+					mui('#topPopover').on('tap', 'a', function() {
+						var courseId = this.getAttribute('data-course-id');
+						var href = this.getAttribute('data-href');
+						var type = this.getAttribute('data-type');
+						var title = this.innerHTML;
+						if (type == 3) { // TODO 这个在实现后,记得删除,这是笔记本的处理逻辑
+							alert('近期上线,敬请期待');
+							return;
+						}
+						mui.openWindow({
+							id: 'bar-' + courseId,
+							url: href,
+							waiting: {
+								autoShow: true
+							},
+							extras: {
+								barTitle: title,
+								courseId: courseId,
+								type: type
+							}
+						})
+						mui("#topPopover").popover("toggle");
+					});
+				}
+				/**
+				 * 更新标题
+				 */
+
+			function updateTitle() {
+					var courseTitle = window.self.courseTitle;
+					if (courseTitle) {
+						var titleDom = document.getElementById('title');
+						titleDom.innerHTML = courseTitle;
+					} else {
+						window.self.courseTitle = '交际英语';
+					}
+					setBackgrounImage();
+				}
+				/**
+				 * 点击应用,打开收藏本、错题本
+				 */
+
+			function infoTapEvent() {
+				document.getElementById('info').addEventListener('tap', function() {
+					mui("#topPopover").popover("toggle");
+				});
+			}
+
+			function initCourseId() {
+					var cuotiben = document.getElementById('cuotiben');
+					var shoucangben = document.getElementById('shoucangben');
+					var bijiben = document.getElementById('bijiben');
+					cuotiben.setAttribute("data-course-id", window.self.courseId);
+					shoucangben.setAttribute('data-course-id', window.self.courseId);
+					bijiben.setAttribute('data-course-id', window.self.courseId);
+				}
+				/**
+				 * 不管登录与否,打开app即检查服务器端的category(大纲)是否有更新
+				 */
+
+			function ajaxAppVersion() {
+					var localCategoryVersion = window.localStorage.getItem('category_version');
+					if (!localCategoryVersion) {
+						window.localStorage.setItem('category_version', 1);
+						localCategoryVersion = window.localStorage.getItem('category_version');
+					}
+					mui.ajax(Routes.urls.syncdata.getAppVersion, {
+						data: {},
+						dataType: 'json', //服务器返回json格式数据
+						type: 'post', //HTTP请求类型
+						timeout: 10000, //超时时间设置为10秒;
+						success: function(data) {
+							if (data && data.version) {
+								updateLocalAppVersion(data.version);
+							}
+						}
+					});
+				}
+				/**
+				 * 启动自动登录
+				 */
+
+			function autoLogin() {
+				var phone = window.localStorage.getItem("phone");
+				var password = window.localStorage.getItem("password");
+				if (phone == null || password == null) {
+					//TODO 最后需要打开这个
+					window.localStorage.setItem('isAlreadyLogin', false);
+					return;
+				}
+				/**
+				 * 登录请求
+				 */
+				mui.ajax(Routes.urls.user.login, {
+					data: {
+						username: phone,
+						password: password
+					},
+					dataType: 'json', //服务器返回json格式数据
+					type: 'post', //HTTP请求类型
+					timeout: 10000, //超时时间设置为10秒;
+					success: function(data) {
+						// TODO 这个地方需要在生产环境下去掉
+						//						data.success = true;
+						if (data && data.success) {
+							//记录用户登录信息
+							window.localStorage.setItem('isAlreadyLogin', true);
+							window.localStorage.setItem("phone", phone);
+							window.localStorage.setItem("password", password);
+							updateUserInfoToLocal();
+						} else {
+							window.localStorage.setItem('isAlreadyLogin', false);
+							mui.toast(data.message);
+						}
+					},
+					error: function() {}
+				});
+			}
+
+			function updateDengluMenu() {
+					var loginSpan = document.getElementById("span-login-id");
+					var phone = window.localStorage.getItem("phone");
+					if (phone && phone.length == 11) {
+						loginSpan.innerText = '个人中心';
+					}
+				}
+				/**
+				 * 初始化登录
+				 */
+
+			function initDenglu() {
+					alreadyLogin(function() {
+						var loginSpan = document.getElementById("span-login-id");
+						loginSpan.innerText = '个人中心';
+					}, function() {
+						var loginSpan = document.getElementById("span-login-id")
+						loginSpan.innerHTML = '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;登&nbsp;&nbsp;录&nbsp;&nbsp;';
+					});
+				}
+				/**
+				 * 注册登录事件
+				 */
+
+			function dengluEvent() {
+					document.getElementById("btn-denglu-id").addEventListener('tap', function() {
+						var loginSpan = this;
+						var phone = window.localStorage.getItem("phone");
+						if (phone && phone.length == 11) {
+							mui.openWindow({
+								id: 'personal-win',
+								url: 'app/personal.html',
+								waiting: {
+									autoShow: false
+								}
+							})
+						} else {
+							mui.openWindow({
+								id: 'login-win',
+								url: 'app/login.html',
+								waiting: {
+									autoShow: false
+								},
+								extras: {
+									sectionId: window.sectionId,
+									gotoUrl: '../dragIndex.html',
+									serviceObj: window.serviceObj
+								}
+							});
+						}
+					});
+				}
+				/**
+				 * 个推消息记录
+				 */
+
+			function getuiEvent() {
+				try {
+					/**
+					 * 个推的透传,使用key--value对,会重写msg中的title和content
+					 * title:正确,content:错误,则title是正确的信息,content则为json格式的数据
+					 * title:错误,content:正确,则title为“个推”,content是正确的信息
+					 */
+					plus.push.addEventListener("receive", function(msg) {
+						try {
+							//用户推送输入错误,则不再保存消息
+							var contents = msg.content;
+							var contentJson = JSON.parse(contents);
+						} catch (e) {
+							//用户推送正确的信息,保存信息到消息中心
+							saveMessage(msg);
+							if (msg) {
+								mui.openWindow({
+									id: "msg-center-win",
+									url: "app/msg-center.html",
+									waiting: {
+										autoShow: true
+									}
+								});
+							}
+						}
+					});
+				} catch (e) {}
+			}
+			mui.init();
+			mui.plusReady(function() {
+				ajaxAppVersion();
+				window.self = plus.webview.currentWebview();
+				if (!window.self.courseId) {
+					window.self.courseId = '0001';
+				}
+				//查询所有课程,加载课程菜单
+				queryAllCourse(function(rows) {
+					initChapterDom();
+					initMenuDom(rows);
+					courseClickEvent();
+					chapterTapEvent();
+					updateTitle();
+				});
+				initCourseId();
+				rightBarTapEvent();
+				dengluEvent();
+				initDenglu();
+				autoLogin();
+				getuiEvent();
+				infoTapEvent();
+				setTimeout(function() {
+					initUpdate();
+				}, 2000);
+				window.offCanvasWrapper = mui('#offCanvasWrapper');
+			});
+			 //首页返回键处理
+			 //处理逻辑:1秒内,连续两次按返回键,则退出应用;
+			var first = null;
+			mui.back = function() {
+				//首次按键,提示‘再按一次退出应用’
+				if (!first) {
+					first = new Date().getTime();
+					mui.toast('再按一次退出应用');
+					setTimeout(function() {
+						first = null;
+					}, 1000);
+				} else {
+					if (new Date().getTime() - first < 1000) {
+						plus.runtime.quit();
+					}
+				}
+			}
+			function call() {
+				//切换到拨打电话界面,但是不会直接拨打
+				//plus.device.dial("153",false);
+				//此方法可直接拨打电话
+				// 导入Activity、Intent类
+				var Intent = plus.android.importClass("android.content.Intent");
+				var Uri = plus.android.importClass("android.net.Uri");
+				// 获取主Activity对象的实例
+				var main = plus.android.runtimeMainActivity();
+				// 创建Intent
+				var uri = Uri.parse("tel:4001109999"); // 这里可修改电话号码
+				var call = new Intent("android.intent.action.CALL", uri);
+				// 调用startActivity方法拨打电话
+				main.startActivity(call);
+			}
+		</script>
+	</body>
+
+</html>

BIN
fonts/iconfont.ttf


BIN
fonts/iconfont2.ttf


BIN
fonts/mui.ttf


+ 77 - 0
image.html

@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+		<title></title>
+		<link href="css/mui.min.css" rel="stylesheet" />
+		<style>
+			.mui-slider-indicator {
+				position: absolute;
+				bottom: 60px;
+				width: 100%;
+				text-align: center;
+				background: 0 0
+			}
+			.mui-table-view-cell.mui-collapse .mui-collapse-content>.mui-slider {
+				width: auto;
+				height: auto;
+				margin: 0px 0px
+			}
+		</style>
+		<script src="js/mui.min.js"></script>
+
+	</head>
+
+	<body>
+		<div class="mui-content">
+			<div class="mui-slider">
+				<div class="mui-slider-group">
+					<div class="mui-slider-item">
+						<a href="javascript:void(0);">
+							<img src="images/English-qishiyendao1.jpg">
+						</a>
+					</div>
+					<div class="mui-slider-item">
+						<a href="javascript:void(0);">
+							<img src="images/English-qishiyendao2.jpg">
+						</a>
+					</div>
+					<div class="mui-slider-item" id="my-last-image-id">
+						<a href="dragIndex.html">
+							<img src="images/English-qishiyendao3.jpg">
+						</a>
+					</div>
+				</div>
+				<div class="mui-slider-indicator">
+					<div class="mui-indicator mui-active"></div>
+					<div class="mui-indicator"></div>
+					<div class="mui-indicator"></div>
+				</div>
+			</div>
+		</div>
+		<script type="text/javascript">
+			mui.plusReady(function() {
+				
+				plus.navigator.setFullscreen(true);
+				
+				mui('#my-last-image-id').on('tap', 'a', function() {
+					
+					plus.navigator.setFullscreen(false);
+					
+					mui.openWindow({
+						id: 'dragIndex-wind',
+						url: "dragIndex.html",
+						show: {
+							aniShow: "slide-in-top"
+						}
+					});
+					
+				});
+				
+			});
+		</script>
+	</body>
+
+</html>

BIN
images/English-qishiyendao1.jpg


BIN
images/English-qishiyendao2.jpg


BIN
images/English-qishiyendao3.jpg


BIN
images/englishchatu-1.png


BIN
images/englishchatu-2.png


BIN
images/englishchatu-3.png


BIN
images/englishchatu-4.png


BIN
images/englishchatu-5.png


BIN
images/englishchatu-6.png


BIN
images/person/my-person-xiaoxi.png


BIN
images/person/my-person-xitongshezhi.png


BIN
images/person/person-header.jpg


BIN
images/pull_arrow.png


BIN
images/pull_fresh.png


BIN
images/qidongye/baoming1882x1080.jpg


BIN
images/qidongye/baoming240x282.jpg


BIN
images/qidongye/baoming320x442.jpg


BIN
images/qidongye/baoming480x762.jpg


BIN
images/qidongye/baoming720x1242.jpg


+ 474 - 0
index.html

@@ -0,0 +1,474 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title>index</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+		<link rel="stylesheet" href="css/iconfont.css">
+		<link rel="stylesheet" href="css/mui.min.css">
+		<script src="js/mui.min.js"></script>
+		<script src="js/app.js"></script>
+		<script src="js/service.js"></script>
+		<script src="js/update.js"></script>
+		<!--<script type="text/javascript" src="js/common.js"></script>-->
+		<!--<script type="text/javascript" src="js/comet4j-debug2.js"></script>-->
+		<!--<script type="text/javascript" src="js/talk2.js"></script>-->
+		<style>
+			html,
+			body {
+				margin: 0;
+				padding: 0;
+				background-color: white;
+			}
+			header.mui-bar {
+				display: none;
+			}
+			.mui-bar-nav~.mui-content {
+				padding: 0;
+			}
+			.oa-contact-cell.mui-table .mui-table-cell {
+				padding: 11px 0;
+				vertical-align: middle;
+			}
+			.oa-contact-cell {
+				position: relative;
+				margin: -11px 0;
+			}
+			.oa-contact-avatar {
+				width: 75px;
+				padding-right: 10px !important;
+			}
+			.oa-contact-avatar img {
+				border-radius: 50%;
+			}
+			.oa-contact-content {
+				width: 100%;
+			}
+			.oa-contact-name {
+				margin-right: 20px;
+			}
+			.oa-contact-name,
+			.oa-contact-position {
+				float: left;
+			}
+			.break {
+				word-break: break-all;
+				word-wrap: break-word;
+				white-space: pre-line;
+				margin-top: -20px;
+			}
+			.mui-control-content {
+				background-color: white;
+				min-height: 230px;
+			}
+			.mui-control-content .mui-loading {
+				margin-top: 50px;
+			}
+			.my-denglu {
+				font-size: 20px;
+				font-weight: 800;
+				color: plum;
+				background-color: white;
+				border: 1px white solid;
+				padding: 8px 20px;
+				border-radius: 8px;
+			}
+		</style>
+	</head>
+
+	<body>
+		<div width="0" height="0" style="display: none;">
+
+			<div id="statebar">
+				连接状态:<span id="workStyle"></span>; 连接数量:
+				<span id="connectorCount"></span>; 已用内存:
+				<span id="usedMemory"></span>; 可用内存:
+				<span id="freeMemory"></span>; 内存容量:
+				<span id="totalMemory"></span>; 最大容量:
+				<span id="maxMemory"></span>; 系统已运行:
+				<span id="startup"></span>
+			</div>
+
+			<div id="logbox">
+			</div>
+
+			<div id="toolbar">
+				请输入:
+				<input maxlength="200" id="inputbox" class="inputbox" onkeypress="return onSendBoxEnter(event);" type="text"></input>
+				<input type="button" class="button" onclick="send(inputbox.value);" value="回车发送"></input>
+				<input type="button" class="button" onclick="rename();" value="改名"></input>
+			</div>
+
+			<div id="login">
+				请输入昵称:
+				<input type="text" class="inputbox" maxlength="50" id="loginName" onkeypress="return loginEnter(event);"></input>
+				<input type="button" class="button" onclick="login();" value="确定"></input>
+			</div>
+			<div id="output">
+				Push模块管理推送消息功能,可以实现在线、离线的消息推送,通过plus.push可获取推送消息管理对象。
+			</div>
+			<!--<iframe src="push.html" width="0" height="0"></iframe>-->
+			<!--<iframe src="http://192.168.1.101:8080/appserver/comet4j/push.html" width="0" height="0"></iframe>-->
+			<!--<iframe src="http://astroway.net:8090/appserver/comet4j/push.html" width="0" height="0"></iframe>-->
+		</div>
+
+		<div class="mui-content">
+
+			<div>
+				<img src="images/index/shouye2.png" style="width: 100%;" />
+				<div style="float: right;margin-top: -100px;margin-right: 20px;z-index: 100;">
+					<a id="denglu-btn-id" href="javascript:void(0);" class="mui-btn mui-btn-link" style="text-decoration:none;">
+						<span class="my-denglu">登&nbsp;录</span>
+						<!--<img src="images/index/login.png" style="width: 290px;" />-->
+					</a>
+				</div>
+			</div>
+			<div>
+				<!-- background-image: url(images/index/circle.jpg);background-size: 140px 140px; -->
+				<div id="pickDateBtn" style="padding-top:60px;background-repeat: no-repeat; width:140px;height:140px;
+				position: absolute;top: 30px;text-align: center;left: 15px;font-weight: 800;color: saddlebrown;">
+
+				</div>
+			</div>
+
+			<div id="slider" class="mui-slider" onclick="return false;">
+				<!-- 课程 -->
+				<div id="sliderSegmentedControl" class="mui-slider-indicator mui-segmented-control mui-segmented-control-inverted">
+
+				</div>
+				<div id="sliderProgressBar" class="mui-slider-progress-bar mui-col-xs-6"></div>
+				<div class="mui-slider-group" id="out-content-id">
+					<!-- 课程内容 -->
+					<div id="item1mobile" class="mui-slider-item mui-control-content mui-active">
+						<ul class="mui-table-view mui-table-view-striped mui-table-view-condensed">
+						</ul>
+					</div>
+					<div id="item2mobile" class="mui-slider-item mui-control-content">
+						<div class="mui-scroll">
+							<div class="mui-loading">
+								<div class="mui-spinner">
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div style="width: 100%;padding-bottom: 0px;padding: 10px;background-color: white;color: gray;">
+				<div class="mui-text-center" style="font-size: 13px;">致力于打造移动学习平台</div>
+				<div class="mui-text-center" style="font-size: 13px;">为您提供贴心的一站式服务</div>
+				<div class="mui-text-center" style="font-size: 14px;margin-top: 5px;">宇威科技发展(青岛)有限公司版权所有</div>
+			</div>
+		</div>
+		<script type="text/html" id="template-course-id">
+			<a class="mui-control-item" data-id="{code}" href="#{code}">
+				{name}
+			</a>
+		</script>
+		<script type="text/html" id="template-content-id">
+			<div id="{code}" class="mui-slider-item mui-control-content mui-active">
+				<ul id="ui{code}" class="mui-table-view mui-table-view-striped mui-table-view-condensed">
+				</ul>
+			</div>
+		</script>
+		<script type="text/html" id="template-content-li-id">
+			<li class="mui-table-view-cell">
+				<div class="mui-slider-cell  my-leshi">
+					<div class="oa-contact-cell mui-table my-leshi-div" data-lectures-id="{code}" data-title="{name}" data-lectures-name="会计基础">
+						<div class="oa-contact-avatar mui-table-cell">
+							<img src="images/zypx/ssx_iconjy.png" />
+						</div>
+						<div class="oa-contact-content mui-table-cell">
+							<div class="mui-clearfix">
+								<h4 class="oa-contact-name">乐试</h4>
+								<span class="oa-contact-position mui-h6"></span>
+							</div>
+							<p class="oa-contact-email mui-h6 break">
+								支持多平台同步、断电保障、智能监考
+							</p>
+						</div>
+					</div>
+				</div>
+			</li>
+		</script>
+		<script type="text/javascript">
+			/**
+			 * 初始化菜单
+			 * @param {Object} rows
+			 */
+			function initMenuDom(rows) {
+					var scriptCourse = document.getElementById('template-course-id');
+					var scriptContent = document.getElementById('template-content-id');
+					//标题(会计基础、财经法规)
+					var template = scriptCourse.innerHTML;
+					//标题对应的每个内容
+					var templateContent = scriptContent.innerHTML;
+					var htmlStr = '';
+					var htmlStrContent = '';
+					for (var i = 0; i < rows.length; i++) {
+						var row = rows[i];
+						row.i = i + 1;
+						htmlStr += render(template, row);
+						htmlStrContent += render(templateContent, row);
+					}
+					var ct = document.getElementById('sliderSegmentedControl');
+					var oc = document.getElementById('out-content-id');
+					ct.innerHTML = htmlStr;
+					oc.innerHTML = htmlStrContent;
+					var scriptli = document.getElementById('template-content-li-id');
+					//每个内容下的列表
+					var templateli = scriptli.innerHTML;
+					var htmlStrli = '';
+					for (var k = 0; k < rows.length; k++) {
+						var row = rows[k];
+						htmlStrli = render(templateli, row);
+						document.getElementById('ui' + row.code).innerHTML = htmlStrli;
+					}
+				}
+				/**
+				 * 点击乐试
+				 */
+
+			function leshiEvent() {
+					mui(".my-leshi").on('tap', '.my-leshi-div', function() {
+						var courseId = this.getAttribute('data-lectures-id');
+						var title = this.getAttribute('data-title');
+						var href = 'app/course.html';
+						mui.openWindow({
+							id: 'course-win-' + courseId,
+							url: href,
+							waiting: {
+								autoShow: false
+							},
+							extras: {
+								courseTitle: title,
+								courseId: courseId,
+							}
+						});
+					});
+				}
+				/**
+				 * 设置考试时间
+				 */
+
+			function checkExamDistance() {
+				var examdate = window.localStorage.getItem("exam_date");
+				if (!examdate) {
+					getExamDistance(); // 如果未设置了时间,则界面上显示”请设置考试时间“
+					return;
+				}
+				examdate = new Date(parseInt(examdate));
+				getExamDistance(examdate);
+			}
+			document.getElementById("pickDateBtn").addEventListener('tap', function() {
+					var dDate = window.localStorage.getItem("exam_date");
+					if (!dDate) {
+						dDate = new Date();
+					} else {
+						dDate = new Date(parseInt(dDate));
+					}
+					//dDate.setFullYear(2014, 7, 16);
+					var minDate = new Date();
+					//minDate.setFullYear(2010, 0, 1);
+					var maxDate = new Date();
+					maxDate.setFullYear(dDate.getFullYear() + 1, 11, 31);
+					plus.nativeUI.pickDate(function(e) {
+						var d = e.date;
+						window.localStorage.setItem("exam_date", d.getTime());
+						getExamDistance(d);
+					}, function(e) {
+						var dDate = window.localStorage.getItem("exam_date");
+						if (!dDate) {
+							getExamDistance();
+						} else {
+							dDate = new Date(parseInt(dDate));
+							getExamDistance(dDate);
+						}
+					}, {
+						title: "请选择考试日期",
+						date: dDate,
+						minDate: minDate,
+						maxDate: maxDate
+					});
+				})
+				//计算距离考试时间
+
+			function getExamDistance(examdate) {
+					var handler = document.getElementById('pickDateBtn');
+					if (!examdate) {
+						handler.style.paddingTop = "65px";
+						handler.innerHTML = "<div style='font-size:20px;text-align:center;'>请设置<br/>考试时间</div>";
+						return;
+					}
+					var nowdate = new Date();
+					if (examdate.getDate() == nowdate.getDate() && examdate.getFullYear() == nowdate.getFullYear() && examdate.getMonth() == nowdate.getMonth()) {
+						handler.style.paddingTop = "74px";
+						handler.innerHTML = "<div style='font-size:20px;text-align:center;'>祝您考试成功</div>";
+					} else {
+						var l = examdate.getTime() - nowdate.getTime();
+						var d = Math.floor(l / (1000 * 60 * 60 * 24)) + 1;
+						var dis = d;
+						handler.style.paddingTop = "60px";
+						handler.innerHTML = "<div style='font-size:25px;text-align:center;font-weight:800;'>" + dis + "天</div><div style='font-size:16px;text-align:center;'>距下次考试时间</div>";
+					}
+				}
+				/**
+				 * 启动自动登录
+				 */
+
+			function autoLogin() {
+					var phone = window.localStorage.getItem("phone");
+					var password = window.localStorage.getItem("password");
+					if (phone == null || password == null) {
+						window.localStorage.setItem('isAlreadyLogin', false);
+						return;
+					}
+					mui.ajax(Routes.urls.user.login, {
+						data: {
+							username: phone,
+							password: password
+						},
+						dataType: 'json', //服务器返回json格式数据
+						type: 'post', //HTTP请求类型
+						timeout: 10000, //超时时间设置为10秒;
+						success: function(data) {
+							if (data && data.success) {
+								//记录用户登录信息
+								window.localStorage.setItem('isAlreadyLogin', true);
+								window.localStorage.setItem("phone", phone);
+								window.localStorage.setItem("password", password);
+								updateUserInfoToLocal();
+							} else {
+								window.localStorage.setItem('isAlreadyLogin', false);
+								mui.toast(data.message);
+							}
+						}
+					});
+				}
+				/**
+				 * 注册登录事件
+				 */
+
+			function dengluEvent() {
+					document.getElementById("denglu-btn-id").addEventListener('tap', function() {
+						var loginSpan = this;
+						var shouji = loginSpan.innerText;
+						if (shouji == null) {
+							return;
+						}
+						var yidenglu = shouji.indexOf("个");
+						if (yidenglu >= 0) {
+							mui.openWindow({
+								id: 'personal-win',
+								url: 'app/personal.html',
+								waiting: {
+									autoShow: false
+								}
+							})
+						} else {
+							mui.openWindow({
+								id: 'login-win',
+								url: 'app/login.html',
+								waiting: {
+									autoShow: false
+								},
+								extras: {
+									sectionId: window.sectionId,
+									gotoUrl: '../index.html',
+									serviceObj: window.serviceObj
+								}
+							});
+						}
+					});
+				}
+				/**
+				 * 初始化登录
+				 */
+
+			function initDenglu() {
+					alreadyLogin(function() {
+						var loginSpan = document.getElementById("denglu-btn-id");
+						loginSpan.innerHTML = "<span style='font-size: 18px;font-weight: 800;color: white;border: 1px white solid;padding: 5px 5px;'>个人中心</span>";
+					}, function() {
+						var loginSpan = document.getElementById("denglu-btn-id");
+						loginSpan.innerHTML = "<span class='my-denglu'>登&nbsp;录</span>";
+					});
+				}
+				//首页返回键处理
+				//处理逻辑:1秒内,连续两次按返回键,则退出应用;
+			var first = null;
+			mui.back = function() {
+				//				//首次按键,提示‘再按一次退出应用’
+				if (!first) {
+					first = new Date().getTime();
+					mui.toast('再按一次退出应用');
+					setTimeout(function() {
+						first = null;
+					}, 1000);
+				} else {
+					if (new Date().getTime() - first < 1000) {
+						plus.runtime.quit();
+					}
+				}
+			};
+			 //			window.domain = 'astroway.net';
+			 //			function initPushMsg() {
+			 //				JS.AJAX.post(URL + 'username.do', {}, function(result) {
+			 //					if (result.responseText) {
+			 //						window.__user_name = result.responseText;
+			 ////						                  alert(window.__user_name)
+			 //						document.getElementById("loginName").value = result.responseText;
+			 //						login();
+			 //						init();
+			 //					}
+			 //				});
+			 //			}
+			mui.init();
+			mui.plusReady(function() {
+				setTimeout(function() {
+					initUpdate();
+				}, 2000);
+				checkExamDistance();
+				//---------------------
+				//查询所有课程,加载课程菜单
+				queryAllCourse(function(rows) {
+					initMenuDom(rows);
+					leshiEvent();
+				});
+				dengluEvent();
+				initDenglu();
+				//				initPushMsg();
+				var wv = plus.webview;
+				wv.close('personal-win');
+				wv.close('login-win');
+				/**
+				 * 个推的透传,使用key--value对,会重写msg中的title和content
+				 * title:正确,content:错误,则title是正确的信息,content则为json格式的数据
+				 * title:错误,content:正确,则title为“个推”,content是正确的信息
+				 */
+				plus.push.addEventListener("receive", function(msg) {
+					try {
+						//用户推送输入错误,则不再保存消息
+						var contents = msg.content;
+						var contentJson = JSON.parse(contents);
+					} catch (e) {
+						//用户推送正确的信息,保存信息到消息中心
+						saveMessage(msg);
+						if (msg) {
+							mui.openWindow({
+								id: "msg-center-win",
+								url: "app/msg-center.html",
+								waiting: {
+									autoShow: true
+								}
+							});
+						}
+					}
+				});
+			});
+		</script>
+	</body>
+
+</html>

+ 192 - 0
js/.project

@@ -0,0 +1,192 @@
+	var server="http://192.168.1.133:28080/account/update",//获取升级描述文件服务器地址133
+	//var server="http://astroway.net:28081/account/update",//获取升级描述文件服务器地址astroway
+	localDir="update",localFile="update.json",//本地保存升级描述目录和文件名
+	keyUpdate="updateCheck",//取消升级键名
+	keyAbort="updateAbort",//忽略版本键名
+	checkInterval=0,//升级检查间隔,单位为ms,7天为7*24*60*60*1000=60480000, 如果每次启动需要检查设置值为0
+	dir=null;
+
+	/**
+	 * 准备升级操作
+	 * 创建升级文件保存目录
+	 */
+	function initUpdate(){
+		// 打开doc根目录
+		plus.io.requestFileSystem( plus.io.PRIVATE_DOC, function(fs){
+			fs.root.getDirectory( localDir, {create:true}, function(entry){
+				dir = entry;
+				//进行版本判断,运行版本小于服务器版本则更新
+				//checkUpdate();
+				//直接更新不判断版本号的问题
+				getUpdateData();
+			}, function(e){
+				console.log( "准备升级操作,打开update目录失败:"+e.message );
+			});
+		},function(e){
+			console.log( "准备升级操作,打开doc目录失败:"+e.message );
+		});
+	}
+
+	/**
+	 * 检测程序升级
+	 */
+	function checkUpdate() {
+		// 判断升级检测是否过期
+//		var lastcheck = plus.storage.getItem( keyUpdate );
+//		if ( lastcheck ) {
+//			var dc = parseInt( lastcheck );
+//			var dn = (new Date()).getTime();
+//			if ( dn-dc < checkInterval ) {	// 未超过上次升级检测间隔,不需要进行升级检查
+//				return;
+//			}
+//			// 取消已过期,删除取消标记
+//			plus.storage.removeItem( keyUpdate );
+//		}
+		// 读取本地升级文件
+		dir.getFile( localFile, {create:false}, function(fentry){
+			fentry.file( function(file){
+				var reader = new plus.io.FileReader();
+				reader.onloadend = function ( e ) {
+					fentry.remove();
+					var data = null;
+					try{
+						data=JSON.parse(e.target.result);
+					}catch(e){
+						console.log( "读取本地升级文件,数据格式错误!" );
+						return;
+					}
+					checkUpdateData( data );
+				}
+				reader.readAsText(file);
+			}, function(e){
+				console.log( "读取本地升级文件,获取文件对象失败:"+e.message );
+				fentry.remove();
+			} );
+		}, function(e){
+			// 失败表示文件不存在,从服务器获取升级数据
+			getUpdateData();
+		});
+	}
+
+	/**
+	 * 检查升级数据
+	 */
+	function checkUpdateData( j ){
+		//当前客户端版本号
+		var curVer=plus.runtime.version;
+		//var curVer = "1.0";
+		inf = j[plus.os.name];
+		var srvVer = inf.version;
+		//alert("当前版本:" + curVer + " 新版本 " + srvVer);
+		// 判断是否需要升级
+		if ( compareVersion(curVer,srvVer) ) {
+			// 提示用户是否升级
+			plus.ui.confirm( inf.note, function(i){
+				if ( 0==i ) {
+					var apk_dir = j.Android.url;
+					createDownload(apk_dir);
+				} else {
+					
+				}
+			}, inf.title, ["立即更新","取  消"] );
+		}
+	}
+	
+	/**
+	 * 从服务器获取升级数据,并存储到本地;
+	 */
+	function getUpdateData(){
+		mui.getJSON(server,{},function (data) {
+			if(true){
+				// 保存到本地文件中
+	            	dir.getFile( localFile, {create:true}, function(fentry){
+	            		fentry.createWriter( function(writer){
+	            			writer.onerror = function(){
+	            				console.log( "获取升级数据,保存文件失败!" );
+	            			};
+	            			//从服务器下载下来JSON文件
+	            			writer.write(data);
+	            			//根据下载的JSON文件判断是否更新
+	            			checkUpdateData(data);
+	            		}, function(e){
+	            			console.log( "获取升级数据,创建写文件对象失败:"+e.message );
+	            		} );
+	            	}, function(e){
+	            		console.log( "获取升级数据,打开保存文件失败:"+e.message );
+	            	});
+			}
+		});
+	}
+	
+	/**
+	 * 比较版本大小,如果新版本nv大于旧版本ov则返回true,否则返回false
+	 * @param {String} ov
+	 * @param {String} nv
+	 * @return {Boolean} 
+	 */
+	function compareVersion( ov, nv ){
+		if ( !ov || !nv || ov=="" || nv=="" ){
+			return false;
+		}
+		var b=false,
+		ova = ov.split(".",4),
+		nva = nv.split(".",4);
+		for ( var i=0; i<ova.length&&i<nva.length; i++ ) {
+			var so=ova[i],no=parseInt(so),sn=nva[i],nn=parseInt(sn);
+			if ( nn>no || sn.length>so.length  ) {
+				return true;
+			} else if ( nn<no ) {
+				return false;
+			}
+		}
+		if ( nva.length>ova.length && 0==nv.indexOf(ov) ) {
+			return true;
+		}
+	}
+		
+	
+	// 创建下载任务
+	function createDownload(apk_dir) {
+		console.log(apk_dir);
+		var dtask = plus.downloader.createDownload( apk_dir, {}, function ( d, status ) {
+			// 下载完成
+			if ( status == 200 ) { 
+				console.log( "Download success: " + d.filename );
+				installApp(d.filename);
+			} else {
+				console.log( "Download failed: " + status ); 
+			}  
+		});
+		var w=plus.nativeUI.showWaiting("   开始下载...   ");
+		dtask.addEventListener( "statechanged", function(task,status){
+            switch(task.state) {
+                case 1: // 开始
+                    w.setTitle("   开始下载...   ");
+                break;
+                case 2: // 已连接到服务器
+                    w.setTitle("   开始下载...   ");
+                break;
+                case 3:
+                    var a = task.downloadedSize/task.totalSize*100;
+                    w.setTitle("   已下载"+parseInt(a)+"%   ");
+                break;
+                case 4: // 下载完成
+                    w.close();
+                break;
+            }
+        } );
+		dtask.start(); 
+	}
+	
+	//安装软件
+	function installApp(install_dir){
+		plus.runtime.install( install_dir, {}, function(){
+			console.info("install success !");
+			plus.runtime.quit();
+		}, function(){
+			console.info("install error !");
+		});
+	}
+	
+	//mui.plusReady(initUpdate);
+

+ 455 - 0
js/app.js

@@ -0,0 +1,455 @@
+(function($) {
+	//全局配置(通常所有页面引用该配置,特殊页面使用mui.init({})来覆盖全局配置)
+	$.initGlobal({
+		swipeBack: true
+	});
+	var oldBack = $.back;
+	$.back = function() {
+		var current = plus.webview.currentWebview();
+		if (current.mType === 'main') { //模板主页面
+			current.hide('auto');
+			//			var cc = current.children()[0];
+			//			plus.webview.close(current);
+			setTimeout(function() {
+				document.getElementById("title").className = 'mui-title mui-fadeout';
+				current.children()[0].hide("none");
+				//				plus.webview.close(cc)
+			}, 200);
+		} else if (current.mType === 'sub') {
+			if ($.targets._popover) {
+				$($.targets._popover).popover('hide');
+			} else {
+				current.parent().evalJS('sub : mui.back();');
+			}
+		} else {
+			oldBack();
+		}
+	}
+})(mui);
+
+/**
+ * toggle
+ */
+window.addEventListener('toggle', function(event) {
+	if (event.target.id === 'M_Toggle') {
+		var isActive = event.detail.isActive;
+		var table = document.querySelector('.mui-table-view');
+		var card = document.querySelector('.mui-card');
+		if (isActive) {
+			card.appendChild(table);
+			card.style.display = '';
+		} else {
+			var content = document.querySelector('.mui-content');
+			content.insertBefore(table, card);
+			card.style.display = 'none';
+		}
+	}
+});
+var templates = {};
+var firstClick = true;
+
+
+window.addEventListener('firstClick', function() {
+	firstClick = false;
+});
+
+function render(templateStr, data) {
+	return templateStr.replace(/\{([\w\.]*)\}/g, function(str, key) {
+		var keys = key.split("."),
+			v = data[keys.shift()];
+		for (var i = 0, l = keys.length; i < l; i++)
+			v = v[keys[i]];
+		return (typeof v !== "undefined" && v !== null) ? v : "";
+	});
+}
+
+var getTemplate = function(name, header, content, loading) {
+	var template = templates[name];
+	if (!template) {
+		//预加载共用父模板;
+		var headerWebview = mui.preload({
+			url: header,
+			id: name + "-main",
+			styles: {
+				popGesture: "hide",
+			},
+			extras: {
+				mType: 'main'
+			}
+		});
+		//预加载共用子webview
+		var subWebview = mui.preload({
+			url: !content ? "" : content,
+			id: name + "-sub",
+			styles: {
+				top: '45px',
+				bottom: '0px',
+			},
+			extras: {
+				mType: 'sub'
+			}
+		});
+		subWebview.addEventListener('loaded', function() {
+			if (!firstClick) {
+				setTimeout(function() {
+					subWebview.show();
+				}, 50);
+			}
+		});
+		subWebview.hide();
+		headerWebview.append(subWebview);
+
+		//iOS平台支持侧滑关闭,父窗体侧滑隐藏后,同时需要隐藏子窗体;
+		if (mui.os.ios) { //5+父窗体隐藏,子窗体还可以看到?不符合逻辑吧?
+			headerWebview.addEventListener('hide', function() {
+				subWebview.hide("none");
+			});
+		}
+		templates[name] = template = {
+			name: name,
+			header: headerWebview,
+			content: subWebview,
+			loaded: loading
+		};
+	}
+
+	return template;
+};
+mui.init({
+	swipeBack: false,
+	keyEventBind: {
+		backbutton: true
+	}
+});
+
+function isGotoLoginForResolution() {
+	var isAlreadyLogin = window.localStorage.getItem('isAlreadyLogin');
+	if (!isAlreadyLogin) {
+		mui.openWindow({
+			id: 'login-win-' + window.sectionId,
+			url: 'login.html',
+			waiting: {
+				autoShow: false
+			},
+			extras: {
+				sectionId: window.sectionId,
+				gotoUrl: 'resolution.html',
+				serviceObj: window.serviceObj
+			}
+		});
+		return false;
+	}
+	return true; //已经登陆
+}
+
+function isGotoLogin() {
+	var isAlreadyLogin = true; // window.localStorage.getItem('isAlreadyLogin');
+	if (!isAlreadyLogin) {
+		mui.openWindow({
+			id: 'login-win-',
+			url: 'login.html',
+			waiting: {
+				autoShow: false
+			},
+			extras: {
+				gotoUrl: 'dragIndex.html'
+			}
+		});
+		return false;
+	}
+	return true; //已经登陆
+}
+
+function alreadyLogin(successFunc, failedFunc) {
+	var isAlreadyLogin = window.localStorage.getItem('isAlreadyLogin');
+	//	console.error("app.js,isAlreadyLogin-------------"+isAlreadyLogin)
+	if (isAlreadyLogin == "true") {
+		successFunc();
+	} else {
+		//		mui.toast('您需要先登录');		
+		failedFunc();
+	}
+}
+
+var questionMetadataa = {
+	'单选题': ["materialName", "question", "option", "resolution", "materialFanyi"],
+	'填空题': ["materialName", "question", "option", "resolution", "materialFanyi"],
+	'英译汉': ["question", "resolution"],
+	'作文': ["question", "materialName"]
+};
+
+// 元数据配置:表示哪几节是免费可看的
+var okSeeMetadata = ['000100010001', '000100010002', '000100010003'];
+
+/**
+ * 检查是否是收费项目
+ * @param {Object} code
+ */
+function checkIsContinue(code) {
+	for (var i = 0; i < okSeeMetadata.length; i++) {
+		if (code == okSeeMetadata[i]) return true;
+	}
+	return false;
+}
+
+/**
+ * 题目列表的初始化方法
+ */
+function initDom() {
+	var tq = document.getElementById('template-question-id').innerHTML;
+	var to = document.getElementById('template-option-id').innerHTML;
+	var tr = document.getElementById("template-resolution-id").innerHTML;
+	var tc = document.getElementById("template-correct-id").innerHTML;
+	var tm = document.getElementById("template-material-id").innerHTML;
+	var tfanyi = document.getElementById("template-fanyi-id").innerHTML;
+	var list = document.getElementById('list');
+	var questionList = window.serviceObj.questionList
+	var questionHtmlTemplate = '<div class="mui-card duoxuan" data-id="{id}" style="padding-top: 6px;padding-bottom: 6px;display: block;"><ul class="mui-table-view">';
+	var htmlStr = '';
+	if (questionList.length > 0) {
+		var optionLength = questionList[0].options.length;
+		if (optionLength <= 0) {
+			window._disableSubmit = true;
+		}
+	} else {
+		list.innerHTML = '<ul class="mui-table-view">' +
+			'<li class="mui-table-view-cell mui-media">' +
+			'<div class="mui-media-body" style="text-align: center;">' +
+			'<p class="mui-ellipsis" style="">正在加载数据</p>' +
+			'</div>' +
+			'</li>' +
+			'</ul>';
+	}
+	for (var i = 0; i < questionList.length; i++) {
+		var all = questionList[i];
+		if (!all.question.isOk) {
+			all.question.isOkStyle = 'red';
+		} else {
+			all.question.isOkStyle = 'green';
+		}
+		htmlStr += render(questionHtmlTemplate, all.question);
+		var orderdMetadata = questionMetadata[all.question.type];
+		for (var k = 0; k < orderdMetadata.length; k++) {
+			var viewOrderName = orderdMetadata[k];
+			if ("materialName" == viewOrderName && all.material.name) {
+				htmlStr += render(tm, all.material);
+			} else if ("question" == viewOrderName && all.question.id) {
+				htmlStr += render(tq, all.question);
+			} else if ("answer" == viewOrderName && all.question.questionAnswer) {
+				htmlStr += render(tc, all.question);
+			} else if ("option" == viewOrderName && all.options.length > 0) {
+				for (var m = 0; m < all.options.length; m++) {
+					var option = all.options[m];
+					htmlStr += render(to, option);
+				}
+			} else if ("resolution" == viewOrderName && all.resolution.name) {
+				htmlStr += render(tr, all.resolution);
+			} else if ("materialFanyi" == viewOrderName && all.material.fanyi) {
+				htmlStr += render(tfanyi, all.material);
+			}
+		}
+		htmlStr += "</ul></div>";
+	}
+	if (htmlStr) list.innerHTML = htmlStr;
+}
+
+function jiemi(content) {
+	if (!content) return content;
+	return strDec(content, "1", "2", "3");
+}
+
+function getAvaliableTime() {
+	//可用总时长(分钟)
+	var avaliableTime = window.localStorage.getItem('availableTime');
+	avaliableTime = avaliableTime == 'undefined' ? 0 + "" : avaliableTime;
+	return avaliableTime;
+}
+
+function getRemainTime() {
+	//已用总时长(秒)
+	var remainTime = window.localStorage.getItem('remainTime');
+	if (!remainTime) {
+		remainTime = 0;
+	} else {
+		remainTime = Math.round(parseInt(remainTime) / 60);
+	}
+	return remainTime;
+}
+
+/**
+ * 推送消息 保存方法
+ * @param {Object} record
+ * {title:'', content:''}
+ */
+function saveMessage(msg) {
+	var d = new Date();
+	var year = d.getFullYear();
+	var month = d.getMonth() + 1;
+	var date = d.getDate();
+	var hours = d.getHours();
+	var minutes = d.getMinutes();
+	var seconds = d.getSeconds();
+	var record = {
+		title: msg.title,
+		content: msg.content,
+		datetime: (year + '-' + month + '-' + date + '  ' + hours + ':' + minutes + ':' + seconds),
+		status: 1
+	};
+	var sql = 'INSERT INTO message (title,content,datetime,status) values(?,?,?,?)';
+	sDb.transaction(function(tx) {
+		tx.executeSql(sql, [record.title, record.content, record.datetime, record.status], function() {}, onError);
+	});
+}
+
+/**
+ * 更新用户的所有信息到本地,主要是可以使用 的时长信息
+ */
+function updateUserInfoToLocal() {
+	mui.ajax(Routes.urls.user.getUserInfo, {
+		data: {
+			phone: window.localStorage.getItem("phone"),
+		},
+		dataType: 'json', //服务器返回json格式数据
+		type: 'post', //HTTP请求类型
+		timeout: 10000, //超时时间设置为10秒;
+		success: function(data) {
+			if (data) {
+				window.localStorage.setItem('userId', data.id);
+				window.localStorage.setItem('idcard', data.idcard)
+				window.localStorage.setItem('username', data.username);
+				window.localStorage.setItem('availableTime', data.availableTime);
+
+				try {
+					window.localStorage.setItem('new_update_date', data.updatetimeInt);
+					var oldUpdateDate = window.localStorage.getItem('old_update_date');
+					oldUpdateDate = oldUpdateDate ? oldUpdateDate : 0;
+					if (oldUpdateDate < data.updatetimeInt) {
+						var msg = {
+							title: '课时授权提醒',
+							content: '您的收费内容可用课时是' + getAvaliableTime() + '分钟<br/>已用总时长是' + getRemainTime() + '分钟。'
+						};
+						saveMessage(msg);
+						var message = '您的授权课时已更新';
+						mui.toast(message);
+//						mui.openWindow({
+//							id: "msg-center-win",
+//							url: "app/msg-center.html",
+//							waiting: {
+//								autoShow: true
+//							}
+//						});
+						window.localStorage.setItem('old_update_date', data.updatetimeInt);
+					}
+				} catch (e) {
+					console.error(JSON.stringify(e))
+				}
+
+				if (data.availableTime > data.remainTime) {
+					window.localStorage.removeItem("__cant_see");
+					window.localStorage.setItem('remainTime', data.remainTime * 60);
+				}
+
+				// 每格一秒进行记录一次
+				window._mySecondInter = window.setInterval(function() {
+					if (window.__pauseOrResume) return;
+					//					if(window.___cant_use ==1 )return;
+					var remainTime = window.localStorage.getItem('remainTime');
+					if (remainTime == null) {
+						window.localStorage.setItem('remainTime', "0");
+						remainTime = window.localStorage.getItem('remainTime');
+					}
+					var intRemainTime = parseInt(remainTime);
+					intRemainTime += 1;
+					window.localStorage.setItem('remainTime', intRemainTime);
+
+					var availableTime = window.localStorage.getItem('availableTime');
+					var intAvailableTime = (parseInt(availableTime) * 60);
+					if (intAvailableTime - intRemainTime < 0) {
+						//												console.log('使用时间(' + intRemainTime + ')已超出购买的时间(' + availableTime + '),请先续费')
+						window.___cant_use = 1;
+						window.localStorage.setItem("__cant_see", 1);
+						//						window.clearInterval(window._mySecondInter);
+					} else {
+						//												console.log('可以继续使用此app了');
+						window.___cant_use = 0;
+						window.localStorage.removeItem("__cant_see");
+					}
+				}, 1000);
+
+				// 每隔一分钟同步一次使用时间到服务器
+				window._myMinutesInter = window.setInterval(function() {
+					if (window.__pauseOrResume) return;
+					var remainTime = window.localStorage.getItem('remainTime');
+					var intRemainTime = parseInt(remainTime);
+
+					var availableTime = window.localStorage.getItem('availableTime');
+					var intAvailableTime = (parseInt(availableTime) * 60);
+
+					if (intRemainTime - intAvailableTime >= 0) {
+						console.log('使用时间(' + intRemainTime + ')已超出购买的时间(' + intAvailableTime + '),请先续费')
+						window.___cant_use = 1;
+						window.localStorage.setItem("__cant_see", 1);
+						window.clearInterval(window._myMinutesInter);
+					}
+
+					mui.ajax(Routes.urls.user.updateUserRemainTime, {
+						data: {
+							phone: window.localStorage.getItem("phone"),
+							userTime: Math.round(intRemainTime / 60)
+						},
+						dataType: 'json', //服务器返回json格式数据
+						type: 'post', //HTTP请求类型
+						timeout: 10000, //超时时间设置为10秒;
+						success: function(data) {
+							//							if(data){
+							//								window.localStorage.setItem('availableTime', data.availableTime);
+							//								if (data.availableTime > data.remainTime) {
+							//									window.localStorage.removeItem("__cant_see");
+							//									window.localStorage.setItem('remainTime', data.remainTime * 60);
+							//								}
+							//							}
+							console.log('------------------------------------------->更新服务器累计使用的时间成功!' + intRemainTime);
+						},
+						error: function() {
+							console.log('------------------------------------------->网络异常,下次联网后再同步时间到服务器!' + intRemainTime);
+						}
+					});
+				}, 60000);
+			}
+		},
+		error: function() {
+			//			alert('')
+		}
+	});
+}
+
+/**
+ * 此app被切入后台运行事件的监听
+ */
+document.addEventListener("pause", function() {
+	//	window.clearInterval(window._mySecondInter);
+	//	window.clearInterval(window._myMinutesInter);
+	window.__pauseOrResume = true;
+	console.log('已终止使用时间的记录');
+}, true);
+
+document.addEventListener("resume", function() {
+	window.__pauseOrResume = false;
+	console.log('已继续使用时间的记录');
+}, true);
+
+/**
+ *	设置wifi模式
+ * @param {Object} ms
+ */
+function switchWifiMode(ms) {
+	console.log(ms)
+	window.localStorage.setItem('isWifiMode', ms);
+}
+
+/**
+ * 获取wifi模式
+ */
+function loadWifiMode() {
+	return window.localStorage.getItem('isWifiMode') == 'true';
+}

+ 179 - 0
js/common.js

@@ -0,0 +1,179 @@
+(function(w){
+// 空函数
+function shield(){
+	return false;
+}
+document.addEventListener('touchstart',shield,false);//取消浏览器的所有事件,使得active的样式在手机上正常生效
+document.oncontextmenu=shield;//屏蔽选择函数
+// H5 plus事件处理
+var ws=null,as='slide-in-right',at=200;
+function plusReady(){
+	ws=plus.webview.currentWebview();
+	// Android处理返回键
+//	plus.key.addEventListener('backbutton',function(){
+//		back();
+//	},false);
+	compatibleAdjust();
+}
+if(w.plus){
+	plusReady();
+}else{
+	document.addEventListener('plusready',plusReady,false);
+}
+// DOMContentLoaded事件处理
+var domready=false;
+document.addEventListener('DOMContentLoaded',function(){
+	domready=true;
+	gInit();
+	document.body.onselectstart=shield;
+	compatibleAdjust();
+},false);
+// 处理返回事件
+w.back=function(hide){
+	if(w.plus){
+		ws||(ws=plus.webview.currentWebview());
+		if(hide||ws.preate){
+			ws.hide('auto',at);
+		}else{
+			ws.close('auto',at);
+		}
+	}else if(history.length>1){
+		history.back();
+	}else{
+		w.close();
+	}
+};
+// 处理点击事件
+var openw=null,waiting=null;
+/**
+ * 打开新窗口
+ * @param {URIString} id : 要打开页面url
+ * @param {boolean} wa : 是否显示等待框
+ * @param {boolean} ns : 是否不自动显示
+ */
+w.clicked=function(id,wa,ns){
+	if(openw){//避免多次打开同一个页面
+		return null;
+	}
+	if(w.plus){
+		wa&&(waiting=plus.nativeUI.showWaiting());
+		var pre='';//'http://192.168.1.178:8080/h5/';
+		openw=plus.webview.create(pre+id,id,{scrollIndicator:'none',scalable:false});
+		ns||openw.addEventListener('loaded',function(){//页面加载完成后才显示
+//		setTimeout(function(){//延后显示可避免低端机上动画时白屏
+			openw.show(as,at);
+			closeWaiting();
+//		},200);
+		},false);
+		openw.addEventListener('close',function(){//页面关闭后可再次打开
+			openw=null;
+		},false);
+		return openw;
+	}else{
+		w.open(id);
+	}
+	return null;
+};
+w.openDoc=function(t,c){
+	var d=plus.webview.getWebviewById('document');
+	if(d){
+		d.evalJS('updateDoc("'+t+'","'+c+'")');
+	}else{
+		d=plus.webview.create('/plus/doc.html','document',{zindex:9999,popGesture:'hide'},{preate:true});
+		d.addEventListener('loaded',function(){
+			d.evalJS('updateDoc("'+t+'","'+c+'")');
+		},false);
+	}
+//	d.show(as,at);
+}
+/**
+ * 关闭等待框
+ */
+w.closeWaiting=function(){
+	waiting&&waiting.close();
+	waiting=null;
+}
+// 兼容性样式调整
+var adjust=false;
+function compatibleAdjust(){
+	if(adjust||!w.plus||!domready){
+		return;
+	}	// iOS平台使用滚动的div
+	if('iOS'==plus.os.name){
+		as='pop-in';
+		at=300;
+		var t=document.getElementById("dcontent");
+		t&&(t.className="sdcontent");
+		t=document.getElementById("content");
+		t&&(t.className="scontent");
+		//iOS8横竖屏切换div不更新滚动问题
+		var lasto=window.orientation;
+		window.addEventListener("orientationchange",function(){
+			var nowo=window.orientation;
+			if(lasto!=nowo&&(90==nowo||-90==nowo)){
+				dcontent&&(0==dcontent.scrollTop)&&(dcontent.scrollTop=1);
+				content&&(0==content.scrollTop)&&(content.scrollTop=1);
+			}
+			lasto=nowo;
+		},false);
+	}
+	adjust=true;
+};
+w.compatibleConfirm=function(){
+	plus.nativeUI.confirm('本OS原生层面不提供该控件,需使用mui框架实现类似效果。请点击“确定”下载Hello mui示例',function(e){
+		if(0==e.index){
+			plus.runtime.openURL("http://www.dcloud.io/hellomui/");
+		}
+	},"",["确定","取消"]);
+}
+// 通用元素对象
+var _dout_=null,_dcontent_=null;
+w.gInit=function(){
+	_dout_=document.getElementById("output");
+	_dcontent_=document.getElementById("dcontent");
+};
+// 清空输出内容
+w.outClean=function(){
+	_dout_.innerHTML="";
+	_dout_.scrollTop=0;//在iOS8存在不滚动的现象
+};
+// 输出内容
+w.outSet=function(s){
+	_dout_.innerHTML=s+"<br/>";
+	(0==_dout_.scrollTop)&&(_dout_.scrollTop=1);//在iOS8存在不滚动的现象
+};
+// 输出行内容
+w.outLine=function(s){
+	_dout_.innerHTML+=s+"<br/>";
+	(0==_dout_.scrollTop)&&(_dout_.scrollTop=1);//在iOS8存在不滚动的现象
+};
+// 格式化时长字符串,格式为"HH:MM:SS"
+w.timeToStr=function(ts){
+	if(isNaN(ts)){
+		return "--:--:--";
+	}
+	var h=parseInt(ts/3600);
+	var m=parseInt((ts%3600)/60);
+	var s=parseInt(ts%60);
+	return (ultZeroize(h)+":"+ultZeroize(m)+":"+ultZeroize(s));
+};
+// 格式化日期时间字符串,格式为"YYYY-MM-DD HH:MM:SS"
+w.dateToStr=function(d){
+	return (d.getFullYear()+"-"+ultZeroize(d.getMonth()+1)+"-"+ultZeroize(d.getDate())+" "+ultZeroize(d.getHours())+":"+ultZeroize(d.getMinutes())+":"+ultZeroize(d.getSeconds()));
+};
+/**
+ * zeroize value with length(default is 2).
+ * @param {Object} v
+ * @param {Number} l
+ * @return {String} 
+ */
+w.ultZeroize=function(v,l){
+	var z="";
+	l=l||2;
+	v=String(v);
+	for(var i=0;i<l-v.length;i++){
+		z+="0";
+	}
+	return z+v;
+};
+})(window);

+ 157 - 0
js/createDb.js

@@ -0,0 +1,157 @@
+var db = openDatabase('accountDb', '', 'account Db', 5 * 1000 * 1000);
+
+//添加测试数据
+function createTable(onSuccess) {
+		console.log("开始添加测试数据.....");
+		db.transaction(function(tx) {
+			//执行访问数据库的语句
+			tx.executeSql('DROP TABLE IF EXISTS collect', []);
+			tx.executeSql('create table if not exists collect(id INTEGER PRIMARY KEY AUTOINCREMENT,categoryCode text,type INTEGER,questionId INTEGER,answer TEXT,costTime INTEGER)', []); //收藏
+		});
+		db.transaction(function(tx) {
+			createTableMessage(tx); //消息表
+			//	});
+			//	db.transaction(function(tx) {
+			createTableCategory(tx); //科目
+			//	});
+			//	db.transaction(function(tx) {
+			createTableQuestion(tx); // 问题表
+			//	});
+			//	db.transaction(function(tx) {
+			createTableOption(tx); //选项表
+			//	});
+			//	db.transaction(function(tx) {
+			createTableResolution(tx); //解析表
+			//	});
+			//	db.transaction(function(tx) {
+			createTableMaterial(tx); //材料表
+		});
+		db.transaction(function(tx) {
+			try {
+				createTableOthers(tx); // 其他用户运行时產生的学习数据记录用的表
+			} catch (e) {
+				alert(e)
+			}
+		});
+		db.transaction(function(tx) {
+			updateCheckData(tx); //初始化数据验证表
+		});
+		//	db.transaction(function(tx) {
+		//		//执行访问数据库的语句
+		//		tx.executeSql('DROP TABLE IF EXISTS collect', []);
+		//		tx.executeSql('create table if not exists collect(id INTEGER PRIMARY KEY AUTOINCREMENT,categoryCode text,type INTEGER,questionId INTEGER,answer TEXT,costTime INTEGER)', []); //收藏
+		//		createTableMessage(tx); //消息表
+		//		createTableCategory(tx); //科目
+		//		createTableQuestion(tx); // 问题表
+		//		createTableOption(tx); //选项表
+		//		createTableResolution(tx); //解析表
+		//		createTableMaterial(tx); //材料表
+		//		createTableOthers(tx); // 其他用户运行时產生的学习数据记录用的表
+		//		updateCheckData(tx); //初始化数据验证表
+		//	});
+		//	
+	}
+	//消息表
+
+function createTableMessage(tx) {
+		tx.executeSql('DROP TABLE IF EXISTS message', []);
+		//主键,消息标题,消息内容,创建日期,是否 已经阅读1:阅读,2:未读
+		tx.executeSql('create table if not exists message(id INTEGER PRIMARY KEY AUTOINCREMENT,title text,content text,datetime text,status INTEGER)', [],function(tx, rs) {
+			console.log("add message data");
+		});
+	}
+	//问题表
+
+function createTableQuestion(tx) {
+		tx.executeSql('DROP TABLE IF EXISTS question', []);
+		tx.executeSql('create table if not exists question(id INTEGER,categoryCode text,materialId INTEGER,type text,name text,knowledgePoint text,chapter text,parser_video_id text,deleted INTEGER)', [],
+			function(tx, rs) {
+				console.log("add question data");
+			});
+	}
+	//选项表
+
+function createTableOption(tx) {
+		tx.executeSql('DROP TABLE IF EXISTS option', []);
+		tx.executeSql('create table if not exists option(id INTEGER,questionId INTEGER,name text,key INTEGER,deleted INTEGER)', [], function(tx, rs) {
+			console.log("add option data");
+		});
+	}
+	//解析表
+
+function createTableResolution(tx) {
+		tx.executeSql('DROP TABLE IF EXISTS resolution', []);
+		tx.executeSql('create table if not exists resolution(id INTEGER,questionId INTEGER,name text,deleted INTEGER)', [], function(tx, rs) {
+			console.log("add resolution data!");
+		});
+	}
+	//材料表
+
+function createTableMaterial(tx) {
+	tx.executeSql('DROP TABLE IF EXISTS material', []);
+	// name表示材料文本内容,fanyi表示英文材料对应的翻译,deleted表示是否删除
+	tx.executeSql('create table if not exists material(id INTEGER,name TEXT,fanyi TEXT,deleted INTEGER)', [], function(tx, rs) {
+		console.log('add material data');
+	});
+}
+
+function selectCheckData(checkResultSuccess) {
+	db.transaction(function(tx) {
+		tx.executeSql('create table if not exists CheckData(id INTEGER PRIMARY KEY AUTOINCREMENT,status INTEGER,version text,createTime text,updateTime text)', []);
+		tx.executeSql("select * from CheckData", [], checkResultSuccess, checkResultError);
+	});
+}
+
+function checkResultSuccess(tx, rs) {
+	if (rs.rows.length == 0) {
+		//	if (false) { // TODO 部署生产环境前,需要开启上面的注释
+		console.log("第一次打开app,需要初始化数据");
+		mui.openWindow({
+			id: 'imagePage',
+			url: 'image.html'
+		});
+		createTable(onSuccess);
+		console.log("第一次初始化过数据完毕");
+	} else {
+		//TODO 生产环境需要将这行去掉
+		//		createTable(onSuccess);
+		mui.openWindow({
+			id: 'indexPage',
+			url: 'dragIndex.html'
+		});
+		console.log("已经初始化过数据");
+	}
+}
+
+function checkResultError(tx, error) {
+	console.log("操作失败,失败信息:" + error.message);
+}
+
+function deleteCheckData(onSuccess) {
+	tx.executeSql('delete from CheckData where id = 1', [], onSuccess, onError);
+}
+
+function updateCheckData(tx) {
+		//初始化数据检验表,如果状态为1则代表已经初始化数据完毕,下次启动读取判断即可
+		tx.executeSql('DROP TABLE IF EXISTS CheckData', []);
+		tx.executeSql('create table if not exists CheckData(id INTEGER PRIMARY KEY AUTOINCREMENT,status INTEGER,version text,createTime text,updateTime text)', []);
+		tx.executeSql('INSERT  INTO CheckData values(?,?,?,?,?)', [1, 1, '1.0', '', '']);
+	}
+	//sql语句执行成功后执行的回调函数
+
+function onSuccess(tx, rs) {
+		console.log(rs.rows.length);
+		console.log("onSuccess操作成功");
+	}
+	//sql语句执行失败后执行的回调函数
+
+function onError(tx, error) {
+	console.log("操作失败,失败信息:" + error.message);
+	deleteCheckData(onSuccess);
+}
+
+function initDb() {
+	selectCheckData(checkResultSuccess);
+}
+
+mui.plusReady(initDb);

File diff suppressed because it is too large
+ 0 - 0
js/des.js


File diff suppressed because it is too large
+ 5 - 0
js/mui.min.js


+ 145 - 0
js/routes.js

@@ -0,0 +1,145 @@
+/**
+ * 全局路由配置对象
+ */
+(function(w) {
+//	var domain = 'http://192.168.1.145:8080/appserver/'; // test
+//	var domain = 'http://lcsf.ccstudy.cn/'; //production
+var domain = 'http://huijingdz.com:8080/appserver/';
+	w.Routes = {
+		domain: domain,
+		urls: {
+
+			// 用户相关
+			user: {
+
+				// 登录
+				login: domain + 'SysUserCtrl.login.do',
+
+				// 注册
+				register: domain + 'SysUserCtrl.register.do',
+
+				// 发送验证码到手机
+				sendVerifyCode: domain + 'SysUserCtrl.sendVerifyCode.do',
+
+				// 修改用户密码
+				updatePassword: domain + 'SysUserCtrl.updatePassword.do',
+
+				// 查询手机号是否已存在(是否已注册)
+				checkPhone: domain + 'SysUserCtrl.checkPhone.do',
+
+				// 获取某个用户的全部信息(SysUser),根据phone
+				getUserInfo: domain + 'SysUserCtrl.getUserInfo.do',
+
+				// 记录某个用户已经使用了多少小时
+				updateUserRemainTime: domain + 'SysUserCtrl.updateUserRemainTime.do',
+
+				// 用户退出登录
+				logout: domain + 'SysUserCtrl.logout.do',
+				
+				//用户信息完善
+				completeUserInfo: domain + 'SysUserCtrl.completeUserInfo.do'
+			},
+
+			// 同步加密过的数据,用于更新数据并缓存到用户的app中
+			syncdata: {
+				// 获取 App的大纲数的版本,用于判断是否有更新
+				getAppVersion: domain + 'EnSyncDataCtrl.getAppVersion.do',
+				//				listChapter: domain + 'EnSyncDataCtrl.listChapter.do',
+				//				listSection: domain + 'EnSyncDataCtrl.listSection.do',
+
+				// 根据节code获取所有试题
+				listQuestion: domain + 'EnSyncDataCtrl.listQuestion.do',
+				//				listCourse: domain + 'EnSyncDataCtrl.listCourse.do',
+
+				// 查询APP所有的大纲数据,即整个en_category表
+				listAllCategory: domain + 'EnSyncDataCtrl.listAllCategory.do',
+
+				// 获取课程下的章或者章下的节
+				listChapterOrSection: domain + 'EnSyncDataCtrl.listChapterOrSection.do',
+
+				// 根据节code获取节下所有试题的material
+				listMaterialBySectionId: domain + 'EnSyncDataCtrl.listMaterialBySectionId.do',
+
+				// 根据节code获取节下的所有试题的option
+				listOptionsBySectionId: domain + 'EnSyncDataCtrl.listOptionsBySectionId.do',
+
+				// 根据节code获取节下的所有试题的resolution
+				listResolutionsBySectionId: domain + 'EnSyncDataCtrl.listResolutionsBySectionId.do'
+			}
+		}
+	};
+})(window);
+
+/**
+ *	发送验证码
+ * @param {Object} username 手机号
+ * @param {Object} sendBtn 点击发送的按钮
+ */
+
+function sendCode(username, sendBtn, successFun) {
+	var issend = sendBtn.getAttribute('issend');
+	if (parseInt(issend)) {
+		console.log('未发送');
+		return;
+	} else {
+		console.log('已发送验证码');
+	}
+	if (username.length == 0) {
+		mui.toast('请输入手机号码 ');
+		return false;
+	}
+	if (username.length != 11) {
+		mui.toast('请输入有效的手机号码 ');
+		return false;
+	}
+	if (!myreg.test(username)) {
+		mui.toast('请输入有效的手机号码 ');
+		return false;
+	}
+	var code = username + 'liu';
+	username = strEnc(username, 'q', 'w', 'e');
+	code = strEnc(code, '2', '3', '4');
+
+	mui.ajax(Routes.urls.user.sendVerifyCode, {
+		data: {
+			username: username,
+			code: code
+		},
+		dataType: 'json', //服务器返回json格式数据
+		type: 'post', //HTTP请求类型
+		timeout: 10000, //超时时间设置为10秒;
+		success: function(data) {
+			mui.toast('验证码已发送 ');
+			sendBtn.setAttribute('issend', 1);
+			if (data && data.success) {
+				var result = data.message;
+				var _verifycode = result.substr(0, 6);
+				successFun(_verifycode);
+			} else {
+				mui.toast(data.message);
+			}
+		},
+		error: function() {
+			mui.toast('网络异常');
+			window.localStorage.setItem('isAlreadyLogin', false);
+
+		}
+	});
+	//	successFun('111111');
+}
+var myreg = /^(13|14|15|18)\d{9}$/;
+
+/**
+ * 网络异常统一回调函数
+ * @param {Object} xhr
+ * @param {Object} type
+ * @param {Object} errorThrown
+ */
+function networkErrorHandler(xhr, type, errorThrown) {
+	var b = toastNetworkInfo();
+	if(!b){
+		mui.toast("请先打开网络");
+	}else{
+		mui.toast("网络异常,请先设置网络");
+	}
+}

+ 1124 - 0
js/service.js

@@ -0,0 +1,1124 @@
+var sDb = openDatabase('accountDb', '', 'account Db', 5 * 1000 * 1000);
+
+var pageSize = 10;
+
+/**
+ * 打开app后,自动更新服务器端的版本到本地,为以后的category(大纲数据)做好更新的准备
+ * @param {Object} remote_version
+ */
+function updateLocalAppVersion(remote_version) {
+	sDb.transaction(function(tx) {
+		var updateLocalAppVersionSql = 'update category set remote_version = ? where id = 0';
+		tx.executeSql(updateLocalAppVersionSql, [remote_version], function() {
+			console.log('大纲版本以获取,并记录。。');
+		}, onError);
+	});
+}
+
+/**
+ * 会计app 的推送消息查询
+ * @param {Object} callback
+ */
+function queryAllMessage(callback) {
+	sDb.transaction(function(tx) {
+		var sql = 'select * from message order by datetime desc';
+		tx.executeSql(sql, [], function(tx, rs) {
+			var myRows = [];
+			if (rs.rows.length > 0) {
+				for (var i = 0; i < rs.rows.length; i++) {
+					var row = rs.rows.item(i);
+					myRows.push({
+						id: row.id,
+						title: row.title,
+						content: row.content,
+						datetime: row.datetime,
+						status: row.status,
+						readStyle: (function() {
+							return row.status == 2 ? 'background-color: ghostwhite;' : '';
+						})()
+					});
+				}
+			}
+			callback(myRows);
+		}, onError);
+	});
+}
+
+/**
+ * 推送消息 保存方法
+ * @param {Object} record
+ * {title:'', content:''}
+ */
+function saveMessage(msg) {
+	var d = new Date();
+	var year = d.getFullYear();
+	var month = d.getMonth() + 1;
+	var date = d.getDate();
+	var hours = d.getHours();
+	var minutes = d.getMinutes();
+	var seconds = d.getSeconds();
+	var record = {
+		title: msg.title,
+		content: msg.content,
+		datetime: (year + '-' + month + '-' + date + '  ' + hours + ':' + minutes + ':' + seconds),
+		status: 1
+	};
+	var sql = 'INSERT INTO message (title,content,datetime,status) values(?,?,?,?)';
+	sDb.transaction(function(tx) {
+		tx.executeSql(sql, [record.title, record.content, record.datetime, record.status], function() {}, onError);
+	});
+}
+
+/**
+ * 获取所有课程 courseCode课程,sReuslt为回调方法名
+ */
+function queryAllCourse(callback) {
+	sDb.transaction(function(tx) {
+		var sql = "select id,code,name,status,progress from category where length(code)=4";
+		tx.executeSql(sql, [], function(tx, rs) {
+			var myRows = [];
+			if (rs.rows.length > 0) {
+				for (var i = 0; i < rs.rows.length; i++) {
+					var row = rs.rows.item(i);
+					myRows.push({
+						code: row.code,
+						name: row.name,
+						status: row.status
+					});
+				}
+			}
+			callback(myRows);
+		}, onError);
+	});
+}
+
+/**
+ * 根据编码获取课程下的章节列表,
+ * 如果code为4位,则查询结果为章列表;如果code为8位,则查询结果为节列表;如果code不为4位或8位则返回为空
+ * sReuslt为回调方法
+ */
+function queryCategory(categoryCode, successCallback) {
+	function isSaveOrUpdate(categoryCode, localDataCallback) {
+		sDb.transaction(function(tx) {
+			var isUpdateSql = 'select * from category where id = 0';
+			tx.executeSql(isUpdateSql, [], function(tx, rs) { // 查看整个app有无更新
+				if (rs.rows.length > 0) {
+					var record = rs.rows.item(0);
+
+					function insertOrUpdate(url, mySectionId, currCallback, myCallback) {
+						window.isCategoryPre = 0;
+						window.isCategoryNext = 0;
+						mui.ajax(url, {
+							data: {},
+							dataType: 'json', //服务器返回json格式数据
+							type: 'post', //HTTP请求类型
+							timeout: 10000, //超时时间设置为10秒;
+							async: false,
+							success: function(data) {
+								window.isCategoryPre = data.length;
+								if (data.length > 0) {
+									currCallback(data);
+									var inter = setInterval(function() {
+										if (window.isCategoryPre <= window.isCategoryNext) {
+											clearInterval(inter);
+											myCallback();
+										}
+									}, 100);
+								} else {
+									myCallback();
+								}
+
+							},
+							error: networkErrorHandler
+						});
+					}
+
+					if (record.remote_version > record.local_version) { // 需要更新
+						mui.toast('正在更新数据,请稍候');
+						console.log('需要更新大纲相关数据');
+
+						function updateCategory() {
+							insertOrUpdate(Routes.urls.syncdata.listAllCategory, categoryCode, function(data) {
+								sDb.transaction(function(tx) {
+									var deleteSql = 'delete from category where id != 0';
+									tx.executeSql(deleteSql, [], function() {
+										for (var i = 0; i < data.length; i++) {
+											var record = data[i];
+											var insertSql = 'INSERT INTO category values(?,?,?,?,?,?,?,?,?)';
+											tx.executeSql(insertSql, [record.id, record.code, record.name, record.status, record.process, record.deleted, record.version, record.version, 1], function() {
+												window.isCategoryNext += 1;
+											}, onError);
+										}
+									}, onError);
+								});
+							}, function() {
+								// 更新 此节的状态为 1 “数据已经初始化”
+								sDb.transaction(function(tx) {
+									tx.executeSql('update category set local_version = remote_version where id = 0', [], function() {
+										console.log('更新大纲的版本为最新版本成功!')
+									}, onerror);
+								});
+								localDataCallback();
+							})
+						}
+
+						updateCategory();
+
+					} else { // 不需要更新
+						console.log('不需要更新大纲相关数据');
+						localDataCallback();
+					}
+
+				}
+			});
+
+		});
+	}
+
+	isSaveOrUpdate(categoryCode, function() {
+		var sql = "select id,code,name,status,progress from category  ";
+		if (categoryCode.length == 4) {
+			sql += "where length(code)=8 ";
+		}
+		if (categoryCode.length == 8) {
+			sql += "where length(code)=12 ";
+		}
+		if (categoryCode.length == 4 || categoryCode.length == 8) {
+			sql += " and substr(code,1," + categoryCode.length + ")='" + categoryCode + "'";
+		} else {
+			sql += " where 1!=1 ";
+		}
+		sql += " order by id asc";
+
+		sDb.transaction(function(tx) {
+			tx.executeSql(sql, [], function(tx, rs) {
+				var myRows = [];
+				if (rs.rows.length > 0) {
+					for (var i = 0; i < rs.rows.length; i++) {
+						var row = rs.rows.item(i);
+						myRows.push({
+							code: row.code,
+							name: row.name,
+							status: row.status,
+							progress: !!row.progress ? "0" : row.progress
+						});
+					}
+				}
+				successCallback(myRows);
+			}, onError);
+		});
+
+	});
+
+}
+
+
+function minix(sourceObj) {
+	var pageSize = sourceObj.pageSize || window.pageSize;
+	var targetObj = {
+		pageSize: 0,
+		currentTime: 0,
+		questionList: (function() {
+			if (!sourceObj.questionList) {
+				return [];
+			} else {
+				return sourceObj.questionList
+			}
+		})(),
+
+		getQuestion: function(id) {
+			function inner(questionList) {
+				for (var i = 0; i < questionList.length; i++) {
+					var questionTemp = questionList[i];
+					if (questionTemp.question.id == id) {
+						return questionTemp;
+					}
+				}
+			}
+			var value = inner(this.questionList);
+			if (!value) {
+				alert('meiyou question by id' + id)
+			}
+			return value;
+		},
+
+
+		grade: function(userResultList) {
+			//FIXME 解决submit页面通关文本显示错误的问题
+			this.userCorrectAnswerCount = 0;
+
+			for (var k = 0; k < userResultList.length; k++) {
+				var userResult = userResultList[k];
+
+				var questionId = userResult.questionId;
+				var labelList = userResult.userAnswerList;
+				labelStr = labelList.join('');
+				//找到目标question对象
+				var questionAll = this.getQuestion(questionId);
+
+				function setOptionSelected(question, labelStr) {
+						var options = question.options;
+						for (var i = 0; i < options.length; i++) {
+							var option = options[i];
+							if (labelStr.indexOf(option.label) != -1) {
+								option.isSelected = true;
+							} else {
+								option.isSelected = false;
+							}
+						}
+					}
+					//options对象设置isSelect值
+				setOptionSelected(questionAll, labelStr);
+				//question对象设置用户选择值
+				questionAll.question.userAnswer = labelStr;
+				//question对象计算本题正确答案
+				function getQuestionAnswer(question) {
+					var ret = [];
+					var options = question.options;
+					for (var i = 0; i < options.length; i++) {
+						var option = options[i];
+						if (option.key == 1) {
+							ret.push(option.label);
+						}
+					}
+					return ret.join('');
+				}
+
+				questionAll.question.questionAnswer = getQuestionAnswer(questionAll);
+				//question对象设置isOk值
+				function getOK(question) {
+					return question.userAnswer == question.questionAnswer;
+				}
+				questionAll.question.isOk = getOK(questionAll.question);
+
+				if (questionAll.question.isOk) {
+					this.userCorrectAnswerCount++;
+				}
+
+			}
+		},
+
+		userCorrectAnswerCount: 0,
+		/**
+		 *
+		 */
+		getResultMsg: function() {
+			if (this.userCorrectAnswerCount >= (Math.round(0.6 * pageSize))) {
+				var sectionId = this.questionList[0].question.categoryCode;
+				openNextTollGate(sectionId);
+				var chapterId = sectionId.substr(0, 8);
+				updateProgress(chapterId)
+				return 1; //及格
+			} else {
+				return 2; //不及格
+			}
+		},
+
+		saveCollect: function() {
+			for (var i = 0; i < this.questionList.length; i++) {
+				var question = this.questionList[i].question;
+				delteCollect(question.id);
+				if (!question.isOk) saveCollect(question);
+			}
+		},
+
+		updateBookMark: function(questionAll) {
+			var hasCollect = questionAll.hasCollect;
+			if (hasCollect) { //已经存在这个题目的收藏
+				deleteBookmark(questionAll.question.id);
+			} else { // 不存在这个题目的收藏
+				saveBookmark(questionAll.question);
+			}
+			questionAll.hasCollect = !hasCollect;
+		},
+
+		isAllDo: function() {
+			for (var i = 0; i < this.questionList.length; i++) {
+				var questionAll = this.questionList[i];
+				if (!questionAll.question.userAnswer) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		fireFinishCallbak: function(all) {
+			this.questionList.push(all);
+			this.currentTime += 1;
+			if (this.currentTime == pageSize) { // 最后一题
+				var sectionId = all.question.categoryCode;
+				this.chapterId = sectionId.substr(0, 8);
+				sourceObj.finishCallback(this);
+			} //end if 最后一题
+		},
+
+		getSectionId: function() {
+			var sectionId = this.questionList[0].question.categoryCode;
+			return sectionId.substr(0, 12);
+		},
+
+		getChapterId: function() {
+			var sectionId = this.questionList[0].question.categoryCode;
+			return sectionId.substr(0, 8);
+		},
+
+		getCourseId: function() {
+			var sectionId = this.questionList[0].question.categoryCode;
+			return sectionId.substr(0, 4);
+		},
+
+		isAllReply: function() {
+			for (var i = 0; i < this.questionList.length; i++) {
+				var question = this.questionList[i].question;
+				if (question.userAnswer == '') {
+					return false;
+				}
+			}
+			return true;
+		}
+	};
+
+	for (var name in targetObj) {
+		var value = sourceObj[name];
+		if (value) {
+			targetObj[name] = value;
+		}
+	}
+
+	return targetObj;
+}
+
+/**
+ * 核心业务查询方法,返回question有关的所有先关对象。
+ * @param {Object} categoryCode 节id
+ * @param {Object} rowCallback
+ */
+function queryQuestionAll(categoryCode, rowCallback, finishCallback, noDataCallback) {
+
+	function isSaveOrUpdate(categoryCode, localDataCallback) {
+		sDb.transaction(function(tx) {
+			var isUpdateSql = 'select * from category where code = ?';
+			tx.executeSql(isUpdateSql, [categoryCode], function(tx, rs) { // 查看整个app有无更新
+				if (rs.rows.length > 0) {
+					var record = rs.rows.item(0);
+
+					function insertOrUpdate(url, mySectionId, currCallback, myCallback) {
+						window.isQuestionPre = 0;
+						window.isQuestionNext = 0;
+						mui.ajax(url, {
+							data: {
+								sectionId: mySectionId,
+								phone: window.localStorage.getItem('phone')
+							},
+							dataType: 'json', //服务器返回json格式数据
+							type: 'post', //HTTP请求类型
+							timeout: 10000, //超时时间设置为10秒;
+							async: false,
+							success: function(data) {
+								window.isQuestionPre = data.length;
+								if (data.length > 0) {
+									//									console.log(url + ':' + data.length);
+									//									console.log(JSON.stringify(data))
+									currCallback(data);
+									var inter = setInterval(function() {
+										// console.log(window.isQuestionPre + ':' + window.isQuestionNext)
+										if (window.isQuestionPre <= window.isQuestionNext) {
+											clearInterval(inter);
+											myCallback();
+										}
+									}, 100);
+								} else {
+									myCallback();
+								}
+
+							},
+							error: networkErrorHandler
+						});
+					}
+
+					if (record.have_data == 2) { // 本地有数据
+						//						if(true){
+						if (loadWifiMode() || record.remote_version > record.local_version) { // 需要更新  TODO 此地方需要在生产环境下打开
+							mui.toast('正在更新数据,请稍候');
+							console.log('需要更新(' + categoryCode + ')的相关数据,have_data为:' + record.have_data);
+
+							function updateQuestion() {
+								insertOrUpdate(Routes.urls.syncdata.listQuestion, categoryCode, function(data) {
+									sDb.transaction(function(tx) {
+										var updateSql = 'update question set categoryCode=?,materialId=?,type=?,name=?,knowledgePoint=?,chapter=?,parser_video_id=?,deleted=? where id = ?';
+										for (var i = 0; i < data.length; i++) {
+											var question = data[i];
+											var param = [question.categorycode, question.materialid == 0 ? 0 : question.materialid,
+												question.type, question.name, '', '', null, question.deleted ? null : question.deleted, question.id
+											];
+											tx.executeSql(updateSql, param, function(tx, rs) {
+												window.isQuestionNext += 1;
+											}, onError);
+										}
+									});
+								}, function() {
+									updateMaterial()
+								})
+							}
+
+							function updateMaterial() {
+								insertOrUpdate(Routes.urls.syncdata.listMaterialBySectionId, categoryCode, function(data) {
+									sDb.transaction(function(tx) {
+										var updateSql = 'UPDATE material set name=?,fanyi=?,deleted=? where id = ?';
+										for (var i = 0; i < data.length; i++) {
+											var r = data[i];
+											var param = [r.name, r.fanyi, r.deleted, r.id];
+											tx.executeSql(updateSql, param, function(tx, rs) {
+												window.isQuestionNext += 1;
+											}, onError);
+										}
+									});
+								}, function() {
+									updateOption()
+								})
+							}
+
+							function updateOption() {
+								insertOrUpdate(Routes.urls.syncdata.listOptionsBySectionId, categoryCode, function(data) {
+									sDb.transaction(function(tx) {
+										var updateSql = 'UPDATE option set questionId=?,name=?,key=?,deleted=? where id = ?';
+										for (var i = 0; i < data.length; i++) {
+											var r = data[i];
+											var param = [r.questionid, r.name, r.key, r.deleted, r.id];
+											tx.executeSql(updateSql, param, function(tx, rs) {
+												window.isQuestionNext += 1;
+											}, onError);
+										}
+									});
+								}, function() {
+									updateResolution();
+								})
+							}
+
+							function updateResolution() {
+								insertOrUpdate(Routes.urls.syncdata.listResolutionsBySectionId, categoryCode, function(data) {
+									sDb.transaction(function(tx) {
+										var updateSql = 'UPDATE resolution set questionId=?,name=?,deleted=? where id = ?';
+										for (var i = 0; i < data.length; i++) {
+											var r = data[i];
+											var param = [r.questionid, r.name, r.deleted, r.id];
+											tx.executeSql(updateSql, param, function(tx, rs) {
+												window.isQuestionNext += 1;
+											}, onError);
+										}
+									});
+								}, function() {
+									// 更新 此节的状态为 1 “数据已经初始化”
+									sDb.transaction(function(tx) {
+										tx.executeSql('update category set local_version = remote_version where code = ?', [categoryCode], function() {
+											console.log('更新此章节的版本为最新版本成功!')
+										}, onerror);
+									});
+									localDataCallback();
+								})
+							}
+
+							updateQuestion();
+
+						} else { // 不需要更新
+							console.log('不需要更新(' + categoryCode + ')的相关数据');
+							localDataCallback();
+						}
+					} else { // 本地无数据,先下载此节的数据
+						mui.toast('正在初始化数据,请稍候');
+						console.log('本地无(' + categoryCode + ')数据,先下载此节的数据,have_data为:' + record.have_data);
+
+						function insertQuestion() {
+							insertOrUpdate(Routes.urls.syncdata.listQuestion, categoryCode, function(data) {
+								sDb.transaction(function(tx) {
+									//现将状态改掉
+
+									var insertQuestionSql = 'INSERT INTO question values(?,?,?,?,?,?,?,?,?)';
+									for (var i = 0; i < data.length; i++) {
+										var question = data[i];
+										//										console.log('INSERT INTO question :' + JSON.stringify(question));
+										var param = [question.id, question.categorycode, question.materialid == 0 ? 0 : question.materialid,
+											question.type, question.name, '', '', null, question.deleted ? null : question.deleted
+										];
+										tx.executeSql(insertQuestionSql, param, function(tx, rs) {
+											window.isQuestionNext += 1;
+										}, onError);
+									}
+								});
+							}, function() {
+								insertMaterial()
+							})
+						}
+
+						function insertMaterial() {
+							insertOrUpdate(Routes.urls.syncdata.listMaterialBySectionId, categoryCode, function(data) {
+								sDb.transaction(function(tx) {
+									//现将状态改掉
+									//									tx.executeSql('INSERT INTO material values(?,?,?,?)',  [2, '四十四','zheshifanyi']);
+									var insertSql = 'INSERT INTO material values(?,?,?,?)';
+									for (var i = 0; i < data.length; i++) {
+										var r = data[i];
+										var param = [r.id, r.name, r.fanyi, r.deleted];
+										tx.executeSql(insertSql, param, function(tx, rs) {
+											window.isQuestionNext += 1;
+										}, onError);
+									}
+								});
+							}, function() {
+								insertOption()
+							})
+						}
+
+						function insertOption() {
+							insertOrUpdate(Routes.urls.syncdata.listOptionsBySectionId, categoryCode, function(data) {
+								sDb.transaction(function(tx) {
+									//现将状态改掉
+									//									tx.executeSql('INSERT INTO option values(?,?,?,?,?)', [2, 2, '《企业会计准则》', 1,null]);
+									var insertSql = 'INSERT INTO option values(?,?,?,?,?)';
+									for (var i = 0; i < data.length; i++) {
+										var r = data[i];
+										var param = [r.id, r.questionid, r.name, r.key, r.deleted];
+										tx.executeSql(insertSql, param, function(tx, rs) {
+											window.isQuestionNext += 1;
+										}, onError);
+									}
+								});
+							}, function() {
+								insertResolution();
+							})
+						}
+
+						function insertResolution() {
+							insertOrUpdate(Routes.urls.syncdata.listResolutionsBySectionId, categoryCode, function(data) {
+								sDb.transaction(function(tx) {
+									//现将状态改掉
+									//									tx.executeSql('INSERT INTO resolution values(?,?,?,?)', [2, 2, '學習',null]);
+									var insertSql = 'INSERT INTO resolution values(?,?,?,?)';
+									for (var i = 0; i < data.length; i++) {
+										var r = data[i];
+										var param = [r.id, r.questionid, r.name, r.deleted];
+										tx.executeSql(insertSql, param, function(tx, rs) {
+											window.isQuestionNext += 1;
+										}, onError);
+									}
+								});
+							}, function() {
+								// 更新 此节的状态为 1 “数据已经初始化”
+								sDb.transaction(function(tx) {
+									tx.executeSql('update category set have_data = 2 where code = ?', [categoryCode], function() {
+										console.log('插入此章节的版本的数据成功!')
+									}, onerror);
+								});
+								localDataCallback();
+							})
+						}
+
+						insertQuestion();
+					}
+				}
+			});
+
+		});
+	}
+
+	isSaveOrUpdate(categoryCode, over);
+
+	function over() {
+		var allLabel = 'ABCDEFGHIJKLMN'.split('');
+		var countSql = 'select count(1) as count from question q left join resolution r on q.id = r.questionId left join material m on  q.materialId = m.id left join (select * from collect where type =1) c on q.id = c.questionId where q.categoryCode = ?';
+		var allSql = 'select q.id as question_id,q.categoryCode as question_category_code,q.type as question_type,q.name as question_name,q.knowledgePoint as question_knowledge_ponit,q.chapter as question_chapter,q.parser_video_id as question_parser_video_id,r.id as resolution_id,r.name as resolution_name,m.id as material_id,m.name as material_name,m.fanyi as material_fanyi,c.id as collect_id,c.type as collect_type,c.answer as collect_answer,c.costTime as collect_cost_time ' + ' from question q left join resolution r on q.id = r.questionId left join material m on  q.materialId = m.id left join (select * from collect where type =1) c on q.id = c.questionId where q.categoryCode = ? limit ?,?';
+
+		var subSql = "select id,name,key from option where questionId=?";
+
+		var Finish = null;
+
+		sDb.transaction(function(tx) {
+
+			function optionAction(all) {
+				tx.executeSql(subSql, [all.question.id], function(tx, rs) {
+					var options = [];
+					if (rs.rows.length > 0) {
+						for (var i = 0; i < rs.rows.length; i++) {
+							var _option = rs.rows.item(i);
+							all.options.push({
+								id: _option.id,
+								label: allLabel[i],
+								name: jiemi(_option.name),
+								key: _option.key,
+								inputType: (function() {
+									var t = all.question.type;
+									if (t == '判断题' || t == '单选题' || t == '填空题') {
+										return 'radio';
+									} else if (t == '多选题') {
+										return 'checkbox';
+									}
+								})(),
+								inputName: ('name-' + all.question.id),
+								isSelected: false
+							});
+						}
+					}
+					rowCallback(all);
+					Finish.fireFinishCallbak(all);
+				}, onError);
+			}
+
+			/**
+			 * 排序dom顺序
+			 * @param {Object} all
+			 */
+			function sortDom(all) {
+
+			}
+
+			function questionAction(start, pageSize) {
+				tx.executeSql(allSql, [categoryCode, start, pageSize], function(tx, rs) {
+					if (rs.rows.length > 0) {
+						for (var i = 0; i < rs.rows.length; i++) {
+							var r = rs.rows.item(i);
+							var allResult = {
+								question: {
+									indexed: i + 1,
+									id: r.question_id,
+									categoryCode: r.question_category_code,
+									type: r.question_type,
+									name: jiemi(r.question_name),
+									knowledgePonit: r.question_knowledge_ponit,
+									chapter: r.question_chapter,
+									parserVideoId: r.question_parser_video_id,
+									isOk: false,
+									userAnswer: '',
+									questionAnswer: '',
+									pageSize: pageSize,
+								},
+								resolution: {
+									id: r.resolution_id,
+									name: jiemi(r.resolution_name),
+								},
+								material: {
+									id: r.material_id,
+									name: jiemi(r.material_name),
+									fanyi: r.material_fanyi,
+								},
+								collect: {
+									id: r.collect_id,
+									type: r.collect_type,
+									answer: r.collect_answer,
+									cost_time: r.collect_cost_time,
+								},
+								options: [],
+								hasCollect: (undefined != r.collect_id),
+								hasMaterial: (undefined != r.material_id)
+							};
+							optionAction(allResult)
+						}
+					}
+				}, onError);
+			}
+
+			function countAction(callback) {
+				tx.executeSql(countSql, [categoryCode], function(tx, rs) {
+					if (rs.rows.length == 1) {
+						var row = rs.rows.item(0);
+						callback(row.count);
+						//						pageSize = row.count; // 分页大小为 所有满足条件数据的数量
+					} else {
+						noDataCallback();
+					}
+				});
+			}
+
+			countAction(function(count) {
+				var start = 0;
+				//				if (count <= window.pageSize) {
+				if (true) { // 分页大小为 所有满足条件数据的数量
+					window.pageSize = count;
+				} else {
+					start = Math.floor(Math.random() * (count - window.pageSize));
+				}
+				Finish = minix({
+					finishCallback: finishCallback,
+					pageSize: window.pageSize
+				});
+				questionAction(start, window.pageSize);
+			});
+
+		});
+	}
+
+}
+
+
+/**
+ * 核心业务查询方法,返回错题或者收藏记录
+ * @param {Object} categoryCode  节 id
+ * @param {Object} rowCallback
+ */
+function queryQuestionAllForReview(categoryCode, type, rowCallback, finishCallback, noDataCallback) {
+	var allLabel = 'ABCDEFGHIJKLMN'.split('');
+	var allSql = 'select q.id as question_id,q.categoryCode as question_category_code,q.type as question_type,q.name as question_name,q.knowledgePoint as question_knowledge_ponit,q.chapter as question_chapter,q.parser_video_id as question_parser_video_id,r.id as resolution_id,r.name as resolution_name,m.id as material_id,m.name as material_name,c.id as collect_id,c.type as collect_type,c.answer as collect_answer,c.costTime as collect_cost_time ' +
+		'from (select * from collect where type = ?) c left join question q on q.id = c.questionId inner join resolution r on q.id = r.questionId left join material m on  q.materialId = m.id where q.categoryCode = ?';
+	var subSql = "select id,name,key from option where questionId=?";
+
+	var Finish = null;
+
+	sDb.transaction(function(tx) {
+
+		function optionAction(all) {
+			tx.executeSql(subSql, [all.question.id], function(tx, rs) {
+				var options = [];
+				var questionAnswer = [];
+				if (rs.rows.length > 0) {
+					for (var i = 0; i < rs.rows.length; i++) {
+						var _option = rs.rows.item(i);
+						var userAnswer = all.question.userAnswer;
+						var label = allLabel[i]
+						var option = {
+							id: _option.id,
+							label: allLabel[i],
+							name: jiemi(_option.name),
+							key: _option.key,
+							inputType: (function() {
+								var t = all.question.type;
+								if (t == '判断题' || t == '单选题' || t == '填空题') {
+									return 'radio';
+								} else if (t == '多选题') {
+									return 'checkbox';
+								}
+							})(),
+							inputName: ('name-' + all.question.id),
+							isSelected: (userAnswer.indexOf(label) != -1)
+						};
+						all.options.push(option);
+						if (option.key == 1) {
+							questionAnswer.push(option.label);
+						}
+					}
+					all.question.questionAnswer = questionAnswer.join('');
+					if (all.question.questionAnswer == all.question.userAnswer) {
+						all.question.isOk = true;
+					}
+				}
+
+				Finish.fireFinishCallbak(all);
+
+				rowCallback(all);
+
+			}, onError);
+		}
+
+		tx.executeSql(allSql, [type, categoryCode], function(tx, rs) {
+			var pageSize = rs.rows.length;
+			Finish = minix({
+				finishCallback: finishCallback,
+				pageSize: pageSize
+			});
+
+			if (pageSize > 0) {
+				for (var i = 0; i < pageSize; i++) {
+					var r = rs.rows.item(i);
+					var allResult = {
+						question: {
+							indexed: i + 1,
+							id: r.question_id,
+							categoryCode: r.question_category_code,
+							type: r.question_type,
+							name: jiemi(r.question_name),
+							knowledgePonit: r.question_knowledge_ponit,
+							chapter: r.question_chapter,
+							parserVideoId: r.question_parser_video_id,
+							isOk: false,
+							userAnswer: r.collect_answer,
+							questionAnswer: '',
+							pageSize: pageSize
+						},
+						resolution: {
+							id: r.resolution_id,
+							name: jiemi(r.resolution_name)
+						},
+						material: {
+							id: r.material_id,
+							name: jiemi(r.material_name)
+						},
+						collect: {
+							id: r.collect_id,
+							type: r.collect_type,
+							answer: r.collect_answer,
+							cost_time: r.collect_cost_time
+						},
+						options: [],
+						hasCollect: (undefined != r.collect_id),
+						hasMaterial: (undefined != r.material_id)
+					};
+					optionAction(allResult)
+				}
+			}
+		}, onError);
+
+
+	});
+}
+
+
+
+/**
+ * 如果通关则自动打开下一关卡
+ * @param {Object} sectionId
+ */
+function openNextTollGate(sectionId) {
+	sDb.transaction(function(tx) {
+		var sql2 = 'update category  set progress = 100 where code = ?';
+		tx.executeSql(sql2, [sectionId], function(tx, rs) {}, onError);
+		var sql3 = 'select * from category where code = ?';
+		tx.executeSql(sql3, [sectionId], function(tx, rs) {
+			var category = rs.rows.item(0);
+			if (category) {
+				//				var sId = '000' + (parseInt(sectionId) + 1);
+				var sId = category.id + 1;
+				var sql = 'update category  set status = 1 where id = ?';
+				tx.executeSql(sql, [sId], function(tx, rs) {}, onError);
+			}
+		}, onError);
+	});
+
+}
+
+/**
+ * 更新章 的进度
+ * @param {Object} chapterId
+ */
+function updateProgress(chapterId) {
+	sDb.transaction(function(tx) {
+		var selSql = "select (select count(1) from category where code like '" + chapterId + "%' and progress = 100) as okCount,(select count(1) from category where code like '" + chapterId + "%') as allCount ";
+		tx.executeSql(selSql, [], function(tx, rs) {
+			if (rs.rows.length == 1) {
+				var selObj = rs.rows.item(0);
+				var progress = Math.round((selObj.okCount) / (selObj.allCount - 1) * 100, 0);
+				if (selObj.okCount == selObj.allCount) {
+					progress = 100;
+				}
+				var sql = 'update category set progress = ? where code = ?';
+				tx.executeSql(sql, [progress, chapterId], function(tx, rs) {}, onError);
+			}
+		}, onError);
+	});
+}
+
+/**
+ * 根据节编码获取节下的试题
+ * categoryCode:编码
+ * sReuslt为回调方法
+ */
+
+function queryQuestion(categoryCode, sResult) {
+		var sql = "select id,categoryCode,materialId,type,name,knowledgePoint,chapter,parser_video_id from question where categoryCode=?";
+		sDb.transaction(function(tx) {
+			tx.executeSql(sql, [categoryCode], sResult, onError);
+		});
+	}
+	/**
+	 * 根据问题id获取问题解析,sReuslt为回调方法
+	 */
+
+function queryResolution(questionId, sResult) {
+		var sql = "select id,name from resolution where questionId=?";
+		sDb.transaction(function(tx) {
+			tx.executeSql(sql, [questionId], sResult, onError);
+		});
+	}
+	/**
+	 * 根据问题id获取材料
+	 */
+
+function queryMaterial(materialId, sResult) {
+		var sql = "select id,name from material where id=?";
+		sDb.transaction(function(tx) {
+			tx.executeSql(sql, [materialId], sResult, onError);
+		});
+	}
+	/**
+	 * 根据问题id获取选项列表
+	 */
+
+function queryOption(questionId, sResult) {
+		var sql = "select id,name,key from option where questionId=?";
+		sDb.transaction(function(tx) {
+			tx.executeSql(sql, [questionId], sResult, onError);
+		});
+	}
+	/**
+	 * 获取课程下章的错题或收藏数
+	 * courseCode: 课程编码
+	 * type:1代表收藏 2代表错题
+	 * 返回 章名、章编码、章下的题数
+	 */
+
+function queryCourseCount(courseCode, type, callback) {
+		var sql = "SELECT c.name,c.code,b.count from (SELECT substr(q.categoryCode,1,8) as code ,count(q.id) count from collect q  where type=" + type + " and q.categoryCode like '" + courseCode + "%' GROUP BY substr(q.categoryCode,1,8))as b join category c on b.code = c.code ";
+		sDb.transaction(function(tx) {
+			tx.executeSql(sql, [], function(tx, rs) {
+				var myRows = [];
+				if (rs.rows.length > 0) {
+					for (var i = 0; i < rs.rows.length; i++) {
+						var row = rs.rows.item(i);
+						myRows.push({
+							name: row.name,
+							code: row.code,
+							count: row.count
+						});
+					}
+				}
+				callback(myRows);
+			}, onError);
+		});
+	}
+	/**
+	 * 获取章下的节的错题数和收藏数
+	 * chapterCode:章编码
+	 * type:1为收藏,2为错题
+	 *  返回 节名、节编码、节下的题数
+	 */
+
+function queryChapterCount(chapterCode, type, callback) {
+	var sql = "SELECT c.name,c.code,b.count from (SELECT substr(q.categoryCode,1,12) as code ,count(q.id) count from collect q  where type=" + type + " and q.categoryCode like '" + chapterCode + "%' GROUP BY substr(q.categoryCode,1,12))as b join category c on b.code = c.code ";
+	sDb.transaction(function(tx) {
+		tx.executeSql(sql, [], function(tx, rs) {
+			var myRows = [];
+			if (rs.rows.length > 0) {
+				for (var i = 0; i < rs.rows.length; i++) {
+					var row = rs.rows.item(i);
+					myRows.push({
+						name: row.name,
+						code: row.code,
+						count: row.count
+					});
+				}
+			}
+			callback(myRows);
+		}, onError);
+	});
+}
+
+/**
+ * 添加收藏
+ * @param {Object} question
+ */
+function saveBookmark(question) {
+		saveCollectAndBookmark(1, question.id, question.categoryCode, question.userAnswer, null, function() {});
+	}
+	/**
+	 * 删除收藏
+	 * @param {Object} questionId
+	 */
+
+function deleteBookmark(questionId) {
+	var sql = "delete from collect where type = 1 and questionId = ?";
+	sDb.transaction(function(tx) {
+		tx.executeSql(sql, [questionId], function() {}, onError);
+	})
+}
+
+/**
+ * 添加错题
+ * @param {Object} question
+ */
+
+function saveCollect(question) {
+		saveCollectAndBookmark(2, question.id, question.categoryCode, question.userAnswer, null, function() {});
+	}
+	/**
+	 * 删除错题
+	 * @param {Object} questionId
+	 */
+
+function delteCollect(questionId) {
+	var sql = "delete from collect where type = 2 and questionId = ?";
+	sDb.transaction(function(tx) {
+		tx.executeSql(sql, [questionId], function() {}, onError);
+	})
+}
+
+/**
+ * 保存错题和收藏题
+ * type:1为收藏,2为错题;如果是错题,则answer字段不能为空
+ */
+function saveCollectAndBookmark(type, questionId, categoryCode, answer, costTime, sResult) {
+	var sql = "insert into collect(type,questionId,categoryCode,answer,costTime) values(?,?,?,?,?)";
+	sDb.transaction(function(tx) {
+		tx.executeSql(sql, [type, questionId, categoryCode, answer, costTime], sResult, onError);
+	});
+}
+
+/**
+ * 设置节开锁状态
+ *
+ */
+function openSection(sectionId, sResult) {
+		var sql = "update category set status =1 where id = ?";
+		sDb.transaction(function(tx) {
+			tx.executeSql(sql, [sectionId], sResult, onError);
+		});
+	}
+	/**
+	 * 设置章进度,已完成
+	 */
+
+function setChapterProgress(categoryId, progress, sResult) {
+	var sql = "update category set progress = " + progress + " where id = ?";
+	sDb.transaction(function(tx) {
+		tx.executeSql(sql, [categoryId], sResult, onError);
+	});
+}
+
+function queryTest(questionId, callback) {
+	var sql = 'select o.id,o.name,o.key,c.answer from option o join collect c on o.questionId = c.questionId where o.questionId = ?';
+	sDb.transaction(function(tx) {
+		tx.executeSql(sql, [questionId], function(tx, rs) {
+			if (rs.rows.length > 0) {
+				for (var i = 0; i < rs.rows.length; i++) {
+					var row = rs.rows.item(i);
+					console.log('=================================>' + row.name + ',' + row.answer);
+				}
+			}
+		}, onError);
+	});
+}
+
+function test() {
+	//获取所有课程
+	//queryAllCourse(sResult);
+	//根据编码获取章节
+	//queryCategory("00010001", sResult);
+	//测试查询材料题
+	//queryMaterial(1,sResult);
+	//查询解析题
+	//queryResolution(2470,sResult);
+	//读取试题表
+	//queryQuestion('ssss',sResult);
+	//读取材料表
+	//queryMaterial(53,sResult)
+	//测试option表
+	//queryOption(1,sResult);
+	//queryCourseCount('0001',1,sResult);
+	//queryChapterCount('00010001',1,sResult);
+	//测试保存进度
+	//	setChapterProgress(40, 20, sResult);
+	//	queryCategory("00020001", sResult);
+	//保存错题库
+	//saveCollect('2','1','000100010001','1,2,3','10',sResult);
+	queryTest('22');
+}
+
+//sql语句执行成功后执行的回调函数
+function sResult(tx, rs) {}
+	//sql语句执行失败后执行的回调函数
+
+function onError(tx, error) {
+	console.log("操作失败,失败信息:" + JSON.stringify(arguments))
+		//	console.log("操作失败,失败信息:" + error.message);
+}
+
+//window.onload=function(){
+//	test();
+//}
+//mui.plusReady(test);

+ 192 - 0
js/update.js

@@ -0,0 +1,192 @@
+//	var server="http://192.168.1.133:28080/account/AppTopAccount",//获取升级描述文件服务器地址133
+	var server="http://astroway.net:28081/account/AppTopEnglish",//获取升级描述文件服务器地址astroway
+	localDir="update",localFile="update.json",//本地保存升级描述目录和文件名
+	keyUpdate="updateCheck",//取消升级键名
+	keyAbort="updateAbort",//忽略版本键名
+	checkInterval=0,//升级检查间隔,单位为ms,7天为7*24*60*60*1000=60480000, 如果每次启动需要检查设置值为0
+	dir=null;
+
+	/**
+	 * 准备升级操作
+	 * 创建升级文件保存目录
+	 */
+	function initUpdate(){
+		// 打开doc根目录
+		plus.io.requestFileSystem( plus.io.PRIVATE_DOC, function(fs){
+			fs.root.getDirectory( localDir, {create:true}, function(entry){
+				dir = entry;
+				//进行版本判断,运行版本小于服务器版本则更新
+				//checkUpdate();
+				//直接更新不判断版本号的问题
+				getUpdateData();
+			}, function(e){
+				console.log( "准备升级操作,打开update目录失败:"+e.message );
+			});
+		},function(e){
+			console.log( "准备升级操作,打开doc目录失败:"+e.message );
+		});
+	}
+
+	/**
+	 * 检测程序升级
+	 */
+	function checkUpdate() {
+		// 判断升级检测是否过期
+//		var lastcheck = plus.storage.getItem( keyUpdate );
+//		if ( lastcheck ) {
+//			var dc = parseInt( lastcheck );
+//			var dn = (new Date()).getTime();
+//			if ( dn-dc < checkInterval ) {	// 未超过上次升级检测间隔,不需要进行升级检查
+//				return;
+//			}
+//			// 取消已过期,删除取消标记
+//			plus.storage.removeItem( keyUpdate );
+//		}
+		// 读取本地升级文件
+		dir.getFile( localFile, {create:false}, function(fentry){
+			fentry.file( function(file){
+				var reader = new plus.io.FileReader();
+				reader.onloadend = function ( e ) {
+					fentry.remove();
+					var data = null;
+					try{
+						data=JSON.parse(e.target.result);
+					}catch(e){
+						console.log( "读取本地升级文件,数据格式错误!" );
+						return;
+					}
+					checkUpdateData( data );
+				}
+				reader.readAsText(file);
+			}, function(e){
+				console.log( "读取本地升级文件,获取文件对象失败:"+e.message );
+				fentry.remove();
+			} );
+		}, function(e){
+			// 失败表示文件不存在,从服务器获取升级数据
+			getUpdateData();
+		});
+	}
+
+	/**
+	 * 检查升级数据
+	 */
+	function checkUpdateData( j ){
+		//当前客户端版本号
+		var curVer=plus.runtime.version;
+//		var curVer = "1.0";
+		inf = j[plus.os.name];
+		var srvVer = inf.version;
+		//alert("当前版本:" + curVer + " 新版本 " + srvVer);
+		// 判断是否需要升级
+		if ( compareVersion(curVer,srvVer) ) {
+			// 提示用户是否升级
+			plus.ui.confirm( inf.note, function(i){
+				if ( 0==i ) {
+					var apk_dir = j.Android.url;
+					createDownload(apk_dir);
+				} else {
+					
+				}
+			}, inf.title, ["立即更新","取  消"] );
+		}
+	}
+	
+	/**
+	 * 从服务器获取升级数据,并存储到本地;
+	 */
+	function getUpdateData(){
+		mui.getJSON(server,{},function (data) {
+			if(true){
+				// 保存到本地文件中
+	            	dir.getFile( localFile, {create:true}, function(fentry){
+	            		fentry.createWriter( function(writer){
+	            			writer.onerror = function(){
+	            				console.log( "获取升级数据,保存文件失败!" );
+	            			};
+	            			//从服务器下载下来JSON文件
+	            			writer.write(data);
+	            			//根据下载的JSON文件判断是否更新
+	            			checkUpdateData(data);
+	            		}, function(e){
+	            			console.log( "获取升级数据,创建写文件对象失败:"+e.message );
+	            		} );
+	            	}, function(e){
+	            		console.log( "获取升级数据,打开保存文件失败:"+e.message );
+	            	});
+			}
+		});
+	}
+	
+	/**
+	 * 比较版本大小,如果新版本nv大于旧版本ov则返回true,否则返回false
+	 * @param {String} ov
+	 * @param {String} nv
+	 * @return {Boolean} 
+	 */
+	function compareVersion( ov, nv ){
+		if ( !ov || !nv || ov=="" || nv=="" ){
+			return false;
+		}
+		var b=false,
+		ova = ov.split(".",4),
+		nva = nv.split(".",4);
+		for ( var i=0; i<ova.length&&i<nva.length; i++ ) {
+			var so=ova[i],no=parseInt(so),sn=nva[i],nn=parseInt(sn);
+			if ( nn>no || sn.length>so.length  ) {
+				return true;
+			} else if ( nn<no ) {
+				return false;
+			}
+		}
+		if ( nva.length>ova.length && 0==nv.indexOf(ov) ) {
+			return true;
+		}
+	}
+		
+	
+	// 创建下载任务
+	function createDownload(apk_dir) {
+		apk_dir = encodeURI(apk_dir);
+		var dtask = plus.downloader.createDownload( apk_dir, {}, function ( d, status ) {
+			// 下载完成
+			if ( status == 200 ) { 
+				console.log( "Download success: " + d.filename );
+				installApp(d.filename);
+			} else {
+				console.log( "Download failed: " + status ); 
+			}  
+		});
+		var w=plus.nativeUI.showWaiting("   开始下载...   ");
+		dtask.addEventListener( "statechanged", function(task,status){
+            switch(task.state) {
+                case 1: // 开始
+                    w.setTitle("   开始下载...   ");
+                break;
+                case 2: // 已连接到服务器
+                    w.setTitle("   开始下载...   ");
+                break;
+                case 3:
+                    var a = task.downloadedSize/task.totalSize*100;
+                    w.setTitle("   已下载"+parseInt(a)+"%   ");
+                break;
+                case 4: // 下载完成
+                    w.close();
+                break;
+            }
+        } );
+		dtask.start(); 
+	}
+	
+	//安装软件
+	function installApp(install_dir){
+		plus.runtime.install( install_dir, {}, function(){
+			console.info("install success !");
+			plus.runtime.quit();
+		}, function(){
+			console.info("install error !");
+		});
+	}
+	
+	//mui.plusReady(initUpdate);
+

+ 386 - 0
manifest.json

@@ -0,0 +1,386 @@
+{
+    "@platforms": ["android"],
+    "id": "H5A0376FC",/*应用的标识,创建应用时自动生成,勿手动修改*/
+    "name": "统考英语",/*应用名称,程序桌面图标名称*/
+    "version": {
+        "name": "1.3",/*应用版本名称*/
+        "code": ""
+    },
+    "description": "",/*应用描述信息*/
+    "icons": {
+        "72": "icon.png"
+    },
+    "launch_path": "default.html",/*应用的入口页面,默认为根目录下的index.html;支持网络地址,必须以http://或https://开头*/
+    "developer": {
+        "name": "",/*开发者名称*/
+        "email": "",/*开发者邮箱地址*/
+        "url": ""/*开发者个人主页地址*/
+    },
+    "permissions": {
+        "Accelerometer": {
+            "description": "访问加速度感应器"
+        },
+        "Audio": {
+            "description": "访问麦克风"
+        },
+        "Cache": {
+            "description": "管理应用缓存"
+        },
+        "Camera": {
+            "description": "访问摄像头"
+        },
+        "Console": {
+            "description": "跟踪调试输出日志"
+        },
+        "Contacts": {
+            "description": "访问系统联系人信息"
+        },
+        "Device": {
+            "description": "访问设备信息"
+        },
+        "Downloader": {
+            "description": "文件下载管理"
+        },
+        "Events": {
+            "description": "应用扩展事件"
+        },
+        "File": {
+            "description": "访问本地文件系统"
+        },
+        "Gallery": {
+            "description": "访问系统相册"
+        },
+        "Geolocation": {
+            "description": "访问位置信息"
+        },
+        "Invocation": {
+            "description": "使用Native.js能力"
+        },
+        "Messaging": {
+            "description": "访问通讯能力"
+        },
+        "Orientation": {
+            "description": "访问方向感应器"
+        },
+        "Proximity": {
+            "description": "访问距离感应器"
+        },
+        "Storage": {
+            "description": "管理应用本地数据"
+        },
+        "UI": {},
+        "Uploader": {
+            "description": "管理文件上传任务"
+        },
+        "Runtime": {
+            "description": "访问运行期环境"
+        },
+        "XMLHttpRequest": {
+            "description": "跨域网络访问"
+        },
+        "Zip": {
+            "description": "文件压缩与解压缩"
+        },
+        "Barcode": {
+            "description": "管理二维码扫描插件"
+        },
+        "Maps": {
+            "description": "管理地图插件"
+        },
+        
+        "Push": {
+            "description": "管理推送消息插件"
+        },
+        
+        "Speech": {
+            "description": "管理语音识别插件"
+        },
+        "push":{"description":"管理推送消息插件"},"Webview":{},"NativeUI":{},"Navigator":{}
+    },
+    "plus": {
+        "splashscreen": {
+            "autoclose": true,/*是否自动关闭程序启动界面,true表示应用加载应用入口页面后自动关闭;false则需调plus.navigator.closeSplashscreen()关闭*/
+            "waiting": true/*是否在程序启动界面显示等待雪花,true表示显示,false表示不显示。*/
+        },
+        "popGesture": "close",/*设置应用默认侧滑返回关闭Webview窗口,"none"为无侧滑返回功能,"hide"为侧滑隐藏Webview窗口。参考http://ask.dcloud.net.cn/article/102*/
+        "runmode": "liberate",/*应用的首次启动运行模式,可取liberate或normal,liberate模式在第一次启动时将解压应用资源(Android平台File API才可正常访问_www目录)*/
+        "signature": "Sk9JTiBVUyBtYWlsdG86aHIyMDEzQGRjbG91ZC5pbw==",/*可选,保留给应用签名,暂不使用*/
+        "distribute": {
+            "apple": {
+                "appid": "",/*iOS应用标识,苹果开发网站申请的appid,如io.dcloud.HelloH5*/
+                "mobileprovision": "",/*iOS应用打包配置文件*/
+                "password": "",/*iOS应用打包个人证书导入密码*/
+                "p12": "",/*iOS应用打包个人证书,打包配置文件关联的个人证书*/
+                "devices": "",/*iOS应用支持的设备类型,可取值iphone/ipad/universal*/
+                "frameworks":[
+                ]/*调用Native.js调用原生Objective-c API需要引用的FrameWork,如需调用GameCenter,则添加"GameKit.framework"*/
+            },
+            "google": {
+                "packagename": "",/*Android应用包名,如io.dcloud.HelloH5*/
+                "keystore": "",/*Android应用打包使用的密钥库文件*/
+                "password": "",/*Android应用打包使用密钥库中证书的密码*/
+                "aliasname": "",/*Android应用打包使用密钥库中证书的别名*/
+                "permissions": [
+                ]/*使用Native.js调用原生安卓API需要使用到的系统权限*/
+            },
+            "orientation": ["portrait-primary","portrait-secondary","landscape-primary","landscape-secondary"],/*应用支持的方向,portrait-primary:竖屏正方向;portrait-secondary:竖屏反方向;landscape-primary:横屏正方向;landscape-secondary:横屏反方向*/
+            "icons": {
+                "ios": {
+                    "prerendered": true, /*应用图标是否已经高亮处理,在iOS6及以下设备上有效*/
+                    "auto": "", /*应用图标,分辨率:512x512,用于自动生成各种尺寸程序图标*/
+                    "iphone": {
+                        "normal": "unpackage/res/icons/57x57.png", /*iPhone3/3GS程序图标,分辨率:57x57*/
+                        "retina": "unpackage/res/icons/114x114.png", /*iPhone4程序图标,分辨率:114x114*/
+                        "retina7": "unpackage/res/icons/120x120.png", /*iPhone4S/5/6程序图标,分辨率:120x120*/
+			"retina8": "unpackage/res/icons/180x180.png", /*iPhone6 Plus程序图标,分辨率:180x180*/
+                        "spotlight-normal": "unpackage/res/icons/29x29.png", /*iPhone3/3GS Spotlight搜索程序图标,分辨率:29x29*/
+                        "spotlight-retina": "unpackage/res/icons/58x58.png", /*iPhone4 Spotlight搜索程序图标,分辨率:58x58*/
+                        "spotlight-retina7": "unpackage/res/icons/80x80.png", /*iPhone4S/5/6 Spotlight搜索程序图标,分辨率:80x80*/
+                        "settings-normal": "unpackage/res/icons/29x29.png", /*iPhone4设置页面程序图标,分辨率:29x29*/
+                        "settings-retina": "unpackage/res/icons/58x58.png", /*iPhone4S/5/6设置页面程序图标,分辨率:58x58*/
+			"settings-retina8": "unpackage/res/icons/87x87.png" /*iPhone6Plus设置页面程序图标,分辨率:87x87*/
+                    },
+                    "ipad": {
+                        "normal": "unpackage/res/icons/72x72.png", /*iPad普通屏幕程序图标,分辨率:72x72*/
+                        "retina": "unpackage/res/icons/144x144.png", /*iPad高分屏程序图标,分辨率:144x144*/
+                        "normal7": "unpackage/res/icons/76x76.png", /*iPad iOS7程序图标,分辨率:76x76*/
+                        "retina7": "unpackage/res/icons/152x152.png", /*iPad iOS7高分屏程序图标,分辨率:152x152*/
+                        "spotlight-normal": "unpackage/res/icons/50x50.png", /*iPad Spotlight搜索程序图标,分辨率:50x50*/
+                        "spotlight-retina": "unpackage/res/icons/100x100.png", /*iPad高分屏Spotlight搜索程序图标,分辨率:100x100*/
+                        "spotlight-normal7": "unpackage/res/icons/40x40.png",/*iPad iOS7 Spotlight搜索程序图标,分辨率:40x40*/
+                        "spotlight-retina7": "unpackage/res/icons/80x80.png",/*iPad iOS7高分屏Spotlight搜索程序图标,分辨率:80x80*/
+                        "settings-normal": "unpackage/res/icons/29x29.png",/*iPad设置页面程序图标,分辨率:29x29*/
+                        "settings-retina": "unpackage/res/icons/58x58.png" /*iPad高分屏设置页面程序图标,分辨率:58x58*/
+                    }
+                },
+                "android": {
+                    "mdpi": "unpackage/res/icons/48x48.png", /*普通屏程序图标,分辨率:48x48*/
+                    "ldpi": "unpackage/res/icons/48x48.png", /*大屏程序图标,分辨率:48x48*/
+                    "hdpi": "unpackage/res/icons/72x72.png", /*高分屏程序图标,分辨率:72x72*/
+                    "xhdpi": "unpackage/res/icons/96x96.png",/*720P高分屏程序图标,分辨率:96x96*/
+                    "xxhdpi": "unpackage/res/icons/144x144.png"/*1080P 高分屏程序图标,分辨率:144x144*/
+                }
+            },
+            "splashscreen": {
+                "ios": {
+                    "iphone": {
+                        "default": "unpackage/res/qidong/ipad/qd320X480.png", /*iPhone3启动图片选,分辨率:320x480*/
+                        "retina35": "unpackage/res/qidong/ipad/qd640X960.png",/*3.5英寸设备(iPhone4)启动图片,分辨率:640x960*/
+                        "retina40": "unpackage/res/qidong/ipad/qd640X1136.png",/*4.0 英寸设备(iPhone5/iPhone5s)启动图片,分辨率:640x1136*/
+                        "retina47": "unpackage/res/qidong/ipad/qd750X1334.png",/*4.7 英寸设备(iPhone6)启动图片,分辨率:750x1334*/
+                        "retina55": "unpackage/res/qidong/ipad/qd1242X2208.png",/*5.5 英寸设备(iPhone6 Plus)启动图片,分辨率:1242x2208*/
+                        "retina55l": "unpackage/res/qidong/ipad/qd2208X1242.png"/*5.5 英寸设备(iPhone6 Plus)横屏启动图片,分辨率:2208x1242*/
+                    },
+                    "ipad": {
+                        "portrait": "unpackage/res/qidong/Ios/qd768X1004.png", /*iPad竖屏启动图片,分辨率:768x1004*/
+                        "portrait-retina": "unpackage/res/qidong/Ios/qd1536x2008.png",/*iPad高分屏竖屏图片,分辨率:1536x2008*/
+                        "landscape": "unpackage/res/qidong/Ios/qd1024x748.png", /*iPad横屏启动图片,分辨率:1024x748*/
+                        "landscape-retina": "unpackage/res/qidong/Ios/qd2048X1496.png", /*iPad高分屏横屏启动图片,分辨率:2048x1496*/
+                        "portrait7": "unpackage/res/qidong/Ios/qd768X1024.png", /*iPad iOS7竖屏启动图片,分辨率:768x1024*/
+                        "portrait-retina7": "unpackage/res/qidong/Ios/qd1536x2048.png",/*iPad iOS7高分屏竖屏图片,分辨率:1536x2048*/
+                        "landscape7": "unpackage/res/qidong/Ios/qd1024x768.png", /*iPad iOS7横屏启动图片,分辨率:1024x768*/
+                        "landscape-retina7": "unpackage/res/qidong/Ios/qd2048x1536.png"/*iPad iOS7高分屏横屏启动图片,分辨率:2048x1536*/
+                    }
+                },
+                "android": {
+                    "mdpi": "unpackage/res/qidong/andrios/english240x282.png", /*普通屏启动图片,分辨率:240x282*/
+                    "ldpi": "unpackage/res/qidong/andrios/english320x442.png", /*大屏启动图片,分辨率:320x442*/
+                    "hdpi": "unpackage/res/qidong/andrios/english480x762.png", /*高分屏启动图片,分辨率:480x762*/
+                    "xhdpi": "unpackage/res/qidong/andrios/english720x1242.png", /*720P高分屏启动图片,分辨率:720x1242*/
+                    "xxhdpi": "unpackage/res/qidong/andrios/english1882x1080.png"/*1080P高分屏启动图片,分辨率:1080x1882*/
+                }
+            },"plugins":{"statics":{"description":"管理消息推送能力"},"speech":{},"push":{"description":"管理消息推送能力","cover":"false","igexin":{"appid":"KOOpxKpqfL6LEy52alDKc4","appkey":"ffBO27VLWc8xu9RxA25Hg","appsecret":"zr40DA9ZKo92cPaE9xKNW2"}},"share":{},"maps":{"description":"地图插件"},"payment":{"description":"支付插件"}}
+        }
+    },
+	"dependencies": {
+		"pages": {
+			"default.html": {
+				"resources": [
+					"js/mui.min.js",
+					"db/category.js",
+					"css/mui.min.css",
+					"db/others.js",
+					"js/createDb.js"
+				],
+				"refer": [
+					"image.html",
+					"dragIndex.html"
+				],
+				"priority": 0
+			},
+			"image.html": {
+				"resources": [
+					"images/English-qishiyendao1.jpg",
+					"images/English-qishiyendao2.jpg",
+					"images/English-qishiyendao3.jpg"
+				],
+				"refer": [
+					"dragIndex.html"
+				],
+				"priority": 0
+			},
+			"dragIndex.html": {
+				"resources": [
+					"js/app.js",
+					"images/englishchatu-1.png",
+					"js/service.js",
+					"js/routes.js",
+					"fonts/mui.ttf",
+					"css/iconfont.css",
+					"js/update.js",
+					"fonts/iconfont.ttf",
+					"images/englishchatu-2.png",
+					"images/englishchatu-5.png",
+					"images/englishchatu-6.png",
+					"images/englishchatu-3.png",
+					"images/englishchatu-4.png",
+					"js/mui.min.js",
+					"css/mui.min.css"
+				],
+				"refer": [
+					"app/section.html",
+					"app/login.html",
+					"app/review-chapter.html",
+					"app/personal.html"
+				],
+				"priority": 0
+			},
+			"app/question.html": {
+				"resources": [
+					"js/des.js",
+					"fonts/iconfont.ttf"
+				],
+				"refer": [
+					"app/card.html"
+				],
+				"priority": 0
+			},
+			"app/section.html": {
+				"resources": [
+					"js/app.js",
+					"js/service.js",
+					"js/routes.js",
+					"js/mui.min.js",
+					"fonts/mui.ttf",
+					"css/iconfont.css",
+					"css/mui.min.css"
+				],
+				"refer": [
+					"app/question.html",
+					"app/login.html"
+				],
+				"priority": 0
+			},
+			"app/login.html": {
+				"resources": [
+					"js/des.js",
+					"js/app.js",
+					"js/service.js",
+					"js/routes.js",
+					"js/mui.min.js",
+					"fonts/mui.ttf",
+					"css/mui.min.css"
+				],
+				"refer": [
+					"app/section.html",
+					"dragIndex.html"
+				],
+				"priority": 0
+			},
+			"app/card.html": {
+				"resources": [],
+				"refer": [
+					"app/submit.html"
+				],
+				"priority": 0
+			},
+			"app/submit.html": {
+				"resources": [],
+				"refer": [
+					"app/resolution.html"
+				],
+				"priority": 0
+			},
+			"app/review-chapter.html": {
+				"resources": [
+					"js/app.js",
+					"js/service.js",
+					"js/mui.min.js",
+					"fonts/mui.ttf",
+					"css/mui.min.css"
+				],
+				"refer": [
+					"app/review-section.html"
+				],
+				"priority": 0
+			},
+			"app/review-resolution.html": {
+				"resources": [
+					"css/iconfont.css",
+					"js/des.js",
+					"fonts/iconfont.ttf"
+				],
+				"refer": [],
+				"priority": 0
+			},
+			"app/review-section.html": {
+				"resources": [],
+				"refer": [
+					"app/review-resolution.html"
+				],
+				"priority": 0
+			},
+			"app/personal.html": {
+				"resources": [
+					"js/app.js",
+					"images/person/my-person-xitongshezhi.png",
+					"js/mui.min.js",
+					"fonts/mui.ttf",
+					"css/mui.min.css",
+					"images/person/my-person-xiaoxi.png"
+				],
+				"refer": [
+					"app/seting.html",
+					"app/msg-center.html",
+					"dragIndex.html"
+				],
+				"priority": 0
+			},
+			"app/msg-center.html": {
+				"resources": [
+					"js/app.js",
+					"js/service.js",
+					"js/mui.min.js",
+					"fonts/mui.ttf",
+					"css/mui.min.css"
+				],
+				"refer": [],
+				"priority": 0
+			}
+		},
+		"idle": {
+			"resources": [
+				"fonts/iconfont2.ttf",
+				"images/pull_arrow.png",
+				"js/common.js",
+				"images/qidongye/baoming1882x1080.jpg",
+				"testdb.html",
+				"images/pull_fresh.png",
+				"index.html",
+				"user-info.html",
+				"app/personal-info.html",
+				"push.html",
+				"app/note.html",
+				"images/qidongye/baoming480x762.jpg",
+				"app/chapter.html",
+				"images/person/person-header.jpg",
+				"images/qidongye/baoming240x282.jpg",
+				"app/verifyCode.html",
+				"images/qidongye/baoming320x442.jpg",
+				"app/course.html",
+				"AppTopAccount.cfg",
+				"images/qidongye/baoming720x1242.jpg"
+			]
+		}
+	}
+}

+ 66 - 0
push.html

@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <link rel="stylesheet" type="text/css" href="css/style.css"/>
+    <script type="text/javascript" src="js/common.js"></script>
+    <script type="text/javascript" src="js/comet4j-debug2.js"></script>
+    <script type="text/javascript" src="js/talk2.js"></script>
+    <script type="text/javascript" src="js/mui.min.js"></script>
+    <script type="text/javascript">
+        function initPushMsg() {
+            JS.AJAX.post(URL + 'username.do', {}, function (result) {
+                if (result.responseText) {
+                    window.__user_name = result.responseText;
+//                  alert(window.__user_name)
+                    document.getElementById("loginName").value = result.responseText;
+                    login();
+                    init();
+                }
+            });
+        }
+        mui.plusReady(function () {
+            initPushMsg();
+        });
+    </script>
+</head>
+
+<body>
+
+<div id="statebar">
+    连接状态:<span id="workStyle"></span>; 连接数量:
+    <span id="connectorCount"></span>; 已用内存:
+    <span id="usedMemory"></span>; 可用内存:
+    <span id="freeMemory"></span>; 内存容量:
+    <span id="totalMemory"></span>; 最大容量:
+    <span id="maxMemory"></span>; 系统已运行:
+    <span id="startup"></span>
+</div>
+
+<div id="logbox">
+</div>
+
+<div id="toolbar">
+    请输入:
+    <input maxlength="200" id="inputbox" class="inputbox" onkeypress="return onSendBoxEnter(event);"
+           type="text"></input>
+    <input type="button" class="button" onclick="send(inputbox.value);" value="回车发送"></input>
+    <input type="button" class="button" onclick="rename();" value="改名"></input>
+</div>
+
+<div id="login">
+    请输入昵称:
+    <input type="text" class="inputbox" maxlength="50" id="loginName" onkeypress="return loginEnter(event);"></input>
+    <input type="button" class="button" onclick="login();" value="确定"></input>
+</div>
+<div id="output">
+    Push模块管理推送消息功能,可以实现在线、离线的消息推送,通过plus.push可获取推送消息管理对象。
+</div>
+</body>
+
+</html>

+ 32 - 0
testdb.html

@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+
+	<head>
+		<meta charset="utf-8">
+		<title>index</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+
+		<script src="db/resolution.js" type="text/javascript" charset="utf-8"></script>
+		<script src="db/.js" type="text/javascript" charset="utf-8"></script>
+		<script src="db/message.js" type="text/javascript" charset="utf-8"></script>
+		<script src="db/material.js" type="text/javascript" charset="utf-8"></script>
+		<script src="db/question.js" type="text/javascript" charset="utf-8"></script>
+		<script src="db/option.js" type="text/javascript" charset="utf-8"></script>
+		<script src="js/createDb.js" type="text/javascript" charset="utf-8"></script>
+		<script src="js/service.js"></script>
+	</head>
+
+	<body>
+		------------------------
+		sdf
+		<script>
+				//获取节下的所有试题
+				queryQuestionAll('22', function(index, question) {
+					console.log(index + ', ' + JSON.stringify(question));
+				});
+		</script>
+	</body>
+
+</html>

+ 152 - 0
unpackage/.confirmed_dependencies

@@ -0,0 +1,152 @@
+{
+  "default.html": {
+    "resources": [
+      "js/mui.min.js",
+      "db/category.js",
+      "css/mui.min.css",
+      "db/others.js",
+      "js/createDb.js"
+    ],
+    "refer": [
+      "image.html",
+      "dragIndex.html"
+    ]
+  },
+  "image.html": {
+    "resources": [
+      "images/English-qishiyendao1.jpg",
+      "images/English-qishiyendao2.jpg",
+      "images/English-qishiyendao3.jpg"
+    ],
+    "refer": [
+      "dragIndex.html"
+    ]
+  },
+  "dragIndex.html": {
+    "resources": [
+      "js/app.js",
+      "images/englishchatu-1.png",
+      "js/service.js",
+      "js/routes.js",
+      "fonts/mui.ttf",
+      "css/iconfont.css",
+      "js/update.js",
+      "fonts/iconfont.ttf",
+      "images/englishchatu-2.png",
+      "images/englishchatu-5.png",
+      "images/englishchatu-6.png",
+      "images/englishchatu-3.png",
+      "images/englishchatu-4.png",
+      "js/mui.min.js",
+      "css/mui.min.css"
+    ],
+    "refer": [
+      "app/section.html",
+      "app/login.html",
+      "app/review-chapter.html",
+      "app/personal.html"
+    ]
+  },
+  "app/question.html": {
+    "resources": [
+      "js/des.js",
+      "fonts/iconfont.ttf"
+    ],
+    "refer": [
+      "app/card.html"
+    ]
+  },
+  "app/section.html": {
+    "refer": [
+      "app/question.html",
+      "app/login.html"
+    ],
+    "resources": [
+      "js/app.js",
+      "js/service.js",
+      "js/routes.js",
+      "js/mui.min.js",
+      "fonts/mui.ttf",
+      "css/iconfont.css",
+      "css/mui.min.css"
+    ]
+  },
+  "app/login.html": {
+    "resources": [
+      "js/des.js",
+      "js/app.js",
+      "js/service.js",
+      "js/routes.js",
+      "js/mui.min.js",
+      "fonts/mui.ttf",
+      "css/mui.min.css"
+    ],
+    "refer": [
+      "app/section.html",
+      "dragIndex.html"
+    ]
+  },
+  "app/card.html": {
+    "refer": [
+      "app/submit.html"
+    ],
+    "resources": []
+  },
+  "app/submit.html": {
+    "refer": [
+      "app/resolution.html"
+    ],
+    "resources": []
+  },
+  "app/review-chapter.html": {
+    "refer": [
+      "app/review-section.html"
+    ],
+    "resources": [
+      "js/app.js",
+      "js/service.js",
+      "js/mui.min.js",
+      "fonts/mui.ttf",
+      "css/mui.min.css"
+    ]
+  },
+  "app/review-resolution.html": {
+    "resources": [
+      "css/iconfont.css",
+      "js/des.js",
+      "fonts/iconfont.ttf"
+    ],
+    "refer": []
+  },
+  "app/review-section.html": {
+    "refer": [
+      "app/review-resolution.html"
+    ],
+    "resources": []
+  },
+  "app/personal.html": {
+    "resources": [
+      "js/app.js",
+      "images/person/my-person-xitongshezhi.png",
+      "js/mui.min.js",
+      "fonts/mui.ttf",
+      "css/mui.min.css",
+      "images/person/my-person-xiaoxi.png"
+    ],
+    "refer": [
+      "app/seting.html",
+      "app/msg-center.html",
+      "dragIndex.html"
+    ]
+  },
+  "app/msg-center.html": {
+    "resources": [
+      "js/app.js",
+      "js/service.js",
+      "js/mui.min.js",
+      "fonts/mui.ttf",
+      "css/mui.min.css"
+    ],
+    "refer": []
+  }
+}

+ 1 - 0
unpackage/.dependencies

@@ -0,0 +1 @@
+null

BIN
unpackage/release/H5A0376FC.apk


BIN
unpackage/release/H5A0376FC.ipa


BIN
unpackage/release/H5A0376FC_0328214256.ipa


BIN
unpackage/res/2mstar.p12


BIN
unpackage/res/english.mobileprovision


BIN
unpackage/res/icons/100x100.png


BIN
unpackage/res/icons/114x114.png


BIN
unpackage/res/icons/120x120.png


BIN
unpackage/res/icons/144x144.png


BIN
unpackage/res/icons/152x152.png


BIN
unpackage/res/icons/180x180.png


BIN
unpackage/res/icons/29x29.png


BIN
unpackage/res/icons/40x40.png


BIN
unpackage/res/icons/48x48.png


BIN
unpackage/res/icons/50x50.png


BIN
unpackage/res/icons/57x57.png


BIN
unpackage/res/icons/58x58.png


BIN
unpackage/res/icons/72x72.png


BIN
unpackage/res/icons/76x76.png


BIN
unpackage/res/icons/80x80.png


BIN
unpackage/res/icons/87x87.png


BIN
unpackage/res/icons/96x96.png


BIN
unpackage/res/qidong/Ios/qd1024x748.png


BIN
unpackage/res/qidong/Ios/qd1024x768.png


BIN
unpackage/res/qidong/Ios/qd1536x2008.png


BIN
unpackage/res/qidong/Ios/qd1536x2048.png


BIN
unpackage/res/qidong/Ios/qd2048X1496.png


BIN
unpackage/res/qidong/Ios/qd2048x1536.png


BIN
unpackage/res/qidong/Ios/qd768X1004.png


BIN
unpackage/res/qidong/Ios/qd768X1024.png


BIN
unpackage/res/qidong/andrios/english1882x1080.png


BIN
unpackage/res/qidong/andrios/english240x282.png


BIN
unpackage/res/qidong/andrios/english320x442.png


BIN
unpackage/res/qidong/andrios/english480x762.png


BIN
unpackage/res/qidong/andrios/english720x1242.png


BIN
unpackage/res/qidong/ipad/qd1242X2208.png


Some files were not shown because too many files changed in this diff