zhengkaixin há 4 anos atrás
commit
f0bdbf6d6b
94 ficheiros alterados com 21232 adições e 0 exclusões
  1. 9 0
      .env.development
  2. 9 0
      .env.production
  3. 9 0
      .env.test
  4. 23 0
      .gitignore
  5. 24 0
      README.md
  6. 5 0
      babel.config.js
  7. 36 0
      package.json
  8. BIN
      public/favicon.ico
  9. 98 0
      public/index.html
  10. BIN
      public/loading.gif
  11. 81 0
      src/App.vue
  12. 21 0
      src/apis/activity.js
  13. 23 0
      src/apis/bill.js
  14. 45 0
      src/apis/common.js
  15. 42 0
      src/apis/company.js
  16. 11 0
      src/apis/cost.js
  17. 68 0
      src/apis/feedback.js
  18. 12 0
      src/apis/form.js
  19. 49 0
      src/apis/job.js
  20. 52 0
      src/apis/market.js
  21. 30 0
      src/apis/message.js
  22. 39 0
      src/apis/news.js
  23. 19 0
      src/apis/payment.js
  24. 81 0
      src/apis/user.js
  25. 33 0
      src/apis/weixin.js
  26. 3 0
      src/assets/css/iconfont.css
  27. 4692 0
      src/assets/css/mui.min.css
  28. 6 0
      src/assets/css/mui.picker.min.css
  29. 1308 0
      src/assets/css/qylhh.css
  30. 539 0
      src/assets/fonts/demo.css
  31. 2218 0
      src/assets/fonts/demo_index.html
  32. BIN
      src/assets/fonts/iconfont.eot
  33. 0 0
      src/assets/fonts/iconfont.js
  34. 632 0
      src/assets/fonts/iconfont.json
  35. 109 0
      src/assets/fonts/iconfont.svg
  36. BIN
      src/assets/fonts/iconfont.ttf
  37. BIN
      src/assets/fonts/iconfont.woff
  38. BIN
      src/assets/fonts/iconfont.woff2
  39. BIN
      src/assets/fonts/mui.ttf
  40. BIN
      src/assets/img/banner1.png
  41. BIN
      src/assets/img/banner2.png
  42. BIN
      src/assets/img/banner3.jpg
  43. BIN
      src/assets/img/default_company_logo.png
  44. BIN
      src/assets/img/default_images.png
  45. BIN
      src/assets/img/down.png
  46. BIN
      src/assets/img/icon_bill.png
  47. BIN
      src/assets/img/icon_message.png
  48. BIN
      src/assets/img/icon_phoneSafe.png
  49. BIN
      src/assets/img/icon_ticket.png
  50. BIN
      src/assets/img/img.png
  51. BIN
      src/assets/img/ladding.png
  52. BIN
      src/assets/img/loading.gif
  53. BIN
      src/assets/img/logo_jp.png
  54. BIN
      src/assets/img/logo_qilian.png
  55. BIN
      src/assets/img/new.png
  56. BIN
      src/assets/img/no.png
  57. BIN
      src/assets/img/none.png
  58. BIN
      src/assets/img/nonum.png
  59. BIN
      src/assets/img/nowife.png
  60. BIN
      src/assets/img/sfz.png
  61. BIN
      src/assets/img/wite.png
  62. BIN
      src/assets/img/yes.png
  63. BIN
      src/assets/img/yyzz.png
  64. 8387 0
      src/assets/js/mui.js
  65. 5 0
      src/assets/js/mui.min.js
  66. 6 0
      src/assets/js/mui.picker.min.js
  67. 382 0
      src/assets/js/mui.previewimage.js
  68. 322 0
      src/assets/js/mui.zoom.js
  69. 96 0
      src/components/Banner.vue
  70. 167 0
      src/components/Common.vue
  71. 40 0
      src/components/Loading.vue
  72. 83 0
      src/components/NavMenu.vue
  73. 96 0
      src/components/TopHeader.vue
  74. 37 0
      src/main.js
  75. 113 0
      src/router/index.js
  76. 29 0
      src/store/getters.js
  77. 13 0
      src/store/index.js
  78. 18 0
      src/store/mutation-types.js
  79. 89 0
      src/store/mutations.js
  80. 37 0
      src/store/state.js
  81. 31 0
      src/utils/alipay.js
  82. 370 0
      src/utils/index.js
  83. 74 0
      src/utils/muiLoad.js
  84. 83 0
      src/utils/request.js
  85. 100 0
      src/utils/storage.js
  86. 117 0
      src/utils/wxJsApi.js
  87. 50 0
      src/utils/wxpay.js
  88. 9 0
      src/views/Home.vue
  89. 25 0
      src/views/Layout.vue
  90. 8 0
      src/views/case/Info.vue
  91. 8 0
      src/views/quiz/Info.vue
  92. 8 0
      src/views/quiz/My.vue
  93. 9 0
      src/views/quiz/Submit.vue
  94. 94 0
      vue.config.js

+ 9 - 0
.env.development

@@ -0,0 +1,9 @@
+NODE_ENV=devlopment
+VUE_APP_NODE_NAME=devlopment
+OUT_PUT_NAME=dev
+VUE_APP_LOCAL_STORAGE_PREFIX=dev
+VUE_APP_BACKEND_URL=https://qylhhapi.xiaoxinda.com/enterprise-server
+#appid
+VUE_APP_WXAPPID=wx907e84ad32e6e142
+
+VUE_APP_VERSION=1.0.0

+ 9 - 0
.env.production

@@ -0,0 +1,9 @@
+NODE_ENV=production
+VUE_APP_NODE_NAME=production
+OUT_PUT_NAME=prod
+VUE_APP_LOCAL_STORAGE_PREFIX=prod
+VUE_APP_BACKEND_URL=https://qylhhapi.xiaoxinda.com/enterprise-server
+#appid
+VUE_APP_WXAPPID=wx907e84ad32e6e142
+
+VUE_APP_VERSION=1.0.0

+ 9 - 0
.env.test

@@ -0,0 +1,9 @@
+NODE_ENV=production
+VUE_APP_NODE_NAME=test
+OUT_PUT_NAME=test
+VUE_APP_LOCAL_STORAGE_PREFIX=test
+VUE_APP_BACKEND_URL=https://ykt-test.xiaoxinda.com/enterprise-server
+#appid
+VUE_APP_WXAPPID=wx907e84ad32e6e142
+
+VUE_APP_VERSION=1.0.0

+ 23 - 0
.gitignore

@@ -0,0 +1,23 @@
+.DS_Store
+node_modules
+/dist
+
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 24 - 0
README.md

@@ -0,0 +1,24 @@
+# 12355
+
+## Project setup
+```
+yarn install
+```
+
+### Compiles and hot-reloads for development
+```
+yarn serve
+```
+
+### Compiles and minifies for test
+```
+yarn test
+```
+
+### Compiles and minifies for production
+```
+yarn build
+```
+
+### Customize configuration
+See [Configuration Reference](https://cli.vuejs.org/config/).

+ 5 - 0
babel.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    '@vue/cli-plugin-babel/preset'
+  ]
+}

+ 36 - 0
package.json

@@ -0,0 +1,36 @@
+{
+  "name": "jp-xxd-12355",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve",
+    "build": "vue-cli-service build",
+    "test": "vue-cli-service build --mode test"
+  },
+  "dependencies": {
+    "axios": "^0.21.1",
+    "compression-webpack-plugin": "^7.1.1",
+    "core-js": "^3.6.5",
+    "qrcodejs2": "^0.0.2",
+    "vconsole": "^3.3.4",
+    "vue": "^2.6.11",
+    "vue-router": "^3.2.0",
+    "vuedraggable": "^2.24.3",
+    "vuex": "^3.4.0",
+    "weixin-js-sdk": "^1.6.0"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "~4.5.0",
+    "@vue/cli-plugin-router": "~4.5.0",
+    "@vue/cli-plugin-vuex": "~4.5.0",
+    "@vue/cli-service": "~4.5.0",
+    "node-sass": "^4.12.0",
+    "sass-loader": "^8.0.2",
+    "vue-template-compiler": "^2.6.11"
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions",
+    "not dead"
+  ]
+}

BIN
public/favicon.ico


+ 98 - 0
public/index.html

@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<script>
+			//加载开始时间
+			var start_time = (new Date()).getTime();
+			var route_path = window.location.href.split("#")[1].replace(/\?.*/, '')
+		</script>
+		<meta charset="utf-8">
+		<meta http-equiv="X-UA-Compatible" content="IE=edge">
+		<meta name="viewport" content="width=device-width,initial-scale=1.0">
+		<link rel="icon" href="<%= BASE_URL %>favicon.ico">
+		<title>
+			<%= htmlWebpackPlugin.options.title %>
+		</title>
+	</head>
+	<body>
+		<noscript>
+			<strong>We're sorry but
+				<%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to
+				continue.</strong>
+		</noscript>
+
+		<div id="z-loading-1" style="display: block;position: fixed;left:0px;top:0px;bottom:0px;right:0px;width: 100%;height: 100%;background: rgb(255, 255, 255, 0.9);z-index: 999;">
+			<div style="position: absolute;top: 40%;left: 38%">
+				<img src="loading.gif" id="loading-gif" />
+			</div>
+			<div class="index-load" id="index-load" style="display:block;position: absolute;bottom: 10px;right: 10px;"></div>
+		</div>
+		<script>
+			var indexSetInval;
+			var indexStartNum = 1;
+			indexSetInval = setInterval(function() {
+				indexStartNum++;
+				var str = '加载中' + ((indexStartNum % 2 == 0) ? '…' : '……');
+				document.getElementById('index-load').innerHTML = str;
+			}, 1000)
+		</script>
+
+		<div id="app"></div>
+
+
+		<script>
+			window.onload = function() {
+				clearInterval(indexSetInval);
+				var end_time = (new Date()).getTime();
+				var loading_time = end_time - start_time;
+				console.log(((loading_time) / 1000).toString() + '秒');
+
+				indexSetInval = setInterval(function() {
+					var b = document.getElementById('app').childNodes[0].length;
+					
+					if (b != 0) {
+						
+						removeLoading()
+						clearInterval(indexSetInval);
+					}
+				}, 500);
+
+			}
+
+			function removeLoading() {
+				if (document.getElementById('z-loading-1').style.display != 'none') {
+					var loading = document.getElementById('z-loading-1');
+				}
+				document.body.removeChild(loading);
+			}
+		</script>
+
+		<script type="text/javascript">
+			(function() {
+				if (typeof WeixinJSBridge == "object" && typeof WeixinJSBridge.invoke == "function") {
+					handleFontSize();
+				} else {
+					if (document.addEventListener) {
+						document.addEventListener("WeixinJSBridgeReady", handleFontSize, false);
+					} else if (document.attachEvent) {
+						document.attachEvent("WeixinJSBridgeReady", handleFontSize);
+						document.attachEvent("onWeixinJSBridgeReady", handleFontSize);
+					}
+				}
+
+				function handleFontSize() {
+					/*设置网页字体为默认大小*/
+					WeixinJSBridge.invoke('setFontSizeCallback', {
+						'fontSize': 0
+					});
+					/*重写设置网页字体大小的事件*/
+					WeixinJSBridge.on('menu:setfont', function() {
+						WeixinJSBridge.invoke('setFontSizeCallback', {
+							'fontSize': 0
+						});
+					});
+				}
+			})();
+		</script>
+	</body>
+</html>

BIN
public/loading.gif


+ 81 - 0
src/App.vue

@@ -0,0 +1,81 @@
+<template>
+	<div id="app">
+		<router-view />
+	</div>
+</template>
+
+<script>
+	import {
+		mapGetters,
+		mapMutations
+	} from 'vuex'
+	export default {
+		name: 'Home',
+		created() {},
+		methods: {
+			removeElement(element) {
+				for (var i = 0; i < element.length; i++) {
+					console.log(element[i]);
+					document.body.removeChild(element[i]);
+				}
+			}
+		},
+		mounted() {
+			mui('body').on('tap', '.kfz', function() {
+				mui.toast('开发中');
+			});
+			mui('body').on('tap', '.jump', function() {
+				document.location.href = this.href;
+			});
+		},
+		watch: {
+			//解决系统返回键app外的元素仍然存在的问题
+			'$route': function(to, from) {
+				var muidtpicker = document.getElementsByClassName('mui-dtpicker mui-active');
+				var muibackdrop = document.getElementsByClassName('mui-backdrop');
+				var muipoppicker = document.getElementsByClassName('mui-poppicker mui-active');
+				if (muidtpicker) {
+					this.removeElement(muidtpicker);
+					//console.log(muidtpicker)
+				}
+				if (muibackdrop) {
+					this.removeElement(muibackdrop);
+					//console.log(muibackdrop)
+				}
+				if (muipoppicker) {
+					this.removeElement(muipoppicker);
+					//console.log(muibackdrop)
+				}
+			}
+		},
+	}
+</script>
+
+<style src="@/assets/css/qylhh.css"></style>
+<style src="@/assets/css/iconfont.css"></style>
+<style lang="scss">
+	#app {
+		font-family: Avenir, Helvetica, Arial, sans-serif;
+		-webkit-font-smoothing: antialiased;
+		-moz-osx-font-smoothing: grayscale;
+	}
+
+	.kfz,
+	.kfz a,
+	.kfz span,
+	.kfz p,
+	.kfz div {
+		color: #ddd !important;
+	}
+
+	#listContainer {
+		position: absolute
+	}
+    .listContainer {
+        position: absolute
+    }
+
+	input:disabled {
+		color: #ACA899;
+	}
+</style>

+ 21 - 0
src/apis/activity.js

@@ -0,0 +1,21 @@
+import request from '@/utils/request'
+import Qs from 'qs';
+
+
+//活动详情
+export function activityDetail(params) {
+	return request({
+		url: '/mobile/activityInfoApi/activityDetail',
+		data: Qs.stringify(params),
+		method: 'post',
+	})
+}
+
+//活动列表
+export function activityList(params) {
+	return request({
+		url: '/mobile/activityInfoApi/activityList',
+		data: Qs.stringify(params),
+		method: 'post',
+	})
+}

+ 23 - 0
src/apis/bill.js

@@ -0,0 +1,23 @@
+//账单
+import request from '@/utils/request'
+import Qs from 'qs';
+
+//我的账单列表
+export function myBillPageList(data) {
+	return request({
+		url: '/mobile/orderInfoApi/orderList',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//我的账单详情
+export function myBillInfo(id) {
+	return request({
+		url: '/mobile/orderInfoApi/orderDetail',
+		data: Qs.stringify({
+			id: id
+		}),
+		method: 'post',
+	})
+}

+ 45 - 0
src/apis/common.js

@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+import Qs from 'qs';
+
+//上传图片
+export function uploadBase64(formData) {
+	return request({
+		url: '/mobile/personInfoApi/uploadBase64',
+		data: formData,
+		method: 'post',
+		timeout: 60000,
+	})
+}
+
+//获取基本信息筛选属性列表
+export function getAttributeList(name) {
+	return request({
+		url: '/mobile/companyInfoApi/attributeList',
+		data: Qs.stringify({
+			name: name
+		}),
+		method: 'post',
+	})
+}
+
+//获取天气
+export function getWeather(cityName) {
+	return request({
+		url: '/mobile/personInfoApi/getWeather',
+		data: Qs.stringify({
+			cityName: cityName
+		}),
+		method: 'post',
+	})
+}
+
+//获取banner图片
+export function getBannerInfo(type) {
+	return request({
+		url: '/mobile/bannerInfo/getBannerInfo',
+		data: Qs.stringify({
+			type: type
+		}),
+		method: 'post',
+	})
+}

+ 42 - 0
src/apis/company.js

@@ -0,0 +1,42 @@
+import request from '@/utils/request'
+import Qs from 'qs';
+
+
+//行业列表 (id 可以为空)
+export function industryList(id) {
+    return request({
+        url: '/mobile/companyInfoApi/industryList',
+        data: Qs.stringify({
+            id: id
+        }),
+        method: 'post',
+    })
+}
+
+//企业 详情
+export function companyDetail(id) {
+    return request({
+        url: '/mobile/companyInfoApi/companyDetail',
+        data: Qs.stringify({
+            id: id
+        }),
+        method: 'post',
+    })
+}
+
+//企业列表数
+export function companyList(params) {
+    return request({
+        url: '/mobile/companyInfoApi/companyList',
+        data: Qs.stringify(params),
+        method: 'post',
+    })
+}
+
+//注册公司数量(会员人数)
+export function companyNum() {
+    return request({
+        url: '/mobile/companyInfoApi/companyNum',
+        method: 'post',
+    })
+}

+ 11 - 0
src/apis/cost.js

@@ -0,0 +1,11 @@
+//会费公示
+import request from '@/utils/request'
+
+//我的账单列表
+export function dueList() {
+    return request({
+        url: '/mobile//billInfoApi/dueList',
+       // data: Qs.stringify(),
+        method: 'post',
+    })
+}

+ 68 - 0
src/apis/feedback.js

@@ -0,0 +1,68 @@
+//诉求反映
+import request from '@/utils/request'
+import Qs from 'qs';
+
+//公开列表
+export function whisperingWallInfoList(data) {
+	return request({
+		url: '/mobile/whisperingWallApi/whisperingWallInfoList',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//公开详情
+export function whisperingWallInfoDetail(id) {
+	return request({
+		url: '/mobile/whisperingWallApi/whisperingWallInfoDetail',
+		data: Qs.stringify({
+			id: id
+		}),
+		method: 'post',
+	})
+}
+
+//提问
+export function questions(data) {
+	return request({
+		url: '/mobile/whisperingWallApi/questions',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//回答
+export function answers(data) {
+	return request({
+		url: '/mobile/whisperingWallApi/answers',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//诉求及回复列表
+export function whisperingWallInfoListByCompany(data) {
+	return request({
+		url: '/mobile/whisperingWallApi/whisperingWallInfoListByCompany',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//提交诉求
+export function submitWhisperingWallInfo(data) {
+	return request({
+		url: '/mobile/whisperingWallApi/submitWhisperingWallInfo',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//回复诉求
+export function replyWhisperingWallInfo(data) {
+	return request({
+		url: '/mobile/whisperingWallApi/replyWhisperingWallInfo',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}

+ 12 - 0
src/apis/form.js

@@ -0,0 +1,12 @@
+import request from '@/utils/request'
+import Qs from 'qs';
+
+
+//双百强
+export function submitInformation(params) {
+	return request({
+		url: '/mobile/doubleHundred/submitInformation',
+		data: Qs.stringify(params),
+		method: 'post',
+	})
+}

+ 49 - 0
src/apis/job.js

@@ -0,0 +1,49 @@
+//企业招聘
+import request from '@/utils/request'
+import Qs from 'qs';
+
+
+//公开列表
+export function recruitInfoList(data) {
+	return request({
+		url: '/mobile/recruitInfoApi/recruitInfoList',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//公开详情
+export function recruitInfoDetail(id) {
+	return request({
+		url: '/mobile/recruitInfoApi/recruitInfoDetail',
+		data: Qs.stringify({id:id}),
+		method: 'post',
+	})
+}
+
+//发布列表
+export function recruitInfoListForOwn(data) {
+	return request({
+		url: '/mobile/recruitInfoApi/recruitInfoListForOwn',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//发布提交
+export function submitRecruitInfo(data) {
+	return request({
+		url: '/mobile/recruitInfoApi/submitRecruitInfo',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//删除
+export function deleteRecruitInfo(id) {
+	return request({
+		url: '/mobile/recruitInfoApi/deleteRecruitInfo',
+		data: Qs.stringify({id:id}),
+		method: 'post',
+	})
+}

+ 52 - 0
src/apis/market.js

@@ -0,0 +1,52 @@
+//企业互助
+
+import request from '@/utils/request'
+import Qs from 'qs';
+//互助详情
+export function cooperationInfoDetail(id) {
+	return request({
+		url: '/mobile/cooperationInfoApi/cooperationInfoDetail',
+		data: Qs.stringify({
+			id: id
+		}),
+		method: 'post',
+	})
+}
+
+//互助列表
+export function cooperationInfoList(params) {
+	return request({
+		url: '/mobile/cooperationInfoApi/cooperationInfoList',
+		data: Qs.stringify(params),
+		method: 'post',
+	})
+}
+
+//我发布的列表
+export function cooperationInfoListForOwn(data) {
+	return request({
+		url: '/mobile/cooperationInfoApi/cooperationInfoListForOwn',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//信息提交
+export function submitCooperationInfo(data) {
+	return request({
+		url: '/mobile/cooperationInfoApi/submitCooperationInfo',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//我发布的删除
+export function deleteCooperationInfo(id) {
+	return request({
+		url: '/mobile/cooperationInfoApi/deleteCooperationInfo',
+		data: Qs.stringify({
+			id: id
+		}),
+		method: 'post',
+	})
+}

+ 30 - 0
src/apis/message.js

@@ -0,0 +1,30 @@
+import request from '@/utils/request'
+import Qs from 'qs';
+
+//消息列表
+export function getPageList(data) {
+	return request({
+		url: '/mobile/messageInfoApi/pageList',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//消息详情
+export function getInfo(id) {
+	return request({
+		url: 'mobile/messageInfoApi/detail',
+		data: Qs.stringify({
+			id: id
+		}),
+		method: 'post',
+	})
+}
+
+//一键已读
+export function doRead() {
+	return request({
+		url: '/mobile/messageInfoApi/onekeyReadStatus',
+		method: 'post',
+	})
+}

+ 39 - 0
src/apis/news.js

@@ -0,0 +1,39 @@
+import request from '@/utils/request'
+import Qs from 'qs';
+
+//新闻中心一级目录
+export function firstLevelDirectory() {
+	return request({
+		url: '/mobile/newsInfoApi/firstLevelDirectory',
+		method: 'post',
+	})
+}
+
+//新闻中心 详情
+export function newsDetail(params) {
+	return request({
+		url: '/mobile/newsInfoApi/newsDetail',
+		data: Qs.stringify(params),
+		method: 'post',
+	})
+}
+
+//新闻中心列表
+export function newsList(params) {
+	return request({
+		url: '/mobile/newsInfoApi/newsList',
+		data: Qs.stringify(params),
+		method: 'post',
+	})
+}
+
+//新闻中心二级目录
+export function secondLevelDirectory(parentId) {
+	return request({
+		url: '/mobile/newsInfoApi/secondLevelDirectory',
+		data: Qs.stringify({
+			parentId: parentId
+		}),
+		method: 'post',
+	})
+}

+ 19 - 0
src/apis/payment.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+import Qs from 'qs';
+
+//微信支付
+export function wxJsapiPay(params) {
+	return request({
+		url: '/wxPay/wxJsapiPay',
+		params: params,
+		method: 'get',
+	})
+}
+//支付宝支付(url)
+export function tradePrecreatePay(params) {
+	return request({
+		url: '/aliPay/tradePrecreatePay',
+		params: params,
+		method: 'get',
+	})
+}

+ 81 - 0
src/apis/user.js

@@ -0,0 +1,81 @@
+import request from '@/utils/request'
+import Qs from 'qs';
+
+//帐号密码登录
+export function loginUserName(data) {
+	return request({
+		url: '/mobile/personInfoApi/loginByPassword',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//退出登录
+export function loginOut() {
+	return request({
+		url: '/mobile/personInfoApi/logOut',
+		data: {},
+		method: 'post',
+	})
+}
+
+//获取短信验证码
+export function getVerifyCode(data) {
+	return request({
+		url: '/mobile/personInfoApi/getVerifyCode',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//验证短信验证码
+export function validateCode(data) {
+	return request({
+		url: '/mobile/personInfoApi/validateCode',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//重置密码
+export function resetPassword(data) {
+	return request({
+		url: '/mobile/personInfoApi/resetPassword',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//获取基础信息
+export function getBasicInformation() {
+	return request({
+		url: '/mobile/personInfoApi/basicInformation',
+		method: 'post',
+	})
+}
+
+//提交基础信息
+export function submitBasicInformation(data) {
+	return request({
+		url: '/mobile/personInfoApi/updateBasicInformation',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
+//关于企联
+export function getAboutInfo() {
+	return request({
+		url: '/mobile/enterpriseInfoApi/enterpriseInfo',
+		method: 'post',
+	})
+}
+
+//变更手机号
+export function changePhone(data) {
+	return request({
+		url: '/mobile/personInfoApi/validateCodeAndUpdatePhone',
+		data: Qs.stringify(data),
+		method: 'post',
+	})
+}

+ 33 - 0
src/apis/weixin.js

@@ -0,0 +1,33 @@
+import request from '@/utils/request'
+import Qs from 'qs';
+
+//根据code换取openid
+export function getDataByCode(code) {
+	return request({
+		url: '/wechat/findUserInfo/' + code,
+		params: {},
+		method: 'get',
+	})
+}
+
+//获取用户信息
+export function getDataByOpenId(openId) {
+	return request({
+		url: '/mobile/personInfoApi/findByOpenId',
+		data: Qs.stringify({
+			openId: openId
+		}),
+		method: 'post',
+	})
+}
+
+//获得配置
+export function getConfig() {
+	return request({
+		url: '/wechat/getConfig',
+		params: {
+			url: window.location.href.split('#')[0]
+		},
+		method: 'get',
+	})
+}

Diff do ficheiro suprimidas por serem muito extensas
+ 3 - 0
src/assets/css/iconfont.css


+ 4692 - 0
src/assets/css/mui.min.css

@@ -0,0 +1,4692 @@
+/*!
+ * =====================================================
+ * Mui v3.7.2 (http://dev.dcloud.net.cn/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 {
+	font-size: 75%;
+	line-height: 0;
+	position: relative;
+	vertical-align: baseline
+}
+
+sup {
+	top: -.5em
+}
+
+sub {
+	bottom: -.25em
+}
+
+img {
+	border: 0
+}
+
+svg:not(:root) {
+	overflow: hidden
+}
+
+figure {
+	margin: 1em 40px
+}
+
+hr {
+	box-sizing: content-box;
+	height: 0
+}
+
+pre {
+	overflow: auto
+}
+
+code,
+kbd,
+pre,
+samp {
+	font-family: monospace, monospace;
+	font-size: 1em
+}
+
+button,
+input,
+optgroup,
+select,
+textarea {
+	font: inherit;
+	margin: 0;
+	color: inherit
+}
+
+button {
+	overflow: visible
+}
+
+button,
+select {
+	text-transform: none
+}
+
+button,
+html input[type=button],
+input[type=reset],
+input[type=submit] {
+	cursor: pointer;
+	-webkit-appearance: button
+}
+
+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 {
+	margin: 0 2px;
+	padding: .35em .625em .75em;
+	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 {
+	font-family: 'Helvetica Neue', Helvetica, sans-serif;
+	font-size: 14px;
+	line-height: 21px;
+	color: #101010;
+	background-color: #efeff4;
+	-webkit-overflow-scrolling: touch
+}
+
+a {
+	text-decoration: none;
+	color: #222222
+}
+
+a:active {
+	color: #0062cc
+}
+
+.mui-content {
+	background-color: #efeff4;
+	-webkit-overflow-scrolling: touch
+}
+
+.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 15px
+}
+
+.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;
+	white-space: nowrap;
+	text-overflow: ellipsis
+}
+
+.mui-ellipsis-2 {
+	display: -webkit-box;
+	overflow: hidden;
+	white-space: normal!important;
+	text-overflow: ellipsis;
+	word-wrap: break-word;
+	-webkit-line-clamp: 2;
+	-webkit-box-orient: vertical
+}
+.mui-ellipsis-3 {
+	display: -webkit-box;
+	overflow: hidden;
+	white-space: normal!important;
+	text-overflow: ellipsis;
+	word-wrap: break-word;
+	-webkit-line-clamp: 3;
+	-webkit-box-orient: vertical
+}
+.mui-ellipsis-4 {
+	display: -webkit-box;
+	overflow: hidden;
+	white-space: normal!important;
+	text-overflow: ellipsis;
+	word-wrap: break-word;
+	-webkit-line-clamp: 4;
+	-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 {
+	margin-left: -5px;
+	padding-left: 0;
+	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 {
+	margin: 88px 35px;
+	padding: 10px;
+	border-radius: 6px;
+	background-color: #bbb
+}
+
+.mui-subtitle {
+	font-size: 15px
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+	line-height: 1.5;
+	margin-top: 5px;
+	margin-bottom: 5px;
+	font-weight: initial;
+}
+
+.mui-h1,
+h1 {
+	font-size: 36px
+}
+
+.mui-h2,
+h2 {
+	font-size: 30px
+}
+
+.mui-h3,
+h3 {
+	font-size: 24px
+}
+
+.mui-h4,
+h4 {
+	font-size: 18px;
+	line-height: 2;
+}
+
+.mui-h5,
+h5 {
+	font-size: 14px;
+	font-weight: 400;
+}
+
+.mui-h6,
+h6 {
+	font-size: 12px;
+	font-weight: 400;
+}
+
+p {
+	font-size: 14px;
+	margin-top: 0;
+	margin-bottom: 10px;
+	color: #888
+}
+
+.mui-row:after,
+.mui-row:before {
+	display: table;
+	content: ' '
+}
+
+.mui-row:after {
+	clear: both
+}
+
+.mui-col-sm-1,
+.mui-col-sm-10,
+.mui-col-sm-11,
+.mui-col-sm-12,
+.mui-col-sm-2,
+.mui-col-sm-3,
+.mui-col-sm-4,
+.mui-col-sm-5,
+.mui-col-sm-6,
+.mui-col-sm-7,
+.mui-col-sm-8,
+.mui-col-sm-9,
+.mui-col-xs-1,
+.mui-col-xs-10,
+.mui-col-xs-11,
+.mui-col-xs-12,
+.mui-col-xs-2,
+.mui-col-xs-3,
+.mui-col-xs-4,
+.mui-col-xs-5,
+.mui-col-xs-6,
+.mui-col-xs-7,
+.mui-col-xs-8,
+.mui-col-xs-9 {
+	position: relative;
+	min-height: 1px
+}
+
+.mui-row>[class*=mui-col-] {
+	float: left
+}
+
+.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;
+	z-index: 2;
+	top: 0;
+	bottom: 0;
+	left: 0;
+	overflow: hidden;
+	width: 100%
+}
+
+.mui-scroll {
+	position: absolute;
+	z-index: 1;
+	width: 100%
+}
+
+.mui-scrollbar {
+	position: absolute;
+	z-index: 9998;
+	overflow: hidden;
+	-webkit-transition: 500ms;
+	transition: 500ms;
+	transform: translateZ(0px);
+	pointer-events: none;
+	opacity: 0
+}
+
+.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;
+	-webkit-transition: .01s cubic-bezier(.1, .57, .1, 1);
+	transition: .01s cubic-bezier(.1, .57, .1, 1);
+	transform: translate(0px, 0) translateZ(0px);
+	border: 1px solid rgba(255, 255, 255, .80196);
+	border-radius: 2px;
+	background: rgba(0, 0, 0, .39804)
+}
+
+.mui-plus-pullrefresh .mui-fullscreen .mui-scroll-wrapper .mui-scroll-wrapper,
+.mui-plus-pullrefresh .mui-fullscreen .mui-slider-group .mui-scroll-wrapper {
+	position: absolute;
+	top: 0;
+	bottom: 0;
+	left: 0;
+	overflow: hidden;
+	width: 100%
+}
+
+.mui-plus-pullrefresh .mui-fullscreen .mui-scroll-wrapper .mui-scroll,
+.mui-plus-pullrefresh .mui-fullscreen .mui-slider-group .mui-scroll {
+	position: absolute;
+	width: 100%
+}
+
+.mui-plus-pullrefresh .mui-scroll-wrapper,
+.mui-plus-pullrefresh .mui-slider-group {
+	position: static;
+	top: auto;
+	bottom: auto;
+	left: auto;
+	overflow: auto;
+	width: auto
+}
+
+.mui-plus-pullrefresh .mui-slider-group {
+	overflow: visible
+}
+
+.mui-plus-pullrefresh .mui-scroll {
+	position: static;
+	width: auto
+}
+
+.mui-off-canvas-wrap .mui-bar {
+	position: absolute!important;
+	-webkit-transform: translate3d(0, 0, 0);
+	transform: translate3d(0, 0, 0);
+	-webkit-box-shadow: none;
+	box-shadow: none
+}
+
+.mui-off-canvas-wrap {
+	position: relative;
+	z-index: 1;
+	overflow: hidden;
+	width: 100%;
+	height: 100%
+}
+
+.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 350ms;
+	transition: transform 350ms cubic-bezier(.165, .84, .44, 1)
+}
+
+.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 {
+	overflow: hidden;
+	height: 100%
+}
+
+.mui-off-canvas-wrap.mui-active .mui-off-canvas-backdrop {
+	position: absolute;
+	z-index: 998;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	display: block;
+	transition: background 350ms cubic-bezier(.165, .84, .44, 1);
+	background: rgba(0, 0, 0, .4);
+	box-shadow: -4px 0 4px rgba(0, 0, 0, .5), 4px 0 4px rgba(0, 0, 0, .5);
+	-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;
+	z-index: -1;
+	top: 0;
+	bottom: 0;
+	visibility: hidden;
+	box-sizing: content-box;
+	width: 70%;
+	min-height: 100%;
+	background: #333;
+	-webkit-overflow-scrolling: touch
+}
+
+.mui-off-canvas-left.mui-transitioning,
+.mui-off-canvas-right.mui-transitioning {
+	-webkit-transition: -webkit-transform 350ms cubic-bezier(.165, .84, .44, 1);
+	transition: transform 350ms cubic-bezier(.165, .84, .44, 1)
+}
+
+.mui-off-canvas-left {
+	left: 0
+}
+
+.mui-off-canvas-right {
+	right: 0
+}
+
+.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable {
+	background-color: #333
+}
+
+.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable>.mui-off-canvas-left,
+.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable>.mui-off-canvas-right {
+	width: 80%;
+	-webkit-transform: scale(.8);
+	transform: scale(.8);
+	opacity: .1
+}
+
+.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable>.mui-off-canvas-left.mui-transitioning,
+.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable>.mui-off-canvas-right.mui-transitioning {
+	-webkit-transition: -webkit-transform 350ms cubic-bezier(.165, .84, .44, 1), opacity 350ms cubic-bezier(.165, .84, .44, 1);
+	transition: transform 350ms cubic-bezier(.165, .84, .44, 1), opacity 350ms cubic-bezier(.165, .84, .44, 1)
+}
+
+.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable>.mui-off-canvas-left {
+	-webkit-transform-origin: -100%;
+	transform-origin: -100%
+}
+
+.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable>.mui-off-canvas-right {
+	-webkit-transform-origin: 200%;
+	transform-origin: 200%
+}
+
+.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable.mui-active>.mui-inner-wrap {
+	-webkit-transform: scale(.8);
+	transform: scale(.8)
+}
+
+.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable.mui-active>.mui-off-canvas-left,
+.mui-off-canvas-wrap:not(.mui-slide-in).mui-scalable.mui-active>.mui-off-canvas-right {
+	-webkit-transform: scale(1);
+	transform: scale(1);
+	opacity: 1
+}
+
+.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] {
+	font-size: 14px;
+	font-weight: 400;
+	line-height: 1;
+	position: relative;
+	display: inline-block;
+	margin-bottom: 0;
+	padding: 6px 12px;
+	cursor: pointer;
+	-webkit-transition: all;
+	transition: all;
+	-webkit-transition-timing-function: linear;
+	transition-timing-function: linear;
+	-webkit-transition-duration: .2s;
+	transition-duration: .2s;
+	text-align: center;
+	vertical-align: top;
+	white-space: nowrap;
+	color: #333;
+	border: 1px solid #ccc;
+	border-radius: 3px;
+	border-top-left-radius: 3px;
+	border-top-right-radius: 3px;
+	border-bottom-right-radius: 3px;
+	border-bottom-left-radius: 3px;
+	background-color: #fff;
+	background-clip: padding-box
+}
+
+.mui-btn.mui-active:enabled,
+.mui-btn:enabled:active,
+button.mui-active:enabled,
+button:enabled:active,
+input[type=button].mui-active:enabled,
+input[type=button]:enabled:active,
+input[type=reset].mui-active:enabled,
+input[type=reset]:enabled:active,
+input[type=submit].mui-active:enabled,
+input[type=submit]:enabled: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;
+	border: 1px solid #1B3891;
+	background-color: #1B3891
+}
+
+.mui-btn-blue.mui-active:enabled,
+.mui-btn-blue:enabled:active,
+.mui-btn-primary.mui-active:enabled,
+.mui-btn-primary:enabled:active,
+input[type=submit].mui-active:enabled,
+input[type=submit]:enabled:active {
+	color: #fff;
+	border: 1px solid #0062cc;
+	background-color: #0062cc
+}
+
+.mui-btn-green,
+.mui-btn-positive,
+.mui-btn-success {
+	color: #fff;
+	border: 1px solid #4cd964;
+	background-color: #4cd964
+}
+
+.mui-btn-green.mui-active:enabled,
+.mui-btn-green:enabled:active,
+.mui-btn-positive.mui-active:enabled,
+.mui-btn-positive:enabled:active,
+.mui-btn-success.mui-active:enabled,
+.mui-btn-success:enabled:active {
+	color: #fff;
+	border: 1px solid #2ac845;
+	background-color: #2ac845
+}
+
+.mui-btn-warning,
+.mui-btn-yellow {
+	color: #fff;
+	border: 1px solid #f0ad4e;
+	background-color: #f0ad4e
+}
+
+.mui-btn-warning.mui-active:enabled,
+.mui-btn-warning:enabled:active,
+.mui-btn-yellow.mui-active:enabled,
+.mui-btn-yellow:enabled:active {
+	color: #fff;
+	border: 1px solid #ec971f;
+	background-color: #ec971f
+}
+
+.mui-btn-danger,
+.mui-btn-negative,
+.mui-btn-red {
+	color: #fff;
+	border: 1px solid #FF3A3A;
+	background-color: #FF3A3A
+}
+
+.mui-btn-danger.mui-active:enabled,
+.mui-btn-danger:enabled:active,
+.mui-btn-negative.mui-active:enabled,
+.mui-btn-negative:enabled:active,
+.mui-btn-red.mui-active:enabled,
+.mui-btn-red:enabled:active {
+	color: #fff;
+	border: 1px solid #cf2d28;
+	background-color: #cf2d28
+}
+
+.mui-btn-purple,
+.mui-btn-royal {
+	color: #fff;
+	border: 1px solid #8a6de9;
+	background-color: #8a6de9
+}
+
+.mui-btn-purple.mui-active:enabled,
+.mui-btn-purple:enabled:active,
+.mui-btn-royal.mui-active:enabled,
+.mui-btn-royal:enabled:active {
+	color: #fff;
+	border: 1px solid #6641e2;
+	background-color: #6641e2
+}
+
+.mui-btn-grey {
+	color: #fff;
+	border: 1px solid #999;
+	background-color: #999
+}
+
+.mui-btn-grey.mui-active:enabled,
+.mui-btn-grey:enabled:active {
+	color: #fff;
+	border: 1px solid #acacb4;
+	background-color: #acacb4
+}
+
+.mui-btn-outlined {
+	background-color: transparent
+}
+
+.mui-btn-outlined.mui-btn-blue,
+.mui-btn-outlined.mui-btn-primary {
+	color: #1B3891
+}
+
+.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:enabled:active,
+.mui-btn-outlined.mui-btn-danger:enabled:active,
+.mui-btn-outlined.mui-btn-green:enabled:active,
+.mui-btn-outlined.mui-btn-negative:enabled:active,
+.mui-btn-outlined.mui-btn-positive:enabled:active,
+.mui-btn-outlined.mui-btn-primary:enabled:active,
+.mui-btn-outlined.mui-btn-purple:enabled:active,
+.mui-btn-outlined.mui-btn-red:enabled:active,
+.mui-btn-outlined.mui-btn-royal:enabled:active,
+.mui-btn-outlined.mui-btn-success:enabled:active,
+.mui-btn-outlined.mui-btn-warning:enabled:active,
+.mui-btn-outlined.mui-btn-yellow:enabled:active {
+	color: #fff
+}
+
+.mui-btn-link {
+	padding-top: 6px;
+	padding-bottom: 6px;
+	color: #007aff;
+	border: 0;
+	background-color: transparent
+}
+
+.mui-btn-link.mui-active:enabled,
+.mui-btn-link:enabled:active {
+	color: #0062cc;
+	background-color: transparent
+}
+
+.mui-btn-block {
+	font-size: 16px;
+	display: block;
+	width: 100%;
+	margin-bottom: 10px;
+	padding: 13px 0
+}
+
+.mui-btn .mui-badge {
+	font-size: 14px;
+	margin: -2px -4px -2px 4px;
+	background-color: rgba(0, 0, 0, .15)
+}
+
+.mui-btn .mui-badge-inverted,
+.mui-btn:enabled:active .mui-badge-inverted {
+	background-color: transparent
+}
+
+.mui-btn-negative:enabled:active .mui-badge-inverted,
+.mui-btn-positive:enabled:active .mui-badge-inverted,
+.mui-btn-primary:enabled: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 {
+	font-size: 24px;
+	line-height: 24px;
+	width: 24px;
+	height: 24px
+}
+
+.mui-btn .mui-spinner {
+	width: 14px;
+	height: 14px;
+	vertical-align: text-bottom
+}
+
+.mui-btn-block .mui-spinner {
+	width: 22px;
+	height: 22px
+}
+
+.mui-bar {
+	position: fixed;
+	z-index: 10;
+	right: 0;
+	left: 0;
+	height: 44px;
+	padding-right: 10px;
+	padding-left: 10px;
+	border-bottom: 0;
+	background-color: #ffffff;
+	-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
+	box-shadow: 0 0 5px rgba(0, 0, 0, .3);
+	-webkit-backface-visibility: hidden;
+	backface-visibility: hidden
+}
+
+.mui-bar .mui-title {
+	right: 40px;
+	left: 40px;
+	display: inline-block;
+	overflow: hidden;
+	width: auto;
+	margin: 0;
+	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-transparent {
+	top: 0;
+	background-color: rgba(255, 255, 255, 0);
+	-webkit-box-shadow: none;
+	box-shadow: none
+}
+
+.mui-bar-nav {
+	top: 0;
+	-webkit-box-shadow: 0 1px 6px #ccc;
+	box-shadow: 0 1px 6px #ccc
+}
+
+.mui-bar-nav~.mui-content .mui-anchor {
+	display: block;
+	visibility: hidden;
+	height: 45px;
+	margin-top: -45px
+}
+
+.mui-bar-nav.mui-bar .mui-icon {
+	margin-right: -10px;
+	margin-left: -10px;
+	padding-right: 10px;
+	padding-left: 10px
+}
+
+.mui-title {
+	font-size: 17px;
+	font-weight: 500;
+	line-height: 44px;
+	position: absolute;
+	display: block;
+	width: 100%;
+	margin: 0 -10px;
+	padding: 0;
+	text-align: center;
+	white-space: nowrap;
+	color: #000
+}
+
+.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;
+	overflow: hidden;
+	width: 1%;
+	height: 50px;
+	text-align: center;
+	vertical-align: middle;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	color: #929292
+}
+
+.mui-bar-tab .mui-tab-item.mui-active {
+	color: #1B3891
+}
+
+.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 {
+	font-size: 11px;
+	display: block;
+	overflow: hidden;
+	text-overflow: ellipsis
+}
+
+.mui-bar-tab .mui-tab-item .mui-icon:active {
+	background: 0 0
+}
+
+.mui-focusin>.mui-bar-header-secondary,
+.mui-focusin>.mui-bar-nav {
+	position: absolute
+}
+
+.mui-focusin>.mui-bar~.mui-content {
+	padding-bottom: 0
+}
+
+.mui-bar .mui-btn {
+	font-weight: 400;
+	position: relative;
+	z-index: 20;
+	top: 9px;
+	margin-top: 0;
+	padding: 6px 12px;
+	border-radius: 15px;
+	font-size:12px
+}
+
+.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 {
+	font-size: 16px;
+	line-height: 44px;
+	top: 0;
+	padding: 0;
+	color: #007aff;
+	border: 0
+}
+
+.mui-bar .mui-btn-link.mui-active,
+.mui-bar .mui-btn-link:active {
+	color: #0062cc
+}
+
+.mui-bar .mui-btn-block {
+	font-size: 16px;
+	top: 6px;
+	margin-bottom: 0;
+	padding: 5px 0
+}
+
+.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 {
+	font-size: 24px;
+	position: relative;
+	z-index: 20;
+	padding-top: 10px;
+	padding-bottom: 10px
+}
+
+.mui-bar .mui-icon:active {
+	opacity: .3
+}
+
+.mui-bar .mui-btn .mui-icon {
+	top: 1px;
+	margin: 0;
+	padding: 0
+}
+
+.mui-bar .mui-title .mui-icon {
+	margin: 0;
+	padding: 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;
+	border-radius: 15px;
+}
+
+.mui-bar .mui-input-row .mui-btn {
+	padding: 12px 10px
+}
+
+.mui-bar .mui-search:before {
+	margin-top: -10px
+}
+
+.mui-bar .mui-input-row .mui-input-clear~.mui-icon-clear,
+.mui-bar .mui-input-row .mui-input-speech~.mui-icon-speech {
+	top: 0;
+	right: 12px
+}
+
+.mui-bar.mui-bar-header-secondary .mui-input-row .mui-input-clear~.mui-icon-clear,
+.mui-bar.mui-bar-header-secondary .mui-input-row .mui-input-speech~.mui-icon-speech {
+	top: 0;
+	right: 0
+}
+
+.mui-bar .mui-segmented-control {
+	top: 7px;
+	width: auto;
+	margin: 0 auto
+}
+
+.mui-bar.mui-bar-header-secondary .mui-segmented-control {
+	top: 0
+}
+
+.mui-badge {
+	font-size: 12px;
+	line-height: 1;
+	display: inline-block;
+	padding: 3px 6px;
+	color: #333;
+	border-radius: 100px;
+	background-color: rgba(0, 0, 0, .15)
+}
+
+.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 {
+	font-size: 10px;
+	line-height: 1.4;
+	position: absolute;
+	top: -2px;
+	left: 100%;
+	margin-left: -10px;
+	padding: 1px 5px;
+	color: #fff;
+	background: red
+}
+
+.mui-card {
+	font-size: 14px;
+	position: relative;
+	overflow: hidden;
+	margin: 10px;
+	border-radius: 2px;
+	background-color: #fff;
+	background-clip: padding-box;
+	box-shadow: 0 1px 2px rgba(0, 0, 0, .3)
+}
+
+.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-cell:first-child,
+.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-cell:last-child,
+.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-card-footer,
+.mui-card-header {
+	position: relative;
+	display: -webkit-box;
+	display: -webkit-flex;
+	display: flex;
+	min-height: 44px;
+	padding: 10px 15px;
+	-webkit-box-pack: justify;
+	-webkit-justify-content: space-between;
+	justify-content: space-between;
+	-webkit-box-align: center;
+	-webkit-align-items: center;
+	align-items: center
+}
+
+.mui-card-footer .mui-card-link,
+.mui-card-header .mui-card-link {
+	line-height: 44px;
+	position: relative;
+	display: -webkit-box;
+	display: -webkit-flex;
+	display: flex;
+	height: 44px;
+	margin-top: -10px;
+	margin-bottom: -10px;
+	-webkit-transition-duration: .3s;
+	transition-duration: .3s;
+	text-decoration: none;
+	-webkit-box-pack: start;
+	-webkit-justify-content: flex-start;
+	justify-content: flex-start;
+	-webkit-box-align: center;
+	-webkit-align-items: center;
+	align-items: center
+}
+
+.mui-card-footer:before,
+.mui-card-header:after {
+	position: absolute;
+	top: 0;
+	right: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #efeff4
+}
+
+.mui-card-header {
+	font-size: 17px;
+	border-radius: 2px 2px 0 0
+}
+
+.mui-card-header:after {
+	top: auto;
+	bottom: 0
+}
+
+.mui-card-header>img:first-child {
+	font-size: 0;
+	line-height: 0;
+	float: left;
+	width: 34px;
+	height: 34px
+}
+
+.mui-card-footer {
+	color: #6d6d72;
+	border-radius: 0 0 2px 2px
+}
+
+.mui-card-content {
+	font-size: 14px;
+	position: relative
+}
+
+.mui-card-content-inner {
+	position: relative;
+	padding: 15px
+}
+
+.mui-card-media {
+	vertical-align: bottom;
+	color: #fff;
+	background-position: center;
+	background-size: cover
+}
+
+.mui-card-header.mui-card-media {
+	display: block;
+	padding: 10px
+}
+
+.mui-card-header.mui-card-media .mui-media-body {
+	font-size: 14px;
+	font-weight: 500;
+	line-height: 17px;
+	margin-bottom: 0;
+	margin-left: 44px;
+	color: #333
+}
+
+.mui-card-header.mui-card-media .mui-media-body p {
+	font-size: 13px;
+	margin-bottom: 0
+}
+
+.mui-table-view {
+	position: relative;
+	margin-top: 0;
+	margin-bottom: 0;
+	padding-left: 0;
+	list-style: none;
+	background-color: #fff
+}
+
+.mui-table-view:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #efeff4
+}
+
+.mui-table-view:before {
+	position: absolute;
+	right: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #efeff4;
+	top: -1px
+}
+
+.mui-table-view-icon .mui-table-view-cell .mui-navigate-right .mui-icon {
+	font-size: 20px;
+	margin-top: -1px;
+	margin-right: 5px;
+	margin-left: -5px
+}
+
+.mui-table-view-icon .mui-table-view-cell:after {
+	left: 40px
+}
+
+.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-radio .mui-table-view-cell {
+	padding-right: 65px
+}
+
+.mui-table-view-radio .mui-table-view-cell>a:not(.mui-btn) {
+	margin-right: -65px
+}
+
+.mui-table-view-radio .mui-table-view-cell .mui-navigate-right:after {
+	font-size: 30px;
+	font-weight: 600;
+	right: 9px;
+	content: '';
+	color: #007aff
+}
+
+.mui-table-view-radio .mui-table-view-cell.mui-selected .mui-navigate-right:after {
+	content: '\e472'
+}
+
+.mui-table-view-inverted {
+	color: #fff;
+	background: #333
+}
+
+.mui-table-view-inverted:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #222
+}
+
+.mui-table-view-inverted:before {
+	position: absolute;
+	top: 0;
+	right: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #222
+}
+
+.mui-table-view-inverted .mui-table-view-cell:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 15px;
+	height: 1px;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #222
+}
+
+.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;
+	overflow: hidden;
+	padding: 11px 15px;
+	-webkit-touch-callout: none
+}
+
+.mui-table-view-cell:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 15px;
+	height: 1px;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #efeff4
+}
+
+.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;
+	overflow: hidden;
+	margin: -11px -15px;
+	padding: inherit;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	color: inherit
+}
+
+.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: -webkit-transform 300ms ease;
+	transition: transform 300ms ease
+}
+
+.mui-table-view-cell.mui-active>.mui-slider-handle {
+	background-color: #eee
+}
+
+.mui-table-view-cell>.mui-slider-handle {
+	position: relative;
+	background-color: #fff
+}
+
+.mui-table-view-cell>.mui-slider-handle .mui-navigate-right:after,
+.mui-table-view-cell>.mui-slider-handle.mui-navigate-right:after {
+	right: 0
+}
+
+.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: -webkit-transform 0ms ease;
+	transition: transform 0ms ease
+}
+
+.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;
+	z-index: -1;
+	top: 0;
+	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-transition: -webkit-transform 0ms ease;
+	transition: transform 0ms ease;
+	-webkit-transform: translateX(100%);
+	transform: translateX(100%)
+}
+
+.mui-table-view-cell>.mui-slider-left {
+	left: 0;
+	-webkit-transition: -webkit-transform 0ms ease;
+	transition: transform 0ms ease;
+	-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 {
+	font-weight: 500;
+	position: relative;
+	margin-top: -1px;
+	margin-left: 0;
+	padding-top: 6px;
+	padding-bottom: 6px;
+	padding-left: 15px;
+	color: #999;
+	background-color: #fafafa
+}
+
+.mui-table-view-divider:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #c8c7cc
+}
+
+.mui-table-view-divider:before {
+	position: absolute;
+	top: 0;
+	right: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #c8c7cc
+}
+
+.mui-table-view .mui-media,
+.mui-table-view .mui-media-body {
+	overflow: hidden
+}
+
+.mui-table-view .mui-media-large .mui-media-object {
+	line-height: 80px;
+	max-width: 80px;
+	height: 80px
+}
+
+.mui-table-view .mui-media .mui-subtitle {
+	color: #000
+}
+
+.mui-table-view .mui-media-object {
+	line-height: 42px;
+	max-width: 42px;
+	height: 42px;
+	display: flex;
+	border-radius: 5px;
+	overflow: hidden;
+}
+.mui-table-view .mui-media-object img{
+	object-fit: cover;
+}
+.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 {
+	line-height: 29px;
+	max-width: 29px;
+	height: 29px;
+	margin: -4px 0
+}
+
+.mui-table-view .mui-table-view-cell.mui-media-icon .mui-media-object img {
+	line-height: 29px;
+	max-width: 29px;
+	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: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #c8c7cc
+}
+
+.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: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #c8c7cc
+}
+
+.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-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-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: 0
+}
+
+.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell:last-child:after,
+.mui-table-view-cell.mui-collapse .mui-table-view:after,
+.mui-table-view-cell.mui-collapse .mui-table-view:before {
+	height: 0
+}
+
+.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 {
+	margin-top: -1px
+}
+
+.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-active .mui-table-view-cell>a:not(.mui-btn).mui-active {
+	margin-left: -31px;
+	padding-left: 47px
+}
+
+.mui-table-view-cell.mui-collapse .mui-collapse-content {
+	position: relative;
+	display: none;
+	overflow: hidden;
+	margin: 11px -15px -11px;
+	padding: 8px 15px;
+	-webkit-transition: height .35s ease;
+	-o-transition: height .35s ease;
+	transition: height .35s ease;
+	background: #fff
+}
+
+.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: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #c8c7cc
+}
+
+.mui-table-view.mui-grid-view {
+	font-size: 0;
+	display: block;
+	width: 100%;
+	padding: 0 10px 10px 0;
+	white-space: normal
+}
+
+.mui-table-view.mui-grid-view .mui-table-view-cell {
+	font-size: 17px;
+	display: inline-block;
+	margin-right: -4px;
+	padding: 10px 0 0 14px;
+	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 {
+	font-size: 14px;
+	line-height: 15px;
+	display: block;
+	width: 100%;
+	height: 15px;
+	margin-top: 8px;
+	text-overflow: ellipsis;
+	color: #101010
+}
+
+.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 {
+	margin: 0;
+	padding: 0;
+	border:0
+}
+
+.mui-grid-view.mui-grid-9:after,
+.mui-grid-view.mui-grid-9:before {
+	display: table;
+	content: ' '
+}
+
+.mui-grid-view.mui-grid-9:after {
+	clear: both;
+	position: static
+}
+
+.mui-grid-view.mui-grid-9 .mui-table-view-cell {
+	margin: 0;
+	padding: 11px 15px;
+	vertical-align: top;
+}
+
+.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) {
+	margin: 0;
+	padding: 10px 0
+}
+
+.mui-grid-view.mui-grid-9:before {
+	height: 0
+}
+
+.mui-grid-view.mui-grid-9 .mui-media {
+	color: #797979
+}
+
+.mui-grid-view.mui-grid-9 .mui-media .mui-icon {
+	font-size: 2.4em;
+	position: relative
+}
+
+.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;
+	z-index: 0;
+	top: 0;
+	bottom: 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: 14px;
+	-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 {
+	line-height: 21px;
+	width: 100%;
+	height: 40px;
+	margin-bottom: 15px;
+	padding: 10px 15px;
+	-webkit-user-select: text;
+	border: 1px solid rgba(0, 0, 0, .2);
+	border-radius: 3px;
+	outline: 0;
+	background-color: #fff;
+	-webkit-appearance: none
+}
+
+input[type=number]::-webkit-inner-spin-button,
+input[type=number]::-webkit-outer-spin-button {
+	margin: 0;
+	-webkit-appearance: none
+}
+
+input[type=search] {
+	font-size: 16px;
+	-webkit-box-sizing: border-box;
+	box-sizing: border-box;
+	height: 34px;
+	text-align: center;
+	border: 0;
+	border-radius: 6px;
+	background-color: rgba(255, 255, 255, .3)
+}
+
+input[type=search]:focus {
+	text-align: left
+}
+
+textarea {
+	height: auto;
+	resize: none
+}
+
+select {
+	font-size: 14px;
+	height: auto;
+	margin-top: 1px;
+	border: 0!important;
+	background-color: #fff
+}
+
+select:focus {
+	-webkit-user-modify: read-only
+}
+
+.mui-input-group {
+	position: relative;
+	padding: 0;
+	border: 0;
+	background-color: #fff
+}
+
+.mui-input-group:after {
+	position: absolute;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #efeff4
+}
+
+.mui-input-group:before {
+	position: absolute;
+	top: 0;
+	right: 0;
+	left: 0;
+	height: 1px;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #efeff4
+}
+
+.mui-input-group input,
+.mui-input-group textarea {
+	margin-bottom: 0;
+	border: 0;
+	border-radius: 0;
+	background-color: transparent;
+	-webkit-box-shadow: none;
+	box-shadow: none
+}
+
+.mui-input-group input[type=search] {
+	background: 0 0
+}
+
+.mui-input-group input:last-child {
+	background-image: none
+}
+
+.mui-input-row {
+	clear: left;
+	overflow: hidden
+}
+
+.mui-input-row select {
+	font-size: 17px;
+	height: 37px;
+	padding: 0
+}
+
+.mui-input-row .mui-btn+input,
+.mui-input-row label+input,
+.mui-input-row:last-child {
+	background: 0 0
+}
+
+.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: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #efeff4
+}
+
+.mui-input-row label {
+	font-family: 'Helvetica Neue', Helvetica, sans-serif;
+	line-height: 1.1;
+	float: left;
+	width: 35%;
+	padding: 11px 15px
+}
+
+.mui-input-row label~input,
+.mui-input-row label~select,
+.mui-input-row label~textarea {
+	float: right;
+	width: 65%;
+	margin-bottom: 0;
+	padding-left: 0;
+	border: 0
+}
+
+.mui-input-row .mui-btn {
+	line-height: 1;
+	float: right;
+	width: 15%;
+	padding: 10px 15px
+}
+
+.mui-input-row .mui-btn~input,
+.mui-input-row .mui-btn~select,
+.mui-input-row .mui-btn~textarea {
+	float: left;
+	width: 85%;
+	margin-bottom: 0;
+	padding-left: 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 {
+	overflow: visible;
+	padding-right: 20px
+}
+
+.mui-input-row .mui-inline {
+	padding: 8px 0
+}
+
+.mui-input-row .mui-input-clear~.mui-icon-clear,
+.mui-input-row .mui-input-password~.mui-icon-eye,
+.mui-input-row .mui-input-speech~.mui-icon-speech {
+	font-size: 20px;
+	position: absolute;
+	z-index: 1;
+	top: 10px;
+	right: 0;
+	width: 38px;
+	height: 38px;
+	text-align: center;
+	color: #999
+}
+
+.mui-input-row .mui-input-clear~.mui-icon-clear.mui-active,
+.mui-input-row .mui-input-password~.mui-icon-eye.mui-active,
+.mui-input-row .mui-input-speech~.mui-icon-speech.mui-active {
+	color: #007aff
+}
+
+.mui-input-row .mui-input-speech~.mui-icon-speech {
+	font-size: 24px;
+	top: 8px
+}
+
+.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%;
+	padding-right: 58px
+}
+
+.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-right: 15px;
+	padding-left: 58px
+}
+
+.mui-checkbox input[type=checkbox],
+.mui-radio input[type=radio] {
+	position: absolute;
+	top: 4px;
+	right: 20px;
+	display: inline-block;
+	width: 26px;
+	height: 26px;
+	border: 0;
+	outline: 0!important;
+	background-color: transparent;
+	-webkit-appearance: none
+}
+
+.mui-checkbox input[type=checkbox][disabled]:before,
+.mui-radio input[type=radio][disabled]:before {
+	opacity: .3
+}
+
+.mui-checkbox input[type=checkbox]:before,
+.mui-radio input[type=radio]:before {
+	font-family: Muiicons;
+	font-size: 26px;
+	font-weight: 400;
+	line-height: 1;
+	text-decoration: none;
+	color: #aaa;
+	border-radius: 0;
+	background: 0 0;
+	-webkit-font-smoothing: antialiased;
+}
+
+.mui-checkbox input[type=checkbox]:checked:before,
+.mui-radio input[type=radio]:checked:before {
+	color: #1B3891
+}
+
+.mui-checkbox label.mui-disabled,
+.mui-checkbox.mui-disabled label,
+.mui-radio label.mui-disabled,
+.mui-radio.mui-disabled label {
+	opacity: .4
+}
+
+.mui-radio input[type=radio]:before {
+	content: '\e411'
+}
+
+.mui-radio input[type=radio]:checked:before {
+	content: '\e442'
+}
+
+.mui-checkbox input[type=checkbox]:before {
+	content: '\e411'
+}
+
+.mui-checkbox input[type=checkbox]:checked:before {
+	content: '\e442'
+}
+
+.mui-select {
+	position: relative
+}
+
+.mui-select:before {
+	font-family: Muiicons;
+	position: absolute;
+	top: 8px;
+	right: 21px;
+	content: '\e581';
+	color: rgba(170, 170, 170, .6)
+}
+
+.mui-input-row .mui-switch {
+	float: right;
+	margin-top: 5px;
+	margin-right: 15px
+}
+
+.mui-input-range input[type=range] {
+	position: relative;
+	width: 100%;
+	height: 2px;
+	margin: 17px 0;
+	padding: 0;
+	cursor: pointer;
+	border: 0;
+	border-radius: 3px;
+	outline: 0;
+	background-color: #999;
+	-webkit-appearance: none!important
+}
+
+.mui-input-range input[type=range]::-webkit-slider-thumb {
+	width: 28px;
+	height: 28px;
+	border-color: #0062cc;
+	border-radius: 50%;
+	background-color: #007aff;
+	background-clip: padding-box;
+	-webkit-appearance: none!important
+}
+
+.mui-input-range label~input[type=range] {
+	width: 65%
+}
+
+.mui-input-range .mui-tooltip {
+	font-size: 36px;
+	line-height: 64px;
+	position: absolute;
+	z-index: 1;
+	top: -70px;
+	width: 64px;
+	height: 64px;
+	text-align: center;
+	opacity: .8;
+	color: #333;
+	border: 1px solid #ddd;
+	border-radius: 6px;
+	background-color: #fff;
+	text-shadow: 0 1px 0 #f3f3f3
+}
+
+.mui-search {
+	position: relative
+}
+
+.mui-search input[type=search] {
+	padding-left: 40px
+}
+
+.mui-search .mui-placeholder {
+	font-size: 14px;
+	line-height: 34px;
+	position: absolute;
+	z-index: 1;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 15px;
+	display: inline-block;
+	height: 34px;
+	color: #999;
+	border: 0;
+	border-radius: 6px;
+	background: 0 0;
+}
+
+.mui-search .mui-placeholder .mui-icon {
+	font-size: 20px;
+	color: #333;
+	margin-right: 5px;
+}
+
+.mui-search:before {
+	font-family: Muiicons;
+	font-size: 20px;
+	font-weight: 400;
+	position: absolute;
+	top: 50%;
+	right: 50%;
+	display: none;
+	margin-top: -18px;
+	margin-right: 31px;
+	content: '\e466'
+}
+
+.mui-search.mui-active:before {
+	font-size: 20px;
+	right: auto;
+	left: 15px;
+	display: block;
+	margin-right: 0
+}
+
+.mui-search.mui-active input[type=search] {
+	text-align: left
+}
+
+.mui-search.mui-active .mui-placeholder {
+	display: none
+}
+
+.mui-segmented-control {
+	font-size: 15px;
+	font-weight: 400;
+	position: relative;
+	display: table;
+	overflow: hidden;
+	width: 100%;
+	table-layout: fixed;
+	border: 1px solid #007aff;
+	border-radius: 3px;
+	background-color: transparent;
+	-webkit-touch-callout: none
+}
+
+.mui-segmented-control.mui-segmented-control-vertical {
+	border-collapse: collapse;
+	border-width: 0;
+	border-radius: 0
+}
+
+.mui-segmented-control.mui-segmented-control-vertical .mui-control-item {
+	display: block;
+	border-bottom: 1px solid #c8c7cc;
+	border-left-width: 0
+}
+
+.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 {
+	line-height: 38px;
+	display: table-cell;
+	overflow: hidden;
+	width: 1%;
+	-webkit-transition: background-color .1s linear;
+	transition: background-color .1s linear;
+	text-align: center;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	color: #007aff;
+	border-color: #007aff;
+	border-left: 1px solid #007aff
+}
+
+.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-segmented-control-vertical .mui-control-item,
+.mui-segmented-control.mui-segmented-control-inverted.mui-segmented-control-vertical .mui-control-item.mui-active {
+	border-bottom: 1px solid #c8c7cc
+}
+
+.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;
+	border-bottom: 2px solid #007aff;
+	background: 0 0
+}
+
+.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;
+	border-bottom: 2px solid #4cd964;
+	background: 0 0
+}
+
+.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;
+	border-bottom: 2px solid #dd524d;
+	background: 0 0
+}
+
+.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;
+	-webkit-transition: opacity .3s;
+	transition: opacity .3s;
+	-webkit-transition-property: opacity;
+	transition-property: opacity;
+	-webkit-transform: none;
+	transform: none;
+	opacity: 0;
+	border-radius: 7px;
+	background-color: #f7f7f7;
+	-webkit-box-shadow: 0 0 15px rgba(0, 0, 0, .1);
+	box-shadow: 0 0 15px rgba(0, 0, 0, .1)
+}
+
+.mui-popover .mui-popover-arrow {
+	position: absolute;
+	z-index: 1000;
+	top: -25px;
+	left: 0;
+	overflow: hidden;
+	width: 26px;
+	height: 26px
+}
+
+.mui-popover .mui-popover-arrow:after {
+	position: absolute;
+	top: 19px;
+	left: 0;
+	width: 26px;
+	height: 26px;
+	content: ' ';
+	-webkit-transform: rotate(45deg);
+	transform: rotate(45deg);
+	border-radius: 3px;
+	background: #f7f7f7
+}
+
+.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%;
+	-webkit-transition: -webkit-transform .3s, opacity .3s;
+	transition: transform .3s, opacity .3s;
+	-webkit-transform: translate3d(0, 100%, 0);
+	transform: translate3d(0, 100%, 0);
+	border-radius: 0;
+	background: 0 0;
+	-webkit-box-shadow: none;
+	box-shadow: none
+}
+
+.mui-popover.mui-popover-action .mui-popover-arrow {
+	display: none
+}
+
+.mui-popover.mui-popover-action.mui-popover-bottom {
+	position: fixed
+}
+
+.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;
+	text-align: center;
+	color: #007aff;
+	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: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	background-color: #c8c7cc
+}
+
+.mui-popover.mui-popover-action .mui-table-view small {
+	font-weight: 400;
+	line-height: 1.3;
+	display: block
+}
+
+.mui-popover.mui-active {
+	display: block;
+	opacity: 1
+}
+
+.mui-popover .mui-bar~.mui-table-view {
+	padding-top: 44px
+}
+
+.mui-backdrop {
+	position: fixed;
+	z-index: 998;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	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 {
+	-webkit-transition: all .4s ease;
+	transition: all .4s ease;
+	opacity: 1
+}
+
+.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;
+	border-radius: 7px;
+	background-clip: padding-box
+}
+
+.mui-popover .mui-scroll .mui-table-view {
+	max-height: none
+}
+
+.mui-popover .mui-table-view {
+	overflow: auto;
+	max-height: 300px;
+	margin-bottom: 0;
+	border-radius: 7px;
+	background-color: #f7f7f7;
+	background-image: none;
+	-webkit-overflow-scrolling: touch
+}
+
+.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-popup-backdrop {
+	position: fixed;
+	z-index: 998;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	-webkit-transition-duration: 400ms;
+	transition-duration: 400ms;
+	opacity: 0;
+	background: rgba(0, 0, 0, .4)
+}
+
+.mui-popup-backdrop.mui-active {
+	opacity: 1
+}
+
+.mui-popup {
+	position: fixed;
+	z-index: 10000;
+	top: 50%;
+	left: 50%;
+	display: none;
+	overflow: hidden;
+	width: 270px;
+	-webkit-transition-property: -webkit-transform, opacity;
+	transition-property: transform, opacity;
+	-webkit-transform: translate3d(-50%, -50%, 0) scale(1.185);
+	transform: translate3d(-50%, -50%, 0) scale(1.185);
+	text-align: center;
+	opacity: 0;
+	color: #000;
+	border-radius: 13px
+}
+
+.mui-popup.mui-popup-in {
+	display: block;
+	-webkit-transition-duration: 400ms;
+	transition-duration: 400ms;
+	-webkit-transform: translate3d(-50%, -50%, 0) scale(1);
+	transform: translate3d(-50%, -50%, 0) scale(1);
+	opacity: 1
+}
+
+.mui-popup.mui-popup-out {
+	-webkit-transition-duration: 400ms;
+	transition-duration: 400ms;
+	-webkit-transform: translate3d(-50%, -50%, 0) scale(1);
+	transform: translate3d(-50%, -50%, 0) scale(1);
+	opacity: 0
+}
+
+.mui-popup-inner {
+	position: relative;
+	padding: 15px;
+	border-radius: 13px 13px 0 0;
+	background: rgba(255, 255, 255, .95)
+}
+
+.mui-popup-inner:after {
+	position: absolute;
+	z-index: 15;
+	top: auto;
+	right: auto;
+	bottom: 0;
+	left: 0;
+	display: block;
+	width: 100%;
+	height: 1px;
+	content: '';
+	-webkit-transform: scaleY(.5);
+	transform: scaleY(.5);
+	-webkit-transform-origin: 50% 100%;
+	transform-origin: 50% 100%;
+	background-color: rgba(0, 0, 0, .2)
+}
+
+.mui-popup-title {
+	font-size: 18px;
+	font-weight: 500;
+	text-align: center
+}
+
+.mui-popup-title+.mui-popup-text {
+	font-family: inherit;
+	font-size: 14px;
+	margin: 5px 0 0
+}
+
+.mui-popup-buttons {
+	position: relative;
+	display: -webkit-box;
+	display: -webkit-flex;
+	display: flex;
+	height: 44px;
+	-webkit-box-pack: center;
+	-webkit-justify-content: center;
+	justify-content: center
+}
+
+.mui-popup-button {
+	font-size: 17px;
+	line-height: 44px;
+	position: relative;
+	display: block;
+	overflow: hidden;
+	box-sizing: border-box;
+	width: 100%;
+	height: 44px;
+	padding: 0 5px;
+	cursor: pointer;
+	text-align: center;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	color: #007aff;
+	background: rgba(255, 255, 255, .95);
+	-webkit-box-flex: 1
+}
+
+.mui-popup-button:after {
+	position: absolute;
+	z-index: 15;
+	top: 0;
+	right: 0;
+	bottom: auto;
+	left: auto;
+	display: block;
+	width: 1px;
+	height: 100%;
+	content: '';
+	-webkit-transform: scaleX(.5);
+	transform: scaleX(.5);
+	-webkit-transform-origin: 100% 50%;
+	transform-origin: 100% 50%;
+	background-color: rgba(0, 0, 0, .2)
+}
+
+.mui-popup-button:first-child {
+	border-radius: 0 0 0 13px
+}
+
+.mui-popup-button:first-child:last-child {
+	border-radius: 0 0 13px 13px
+}
+
+.mui-popup-button:last-child {
+	border-radius: 0 0 13px
+}
+
+.mui-popup-button:last-child:after {
+	display: none
+}
+
+.mui-popup-button.mui-popup-button-bold {
+	font-weight: 600
+}
+
+.mui-popup-input input {
+	font-size: 14px;
+	width: 100%;
+	height: 26px;
+	margin: 15px 0 0;
+	padding: 0 5px;
+	border: 1px solid rgba(0, 0, 0, .3);
+	border-radius: 0;
+	background: #fff
+}
+
+.mui-plus.mui-android .mui-popup-backdrop {
+	-webkit-transition-duration: 1ms;
+	transition-duration: 1ms
+}
+
+.mui-plus.mui-android .mui-popup {
+	-webkit-transition-duration: 1ms;
+	transition-duration: 1ms;
+	-webkit-transform: translate3d(-50%, -50%, 0) scale(1);
+	transform: translate3d(-50%, -50%, 0) scale(1)
+}
+
+.mui-progressbar {
+	position: relative;
+	display: block;
+	overflow: hidden;
+	width: 100%;
+	height: 2px;
+	-webkit-transform-origin: center top;
+	transform-origin: center top;
+	vertical-align: middle;
+	border-radius: 2px;
+	background: #b6b6b6;
+	-webkit-transform-style: preserve-3d;
+	transform-style: preserve-3d
+}
+
+.mui-progressbar span {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	-webkit-transition: 150ms;
+	transition: 150ms;
+	-webkit-transform: translate3d(-100%, 0, 0);
+	transform: translate3d(-100%, 0, 0);
+	background: #007aff
+}
+
+.mui-progressbar.mui-progressbar-infinite:before {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	content: '';
+	-webkit-transform: translate3d(0, 0, 0);
+	transform: translate3d(0, 0, 0);
+	-webkit-transform-origin: left center;
+	transform-origin: left center;
+	-webkit-animation: mui-progressbar-infinite 1s linear infinite;
+	animation: mui-progressbar-infinite 1s linear infinite;
+	background: #007aff
+}
+
+body>.mui-progressbar {
+	position: absolute;
+	z-index: 10000;
+	top: 44px;
+	left: 0;
+	border-radius: 0
+}
+
+.mui-progressbar-in {
+	-webkit-animation: mui-progressbar-in 300ms forwards;
+	animation: mui-progressbar-in 300ms forwards
+}
+
+.mui-progressbar-out {
+	-webkit-animation: mui-progressbar-out 300ms forwards;
+	animation: mui-progressbar-out 300ms forwards
+}
+
+@-webkit-keyframes mui-progressbar-in {
+	from {
+		-webkit-transform: scaleY(0);
+		opacity: 0
+	}
+	to {
+		-webkit-transform: scaleY(1);
+		opacity: 1
+	}
+}
+
+@keyframes mui-progressbar-in {
+	from {
+		transform: scaleY(0);
+		opacity: 0
+	}
+	to {
+		transform: scaleY(1);
+		opacity: 1
+	}
+}
+
+@-webkit-keyframes mui-progressbar-out {
+	from {
+		-webkit-transform: scaleY(1);
+		opacity: 1
+	}
+	to {
+		-webkit-transform: scaleY(0);
+		opacity: 0
+	}
+}
+
+@keyframes mui-progressbar-out {
+	from {
+		transform: scaleY(1);
+		opacity: 1
+	}
+	to {
+		transform: scaleY(0);
+		opacity: 0
+	}
+}
+
+@-webkit-keyframes mui-progressbar-infinite {
+	0% {
+		-webkit-transform: translate3d(-50%, 0, 0) scaleX(.5)
+	}
+	100% {
+		-webkit-transform: translate3d(100%, 0, 0) scaleX(.5)
+	}
+}
+
+@keyframes mui-progressbar-infinite {
+	0% {
+		transform: translate3d(-50%, 0, 0) scaleX(.5)
+	}
+	100% {
+		transform: translate3d(100%, 0, 0) scaleX(.5)
+	}
+}
+
+.mui-pagination {
+	display: inline-block;
+	margin: 0 auto;
+	padding-left: 0;
+	border-radius: 6px
+}
+
+.mui-pagination>li {
+	display: inline
+}
+
+.mui-pagination>li>a,
+.mui-pagination>li>span {
+	line-height: 1.428571429;
+	position: relative;
+	float: left;
+	margin-left: -1px;
+	padding: 6px 12px;
+	text-decoration: none;
+	color: #007aff;
+	border: 1px solid #ddd;
+	background-color: #fff
+}
+
+.mui-pagination>li:first-child>a,
+.mui-pagination>li:first-child>span {
+	margin-left: 0;
+	border-top-left-radius: 6px;
+	border-bottom-left-radius: 6px;
+	background-clip: padding-box
+}
+
+.mui-pagination>li:last-child>a,
+.mui-pagination>li:last-child>span {
+	border-top-right-radius: 6px;
+	border-bottom-right-radius: 6px;
+	background-clip: padding-box
+}
+
+.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;
+	cursor: default;
+	color: #fff;
+	border-color: #007aff;
+	background-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 {
+	opacity: .6;
+	color: #777;
+	border: 1px solid #ddd;
+	background-color: #fff
+}
+
+.mui-pagination-lg>li>a,
+.mui-pagination-lg>li>span {
+	font-size: 18px;
+	padding: 10px 16px
+}
+
+.mui-pagination-sm>li>a,
+.mui-pagination-sm>li>span {
+	font-size: 12px;
+	padding: 5px 10px
+}
+
+.mui-pager {
+	padding-left: 0;
+	list-style: none;
+	text-align: center
+}
+
+.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;
+	border: 1px solid #ddd;
+	border-radius: 6px;
+	background-color: #fff;
+	background-clip: padding-box
+}
+
+.mui-pager li.mui-active>a,
+.mui-pager li.mui-active>span,
+.mui-pager li:active>a,
+.mui-pager li:active>span {
+	cursor: default;
+	text-decoration: none;
+	color: #fff;
+	border-color: #007aff;
+	background-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 {
+	opacity: .6;
+	color: #777;
+	border: 1px solid #ddd;
+	background-color: #fff
+}
+
+.mui-modal {
+	position: fixed;
+	z-index: 999;
+	top: 0;
+	overflow: hidden;
+	width: 100%;
+	min-height: 100%;
+	-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);
+	opacity: 0;
+	background-color: #fff
+}
+
+.mui-modal.mui-active {
+	height: 100%;
+	-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);
+	opacity: 1
+}
+
+.mui-android .mui-modal .mui-bar {
+	position: static
+}
+
+.mui-android .mui-modal .mui-bar-nav~.mui-content {
+	padding-top: 0
+}
+
+.mui-slider {
+	position: relative;
+	z-index: 1;
+	overflow: hidden;
+	width: 100%
+}
+
+.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 {
+	font-size: 0;
+	position: relative;
+	-webkit-transition: all 0s linear;
+	transition: all 0s linear;
+	white-space: nowrap
+}
+
+.mui-slider .mui-slider-group .mui-slider-item {
+	font-size: 14px;
+	position: relative;
+	display: inline-block;
+	width: 100%;
+	height: 100%;
+	vertical-align: top;
+	white-space: normal
+}
+
+.mui-slider .mui-slider-group .mui-slider-item>a:not(.mui-control-item) {
+	line-height: 0;
+	position: relative;
+	display: block
+}
+
+.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 {
+	line-height: 30px;
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	width: 100%;
+	height: 30px;
+	margin: 0;
+	text-align: left;
+	text-indent: 12px;
+	opacity: .8;
+	background-color: #000
+}
+
+.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;
+	border-radius: 50%;
+	background: #aaa;
+	-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 {
+	font-size: 20px;
+	line-height: 30px;
+	width: 40px;
+	height: 30px;
+	margin: 3px;
+	text-align: center;
+	border: 1px solid #ddd
+}
+
+.mui-slider-indicator .mui-number {
+	line-height: 32px;
+	display: inline-block;
+	width: 58px
+}
+
+.mui-slider-indicator .mui-number span {
+	color: #ff5053
+}
+
+.mui-slider-progress-bar {
+	z-index: 1;
+	height: 2px;
+	-webkit-transform: translateZ(0);
+	transform: translateZ(0)
+}
+
+.mui-switch {
+	position: relative;
+	display: block;
+	width: 74px;
+	height: 30px;
+	-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;
+	border: 2px solid #ddd;
+	border-radius: 20px;
+	background-color: #fff;
+	background-clip: padding-box
+}
+
+.mui-switch.mui-disabled {
+	opacity: .3
+}
+
+.mui-switch .mui-switch-handle {
+	position: absolute;
+	z-index: 1;
+	top: -1px;
+	left: -1px;
+	width: 28px;
+	height: 28px;
+	-webkit-transition: .2s ease-in-out;
+	transition: .2s ease-in-out;
+	-webkit-transition-property: -webkit-transform, width, left;
+	transition-property: transform, width, left;
+	border-radius: 16px;
+	background-color: #fff;
+	background-clip: padding-box;
+	-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, .4);
+	box-shadow: 0 2px 5px rgba(0, 0, 0, .4)
+}
+
+.mui-switch:before {
+	font-size: 13px;
+	position: absolute;
+	top: 3px;
+	right: 11px;
+	content: 'Off';
+	text-transform: uppercase;
+	color: #999
+}
+
+.mui-switch.mui-dragging {
+	border-color: #f7f7f7;
+	background-color: #f7f7f7
+}
+
+.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 {
+	border-color: #4cd964;
+	background-color: #4cd964
+}
+
+.mui-switch.mui-active .mui-switch-handle {
+	-webkit-transform: translate(43px, 0);
+	transform: translate(43px, 0)
+}
+
+.mui-switch.mui-active:before {
+	right: auto;
+	left: 15px;
+	content: 'On';
+	color: #fff
+}
+
+.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: translate(16px, 0);
+	transform: translate(16px, 0)
+}
+
+.mui-switch-blue.mui-active {
+	border: 2px solid #007aff;
+	background-color: #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-right:after,
+.mui-push-left:after,
+.mui-push-right:after {
+	font-family: Muiicons;
+	font-size: inherit;
+	line-height: 1;
+	position: absolute;
+	top: 50%;
+	display: inline-block;
+	-webkit-transform: translateY(-50%);
+	transform: translateY(-50%);
+	text-decoration: none;
+	color: #bbb;
+	-webkit-font-smoothing: antialiased
+}
+
+.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;
+	visibility: hidden;
+	overflow: hidden;
+	width: 100%;
+	height: 50px
+}
+
+.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-bar-nav~.mui-bar-header-secondary~.mui-content .mui-pull-top-pocket {
+	top: 88px
+}
+
+.mui-pull-bottom-pocket {
+	position: relative;
+	bottom: 0;
+	height: 40px
+}
+
+.mui-pull-bottom-pocket .mui-pull-loading {
+	visibility: hidden
+}
+
+.mui-pull-bottom-pocket .mui-pull-loading.mui-in {
+	display: inline-block
+}
+
+.mui-pull {
+	font-weight: 700;
+	position: absolute;
+	right: 0;
+	bottom: 10px;
+	left: 0;
+	text-align: center;
+	color: #777
+}
+
+.mui-pull-loading {
+	margin-right: 10px;
+	-webkit-transition: -webkit-transform .4s;
+	transition: transform .4s;
+	-webkit-transition-duration: 400ms;
+	transition-duration: 400ms;
+	vertical-align: middle
+}
+
+.mui-pull-loading.mui-reverse {
+	-webkit-transform: rotate(180deg) translateZ(0);
+	transform: rotate(180deg) translateZ(0)
+}
+
+.mui-pull-caption {
+	font-size: 15px;
+	line-height: 24px;
+	position: relative;
+	display: inline-block;
+	overflow: visible;
+	margin-top: 0;
+	vertical-align: middle
+}
+
+.mui-pull-caption span {
+	display: none
+}
+
+.mui-pull-caption span.mui-in {
+	display: inline
+}
+
+.mui-toast-container {
+	line-height: 17px;
+	position: fixed;
+	z-index: 9999;
+	bottom: 50px;
+	left: 50%;
+	-webkit-transition: opacity .3s;
+	transition: opacity .3s;
+	-webkit-transform: translate(-50%, 0);
+	transform: translate(-50%, 0);
+	opacity: 0
+}
+
+.mui-toast-container.mui-active {
+	opacity: .9
+}
+
+.mui-toast-message {
+	font-size: 14px;
+	padding: 10px 25px;
+	text-align: center;
+	color: #fff;
+	border-radius: 6px;
+	background-color: #323232
+}
+
+.mui-numbox {
+	position: relative;
+	display: inline-block;
+	overflow: hidden;
+	width: 120px;
+	height: 35px;
+	padding: 0 40px;
+	vertical-align: top;
+	vertical-align: middle;
+	border: solid 1px #bbb;
+	border-radius: 3px;
+	background-color: #efeff4
+}
+
+.mui-numbox [class*=btn-numbox],
+.mui-numbox [class*=numbox-btn] {
+	font-size: 18px;
+	font-weight: 400;
+	line-height: 100%;
+	position: absolute;
+	top: 0;
+	overflow: hidden;
+	width: 40px;
+	height: 100%;
+	padding: 0;
+	color: #555;
+	border: none;
+	border-radius: 0;
+	background-color: #f9f9f9
+}
+
+.mui-numbox [class*=btn-numbox]:active,
+.mui-numbox [class*=numbox-btn]:active {
+	background-color: #ccc
+}
+
+.mui-numbox [class*=btn-numbox][disabled],
+.mui-numbox [class*=numbox-btn][disabled] {
+	color: silver
+}
+
+.mui-numbox .mui-btn-numbox-plus,
+.mui-numbox .mui-numbox-btn-plus {
+	right: 0;
+	border-top-right-radius: 3px;
+	border-bottom-right-radius: 3px
+}
+
+.mui-numbox .mui-btn-numbox-minus,
+.mui-numbox .mui-numbox-btn-minus {
+	left: 0;
+	border-top-left-radius: 3px;
+	border-bottom-left-radius: 3px
+}
+
+.mui-numbox .mui-input-numbox,
+.mui-numbox .mui-numbox-input {
+	display: inline-block;
+	overflow: hidden;
+	width: 100%!important;
+	height: 100%;
+	margin: 0;
+	padding: 0 3px!important;
+	text-align: center;
+	text-overflow: ellipsis;
+	word-break: normal;
+	border: none!important;
+	border-right: solid 1px #ccc!important;
+	border-left: solid 1px #ccc!important;
+	border-radius: 0!important
+}
+
+.mui-input-row .mui-numbox {
+	float: right;
+	margin: 2px 8px
+}
+
+@font-face {
+	font-family: Muiicons;
+	font-weight: 400;
+	font-style: normal;
+	src: url(../fonts/mui.ttf) format('truetype')
+}
+
+.mui-icon {
+	font-family: Muiicons;
+	font-size: 24px;
+	font-weight: 400;
+	font-style: normal;
+	line-height: 1;
+	display: inline-block;
+	text-decoration: none;
+	-webkit-font-smoothing: antialiased
+}
+
+.mui-icon.mui-active {
+	color: #007aff
+}
+
+.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-qq:before {
+	content: '\e264'
+}
+
+.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-eye:before {
+	content: '\e568'
+}
+
+.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
+}
+
+.mui-fullscreen.mui-slider .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 .mui-slider-item>a {
+	top: 50%;
+	-webkit-transform: translateY(-50%);
+	transform: translateY(-50%)
+}
+
+.mui-fullscreen .mui-off-canvas-wrap .mui-slider-item>a {
+	top: auto;
+	-webkit-transform: none;
+	transform: none
+}
+
+.mui-bar-nav~.mui-content .mui-slider.mui-fullscreen {
+	top: 44px
+}
+
+.mui-bar-tab~.mui-content .mui-slider.mui-fullscreen .mui-segmented-control~.mui-slider-group {
+	bottom: 50px
+}
+
+.mui-android.mui-android-4-0 input:focus,
+.mui-android.mui-android-4-0 textarea:focus {
+	-webkit-user-modify: inherit
+}
+
+.mui-android.mui-android-4-2 input,
+.mui-android.mui-android-4-2 textarea,
+.mui-android.mui-android-4-3 input,
+.mui-android.mui-android-4-3 textarea {
+	-webkit-user-select: text
+}
+
+.mui-ios .mui-table-view-cell {
+	-webkit-transform-style: preserve-3d;
+	transform-style: preserve-3d
+}
+
+.mui-plus-visible,
+.mui-wechat-visible {
+	display: none!important
+}
+
+.mui-plus-hidden,
+.mui-wechat-hidden {
+	display: block!important
+}
+
+.mui-tab-item.mui-plus-hidden,
+.mui-tab-item.mui-wechat-hidden {
+	display: table-cell!important
+}
+
+.mui-plus .mui-plus-visible,
+.mui-wechat .mui-wechat-visible {
+	display: block!important
+}
+
+.mui-plus .mui-tab-item.mui-plus-visible,
+.mui-wechat .mui-tab-item.mui-wechat-visible {
+	display: table-cell!important
+}
+
+.mui-plus .mui-plus-hidden,
+.mui-wechat .mui-wechat-hidden {
+	display: none!important
+}
+
+.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-nav {
+	height: 64px;
+	padding-top: 20px
+}
+
+.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-nav~.mui-content {
+	padding-top: 64px
+}
+
+.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-header-secondary,
+.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-nav~.mui-content .mui-pull-top-pocket {
+	top: 64px
+}
+
+.mui-plus.mui-statusbar.mui-statusbar-offset .mui-bar-header-secondary~.mui-content {
+	padding-top: 94px
+}
+
+.mui-iframe-wrapper {
+	position: absolute;
+	right: 0;
+	left: 0;
+	-webkit-overflow-scrolling: touch
+}
+
+.mui-iframe-wrapper iframe {
+	width: 100%;
+	height: 100%;
+	border: 0
+}

Diff do ficheiro suprimidas por serem muito extensas
+ 6 - 0
src/assets/css/mui.picker.min.css


+ 1308 - 0
src/assets/css/qylhh.css

@@ -0,0 +1,1308 @@
+img {
+	width: 100%;
+	display: flex;
+}
+
+.blue
+/*蓝*/
+
+,
+.iconwen {
+	color: #1B3891
+}
+
+.yellow
+/*黄*/
+
+{
+	color: #FF8800
+}
+
+.red
+/*红*/
+
+,
+.iconda {
+	color: #FF3A3A
+}
+
+.lakeblue
+/*湖蓝*/
+
+{
+	color: #3385FF
+}
+
+.green
+/*绿色*/
+
+{
+	color: #389E0D
+}
+
+.flex {
+	display: flex;
+}
+
+.flexsp {
+	display: flex;
+	justify-content: space-between;
+}
+
+.flexct {
+	display: flex;
+	justify-content: center;
+}
+
+.flexal {
+	display: flex;
+	align-items: center;
+}
+
+.flexspal {
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+}
+
+.flexwr {
+	display: -webkit-flex;
+	display: flex;
+	-webkit-flex-wrap: wrap;
+	flex-wrap: wrap;
+}
+
+.flexshusp {
+	display: -webkit-flex;
+	display: flex;
+	-webkit-flex-wrap: wrap;
+	flex-wrap: wrap;
+	-webkit-align-content: space-between;
+	align-content: space-between
+}
+
+.iconleft {
+	margin-right: 5px
+}
+
+.noline.mui-table-view::before,
+.noline .mui-table-view-cell::after,
+.noline.mui-table-view::after,
+.noline.mui-input-group::before,
+.noline.mui-input-group::after,
+.von-mine .mui-table-view:before,
+.von-mine .mui-table-view:after,
+.mui-content.content0,
+.noline .mui-card-footer::before,
+.noline .mui-card-header::after {
+	background: 0
+}
+
+.bagfff {
+	background: #ffffff
+}
+
+.margin60,
+.mui-table-view.von-masage {
+	margin-bottom: 64px
+}
+
+.margin10 {
+	margin-bottom: 10px
+}
+
+.text-line span {
+	margin-right: 5px;
+	padding-right: 5px;
+	position: relative;
+	font-size: 12px
+}
+
+.text-line span .iconfont {
+	font-size: 12px
+}
+
+.text-line span:after {
+	width: 1px;
+	height: 10px;
+	background: #DDDDDD;
+	content: "";
+	position: absolute;
+	right: 0;
+	top: 50%;
+	margin-top: -5px;
+}
+
+.text-line span:last-child:after {
+	width: 0
+}
+
+.von-index .mui-grid-view.mui-grid-9 .mui-media .mui-icon {
+	background: #1B3891;
+	width: 44px;
+	height: 44px;
+	border-radius: 50%;
+	font-size: 1.5rem;
+	line-height: 44px;
+	color: #ffffff
+}
+
+.von-index .mui-grid-view.mui-grid-9 {
+	padding: 10px 0
+}
+
+.von-index .mui-grid-view.mui-grid-9 .mui-table-view-cell {
+	padding: 0 10px
+}
+
+.von-index .mui-table-view .mui-media-object {
+	line-height: 42px;
+	max-width: 30%;
+	height: 78px;
+	border-radius: 5px;
+	overflow: hidden;
+}
+
+.von-index .mui-ellipsis-2 {
+	margin-bottom: 15px;
+	height: 42px
+}
+
+.von-index .bagfff .mui-content-padded {
+	padding: 10px 15px;
+	margin: 0
+}
+
+.bar-index .mui-search .mui-placeholder,
+.bar-index .mui-search .mui-placeholder .mui-icon,
+.bar-index .mui-search.mui-active:before,
+.bar-index .mui-search input {
+	color: #ffffff
+}
+
+.mui-bar-transparent.bar-index {
+	background-color: rgba(27, 56, 145, 0);
+}
+
+.mui-bar.mui-bar-nav.bar-bak {
+	background-color: #1B3891;
+}
+
+.mui-bar.bar-bak a,
+.mui-bar.bar-bak .mui-title {
+	color: #ffffff
+}
+
+.von-news {
+	position: relative;
+	padding-top: 87px
+}
+
+.von-news-control {
+	padding: 0 15px;
+	position: fixed;
+	top: 44px;
+	width: 100%;
+	z-index: 998;
+}
+
+.von-news-control a {
+	padding: 11px 0
+}
+
+.von-news-control .mui-active {
+	color: #FF3A3A
+}
+
+.von-news-item-list,
+.von-news-item-bage {
+	border-top: 1px #F4F4F4 solid;
+	position: fixed;
+	top: 87px;
+	z-index: 999;
+	width: 100%
+}
+
+.von-news-item-bage {
+	-webkit-box-shadow: 0 5px 6px #ccc;
+	box-shadow: 0 5px 6px #eee;
+}
+
+.von-news-item-top .flexwr {
+	padding: 5px 38px 5px 10px;
+}
+
+.von-news-item-bage .flexwr {
+	height: 41px;
+	overflow: hidden;
+}
+
+.von-news-item-top a {
+	margin: 0 5px 5px;
+	padding: 5px 10px;
+	background: #F4F4F4;
+	border-radius: 3px;
+	font-size: 12px
+}
+
+.von-news-item-top .mui-active {
+	background: #E4EBFF;
+	color: #1B3891
+}
+
+.von-news-item-top .mui-btn.mui-icon {
+	position: absolute;
+	right: 0;
+	top: 4px;
+	z-index: 999;
+	border: 0;
+}
+
+.von-news-item-list {
+	background: rgba(0, 0, 0, 0.6);
+	height: 100%
+}
+
+.von-news-dat p {
+	color: #101010;
+	text-align: justify;
+}
+
+.von-news-dat p img {
+	margin: 10px 0
+}
+
+.von-news-title {
+	border-bottom: 1px #eee solid
+}
+
+.von-news-title h4 {
+	line-height: 1.5;
+}
+
+.von-news-title .iconfont {
+	font-size: 12px
+}
+
+.von-news-control a .mui-icon {
+	font-size: 14px;
+	color: #999;
+	line-height: 21px;
+}
+
+.von-qymc .von-news-control {
+	-webkit-box-shadow: 0 6px 8px #eee;
+	box-shadow: 0 6px 8px #eee;
+}
+
+.von-qymc .von-news-control a .mui-ellipsis {
+	max-width: 80%;
+	display: block;
+	text-overflow: initial
+}
+
+.von-logo-img {
+	border: #eee 1px solid;
+	padding: 5px
+}
+
+.mui-table-view .mui-media-object.mui-pull-right.von-logo-img {
+	margin: 8px 0 8px 10px
+}
+
+.mui-table-view .mui-media-object.mui-pull-left.von-logo-img {
+	margin: 8px 10px 8px 0
+}
+
+.von-qymc .mui-table-view .mui-media-object.mui-pull-left.von-logo-img,
+.mui-table-view .mui-media-object.mui-pull-left.von-logo-img.margin-q {
+	margin: 0 10px 0 0
+}
+
+.von-qymc .mui-table-view {
+	background: 0
+}
+
+.von-qymc .mui-table-view-cell {
+	margin: 10px 0;
+	background: #ffffff
+}
+
+.von-mcdat .mui-card {
+	margin: 10px 0;
+	box-shadow: initial;
+	border-radius: 5px;
+}
+
+.von-mcdat .von-mcdat-so .mui-card-header {
+	justify-content: initial;
+}
+
+.von-mcdat-so .mui-card-header a {
+	color: #888;
+	margin-right: 20px
+}
+
+.von-mcdat-so .mui-card-header .mui-active {
+	color: #101010;
+}
+
+.von-card-a .mui-card-header a {
+	color: #888;
+	padding-right: 20px
+}
+
+.von-login-logo {
+	padding: 20% 0 5%;
+}
+
+.von-login-logo img {
+	width: 72px;
+	margin: 0 auto
+}
+
+.von-login-logo h4 {
+	font-weight: bold;
+}
+
+.von-login-so {
+	margin-bottom: 20px
+}
+
+.von-login-so a {
+	padding: 8px 0;
+	margin: 0 30px;
+}
+
+.von-login-so .mui-active {
+	position: relative
+}
+
+.von-login-so .mui-active:after {
+	content: "";
+	width: 100%;
+	height: 3px;
+	background: #FF3A3A;
+	position: absolute;
+	bottom: 0;
+	left: 0
+}
+
+.von-login-item {
+	padding: 0 40px 0 25px;
+}
+
+.von-login-item .mui-input-row {
+	position: relative
+}
+
+.von-login-item .mui-input-row label {
+	width: auto;
+	padding: 0 15px;
+	line-height: 50px;
+	font-size: 20px;
+}
+
+.von-login-item .mui-input-row label~input {
+	width: 80%;
+	float: initial;
+	line-height: 50px;
+	height: 50px
+}
+
+.von-login-item .mui-input-group .mui-input-row {
+	height: 50px
+}
+
+.von-login-item .mui-input-row span,
+.von-login-item .mui-input-row .mui-btn {
+	position: absolute;
+	right: 0;
+	top: 8px;
+	border: 0;
+	width: auto;
+	padding: 10px 0;
+}
+
+.von-login-item .mui-input-row .mui-btn {
+	color: #1B3891
+}
+
+.von-login-item .mui-input-row span {
+	color: #888;
+	line-height: 1;
+}
+
+.von-login-cont button {
+	border-radius: 22px;
+	font-weight: bold;
+}
+
+.von-login-btn {
+	padding: 20px 40px
+}
+
+.von-login-btn a {
+	display: block;
+}
+
+.von-mine-conmany {
+	padding: 15px
+}
+
+.von-mine-conmany .mui-h4 {
+	line-height: 1.5;
+}
+
+.von-mine-conmany .mui-media-object {
+	line-height: 58px;
+	max-width: 58px;
+	height: 58px;
+	display: flex;
+	border-radius: 5px;
+	overflow: hidden;
+	margin-right: 10px
+}
+
+.von-mine-qy .mui-input-row label~h5,
+.von-mine-qy .mui-input-row label~input {
+	margin: 0;
+	line-height: 40px;
+	padding-right: 15px;
+	width: 60%;
+	float: left;
+	height: 40px;
+	position: relative
+}
+
+.von-mine-qy .mui-input-row label {
+	width: 40%;
+	padding: 0 15px;
+	line-height: 40px;
+}
+
+.von-mine-qy .mui-input-row span {
+	color: #888;
+	position: absolute;
+	right: 15px;
+	top: 9px;
+}
+
+.von-mine-qy .mui-input-row h5 .mui-radio input {
+	position: initial;
+}
+
+.mui-pull .mui-pull-caption {
+	font-size: 12px;
+	color: #999;
+	font-weight: initial;
+}
+
+.mui-input-group .mui-input-row.input-row-pto,
+.von-mine-qy .mui-input-row label~h5,
+.mui-input-group .mui-input-row.input-row-text {
+	height: auto
+}
+
+.mui-input-group .mui-input-row.input-row-text label~h5 {
+	height: 40px
+}
+
+.von-mine-qy .mui-input-row.input-row-pto h5 {
+	max-width: 120px
+}
+
+.von-mine-qy .mui-input-row.input-row-pto h5 img {
+	max-height: 80px;
+}
+
+.von-mine-qy .mui-input-row.input-row-pto .von-up-logo {
+	width: 80px
+}
+
+.mui-input-group .mui-input-row.input-row-pto h5 {
+	padding: 10px 0;
+	position: relative
+}
+
+.mui-input-group .mui-input-row.input-row-pto h5 .iconfont {
+	position: absolute;
+	top: 50%;
+	left: 50%;
+	font-size: 48px;
+	color: rgba(0, 0, 0, 0.6);
+	margin-left: -24px;
+	margin-top: -24px;
+	line-height: 1;
+}
+
+.mui-input-group .mui-input-row.input-row-pto h5 .iconfont.von-up-text {
+	font-size: 12px;
+	width: 36px;
+	height: 36px;
+	border-radius: 50%;
+	background: rgba(0, 0, 0, 0.6);
+	line-height: 36px;
+	text-align: center;
+	color: #ffffff;
+	margin-left: -18px;
+	margin-top: -18px
+}
+
+.mui-input-group .mui-input-row.input-row-pto h5 .iconfont.iconbianji.von-up-text {
+	font-size: 18px
+}
+
+.input-row-text p {
+	padding: 0 15px
+}
+
+.input-row-text .mui-h5 {
+	color: #101010
+}
+
+.von-edit {
+	position: absolute;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	top: 44px;
+	background: #ffffff;
+}
+
+.von-edit textarea {
+	height: 100%;
+	padding: 15px;
+	display: flex;
+	margin: 0
+}
+
+.von-set li a .mui-pull-right {
+	padding-right: 20px
+}
+
+.von-set button {
+	width: 100%;
+	border: 0;
+	margin-top: 10px;
+	padding: 13px 15px;
+	border-radius: initial;
+}
+
+.mui-table-view-cell.von-set-dat {
+	padding: 0 15px 15px;
+}
+
+.von-set-dat p {
+	text-indent: 2em;
+	color: #101010;
+	text-align: justify;
+}
+
+.mui-bar .mui-icon.bar-text {
+	font-size: 14px;
+	padding: 15px 10px
+}
+
+.newhot {
+	position: relative
+}
+
+.newhot:after {
+	width: 10px;
+	height: 10px;
+	border-radius: 50%;
+	background: #FF3A3A;
+	position: absolute;
+	right: -3px;
+	top: -3px;
+	content: "";
+}
+
+.von-masage .mui-pull-left {
+	margin-right: 10px;
+}
+
+.von-masage .mui-pull-left img {
+	border-radius: 5px;
+}
+
+.von-masage .mui-media-body .flexspal {
+	font-size: 16px;
+	line-height: 2;
+}
+
+.bar-seach.mui-bar .mui-search input {
+	background: #F5F5F5;
+	margin: 8px 0
+}
+
+.mui-bar-nav.bar-seach {
+	box-shadow: initial;
+}
+
+.bar-seach .mui-search .mui-placeholder {
+	height: 44px;
+	line-height: 44px;
+}
+
+.von-seach button {
+	margin-right: 10px;
+	margin-bottom: 10px
+}
+
+.mui-bar.bar-seach .mui-input-row .mui-input-clear~.mui-icon-clear {
+	top: 2px
+}
+
+.von-login-so.von-news-control {
+	-webkit-box-shadow: 0 6px 8px #eee;
+	box-shadow: 0 6px 8px #eee;
+	margin: 0
+}
+
+.von-login-so.von-news-control a {
+	margin: 0;
+	padding: 11px 0;
+	text-align: center;
+}
+
+.von-login-so.von-news-control .mui-active,
+.von-con-blue .von-login-so.von-news-control .mui-active {
+	color: #222222
+}
+
+.von-login-so.von-news-control .mui-active::after {
+	bottom: 6px;
+	width: 28px;
+	left: 50%;
+	margin-left: -14px;
+}
+
+.von-con-blue .von-login-so.von-news-control .mui-active::after {
+	bottom: 0;
+	width: 74px;
+	margin-left: -37px;
+	background: #096DD9
+}
+
+.von-con-blue .von-login-so.von-news-control a {
+	color: #888
+}
+
+.von-seachdat {
+	padding-top: 43px
+}
+
+.von-mcdat .von-news-item .mui-card:first-child,
+.von-mcdat .von-news-item .mui-table-view-cell:first-child {
+	margin-top: 0
+}
+
+.mui-text-center.mui-card-footer {
+	justify-content: center;
+}
+
+.von-seachdat .mui-card-header {
+	padding: 10px 15px 0
+}
+
+.von-login-mi .mui-input-row .mui-btn.mui-btn-primary {
+	border: 1px #1B3891 solid;
+	color: #1B3891
+}
+
+.von-login-mi .mui-input-row .mui-btn {
+	width: 30%;
+	padding: 8px 0;
+	color: #888;
+	border-radius: 5px;
+}
+
+.von-login-mi .mui-input-group input {
+	width: 70%;
+	padding: 10px 0
+}
+
+.von-login-mi .von-login-btn {
+	padding: 20px 15px
+}
+
+.von-login-mi .mui-input-group .mui-input-row::after {
+	left: 0
+}
+
+.von-login-mi .mui-input-group .mui-input-row {
+	height: 50px
+}
+
+.von-login-bd button {
+	width: 90%;
+	padding: 10px 15px;
+	margin: 20px 0;
+	font-size: 16px
+}
+
+.von-login-bd img {
+	margin-bottom: 20px
+}
+
+.mui-scroll-wrapper .mui-table-view-chevron .mui-table-view-cell {
+	padding: 11px 15px
+}
+
+.mui-scroll-wrapper .mui-table-view-chevron .mui-table-view-cell>a:not(.mui-btn) {
+	margin: -11px -15px;
+}
+
+.von-btn {
+	padding: 15px;
+}
+
+.von-btn button {
+	border-radius: 22px;
+}
+
+.von-hyb .mui-table-view {
+	background: 0
+}
+
+.von-hyb .mui-table-view-cell>a:not(.mui-btn) {
+	white-space: initial
+}
+
+.von-hyb-q {
+	border-bottom: 1px #efeff4 solid;
+	padding-bottom: 10px;
+	margin-bottom: 10px
+}
+
+.von-hyb-q p {
+	text-align: right;
+}
+
+.von-hyb h6 {
+	margin: 0
+}
+
+.von-hyb button {
+	padding: 5px 10px;
+	font-size: 12px
+}
+
+.von-hyb .mui-btn-danger {
+	background: #FFEBEB;
+	border: 0
+}
+
+.von-hyb .mui-btn-primary {
+	background: #E6ECFF;
+	border: 0
+}
+
+.von-hybdat ul,
+.von-hybdat.mui-content>.mui-table-view:first-child {
+	margin-top: 10px
+}
+
+.von-news-item .mui-scroll-wrapper {
+	position: initial
+}
+
+.von-qlhd .mui-card .mui-card-content-inner {
+	height: 158px;
+	overflow: hidden;
+	display: flex;
+}
+
+.von-qlhd .mui-card .mui-card-content-inner img {
+	object-fit: cover;
+}
+
+.von-qlhd .mui-card-footer {
+	color: #101010
+}
+
+.default {
+	width: 50%;
+	margin: 30% auto 0
+}
+
+.von-hfgs table {
+	width: 100%;
+	table-layout: fixed;
+}
+
+.von-hfgs table th,
+.von-hfgs table td {
+	padding: 5px;
+	border: 1px #efeff4 solid
+}
+
+.von-hfgs table td {
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	font-size: 12px;
+}
+
+.von-hfgs table .mui-col-xs-2 {
+	width: 14%
+}
+
+.von-hfgs table .mui-col-xs-7 {
+	width: 61%
+}
+
+.von-top {
+	background: #BBBBBB;
+	border-radius: 5px;
+	color: #ffffff;
+	position: fixed;
+	right: 15px;
+	bottom: 15px;
+	text-align: center;
+	line-height: 1;
+	padding: 8px 10px;
+	z-index: 9;
+}
+
+.von-footer-btn {
+	position: fixed;
+	bottom: 0;
+	width: 100%;
+	padding: 10px 15px;
+	z-index: 9;
+}
+
+.von-footer-btn button {
+	border-radius: 22px;
+	margin-bottom: 0
+}
+
+.von-footer-btn.flex {
+	padding: 0;
+}
+
+.von-footer-btn.flex button {
+	width: 50%;
+	border-radius: initial;
+}
+
+.vongi-fqhd .vongi-fqhd-add {
+	text-align: center;
+	display: flex;
+	justify-content: center;
+	position: relative
+}
+
+.vongi-fqhd .vongi-cashier-text {
+	position: relative;
+	padding-right: 25px
+}
+
+.vongi-fqhd .vongi-cashier .iconfont {
+	position: absolute;
+	right: 0;
+	color: #999;
+	font-size: 14px
+}
+
+.vongi-fqhd .vongi-cashier .iconfont.iconguanbi1 {
+	top: 0px
+}
+
+.vongi-fqhd .vongi-cashier .iconfont.iconjiantou1 {
+	bottom: 0px
+}
+
+.vongi-fqhd-addimg {
+	position: relative;
+	background: #eee;
+	height: 72px;
+	width: 72px;
+	overflow: hidden;
+	display: flex;
+}
+
+.vongi-fqhd-addimg span {
+	background: rgba(0, 0, 0, 0.6);
+	position: absolute;
+	bottom: 0;
+	width: 100%;
+	color: #ffffff;
+	font-size: 11px;
+	text-align: center;
+}
+
+.vongi-fqhd-addimg img {
+	object-fit: cover;
+	width: 100%;
+	min-height: 100%;
+}
+
+.vongi-fqhd .vongi-cashier .vongi-fqhd-addimg .iconfont {
+	top: 50%;
+	right: 50%;
+	font-size: 24px;
+	margin-top: -12px;
+	margin-right: -12px
+}
+
+.vongi-fqhd .vongi-popover .iconfont {
+	font-size: 24px
+}
+
+.vongi-fqhd .vongi-popover .mui-grid-view.mui-grid-9 .mui-table-view-cell {
+	padding: 0
+}
+
+.vongi-cashier-btn-row {
+	position: fixed;
+	bottom: 0;
+	left: 0;
+	right: 0;
+}
+
+.vongi-cashier-btn-white {
+	background-color: #fff;
+	display: flex;
+	justify-content: space-between;
+	line-height: 49px;
+	padding-left: 15px;
+}
+
+.vongi-cashier-btn-white span {
+	font-size: 16px;
+	width: 70%;
+	white-space: nowrap;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: block;
+}
+
+.vongi-cashier {
+	background-color: #fff;
+	padding: 15px;
+	margin-bottom: 15px;
+	display: flex;
+}
+
+.vongi-cashier img {
+	height: 80px;
+	width: 80px;
+}
+
+.vongi-cashier-text h3 {
+	line-height: 21px;
+	margin: 0
+}
+
+.vongi-cashier-text {
+	flex: 1;
+	margin-left: 10px;
+	min-width: 0;
+}
+
+.vongi-text-tit {
+	max-height: 84px;
+	text-overflow: -o-ellipsis-lastline;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: -webkit-box;
+	-webkit-line-clamp: 4;
+	line-clamp: 4;
+	-webkit-box-orient: vertical;
+	color: #101010
+}
+
+.vongi-text-tit.mui-h5 {
+	color: #A3A3A3
+}
+
+.vongi-cashier-btn {
+	background-color: #3385FF;
+	height: 50px;
+	width: 30%;
+	color: #ffffff;
+	text-align: center;
+	line-height: 50px;
+}
+
+.vongi-cashier textarea {
+	padding: 0;
+}
+
+.vongi-cashier .mui-col-xs-5 {
+	max-height: 100px;
+	overflow: hidden;
+}
+
+.vongi-cashier .mui-col-xs-5 img {
+	width: 100%;
+	height: 100%;
+	object-fit: cover;
+}
+
+.vongi-cashier .mui-col-xs-5 a {
+	position: absolute;
+	background: rgba(0, 0, 0, 0.6);
+	top: 50%;
+	left: 50%;
+	padding: 3px 15px;
+	border-radius: 15px;
+	margin-left: -43px;
+	margin-top: -15px;
+	color: #ffffff
+}
+
+.vongi-cashier .mui-col-xs-7 {
+	padding-right: 10%
+}
+
+.vongi-fqhd .vongi-cashier .iconfont.icon-jiantou1 {
+	bottom: 0px;
+}
+
+.vongi-popover {
+	width: 100px;
+	background: #ffffff;
+	border-radius: 7px;
+	-webkit-box-shadow: 0 0 15px rgba(0, 0, 0, .1);
+	box-shadow: 0 0 15px rgba(0, 0, 0, .1);
+	position: absolute;
+	top: 35px;
+	left: 50%;
+	margin-left: -50px;
+	z-index: 999;
+}
+
+.vongi-popover .mui-popover-arrow::after {
+	position: absolute;
+	top: -8px;
+	left: 50%;
+	width: 16px;
+	height: 16px;
+	content: ' ';
+	-webkit-transform: rotate(45deg);
+	transform: rotate(45deg);
+	border-radius: 3px;
+	background: #ffffff;
+	margin-left: -8px;
+}
+
+.vongi-popover ul {
+	background: 0
+}
+
+.von-switch {
+	position: absolute;
+	right: 15px;
+	bottom: 10px;
+	z-index: 9;
+}
+
+.vongi-meform-pho {
+	background: #ffffff;
+	padding: 10px 15px;
+	margin-bottom: 10px;
+	margin-top: 4px;
+}
+
+.vongi-meform-pho h5 {
+	margin-bottom: 10px;
+}
+
+.vongi-meform-pho .mui-table-view-radio {
+	flex-wrap: wrap;
+	margin: 0 -10px
+}
+
+.vongi-meform-pho .mui-table-view-radio .mui-table-view-cell {
+	padding: 0;
+	margin: 5px 10px;
+}
+
+.vongi-meform-pho .mui-table-view-cell a {
+	padding: 3px 10px;
+	border-radius: 20px;
+	border: 1px solid #A9A9A9;
+	color: #666;
+}
+
+.vongi-meform-pho .mui-table-view-radio .mui-table-view-cell>a:not(.mui-btn) {
+	margin: 0;
+}
+
+.vongi-meform-pho textarea {
+	border: 0;
+	padding: 0
+}
+
+.vongi-meform-pho .mui-table-view-cell.mui-selected a {
+	color: #1B3891;
+	border: 1px solid #1B3891;
+}
+
+.von-sqdat {
+	padding: 15px;
+	margin-bottom: 10px
+}
+
+.von-sqdat ul li {
+	padding: 0
+}
+
+.von-zddat-top {
+	background: #FFFFFF;
+	padding: 10px 15px;
+	text-align: center;
+}
+
+.von-zd .iconfont {
+	font-size: 24px;
+	width: 24px;
+	margin-right: 5px
+}
+
+.von-zd .mui-h4 {
+	font-size: 20px
+}
+
+.von-zddat h4 {
+	padding: 5px 15px;
+	background: #ffffff;
+	margin-top: 10px;
+	margin-bottom: 0;
+}
+
+.von-zddat .mui-input-group span {
+	text-align: right;
+	display: block;
+	padding: 11px 15px 11px 0;
+	width: 65%;
+	float: right;
+}
+
+.von-zddat .mui-input-group .mui-input-row {
+	height: auto
+}
+
+.von-zddat .mui-input-row label {
+	color: #888
+}
+
+.von-zddat .mui-input-row.mui-radio label {
+	color: #101010
+}
+
+.von-zddat ul {
+	background: 0
+}
+
+.von-zddat li {
+	padding: 0 10px;
+	margin-bottom: 10px;
+	background: #ffffff
+}
+
+.von-zddat li .mui-card-content-inner,
+.von-zddat li .mui-card-footer {
+	padding: 10px 0;
+}
+
+.von-hdform .mui-card {
+	margin: 10px 0 0;
+	box-shadow: initial;
+}
+
+.mui-content.von-hdform>.mui-card:first-child {
+	margin-top: 0
+}
+
+.von-hdform h4 {
+	padding: 0 15px;
+	font-weight: bold;
+	font-size: 16px
+}
+
+.von-hdform h4 .mui-h6 {
+	color: #666;
+}
+
+.von-hdform .mui-card {
+	padding: 10px 0
+}
+
+.von-hdform .mui-card-content {
+	padding: 0 15px
+}
+
+.von-hdform .mui-card-content .flexspal {
+	margin-bottom: 10px
+}
+
+.von-hdform .mui-card-content .flexspal:last-child {
+	margin-bottom: 0
+}
+
+.von-hdform .mui-card-content .iconfont {
+	font-size: 20px
+}
+
+.mui-input-group .von-form-tex.mui-input-row textarea {
+	width: 100%;
+	padding: 10px;
+	border: 1px solid rgba(0, 0, 0, .1);
+	border-radius: 3px;
+}
+
+.mui-input-group .von-form-tex.mui-input-row {
+	height: auto
+}
+
+.von-hdform .von-form-tex.mui-input-row label {
+	width: 100%
+}
+
+.von-form-tex span {
+	width: 100%;
+	padding: 0 15px;
+	display: block;
+}
+
+.von-hdform .von-login-btn .mui-btn-block {
+	margin-bottom: 0;
+	border-radius: 50px;
+	padding: 11px 15px;
+	font-size: 14px
+}
+
+.von-hdform .mui-input-row label {
+	width: 45%
+}
+
+.von-hdform .mui-input-row input {
+	width: 55%
+}
+.mui-input-group .mui-input-row.von-input-auto{
+	height:auto
+}
+.von-input-auto h5{
+	white-space: nowrap;
+	flex-wrap: wrap;
+}
+@media (max-width: 320px) {
+	.von-mine-qy .mui-input-row span {
+		font-size: 65%;
+	}
+	.mui-content .vongi-meform-pho .mui-table-view-cell a {
+		padding: 3px 5px;
+	}
+	.von-hdform .mui-input-row label {
+		width: 48%
+	}
+	.von-hdform .mui-input-row input {
+		width: 52%
+	}
+}

+ 539 - 0
src/assets/fonts/demo.css

@@ -0,0 +1,539 @@
+/* Logo 字体 */
+@font-face {
+  font-family: "iconfont logo";
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+}
+
+.logo {
+  font-family: "iconfont logo";
+  font-size: 160px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+/* tabs */
+.nav-tabs {
+  position: relative;
+}
+
+.nav-tabs .nav-more {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  height: 42px;
+  line-height: 42px;
+  color: #666;
+}
+
+#tabs {
+  border-bottom: 1px solid #eee;
+}
+
+#tabs li {
+  cursor: pointer;
+  width: 100px;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  font-size: 16px;
+  border-bottom: 2px solid transparent;
+  position: relative;
+  z-index: 1;
+  margin-bottom: -1px;
+  color: #666;
+}
+
+
+#tabs .active {
+  border-bottom-color: #f00;
+  color: #222;
+}
+
+.tab-container .content {
+  display: none;
+}
+
+/* 页面布局 */
+.main {
+  padding: 30px 100px;
+  width: 960px;
+  margin: 0 auto;
+}
+
+.main .logo {
+  color: #333;
+  text-align: left;
+  margin-bottom: 30px;
+  line-height: 1;
+  height: 110px;
+  margin-top: -50px;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.main .logo a {
+  font-size: 160px;
+  color: #333;
+}
+
+.helps {
+  margin-top: 40px;
+}
+
+.helps pre {
+  padding: 20px;
+  margin: 10px 0;
+  border: solid 1px #e7e1cd;
+  background-color: #fffdef;
+  overflow: auto;
+}
+
+.icon_lists {
+  width: 100% !important;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.icon_lists li {
+  width: 100px;
+  margin-bottom: 10px;
+  margin-right: 20px;
+  text-align: center;
+  list-style: none !important;
+  cursor: default;
+}
+
+.icon_lists li .code-name {
+  line-height: 1.2;
+}
+
+.icon_lists .icon {
+  display: block;
+  height: 100px;
+  line-height: 100px;
+  font-size: 42px;
+  margin: 10px auto;
+  color: #333;
+  -webkit-transition: font-size 0.25s linear, width 0.25s linear;
+  -moz-transition: font-size 0.25s linear, width 0.25s linear;
+  transition: font-size 0.25s linear, width 0.25s linear;
+}
+
+.icon_lists .icon:hover {
+  font-size: 100px;
+}
+
+.icon_lists .svg-icon {
+  /* 通过设置 font-size 来改变图标大小 */
+  width: 1em;
+  /* 图标和文字相邻时,垂直对齐 */
+  vertical-align: -0.15em;
+  /* 通过设置 color 来改变 SVG 的颜色/fill */
+  fill: currentColor;
+  /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
+      normalize.css 中也包含这行 */
+  overflow: hidden;
+}
+
+.icon_lists li .name,
+.icon_lists li .code-name {
+  color: #666;
+}
+
+/* markdown 样式 */
+.markdown {
+  color: #666;
+  font-size: 14px;
+  line-height: 1.8;
+}
+
+.highlight {
+  line-height: 1.5;
+}
+
+.markdown img {
+  vertical-align: middle;
+  max-width: 100%;
+}
+
+.markdown h1 {
+  color: #404040;
+  font-weight: 500;
+  line-height: 40px;
+  margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+  color: #404040;
+  margin: 1.6em 0 0.6em 0;
+  font-weight: 500;
+  clear: both;
+}
+
+.markdown h1 {
+  font-size: 28px;
+}
+
+.markdown h2 {
+  font-size: 22px;
+}
+
+.markdown h3 {
+  font-size: 16px;
+}
+
+.markdown h4 {
+  font-size: 14px;
+}
+
+.markdown h5 {
+  font-size: 12px;
+}
+
+.markdown h6 {
+  font-size: 12px;
+}
+
+.markdown hr {
+  height: 1px;
+  border: 0;
+  background: #e9e9e9;
+  margin: 16px 0;
+  clear: both;
+}
+
+.markdown p {
+  margin: 1em 0;
+}
+
+.markdown>p,
+.markdown>blockquote,
+.markdown>.highlight,
+.markdown>ol,
+.markdown>ul {
+  width: 80%;
+}
+
+.markdown ul>li {
+  list-style: circle;
+}
+
+.markdown>ul li,
+.markdown blockquote ul>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown>ul li p,
+.markdown>ol li p {
+  margin: 0.6em 0;
+}
+
+.markdown ol>li {
+  list-style: decimal;
+}
+
+.markdown>ol li,
+.markdown blockquote ol>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown code {
+  margin: 0 3px;
+  padding: 0 5px;
+  background: #eee;
+  border-radius: 3px;
+}
+
+.markdown strong,
+.markdown b {
+  font-weight: 600;
+}
+
+.markdown>table {
+  border-collapse: collapse;
+  border-spacing: 0px;
+  empty-cells: show;
+  border: 1px solid #e9e9e9;
+  width: 95%;
+  margin-bottom: 24px;
+}
+
+.markdown>table th {
+  white-space: nowrap;
+  color: #333;
+  font-weight: 600;
+}
+
+.markdown>table th,
+.markdown>table td {
+  border: 1px solid #e9e9e9;
+  padding: 8px 16px;
+  text-align: left;
+}
+
+.markdown>table th {
+  background: #F7F7F7;
+}
+
+.markdown blockquote {
+  font-size: 90%;
+  color: #999;
+  border-left: 4px solid #e9e9e9;
+  padding-left: 0.8em;
+  margin: 1em 0;
+}
+
+.markdown blockquote p {
+  margin: 0;
+}
+
+.markdown .anchor {
+  opacity: 0;
+  transition: opacity 0.3s ease;
+  margin-left: 8px;
+}
+
+.markdown .waiting {
+  color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+  opacity: 1;
+  display: inline-block;
+}
+
+.markdown>br,
+.markdown>p>br {
+  clear: both;
+}
+
+
+.hljs {
+  display: block;
+  background: white;
+  padding: 0.5em;
+  color: #333333;
+  overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+  color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+  color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+  color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+  color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+  color: #63a35c;
+}
+
+.hljs-tag {
+  color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+  color: #795da3;
+}
+
+.hljs-addition {
+  color: #55a532;
+  background-color: #eaffea;
+}
+
+.hljs-deletion {
+  color: #bd2c00;
+  background-color: #ffecec;
+}
+
+.hljs-link {
+  text-decoration: underline;
+}
+
+/* 代码高亮 */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+  color: black;
+  background: none;
+  text-shadow: 0 1px white;
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+  text-align: left;
+  white-space: pre;
+  word-spacing: normal;
+  word-break: normal;
+  word-wrap: normal;
+  line-height: 1.5;
+
+  -moz-tab-size: 4;
+  -o-tab-size: 4;
+  tab-size: 4;
+
+  -webkit-hyphens: none;
+  -moz-hyphens: none;
+  -ms-hyphens: none;
+  hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+@media print {
+
+  code[class*="language-"],
+  pre[class*="language-"] {
+    text-shadow: none;
+  }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+  padding: 1em;
+  margin: .5em 0;
+  overflow: auto;
+}
+
+:not(pre)>code[class*="language-"],
+pre[class*="language-"] {
+  background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre)>code[class*="language-"] {
+  padding: .1em;
+  border-radius: .3em;
+  white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+  color: slategray;
+}
+
+.token.punctuation {
+  color: #999;
+}
+
+.namespace {
+  opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+  color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+  color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+  color: #9a6e3a;
+  background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+  color: #07a;
+}
+
+.token.function,
+.token.class-name {
+  color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+  color: #e90;
+}
+
+.token.important,
+.token.bold {
+  font-weight: bold;
+}
+
+.token.italic {
+  font-style: italic;
+}
+
+.token.entity {
+  cursor: help;
+}

+ 2218 - 0
src/assets/fonts/demo_index.html

@@ -0,0 +1,2218 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8"/>
+  <title>IconFont Demo</title>
+  <link rel="shortcut icon" href="//img.alicdn.com/imgextra/i2/O1CN01ZyAlrn1MwaMhqz36G_!!6000000001499-73-tps-64-64.ico" type="image/x-icon"/>
+  <link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01EYTRnJ297D6vehehJ_!!6000000008020-55-tps-64-64.svg"/>
+  <link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css">
+  <link rel="stylesheet" href="demo.css">
+  <link rel="stylesheet" href="iconfont.css">
+  <script src="iconfont.js"></script>
+  <!-- jQuery -->
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js"></script>
+  <!-- 代码高亮 -->
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/a3f714d0-08e6-11e9-8a15-ebf944d7534c.js"></script>
+</head>
+<body>
+  <div class="main">
+    <h1 class="logo"><a href="https://www.iconfont.cn/" title="iconfont 首页" target="_blank">&#xe86b;</a></h1>
+    <div class="nav-tabs">
+      <ul id="tabs" class="dib-box">
+        <li class="dib active"><span>Unicode</span></li>
+        <li class="dib"><span>Font class</span></li>
+        <li class="dib"><span>Symbol</span></li>
+      </ul>
+      
+      <a href="https://www.iconfont.cn/manage/index?manage_type=myprojects&projectId=2259334" target="_blank" class="nav-more">查看项目</a>
+      
+    </div>
+    <div class="tab-container">
+      <div class="content unicode" style="display: block;">
+          <ul class="icon_lists dib-box">
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe655;</span>
+                <div class="name">下载</div>
+                <div class="code-name">&amp;#xe655;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe653;</span>
+                <div class="name">Account icon</div>
+                <div class="code-name">&amp;#xe653;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe652;</span>
+                <div class="name">编辑</div>
+                <div class="code-name">&amp;#xe652;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe651;</span>
+                <div class="name">修改(列表)</div>
+                <div class="code-name">&amp;#xe651;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe650;</span>
+                <div class="name">简历信息配置</div>
+                <div class="code-name">&amp;#xe650;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe69c;</span>
+                <div class="name">关  闭</div>
+                <div class="code-name">&amp;#xe69c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe69f;</span>
+                <div class="name">HTSCIT_箭头2</div>
+                <div class="code-name">&amp;#xe69f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe6a1;</span>
+                <div class="name">文字</div>
+                <div class="code-name">&amp;#xe6a1;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe6a4;</span>
+                <div class="name">图片</div>
+                <div class="code-name">&amp;#xe6a4;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe64f;</span>
+                <div class="name">箭头</div>
+                <div class="code-name">&amp;#xe64f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe638;</span>
+                <div class="name">雨夹雪</div>
+                <div class="code-name">&amp;#xe638;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe639;</span>
+                <div class="name">中雨</div>
+                <div class="code-name">&amp;#xe639;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe63a;</span>
+                <div class="name">阴天</div>
+                <div class="code-name">&amp;#xe63a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe63b;</span>
+                <div class="name">小雨</div>
+                <div class="code-name">&amp;#xe63b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe63c;</span>
+                <div class="name">中度雾霾</div>
+                <div class="code-name">&amp;#xe63c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe63d;</span>
+                <div class="name">大雨</div>
+                <div class="code-name">&amp;#xe63d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe63e;</span>
+                <div class="name">浮尘</div>
+                <div class="code-name">&amp;#xe63e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe63f;</span>
+                <div class="name">重度雾霾</div>
+                <div class="code-name">&amp;#xe63f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe640;</span>
+                <div class="name">小雪</div>
+                <div class="code-name">&amp;#xe640;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe641;</span>
+                <div class="name">轻度雾霾</div>
+                <div class="code-name">&amp;#xe641;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe642;</span>
+                <div class="name">多云</div>
+                <div class="code-name">&amp;#xe642;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe643;</span>
+                <div class="name">中雪</div>
+                <div class="code-name">&amp;#xe643;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe644;</span>
+                <div class="name">晚多云</div>
+                <div class="code-name">&amp;#xe644;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe645;</span>
+                <div class="name">雷阵雨</div>
+                <div class="code-name">&amp;#xe645;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe646;</span>
+                <div class="name">雾</div>
+                <div class="code-name">&amp;#xe646;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe647;</span>
+                <div class="name">冰雹</div>
+                <div class="code-name">&amp;#xe647;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe648;</span>
+                <div class="name">沙尘</div>
+                <div class="code-name">&amp;#xe648;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe649;</span>
+                <div class="name">暴雨</div>
+                <div class="code-name">&amp;#xe649;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe64a;</span>
+                <div class="name">大风</div>
+                <div class="code-name">&amp;#xe64a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe64b;</span>
+                <div class="name">大雪</div>
+                <div class="code-name">&amp;#xe64b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe64c;</span>
+                <div class="name">晚晴天</div>
+                <div class="code-name">&amp;#xe64c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe64d;</span>
+                <div class="name">晴天</div>
+                <div class="code-name">&amp;#xe64d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe64e;</span>
+                <div class="name">暴雪</div>
+                <div class="code-name">&amp;#xe64e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe637;</span>
+                <div class="name">照相机</div>
+                <div class="code-name">&amp;#xe637;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe636;</span>
+                <div class="name">ic_setting</div>
+                <div class="code-name">&amp;#xe636;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe619;</span>
+                <div class="name">project</div>
+                <div class="code-name">&amp;#xe619;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe631;</span>
+                <div class="name">bill1</div>
+                <div class="code-name">&amp;#xe631;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe632;</span>
+                <div class="name">zoom in</div>
+                <div class="code-name">&amp;#xe632;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe633;</span>
+                <div class="name">doc</div>
+                <div class="code-name">&amp;#xe633;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe634;</span>
+                <div class="name">Building Line</div>
+                <div class="code-name">&amp;#xe634;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe635;</span>
+                <div class="name">bullhorn-o</div>
+                <div class="code-name">&amp;#xe635;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe617;</span>
+                <div class="name">phone-safet</div>
+                <div class="code-name">&amp;#xe617;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe62f;</span>
+                <div class="name">身份证 正面</div>
+                <div class="code-name">&amp;#xe62f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe630;</span>
+                <div class="name">营业执照</div>
+                <div class="code-name">&amp;#xe630;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe62b;</span>
+                <div class="name">晴</div>
+                <div class="code-name">&amp;#xe62b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe62e;</span>
+                <div class="name">拖动</div>
+                <div class="code-name">&amp;#xe62e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe62a;</span>
+                <div class="name">close (1)</div>
+                <div class="code-name">&amp;#xe62a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe62c;</span>
+                <div class="name">bag</div>
+                <div class="code-name">&amp;#xe62c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe62d;</span>
+                <div class="name">add</div>
+                <div class="code-name">&amp;#xe62d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe628;</span>
+                <div class="name">position</div>
+                <div class="code-name">&amp;#xe628;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe629;</span>
+                <div class="name">bag</div>
+                <div class="code-name">&amp;#xe629;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe627;</span>
+                <div class="name">more</div>
+                <div class="code-name">&amp;#xe627;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe625;</span>
+                <div class="name">位置</div>
+                <div class="code-name">&amp;#xe625;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe626;</span>
+                <div class="name">users</div>
+                <div class="code-name">&amp;#xe626;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe620;</span>
+                <div class="name">close</div>
+                <div class="code-name">&amp;#xe620;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe621;</span>
+                <div class="name">zoom</div>
+                <div class="code-name">&amp;#xe621;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe622;</span>
+                <div class="name">down</div>
+                <div class="code-name">&amp;#xe622;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe623;</span>
+                <div class="name">hide</div>
+                <div class="code-name">&amp;#xe623;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe624;</span>
+                <div class="name">show</div>
+                <div class="code-name">&amp;#xe624;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe61f;</span>
+                <div class="name">brush</div>
+                <div class="code-name">&amp;#xe61f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe61c;</span>
+                <div class="name">发票</div>
+                <div class="code-name">&amp;#xe61c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe61d;</span>
+                <div class="name">bell</div>
+                <div class="code-name">&amp;#xe61d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe61e;</span>
+                <div class="name">bill</div>
+                <div class="code-name">&amp;#xe61e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe61b;</span>
+                <div class="name">账单</div>
+                <div class="code-name">&amp;#xe61b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe61a;</span>
+                <div class="name">新闻_资讯</div>
+                <div class="code-name">&amp;#xe61a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe614;</span>
+                <div class="name">密码 (1)</div>
+                <div class="code-name">&amp;#xe614;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe615;</span>
+                <div class="name">验证码</div>
+                <div class="code-name">&amp;#xe615;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe616;</span>
+                <div class="name">go-top</div>
+                <div class="code-name">&amp;#xe616;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe618;</span>
+                <div class="name">帐号</div>
+                <div class="code-name">&amp;#xe618;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe612;</span>
+                <div class="name">问</div>
+                <div class="code-name">&amp;#xe612;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe613;</span>
+                <div class="name">答</div>
+                <div class="code-name">&amp;#xe613;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe604;</span>
+                <div class="name">简介</div>
+                <div class="code-name">&amp;#xe604;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe605;</span>
+                <div class="name">招商系统</div>
+                <div class="code-name">&amp;#xe605;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe606;</span>
+                <div class="name">icon-小微企业名录信息查询(2019年之前数据)</div>
+                <div class="code-name">&amp;#xe606;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe607;</span>
+                <div class="name">解答点击</div>
+                <div class="code-name">&amp;#xe607;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe608;</span>
+                <div class="name">关于我们</div>
+                <div class="code-name">&amp;#xe608;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe609;</span>
+                <div class="name">邻里互助</div>
+                <div class="code-name">&amp;#xe609;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe60a;</span>
+                <div class="name">优秀事项</div>
+                <div class="code-name">&amp;#xe60a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe60b;</span>
+                <div class="name">公示</div>
+                <div class="code-name">&amp;#xe60b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe60c;</span>
+                <div class="name">房产动态</div>
+                <div class="code-name">&amp;#xe60c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe60d;</span>
+                <div class="name">活动</div>
+                <div class="code-name">&amp;#xe60d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe60e;</span>
+                <div class="name">通知公告</div>
+                <div class="code-name">&amp;#xe60e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe60f;</span>
+                <div class="name">政策文件</div>
+                <div class="code-name">&amp;#xe60f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe610;</span>
+                <div class="name">党建</div>
+                <div class="code-name">&amp;#xe610;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe611;</span>
+                <div class="name">招聘管理</div>
+                <div class="code-name">&amp;#xe611;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe602;</span>
+                <div class="name">菜单</div>
+                <div class="code-name">&amp;#xe602;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe603;</span>
+                <div class="name">我的</div>
+                <div class="code-name">&amp;#xe603;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe600;</span>
+                <div class="name">message</div>
+                <div class="code-name">&amp;#xe600;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe601;</span>
+                <div class="name">home</div>
+                <div class="code-name">&amp;#xe601;</div>
+              </li>
+          
+          </ul>
+          <div class="article markdown">
+          <h2 id="unicode-">Unicode 引用</h2>
+          <hr>
+
+          <p>Unicode 是字体在网页端最原始的应用方式,特点是:</p>
+          <ul>
+            <li>兼容性最好,支持 IE6+,及所有现代浏览器。</li>
+            <li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
+            <li>但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。</li>
+          </ul>
+          <blockquote>
+            <p>注意:新版 iconfont 支持多色图标,这些多色图标在 Unicode 模式下将不能使用,如果有需求建议使用symbol 的引用方式</p>
+          </blockquote>
+          <p>Unicode 使用步骤如下:</p>
+          <h3 id="-font-face">第一步:拷贝项目下面生成的 <code>@font-face</code></h3>
+<pre><code class="language-css"
+>@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.eot');
+  src: url('iconfont.eot?#iefix') format('embedded-opentype'),
+      url('iconfont.woff2') format('woff2'),
+      url('iconfont.woff') format('woff'),
+      url('iconfont.ttf') format('truetype'),
+      url('iconfont.svg#iconfont') format('svg');
+}
+</code></pre>
+          <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
+<pre><code class="language-css"
+>.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+</code></pre>
+          <h3 id="-">第三步:挑选相应图标并获取字体编码,应用于页面</h3>
+<pre>
+<code class="language-html"
+>&lt;span class="iconfont"&gt;&amp;#x33;&lt;/span&gt;
+</code></pre>
+          <blockquote>
+            <p>"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
+          </blockquote>
+          </div>
+      </div>
+      <div class="content font-class">
+        <ul class="icon_lists dib-box">
+          
+          <li class="dib">
+            <span class="icon iconfont iconxiazai"></span>
+            <div class="name">
+              下载
+            </div>
+            <div class="code-name">.iconxiazai
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconAccounticon"></span>
+            <div class="name">
+              Account icon
+            </div>
+            <div class="code-name">.iconAccounticon
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconbianji"></span>
+            <div class="name">
+              编辑
+            </div>
+            <div class="code-name">.iconbianji
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconxiugailiebiao"></span>
+            <div class="name">
+              修改(列表)
+            </div>
+            <div class="code-name">.iconxiugailiebiao
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconjianlixinxipeizhi"></span>
+            <div class="name">
+              简历信息配置
+            </div>
+            <div class="code-name">.iconjianlixinxipeizhi
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconguanbi1"></span>
+            <div class="name">
+              关  闭
+            </div>
+            <div class="code-name">.iconguanbi1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconjiantou1"></span>
+            <div class="name">
+              HTSCIT_箭头2
+            </div>
+            <div class="code-name">.iconjiantou1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconwenzi"></span>
+            <div class="name">
+              文字
+            </div>
+            <div class="code-name">.iconwenzi
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon23"></span>
+            <div class="name">
+              图片
+            </div>
+            <div class="code-name">.icon23
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconjiantou"></span>
+            <div class="name">
+              箭头
+            </div>
+            <div class="code-name">.iconjiantou
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconyujiaxue"></span>
+            <div class="name">
+              雨夹雪
+            </div>
+            <div class="code-name">.iconyujiaxue
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconzhongyu"></span>
+            <div class="name">
+              中雨
+            </div>
+            <div class="code-name">.iconzhongyu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconyintian"></span>
+            <div class="name">
+              阴天
+            </div>
+            <div class="code-name">.iconyintian
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconxiaoyu"></span>
+            <div class="name">
+              小雨
+            </div>
+            <div class="code-name">.iconxiaoyu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconzhongduwumai"></span>
+            <div class="name">
+              中度雾霾
+            </div>
+            <div class="code-name">.iconzhongduwumai
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icondayu"></span>
+            <div class="name">
+              大雨
+            </div>
+            <div class="code-name">.icondayu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfuchen"></span>
+            <div class="name">
+              浮尘
+            </div>
+            <div class="code-name">.iconfuchen
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconzhongduwumai1"></span>
+            <div class="name">
+              重度雾霾
+            </div>
+            <div class="code-name">.iconzhongduwumai1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconxiaoxue"></span>
+            <div class="name">
+              小雪
+            </div>
+            <div class="code-name">.iconxiaoxue
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconqingduwumai"></span>
+            <div class="name">
+              轻度雾霾
+            </div>
+            <div class="code-name">.iconqingduwumai
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconduoyun"></span>
+            <div class="name">
+              多云
+            </div>
+            <div class="code-name">.iconduoyun
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconzhongxue"></span>
+            <div class="name">
+              中雪
+            </div>
+            <div class="code-name">.iconzhongxue
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconwanduoyun"></span>
+            <div class="name">
+              晚多云
+            </div>
+            <div class="code-name">.iconwanduoyun
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconleizhenyu"></span>
+            <div class="name">
+              雷阵雨
+            </div>
+            <div class="code-name">.iconleizhenyu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconwu"></span>
+            <div class="name">
+              雾
+            </div>
+            <div class="code-name">.iconwu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconbingbao"></span>
+            <div class="name">
+              冰雹
+            </div>
+            <div class="code-name">.iconbingbao
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconshachen"></span>
+            <div class="name">
+              沙尘
+            </div>
+            <div class="code-name">.iconshachen
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconbaoyu"></span>
+            <div class="name">
+              暴雨
+            </div>
+            <div class="code-name">.iconbaoyu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icondafeng"></span>
+            <div class="name">
+              大风
+            </div>
+            <div class="code-name">.icondafeng
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icondaxue"></span>
+            <div class="name">
+              大雪
+            </div>
+            <div class="code-name">.icondaxue
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconwanqingtian"></span>
+            <div class="name">
+              晚晴天
+            </div>
+            <div class="code-name">.iconwanqingtian
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconqingtian"></span>
+            <div class="name">
+              晴天
+            </div>
+            <div class="code-name">.iconqingtian
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconbaoxue"></span>
+            <div class="name">
+              暴雪
+            </div>
+            <div class="code-name">.iconbaoxue
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconzhaoxiangji"></span>
+            <div class="name">
+              照相机
+            </div>
+            <div class="code-name">.iconzhaoxiangji
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconic_setting"></span>
+            <div class="name">
+              ic_setting
+            </div>
+            <div class="code-name">.iconic_setting
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconproject"></span>
+            <div class="name">
+              project
+            </div>
+            <div class="code-name">.iconproject
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconbill1"></span>
+            <div class="name">
+              bill1
+            </div>
+            <div class="code-name">.iconbill1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconzoomin"></span>
+            <div class="name">
+              zoom in
+            </div>
+            <div class="code-name">.iconzoomin
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icondoc"></span>
+            <div class="name">
+              doc
+            </div>
+            <div class="code-name">.icondoc
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconBuildingLine"></span>
+            <div class="name">
+              Building Line
+            </div>
+            <div class="code-name">.iconBuildingLine
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconbullhorn-o"></span>
+            <div class="name">
+              bullhorn-o
+            </div>
+            <div class="code-name">.iconbullhorn-o
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconphone-safet"></span>
+            <div class="name">
+              phone-safet
+            </div>
+            <div class="code-name">.iconphone-safet
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconshenfenzhengzhengmian1"></span>
+            <div class="name">
+              身份证 正面
+            </div>
+            <div class="code-name">.iconshenfenzhengzhengmian1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconyingyezhizhao1"></span>
+            <div class="name">
+              营业执照
+            </div>
+            <div class="code-name">.iconyingyezhizhao1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconqing"></span>
+            <div class="name">
+              晴
+            </div>
+            <div class="code-name">.iconqing
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icontuodong"></span>
+            <div class="name">
+              拖动
+            </div>
+            <div class="code-name">.icontuodong
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconclose1"></span>
+            <div class="name">
+              close (1)
+            </div>
+            <div class="code-name">.iconclose1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconbag1"></span>
+            <div class="name">
+              bag
+            </div>
+            <div class="code-name">.iconbag1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconadd"></span>
+            <div class="name">
+              add
+            </div>
+            <div class="code-name">.iconadd
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconposition"></span>
+            <div class="name">
+              position
+            </div>
+            <div class="code-name">.iconposition
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconbag"></span>
+            <div class="name">
+              bag
+            </div>
+            <div class="code-name">.iconbag
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconmore"></span>
+            <div class="name">
+              more
+            </div>
+            <div class="code-name">.iconmore
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconweizhi"></span>
+            <div class="name">
+              位置
+            </div>
+            <div class="code-name">.iconweizhi
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconusers"></span>
+            <div class="name">
+              users
+            </div>
+            <div class="code-name">.iconusers
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconclose"></span>
+            <div class="name">
+              close
+            </div>
+            <div class="code-name">.iconclose
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconzoom"></span>
+            <div class="name">
+              zoom
+            </div>
+            <div class="code-name">.iconzoom
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icondown"></span>
+            <div class="name">
+              down
+            </div>
+            <div class="code-name">.icondown
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconhide"></span>
+            <div class="name">
+              hide
+            </div>
+            <div class="code-name">.iconhide
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconshow"></span>
+            <div class="name">
+              show
+            </div>
+            <div class="code-name">.iconshow
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconbrush"></span>
+            <div class="name">
+              brush
+            </div>
+            <div class="code-name">.iconbrush
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfapiao"></span>
+            <div class="name">
+              发票
+            </div>
+            <div class="code-name">.iconfapiao
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconbell"></span>
+            <div class="name">
+              bell
+            </div>
+            <div class="code-name">.iconbell
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconbill"></span>
+            <div class="name">
+              bill
+            </div>
+            <div class="code-name">.iconbill
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconzhangdan"></span>
+            <div class="name">
+              账单
+            </div>
+            <div class="code-name">.iconzhangdan
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconxinwen_zixun"></span>
+            <div class="name">
+              新闻_资讯
+            </div>
+            <div class="code-name">.iconxinwen_zixun
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconmima1"></span>
+            <div class="name">
+              密码 (1)
+            </div>
+            <div class="code-name">.iconmima1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconyanzhengma"></span>
+            <div class="name">
+              验证码
+            </div>
+            <div class="code-name">.iconyanzhengma
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icongo-top"></span>
+            <div class="name">
+              go-top
+            </div>
+            <div class="code-name">.icongo-top
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconzhanghao"></span>
+            <div class="name">
+              帐号
+            </div>
+            <div class="code-name">.iconzhanghao
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconwen"></span>
+            <div class="name">
+              问
+            </div>
+            <div class="code-name">.iconwen
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconda"></span>
+            <div class="name">
+              答
+            </div>
+            <div class="code-name">.iconda
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconjianjie"></span>
+            <div class="name">
+              简介
+            </div>
+            <div class="code-name">.iconjianjie
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconzhaoshangxitong"></span>
+            <div class="name">
+              招商系统
+            </div>
+            <div class="code-name">.iconzhaoshangxitong
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconicon-xiaoweiqiyemingluxinxichaxun2019nianzhiqianshuju"></span>
+            <div class="name">
+              icon-小微企业名录信息查询(2019年之前数据)
+            </div>
+            <div class="code-name">.iconicon-xiaoweiqiyemingluxinxichaxun2019nianzhiqianshuju
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconjiedadianji"></span>
+            <div class="name">
+              解答点击
+            </div>
+            <div class="code-name">.iconjiedadianji
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconguanyuwomen"></span>
+            <div class="name">
+              关于我们
+            </div>
+            <div class="code-name">.iconguanyuwomen
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconlinlihuzhu"></span>
+            <div class="name">
+              邻里互助
+            </div>
+            <div class="code-name">.iconlinlihuzhu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconyouxiushixiang"></span>
+            <div class="name">
+              优秀事项
+            </div>
+            <div class="code-name">.iconyouxiushixiang
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icongongshi"></span>
+            <div class="name">
+              公示
+            </div>
+            <div class="code-name">.icongongshi
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfangchandongtai"></span>
+            <div class="name">
+              房产动态
+            </div>
+            <div class="code-name">.iconfangchandongtai
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconhuodong"></span>
+            <div class="name">
+              活动
+            </div>
+            <div class="code-name">.iconhuodong
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icontongzhigonggao"></span>
+            <div class="name">
+              通知公告
+            </div>
+            <div class="code-name">.icontongzhigonggao
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconzhengcewenjian"></span>
+            <div class="name">
+              政策文件
+            </div>
+            <div class="code-name">.iconzhengcewenjian
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icondangjian"></span>
+            <div class="name">
+              党建
+            </div>
+            <div class="code-name">.icondangjian
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconzhaopinguanli"></span>
+            <div class="name">
+              招聘管理
+            </div>
+            <div class="code-name">.iconzhaopinguanli
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconcaidan"></span>
+            <div class="name">
+              菜单
+            </div>
+            <div class="code-name">.iconcaidan
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconwode"></span>
+            <div class="name">
+              我的
+            </div>
+            <div class="code-name">.iconwode
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconmessage"></span>
+            <div class="name">
+              message
+            </div>
+            <div class="code-name">.iconmessage
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconhome"></span>
+            <div class="name">
+              home
+            </div>
+            <div class="code-name">.iconhome
+            </div>
+          </li>
+          
+        </ul>
+        <div class="article markdown">
+        <h2 id="font-class-">font-class 引用</h2>
+        <hr>
+
+        <p>font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。</p>
+        <p>与 Unicode 使用方式相比,具有如下特点:</p>
+        <ul>
+          <li>兼容性良好,支持 IE8+,及所有现代浏览器。</li>
+          <li>相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。</li>
+          <li>因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。</li>
+          <li>不过因为本质上还是使用的字体,所以多色图标还是不支持的。</li>
+        </ul>
+        <p>使用步骤如下:</p>
+        <h3 id="-fontclass-">第一步:引入项目下面生成的 fontclass 代码:</h3>
+<pre><code class="language-html">&lt;link rel="stylesheet" href="./iconfont.css"&gt;
+</code></pre>
+        <h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
+<pre><code class="language-html">&lt;span class="iconfont iconxxx"&gt;&lt;/span&gt;
+</code></pre>
+        <blockquote>
+          <p>"
+            iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
+        </blockquote>
+      </div>
+      </div>
+      <div class="content symbol">
+          <ul class="icon_lists dib-box">
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconxiazai"></use>
+                </svg>
+                <div class="name">下载</div>
+                <div class="code-name">#iconxiazai</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconAccounticon"></use>
+                </svg>
+                <div class="name">Account icon</div>
+                <div class="code-name">#iconAccounticon</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconbianji"></use>
+                </svg>
+                <div class="name">编辑</div>
+                <div class="code-name">#iconbianji</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconxiugailiebiao"></use>
+                </svg>
+                <div class="name">修改(列表)</div>
+                <div class="code-name">#iconxiugailiebiao</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconjianlixinxipeizhi"></use>
+                </svg>
+                <div class="name">简历信息配置</div>
+                <div class="code-name">#iconjianlixinxipeizhi</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconguanbi1"></use>
+                </svg>
+                <div class="name">关  闭</div>
+                <div class="code-name">#iconguanbi1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconjiantou1"></use>
+                </svg>
+                <div class="name">HTSCIT_箭头2</div>
+                <div class="code-name">#iconjiantou1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconwenzi"></use>
+                </svg>
+                <div class="name">文字</div>
+                <div class="code-name">#iconwenzi</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon23"></use>
+                </svg>
+                <div class="name">图片</div>
+                <div class="code-name">#icon23</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconjiantou"></use>
+                </svg>
+                <div class="name">箭头</div>
+                <div class="code-name">#iconjiantou</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconyujiaxue"></use>
+                </svg>
+                <div class="name">雨夹雪</div>
+                <div class="code-name">#iconyujiaxue</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconzhongyu"></use>
+                </svg>
+                <div class="name">中雨</div>
+                <div class="code-name">#iconzhongyu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconyintian"></use>
+                </svg>
+                <div class="name">阴天</div>
+                <div class="code-name">#iconyintian</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconxiaoyu"></use>
+                </svg>
+                <div class="name">小雨</div>
+                <div class="code-name">#iconxiaoyu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconzhongduwumai"></use>
+                </svg>
+                <div class="name">中度雾霾</div>
+                <div class="code-name">#iconzhongduwumai</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icondayu"></use>
+                </svg>
+                <div class="name">大雨</div>
+                <div class="code-name">#icondayu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfuchen"></use>
+                </svg>
+                <div class="name">浮尘</div>
+                <div class="code-name">#iconfuchen</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconzhongduwumai1"></use>
+                </svg>
+                <div class="name">重度雾霾</div>
+                <div class="code-name">#iconzhongduwumai1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconxiaoxue"></use>
+                </svg>
+                <div class="name">小雪</div>
+                <div class="code-name">#iconxiaoxue</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconqingduwumai"></use>
+                </svg>
+                <div class="name">轻度雾霾</div>
+                <div class="code-name">#iconqingduwumai</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconduoyun"></use>
+                </svg>
+                <div class="name">多云</div>
+                <div class="code-name">#iconduoyun</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconzhongxue"></use>
+                </svg>
+                <div class="name">中雪</div>
+                <div class="code-name">#iconzhongxue</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconwanduoyun"></use>
+                </svg>
+                <div class="name">晚多云</div>
+                <div class="code-name">#iconwanduoyun</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconleizhenyu"></use>
+                </svg>
+                <div class="name">雷阵雨</div>
+                <div class="code-name">#iconleizhenyu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconwu"></use>
+                </svg>
+                <div class="name">雾</div>
+                <div class="code-name">#iconwu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconbingbao"></use>
+                </svg>
+                <div class="name">冰雹</div>
+                <div class="code-name">#iconbingbao</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconshachen"></use>
+                </svg>
+                <div class="name">沙尘</div>
+                <div class="code-name">#iconshachen</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconbaoyu"></use>
+                </svg>
+                <div class="name">暴雨</div>
+                <div class="code-name">#iconbaoyu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icondafeng"></use>
+                </svg>
+                <div class="name">大风</div>
+                <div class="code-name">#icondafeng</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icondaxue"></use>
+                </svg>
+                <div class="name">大雪</div>
+                <div class="code-name">#icondaxue</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconwanqingtian"></use>
+                </svg>
+                <div class="name">晚晴天</div>
+                <div class="code-name">#iconwanqingtian</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconqingtian"></use>
+                </svg>
+                <div class="name">晴天</div>
+                <div class="code-name">#iconqingtian</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconbaoxue"></use>
+                </svg>
+                <div class="name">暴雪</div>
+                <div class="code-name">#iconbaoxue</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconzhaoxiangji"></use>
+                </svg>
+                <div class="name">照相机</div>
+                <div class="code-name">#iconzhaoxiangji</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconic_setting"></use>
+                </svg>
+                <div class="name">ic_setting</div>
+                <div class="code-name">#iconic_setting</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconproject"></use>
+                </svg>
+                <div class="name">project</div>
+                <div class="code-name">#iconproject</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconbill1"></use>
+                </svg>
+                <div class="name">bill1</div>
+                <div class="code-name">#iconbill1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconzoomin"></use>
+                </svg>
+                <div class="name">zoom in</div>
+                <div class="code-name">#iconzoomin</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icondoc"></use>
+                </svg>
+                <div class="name">doc</div>
+                <div class="code-name">#icondoc</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconBuildingLine"></use>
+                </svg>
+                <div class="name">Building Line</div>
+                <div class="code-name">#iconBuildingLine</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconbullhorn-o"></use>
+                </svg>
+                <div class="name">bullhorn-o</div>
+                <div class="code-name">#iconbullhorn-o</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconphone-safet"></use>
+                </svg>
+                <div class="name">phone-safet</div>
+                <div class="code-name">#iconphone-safet</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconshenfenzhengzhengmian1"></use>
+                </svg>
+                <div class="name">身份证 正面</div>
+                <div class="code-name">#iconshenfenzhengzhengmian1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconyingyezhizhao1"></use>
+                </svg>
+                <div class="name">营业执照</div>
+                <div class="code-name">#iconyingyezhizhao1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconqing"></use>
+                </svg>
+                <div class="name">晴</div>
+                <div class="code-name">#iconqing</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icontuodong"></use>
+                </svg>
+                <div class="name">拖动</div>
+                <div class="code-name">#icontuodong</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconclose1"></use>
+                </svg>
+                <div class="name">close (1)</div>
+                <div class="code-name">#iconclose1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconbag1"></use>
+                </svg>
+                <div class="name">bag</div>
+                <div class="code-name">#iconbag1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconadd"></use>
+                </svg>
+                <div class="name">add</div>
+                <div class="code-name">#iconadd</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconposition"></use>
+                </svg>
+                <div class="name">position</div>
+                <div class="code-name">#iconposition</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconbag"></use>
+                </svg>
+                <div class="name">bag</div>
+                <div class="code-name">#iconbag</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconmore"></use>
+                </svg>
+                <div class="name">more</div>
+                <div class="code-name">#iconmore</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconweizhi"></use>
+                </svg>
+                <div class="name">位置</div>
+                <div class="code-name">#iconweizhi</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconusers"></use>
+                </svg>
+                <div class="name">users</div>
+                <div class="code-name">#iconusers</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconclose"></use>
+                </svg>
+                <div class="name">close</div>
+                <div class="code-name">#iconclose</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconzoom"></use>
+                </svg>
+                <div class="name">zoom</div>
+                <div class="code-name">#iconzoom</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icondown"></use>
+                </svg>
+                <div class="name">down</div>
+                <div class="code-name">#icondown</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconhide"></use>
+                </svg>
+                <div class="name">hide</div>
+                <div class="code-name">#iconhide</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconshow"></use>
+                </svg>
+                <div class="name">show</div>
+                <div class="code-name">#iconshow</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconbrush"></use>
+                </svg>
+                <div class="name">brush</div>
+                <div class="code-name">#iconbrush</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfapiao"></use>
+                </svg>
+                <div class="name">发票</div>
+                <div class="code-name">#iconfapiao</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconbell"></use>
+                </svg>
+                <div class="name">bell</div>
+                <div class="code-name">#iconbell</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconbill"></use>
+                </svg>
+                <div class="name">bill</div>
+                <div class="code-name">#iconbill</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconzhangdan"></use>
+                </svg>
+                <div class="name">账单</div>
+                <div class="code-name">#iconzhangdan</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconxinwen_zixun"></use>
+                </svg>
+                <div class="name">新闻_资讯</div>
+                <div class="code-name">#iconxinwen_zixun</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconmima1"></use>
+                </svg>
+                <div class="name">密码 (1)</div>
+                <div class="code-name">#iconmima1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconyanzhengma"></use>
+                </svg>
+                <div class="name">验证码</div>
+                <div class="code-name">#iconyanzhengma</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icongo-top"></use>
+                </svg>
+                <div class="name">go-top</div>
+                <div class="code-name">#icongo-top</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconzhanghao"></use>
+                </svg>
+                <div class="name">帐号</div>
+                <div class="code-name">#iconzhanghao</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconwen"></use>
+                </svg>
+                <div class="name">问</div>
+                <div class="code-name">#iconwen</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconda"></use>
+                </svg>
+                <div class="name">答</div>
+                <div class="code-name">#iconda</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconjianjie"></use>
+                </svg>
+                <div class="name">简介</div>
+                <div class="code-name">#iconjianjie</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconzhaoshangxitong"></use>
+                </svg>
+                <div class="name">招商系统</div>
+                <div class="code-name">#iconzhaoshangxitong</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconicon-xiaoweiqiyemingluxinxichaxun2019nianzhiqianshuju"></use>
+                </svg>
+                <div class="name">icon-小微企业名录信息查询(2019年之前数据)</div>
+                <div class="code-name">#iconicon-xiaoweiqiyemingluxinxichaxun2019nianzhiqianshuju</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconjiedadianji"></use>
+                </svg>
+                <div class="name">解答点击</div>
+                <div class="code-name">#iconjiedadianji</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconguanyuwomen"></use>
+                </svg>
+                <div class="name">关于我们</div>
+                <div class="code-name">#iconguanyuwomen</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconlinlihuzhu"></use>
+                </svg>
+                <div class="name">邻里互助</div>
+                <div class="code-name">#iconlinlihuzhu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconyouxiushixiang"></use>
+                </svg>
+                <div class="name">优秀事项</div>
+                <div class="code-name">#iconyouxiushixiang</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icongongshi"></use>
+                </svg>
+                <div class="name">公示</div>
+                <div class="code-name">#icongongshi</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfangchandongtai"></use>
+                </svg>
+                <div class="name">房产动态</div>
+                <div class="code-name">#iconfangchandongtai</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconhuodong"></use>
+                </svg>
+                <div class="name">活动</div>
+                <div class="code-name">#iconhuodong</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icontongzhigonggao"></use>
+                </svg>
+                <div class="name">通知公告</div>
+                <div class="code-name">#icontongzhigonggao</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconzhengcewenjian"></use>
+                </svg>
+                <div class="name">政策文件</div>
+                <div class="code-name">#iconzhengcewenjian</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icondangjian"></use>
+                </svg>
+                <div class="name">党建</div>
+                <div class="code-name">#icondangjian</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconzhaopinguanli"></use>
+                </svg>
+                <div class="name">招聘管理</div>
+                <div class="code-name">#iconzhaopinguanli</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconcaidan"></use>
+                </svg>
+                <div class="name">菜单</div>
+                <div class="code-name">#iconcaidan</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconwode"></use>
+                </svg>
+                <div class="name">我的</div>
+                <div class="code-name">#iconwode</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconmessage"></use>
+                </svg>
+                <div class="name">message</div>
+                <div class="code-name">#iconmessage</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconhome"></use>
+                </svg>
+                <div class="name">home</div>
+                <div class="code-name">#iconhome</div>
+            </li>
+          
+          </ul>
+          <div class="article markdown">
+          <h2 id="symbol-">Symbol 引用</h2>
+          <hr>
+
+          <p>这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇<a href="">文章</a>
+            这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:</p>
+          <ul>
+            <li>支持多色图标了,不再受单色限制。</li>
+            <li>通过一些技巧,支持像字体那样,通过 <code>font-size</code>, <code>color</code> 来调整样式。</li>
+            <li>兼容性较差,支持 IE9+,及现代浏览器。</li>
+            <li>浏览器渲染 SVG 的性能一般,还不如 png。</li>
+          </ul>
+          <p>使用步骤如下:</p>
+          <h3 id="-symbol-">第一步:引入项目下面生成的 symbol 代码:</h3>
+<pre><code class="language-html">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;
+</code></pre>
+          <h3 id="-css-">第二步:加入通用 CSS 代码(引入一次就行):</h3>
+<pre><code class="language-html">&lt;style&gt;
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+&lt;/style&gt;
+</code></pre>
+          <h3 id="-">第三步:挑选相应图标并获取类名,应用于页面:</h3>
+<pre><code class="language-html">&lt;svg class="icon" aria-hidden="true"&gt;
+  &lt;use xlink:href="#icon-xxx"&gt;&lt;/use&gt;
+&lt;/svg&gt;
+</code></pre>
+          </div>
+      </div>
+
+    </div>
+  </div>
+  <script>
+  $(document).ready(function () {
+      $('.tab-container .content:first').show()
+
+      $('#tabs li').click(function (e) {
+        var tabContent = $('.tab-container .content')
+        var index = $(this).index()
+
+        if ($(this).hasClass('active')) {
+          return
+        } else {
+          $('#tabs li').removeClass('active')
+          $(this).addClass('active')
+
+          tabContent.hide().eq(index).fadeIn()
+        }
+      })
+    })
+  </script>
+</body>
+</html>

BIN
src/assets/fonts/iconfont.eot


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
src/assets/fonts/iconfont.js


+ 632 - 0
src/assets/fonts/iconfont.json

@@ -0,0 +1,632 @@
+{
+  "id": "2259334",
+  "name": "荆州企联",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon",
+  "description": "荆州市企业联合会公众号项目",
+  "glyphs": [
+    {
+      "icon_id": "14470204",
+      "name": "下载",
+      "font_class": "xiazai",
+      "unicode": "e655",
+      "unicode_decimal": 58965
+    },
+    {
+      "icon_id": "19431817",
+      "name": "Account icon",
+      "font_class": "Accounticon",
+      "unicode": "e653",
+      "unicode_decimal": 58963
+    },
+    {
+      "icon_id": "936867",
+      "name": "编辑",
+      "font_class": "bianji",
+      "unicode": "e652",
+      "unicode_decimal": 58962
+    },
+    {
+      "icon_id": "19403479",
+      "name": "修改(列表)",
+      "font_class": "xiugailiebiao",
+      "unicode": "e651",
+      "unicode_decimal": 58961
+    },
+    {
+      "icon_id": "19366645",
+      "name": "简历信息配置",
+      "font_class": "jianlixinxipeizhi",
+      "unicode": "e650",
+      "unicode_decimal": 58960
+    },
+    {
+      "icon_id": "9673157",
+      "name": "关  闭",
+      "font_class": "guanbi1",
+      "unicode": "e69c",
+      "unicode_decimal": 59036
+    },
+    {
+      "icon_id": "9592765",
+      "name": "HTSCIT_箭头2",
+      "font_class": "jiantou1",
+      "unicode": "e69f",
+      "unicode_decimal": 59039
+    },
+    {
+      "icon_id": "11468518",
+      "name": "文字",
+      "font_class": "wenzi",
+      "unicode": "e6a1",
+      "unicode_decimal": 59041
+    },
+    {
+      "icon_id": "15253073",
+      "name": "图片",
+      "font_class": "23",
+      "unicode": "e6a4",
+      "unicode_decimal": 59044
+    },
+    {
+      "icon_id": "479193",
+      "name": "箭头",
+      "font_class": "jiantou",
+      "unicode": "e64f",
+      "unicode_decimal": 58959
+    },
+    {
+      "icon_id": "19252567",
+      "name": "雨夹雪",
+      "font_class": "yujiaxue",
+      "unicode": "e638",
+      "unicode_decimal": 58936
+    },
+    {
+      "icon_id": "19252568",
+      "name": "中雨",
+      "font_class": "zhongyu",
+      "unicode": "e639",
+      "unicode_decimal": 58937
+    },
+    {
+      "icon_id": "19252569",
+      "name": "阴天",
+      "font_class": "yintian",
+      "unicode": "e63a",
+      "unicode_decimal": 58938
+    },
+    {
+      "icon_id": "19252570",
+      "name": "小雨",
+      "font_class": "xiaoyu",
+      "unicode": "e63b",
+      "unicode_decimal": 58939
+    },
+    {
+      "icon_id": "19252571",
+      "name": "中度雾霾",
+      "font_class": "zhongduwumai",
+      "unicode": "e63c",
+      "unicode_decimal": 58940
+    },
+    {
+      "icon_id": "19252572",
+      "name": "大雨",
+      "font_class": "dayu",
+      "unicode": "e63d",
+      "unicode_decimal": 58941
+    },
+    {
+      "icon_id": "19252573",
+      "name": "浮尘",
+      "font_class": "fuchen",
+      "unicode": "e63e",
+      "unicode_decimal": 58942
+    },
+    {
+      "icon_id": "19252574",
+      "name": "重度雾霾",
+      "font_class": "zhongduwumai1",
+      "unicode": "e63f",
+      "unicode_decimal": 58943
+    },
+    {
+      "icon_id": "19252575",
+      "name": "小雪",
+      "font_class": "xiaoxue",
+      "unicode": "e640",
+      "unicode_decimal": 58944
+    },
+    {
+      "icon_id": "19252576",
+      "name": "轻度雾霾",
+      "font_class": "qingduwumai",
+      "unicode": "e641",
+      "unicode_decimal": 58945
+    },
+    {
+      "icon_id": "19252577",
+      "name": "多云",
+      "font_class": "duoyun",
+      "unicode": "e642",
+      "unicode_decimal": 58946
+    },
+    {
+      "icon_id": "19252578",
+      "name": "中雪",
+      "font_class": "zhongxue",
+      "unicode": "e643",
+      "unicode_decimal": 58947
+    },
+    {
+      "icon_id": "19252579",
+      "name": "晚多云",
+      "font_class": "wanduoyun",
+      "unicode": "e644",
+      "unicode_decimal": 58948
+    },
+    {
+      "icon_id": "19252580",
+      "name": "雷阵雨",
+      "font_class": "leizhenyu",
+      "unicode": "e645",
+      "unicode_decimal": 58949
+    },
+    {
+      "icon_id": "19252581",
+      "name": "雾",
+      "font_class": "wu",
+      "unicode": "e646",
+      "unicode_decimal": 58950
+    },
+    {
+      "icon_id": "19252582",
+      "name": "冰雹",
+      "font_class": "bingbao",
+      "unicode": "e647",
+      "unicode_decimal": 58951
+    },
+    {
+      "icon_id": "19252583",
+      "name": "沙尘",
+      "font_class": "shachen",
+      "unicode": "e648",
+      "unicode_decimal": 58952
+    },
+    {
+      "icon_id": "19252584",
+      "name": "暴雨",
+      "font_class": "baoyu",
+      "unicode": "e649",
+      "unicode_decimal": 58953
+    },
+    {
+      "icon_id": "19252585",
+      "name": "大风",
+      "font_class": "dafeng",
+      "unicode": "e64a",
+      "unicode_decimal": 58954
+    },
+    {
+      "icon_id": "19252586",
+      "name": "大雪",
+      "font_class": "daxue",
+      "unicode": "e64b",
+      "unicode_decimal": 58955
+    },
+    {
+      "icon_id": "19252587",
+      "name": "晚晴天",
+      "font_class": "wanqingtian",
+      "unicode": "e64c",
+      "unicode_decimal": 58956
+    },
+    {
+      "icon_id": "19252588",
+      "name": "晴天",
+      "font_class": "qingtian",
+      "unicode": "e64d",
+      "unicode_decimal": 58957
+    },
+    {
+      "icon_id": "19252589",
+      "name": "暴雪",
+      "font_class": "baoxue",
+      "unicode": "e64e",
+      "unicode_decimal": 58958
+    },
+    {
+      "icon_id": "5800632",
+      "name": "照相机",
+      "font_class": "zhaoxiangji",
+      "unicode": "e637",
+      "unicode_decimal": 58935
+    },
+    {
+      "icon_id": "19163178",
+      "name": "ic_setting",
+      "font_class": "ic_setting",
+      "unicode": "e636",
+      "unicode_decimal": 58934
+    },
+    {
+      "icon_id": "19163094",
+      "name": "project",
+      "font_class": "project",
+      "unicode": "e619",
+      "unicode_decimal": 58905
+    },
+    {
+      "icon_id": "19163095",
+      "name": "bill1",
+      "font_class": "bill1",
+      "unicode": "e631",
+      "unicode_decimal": 58929
+    },
+    {
+      "icon_id": "19163096",
+      "name": "zoom in",
+      "font_class": "zoomin",
+      "unicode": "e632",
+      "unicode_decimal": 58930
+    },
+    {
+      "icon_id": "19163097",
+      "name": "doc",
+      "font_class": "doc",
+      "unicode": "e633",
+      "unicode_decimal": 58931
+    },
+    {
+      "icon_id": "19163098",
+      "name": "Building Line",
+      "font_class": "BuildingLine",
+      "unicode": "e634",
+      "unicode_decimal": 58932
+    },
+    {
+      "icon_id": "19163099",
+      "name": "bullhorn-o",
+      "font_class": "bullhorn-o",
+      "unicode": "e635",
+      "unicode_decimal": 58933
+    },
+    {
+      "icon_id": "19107510",
+      "name": "phone-safet",
+      "font_class": "phone-safet",
+      "unicode": "e617",
+      "unicode_decimal": 58903
+    },
+    {
+      "icon_id": "19097924",
+      "name": "身份证 正面",
+      "font_class": "shenfenzhengzhengmian1",
+      "unicode": "e62f",
+      "unicode_decimal": 58927
+    },
+    {
+      "icon_id": "19097925",
+      "name": "营业执照",
+      "font_class": "yingyezhizhao1",
+      "unicode": "e630",
+      "unicode_decimal": 58928
+    },
+    {
+      "icon_id": "10868931",
+      "name": "晴",
+      "font_class": "qing",
+      "unicode": "e62b",
+      "unicode_decimal": 58923
+    },
+    {
+      "icon_id": "19075372",
+      "name": "拖动",
+      "font_class": "tuodong",
+      "unicode": "e62e",
+      "unicode_decimal": 58926
+    },
+    {
+      "icon_id": "19075273",
+      "name": "close (1)",
+      "font_class": "close1",
+      "unicode": "e62a",
+      "unicode_decimal": 58922
+    },
+    {
+      "icon_id": "19075275",
+      "name": "bag",
+      "font_class": "bag1",
+      "unicode": "e62c",
+      "unicode_decimal": 58924
+    },
+    {
+      "icon_id": "19075276",
+      "name": "add",
+      "font_class": "add",
+      "unicode": "e62d",
+      "unicode_decimal": 58925
+    },
+    {
+      "icon_id": "19075019",
+      "name": "position",
+      "font_class": "position",
+      "unicode": "e628",
+      "unicode_decimal": 58920
+    },
+    {
+      "icon_id": "19075020",
+      "name": "bag",
+      "font_class": "bag",
+      "unicode": "e629",
+      "unicode_decimal": 58921
+    },
+    {
+      "icon_id": "19074415",
+      "name": "more",
+      "font_class": "more",
+      "unicode": "e627",
+      "unicode_decimal": 58919
+    },
+    {
+      "icon_id": "19074310",
+      "name": "位置",
+      "font_class": "weizhi",
+      "unicode": "e625",
+      "unicode_decimal": 58917
+    },
+    {
+      "icon_id": "19074311",
+      "name": "users",
+      "font_class": "users",
+      "unicode": "e626",
+      "unicode_decimal": 58918
+    },
+    {
+      "icon_id": "19074092",
+      "name": "close",
+      "font_class": "close",
+      "unicode": "e620",
+      "unicode_decimal": 58912
+    },
+    {
+      "icon_id": "19074093",
+      "name": "zoom",
+      "font_class": "zoom",
+      "unicode": "e621",
+      "unicode_decimal": 58913
+    },
+    {
+      "icon_id": "19074094",
+      "name": "down",
+      "font_class": "down",
+      "unicode": "e622",
+      "unicode_decimal": 58914
+    },
+    {
+      "icon_id": "19074095",
+      "name": "hide",
+      "font_class": "hide",
+      "unicode": "e623",
+      "unicode_decimal": 58915
+    },
+    {
+      "icon_id": "19074096",
+      "name": "show",
+      "font_class": "show",
+      "unicode": "e624",
+      "unicode_decimal": 58916
+    },
+    {
+      "icon_id": "19073903",
+      "name": "brush",
+      "font_class": "brush",
+      "unicode": "e61f",
+      "unicode_decimal": 58911
+    },
+    {
+      "icon_id": "19073814",
+      "name": "发票",
+      "font_class": "fapiao",
+      "unicode": "e61c",
+      "unicode_decimal": 58908
+    },
+    {
+      "icon_id": "19073815",
+      "name": "bell",
+      "font_class": "bell",
+      "unicode": "e61d",
+      "unicode_decimal": 58909
+    },
+    {
+      "icon_id": "19073816",
+      "name": "bill",
+      "font_class": "bill",
+      "unicode": "e61e",
+      "unicode_decimal": 58910
+    },
+    {
+      "icon_id": "19073726",
+      "name": "账单",
+      "font_class": "zhangdan",
+      "unicode": "e61b",
+      "unicode_decimal": 58907
+    },
+    {
+      "icon_id": "19073602",
+      "name": "新闻_资讯",
+      "font_class": "xinwen_zixun",
+      "unicode": "e61a",
+      "unicode_decimal": 58906
+    },
+    {
+      "icon_id": "18861613",
+      "name": "密码 (1)",
+      "font_class": "mima1",
+      "unicode": "e614",
+      "unicode_decimal": 58900
+    },
+    {
+      "icon_id": "18861614",
+      "name": "验证码",
+      "font_class": "yanzhengma",
+      "unicode": "e615",
+      "unicode_decimal": 58901
+    },
+    {
+      "icon_id": "18861615",
+      "name": "go-top",
+      "font_class": "go-top",
+      "unicode": "e616",
+      "unicode_decimal": 58902
+    },
+    {
+      "icon_id": "18861617",
+      "name": "帐号",
+      "font_class": "zhanghao",
+      "unicode": "e618",
+      "unicode_decimal": 58904
+    },
+    {
+      "icon_id": "18784399",
+      "name": "问",
+      "font_class": "wen",
+      "unicode": "e612",
+      "unicode_decimal": 58898
+    },
+    {
+      "icon_id": "18784400",
+      "name": "答",
+      "font_class": "da",
+      "unicode": "e613",
+      "unicode_decimal": 58899
+    },
+    {
+      "icon_id": "18734769",
+      "name": "简介",
+      "font_class": "jianjie",
+      "unicode": "e604",
+      "unicode_decimal": 58884
+    },
+    {
+      "icon_id": "18734770",
+      "name": "招商系统",
+      "font_class": "zhaoshangxitong",
+      "unicode": "e605",
+      "unicode_decimal": 58885
+    },
+    {
+      "icon_id": "18734771",
+      "name": "icon-小微企业名录信息查询(2019年之前数据)",
+      "font_class": "icon-xiaoweiqiyemingluxinxichaxun2019nianzhiqianshuju",
+      "unicode": "e606",
+      "unicode_decimal": 58886
+    },
+    {
+      "icon_id": "18734772",
+      "name": "解答点击",
+      "font_class": "jiedadianji",
+      "unicode": "e607",
+      "unicode_decimal": 58887
+    },
+    {
+      "icon_id": "18734773",
+      "name": "关于我们",
+      "font_class": "guanyuwomen",
+      "unicode": "e608",
+      "unicode_decimal": 58888
+    },
+    {
+      "icon_id": "18734774",
+      "name": "邻里互助",
+      "font_class": "linlihuzhu",
+      "unicode": "e609",
+      "unicode_decimal": 58889
+    },
+    {
+      "icon_id": "18734775",
+      "name": "优秀事项",
+      "font_class": "youxiushixiang",
+      "unicode": "e60a",
+      "unicode_decimal": 58890
+    },
+    {
+      "icon_id": "18734776",
+      "name": "公示",
+      "font_class": "gongshi",
+      "unicode": "e60b",
+      "unicode_decimal": 58891
+    },
+    {
+      "icon_id": "18734777",
+      "name": "房产动态",
+      "font_class": "fangchandongtai",
+      "unicode": "e60c",
+      "unicode_decimal": 58892
+    },
+    {
+      "icon_id": "18734778",
+      "name": "活动",
+      "font_class": "huodong",
+      "unicode": "e60d",
+      "unicode_decimal": 58893
+    },
+    {
+      "icon_id": "18734779",
+      "name": "通知公告",
+      "font_class": "tongzhigonggao",
+      "unicode": "e60e",
+      "unicode_decimal": 58894
+    },
+    {
+      "icon_id": "18734780",
+      "name": "政策文件",
+      "font_class": "zhengcewenjian",
+      "unicode": "e60f",
+      "unicode_decimal": 58895
+    },
+    {
+      "icon_id": "18734781",
+      "name": "党建",
+      "font_class": "dangjian",
+      "unicode": "e610",
+      "unicode_decimal": 58896
+    },
+    {
+      "icon_id": "18734782",
+      "name": "招聘管理",
+      "font_class": "zhaopinguanli",
+      "unicode": "e611",
+      "unicode_decimal": 58897
+    },
+    {
+      "icon_id": "18721934",
+      "name": "菜单",
+      "font_class": "caidan",
+      "unicode": "e602",
+      "unicode_decimal": 58882
+    },
+    {
+      "icon_id": "18721935",
+      "name": "我的",
+      "font_class": "wode",
+      "unicode": "e603",
+      "unicode_decimal": 58883
+    },
+    {
+      "icon_id": "18721400",
+      "name": "message",
+      "font_class": "message",
+      "unicode": "e600",
+      "unicode_decimal": 58880
+    },
+    {
+      "icon_id": "18721401",
+      "name": "home",
+      "font_class": "home",
+      "unicode": "e601",
+      "unicode_decimal": 58881
+    }
+  ]
+}

Diff do ficheiro suprimidas por serem muito extensas
+ 109 - 0
src/assets/fonts/iconfont.svg


BIN
src/assets/fonts/iconfont.ttf


BIN
src/assets/fonts/iconfont.woff


BIN
src/assets/fonts/iconfont.woff2


BIN
src/assets/fonts/mui.ttf


BIN
src/assets/img/banner1.png


BIN
src/assets/img/banner2.png


BIN
src/assets/img/banner3.jpg


BIN
src/assets/img/default_company_logo.png


BIN
src/assets/img/default_images.png


BIN
src/assets/img/down.png


BIN
src/assets/img/icon_bill.png


BIN
src/assets/img/icon_message.png


BIN
src/assets/img/icon_phoneSafe.png


BIN
src/assets/img/icon_ticket.png


BIN
src/assets/img/img.png


BIN
src/assets/img/ladding.png


BIN
src/assets/img/loading.gif


BIN
src/assets/img/logo_jp.png


BIN
src/assets/img/logo_qilian.png


BIN
src/assets/img/new.png


BIN
src/assets/img/no.png


BIN
src/assets/img/none.png


BIN
src/assets/img/nonum.png


BIN
src/assets/img/nowife.png


BIN
src/assets/img/sfz.png


BIN
src/assets/img/wite.png


BIN
src/assets/img/yes.png


BIN
src/assets/img/yyzz.png


+ 8387 - 0
src/assets/js/mui.js

@@ -0,0 +1,8387 @@
+/*!
+ * =====================================================
+ * Mui v3.7.2 (http://dev.dcloud.net.cn/mui)
+ * =====================================================
+ */
+/**
+ * MUI核心JS
+ * @type _L4.$|Function
+ */
+var mui = (function(document, undefined) {
+	var readyRE = /complete|loaded|interactive/;
+	var idSelectorRE = /^#([\w-]+)$/;
+	var classSelectorRE = /^\.([\w-]+)$/;
+	var tagSelectorRE = /^[\w-]+$/;
+	var translateRE = /translate(?:3d)?\((.+?)\)/;
+	var translateMatrixRE = /matrix(3d)?\((.+?)\)/;
+
+	var $ = function(selector, context) {
+		context = context || document;
+		if (!selector)
+			return wrap();
+		if (typeof selector === 'object')
+			if ($.isArrayLike(selector)) {
+				return wrap($.slice.call(selector), null);
+			} else {
+				return wrap([selector], null);
+			}
+		if (typeof selector === 'function')
+			return $.ready(selector);
+		if (typeof selector === 'string') {
+			try {
+				selector = selector.trim();
+				if (idSelectorRE.test(selector)) {
+					var found = document.getElementById(RegExp.$1);
+					return wrap(found ? [found] : []);
+				}
+				return wrap($.qsa(selector, context), selector);
+			} catch (e) {}
+		}
+		return wrap();
+	};
+
+	var wrap = function(dom, selector) {
+		dom = dom || [];
+		Object.setPrototypeOf(dom, $.fn);
+		dom.selector = selector || '';
+		return dom;
+	};
+
+	$.uuid = 0;
+
+	$.data = {};
+	/**
+	 * extend(simple)
+	 * @param {type} target
+	 * @param {type} source
+	 * @param {type} deep
+	 * @returns {unresolved}
+	 */
+	$.extend = function() { //from jquery2
+		var options, name, src, copy, copyIsArray, clone,
+			target = arguments[0] || {},
+			i = 1,
+			length = arguments.length,
+			deep = false;
+
+		if (typeof target === "boolean") {
+			deep = target;
+
+			target = arguments[i] || {};
+			i++;
+		}
+
+		if (typeof target !== "object" && !$.isFunction(target)) {
+			target = {};
+		}
+
+		if (i === length) {
+			target = this;
+			i--;
+		}
+
+		for (; i < length; i++) {
+			if ((options = arguments[i]) != null) {
+				for (name in options) {
+					src = target[name];
+					copy = options[name];
+
+					if (target === copy) {
+						continue;
+					}
+
+					if (deep && copy && ($.isPlainObject(copy) || (copyIsArray = $.isArray(copy)))) {
+						if (copyIsArray) {
+							copyIsArray = false;
+							clone = src && $.isArray(src) ? src : [];
+
+						} else {
+							clone = src && $.isPlainObject(src) ? src : {};
+						}
+
+						target[name] = $.extend(deep, clone, copy);
+
+					} else if (copy !== undefined) {
+						target[name] = copy;
+					}
+				}
+			}
+		}
+
+		return target;
+	};
+	/**
+	 * mui noop(function)
+	 */
+	$.noop = function() {};
+	/**
+	 * mui slice(array)
+	 */
+	$.slice = [].slice;
+	/**
+	 * mui filter(array)
+	 */
+	$.filter = [].filter;
+
+	$.type = function(obj) {
+		return obj == null ? String(obj) : class2type[{}.toString.call(obj)] || "object";
+	};
+	/**
+	 * mui isArray
+	 */
+	$.isArray = Array.isArray ||
+		function(object) {
+			return object instanceof Array;
+		};
+	/**
+	 * mui isArrayLike 
+	 * @param {Object} obj
+	 */
+	$.isArrayLike = function(obj) {
+		var length = !!obj && "length" in obj && obj.length;
+		var type = $.type(obj);
+		if (type === "function" || $.isWindow(obj)) {
+			return false;
+		}
+		return type === "array" || length === 0 ||
+			typeof length === "number" && length > 0 && (length - 1) in obj;
+	};
+	/**
+	 * mui isWindow(需考虑obj为undefined的情况)
+	 */
+	$.isWindow = function(obj) {
+		return obj != null && obj === obj.window;
+	};
+	/**
+	 * mui isObject
+	 */
+	$.isObject = function(obj) {
+		return $.type(obj) === "object";
+	};
+	/**
+	 * mui isPlainObject
+	 */
+	$.isPlainObject = function(obj) {
+		return $.isObject(obj) && !$.isWindow(obj) && Object.getPrototypeOf(obj) === Object.prototype;
+	};
+	/**
+	 * mui isEmptyObject
+	 * @param {Object} o
+	 */
+	$.isEmptyObject = function(o) {
+		for (var p in o) {
+			if (p !== undefined) {
+				return false;
+			}
+		}
+		return true;
+	};
+	/**
+	 * mui isFunction
+	 */
+	$.isFunction = function(value) {
+		return $.type(value) === "function";
+	};
+	/**
+	 * mui querySelectorAll
+	 * @param {type} selector
+	 * @param {type} context
+	 * @returns {Array}
+	 */
+	$.qsa = function(selector, context) {
+		context = context || document;
+		return $.slice.call(classSelectorRE.test(selector) ? context.getElementsByClassName(RegExp.$1) : tagSelectorRE.test(selector) ? context.getElementsByTagName(selector) : context.querySelectorAll(selector));
+	};
+	/**
+	 * ready(DOMContentLoaded)
+	 * @param {type} callback
+	 * @returns {_L6.$}
+	 */
+	$.ready = function(callback) {
+		if (readyRE.test(document.readyState)) {
+			callback($);
+		} else {
+			document.addEventListener('DOMContentLoaded', function() {
+				callback($);
+			}, false);
+		}
+		return this;
+	};
+	/**
+	 * 将 fn 缓存一段时间后, 再被调用执行
+	 * 此方法为了避免在 ms 段时间内, 执行 fn 多次. 常用于 resize , scroll , mousemove 等连续性事件中;
+	 * 当 ms 设置为 -1, 表示立即执行 fn, 即和直接调用 fn 一样;
+	 * 调用返回函数的 stop 停止最后一次的 buffer 效果
+	 * @param {Object} fn
+	 * @param {Object} ms
+	 * @param {Object} context
+	 */
+	$.buffer = function(fn, ms, context) {
+		var timer;
+		var lastStart = 0;
+		var lastEnd = 0;
+		var ms = ms || 150;
+
+		function run() {
+			if (timer) {
+				timer.cancel();
+				timer = 0;
+			}
+			lastStart = $.now();
+			fn.apply(context || this, arguments);
+			lastEnd = $.now();
+		}
+
+		return $.extend(function() {
+			if (
+				(!lastStart) || // 从未运行过
+				(lastEnd >= lastStart && $.now() - lastEnd > ms) || // 上次运行成功后已经超过ms毫秒
+				(lastEnd < lastStart && $.now() - lastStart > ms * 8) // 上次运行或未完成,后8*ms毫秒
+			) {
+				run.apply(this, arguments);
+			} else {
+				if (timer) {
+					timer.cancel();
+				}
+				timer = $.later(run, ms, null, $.slice.call(arguments));
+			}
+		}, {
+			stop: function() {
+				if (timer) {
+					timer.cancel();
+					timer = 0;
+				}
+			}
+		});
+	};
+	/**
+	 * each
+	 * @param {type} elements
+	 * @param {type} callback
+	 * @returns {_L8.$}
+	 */
+	$.each = function(elements, callback, hasOwnProperty) {
+		if (!elements) {
+			return this;
+		}
+		if (typeof elements.length === 'number') {
+			[].every.call(elements, function(el, idx) {
+				return callback.call(el, idx, el) !== false;
+			});
+		} else {
+			for (var key in elements) {
+				if (hasOwnProperty) {
+					if (elements.hasOwnProperty(key)) {
+						if (callback.call(elements[key], key, elements[key]) === false) return elements;
+					}
+				} else {
+					if (callback.call(elements[key], key, elements[key]) === false) return elements;
+				}
+			}
+		}
+		return this;
+	};
+	$.focus = function(element) {
+		if ($.os.ios) {
+			setTimeout(function() {
+				element.focus();
+			}, 10);
+		} else {
+			element.focus();
+		}
+	};
+	/**
+	 * trigger event
+	 * @param {type} element
+	 * @param {type} eventType
+	 * @param {type} eventData
+	 * @returns {_L8.$}
+	 */
+	$.trigger = function(element, eventType, eventData) {
+		element.dispatchEvent(new CustomEvent(eventType, {
+			detail: eventData,
+			bubbles: true,
+			cancelable: true
+		}));
+		return this;
+	};
+	/**
+	 * getStyles
+	 * @param {type} element
+	 * @param {type} property
+	 * @returns {styles}
+	 */
+	$.getStyles = function(element, property) {
+		var styles = element.ownerDocument.defaultView.getComputedStyle(element, null);
+		if (property) {
+			return styles.getPropertyValue(property) || styles[property];
+		}
+		return styles;
+	};
+	/**
+	 * parseTranslate
+	 * @param {type} translateString
+	 * @param {type} position
+	 * @returns {Object}
+	 */
+	$.parseTranslate = function(translateString, position) {
+		var result = translateString.match(translateRE || '');
+		if (!result || !result[1]) {
+			result = ['', '0,0,0'];
+		}
+		result = result[1].split(",");
+		result = {
+			x: parseFloat(result[0]),
+			y: parseFloat(result[1]),
+			z: parseFloat(result[2])
+		};
+		if (position && result.hasOwnProperty(position)) {
+			return result[position];
+		}
+		return result;
+	};
+	/**
+	 * parseTranslateMatrix
+	 * @param {type} translateString
+	 * @param {type} position
+	 * @returns {Object}
+	 */
+	$.parseTranslateMatrix = function(translateString, position) {
+		var matrix = translateString.match(translateMatrixRE);
+		var is3D = matrix && matrix[1];
+		if (matrix) {
+			matrix = matrix[2].split(",");
+			if (is3D === "3d")
+				matrix = matrix.slice(12, 15);
+			else {
+				matrix.push(0);
+				matrix = matrix.slice(4, 7);
+			}
+		} else {
+			matrix = [0, 0, 0];
+		}
+		var result = {
+			x: parseFloat(matrix[0]),
+			y: parseFloat(matrix[1]),
+			z: parseFloat(matrix[2])
+		};
+		if (position && result.hasOwnProperty(position)) {
+			return result[position];
+		}
+		return result;
+	};
+	$.hooks = {};
+	$.addAction = function(type, hook) {
+		var hooks = $.hooks[type];
+		if (!hooks) {
+			hooks = [];
+		}
+		hook.index = hook.index || 1000;
+		hooks.push(hook);
+		hooks.sort(function(a, b) {
+			return a.index - b.index;
+		});
+		$.hooks[type] = hooks;
+		return $.hooks[type];
+	};
+	$.doAction = function(type, callback) {
+		if ($.isFunction(callback)) { //指定了callback
+			$.each($.hooks[type], callback);
+		} else { //未指定callback,直接执行
+			$.each($.hooks[type], function(index, hook) {
+				return !hook.handle();
+			});
+		}
+	};
+	/**
+	 * setTimeout封装
+	 * @param {Object} fn
+	 * @param {Object} when
+	 * @param {Object} context
+	 * @param {Object} data
+	 */
+	$.later = function(fn, when, context, data) {
+		when = when || 0;
+		var m = fn;
+		var d = data;
+		var f;
+		var r;
+
+		if (typeof fn === 'string') {
+			m = context[fn];
+		}
+
+		f = function() {
+			m.apply(context, $.isArray(d) ? d : [d]);
+		};
+
+		r = setTimeout(f, when);
+
+		return {
+			id: r,
+			cancel: function() {
+				clearTimeout(r);
+			}
+		};
+	};
+	$.now = Date.now || function() {
+		return +new Date();
+	};
+	var class2type = {};
+	$.each(['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Object', 'Error'], function(i, name) {
+		class2type["[object " + name + "]"] = name.toLowerCase();
+	});
+	if (window.JSON) {
+		$.parseJSON = JSON.parse;
+	}
+	/**
+	 * $.fn
+	 */
+	$.fn = {
+		each: function(callback) {
+			[].every.call(this, function(el, idx) {
+				return callback.call(el, idx, el) !== false;
+			});
+			return this;
+		}
+	};
+
+	/**
+	 * 兼容 AMD 模块
+	 **/
+	if (typeof define === 'function' && define.amd) {
+		define('mui', [], function() {
+			return $;
+		});
+	}
+
+	return $;
+})(document);
+//window.mui = mui;
+//'$' in window || (window.$ = mui);
+/**
+ * $.os
+ * @param {type} $
+ * @returns {undefined}
+ */
+(function($, window) {
+	function detect(ua) {
+		this.os = {};
+		var funcs = [
+
+			function() { //wechat
+				var wechat = ua.match(/(MicroMessenger)\/([\d\.]+)/i);
+				if (wechat) { //wechat
+					this.os.wechat = {
+						version: wechat[2].replace(/_/g, '.')
+					};
+				}
+				return false;
+			},
+			function() { //android
+				var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
+				if (android) {
+					this.os.android = true;
+					this.os.version = android[2];
+
+					this.os.isBadAndroid = !(/Chrome\/\d/.test(window.navigator.appVersion));
+				}
+				return this.os.android === true;
+			},
+			function() { //ios
+				var iphone = ua.match(/(iPhone\sOS)\s([\d_]+)/);
+				if (iphone) { //iphone
+					this.os.ios = this.os.iphone = true;
+					this.os.version = iphone[2].replace(/_/g, '.');
+				} else {
+					var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
+					if (ipad) { //ipad
+						this.os.ios = this.os.ipad = true;
+						this.os.version = ipad[2].replace(/_/g, '.');
+					}
+				}
+				return this.os.ios === true;
+			}
+		];
+		[].every.call(funcs, function(func) {
+			return !func.call($);
+		});
+	}
+	detect.call($, navigator.userAgent);
+})(mui, window);
+/**
+ * $.os.plus
+ * @param {type} $
+ * @returns {undefined}
+ */
+(function($, document) {
+	function detect(ua) {
+		this.os = this.os || {};
+		var plus = ua.match(/Html5Plus/i); //TODO 5\+Browser?
+		if (plus) {
+			this.os.plus = true;
+			$(function() {
+				document.body.classList.add('mui-plus');
+			});
+			if (ua.match(/StreamApp/i)) { //TODO 最好有流应用自己的标识
+				this.os.stream = true;
+				$(function() {
+					document.body.classList.add('mui-plus-stream');
+				});
+			}
+		}
+	}
+	detect.call($, navigator.userAgent);
+})(mui, document);
+/**
+ * 仅提供简单的on,off(仅支持事件委托,不支持当前元素绑定,当前元素绑定请直接使用addEventListener,removeEventListener)
+ * @param {Object} $
+ */
+(function($) {
+	if ('ontouchstart' in window) {
+		$.isTouchable = true;
+		$.EVENT_START = 'touchstart';
+		$.EVENT_MOVE = 'touchmove';
+		$.EVENT_END = 'touchend';
+	} else {
+		$.isTouchable = false;
+		$.EVENT_START = 'mousedown';
+		$.EVENT_MOVE = 'mousemove';
+		$.EVENT_END = 'mouseup';
+	}
+	$.EVENT_CANCEL = 'touchcancel';
+	$.EVENT_CLICK = 'click';
+
+	var _mid = 1;
+	var delegates = {};
+	//需要wrap的函数
+	var eventMethods = {
+		preventDefault: 'isDefaultPrevented',
+		stopImmediatePropagation: 'isImmediatePropagationStopped',
+		stopPropagation: 'isPropagationStopped'
+	};
+	//默认true返回函数
+	var returnTrue = function() {
+		return true
+	};
+	//默认false返回函数
+	var returnFalse = function() {
+		return false
+	};
+	//wrap浏览器事件
+	var compatible = function(event, target) {
+		if (!event.detail) {
+			event.detail = {
+				currentTarget: target
+			};
+		} else {
+			event.detail.currentTarget = target;
+		}
+		$.each(eventMethods, function(name, predicate) {
+			var sourceMethod = event[name];
+			event[name] = function() {
+				this[predicate] = returnTrue;
+				return sourceMethod && sourceMethod.apply(event, arguments)
+			}
+			event[predicate] = returnFalse;
+		}, true);
+		return event;
+	};
+	//简单的wrap对象_mid
+	var mid = function(obj) {
+		return obj && (obj._mid || (obj._mid = _mid++));
+	};
+	//事件委托对象绑定的事件回调列表
+	var delegateFns = {};
+	//返回事件委托的wrap事件回调
+	var delegateFn = function(element, event, selector, callback) {
+		return function(e) {
+			//same event
+			var callbackObjs = delegates[element._mid][event];
+			var handlerQueue = [];
+			var target = e.target;
+			var selectorAlls = {};
+			for (; target && target !== document; target = target.parentNode) {
+				if (target === element) {
+					break;
+				}
+				if (~['click', 'tap', 'doubletap', 'longtap', 'hold'].indexOf(event) && (target.disabled || target.classList.contains('mui-disabled'))) {
+					break;
+				}
+				var matches = {};
+				$.each(callbackObjs, function(selector, callbacks) { //same selector
+					selectorAlls[selector] || (selectorAlls[selector] = $.qsa(selector, element));
+					if (selectorAlls[selector] && ~(selectorAlls[selector]).indexOf(target)) {
+						if (!matches[selector]) {
+							matches[selector] = callbacks;
+						}
+					}
+				}, true);
+				if (!$.isEmptyObject(matches)) {
+					handlerQueue.push({
+						element: target,
+						handlers: matches
+					});
+				}
+			}
+			selectorAlls = null;
+			e = compatible(e); //compatible event
+			$.each(handlerQueue, function(index, handler) {
+				target = handler.element;
+				var tagName = target.tagName;
+				if (event === 'tap' && (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && tagName !== 'SELECT')) {
+					e.preventDefault();
+					e.detail && e.detail.gesture && e.detail.gesture.preventDefault();
+				}
+				$.each(handler.handlers, function(index, handler) {
+					$.each(handler, function(index, callback) {
+						if (callback.call(target, e) === false) {
+							e.preventDefault();
+							e.stopPropagation();
+						}
+					}, true);
+				}, true)
+				if (e.isPropagationStopped()) {
+					return false;
+				}
+			}, true);
+		};
+	};
+	var findDelegateFn = function(element, event) {
+		var delegateCallbacks = delegateFns[mid(element)];
+		var result = [];
+		if (delegateCallbacks) {
+			result = [];
+			if (event) {
+				var filterFn = function(fn) {
+					return fn.type === event;
+				}
+				return delegateCallbacks.filter(filterFn);
+			} else {
+				result = delegateCallbacks;
+			}
+		}
+		return result;
+	};
+	var preventDefaultException = /^(INPUT|TEXTAREA|BUTTON|SELECT)$/;
+	/**
+	 * mui delegate events
+	 * @param {type} event
+	 * @param {type} selector
+	 * @param {type} callback
+	 * @returns {undefined}
+	 */
+	$.fn.on = function(event, selector, callback) { //仅支持简单的事件委托,主要是tap事件使用,类似mouse,focus之类暂不封装支持
+		return this.each(function() {
+			var element = this;
+			mid(element);
+			mid(callback);
+			var isAddEventListener = false;
+			var delegateEvents = delegates[element._mid] || (delegates[element._mid] = {});
+			var delegateCallbackObjs = delegateEvents[event] || ((delegateEvents[event] = {}));
+			if ($.isEmptyObject(delegateCallbackObjs)) {
+				isAddEventListener = true;
+			}
+			var delegateCallbacks = delegateCallbackObjs[selector] || (delegateCallbackObjs[selector] = []);
+			delegateCallbacks.push(callback);
+			if (isAddEventListener) {
+				var delegateFnArray = delegateFns[mid(element)];
+				if (!delegateFnArray) {
+					delegateFnArray = [];
+				}
+				var delegateCallback = delegateFn(element, event, selector, callback);
+				delegateFnArray.push(delegateCallback);
+				delegateCallback.i = delegateFnArray.length - 1;
+				delegateCallback.type = event;
+				delegateFns[mid(element)] = delegateFnArray;
+				element.addEventListener(event, delegateCallback);
+				if (event === 'tap') { //TODO 需要找个更好的解决方案
+					element.addEventListener('click', function(e) {
+						if (e.target) {
+							var tagName = e.target.tagName;
+							if (!preventDefaultException.test(tagName)) {
+								if (tagName === 'A') {
+									var href = e.target.href;
+									if (!(href && ~href.indexOf('tel:'))) {
+										e.preventDefault();
+									}
+								} else {
+									e.preventDefault();
+								}
+							}
+						}
+					});
+				}
+			}
+		});
+	};
+	$.fn.off = function(event, selector, callback) {
+		return this.each(function() {
+			var _mid = mid(this);
+			if (!event) { //mui(selector).off();
+				delegates[_mid] && delete delegates[_mid];
+			} else if (!selector) { //mui(selector).off(event);
+				delegates[_mid] && delete delegates[_mid][event];
+			} else if (!callback) { //mui(selector).off(event,selector);
+				delegates[_mid] && delegates[_mid][event] && delete delegates[_mid][event][selector];
+			} else { //mui(selector).off(event,selector,callback);
+				var delegateCallbacks = delegates[_mid] && delegates[_mid][event] && delegates[_mid][event][selector];
+				$.each(delegateCallbacks, function(index, delegateCallback) {
+					if (mid(delegateCallback) === mid(callback)) {
+						delegateCallbacks.splice(index, 1);
+						return false;
+					}
+				}, true);
+			}
+			if (delegates[_mid]) {
+				//如果off掉了所有当前element的指定的event事件,则remove掉当前element的delegate回调
+				if ((!delegates[_mid][event] || $.isEmptyObject(delegates[_mid][event]))) {
+					findDelegateFn(this, event).forEach(function(fn) {
+						this.removeEventListener(fn.type, fn);
+						delete delegateFns[_mid][fn.i];
+					}.bind(this));
+				}
+			} else {
+				//如果delegates[_mid]已不存在,删除所有
+				findDelegateFn(this).forEach(function(fn) {
+					this.removeEventListener(fn.type, fn);
+					delete delegateFns[_mid][fn.i];
+				}.bind(this));
+			}
+		});
+
+	};
+})(mui);
+/**
+ * mui target(action>popover>modal>tab>toggle)
+ */
+(function($, window, document) {
+	/**
+	 * targets
+	 */
+	$.targets = {};
+	/**
+	 * target handles
+	 */
+	$.targetHandles = [];
+	/**
+	 * register target
+	 * @param {type} target
+	 * @returns {$.targets}
+	 */
+	$.registerTarget = function(target) {
+
+		target.index = target.index || 1000;
+
+		$.targetHandles.push(target);
+
+		$.targetHandles.sort(function(a, b) {
+			return a.index - b.index;
+		});
+
+		return $.targetHandles;
+	};
+	window.addEventListener($.EVENT_START, function(event) {
+		var target = event.target;
+		var founds = {};
+		for (; target && target !== document; target = target.parentNode) {
+			var isFound = false;
+			$.each($.targetHandles, function(index, targetHandle) {
+				var name = targetHandle.name;
+				if (!isFound && !founds[name] && targetHandle.hasOwnProperty('handle')) {
+					$.targets[name] = targetHandle.handle(event, target);
+					if ($.targets[name]) {
+						founds[name] = true;
+						if (targetHandle.isContinue !== true) {
+							isFound = true;
+						}
+					}
+				} else {
+					if (!founds[name]) {
+						if (targetHandle.isReset !== false)
+							$.targets[name] = false;
+					}
+				}
+			});
+			if (isFound) {
+				break;
+			}
+		}
+	});
+	window.addEventListener('click', function(event) { //解决touch与click的target不一致的问题(比如链接边缘点击时,touch的target为html,而click的target为A)
+		var target = event.target;
+		var isFound = false;
+		for (; target && target !== document; target = target.parentNode) {
+			if (target.tagName === 'A') {
+				$.each($.targetHandles, function(index, targetHandle) {
+					var name = targetHandle.name;
+					if (targetHandle.hasOwnProperty('handle')) {
+						if (targetHandle.handle(event, target)) {
+							isFound = true;
+							event.preventDefault();
+							return false;
+						}
+					}
+				});
+				if (isFound) {
+					break;
+				}
+			}
+		}
+	});
+})(mui, window, document);
+/**
+ * fixed trim
+ * @param {type} undefined
+ * @returns {undefined}
+ */
+(function(undefined) {
+	if (String.prototype.trim === undefined) { // fix for iOS 3.2
+		String.prototype.trim = function() {
+			return this.replace(/^\s+|\s+$/g, '');
+		};
+	}
+	Object.setPrototypeOf = Object.setPrototypeOf || function(obj, proto) {
+		obj['__proto__'] = proto;
+		return obj;
+	};
+
+})();
+/**
+ * fixed CustomEvent
+ */
+(function() {
+	if (typeof window.CustomEvent === 'undefined') {
+		function CustomEvent(event, params) {
+			params = params || {
+				bubbles: false,
+				cancelable: false,
+				detail: undefined
+			};
+			var evt = document.createEvent('Events');
+			var bubbles = true;
+			for (var name in params) {
+				(name === 'bubbles') ? (bubbles = !!params[name]) : (evt[name] = params[name]);
+			}
+			evt.initEvent(event, bubbles, true);
+			return evt;
+		};
+		CustomEvent.prototype = window.Event.prototype;
+		window.CustomEvent = CustomEvent;
+	}
+})();
+/*
+	A shim for non ES5 supporting browsers.
+	Adds function bind to Function prototype, so that you can do partial application.
+	Works even with the nasty thing, where the first word is the opposite of extranet, the second one is the profession of Columbus, and the version number is 9, flipped 180 degrees.
+*/
+
+Function.prototype.bind = Function.prototype.bind || function(to) {
+	// Make an array of our arguments, starting from second argument
+	var partial = Array.prototype.splice.call(arguments, 1),
+		// We'll need the original function.
+		fn = this;
+	var bound = function() {
+			// Join the already applied arguments to the now called ones (after converting to an array again).
+			var args = partial.concat(Array.prototype.splice.call(arguments, 0));
+			// If not being called as a constructor
+			if (!(this instanceof bound)) {
+				// return the result of the function called bound to target and partially applied.
+				return fn.apply(to, args);
+			}
+			// If being called as a constructor, apply the function bound to self.
+			fn.apply(this, args);
+		}
+		// Attach the prototype of the function to our newly created function.
+	bound.prototype = fn.prototype;
+	return bound;
+};
+/**
+ * mui fixed classList
+ * @param {type} document
+ * @returns {undefined}
+ */
+(function(document) {
+    if (!("classList" in document.documentElement) && Object.defineProperty && typeof HTMLElement !== 'undefined') {
+
+        Object.defineProperty(HTMLElement.prototype, 'classList', {
+            get: function() {
+                var self = this;
+                function update(fn) {
+                    return function(value) {
+                        var classes = self.className.split(/\s+/),
+                                index = classes.indexOf(value);
+
+                        fn(classes, index, value);
+                        self.className = classes.join(" ");
+                    };
+                }
+
+                var ret = {
+                    add: update(function(classes, index, value) {
+                        ~index || classes.push(value);
+                    }),
+                    remove: update(function(classes, index) {
+                        ~index && classes.splice(index, 1);
+                    }),
+                    toggle: update(function(classes, index, value) {
+                        ~index ? classes.splice(index, 1) : classes.push(value);
+                    }),
+                    contains: function(value) {
+                        return !!~self.className.split(/\s+/).indexOf(value);
+                    },
+                    item: function(i) {
+                        return self.className.split(/\s+/)[i] || null;
+                    }
+                };
+
+                Object.defineProperty(ret, 'length', {
+                    get: function() {
+                        return self.className.split(/\s+/).length;
+                    }
+                });
+
+                return ret;
+            }
+        });
+    }
+})(document);
+
+/**
+ * mui fixed requestAnimationFrame
+ * @param {type} window
+ * @returns {undefined}
+ */
+(function(window) {
+	if (!window.requestAnimationFrame) {
+		var lastTime = 0;
+		window.requestAnimationFrame = window.webkitRequestAnimationFrame || function(callback, element) {
+			var currTime = new Date().getTime();
+			var timeToCall = Math.max(0, 16.7 - (currTime - lastTime));
+			var id = window.setTimeout(function() {
+				callback(currTime + timeToCall);
+			}, timeToCall);
+			lastTime = currTime + timeToCall;
+			return id;
+		};
+		window.cancelAnimationFrame = window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || function(id) {
+			clearTimeout(id);
+		};
+	};
+}(window));
+/**
+ * fastclick(only for radio,checkbox)
+ */
+(function($, window, name) {
+	if (!$.os.android && !$.os.ios) { //目前仅识别android和ios
+		return;
+	}
+	if (window.FastClick) {
+		return;
+	}
+
+	var handle = function(event, target) {
+		if (target.tagName === 'LABEL') {
+			if (target.parentNode) {
+				target = target.parentNode.querySelector('input');
+			}
+		}
+		if (target && (target.type === 'radio' || target.type === 'checkbox')) {
+			if (!target.disabled) { //disabled
+				return target;
+			}
+		}
+		return false;
+	};
+
+	$.registerTarget({
+		name: name,
+		index: 40,
+		handle: handle,
+		target: false
+	});
+	var dispatchEvent = function(event) {
+		var targetElement = $.targets.click;
+		if (targetElement) {
+			var clickEvent, touch;
+			// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect
+			if (document.activeElement && document.activeElement !== targetElement) {
+				document.activeElement.blur();
+			}
+			touch = event.detail.gesture.changedTouches[0];
+			// Synthesise a click event, with an extra attribute so it can be tracked
+			clickEvent = document.createEvent('MouseEvents');
+			clickEvent.initMouseEvent('click', true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
+			clickEvent.forwardedTouchEvent = true;
+			targetElement.dispatchEvent(clickEvent);
+			event.detail && event.detail.gesture.preventDefault();
+		}
+	};
+	window.addEventListener('tap', dispatchEvent);
+	window.addEventListener('doubletap', dispatchEvent);
+	//捕获
+	window.addEventListener('click', function(event) {
+		if ($.targets.click) {
+			if (!event.forwardedTouchEvent) { //stop click
+				if (event.stopImmediatePropagation) {
+					event.stopImmediatePropagation();
+				} else {
+					// Part of the hack for browsers that don't support Event#stopImmediatePropagation
+					event.propagationStopped = true;
+				}
+				event.stopPropagation();
+				event.preventDefault();
+				return false;
+			}
+		}
+	}, true);
+
+})(mui, window, 'click');
+(function($, document) {
+	$(function() {
+		if (!$.os.ios) {
+			return;
+		}
+		var CLASS_FOCUSIN = 'mui-focusin';
+		var CLASS_BAR_TAB = 'mui-bar-tab';
+		var CLASS_BAR_FOOTER = 'mui-bar-footer';
+		var CLASS_BAR_FOOTER_SECONDARY = 'mui-bar-footer-secondary';
+		var CLASS_BAR_FOOTER_SECONDARY_TAB = 'mui-bar-footer-secondary-tab';
+		// var content = document.querySelector('.' + CLASS_CONTENT);
+		// if (content) {
+		// 	document.body.insertBefore(content, document.body.firstElementChild);
+		// }
+		document.addEventListener('focusin', function(e) {
+			if ($.os.plus) { //在父webview里边不fix
+				if (window.plus) {
+					if (plus.webview.currentWebview().children().length > 0) {
+						return;
+					}
+				}
+			}
+			var target = e.target;
+			//TODO 需考虑所有键盘弹起的情况
+			if (target.tagName && (target.tagName === 'TEXTAREA' || (target.tagName === 'INPUT' && (target.type === 'text' || target.type === 'search' || target.type === 'number')))) {
+				if (target.disabled || target.readOnly) {
+					return;
+				}
+				document.body.classList.add(CLASS_FOCUSIN);
+				var isFooter = false;
+				for (; target && target !== document; target = target.parentNode) {
+					var classList = target.classList;
+					if (classList && classList.contains(CLASS_BAR_TAB) || classList.contains(CLASS_BAR_FOOTER) || classList.contains(CLASS_BAR_FOOTER_SECONDARY) || classList.contains(CLASS_BAR_FOOTER_SECONDARY_TAB)) {
+						isFooter = true;
+						break;
+					}
+				}
+				if (isFooter) {
+					var scrollTop = document.body.scrollHeight;
+					var scrollLeft = document.body.scrollLeft;
+					setTimeout(function() {
+						window.scrollTo(scrollLeft, scrollTop);
+					}, 20);
+				}
+			}
+		});
+		document.addEventListener('focusout', function(e) {
+			var classList = document.body.classList;
+			if (classList.contains(CLASS_FOCUSIN)) {
+				classList.remove(CLASS_FOCUSIN);
+				setTimeout(function() {
+					window.scrollTo(document.body.scrollLeft, document.body.scrollTop);
+				}, 20);
+			}
+		});
+	});
+})(mui, document);
+/**
+ * mui namespace(optimization)
+ * @param {type} $
+ * @returns {undefined}
+ */
+(function($) {
+	$.namespace = 'mui';
+	$.classNamePrefix = $.namespace + '-';
+	$.classSelectorPrefix = '.' + $.classNamePrefix;
+	/**
+	 * 返回正确的className
+	 * @param {type} className
+	 * @returns {String}
+	 */
+	$.className = function(className) {
+		return $.classNamePrefix + className;
+	};
+	/**
+	 * 返回正确的classSelector
+	 * @param {type} classSelector
+	 * @returns {String}
+	 */
+	$.classSelector = function(classSelector) {
+		return classSelector.replace(/\./g, $.classSelectorPrefix);
+	};
+	/**
+         * 返回正确的eventName
+         * @param {type} event
+         * @param {type} module
+         * @returns {String}
+         */
+	$.eventName = function(event, module) {
+		return event + ($.namespace ? ('.' + $.namespace) : '') + ( module ? ('.' + module) : '');
+	};
+})(mui);
+
+/**
+ * mui gestures
+ * @param {type} $
+ * @param {type} window
+ * @returns {undefined}
+ */
+(function($, window) {
+	$.gestures = {
+		session: {}
+	};
+	/**
+	 * Gesture preventDefault
+	 * @param {type} e
+	 * @returns {undefined}
+	 */
+	$.preventDefault = function(e) {
+		e.preventDefault();
+	};
+	/**
+	 * Gesture stopPropagation
+	 * @param {type} e
+	 * @returns {undefined}
+	 */
+	$.stopPropagation = function(e) {
+		e.stopPropagation();
+	};
+
+	/**
+	 * register gesture
+	 * @param {type} gesture
+	 * @returns {$.gestures}
+	 */
+	$.addGesture = function(gesture) {
+		return $.addAction('gestures', gesture);
+
+	};
+
+	var round = Math.round;
+	var abs = Math.abs;
+	var sqrt = Math.sqrt;
+	var atan = Math.atan;
+	var atan2 = Math.atan2;
+	/**
+	 * distance
+	 * @param {type} p1
+	 * @param {type} p2
+	 * @returns {Number}
+	 */
+	var getDistance = function(p1, p2, props) {
+		if(!props) {
+			props = ['x', 'y'];
+		}
+		var x = p2[props[0]] - p1[props[0]];
+		var y = p2[props[1]] - p1[props[1]];
+		return sqrt((x * x) + (y * y));
+	};
+	/**
+	 * scale
+	 * @param {Object} starts
+	 * @param {Object} moves
+	 */
+	var getScale = function(starts, moves) {
+		if(starts.length >= 2 && moves.length >= 2) {
+			var props = ['pageX', 'pageY'];
+			return getDistance(moves[1], moves[0], props) / getDistance(starts[1], starts[0], props);
+		}
+		return 1;
+	};
+	/**
+	 * angle
+	 * @param {type} p1
+	 * @param {type} p2
+	 * @returns {Number}
+	 */
+	var getAngle = function(p1, p2, props) {
+		if(!props) {
+			props = ['x', 'y'];
+		}
+		var x = p2[props[0]] - p1[props[0]];
+		var y = p2[props[1]] - p1[props[1]];
+		return atan2(y, x) * 180 / Math.PI;
+	};
+	/**
+	 * direction
+	 * @param {Object} x
+	 * @param {Object} y
+	 */
+	var getDirection = function(x, y) {
+		if(x === y) {
+			return '';
+		}
+		if(abs(x) >= abs(y)) {
+			return x > 0 ? 'left' : 'right';
+		}
+		return y > 0 ? 'up' : 'down';
+	};
+	/**
+	 * rotation
+	 * @param {Object} start
+	 * @param {Object} end
+	 */
+	var getRotation = function(start, end) {
+		var props = ['pageX', 'pageY'];
+		return getAngle(end[1], end[0], props) - getAngle(start[1], start[0], props);
+	};
+	/**
+	 * px per ms
+	 * @param {Object} deltaTime
+	 * @param {Object} x
+	 * @param {Object} y
+	 */
+	var getVelocity = function(deltaTime, x, y) {
+		return {
+			x: x / deltaTime || 0,
+			y: y / deltaTime || 0
+		};
+	};
+	/**
+	 * detect gestures
+	 * @param {type} event
+	 * @param {type} touch
+	 * @returns {undefined}
+	 */
+	var detect = function(event, touch) {
+		if($.gestures.stoped) {
+			return;
+		}
+		$.doAction('gestures', function(index, gesture) {
+			if(!$.gestures.stoped) {
+				if($.options.gestureConfig[gesture.name] !== false) {
+					gesture.handle(event, touch);
+				}
+			}
+		});
+	};
+	/**
+	 * 暂时无用
+	 * @param {Object} node
+	 * @param {Object} parent
+	 */
+	var hasParent = function(node, parent) {
+		while(node) {
+			if(node == parent) {
+				return true;
+			}
+			node = node.parentNode;
+		}
+		return false;
+	};
+
+	var uniqueArray = function(src, key, sort) {
+		var results = [];
+		var values = [];
+		var i = 0;
+
+		while(i < src.length) {
+			var val = key ? src[i][key] : src[i];
+			if(values.indexOf(val) < 0) {
+				results.push(src[i]);
+			}
+			values[i] = val;
+			i++;
+		}
+
+		if(sort) {
+			if(!key) {
+				results = results.sort();
+			} else {
+				results = results.sort(function sortUniqueArray(a, b) {
+					return a[key] > b[key];
+				});
+			}
+		}
+
+		return results;
+	};
+	var getMultiCenter = function(touches) {
+		var touchesLength = touches.length;
+		if(touchesLength === 1) {
+			return {
+				x: round(touches[0].pageX),
+				y: round(touches[0].pageY)
+			};
+		}
+
+		var x = 0;
+		var y = 0;
+		var i = 0;
+		while(i < touchesLength) {
+			x += touches[i].pageX;
+			y += touches[i].pageY;
+			i++;
+		}
+
+		return {
+			x: round(x / touchesLength),
+			y: round(y / touchesLength)
+		};
+	};
+	var multiTouch = function() {
+		return $.options.gestureConfig.pinch;
+	};
+	var copySimpleTouchData = function(touch) {
+		var touches = [];
+		var i = 0;
+		while(i < touch.touches.length) {
+			touches[i] = {
+				pageX: round(touch.touches[i].pageX),
+				pageY: round(touch.touches[i].pageY)
+			};
+			i++;
+		}
+		return {
+			timestamp: $.now(),
+			gesture: touch.gesture,
+			touches: touches,
+			center: getMultiCenter(touch.touches),
+			deltaX: touch.deltaX,
+			deltaY: touch.deltaY
+		};
+	};
+
+	var calDelta = function(touch) {
+		var session = $.gestures.session;
+		var center = touch.center;
+		var offset = session.offsetDelta || {};
+		var prevDelta = session.prevDelta || {};
+		var prevTouch = session.prevTouch || {};
+
+		if(touch.gesture.type === $.EVENT_START || touch.gesture.type === $.EVENT_END) {
+			prevDelta = session.prevDelta = {
+				x: prevTouch.deltaX || 0,
+				y: prevTouch.deltaY || 0
+			};
+
+			offset = session.offsetDelta = {
+				x: center.x,
+				y: center.y
+			};
+		}
+		touch.deltaX = prevDelta.x + (center.x - offset.x);
+		touch.deltaY = prevDelta.y + (center.y - offset.y);
+	};
+	var calTouchData = function(touch) {
+		var session = $.gestures.session;
+		var touches = touch.touches;
+		var touchesLength = touches.length;
+
+		if(!session.firstTouch) {
+			session.firstTouch = copySimpleTouchData(touch);
+		}
+
+		if(multiTouch() && touchesLength > 1 && !session.firstMultiTouch) {
+			session.firstMultiTouch = copySimpleTouchData(touch);
+		} else if(touchesLength === 1) {
+			session.firstMultiTouch = false;
+		}
+
+		var firstTouch = session.firstTouch;
+		var firstMultiTouch = session.firstMultiTouch;
+		var offsetCenter = firstMultiTouch ? firstMultiTouch.center : firstTouch.center;
+
+		var center = touch.center = getMultiCenter(touches);
+		touch.timestamp = $.now();
+		touch.deltaTime = touch.timestamp - firstTouch.timestamp;
+
+		touch.angle = getAngle(offsetCenter, center);
+		touch.distance = getDistance(offsetCenter, center);
+
+		calDelta(touch);
+
+		touch.offsetDirection = getDirection(touch.deltaX, touch.deltaY);
+
+		touch.scale = firstMultiTouch ? getScale(firstMultiTouch.touches, touches) : 1;
+		touch.rotation = firstMultiTouch ? getRotation(firstMultiTouch.touches, touches) : 0;
+
+		calIntervalTouchData(touch);
+
+	};
+	var CAL_INTERVAL = 25;
+	var calIntervalTouchData = function(touch) {
+		var session = $.gestures.session;
+		var last = session.lastInterval || touch;
+		var deltaTime = touch.timestamp - last.timestamp;
+		var velocity;
+		var velocityX;
+		var velocityY;
+		var direction;
+
+		if(touch.gesture.type != $.EVENT_CANCEL && (deltaTime > CAL_INTERVAL || last.velocity === undefined)) {
+			var deltaX = last.deltaX - touch.deltaX;
+			var deltaY = last.deltaY - touch.deltaY;
+
+			var v = getVelocity(deltaTime, deltaX, deltaY);
+			velocityX = v.x;
+			velocityY = v.y;
+			velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;
+			direction = getDirection(deltaX, deltaY) || last.direction;
+
+			session.lastInterval = touch;
+		} else {
+			velocity = last.velocity;
+			velocityX = last.velocityX;
+			velocityY = last.velocityY;
+			direction = last.direction;
+		}
+
+		touch.velocity = velocity;
+		touch.velocityX = velocityX;
+		touch.velocityY = velocityY;
+		touch.direction = direction;
+	};
+	var targetIds = {};
+	var convertTouches = function(touches) {
+		for(var i = 0; i < touches.length; i++) {
+			!touches['identifier'] && (touches['identifier'] = 0);
+		}
+		return touches;
+	};
+	var getTouches = function(event, touch) {
+		var allTouches = convertTouches($.slice.call(event.touches || [event]));
+
+		var type = event.type;
+
+		var targetTouches = [];
+		var changedTargetTouches = [];
+
+		//当touchstart或touchmove且touches长度为1,直接获得all和changed
+		if((type === $.EVENT_START || type === $.EVENT_MOVE) && allTouches.length === 1) {
+			targetIds[allTouches[0].identifier] = true;
+			targetTouches = allTouches;
+			changedTargetTouches = allTouches;
+			touch.target = event.target;
+		} else {
+			var i = 0;
+			var targetTouches = [];
+			var changedTargetTouches = [];
+			var changedTouches = convertTouches($.slice.call(event.changedTouches || [event]));
+
+			touch.target = event.target;
+			var sessionTarget = $.gestures.session.target || event.target;
+			targetTouches = allTouches.filter(function(touch) {
+				return hasParent(touch.target, sessionTarget);
+			});
+
+			if(type === $.EVENT_START) {
+				i = 0;
+				while(i < targetTouches.length) {
+					targetIds[targetTouches[i].identifier] = true;
+					i++;
+				}
+			}
+
+			i = 0;
+			while(i < changedTouches.length) {
+				if(targetIds[changedTouches[i].identifier]) {
+					changedTargetTouches.push(changedTouches[i]);
+				}
+				if(type === $.EVENT_END || type === $.EVENT_CANCEL) {
+					delete targetIds[changedTouches[i].identifier];
+				}
+				i++;
+			}
+
+			if(!changedTargetTouches.length) {
+				return false;
+			}
+		}
+		targetTouches = uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true);
+		var touchesLength = targetTouches.length;
+		var changedTouchesLength = changedTargetTouches.length;
+		if(type === $.EVENT_START && touchesLength - changedTouchesLength === 0) { //first
+			touch.isFirst = true;
+			$.gestures.touch = $.gestures.session = {
+				target: event.target
+			};
+		}
+		touch.isFinal = ((type === $.EVENT_END || type === $.EVENT_CANCEL) && (touchesLength - changedTouchesLength === 0));
+
+		touch.touches = targetTouches;
+		touch.changedTouches = changedTargetTouches;
+		return true;
+
+	};
+	var handleTouchEvent = function(event) {
+		var touch = {
+			gesture: event
+		};
+		var touches = getTouches(event, touch);
+		if(!touches) {
+			return;
+		}
+		calTouchData(touch);
+		detect(event, touch);
+		$.gestures.session.prevTouch = touch;
+		if(event.type === $.EVENT_END && !$.isTouchable) {
+			$.gestures.touch = $.gestures.session = {};
+		}
+	};
+	var supportsPassive = (function checkPassiveListener() {
+		var supportsPassive = false;
+		try {
+			var opts = Object.defineProperty({}, 'passive', {
+				get: function get() {
+					supportsPassive = true;
+				},
+			});
+			window.addEventListener('testPassiveListener', null, opts);
+		} catch(e) {
+			// No support
+		}
+		return supportsPassive;
+	}())
+	window.addEventListener($.EVENT_START, handleTouchEvent);
+	window.addEventListener($.EVENT_MOVE, handleTouchEvent, supportsPassive ? {
+		passive: false,
+		capture: false
+	} : false);
+	window.addEventListener($.EVENT_END, handleTouchEvent);
+	window.addEventListener($.EVENT_CANCEL, handleTouchEvent);
+	//fixed hashchange(android)
+	window.addEventListener($.EVENT_CLICK, function(e) {
+		//TODO 应该判断当前target是不是在targets.popover内部,而不是非要相等
+		if(($.os.android || $.os.ios) && (($.targets.popover && e.target === $.targets.popover) || ($.targets.tab) || $.targets.offcanvas || $.targets.modal)) {
+			e.preventDefault();
+		}
+	}, true);
+
+	//增加原生滚动识别
+	$.isScrolling = false;
+	var scrollingTimeout = null;
+	window.addEventListener('scroll', function() {
+		$.isScrolling = true;
+		scrollingTimeout && clearTimeout(scrollingTimeout);
+		scrollingTimeout = setTimeout(function() {
+			$.isScrolling = false;
+		}, 250);
+	});
+})(mui, window);
+/**
+ * mui gesture flick[left|right|up|down]
+ * @param {type} $
+ * @param {type} name
+ * @returns {undefined}
+ */
+(function($, name) {
+	var flickStartTime = 0;
+	var handle = function(event, touch) {
+		var session = $.gestures.session;
+		var options = this.options;
+		var now = $.now();
+		switch (event.type) {
+			case $.EVENT_MOVE:
+				if (now - flickStartTime > 300) {
+					flickStartTime = now;
+					session.flickStart = touch.center;
+				}
+				break;
+			case $.EVENT_END:
+			case $.EVENT_CANCEL:
+				touch.flick = false;
+				if (session.flickStart && options.flickMaxTime > (now - flickStartTime) && touch.distance > options.flickMinDistince) {
+					touch.flick = true;
+					touch.flickTime = now - flickStartTime;
+					touch.flickDistanceX = touch.center.x - session.flickStart.x;
+					touch.flickDistanceY = touch.center.y - session.flickStart.y;
+					$.trigger(session.target, name, touch);
+					$.trigger(session.target, name + touch.direction, touch);
+				}
+				break;
+		}
+
+	};
+	/**
+	 * mui gesture flick
+	 */
+	$.addGesture({
+		name: name,
+		index: 5,
+		handle: handle,
+		options: {
+			flickMaxTime: 200,
+			flickMinDistince: 10
+		}
+	});
+})(mui, 'flick');
+/**
+ * mui gesture swipe[left|right|up|down]
+ * @param {type} $
+ * @param {type} name
+ * @returns {undefined}
+ */
+(function($, name) {
+	var handle = function(event, touch) {
+		var session = $.gestures.session;
+		if (event.type === $.EVENT_END || event.type === $.EVENT_CANCEL) {
+			var options = this.options;
+			touch.swipe = false;
+			//TODO 后续根据velocity计算
+			if (touch.direction && options.swipeMaxTime > touch.deltaTime && touch.distance > options.swipeMinDistince) {
+				touch.swipe = true;
+				$.trigger(session.target, name, touch);
+				$.trigger(session.target, name + touch.direction, touch);
+			}
+		}
+	};
+	/**
+	 * mui gesture swipe
+	 */
+	$.addGesture({
+		name: name,
+		index: 10,
+		handle: handle,
+		options: {
+			swipeMaxTime: 300,
+			swipeMinDistince: 18
+		}
+	});
+})(mui, 'swipe');
+/**
+ * mui gesture drag[start|left|right|up|down|end]
+ * @param {type} $
+ * @param {type} name
+ * @returns {undefined}
+ */
+(function($, name) {
+	var handle = function(event, touch) {
+		var session = $.gestures.session;
+		switch (event.type) {
+			case $.EVENT_START:
+				break;
+			case $.EVENT_MOVE:
+				if (!touch.direction || !session.target) {
+					return;
+				}
+				//修正direction,可在session期间自行锁定拖拽方向,方便开发scroll类不同方向拖拽插件嵌套
+				if (session.lockDirection && session.startDirection) {
+					if (session.startDirection && session.startDirection !== touch.direction) {
+						if (session.startDirection === 'up' || session.startDirection === 'down') {
+							touch.direction = touch.deltaY < 0 ? 'up' : 'down';
+						} else {
+							touch.direction = touch.deltaX < 0 ? 'left' : 'right';
+						}
+					}
+				}
+
+				if (!session.drag) {
+					session.drag = true;
+					$.trigger(session.target, name + 'start', touch);
+				}
+				$.trigger(session.target, name, touch);
+				$.trigger(session.target, name + touch.direction, touch);
+				break;
+			case $.EVENT_END:
+			case $.EVENT_CANCEL:
+				if (session.drag && touch.isFinal) {
+					$.trigger(session.target, name + 'end', touch);
+				}
+				break;
+		}
+	};
+	/**
+	 * mui gesture drag
+	 */
+	$.addGesture({
+		name: name,
+		index: 20,
+		handle: handle,
+		options: {
+			fingers: 1
+		}
+	});
+})(mui, 'drag');
+/**
+ * mui gesture tap and doubleTap
+ * @param {type} $
+ * @param {type} name
+ * @returns {undefined}
+ */
+(function($, name) {
+	var lastTarget;
+	var lastTapTime;
+	var handle = function(event, touch) {
+		var session = $.gestures.session;
+		var options = this.options;
+		switch (event.type) {
+			case $.EVENT_END:
+				if (!touch.isFinal) {
+					return;
+				}
+				var target = session.target;
+				if (!target || (target.disabled || (target.classList && target.classList.contains('mui-disabled')))) {
+					return;
+				}
+				if (touch.distance < options.tapMaxDistance && touch.deltaTime < options.tapMaxTime) {
+					if ($.options.gestureConfig.doubletap && lastTarget && (lastTarget === target)) { //same target
+						if (lastTapTime && (touch.timestamp - lastTapTime) < options.tapMaxInterval) {
+							$.trigger(target, 'doubletap', touch);
+							lastTapTime = $.now();
+							lastTarget = target;
+							return;
+						}
+					}
+					$.trigger(target, name, touch);
+					lastTapTime = $.now();
+					lastTarget = target;
+				}
+				break;
+		}
+	};
+	/**
+	 * mui gesture tap
+	 */
+	$.addGesture({
+		name: name,
+		index: 30,
+		handle: handle,
+		options: {
+			fingers: 1,
+			tapMaxInterval: 300,
+			tapMaxDistance: 5,
+			tapMaxTime: 250
+		}
+	});
+})(mui, 'tap');
+/**
+ * mui gesture longtap
+ * @param {type} $
+ * @param {type} name
+ * @returns {undefined}
+ */
+(function($, name) {
+	var timer;
+	var handle = function(event, touch) {
+		var session = $.gestures.session;
+		var options = this.options;
+		switch (event.type) {
+			case $.EVENT_START:
+				clearTimeout(timer);
+				timer = setTimeout(function() {
+					$.trigger(session.target, name, touch);
+				}, options.holdTimeout);
+				break;
+			case $.EVENT_MOVE:
+				if (touch.distance > options.holdThreshold) {
+					clearTimeout(timer);
+				}
+				break;
+			case $.EVENT_END:
+			case $.EVENT_CANCEL:
+				clearTimeout(timer);
+				break;
+		}
+	};
+	/**
+	 * mui gesture longtap
+	 */
+	$.addGesture({
+		name: name,
+		index: 10,
+		handle: handle,
+		options: {
+			fingers: 1,
+			holdTimeout: 500,
+			holdThreshold: 2
+		}
+	});
+})(mui, 'longtap');
+/**
+ * mui gesture hold
+ * @param {type} $
+ * @param {type} name
+ * @returns {undefined}
+ */
+(function($, name) {
+	var timer;
+	var handle = function(event, touch) {
+		var session = $.gestures.session;
+		var options = this.options;
+		switch (event.type) {
+			case $.EVENT_START:
+				if ($.options.gestureConfig.hold) {
+					timer && clearTimeout(timer);
+					timer = setTimeout(function() {
+						touch.hold = true;
+						$.trigger(session.target, name, touch);
+					}, options.holdTimeout);
+				}
+				break;
+			case $.EVENT_MOVE:
+				break;
+			case $.EVENT_END:
+			case $.EVENT_CANCEL:
+				if (timer) {
+					clearTimeout(timer) && (timer = null);
+					$.trigger(session.target, 'release', touch);
+				}
+				break;
+		}
+	};
+	/**
+	 * mui gesture hold
+	 */
+	$.addGesture({
+		name: name,
+		index: 10,
+		handle: handle,
+		options: {
+			fingers: 1,
+			holdTimeout: 0
+		}
+	});
+})(mui, 'hold');
+/**
+ * mui gesture pinch
+ * @param {type} $
+ * @param {type} name
+ * @returns {undefined}
+ */
+(function($, name) {
+	var handle = function(event, touch) {
+		var options = this.options;
+		var session = $.gestures.session;
+		switch (event.type) {
+			case $.EVENT_START:
+				break;
+			case $.EVENT_MOVE:
+				if ($.options.gestureConfig.pinch) {
+					if (touch.touches.length < 2) {
+						return;
+					}
+					if (!session.pinch) { //start
+						session.pinch = true;
+						$.trigger(session.target, name + 'start', touch);
+					}
+					$.trigger(session.target, name, touch);
+					var scale = touch.scale;
+					var rotation = touch.rotation;
+					var lastScale = typeof touch.lastScale === 'undefined' ? 1 : touch.lastScale;
+					var scaleDiff = 0.000000000001; //防止scale与lastScale相等,不触发事件的情况。
+					if (scale > lastScale) { //out
+						lastScale = scale - scaleDiff;
+						$.trigger(session.target, name + 'out', touch);
+					} //in
+					else if (scale < lastScale) {
+						lastScale = scale + scaleDiff;
+						$.trigger(session.target, name + 'in', touch);
+					}
+					if (Math.abs(rotation) > options.minRotationAngle) {
+						$.trigger(session.target, 'rotate', touch);
+					}
+				}
+				break;
+			case $.EVENT_END:
+			case $.EVENT_CANCEL:
+				if ($.options.gestureConfig.pinch && session.pinch && touch.touches.length === 2) {
+					session.pinch = false;
+					$.trigger(session.target, name + 'end', touch);
+				}
+				break;
+		}
+	};
+	/**
+	 * mui gesture pinch
+	 */
+	$.addGesture({
+		name: name,
+		index: 10,
+		handle: handle,
+		options: {
+			minRotationAngle: 0
+		}
+	});
+})(mui, 'pinch');
+/**
+ * mui.init
+ * @param {type} $
+ * @returns {undefined}
+ */
+(function($) {
+	$.global = $.options = {
+		gestureConfig: {
+			tap: true,
+			doubletap: false,
+			longtap: false,
+			hold: false,
+			flick: true,
+			swipe: true,
+			drag: true,
+			pinch: false
+		}
+	};
+	/**
+	 *
+	 * @param {type} options
+	 * @returns {undefined}
+	 */
+	$.initGlobal = function(options) {
+		$.options = $.extend(true, $.global, options);
+		return this;
+	};
+	var inits = {};
+
+	/**
+	 * 单页配置 初始化
+	 * @param {object} options
+	 */
+	$.init = function(options) {
+		$.options = $.extend(true, $.global, options || {});
+		$.ready(function() {
+			$.doAction('inits', function(index, init) {
+				var isInit = !!(!inits[init.name] || init.repeat);
+				if (isInit) {
+					init.handle.call($);
+					inits[init.name] = true;
+				}
+			});
+		});
+		return this;
+	};
+
+	/**
+	 * 增加初始化执行流程
+	 * @param {function} init
+	 */
+	$.addInit = function(init) {
+		return $.addAction('inits', init);
+	};
+	/**
+	 * 处理html5版本subpages 
+	 */
+	$.addInit({
+		name: 'iframe',
+		index: 100,
+		handle: function() {
+			var options = $.options;
+			var subpages = options.subpages || [];
+			if (!$.os.plus && subpages.length) {
+				//暂时只处理单个subpage。后续可以考虑支持多个subpage
+				createIframe(subpages[0]);
+			}
+		}
+	});
+	var createIframe = function(options) {
+		var wrapper = document.createElement('div');
+		wrapper.className = 'mui-iframe-wrapper';
+		var styles = options.styles || {};
+		if (typeof styles.top !== 'string') {
+			styles.top = '0px';
+		}
+		if (typeof styles.bottom !== 'string') {
+			styles.bottom = '0px';
+		}
+		wrapper.style.top = styles.top;
+		wrapper.style.bottom = styles.bottom;
+		var iframe = document.createElement('iframe');
+		iframe.src = options.url;
+		iframe.id = options.id || options.url;
+		iframe.name = iframe.id;
+		wrapper.appendChild(iframe);
+		document.body.appendChild(wrapper);
+		//目前仅处理微信
+		$.os.wechat && handleScroll(wrapper, iframe);
+	};
+
+	function handleScroll(wrapper, iframe) {
+		var key = 'MUI_SCROLL_POSITION_' + document.location.href + '_' + iframe.src;
+		var scrollTop = (parseFloat(localStorage.getItem(key)) || 0);
+		if (scrollTop) {
+			(function(y) {
+				iframe.onload = function() {
+					window.scrollTo(0, y);
+				};
+			})(scrollTop);
+		}
+		setInterval(function() {
+			var _scrollTop = window.scrollY;
+			if (scrollTop !== _scrollTop) {
+				localStorage.setItem(key, _scrollTop + '');
+				scrollTop = _scrollTop;
+			}
+		}, 100);
+	};
+	$(function() {
+		var classList = document.body.classList;
+		var os = [];
+		if ($.os.ios) {
+			os.push({
+				os: 'ios',
+				version: $.os.version
+			});
+			classList.add('mui-ios');
+		} else if ($.os.android) {
+			os.push({
+				os: 'android',
+				version: $.os.version
+			});
+			classList.add('mui-android');
+		}
+		if ($.os.wechat) {
+			os.push({
+				os: 'wechat',
+				version: $.os.wechat.version
+			});
+			classList.add('mui-wechat');
+		}
+		if (os.length) {
+			$.each(os, function(index, osObj) {
+				var version = '';
+				var classArray = [];
+				if (osObj.version) {
+					$.each(osObj.version.split('.'), function(i, v) {
+						version = version + (version ? '-' : '') + v;
+						classList.add($.className(osObj.os + '-' + version));
+					});
+				}
+			});
+		}
+	});
+})(mui);
+/**
+ * mui.init 5+
+ * @param {type} $
+ * @returns {undefined}
+ */
+(function($) {
+	var defaultOptions = {
+		swipeBack: false,
+		preloadPages: [], //5+ lazyLoad webview
+		preloadLimit: 10, //预加载窗口的数量限制(一旦超出,先进先出)
+		keyEventBind: {
+			backbutton: true,
+			menubutton: true
+		},
+		titleConfig: {
+			height: "44px",
+			backgroundColor: "#f7f7f7", //导航栏背景色
+			bottomBorderColor: "#cccccc", //底部边线颜色
+			title: { //标题配置
+				text: "", //标题文字
+				position: {
+					top: 0,
+					left: 0,
+					width: "100%",
+					height: "100%"
+				},
+				styles: {
+					color: "#000000",
+					align: "center",
+					family: "'Helvetica Neue',Helvetica,sans-serif",
+					size: "17px",
+					style: "normal",
+					weight: "normal",
+					fontSrc: ""
+				}
+			},
+			back: {
+				image: {
+					base64Data: '',
+					imgSrc: '',
+					sprite: {
+						top: '0px',
+						left: '0px',
+						width: '100%',
+						height: '100%'
+					},
+					position: {
+						top: "10px",
+						left: "10px",
+						width: "24px",
+						height: "24px"
+					}
+				}
+			}
+		}
+	};
+
+	//默认页面动画
+	var defaultShow = {
+		event:"titleUpdate",
+		autoShow: true,
+		duration: 300,
+		aniShow: 'slide-in-right',
+		extras:{}
+	};
+	//若执行了显示动画初始化操作,则要覆盖默认配置
+	if($.options.show) {
+		defaultShow = $.extend(true, defaultShow, $.options.show);
+	}
+
+	$.currentWebview = null;
+
+	$.extend(true, $.global, defaultOptions);
+	$.extend(true, $.options, defaultOptions);
+	/**
+	 * 等待动画配置
+	 * @param {type} options
+	 * @returns {Object}
+	 */
+	$.waitingOptions = function(options) {
+		return $.extend(true, {}, {
+			autoShow: true,
+			title: '',
+			modal: false
+		}, options);
+	};
+	/**
+	 * 窗口显示配置
+	 * @param {type} options
+	 * @returns {Object}
+	 */
+	$.showOptions = function(options) {
+		return $.extend(true, {}, defaultShow, options);
+	};
+	/**
+	 * 窗口默认配置
+	 * @param {type} options
+	 * @returns {Object}
+	 */
+	$.windowOptions = function(options) {
+		return $.extend({
+			scalable: false,
+			bounce: "" //vertical
+		}, options);
+	};
+	/**
+	 * plusReady
+	 * @param {type} callback
+	 * @returns {_L6.$}
+	 */
+	$.plusReady = function(callback) {
+		if(window.plus) {
+			setTimeout(function() { //解决callback与plusready事件的执行时机问题(典型案例:showWaiting,closeWaiting)
+				callback();
+			}, 0);
+		} else {
+			document.addEventListener("plusready", function() {
+				callback();
+			}, false);
+		}
+		return this;
+	};
+	/**
+	 * 5+ event(5+没提供之前我自己实现)
+	 * @param {type} webview
+	 * @param {type} eventType
+	 * @param {type} data
+	 * @returns {undefined}
+	 */
+	$.fire = function(webview, eventType, data) {
+		if(webview) {
+			if(typeof data === 'undefined') {
+				data = '';
+			} else if(typeof data === 'boolean' || typeof data === 'number') {
+				webview.evalJS("typeof mui!=='undefined'&&mui.receive('" + eventType + "'," + data + ")");
+				return;
+			} else if($.isPlainObject(data) || $.isArray(data)) {
+				data = JSON.stringify(data || {}).replace(/\'/g, "\\u0027").replace(/\\/g, "\\u005c");
+			}
+			webview.evalJS("typeof mui!=='undefined'&&mui.receive('" + eventType + "','" + data + "')");
+		}
+	};
+	/**
+	 * 5+ event(5+没提供之前我自己实现)
+	 * @param {type} eventType
+	 * @param {type} data
+	 * @returns {undefined}
+	 */
+	$.receive = function(eventType, data) {
+		if(eventType) {
+			try {
+				if(data && typeof data === 'string') {
+					data = JSON.parse(data);
+				}
+			} catch(e) {}
+			$.trigger(document, eventType, data);
+		}
+	};
+	var triggerPreload = function(webview) {
+		if(!webview.preloaded) { //保证仅触发一次
+			$.fire(webview, 'preload');
+			var list = webview.children();
+			for(var i = 0; i < list.length; i++) {
+				$.fire(list[i], 'preload');
+			}
+			webview.preloaded = true;
+		}
+	};
+	var trigger = function(webview, eventType, timeChecked) {
+		if(timeChecked) {
+			if(!webview[eventType + 'ed']) {
+				$.fire(webview, eventType);
+				var list = webview.children();
+				for(var i = 0; i < list.length; i++) {
+					$.fire(list[i], eventType);
+				}
+				webview[eventType + 'ed'] = true;
+			}
+		} else {
+			$.fire(webview, eventType);
+			var list = webview.children();
+			for(var i = 0; i < list.length; i++) {
+				$.fire(list[i], eventType);
+			}
+		}
+
+	};
+	/**
+	 * 打开新窗口
+	 * @param {string} url 要打开的页面地址
+	 * @param {string} id 指定页面ID
+	 * @param {object} options 可选:参数,等待,窗口,显示配置{params:{},waiting:{},styles:{},show:{}}
+	 */
+	$.openWindow = function(url, id, options) {
+		if(typeof url === 'object') {
+			options = url;
+			url = options.url;
+			id = options.id || url;
+		} else {
+			if(typeof id === 'object') {
+				options = id;
+				id = options.id || url;
+			} else {
+				id = id || url;
+			}
+		}
+		if(!$.os.plus) {
+			//TODO 先临时这么处理:手机上顶层跳,PC上parent跳
+			if($.os.ios || $.os.android) {
+				window.top.location.href = url;
+			} else {
+				window.parent.location.href = url;
+			}
+			return;
+		}
+		if(!window.plus) {
+			return;
+		}
+
+		options = options || {};
+		var params = options.params || {};
+		var webview = null,
+			webviewCache = null,
+			nShow, nWaiting;
+
+		if($.webviews[id]) {
+			webviewCache = $.webviews[id];
+			//webview真实存在,才能获取
+			if(plus.webview.getWebviewById(id)) {
+				webview = webviewCache.webview;
+			}
+		} else if(options.createNew !== true) {
+			webview = plus.webview.getWebviewById(id);
+		}
+
+		if(webview) { //已缓存
+			//每次show都需要传递动画参数;
+			//预加载的动画参数优先级:openWindow配置>preloadPages配置>mui默认配置;
+			nShow = webviewCache ? webviewCache.show : defaultShow;
+			nShow = options.show ? $.extend(nShow, options.show) : nShow;
+			nShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() {
+				triggerPreload(webview);
+				trigger(webview, 'pagebeforeshow', false);
+			});
+			if(webviewCache) {
+				webviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\'' + JSON.stringify(params) + '\')');
+			}
+			return webview;
+		} else { //新窗口
+			if(!url) {
+				throw new Error('webview[' + id + '] does not exist');
+			}
+
+			//显示waiting
+			var waitingConfig = $.waitingOptions(options.waiting);
+			if(waitingConfig.autoShow) {
+				nWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options);
+			}
+
+			//创建页面
+			options = $.extend(options, {
+				id: id,
+				url: url
+			});
+
+			webview = $.createWindow(options);
+
+			//显示
+			nShow = $.showOptions(options.show);
+			if(nShow.autoShow) {
+				var showWebview = function() {
+					//关闭等待框
+					if(nWaiting) {
+						nWaiting.close();
+					}
+					//显示页面
+					webview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras);
+					options.afterShowMethodName && webview.evalJS(options.afterShowMethodName + '(\'' + JSON.stringify(params) + '\')');
+				};
+				//titleUpdate触发时机早于loaded,更换为titleUpdate后,可以更早的显示webview
+				webview.addEventListener(nShow.event, showWebview, false);
+				//loaded事件发生后,触发预加载和pagebeforeshow事件
+				webview.addEventListener("loaded", function() {
+					triggerPreload(webview);
+					trigger(webview, 'pagebeforeshow', false);
+				}, false);
+			}
+		}
+		return webview;
+	};
+
+	$.openWindowWithTitle = function(options, titleConfig) {
+		options = options || {};
+		var url = options.url;
+		var id = options.id || url;
+
+		if(!$.os.plus) {
+			//TODO 先临时这么处理:手机上顶层跳,PC上parent跳
+			if($.os.ios || $.os.android) {
+				window.top.location.href = url;
+			} else {
+				window.parent.location.href = url;
+			}
+			return;
+		}
+		if(!window.plus) {
+			return;
+		}
+
+		var params = options.params || {};
+		var webview = null,
+			webviewCache = null,
+			nShow, nWaiting;
+
+		if($.webviews[id]) {
+			webviewCache = $.webviews[id];
+			//webview真实存在,才能获取
+			if(plus.webview.getWebviewById(id)) {
+				webview = webviewCache.webview;
+			}
+		} else if(options.createNew !== true) {
+			webview = plus.webview.getWebviewById(id);
+		}
+
+		if(webview) { //已缓存
+			//每次show都需要传递动画参数;
+			//预加载的动画参数优先级:openWindow配置>preloadPages配置>mui默认配置;
+			nShow = webviewCache ? webviewCache.show : defaultShow;
+			nShow = options.show ? $.extend(nShow, options.show) : nShow;
+			nShow.autoShow && webview.show(nShow.aniShow, nShow.duration, function() {
+				triggerPreload(webview);
+				trigger(webview, 'pagebeforeshow', false);
+			});
+			if(webviewCache) {
+				webviewCache.afterShowMethodName && webview.evalJS(webviewCache.afterShowMethodName + '(\'' + JSON.stringify(params) + '\')');
+			}
+			return webview;
+		} else { //新窗口
+			if(!url) {
+				throw new Error('webview[' + id + '] does not exist');
+			}
+
+			//显示waiting
+			var waitingConfig = $.waitingOptions(options.waiting);
+			if(waitingConfig.autoShow) {
+				nWaiting = plus.nativeUI.showWaiting(waitingConfig.title, waitingConfig.options);
+			}
+
+			//创建页面
+			options = $.extend(options, {
+				id: id,
+				url: url
+			});
+
+			webview = $.createWindow(options);
+
+			if(titleConfig) { //处理原生头
+				$.extend(true, $.options.titleConfig, titleConfig);
+				var tid = $.options.titleConfig.id ? $.options.titleConfig.id : id + "_title";
+				var view = new plus.nativeObj.View(tid, {
+					top: 0,
+					height: $.options.titleConfig.height,
+					width: "100%",
+					dock: "top",
+					position: "dock"
+				});
+				view.drawRect($.options.titleConfig.backgroundColor); //绘制背景色
+				var _b = parseInt($.options.titleConfig.height) - 1;
+				view.drawRect($.options.titleConfig.bottomBorderColor, {
+					top: _b + "px",
+					left: "0px"
+				}); //绘制底部边线
+
+				//绘制文字
+				if($.options.titleConfig.title.text){
+					var _title = $.options.titleConfig.title;
+					view.drawText(_title.text,_title.position , _title.styles);
+				}
+				
+				//返回图标绘制
+				var _back = $.options.titleConfig.back;
+				var backClick = null;
+				//优先字体
+
+				//其次是图片
+				var _backImage = _back.image;
+				if(_backImage.base64Data || _backImage.imgSrc) {
+					//TODO 此处需要处理百分比的情况
+					backClick = {
+						left:parseInt(_backImage.position.left),
+						right:parseInt(_backImage.position.left) + parseInt(_backImage.position.width)
+					};
+					var bitmap = new plus.nativeObj.Bitmap(id + "_back");
+					if(_backImage.base64Data) { //优先base64编码字符串
+						bitmap.loadBase64Data(_backImage.base64Data);
+					} else { //其次加载图片文件
+						bitmap.load(_backImage.imgSrc);
+					}
+					view.drawBitmap(bitmap,_backImage.sprite , _backImage.position);
+				}
+
+				//处理点击事件
+				view.setTouchEventRect({
+					top: "0px",
+					left: "0px",
+					width: "100%",
+					height: "100%"
+				});
+				view.interceptTouchEvent(true);
+				view.addEventListener("click", function(e) {
+					var x = e.clientX;
+					
+					//返回按钮点击
+					if(backClick&& x > backClick.left && x < backClick.right){
+						if( _back.click && $.isFunction(_back.click)){
+							_back.click();
+						}else{
+							webview.evalJS("window.mui&&mui.back();");
+						}
+					}
+				}, false);
+				webview.append(view);
+
+			}
+
+			//显示
+			nShow = $.showOptions(options.show);
+			if(nShow.autoShow) {
+				//titleUpdate触发时机早于loaded,更换为titleUpdate后,可以更早的显示webview
+				webview.addEventListener(nShow.event, function () {
+					//关闭等待框
+					if(nWaiting) {
+						nWaiting.close();
+					}
+					//显示页面
+					webview.show(nShow.aniShow, nShow.duration, function() {},nShow.extras);
+				}, false);
+			}
+		}
+		return webview;
+	};
+
+	/**
+	 * 根据配置信息创建一个webview
+	 * @param {type} options
+	 * @param {type} isCreate
+	 * @returns {webview}
+	 */
+	$.createWindow = function(options, isCreate) {
+		if(!window.plus) {
+			return;
+		}
+		var id = options.id || options.url;
+		var webview;
+		if(options.preload) {
+			if($.webviews[id] && $.webviews[id].webview.getURL()) { //已经cache
+				webview = $.webviews[id].webview;
+			} else { //新增预加载窗口
+				//判断是否携带createNew参数,默认为false
+				if(options.createNew !== true) {
+					webview = plus.webview.getWebviewById(id);
+				}
+
+				//之前没有,那就新创建	
+				if(!webview) {
+					webview = plus.webview.create(options.url, id, $.windowOptions(options.styles), $.extend({
+						preload: true
+					}, options.extras));
+					if(options.subpages) {
+						$.each(options.subpages, function(index, subpage) {
+							var subpageId = subpage.id || subpage.url;
+							if(subpageId) { //过滤空对象
+								var subWebview = plus.webview.getWebviewById(subpageId);
+								if(!subWebview) { //如果该webview不存在,则创建
+									subWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), $.extend({
+										preload: true
+									}, subpage.extras));
+								}
+								webview.append(subWebview);
+							}
+						});
+					}
+				}
+			}
+
+			//TODO 理论上,子webview也应该计算到预加载队列中,但这样就麻烦了,要退必须退整体,否则可能出现问题;
+			$.webviews[id] = {
+				webview: webview, //目前仅preload的缓存webview
+				preload: true,
+				show: $.showOptions(options.show),
+				afterShowMethodName: options.afterShowMethodName //就不应该用evalJS。应该是通过事件消息通讯
+			};
+			//索引该预加载窗口
+			var preloads = $.data.preloads;
+			var index = preloads.indexOf(id);
+			if(~index) { //删除已存在的(变相调整插入位置)
+				preloads.splice(index, 1);
+			}
+			preloads.push(id);
+			if(preloads.length > $.options.preloadLimit) {
+				//先进先出
+				var first = $.data.preloads.shift();
+				var webviewCache = $.webviews[first];
+				if(webviewCache && webviewCache.webview) {
+					//需要将自己打开的所有页面,全部close;
+					//关闭该预加载webview	
+					$.closeAll(webviewCache.webview);
+				}
+				//删除缓存
+				delete $.webviews[first];
+			}
+		} else {
+			if(isCreate !== false) { //直接创建非预加载窗口
+				webview = plus.webview.create(options.url, id, $.windowOptions(options.styles), options.extras);
+				if(options.subpages) {
+					$.each(options.subpages, function(index, subpage) {
+						var subpageId = subpage.id || subpage.url;
+						var subWebview = plus.webview.getWebviewById(subpageId);
+						if(!subWebview) {
+							subWebview = plus.webview.create(subpage.url, subpageId, $.windowOptions(subpage.styles), subpage.extras);
+						}
+						webview.append(subWebview);
+					});
+				}
+			}
+		}
+		return webview;
+	};
+
+	/**
+	 * 预加载
+	 */
+	$.preload = function(options) {
+		//调用预加载函数,不管是否传递preload参数,强制变为true
+		if(!options.preload) {
+			options.preload = true;
+		}
+		return $.createWindow(options);
+	};
+
+	/**
+	 *关闭当前webview打开的所有webview;
+	 */
+	$.closeOpened = function(webview) {
+		var opened = webview.opened();
+		if(opened) {
+			for(var i = 0, len = opened.length; i < len; i++) {
+				var openedWebview = opened[i];
+				var open_open = openedWebview.opened();
+				if(open_open && open_open.length > 0) {
+					//关闭打开的webview
+					$.closeOpened(openedWebview);
+					//关闭自己
+					openedWebview.close("none");
+				} else {
+					//如果直接孩子节点,就不用关闭了,因为父关闭的时候,会自动关闭子;
+					if(openedWebview.parent() !== webview) {
+						openedWebview.close('none');
+					}
+				}
+			}
+		}
+	};
+	$.closeAll = function(webview, aniShow) {
+		$.closeOpened(webview);
+		if(aniShow) {
+			webview.close(aniShow);
+		} else {
+			webview.close();
+		}
+	};
+
+	/**
+	 * 批量创建webview
+	 * @param {type} options
+	 * @returns {undefined}
+	 */
+	$.createWindows = function(options) {
+		$.each(options, function(index, option) {
+			//初始化预加载窗口(创建)和非预加载窗口(仅配置,不创建)
+			$.createWindow(option, false);
+		});
+	};
+	/**
+	 * 创建当前页面的子webview
+	 * @param {type} options
+	 * @returns {webview}
+	 */
+	$.appendWebview = function(options) {
+		if(!window.plus) {
+			return;
+		}
+		var id = options.id || options.url;
+		var webview;
+		if(!$.webviews[id]) { //保证执行一遍
+			//TODO 这里也有隐患,比如某个webview不是作为subpage创建的,而是作为target webview的话;
+			if(!plus.webview.getWebviewById(id)) {
+				webview = plus.webview.create(options.url, id, options.styles, options.extras);
+			}
+			//之前的实现方案:子窗口loaded之后再append到父窗口中;
+			//问题:部分子窗口loaded事件发生较晚,此时执行父窗口的children方法会返回空,导致父子通讯失败;
+			//     比如父页面执行完preload事件后,需触发子页面的preload事件,此时未append的话,就无法触发;
+			//修改方式:不再监控loaded事件,直接append
+			//by chb@20150521
+			// webview.addEventListener('loaded', function() {
+			plus.webview.currentWebview().append(webview);
+			// });
+			$.webviews[id] = options;
+
+		}
+		return webview;
+	};
+
+	//全局webviews
+	$.webviews = {};
+	//预加载窗口索引
+	$.data.preloads = [];
+	//$.currentWebview
+	$.plusReady(function() {
+		$.currentWebview = plus.webview.currentWebview();
+	});
+	$.addInit({
+		name: '5+',
+		index: 100,
+		handle: function() {
+			var options = $.options;
+			var subpages = options.subpages || [];
+			if($.os.plus) {
+				$.plusReady(function() {
+					//TODO  这里需要判断一下,最好等子窗口加载完毕后,再调用主窗口的show方法;
+					//或者:在openwindow方法中,监听实现;
+					$.each(subpages, function(index, subpage) {
+						$.appendWebview(subpage);
+					});
+					//判断是否首页
+					if(plus.webview.currentWebview() === plus.webview.getWebviewById(plus.runtime.appid)) {
+						//首页需要自己激活预加载;
+						//timeout因为子页面loaded之后才append的,防止子页面尚未append、从而导致其preload未触发的问题;
+						setTimeout(function() {
+							triggerPreload(plus.webview.currentWebview());
+						}, 300);
+					}
+					//设置ios顶部状态栏颜色;
+					if($.os.ios && $.options.statusBarBackground) {
+						plus.navigator.setStatusBarBackground($.options.statusBarBackground);
+					}
+					if($.os.android && parseFloat($.os.version) < 4.4) {
+						//解决Android平台4.4版本以下,resume后,父窗体标题延迟渲染的问题;
+						if(plus.webview.currentWebview().parent() == null) {
+							document.addEventListener("resume", function() {
+								var body = document.body;
+								body.style.display = 'none';
+								setTimeout(function() {
+									body.style.display = '';
+								}, 10);
+							});
+						}
+					}
+				});
+			} else {
+				//已支持iframe嵌入
+				//				if (subpages.length > 0) {
+				//					var err = document.createElement('div');
+				//					err.className = 'mui-error';
+				//					//文字描述
+				//					var span = document.createElement('span');
+				//					span.innerHTML = '在该浏览器下,不支持创建子页面,具体参考';
+				//					err.appendChild(span);
+				//					var a = document.createElement('a');
+				//					a.innerHTML = '"mui框架适用场景"';
+				//					a.href = 'http://ask.dcloud.net.cn/article/113';
+				//					err.appendChild(a);
+				//					document.body.appendChild(err);
+				//					console.log('在该浏览器下,不支持创建子页面');
+				//				}
+
+			}
+
+		}
+	});
+	window.addEventListener('preload', function() {
+		//处理预加载部分
+		var webviews = $.options.preloadPages || [];
+		$.plusReady(function() {
+			$.each(webviews, function(index, webview) {
+				$.createWindow($.extend(webview, {
+					preload: true
+				}));
+			});
+
+		});
+	});
+	$.supportStatusbarOffset = function() {
+		return $.os.plus && $.os.ios && parseFloat($.os.version) >= 7;
+	};
+	$.ready(function() {
+		//标识当前环境支持statusbar
+		if($.supportStatusbarOffset()) {
+			document.body.classList.add('mui-statusbar');
+		}
+	});
+})(mui);
+
+/**
+ * mui back
+ * @param {type} $
+ * @param {type} window
+ * @returns {undefined}
+ */
+(function($, window) {
+	/**
+	 * register back
+	 * @param {type} back
+	 * @returns {$.gestures}
+	 */
+	$.addBack = function(back) {
+		return $.addAction('backs', back);
+	};
+	/**
+	 * default
+	 */
+	$.addBack({
+		name: 'browser',
+		index: 100,
+		handle: function() {
+			if (window.history.length > 1) {
+				window.history.back();
+				return true;
+			}
+			return false;
+		}
+	});
+	/**
+	 * 后退
+	 */
+	$.back = function() {
+		if (typeof $.options.beforeback === 'function') {
+			if ($.options.beforeback() === false) {
+				return;
+			}
+		}
+		$.doAction('backs');
+	};
+	window.addEventListener('tap', function(e) {
+		var action = $.targets.action;
+		if (action && action.classList.contains('mui-action-back')) {
+			$.back();
+			$.targets.action = false;
+		}
+	});
+	window.addEventListener('swiperight', function(e) {
+		var detail = e.detail;
+		if ($.options.swipeBack === true && Math.abs(detail.angle) < 3) {
+			$.back();
+		}
+	});
+
+})(mui, window);
+/**
+ * mui back 5+
+ * @param {type} $
+ * @param {type} window
+ * @returns {undefined}
+ */
+(function($, window) {
+	if ($.os.plus && $.os.android) {
+		$.addBack({
+			name: 'mui',
+			index: 5,
+			handle: function() {
+				//后续重新设计此处,将back放到各个空间内部实现
+				//popover
+				if ($.targets._popover && $.targets._popover.classList.contains('mui-active')) {
+					$($.targets._popover).popover('hide');
+					return true;
+				}
+				//offcanvas
+				var offCanvas = document.querySelector('.mui-off-canvas-wrap.mui-active');
+				if (offCanvas) {
+					$(offCanvas).offCanvas('close');
+					return true;
+				}
+				var previewImage = $.isFunction($.getPreviewImage) && $.getPreviewImage();
+				if (previewImage && previewImage.isShown()) {
+					previewImage.close();
+					return true;
+				}
+				//popup
+				return $.closePopup();
+			}
+		});
+	}
+	//首次按下back按键的时间
+	$.__back__first = null;
+	/**
+	 * 5+ back
+	 */
+	$.addBack({
+		name: '5+',
+		index: 10,
+		handle: function() {
+			if (!window.plus) {
+				return false;
+			}
+			var wobj = plus.webview.currentWebview();
+			var parent = wobj.parent();
+			if (parent) {
+				parent.evalJS('mui&&mui.back();');
+			} else {
+				wobj.canBack(function(e) {
+					//by chb 暂时注释,在碰到类似popover之类的锚点的时候,需多次点击才能返回;
+					if (e.canBack) { //webview history back
+						window.history.back();
+					} else { //webview close or hide
+						//fixed by fxy 此处不应该用opener判断,因为用户有可能自己close掉当前窗口的opener。这样的话。opener就为空了,导致不能执行close
+						if (wobj.id === plus.runtime.appid) { //首页
+							//首页不存在opener的情况下,后退实际上应该是退出应用;
+							//首次按键,提示‘再按一次退出应用’
+							if (!$.__back__first) {
+								$.__back__first = new Date().getTime();
+								mui.toast('再按一次退出应用');
+								setTimeout(function() {
+									$.__back__first = null;
+								}, 2000);
+							} else {
+								if (new Date().getTime() - $.__back__first < 2000) {
+									plus.runtime.quit();
+								}
+							}
+						} else { //其他页面,
+							if (wobj.preload) {
+								wobj.hide("auto");
+							} else {
+								//关闭页面时,需要将其打开的所有子页面全部关闭;
+								$.closeAll(wobj);
+							}
+						}
+					}
+				});
+			}
+			return true;
+		}
+	});
+
+
+	$.menu = function() {
+		var menu = document.querySelector('.mui-action-menu');
+		if (menu) {
+			$.trigger(menu, $.EVENT_START); //临时处理menu无touchstart的话,找不到当前targets的问题
+			$.trigger(menu, 'tap');
+		} else { //执行父窗口的menu
+			if (window.plus) {
+				var wobj = $.currentWebview;
+				var parent = wobj.parent();
+				if (parent) { //又得evalJS
+					parent.evalJS('mui&&mui.menu();');
+				}
+			}
+		}
+	};
+	var __back = function() {
+		$.back();
+	};
+	var __menu = function() {
+		$.menu();
+	};
+	//默认监听
+	$.plusReady(function() {
+		if ($.options.keyEventBind.backbutton) {
+			plus.key.addEventListener('backbutton', __back, false);
+		}
+		if ($.options.keyEventBind.menubutton) {
+			plus.key.addEventListener('menubutton', __menu, false);
+		}
+	});
+	//处理按键监听事件
+	$.addInit({
+		name: 'keyEventBind',
+		index: 1000,
+		handle: function() {
+			$.plusReady(function() {
+				//如果不为true,则移除默认监听
+				if (!$.options.keyEventBind.backbutton) {
+					plus.key.removeEventListener('backbutton', __back);
+				}
+				if (!$.options.keyEventBind.menubutton) {
+					plus.key.removeEventListener('menubutton', __menu);
+				}
+			});
+		}
+	});
+})(mui, window);
+/**
+ * mui.init pulldownRefresh
+ * @param {type} $
+ * @returns {undefined}
+ */
+(function($) {
+	$.addInit({
+		name: 'pullrefresh',
+		index: 1000,
+		handle: function() {
+			var options = $.options;
+			var pullRefreshOptions = options.pullRefresh || {};
+			var hasPulldown = pullRefreshOptions.down && pullRefreshOptions.down.hasOwnProperty('callback');
+			var hasPullup = pullRefreshOptions.up && pullRefreshOptions.up.hasOwnProperty('callback');
+			if(hasPulldown || hasPullup) {
+				var container = pullRefreshOptions.container;
+				if(container) {
+					var $container = $(container);
+					if($container.length === 1) {
+						if($.os.plus) { //5+环境
+							if(hasPulldown && pullRefreshOptions.down.style == "circle") { //原生转圈
+								$.plusReady(function() {
+									//这里改写$.fn.pullRefresh
+									$.fn.pullRefresh = $.fn.pullRefresh_native;
+									$container.pullRefresh(pullRefreshOptions);
+								});
+
+							} else if($.os.android) { //非原生转圈,但是Android环境
+								$.plusReady(function() {
+									//这里改写$.fn.pullRefresh
+									$.fn.pullRefresh = $.fn.pullRefresh_native
+									var webview = plus.webview.currentWebview();
+									if(window.__NWin_Enable__ === false) { //不支持多webview
+										$container.pullRefresh(pullRefreshOptions);
+									} else {
+										if(hasPullup) {
+											//当前页面初始化pullup
+											var upOptions = {};
+											upOptions.up = pullRefreshOptions.up;
+											upOptions.webviewId = webview.id || webview.getURL();
+											$container.pullRefresh(upOptions);
+										}
+										if(hasPulldown) {
+											var parent = webview.parent();
+											var id = webview.id || webview.getURL();
+											if(parent) {
+												if(!hasPullup) { //如果没有上拉加载,需要手动初始化一个默认的pullRefresh,以便当前页面容器可以调用endPulldownToRefresh等方法
+													$container.pullRefresh({
+														webviewId: id
+													});
+												}
+												var downOptions = {
+													webviewId: id//子页面id
+												};
+												downOptions.down = $.extend({}, pullRefreshOptions.down);
+												downOptions.down.callback = '_CALLBACK';
+												//改写父页面的$.fn.pullRefresh
+												parent.evalJS("mui.fn.pullRefresh=mui.fn.pullRefresh_native");
+												//父页面初始化pulldown
+												parent.evalJS("mui&&mui(document.querySelector('.mui-content')).pullRefresh('" + JSON.stringify(downOptions) + "')");
+											}
+										}
+									}
+								});
+							} else { //非原生转圈,iOS环境
+								$container.pullRefresh(pullRefreshOptions);
+							}
+						} else {
+							$container.pullRefresh(pullRefreshOptions);
+						}
+					}
+				}
+			}
+		}
+	});
+})(mui);
+/**
+ * mui ajax
+ * @param {type} $
+ * @returns {undefined}
+ */
+(function($, window, undefined) {
+
+	var jsonType = 'application/json';
+	var htmlType = 'text/html';
+	var rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;
+	var scriptTypeRE = /^(?:text|application)\/javascript/i;
+	var xmlTypeRE = /^(?:text|application)\/xml/i;
+	var blankRE = /^\s*$/;
+
+	$.ajaxSettings = {
+		type: 'GET',
+		beforeSend: $.noop,
+		success: $.noop,
+		error: $.noop,
+		complete: $.noop,
+		context: null,
+		xhr: function(protocol) {
+			return new window.XMLHttpRequest();
+		},
+		accepts: {
+			script: 'text/javascript, application/javascript, application/x-javascript',
+			json: jsonType,
+			xml: 'application/xml, text/xml',
+			html: htmlType,
+			text: 'text/plain'
+		},
+		timeout: 0,
+		processData: true,
+		cache: true
+	};
+	var ajaxBeforeSend = function(xhr, settings) {
+		var context = settings.context
+		if(settings.beforeSend.call(context, xhr, settings) === false) {
+			return false;
+		}
+	};
+	var ajaxSuccess = function(data, xhr, settings) {
+		settings.success.call(settings.context, data, 'success', xhr);
+		ajaxComplete('success', xhr, settings);
+	};
+	// type: "timeout", "error", "abort", "parsererror"
+	var ajaxError = function(error, type, xhr, settings) {
+		settings.error.call(settings.context, xhr, type, error);
+		ajaxComplete(type, xhr, settings);
+	};
+	// status: "success", "notmodified", "error", "timeout", "abort", "parsererror"
+	var ajaxComplete = function(status, xhr, settings) {
+		settings.complete.call(settings.context, xhr, status);
+	};
+
+	var serialize = function(params, obj, traditional, scope) {
+		var type, array = $.isArray(obj),
+			hash = $.isPlainObject(obj);
+		$.each(obj, function(key, value) {
+			type = $.type(value);
+			if(scope) {
+				key = traditional ? scope :
+					scope + '[' + (hash || type === 'object' || type === 'array' ? key : '') + ']';
+			}
+			// handle data in serializeArray() format
+			if(!scope && array) {
+				params.add(value.name, value.value);
+			}
+			// recurse into nested objects
+			else if(type === "array" || (!traditional && type === "object")) {
+				serialize(params, value, traditional, key);
+			} else {
+				params.add(key, value);
+			}
+		});
+	};
+	var serializeData = function(options) {
+		if(options.processData && options.data && typeof options.data !== "string") {
+			var contentType = options.contentType;
+			if(!contentType && options.headers) {
+				contentType = options.headers['Content-Type'];
+			}
+			if(contentType && ~contentType.indexOf(jsonType)) { //application/json
+				options.data = JSON.stringify(options.data);
+			} else {
+				options.data = $.param(options.data, options.traditional);
+			}
+		}
+		if(options.data && (!options.type || options.type.toUpperCase() === 'GET')) {
+			options.url = appendQuery(options.url, options.data);
+			options.data = undefined;
+		}
+	};
+	var appendQuery = function(url, query) {
+		if(query === '') {
+			return url;
+		}
+		return(url + '&' + query).replace(/[&?]{1,2}/, '?');
+	};
+	var mimeToDataType = function(mime) {
+		if(mime) {
+			mime = mime.split(';', 2)[0];
+		}
+		return mime && (mime === htmlType ? 'html' :
+			mime === jsonType ? 'json' :
+			scriptTypeRE.test(mime) ? 'script' :
+			xmlTypeRE.test(mime) && 'xml') || 'text';
+	};
+	var parseArguments = function(url, data, success, dataType) {
+		if($.isFunction(data)) {
+			dataType = success, success = data, data = undefined;
+		}
+		if(!$.isFunction(success)) {
+			dataType = success, success = undefined;
+		}
+		return {
+			url: url,
+			data: data,
+			success: success,
+			dataType: dataType
+		};
+	};
+	$.ajax = function(url, options) {
+		if(typeof url === "object") {
+			options = url;
+			url = undefined;
+		}
+		var settings = options || {};
+		settings.url = url || settings.url;
+		for(var key in $.ajaxSettings) {
+			if(settings[key] === undefined) {
+				settings[key] = $.ajaxSettings[key];
+			}
+		}
+		serializeData(settings);
+		var dataType = settings.dataType;
+
+		if(settings.cache === false || ((!options || options.cache !== true) && ('script' === dataType))) {
+			settings.url = appendQuery(settings.url, '_=' + $.now());
+		}
+		var mime = settings.accepts[dataType && dataType.toLowerCase()];
+		var headers = {};
+		var setHeader = function(name, value) {
+			headers[name.toLowerCase()] = [name, value];
+		};
+		var protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol;
+		var xhr = settings.xhr(settings);
+		var nativeSetHeader = xhr.setRequestHeader;
+		var abortTimeout;
+
+		setHeader('X-Requested-With', 'XMLHttpRequest');
+		setHeader('Accept', mime || '*/*');
+		if(!!(mime = settings.mimeType || mime)) {
+			if(mime.indexOf(',') > -1) {
+				mime = mime.split(',', 2)[0];
+			}
+			xhr.overrideMimeType && xhr.overrideMimeType(mime);
+		}
+		if(settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() !== 'GET')) {
+			setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded');
+		}
+		if(settings.headers) {
+			for(var name in settings.headers)
+				setHeader(name, settings.headers[name]);
+		}
+		xhr.setRequestHeader = setHeader;
+
+		xhr.onreadystatechange = function() {
+			if(xhr.readyState === 4) {
+				xhr.onreadystatechange = $.noop;
+				clearTimeout(abortTimeout);
+				var result, error = false;
+				var isLocal = protocol === 'file:';
+				if((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304 || (xhr.status === 0 && isLocal && xhr.responseText)) {
+					dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'));
+					result = xhr.responseText;
+					try {
+						// http://perfectionkills.com/global-eval-what-are-the-options/
+						if(dataType === 'script') {
+							(1, eval)(result);
+						} else if(dataType === 'xml') {
+							result = xhr.responseXML;
+						} else if(dataType === 'json') {
+							result = blankRE.test(result) ? null : $.parseJSON(result);
+						}
+					} catch(e) {
+						error = e;
+					}
+
+					if(error) {
+						ajaxError(error, 'parsererror', xhr, settings);
+					} else {
+						ajaxSuccess(result, xhr, settings);
+					}
+				} else {
+					var status = xhr.status ? 'error' : 'abort';
+					var statusText = xhr.statusText || null;
+					if(isLocal) {
+						status = 'error';
+						statusText = '404';
+					}
+					ajaxError(statusText, status, xhr, settings);
+				}
+			}
+		};
+		if(ajaxBeforeSend(xhr, settings) === false) {
+			xhr.abort();
+			ajaxError(null, 'abort', xhr, settings);
+			return xhr;
+		}
+
+		if(settings.xhrFields) {
+			for(var name in settings.xhrFields) {
+				xhr[name] = settings.xhrFields[name];
+			}
+		}
+
+		var async = 'async' in settings ? settings.async : true;
+
+		xhr.open(settings.type.toUpperCase(), settings.url, async, settings.username, settings.password);
+
+		for(var name in headers) {
+			if(headers.hasOwnProperty(name)) {
+				nativeSetHeader.apply(xhr, headers[name]);
+			}
+		}
+		if(settings.timeout > 0) {
+			abortTimeout = setTimeout(function() {
+				xhr.onreadystatechange = $.noop;
+				xhr.abort();
+				ajaxError(null, 'timeout', xhr, settings);
+			}, settings.timeout);
+		}
+		xhr.send(settings.data ? settings.data : null);
+		return xhr;
+	};
+
+	$.param = function(obj, traditional) {
+		var params = [];
+		params.add = function(k, v) {
+			this.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));
+		};
+		serialize(params, obj, traditional);
+		return params.join('&').replace(/%20/g, '+');
+	};
+	$.get = function( /* url, data, success, dataType */ ) {
+		return $.ajax(parseArguments.apply(null, arguments));
+	};
+
+	$.post = function( /* url, data, success, dataType */ ) {
+		var options = parseArguments.apply(null, arguments);
+		options.type = 'POST';
+		return $.ajax(options);
+	};
+
+	$.getJSON = function( /* url, data, success */ ) {
+		var options = parseArguments.apply(null, arguments);
+		options.dataType = 'json';
+		return $.ajax(options);
+	};
+
+	$.fn.load = function(url, data, success) {
+		if(!this.length)
+			return this;
+		var self = this,
+			parts = url.split(/\s/),
+			selector,
+			options = parseArguments(url, data, success),
+			callback = options.success;
+		if(parts.length > 1)
+			options.url = parts[0], selector = parts[1];
+		options.success = function(response) {
+			if(selector) {
+				var div = document.createElement('div');
+				div.innerHTML = response.replace(rscript, "");
+				var selectorDiv = document.createElement('div');
+				var childs = div.querySelectorAll(selector);
+				if(childs && childs.length > 0) {
+					for(var i = 0, len = childs.length; i < len; i++) {
+						selectorDiv.appendChild(childs[i]);
+					}
+				}
+				self[0].innerHTML = selectorDiv.innerHTML;
+			} else {
+				self[0].innerHTML = response;
+			}
+			callback && callback.apply(self, arguments);
+		};
+		$.ajax(options);
+		return this;
+	};
+
+})(mui, window);
+/**
+ * 5+ ajax
+ */
+(function($) {
+	var originAnchor = document.createElement('a');
+	originAnchor.href = window.location.href;
+	$.plusReady(function() {
+		$.ajaxSettings = $.extend($.ajaxSettings, {
+			xhr: function(settings) {
+				if (settings.crossDomain) { //强制使用plus跨域
+					return new plus.net.XMLHttpRequest();
+				}
+				//仅在webview的url为远程文件,且ajax请求的资源不同源下使用plus.net.XMLHttpRequest
+				if (originAnchor.protocol !== 'file:') {
+					var urlAnchor = document.createElement('a');
+					urlAnchor.href = settings.url;
+					urlAnchor.href = urlAnchor.href;
+					settings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host);
+					if (settings.crossDomain) {
+						return new plus.net.XMLHttpRequest();
+					}
+				}
+				if ($.os.ios && window.webkit && window.webkit.messageHandlers) { //wkwebview下同样使用5+ xhr
+                    return new plus.net.XMLHttpRequest();
+                }
+				return new window.XMLHttpRequest();
+			}
+		});
+	});
+})(mui);
+/**
+ * mui layout(offset[,position,width,height...])
+ * @param {type} $
+ * @param {type} window
+ * @param {type} undefined
+ * @returns {undefined}
+ */
+(function($, window, undefined) {
+	$.offset = function(element) {
+		var box = {
+			top : 0,
+			left : 0
+		};
+		if ( typeof element.getBoundingClientRect !== undefined) {
+			box = element.getBoundingClientRect();
+		}
+		return {
+			top : box.top + window.pageYOffset - element.clientTop,
+			left : box.left + window.pageXOffset - element.clientLeft
+		};
+	};
+})(mui, window); 
+/**
+ * mui animation
+ */
+(function($, window) {
+	/**
+	 * scrollTo
+	 */
+	$.scrollTo = function(scrollTop, duration, callback) {
+		duration = duration || 1000;
+		var scroll = function(duration) {
+			if (duration <= 0) {
+				window.scrollTo(0, scrollTop);
+				callback && callback();
+				return;
+			}
+			var distaince = scrollTop - window.scrollY;
+			setTimeout(function() {
+				window.scrollTo(0, window.scrollY + distaince / duration * 10);
+				scroll(duration - 10);
+			}, 16.7);
+		};
+		scroll(duration);
+	};
+	$.animationFrame = function(cb) {
+		var args, isQueued, context;
+		return function() {
+			args = arguments;
+			context = this;
+			if (!isQueued) {
+				isQueued = true;
+				requestAnimationFrame(function() {
+					cb.apply(context, args);
+					isQueued = false;
+				});
+			}
+		};
+	};
+
+})(mui, window);
+(function($) {
+	var initializing = false,
+		fnTest = /xyz/.test(function() {
+			xyz;
+		}) ? /\b_super\b/ : /.*/;
+
+	var Class = function() {};
+	Class.extend = function(prop) {
+		var _super = this.prototype;
+		initializing = true;
+		var prototype = new this();
+		initializing = false;
+		for (var name in prop) {
+			prototype[name] = typeof prop[name] == "function" &&
+				typeof _super[name] == "function" && fnTest.test(prop[name]) ?
+				(function(name, fn) {
+					return function() {
+						var tmp = this._super;
+
+						this._super = _super[name];
+
+						var ret = fn.apply(this, arguments);
+						this._super = tmp;
+
+						return ret;
+					};
+				})(name, prop[name]) :
+				prop[name];
+		}
+		function Class() {
+			if (!initializing && this.init)
+				this.init.apply(this, arguments);
+		}
+		Class.prototype = prototype;
+		Class.prototype.constructor = Class;
+		Class.extend = arguments.callee;
+		return Class;
+	};
+	$.Class = Class;
+})(mui);
+(function($, document, undefined) {
+    var CLASS_PULL_TOP_POCKET = 'mui-pull-top-pocket';
+    var CLASS_PULL_BOTTOM_POCKET = 'mui-pull-bottom-pocket';
+    var CLASS_PULL = 'mui-pull';
+    var CLASS_PULL_LOADING = 'mui-pull-loading';
+    var CLASS_PULL_CAPTION = 'mui-pull-caption';
+    var CLASS_PULL_CAPTION_DOWN = 'mui-pull-caption-down';
+    var CLASS_PULL_CAPTION_REFRESH = 'mui-pull-caption-refresh';
+    var CLASS_PULL_CAPTION_NOMORE = 'mui-pull-caption-nomore';
+
+    var CLASS_ICON = 'mui-icon';
+    var CLASS_SPINNER = 'mui-spinner';
+    var CLASS_ICON_PULLDOWN = 'mui-icon-pulldown';
+
+    var CLASS_BLOCK = 'mui-block';
+    var CLASS_HIDDEN = 'mui-hidden';
+    var CLASS_VISIBILITY = 'mui-visibility';
+
+    var CLASS_LOADING_UP = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_ICON_PULLDOWN;
+    var CLASS_LOADING_DOWN = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_ICON_PULLDOWN;
+    var CLASS_LOADING = CLASS_PULL_LOADING + ' ' + CLASS_ICON + ' ' + CLASS_SPINNER;
+
+    var pocketHtml = ['<div class="' + CLASS_PULL + '">', '<div class="{icon}"></div>', '<div class="' + CLASS_PULL_CAPTION + '">{contentrefresh}</div>', '</div>'].join('');
+
+    var PullRefresh = {
+        init: function(element, options) {
+            this._super(element, $.extend(true, {
+                scrollY: true,
+                scrollX: false,
+                indicators: true,
+                deceleration: 0.003,
+                down: {
+                    height: 50,
+                    contentinit: '下拉可以刷新',
+                    contentdown: '下拉可以刷新',
+                    contentover: '释放立即刷新',
+                    contentrefresh: '正在刷新...'
+                },
+                up: {
+                    height: 50,
+                    auto: false,
+                    contentinit: '上拉显示更多',
+                    contentdown: '上拉显示更多',
+                    contentrefresh: '正在加载...',
+                    contentnomore: '没有更多数据了',
+                    duration: 300
+                }
+            }, options));
+        },
+        _init: function() {
+            this._super();
+            this._initPocket();
+        },
+        _initPulldownRefresh: function() {
+            this.pulldown = true;
+            if (this.topPocket) {
+                this.pullPocket = this.topPocket;
+                this.pullPocket.classList.add(CLASS_BLOCK);
+                this.pullPocket.classList.add(CLASS_VISIBILITY);
+                this.pullCaption = this.topCaption;
+                this.pullLoading = this.topLoading;
+            }
+        },
+        _initPullupRefresh: function() {
+            this.pulldown = false;
+            if (this.bottomPocket) {
+                this.pullPocket = this.bottomPocket;
+                this.pullPocket.classList.add(CLASS_BLOCK);
+                this.pullPocket.classList.add(CLASS_VISIBILITY);
+                this.pullCaption = this.bottomCaption;
+                this.pullLoading = this.bottomLoading;
+            }
+        },
+        _initPocket: function() {
+            var options = this.options;
+            if (options.down && options.down.hasOwnProperty('callback')) {
+                this.topPocket = this.scroller.querySelector('.' + CLASS_PULL_TOP_POCKET);
+                if (!this.topPocket) {
+                    this.topPocket = this._createPocket(CLASS_PULL_TOP_POCKET, options.down, CLASS_LOADING_DOWN);
+                    this.wrapper.insertBefore(this.topPocket, this.wrapper.firstChild);
+                }
+                this.topLoading = this.topPocket.querySelector('.' + CLASS_PULL_LOADING);
+                this.topCaption = this.topPocket.querySelector('.' + CLASS_PULL_CAPTION);
+            }
+            if (options.up && options.up.hasOwnProperty('callback')) {
+                this.bottomPocket = this.scroller.querySelector('.' + CLASS_PULL_BOTTOM_POCKET);
+                if (!this.bottomPocket) {
+                    this.bottomPocket = this._createPocket(CLASS_PULL_BOTTOM_POCKET, options.up, CLASS_LOADING);
+                    this.scroller.appendChild(this.bottomPocket);
+                }
+                this.bottomLoading = this.bottomPocket.querySelector('.' + CLASS_PULL_LOADING);
+                this.bottomCaption = this.bottomPocket.querySelector('.' + CLASS_PULL_CAPTION);
+                //TODO only for h5
+                this.wrapper.addEventListener('scrollbottom', this);
+            }
+        },
+        _createPocket: function(clazz, options, iconClass) {
+            var pocket = document.createElement('div');
+            pocket.className = clazz;
+            pocket.innerHTML = pocketHtml.replace('{contentrefresh}', options.contentinit).replace('{icon}', iconClass);
+            return pocket;
+        },
+        _resetPullDownLoading: function() {
+            var loading = this.pullLoading;
+            if (loading) {
+                this.pullCaption.innerHTML = this.options.down.contentdown;
+                loading.style.webkitTransition = "";
+                loading.style.webkitTransform = "";
+                loading.style.webkitAnimation = "";
+                loading.className = CLASS_LOADING_DOWN;
+            }
+        },
+        _setCaptionClass: function(isPulldown, caption, title) {
+            if (!isPulldown) {
+                switch (title) {
+                    case this.options.up.contentdown:
+                        caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;
+                        break;
+                    case this.options.up.contentrefresh:
+                        caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_REFRESH
+                        break;
+                    case this.options.up.contentnomore:
+                        caption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE;
+                        break;
+                }
+            }
+        },
+        _setCaption: function(title, reset) {
+            if (this.loading) {
+                return;
+            }
+            var options = this.options;
+            var pocket = this.pullPocket;
+            var caption = this.pullCaption;
+            var loading = this.pullLoading;
+            var isPulldown = this.pulldown;
+            var self = this;
+            if (pocket) {
+                if (reset) {
+                    setTimeout(function() {
+                        caption.innerHTML = self.lastTitle = title;
+                        if (isPulldown) {
+                            loading.className = CLASS_LOADING_DOWN;
+                        } else {
+                            self._setCaptionClass(false, caption, title);
+                            loading.className = CLASS_LOADING;
+                        }
+                        loading.style.webkitAnimation = "";
+                        loading.style.webkitTransition = "";
+                        loading.style.webkitTransform = "";
+                    }, 100);
+                } else {
+                    if (title !== this.lastTitle) {
+                        caption.innerHTML = title;
+                        if (isPulldown) {
+                            if (title === options.down.contentrefresh) {
+                                loading.className = CLASS_LOADING;
+                                loading.style.webkitAnimation = "spinner-spin 1s step-end infinite";
+                            } else if (title === options.down.contentover) {
+                                loading.className = CLASS_LOADING_UP;
+                                loading.style.webkitTransition = "-webkit-transform 0.3s ease-in";
+                                loading.style.webkitTransform = "rotate(180deg)";
+                            } else if (title === options.down.contentdown) {
+                                loading.className = CLASS_LOADING_DOWN;
+                                loading.style.webkitTransition = "-webkit-transform 0.3s ease-in";
+                                loading.style.webkitTransform = "rotate(0deg)";
+                            }
+                        } else {
+                            if (title === options.up.contentrefresh) {
+                                loading.className = CLASS_LOADING + ' ' + CLASS_VISIBILITY;
+                            } else {
+                                loading.className = CLASS_LOADING + ' ' + CLASS_HIDDEN;
+                            }
+                            self._setCaptionClass(false, caption, title);
+                        }
+                        this.lastTitle = title;
+                    }
+                }
+
+            }
+        }
+    };
+    $.PullRefresh = PullRefresh;
+})(mui, document);
+(function($, window, document, undefined) {
+	var CLASS_SCROLL = 'mui-scroll';
+	var CLASS_SCROLLBAR = 'mui-scrollbar';
+	var CLASS_INDICATOR = 'mui-scrollbar-indicator';
+	var CLASS_SCROLLBAR_VERTICAL = CLASS_SCROLLBAR + '-vertical';
+	var CLASS_SCROLLBAR_HORIZONTAL = CLASS_SCROLLBAR + '-horizontal';
+
+	var CLASS_ACTIVE = 'mui-active';
+
+	var ease = {
+		quadratic: {
+			style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
+			fn: function(k) {
+				return k * (2 - k);
+			}
+		},
+		circular: {
+			style: 'cubic-bezier(0.1, 0.57, 0.1, 1)',
+			fn: function(k) {
+				return Math.sqrt(1 - (--k * k));
+			}
+		},
+		outCirc: {
+			style: 'cubic-bezier(0.075, 0.82, 0.165, 1)'
+		},
+		outCubic: {
+			style: 'cubic-bezier(0.165, 0.84, 0.44, 1)'
+		}
+	}
+	var Scroll = $.Class.extend({
+		init: function(element, options) {
+			this.wrapper = this.element = element;
+			this.scroller = this.wrapper.children[0];
+			this.scrollerStyle = this.scroller && this.scroller.style;
+			this.stopped = false;
+
+			this.options = $.extend(true, {
+				scrollY: true, //是否竖向滚动
+				scrollX: false, //是否横向滚动
+				startX: 0, //初始化时滚动至x
+				startY: 0, //初始化时滚动至y
+
+				indicators: true, //是否显示滚动条
+				stopPropagation: false,
+				hardwareAccelerated: true,
+				fixedBadAndorid: false,
+				preventDefaultException: {
+					tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|VIDEO)$/
+				},
+				momentum: true,
+
+				snapX: 0.5, //横向切换距离(以当前容器宽度为基准)
+				snap: false, //图片轮播,拖拽式选项卡
+
+				bounce: true, //是否启用回弹
+				bounceTime: 500, //回弹动画时间
+				bounceEasing: ease.outCirc, //回弹动画曲线
+
+				scrollTime: 500,
+				scrollEasing: ease.outCubic, //轮播动画曲线
+
+				directionLockThreshold: 5,
+
+				parallaxElement: false, //视差元素
+				parallaxRatio: 0.5
+			}, options);
+
+			this.x = 0;
+			this.y = 0;
+			this.translateZ = this.options.hardwareAccelerated ? ' translateZ(0)' : '';
+
+			this._init();
+			if (this.scroller) {
+				this.refresh();
+				//				if (this.options.startX !== 0 || this.options.startY !== 0) { //需要判断吗?后续根据实际情况再看看
+				this.scrollTo(this.options.startX, this.options.startY);
+				//				}
+			}
+		},
+		_init: function() {
+			this._initParallax();
+			this._initIndicators();
+			this._initEvent();
+		},
+		_initParallax: function() {
+			if (this.options.parallaxElement) {
+				this.parallaxElement = document.querySelector(this.options.parallaxElement);
+				this.parallaxStyle = this.parallaxElement.style;
+				this.parallaxHeight = this.parallaxElement.offsetHeight;
+				this.parallaxImgStyle = this.parallaxElement.querySelector('img').style;
+			}
+		},
+		_initIndicators: function() {
+			var self = this;
+			self.indicators = [];
+			if (!this.options.indicators) {
+				return;
+			}
+			var indicators = [],
+				indicator;
+
+			// Vertical scrollbar
+			if (self.options.scrollY) {
+				indicator = {
+					el: this._createScrollBar(CLASS_SCROLLBAR_VERTICAL),
+					listenX: false
+				};
+
+				this.wrapper.appendChild(indicator.el);
+				indicators.push(indicator);
+			}
+
+			// Horizontal scrollbar
+			if (this.options.scrollX) {
+				indicator = {
+					el: this._createScrollBar(CLASS_SCROLLBAR_HORIZONTAL),
+					listenY: false
+				};
+
+				this.wrapper.appendChild(indicator.el);
+				indicators.push(indicator);
+			}
+
+			for (var i = indicators.length; i--;) {
+				this.indicators.push(new Indicator(this, indicators[i]));
+			}
+
+		},
+		_initSnap: function() {
+			this.currentPage = {};
+			this.pages = [];
+			var snaps = this.snaps;
+			var length = snaps.length;
+			var m = 0;
+			var n = -1;
+			var x = 0;
+			var leftX = 0;
+			var rightX = 0;
+			var snapX = 0;
+			for (var i = 0; i < length; i++) {
+				var snap = snaps[i];
+				var offsetLeft = snap.offsetLeft;
+				var offsetWidth = snap.offsetWidth;
+				if (i === 0 || offsetLeft <= snaps[i - 1].offsetLeft) {
+					m = 0;
+					n++;
+				}
+				if (!this.pages[m]) {
+					this.pages[m] = [];
+				}
+				x = this._getSnapX(offsetLeft);
+				snapX = Math.round((offsetWidth) * this.options.snapX);
+				leftX = x - snapX;
+				rightX = x - offsetWidth + snapX;
+				this.pages[m][n] = {
+					x: x,
+					leftX: leftX,
+					rightX: rightX,
+					pageX: m,
+					element: snap
+				}
+				if (snap.classList.contains(CLASS_ACTIVE)) {
+					this.currentPage = this.pages[m][0];
+				}
+				if (x >= this.maxScrollX) {
+					m++;
+				}
+			}
+			this.options.startX = this.currentPage.x || 0;
+		},
+		_getSnapX: function(offsetLeft) {
+			return Math.max(Math.min(0, -offsetLeft + (this.wrapperWidth / 2)), this.maxScrollX);
+		},
+		_gotoPage: function(index) {
+			this.currentPage = this.pages[Math.min(index, this.pages.length - 1)][0];
+			for (var i = 0, len = this.snaps.length; i < len; i++) {
+				if (i === index) {
+					this.snaps[i].classList.add(CLASS_ACTIVE);
+				} else {
+					this.snaps[i].classList.remove(CLASS_ACTIVE);
+				}
+			}
+			this.scrollTo(this.currentPage.x, 0, this.options.scrollTime);
+		},
+		_nearestSnap: function(x) {
+			if (!this.pages.length) {
+				return {
+					x: 0,
+					pageX: 0
+				};
+			}
+			var i = 0;
+			var length = this.pages.length;
+			if (x > 0) {
+				x = 0;
+			} else if (x < this.maxScrollX) {
+				x = this.maxScrollX;
+			}
+			for (; i < length; i++) {
+				var nearestX = this.direction === 'left' ? this.pages[i][0].leftX : this.pages[i][0].rightX;
+				if (x >= nearestX) {
+					return this.pages[i][0];
+				}
+			}
+			return {
+				x: 0,
+				pageX: 0
+			};
+		},
+		_initEvent: function(detach) {
+			var action = detach ? 'removeEventListener' : 'addEventListener';
+			window[action]('orientationchange', this);
+			window[action]('resize', this);
+
+			this.scroller[action]('webkitTransitionEnd', this);
+
+			this.wrapper[action]($.EVENT_START, this);
+			this.wrapper[action]($.EVENT_CANCEL, this);
+			this.wrapper[action]($.EVENT_END, this);
+			this.wrapper[action]('drag', this);
+			this.wrapper[action]('dragend', this);
+			this.wrapper[action]('flick', this);
+			this.wrapper[action]('scrollend', this);
+			if (this.options.scrollX) {
+				this.wrapper[action]('swiperight', this);
+			}
+			var segmentedControl = this.wrapper.querySelector('.mui-segmented-control');
+			if (segmentedControl) { //靠,这个bug排查了一下午,阻止hash跳转,一旦hash跳转会导致可拖拽选项卡的tab不见
+				mui(segmentedControl)[detach ? 'off' : 'on']('click', 'a', $.preventDefault);
+			}
+
+			this.wrapper[action]('scrollstart', this);
+			this.wrapper[action]('refresh', this);
+		},
+		_handleIndicatorScrollend: function() {
+			this.indicators.map(function(indicator) {
+				indicator.fade();
+			});
+		},
+		_handleIndicatorScrollstart: function() {
+			this.indicators.map(function(indicator) {
+				indicator.fade(1);
+			});
+		},
+		_handleIndicatorRefresh: function() {
+			this.indicators.map(function(indicator) {
+				indicator.refresh();
+			});
+		},
+		handleEvent: function(e) {
+			if (this.stopped) {
+				this.resetPosition();
+				return;
+			}
+
+			switch (e.type) {
+				case $.EVENT_START:
+					this._start(e);
+					break;
+				case 'drag':
+					this.options.stopPropagation && e.stopPropagation();
+					this._drag(e);
+					break;
+				case 'dragend':
+				case 'flick':
+					this.options.stopPropagation && e.stopPropagation();
+					this._flick(e);
+					break;
+				case $.EVENT_CANCEL:
+				case $.EVENT_END:
+					this._end(e);
+					break;
+				case 'webkitTransitionEnd':
+					this.transitionTimer && this.transitionTimer.cancel();
+					this._transitionEnd(e);
+					break;
+				case 'scrollstart':
+					this._handleIndicatorScrollstart(e);
+					break;
+				case 'scrollend':
+					this._handleIndicatorScrollend(e);
+					this._scrollend(e);
+					e.stopPropagation();
+					break;
+				case 'orientationchange':
+				case 'resize':
+					this._resize();
+					break;
+				case 'swiperight':
+					e.stopPropagation();
+					break;
+				case 'refresh':
+					this._handleIndicatorRefresh(e);
+					break;
+
+			}
+		},
+		_start: function(e) {
+			this.moved = this.needReset = false;
+			this._transitionTime();
+			if (this.isInTransition) {
+				this.needReset = true;
+				this.isInTransition = false;
+				var pos = $.parseTranslateMatrix($.getStyles(this.scroller, 'webkitTransform'));
+				this.setTranslate(Math.round(pos.x), Math.round(pos.y));
+				//				this.resetPosition(); //reset
+				$.trigger(this.scroller, 'scrollend', this);
+				//				e.stopPropagation();
+				e.preventDefault();
+			}
+			this.reLayout();
+			$.trigger(this.scroller, 'beforescrollstart', this);
+		},
+		_getDirectionByAngle: function(angle) {
+			if (angle < -80 && angle > -100) {
+				return 'up';
+			} else if (angle >= 80 && angle < 100) {
+				return 'down';
+			} else if (angle >= 170 || angle <= -170) {
+				return 'left';
+			} else if (angle >= -35 && angle <= 10) {
+				return 'right';
+			}
+			return null;
+		},
+		_drag: function(e) {
+			//			if (this.needReset) {
+			//				e.stopPropagation(); //disable parent drag(nested scroller)
+			//				return;
+			//			}
+			var detail = e.detail;
+			if (this.options.scrollY || detail.direction === 'up' || detail.direction === 'down') { //如果是竖向滚动或手势方向是上或下
+				//ios8 hack
+				if ($.os.ios && parseFloat($.os.version) >= 8) { //多webview时,离开当前webview会导致后续touch事件不触发
+					var clientY = detail.gesture.touches[0].clientY;
+					//下拉刷新 or 上拉加载
+					if ((clientY + 10) > window.innerHeight || clientY < 10) {
+						this.resetPosition(this.options.bounceTime);
+						return;
+					}
+				}
+			}
+			var isPreventDefault = isReturn = false;
+			var direction = this._getDirectionByAngle(detail.angle);
+			if (detail.direction === 'left' || detail.direction === 'right') {
+				if (this.options.scrollX) {
+					isPreventDefault = true;
+					if (!this.moved) { //识别角度(该角度导致轮播不灵敏)
+						//						if (direction !== 'left' && direction !== 'right') {
+						//							isReturn = true;
+						//						} else {
+						$.gestures.session.lockDirection = true; //锁定方向
+						$.gestures.session.startDirection = detail.direction;
+						//						}
+					}
+				} else if (this.options.scrollY && !this.moved) {
+					isReturn = true;
+				}
+			} else if (detail.direction === 'up' || detail.direction === 'down') {
+				if (this.options.scrollY) {
+					isPreventDefault = true;
+					//					if (!this.moved) { //识别角度,竖向滚动似乎没必要进行小角度验证
+					//						if (direction !== 'up' && direction !== 'down') {
+					//							isReturn = true;
+					//						}
+					//					}
+					if (!this.moved) {
+						$.gestures.session.lockDirection = true; //锁定方向
+						$.gestures.session.startDirection = detail.direction;
+					}
+				} else if (this.options.scrollX && !this.moved) {
+					isReturn = true;
+				}
+			} else {
+				isReturn = true;
+			}
+			if (this.moved || isPreventDefault) {
+				e.stopPropagation(); //阻止冒泡(scroll类嵌套)
+				detail.gesture && detail.gesture.preventDefault();
+			}
+			if (isReturn) { //禁止非法方向滚动
+				return;
+			}
+			if (!this.moved) {
+				$.trigger(this.scroller, 'scrollstart', this);
+			} else {
+				e.stopPropagation(); //move期间阻止冒泡(scroll嵌套)
+			}
+			var deltaX = 0;
+			var deltaY = 0;
+			if (!this.moved) { //start
+				deltaX = detail.deltaX;
+				deltaY = detail.deltaY;
+			} else { //move
+				deltaX = detail.deltaX - $.gestures.session.prevTouch.deltaX;
+				deltaY = detail.deltaY - $.gestures.session.prevTouch.deltaY;
+			}
+			var absDeltaX = Math.abs(detail.deltaX);
+			var absDeltaY = Math.abs(detail.deltaY);
+			if (absDeltaX > absDeltaY + this.options.directionLockThreshold) {
+				deltaY = 0;
+			} else if (absDeltaY >= absDeltaX + this.options.directionLockThreshold) {
+				deltaX = 0;
+			}
+
+			deltaX = this.hasHorizontalScroll ? deltaX : 0;
+			deltaY = this.hasVerticalScroll ? deltaY : 0;
+			var newX = this.x + deltaX;
+			var newY = this.y + deltaY;
+			// Slow down if outside of the boundaries
+			if (newX > 0 || newX < this.maxScrollX) {
+				newX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX;
+			}
+			if (newY > 0 || newY < this.maxScrollY) {
+				newY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY;
+			}
+
+			if (!this.requestAnimationFrame) {
+				this._updateTranslate();
+			}
+			this.direction = detail.deltaX > 0 ? 'right' : 'left';
+			this.moved = true;
+			this.x = newX;
+			this.y = newY;
+			$.trigger(this.scroller, 'scroll', this);
+		},
+		_flick: function(e) {
+			//			if (!this.moved || this.needReset) {
+			//				return;
+			//			}
+			if (!this.moved) {
+				return;
+			}
+			e.stopPropagation();
+			var detail = e.detail;
+			this._clearRequestAnimationFrame();
+			if (e.type === 'dragend' && detail.flick) { //dragend
+				return;
+			}
+
+			var newX = Math.round(this.x);
+			var newY = Math.round(this.y);
+
+			this.isInTransition = false;
+			// reset if we are outside of the boundaries
+			if (this.resetPosition(this.options.bounceTime)) {
+				return;
+			}
+
+			this.scrollTo(newX, newY); // ensures that the last position is rounded
+
+			if (e.type === 'dragend') { //dragend
+				$.trigger(this.scroller, 'scrollend', this);
+				return;
+			}
+			var time = 0;
+			var easing = '';
+			// start momentum animation if needed
+			if (this.options.momentum && detail.flickTime < 300) {
+				momentumX = this.hasHorizontalScroll ? this._momentum(this.x, detail.flickDistanceX, detail.flickTime, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : {
+					destination: newX,
+					duration: 0
+				};
+				momentumY = this.hasVerticalScroll ? this._momentum(this.y, detail.flickDistanceY, detail.flickTime, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : {
+					destination: newY,
+					duration: 0
+				};
+				newX = momentumX.destination;
+				newY = momentumY.destination;
+				time = Math.max(momentumX.duration, momentumY.duration);
+				this.isInTransition = true;
+			}
+
+			if (newX != this.x || newY != this.y) {
+				if (newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY) {
+					easing = ease.quadratic;
+				}
+				this.scrollTo(newX, newY, time, easing);
+				return;
+			}
+
+			$.trigger(this.scroller, 'scrollend', this);
+			//			e.stopPropagation();
+		},
+		_end: function(e) {
+			this.needReset = false;
+			if ((!this.moved && this.needReset) || e.type === $.EVENT_CANCEL) {
+				this.resetPosition();
+			}
+		},
+		_transitionEnd: function(e) {
+			if (e.target != this.scroller || !this.isInTransition) {
+				return;
+			}
+			this._transitionTime();
+			if (!this.resetPosition(this.options.bounceTime)) {
+				this.isInTransition = false;
+				$.trigger(this.scroller, 'scrollend', this);
+			}
+		},
+		_scrollend: function(e) {
+			if ((this.y === 0 && this.maxScrollY === 0) || (Math.abs(this.y) > 0 && this.y <= this.maxScrollY)) {
+				$.trigger(this.scroller, 'scrollbottom', this);
+			}
+		},
+		_resize: function() {
+			var that = this;
+			clearTimeout(that.resizeTimeout);
+			that.resizeTimeout = setTimeout(function() {
+				that.refresh();
+			}, that.options.resizePolling);
+		},
+		_transitionTime: function(time) {
+			time = time || 0;
+			this.scrollerStyle['webkitTransitionDuration'] = time + 'ms';
+			if (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果
+				this.parallaxStyle['webkitTransitionDuration'] = time + 'ms';
+			}
+			if (this.options.fixedBadAndorid && !time && $.os.isBadAndroid) {
+				this.scrollerStyle['webkitTransitionDuration'] = '0.001s';
+				if (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果
+					this.parallaxStyle['webkitTransitionDuration'] = '0.001s';
+				}
+			}
+			if (this.indicators) {
+				for (var i = this.indicators.length; i--;) {
+					this.indicators[i].transitionTime(time);
+				}
+			}
+			if (time) { //自定义timer,保证webkitTransitionEnd始终触发
+				this.transitionTimer && this.transitionTimer.cancel();
+				this.transitionTimer = $.later(function() {
+					$.trigger(this.scroller, 'webkitTransitionEnd');
+				}, time + 100, this);
+			}
+		},
+		_transitionTimingFunction: function(easing) {
+			this.scrollerStyle['webkitTransitionTimingFunction'] = easing;
+			if (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果
+				this.parallaxStyle['webkitTransitionDuration'] = easing;
+			}
+			if (this.indicators) {
+				for (var i = this.indicators.length; i--;) {
+					this.indicators[i].transitionTimingFunction(easing);
+				}
+			}
+		},
+		_translate: function(x, y) {
+			this.x = x;
+			this.y = y;
+		},
+		_clearRequestAnimationFrame: function() {
+			if (this.requestAnimationFrame) {
+				cancelAnimationFrame(this.requestAnimationFrame);
+				this.requestAnimationFrame = null;
+			}
+		},
+		_updateTranslate: function() {
+			var self = this;
+			if (self.x !== self.lastX || self.y !== self.lastY) {
+				self.setTranslate(self.x, self.y);
+			}
+			self.requestAnimationFrame = requestAnimationFrame(function() {
+				self._updateTranslate();
+			});
+		},
+		_createScrollBar: function(clazz) {
+			var scrollbar = document.createElement('div');
+			var indicator = document.createElement('div');
+			scrollbar.className = CLASS_SCROLLBAR + ' ' + clazz;
+			indicator.className = CLASS_INDICATOR;
+			scrollbar.appendChild(indicator);
+			if (clazz === CLASS_SCROLLBAR_VERTICAL) {
+				this.scrollbarY = scrollbar;
+				this.scrollbarIndicatorY = indicator;
+			} else if (clazz === CLASS_SCROLLBAR_HORIZONTAL) {
+				this.scrollbarX = scrollbar;
+				this.scrollbarIndicatorX = indicator;
+			}
+			this.wrapper.appendChild(scrollbar);
+			return scrollbar;
+		},
+		_preventDefaultException: function(el, exceptions) {
+			for (var i in exceptions) {
+				if (exceptions[i].test(el[i])) {
+					return true;
+				}
+			}
+			return false;
+		},
+		_reLayout: function() {
+			if (!this.hasHorizontalScroll) {
+				this.maxScrollX = 0;
+				this.scrollerWidth = this.wrapperWidth;
+			}
+
+			if (!this.hasVerticalScroll) {
+				this.maxScrollY = 0;
+				this.scrollerHeight = this.wrapperHeight;
+			}
+
+			this.indicators.map(function(indicator) {
+				indicator.refresh();
+			});
+
+			//以防slider类嵌套使用
+			if (this.options.snap && typeof this.options.snap === 'string') {
+				var items = this.scroller.querySelectorAll(this.options.snap);
+				this.itemLength = 0;
+				this.snaps = [];
+				for (var i = 0, len = items.length; i < len; i++) {
+					var item = items[i];
+					if (item.parentNode === this.scroller) {
+						this.itemLength++;
+						this.snaps.push(item);
+					}
+				}
+				this._initSnap(); //需要每次都_initSnap么。其实init的时候执行一次,后续resize的时候执行一次就行了吧.先这么做吧,如果影响性能,再调整
+			}
+		},
+		_momentum: function(current, distance, time, lowerMargin, wrapperSize, deceleration) {
+			var speed = parseFloat(Math.abs(distance) / time),
+				destination,
+				duration;
+
+			deceleration = deceleration === undefined ? 0.0006 : deceleration;
+			destination = current + (speed * speed) / (2 * deceleration) * (distance < 0 ? -1 : 1);
+			duration = speed / deceleration;
+			if (destination < lowerMargin) {
+				destination = wrapperSize ? lowerMargin - (wrapperSize / 2.5 * (speed / 8)) : lowerMargin;
+				distance = Math.abs(destination - current);
+				duration = distance / speed;
+			} else if (destination > 0) {
+				destination = wrapperSize ? wrapperSize / 2.5 * (speed / 8) : 0;
+				distance = Math.abs(current) + destination;
+				duration = distance / speed;
+			}
+
+			return {
+				destination: Math.round(destination),
+				duration: duration
+			};
+		},
+		_getTranslateStr: function(x, y) {
+			if (this.options.hardwareAccelerated) {
+				return 'translate3d(' + x + 'px,' + y + 'px,0px) ' + this.translateZ;
+			}
+			return 'translate(' + x + 'px,' + y + 'px) ';
+		},
+		//API
+		setStopped: function(stopped) {
+			// this.stopped = !!stopped;
+
+			// fixed ios双webview模式下拉刷新
+			if(stopped) {
+				this.disablePullupToRefresh();
+				this.disablePulldownToRefresh();
+			} else {
+				this.enablePullupToRefresh();
+				this.enablePulldownToRefresh();
+			}
+		},
+		setTranslate: function(x, y) {
+			this.x = x;
+			this.y = y;
+			this.scrollerStyle['webkitTransform'] = this._getTranslateStr(x, y);
+			if (this.parallaxElement && this.options.scrollY) { //目前仅支持竖向视差效果
+				var parallaxY = y * this.options.parallaxRatio;
+				var scale = 1 + parallaxY / ((this.parallaxHeight - parallaxY) / 2);
+				if (scale > 1) {
+					this.parallaxImgStyle['opacity'] = 1 - parallaxY / 100 * this.options.parallaxRatio;
+					this.parallaxStyle['webkitTransform'] = this._getTranslateStr(0, -parallaxY) + ' scale(' + scale + ',' + scale + ')';
+				} else {
+					this.parallaxImgStyle['opacity'] = 1;
+					this.parallaxStyle['webkitTransform'] = this._getTranslateStr(0, -1) + ' scale(1,1)';
+				}
+			}
+			if (this.indicators) {
+				for (var i = this.indicators.length; i--;) {
+					this.indicators[i].updatePosition();
+				}
+			}
+			this.lastX = this.x;
+			this.lastY = this.y;
+			$.trigger(this.scroller, 'scroll', this);
+		},
+		reLayout: function() {
+			this.wrapper.offsetHeight;
+
+			var paddingLeft = parseFloat($.getStyles(this.wrapper, 'padding-left')) || 0;
+			var paddingRight = parseFloat($.getStyles(this.wrapper, 'padding-right')) || 0;
+			var paddingTop = parseFloat($.getStyles(this.wrapper, 'padding-top')) || 0;
+			var paddingBottom = parseFloat($.getStyles(this.wrapper, 'padding-bottom')) || 0;
+
+			var clientWidth = this.wrapper.clientWidth;
+			var clientHeight = this.wrapper.clientHeight;
+
+			this.scrollerWidth = this.scroller.offsetWidth;
+			this.scrollerHeight = this.scroller.offsetHeight;
+
+			this.wrapperWidth = clientWidth - paddingLeft - paddingRight;
+			this.wrapperHeight = clientHeight - paddingTop - paddingBottom;
+
+			this.maxScrollX = Math.min(this.wrapperWidth - this.scrollerWidth, 0);
+			this.maxScrollY = Math.min(this.wrapperHeight - this.scrollerHeight, 0);
+			this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0;
+			this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0;
+			this._reLayout();
+		},
+		resetPosition: function(time) {
+			var x = this.x,
+				y = this.y;
+
+			time = time || 0;
+			if (!this.hasHorizontalScroll || this.x > 0) {
+				x = 0;
+			} else if (this.x < this.maxScrollX) {
+				x = this.maxScrollX;
+			}
+
+			if (!this.hasVerticalScroll || this.y > 0) {
+				y = 0;
+			} else if (this.y < this.maxScrollY) {
+				y = this.maxScrollY;
+			}
+
+			if (x == this.x && y == this.y) {
+				return false;
+			}
+			this.scrollTo(x, y, time, this.options.scrollEasing);
+
+			return true;
+		},
+		_reInit: function() {
+			var groups = this.wrapper.querySelectorAll('.' + CLASS_SCROLL);
+			for (var i = 0, len = groups.length; i < len; i++) {
+				if (groups[i].parentNode === this.wrapper) {
+					this.scroller = groups[i];
+					break;
+				}
+			}
+			this.scrollerStyle = this.scroller && this.scroller.style;
+		},
+		refresh: function() {
+			this._reInit();
+			this.reLayout();
+			$.trigger(this.scroller, 'refresh', this);
+			this.resetPosition();
+		},
+		scrollTo: function(x, y, time, easing) {
+			var easing = easing || ease.circular;
+			//			this.isInTransition = time > 0 && (this.lastX != x || this.lastY != y);
+			//暂不严格判断x,y,否则会导致部分版本上不正常触发轮播
+			this.isInTransition = time > 0;
+			if (this.isInTransition) {
+				this._clearRequestAnimationFrame();
+				this._transitionTimingFunction(easing.style);
+				this._transitionTime(time);
+				this.setTranslate(x, y);
+			} else {
+				this.setTranslate(x, y);
+			}
+
+		},
+		scrollToBottom: function(time, easing) {
+			time = time || this.options.scrollTime;
+			this.scrollTo(0, this.maxScrollY, time, easing);
+		},
+		gotoPage: function(index) {
+			this._gotoPage(index);
+		},
+		destroy: function() {
+			this._initEvent(true); //detach
+			delete $.data[this.wrapper.getAttribute('data-scroll')];
+			this.wrapper.setAttribute('data-scroll', '');
+		}
+	});
+	//Indicator
+	var Indicator = function(scroller, options) {
+		this.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el;
+		this.wrapperStyle = this.wrapper.style;
+		this.indicator = this.wrapper.children[0];
+		this.indicatorStyle = this.indicator.style;
+		this.scroller = scroller;
+
+		this.options = $.extend({
+			listenX: true,
+			listenY: true,
+			fade: false,
+			speedRatioX: 0,
+			speedRatioY: 0
+		}, options);
+
+		this.sizeRatioX = 1;
+		this.sizeRatioY = 1;
+		this.maxPosX = 0;
+		this.maxPosY = 0;
+
+		if (this.options.fade) {
+			this.wrapperStyle['webkitTransform'] = this.scroller.translateZ;
+			this.wrapperStyle['webkitTransitionDuration'] = this.options.fixedBadAndorid && $.os.isBadAndroid ? '0.001s' : '0ms';
+			this.wrapperStyle.opacity = '0';
+		}
+	}
+	Indicator.prototype = {
+		handleEvent: function(e) {
+
+		},
+		transitionTime: function(time) {
+			time = time || 0;
+			this.indicatorStyle['webkitTransitionDuration'] = time + 'ms';
+			if (this.scroller.options.fixedBadAndorid && !time && $.os.isBadAndroid) {
+				this.indicatorStyle['webkitTransitionDuration'] = '0.001s';
+			}
+		},
+		transitionTimingFunction: function(easing) {
+			this.indicatorStyle['webkitTransitionTimingFunction'] = easing;
+		},
+		refresh: function() {
+			this.transitionTime();
+
+			if (this.options.listenX && !this.options.listenY) {
+				this.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';
+			} else if (this.options.listenY && !this.options.listenX) {
+				this.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none';
+			} else {
+				this.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';
+			}
+
+			this.wrapper.offsetHeight; // force refresh
+
+			if (this.options.listenX) {
+				this.wrapperWidth = this.wrapper.clientWidth;
+				this.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8);
+				this.indicatorStyle.width = this.indicatorWidth + 'px';
+
+				this.maxPosX = this.wrapperWidth - this.indicatorWidth;
+
+				this.minBoundaryX = 0;
+				this.maxBoundaryX = this.maxPosX;
+
+				this.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX));
+			}
+
+			if (this.options.listenY) {
+				this.wrapperHeight = this.wrapper.clientHeight;
+				this.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8);
+				this.indicatorStyle.height = this.indicatorHeight + 'px';
+
+				this.maxPosY = this.wrapperHeight - this.indicatorHeight;
+
+				this.minBoundaryY = 0;
+				this.maxBoundaryY = this.maxPosY;
+
+				this.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY));
+			}
+
+			this.updatePosition();
+		},
+
+		updatePosition: function() {
+			var x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0,
+				y = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0;
+
+			if (x < this.minBoundaryX) {
+				this.width = Math.max(this.indicatorWidth + x, 8);
+				this.indicatorStyle.width = this.width + 'px';
+				x = this.minBoundaryX;
+			} else if (x > this.maxBoundaryX) {
+				this.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8);
+				this.indicatorStyle.width = this.width + 'px';
+				x = this.maxPosX + this.indicatorWidth - this.width;
+			} else if (this.width != this.indicatorWidth) {
+				this.width = this.indicatorWidth;
+				this.indicatorStyle.width = this.width + 'px';
+			}
+
+			if (y < this.minBoundaryY) {
+				this.height = Math.max(this.indicatorHeight + y * 3, 8);
+				this.indicatorStyle.height = this.height + 'px';
+				y = this.minBoundaryY;
+			} else if (y > this.maxBoundaryY) {
+				this.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8);
+				this.indicatorStyle.height = this.height + 'px';
+				y = this.maxPosY + this.indicatorHeight - this.height;
+			} else if (this.height != this.indicatorHeight) {
+				this.height = this.indicatorHeight;
+				this.indicatorStyle.height = this.height + 'px';
+			}
+
+			this.x = x;
+			this.y = y;
+
+			this.indicatorStyle['webkitTransform'] = this.scroller._getTranslateStr(x, y);
+
+		},
+		fade: function(val, hold) {
+			if (hold && !this.visible) {
+				return;
+			}
+
+			clearTimeout(this.fadeTimeout);
+			this.fadeTimeout = null;
+
+			var time = val ? 250 : 500,
+				delay = val ? 0 : 300;
+
+			val = val ? '1' : '0';
+
+			this.wrapperStyle['webkitTransitionDuration'] = time + 'ms';
+
+			this.fadeTimeout = setTimeout((function(val) {
+				this.wrapperStyle.opacity = val;
+				this.visible = +val;
+			}).bind(this, val), delay);
+		}
+	};
+
+	$.Scroll = Scroll;
+
+	$.fn.scroll = function(options) {
+		var scrollApis = [];
+		this.each(function() {
+			var scrollApi = null;
+			var self = this;
+			var id = self.getAttribute('data-scroll');
+			if (!id) {
+				id = ++$.uuid;
+				var _options = $.extend({}, options);
+				if (self.classList.contains('mui-segmented-control')) {
+					_options = $.extend(_options, {
+						scrollY: false,
+						scrollX: true,
+						indicators: false,
+						snap: '.mui-control-item'
+					});
+				}
+				$.data[id] = scrollApi = new Scroll(self, _options);
+				self.setAttribute('data-scroll', id);
+			} else {
+				scrollApi = $.data[id];
+			}
+			scrollApis.push(scrollApi);
+		});
+		return scrollApis.length === 1 ? scrollApis[0] : scrollApis;
+	};
+})(mui, window, document);
+(function($, window, document, undefined) {
+
+    var CLASS_VISIBILITY = 'mui-visibility';
+    var CLASS_HIDDEN = 'mui-hidden';
+
+    var PullRefresh = $.Scroll.extend($.extend({
+        handleEvent: function(e) {
+            this._super(e);
+            if (e.type === 'scrollbottom') {
+                if (e.target === this.scroller) {
+                    this._scrollbottom();
+                }
+            }
+        },
+        _scrollbottom: function() {
+            if (!this.pulldown && !this.loading) {
+                this.pulldown = false;
+                this._initPullupRefresh();
+                this.pullupLoading();
+            }
+        },
+        _start: function(e) {
+            //仅下拉刷新在start阻止默认事件
+            if (e.touches && e.touches.length && e.touches[0].clientX > 30) {
+                e.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault();
+            }
+            if (!this.loading) {
+                this.pulldown = this.pullPocket = this.pullCaption = this.pullLoading = false
+            }
+            this._super(e);
+        },
+        _drag: function(e) {
+            if (this.y >= 0 && this.disablePulldown && e.detail.direction === 'down') { //禁用下拉刷新
+                return;
+            }
+            this._super(e);
+            if (!this.pulldown && !this.loading && this.topPocket && e.detail.direction === 'down' && this.y >= 0) {
+                this._initPulldownRefresh();
+            }
+            if (this.pulldown) {
+                this._setCaption(this.y > this.options.down.height ? this.options.down.contentover : this.options.down.contentdown);
+            }
+        },
+
+        _reLayout: function() {
+            this.hasVerticalScroll = true;
+            this._super();
+        },
+        //API
+        resetPosition: function(time) {
+            if (this.pulldown && !this.disablePulldown) {
+                if (this.y >= this.options.down.height) {
+                    this.pulldownLoading(undefined, time || 0);
+                    return true;
+                } else {
+                    !this.loading && this.topPocket.classList.remove(CLASS_VISIBILITY);
+                }
+            }
+            return this._super(time);
+        },
+        pulldownLoading: function(y, time) {
+            typeof y === 'undefined' && (y = this.options.down.height); //默认高度
+            this.scrollTo(0, y, time, this.options.bounceEasing);
+            if (this.loading) {
+                return;
+            }
+            //			if (!this.pulldown) {
+            this._initPulldownRefresh();
+            //			}
+            this._setCaption(this.options.down.contentrefresh);
+            this.loading = true;
+            this.indicators.map(function(indicator) {
+                indicator.fade(0);
+            });
+            var callback = this.options.down.callback;
+            callback && callback.call(this);
+        },
+        endPulldownToRefresh: function() {
+            var self = this;
+            if (self.topPocket && self.loading && this.pulldown) {
+                self.scrollTo(0, 0, self.options.bounceTime, self.options.bounceEasing);
+                self.loading = false;
+                self._setCaption(self.options.down.contentdown, true);
+                setTimeout(function() {
+                    self.loading || self.topPocket.classList.remove(CLASS_VISIBILITY);
+                }, 350);
+            }
+        },
+        pullupLoading: function(callback, x, time) {
+            x = x || 0;
+            this.scrollTo(x, this.maxScrollY, time, this.options.bounceEasing);
+            if (this.loading) {
+                return;
+            }
+            this._initPullupRefresh();
+            this._setCaption(this.options.up.contentrefresh);
+            this.indicators.map(function(indicator) {
+                indicator.fade(0);
+            });
+            this.loading = true;
+            callback = callback || this.options.up.callback;
+            callback && callback.call(this);
+        },
+        endPullupToRefresh: function(finished) {
+            var self = this;
+            if (self.bottomPocket) { // && self.loading && !this.pulldown
+                self.loading = false;
+                if (finished) {
+                    this.finished = true;
+                    self._setCaption(self.options.up.contentnomore);
+                    //					self.bottomPocket.classList.remove(CLASS_VISIBILITY);
+                    //					self.bottomPocket.classList.add(CLASS_HIDDEN);
+                    self.wrapper.removeEventListener('scrollbottom', self);
+                } else {
+                    self._setCaption(self.options.up.contentdown);
+                    //					setTimeout(function() {
+                    self.loading || self.bottomPocket.classList.remove(CLASS_VISIBILITY);
+                    //					}, 300);
+                }
+            }
+        },
+        disablePullupToRefresh: function() {
+            this._initPullupRefresh();
+            this.bottomPocket.className = 'mui-pull-bottom-pocket' + ' ' + CLASS_HIDDEN;
+            this.wrapper.removeEventListener('scrollbottom', this);
+        },
+        disablePulldownToRefresh: function() {
+            this._initPulldownRefresh();
+            this.topPocket.className = 'mui-pull-top-pocket' + ' ' + CLASS_HIDDEN;
+            this.disablePulldown = true;
+        },
+        enablePulldownToRefresh: function() {
+            this._initPulldownRefresh();
+            this.topPocket.classList.remove(CLASS_HIDDEN);
+            this._setCaption(this.options.down.contentdown);
+            this.disablePulldown = false;
+        },
+        enablePullupToRefresh: function() {
+            this._initPullupRefresh();
+            this.bottomPocket.classList.remove(CLASS_HIDDEN);
+            this._setCaption(this.options.up.contentdown);
+            this.wrapper.addEventListener('scrollbottom', this);
+        },
+        refresh: function(isReset) {
+            if (isReset && this.finished) {
+                this.enablePullupToRefresh();
+                this.finished = false;
+            }
+            this._super();
+        },
+    }, $.PullRefresh));
+    $.fn.pullRefresh = function(options) {
+        if (this.length === 1) {
+            var self = this[0];
+            var pullRefreshApi = null;
+            var id = self.getAttribute('data-pullrefresh');
+            if (!id && typeof options === 'undefined') {
+                return false;
+            }
+            options = options || {};
+            if (!id) {
+                id = ++$.uuid;
+                $.data[id] = pullRefreshApi = new PullRefresh(self, options);
+                self.setAttribute('data-pullrefresh', id);
+            } else {
+                pullRefreshApi = $.data[id];
+            }
+            if (options.down && options.down.auto) { //如果设置了auto,则自动下拉一次
+                pullRefreshApi.pulldownLoading(options.down.autoY);
+            } else if (options.up && options.up.auto) { //如果设置了auto,则自动上拉一次
+                pullRefreshApi.pullupLoading();
+            }
+            //暂不提供这种调用方式吧			
+            //			if (typeof options === 'string') {
+            //				var methodValue = pullRefreshApi[options].apply(pullRefreshApi, $.slice.call(arguments, 1));
+            //				if (methodValue !== undefined) {
+            //					return methodValue;
+            //				}
+            //			}
+            return pullRefreshApi;
+        }
+    };
+})(mui, window, document);
+/**
+ * snap 重构
+ * @param {Object} $
+ * @param {Object} window
+ */
+(function($, window) {
+	var CLASS_SLIDER = 'mui-slider';
+	var CLASS_SLIDER_GROUP = 'mui-slider-group';
+	var CLASS_SLIDER_LOOP = 'mui-slider-loop';
+	var CLASS_SLIDER_INDICATOR = 'mui-slider-indicator';
+	var CLASS_ACTION_PREVIOUS = 'mui-action-previous';
+	var CLASS_ACTION_NEXT = 'mui-action-next';
+	var CLASS_SLIDER_ITEM = 'mui-slider-item';
+
+	var CLASS_ACTIVE = 'mui-active';
+
+	var SELECTOR_SLIDER_ITEM = '.' + CLASS_SLIDER_ITEM;
+	var SELECTOR_SLIDER_INDICATOR = '.' + CLASS_SLIDER_INDICATOR;
+	var SELECTOR_SLIDER_PROGRESS_BAR = '.mui-slider-progress-bar';
+
+	var Slider = $.Slider = $.Scroll.extend({
+		init: function(element, options) {
+			this._super(element, $.extend(true, {
+				fingers: 1,
+				interval: 0, //设置为0,则不定时轮播
+				scrollY: false,
+				scrollX: true,
+				indicators: false,
+				scrollTime: 1000,
+				startX: false,
+				slideTime: 0, //滑动动画时间
+				snap: SELECTOR_SLIDER_ITEM
+			}, options));
+			if (this.options.startX) {
+				//				$.trigger(this.wrapper, 'scrollend', this);
+			}
+		},
+		_init: function() {
+			this._reInit();
+			if (this.scroller) {
+				this.scrollerStyle = this.scroller.style;
+				this.progressBar = this.wrapper.querySelector(SELECTOR_SLIDER_PROGRESS_BAR);
+				if (this.progressBar) {
+					this.progressBarWidth = this.progressBar.offsetWidth;
+					this.progressBarStyle = this.progressBar.style;
+				}
+				//忘记这个代码是干什么的了?
+				//				this.x = this._getScroll();
+				//				if (this.options.startX === false) {
+				//					this.options.startX = this.x;
+				//				}
+				//根据active修正startX
+
+				this._super();
+				this._initTimer();
+			}
+		},
+		_triggerSlide: function() {
+			var self = this;
+			self.isInTransition = false;
+			var page = self.currentPage;
+			self.slideNumber = self._fixedSlideNumber();
+			if (self.loop) {
+				if (self.slideNumber === 0) {
+					self.setTranslate(self.pages[1][0].x, 0);
+				} else if (self.slideNumber === self.itemLength - 3) {
+					self.setTranslate(self.pages[self.itemLength - 2][0].x, 0);
+				}
+			}
+			if (self.lastSlideNumber != self.slideNumber) {
+				self.lastSlideNumber = self.slideNumber;
+				self.lastPage = self.currentPage;
+				$.trigger(self.wrapper, 'slide', {
+					slideNumber: self.slideNumber
+				});
+			}
+			self._initTimer();
+		},
+		_handleSlide: function(e) {
+			var self = this;
+			if (e.target !== self.wrapper) {
+				return;
+			}
+			var detail = e.detail;
+			detail.slideNumber = detail.slideNumber || 0;
+			var temps = self.scroller.querySelectorAll(SELECTOR_SLIDER_ITEM);
+			var items = [];
+			for (var i = 0, len = temps.length; i < len; i++) {
+				var item = temps[i];
+				if (item.parentNode === self.scroller) {
+					items.push(item);
+				}
+			}
+			var _slideNumber = detail.slideNumber;
+			if (self.loop) {
+				_slideNumber += 1;
+			}
+			if (!self.wrapper.classList.contains('mui-segmented-control')) {
+				for (var i = 0, len = items.length; i < len; i++) {
+					var item = items[i];
+					if (item.parentNode === self.scroller) {
+						if (i === _slideNumber) {
+							item.classList.add(CLASS_ACTIVE);
+						} else {
+							item.classList.remove(CLASS_ACTIVE);
+						}
+					}
+				}
+			}
+			var indicatorWrap = self.wrapper.querySelector('.mui-slider-indicator');
+			if (indicatorWrap) {
+				if (indicatorWrap.getAttribute('data-scroll')) { //scroll
+					$(indicatorWrap).scroll().gotoPage(detail.slideNumber);
+				}
+				var indicators = indicatorWrap.querySelectorAll('.mui-indicator');
+				if (indicators.length > 0) { //图片轮播
+					for (var i = 0, len = indicators.length; i < len; i++) {
+						indicators[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE);
+					}
+				} else {
+					var number = indicatorWrap.querySelector('.mui-number span');
+					if (number) { //图文表格
+						number.innerText = (detail.slideNumber + 1);
+					} else { //segmented controls
+						var controlItems = indicatorWrap.querySelectorAll('.mui-control-item');
+						for (var i = 0, len = controlItems.length; i < len; i++) {
+							controlItems[i].classList[i === detail.slideNumber ? 'add' : 'remove'](CLASS_ACTIVE);
+						}
+					}
+				}
+			}
+			e.stopPropagation();
+		},
+		_handleTabShow: function(e) {
+			var self = this;
+			self.gotoItem((e.detail.tabNumber || 0), self.options.slideTime);
+		},
+		_handleIndicatorTap: function(event) {
+			var self = this;
+			var target = event.target;
+			if (target.classList.contains(CLASS_ACTION_PREVIOUS) || target.classList.contains(CLASS_ACTION_NEXT)) {
+				self[target.classList.contains(CLASS_ACTION_PREVIOUS) ? 'prevItem' : 'nextItem']();
+				event.stopPropagation();
+			}
+		},
+		_initEvent: function(detach) {
+			var self = this;
+			self._super(detach);
+			var action = detach ? 'removeEventListener' : 'addEventListener';
+			self.wrapper[action]('slide', this);
+			self.wrapper[action]($.eventName('shown', 'tab'), this);
+		},
+		handleEvent: function(e) {
+			this._super(e);
+			switch (e.type) {
+				case 'slide':
+					this._handleSlide(e);
+					break;
+				case $.eventName('shown', 'tab'):
+					if (~this.snaps.indexOf(e.target)) { //避免嵌套监听错误的tab show
+						this._handleTabShow(e);
+					}
+					break;
+			}
+		},
+		_scrollend: function(e) {
+			this._super(e);
+			this._triggerSlide(e);
+		},
+		_drag: function(e) {
+			this._super(e);
+			var direction = e.detail.direction;
+			if (direction === 'left' || direction === 'right') {
+				//拖拽期间取消定时
+				var slidershowTimer = this.wrapper.getAttribute('data-slidershowTimer');
+				slidershowTimer && window.clearTimeout(slidershowTimer);
+
+				e.stopPropagation();
+			}
+		},
+		_initTimer: function() {
+			var self = this;
+			var slider = self.wrapper;
+			var interval = self.options.interval;
+			var slidershowTimer = slider.getAttribute('data-slidershowTimer');
+			slidershowTimer && window.clearTimeout(slidershowTimer);
+			if (interval) {
+				slidershowTimer = window.setTimeout(function() {
+					if (!slider) {
+						return;
+					}
+					//仅slider显示状态进行自动轮播
+					if (!!(slider.offsetWidth || slider.offsetHeight)) {
+						self.nextItem(true);
+						//下一个
+					}
+					self._initTimer();
+				}, interval);
+				slider.setAttribute('data-slidershowTimer', slidershowTimer);
+			}
+		},
+
+		_fixedSlideNumber: function(page) {
+			page = page || this.currentPage;
+			var slideNumber = page.pageX;
+			if (this.loop) {
+				if (page.pageX === 0) {
+					slideNumber = this.itemLength - 3;
+				} else if (page.pageX === (this.itemLength - 1)) {
+					slideNumber = 0;
+				} else {
+					slideNumber = page.pageX - 1;
+				}
+			}
+			return slideNumber;
+		},
+		_reLayout: function() {
+			this.hasHorizontalScroll = true;
+			this.loop = this.scroller.classList.contains(CLASS_SLIDER_LOOP);
+			this._super();
+		},
+		_getScroll: function() {
+			var result = $.parseTranslateMatrix($.getStyles(this.scroller, 'webkitTransform'));
+			return result ? result.x : 0;
+		},
+		_transitionEnd: function(e) {
+			if (e.target !== this.scroller || !this.isInTransition) {
+				return;
+			}
+			this._transitionTime();
+			this.isInTransition = false;
+			$.trigger(this.wrapper, 'scrollend', this);
+		},
+		_flick: function(e) {
+			if (!this.moved) { //无moved
+				return;
+			}
+			var detail = e.detail;
+			var direction = detail.direction;
+			this._clearRequestAnimationFrame();
+			this.isInTransition = true;
+			//			if (direction === 'up' || direction === 'down') {
+			//				this.resetPosition(this.options.bounceTime);
+			//				return;
+			//			}
+			if (e.type === 'flick') {
+				if (detail.deltaTime < 200) { //flick,太容易触发,额外校验一下deltaTime
+					this.x = this._getPage((this.slideNumber + (direction === 'right' ? -1 : 1)), true).x;
+				}
+				this.resetPosition(this.options.bounceTime);
+			} else if (e.type === 'dragend' && !detail.flick) {
+				this.resetPosition(this.options.bounceTime);
+			}
+			e.stopPropagation();
+		},
+		_initSnap: function() {
+			this.scrollerWidth = this.itemLength * this.scrollerWidth;
+			this.maxScrollX = Math.min(this.wrapperWidth - this.scrollerWidth, 0);
+			this._super();
+			if (!this.currentPage.x) {
+				//当slider处于隐藏状态时,导致snap计算是错误的,临时先这么判断一下,后续要考虑解决所有scroll在隐藏状态下初始化属性不正确的问题
+				var currentPage = this.pages[this.loop ? 1 : 0];
+				currentPage = currentPage || this.pages[0];
+				if (!currentPage) {
+					return;
+				}
+				this.currentPage = currentPage[0];
+				this.slideNumber = 0;
+				this.lastSlideNumber = typeof this.lastSlideNumber === 'undefined' ? 0 : this.lastSlideNumber;
+			} else {
+				this.slideNumber = this._fixedSlideNumber();
+				this.lastSlideNumber = typeof this.lastSlideNumber === 'undefined' ? this.slideNumber : this.lastSlideNumber;
+			}
+			this.options.startX = this.currentPage.x || 0;
+		},
+		_getSnapX: function(offsetLeft) {
+			return Math.max(-offsetLeft, this.maxScrollX);
+		},
+		_getPage: function(slideNumber, isFlick) {
+			if (this.loop) {
+				if (slideNumber > (this.itemLength - (isFlick ? 2 : 3))) {
+					slideNumber = 1;
+					time = 0;
+				} else if (slideNumber < (isFlick ? -1 : 0)) {
+					slideNumber = this.itemLength - 2;
+					time = 0;
+				} else {
+					slideNumber += 1;
+				}
+			} else {
+				if (!isFlick) {
+					if (slideNumber > (this.itemLength - 1)) {
+						slideNumber = 0;
+						time = 0;
+					} else if (slideNumber < 0) {
+						slideNumber = this.itemLength - 1;
+						time = 0;
+					}
+				}
+				slideNumber = Math.min(Math.max(0, slideNumber), this.itemLength - 1);
+			}
+			return this.pages[slideNumber][0];
+		},
+		_gotoItem: function(slideNumber, time) {
+			this.currentPage = this._getPage(slideNumber, true); //此处传true。可保证程序切换时,动画与人手操作一致(第一张,最后一张的切换动画)
+			this.scrollTo(this.currentPage.x, 0, time, this.options.scrollEasing);
+			if (time === 0) {
+				$.trigger(this.wrapper, 'scrollend', this);
+			}
+		},
+		//API
+		setTranslate: function(x, y) {
+			this._super(x, y);
+			var progressBar = this.progressBar;
+			if (progressBar) {
+				this.progressBarStyle.webkitTransform = this._getTranslateStr((-x * (this.progressBarWidth / this.wrapperWidth)), 0);
+			}
+		},
+		resetPosition: function(time) {
+			time = time || 0;
+			if (this.x > 0) {
+				this.x = 0;
+			} else if (this.x < this.maxScrollX) {
+				this.x = this.maxScrollX;
+			}
+			this.currentPage = this._nearestSnap(this.x);
+			this.scrollTo(this.currentPage.x, 0, time, this.options.scrollEasing);
+			return true;
+		},
+		gotoItem: function(slideNumber, time) {
+			this._gotoItem(slideNumber, typeof time === 'undefined' ? this.options.scrollTime : time);
+		},
+		nextItem: function() {
+			this._gotoItem(this.slideNumber + 1, this.options.scrollTime);
+		},
+		prevItem: function() {
+			this._gotoItem(this.slideNumber - 1, this.options.scrollTime);
+		},
+		getSlideNumber: function() {
+			return this.slideNumber || 0;
+		},
+		_reInit: function() {
+			var groups = this.wrapper.querySelectorAll('.' + CLASS_SLIDER_GROUP);
+			for (var i = 0, len = groups.length; i < len; i++) {
+				if (groups[i].parentNode === this.wrapper) {
+					this.scroller = groups[i];
+					break;
+				}
+			}
+			this.scrollerStyle = this.scroller && this.scroller.style;
+			if (this.progressBar) {
+				this.progressBarWidth = this.progressBar.offsetWidth;
+				this.progressBarStyle = this.progressBar.style;
+			}
+		},
+		refresh: function(options) {
+			if (options) {
+				$.extend(this.options, options);
+				this._super();
+				this._initTimer();
+			} else {
+				this._super();
+			}
+		},
+		destroy: function() {
+			this._initEvent(true); //detach
+			delete $.data[this.wrapper.getAttribute('data-slider')];
+			this.wrapper.setAttribute('data-slider', '');
+		}
+	});
+	$.fn.slider = function(options) {
+		var slider = null;
+		this.each(function() {
+			var sliderElement = this;
+			if (!this.classList.contains(CLASS_SLIDER)) {
+				sliderElement = this.querySelector('.' + CLASS_SLIDER);
+			}
+			if (sliderElement && sliderElement.querySelector(SELECTOR_SLIDER_ITEM)) {
+				var id = sliderElement.getAttribute('data-slider');
+				if (!id) {
+					id = ++$.uuid;
+					$.data[id] = slider = new Slider(sliderElement, options);
+					sliderElement.setAttribute('data-slider', id);
+				} else {
+					slider = $.data[id];
+					if (slider && options) {
+						slider.refresh(options);
+					}
+				}
+			}
+		});
+		return slider;
+	};
+	$.ready(function() {
+		//		setTimeout(function() {
+		/*$('.mui-slider').slider();
+		$('.mui-scroll-wrapper.mui-slider-indicator.mui-segmented-control').scroll({
+			scrollY: false,
+			scrollX: true,
+			indicators: false,
+			snap: '.mui-control-item'
+		});*/
+		//		}, 500); //临时处理slider宽度计算不正确的问题(初步确认是scrollbar导致的)
+
+	});
+})(mui, window);
+/**
+ * pullRefresh 5+
+ * @param {type} $
+ * @returns {undefined}
+ */
+(function($, document) {
+    if (!($.os.plus)) { //仅在5+android支持多webview的使用
+        return;
+    }
+    $.plusReady(function() {
+        if (window.__NWin_Enable__ === false) { //不支持多webview,则不用5+下拉刷新
+            return;
+        }
+        var CLASS_PLUS_PULLREFRESH = 'mui-plus-pullrefresh';
+        var CLASS_VISIBILITY = 'mui-visibility';
+        var CLASS_HIDDEN = 'mui-hidden';
+        var CLASS_BLOCK = 'mui-block';
+
+        var CLASS_PULL_CAPTION = 'mui-pull-caption';
+        var CLASS_PULL_CAPTION_DOWN = 'mui-pull-caption-down';
+        var CLASS_PULL_CAPTION_REFRESH = 'mui-pull-caption-refresh';
+        var CLASS_PULL_CAPTION_NOMORE = 'mui-pull-caption-nomore';
+
+        var PlusPullRefresh = $.Class.extend({
+            init: function(element, options) {
+                this.element = element;
+                this.options = options;
+                this.wrapper = this.scroller = element;
+                this._init();
+                this._initPulldownRefreshEvent();
+            },
+            _init: function() {
+                var self = this;
+                //document.addEventListener('plusscrollbottom', this);
+                window.addEventListener('dragup', self);
+                document.addEventListener("plusscrollbottom", self);
+                self.scrollInterval = window.setInterval(function() {
+                    if (self.isScroll && !self.loading) {
+                        if (window.pageYOffset + window.innerHeight + 10 >= document.documentElement.scrollHeight) {
+                            self.isScroll = false; //放在这里是因为快速滚动的话,有可能检测时,还没到底,所以只要有滚动,没到底之前一直检测高度变化
+                            if (self.bottomPocket) {
+                                self.pullupLoading();
+                            }
+                        }
+                    }
+                }, 100);
+            },
+            _initPulldownRefreshEvent: function() {
+                var self = this;
+                $.plusReady(function() {
+                    if (self.options.down.style == "circle") {
+                        //单webview、原生转圈
+                        self.options.webview = plus.webview.currentWebview();
+                        self.options.webview.setPullToRefresh({
+                            support: true,
+                            color: self.options.down.color || '#2BD009',
+                            height: self.options.down.height || '50px',
+                            range: self.options.down.range || '100px',
+                            style: 'circle',
+                            offset: self.options.down.offset || '0px'
+                        }, function() {
+                            self.options.down.callback();
+                        });
+                    } else if (self.topPocket && self.options.webviewId) {
+                        var webview = plus.webview.getWebviewById(self.options.webviewId); //子窗口
+                        if (!webview) {
+                            return;
+                        }
+                        self.options.webview = webview;
+                        var downOptions = self.options.down;
+                        var height = downOptions.height;
+                        webview.addEventListener('close', function() {
+                            var attrWebviewId = self.options.webviewId && self.options.webviewId.replace(/\//g, "_"); //替换所有"/" 
+                            self.element.removeAttribute('data-pullrefresh-plus-' + attrWebviewId);
+                        });
+                        webview.addEventListener("dragBounce", function(e) {
+                            if (!self.pulldown) {
+                                self._initPulldownRefresh();
+                            } else {
+                                self.pullPocket.classList.add(CLASS_BLOCK);
+                            }
+                            switch (e.status) {
+                                case "beforeChangeOffset": //下拉可刷新状态
+                                    self._setCaption(downOptions.contentdown);
+                                    break;
+                                case "afterChangeOffset": //松开可刷新状态
+                                    self._setCaption(downOptions.contentover);
+                                    break;
+                                case "dragEndAfterChangeOffset": //正在刷新状态
+                                    //执行下拉刷新所在webview的回调函数
+                                    webview.evalJS("window.mui&&mui.options.pullRefresh.down.callback()");
+                                    self._setCaption(downOptions.contentrefresh);
+                                    break;
+                                default:
+                                    break;
+                            }
+                        }, false);
+
+                        webview.setBounce({
+                            position: {
+                                top: height * 2 + 'px'
+                            },
+                            changeoffset: {
+                                top: height + 'px'
+                            }
+                        });
+
+                    }
+                });
+            },
+            handleEvent: function(e) {
+                var self = this;
+                if (self.stopped) {
+                    return;
+                }
+                self.isScroll = false;
+                if (e.type === 'dragup' || e.type === 'plusscrollbottom') {
+                    self.isScroll = true;
+                    setTimeout(function() {
+                        self.isScroll = false;
+                    }, 1000);
+                }
+            }
+        }).extend($.extend({
+            setStopped: function(stopped) { //该方法是子页面调用的
+                this.stopped = !!stopped;
+                // TODO 此处需要设置当前webview的bounce为none,目前5+有BUG
+                if (this.stopped) {
+                    this.disablePullupToRefresh();
+                    this.disablePulldownToRefresh();
+                } else {
+                    this.enablePullupToRefresh();
+                    this.enablePulldownToRefresh();
+                }
+            },
+            beginPulldown: function() {
+                var self = this;
+                $.plusReady(function() {
+                    //这里延时的目的是为了保证下拉刷新组件初始化完成,后续应该做成有状态的
+                    setTimeout(function() {
+                        if (self.options.down.style == "circle") { //单webview下拉刷新
+                            plus.webview.currentWebview().beginPullToRefresh();
+                        } else { //双webview模式
+                            var webview = self.options.webview;
+                            if (webview) {
+                                webview.setBounce({
+                                    offset: {
+                                        top: self.options.down.height + "px"
+                                    }
+                                });
+                            }
+                        }
+                    }, 15);
+                }.bind(this));
+            },
+            pulldownLoading: function() { //该方法是子页面调用的,兼容老的历史API
+                this.beginPulldown();
+            },
+            _pulldownLoading: function() { //该方法是父页面调用的
+                var self = this;
+                $.plusReady(function() {
+                    var childWebview = plus.webview.getWebviewById(self.options.webviewId);
+                    childWebview && childWebview.setBounce({
+                        offset: {
+                            top: self.options.down.height + "px"
+                        }
+                    });
+                });
+            },
+            endPulldown: function() {
+                var _wv = plus.webview.currentWebview();
+                //双webview的下拉刷新,需要修改父窗口提示信息
+                if (_wv.parent() && this.options.down.style !== "circle") {
+                    _wv.parent().evalJS("mui&&mui(document.querySelector('.mui-content')).pullRefresh('" + JSON.stringify({
+                        webviewId: _wv.id
+                    }) + "')._endPulldownToRefresh()");
+                } else {
+                    _wv.endPullToRefresh();
+                }
+            },
+            endPulldownToRefresh: function() { //该方法是子页面调用的,兼容老的历史API
+                this.endPulldown();
+            },
+            _endPulldownToRefresh: function() { //该方法是父页面调用的
+                var self = this;
+                if (self.topPocket && self.options.webview) {
+                    self.options.webview.endPullToRefresh(); //下拉刷新所在webview回弹
+                    self.loading = false;
+                    self._setCaption(self.options.down.contentdown, true);
+                    setTimeout(function() {
+                        self.loading || self.topPocket.classList.remove(CLASS_BLOCK);
+                    }, 350);
+                }
+            },
+            beginPullup: function(callback) { //开始上拉加载
+                var self = this;
+                if (self.isLoading) return;
+                self.isLoading = true;
+                if (self.pulldown !== false) {
+                    self._initPullupRefresh();
+                } else {
+                    this.pullPocket.classList.add(CLASS_BLOCK);
+                }
+                setTimeout(function() {
+                    self.pullLoading.classList.add(CLASS_VISIBILITY);
+                    self.pullLoading.classList.remove(CLASS_HIDDEN);
+                    self.pullCaption.innerHTML = ''; //修正5+里边第一次加载时,文字显示的bug(还会显示出来个“多”,猜测应该是渲染问题导致的)
+                    self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_REFRESH;
+                    self.pullCaption.innerHTML = self.options.up.contentrefresh;
+                    callback = callback || self.options.up.callback;
+                    callback && callback.call(self);
+                }, 300);
+            },
+            pullupLoading: function(callback) { //兼容老的API
+                this.beginPullup(callback);
+            },
+            endPullup: function(finished) { //上拉加载结束
+                var self = this;
+                if (self.pullLoading) {
+                    self.pullLoading.classList.remove(CLASS_VISIBILITY);
+                    self.pullLoading.classList.add(CLASS_HIDDEN);
+                    self.isLoading = false;
+                    if (finished) {
+                        self.finished = true;
+                        self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE;
+                        self.pullCaption.innerHTML = self.options.up.contentnomore;
+                        //取消5+的plusscrollbottom事件
+                        document.removeEventListener('plusscrollbottom', self);
+                        window.removeEventListener('dragup', self);
+                    } else { //初始化时隐藏,后续不再隐藏
+                        self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;
+                        self.pullCaption.innerHTML = self.options.up.contentdown;
+                    }
+                }
+            },
+            endPullupToRefresh: function(finished) { //上拉加载结束,兼容老的API
+                this.endPullup(finished);
+            },
+            disablePulldownToRefresh: function() {
+                var webview = plus.webview.currentWebview();
+                if (this.options.down.style && this.options.down.style == 'circle') { // 单webview模式禁止原生下拉刷新
+                    this.options.webview.setPullToRefresh({
+                        support: false,
+                        style: 'circle'
+                    });
+                } else { // 双webview模式禁止下拉刷新
+                    webview.setStyle({
+                        bounce: 'none'
+                    });
+                    webview.setBounce({
+                        position: {
+                            top: 'none'
+                        }
+                    });
+                }
+            },
+            enablePulldownToRefresh: function() {
+                var self = this,
+                    webview = plus.webview.currentWebview(),
+                    height = this.options.down.height;
+                // 单webview模式禁止原生下拉刷新
+                if (this.options.down.style && this.options.down.style == 'circle') {
+                    webview.setPullToRefresh({
+                        support: true,
+                        height: height || '50px',
+                        range: self.options.down.range || '100px',
+                        style: 'circle',
+                        offset: self.options.down.offset || '0px'
+                    });
+                } else { // 重新初始化双webview模式下拉刷新
+                    webview.setStyle({
+                        bounce: 'vertical'
+                    });
+                    webview.setBounce({
+                        position: {
+                            top: height * 2 + 'px'
+                        },
+                        changeoffset: {
+                            top: height + 'px'
+                        }
+                    });
+                }
+            },
+            disablePullupToRefresh: function() {
+                this._initPullupRefresh();
+                this.bottomPocket.className = 'mui-pull-bottom-pocket' + ' ' + CLASS_HIDDEN;
+                window.removeEventListener('dragup', this);
+            },
+            enablePullupToRefresh: function() {
+                this._initPullupRefresh();
+                this.bottomPocket.classList.remove(CLASS_HIDDEN);
+                this.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;
+                this.pullCaption.innerHTML = this.options.up.contentdown;
+                document.addEventListener("plusscrollbottom", this);
+                window.addEventListener('dragup', this);
+            },
+            scrollTo: function(x, y, time) {
+                $.scrollTo(y, time);
+            },
+            scrollToBottom: function(time) {
+                $.scrollTo(document.documentElement.scrollHeight, time);
+            },
+            refresh: function(isReset) {
+                if (isReset && this.finished) {
+                    this.enablePullupToRefresh();
+                    this.finished = false;
+                }
+            }
+        }, $.PullRefresh));
+
+        //override h5 pullRefresh
+        $.fn.pullRefresh_native = function(options) {
+            var self;
+            if (this.length === 0) {
+                self = document.createElement('div');
+                self.className = 'mui-content';
+                document.body.appendChild(self);
+            } else {
+                self = this[0];
+            }
+            var args = options;
+            //一个父需要支持多个子下拉刷新
+            options = options || {}
+            if (typeof options === 'string') {
+                options = $.parseJSON(options);
+            };
+            !options.webviewId && (options.webviewId = (plus.webview.currentWebview().id || plus.webview.currentWebview().getURL()));
+            var pullRefreshApi = null;
+            var attrWebviewId = options.webviewId && options.webviewId.replace(/\//g, "_"); //替换所有"/"
+            var id = self.getAttribute('data-pullrefresh-plus-' + attrWebviewId);
+            if (!id && typeof args === 'undefined') {
+                return false;
+            }
+            if (!id) { //避免重复初始化5+ pullrefresh
+                id = ++$.uuid;
+                self.setAttribute('data-pullrefresh-plus-' + attrWebviewId, id);
+                document.body.classList.add(CLASS_PLUS_PULLREFRESH);
+                $.data[id] = pullRefreshApi = new PlusPullRefresh(self, options);
+            } else {
+                pullRefreshApi = $.data[id];
+            }
+            if (options.down && options.down.auto) { //如果设置了auto,则自动下拉一次
+                //pullRefreshApi._pulldownLoading(); //parent webview
+                pullRefreshApi.beginPulldown();
+            } else if (options.up && options.up.auto) { //如果设置了auto,则自动上拉一次
+                pullRefreshApi.beginPullup();
+            }
+            return pullRefreshApi;
+        };
+    });
+
+})(mui, document);
+/**
+ * off-canvas
+ * @param {type} $
+ * @param {type} window
+ * @param {type} document
+ * @param {type} action
+ * @returns {undefined}
+ */
+(function($, window, document, name) {
+	var CLASS_OFF_CANVAS_LEFT = 'mui-off-canvas-left';
+	var CLASS_OFF_CANVAS_RIGHT = 'mui-off-canvas-right';
+	var CLASS_ACTION_BACKDROP = 'mui-off-canvas-backdrop';
+	var CLASS_OFF_CANVAS_WRAP = 'mui-off-canvas-wrap';
+
+	var CLASS_SLIDE_IN = 'mui-slide-in';
+	var CLASS_ACTIVE = 'mui-active';
+
+
+	var CLASS_TRANSITIONING = 'mui-transitioning';
+
+	var SELECTOR_INNER_WRAP = '.mui-inner-wrap';
+
+
+	var OffCanvas = $.Class.extend({
+		init: function(element, options) {
+			this.wrapper = this.element = element;
+			this.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP);
+			this.classList = this.wrapper.classList;
+			if (this.scroller) {
+				this.options = $.extend(true, {
+					dragThresholdX: 10,
+					scale: 0.8,
+					opacity: 0.1,
+					preventDefaultException: {
+						tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|VIDEO)$/
+					},
+				}, options);
+				document.body.classList.add('mui-fullscreen'); //fullscreen
+				this.refresh();
+				this.initEvent();
+			}
+		},
+		_preventDefaultException: function(el, exceptions) {
+			for (var i in exceptions) {
+				if (exceptions[i].test(el[i])) {
+					return true;
+				}
+			}
+			return false;
+		},
+		refresh: function(offCanvas) {
+			//			offCanvas && !offCanvas.classList.contains(CLASS_ACTIVE) && this.classList.remove(CLASS_ACTIVE);
+			this.slideIn = this.classList.contains(CLASS_SLIDE_IN);
+			this.scalable = this.classList.contains('mui-scalable') && !this.slideIn;
+			this.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP);
+			//			!offCanvas && this.scroller.classList.remove(CLASS_TRANSITIONING);
+			//			!offCanvas && this.scroller.setAttribute('style', '');
+			this.offCanvasLefts = this.wrapper.querySelectorAll('.' + CLASS_OFF_CANVAS_LEFT);
+			this.offCanvasRights = this.wrapper.querySelectorAll('.' + CLASS_OFF_CANVAS_RIGHT);
+			if (offCanvas) {
+				if (offCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT)) {
+					this.offCanvasLeft = offCanvas;
+				} else if (offCanvas.classList.contains(CLASS_OFF_CANVAS_RIGHT)) {
+					this.offCanvasRight = offCanvas;
+				}
+			} else {
+				this.offCanvasRight = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT);
+				this.offCanvasLeft = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT);
+			}
+			this.offCanvasRightWidth = this.offCanvasLeftWidth = 0;
+			this.offCanvasLeftSlideIn = this.offCanvasRightSlideIn = false;
+			if (this.offCanvasRight) {
+				this.offCanvasRightWidth = this.offCanvasRight.offsetWidth;
+				this.offCanvasRightSlideIn = this.slideIn && (this.offCanvasRight.parentNode === this.wrapper);
+				//				this.offCanvasRight.classList.remove(CLASS_TRANSITIONING);
+				//				this.offCanvasRight.classList.remove(CLASS_ACTIVE);
+				//				this.offCanvasRight.setAttribute('style', '');
+			}
+			if (this.offCanvasLeft) {
+				this.offCanvasLeftWidth = this.offCanvasLeft.offsetWidth;
+				this.offCanvasLeftSlideIn = this.slideIn && (this.offCanvasLeft.parentNode === this.wrapper);
+				//				this.offCanvasLeft.classList.remove(CLASS_TRANSITIONING);
+				//				this.offCanvasLeft.classList.remove(CLASS_ACTIVE);
+				//				this.offCanvasLeft.setAttribute('style', '');
+			}
+			this.backdrop = this.scroller.querySelector('.' + CLASS_ACTION_BACKDROP);
+
+			this.options.dragThresholdX = this.options.dragThresholdX || 10;
+
+			this.visible = false;
+			this.startX = null;
+			this.lastX = null;
+			this.offsetX = null;
+			this.lastTranslateX = null;
+		},
+		handleEvent: function(e) {
+			switch (e.type) {
+				case $.EVENT_START:
+					e.target && !this._preventDefaultException(e.target, this.options.preventDefaultException) && e.preventDefault();
+					break;
+				case 'webkitTransitionEnd': //有个bug需要处理,需要考虑假设没有触发webkitTransitionEnd的情况
+					if (e.target === this.scroller) {
+						this._dispatchEvent();
+					}
+					break;
+				case 'drag':
+					var detail = e.detail;
+					if (!this.startX) {
+						this.startX = detail.center.x;
+						this.lastX = this.startX;
+					} else {
+						this.lastX = detail.center.x;
+					}
+					if (!this.isDragging && Math.abs(this.lastX - this.startX) > this.options.dragThresholdX && (detail.direction === 'left' || (detail.direction === 'right'))) {
+						if (this.slideIn) {
+							this.scroller = this.wrapper.querySelector(SELECTOR_INNER_WRAP);
+							if (this.classList.contains(CLASS_ACTIVE)) {
+								if (this.offCanvasRight && this.offCanvasRight.classList.contains(CLASS_ACTIVE)) {
+									this.offCanvas = this.offCanvasRight;
+									this.offCanvasWidth = this.offCanvasRightWidth;
+								} else {
+									this.offCanvas = this.offCanvasLeft;
+									this.offCanvasWidth = this.offCanvasLeftWidth;
+								}
+							} else {
+								if (detail.direction === 'left' && this.offCanvasRight) {
+									this.offCanvas = this.offCanvasRight;
+									this.offCanvasWidth = this.offCanvasRightWidth;
+								} else if (detail.direction === 'right' && this.offCanvasLeft) {
+									this.offCanvas = this.offCanvasLeft;
+									this.offCanvasWidth = this.offCanvasLeftWidth;
+								} else {
+									this.scroller = null;
+								}
+							}
+						} else {
+							if (this.classList.contains(CLASS_ACTIVE)) {
+								if (detail.direction === 'left') {
+									this.offCanvas = this.offCanvasLeft;
+									this.offCanvasWidth = this.offCanvasLeftWidth;
+								} else {
+									this.offCanvas = this.offCanvasRight;
+									this.offCanvasWidth = this.offCanvasRightWidth;
+								}
+							} else {
+								if (detail.direction === 'right') {
+									this.offCanvas = this.offCanvasLeft;
+									this.offCanvasWidth = this.offCanvasLeftWidth;
+								} else {
+									this.offCanvas = this.offCanvasRight;
+									this.offCanvasWidth = this.offCanvasRightWidth;
+								}
+							}
+						}
+						if (this.offCanvas && this.scroller) {
+							this.startX = this.lastX;
+							this.isDragging = true;
+
+							$.gestures.session.lockDirection = true; //锁定方向
+							$.gestures.session.startDirection = detail.direction;
+
+							this.offCanvas.classList.remove(CLASS_TRANSITIONING);
+							this.scroller.classList.remove(CLASS_TRANSITIONING);
+							this.offsetX = this.getTranslateX();
+							this._initOffCanvasVisible();
+						}
+					}
+					if (this.isDragging) {
+						this.updateTranslate(this.offsetX + (this.lastX - this.startX));
+						detail.gesture.preventDefault();
+						e.stopPropagation();
+					}
+					break;
+				case 'dragend':
+					if (this.isDragging) {
+						var detail = e.detail;
+						var direction = detail.direction;
+						this.isDragging = false;
+						this.offCanvas.classList.add(CLASS_TRANSITIONING);
+						this.scroller.classList.add(CLASS_TRANSITIONING);
+						var ratio = 0;
+						var x = this.getTranslateX();
+						if (!this.slideIn) {
+							if (x >= 0) {
+								ratio = (this.offCanvasLeftWidth && (x / this.offCanvasLeftWidth)) || 0;
+							} else {
+								ratio = (this.offCanvasRightWidth && (x / this.offCanvasRightWidth)) || 0;
+							}
+							if (ratio === 0) {
+								this.openPercentage(0);
+								this._dispatchEvent(); //此处不触发webkitTransitionEnd,所以手动dispatch
+								return;
+							}
+							if (direction === 'right' && ratio >= 0 && (ratio >= 0.5 || detail.swipe)) { //右滑打开
+								this.openPercentage(100);
+							} else if (direction === 'right' && ratio < 0 && (ratio > -0.5 || detail.swipe)) { //右滑关闭
+								this.openPercentage(0);
+							} else if (direction === 'right' && ratio > 0 && ratio < 0.5) { //右滑还原关闭
+								this.openPercentage(0);
+							} else if (direction === 'right' && ratio < 0.5) { //右滑还原打开
+								this.openPercentage(-100);
+							} else if (direction === 'left' && ratio <= 0 && (ratio <= -0.5 || detail.swipe)) { //左滑打开
+								this.openPercentage(-100);
+							} else if (direction === 'left' && ratio > 0 && (ratio <= 0.5 || detail.swipe)) { //左滑关闭
+								this.openPercentage(0);
+							} else if (direction === 'left' && ratio < 0 && ratio >= -0.5) { //左滑还原关闭
+								this.openPercentage(0);
+							} else if (direction === 'left' && ratio > 0.5) { //左滑还原打开
+								this.openPercentage(100);
+							} else { //默认关闭
+								this.openPercentage(0);
+							}
+							if (ratio === 1 || ratio === -1) { //此处不触发webkitTransitionEnd,所以手动dispatch
+								this._dispatchEvent();
+							}
+						} else {
+							if (x >= 0) {
+								ratio = (this.offCanvasRightWidth && (x / this.offCanvasRightWidth)) || 0;
+							} else {
+								ratio = (this.offCanvasLeftWidth && (x / this.offCanvasLeftWidth)) || 0;
+							}
+							if (direction === 'right' && ratio <= 0 && (ratio >= -0.5 || detail.swipe)) { //右滑打开
+								this.openPercentage(100);
+							} else if (direction === 'right' && ratio > 0 && (ratio >= 0.5 || detail.swipe)) { //右滑关闭
+								this.openPercentage(0);
+							} else if (direction === 'right' && ratio <= -0.5) { //右滑还原关闭
+								this.openPercentage(0);
+							} else if (direction === 'right' && ratio > 0 && ratio <= 0.5) { //右滑还原打开
+								this.openPercentage(-100);
+							} else if (direction === 'left' && ratio >= 0 && (ratio <= 0.5 || detail.swipe)) { //左滑打开
+								this.openPercentage(-100);
+							} else if (direction === 'left' && ratio < 0 && (ratio <= -0.5 || detail.swipe)) { //左滑关闭
+								this.openPercentage(0);
+							} else if (direction === 'left' && ratio >= 0.5) { //左滑还原关闭
+								this.openPercentage(0);
+							} else if (direction === 'left' && ratio >= -0.5 && ratio < 0) { //左滑还原打开
+								this.openPercentage(100);
+							} else {
+								this.openPercentage(0);
+							}
+							if (ratio === 1 || ratio === -1 || ratio === 0) {
+								this._dispatchEvent();
+								return;
+							}
+
+						}
+					}
+					break;
+			}
+		},
+		_dispatchEvent: function() {
+			if (this.classList.contains(CLASS_ACTIVE)) {
+				$.trigger(this.wrapper, 'shown', this);
+			} else {
+				$.trigger(this.wrapper, 'hidden', this);
+			}
+		},
+		_initOffCanvasVisible: function() {
+			if (!this.visible) {
+				this.visible = true;
+				if (this.offCanvasLeft) {
+					this.offCanvasLeft.style.visibility = 'visible';
+				}
+				if (this.offCanvasRight) {
+					this.offCanvasRight.style.visibility = 'visible';
+				}
+			}
+		},
+		initEvent: function() {
+			var self = this;
+			if (self.backdrop) {
+				self.backdrop.addEventListener('tap', function(e) {
+					self.close();
+					e.detail.gesture.preventDefault();
+				});
+			}
+			if (this.classList.contains('mui-draggable')) {
+				this.wrapper.addEventListener($.EVENT_START, this); //临时处理
+				this.wrapper.addEventListener('drag', this);
+				this.wrapper.addEventListener('dragend', this);
+			}
+			this.wrapper.addEventListener('webkitTransitionEnd', this);
+		},
+		openPercentage: function(percentage) {
+			var p = percentage / 100;
+			if (!this.slideIn) {
+				if (this.offCanvasLeft && percentage >= 0) {
+					this.updateTranslate(this.offCanvasLeftWidth * p);
+					this.offCanvasLeft.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);
+				} else if (this.offCanvasRight && percentage <= 0) {
+					this.updateTranslate(this.offCanvasRightWidth * p);
+					this.offCanvasRight.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);
+				}
+				this.classList[p !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);
+			} else {
+				if (this.offCanvasLeft && percentage >= 0) {
+					p = p === 0 ? -1 : 0;
+					this.updateTranslate(this.offCanvasLeftWidth * p);
+					this.offCanvasLeft.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);
+				} else if (this.offCanvasRight && percentage <= 0) {
+					p = p === 0 ? 1 : 0;
+					this.updateTranslate(this.offCanvasRightWidth * p);
+					this.offCanvasRight.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);
+				}
+				this.classList[percentage !== 0 ? 'add' : 'remove'](CLASS_ACTIVE);
+			}
+		},
+		updateTranslate: function(x) {
+			if (x !== this.lastTranslateX) {
+				if (!this.slideIn) {
+					if ((!this.offCanvasLeft && x > 0) || (!this.offCanvasRight && x < 0)) {
+						this.setTranslateX(0);
+						return;
+					}
+					if (this.leftShowing && x > this.offCanvasLeftWidth) {
+						this.setTranslateX(this.offCanvasLeftWidth);
+						return;
+					}
+					if (this.rightShowing && x < -this.offCanvasRightWidth) {
+						this.setTranslateX(-this.offCanvasRightWidth);
+						return;
+					}
+					this.setTranslateX(x);
+					if (x >= 0) {
+						this.leftShowing = true;
+						this.rightShowing = false;
+						if (x > 0) {
+							if (this.offCanvasLeft) {
+								$.each(this.offCanvasLefts, function(index, offCanvas) {
+									if (offCanvas === this.offCanvasLeft) {
+										this.offCanvasLeft.style.zIndex = 0;
+									} else {
+										offCanvas.style.zIndex = -1;
+									}
+								}.bind(this));
+							}
+							if (this.offCanvasRight) {
+								this.offCanvasRight.style.zIndex = -1;
+							}
+						}
+					} else {
+						this.rightShowing = true;
+						this.leftShowing = false;
+						if (this.offCanvasRight) {
+							$.each(this.offCanvasRights, function(index, offCanvas) {
+								if (offCanvas === this.offCanvasRight) {
+									offCanvas.style.zIndex = 0;
+								} else {
+									offCanvas.style.zIndex = -1;
+								}
+							}.bind(this));
+						}
+						if (this.offCanvasLeft) {
+							this.offCanvasLeft.style.zIndex = -1;
+						}
+					}
+				} else {
+					if (this.offCanvas.classList.contains(CLASS_OFF_CANVAS_RIGHT)) {
+						if (x < 0) {
+							this.setTranslateX(0);
+							return;
+						}
+						if (x > this.offCanvasRightWidth) {
+							this.setTranslateX(this.offCanvasRightWidth);
+							return;
+						}
+					} else {
+						if (x > 0) {
+							this.setTranslateX(0);
+							return;
+						}
+						if (x < -this.offCanvasLeftWidth) {
+							this.setTranslateX(-this.offCanvasLeftWidth);
+							return;
+						}
+					}
+					this.setTranslateX(x);
+				}
+				this.lastTranslateX = x;
+			}
+		},
+		setTranslateX: $.animationFrame(function(x) {
+			if (this.scroller) {
+				if (this.scalable && this.offCanvas.parentNode === this.wrapper) {
+					var percent = Math.abs(x) / this.offCanvasWidth;
+					var zoomOutScale = 1 - (1 - this.options.scale) * percent;
+					var zoomInScale = this.options.scale + (1 - this.options.scale) * percent;
+					var zoomOutOpacity = 1 - (1 - this.options.opacity) * percent;
+					var zoomInOpacity = this.options.opacity + (1 - this.options.opacity) * percent;
+					if (this.offCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT)) {
+						this.offCanvas.style.webkitTransformOrigin = '-100%';
+						this.scroller.style.webkitTransformOrigin = 'left';
+					} else {
+						this.offCanvas.style.webkitTransformOrigin = '200%';
+						this.scroller.style.webkitTransformOrigin = 'right';
+					}
+					this.offCanvas.style.opacity = zoomInOpacity;
+					this.offCanvas.style.webkitTransform = 'translate3d(0,0,0) scale(' + zoomInScale + ')';
+					this.scroller.style.webkitTransform = 'translate3d(' + x + 'px,0,0) scale(' + zoomOutScale + ')';
+				} else {
+					if (this.slideIn) {
+						this.offCanvas.style.webkitTransform = 'translate3d(' + x + 'px,0,0)';
+					} else {
+						this.scroller.style.webkitTransform = 'translate3d(' + x + 'px,0,0)';
+					}
+				}
+			}
+		}),
+		getTranslateX: function() {
+			if (this.offCanvas) {
+				var scroller = this.slideIn ? this.offCanvas : this.scroller;
+				var result = $.parseTranslateMatrix($.getStyles(scroller, 'webkitTransform'));
+				return (result && result.x) || 0;
+			}
+			return 0;
+		},
+		isShown: function(direction) {
+			var shown = false;
+			if (!this.slideIn) {
+				var x = this.getTranslateX();
+				if (direction === 'right') {
+					shown = this.classList.contains(CLASS_ACTIVE) && x < 0;
+				} else if (direction === 'left') {
+					shown = this.classList.contains(CLASS_ACTIVE) && x > 0;
+				} else {
+					shown = this.classList.contains(CLASS_ACTIVE) && x !== 0;
+				}
+			} else {
+				if (direction === 'left') {
+					shown = this.classList.contains(CLASS_ACTIVE) && this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE);
+				} else if (direction === 'right') {
+					shown = this.classList.contains(CLASS_ACTIVE) && this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE);
+				} else {
+					shown = this.classList.contains(CLASS_ACTIVE) && (this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE) || this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE));
+				}
+			}
+			return shown;
+		},
+		close: function() {
+			this._initOffCanvasVisible();
+			this.offCanvas = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT + '.' + CLASS_ACTIVE) || this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_LEFT + '.' + CLASS_ACTIVE);
+			this.offCanvasWidth = this.offCanvas.offsetWidth;
+			if (this.scroller) {
+				this.offCanvas.offsetHeight;
+				this.offCanvas.classList.add(CLASS_TRANSITIONING);
+				this.scroller.classList.add(CLASS_TRANSITIONING);
+				this.openPercentage(0);
+			}
+		},
+		show: function(direction) {
+			this._initOffCanvasVisible();
+			if (this.isShown(direction)) {
+				return false;
+			}
+			if (!direction) {
+				direction = this.wrapper.querySelector('.' + CLASS_OFF_CANVAS_RIGHT) ? 'right' : 'left';
+			}
+			if (direction === 'right') {
+				this.offCanvas = this.offCanvasRight;
+				this.offCanvasWidth = this.offCanvasRightWidth;
+			} else {
+				this.offCanvas = this.offCanvasLeft;
+				this.offCanvasWidth = this.offCanvasLeftWidth;
+			}
+			if (this.scroller) {
+				this.offCanvas.offsetHeight;
+				this.offCanvas.classList.add(CLASS_TRANSITIONING);
+				this.scroller.classList.add(CLASS_TRANSITIONING);
+				this.openPercentage(direction === 'left' ? 100 : -100);
+			}
+			return true;
+		},
+		toggle: function(directionOrOffCanvas) {
+			var direction = directionOrOffCanvas;
+			if (directionOrOffCanvas && directionOrOffCanvas.classList) {
+				direction = directionOrOffCanvas.classList.contains(CLASS_OFF_CANVAS_LEFT) ? 'left' : 'right';
+				this.refresh(directionOrOffCanvas);
+			}
+			if (!this.show(direction)) {
+				this.close();
+			}
+		}
+	});
+
+	//hash to offcanvas
+	var findOffCanvasContainer = function(target) {
+		parentNode = target.parentNode;
+		if (parentNode) {
+			if (parentNode.classList.contains(CLASS_OFF_CANVAS_WRAP)) {
+				return parentNode;
+			} else {
+				parentNode = parentNode.parentNode;
+				if (parentNode.classList.contains(CLASS_OFF_CANVAS_WRAP)) {
+					return parentNode;
+				}
+			}
+		}
+	};
+	var handle = function(event, target) {
+		if (target.tagName === 'A' && target.hash) {
+			var offcanvas = document.getElementById(target.hash.replace('#', ''));
+			if (offcanvas) {
+				var container = findOffCanvasContainer(offcanvas);
+				if (container) {
+					$.targets._container = container;
+					return offcanvas;
+				}
+			}
+		}
+		return false;
+	};
+
+	$.registerTarget({
+		name: name,
+		index: 60,
+		handle: handle,
+		target: false,
+		isReset: false,
+		isContinue: true
+	});
+
+	window.addEventListener('tap', function(e) {
+		if (!$.targets.offcanvas) {
+			return;
+		}
+		//TODO 此处类型的代码后续考虑统一优化(target机制),现在的实现费力不讨好
+		var target = e.target;
+		for (; target && target !== document; target = target.parentNode) {
+			if (target.tagName === 'A' && target.hash && target.hash === ('#' + $.targets.offcanvas.id)) {
+				e.detail && e.detail.gesture && e.detail.gesture.preventDefault(); //fixed hashchange
+				$($.targets._container).offCanvas().toggle($.targets.offcanvas);
+				$.targets.offcanvas = $.targets._container = null;
+				break;
+			}
+		}
+	});
+
+	$.fn.offCanvas = function(options) {
+		var offCanvasApis = [];
+		this.each(function() {
+			var offCanvasApi = null;
+			var self = this;
+			//hack old version
+			if (!self.classList.contains(CLASS_OFF_CANVAS_WRAP)) {
+				self = findOffCanvasContainer(self);
+			}
+			var id = self.getAttribute('data-offCanvas');
+			if (!id) {
+				id = ++$.uuid;
+				$.data[id] = offCanvasApi = new OffCanvas(self, options);
+				self.setAttribute('data-offCanvas', id);
+			} else {
+				offCanvasApi = $.data[id];
+			}
+			if (options === 'show' || options === 'close' || options === 'toggle') {
+				offCanvasApi.toggle();
+			}
+			offCanvasApis.push(offCanvasApi);
+		});
+		return offCanvasApis.length === 1 ? offCanvasApis[0] : offCanvasApis;
+	};
+	$.ready(function() {
+		$('.mui-off-canvas-wrap').offCanvas();
+	});
+})(mui, window, document, 'offcanvas');
+/**
+ * actions
+ * @param {type} $
+ * @param {type} name
+ * @returns {undefined}
+ */
+(function($, name) {
+	var CLASS_ACTION = 'mui-action';
+
+	var handle = function(event, target) {
+		var className = target.className || '';
+		if (typeof className !== 'string') { //svg className(SVGAnimatedString)
+			className = '';
+		}
+		if (className && ~className.indexOf(CLASS_ACTION)) {
+			if (target.classList.contains('mui-action-back')) {
+				event.preventDefault();
+			}
+			return target;
+		}
+		return false;
+	};
+
+	$.registerTarget({
+		name: name,
+		index: 50,
+		handle: handle,
+		target: false,
+		isContinue: true
+	});
+
+})(mui, 'action');
+/**
+ * Modals
+ * @param {type} $
+ * @param {type} window
+ * @param {type} document
+ * @param {type} name
+ * @returns {undefined}
+ */
+(function($, window, document, name) {
+	var CLASS_MODAL = 'mui-modal';
+
+	var handle = function(event, target) {
+		if (target.tagName === 'A' && target.hash) {
+			var modal = document.getElementById(target.hash.replace('#', ''));
+			if (modal && modal.classList.contains(CLASS_MODAL)) {
+				return modal;
+			}
+		}
+		return false;
+	};
+
+	$.registerTarget({
+		name: name,
+		index: 50,
+		handle: handle,
+		target: false,
+		isReset: false,
+		isContinue: true
+	});
+
+	window.addEventListener('tap', function(event) {
+		if ($.targets.modal) {
+			event.detail.gesture.preventDefault(); //fixed hashchange
+			$.targets.modal.classList.toggle('mui-active');
+		}
+	});
+})(mui, window, document, 'modal');
+/**
+ * Popovers
+ * @param {type} $
+ * @param {type} window
+ * @param {type} document
+ * @param {type} name
+ * @param {type} undefined
+ * @returns {undefined}
+ */
+(function($, window, document, name) {
+
+	var CLASS_POPOVER = 'mui-popover';
+	var CLASS_POPOVER_ARROW = 'mui-popover-arrow';
+	var CLASS_ACTION_POPOVER = 'mui-popover-action';
+	var CLASS_BACKDROP = 'mui-backdrop';
+	var CLASS_BAR_POPOVER = 'mui-bar-popover';
+	var CLASS_BAR_BACKDROP = 'mui-bar-backdrop';
+	var CLASS_ACTION_BACKDROP = 'mui-backdrop-action';
+	var CLASS_ACTIVE = 'mui-active';
+	var CLASS_BOTTOM = 'mui-bottom';
+
+
+
+	var handle = function(event, target) {
+		if (target.tagName === 'A' && target.hash) {
+			$.targets._popover = document.getElementById(target.hash.replace('#', ''));
+			if ($.targets._popover && $.targets._popover.classList.contains(CLASS_POPOVER)) {
+				return target;
+			} else {
+				$.targets._popover = null;
+			}
+		}
+		return false;
+	};
+
+	$.registerTarget({
+		name: name,
+		index: 60,
+		handle: handle,
+		target: false,
+		isReset: false,
+		isContinue: true
+	});
+
+	var onPopoverShown = function(e) {
+		this.removeEventListener('webkitTransitionEnd', onPopoverShown);
+		this.addEventListener($.EVENT_MOVE, $.preventDefault);
+		$.trigger(this, 'shown', this);
+	}
+	var onPopoverHidden = function(e) {
+		setStyle(this, 'none');
+		this.removeEventListener('webkitTransitionEnd', onPopoverHidden);
+		this.removeEventListener($.EVENT_MOVE, $.preventDefault);
+		$.trigger(this, 'hidden', this);
+	};
+
+	var backdrop = (function() {
+		var element = document.createElement('div');
+		element.classList.add(CLASS_BACKDROP);
+		element.addEventListener($.EVENT_MOVE, $.preventDefault);
+		element.addEventListener('tap', function(e) {
+			var popover = $.targets._popover;
+			if (popover) {
+				popover.addEventListener('webkitTransitionEnd', onPopoverHidden);
+				popover.classList.remove(CLASS_ACTIVE);
+				removeBackdrop(popover);
+			}
+		});
+
+		return element;
+	}());
+	var removeBackdropTimer;
+	var removeBackdrop = function(popover) {
+		backdrop.setAttribute('style', 'opacity:0');
+		$.targets.popover = $.targets._popover = null; //reset
+		removeBackdropTimer = $.later(function() {
+			if (!popover.classList.contains(CLASS_ACTIVE) && backdrop.parentNode && backdrop.parentNode === document.body) {
+				document.body.removeChild(backdrop);
+			}
+		}, 350);
+	};
+	window.addEventListener('tap', function(e) {
+		if (!$.targets.popover) {
+			return;
+		}
+		var toggle = false;
+		var target = e.target;
+		for (; target && target !== document; target = target.parentNode) {
+			if (target === $.targets.popover) {
+				toggle = true;
+			}
+		}
+		if (toggle) {
+			e.detail.gesture.preventDefault(); //fixed hashchange
+			togglePopover($.targets._popover, $.targets.popover);
+		}
+
+	});
+
+	var togglePopover = function(popover, anchor, state) {
+		if ((state === 'show' && popover.classList.contains(CLASS_ACTIVE)) || (state === 'hide' && !popover.classList.contains(CLASS_ACTIVE))) {
+			return;
+		}
+		removeBackdropTimer && removeBackdropTimer.cancel(); //取消remove的timer
+		//remove一遍,以免来回快速切换,导致webkitTransitionEnd不触发,无法remove
+		popover.removeEventListener('webkitTransitionEnd', onPopoverShown);
+		popover.removeEventListener('webkitTransitionEnd', onPopoverHidden);
+		backdrop.classList.remove(CLASS_BAR_BACKDROP);
+		backdrop.classList.remove(CLASS_ACTION_BACKDROP);
+		var _popover = document.querySelector('.mui-popover.mui-active');
+		if (_popover) {
+			//			_popover.setAttribute('style', '');
+			_popover.addEventListener('webkitTransitionEnd', onPopoverHidden);
+			_popover.classList.remove(CLASS_ACTIVE);
+			//			_popover.removeEventListener('webkitTransitionEnd', onPopoverHidden);
+			//同一个弹出则直接返回,解决同一个popover的toggle
+			if (popover === _popover) {
+				removeBackdrop(_popover);
+				return;
+			}
+		}
+		var isActionSheet = false;
+		if (popover.classList.contains(CLASS_BAR_POPOVER) || popover.classList.contains(CLASS_ACTION_POPOVER)) { //navBar
+			if (popover.classList.contains(CLASS_ACTION_POPOVER)) { //action sheet popover
+				isActionSheet = true;
+				backdrop.classList.add(CLASS_ACTION_BACKDROP);
+			} else { //bar popover
+				backdrop.classList.add(CLASS_BAR_BACKDROP);
+				//				if (anchor) {
+				//					if (anchor.parentNode) {
+				//						var offsetWidth = anchor.offsetWidth;
+				//						var offsetLeft = anchor.offsetLeft;
+				//						var innerWidth = window.innerWidth;
+				//						popover.style.left = (Math.min(Math.max(offsetLeft, defaultPadding), innerWidth - offsetWidth - defaultPadding)) + "px";
+				//					} else {
+				//						//TODO anchor is position:{left,top,bottom,right}
+				//					}
+				//				}
+			}
+		}
+		setStyle(popover, 'block'); //actionsheet transform
+		popover.offsetHeight;
+		popover.classList.add(CLASS_ACTIVE);
+		backdrop.setAttribute('style', '');
+		document.body.appendChild(backdrop);
+		calPosition(popover, anchor, isActionSheet); //position
+		backdrop.classList.add(CLASS_ACTIVE);
+		popover.addEventListener('webkitTransitionEnd', onPopoverShown);
+	};
+	var setStyle = function(popover, display, top, left) {
+		var style = popover.style;
+		if (typeof display !== 'undefined')
+			style.display = display;
+		if (typeof top !== 'undefined')
+			style.top = top + 'px';
+		if (typeof left !== 'undefined')
+			style.left = left + 'px';
+	};
+	var calPosition = function(popover, anchor, isActionSheet) {
+		if (!popover || !anchor) {
+			return;
+		}
+
+		if (isActionSheet) { //actionsheet
+			setStyle(popover, 'block')
+			return;
+		}
+
+		var wWidth = window.innerWidth;
+		var wHeight = window.innerHeight;
+
+		var pWidth = popover.offsetWidth;
+		var pHeight = popover.offsetHeight;
+
+		var aWidth = anchor.offsetWidth;
+		var aHeight = anchor.offsetHeight;
+		var offset = $.offset(anchor);
+
+		var arrow = popover.querySelector('.' + CLASS_POPOVER_ARROW);
+		if (!arrow) {
+			arrow = document.createElement('div');
+			arrow.className = CLASS_POPOVER_ARROW;
+			popover.appendChild(arrow);
+		}
+		var arrowSize = arrow && arrow.offsetWidth / 2 || 0;
+
+
+
+		var pTop = 0;
+		var pLeft = 0;
+		var diff = 0;
+		var arrowLeft = 0;
+		var defaultPadding = popover.classList.contains(CLASS_ACTION_POPOVER) ? 0 : 5;
+
+		var position = 'top';
+		if ((pHeight + arrowSize) < (offset.top - window.pageYOffset)) { //top
+			pTop = offset.top - pHeight - arrowSize;
+		} else if ((pHeight + arrowSize) < (wHeight - (offset.top - window.pageYOffset) - aHeight)) { //bottom
+			position = 'bottom';
+			pTop = offset.top + aHeight + arrowSize;
+		} else { //middle
+			position = 'middle';
+			pTop = Math.max((wHeight - pHeight) / 2 + window.pageYOffset, 0);
+			pLeft = Math.max((wWidth - pWidth) / 2 + window.pageXOffset, 0);
+		}
+		if (position === 'top' || position === 'bottom') {
+			pLeft = aWidth / 2 + offset.left - pWidth / 2;
+			diff = pLeft;
+			if (pLeft < defaultPadding) pLeft = defaultPadding;
+			if (pLeft + pWidth > wWidth) pLeft = wWidth - pWidth - defaultPadding;
+
+			if (arrow) {
+				if (position === 'top') {
+					arrow.classList.add(CLASS_BOTTOM);
+				} else {
+					arrow.classList.remove(CLASS_BOTTOM);
+				}
+				diff = diff - pLeft;
+				arrowLeft = (pWidth / 2 - arrowSize / 2 + diff);
+				arrowLeft = Math.max(Math.min(arrowLeft, pWidth - arrowSize * 2 - 6), 6);
+				arrow.setAttribute('style', 'left:' + arrowLeft + 'px');
+			}
+		} else if (position === 'middle') {
+			arrow.setAttribute('style', 'display:none');
+		}
+		setStyle(popover, 'block', pTop, pLeft);
+	};
+
+	$.createMask = function(callback) {
+		var element = document.createElement('div');
+		element.classList.add(CLASS_BACKDROP);
+		element.addEventListener($.EVENT_MOVE, $.preventDefault);
+		element.addEventListener('tap', function() {
+			mask.close();
+		});
+		var mask = [element];
+		mask._show = false;
+		mask.show = function() {
+			mask._show = true;
+			element.setAttribute('style', 'opacity:1');
+			document.body.appendChild(element);
+			return mask;
+		};
+		mask._remove = function() {
+			if (mask._show) {
+				mask._show = false;
+				element.setAttribute('style', 'opacity:0');
+				$.later(function() {
+					var body = document.body;
+					element.parentNode === body && body.removeChild(element);
+				}, 350);
+			}
+			return mask;
+		};
+		mask.close = function() {
+			if (callback) {
+				if (callback() !== false) {
+					mask._remove();
+				}
+			} else {
+				mask._remove();
+			}
+		};
+		return mask;
+	};
+	$.fn.popover = function() {
+		var args = arguments;
+		this.each(function() {
+			$.targets._popover = this;
+			if (args[0] === 'show' || args[0] === 'hide' || args[0] === 'toggle') {
+				togglePopover(this, args[1], args[0]);
+			}
+		});
+	};
+
+})(mui, window, document, 'popover');
+/**
+ * segmented-controllers
+ * @param {type} $
+ * @param {type} window
+ * @param {type} document
+ * @param {type} undefined
+ * @returns {undefined}
+ */
+/*(function($, window, document, name, undefined) {
+
+    var CLASS_CONTROL_ITEM = 'mui-control-item';
+    var CLASS_SEGMENTED_CONTROL = 'mui-segmented-control';
+    var CLASS_SEGMENTED_CONTROL_VERTICAL = 'mui-segmented-control-vertical';
+    var CLASS_CONTROL_CONTENT = 'mui-control-content';
+    var CLASS_TAB_BAR = 'mui-bar-tab';
+    var CLASS_TAB_ITEM = 'mui-tab-item';
+    var CLASS_SLIDER_ITEM = 'mui-slider-item';
+
+   var handle = function(event, target) {
+        if (target.classList && (target.classList.contains(CLASS_CONTROL_ITEM) || target.classList.contains(CLASS_TAB_ITEM))) {
+            if (target.parentNode && target.parentNode.classList && target.parentNode.classList.contains(CLASS_SEGMENTED_CONTROL_VERTICAL)) {
+                //vertical 如果preventDefault会导致无法滚动
+            } else {
+
+                    event.preventDefault();      
+                    // if(target.tagName == 'A') {
+                    //     // fixed 底部选项卡href 无法跳转 && stop hash change
+                    //     var curr_href = location.hostname + location.pathname,
+                    //         target_href = target.hostname + target.pathname;
+                   
+                    //     if (curr_href == target_href && target.hash !== "") {
+                    //         event.preventDefault();
+                    //         return target;
+                    //     }else{
+                    //             return false
+                    //     }
+                    // }
+            }
+            //          if (target.hash) {
+            return target;
+            //          }
+        }
+        return false;
+    };
+
+    $.registerTarget({
+        name: name,
+        index: 80,
+        handle: handle,
+        target: false
+    });
+
+    window.addEventListener('tap', function(e) {
+
+        var targetTab = $.targets.tab;
+        if (!targetTab) {
+            return;
+        }
+        var activeTab;
+        var activeBodies;
+        var targetBody;
+        var className = 'mui-active';
+        var classSelector = '.' + className;
+        var segmentedControl = targetTab.parentNode;
+
+        for (; segmentedControl && segmentedControl !== document; segmentedControl = segmentedControl.parentNode) {
+            if (segmentedControl.classList.contains(CLASS_SEGMENTED_CONTROL)) {
+                activeTab = segmentedControl.querySelector(classSelector + '.' + CLASS_CONTROL_ITEM);
+                break;
+            } else if (segmentedControl.classList.contains(CLASS_TAB_BAR)) {
+                activeTab = segmentedControl.querySelector(classSelector + '.' + CLASS_TAB_ITEM);
+            }
+        }
+
+        if (activeTab) {
+            activeTab.classList.remove(className);
+        }
+
+        var isLastActive = targetTab === activeTab;
+        if (targetTab) {
+            targetTab.classList.add(className);
+        }
+
+        if (!targetTab.hash) {
+            return;
+        }
+        targetBody = document.getElementById(targetTab.hash.replace('#', ''));
+
+        if (!targetBody) {
+            return;
+        }
+        if (!targetBody.classList.contains(CLASS_CONTROL_CONTENT)) { //tab bar popover
+            targetTab.classList[isLastActive ? 'remove' : 'add'](className);
+            return;
+        }
+        if (isLastActive) { //same
+            return;
+        }
+        var parentNode = targetBody.parentNode;
+        activeBodies = parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT + classSelector);
+        for (var i = 0; i < activeBodies.length; i++) {
+            var activeBody = activeBodies[i];
+            activeBody.parentNode === parentNode && activeBody.classList.remove(className);
+        }
+
+        targetBody.classList.add(className);
+
+        var contents = [];
+        var _contents = parentNode.querySelectorAll('.' + CLASS_CONTROL_CONTENT);
+        for (var i = 0; i < _contents.length; i++) { //查找直属子节点
+            _contents[i].parentNode === parentNode && (contents.push(_contents[i]));
+        }
+        $.trigger(targetBody, $.eventName('shown', name), {
+            tabNumber: Array.prototype.indexOf.call(contents, targetBody)
+        });
+        e.detail && e.detail.gesture.preventDefault(); //fixed hashchange
+    });
+
+})(mui, window, document, 'tab');*/
+/**
+ * Toggles switch
+ * @param {type} $
+ * @param {type} window
+ * @param {type} name
+ * @returns {undefined}
+ */
+(function($, window, name) {
+
+	var CLASS_SWITCH = 'mui-switch';
+	var CLASS_SWITCH_HANDLE = 'mui-switch-handle';
+	var CLASS_ACTIVE = 'mui-active';
+	var CLASS_DRAGGING = 'mui-dragging';
+
+	var CLASS_DISABLED = 'mui-disabled';
+
+	var SELECTOR_SWITCH_HANDLE = '.' + CLASS_SWITCH_HANDLE;
+
+	var handle = function(event, target) {
+		if (target.classList && target.classList.contains(CLASS_SWITCH)) {
+			return target;
+		}
+		return false;
+	};
+
+	$.registerTarget({
+		name: name,
+		index: 100,
+		handle: handle,
+		target: false
+	});
+
+
+	var Toggle = function(element) {
+		this.element = element;
+		this.classList = this.element.classList;
+		this.handle = this.element.querySelector(SELECTOR_SWITCH_HANDLE);
+		this.init();
+		this.initEvent();
+	};
+	Toggle.prototype.init = function() {
+		this.toggleWidth = this.element.offsetWidth;
+		this.handleWidth = this.handle.offsetWidth;
+		this.handleX = this.toggleWidth - this.handleWidth - 3;
+	};
+	Toggle.prototype.initEvent = function() {
+		this.element.addEventListener($.EVENT_START, this);
+		this.element.addEventListener('drag', this);
+		this.element.addEventListener('swiperight', this);
+		this.element.addEventListener($.EVENT_END, this);
+		this.element.addEventListener($.EVENT_CANCEL, this);
+
+	};
+	Toggle.prototype.handleEvent = function(e) {
+		if (this.classList.contains(CLASS_DISABLED)) {
+			return;
+		}
+		switch (e.type) {
+			case $.EVENT_START:
+				this.start(e);
+				break;
+			case 'drag':
+				this.drag(e);
+				break;
+			case 'swiperight':
+				this.swiperight();
+				break;
+			case $.EVENT_END:
+			case $.EVENT_CANCEL:
+				this.end(e);
+				break;
+		}
+	};
+	Toggle.prototype.start = function(e) {
+		this.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '.2s';
+		this.classList.add(CLASS_DRAGGING);
+		if (this.toggleWidth === 0 || this.handleWidth === 0) { //当switch处于隐藏状态时,width为0,需要重新初始化
+			this.init();
+		}
+	};
+	Toggle.prototype.drag = function(e) {
+		var detail = e.detail;
+		if (!this.isDragging) {
+			if (detail.direction === 'left' || detail.direction === 'right') {
+				this.isDragging = true;
+				this.lastChanged = undefined;
+				this.initialState = this.classList.contains(CLASS_ACTIVE);
+			}
+		}
+		if (this.isDragging) {
+			this.setTranslateX(detail.deltaX);
+			e.stopPropagation();
+			detail.gesture.preventDefault();
+		}
+	};
+	Toggle.prototype.swiperight = function(e) {
+		if (this.isDragging) {
+			e.stopPropagation();
+		}
+	};
+	Toggle.prototype.end = function(e) {
+		this.classList.remove(CLASS_DRAGGING);
+		if (this.isDragging) {
+			this.isDragging = false;
+			e.stopPropagation();
+			$.trigger(this.element, 'toggle', {
+				isActive: this.classList.contains(CLASS_ACTIVE)
+			});
+		} else {
+			this.toggle();
+		}
+	};
+	Toggle.prototype.toggle = function(animate) {
+		var classList = this.classList;
+		if (animate === false) {
+			this.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '0s';
+		} else {
+			this.handle.style.webkitTransitionDuration = this.element.style.webkitTransitionDuration = '.2s';
+		}
+		if (classList.contains(CLASS_ACTIVE)) {
+			classList.remove(CLASS_ACTIVE);
+			this.handle.style.webkitTransform = 'translate(0,0)';
+		} else {
+			classList.add(CLASS_ACTIVE);
+			this.handle.style.webkitTransform = 'translate(' + this.handleX + 'px,0)';
+		}
+		$.trigger(this.element, 'toggle', {
+			isActive: this.classList.contains(CLASS_ACTIVE)
+		});
+	};
+	Toggle.prototype.setTranslateX = $.animationFrame(function(x) {
+		if (!this.isDragging) {
+			return;
+		}
+		var isChanged = false;
+		if ((this.initialState && -x > (this.handleX / 2)) || (!this.initialState && x > (this.handleX / 2))) {
+			isChanged = true;
+		}
+		if (this.lastChanged !== isChanged) {
+			if (isChanged) {
+				this.handle.style.webkitTransform = 'translate(' + (this.initialState ? 0 : this.handleX) + 'px,0)';
+				this.classList[this.initialState ? 'remove' : 'add'](CLASS_ACTIVE);
+			} else {
+				this.handle.style.webkitTransform = 'translate(' + (this.initialState ? this.handleX : 0) + 'px,0)';
+				this.classList[this.initialState ? 'add' : 'remove'](CLASS_ACTIVE);
+			}
+			this.lastChanged = isChanged;
+		}
+
+	});
+
+	$.fn['switch'] = function(options) {
+		var switchApis = [];
+		this.each(function() {
+			var switchApi = null;
+			var id = this.getAttribute('data-switch');
+			if (!id) {
+				id = ++$.uuid;
+				$.data[id] = new Toggle(this);
+				this.setAttribute('data-switch', id);
+			} else {
+				switchApi = $.data[id];
+			}
+			switchApis.push(switchApi);
+		});
+		return switchApis.length > 1 ? switchApis : switchApis[0];
+	};
+	$.ready(function() {
+		$('.' + CLASS_SWITCH)['switch']();
+	});
+})(mui, window, 'toggle');
+/**
+ * Tableviews
+ * @param {type} $
+ * @param {type} window
+ * @param {type} document
+ * @returns {undefined}
+ */
+(function($, window, document) {
+
+	var CLASS_ACTIVE = 'mui-active';
+	var CLASS_SELECTED = 'mui-selected';
+	var CLASS_GRID_VIEW = 'mui-grid-view';
+	var CLASS_RADIO_VIEW = 'mui-table-view-radio';
+	var CLASS_TABLE_VIEW_CELL = 'mui-table-view-cell';
+	var CLASS_COLLAPSE_CONTENT = 'mui-collapse-content';
+	var CLASS_DISABLED = 'mui-disabled';
+	var CLASS_TOGGLE = 'mui-switch';
+	var CLASS_BTN = 'mui-btn';
+
+	var CLASS_SLIDER_HANDLE = 'mui-slider-handle';
+	var CLASS_SLIDER_LEFT = 'mui-slider-left';
+	var CLASS_SLIDER_RIGHT = 'mui-slider-right';
+	var CLASS_TRANSITIONING = 'mui-transitioning';
+
+
+	var SELECTOR_SLIDER_HANDLE = '.' + CLASS_SLIDER_HANDLE;
+	var SELECTOR_SLIDER_LEFT = '.' + CLASS_SLIDER_LEFT;
+	var SELECTOR_SLIDER_RIGHT = '.' + CLASS_SLIDER_RIGHT;
+	var SELECTOR_SELECTED = '.' + CLASS_SELECTED;
+	var SELECTOR_BUTTON = '.' + CLASS_BTN;
+	var overFactor = 0.8;
+	var cell, a;
+
+	var isMoved = isOpened = openedActions = progress = false;
+	var sliderHandle = sliderActionLeft = sliderActionRight = buttonsLeft = buttonsRight = sliderDirection = sliderRequestAnimationFrame = false;
+	var timer = translateX = lastTranslateX = sliderActionLeftWidth = sliderActionRightWidth = 0;
+
+
+
+	var toggleActive = function(isActive) {
+		if (isActive) {
+			if (a) {
+				a.classList.add(CLASS_ACTIVE);
+			} else if (cell) {
+				cell.classList.add(CLASS_ACTIVE);
+			}
+		} else {
+			timer && timer.cancel();
+			if (a) {
+				a.classList.remove(CLASS_ACTIVE);
+			} else if (cell) {
+				cell.classList.remove(CLASS_ACTIVE);
+			}
+		}
+	};
+
+	var updateTranslate = function() {
+		if (translateX !== lastTranslateX) {
+			if (buttonsRight && buttonsRight.length > 0) {
+				progress = translateX / sliderActionRightWidth;
+				if (translateX < -sliderActionRightWidth) {
+					translateX = -sliderActionRightWidth - Math.pow(-translateX - sliderActionRightWidth, overFactor);
+				}
+				for (var i = 0, len = buttonsRight.length; i < len; i++) {
+					var buttonRight = buttonsRight[i];
+					if (typeof buttonRight._buttonOffset === 'undefined') {
+						buttonRight._buttonOffset = buttonRight.offsetLeft;
+					}
+					buttonOffset = buttonRight._buttonOffset;
+					setTranslate(buttonRight, (translateX - buttonOffset * (1 + Math.max(progress, -1))));
+				}
+			}
+			if (buttonsLeft && buttonsLeft.length > 0) {
+				progress = translateX / sliderActionLeftWidth;
+				if (translateX > sliderActionLeftWidth) {
+					translateX = sliderActionLeftWidth + Math.pow(translateX - sliderActionLeftWidth, overFactor);
+				}
+				for (var i = 0, len = buttonsLeft.length; i < len; i++) {
+					var buttonLeft = buttonsLeft[i];
+					if (typeof buttonLeft._buttonOffset === 'undefined') {
+						buttonLeft._buttonOffset = sliderActionLeftWidth - buttonLeft.offsetLeft - buttonLeft.offsetWidth;
+					}
+					buttonOffset = buttonLeft._buttonOffset;
+					if (buttonsLeft.length > 1) {
+						buttonLeft.style.zIndex = buttonsLeft.length - i;
+					}
+					setTranslate(buttonLeft, (translateX + buttonOffset * (1 - Math.min(progress, 1))));
+				}
+			}
+			setTranslate(sliderHandle, translateX);
+			lastTranslateX = translateX;
+		}
+		sliderRequestAnimationFrame = requestAnimationFrame(function() {
+			updateTranslate();
+		});
+	};
+	var setTranslate = function(element, x) {
+		if (element) {
+			element.style.webkitTransform = 'translate(' + x + 'px,0)';
+		}
+	};
+
+	window.addEventListener($.EVENT_START, function(event) {
+		if (cell) {
+			toggleActive(false);
+		}
+		cell = a = false;
+		isMoved = isOpened = openedActions = false;
+		var target = event.target;
+		var isDisabled = false;
+		for (; target && target !== document; target = target.parentNode) {
+			if (target.classList) {
+				var classList = target.classList;
+				if ((target.tagName === 'INPUT' && target.type !== 'radio' && target.type !== 'checkbox') || target.tagName === 'BUTTON' || classList.contains(CLASS_TOGGLE) || classList.contains(CLASS_BTN) || classList.contains(CLASS_DISABLED)) {
+					isDisabled = true;
+				}
+				if (classList.contains(CLASS_COLLAPSE_CONTENT)) { //collapse content
+					break;
+				}
+				if (classList.contains(CLASS_TABLE_VIEW_CELL)) {
+					cell = target;
+					//TODO swipe to delete close
+					var selected = cell.parentNode.querySelector(SELECTOR_SELECTED);
+					if (!cell.parentNode.classList.contains(CLASS_RADIO_VIEW) && selected && selected !== cell) {
+						$.swipeoutClose(selected);
+						cell = isDisabled = false;
+						return;
+					}
+					if (!cell.parentNode.classList.contains(CLASS_GRID_VIEW)) {
+						var link = cell.querySelector('a');
+						if (link && link.parentNode === cell) { //li>a
+							a = link;
+						}
+					}
+					var handle = cell.querySelector(SELECTOR_SLIDER_HANDLE);
+					if (handle) {
+						toggleEvents(cell);
+						event.stopPropagation();
+					}
+					if (!isDisabled) {
+						if (handle) {
+							if (timer) {
+								timer.cancel();
+							}
+							timer = $.later(function() {
+								toggleActive(true);
+							}, 100);
+						} else {
+							toggleActive(true);
+						}
+					}
+					break;
+				}
+			}
+		}
+	});
+	window.addEventListener($.EVENT_MOVE, function(event) {
+		toggleActive(false);
+	});
+
+	var handleEvent = {
+		handleEvent: function(event) {
+			switch (event.type) {
+				case 'drag':
+					this.drag(event);
+					break;
+				case 'dragend':
+					this.dragend(event);
+					break;
+				case 'flick':
+					this.flick(event);
+					break;
+				case 'swiperight':
+					this.swiperight(event);
+					break;
+				case 'swipeleft':
+					this.swipeleft(event);
+					break;
+			}
+		},
+		drag: function(event) {
+			if (!cell) {
+				return;
+			}
+			if (!isMoved) { //init
+				sliderHandle = sliderActionLeft = sliderActionRight = buttonsLeft = buttonsRight = sliderDirection = sliderRequestAnimationFrame = false;
+				sliderHandle = cell.querySelector(SELECTOR_SLIDER_HANDLE);
+				if (sliderHandle) {
+					sliderActionLeft = cell.querySelector(SELECTOR_SLIDER_LEFT);
+					sliderActionRight = cell.querySelector(SELECTOR_SLIDER_RIGHT);
+					if (sliderActionLeft) {
+						sliderActionLeftWidth = sliderActionLeft.offsetWidth;
+						buttonsLeft = sliderActionLeft.querySelectorAll(SELECTOR_BUTTON);
+					}
+					if (sliderActionRight) {
+						sliderActionRightWidth = sliderActionRight.offsetWidth;
+						buttonsRight = sliderActionRight.querySelectorAll(SELECTOR_BUTTON);
+					}
+					cell.classList.remove(CLASS_TRANSITIONING);
+					isOpened = cell.classList.contains(CLASS_SELECTED);
+					if (isOpened) {
+						openedActions = cell.querySelector(SELECTOR_SLIDER_LEFT + SELECTOR_SELECTED) ? 'left' : 'right';
+					}
+				}
+			}
+			var detail = event.detail;
+			var direction = detail.direction;
+			var angle = detail.angle;
+			if (direction === 'left' && (angle > 150 || angle < -150)) {
+				if (buttonsRight || (buttonsLeft && isOpened)) { //存在右侧按钮或存在左侧按钮且是已打开状态
+					isMoved = true;
+				}
+			} else if (direction === 'right' && (angle > -30 && angle < 30)) {
+				if (buttonsLeft || (buttonsRight && isOpened)) { //存在左侧按钮或存在右侧按钮且是已打开状态
+					isMoved = true;
+				}
+			}
+			if (isMoved) {
+				event.stopPropagation();
+				event.detail.gesture.preventDefault();
+				var translate = event.detail.deltaX;
+				if (isOpened) {
+					if (openedActions === 'right') {
+						translate = translate - sliderActionRightWidth;
+					} else {
+						translate = translate + sliderActionLeftWidth;
+					}
+				}
+				if ((translate > 0 && !buttonsLeft) || (translate < 0 && !buttonsRight)) {
+					if (!isOpened) {
+						return;
+					}
+					translate = 0;
+				}
+				if (translate < 0) {
+					sliderDirection = 'toLeft';
+				} else if (translate > 0) {
+					sliderDirection = 'toRight';
+				} else {
+					if (!sliderDirection) {
+						sliderDirection = 'toLeft';
+					}
+				}
+				if (!sliderRequestAnimationFrame) {
+					updateTranslate();
+				}
+				translateX = translate;
+			}
+		},
+		flick: function(event) {
+			if (isMoved) {
+				event.stopPropagation();
+			}
+		},
+		swipeleft: function(event) {
+			if (isMoved) {
+				event.stopPropagation();
+			}
+		},
+		swiperight: function(event) {
+			if (isMoved) {
+				event.stopPropagation();
+			}
+		},
+		dragend: function(event) {
+			if (!isMoved) {
+				return;
+			}
+			event.stopPropagation();
+			if (sliderRequestAnimationFrame) {
+				cancelAnimationFrame(sliderRequestAnimationFrame);
+				sliderRequestAnimationFrame = null;
+			}
+			var detail = event.detail;
+			isMoved = false;
+			var action = 'close';
+			var actionsWidth = sliderDirection === 'toLeft' ? sliderActionRightWidth : sliderActionLeftWidth;
+			var isToggle = detail.swipe || (Math.abs(translateX) > actionsWidth / 2);
+			if (isToggle) {
+				if (!isOpened) {
+					action = 'open';
+				} else if (detail.direction === 'left' && openedActions === 'right') {
+					action = 'open';
+				} else if (detail.direction === 'right' && openedActions === 'left') {
+					action = 'open';
+				}
+
+			}
+			cell.classList.add(CLASS_TRANSITIONING);
+			var buttons;
+			if (action === 'open') {
+				var newTranslate = sliderDirection === 'toLeft' ? -actionsWidth : actionsWidth;
+				setTranslate(sliderHandle, newTranslate);
+				buttons = sliderDirection === 'toLeft' ? buttonsRight : buttonsLeft;
+				if (typeof buttons !== 'undefined') {
+					var button = null;
+					for (var i = 0; i < buttons.length; i++) {
+						button = buttons[i];
+						setTranslate(button, newTranslate);
+					}
+					button.parentNode.classList.add(CLASS_SELECTED);
+					cell.classList.add(CLASS_SELECTED);
+					if (!isOpened) {
+						$.trigger(cell, sliderDirection === 'toLeft' ? 'slideleft' : 'slideright');
+					}
+				}
+			} else {
+				setTranslate(sliderHandle, 0);
+				sliderActionLeft && sliderActionLeft.classList.remove(CLASS_SELECTED);
+				sliderActionRight && sliderActionRight.classList.remove(CLASS_SELECTED);
+				cell.classList.remove(CLASS_SELECTED);
+			}
+			var buttonOffset;
+			if (buttonsLeft && buttonsLeft.length > 0 && buttonsLeft !== buttons) {
+				for (var i = 0, len = buttonsLeft.length; i < len; i++) {
+					var buttonLeft = buttonsLeft[i];
+					buttonOffset = buttonLeft._buttonOffset;
+					if (typeof buttonOffset === 'undefined') {
+						buttonLeft._buttonOffset = sliderActionLeftWidth - buttonLeft.offsetLeft - buttonLeft.offsetWidth;
+					}
+					setTranslate(buttonLeft, buttonOffset);
+				}
+			}
+			if (buttonsRight && buttonsRight.length > 0 && buttonsRight !== buttons) {
+				for (var i = 0, len = buttonsRight.length; i < len; i++) {
+					var buttonRight = buttonsRight[i];
+					buttonOffset = buttonRight._buttonOffset;
+					if (typeof buttonOffset === 'undefined') {
+						buttonRight._buttonOffset = buttonRight.offsetLeft;
+					}
+					setTranslate(buttonRight, -buttonOffset);
+				}
+			}
+		}
+	};
+
+	function toggleEvents(element, isRemove) {
+		var method = !!isRemove ? 'removeEventListener' : 'addEventListener';
+		element[method]('drag', handleEvent);
+		element[method]('dragend', handleEvent);
+		element[method]('swiperight', handleEvent);
+		element[method]('swipeleft', handleEvent);
+		element[method]('flick', handleEvent);
+	};
+	/**
+	 * 打开滑动菜单
+	 * @param {Object} el
+	 * @param {Object} direction
+	 */
+	$.swipeoutOpen = function(el, direction) {
+		if (!el) return;
+		var classList = el.classList;
+		if (classList.contains(CLASS_SELECTED)) return;
+		if (!direction) {
+			if (el.querySelector(SELECTOR_SLIDER_RIGHT)) {
+				direction = 'right';
+			} else {
+				direction = 'left';
+			}
+		}
+		var swipeoutAction = el.querySelector($.classSelector(".slider-" + direction));
+		if (!swipeoutAction) return;
+		swipeoutAction.classList.add(CLASS_SELECTED);
+		classList.add(CLASS_SELECTED);
+		classList.remove(CLASS_TRANSITIONING);
+		var buttons = swipeoutAction.querySelectorAll(SELECTOR_BUTTON);
+		var swipeoutWidth = swipeoutAction.offsetWidth;
+		var translate = (direction === 'right') ? -swipeoutWidth : swipeoutWidth;
+		var length = buttons.length;
+		var button;
+		for (var i = 0; i < length; i++) {
+			button = buttons[i];
+			if (direction === 'right') {
+				setTranslate(button, -button.offsetLeft);
+			} else {
+				setTranslate(button, (swipeoutWidth - button.offsetWidth - button.offsetLeft));
+			}
+		}
+		classList.add(CLASS_TRANSITIONING);
+		for (var i = 0; i < length; i++) {
+			setTranslate(buttons[i], translate);
+		}
+		setTranslate(el.querySelector(SELECTOR_SLIDER_HANDLE), translate);
+	};
+	/**
+	 * 关闭滑动菜单
+	 * @param {Object} el
+	 */
+	$.swipeoutClose = function(el) {
+		if (!el) return;
+		var classList = el.classList;
+		if (!classList.contains(CLASS_SELECTED)) return;
+		var direction = el.querySelector(SELECTOR_SLIDER_RIGHT + SELECTOR_SELECTED) ? 'right' : 'left';
+		var swipeoutAction = el.querySelector($.classSelector(".slider-" + direction));
+		if (!swipeoutAction) return;
+		swipeoutAction.classList.remove(CLASS_SELECTED);
+		classList.remove(CLASS_SELECTED);
+		classList.add(CLASS_TRANSITIONING);
+		var buttons = swipeoutAction.querySelectorAll(SELECTOR_BUTTON);
+		var swipeoutWidth = swipeoutAction.offsetWidth;
+		var length = buttons.length;
+		var button;
+		setTranslate(el.querySelector(SELECTOR_SLIDER_HANDLE), 0);
+		for (var i = 0; i < length; i++) {
+			button = buttons[i];
+			if (direction === 'right') {
+				setTranslate(button, (-button.offsetLeft));
+			} else {
+				setTranslate(button, (swipeoutWidth - button.offsetWidth - button.offsetLeft));
+			}
+		}
+	};
+
+	window.addEventListener($.EVENT_END, function(event) { //使用touchend来取消高亮,避免一次点击既不触发tap,doubletap,longtap的事件
+		if (!cell) {
+			return;
+		}
+		toggleActive(false);
+		sliderHandle && toggleEvents(cell, true);
+	});
+	window.addEventListener($.EVENT_CANCEL, function(event) { //使用touchcancel来取消高亮,避免一次点击既不触发tap,doubletap,longtap的事件
+		if (!cell) {
+			return;
+		}
+		toggleActive(false);
+		sliderHandle && toggleEvents(cell, true);
+	});
+	var radioOrCheckboxClick = function(event) {
+		var type = event.target && event.target.type || '';
+		if (type === 'radio' || type === 'checkbox') {
+			return;
+		}
+		var classList = cell.classList;
+		if (classList.contains('mui-radio')) {
+			var input = cell.querySelector('input[type=radio]');
+			if (input) {
+				//				input.click();
+				if (!input.disabled && !input.readOnly) {
+					input.checked = !input.checked;
+					$.trigger(input, 'change');
+				}
+			}
+		} else if (classList.contains('mui-checkbox')) {
+			var input = cell.querySelector('input[type=checkbox]');
+			if (input) {
+				//				input.click();
+				if (!input.disabled && !input.readOnly) {
+					input.checked = !input.checked;
+					$.trigger(input, 'change');
+				}
+			}
+		}
+	};
+	//fixed hashchange(android)
+	window.addEventListener($.EVENT_CLICK, function(e) {
+		if (cell && cell.classList.contains('mui-collapse')) {
+			e.preventDefault();
+		}
+	});
+	window.addEventListener('doubletap', function(event) {
+		if (cell) {
+			radioOrCheckboxClick(event);
+		}
+	});
+	var preventDefaultException = /^(INPUT|TEXTAREA|BUTTON|SELECT)$/;
+	window.addEventListener('tap', function(event) {
+		if (!cell) {
+			return;
+		}
+		var isExpand = false;
+		var classList = cell.classList;
+		var ul = cell.parentNode;
+		if (ul && ul.classList.contains(CLASS_RADIO_VIEW)) {
+			if (classList.contains(CLASS_SELECTED)) {
+				return;
+			}
+			var selected = ul.querySelector('li' + SELECTOR_SELECTED);
+			if (selected) {
+				selected.classList.remove(CLASS_SELECTED);
+			}
+			classList.add(CLASS_SELECTED);
+			$.trigger(cell, 'selected', {
+				el: cell
+			});
+			return;
+		}
+		if (classList.contains('mui-collapse') && !cell.parentNode.classList.contains('mui-unfold')) {
+			if (!preventDefaultException.test(event.target.tagName)) {
+				event.detail.gesture.preventDefault();
+			}
+
+			if (!classList.contains(CLASS_ACTIVE)) { //展开时,需要收缩其他同类
+				var collapse = cell.parentNode.querySelector('.mui-collapse.mui-active');
+				if (collapse) {
+					collapse.classList.remove(CLASS_ACTIVE);
+				}
+				isExpand = true;
+			}
+			classList.toggle(CLASS_ACTIVE);
+			if (isExpand) {
+				//触发展开事件
+				$.trigger(cell, 'expand');
+
+				//scroll
+				//暂不滚动
+				// var offsetTop = $.offset(cell).top;
+				// var scrollTop = document.body.scrollTop;
+				// var height = window.innerHeight;
+				// var offsetHeight = cell.offsetHeight;
+				// var cellHeight = (offsetTop - scrollTop + offsetHeight);
+				// if (offsetHeight > height) {
+				// 	$.scrollTo(offsetTop, 300);
+				// } else if (cellHeight > height) {
+				// 	$.scrollTo(cellHeight - height + scrollTop, 300);
+				// }
+			}
+		} else {
+			radioOrCheckboxClick(event);
+		}
+	});
+})(mui, window, document);
+(function($, window) {
+	/**
+	 * 警告消息框
+	 */
+	$.alert = function(message, title, btnValue, callback) {
+		if ($.os.plus) {
+			if (typeof message === 'undefined') {
+				return;
+			} else {
+				if (typeof title === 'function') {
+					callback = title;
+					title = null;
+					btnValue = '确定';
+				} else if (typeof btnValue === 'function') {
+					callback = btnValue;
+					btnValue = null;
+				}
+				$.plusReady(function() {
+					plus.nativeUI.alert(message, callback, title, btnValue);
+				});
+			}
+
+		} else {
+			//TODO H5版本
+			window.alert(message);
+		}
+	};
+
+})(mui, window);
+(function($, window) {
+	/**
+	 * 确认消息框
+	 */
+	$.confirm = function(message, title, btnArray, callback) {
+		if ($.os.plus) {
+			if (typeof message === 'undefined') {
+				return;
+			} else {
+				if (typeof title === 'function') {
+					callback = title;
+					title = null;
+					btnArray = null;
+				} else if (typeof btnArray === 'function') {
+					callback = btnArray;
+					btnArray = null;
+				}
+				$.plusReady(function() {
+					plus.nativeUI.confirm(message, callback, title, btnArray);
+				});
+			}
+
+		} else {
+			//H5版本,0为确认,1为取消
+			if (window.confirm(message)) {
+				callback({
+					index: 0
+				});
+			} else {
+				callback({
+					index: 1
+				});
+			}
+		}
+	};
+
+})(mui, window);
+(function($, window) {
+	/**
+	 * 输入对话框
+	 */
+	$.prompt = function(text, defaultText, title, btnArray, callback) {
+		if ($.os.plus) {
+			if (typeof message === 'undefined') {
+				return;
+			} else {
+
+				if (typeof defaultText === 'function') {
+					callback = defaultText;
+					defaultText = null;
+					title = null;
+					btnArray = null;
+				} else if (typeof title === 'function') {
+					callback = title;
+					title = null;
+					btnArray = null;
+				} else if (typeof btnArray === 'function') {
+					callback = btnArray;
+					btnArray = null;
+				}
+				$.plusReady(function() {
+					plus.nativeUI.prompt(text, callback, title, defaultText, btnArray);
+				});
+			}
+
+		} else {
+			//H5版本(确认index为0,取消index为1)
+			var result = window.prompt(text);
+			if (result) {
+				callback({
+					index: 0,
+					value: result
+				});
+			} else {
+				callback({
+					index: 1,
+					value: ''
+				});
+			}
+		}
+	};
+
+})(mui, window);
+(function($, window) {
+	var CLASS_ACTIVE = 'mui-active';
+	/**
+	 * 自动消失提示框
+	 */
+	$.toast = function(message,options) {
+		var durations = {
+		    'long': 3500,
+		    'short': 3000
+		};
+
+		//计算显示时间
+		 options = $.extend({
+	        duration: 'short'
+	    }, options || {});
+
+
+		if ($.os.plus && options.type !== 'div') {
+			//默认显示在底部;
+			$.plusReady(function() {
+				plus.nativeUI.toast(message, {
+					verticalAlign: 'bottom',
+					duration:options.duration
+				});
+			});
+		} else {
+			if (typeof options.duration === 'number') {
+		        duration = options.duration>0 ? options.duration:durations['short'];
+		    } else {
+		        duration = durations[options.duration];
+		    }
+		    if (!duration) {
+		        duration = durations['short'];
+		    }
+			var toast = document.createElement('div');
+			toast.style="bottom: 10%;";
+			toast.classList.add('mui-toast-container');
+			toast.innerHTML = '<div class="' + 'mui-toast-message' + '">' + message + '</div>';
+			toast.addEventListener('webkitTransitionEnd', function() {
+				if (!toast.classList.contains(CLASS_ACTIVE)) {
+					toast.parentNode.removeChild(toast);
+					toast = null;
+				}
+			});
+			//点击则自动消失
+			toast.addEventListener('click', function() {
+		        toast.parentNode.removeChild(toast);
+		        toast = null;
+		    });
+			document.body.appendChild(toast);
+			toast.offsetHeight;
+			toast.classList.add(CLASS_ACTIVE);
+			setTimeout(function() {
+				toast && toast.classList.remove(CLASS_ACTIVE);
+			}, duration);
+			
+			return {
+		        isVisible: function() {return !!toast;}
+		    }
+		}   
+	};
+
+})(mui, window);
+/**
+ * Popup(alert,confirm,prompt)  
+ * @param {Object} $
+ * @param {Object} window
+ * @param {Object} document
+ */
+(function($, window, document) {
+    var CLASS_POPUP = 'mui-popup';
+    var CLASS_POPUP_BACKDROP = 'mui-popup-backdrop';
+    var CLASS_POPUP_IN = 'mui-popup-in';
+    var CLASS_POPUP_OUT = 'mui-popup-out';
+    var CLASS_POPUP_INNER = 'mui-popup-inner';
+    var CLASS_POPUP_TITLE = 'mui-popup-title';
+    var CLASS_POPUP_TEXT = 'mui-popup-text';
+    var CLASS_POPUP_INPUT = 'mui-popup-input';
+    var CLASS_POPUP_BUTTONS = 'mui-popup-buttons';
+    var CLASS_POPUP_BUTTON = 'mui-popup-button';
+    var CLASS_POPUP_BUTTON_BOLD = 'mui-popup-button-bold';
+    var CLASS_POPUP_BACKDROP = 'mui-popup-backdrop';
+    var CLASS_ACTIVE = 'mui-active';
+
+    var popupStack = [];
+    var backdrop = (function() {
+        var element = document.createElement('div');
+        element.classList.add(CLASS_POPUP_BACKDROP);
+        element.addEventListener($.EVENT_MOVE, $.preventDefault);
+        element.addEventListener('webkitTransitionEnd', function() {
+            if (!this.classList.contains(CLASS_ACTIVE)) {
+                element.parentNode && element.parentNode.removeChild(element);
+            }
+        });
+        return element;
+    }());
+
+    var createInput = function(placeholder) {
+        return '<div class="' + CLASS_POPUP_INPUT + '"><input type="text" autofocus placeholder="' + (placeholder || '') + '"/></div>';
+    };
+    var createInner = function(message, title, extra) {
+        return '<div class="' + CLASS_POPUP_INNER + '"><div class="' + CLASS_POPUP_TITLE + '">' + title + '</div><div class="' + CLASS_POPUP_TEXT + '">' + message.replace(/\r\n/g, "<br/>").replace(/\n/g, "<br/>") + '</div>' + (extra || '') + '</div>';
+    };
+    var createButtons = function(btnArray) {
+        var length = btnArray.length;
+        var btns = [];
+        for (var i = 0; i < length; i++) {
+            btns.push('<span class="' + CLASS_POPUP_BUTTON + (i === length - 1 ? (' ' + CLASS_POPUP_BUTTON_BOLD) : '') + '">' + btnArray[i] + '</span>');
+        }
+        return '<div class="' + CLASS_POPUP_BUTTONS + '">' + btns.join('') + '</div>';
+    };
+
+    var createPopup = function(html, callback) {
+        var popupElement = document.createElement('div');
+        popupElement.className = CLASS_POPUP;
+        popupElement.innerHTML = html;
+        var removePopupElement = function() {
+            popupElement.parentNode && popupElement.parentNode.removeChild(popupElement);
+            popupElement = null;
+        };
+        popupElement.addEventListener($.EVENT_MOVE, $.preventDefault);
+        popupElement.addEventListener('webkitTransitionEnd', function(e) {
+            if (popupElement && e.target === popupElement && popupElement.classList.contains(CLASS_POPUP_OUT)) {
+                removePopupElement();
+            }
+        });
+        popupElement.style.display = 'block';
+        document.body.appendChild(popupElement);
+        popupElement.offsetHeight;
+        popupElement.classList.add(CLASS_POPUP_IN);
+
+        if (!backdrop.classList.contains(CLASS_ACTIVE)) {
+            backdrop.style.display = 'block';
+            document.body.appendChild(backdrop);
+            backdrop.offsetHeight;
+            backdrop.classList.add(CLASS_ACTIVE);
+        }
+        var btns = $.qsa('.' + CLASS_POPUP_BUTTON, popupElement);
+        var input = popupElement.querySelector('.' + CLASS_POPUP_INPUT + ' input');
+        var popup = {
+            element: popupElement,
+            close: function(index, animate) {
+                if (popupElement) {
+                    var result = callback && callback({
+                        index: index || 0,
+                        value: input && input.value || ''
+                    });
+                    if (result === false) { //返回false则不关闭当前popup
+                        return;
+                    }
+                    if (animate !== false) {
+                        popupElement.classList.remove(CLASS_POPUP_IN);
+                        popupElement.classList.add(CLASS_POPUP_OUT);
+                    } else {
+                        removePopupElement();
+                    }
+                    popupStack.pop();
+                    //如果还有其他popup,则不remove backdrop
+                    if (popupStack.length) {
+                        popupStack[popupStack.length - 1]['show'](animate);
+                    } else {
+                        backdrop.classList.remove(CLASS_ACTIVE);
+                    }
+                }
+            }
+        };
+        var handleEvent = function(e) {
+            popup.close(btns.indexOf(e.target));
+        };
+        $(popupElement).on('tap', '.' + CLASS_POPUP_BUTTON, handleEvent);
+        if (popupStack.length) {
+            popupStack[popupStack.length - 1]['hide']();
+        }
+        popupStack.push({
+            close: popup.close,
+            show: function(animate) {
+                popupElement.style.display = 'block';
+                popupElement.offsetHeight;
+                popupElement.classList.add(CLASS_POPUP_IN);
+            },
+            hide: function() {
+                popupElement.style.display = 'none';
+                popupElement.classList.remove(CLASS_POPUP_IN);
+            }
+        });
+        return popup;
+    };
+    var createAlert = function(message, title, btnValue, callback, type) {
+        if (typeof message === 'undefined') {
+            return;
+        } else {
+            if (typeof title === 'function') {
+                callback = title;
+                type = btnValue;
+                title = null;
+                btnValue = null;
+            } else if (typeof btnValue === 'function') {
+                type = callback;
+                callback = btnValue;
+                btnValue = null;
+            }
+        }
+        if (!$.os.plus || type === 'div') {
+            return createPopup(createInner(message, title || '提示') + createButtons([btnValue || '确定']), callback);
+        }
+        return plus.nativeUI.alert(message, callback, title || '提示', btnValue || '确定');
+    };
+    var createConfirm = function(message, title, btnArray, callback, type) {
+        if (typeof message === 'undefined') {
+            return;
+        } else {
+            if (typeof title === 'function') {
+                callback = title;
+                type = btnArray;
+                title = null;
+                btnArray = null;
+            } else if (typeof btnArray === 'function') {
+                type = callback;
+                callback = btnArray;
+                btnArray = null;
+            }
+        }
+        if (!$.os.plus || type === 'div') {
+            return createPopup(createInner(message, title || '提示') + createButtons(btnArray || ['取消', '确认']), callback);
+        }
+        return plus.nativeUI.confirm(message, callback, title, btnArray || ['取消', '确认']);
+    };
+    var createPrompt = function(message, placeholder, title, btnArray, callback, type) {
+        if (typeof message === 'undefined') {
+            return;
+        } else {
+            if (typeof placeholder === 'function') {
+                callback = placeholder;
+                type = title;
+                placeholder = null;
+                title = null;
+                btnArray = null;
+            } else if (typeof title === 'function') {
+                callback = title;
+                type = btnArray;
+                title = null;
+                btnArray = null;
+            } else if (typeof btnArray === 'function') {
+                type = callback;
+                callback = btnArray;
+                btnArray = null;
+            }
+        }
+        if (!$.os.plus || type === 'div') {
+            return createPopup(createInner(message, title || '提示', createInput(placeholder)) + createButtons(btnArray || ['取消', '确认']), callback);
+        }
+        return plus.nativeUI.prompt(message, callback, title || '提示', placeholder, btnArray || ['取消', '确认']);
+    };
+    var closePopup = function() {
+        if (popupStack.length) {
+            popupStack[popupStack.length - 1]['close']();
+            return true;
+        } else {
+            return false;
+        }
+    };
+    var closePopups = function() {
+        while (popupStack.length) {
+            popupStack[popupStack.length - 1]['close']();
+        }
+    };
+
+    $.closePopup = closePopup;
+    $.closePopups = closePopups;
+    $.alert = createAlert;
+    $.confirm = createConfirm;
+    $.prompt = createPrompt;
+})(mui, window, document);
+(function($, document) {
+	var CLASS_PROGRESSBAR = 'mui-progressbar';
+	var CLASS_PROGRESSBAR_IN = 'mui-progressbar-in';
+	var CLASS_PROGRESSBAR_OUT = 'mui-progressbar-out';
+	var CLASS_PROGRESSBAR_INFINITE = 'mui-progressbar-infinite';
+
+	var SELECTOR_PROGRESSBAR = '.mui-progressbar';
+
+	var _findProgressbar = function(container) {
+		container = $(container || 'body');
+		if (container.length === 0) return;
+		container = container[0];
+		if (container.classList.contains(CLASS_PROGRESSBAR)) {
+			return container;
+		}
+		var progressbars = container.querySelectorAll(SELECTOR_PROGRESSBAR);
+		if (progressbars) {
+			for (var i = 0, len = progressbars.length; i < len; i++) {
+				var progressbar = progressbars[i];
+				if (progressbar.parentNode === container) {
+					return progressbar;
+				}
+			}
+		}
+	};
+	/**
+	 * 创建并显示进度条 
+	 * @param {Object} container  可选,默认body,支持selector,DOM Node,mui wrapper
+	 * @param {Object} progress 可选,undefined表示循环,数字表示具体进度
+	 * @param {Object} color 可选,指定颜色样式(目前暂未提供实际样式,可暂时不暴露此参数)
+	 */
+	var showProgressbar = function(container, progress, color) {
+		if (typeof container === 'number') {
+			color = progress;
+			progress = container;
+			container = 'body';
+		}
+		container = $(container || 'body');
+		if (container.length === 0) return;
+		container = container[0];
+		var progressbar;
+		if (container.classList.contains(CLASS_PROGRESSBAR)) {
+			progressbar = container;
+		} else {
+			var progressbars = container.querySelectorAll(SELECTOR_PROGRESSBAR + ':not(.' + CLASS_PROGRESSBAR_OUT + ')');
+			if (progressbars) {
+				for (var i = 0, len = progressbars.length; i < len; i++) {
+					var _progressbar = progressbars[i];
+					if (_progressbar.parentNode === container) {
+						progressbar = _progressbar;
+						break;
+					}
+				}
+			}
+			if (!progressbar) {
+				progressbar = document.createElement('span');
+				progressbar.className = CLASS_PROGRESSBAR + ' ' + CLASS_PROGRESSBAR_IN + (typeof progress !== 'undefined' ? '' : (' ' + CLASS_PROGRESSBAR_INFINITE)) + (color ? (' ' + CLASS_PROGRESSBAR + '-' + color) : '');
+				if (typeof progress !== 'undefined') {
+					progressbar.innerHTML = '<span></span>';
+				}
+				container.appendChild(progressbar);
+			} else {
+				progressbar.classList.add(CLASS_PROGRESSBAR_IN);
+			}
+		}
+		if (progress) setProgressbar(container, progress);
+		return progressbar;
+	};
+	/**
+	 * 关闭进度条 
+	 * @param {Object} container 可选,默认body,支持selector,DOM Node,mui wrapper
+	 */
+	var hideProgressbar = function(container) {
+		var progressbar = _findProgressbar(container);
+		if (!progressbar) {
+			return;
+		}
+		var classList = progressbar.classList;
+		if (!classList.contains(CLASS_PROGRESSBAR_IN) || classList.contains(CLASS_PROGRESSBAR_OUT)) {
+			return;
+		}
+		classList.remove(CLASS_PROGRESSBAR_IN);
+		classList.add(CLASS_PROGRESSBAR_OUT);
+		progressbar.addEventListener('webkitAnimationEnd', function() {
+			progressbar.parentNode && progressbar.parentNode.removeChild(progressbar);
+			progressbar = null;
+		});
+		return;
+	};
+	/**
+	 * 设置指定进度条进度 
+	 * @param {Object} container  可选,默认body,支持selector,DOM Node,mui wrapper
+	 * @param {Object} progress 可选,默认0 取值范围[0-100]
+	 * @param {Object} speed 进度条动画时间
+	 */
+	var setProgressbar = function(container, progress, speed) {
+		if (typeof container === 'number') {
+			speed = progress;
+			progress = container;
+			container = false;
+		}
+		var progressbar = _findProgressbar(container);
+		if (!progressbar || progressbar.classList.contains(CLASS_PROGRESSBAR_INFINITE)) {
+			return;
+		}
+		if (progress) progress = Math.min(Math.max(progress, 0), 100);
+		progressbar.offsetHeight;
+		var span = progressbar.querySelector('span');
+		if (span) {
+			var style = span.style;
+			style.webkitTransform = 'translate3d(' + (-100 + progress) + '%,0,0)';
+			if (typeof speed !== 'undefined') {
+				style.webkitTransitionDuration = speed + 'ms';
+			} else {
+				style.webkitTransitionDuration = '';
+			}
+		}
+		return progressbar;
+	};
+	$.fn.progressbar = function(options) {
+		var progressbarApis = [];
+		options = options || {};
+		this.each(function() {
+			var self = this;
+			var progressbarApi = self.mui_plugin_progressbar;
+			if (!progressbarApi) {
+				self.mui_plugin_progressbar = progressbarApi = {
+					options: options,
+					setOptions: function(options) {
+						this.options = options;
+					},
+					show: function() {
+						return showProgressbar(self, this.options.progress, this.options.color);
+					},
+					setProgress: function(progress) {
+						return setProgressbar(self, progress);
+					},
+					hide: function() {
+						return hideProgressbar(self);
+					}
+				};
+			} else if (options) {
+				progressbarApi.setOptions(options);
+			}
+			progressbarApis.push(progressbarApi);
+		});
+		return progressbarApis.length === 1 ? progressbarApis[0] : progressbarApis;
+	};
+	//	$.setProgressbar = setProgressbar;
+	//	$.showProgressbar = showProgressbar;
+	//	$.hideProgressbar = hideProgressbar;
+})(mui, document);
+/**
+ * Input(TODO resize)
+ * @param {type} $
+ * @param {type} window
+ * @param {type} document
+ * @returns {undefined}
+ */
+(function($, window, document) {
+	var CLASS_ICON = 'mui-icon';
+	var CLASS_ICON_CLEAR = 'mui-icon-clear';
+	var CLASS_ICON_SPEECH = 'mui-icon-speech';
+	var CLASS_ICON_SEARCH = 'mui-icon-search';
+	var CLASS_ICON_PASSWORD = 'mui-icon-eye';
+	var CLASS_INPUT_ROW = 'mui-input-row';
+	var CLASS_PLACEHOLDER = 'mui-placeholder';
+	var CLASS_TOOLTIP = 'mui-tooltip';
+	var CLASS_HIDDEN = 'mui-hidden';
+	var CLASS_FOCUSIN = 'mui-focusin';
+	var SELECTOR_ICON_CLOSE = '.' + CLASS_ICON_CLEAR;
+	var SELECTOR_ICON_SPEECH = '.' + CLASS_ICON_SPEECH;
+	var SELECTOR_ICON_PASSWORD = '.' + CLASS_ICON_PASSWORD;
+	var SELECTOR_PLACEHOLDER = '.' + CLASS_PLACEHOLDER;
+	var SELECTOR_TOOLTIP = '.' + CLASS_TOOLTIP;
+
+	var findRow = function(target) {
+		for (; target && target !== document; target = target.parentNode) {
+			if (target.classList && target.classList.contains(CLASS_INPUT_ROW)) {
+				return target;
+			}
+		}
+		return null;
+	};
+	var Input = function(element, options) {
+		this.element = element;
+		this.options = options || {
+			actions: 'clear'
+		};
+		if (~this.options.actions.indexOf('slider')) { //slider
+			this.sliderActionClass = CLASS_TOOLTIP + ' ' + CLASS_HIDDEN;
+			this.sliderActionSelector = SELECTOR_TOOLTIP;
+		} else { //clear,speech,search
+			if (~this.options.actions.indexOf('clear')) {
+				this.clearActionClass = CLASS_ICON + ' ' + CLASS_ICON_CLEAR + ' ' + CLASS_HIDDEN;
+				this.clearActionSelector = SELECTOR_ICON_CLOSE;
+			}
+			if (~this.options.actions.indexOf('speech')) { //only for 5+
+				this.speechActionClass = CLASS_ICON + ' ' + CLASS_ICON_SPEECH;
+				this.speechActionSelector = SELECTOR_ICON_SPEECH;
+			}
+			if (~this.options.actions.indexOf('search')) {
+				this.searchActionClass = CLASS_PLACEHOLDER;
+				this.searchActionSelector = SELECTOR_PLACEHOLDER;
+			}
+			if (~this.options.actions.indexOf('password')) {
+				this.passwordActionClass = CLASS_ICON + ' ' + CLASS_ICON_PASSWORD;
+				this.passwordActionSelector = SELECTOR_ICON_PASSWORD;
+			}
+		}
+		this.init();
+	};
+	Input.prototype.init = function() {
+		this.initAction();
+		this.initElementEvent();
+	};
+	Input.prototype.initAction = function() {
+		var self = this;
+
+		var row = self.element.parentNode;
+		if (row) {
+			if (self.sliderActionClass) {
+				self.sliderAction = self.createAction(row, self.sliderActionClass, self.sliderActionSelector);
+			} else {
+				if (self.searchActionClass) {
+					self.searchAction = self.createAction(row, self.searchActionClass, self.searchActionSelector);
+					self.searchAction.addEventListener('tap', function(e) {
+						$.focus(self.element);
+						e.stopPropagation();
+					});
+				}
+				if (self.speechActionClass) {
+					self.speechAction = self.createAction(row, self.speechActionClass, self.speechActionSelector);
+					self.speechAction.addEventListener('click', $.stopPropagation);
+					self.speechAction.addEventListener('tap', function(event) {
+						self.speechActionClick(event);
+					});
+				}
+				if (self.clearActionClass) {
+					self.clearAction = self.createAction(row, self.clearActionClass, self.clearActionSelector);
+					self.clearAction.addEventListener('tap', function(event) {
+						self.clearActionClick(event);
+					});
+				}
+				if (self.passwordActionClass) {
+					self.passwordAction = self.createAction(row, self.passwordActionClass, self.passwordActionSelector);
+					self.passwordAction.addEventListener('tap', function(event) {
+						self.passwordActionClick(event);
+					});
+				}
+			}
+		}
+	};
+	Input.prototype.createAction = function(row, actionClass, actionSelector) {
+		var action = row.querySelector(actionSelector);
+		if (!action) {
+			var action = document.createElement('span');
+			action.className = actionClass;
+			if (actionClass === this.searchActionClass) {
+				action.innerHTML = '<span class="' + CLASS_ICON + ' ' + CLASS_ICON_SEARCH + '"></span><span>' + this.element.getAttribute('placeholder') + '</span>';
+				this.element.setAttribute('placeholder', '');
+				if (this.element.value.trim()) {
+					row.classList.add('mui-active');
+				}
+			}
+			row.insertBefore(action, this.element.nextSibling);
+		}
+		return action;
+	};
+	Input.prototype.initElementEvent = function() {
+		var element = this.element;
+
+		if (this.sliderActionClass) {
+			var tooltip = this.sliderAction;
+			var timer = null;
+			var showTip = function() { //每次重新计算是因为控件可能被隐藏,初始化时计算是不正确的
+				tooltip.classList.remove(CLASS_HIDDEN);
+				var offsetLeft = element.offsetLeft;
+				var width = element.offsetWidth - 28;
+				var tooltipWidth = tooltip.offsetWidth;
+				var distince = Math.abs(element.max - element.min);
+				var scaleWidth = (width / distince) * Math.abs(element.value - element.min);
+				tooltip.style.left = (14 + offsetLeft + scaleWidth - tooltipWidth / 2) + 'px';
+				tooltip.innerText = element.value;
+				if (timer) {
+					clearTimeout(timer);
+				}
+				timer = setTimeout(function() {
+					tooltip.classList.add(CLASS_HIDDEN);
+				}, 1000);
+			};
+			element.addEventListener('input', showTip);
+			element.addEventListener('tap', showTip);
+			element.addEventListener($.EVENT_MOVE, function(e) {
+				e.stopPropagation();
+			});
+		} else {
+			if (this.clearActionClass) {
+				var action = this.clearAction;
+				if (!action) {
+					return;
+				}
+				$.each(['keyup', 'change', 'input', 'focus', 'cut', 'paste'], function(index, type) {
+					(function(type) {
+						element.addEventListener(type, function() {
+							action.classList[element.value.trim() ? 'remove' : 'add'](CLASS_HIDDEN);
+						});
+					})(type);
+				});
+				element.addEventListener('blur', function() {
+					action.classList.add(CLASS_HIDDEN);
+				});
+			}
+			if (this.searchActionClass) {
+				element.addEventListener('focus', function() {
+					element.parentNode.classList.add('mui-active');
+				});
+				element.addEventListener('blur', function() {
+					if (!element.value.trim()) {
+						element.parentNode.classList.remove('mui-active');
+					}
+				});
+			}
+		}
+	};
+	Input.prototype.setPlaceholder = function(text) {
+		if (this.searchActionClass) {
+			var placeholder = this.element.parentNode.querySelector(SELECTOR_PLACEHOLDER);
+			placeholder && (placeholder.getElementsByTagName('span')[1].innerText = text);
+		} else {
+			this.element.setAttribute('placeholder', text);
+		}
+	};
+	Input.prototype.passwordActionClick = function(event) {
+		if (this.element.type === 'text') {
+			this.element.type = 'password';
+		} else {
+			this.element.type = 'text';
+		}
+		this.passwordAction.classList.toggle('mui-active');
+		event.preventDefault();
+	};
+	Input.prototype.clearActionClick = function(event) {
+		var self = this;
+		self.element.value = '';
+		$.focus(self.element);
+		self.clearAction.classList.add(CLASS_HIDDEN);
+		event.preventDefault();
+	};
+	Input.prototype.speechActionClick = function(event) {
+		if (window.plus) {
+			var self = this;
+			var oldValue = self.element.value;
+			self.element.value = '';
+			document.body.classList.add(CLASS_FOCUSIN);
+			plus.speech.startRecognize({
+				engine: 'iFly'
+			}, function(s) {
+				self.element.value += s;
+				$.focus(self.element);
+				plus.speech.stopRecognize();
+				$.trigger(self.element, 'recognized', {
+					value: self.element.value
+				});
+				if (oldValue !== self.element.value) {
+					$.trigger(self.element, 'change');
+					$.trigger(self.element, 'input');
+				}
+				// document.body.classList.remove(CLASS_FOCUSIN);
+			}, function(e) {
+				document.body.classList.remove(CLASS_FOCUSIN);
+			});
+		} else {
+			alert('only for 5+');
+		}
+		event.preventDefault();
+	};
+	$.fn.input = function(options) {
+		var inputApis = [];
+		this.each(function() {
+			var inputApi = null;
+			var actions = [];
+			var row = findRow(this.parentNode);
+			if (this.type === 'range' && row.classList.contains('mui-input-range')) {
+				actions.push('slider');
+			} else {
+				var classList = this.classList;
+				if (classList.contains('mui-input-clear')) {
+					actions.push('clear');
+				}
+				if (!($.os.android && $.os.stream) && classList.contains('mui-input-speech')) {
+					actions.push('speech');
+				}
+				if (classList.contains('mui-input-password')) {
+					actions.push('password');
+				}
+				if (this.type === 'search' && row.classList.contains('mui-search')) {
+					actions.push('search');
+				}
+			}
+			var id = this.getAttribute('data-input-' + actions[0]);
+			if (!id) {
+				id = ++$.uuid;
+				inputApi = $.data[id] = new Input(this, {
+					actions: actions.join(',')
+				});
+				for (var i = 0, len = actions.length; i < len; i++) {
+					this.setAttribute('data-input-' + actions[i], id);
+				}
+			} else {
+				inputApi = $.data[id];
+			}
+			inputApis.push(inputApi);
+		});
+		return inputApis.length === 1 ? inputApis[0] : inputApis;
+	};
+	$.ready(function() {
+		$('.mui-input-row input').input();
+	});
+})(mui, window, document);
+(function($, window) {
+    var CLASS_ACTIVE = 'mui-active';
+    var rgbaRegex = /^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*(\d*(?:\.\d+)?)\)$/;
+    var getColor = function(colorStr) {
+        var matches = colorStr.match(rgbaRegex);
+        if (matches && matches.length === 5) {
+            return [
+                matches[1],
+                matches[2],
+                matches[3],
+                matches[4]
+            ];
+        }
+        return [];
+    };
+    var Transparent = function(element, options) {
+        this.element = element;
+        this.options = $.extend({
+            top: 0, //距离顶部高度(到达该高度即触发)
+            offset: 150, //滚动透明距离
+            duration: 16, //过渡时间
+            scrollby: window//监听滚动距离容器
+        }, options || {});
+
+        this.scrollByElem = this.options.scrollby || window;
+        if (!this.scrollByElem) {
+            throw new Error("监听滚动的元素不存在");
+        }
+        this.isNativeScroll = false;
+        if (this.scrollByElem === window) {
+            this.isNativeScroll = true;
+        } else if (!~this.scrollByElem.className.indexOf('mui-scroll-wrapper')) {
+            this.isNativeScroll = true;
+        }
+
+        this._style = this.element.style;
+        this._bgColor = this._style.backgroundColor;
+        var color = getColor(mui.getStyles(this.element, 'backgroundColor'));
+        if (color.length) {
+            this._R = color[0];
+            this._G = color[1];
+            this._B = color[2];
+            this._A = parseFloat(color[3]);
+            this.lastOpacity = this._A;
+            this._bufferFn = $.buffer(this.handleScroll, this.options.duration, this);
+            this.initEvent();
+        } else {
+            throw new Error("元素背景颜色必须为RGBA");
+        }
+    };
+
+    Transparent.prototype.initEvent = function() {
+        this.scrollByElem.addEventListener('scroll', this._bufferFn);
+        if (this.isNativeScroll) { //原生scroll
+            this.scrollByElem.addEventListener($.EVENT_MOVE, this._bufferFn);
+        }
+    }
+    Transparent.prototype.handleScroll = function(e) {
+        var y = window.scrollY;
+        if (!this.isNativeScroll && e && e.detail) {
+            y = -e.detail.y;
+        }
+        var opacity = (y - this.options.top) / this.options.offset + this._A;
+        opacity = Math.min(Math.max(this._A, opacity), 1);
+        this._style.backgroundColor = 'rgba(' + this._R + ',' + this._G + ',' + this._B + ',' + opacity + ')';
+        if (opacity > this._A) {
+            this.element.classList.add(CLASS_ACTIVE);
+        } else {
+            this.element.classList.remove(CLASS_ACTIVE);
+        }
+        if (this.lastOpacity !== opacity) {
+            $.trigger(this.element, 'alpha', {
+                alpha: opacity
+            });
+            this.lastOpacity = opacity;
+        }
+    };
+    Transparent.prototype.destory = function() {
+        this.scrollByElem.removeEventListener('scroll', this._bufferFn);
+        this.scrollByElem.removeEventListener($.EVENT_MOVE, this._bufferFn);
+        this.element.style.backgroundColor = this._bgColor;
+        this.element.mui_plugin_transparent = null;
+    };
+    $.fn.transparent = function(options) {
+        options = options || {};
+        var transparentApis = [];
+        this.each(function() {
+            var transparentApi = this.mui_plugin_transparent;
+            if (!transparentApi) {
+                var top = this.getAttribute('data-top');
+                var offset = this.getAttribute('data-offset');
+                var duration = this.getAttribute('data-duration');
+                var scrollby = this.getAttribute('data-scrollby');
+                if (top !== null && typeof options.top === 'undefined') {
+                    options.top = top;
+                }
+                if (offset !== null && typeof options.offset === 'undefined') {
+                    options.offset = offset;
+                }
+                if (duration !== null && typeof options.duration === 'undefined') {
+                    options.duration = duration;
+                }
+                if (scrollby !== null && typeof options.scrollby === 'undefined') {
+                    options.scrollby = document.querySelector(scrollby) || window;
+                }
+                transparentApi = this.mui_plugin_transparent = new Transparent(this, options);
+            }
+            transparentApis.push(transparentApi);
+        });
+        return transparentApis.length === 1 ? transparentApis[0] : transparentApis;
+    };
+    $.ready(function() {
+        $('.mui-bar-transparent').transparent();
+    });
+})(mui, window);
+/**
+ * 数字输入框
+ * varstion 1.0.1
+ * by Houfeng
+ * Houfeng@DCloud.io
+ */
+
+(function($) {
+
+    var touchSupport = ('ontouchstart' in document);
+    var tapEventName = touchSupport ? 'tap' : 'click';
+    var changeEventName = 'change';
+    var holderClassName = 'mui-numbox';
+    var plusClassSelector = '.mui-btn-numbox-plus,.mui-numbox-btn-plus';
+    var minusClassSelector = '.mui-btn-numbox-minus,.mui-numbox-btn-minus';
+    var inputClassSelector = '.mui-input-numbox,.mui-numbox-input';
+
+    var Numbox = $.Numbox = $.Class.extend({
+        /**
+         * 构造函数
+         **/
+        init: function(holder, options) {
+            var self = this;
+            if (!holder) {
+                throw "构造 numbox 时缺少容器元素";
+            }
+            self.holder = holder;
+            options = options || {};
+            options.step = parseInt(options.step || 1);
+            self.options = options;
+            self.input = $.qsa(inputClassSelector, self.holder)[0];
+            self.plus = $.qsa(plusClassSelector, self.holder)[0];
+            self.minus = $.qsa(minusClassSelector, self.holder)[0];
+            self.checkValue();
+            self.initEvent();
+        },
+        /**
+         * 初始化事件绑定
+         **/
+        initEvent: function() {
+            var self = this;
+            self.plus.addEventListener(tapEventName, function(event) {
+                var val = parseInt(self.input.value) + self.options.step;
+                self.input.value = val.toString();
+                $.trigger(self.input, changeEventName, null);
+            });
+            self.minus.addEventListener(tapEventName, function(event) {
+                var val = parseInt(self.input.value) - self.options.step;
+                self.input.value = val.toString();
+                $.trigger(self.input, changeEventName, null);
+            });
+            self.input.addEventListener(changeEventName, function(event) {
+                self.checkValue();
+                var val = parseInt(self.input.value);
+                //触发顶层容器
+                $.trigger(self.holder, changeEventName, {
+                    value: val
+                });
+            });
+        },
+        /**
+         * 获取当前值
+         **/
+        getValue: function() {
+            var self = this;
+            return parseInt(self.input.value);
+        },
+        /**
+         * 验证当前值是法合法
+         **/
+        checkValue: function() {
+            var self = this;
+            var val = self.input.value;
+            if (val == null || val == '' || isNaN(val)) {
+                self.input.value = self.options.min || 0;
+                self.minus.disabled = self.options.min != null;
+            } else {
+                var val = parseInt(val);
+                if (self.options.max != null && !isNaN(self.options.max) && val >= parseInt(self.options.max)) {
+                    val = self.options.max;
+                    self.plus.disabled = true;
+                } else {
+                    self.plus.disabled = false;
+                }
+                if (self.options.min != null && !isNaN(self.options.min) && val <= parseInt(self.options.min)) {
+                    val = self.options.min;
+                    self.minus.disabled = true;
+                } else {
+                    self.minus.disabled = false;
+                }
+                self.input.value = val;
+            }
+        },
+        /**
+         * 更新选项
+         **/
+        setOption: function(name, value) {
+            var self = this;
+            self.options[name] = value;
+        },
+        /**
+         * 动态设置新值
+         **/
+        setValue: function(value) {
+            this.input.value = value;
+            this.checkValue();
+        }
+    });
+
+    $.fn.numbox = function(options) {
+        var instanceArray = [];
+        //遍历选择的元素
+        this.each(function(i, element) {
+            if (element.numbox) {
+                return;
+            }
+            if (options) {
+                element.numbox = new Numbox(element, options);
+            } else {
+                var optionsText = element.getAttribute('data-numbox-options');
+                var options = optionsText ? JSON.parse(optionsText) : {};
+                options.step = element.getAttribute('data-numbox-step') || options.step;
+                options.min = element.getAttribute('data-numbox-min') || options.min;
+                options.max = element.getAttribute('data-numbox-max') || options.max;
+                element.numbox = new Numbox(element, options);
+            }
+        });
+        return this[0] ? this[0].numbox : null;
+    }
+
+    //自动处理 class='mui-locker' 的 dom
+    $.ready(function() {
+        $('.' + holderClassName).numbox();
+    });
+
+}(mui));
+/**
+ * Button
+ * @param {type} $
+ * @param {type} window
+ * @param {type} document
+ * @returns {undefined}
+ */
+(function($, window, document) {
+    var CLASS_ICON = 'mui-icon';
+    var CLASS_DISABLED = 'mui-disabled';
+
+    var STATE_RESET = 'reset';
+    var STATE_LOADING = 'loading';
+
+    var defaultOptions = {
+        loadingText: 'Loading...', //文案
+        loadingIcon: 'mui-spinner' + ' ' + 'mui-spinner-white', //图标,可为空
+        loadingIconPosition: 'left' //图标所处位置,仅支持left|right
+    };
+
+    var Button = function(element, options) {
+        this.element = element;
+        this.options = $.extend({}, defaultOptions, options);
+        if (!this.options.loadingText) {
+            this.options.loadingText = defaultOptions.loadingText;
+        }
+        if (this.options.loadingIcon === null) {
+            this.options.loadingIcon = 'mui-spinner';
+            if ($.getStyles(this.element, 'color') === 'rgb(255, 255, 255)') {
+                this.options.loadingIcon += ' ' + 'mui-spinner-white';
+            }
+        }
+        this.isInput = this.element.tagName === 'INPUT';
+        this.resetHTML = this.isInput ? this.element.value : this.element.innerHTML;
+        this.state = '';
+    };
+    Button.prototype.loading = function() {
+        this.setState(STATE_LOADING);
+    };
+    Button.prototype.reset = function() {
+        this.setState(STATE_RESET);
+    };
+    Button.prototype.setState = function(state) {
+        if (this.state === state) {
+            return false;
+        }
+        this.state = state;
+        if (state === STATE_RESET) {
+            this.element.disabled = false;
+            this.element.classList.remove(CLASS_DISABLED);
+            this.setHtml(this.resetHTML);
+        } else if (state === STATE_LOADING) {
+            this.element.disabled = true;
+            this.element.classList.add(CLASS_DISABLED);
+            var html = this.isInput ? this.options.loadingText : ('<span>' + this.options.loadingText + '</span>');
+            if (this.options.loadingIcon && !this.isInput) {
+                if (this.options.loadingIconPosition === 'right') {
+                    html += '&nbsp;<span class="' + this.options.loadingIcon + '"></span>';
+                } else {
+                    html = '<span class="' + this.options.loadingIcon + '"></span>&nbsp;' + html;
+                }
+            }
+            this.setHtml(html);
+        }
+    };
+    Button.prototype.setHtml = function(html) {
+        if (this.isInput) {
+            this.element.value = html;
+        } else {
+            this.element.innerHTML = html;
+        }
+    }
+    $.fn.button = function(state) {
+        var buttonApis = [];
+        this.each(function() {
+            var buttonApi = this.mui_plugin_button;
+            if (!buttonApi) {
+                var loadingText = this.getAttribute('data-loading-text');
+                var loadingIcon = this.getAttribute('data-loading-icon');
+                var loadingIconPosition = this.getAttribute('data-loading-icon-position');
+                this.mui_plugin_button = buttonApi = new Button(this, {
+                    loadingText: loadingText,
+                    loadingIcon: loadingIcon,
+                    loadingIconPosition: loadingIconPosition
+                });
+            }
+            if (state === STATE_LOADING || state === STATE_RESET) {
+                buttonApi.setState(state);
+            }
+            buttonApis.push(buttonApi);
+        });
+        return buttonApis.length === 1 ? buttonApis[0] : buttonApis;
+    };
+})(mui, window, document);

Diff do ficheiro suprimidas por serem muito extensas
+ 5 - 0
src/assets/js/mui.min.js


Diff do ficheiro suprimidas por serem muito extensas
+ 6 - 0
src/assets/js/mui.picker.min.js


+ 382 - 0
src/assets/js/mui.previewimage.js

@@ -0,0 +1,382 @@
+(function($, window) {
+
+	var template = '<div id="{{id}}" class="mui-slider mui-preview-image mui-fullscreen"><div class="mui-preview-header">{{header}}</div><div class="mui-slider-group"></div><div class="mui-preview-footer mui-hidden">{{footer}}</div><div class="mui-preview-loading"><span class="mui-spinner mui-spinner-white"></span></div></div>';
+	var itemTemplate = '<div class="mui-slider-item mui-zoom-wrapper {{className}}"><div class="mui-zoom-scroller"><img src="{{src}}" data-preview-lazyload="{{lazyload}}" style="{{style}}" class="mui-zoom"></div></div>';
+	var defaultGroupName = '__DEFAULT';
+	var div = document.createElement('div');
+	var imgId = 0;
+	var PreviewImage = function(options) {
+		this.options = $.extend(true, {
+			id: '__MUI_PREVIEWIMAGE',
+			zoom: true,
+			header: '<span class="mui-preview-indicator"></span>',
+			footer: ''
+		}, options || {});
+		this.init();
+		this.initEvent();
+	};
+	var proto = PreviewImage.prototype;
+	proto.init = function() {
+		var options = this.options;
+		var el = document.getElementById(this.options.id);
+		if (!el) {
+			div.innerHTML = template.replace(/\{\{id\}\}/g, this.options.id).replace('{{header}}', options.header).replace('{{footer}}', options.footer);
+			document.body.appendChild(div.firstElementChild);
+			el = document.getElementById(this.options.id);
+		}
+
+		this.element = el;
+		this.scroller = this.element.querySelector($.classSelector('.slider-group'));
+		this.indicator = this.element.querySelector($.classSelector('.preview-indicator'));
+		this.loader = this.element.querySelector($.classSelector('.preview-loading'));
+		if (options.footer) {
+			this.element.querySelector($.classSelector('.preview-footer')).classList.remove($.className('hidden'));
+		}
+		this.addImages();
+	};
+	proto.initEvent = function() {
+		var self = this;
+		$(document.body).on('tap', 'img[data-preview-src]', function() {
+			self.open(this);
+			return false;
+		});
+		var laterClose = null;
+		var laterCloseEvent = function() {
+			!laterClose && (laterClose = $.later(function() {
+				self.loader.removeEventListener('tap', laterCloseEvent);
+				self.scroller.removeEventListener('tap', laterCloseEvent);
+				self.close();
+			}, 300));
+		};
+		this.scroller.addEventListener('doubletap', function() {
+			if (laterClose) {
+				laterClose.cancel();
+				laterClose = null;
+			}
+		});
+		this.element.addEventListener('webkitAnimationEnd', function() {
+			if (self.element.classList.contains($.className('preview-out'))) { //close
+				self.element.style.display = 'none';
+				self.element.classList.remove($.className('preview-out'));
+				self.element.classList.remove($.className('preview-in'));
+				laterClose = null;
+			} else { //open
+				self.loader.addEventListener('tap', laterCloseEvent);
+				self.scroller.addEventListener('tap', laterCloseEvent);
+			}
+		});
+		this.element.addEventListener('slide', function(e) {
+			if (self.options.zoom) {
+				var lastZoomerEl = self.element.querySelector('.mui-zoom-wrapper:nth-child(' + (self.lastIndex + 1) + ')');
+				if (lastZoomerEl) {
+					$(lastZoomerEl).zoom().setZoom(1);
+				}
+			}
+			var slideNumber = e.detail.slideNumber;
+			self.lastIndex = slideNumber;
+			self.indicator && (self.indicator.innerText = (slideNumber + 1) + '/' + self.currentGroup.length);
+			self._loadItem(slideNumber);
+
+		});
+	};
+	proto.addImages = function(group, index) {
+		this.groups = {};
+		var imgs = [];
+		if (group) {
+			if (group === defaultGroupName) {
+				imgs = document.querySelectorAll("img[data-preview-src]:not([data-preview-group])");
+			} else {
+				imgs = document.querySelectorAll("img[data-preview-src][data-preview-group='" + group + "']");
+			}
+		} else {
+			imgs = document.querySelectorAll("img[data-preview-src]");
+		}
+		if (imgs.length) {
+			for (var i = 0, len = imgs.length; i < len; i++) {
+				this.addImage(imgs[i]);
+			}
+		}
+	};
+	proto.addImage = function(img) {
+		var group = img.getAttribute('data-preview-group');
+		group = group || defaultGroupName;
+		if (!this.groups[group]) {
+			this.groups[group] = [];
+		}
+		var src = img.getAttribute('src');
+		if (img.__mui_img_data && img.__mui_img_data.src === src) { //已缓存且图片未变化
+			this.groups[group].push(img.__mui_img_data);
+		} else {
+			var lazyload = img.getAttribute('data-preview-src');
+			if (!lazyload) {
+				lazyload = src;
+			}
+			var imgObj = {
+				src: src,
+				lazyload: src === lazyload ? '' : lazyload,
+				loaded: src === lazyload ? true : false,
+				sWidth: 0,
+				sHeight: 0,
+				sTop: 0,
+				sLeft: 0,
+				sScale: 1,
+				el: img
+			};
+			this.groups[group].push(imgObj);
+			img.__mui_img_data = imgObj;
+		}
+	};
+
+
+	proto.empty = function() {
+		this.scroller.innerHTML = '';
+	};
+	proto._initImgData = function(itemData, imgEl) {
+		if (!itemData.sWidth) {
+			var img = itemData.el;
+			itemData.sWidth = img.offsetWidth;
+			itemData.sHeight = img.offsetHeight;
+			var offset = $.offset(img);
+			itemData.sTop = offset.top;
+			itemData.sLeft = offset.left;
+			itemData.sScale = Math.max(itemData.sWidth / window.innerWidth, itemData.sHeight / window.innerHeight);
+		}
+		imgEl.style.webkitTransform = 'translate3d(0,0,0) scale(' + itemData.sScale + ')';
+	};
+
+	proto._getScale = function(from, to) {
+		var scaleX = from.width / to.width;
+		var scaleY = from.height / to.height;
+		var scale = 1;
+		if (scaleX <= scaleY) {
+			scale = from.height / (to.height * scaleX);
+		} else {
+			scale = from.width / (to.width * scaleY);
+		}
+		return scale;
+	};
+	proto._imgTransitionEnd = function(e) {
+		var img = e.target;
+		img.classList.remove($.className('transitioning'));
+		img.removeEventListener('webkitTransitionEnd', this._imgTransitionEnd.bind(this));
+	};
+	proto._loadItem = function(index, isOpening) { //TODO 暂时仅支持img
+		var itemEl = this.scroller.querySelector($.classSelector('.slider-item:nth-child(' + (index + 1) + ')'));
+		var itemData = this.currentGroup[index];
+		var imgEl = itemEl.querySelector('img');
+		this._initImgData(itemData, imgEl);
+		if (isOpening) {
+			var posi = this._getPosition(itemData);
+			imgEl.style.webkitTransitionDuration = '0ms';
+			imgEl.style.webkitTransform = 'translate3d(' + posi.x + 'px,' + posi.y + 'px,0) scale(' + itemData.sScale + ')';
+			imgEl.offsetHeight;
+		}
+		if (!itemData.loaded && imgEl.getAttribute('data-preview-lazyload')) {
+			var self = this;
+			self.loader.classList.add($.className('active'));
+			//移动位置动画
+			imgEl.style.webkitTransitionDuration = '0.5s';
+			imgEl.addEventListener('webkitTransitionEnd', self._imgTransitionEnd.bind(self));
+			imgEl.style.webkitTransform = 'translate3d(0,0,0) scale(' + itemData.sScale + ')';
+			this.loadImage(imgEl, function() {
+				itemData.loaded = true;
+				imgEl.src = itemData.lazyload;
+				self._initZoom(itemEl, this.width, this.height);
+				imgEl.classList.add($.className('transitioning'));
+				imgEl.addEventListener('webkitTransitionEnd', self._imgTransitionEnd.bind(self));
+				imgEl.setAttribute('style', '');
+				imgEl.offsetHeight;
+				self.loader.classList.remove($.className('active'));
+			});
+		} else {
+			itemData.lazyload && (imgEl.src = itemData.lazyload);
+			this._initZoom(itemEl, imgEl.width, imgEl.height);
+			imgEl.classList.add($.className('transitioning'));
+			imgEl.addEventListener('webkitTransitionEnd', this._imgTransitionEnd.bind(this));
+			imgEl.setAttribute('style', '');
+			imgEl.offsetHeight;
+		}
+		this._preloadItem(index + 1);
+		this._preloadItem(index - 1);
+	};
+	proto._preloadItem = function(index) {
+		var itemEl = this.scroller.querySelector($.classSelector('.slider-item:nth-child(' + (index + 1) + ')'));
+		if (itemEl) {
+			var itemData = this.currentGroup[index];
+			if (!itemData.sWidth) {
+				var imgEl = itemEl.querySelector('img');
+				this._initImgData(itemData, imgEl);
+			}
+		}
+	};
+	proto._initZoom = function(zoomWrapperEl, zoomerWidth, zoomerHeight) {
+		if (!this.options.zoom) {
+			return;
+		}
+		if (zoomWrapperEl.getAttribute('data-zoomer')) {
+			return;
+		}
+		var zoomEl = zoomWrapperEl.querySelector($.classSelector('.zoom'));
+		if (zoomEl.tagName === 'IMG') {
+			var self = this;
+			var maxZoom = self._getScale({
+				width: zoomWrapperEl.offsetWidth,
+				height: zoomWrapperEl.offsetHeight
+			}, {
+				width: zoomerWidth,
+				height: zoomerHeight
+			});
+			$(zoomWrapperEl).zoom({
+				maxZoom: Math.max(maxZoom, 1)
+			});
+		} else {
+			$(zoomWrapperEl).zoom();
+		}
+	};
+	proto.loadImage = function(imgEl, callback) {
+		var onReady = function() {
+			callback && callback.call(this);
+		};
+		var img = new Image();
+		img.onload = onReady;
+		img.onerror = onReady;
+		img.src = imgEl.getAttribute('data-preview-lazyload');
+	};
+	proto.getRangeByIndex = function(index, length) {
+		return {
+			from: 0,
+			to: length - 1
+		};
+		//		var from = Math.max(index - 1, 0);
+		//		var to = Math.min(index + 1, length);
+		//		if (index === length - 1) {
+		//			from = Math.max(length - 3, 0);
+		//			to = length - 1;
+		//		}
+		//		if (index === 0) {
+		//			from = 0;
+		//			to = Math.min(2, length - 1);
+		//		}
+		//		return {
+		//			from: from,
+		//			to: to
+		//		};
+	};
+
+	proto._getPosition = function(itemData) {
+		var sLeft = itemData.sLeft - window.pageXOffset;
+		var sTop = itemData.sTop - window.pageYOffset;
+		var left = (window.innerWidth - itemData.sWidth) / 2;
+		var top = (window.innerHeight - itemData.sHeight) / 2;
+		return {
+			left: sLeft,
+			top: sTop,
+			x: sLeft - left,
+			y: sTop - top
+		};
+	};
+	proto.refresh = function(index, groupArray) {
+		this.currentGroup = groupArray;
+		//重新生成slider
+		var length = groupArray.length;
+		var itemHtml = [];
+		var currentRange = this.getRangeByIndex(index, length);
+		var from = currentRange.from;
+		var to = currentRange.to + 1;
+		var currentIndex = index;
+		var className = '';
+		var itemStr = '';
+		var wWidth = window.innerWidth;
+		var wHeight = window.innerHeight;
+		for (var i = 0; from < to; from++, i++) {
+			var itemData = groupArray[from];
+			var style = '';
+			if (itemData.sWidth) {
+				style = '-webkit-transform:translate3d(0,0,0) scale(' + itemData.sScale + ');transform:translate3d(0,0,0) scale(' + itemData.sScale + ')';
+			}
+			itemStr = itemTemplate.replace('{{src}}', itemData.src).replace('{{lazyload}}', itemData.lazyload).replace('{{style}}', style);
+			if (from === index) {
+				currentIndex = i;
+				className = $.className('active');
+			} else {
+				className = '';
+			}
+			itemHtml.push(itemStr.replace('{{className}}', className));
+		}
+		this.scroller.innerHTML = itemHtml.join('');
+		this.element.style.display = 'block';
+		this.element.classList.add($.className('preview-in'));
+		this.lastIndex = currentIndex;
+		this.element.offsetHeight;
+		$(this.element).slider().gotoItem(currentIndex, 0);
+		this.indicator && (this.indicator.innerText = (currentIndex + 1) + '/' + this.currentGroup.length);
+		this._loadItem(currentIndex, true);
+	};
+	proto.openByGroup = function(index, group) {
+		index = Math.min(Math.max(0, index), this.groups[group].length - 1);
+		this.refresh(index, this.groups[group]);
+	};
+	proto.open = function(index, group) {
+		if (this.isShown()) {
+			return;
+		}
+		if (typeof index === "number") {
+			group = group || defaultGroupName;
+			this.addImages(group, index); //刷新当前group
+			this.openByGroup(index, group);
+		} else {
+			group = index.getAttribute('data-preview-group');
+			group = group || defaultGroupName;
+			this.addImages(group, index); //刷新当前group
+			this.openByGroup(this.groups[group].indexOf(index.__mui_img_data), group);
+		}
+	};
+	proto.close = function(index, group) {
+		if (!this.isShown()) {
+			return;
+		}
+		this.element.classList.remove($.className('preview-in'));
+		this.element.classList.add($.className('preview-out'));
+		var itemEl = this.scroller.querySelector($.classSelector('.slider-item:nth-child(' + (this.lastIndex + 1) + ')'));
+		var imgEl = itemEl.querySelector('img');
+		if (imgEl) {
+			imgEl.classList.add($.className('transitioning'));
+			var itemData = this.currentGroup[this.lastIndex];
+			var posi = this._getPosition(itemData);
+			var sLeft = posi.left;
+			var sTop = posi.top;
+			if (sTop > window.innerHeight || sLeft > window.innerWidth || sTop < 0 || sLeft < 0) { //out viewport
+				imgEl.style.opacity = 0;
+				imgEl.style.webkitTransitionDuration = '0.5s';
+				imgEl.style.webkitTransform = 'scale(' + itemData.sScale + ')';
+			} else {
+				if (this.options.zoom) {
+					$(imgEl.parentNode.parentNode).zoom().toggleZoom(0);
+				}
+				imgEl.style.webkitTransitionDuration = '0.5s';
+				imgEl.style.webkitTransform = 'translate3d(' + posi.x + 'px,' + posi.y + 'px,0) scale(' + itemData.sScale + ')';
+			}
+		}
+		var zoomers = this.element.querySelectorAll($.classSelector('.zoom-wrapper'));
+		for (var i = 0, len = zoomers.length; i < len; i++) {
+			$(zoomers[i]).zoom().destroy();
+		}
+		$(this.element).slider().destroy();
+//		this.empty();
+	};
+	proto.isShown = function() {
+		return this.element.classList.contains($.className('preview-in'));
+	};
+
+	var previewImageApi = null;
+	$.previewImage = function(options) {
+		if (!previewImageApi) {
+			previewImageApi = new PreviewImage(options);
+		}
+		return previewImageApi;
+	};
+	$.getPreviewImage = function() {
+		return previewImageApi;
+	}
+
+})(mui, window);

+ 322 - 0
src/assets/js/mui.zoom.js

@@ -0,0 +1,322 @@
+(function($, window) {
+	var CLASS_ZOOM = $.className('zoom');
+	var CLASS_ZOOM_SCROLLER = $.className('zoom-scroller');
+
+	var SELECTOR_ZOOM = '.' + CLASS_ZOOM;
+	var SELECTOR_ZOOM_SCROLLER = '.' + CLASS_ZOOM_SCROLLER;
+
+	var EVENT_PINCH_START = 'pinchstart';
+	var EVENT_PINCH = 'pinch';
+	var EVENT_PINCH_END = 'pinchend';
+	if ('ongesturestart' in window) {
+		EVENT_PINCH_START = 'gesturestart';
+		EVENT_PINCH = 'gesturechange';
+		EVENT_PINCH_END = 'gestureend';
+	}
+	$.Zoom = function(element, options) {
+		var zoom = this;
+
+		zoom.options = $.extend($.Zoom.defaults, options);
+
+		zoom.wrapper = zoom.element = element;
+		zoom.scroller = element.querySelector(SELECTOR_ZOOM_SCROLLER);
+		zoom.scrollerStyle = zoom.scroller && zoom.scroller.style;
+
+		zoom.zoomer = element.querySelector(SELECTOR_ZOOM);
+		zoom.zoomerStyle = zoom.zoomer && zoom.zoomer.style;
+
+		zoom.init = function() {
+			//自动启用
+			$.options.gestureConfig.pinch = true;
+			$.options.gestureConfig.doubletap = true;
+			zoom.initEvents();
+		};
+
+		zoom.initEvents = function(detach) {
+			var action = detach ? 'removeEventListener' : 'addEventListener';
+			var target = zoom.scroller;
+
+			target[action](EVENT_PINCH_START, zoom.onPinchstart);
+			target[action](EVENT_PINCH, zoom.onPinch);
+			target[action](EVENT_PINCH_END, zoom.onPinchend);
+
+			target[action]($.EVENT_START, zoom.onTouchstart);
+			target[action]($.EVENT_MOVE, zoom.onTouchMove);
+			target[action]($.EVENT_CANCEL, zoom.onTouchEnd);
+			target[action]($.EVENT_END, zoom.onTouchEnd);
+
+			target[action]('drag', zoom.dragEvent);
+			target[action]('doubletap', zoom.doubleTapEvent);
+		};
+		zoom.dragEvent = function(e) {
+			if (imageIsMoved || isGesturing) {
+				e.stopPropagation();
+			}
+		};
+		zoom.doubleTapEvent = function(e) {
+			zoom.toggleZoom(e.detail.center);
+		};
+		zoom.transition = function(style, time) {
+			time = time || 0;
+			style['webkitTransitionDuration'] = time + 'ms';
+			return zoom;
+		};
+		zoom.translate = function(style, x, y) {
+			x = x || 0;
+			y = y || 0;
+			style['webkitTransform'] = 'translate3d(' + x + 'px,' + y + 'px,0px)';
+			return zoom;
+		};
+		zoom.scale = function(style, scale) {
+			scale = scale || 1;
+			style['webkitTransform'] = 'translate3d(0,0,0) scale(' + scale + ')';
+			return zoom;
+		};
+		zoom.scrollerTransition = function(time) {
+			return zoom.transition(zoom.scrollerStyle, time);
+		};
+		zoom.scrollerTransform = function(x, y) {
+			return zoom.translate(zoom.scrollerStyle, x, y);
+		};
+		zoom.zoomerTransition = function(time) {
+			return zoom.transition(zoom.zoomerStyle, time);
+		};
+		zoom.zoomerTransform = function(scale) {
+			return zoom.scale(zoom.zoomerStyle, scale);
+		};
+
+		// Gestures
+		var scale = 1,
+			currentScale = 1,
+			isScaling = false,
+			isGesturing = false;
+		zoom.onPinchstart = function(e) {
+			isGesturing = true;
+		};
+		zoom.onPinch = function(e) {
+			if (!isScaling) {
+				zoom.zoomerTransition(0);
+				isScaling = true;
+			}
+			scale = (e.detail ? e.detail.scale : e.scale) * currentScale;
+			if (scale > zoom.options.maxZoom) {
+				scale = zoom.options.maxZoom - 1 + Math.pow((scale - zoom.options.maxZoom + 1), 0.5);
+			}
+			if (scale < zoom.options.minZoom) {
+				scale = zoom.options.minZoom + 1 - Math.pow((zoom.options.minZoom - scale + 1), 0.5);
+			}
+			zoom.zoomerTransform(scale);
+		};
+		zoom.onPinchend = function(e) {
+			scale = Math.max(Math.min(scale, zoom.options.maxZoom), zoom.options.minZoom);
+			zoom.zoomerTransition(zoom.options.speed).zoomerTransform(scale);
+			currentScale = scale;
+			isScaling = false;
+		};
+		zoom.setZoom = function(newScale) {
+			scale = currentScale = newScale;
+			zoom.scrollerTransition(zoom.options.speed).scrollerTransform(0, 0);
+			zoom.zoomerTransition(zoom.options.speed).zoomerTransform(scale);
+		};
+		zoom.toggleZoom = function(position, speed) {
+			if (typeof position === 'number') {
+				speed = position;
+				position = undefined;
+			}
+			speed = typeof speed === 'undefined' ? zoom.options.speed : speed;
+			if (scale && scale !== 1) {
+				scale = currentScale = 1;
+				zoom.scrollerTransition(speed).scrollerTransform(0, 0);
+			} else {
+				scale = currentScale = zoom.options.maxZoom;
+				if (position) {
+					var offset = $.offset(zoom.zoomer);
+					var top = offset.top;
+					var left = offset.left;
+					var offsetX = (position.x - left) * scale;
+					var offsetY = (position.y - top) * scale;
+					this._cal();
+					if (offsetX >= imageMaxX && offsetX <= (imageMaxX + wrapperWidth)) { //center
+						offsetX = imageMaxX - offsetX + wrapperWidth / 2;
+					} else if (offsetX < imageMaxX) { //left
+						offsetX = imageMaxX - offsetX + wrapperWidth / 2;
+					} else if (offsetX > (imageMaxX + wrapperWidth)) { //right
+						offsetX = imageMaxX + wrapperWidth - offsetX - wrapperWidth / 2;
+					}
+					if (offsetY >= imageMaxY && offsetY <= (imageMaxY + wrapperHeight)) { //middle
+						offsetY = imageMaxY - offsetY + wrapperHeight / 2;
+					} else if (offsetY < imageMaxY) { //top
+						offsetY = imageMaxY - offsetY + wrapperHeight / 2;
+					} else if (offsetY > (imageMaxY + wrapperHeight)) { //bottom
+						offsetY = imageMaxY + wrapperHeight - offsetY - wrapperHeight / 2;
+					}
+					offsetX = Math.min(Math.max(offsetX, imageMinX), imageMaxX);
+					offsetY = Math.min(Math.max(offsetY, imageMinY), imageMaxY);
+					zoom.scrollerTransition(speed).scrollerTransform(offsetX, offsetY);
+				} else {
+					zoom.scrollerTransition(speed).scrollerTransform(0, 0);
+				}
+			}
+			zoom.zoomerTransition(speed).zoomerTransform(scale);
+		};
+
+		zoom._cal = function() {
+			wrapperWidth = zoom.wrapper.offsetWidth;
+			wrapperHeight = zoom.wrapper.offsetHeight;
+			imageWidth = zoom.zoomer.offsetWidth;
+			imageHeight = zoom.zoomer.offsetHeight;
+			var scaledWidth = imageWidth * scale;
+			var scaledHeight = imageHeight * scale;
+			imageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0);
+			imageMaxX = -imageMinX;
+			imageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0);
+			imageMaxY = -imageMinY;
+		};
+
+		var wrapperWidth, wrapperHeight, imageIsTouched, imageIsMoved, imageCurrentX, imageCurrentY, imageMinX, imageMinY, imageMaxX, imageMaxY, imageWidth, imageHeight, imageTouchesStart = {},
+			imageTouchesCurrent = {},
+			imageStartX, imageStartY, velocityPrevPositionX, velocityPrevTime, velocityX, velocityPrevPositionY, velocityY;
+
+		zoom.onTouchstart = function(e) {
+			e.preventDefault();
+			imageIsTouched = true;
+			imageTouchesStart.x = e.type === $.EVENT_START ? e.targetTouches[0].pageX : e.pageX;
+			imageTouchesStart.y = e.type === $.EVENT_START ? e.targetTouches[0].pageY : e.pageY;
+		};
+		zoom.onTouchMove = function(e) {
+			e.preventDefault();
+			if (!imageIsTouched) return;
+			if (!imageIsMoved) {
+				wrapperWidth = zoom.wrapper.offsetWidth;
+				wrapperHeight = zoom.wrapper.offsetHeight;
+				imageWidth = zoom.zoomer.offsetWidth;
+				imageHeight = zoom.zoomer.offsetHeight;
+				var translate = $.parseTranslateMatrix($.getStyles(zoom.scroller, 'webkitTransform'));
+				imageStartX = translate.x || 0;
+				imageStartY = translate.y || 0;
+				zoom.scrollerTransition(0);
+			}
+			var scaledWidth = imageWidth * scale;
+			var scaledHeight = imageHeight * scale;
+
+			if (scaledWidth < wrapperWidth && scaledHeight < wrapperHeight) return;
+
+			imageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0);
+			imageMaxX = -imageMinX;
+			imageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0);
+			imageMaxY = -imageMinY;
+
+			imageTouchesCurrent.x = e.type === $.EVENT_MOVE ? e.targetTouches[0].pageX : e.pageX;
+			imageTouchesCurrent.y = e.type === $.EVENT_MOVE ? e.targetTouches[0].pageY : e.pageY;
+
+			if (!imageIsMoved && !isScaling) {
+				//				if (Math.abs(imageTouchesCurrent.y - imageTouchesStart.y) < Math.abs(imageTouchesCurrent.x - imageTouchesStart.x)) {
+				//TODO 此处需要优化,当遇到长图,需要上下滚动时,下列判断会导致滚动不流畅
+				if (
+					(Math.floor(imageMinX) === Math.floor(imageStartX) && imageTouchesCurrent.x < imageTouchesStart.x) ||
+					(Math.floor(imageMaxX) === Math.floor(imageStartX) && imageTouchesCurrent.x > imageTouchesStart.x)
+				) {
+					imageIsTouched = false;
+					return;
+				}
+				//				}
+			}
+			imageIsMoved = true;
+			imageCurrentX = imageTouchesCurrent.x - imageTouchesStart.x + imageStartX;
+			imageCurrentY = imageTouchesCurrent.y - imageTouchesStart.y + imageStartY;
+
+			if (imageCurrentX < imageMinX) {
+				imageCurrentX = imageMinX + 1 - Math.pow((imageMinX - imageCurrentX + 1), 0.8);
+			}
+			if (imageCurrentX > imageMaxX) {
+				imageCurrentX = imageMaxX - 1 + Math.pow((imageCurrentX - imageMaxX + 1), 0.8);
+			}
+
+			if (imageCurrentY < imageMinY) {
+				imageCurrentY = imageMinY + 1 - Math.pow((imageMinY - imageCurrentY + 1), 0.8);
+			}
+			if (imageCurrentY > imageMaxY) {
+				imageCurrentY = imageMaxY - 1 + Math.pow((imageCurrentY - imageMaxY + 1), 0.8);
+			}
+
+			//Velocity
+			if (!velocityPrevPositionX) velocityPrevPositionX = imageTouchesCurrent.x;
+			if (!velocityPrevPositionY) velocityPrevPositionY = imageTouchesCurrent.y;
+			if (!velocityPrevTime) velocityPrevTime = $.now();
+			velocityX = (imageTouchesCurrent.x - velocityPrevPositionX) / ($.now() - velocityPrevTime) / 2;
+			velocityY = (imageTouchesCurrent.y - velocityPrevPositionY) / ($.now() - velocityPrevTime) / 2;
+			if (Math.abs(imageTouchesCurrent.x - velocityPrevPositionX) < 2) velocityX = 0;
+			if (Math.abs(imageTouchesCurrent.y - velocityPrevPositionY) < 2) velocityY = 0;
+			velocityPrevPositionX = imageTouchesCurrent.x;
+			velocityPrevPositionY = imageTouchesCurrent.y;
+			velocityPrevTime = $.now();
+
+			zoom.scrollerTransform(imageCurrentX, imageCurrentY);
+		};
+		zoom.onTouchEnd = function(e) {
+			if (!e.touches.length) {
+				isGesturing = false;
+			}
+			if (!imageIsTouched || !imageIsMoved) {
+				imageIsTouched = false;
+				imageIsMoved = false;
+				return;
+			}
+			imageIsTouched = false;
+			imageIsMoved = false;
+			var momentumDurationX = 300;
+			var momentumDurationY = 300;
+			var momentumDistanceX = velocityX * momentumDurationX;
+			var newPositionX = imageCurrentX + momentumDistanceX;
+			var momentumDistanceY = velocityY * momentumDurationY;
+			var newPositionY = imageCurrentY + momentumDistanceY;
+
+			if (velocityX !== 0) momentumDurationX = Math.abs((newPositionX - imageCurrentX) / velocityX);
+			if (velocityY !== 0) momentumDurationY = Math.abs((newPositionY - imageCurrentY) / velocityY);
+			var momentumDuration = Math.max(momentumDurationX, momentumDurationY);
+
+			imageCurrentX = newPositionX;
+			imageCurrentY = newPositionY;
+
+			var scaledWidth = imageWidth * scale;
+			var scaledHeight = imageHeight * scale;
+			imageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0);
+			imageMaxX = -imageMinX;
+			imageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0);
+			imageMaxY = -imageMinY;
+			imageCurrentX = Math.max(Math.min(imageCurrentX, imageMaxX), imageMinX);
+			imageCurrentY = Math.max(Math.min(imageCurrentY, imageMaxY), imageMinY);
+
+			zoom.scrollerTransition(momentumDuration).scrollerTransform(imageCurrentX, imageCurrentY);
+		};
+		zoom.destroy = function() {
+			zoom.initEvents(true); //detach
+			delete $.data[zoom.wrapper.getAttribute('data-zoomer')];
+			zoom.wrapper.setAttribute('data-zoomer', '');
+		}
+		zoom.init();
+		return zoom;
+	};
+	$.Zoom.defaults = {
+		speed: 300,
+		maxZoom: 3,
+		minZoom: 1,
+	};
+	$.fn.zoom = function(options) {
+		var zoomApis = [];
+		this.each(function() {
+			var zoomApi = null;
+			var self = this;
+			var id = self.getAttribute('data-zoomer');
+			if (!id) {
+				id = ++$.uuid;
+				$.data[id] = zoomApi = new $.Zoom(self, options);
+				self.setAttribute('data-zoomer', id);
+			} else {
+				zoomApi = $.data[id];
+			}
+			zoomApis.push(zoomApi);
+		});
+		return zoomApis.length === 1 ? zoomApis[0] : zoomApis;
+	};
+})(mui, window);

+ 96 - 0
src/components/Banner.vue

@@ -0,0 +1,96 @@
+<template>
+  
+        <div id="slider" class="mui-slider" v-if="topList.length!=0">
+            <div class="mui-slider-group mui-slider-loop">
+                <!--支持循环,需要重复图片节点-->
+                <div class="mui-slider-item mui-slider-item-duplicate" v-if="topList.length">
+                    <a @click="goto(topList[topList.length-1])" >
+                        <img  height="180px" :src="topList[topList.length-1].picUrl">
+						<p class="mui-slider-title">{{topList[topList.length-1].title}}</p>
+                    </a>
+                </div>
+
+                <div class="mui-slider-item" v-for="mod,index in topList">
+                    <a @click="goto(mod)">
+                        <img height="180px" :src="mod.picUrl">
+						<p class="mui-slider-title">{{mod.title}}</p>
+						
+                    </a>
+                </div>
+
+                <!--支持循环,需要重复图片节点-->
+                <div class="mui-slider-item mui-slider-item-duplicate" v-if="topList.length">
+                    <a  @click="goto(topList[0])" >
+                        <img  height="180px" :src="topList[0].picUrl">
+						<p class="mui-slider-title">{{topList[0].title}}</p>
+						
+                    </a>
+                </div>
+
+
+            </div>
+            <div class="mui-slider-indicator  mui-text-right ">
+                <div class="mui-indicator " v-for="mod,index in topList" :class="index==0?'mui-active':''"></div>
+            </div>
+        </div>
+   
+</template>
+
+<script>
+
+    export default {
+        name: 'banner',
+        props: {
+            bannerRoute: {
+                require: false,
+                default: '',
+            },
+        },
+        data(){
+          return {
+              topList:[]
+          }
+        },
+        methods: {
+            goto(mod){
+                if(mod.linkUrl.indexOf('http')==0){
+                    window.location=mod.linkUrl;
+                }
+                else if(mod.linkUrl.indexOf('#/')==0){
+					
+					if(mod.linkUrl.indexOf("?")==-1){
+						mod.linkUrl+='?';
+					}
+                    window.location=mod.linkUrl+'&pageTitle='+mod.name+'&routeName='+this.bannerRoute;
+                }
+                else if(mod.linkUrl=='#'||mod.linkUrl==''){
+
+                }
+                else{
+                    this.$router.push({
+                        name: mod.linkUrl,
+                        query:{pageTitle:mod.name,routeName:this.bannerRoute}
+                    })
+                }
+
+            },
+            setList(sz){
+                 this.topList=sz;
+                this.$nextTick(() => {
+                    var gallery = mui('.mui-slider');
+                    var slider = gallery.slider({
+                        interval: 5000, //自动轮播周期,若为0则不自动播放,默认为0;
+                     });
+                })
+            }
+        },
+        mounted() {
+
+
+        },
+        computed: {
+
+        }
+    }
+</script>
+

+ 167 - 0
src/components/Common.vue

@@ -0,0 +1,167 @@
+<template>
+	<div>
+		<loading :visible="isLoading" :doLoading="doLoading"></loading>
+	</div>
+</template>
+
+<script>
+	import * as API_WeiXin from '@/apis/weixin'
+	import * as API_User from '@/apis/user'
+	import Loading from '@/components/Loading.vue'
+	import {
+		getUrlParam,
+		getWeixinRedirectURI,
+		isWeiXin
+	} from '@/utils'
+	import {
+		mapGetters,
+		mapMutations
+	} from 'vuex'
+	import * as types from '@/store/mutation-types'
+	export default {
+		name: 'Common',
+		components: {
+			Loading,
+		},
+		props: {
+			//是否获取openid
+			checkOpenId: {
+				require: false,
+				default: true,
+			},
+			//用户角色
+			role: {
+				require: false,
+				default: '',
+			},
+			doLoading: {
+				require: false,
+				default: false,
+			},
+		},
+		data() {
+			return {
+				isLoading: false,
+			}
+		},
+		created() {
+			//公共组件的执行方法放在created中执行,父组件的create放在motuned中执行
+			if (isWeiXin()) {
+				if (this.checkOpenId) {
+					if (!this.openId) {
+						this.getOpenid();
+					} else {
+						this.getDataByOpenId();
+					}
+				}
+			} else {
+				if (this.checkOpenId) {
+
+				}
+			}
+		},
+		methods: {
+			//获取openid
+			getOpenid() {
+				const code = getUrlParam('code');
+				if (!code) {
+					window.location.href = getWeixinRedirectURI(process.env.VUE_APP_WXAPPID, document.URL);
+				} else {
+					console.log(code);
+
+					if (!this.openId) {
+						const step1 = API_WeiXin.getDataByCode(code).then(response => {
+							//console.log(response)
+							this.set_openid(response.openid);
+
+							//角色判定调用不同的信息获取详情
+							this.getDataByOpenId();
+
+							return Promise.resolve(response.openid);
+						}).catch(error => {
+							//console.log(error);
+							return Promise.reject(error);
+						});
+						step1.then(() => {
+							let redirect = this.$route.query.redirect;
+							if (redirect) {
+								this.$router.push({
+									path: decodeURIComponent(redirect)
+								});
+							} else {
+								window.location.href = document.URL.replace(/\?code=(.*?)&state=STATE/g, '');
+							}
+						});
+					} else {
+						//如果存在openid,把链接中code字符去除
+						window.location.href = document.URL.replace(/\?code=(.*?)&state=STATE/g, '');
+					}
+				}
+			},
+			//角色判定调用不同的信息获取详情
+			getDataByOpenId() {
+				this.getUserInfoByOpenId();
+			},
+			//获取用户详情
+			getUserInfoByOpenId() {
+				this.isLoading = true;
+
+				var type = type || '';
+				API_WeiXin.getDataByOpenId(this.openId).then(response => {
+
+					this.isLoading = false;
+
+					//console.log(response)
+
+					var token = response ? response.token : '';
+					this.set_token(token);
+
+					var person = response ? response.personInfo : '';
+					this.set_person_data(person);
+
+					var companyInfo = response ? response.companyInfo : '';
+					this.set_company_data(companyInfo);
+
+					var messageNum = response ? response.messageNum : 0;
+					this.set_wd_message_num(messageNum);
+
+					this.asynCallBack();
+
+				}).catch(error => {
+					this.isLoading = false;
+					mui.toast(error);
+				})
+			},
+
+			//异步回调父组件的方法
+			asynCallBack() {
+				this.$emit('asynCallBack');
+			},
+			...mapMutations({
+				set_openid: types.SET_WEIXIN_OPENID,
+				set_token: types.SET_TOKEN,
+				set_person_data: types.SET_PERSON_DATA,
+				set_company_data: types.SET_COMPANY_DATA,
+				set_wd_message_num: types.SET_WD_MESSAGE_NUM
+			})
+		},
+		mounted() {
+			//如果是开发环境则直接读取findbyopenid信息
+			if (process.env.VUE_APP_NODE_NAME == 'devlopment') {
+				this.getDataByOpenId();
+			}
+		},
+		computed: {
+			...mapGetters({
+				openId: 'wx_openid',
+				token: 'token',
+				person_data: 'person_data',
+				company_data: 'company_data',
+				wd_message_num: 'wd_message_num'
+			})
+		}
+	}
+</script>
+
+<style>
+</style>

+ 40 - 0
src/components/Loading.vue

@@ -0,0 +1,40 @@
+<template>
+	<div>
+		<div :class="visible?'mui-loading z-loading':'mui-loading'">
+			<!-- <div v-show="visible" class="mui-spinner"></div> -->
+			<div v-show="visible"><img src="@/assets/img/loading.gif" /></div>
+		</div>
+	</div>
+</template>
+
+<script>
+	export default {
+		name: 'Loading',
+		props: {
+			visible: {
+				require: false,
+				default: false,
+			},
+		},
+		methods: {},
+		mounted() {}
+	}
+</script>
+
+<style scoped="scoped">
+	.z-loading {
+		position: fixed;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		background: rgb(255, 255, 255, 0.9);
+		z-index: 999;
+	}
+
+	.z-loading div {
+		top: 40%;
+		position: absolute;
+		left: 40%
+	}
+</style>

+ 83 - 0
src/components/NavMenu.vue

@@ -0,0 +1,83 @@
+<template>
+	<nav class="mui-bar mui-bar-tab">
+		<router-link :to="router[0]" :class="'mui-tab-item '+(routeName==router[0]['name']?'mui-active':'')">
+			<span class="mui-icon iconfont iconhome"></span>
+			<span class="mui-tab-label">首页</span>
+		</router-link>
+		<router-link :to="router[1]" :class="'message-nav mui-tab-item '+(routeName==router[1]['name']?'mui-active':'')">
+			<span class="mui-icon iconfont iconmessage"></span>
+			<span class="mui-tab-label">消息</span>
+			<i v-show="wd_message_num && wd_message_num>0" v-text="wd_message_num"></i>
+		</router-link>
+		<router-link :to="router[2]" :class="'mui-tab-item '+(routeName==router[2]['name']?'mui-active':'')">
+			<span class="mui-icon iconfont iconwode"></span>
+			<span class="mui-tab-label">我的</span>
+		</router-link>
+	</nav>
+</template>
+
+<script>
+	import {
+		mapGetters,
+		mapMutations
+	} from 'vuex'
+	export default {
+		name: 'NavMenu',
+		props: {
+			visible: {
+				require: false,
+				default: true,
+			},
+			router: {
+				require: true,
+				type: Array,
+				default: [{
+					name: 'Home'
+				}, {
+					name: 'Home'
+				}, {
+					name: 'Home'
+				}],
+			},
+		},
+		created() {
+			console.log(this.$route);
+		},
+		methods: {},
+		mounted() {},
+		computed: {
+			routeName: {
+				// getter
+				get: function() {
+					return this.$route.name;
+				},
+				// setter
+				set: function(newValue) {
+					console.log(newValue)
+				}
+			},
+			...mapGetters({
+				wd_message_num: 'wd_message_num',
+			})
+		}
+	}
+</script>
+
+<style scoped>
+	.message-nav {
+		position: relative;
+	}
+
+	.message-nav i {
+		position: absolute;
+		top: 1px;
+		right: 45px;
+		background-color: red;
+		border-radius: 9px;
+		color: #fff;
+		padding: 0px 6px;
+		font-size: 12px;
+		line-height: 18px;
+		z-index: 99;
+	}
+</style>

+ 96 - 0
src/components/TopHeader.vue

@@ -0,0 +1,96 @@
+<template>
+	<header :class="'mui-bar mui-bar-nav '+headerClass" :style="headerStyle">
+		<h1 class="mui-title" v-text="pageTitle"></h1>
+		<a v-if="leftShow" class="mui-icon mui-icon-left-nav mui-pull-left" :routeName="routeName" @click="goBack"></a>
+
+        <a v-if="customBack" class="mui-icon mui-icon-left-nav mui-pull-left"   @click="goCustomBack"></a>
+
+        <a v-if="rightLink.show" @click="doRightLink" class="fyy-bar mui-pull-right" style="line-height: 44px;">
+			<span :class="'mui-icon iconfont '+rightLink.icon" :style="rightLink.style">
+				<span class="header-right-wz">
+					{{rightLink.title}}<i></i>
+				</span>
+				<span v-if="systemMessageNum>0" class="mui-badge mui-badge-danger jp-badge" v-text="systemMessageNum"></span>
+			</span>
+		</a>
+	</header>
+</template>
+
+<script>
+	export default {
+		name: 'TopHeader',
+		props: {
+			headerClass: {
+				require: false,
+				default: '',
+			},
+			headerStyle: {
+				require: false,
+				default: '',
+			},
+			routeName: {
+				require: false,
+				default: '',
+			},
+			pageTitle: {
+				require: false,
+				default: '',
+			},
+			leftShow: {
+				require: false,
+				default: true,
+			},
+            customBack: {
+                require: false,
+                default: false,
+            },
+			rightLink: {
+				require: false,
+				type: Object,
+				default: () => ({
+					show: false,
+					to: '',
+					icon: '',
+					style: '',
+					title: ''
+				}),
+			},
+			doRightLink: {
+				require: false,
+				type: Function,
+			},
+			systemMessageNum: {
+				require: false,
+				default: 0
+			}
+		},
+		methods: {
+		    //自定义返回
+            goCustomBack(){
+                this.$emit("goCustomBack");
+            },
+			//返回上一层
+			goBack() {
+				if (this.routeName) {
+					this.$router.push({
+						name: this.routeName
+					})
+				} else {
+					this.$router.go(-1);
+				}
+			}
+		},
+	}
+</script>
+
+<style scoped>
+	.jp-badge {
+		font-size: 12px !important;
+		margin-left: 0 !important;
+		line-height: 1.4 !important;
+		top: 5px !important;
+		left: 50% !important;
+		background-color: #F7D046 !important;
+		color: #000 !important;
+	}
+</style>

+ 37 - 0
src/main.js

@@ -0,0 +1,37 @@
+import Vue from 'vue'
+import App from './App.vue'
+import router from './router'
+import store from './store'
+
+//引入mui
+import mui from '@/assets/js/mui.js'
+import '@/assets/css/mui.min.css'
+
+window.mui = mui;
+window.mui.init();
+
+if (location.hostname === 'localhost') {
+	Vue.prototype.HTTPLOCAT = ''
+} else {
+	const http = window.location.protocol + '//' + location.hostname + ':' + location.port
+	Vue.prototype.HTTPLOCAT = http + ''
+}
+
+Vue.config.productionTip = false
+
+router.beforeEach((to, from, next) => {
+
+	if (to.query.test) {
+		if (to.query.test == 'test') {
+			let vConsole = new Vconsole()
+		}
+	}
+	next();
+	
+})
+
+new Vue({
+	router,
+	store,
+	render: h => h(App)
+}).$mount('#app')

+ 113 - 0
src/router/index.js

@@ -0,0 +1,113 @@
+import Vue from 'vue'
+import VueRouter from 'vue-router'
+
+
+
+if (!window.VueRouter) Vue.use(VueRouter)
+
+const routesIndex = [
+	//首页
+	{
+		path: '/',
+	
+		component: () => import('../views/Layout.vue'),
+		children: [
+			//主页
+			{
+				path: '',
+				name: 'Home',
+				component: () => import('../views/Home.vue'),
+				meta: {
+					requireAuth: false,
+					role: [],
+					title: '主页',
+				}
+			},
+		]
+	},
+	//咨询
+	{
+		path: '/quiz',
+		component: () => import('../views/Layout.vue'),
+		children: [
+			//咨询表单
+			{
+				path: '',
+				name: 'QuizSubmit',
+				component: () => import('../views/quiz/Submit.vue'),
+				meta: {
+					requireAuth: false,
+					role: [],
+					title: '咨询表单',
+					mode: false
+				}
+			},
+			//我的提问(列表)
+			{
+				path: 'my',
+				name: 'QuizMy',
+				component: () => import('@/views/quiz/My.vue'),
+				meta: {
+					requireAuth: false,
+					role: [],
+					title: '我的提问',
+					form: false
+				}
+			},
+			//我的提问详情
+			{
+				path: 'info',
+				name: 'QuizInfo',
+				component: () => import('@/views/quiz/Info.vue'),
+				meta: {
+					requireAuth: false,
+					role: [],
+					title: '我的提问详情',
+					form: false
+				}
+			},
+		],
+	},
+	//搜索
+	{
+		path: '/case',
+		component: () => import('../views/Layout.vue'),
+		children: [
+			//案例详情
+			{
+				path: '',
+				name: 'info',
+				component: () => import('@/views/case/Info.vue'),
+				meta: {
+					requireAuth: false,
+					role: [],
+					title: '案例详情',
+					mode: false
+				}
+			},
+			
+		],
+	},
+]
+
+ const routes = routesIndex;
+ 
+const router = new VueRouter({
+	//base: process.env.BASE_URL,
+	routes,
+
+	// keep-alive 返回缓存页面后记录浏览位置  
+	scrollBehavior(to, from, savedPosition) {
+		if (savedPosition) {
+			return savedPosition;
+		} else {
+			return {
+				x: 0,
+				y: 0
+			}
+		}
+	},
+
+})
+
+export default router

+ 29 - 0
src/store/getters.js

@@ -0,0 +1,29 @@
+export const token = state => state.token
+
+export const wx_openid = state => state.wx_openid
+
+export const person_data = state => state.person_data
+
+export const keep_alive_components = state => state.keep_alive_components
+
+export const wd_message_num = state => state.wd_message_num
+
+export const reset_password_step = state => state.reset_password_step
+
+export const reset_phone_step = state => state.reset_phone_step
+
+export const wx_pay_back_url = state => state.wx_pay_back_url
+
+export const company_form_data = state => state.company_form_data
+
+export const company_data = state => state.company_data
+
+export const login_from_route = state => state.login_from_route
+
+export const search_history = state => state.search_history
+
+export const market_form_data = state => state.market_form_data
+
+export const demand_form_data = state => state.demand_form_data
+
+export const job_form_data = state => state.job_form_data

+ 13 - 0
src/store/index.js

@@ -0,0 +1,13 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import state from './state.js';
+import * as getters from './getters';
+import mutations from './mutations';
+
+Vue.use(Vuex)
+
+export default new Vuex.Store({
+	state,
+	getters,
+	mutations,
+});

+ 18 - 0
src/store/mutation-types.js

@@ -0,0 +1,18 @@
+export const SET_TOKEN = 'SET_TOKEN'
+export const SET_WEIXIN_OPENID = 'SET_WEIXIN_OPEN_ID'
+
+export const SET_PERSON_DATA = 'SET_PERSON_DATA'
+export const SET_KEEP_ALIVE_COMPONENTS = 'SET_KEEP_ALIVE_COMPONENTS'
+export const SET_WD_MESSAGE_NUM = 'SET_WD_MESSAGE_NUM'
+export const SET_RESET_PASSWORD_STEP = 'SET_RESET_PASSWORD_STEP'
+export const SET_RESET_PHONE_STEP = 'SET_RESET_PHONE_STEP'
+export const SET_COMPANY_FORM_DATA = 'SET_COMPANY_FORM_DATA'
+export const SET_COMPANY_DATA = 'SET_COMPANY_DATA'
+export const SET_LOGIN_FROM_ROUTE = 'SET_LOGIN_FROM_ROUTE'
+
+export const SET_WX_PAY_BACK_URL = 'SET_WX_PAY_BACK_URL'
+
+export const SET_SEARCH_HISTORY= 'SET_SEARCH_HISTORY'
+export const SET_MARKET_FORM_DATA = 'SET_MARKET_FORM_DATA'
+export const SET_DEMAND_FORM_DATA = 'SET_DEMAND_FORM_DATA'
+export const SET_JOB_FORM_DATA = 'SET_JOB_FORM_DATA'

+ 89 - 0
src/store/mutations.js

@@ -0,0 +1,89 @@
+import * as types from './mutation-types'
+import {
+	setOpenId,
+	setToken,
+	setPersonData,
+	setWdMessageNum,
+	setWxPayBackUrl,
+	setCompanyFormData,
+	setCompanyData,
+	setLoginFromRoute,
+	setSearchHistory,
+	setMarketFormData,
+	setDemandFormData,
+	setJobFormData
+} from '../utils/storage'
+
+var storage_prefix = process.env.VUE_APP_LOCAL_STORAGE_PREFIX;
+
+const mutations = {
+	[types.SET_WEIXIN_OPENID](state, openid) {
+		setOpenId(openid)
+		state.weixin_openid = openid
+	},
+
+	[types.SET_TOKEN](state, data) {
+		setToken(data)
+		state.token = data
+	},
+
+	[types.SET_PERSON_DATA](state, data) {
+		setPersonData(storage_prefix, data)
+		state.person_data = data
+	},
+
+	[types.SET_KEEP_ALIVE_COMPONENTS](state, data) {
+		state.keep_alive_components = data
+	},
+
+	[types.SET_RESET_PASSWORD_STEP](state, data) {
+		state.reset_password_step = data
+	},
+
+	[types.SET_RESET_PHONE_STEP](state, data) {
+		state.reset_phone_step = data
+	},
+
+	[types.SET_WD_MESSAGE_NUM](state, data) {
+		setWdMessageNum(storage_prefix, data)
+		state.wd_message_num = data
+	},
+
+	[types.SET_WX_PAY_BACK_URL](state, data) {
+		setWxPayBackUrl(storage_prefix, data)
+		state.wx_pay_back_url = data
+	},
+
+	[types.SET_COMPANY_FORM_DATA](state, data) {
+		setCompanyFormData(storage_prefix, data)
+		state.company_form_data = data
+	},
+
+	[types.SET_COMPANY_DATA](state, data) {
+		setCompanyData(storage_prefix, data)
+		state.company_data = data
+	},
+
+	[types.SET_LOGIN_FROM_ROUTE](state, data) {
+		setLoginFromRoute(storage_prefix, data)
+		state.login_from_route = data
+	},
+	[types.SET_SEARCH_HISTORY](state, data) {
+		setSearchHistory(storage_prefix, data)
+		state.search_history = data
+	},
+	[types.SET_MARKET_FORM_DATA](state, data) {
+		setMarketFormData(storage_prefix, data)
+		state.market_form_data = data
+	},
+	[types.SET_DEMAND_FORM_DATA](state, data) {
+		setDemandFormData(storage_prefix, data)
+		state.demand_form_data = data
+	},
+	[types.SET_JOB_FORM_DATA](state, data) {
+		setJobFormData(storage_prefix, data)
+		state.job_form_data = data
+	},
+}
+
+export default mutations

+ 37 - 0
src/store/state.js

@@ -0,0 +1,37 @@
+import {
+	getOpenId,
+	getToken,
+	getPersonData,
+	getWdMessageNum,
+	getWxPayBackUrl,
+	getCompanyFormData,
+	getCompanyData,
+	getLoginFromRoute,
+	getSearchHistory,
+	getMarketFormData,
+	getDemandFormData,
+	getJobFormData
+} from '../utils/storage'
+
+var storage_prefix = process.env.VUE_APP_LOCAL_STORAGE_PREFIX;
+
+const state = {
+	wx_openid: getOpenId(),
+	token: getToken(),
+	person_data: getPersonData(storage_prefix),
+	wd_message_num: getWdMessageNum(storage_prefix),
+	//这里由于include,需要默认为数组
+	keep_alive_components: [],
+	reset_password_step: '',
+	reset_phone_step: '',
+	wx_pay_back_url: getWxPayBackUrl(storage_prefix),
+	company_form_data: getCompanyFormData(storage_prefix),
+	company_data: getCompanyData(storage_prefix),
+	login_from_route: getLoginFromRoute(storage_prefix),
+	search_history: getSearchHistory(storage_prefix),
+	market_form_data: getMarketFormData(storage_prefix),
+	demand_form_data: getDemandFormData(storage_prefix),
+	job_form_data: getJobFormData(storage_prefix),
+}
+
+export default state

+ 31 - 0
src/utils/alipay.js

@@ -0,0 +1,31 @@
+function onBridgeReady(params) {
+	AlipayJSBridge.call("tradePay", {
+		tradeNO: params.tradeNo,
+	}, function(result) {
+		if (result.resultCode == '9000') {
+			location.href = params.succUrl
+		} else {
+			location.href = params.cancelUrl;
+		}
+		//alert(JSON.stringify(result));
+	});
+}
+
+export const aliPayJs = (params) => {
+	if (typeof window.WeixinJSBridge === 'undefined') {
+		if (document.addEventListener) {
+			document.addEventListener('AlipayJSBridgeReady', function() {
+				onBridgeReady(params)
+			}, false)
+		} else if (document.attachEvent) {
+			document.attachEvent('AlipayJSBridgeReady', function() {
+				onBridgeReady(params)
+			})
+			document.attachEvent('AlipayJSBridgeReady', function() {
+				onBridgeReady(params)
+			})
+		}
+	} else {
+		onBridgeReady(params)
+	}
+}

+ 370 - 0
src/utils/index.js

@@ -0,0 +1,370 @@
+export const currentTimeStamp = () => new Date().getTime()
+
+export const unixTimeStamp = (val) => new Date(val).getTime()
+
+//今天多少天之前的时间
+export const beforeTimeStamp = (dayCount) => {
+	let dd = new Date()
+	dd.setDate(dd.getDate() - dayCount)
+	let time = dd.getTime()
+	return time
+}
+
+//今天多少天之后的时间
+export const afterTimeStamp = (dayCount, date) => {
+	if (date) {
+		var dd = new Date(date);
+	} else {
+		var dd = new Date();
+	}
+	dd.setDate(dd.getDate() + dayCount)
+	let time = dd.getTime()
+	return time
+}
+
+//今天多少年之后的时间
+export const afterYearTimeStamp = (yearCount, date) => {
+	if (date) {
+		var dd = new Date(date);
+	} else {
+		var dd = new Date();
+	}
+	dd.setFullYear(dd.getFullYear() + yearCount)
+	let time = dd.getTime()
+	return time
+}
+
+//计算某日期距当前的时间秒数
+export const secondsDistance = (date) => {
+	var now = new Date().getTime();
+	date = new Date(date).getTime();
+	var seconds = parseInt((now - date) / 1000);
+	return seconds;
+}
+
+//计算两个时间的相差天数
+export const daysDistance = (date1, date2) => {
+	date1 = Date.parse(date1);
+	date2 = Date.parse(date2);
+	var ms = date2 - date1;
+	ms = ms < 0 ? 0 : ms;
+	var days = parseInt(Math.floor(ms / (24 * 3600 * 1000)));
+	return days;
+}
+//计算两个时间的相差小时数
+export const hourDistanceArr = (date1, date2) => {
+	if (!date1 || !date2) {
+		return '-';
+	}
+	date1 = Date.parse(date1);
+	date2 = Date.parse(date2);
+	var ms = date2 - date1;
+	ms = ms < 0 ? 0 : ms;
+	ms = ms / 1000; //s
+	var Hour = parseInt(Math.floor(ms / (60 * 60)));
+	var Fen = parseInt(Math.floor(ms % (60 * 60) / 60));
+	var s = parseInt(Math.floor(ms % (60)));
+	//600000
+	return [Hour, Fen, s]
+}
+//计算两个时间的相差小时数
+export const hourDistance = (date1, date2) => {
+	if (!date1 || !date2) {
+		return '-';
+	}
+	date1 = Date.parse(date1);
+	date2 = Date.parse(date2);
+	var ms = date2 - date1;
+	ms = ms < 0 ? 0 : ms;
+	ms = ms / 1000; //s
+	var Hour = parseInt(Math.floor(ms / (60 * 60)));
+	var Fen = parseInt(Math.floor(ms % (60 * 60) / 60));
+	var s = parseInt(Math.floor(ms % (60)));
+	//600000
+	return Hour + '小时' + Fen + '分钟' + s + '秒';
+}
+
+export const parseUnixTime = (time, cFormat) => {
+	if (arguments.length === 0) {
+		return null
+	}
+	const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
+	let date
+	if (typeof time === 'object') {
+		date = time
+	} else {
+		if (('' + time).length === 10) time = parseInt(time) * 1000
+		date = new Date(time)
+	}
+	const formatObj = {
+		y: date.getFullYear(),
+		m: date.getMonth() + 1,
+		d: date.getDate(),
+		h: date.getHours(),
+		i: date.getMinutes(),
+		s: date.getSeconds(),
+		a: date.getDay()
+	}
+	const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
+		let value = formatObj[key]
+		if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]
+		if (result.length > 0 && value < 10) {
+			value = '0' + value
+		}
+		return value || 0
+	})
+
+	return time_str
+}
+
+//微信获取code
+export const getWeixinRedirectURI = (appid, url) =>
+	`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(url)}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`
+
+//支付宝获取code
+export const getAlipayRedirectURI = (appid, url) =>
+	`https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=${appid}&scope=auth_base&redirect_uri=${encodeURIComponent(url)}`
+
+
+//获取链接的?参数
+export const getUrlParam = (name) => {
+	var reg = new RegExp(name + "=([^&]*)(&|$)");
+	var r = window.location.href.match(reg);
+	var strValue = "";
+	if (r != null) {
+		strValue = unescape(r[1]);
+	}
+	return strValue;
+}
+
+
+//将base64图片码转file
+export const dataUrlToFile = (dataurl, filename) => {
+	var arr = dataurl.split(','),
+		mime = arr[0].match(/:(.*?);/)[1],
+		bstr = atob(arr[1]),
+		n = bstr.length,
+		u8arr = new Uint8Array(n);
+	while (n--) {
+		u8arr[n] = bstr.charCodeAt(n);
+	}
+	return new File([u8arr], filename, {
+		type: mime
+	});
+}
+
+//将canvas转换为image的src
+export const convertCanvasToImage = (canvas) => {
+	return canvas.toDataURL("image/png");;
+}
+
+//验证身份证
+export const checkIdCard = (value) => {
+	var identNumber = value;
+
+	if (identNumber != null) {
+		identNumber = (identNumber + "").toUpperCase();
+	}
+
+	if (!(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(identNumber))) {
+		return '身份证格式错误';
+	}
+	//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。  
+	if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(identNumber))) {
+		return '身份证格式错误';
+	}
+	//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
+	//下面分别分析出生日期和校验位
+	var len, re;
+	len = identNumber.length;
+	//判断18位身份证号码,现在在国家统一身份证为18位。
+	if (len == 18) {
+		re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
+		var arrSplit = identNumber.match(re);
+
+
+		//检查生日日期是否正确
+		var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
+		var bGoodDay;
+		bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) &&
+			(dtmBirth.getDate() == Number(arrSplit[4]));
+		if (!bGoodDay) {
+			return '身份证号码日期不匹配';
+		} else {
+			//检验18位身份证的校验码是否正确。
+			//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
+			var valnum;
+			var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
+			var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
+			var nTemp = 0,
+				i;
+			for (i = 0; i < 17; i++) {
+				nTemp += identNumber.substr(i, 1) * arrInt[i];
+			}
+			valnum = arrCh[nTemp % 11];
+			if (valnum != identNumber.substr(17, 1)) {
+				return '身份证号码校验位不正确';
+			}
+			return true;
+		}
+	} else {
+		return '身份证号码位数不足';
+	}
+}
+
+// 字符串截取 包含对中文处理,str需截取字符串,start开始截取位置,n截取长度
+export const substrMb = (str, start, n) => {
+	if (str.replace(/[\u4e00-\u9fa5]/g, '**').length <= n) {
+		return str;
+	}
+	let len = 0;
+	let tmpStr = '';
+	for (let i = start; i < str.length; i++) { // 遍历字符串
+		if (/[\u4e00-\u9fa5]/.test(str[i])) { // 中文 长度为两字节
+			len += 2;
+		} else {
+			len += 1;
+		}
+		if (len > n) {
+			break;
+		} else {
+			tmpStr += str[i];
+		}
+	}
+	return tmpStr;
+}
+
+//验证手机号
+export const checkPhone = (value) => {
+	if (!value) {
+		return '手机号不能为空';
+	} else {
+		const reg = /^1[3-9]\d{9}$/
+		var result = reg.test(value);
+
+		if (result) {
+			return true;
+		} else {
+			return '请输入正确的手机号';
+		}
+	}
+};
+
+//验证社会信用代码
+export const checkCreditCode = (value) => {
+	if (!value) {
+		return '社会信用代码不能为空';
+	} else {
+		const reg = /^[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/g
+		var result = reg.test(value);
+
+		if (result) {
+			return true;
+		} else {
+			return '不是有效的统一社会信用编码';
+		}
+	}
+};
+
+//是否为微信浏览器
+export const isWeiXin = () => {
+	return /MicroMessenger/.test(window.navigator.userAgent)
+}
+
+//获取当前根链接
+export const getBaseUrl = () => {
+	return window.location.href.split("#")[0]
+}
+
+//获取指定日期是否在指定时间之间
+export const inDateBetwen = (d, d1, d2) => {
+	//如果时间格式是正确的,那下面这一步转化时间格式就可以不用了
+	var dateBegin = new Date(d1.replace(/-/g, "/")); //将-转化为/,使用new Date
+	var dateEnd = new Date(d2.replace(/-/g, "/")); //将-转化为/,使用new Date
+	//var dateBegin = new Date(d1);//将-转化为/,使用new Date
+	//var dateEnd = new Date(d2);//将-转化为/,使用new Date
+	var dateNow = new Date(d.replace(/-/g, "/")); //获取当前时间
+
+	var beginDiff = dateNow.getTime() - dateBegin.getTime(); //时间差的毫秒数       
+	var beginDayDiff = Math.floor(beginDiff / (24 * 3600 * 1000)); //计算出相差天数
+
+	var endDiff = dateEnd.getTime() - dateNow.getTime(); //时间差的毫秒数
+	var endDayDiff = Math.floor(endDiff / (24 * 3600 * 1000)); //计算出相差天数       
+	if (endDayDiff < 0) {
+		//已过期
+		return false
+	}
+	if (beginDayDiff < 0) {
+		//没到开始时间
+		return false;
+	}
+	return true;
+}
+
+//type为字符串类型,有两种选择,"s"代表开始,"e"代表结束,dates为数字类型,不传或0代表本周,-1代表上周,1代表下周
+export const getWeekTime = (type, dates) => {
+	var now = new Date();
+	var nowTime = now.getTime();
+	var day = now.getDay();
+	var longTime = 24 * 60 * 60 * 1000;
+	var n = longTime * 7 * (dates || 0);
+	if (type == "s") {
+		var dd = nowTime - (day) * longTime + n;
+	};
+	if (type == "e") {
+		var dd = nowTime + (7 - day - 1) * longTime + n;
+	};
+	dd = new Date(dd);
+	var y = dd.getFullYear();
+	var m = dd.getMonth() + 1;
+	var d = dd.getDate();
+	m = m < 10 ? "0" + m : m;
+	d = d < 10 ? "0" + d : d;
+	var day = y + "-" + m + "-" + d;
+	return day;
+}
+
+export const getDiffDate = (stime, etime) => {
+	//初始化日期列表,数组
+	var diffdate = new Array();
+	var i = 0;
+	//开始日期小于等于结束日期,并循环
+	while (stime <= etime) {
+		diffdate[i] = stime;
+
+		//获取开始日期时间戳
+		var stime_ts = new Date(stime).getTime();
+		//console.log('当前日期:' + stime + '当前时间戳:' + stime_ts);
+
+		//增加一天时间戳后的日期
+		var next_date = stime_ts + (24 * 60 * 60 * 1000);
+
+		//拼接年月日,这里的月份会返回(0-11),所以要+1
+		var next_dates_y = new Date(next_date).getFullYear() + '-';
+		var next_dates_m = (new Date(next_date).getMonth() + 1 < 10) ? '0' + (new Date(next_date).getMonth() + 1) + '-' : (
+			new Date(next_date).getMonth() + 1) + '-';
+		var next_dates_d = (new Date(next_date).getDate() < 10) ? '0' + new Date(next_date).getDate() : new Date(next_date).getDate();
+
+		stime = next_dates_y + next_dates_m + next_dates_d;
+
+		//增加数组key
+		i++;
+	}
+	return diffdate;
+}
+
+export const isJSON = (str) => {
+	if (typeof str == 'string') {
+		try {
+			var obj = JSON.parse(str);
+			if (typeof obj == 'object' && obj) {
+				return true;
+			} else {
+				return false;
+			}
+		} catch (e) {
+			console.log('error:' + str + '!!!' + e);
+			return false;
+		}
+	}
+}

+ 74 - 0
src/utils/muiLoad.js

@@ -0,0 +1,74 @@
+//上拉下拉加载功能
+export const upDownLoadMore = (el, loadMorefun, refresh,obj) => {
+	mui(el).pullRefresh({
+		up: {
+			height: expression(obj,'upheight',50) , //可选.默认50.触发上拉加载拖动距离
+			auto: expression(obj,'upauto',false) , //可选,默认false.自动上拉加载一次
+			contentrefresh: "正在加载...",
+			contentnomore: '没有更多数据了',
+			contentover : "释放立即刷新",
+			callback: loadMorefun
+		},
+		down: {
+			style: 'circle', //必选,下拉刷新样式,目前支持原生5+ ‘circle’ 样式
+			color: '#2BD009', //可选,默认“#2BD009” 下拉刷新控件颜色
+			height: '20px', //可选,默认50px.下拉刷新控件的高度,
+			range: '30px', //可选 默认100px,控件可下拉拖拽的范围
+			offset: '0px', //可选 默认0px,下拉刷新控件的起始位置
+			auto: expression(obj,'downauto',false) , //可选,默认false.首次加载自动上拉刷新一次
+			callback: refresh
+		}
+	})
+    //on元素批量绑定事件
+    mui(el).on('tap','a',function(){
+        //mui框架下拉刷新上拉加载,click事件无效的解决方法
+      
+        //这个this代表点击那个li
+        // mui.toast(this.innerHTML);
+        this.click()
+    });
+}
+function  expression(obj,field,defaultvalue) {
+    if(obj){
+        if(obj[field]){
+            return obj[field];
+        }
+    }
+    return defaultvalue;
+
+
+}
+export const endPullupToRefresh = (el,bl) => {
+    if(!mui(el)||!mui(el).pullRefresh()){
+        return;
+    }
+    mui(el).pullRefresh().endPullupToRefresh(bl);
+}
+//重置上拉加载
+export const refresh = (el) => {
+    if(!mui(el)||!mui(el).pullRefresh()){
+        return;
+    }
+	mui(el).pullRefresh().refresh(true);
+}
+//禁用上拉刷新
+export const disablePullupToRefresh = (el) => {
+    if(!mui(el)||!mui(el).pullRefresh()){
+        return;
+    }
+	mui(el).pullRefresh().disablePullupToRefresh();
+}
+//启用上拉刷新
+export const enablePullupToRefresh = (el) => {
+    if(!mui(el)||!mui(el).pullRefresh()){
+        return;
+    }
+	mui(el).pullRefresh().enablePullupToRefresh();
+}
+//下拉刷新结束
+export const endPulldown = (el) => {
+    if(!mui(el)||!mui(el).pullRefresh()){
+        return;
+    }
+	mui(el).pullRefresh().endPulldown();
+}

+ 83 - 0
src/utils/request.js

@@ -0,0 +1,83 @@
+import axios from 'axios';
+import store from '@/store';
+import router from '@/router';
+import Vue from 'vue';
+import Qs from 'qs';
+
+import {
+	getToken,
+	getOpenId
+} from '@/utils/storage'
+
+axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'
+
+// 创建axios实例
+const service = axios.create({
+	baseURL: process.env.VUE_APP_BACKEND_URL,
+	timeout: 20000,
+	// 请求头信息
+	headers: {
+		'Content-Type': 'application/x-www-form-urlencoded',
+		'X-Requested-With': 'XMLHttpRequest',
+	},
+});
+
+//request拦截器
+service.interceptors.request.use(config => {
+	let Authorization = getToken() ? getToken() : '';
+	config.headers['Authorization'] = Authorization;
+	return config;
+}, error => {
+	//对请求错误处理
+	return Promise.reject(error);
+});
+
+// response拦截器
+service.interceptors.response.use(
+	response => {
+		if (response.data.code === 200) {
+			if (response.data.result) {
+				return Promise.resolve(response.data.data);
+			} else {
+				return Promise.reject(response.data.message);
+			}
+		} else if (response.data.code === 415) {
+			//这里不执行,token过期
+		} else {
+			//无code的情况
+			if (response.data.result) {
+				return Promise.resolve(response.data.data);
+			} else {
+				return Promise.reject(response.data.message);
+			}
+
+			// todo 根据返回值判定去向,比如token过期,未登录等等
+
+			// 403 接口需要登录
+			/* if (response.data.code === 403) {
+				store.dispatch('clearToken');
+				router.replace({
+					name: 'Login',
+					query: {
+						redirect: router.currentRoute.fullPath
+					}
+				});
+			} */
+
+			return Promise.reject(response.data.message);
+		}
+	},
+	error => {
+		// alert('网络超时!请重新加载!');
+		//console.error(error);
+		// 判断请求异常信息中是否含有超时timeout字符串
+		if (error.message.includes('timeout')) {
+			return Promise.reject('请求超时,请稍后再试');
+		} else if (error.message.includes('NetworkError')) {
+			return Promise.reject('网络错误,请稍后再试');
+		}
+		return Promise.reject(error);
+	}
+);
+
+export default service;

+ 100 - 0
src/utils/storage.js

@@ -0,0 +1,100 @@
+//设置cookie
+function setCookie(c_name, value, expiredays) {
+	var exdate = new Date()
+	exdate.setDate(exdate.getDate() + expiredays)
+	document.cookie = c_name + "=" + escape(value) +
+		((expiredays == null) ? "" : ";expires=" + exdate.toGMTString())
+}
+
+//取回cookie
+function getCookie(c_name) {
+	if (document.cookie.length > 0) {
+		var c_start = document.cookie.indexOf(c_name + "=")
+		if (c_start != -1) {
+			c_start = c_start + c_name.length + 1
+			var c_end = document.cookie.indexOf(";", c_start)
+			if (c_end == -1) c_end = document.cookie.length
+			return unescape(document.cookie.substring(c_start, c_end))
+		}
+	}
+	return ""
+}
+
+//删除cookie
+function delCookie(name) {
+	var exdate = new Date();
+	exdate.setTime(exdate.getTime() - 1);
+	var cval = getCookie(name);
+	if (cval != null)
+		document.cookie = name + "=" + escape(cval) + ";expires=" + exdate.toGMTString();
+}
+
+
+const prefix = 'qylhh_'
+const engine = window.localStorage
+
+export const get = key => !engine.getItem(prefix + key) ? null : JSON.parse(engine.getItem(prefix + key))
+
+export const set = (key, value) => !value ? remove(key) : engine.setItem(prefix + key, JSON.stringify(value))
+
+export const remove = key => engine.removeItem(prefix + key)
+
+
+//export const get = key => !getCookie(prefix + key) ? null : JSON.parse(getCookie(prefix + key))
+
+//export const set = (key, value) => !value ? delCookie(key) : setCookie(prefix + key, JSON.stringify(value))
+
+//export const remove = key => delCookie(prefix + key)
+
+
+
+export const clear = () => engine.clear()
+
+export const getOpenId = () => get('wx_openid')
+
+export const setOpenId = (data) => set('wx_openid', data)
+
+export const setToken = (token) => set('token', token)
+
+export const getToken = () => get('token')
+
+export const setPersonData = (channel, data) => set(channel + '_person_data', data)
+
+export const getPersonData = (channel) => get(channel + '_person_data')
+
+export const getWdMessageNum = (channel) => get(channel + '_wd_message_num')
+
+export const setWdMessageNum = (channel, data) => set(channel + '_wd_message_num', data)
+
+export const getCompanyData = (channel) => get(channel + '_company_data')
+
+export const setCompanyData = (channel, data) => set(channel + '_company_data', data)
+
+export const getCompanyFormData = (channel) => get(channel + '_company_form_data')
+
+export const setCompanyFormData = (channel, data) => set(channel + '_company_form_data', data)
+
+export const getLoginFromRoute = (channel) => get(channel + '_login_from_route')
+
+export const setLoginFromRoute = (channel, data) => set(channel + '_login_from_route', data)
+
+
+export const getWxPayBackUrl = (channel) => get(channel + '_wx_pay_back_url')
+
+export const setWxPayBackUrl = (channel, data) => set(channel + '_wx_pay_back_url', data)
+
+export const getSearchHistory = (channel) => get(channel + '_search_history')
+
+export const setSearchHistory = (channel, data) => set(channel + '_search_history', data)
+
+export const getMarketFormData = (channel) => get(channel + '_market_form_data')
+
+export const setMarketFormData = (channel, data) => set(channel + '_market_form_data', data)
+
+export const getDemandFormData = (channel) => get(channel + '_demand_form_data')
+
+export const setDemandFormData = (channel, data) => set(channel + '_demand_form_data', data)
+
+export const getJobFormData = (channel) => get(channel + '_job_form_data')
+
+export const setJobFormData = (channel, data) => set(channel + '_job_form_data', data)

+ 117 - 0
src/utils/wxJsApi.js

@@ -0,0 +1,117 @@
+import wx from 'weixin-js-sdk'
+import * as API_WeiXin from '@/apis/weixin'
+import * as API_Common from '@/apis/common'
+
+//获取微信配置
+export function getWxConfig(jsApiList) {
+	var jsApiList = jsApiList || ['chooseImage', 'getLocalImgData', 'scanQRCode'];
+	let promise = (jsApiList => {
+		return new Promise((resolve, reject) => {
+			console.log(jsApiList);
+			API_WeiXin.getConfig().then(response => {
+				var wxconfig = response.wxConfig;
+				console.log(wxconfig.nonceStr)
+				wx.config({
+					debug: false, // 开启调试模式,
+					appId: wxconfig.appId, // 必填,企业号的唯一标识,此处填写企业号corpid
+					timestamp: wxconfig.timestamp, // 必填,生成签名的时间戳
+					nonceStr: wxconfig.nonceStr, // 必填,生成签名的随机串
+					signature: wxconfig.signature, // 必填,签名,见附录1
+					jsApiList: jsApiList // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
+				});
+				wx.ready(function() {
+					resolve(response);
+				})
+				wx.error(function(res) {
+					reject('微信api配置出错');
+				});
+			}).catch(error => {
+				mui.toast(error);
+				reject(error);
+			})
+		})
+	})(jsApiList)
+
+	return promise;
+}
+
+//选择图片
+export function chooseImage() {
+	let promise = new Promise((resolve, reject) => {
+		wx.chooseImage({
+			count: 1,
+			sizeType: ['compressed'],
+			sourceType: ['album', 'camera'],
+			success: function(res) {
+				var localIds = res.localIds;
+				console.log(localIds);
+				wx.getLocalImgData({
+					localId: localIds[0],
+					success: function(res) {
+						resolve(res);
+					}
+				});
+			}
+		});
+	});
+	return promise;
+}
+
+//上传图片
+export function uploadPic(imgBase64) {
+	let promise = new Promise((resolve, reject) => {
+		var formData = new FormData();
+		formData.append('photoName', '1.jpg');
+		formData.append('photoBase64Data', imgBase64);
+
+		console.log(formData);
+		console.log(typeof formData);
+
+		API_Common.uploadBase64(formData).then(response => {
+			resolve(response);
+		}).catch(error => {
+			mui.toast(error);
+			reject(error);
+		})
+	});
+	return promise;
+}
+
+//获取坐标
+export function getLocation() {
+	let promise = new Promise((resolve, reject) => {
+		wx.ready(function() {
+			wx.getLocation({
+				type: 'gcj02', // 默认为wgs84的gps坐标,可传入'gcj02'
+				success: function(res) {
+					resolve(res);
+				},
+				fail: function(res) {
+					reject(res);
+				},
+				complete() {}
+			})
+		})
+	})
+	return promise;
+}
+
+//扫描二维码
+export function scanQRCode(needResult) {
+	var needResult = needResult || 1;
+	let promise = new Promise((resolve, reject) => {
+		wx.scanQRCode({
+			needResult: needResult,
+			scanType: ["qrCode"],
+			success: function(res) {
+				var url = res.resultStr;
+				resolve(url);
+			},
+			fail: function(res) {
+				reject(res);
+			},
+			complete() {}
+		})
+	});
+	return promise;
+}

+ 50 - 0
src/utils/wxpay.js

@@ -0,0 +1,50 @@
+import store from '@/store'
+
+function onBridgeReady(params) {
+	//记录要回跳的url
+	store.commit('SET_WX_PAY_BACK_URL', params.url)
+	window.WeixinJSBridge.invoke(
+		'getBrandWCPayRequest', {
+			'appId': params.appId, // 公众号名称,由商户传入
+			'timeStamp': params.timeStamp, // 时间戳,自1970年以来的秒数
+			'nonceStr': params.nonceStr, // 随机串
+			'package': params.package,
+			'signType': params.signType, // 微信签名方式:
+			'paySign': params.paySign // 微信签名
+		},
+		(res) => {
+			//alert(JSON.stringify(res)); // 支付取消会执行 支付成功不会
+			if (res.err_msg == 'get_brand_wcpay_request:ok') {
+				//alert("支付成功") // 不会执行
+				window.location.href = params.url
+			} else if (res.err_msg == "get_brand_wcpay_request:cancel") {
+				//alert("支付取消") // 会执行
+			} else {
+				//alert("支付失败")
+			}
+		}
+	)
+}
+
+export const wxPayJs = (params) => {
+	if (!params.url) {
+		params.url = window.location.href.split("#")[0] + "/#/";
+	}
+
+	if (typeof window.WeixinJSBridge === 'undefined') {
+		if (document.addEventListener) {
+			document.addEventListener('WeixinJSBridgeReady', function() {
+				onBridgeReady(params)
+			}, false)
+		} else if (document.attachEvent) {
+			document.attachEvent('WeixinJSBridgeReady', function() {
+				onBridgeReady(params)
+			})
+			document.attachEvent('onWeixinJSBridgeReady', function() {
+				onBridgeReady(params)
+			})
+		}
+	} else {
+		onBridgeReady(params)
+	}
+}

+ 9 - 0
src/views/Home.vue

@@ -0,0 +1,9 @@
+<template>
+	<div>wwww</div>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 25 - 0
src/views/Layout.vue

@@ -0,0 +1,25 @@
+<template>
+	<div>
+		
+		<keep-alive :include="keep_alive_components">
+			<router-view></router-view>
+		</keep-alive>
+	</div>
+</template>
+
+<script>
+	import {
+		mapGetters,
+		mapMutations
+	} from 'vuex'
+	export default {
+		computed: {
+			...mapGetters({
+				keep_alive_components: 'keep_alive_components',
+			})
+		}
+	}
+</script>
+
+<style>
+</style>

+ 8 - 0
src/views/case/Info.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 8 - 0
src/views/quiz/Info.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 8 - 0
src/views/quiz/My.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 9 - 0
src/views/quiz/Submit.vue

@@ -0,0 +1,9 @@
+<template>
+		<div>ww2ww</div>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 94 - 0
vue.config.js

@@ -0,0 +1,94 @@
+const path = require('path');
+
+const CompressionWebpackPlugin = require("compression-webpack-plugin")
+const productionGzipExtensions = ['js', 'css']
+
+function resolve(dir) {
+	return path.join(__dirname, dir)
+}
+
+let title = '';
+if (process.env.VUE_APP_NODE_NAME == 'production') {
+	title = ''
+} else if (process.env.VUE_APP_NODE_NAME == 'test') {
+	title = '(测试)'
+} else {
+	title = '(开发)'
+}
+
+const Timestamp = new Date().getTime();
+module.exports = {
+	pages: {
+		index: {
+			entry: 'src/main.js',
+			template: 'public/index.html',
+			filename: 'index.html',
+			title: '12355' + title,
+		}
+	},
+	publicPath: './',
+	outputDir: 'dist/' + process.env.OUT_PUT_NAME,
+	assetsDir: 'static',
+	lintOnSave: false,
+	devServer: {
+		host: '0.0.0.0',
+		port: 8080,
+		//解析缓存
+		disableHostCheck: true,
+		//支持gzip
+		compress: true,
+	},
+	//不输出map
+	productionSourceMap: false,
+	chainWebpack: (config) => {
+		config.entry.app = ['babel-polyfill', './src/main.js']
+		config.resolve.alias
+			.set('@', resolve('./src/'))
+
+		config.plugins.delete('preload-index');
+		config.plugins.delete('prefetch-index');
+
+		config.optimization.minimize(true);
+	},
+	configureWebpack: config => {
+		/* //开启gzip压缩,需要配置Nginx服务器gzip选项开启
+		config.plugins.push(
+			new CompressionWebpackPlugin({
+				filename: '[path].gz[query]',
+				algorithm: 'gzip',
+				test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
+				threshold: 10240,
+				minRatio: 0.8
+			})
+		); */
+
+		config.output.filename = `./static/js/[name].${Timestamp}.js`
+		config.output.chunkFilename = `./static/js/[name].${Timestamp}.js`
+
+		config.performance = {
+			hints: 'warning',
+			//入口起点的最大体积 整数类型(以字节为单位)
+			maxEntrypointSize: 50000000,
+			//生成文件的最大体积 整数类型(以字节为单位 300k)
+			maxAssetSize: 30000000,
+			//只给出 js 文件的性能提示
+			assetFilter: function(assetFilename) {
+				return assetFilename.endsWith('.js');
+			}
+		}
+	},
+	css: {
+		extract: {
+			filename: `./static/css/[name].${Timestamp}.css`,
+			chunkFilename: `./static/css/[name].${Timestamp}.css`
+		},
+		sourceMap: false,
+		loaderOptions: {
+			// 给 sass-loader 传递选项
+			sass: {
+				// @/ 是 src/ 的别名
+				// prependData: `@import "@/assets/scss/base.scss";`
+			}
+		}
+	}
+};

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff