lhl 1 年之前
當前提交
d943b042df
共有 100 個文件被更改,包括 36107 次插入0 次删除
  1. 16 0
      .hbuilderx/launch.json
  2. 252 0
      App.vue
  3. 10 0
      api/index.js
  4. 55 0
      api/login.js
  5. 1123 0
      api/qqmap-wx-jssdk.js
  6. 124 0
      api/record.js
  7. 27 0
      api/set.js
  8. 37 0
      api/wx.js
  9. 二進制
      components/.DS_Store
  10. 18 0
      components/empty.vue
  11. 63 0
      components/evan-checkbox/evan-checkbox-group.vue
  12. 203 0
      components/evan-checkbox/evan-checkbox-popup.vue
  13. 222 0
      components/evan-checkbox/evan-checkbox.vue
  14. 51 0
      components/evan-radio/evan-radio-group.vue
  15. 229 0
      components/evan-radio/evan-radio.vue
  16. 395 0
      components/lb-picker/README.md
  17. 257 0
      components/lb-picker/index.vue
  18. 131 0
      components/lb-picker/pickers/multi-selector-picker.vue
  19. 99 0
      components/lb-picker/pickers/selector-picker.vue
  20. 120 0
      components/lb-picker/pickers/unlinked-selector-picker.vue
  21. 27 0
      components/lb-picker/style/picker-item.scss
  22. 94 0
      components/lb-picker/style/picker.scss
  23. 7 0
      components/lb-picker/utils.js
  24. 395 0
      components/picker/README.md
  25. 256 0
      components/picker/index.vue
  26. 131 0
      components/picker/pickers/multi-selector-picker.vue
  27. 99 0
      components/picker/pickers/selector-picker.vue
  28. 120 0
      components/picker/pickers/unlinked-selector-picker.vue
  29. 27 0
      components/picker/style/picker-item.scss
  30. 92 0
      components/picker/style/picker.scss
  31. 7 0
      components/picker/utils.js
  32. 196 0
      components/share.vue
  33. 206 0
      components/ss-calendar/ss-calendar.vue
  34. 1201 0
      components/tki-qrcode/qrcode.js
  35. 212 0
      components/tki-qrcode/tki-qrcode.vue
  36. 122 0
      components/uni-badge/uni-badge.vue
  37. 178 0
      components/uni-countdown/uni-countdown.vue
  38. 96 0
      components/uni-icons/icons.js
  39. 10 0
      components/uni-icons/uni-icons.vue
  40. 230 0
      components/uni-list-item/uni-list-item.vue
  41. 68 0
      components/uni-list/uni-list.vue
  42. 65 0
      components/uni-list/uni-refresh.vue
  43. 87 0
      components/uni-list/uni-refresh.wxs
  44. 194 0
      components/uni-load-more/uni-load-more.vue
  45. 397 0
      components/uni-notice-bar/uni-notice-bar.vue
  46. 198 0
      components/uni-number-box.vue
  47. 263 0
      components/uni-popup/uni-popup.vue
  48. 141 0
      components/uni-rate/uni-rate.vue
  49. 279 0
      components/uni-transition/uni-transition.vue
  50. 226 0
      components/upload-images.vue
  51. 11282 0
      components/w-picker/areadata/areadata.js
  52. 754 0
      components/w-picker/date-picker.vue
  53. 341 0
      components/w-picker/half-picker.vue
  54. 264 0
      components/w-picker/linkage-picker.vue
  55. 345 0
      components/w-picker/range-picker.vue
  56. 185 0
      components/w-picker/region-picker.vue
  57. 129 0
      components/w-picker/selector-picker.vue
  58. 252 0
      components/w-picker/shortterm-picker.vue
  59. 220 0
      components/w-picker/time-picker.vue
  60. 26 0
      components/w-picker/w-picker.css
  61. 346 0
      components/w-picker/w-picker.vue
  62. 5462 0
      components/wangding-pickerAddress/city-picker.data.js
  63. 151 0
      components/wangding-pickerAddress/data.js
  64. 155 0
      components/wangding-pickerAddress/wangding-pickerAddress.vue
  65. 44 0
      main.js
  66. 118 0
      manifest.json
  67. 30 0
      node_modules/jweixin-module/README.md
  68. 0 0
      node_modules/jweixin-module/out/index.js
  69. 60 0
      node_modules/jweixin-module/package.json
  70. 1121 0
      package-lock.json
  71. 224 0
      pages.json
  72. 153 0
      pages/address/address.vue
  73. 500 0
      pages/index/index.vue
  74. 602 0
      pages/public/agreement.vue
  75. 200 0
      pages/public/forget.vue
  76. 202 0
      pages/public/login.vue
  77. 140 0
      pages/public/privacy.vue
  78. 288 0
      pages/public/register.vue
  79. 290 0
      pages/public/wxLogin.vue
  80. 195 0
      pages/record/details.vue
  81. 236 0
      pages/record/help.vue
  82. 526 0
      pages/record/rescue.vue
  83. 125 0
      pages/redirect/redirect.vue
  84. 124 0
      pages/rescuers/ToKey.vue
  85. 519 0
      pages/rescuers/rescuers.vue
  86. 149 0
      pages/set/password.vue
  87. 171 0
      pages/set/phone.vue
  88. 103 0
      pages/set/set.vue
  89. 61 0
      pages/user/about.vue
  90. 246 0
      pages/user/user.vue
  91. 128 0
      pages/userinfo/userinfo.vue
  92. 142 0
      pagesA/record/call.vue
  93. 442 0
      static/css/cmy.css
  94. 二進制
      static/error/missing-face.png
  95. 二進制
      static/icon/img01.png
  96. 二進制
      static/icon/img03.png
  97. 二進制
      static/icon/img04.png
  98. 二進制
      static/icon/img06.png
  99. 二進制
      static/icon/img07.png
  100. 二進制
      static/icon/img09.png

+ 16 - 0
.hbuilderx/launch.json

@@ -0,0 +1,16 @@
+{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+    "version": "0.0",
+    "configurations": [{
+     	"default" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"mp-weixin" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"type" : "uniCloud"
+     }
+    ]
+}

+ 252 - 0
App.vue

@@ -0,0 +1,252 @@
+<script>
+/**
+ * vuex管理登陆状态,具体可以参考官方登陆模板示例
+ */
+import { mapMutations } from 'vuex';
+// #ifdef H5
+import { weixindata } from './utils/wxAuthorized';
+// #endif
+export default {
+	data() {
+		return {};
+	},
+	methods: {
+		...mapMutations(['login', 'hasLogin', 'setUserInfo', 'shopClick'])
+	},
+	onLaunch: function(urlObj) {
+		let obj = this;
+		// 加载缓存中的用户信息
+		let userInfo = uni.getStorageSync('userInfo') || '';
+		let token = uni.getStorageSync('token');
+		console.log(uni.getStorageSync('userInfo'),'app')
+		console.log(uni.getStorageSync('token'),"app")
+		// function getCookie(cname) {
+		// 	var name = cname + '=';
+		// 	var ca = document.cookie.split(';');
+		// 	for (var i = 0; i < ca.length; i++) {
+		// 		var c = ca[i].trim();
+		// 		if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
+		// 	}
+		// 	return '';
+		// }
+		// 判断是否拥有用户信息
+		if (userInfo.user_id) {
+			// 更新登录信息
+			obj.login();
+			//更新登陆状态
+			uni.getStorage({
+				key: 'userInfo',
+				success: res => {
+					obj.setUserInfo(res.data.user);
+				}
+			});
+		}
+		// #ifdef H5
+		//判断是否已经缓存浏览器
+		let bool = uni.getStorageSync('weichatBrowser') || '';
+		if (bool === '') {
+			//判断是否为微信浏览
+			bool = navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger';
+			// 保存当前是否为微信内核浏览器
+			uni.setStorageSync('weichatBrowser', bool);
+		}
+		// 判断是否为微信浏览器
+		if (bool) {
+			// 加载微信注册信息
+			weixindata();
+		}
+		// #endif
+	},
+	onShow: function() {
+		// 加载拦截
+		// console.log('App Show');
+	},
+	onHide: function() {
+		// console.log('App Hide');
+	}
+};
+</script>
+
+<style lang="scss">
+/*全局公共样式和字体图标*/
+@import '/static/css/cmy.css';
+view,
+scroll-view,
+swiper,
+swiper-item,
+cover-view,
+cover-image,
+icon,
+text,
+rich-text,
+progress,
+button,
+checkbox,
+form,
+input,
+label,
+radio,
+slider,
+switch,
+textarea,
+navigator,
+audio,
+camera,
+image,
+video {
+	box-sizing: border-box;
+}
+/* 骨架屏替代方案 */
+.Skeleton {
+	background: #f3f3f3;
+	padding: 20rpx 0;
+	border-radius: 8rpx;
+}
+
+/* 图片载入替代方案 */
+.image-wrapper {
+	font-size: 0;
+	background: #f3f3f3;
+	border-radius: 4px;
+	image {
+		width: 100%;
+		height: 100%;
+		transition: 0.6s;
+		opacity: 0;
+		&.loaded {
+			opacity: 1 !important;
+		}
+	}
+}
+// 设置富文本中图片最大宽度
+uni-rich-text img {
+	max-width: 100% !important;
+}
+/*边框*/
+.b-b:after,
+.b-t:after {
+	position: absolute;
+	z-index: 3;
+	left: 0;
+	right: 0;
+	height: 0;
+	content: '';
+	transform: scaleY(0.5);
+	border-bottom: 1px solid $border-color-base;
+}
+
+.b-b:after {
+	bottom: 0;
+}
+
+.b-t:after {
+	top: 0;
+}
+
+/* button样式改写 */
+uni-button,
+button {
+	height: 80rpx;
+	line-height: 80rpx;
+	font-size: $font-lg + 2rpx;
+	font-weight: normal;
+
+	&.no-border:before,
+	&.no-border:after {
+		border: 0;
+	}
+}
+
+uni-button[type='default'],
+button[type='default'] {
+	color: $font-color-dark;
+}
+
+/* input 样式 */
+.input-placeholder {
+	color: #999999;
+}
+
+.placeholder {
+	color: #999999;
+}
+// 边距样式
+@for $i from 1 to 4 {
+	.margin-l-#{$i * 10} {
+		margin-left: $i * 10rpx !important;
+	}
+	.margin-r-#{$i * 10} {
+		margin-right: $i * 10rpx !important;
+	}
+	.margin-t-#{$i * 10} {
+		margin-top: $i * 10rpx !important;
+	}
+	.margin-b-#{$i * 10} {
+		margin-bottom: $i * 10rpx !important;
+	}
+	.margin-#{$i * 10} {
+		margin: $i * 10rpx !important;
+	}
+	.margin-v-#{$i * 10} {
+		margin-top: $i * 10rpx !important;
+		margin-bottom: $i * 10rpx !important;
+	}
+	.margin-c-#{$i * 10} {
+		margin-left: $i * 10rpx !important;
+		margin-right: $i * 10rpx !important;
+	}
+	.padding-l-#{$i * 10} {
+		padding-left: $i * 10rpx !important;
+	}
+	.padding-r-#{$i * 10} {
+		padding-right: $i * 10rpx !important;
+	}
+	.padding-t-#{$i * 10} {
+		padding-top: $i * 10rpx !important;
+	}
+	.padding-b-#{$i * 10} {
+		padding-bottom: $i * 10rpx !important;
+	}
+	.padding-#{$i * 10} {
+		padding: $i * 10rpx !important;
+	}
+	.padding-v-#{$i * 10} {
+		padding-top: $i * 10rpx !important;
+		padding-bottom: $i * 10rpx !important;
+	}
+	.padding-c-#{$i * 10} {
+		padding-left: $i * 10rpx !important;
+		padding-right: $i * 10rpx !important;
+	}
+}
+// 字体大小
+.font-size-sm {
+	font-size: $font-sm;
+}
+.font-size-base {
+	font-size: $font-base;
+}
+.font-size-lg {
+	font-size: $font-lg;
+}
+// 字体颜色
+.font-color-yellow {
+	color: $color-yellow;
+}
+.font-color-gray {
+	color: $color-gray;
+}
+.font-color-red {
+	color: $color-red;
+}
+// 边框颜色
+.border-color-yellow {
+	border: 1rpx solid $color-yellow;
+}
+
+// 修改默认背景颜色
+uni-page-wrapper,
+page {
+	background-color: $page-color-base;
+}
+</style>

+ 10 - 0
api/index.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+// 促销商品
+export function groom4(data) {
+	return request({
+		url: '/api/groom/list/4',
+		method: 'get',
+		data
+	});
+}

+ 55 - 0
api/login.js

@@ -0,0 +1,55 @@
+import request from '@/utils/request'
+
+// 登录
+export function login(data) {
+	return request({
+		url: '/api/User/login',
+		method: 'post',
+		data
+	});
+}
+// 注册
+export function register(data) {
+	return request({
+		url: '/api/User/register',
+		method: 'post',
+		data
+	});
+}
+// 验证码
+export function verify(data) {
+	// type=register为注册
+	// type=login为登录
+	return request({
+		url: '/api/register/verify',
+		method: 'post',
+		data
+	});
+}
+
+// 获取用户信息
+export function getUserInfo(data) {
+	return request({
+		url: '/api/User/index',
+		method: 'post',
+		data
+	});
+}
+
+// 短信登录
+export function loginMobile(data) {
+	return request({
+		url: '/api/login/mobile',
+		method: 'post',
+		data
+	});
+}
+//绑定手机号
+export function bangding(data) {
+	return request({
+		url: '/api/user/bindPhone',
+		method: 'POST',
+		data
+	});
+}
+

+ 1123 - 0
api/qqmap-wx-jssdk.js

@@ -0,0 +1,1123 @@
+/**
+ * 微信小程序JavaScriptSDK
+ * 
+ * @version 1.2
+ * @date 2019-03-06
+ * @author v_ylyue@tencent.com
+ */
+
+var ERROR_CONF = {
+    KEY_ERR: 311,
+    KEY_ERR_MSG: 'key格式错误',
+    PARAM_ERR: 310,
+    PARAM_ERR_MSG: '请求参数信息有误',
+    SYSTEM_ERR: 600,
+    SYSTEM_ERR_MSG: '系统错误',
+    WX_ERR_CODE: 1000,
+    WX_OK_CODE: 200
+};
+var BASE_URL = 'https://apis.map.qq.com/ws/';
+var URL_SEARCH = BASE_URL + 'place/v1/search';
+var URL_SUGGESTION = BASE_URL + 'place/v1/suggestion';
+var URL_GET_GEOCODER = BASE_URL + 'geocoder/v1/';
+var URL_CITY_LIST = BASE_URL + 'district/v1/list';
+var URL_AREA_LIST = BASE_URL + 'district/v1/getchildren';
+var URL_DISTANCE = BASE_URL + 'distance/v1/';
+var URL_DIRECTION = BASE_URL + 'direction/v1/';
+var MODE = {
+  driving: 'driving',
+  transit: 'transit'
+};
+var EARTH_RADIUS = 6378136.49;
+var Utils = {
+  /**
+  * md5加密方法
+  * 版权所有©2011 Sebastian Tschan,https://blueimp.net
+  */
+  safeAdd(x, y) {
+    var lsw = (x & 0xffff) + (y & 0xffff);
+    var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+    return (msw << 16) | (lsw & 0xffff);
+  },
+  bitRotateLeft(num, cnt) {
+    return (num << cnt) | (num >>> (32 - cnt));
+  },
+  md5cmn(q, a, b, x, s, t) {
+    return this.safeAdd(this.bitRotateLeft(this.safeAdd(this.safeAdd(a, q), this.safeAdd(x, t)), s), b);
+  },
+  md5ff(a, b, c, d, x, s, t) {
+    return this.md5cmn((b & c) | (~b & d), a, b, x, s, t);
+  },
+  md5gg(a, b, c, d, x, s, t) {
+    return this.md5cmn((b & d) | (c & ~d), a, b, x, s, t);
+  },
+  md5hh(a, b, c, d, x, s, t) {
+    return this.md5cmn(b ^ c ^ d, a, b, x, s, t);
+  },
+  md5ii(a, b, c, d, x, s, t) {
+    return this.md5cmn(c ^ (b | ~d), a, b, x, s, t);
+  },
+  binlMD5(x, len) {
+    /* append padding */
+    x[len >> 5] |= 0x80 << (len % 32);
+    x[((len + 64) >>> 9 << 4) + 14] = len;
+
+    var i;
+    var olda;
+    var oldb;
+    var oldc;
+    var oldd;
+    var a = 1732584193;
+    var b = -271733879;
+    var c = -1732584194;
+    var d = 271733878;
+
+    for (i = 0; i < x.length; i += 16) {
+      olda = a;
+      oldb = b;
+      oldc = c;
+      oldd = d;
+
+      a = this.md5ff(a, b, c, d, x[i], 7, -680876936);
+      d = this.md5ff(d, a, b, c, x[i + 1], 12, -389564586);
+      c = this.md5ff(c, d, a, b, x[i + 2], 17, 606105819);
+      b = this.md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
+      a = this.md5ff(a, b, c, d, x[i + 4], 7, -176418897);
+      d = this.md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
+      c = this.md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
+      b = this.md5ff(b, c, d, a, x[i + 7], 22, -45705983);
+      a = this.md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
+      d = this.md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
+      c = this.md5ff(c, d, a, b, x[i + 10], 17, -42063);
+      b = this.md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
+      a = this.md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
+      d = this.md5ff(d, a, b, c, x[i + 13], 12, -40341101);
+      c = this.md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
+      b = this.md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+      a = this.md5gg(a, b, c, d, x[i + 1], 5, -165796510);
+      d = this.md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
+      c = this.md5gg(c, d, a, b, x[i + 11], 14, 643717713);
+      b = this.md5gg(b, c, d, a, x[i], 20, -373897302);
+      a = this.md5gg(a, b, c, d, x[i + 5], 5, -701558691);
+      d = this.md5gg(d, a, b, c, x[i + 10], 9, 38016083);
+      c = this.md5gg(c, d, a, b, x[i + 15], 14, -660478335);
+      b = this.md5gg(b, c, d, a, x[i + 4], 20, -405537848);
+      a = this.md5gg(a, b, c, d, x[i + 9], 5, 568446438);
+      d = this.md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
+      c = this.md5gg(c, d, a, b, x[i + 3], 14, -187363961);
+      b = this.md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
+      a = this.md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
+      d = this.md5gg(d, a, b, c, x[i + 2], 9, -51403784);
+      c = this.md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
+      b = this.md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+      a = this.md5hh(a, b, c, d, x[i + 5], 4, -378558);
+      d = this.md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
+      c = this.md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
+      b = this.md5hh(b, c, d, a, x[i + 14], 23, -35309556);
+      a = this.md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
+      d = this.md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
+      c = this.md5hh(c, d, a, b, x[i + 7], 16, -155497632);
+      b = this.md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
+      a = this.md5hh(a, b, c, d, x[i + 13], 4, 681279174);
+      d = this.md5hh(d, a, b, c, x[i], 11, -358537222);
+      c = this.md5hh(c, d, a, b, x[i + 3], 16, -722521979);
+      b = this.md5hh(b, c, d, a, x[i + 6], 23, 76029189);
+      a = this.md5hh(a, b, c, d, x[i + 9], 4, -640364487);
+      d = this.md5hh(d, a, b, c, x[i + 12], 11, -421815835);
+      c = this.md5hh(c, d, a, b, x[i + 15], 16, 530742520);
+      b = this.md5hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+      a = this.md5ii(a, b, c, d, x[i], 6, -198630844);
+      d = this.md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
+      c = this.md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
+      b = this.md5ii(b, c, d, a, x[i + 5], 21, -57434055);
+      a = this.md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
+      d = this.md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
+      c = this.md5ii(c, d, a, b, x[i + 10], 15, -1051523);
+      b = this.md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
+      a = this.md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
+      d = this.md5ii(d, a, b, c, x[i + 15], 10, -30611744);
+      c = this.md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
+      b = this.md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
+      a = this.md5ii(a, b, c, d, x[i + 4], 6, -145523070);
+      d = this.md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
+      c = this.md5ii(c, d, a, b, x[i + 2], 15, 718787259);
+      b = this.md5ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+      a = this.safeAdd(a, olda);
+      b = this.safeAdd(b, oldb);
+      c = this.safeAdd(c, oldc);
+      d = this.safeAdd(d, oldd);
+    }
+    return [a, b, c, d];
+  },
+  binl2rstr(input) {
+    var i;
+    var output = '';
+    var length32 = input.length * 32;
+    for (i = 0; i < length32; i += 8) {
+      output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
+    }
+    return output;
+  },
+  rstr2binl(input) {
+    var i;
+    var output = [];
+    output[(input.length >> 2) - 1] = undefined;
+    for (i = 0; i < output.length; i += 1) {
+      output[i] = 0;
+    }
+    var length8 = input.length * 8;
+    for (i = 0; i < length8; i += 8) {
+      output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
+    }
+    return output;
+  },
+  rstrMD5(s) {
+    return this.binl2rstr(this.binlMD5(this.rstr2binl(s), s.length * 8));
+  },
+  rstrHMACMD5(key, data) {
+    var i;
+    var bkey = this.rstr2binl(key);
+    var ipad = [];
+    var opad = [];
+    var hash;
+    ipad[15] = opad[15] = undefined;
+    if (bkey.length > 16) {
+      bkey = this.binlMD5(bkey, key.length * 8);
+    }
+    for (i = 0; i < 16; i += 1) {
+      ipad[i] = bkey[i] ^ 0x36363636;
+      opad[i] = bkey[i] ^ 0x5c5c5c5c;
+    }
+    hash = this.binlMD5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8);
+    return this.binl2rstr(this.binlMD5(opad.concat(hash), 512 + 128));
+  },
+  rstr2hex(input) {
+    var hexTab = '0123456789abcdef';
+    var output = '';
+    var x;
+    var i;
+    for (i = 0; i < input.length; i += 1) {
+      x = input.charCodeAt(i);
+      output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
+    }
+    return output;
+  },
+  str2rstrUTF8(input) {
+    return unescape(encodeURIComponent(input));
+  },
+  rawMD5(s) {
+    return this.rstrMD5(this.str2rstrUTF8(s));
+  },
+  hexMD5(s) {
+    return this.rstr2hex(this.rawMD5(s));
+  },
+  rawHMACMD5(k, d) {
+    return this.rstrHMACMD5(this.str2rstrUTF8(k), str2rstrUTF8(d));
+  },
+  hexHMACMD5(k, d) {
+    return this.rstr2hex(this.rawHMACMD5(k, d));
+  },
+
+  md5(string, key, raw) {
+    if (!key) {
+      if (!raw) {
+        return this.hexMD5(string);
+      }
+      return this.rawMD5(string);
+    }
+    if (!raw) {
+      return this.hexHMACMD5(key, string);
+    }
+    return this.rawHMACMD5(key, string);
+  },
+  /**
+   * 得到md5加密后的sig参数
+   * @param {Object} requestParam 接口参数
+   * @param {String} sk签名字符串
+   * @param {String} featrue 方法名
+   * @return 返回加密后的sig参数
+   */
+  getSig(requestParam, sk, feature, mode) {
+    var sig = null;
+    var requestArr = [];
+    Object.keys(requestParam).sort().forEach(function(key){
+      requestArr.push(key + '=' + requestParam[key]);
+    });
+    if (feature == 'search') {
+      sig = '/ws/place/v1/search?' + requestArr.join('&') + sk;
+    }
+    if (feature == 'suggest') {
+      sig = '/ws/place/v1/suggestion?' + requestArr.join('&') + sk;
+    }
+    if (feature == 'reverseGeocoder') {
+      sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk;
+    }
+    if (feature == 'geocoder') {
+      sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk;
+    }
+    if (feature == 'getCityList') {
+      sig = '/ws/district/v1/list?' + requestArr.join('&') + sk;
+    }
+    if (feature == 'getDistrictByCityId') {
+      sig = '/ws/district/v1/getchildren?' + requestArr.join('&') + sk;
+    }
+    if (feature == 'calculateDistance') {
+      sig = '/ws/distance/v1/?' + requestArr.join('&') + sk;
+    }
+    if (feature == 'direction') {
+      sig = '/ws/direction/v1/' + mode + '?' + requestArr.join('&') + sk;
+    }
+    sig = this.md5(sig);
+    return sig;
+  },
+    /**
+     * 得到终点query字符串
+     * @param {Array|String} 检索数据
+     */
+    location2query(data) {
+        if (typeof data == 'string') {
+            return data;
+        }
+        var query = '';
+        for (var i = 0; i < data.length; i++) {
+            var d = data[i];
+            if (!!query) {
+                query += ';';
+            }
+            if (d.location) {
+                query = query + d.location.lat + ',' + d.location.lng;
+            }
+            if (d.latitude && d.longitude) {
+                query = query + d.latitude + ',' + d.longitude;
+            }
+        }
+        return query;
+    },
+
+    /**
+     * 计算角度
+     */
+    rad(d) {
+      return d * Math.PI / 180.0;
+    },  
+    /**
+     * 处理终点location数组
+     * @return 返回终点数组
+     */
+    getEndLocation(location){
+      var to = location.split(';');
+      var endLocation = [];
+      for (var i = 0; i < to.length; i++) {
+        endLocation.push({
+          lat: parseFloat(to[i].split(',')[0]),
+          lng: parseFloat(to[i].split(',')[1])
+        })
+      }
+      return endLocation;
+    },
+
+    /**
+     * 计算两点间直线距离
+     * @param a 表示纬度差
+     * @param b 表示经度差
+     * @return 返回的是距离,单位m
+     */
+    getDistance(latFrom, lngFrom, latTo, lngTo) {
+      var radLatFrom = this.rad(latFrom);
+      var radLatTo = this.rad(latTo);
+      var a = radLatFrom - radLatTo;
+      var b = this.rad(lngFrom) - this.rad(lngTo);
+      var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLatFrom) * Math.cos(radLatTo) * Math.pow(Math.sin(b / 2), 2)));
+      distance = distance * EARTH_RADIUS;
+      distance = Math.round(distance * 10000) / 10000;
+      return parseFloat(distance.toFixed(0));
+    },
+    /**
+     * 使用微信接口进行定位
+     */
+    getWXLocation(success, fail, complete) {
+        wx.getLocation({
+            type: 'gcj02',
+            success: success,
+            fail: fail,
+            complete: complete
+        });
+    },
+
+    /**
+     * 获取location参数
+     */
+    getLocationParam(location) {
+        if (typeof location == 'string') {
+            var locationArr = location.split(',');
+            if (locationArr.length === 2) {
+                location = {
+                    latitude: location.split(',')[0],
+                    longitude: location.split(',')[1]
+                };
+            } else {
+                location = {};
+            }
+        }
+        return location;
+    },
+
+    /**
+     * 回调函数默认处理
+     */
+    polyfillParam(param) {
+        param.success = param.success || function () { };
+        param.fail = param.fail || function () { };
+        param.complete = param.complete || function () { };
+    },
+
+    /**
+     * 验证param对应的key值是否为空
+     * 
+     * @param {Object} param 接口参数
+     * @param {String} key 对应参数的key
+     */
+    checkParamKeyEmpty(param, key) {
+        if (!param[key]) {
+            var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + key +'参数格式有误');
+            param.fail(errconf);
+            param.complete(errconf);
+            return true;
+        }
+        return false;
+    },
+
+    /**
+     * 验证参数中是否存在检索词keyword
+     * 
+     * @param {Object} param 接口参数
+     */
+    checkKeyword(param){
+        return !this.checkParamKeyEmpty(param, 'keyword');
+    },
+
+    /**
+     * 验证location值
+     * 
+     * @param {Object} param 接口参数
+     */
+    checkLocation(param) {
+        var location = this.getLocationParam(param.location);
+        if (!location || !location.latitude || !location.longitude) {
+            var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + ' location参数格式有误');
+            param.fail(errconf);
+            param.complete(errconf);
+            return false;
+        }
+        return true;
+    },
+
+    /**
+     * 构造错误数据结构
+     * @param {Number} errCode 错误码
+     * @param {Number} errMsg 错误描述
+     */
+    buildErrorConfig(errCode, errMsg) {
+        return {
+            status: errCode,
+            message: errMsg
+        };
+    },
+
+    /**
+     * 
+     * 数据处理函数
+     * 根据传入参数不同处理不同数据
+     * @param {String} feature 功能名称
+     * search 地点搜索
+     * suggest关键词提示
+     * reverseGeocoder逆地址解析
+     * geocoder地址解析
+     * getCityList获取城市列表:父集
+     * getDistrictByCityId获取区县列表:子集
+     * calculateDistance距离计算
+     * @param {Object} param 接口参数
+     * @param {Object} data 数据
+     */
+    handleData(param,data,feature){
+      if (feature == 'search') {
+        var searchResult = data.data;
+        var searchSimplify = [];
+        for (var i = 0; i < searchResult.length; i++) {
+          searchSimplify.push({
+            id: searchResult[i].id || null,
+            title: searchResult[i].title || null,
+            latitude: searchResult[i].location && searchResult[i].location.lat || null,
+            longitude: searchResult[i].location && searchResult[i].location.lng || null,
+            address: searchResult[i].address || null,
+            category: searchResult[i].category || null,
+            tel: searchResult[i].tel || null,
+            adcode: searchResult[i].ad_info && searchResult[i].ad_info.adcode || null,
+            city: searchResult[i].ad_info && searchResult[i].ad_info.city || null,
+            district: searchResult[i].ad_info && searchResult[i].ad_info.district || null,
+            province: searchResult[i].ad_info && searchResult[i].ad_info.province || null
+          })
+        }
+        param.success(data, {
+          searchResult: searchResult,
+          searchSimplify: searchSimplify
+        })
+      } else if (feature == 'suggest') {
+        var suggestResult = data.data;
+        var suggestSimplify = [];
+        for (var i = 0; i < suggestResult.length; i++) {
+          suggestSimplify.push({
+            adcode: suggestResult[i].adcode || null,
+            address: suggestResult[i].address || null,
+            category: suggestResult[i].category || null,
+            city: suggestResult[i].city || null,
+            district: suggestResult[i].district || null,
+            id: suggestResult[i].id || null,
+            latitude: suggestResult[i].location && suggestResult[i].location.lat || null,
+            longitude: suggestResult[i].location && suggestResult[i].location.lng || null,
+            province: suggestResult[i].province || null,
+            title: suggestResult[i].title || null,
+            type: suggestResult[i].type || null
+          })
+        }
+        param.success(data, {
+          suggestResult: suggestResult,
+          suggestSimplify: suggestSimplify
+          })
+      } else if (feature == 'reverseGeocoder') {
+        var reverseGeocoderResult = data.result;
+        var reverseGeocoderSimplify = {
+          address: reverseGeocoderResult.address || null,
+          latitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lat || null,
+          longitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lng || null,
+          adcode: reverseGeocoderResult.ad_info && reverseGeocoderResult.ad_info.adcode || null,
+          city: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.city || null,
+          district: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.district || null,
+          nation: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.nation || null,
+          province: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.province || null,
+          street: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street || null,
+          street_number: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street_number || null,
+          recommend: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.recommend || null,
+          rough: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.rough || null
+        };
+        if (reverseGeocoderResult.pois) {//判断是否返回周边poi
+          var pois = reverseGeocoderResult.pois;
+          var poisSimplify = [];
+          for (var i = 0;i < pois.length;i++) {
+            poisSimplify.push({
+              id: pois[i].id || null,
+              title: pois[i].title || null,
+              latitude: pois[i].location && pois[i].location.lat || null,
+              longitude: pois[i].location && pois[i].location.lng || null,
+              address: pois[i].address || null,
+              category: pois[i].category || null,
+              adcode: pois[i].ad_info && pois[i].ad_info.adcode || null,
+              city: pois[i].ad_info && pois[i].ad_info.city || null,
+              district: pois[i].ad_info && pois[i].ad_info.district || null,
+              province: pois[i].ad_info && pois[i].ad_info.province || null
+            })
+          }
+          param.success(data,{
+            reverseGeocoderResult: reverseGeocoderResult,
+            reverseGeocoderSimplify: reverseGeocoderSimplify,
+            pois: pois,
+            poisSimplify: poisSimplify
+          })
+        } else {
+          param.success(data, {
+            reverseGeocoderResult: reverseGeocoderResult,
+            reverseGeocoderSimplify: reverseGeocoderSimplify
+          })
+        }
+      } else if (feature == 'geocoder') {
+        var geocoderResult = data.result;
+        var geocoderSimplify = {
+          title: geocoderResult.title || null,
+          latitude: geocoderResult.location && geocoderResult.location.lat || null,
+          longitude: geocoderResult.location && geocoderResult.location.lng || null,
+          adcode: geocoderResult.ad_info && geocoderResult.ad_info.adcode || null,
+          province: geocoderResult.address_components && geocoderResult.address_components.province || null,
+          city: geocoderResult.address_components && geocoderResult.address_components.city || null,
+          district: geocoderResult.address_components && geocoderResult.address_components.district || null,
+          street: geocoderResult.address_components && geocoderResult.address_components.street || null,
+          street_number: geocoderResult.address_components && geocoderResult.address_components.street_number || null,
+          level: geocoderResult.level || null
+        };
+        param.success(data,{
+          geocoderResult: geocoderResult,
+          geocoderSimplify: geocoderSimplify
+        });
+      } else if (feature == 'getCityList') {
+        var provinceResult = data.result[0];
+        var cityResult = data.result[1];
+        var districtResult = data.result[2];
+        param.success(data,{
+          provinceResult: provinceResult,
+          cityResult: cityResult,
+          districtResult: districtResult
+        });
+      } else if (feature == 'getDistrictByCityId') {
+        var districtByCity = data.result[0];
+        param.success(data, districtByCity);
+      } else if (feature == 'calculateDistance') {
+        var calculateDistanceResult = data.result.elements;  
+        var distance = [];
+        for (var i = 0; i < calculateDistanceResult.length; i++){
+          distance.push(calculateDistanceResult[i].distance);
+        }   
+        param.success(data, {
+          calculateDistanceResult: calculateDistanceResult,
+          distance: distance
+          });
+      } else if (feature == 'direction') {
+        var direction = data.result.routes;
+        param.success(data,direction);
+      } else {
+        param.success(data);
+      }
+    },
+
+    /**
+     * 构造微信请求参数,公共属性处理
+     * 
+     * @param {Object} param 接口参数
+     * @param {Object} param 配置项
+     * @param {String} feature 方法名
+     */
+    buildWxRequestConfig(param, options, feature) {
+        var that = this;
+        options.header = { "content-type": "application/json" };
+        options.method = 'GET';
+        options.success = function (res) {
+            var data = res.data;
+            if (data.status === 0) {
+              that.handleData(param, data, feature);
+            } else {
+                param.fail(data);
+            }
+        };
+        options.fail = function (res) {
+            res.statusCode = ERROR_CONF.WX_ERR_CODE;
+            param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
+        };
+        options.complete = function (res) {
+            var statusCode = +res.statusCode;
+            switch(statusCode) {
+                case ERROR_CONF.WX_ERR_CODE: {
+                    param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
+                    break;
+                }
+                case ERROR_CONF.WX_OK_CODE: {
+                    var data = res.data;
+                    if (data.status === 0) {
+                        param.complete(data);
+                    } else {
+                        param.complete(that.buildErrorConfig(data.status, data.message));
+                    }
+                    break;
+                }
+                default:{
+                    param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG));
+                }
+
+            }
+        };
+        return options;
+    },
+
+    /**
+     * 处理用户参数是否传入坐标进行不同的处理
+     */
+    locationProcess(param, locationsuccess, locationfail, locationcomplete) {
+        var that = this;
+        locationfail = locationfail || function (res) {
+            res.statusCode = ERROR_CONF.WX_ERR_CODE;
+            param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
+        };
+        locationcomplete = locationcomplete || function (res) {
+            if (res.statusCode == ERROR_CONF.WX_ERR_CODE) {
+                param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
+            }
+        };
+        if (!param.location) {
+            that.getWXLocation(locationsuccess, locationfail, locationcomplete);
+        } else if (that.checkLocation(param)) {
+            var location = Utils.getLocationParam(param.location);
+            locationsuccess(location);
+        }
+    }
+};
+
+
+class QQMapWX {
+
+    /**
+     * 构造函数
+     * 
+     * @param {Object} options 接口参数,key 为必选参数
+     */
+    constructor(options) {
+        if (!options.key) {
+            throw Error('key值不能为空');
+        }
+        this.key = options.key;
+    };
+
+    /**
+     * POI周边检索
+     *
+     * @param {Object} options 接口参数对象
+     * 
+     * 参数对象结构可以参考
+     * @see http://lbs.qq.com/webservice_v1/guide-search.html
+     */
+    search(options) {
+        var that = this;
+        options = options || {};
+
+        Utils.polyfillParam(options);
+
+        if (!Utils.checkKeyword(options)) {
+            return;
+        }
+
+        var requestParam = {
+            keyword: options.keyword,
+            orderby: options.orderby || '_distance',
+            page_size: options.page_size || 10,
+            page_index: options.page_index || 1,
+            output: 'json',
+            key: that.key
+        };
+
+        if (options.address_format) {
+            requestParam.address_format = options.address_format;
+        }
+
+        if (options.filter) {
+            requestParam.filter = options.filter;
+        }
+
+        var distance = options.distance || "1000";
+        var auto_extend = options.auto_extend || 1;
+        var region = null;
+        var rectangle = null;
+
+        //判断城市限定参数
+        if (options.region) {
+          region = options.region;
+        }
+
+        //矩形限定坐标(暂时只支持字符串格式)
+        if (options.rectangle) {
+          rectangle = options.rectangle;
+        }
+
+        var locationsuccess = function (result) {        
+          if (region && !rectangle) {
+            //城市限定参数拼接
+            requestParam.boundary = "region(" + region + "," + auto_extend + "," + result.latitude + "," + result.longitude + ")";
+            if (options.sig) {
+              requestParam.sig = Utils.getSig(requestParam, options.sig, 'search');
+            }
+          } else if (rectangle && !region) {
+            //矩形搜索
+            requestParam.boundary = "rectangle(" + rectangle + ")";
+            if (options.sig) {
+              requestParam.sig = Utils.getSig(requestParam, options.sig, 'search');
+            }
+            } else {
+              requestParam.boundary = "nearby(" + result.latitude + "," + result.longitude + "," + distance + "," + auto_extend + ")";
+            if (options.sig) {
+              requestParam.sig = Utils.getSig(requestParam, options.sig, 'search');
+            }
+            }            
+            wx.request(Utils.buildWxRequestConfig(options, {
+                url: URL_SEARCH,
+                data: requestParam
+            }, 'search'));
+        };
+        Utils.locationProcess(options, locationsuccess);
+    };
+
+    /**
+     * sug模糊检索
+     *
+     * @param {Object} options 接口参数对象
+     * 
+     * 参数对象结构可以参考
+     * http://lbs.qq.com/webservice_v1/guide-suggestion.html
+     */
+    getSuggestion(options) {
+        var that = this;
+        options = options || {};
+        Utils.polyfillParam(options);
+
+        if (!Utils.checkKeyword(options)) {
+            return;
+        }
+
+        var requestParam = {
+            keyword: options.keyword,
+            region: options.region || '全国',
+            region_fix: options.region_fix || 0,
+            policy: options.policy || 0,
+            page_size: options.page_size || 10,//控制显示条数
+            page_index: options.page_index || 1,//控制页数
+            get_subpois : options.get_subpois || 0,//返回子地点
+            output: 'json',
+            key: that.key
+        };
+        //长地址
+        if (options.address_format) {
+          requestParam.address_format = options.address_format;
+        }
+        //过滤
+        if (options.filter) {
+          requestParam.filter = options.filter;
+        }
+        //排序
+        if (options.location) {
+          var locationsuccess = function (result) {
+            requestParam.location = result.latitude + ',' + result.longitude;
+            if (options.sig) {
+              requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest');
+            }
+            wx.request(Utils.buildWxRequestConfig(options, {
+              url: URL_SUGGESTION,
+              data: requestParam
+            }, "suggest"));      
+          };
+          Utils.locationProcess(options, locationsuccess);
+        } else {
+          if (options.sig) {
+            requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest');
+          }
+          wx.request(Utils.buildWxRequestConfig(options, {
+            url: URL_SUGGESTION,
+            data: requestParam
+          }, "suggest"));      
+        }        
+    };
+
+    /**
+     * 逆地址解析
+     *
+     * @param {Object} options 接口参数对象
+     * 
+     * 请求参数结构可以参考
+     * http://lbs.qq.com/webservice_v1/guide-gcoder.html
+     */
+    reverseGeocoder(options) {
+        var that = this;
+        options = options || {};
+        Utils.polyfillParam(options);
+        var requestParam = {
+            coord_type: options.coord_type || 5,
+            get_poi: options.get_poi || 0,
+            output: 'json',
+            key: that.key
+        };
+        if (options.poi_options) {
+            requestParam.poi_options = options.poi_options
+        }
+
+        var locationsuccess = function (result) {
+            requestParam.location = result.latitude + ',' + result.longitude;
+          if (options.sig) {
+            requestParam.sig = Utils.getSig(requestParam, options.sig, 'reverseGeocoder');
+          }
+            wx.request(Utils.buildWxRequestConfig(options, {
+                url: URL_GET_GEOCODER,
+                data: requestParam
+            }, 'reverseGeocoder'));
+        };
+        Utils.locationProcess(options, locationsuccess);
+    };
+
+    /**
+     * 地址解析
+     *
+     * @param {Object} options 接口参数对象
+     * 
+     * 请求参数结构可以参考
+     * http://lbs.qq.com/webservice_v1/guide-geocoder.html
+     */
+    geocoder(options) {
+        var that = this;
+        options = options || {};
+        Utils.polyfillParam(options);
+
+        if (Utils.checkParamKeyEmpty(options, 'address')) {
+            return;
+        }
+
+        var requestParam = {
+            address: options.address,
+            output: 'json',
+            key: that.key
+        };
+
+        //城市限定
+        if (options.region) {
+          requestParam.region = options.region;
+        }
+
+        if (options.sig) {
+          requestParam.sig = Utils.getSig(requestParam, options.sig, 'geocoder');
+        }
+
+        wx.request(Utils.buildWxRequestConfig(options, {
+            url: URL_GET_GEOCODER,
+            data: requestParam
+        },'geocoder'));
+    };
+
+
+    /**
+     * 获取城市列表
+     *
+     * @param {Object} options 接口参数对象
+     * 
+     * 请求参数结构可以参考
+     * http://lbs.qq.com/webservice_v1/guide-region.html
+     */
+    getCityList(options) {
+        var that = this;
+        options = options || {};
+        Utils.polyfillParam(options);
+        var requestParam = {
+            output: 'json',
+            key: that.key
+        };
+
+        if (options.sig) {
+          requestParam.sig = Utils.getSig(requestParam, options.sig, 'getCityList');
+        }
+
+        wx.request(Utils.buildWxRequestConfig(options, {
+            url: URL_CITY_LIST,
+            data: requestParam
+        },'getCityList'));
+    };
+
+    /**
+     * 获取对应城市ID的区县列表
+     *
+     * @param {Object} options 接口参数对象
+     * 
+     * 请求参数结构可以参考
+     * http://lbs.qq.com/webservice_v1/guide-region.html
+     */
+    getDistrictByCityId(options) {
+        var that = this;
+        options = options || {};
+        Utils.polyfillParam(options);
+
+        if (Utils.checkParamKeyEmpty(options, 'id')) {
+            return;
+        }
+
+        var requestParam = {
+            id: options.id || '',
+            output: 'json',
+            key: that.key
+        };
+
+        if (options.sig) {
+          requestParam.sig = Utils.getSig(requestParam, options.sig, 'getDistrictByCityId');
+        }
+
+        wx.request(Utils.buildWxRequestConfig(options, {
+            url: URL_AREA_LIST,
+            data: requestParam
+        },'getDistrictByCityId'));
+    };
+
+    /**
+     * 用于单起点到多终点的路线距离(非直线距离)计算:
+     * 支持两种距离计算方式:步行和驾车。
+     * 起点到终点最大限制直线距离10公里。
+     *
+     * 新增直线距离计算。
+     * 
+     * @param {Object} options 接口参数对象
+     * 
+     * 请求参数结构可以参考
+     * http://lbs.qq.com/webservice_v1/guide-distance.html
+     */
+    calculateDistance(options) {
+        var that = this;
+        options = options || {};
+        Utils.polyfillParam(options);
+
+        if (Utils.checkParamKeyEmpty(options, 'to')) {
+            return;
+        }
+
+        var requestParam = {
+            mode: options.mode || 'walking',
+            to: Utils.location2query(options.to),
+            output: 'json',
+            key: that.key
+        };
+
+        if (options.from) {
+          options.location = options.from;
+        }
+
+        //计算直线距离
+        if(requestParam.mode == 'straight'){        
+          var locationsuccess = function (result) {
+            var locationTo = Utils.getEndLocation(requestParam.to);//处理终点坐标
+            var data = {
+              message:"query ok",
+              result:{
+                elements:[]
+              },
+              status:0
+            };
+            for (var i = 0; i < locationTo.length; i++) {
+              data.result.elements.push({//将坐标存入
+                distance: Utils.getDistance(result.latitude, result.longitude, locationTo[i].lat, locationTo[i].lng),
+                duration:0,
+                from:{
+                  lat: result.latitude,
+                  lng:result.longitude
+                },
+                to:{
+                  lat: locationTo[i].lat,
+                  lng: locationTo[i].lng
+                }
+              });            
+            }
+            var calculateResult = data.result.elements;
+            var distanceResult = [];
+            for (var i = 0; i < calculateResult.length; i++) {
+              distanceResult.push(calculateResult[i].distance);
+            }  
+            return options.success(data,{
+              calculateResult: calculateResult,
+              distanceResult: distanceResult
+            });
+          };
+          
+          Utils.locationProcess(options, locationsuccess);
+        } else {
+          var locationsuccess = function (result) {
+            requestParam.from = result.latitude + ',' + result.longitude;
+            if (options.sig) {
+              requestParam.sig = Utils.getSig(requestParam, options.sig, 'calculateDistance');
+            }
+            wx.request(Utils.buildWxRequestConfig(options, {
+              url: URL_DISTANCE,
+              data: requestParam
+            },'calculateDistance'));
+          };
+
+          Utils.locationProcess(options, locationsuccess);
+        }      
+    };
+
+  /**
+   * 路线规划:
+   * 
+   * @param {Object} options 接口参数对象
+   * 
+   * 请求参数结构可以参考
+   * https://lbs.qq.com/webservice_v1/guide-road.html
+   */
+  direction(options) {
+    var that = this;
+    options = options || {};
+    Utils.polyfillParam(options);
+
+    if (Utils.checkParamKeyEmpty(options, 'to')) {
+      return;
+    }
+
+    var requestParam = {
+      output: 'json',
+      key: that.key
+    };
+
+    //to格式处理
+    if (typeof options.to == 'string') {
+      requestParam.to = options.to;
+    } else {
+      requestParam.to = options.to.latitude + ',' + options.to.longitude;
+    }
+    //初始化局部请求域名
+    var SET_URL_DIRECTION = null;
+    //设置默认mode属性
+    options.mode = options.mode || MODE.driving;
+
+    //设置请求域名
+    SET_URL_DIRECTION = URL_DIRECTION + options.mode;
+
+    if (options.from) {
+      options.location = options.from;
+    }
+
+    if (options.mode == MODE.driving) {
+      if (options.from_poi) {
+        requestParam.from_poi = options.from_poi;
+      }
+      if (options.heading) {
+        requestParam.heading = options.heading;
+      }
+      if (options.speed) {
+        requestParam.speed = options.speed;
+      }
+      if (options.accuracy) {
+        requestParam.accuracy = options.accuracy;
+      }
+      if (options.road_type) {
+        requestParam.road_type = options.road_type;
+      }
+      if (options.to_poi) {
+        requestParam.to_poi = options.to_poi;
+      }
+      if (options.from_track) {
+        requestParam.from_track = options.from_track;
+      }
+      if (options.waypoints) {
+        requestParam.waypoints = options.waypoints;
+      }
+      if (options.policy) {
+        requestParam.policy = options.policy;
+      }
+      if (options.plate_number) {
+        requestParam.plate_number = options.plate_number;
+      }
+    }
+
+    if (options.mode == MODE.transit) {
+      if (options.departure_time) {
+        requestParam.departure_time = options.departure_time;
+      }
+      if (options.policy) {
+        requestParam.policy = options.policy;
+      }
+    } 
+
+    var locationsuccess = function (result) {
+      requestParam.from = result.latitude + ',' + result.longitude;
+      if (options.sig) {
+        requestParam.sig = Utils.getSig(requestParam, options.sig, 'direction',options.mode);
+      }
+      wx.request(Utils.buildWxRequestConfig(options, {
+        url: SET_URL_DIRECTION,
+        data: requestParam
+      }, 'direction'));
+    };
+
+    Utils.locationProcess(options, locationsuccess);
+  }
+};
+
+module.exports = QQMapWX;

+ 124 - 0
api/record.js

@@ -0,0 +1,124 @@
+import request from '@/utils/request'
+import {upFilse} from '@/utils/request'
+
+// 求救记录
+export function mySosList(data) {
+	return request({
+		url: '/api/Sos/mySosList',
+		method: 'post',
+		data
+	});
+}
+
+// 援助记录
+export function toMySosList(data) {
+	return request({
+		url: '/api/Sos/toMySosList',
+		method: 'post',
+		data
+	});
+}
+// 救援者列表
+export function getAroundHelper(data) {
+	return request({
+		url: '/api/Sos/getAroundHelper',
+		method: 'post',
+		data
+	});
+}
+// 申请成为救援者
+export function toBeHelper(data) {
+	return request({
+		url: '/api/Sos/toBeHelper',
+		method: 'post',
+		data
+	});
+}
+//上传图片
+export function upload(data) {
+	return upFilse({
+		url: '/api/Common/upload',
+		method: 'post',
+		data
+	});
+}
+//机构列表
+export function hospitalList(data) {
+	return request({
+		url: '/api/Hospital/hospitalList',
+		method: 'post',
+		data
+	});
+}
+//发送求救信息
+export function sendSos(data) {
+	return request({
+		url: '/api/Sos/sendSos',
+		method: 'post',
+		data
+	});
+}
+//接受求救信号
+export function accessSos(data) {
+	return request({
+		url: '/api/Sos/accessSos',
+		method: 'post',
+		data
+	});
+}
+//拒接求救信号
+export function refuseSos(data) {
+	return request({
+		url: '/api/Sos/refuseSos',
+		method: 'post',
+		data
+	});
+}
+//救援记录详情
+export function sosInfo(data) {
+	return request({
+		url: '/api/Sos/sosInfo',
+		method: 'post',
+		data
+	});
+}
+//救援记录详情
+export function successSos(data) {
+	return request({
+		url: '/api/Sos/successSos',
+		method: 'post',
+		data
+	});
+}
+//所有的救援者
+export function getAllHelper(data) {
+	return request({
+		url: '/api/Sos/getAllHelper',
+		method: 'post',
+		data
+	});
+}
+//最新待救援
+export function newSos(data) {
+	return request({
+		url: '/api/Sos/newSos',
+		method: 'post',
+		data
+	});
+}
+//修改常用地址
+export function changePoint(data) {
+	return request({
+		url: '/api/User/changePoint',
+		method: 'post',
+		data
+	});
+}
+//获取用户sig
+export function getSig(data) {
+	return request({
+		url: '/api/trtc/getSig',
+		method: 'post',
+		data
+	});
+}

+ 27 - 0
api/set.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+// 修改用户信息
+export function userEdit(data) {
+	return request({
+		url: '/api/user/edit',
+		method: 'post',
+		data
+	});
+}
+
+//退出登录
+export function logout(data) {
+	return request({
+		url: '/api/User/logout',
+		method: 'get',
+		data
+	});
+}
+//修改密码
+export function registerReset(data) {
+	return request({
+		url: '/api/register/reset',
+		method: 'post',
+		data
+	});
+}

+ 37 - 0
api/wx.js

@@ -0,0 +1,37 @@
+import request from '@/utils/request'
+// #ifdef H5
+// 微信分享信息
+// export function share(data) {
+// 	return request({
+// 		url: '/api/share',
+// 		method: 'get',
+// 		data
+// 	});
+// }
+//微信配置
+export function wechatConfig(data) {
+	return request({
+		url: '/api/index/getWechatConfig',
+		method: 'get',
+		data
+	});
+}
+// 微信code地址
+export function wechatAuth(data) {
+	return request({
+		url: '/api/user/wechatAuth',
+		method: 'get',
+		data
+	});
+}
+// #endif
+// #ifdef MP-WEIXIN
+// 微信code地址
+export function wechatMpAuth(data) {
+	return request({
+		url: '/api/user/routineAuth',
+		method: 'post',
+		data
+	});
+}
+// #endif

二進制
components/.DS_Store


File diff suppressed because it is too large
+ 18 - 0
components/empty.vue


+ 63 - 0
components/evan-checkbox/evan-checkbox-group.vue

@@ -0,0 +1,63 @@
+<template>
+	<view class="evan-checkbox-group">
+		<slot></slot>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'EvanCheckboxGroup',
+		props: {
+			value: {
+				type: Array,
+				default: null
+			},
+			disabled: {
+				type: Boolean,
+				default: false
+			},
+			max: {
+				type: Number,
+				default: null
+			}
+		},
+		watch: {
+			value: {
+				deep: true,
+				handler(value) {
+					this.deepSetValue(this.$children)
+				}
+			}
+		},
+		methods: {
+			onCheckboxChange(label) {
+				const value = this.value || []
+				const index = value.findIndex((v) => v === label)
+				if (index !== -1) {
+					value.splice(index, 1)
+				} else {
+					value.push(label)
+				}
+				this.$emit('input', value)
+				this.$emit('change', value)
+			},
+			deepSetValue(array) {
+				if (Array.isArray(array)) {
+					array.forEach((child) => {
+						let childName = child.$options.name
+						if (childName === 'EvanCheckbox') {
+							if (typeof child.setValue === 'function') {
+								child.setValue(this.value)
+							}
+						} else if (child.$children) {
+							this.deepSetValue(child.$children)
+						}
+					})
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 203 - 0
components/evan-checkbox/evan-checkbox-popup.vue

@@ -0,0 +1,203 @@
+<template>
+	<view class="evan-checkbox-popup">
+		<view class="evan-checkbox-popup__trigger" @click="openPopup">
+			<slot name="trigger" :label="label"></slot>
+		</view>
+		<uni-popup @change="onPopupChange" ref="popup" type="bottom" :maskClick="maskClick">
+			<view class="evan-checkbox-popup__target">
+				<view class="evan-checkbox-popup__target__header">
+					<text @click="onCancel" class="evan-checkbox-popup__target__header__cancel">{{cancelText}}</text>
+					<text class="evan-checkbox-popup__target__header__title">{{title}}</text>
+					<text @click="onConfirm" class="evan-checkbox-popup__target__header__confirm" :style="{color:primaryColor}">{{confirmText}}</text>
+				</view>
+				<scroll-view scroll-y="true" class="evan-checkbox-popup__target__body">
+					<evan-checkbox-group :max="max" v-model="currentValue">
+						<view @click="toggleCheckbox(index)" class="evan-checkbox-popup__target__body__listitem" v-for="(item,index) in options"
+						 :key="item[optionValue]">
+							<text class="evan-checkbox-popup__target__body__listitem__label" :style="{color:currentValue&&currentValue.includes(item[optionValue])?primaryColor:'#333'}">{{item[optionLabel]}}</text>
+							<evan-checkbox :primaryColor="primaryColor" ref="checkbox" :preventClick="true" :label="item[optionValue]">
+								<template slot="icon">
+									<view>
+										<uni-icons v-if="currentValue&&currentValue.includes(item[optionValue])" type="checkmarkempty" size="30"
+										 :color="primaryColor"></uni-icons>
+									</view>
+								</template>
+							</evan-checkbox>
+						</view>
+					</evan-checkbox-group>
+				</scroll-view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	import uniPopup from '@/components/uni-popup/uni-popup.vue'
+	import EvanCheckbox from '@/components/evan-checkbox/evan-checkbox.vue'
+	import EvanCheckboxGroup from '@/components/evan-checkbox/evan-checkbox-group.vue'
+	export default {
+		name: 'EvanCheckboxPopup',
+		components: {
+			uniPopup,
+			EvanCheckbox,
+			EvanCheckboxGroup
+		},
+		props: {
+			options: {
+				type: Array,
+				default: () => []
+			},
+			value: {
+				type: Array,
+				default: null
+			},
+			primaryColor: {
+				type: String,
+				default: '#108ee9'
+			},
+			cancelText: {
+				type: String,
+				default: '取消'
+			},
+			confirmText: {
+				type: String,
+				default: '确定'
+			},
+			title: {
+				type: String,
+				default: '请选择'
+			},
+			optionLabel: {
+				type: String,
+				default: 'label'
+			},
+			optionValue: {
+				type: String,
+				default: 'value'
+			},
+			max: {
+				type: Number,
+				default: null
+			},
+			labelSeparator: {
+				type: String,
+				default: ','
+			},
+			maskClick: {
+				type: Boolean,
+				default: true
+			}
+		},
+		computed: {
+			label() {
+				if (!this.value || this.value.length === 0) {
+					return ''
+				}
+				return this.options
+					.filter((op) => this.value.includes(op[this.optionValue]))
+					.map((item) => item[this.optionLabel])
+					.join(this.labelSeparator)
+			}
+		},
+		data() {
+			return {
+				currentValue: null,
+				maskClose: true // 是否由点击遮罩层关闭
+			}
+		},
+		methods: {
+			openPopup() {
+				this.currentValue = Object.assign([], this.value)
+				this.$refs.popup.open()
+			},
+			closePopup() {
+				this.maskClose = false
+				this.$refs.popup.close()
+			},
+			onCancel() {
+				this.closePopup()
+				this.$emit('cancel', this.currentValue)
+			},
+			onConfirm() {
+				this.closePopup()
+				this.$emit('input', this.currentValue)
+				this.$emit('confirm', this.currentValue)
+			},
+			toggleCheckbox(index) {
+				this.$refs.checkbox[index].toggle()
+			},
+			onPopupChange(e) {
+				// 捕捉uniPopup点击遮罩层关闭事件
+				if (!e.show) {
+					if (this.maskClose) {
+						this.$emit('cancel', this.currentValue)
+					}
+					this.maskClose = true
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.evan-checkbox-popup {}
+
+	.evan-checkbox-popup__target {}
+
+	.evan-checkbox-popup__target__header {
+		height: 54px;
+		background-color: #f7f7f7;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		align-items: center;
+		font-size: 16px;
+	}
+
+	.evan-checkbox-popup__target__header__cancel {
+		color: #999;
+		padding: 0 15px;
+	}
+
+	.evan-checkbox-popup__target__header__title {
+		color: #333;
+		flex: 1;
+		text-align: center;
+	}
+
+	.evan-checkbox-popup__target__header__confirm {
+		padding: 0 15px;
+	}
+
+	.evan-checkbox-popup__target__body {
+		background-color: #fff;
+		/* #ifndef APP-NVUE */
+		max-height: 350px;
+		/* #endif */
+		/* #ifdef APP-NVUE */
+		maxHeight: 350px;
+		/* #endif */
+	}
+
+	.evan-checkbox-popup__target__body__listitem {
+		align-items: center;
+		height: 50px;
+		padding: 0 15px;
+		border-bottom-width: 1px;
+		border-bottom-style: solid;
+		border-bottom-color: #eee;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		box-sizing: border-box;
+		/* #endif */
+		flex-direction: row;
+	}
+
+	.evan-checkbox-popup__target__body__listitem__label {
+		font-size: 16px;
+		color: #333;
+		flex: 1;
+		margin-right: 6px;
+	}
+</style>

+ 222 - 0
components/evan-checkbox/evan-checkbox.vue

@@ -0,0 +1,222 @@
+<template>
+	<view class="evan-checkbox" @click="onCheckboxChange">
+		<slot v-if="$slots.icon" name="icon"></slot>
+		<template v-else>
+			<uni-icons v-if="icon" :type="icon" :size="iconSize" :color="iconColor"></uni-icons>
+			<view v-else class="evan-checkbox__inner" :class="['evan-checkbox__inner--'+shape]" :style="{width:iconSize+'px',height:iconSize+'px',backgroundColor:innerBackgroundColor,borderColor:innerBorderColor}">
+				<uni-icons v-if="currentValue" type="checkmarkempty" :size="iconSize" :color="isDisabled?'#c8c9cc':'#fff'"></uni-icons>
+			</view>
+		</template>
+		<text v-if="$slots.default" class="evan-checkbox__label" :style="mTitleStlye">
+			<slot></slot>
+		</text>
+	</view>
+</template>
+
+<script>
+	import UniIcons from '@/components/uni-icons/uni-icons.vue'
+	export default {
+		name: 'EvanCheckbox',
+		components: {
+			UniIcons
+		},
+		props: {
+			shape: {
+				type: String,
+				default: 'round'
+			},
+			value: {
+				type: Boolean,
+				default: false
+			},
+			label: {
+				type: [String, Number],
+				default: null
+			},
+			disabled: {
+				type: Boolean,
+				default: false
+			},
+			icon: {
+				type: String,
+				default: null
+			},
+			iconSize: {
+				type: Number,
+				default: 20
+			},
+			primaryColor: {
+				type: String,
+				default: '#108ee9'
+			},
+			titleStyle: {
+				type: Object,
+				default: () => {
+					return {}
+				}
+			},
+			preventClick: {
+				type: Boolean,
+				default: false
+			}
+		},
+		computed: {
+			isGroup() {
+				let parent = this.getParent()
+				if (parent) {
+					return true
+				}
+				return false
+			},
+			isDisabled() {
+				if (this.isGroup) {
+					return this.getParent().disabled || this.disabled
+				}
+				return this.disabled
+			},
+			isOverLimit() {
+				if (this.isGroup) {
+					let parent = this.getParent()
+					if (parent.max) {
+						let parentValue = parent.value || []
+						if (parentValue.length >= parent.max) {
+							return true
+						}
+					}
+				}
+				return false
+			},
+			mTitleStlye() {
+				let titleStyle = Object.assign({}, this.titleStyle || {})
+				let arr = Object.keys(titleStyle).map((key) => {
+					if (key === 'color' && this.disabled) {
+						return null
+					}
+					return `${key}:${titleStyle[key]}`
+				}).filter((v) => v)
+				return arr.join(';')
+			},
+			innerBackgroundColor() {
+				if (this.isDisabled) {
+					return '#ebedf0'
+				}
+				if (this.currentValue) {
+					return this.primaryColor
+				}
+				return '#fff'
+			},
+			innerBorderColor() {
+				if (this.isDisabled) {
+					return '#c8c9cc'
+				}
+				if (this.currentValue) {
+					return this.primaryColor
+				}
+				return '#c8c9cc'
+			},
+			iconColor() {
+				if (this.isDisabled) {
+					return '#ebedf0'
+				}
+				if (this.currentValue) {
+					return this.primaryColor
+				}
+				return '#c8c9cc'
+			}
+		},
+		watch: {
+			value: {
+				immediate: true,
+				handler(value) {
+					this.currentValue = value
+				}
+			}
+		},
+		data() {
+			return {
+				currentValue: null
+			}
+		},
+		methods: {
+			// 获取EvanCheckboxGroup组件
+			getParent() {
+				let parent = this.$parent
+				if (parent) {
+					let parentName = parent.$options.name
+					while (parentName !== 'EvanCheckboxGroup') {
+						parent = parent.$parent
+						if (parent) {
+							parentName = parent.$options.name
+						} else {
+							return null
+						}
+					}
+					return parent
+				}
+				return null
+			},
+			onCheckboxChange() {
+				if (!this.isDisabled && !this.preventClick && (!this.isOverLimit || this.currentValue)) {
+					this.toggleValue()
+				}
+			},
+			toggle() {
+				if (!this.isDisabled && (!this.isOverLimit || this.currentValue)) {
+					this.toggleValue()
+				}
+			},
+			toggleValue() {
+				this.currentValue = !this.currentValue
+				this.$emit('input', this.currentValue)
+				this.$emit('change', this.currentValue)
+				let parent = this.getParent()
+				if (parent) {
+					parent.onCheckboxChange(this.label)
+				}
+			},
+			setValue(groupValue) {
+				groupValue = groupValue || []
+				this.currentValue = groupValue.includes(this.label)
+			}
+		},
+		created() {
+			let parent = this.getParent()
+			if (parent) {
+				this.setValue(parent.value)
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.evan-checkbox {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		align-items: center;
+	}
+
+	.evan-checkbox__label {
+		font-size: 12px;
+		margin-left: 8px;
+		color: #333;
+	}
+
+	.evan-checkbox__inner {
+		border-width: 1px;
+		border-style: solid;
+		background-color: #fff;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		box-sizing: border-box;
+		/* #endif */
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+	}
+
+	.evan-checkbox__inner--round {
+		border-radius: 50%;
+	}
+</style>

+ 51 - 0
components/evan-radio/evan-radio-group.vue

@@ -0,0 +1,51 @@
+<template>
+	<view class="evan-radio-group">
+		<slot></slot>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'EvanRadioGroup',
+		props: {
+			value: {
+				type: [String, Number, Boolean],
+				default: null
+			},
+			disabled: {
+				type: Boolean,
+				default: false
+			}
+		},
+		watch: {
+			value: {
+				handler(value) {
+					this.deepSetValue(this.$children)
+				}
+			}
+		},
+		methods: {
+			onRadioChange(label) {
+				this.$emit('input', label)
+				this.$emit('change', label)
+			},
+			deepSetValue(array) {
+				if (Array.isArray(array)) {
+					array.forEach((child) => {
+						let childName = child.$options.name
+						if (childName === 'EvanRadio') {
+							if (typeof child.setValue === 'function') {
+								child.setValue(this.value)
+							}
+						} else if (child.$children) {
+							this.deepSetValue(child.$children)
+						}
+					})
+				}
+			}
+		}
+	}
+</script>
+
+<style>
+</style>

+ 229 - 0
components/evan-radio/evan-radio.vue

@@ -0,0 +1,229 @@
+<template>
+	<view class="evan-radio" @click="onRadioClick">
+		<slot v-if="$slots.icon" name="icon"></slot>
+		<template v-else>
+			<uni-icons v-if="icon" :type="icon" :size="iconSize" :color="iconColor"></uni-icons>
+			<view v-else class="evan-radio__inner" :class="['evan-radio__inner--'+shape]" :style="{width:iconSize+'px',height:iconSize+'px',backgroundColor:innerBackgroundColor,borderColor:innerBorderColor}">
+				<uni-icons v-if="isChecked" type="checkmarkempty" :size="iconSize" :color="isDisabled?'#c8c9cc':'#fff'"></uni-icons>
+			</view>
+		</template>
+		<text v-if="$slots.default" class="evan-radio__label" :style="mTitleStlye">
+			<slot></slot>
+		</text>
+	</view>
+</template>
+
+<script>
+	import UniIcons from '@/components/uni-icons/uni-icons.vue'
+	export default {
+		name: 'EvanRadio',
+		components: {
+			UniIcons
+		},
+		props: {
+			shape: {
+				type: String,
+				default: 'round'
+			},
+			value: {
+				type: [String, Number, Boolean],
+				default: null
+			},
+			label: {
+				type: [String, Number, Boolean],
+				default: null
+			},
+			disabled: {
+				type: Boolean,
+				default: false
+			},
+			icon: {
+				type: String,
+				default: null
+			},
+			iconSize: {
+				type: Number,
+				default: 20
+			},
+			primaryColor: {
+				type: String,
+				default: '#108ee9'
+			},
+			titleStyle: {
+				type: Object,
+				default: () => {
+					return {}
+				}
+			},
+			preventClick: {
+				type: Boolean,
+				default: false
+			},
+			clearable: {
+				type: Boolean,
+				default: false
+			}
+		},
+		computed: {
+			isGroup() {
+				let parent = this.getParent()
+				if (parent) {
+					return true
+				}
+				return false
+			},
+			isDisabled() {
+				if (this.isGroup) {
+					return this.getParent().disabled || this.disabled
+				}
+				return this.disabled
+			},
+			mTitleStlye() {
+				let titleStyle = Object.assign({}, this.titleStyle || {})
+				let arr = Object.keys(titleStyle).map((key) => {
+					if (key === 'color' && this.disabled) {
+						return null
+					}
+					return `${key}:${titleStyle[key]}`
+				}).filter((v) => v)
+				return arr.join(';')
+			},
+			isChecked() {
+				let parent = this.getParent()
+				if ((this.isGroup && parent.value === this.label) || (!this.isGroup && this.currentValue === this.label)) {
+					return true
+				}
+				return false
+			},
+			innerBackgroundColor() {
+				if (this.isDisabled) {
+					return '#ebedf0'
+				}
+				let parent = this.getParent()
+				if (this.isChecked) {
+					return this.primaryColor
+				}
+				return '#fff'
+			},
+			innerBorderColor() {
+				if (this.isDisabled) {
+					return '#c8c9cc'
+				}
+				if (this.isChecked) {
+					return this.primaryColor
+				}
+				return '#c8c9cc'
+			},
+			iconColor() {
+				if (this.isDisabled) {
+					return '#ebedf0'
+				}
+				if (this.isChecked) {
+					return this.primaryColor
+				}
+				return '#c8c9cc'
+			}
+		},
+		watch: {
+			value: {
+				immediate: true,
+				handler(value) {
+					this.currentValue = value
+				}
+			}
+		},
+		data() {
+			return {
+				currentValue: null
+			}
+		},
+		methods: {
+			// 获取EvanRadioGroup组件
+			getParent() {
+				let parent = this.$parent
+				if (parent) {
+					let parentName = parent.$options.name
+					while (parentName !== 'EvanRadioGroup') {
+						parent = parent.$parent
+						if (parent) {
+							parentName = parent.$options.name
+						} else {
+							return null
+						}
+					}
+					return parent
+				}
+				return null
+			},
+			onRadioClick() {
+				if (!this.isDisabled && !this.preventClick) {
+					this.choose()
+				}
+			},
+			select() {
+				if (!this.isDisabled) {
+					this.choose()
+				}
+			},
+			choose() {
+				if (this.currentValue !== this.label) {
+					this.currentValue = this.label
+					this.$emit('input', this.currentValue)
+					if (this.isGroup) {
+						let parent = this.getParent()
+						parent.onRadioChange(this.label)
+					}
+				} else if (this.clearable) {
+					this.currentValue = null
+					this.$emit('input', this.currentValue)
+					if (this.isGroup) {
+						let parent = this.getParent()
+						parent.onRadioChange(null)
+					}
+				}
+			},
+			setValue(groupValue) {
+				this.currentValue = groupValue
+			}
+		},
+		created() {
+			let parent = this.getParent()
+			if (parent) {
+				this.setValue(parent.value)
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.evan-radio {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		align-items: center;
+	}
+
+	.evan-radio__label {
+		font-size: 16px;
+		margin-left: 8px;
+		color: #333;
+	}
+
+	.evan-radio__inner {
+		border-width: 1px;
+		border-style: solid;
+		background-color: #fff;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		box-sizing: border-box;
+		/* #endif */
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+	}
+
+	.evan-radio__inner--round {
+		border-radius: 50%;
+	}
+</style>

+ 395 - 0
components/lb-picker/README.md

@@ -0,0 +1,395 @@
+# uni-app picker 选择器
+
+插件市场里面的 picker 选择器不满足自己的需求,所以自己写了一个简单的 picker 选择器,可扩展、可自定义,一般满足日常需要。  
+Github:[https://github.com/liub1934/uni-lb-picker](https://github.com/liub1934/uni-lb-picker)  
+插件市场:[https://ext.dcloud.net.cn/plugin?id=1111](https://ext.dcloud.net.cn/plugin?id=1111)
+
+## 兼容性
+
+H5 + 各平台小程序(百度除外)  
+安卓及 IOS 未测试(应该也能运行)
+已知问题:支付宝小程序单选可能会出现不对齐的现象
+
+## 功能
+
+1、单选  
+2、多级联动,非多级联动,理论支持任意级数  
+3、省市区选择,基于多级联动  
+4、自定义选择器头部确定取消按钮颜色及插槽支持  
+5、选择器可视区自定义滚动个数  
+6、自定义数据字段,满足不同人的需求  
+7、自定义选择器样式  
+8、单选及非联动选择支持扁平化的简单数据,如下形式:
+
+```javascript
+// 单选列表
+list1: ['选项1', '选项2', '选项2'],
+// 非联动选择列表
+list2: [
+  ['选项1', '选项2', '选项3'],
+  ['选项11', '选项22', '选项33'],
+  ['选项111', '选项222', '选项333']
+]
+```
+
+## 引入插件
+
+单独引入,在需要使用的页面上 import 引入即可
+
+```html
+<template>
+  <view>
+    <lb-picker></lb-picker>
+  </view>
+</template>
+
+<script>
+  import LbPicker from '@/components/lb-picker'
+  export default {
+    components: {
+      LbPicker
+    }
+  }
+</script>
+```
+
+全局引入,`main.js`中 import 引入并注册即可全局使用
+
+```jsvascript
+import LbPicker from '@/components/lb-picker'
+Vue.component("lb-picker", LbPicker)
+```
+
+npm 安装引入:
+
+```shell
+npm install uni-lb-picker
+```
+
+```jsvascript
+import LbPicker from 'uni-lb-picker'
+```
+
+## 选择器数据格式
+
+### 单选
+
+常规数据
+
+```javascript
+list: [
+  {
+    label: '选项1',
+    value: '1'
+  },
+  {
+    label: '选项2',
+    value: '2'
+  }
+]
+```
+
+扁平化简单数据
+
+```javascript
+list: ['选项1', '选项2']
+```
+
+### 多级联动
+
+```javascript
+list: [
+  {
+    label: '选项1',
+    value: '1',
+    children: [
+      {
+        label: '选项1-1',
+        value: '1-1',
+        children: [
+          {
+            label: '选项1-1-1',
+            value: '1-1-1'
+          }
+        ]
+      }
+    ]
+  }
+]
+```
+
+### 非联动选择
+
+常规数据
+
+```javascript
+list: [
+  [
+    { label: '选项1', value: '1' },
+    { label: '选项2', value: '2' },
+    { label: '选项3', value: '3' }
+  ],
+  [
+    { label: '选项11', value: '11' },
+    { label: '选项22', value: '22' },
+    { label: '选项33', value: '33' }
+  ],
+  [
+    { label: '选项111', value: '111' },
+    { label: '选项222', value: '222' },
+    { label: '选项333', value: '333' }
+  ]
+]
+```
+
+扁平化简单数据
+
+```javascript
+list: [
+  ['选项1', '选项2', '选项3'],
+  ['选项11', '选项22', '选项33'],
+  ['选项111', '选项222', '选项333']
+]
+```
+
+## 调用显示选择器
+
+通过`ref`形式手动调用`show`方法显示,隐藏同理调用`hide`
+
+```text
+<lb-picker ref="picker"></lb-picker>
+
+this.$refs.picker.show() // 显示
+this.$refs.picker.hide() // 隐藏
+```
+
+## 绑定值及设置默认值
+
+支持 vue 中`v-model`写法绑定值,无需自己维护选中值的索引。
+
+```javascript
+<lb-picker v-model="value1"></lb-picker>
+<lb-picker v-model="value2"></lb-picker>
+
+data () {
+  return {
+    value1: '' // 单选
+    value2: [] // 多列联动选择
+  }
+}
+```
+
+## 多个选择器
+
+通过设置不同的`ref`,然后调用即可
+
+```javascript
+<lb-picker ref="picker1"></lb-picker>
+<lb-picker ref="picker2"></lb-picker>
+
+this.$refs.picker1.show() // picker1显示
+this.$refs.picker2.show() // picker2显示
+```
+
+## 省市区选择
+
+省市区选择是基于多列联动选择,数据来源:[https://github.com/modood/Administrative-divisions-of-China](https://github.com/modood/Administrative-divisions-of-China),  
+省市区文件位于`/pages/demos/area-data-min.js`,自行引入即可,可参考`demo3省市区选择`,  
+也可使用自己已有的省市区数据,如果数据字段不一样,也可以自定义,参考下方自定义数据字段。
+
+## 自定义数据字段
+
+为了满足不同人的需求,插件支持自定义数据字段名称, 插件默认的数据字段如下形式:
+
+```javascript
+list: [
+  {
+    label: '选择1',
+    value: 1,
+    children: []
+  },
+  {
+    label: '选择1',
+    value: 1,
+    children: []
+  }
+]
+```
+
+如果你的数据字段和上面不一样,如下形式:
+
+```javascript
+list: [
+  {
+    text: '选择1',
+    id: 1,
+    child: []
+  },
+  {
+    text: '选择1',
+    id: 1,
+    child: []
+  }
+]
+```
+
+通过设置参数中的`props`即可,如下所示:
+
+```javascript
+<lb-picker :props="myProps"></lb-picker>
+
+data () {
+  return {
+    myProps: {
+      label: 'text',
+      value: 'id',
+      children: 'child'
+    }
+  }
+}
+```
+
+## 插槽使用
+
+选择器支持一些可自定义化的插槽,如选择器的取消和确定文字按钮,如果需要对其自定义处理的话,比如加个 icon 图标之类的,可使用插槽,使用方法如下:
+
+```html
+<lb-picker>
+  <view slot="cancel-text">我是自定义取消</view>
+  <view slot="confirm-text">我是自定义确定</view>
+</lb-picker>
+```
+
+其他插槽见下。
+
+## 参数及事件
+
+### Props
+
+| 参数                    | 说明                                                                                        | 类型                | 可选值                                                           | 默认值                                            |
+| :---------------------- | :------------------------------------------------------------------------------------------ | :------------------ | :--------------------------------------------------------------- | :------------------------------------------------ |
+| value/v-model           | 绑定值,联动选择为 Array 类型                                                               | String/Number/Array | -                                                                | -                                                 |
+| mode                    | 选择器类型,支持单列,多列联动                                                              | String              | selector 单选/multiSelector 多级联动/unlinkedSelector 多级非联动 | selector                                          |
+| list                    | 选择器数据(v1.0.7 单选及非联动多选支持扁平数据:['选项 1', '选项 2'])                       | Array               | -                                                                | -                                                 |
+| level                   | 多列联动层级,仅 mode 为 multiSelector 有效                                                 | Number              | -                                                                | 2                                                 |
+| props                   | 自定义数据字段                                                                              | Object              | -                                                                | {label:'label',value:'value',children:'children'} |
+| cancel-text             | 取消文字                                                                                    | String              | -                                                                | 取消                                              |
+| cancel-color            | 取消文字颜色                                                                                | String              | -                                                                | #999                                              |
+| confirm-text            | 确定文字                                                                                    | String              | -                                                                | 确定                                              |
+| confirm-color           | 确定文字颜色                                                                                | String              | -                                                                | #007aff                                           |
+| empty-text              | (v1.0.7 新增)选择器列表为空的时候显示的文字                                                 | String              | -                                                                | 暂无数据                                          |
+| empty-color             | (v1.0.7 新增)暂无数据文字颜色                                                               | String              | -                                                                | #999                                              |
+| column-num              | 可视滚动区域内滚动个数,最好设置奇数值                                                      | Number              | -                                                                | 5                                                 |
+| radius                  | 选择器顶部圆角,支持 rpx,如 radius="10rpx"                                                 | String              | -                                                                | -                                                 |
+| ~~column-style~~        | ~~选择器默认样式(已弃用,见下方自定义样式说明)~~                                            | Object              | -                                                                | -                                                 |
+| ~~active-column-style~~ | ~~选择器选中样式(已弃用,见下方自定义样式说明)~~                                            | Object              | -                                                                | -                                                 |
+| loading                 | 选择器是否显示加载中,可使用 loading 插槽自定义加载效果                                     | Boolean             | -                                                                | -                                                 |
+| mask-color              | 遮罩层颜色                                                                                  | String              | -                                                                | rgba(0, 0, 0, 0.4)                                |
+| close-on-click-mask     | 点击遮罩层是否关闭选择器                                                                    | Boolean             | true/false                                                       | true                                              |
+| ~~change-on-init~~      | ~~(v1.0.7 已弃用)初始化时是否触发 change 事件~~                                             | Boolean             | true/false                                                       | -                                                 |
+| dataset                 | (v1.0.7 新增)可以向组件中传递任意的自定义的数据,在`confirm`或`change`事件中可以取到        | Object              | -                                                                | -                                                 |
+| show-header             | (v1.0.8 新增)是否显示选择器头部                                                             | Boolean             | -                                                                | - true                                            |
+| inline                  | (v1.0.8 新增)inline 模式,开启后默认显示选择器,无需点击弹出,可以配合`show-header`一起使用 | Boolean             | -                                                                | -                                                 |
+
+### 方法
+
+| 方法名 | 说明       | 参数 |
+| :----- | :--------- | :--- |
+| show   | 打开选择器 | -    |
+| hide   | 关闭选择器 | -    |
+
+### Events
+
+| 事件名称 | 说明                                     | 回调参数                                                                                                                                                                                                                                                                                                                             |
+| :------- | :--------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| show     | 选择器打开时触发                         | -                                                                                                                                                                                                                                                                                                                                    |
+| hide     | 选择器隐藏时触发                         | -                                                                                                                                                                                                                                                                                                                                    |
+| change   | 选择器滚动时触发,此时不会改变绑定的值   | `{ index, item, value, change }` `index`触发滚动后新的索引,单选时是具体的索引值,多列联动选择时为数组。`item`触发滚动后新的的完整内容,包括`label`、`value`等,单选时为对象,多列选择时为数组对象。`value`触发滚动后新的 value 值,单列选择时为具体值,多列联动选择时为数组。`change`触发事件的类型,详情参考下面的 change 事件备注 |
+| confirm  | 点击选择器确定时触发,此时会改变绑定的值 | 同上`change`事件说明                                                                                                                                                                                                                                                                                                                 |
+| cancel   | 点击选择器取消时触发                     | 同上`change`事件说明                                                                                                                                                                                                                                                                                                                 |
+
+### `change` 事件备注
+
+如果绑定的值是空的,`change`触发后里面的内容都是列表的第一项。  
+`change`事件会在以下情况触发:
+
+- 初始化
+- 绑定值 value 变化
+- 选择器 list 列表变化
+- 滚动选择器
+
+以上情况会在回调函数中都可以取到`change`变化的类型,对应上面的情况包括以下:
+
+- `init`
+- `value`
+- `list`
+- `scroll`
+
+根据这些类型大家可以在`change`的时候按需处理自己的业务逻辑,比如一种常见的情况,有默认值的时候需要显示默认值的文字,此时可以`change`事件中判断`change`的类型是否是`init`,如果是的话可以取事件回调中的`item`进行显示绑定值对应的文字信息。
+
+```javascript
+handleChange (e) {
+  if (e.change === 'init') {
+    console.log(e.item.label) // 单选 选项1
+    console.log(e.item.map(item => item.label).join('-')) // 多选 选项1-选项11
+  }
+}
+```
+
+### 插槽
+
+| 插槽名        | 说明                |
+| :------------ | :------------------ |
+| cancel-text   | 选择器取消文字插槽  |
+| action-center | 选择器顶部中间插槽  |
+| confirm-text  | 选择器确定文字插槽  |
+| loading       | 选择器 loading 插槽 |
+| empty         | 选择器 空数据 插槽  |
+
+### 选择器自定义样式
+
+原先的`column-style`和`active-column-style`已弃用,如需修改默认样式及选中样式参考`demo9`
+
+```css
+<style lang="scss" scoped>
+/deep/ .lb-picker {
+  .lb-picker-column-label {
+    color: #f0ad4e;
+  }
+  .lb-picker-column-active {
+    .lb-picker-column-label {
+      color: #007aff;
+      font-weight: 700;
+    }
+  }
+}
+</style>
+```
+
+### 获取选中值的文字
+
+`@confirm`事件中可以拿到:
+
+单选:
+
+```javascript
+handleConfirm (e) {
+  console.log(e.item.label) // 选项1
+}
+```
+
+联动选择:
+
+```javascript
+handleConfirm (e) {
+  console.log(e.item.map(item => item.label).join('-')) // 选项1-选项11
+}
+```
+
+## Tips
+
+微信小程序端,滚动时在 iOS 自带振动反馈,可在系统设置 -> 声音与触感 -> 系统触感反馈中关闭
+
+## 其他
+
+其他功能参考示例 Demo 代码。

+ 257 - 0
components/lb-picker/index.vue

@@ -0,0 +1,257 @@
+<template>
+  <view :class="['lb-picker', inline ? 'lb-picker-inline' : '']">
+    <view class="lb-picker-mask"
+      v-show="visible && !inline"
+      :style="{ 'background-color': maskColor }"
+      @touchmove.stop.prevent="moveHandle">
+    </view>
+    <view :class="['lb-picker-container', visible ? 'lb-picker-toggle' : '']"
+      :style="{ borderRadius: `${radius} ${radius} 0 0` }">
+      <view v-if="showHeader"
+        class="lb-picker-header"
+        :style="{
+          height: pickerHeaderHeight,
+          'line-height': pickerHeaderHeight
+        }">
+        <view class="lb-picker-action lb-picker-left">
+          <view class="lb-picker-action-cancel"
+            @tap.stop="handleCancel">
+            <slot v-if="$slots['cancel-text']"
+              name="cancel-text"> </slot>
+            <view v-else
+              class="action-cancel-text"
+              :style="{ color: cancelColor }">
+              {{ cancelText }}
+            </view>
+          </view>
+        </view>
+
+        <view class="lb-picker-action lb-picker-center"
+          v-if="$slots['action-center']">
+          <slot name="action-center"></slot>
+        </view>
+
+        <view class="lb-picker-action lb-picker-right">
+          <view class="lb-picker-action-confirm"
+            @tap.stop="handleConfirm">
+            <slot v-if="$slots['confirm-text']"
+              name="confirm-text"> </slot>
+            <view v-else
+              class="action-confirm-text"
+              :style="{ color: confirmColor }">
+              {{ confirmText }}
+            </view>
+          </view>
+        </view>
+      </view>
+      <view class="lb-picker-content"
+        :style="{ height: pickerContentHeight }">
+        <!-- loading -->
+        <view v-if="loading"
+          class="lb-picker-loading">
+          <slot name="loading">
+            <view class="lb-picker-loading-img"></view>
+          </slot>
+        </view>
+
+        <!-- 暂无数据 -->
+        <view v-if="isEmpty && !loading"
+          class="lb-picker-empty">
+          <slot name="empty">
+            <text class="lb-picker-empty-text"
+              :style="{ color: emptyColor }">
+              {{ emptyText }}
+            </text>
+          </slot>
+        </view>
+
+        <!-- 单选 -->
+        <selector-picker v-if="mode === 'selector' && !loading && !isEmpty"
+          :value="22"
+          :list="list"
+          :props="pickerProps"
+          :height="pickerContentHeight"
+          :inline="inline"
+          @change="handleChange">
+        </selector-picker>
+
+        <!-- 多列联动 -->
+        <multi-selector-picker v-if="mode === 'multiSelector' && !loading && !isEmpty"
+          :value="value"
+          :list="list"
+          :level="level"
+          :visible="visible"
+          :props="pickerProps"
+          :height="pickerContentHeight"
+          :inline="inline"
+          @change="handleChange">
+        </multi-selector-picker>
+
+        <!-- 非联动选择 -->
+        <unlinked-selector-picker v-if="mode === 'unlinkedSelector' && !loading && !isEmpty"
+          :value="value"
+          :list="list"
+          :visible="visible"
+          :props="pickerProps"
+          :height="pickerContentHeight"
+          :inline="inline"
+          @change="handleChange">
+        </unlinked-selector-picker>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+const defaultProps = {
+  label: 'name',
+  value: 'id',
+  children: 'children'
+}
+import { getIndicatorHeight } from './utils'
+import SelectorPicker from './pickers/selector-picker'
+import MultiSelectorPicker from './pickers/multi-selector-picker'
+import UnlinkedSelectorPicker from './pickers/unlinked-selector-picker'
+const indicatorHeight = getIndicatorHeight()
+export default {
+  components: {
+    SelectorPicker,
+    MultiSelectorPicker,
+    UnlinkedSelectorPicker
+  },
+  props: {
+    value: [String, Number, Array],
+    list: Array,
+    mode: {
+      type: String,
+      default: 'selector'
+    },
+    level: {
+      type: Number,
+      default: 1
+    },
+    props: {
+      type: Object
+    },
+    cancelText: {
+      type: String,
+      default: '取消'
+    },
+    cancelColor: String,
+    confirmText: {
+      type: String,
+      default: '确定'
+    },
+    confirmColor: String,
+    canHide: {
+      type: Boolean,
+      default: true
+    },
+    emptyColor: String,
+    emptyText: {
+      type: String,
+      default: '暂无数据'
+    },
+    radius: String,
+    columnNum: {
+      type: Number,
+      default: 5
+    },
+    loading: Boolean,
+    closeOnClickMask: {
+      type: Boolean,
+      default: true
+    },
+    maskColor: {
+      type: String,
+      default: 'rgba(0, 0, 0, 0.4)'
+    },
+    dataset: Object,
+    inline: Boolean,
+    showHeader: {
+      type: Boolean,
+      default: true
+    }
+  },
+  data () {
+    return {
+      visible: false,
+      myValue: this.value,
+      picker: {},
+      pickerProps: Object.assign({}, defaultProps, this.props),
+      pickerHeaderHeight: indicatorHeight + 'px',
+      pickerContentHeight: indicatorHeight * this.columnNum + 'px'
+    }
+  },
+  computed: {
+    isEmpty () {
+      if (!this.list) return true
+      if (this.list && !this.list.length) return true
+      return false
+    }
+  },
+  methods: {
+    show () {
+      if (this.inline) return
+      this.visible = true
+    },
+    hide () {
+      if (this.inline) return
+      this.visible = false
+    },
+    handleCancel () {
+		console.log(11)
+      this.$emit('cancel', this.picker)
+      if (this.canHide && !this.inline) {
+        this.hide()
+      }
+    },
+    handleConfirm () {
+      if (this.isEmpty) {
+        this.$emit('confirm', null)
+        this.hide()
+      } else {
+        const picker = JSON.parse(JSON.stringify(this.picker))
+		console.log(this.picker,'confirm')
+        this.myValue = picker.value
+        this.$emit('confirm', this.picker)
+        if (this.canHide) this.hide()
+      }
+    },
+    handleChange ({ value, item, index, change }) {
+      this.picker.value = value
+      this.picker.item = item
+      this.picker.index = index
+      this.picker.change = change
+      this.picker.dataset = this.dataset || {}
+      this.$emit('change', this.picker)
+	  
+    },
+    // handleMaskTap () {
+    //   if (this.closeOnClickMask) {
+    //     this.visible = false
+    //   }
+    // },
+    moveHandle () {}
+  },
+  watch: {
+    value (newVal) {
+      this.myValue = newVal
+    },
+    myValue (newVal) {
+      this.$emit('input', newVal)
+    },
+    visible (newVisible) {
+      if (newVisible) {
+        this.$emit('show')
+      } else {
+        this.$emit('hide')
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "./style/picker.scss";
+</style>

+ 131 - 0
components/lb-picker/pickers/multi-selector-picker.vue

@@ -0,0 +1,131 @@
+<template>
+  <view class="multi-selector picker-item"
+    :style="{ height: height }">
+    <picker-view :value="pickerValue"
+      :indicator-style="indicatorStyle"
+      :style="{ height: height }"
+      @change="handleChange">
+      <picker-view-column v-for="(column, index) in pickerColumns"
+        :key="index">
+        <view v-for="(item, i) in column || []"
+          :class="[
+            'lb-picker-column',
+            item[props.value] === selectValue[index]
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+          :key="i"
+          :style="{ height: columnHeight, 'line-height': columnHeight }">
+          <view class="lb-picker-column-label">
+            {{ item[props.label] }}
+          </view>
+        </view>
+      </picker-view-column>
+    </picker-view>
+  </view>
+</template>
+
+<script>
+import { getIndicatorHeight } from '../utils.js'
+const indicatorHeight = getIndicatorHeight()
+export default {
+  props: {
+    value: Array,
+    list: Array,
+    props: Object,
+    level: Number,
+    visible: Boolean,
+    height: String
+  },
+  data () {
+    return {
+      pickerValue: [],
+      pickerColumns: [],
+      selectValue: [],
+      selectItem: [],
+      columnHeight: indicatorHeight + 'px',
+      indicatorStyle: `height: ${indicatorHeight}px`
+    }
+  },
+  created () {
+    this.init('init')
+  },
+  methods: {
+    init (changeType) {
+      this.setPickerItems(this.list)
+      this.$emit('change', {
+        value: this.selectValue,
+        item: this.selectItem,
+        index: this.pickerValue,
+        change: changeType
+      })
+    },
+    handleChange (item) {
+      const pickerValue = item.detail.value
+      const columnIndex = pickerValue.findIndex(
+        (item, i) => item !== this.pickerValue[i]
+      )
+      const valueIndex = pickerValue[columnIndex]
+      this.setPickerChange(pickerValue, valueIndex, columnIndex)
+    },
+    setPickerChange (pickerValue, valueIndex, columnIndex) {
+      for (let i = 0; i < this.level; i++) {
+        if (i > columnIndex) {
+          pickerValue[i] = 0
+          const column =
+            this.pickerColumns[i - 1][valueIndex] ||
+            this.pickerColumns[i - 1][0]
+          this.$set(this.pickerColumns, i, column[this.props.children] || [])
+          valueIndex = 0
+        }
+        this.pickerValue = pickerValue
+        this.selectItem[i] = this.pickerColumns[i][pickerValue[i]]
+        if (this.selectItem[i]) {
+          this.selectValue[i] = this.selectItem[i][this.props.value]
+        } else {
+          const spliceNum = this.level - i
+          this.pickerValue.splice(i, spliceNum)
+          this.selectValue.splice(i, spliceNum)
+          this.selectItem.splice(i, spliceNum)
+          this.pickerColumns.splice(i, spliceNum)
+          break
+        }
+      }
+      this.$emit('change', {
+        value: this.selectValue,
+        item: this.selectItem,
+        index: this.pickerValue,
+        change: 'scroll'
+      })
+    },
+    setPickerItems (list = [], index = 0) {
+      if (!list.length) return
+      const defaultValue = this.value || []
+      if (index < this.level) {
+        const value = defaultValue[index] || ''
+        let i = list.findIndex(item => item[this.props.value] === value)
+        i = i > -1 ? i : 0
+        this.$set(this.pickerValue, index, i)
+        this.$set(this.pickerColumns, index, list)
+        if (list[i]) {
+          this.$set(this.selectValue, index, list[i][this.props.value])
+          this.$set(this.selectItem, index, list[i])
+          this.setPickerItems(list[i][this.props.children] || [], index + 1)
+        }
+      }
+    }
+  },
+  watch: {
+    value (newVal) {
+      this.init('value')
+    },
+    list () {
+      this.init('list')
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../style/picker-item.scss";
+</style>

+ 99 - 0
components/lb-picker/pickers/selector-picker.vue

@@ -0,0 +1,99 @@
+<template>
+  <view class="selector-picker picker-item"
+    :style="{ height: height }">
+    <picker-view :value="pickerValue"
+      :indicator-style="indicatorStyle"
+      :style="{ height: height }"
+      @change="handleChange">
+      <picker-view-column>
+        <view v-for="(item, i) in list"
+          :class="[
+            'lb-picker-column',
+            item[props.value] || item === selectValue
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+          :key="i"
+          :style="{ height: columnHeight, lineHeight: columnHeight }">
+          <view class="lb-picker-column-label">
+            {{ item[props.label] || item }}
+          </view>
+        </view>
+      </picker-view-column>
+    </picker-view>
+  </view>
+</template>
+
+<script>
+import { getIndicatorHeight, isObject } from '../utils.js'
+const indicatorHeight = getIndicatorHeight()
+export default {
+  props: {
+    value: [String, Number],
+    list: Array,
+    props: Object,
+    visible: Boolean,
+    height: String
+  },
+  data () {
+    return {
+      pickerValue: [],
+      selectValue: '',
+      columnHeight: indicatorHeight + 'px',
+      indicatorStyle: `height: ${indicatorHeight}px`
+    }
+  },
+  created () {
+    this.init('init')
+  },
+  methods: {
+    init (changeType) {
+      if (this.list && this.list.length) {
+       let index = this.list.findIndex(item => {
+         return isObject(item)
+           ? item[this.props.value] === this.value
+           : item === this.value
+       })
+        index = index > -1 ? index : 0
+        const listItem = this.list[index]
+        this.pickerValue = [index]
+        this.selectValue = isObject(listItem)
+          ? listItem[this.props.value]
+          : listItem
+        this.$emit('change', {
+          value: this.selectValue,
+          item: listItem,
+          index: index,
+          change: changeType
+        })
+      }
+    },
+    handleChange (item) {
+      const index = item.detail.value[0] || 0
+      const listItem = this.list[index]
+      this.selectValue = isObject(listItem)
+        ? listItem[this.props.value]
+        : listItem
+      this.pickerValue = item.detail.value
+      this.$emit('change', {
+        value: this.selectValue,
+        item: listItem,
+        index: index,
+        change: 'scroll'
+      })
+    }
+  },
+  watch: {
+    list () {
+      this.init('list')
+    },
+    value (newVal) {
+      this.init('value')
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../style/picker-item.scss";
+</style>

+ 120 - 0
components/lb-picker/pickers/unlinked-selector-picker.vue

@@ -0,0 +1,120 @@
+<template>
+  <view class="selector-picker picker-item"
+    :style="{ height: height }">
+    <picker-view :value="pickerValue"
+      :indicator-style="indicatorStyle"
+      :style="{ height: height }"
+      @change="handleChange">
+      <picker-view-column v-for="(column, index) in pickerColumns"
+        :key="index">
+        <view v-for="(item, i) in column"
+          :class="[
+            'lb-picker-column',
+            item[props.value] || item === selectValue[index]
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+          :key="i"
+          :style="{ height: columnHeight, 'line-height': columnHeight }">
+          <view class="lb-picker-column-label">
+            {{ item[props.label] || item }}
+          </view>
+        </view>
+      </picker-view-column>
+    </picker-view>
+  </view>
+</template>
+
+<script>
+import { getIndicatorHeight, isObject } from '../utils.js'
+const indicatorHeight = getIndicatorHeight()
+export default {
+  props: {
+    value: Array,
+    list: Array,
+    props: Object,
+    visible: Boolean,
+    height: String,
+    indicatorHeight: Number
+  },
+  data () {
+    return {
+      pickerValue: [],
+      pickerColumns: [],
+      selectValue: [],
+      selectItem: [],
+      columnHeight: indicatorHeight + 'px',
+      indicatorStyle: `height: ${indicatorHeight}px`
+    }
+  },
+  created () {
+    this.init('init')
+  },
+  methods: {
+    init (changeType) {
+      if (this.list && this.list.length) {
+        this.pickerColumns = this.list
+        this.setPickerValue()
+        this.$emit('change', {
+          value: this.selectValue,
+          item: this.selectItem,
+          index: this.pickerValue,
+          change: changeType
+        })
+      }
+    },
+    setPickerValue (value) {
+      this.list.forEach((item, i) => {
+        let index = item.findIndex(item => {
+          return isObject(item)
+            ? item[this.props.value] === this.value[i]
+            : item === this.value[i]
+        })
+        index = index > -1 ? index : 0
+        const columnItem = this.list[i][index]
+        const valueItem = isObject(columnItem)
+          ? columnItem[this.props.value]
+          : columnItem
+        this.$set(this.pickerValue, i, index)
+        this.$set(this.selectValue, i, valueItem)
+        this.$set(this.selectItem, i, columnItem)
+      })
+    },
+
+    handleChange (item) {
+      const pickerValue = item.detail.value
+      const columnIndex = pickerValue.findIndex(
+        (item, i) => item !== this.pickerValue[i]
+      )
+      if (columnIndex > -1) {
+        const valueIndex = pickerValue[columnIndex]
+        const columnItem = this.list[columnIndex][valueIndex]
+        const valueItem = isObject(columnItem)
+          ? columnItem[this.props.value]
+          : columnItem
+        this.pickerValue = pickerValue
+        this.$set(this.selectValue, columnIndex, valueItem)
+        this.$set(this.selectItem, columnIndex, columnItem)
+        this.$emit('change', {
+          value: this.selectValue,
+          item: this.selectItem,
+          index: this.pickerValue,
+          change: 'scroll'
+        })
+      }
+    }
+  },
+  watch: {
+    list () {
+      this.init('list')
+    },
+    value (newVal) {
+      this.init('value')
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../style/picker-item.scss";
+</style>

+ 27 - 0
components/lb-picker/style/picker-item.scss

@@ -0,0 +1,27 @@
+.picker-item {
+	picker-view-column {
+		transition: all 0.3s;
+	}
+
+	.lb-picker-column-flex0 {
+		flex: 0;
+	}
+
+	.lb-picker-column-flex1 {
+		flex: 1;
+	}
+
+	.lb-picker-column {
+		padding: 0;
+		font-size: 36rpx;
+		text-align: center;
+		box-sizing: border-box;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		overflow: hidden;
+
+		.lb-picker-column-label {
+			transition: all 0.3s;
+		}
+	}
+}

File diff suppressed because it is too large
+ 94 - 0
components/lb-picker/style/picker.scss


+ 7 - 0
components/lb-picker/utils.js

@@ -0,0 +1,7 @@
+export function isObject (val) {
+  return Object.prototype.toString.call(val) === '[object Object]'
+}
+
+export function getIndicatorHeight () {
+  return Math.round(uni.getSystemInfoSync().screenWidth / (750 / 100))
+}

+ 395 - 0
components/picker/README.md

@@ -0,0 +1,395 @@
+# uni-app picker 选择器
+
+插件市场里面的 picker 选择器不满足自己的需求,所以自己写了一个简单的 picker 选择器,可扩展、可自定义,一般满足日常需要。  
+Github:[https://github.com/liub1934/uni-lb-picker](https://github.com/liub1934/uni-lb-picker)  
+插件市场:[https://ext.dcloud.net.cn/plugin?id=1111](https://ext.dcloud.net.cn/plugin?id=1111)
+
+## 兼容性
+
+H5 + 各平台小程序(百度除外)  
+安卓及 IOS 未测试(应该也能运行)
+已知问题:支付宝小程序单选可能会出现不对齐的现象
+
+## 功能
+
+1、单选  
+2、多级联动,非多级联动,理论支持任意级数  
+3、省市区选择,基于多级联动  
+4、自定义选择器头部确定取消按钮颜色及插槽支持  
+5、选择器可视区自定义滚动个数  
+6、自定义数据字段,满足不同人的需求  
+7、自定义选择器样式  
+8、单选及非联动选择支持扁平化的简单数据,如下形式:
+
+```javascript
+// 单选列表
+list1: ['选项1', '选项2', '选项2'],
+// 非联动选择列表
+list2: [
+  ['选项1', '选项2', '选项3'],
+  ['选项11', '选项22', '选项33'],
+  ['选项111', '选项222', '选项333']
+]
+```
+
+## 引入插件
+
+单独引入,在需要使用的页面上 import 引入即可
+
+```html
+<template>
+  <view>
+    <lb-picker></lb-picker>
+  </view>
+</template>
+
+<script>
+  import LbPicker from '@/components/lb-picker'
+  export default {
+    components: {
+      LbPicker
+    }
+  }
+</script>
+```
+
+全局引入,`main.js`中 import 引入并注册即可全局使用
+
+```jsvascript
+import LbPicker from '@/components/lb-picker'
+Vue.component("lb-picker", LbPicker)
+```
+
+npm 安装引入:
+
+```shell
+npm install uni-lb-picker
+```
+
+```jsvascript
+import LbPicker from 'uni-lb-picker'
+```
+
+## 选择器数据格式
+
+### 单选
+
+常规数据
+
+```javascript
+list: [
+  {
+    label: '选项1',
+    value: '1'
+  },
+  {
+    label: '选项2',
+    value: '2'
+  }
+]
+```
+
+扁平化简单数据
+
+```javascript
+list: ['选项1', '选项2']
+```
+
+### 多级联动
+
+```javascript
+list: [
+  {
+    label: '选项1',
+    value: '1',
+    children: [
+      {
+        label: '选项1-1',
+        value: '1-1',
+        children: [
+          {
+            label: '选项1-1-1',
+            value: '1-1-1'
+          }
+        ]
+      }
+    ]
+  }
+]
+```
+
+### 非联动选择
+
+常规数据
+
+```javascript
+list: [
+  [
+    { label: '选项1', value: '1' },
+    { label: '选项2', value: '2' },
+    { label: '选项3', value: '3' }
+  ],
+  [
+    { label: '选项11', value: '11' },
+    { label: '选项22', value: '22' },
+    { label: '选项33', value: '33' }
+  ],
+  [
+    { label: '选项111', value: '111' },
+    { label: '选项222', value: '222' },
+    { label: '选项333', value: '333' }
+  ]
+]
+```
+
+扁平化简单数据
+
+```javascript
+list: [
+  ['选项1', '选项2', '选项3'],
+  ['选项11', '选项22', '选项33'],
+  ['选项111', '选项222', '选项333']
+]
+```
+
+## 调用显示选择器
+
+通过`ref`形式手动调用`show`方法显示,隐藏同理调用`hide`
+
+```text
+<lb-picker ref="picker"></lb-picker>
+
+this.$refs.picker.show() // 显示
+this.$refs.picker.hide() // 隐藏
+```
+
+## 绑定值及设置默认值
+
+支持 vue 中`v-model`写法绑定值,无需自己维护选中值的索引。
+
+```javascript
+<lb-picker v-model="value1"></lb-picker>
+<lb-picker v-model="value2"></lb-picker>
+
+data () {
+  return {
+    value1: '' // 单选
+    value2: [] // 多列联动选择
+  }
+}
+```
+
+## 多个选择器
+
+通过设置不同的`ref`,然后调用即可
+
+```javascript
+<lb-picker ref="picker1"></lb-picker>
+<lb-picker ref="picker2"></lb-picker>
+
+this.$refs.picker1.show() // picker1显示
+this.$refs.picker2.show() // picker2显示
+```
+
+## 省市区选择
+
+省市区选择是基于多列联动选择,数据来源:[https://github.com/modood/Administrative-divisions-of-China](https://github.com/modood/Administrative-divisions-of-China),  
+省市区文件位于`/pages/demos/area-data-min.js`,自行引入即可,可参考`demo3省市区选择`,  
+也可使用自己已有的省市区数据,如果数据字段不一样,也可以自定义,参考下方自定义数据字段。
+
+## 自定义数据字段
+
+为了满足不同人的需求,插件支持自定义数据字段名称, 插件默认的数据字段如下形式:
+
+```javascript
+list: [
+  {
+    label: '选择1',
+    value: 1,
+    children: []
+  },
+  {
+    label: '选择1',
+    value: 1,
+    children: []
+  }
+]
+```
+
+如果你的数据字段和上面不一样,如下形式:
+
+```javascript
+list: [
+  {
+    text: '选择1',
+    id: 1,
+    child: []
+  },
+  {
+    text: '选择1',
+    id: 1,
+    child: []
+  }
+]
+```
+
+通过设置参数中的`props`即可,如下所示:
+
+```javascript
+<lb-picker :props="myProps"></lb-picker>
+
+data () {
+  return {
+    myProps: {
+      label: 'text',
+      value: 'id',
+      children: 'child'
+    }
+  }
+}
+```
+
+## 插槽使用
+
+选择器支持一些可自定义化的插槽,如选择器的取消和确定文字按钮,如果需要对其自定义处理的话,比如加个 icon 图标之类的,可使用插槽,使用方法如下:
+
+```html
+<lb-picker>
+  <view slot="cancel-text">我是自定义取消</view>
+  <view slot="confirm-text">我是自定义确定</view>
+</lb-picker>
+```
+
+其他插槽见下。
+
+## 参数及事件
+
+### Props
+
+| 参数                    | 说明                                                                                        | 类型                | 可选值                                                           | 默认值                                            |
+| :---------------------- | :------------------------------------------------------------------------------------------ | :------------------ | :--------------------------------------------------------------- | :------------------------------------------------ |
+| value/v-model           | 绑定值,联动选择为 Array 类型                                                               | String/Number/Array | -                                                                | -                                                 |
+| mode                    | 选择器类型,支持单列,多列联动                                                              | String              | selector 单选/multiSelector 多级联动/unlinkedSelector 多级非联动 | selector                                          |
+| list                    | 选择器数据(v1.0.7 单选及非联动多选支持扁平数据:['选项 1', '选项 2'])                       | Array               | -                                                                | -                                                 |
+| level                   | 多列联动层级,仅 mode 为 multiSelector 有效                                                 | Number              | -                                                                | 2                                                 |
+| props                   | 自定义数据字段                                                                              | Object              | -                                                                | {label:'label',value:'value',children:'children'} |
+| cancel-text             | 取消文字                                                                                    | String              | -                                                                | 取消                                              |
+| cancel-color            | 取消文字颜色                                                                                | String              | -                                                                | #999                                              |
+| confirm-text            | 确定文字                                                                                    | String              | -                                                                | 确定                                              |
+| confirm-color           | 确定文字颜色                                                                                | String              | -                                                                | #007aff                                           |
+| empty-text              | (v1.0.7 新增)选择器列表为空的时候显示的文字                                                 | String              | -                                                                | 暂无数据                                          |
+| empty-color             | (v1.0.7 新增)暂无数据文字颜色                                                               | String              | -                                                                | #999                                              |
+| column-num              | 可视滚动区域内滚动个数,最好设置奇数值                                                      | Number              | -                                                                | 5                                                 |
+| radius                  | 选择器顶部圆角,支持 rpx,如 radius="10rpx"                                                 | String              | -                                                                | -                                                 |
+| ~~column-style~~        | ~~选择器默认样式(已弃用,见下方自定义样式说明)~~                                            | Object              | -                                                                | -                                                 |
+| ~~active-column-style~~ | ~~选择器选中样式(已弃用,见下方自定义样式说明)~~                                            | Object              | -                                                                | -                                                 |
+| loading                 | 选择器是否显示加载中,可使用 loading 插槽自定义加载效果                                     | Boolean             | -                                                                | -                                                 |
+| mask-color              | 遮罩层颜色                                                                                  | String              | -                                                                | rgba(0, 0, 0, 0.4)                                |
+| close-on-click-mask     | 点击遮罩层是否关闭选择器                                                                    | Boolean             | true/false                                                       | true                                              |
+| ~~change-on-init~~      | ~~(v1.0.7 已弃用)初始化时是否触发 change 事件~~                                             | Boolean             | true/false                                                       | -                                                 |
+| dataset                 | (v1.0.7 新增)可以向组件中传递任意的自定义的数据,在`confirm`或`change`事件中可以取到        | Object              | -                                                                | -                                                 |
+| show-header             | (v1.0.8 新增)是否显示选择器头部                                                             | Boolean             | -                                                                | - true                                            |
+| inline                  | (v1.0.8 新增)inline 模式,开启后默认显示选择器,无需点击弹出,可以配合`show-header`一起使用 | Boolean             | -                                                                | -                                                 |
+
+### 方法
+
+| 方法名 | 说明       | 参数 |
+| :----- | :--------- | :--- |
+| show   | 打开选择器 | -    |
+| hide   | 关闭选择器 | -    |
+
+### Events
+
+| 事件名称 | 说明                                     | 回调参数                                                                                                                                                                                                                                                                                                                             |
+| :------- | :--------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| show     | 选择器打开时触发                         | -                                                                                                                                                                                                                                                                                                                                    |
+| hide     | 选择器隐藏时触发                         | -                                                                                                                                                                                                                                                                                                                                    |
+| change   | 选择器滚动时触发,此时不会改变绑定的值   | `{ index, item, value, change }` `index`触发滚动后新的索引,单选时是具体的索引值,多列联动选择时为数组。`item`触发滚动后新的的完整内容,包括`label`、`value`等,单选时为对象,多列选择时为数组对象。`value`触发滚动后新的 value 值,单列选择时为具体值,多列联动选择时为数组。`change`触发事件的类型,详情参考下面的 change 事件备注 |
+| confirm  | 点击选择器确定时触发,此时会改变绑定的值 | 同上`change`事件说明                                                                                                                                                                                                                                                                                                                 |
+| cancel   | 点击选择器取消时触发                     | 同上`change`事件说明                                                                                                                                                                                                                                                                                                                 |
+
+### `change` 事件备注
+
+如果绑定的值是空的,`change`触发后里面的内容都是列表的第一项。  
+`change`事件会在以下情况触发:
+
+- 初始化
+- 绑定值 value 变化
+- 选择器 list 列表变化
+- 滚动选择器
+
+以上情况会在回调函数中都可以取到`change`变化的类型,对应上面的情况包括以下:
+
+- `init`
+- `value`
+- `list`
+- `scroll`
+
+根据这些类型大家可以在`change`的时候按需处理自己的业务逻辑,比如一种常见的情况,有默认值的时候需要显示默认值的文字,此时可以`change`事件中判断`change`的类型是否是`init`,如果是的话可以取事件回调中的`item`进行显示绑定值对应的文字信息。
+
+```javascript
+handleChange (e) {
+  if (e.change === 'init') {
+    console.log(e.item.label) // 单选 选项1
+    console.log(e.item.map(item => item.label).join('-')) // 多选 选项1-选项11
+  }
+}
+```
+
+### 插槽
+
+| 插槽名        | 说明                |
+| :------------ | :------------------ |
+| cancel-text   | 选择器取消文字插槽  |
+| action-center | 选择器顶部中间插槽  |
+| confirm-text  | 选择器确定文字插槽  |
+| loading       | 选择器 loading 插槽 |
+| empty         | 选择器 空数据 插槽  |
+
+### 选择器自定义样式
+
+原先的`column-style`和`active-column-style`已弃用,如需修改默认样式及选中样式参考`demo9`
+
+```css
+<style lang="scss" scoped>
+/deep/ .lb-picker {
+  .lb-picker-column-label {
+    color: #f0ad4e;
+  }
+  .lb-picker-column-active {
+    .lb-picker-column-label {
+      color: #007aff;
+      font-weight: 700;
+    }
+  }
+}
+</style>
+```
+
+### 获取选中值的文字
+
+`@confirm`事件中可以拿到:
+
+单选:
+
+```javascript
+handleConfirm (e) {
+  console.log(e.item.label) // 选项1
+}
+```
+
+联动选择:
+
+```javascript
+handleConfirm (e) {
+  console.log(e.item.map(item => item.label).join('-')) // 选项1-选项11
+}
+```
+
+## Tips
+
+微信小程序端,滚动时在 iOS 自带振动反馈,可在系统设置 -> 声音与触感 -> 系统触感反馈中关闭
+
+## 其他
+
+其他功能参考示例 Demo 代码。

+ 256 - 0
components/picker/index.vue

@@ -0,0 +1,256 @@
+<template>
+  <view :class="['lb-picker', inline ? 'lb-picker-inline' : '']">
+    <view class="lb-picker-mask"
+      v-show="visible && !inline"
+      :style="{ 'background-color': maskColor }"
+      @touchmove.stop.prevent="moveHandle">
+    </view>
+    <view :class="['lb-picker-container', visible ? 'lb-picker-toggle' : '']"
+      :style="{ borderRadius: `${radius} ${radius} 0 0` }">
+      <view v-if="showHeader"
+        class="lb-picker-header"
+        :style="{
+          height: pickerHeaderHeight,
+          'line-height': pickerHeaderHeight
+        }">
+        <view class="lb-picker-action lb-picker-left">
+          <view class="lb-picker-action-cancel"
+            @tap.stop="handleCancel">
+            <slot v-if="$slots['cancel-text']"
+              name="cancel-text"> </slot>
+            <view v-else
+              class="action-cancel-text"
+              :style="{ color: cancelColor }">
+              {{ cancelText }}
+            </view>
+          </view>
+        </view>
+
+        <view class="lb-picker-action lb-picker-center"
+          v-if="$slots['action-center']">
+          <slot name="action-center"></slot>
+        </view>
+
+        <view class="lb-picker-action lb-picker-right">
+          <view class="lb-picker-action-confirm"
+            @tap.stop="handleConfirm">
+            <slot v-if="$slots['confirm-text']"
+              name="confirm-text"> </slot>
+            <view v-else
+              class="action-confirm-text"
+              :style="{ color: confirmColor }">
+              {{ confirmText }}
+            </view>
+          </view>
+        </view>
+      </view>
+      <view class="lb-picker-content"
+        :style="{ height: pickerContentHeight }">
+        <!-- loading -->
+        <view v-if="loading"
+          class="lb-picker-loading">
+          <slot name="loading">
+            <view class="lb-picker-loading-img"></view>
+          </slot>
+        </view>
+
+        <!-- 暂无数据 -->
+        <view v-if="isEmpty && !loading"
+          class="lb-picker-empty">
+          <slot name="empty">
+            <text class="lb-picker-empty-text"
+              :style="{ color: emptyColor }">
+              {{ emptyText }}
+            </text>
+          </slot>
+        </view>
+
+        <!-- 单选 -->
+        <selector-picker v-if="mode === 'selector' && !loading && !isEmpty"
+          :value="22"
+          :list="list"
+          :props="pickerProps"
+          :height="pickerContentHeight"
+          :inline="inline"
+          @change="handleChange">
+        </selector-picker>
+
+        <!-- 多列联动 -->
+        <multi-selector-picker v-if="mode === 'multiSelector' && !loading && !isEmpty"
+          :value="value"
+          :list="list"
+          :level="level"
+          :visible="visible"
+          :props="pickerProps"
+          :height="pickerContentHeight"
+          :inline="inline"
+          @change="handleChange">
+        </multi-selector-picker>
+
+        <!-- 非联动选择 -->
+        <unlinked-selector-picker v-if="mode === 'unlinkedSelector' && !loading && !isEmpty"
+          :value="value"
+          :list="list"
+          :visible="visible"
+          :props="pickerProps"
+          :height="pickerContentHeight"
+          :inline="inline"
+          @change="handleChange">
+        </unlinked-selector-picker>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+const defaultProps = {
+  label: 'name',
+  value: 'id',
+  children: 'children'
+}
+import { getIndicatorHeight } from './utils'
+import SelectorPicker from './pickers/selector-picker'
+import MultiSelectorPicker from './pickers/multi-selector-picker'
+import UnlinkedSelectorPicker from './pickers/unlinked-selector-picker'
+const indicatorHeight = getIndicatorHeight()
+export default {
+  components: {
+    SelectorPicker,
+    MultiSelectorPicker,
+    UnlinkedSelectorPicker
+  },
+  props: {
+    value: [String, Number, Array],
+    list: Array,
+    mode: {
+      type: String,
+      default: 'selector'
+    },
+    level: {
+      type: Number,
+      default: 1
+    },
+    props: {
+      type: Object
+    },
+    cancelText: {
+      type: String,
+      default: '取消'
+    },
+    cancelColor: String,
+    confirmText: {
+      type: String,
+      default: '确定'
+    },
+    confirmColor: String,
+    canHide: {
+      type: Boolean,
+      default: true
+    },
+    emptyColor: String,
+    emptyText: {
+      type: String,
+      default: '暂无数据'
+    },
+    radius: String,
+    columnNum: {
+      type: Number,
+      default: 5
+    },
+    loading: Boolean,
+    closeOnClickMask: {
+      type: Boolean,
+      default: true
+    },
+    maskColor: {
+      type: String,
+      default: 'rgba(0, 0, 0, 0.4)'
+    },
+    dataset: Object,
+    inline: Boolean,
+    showHeader: {
+      type: Boolean,
+      default: true
+    }
+  },
+  data () {
+    return {
+      visible: false,
+      myValue: this.value,
+      picker: {},
+      pickerProps: Object.assign({}, defaultProps, this.props),
+      pickerHeaderHeight: indicatorHeight + 'px',
+      pickerContentHeight: indicatorHeight * this.columnNum + 'px'
+    }
+  },
+  computed: {
+    isEmpty () {
+      if (!this.list) return true
+      if (this.list && !this.list.length) return true
+      return false
+    }
+  },
+  methods: {
+    show () {
+      if (this.inline) return
+      this.visible = true
+    },
+    hide () {
+      if (this.inline) return
+      this.visible = false
+    },
+    handleCancel () {
+      this.$emit('cancel', this.picker)
+      if (this.canHide && !this.inline) {
+        this.hide()
+      }
+    },
+    handleConfirm () {
+      if (this.isEmpty) {
+        this.$emit('confirm', null)
+        this.hide()
+      } else {
+        const picker = JSON.parse(JSON.stringify(this.picker))
+		console.log(this.picker,'confirm')
+        this.myValue = picker.value
+        this.$emit('confirm', this.picker)
+        if (this.canHide) this.hide()
+      }
+    },
+    handleChange ({ value, item, index, change }) {
+      this.picker.value = value
+      this.picker.item = item
+      this.picker.index = index
+      this.picker.change = change
+      this.picker.dataset = this.dataset || {}
+      this.$emit('change', this.picker)
+	  
+    },
+    // handleMaskTap () {
+    //   if (this.closeOnClickMask) {
+    //     this.visible = false
+    //   }
+    // },
+    moveHandle () {}
+  },
+  watch: {
+    value (newVal) {
+      this.myValue = newVal
+    },
+    myValue (newVal) {
+      this.$emit('input', newVal)
+    },
+    visible (newVisible) {
+      if (newVisible) {
+        this.$emit('show')
+      } else {
+        this.$emit('hide')
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "./style/picker.scss";
+</style>

+ 131 - 0
components/picker/pickers/multi-selector-picker.vue

@@ -0,0 +1,131 @@
+<template>
+  <view class="multi-selector picker-item"
+    :style="{ height: height }">
+    <picker-view :value="pickerValue"
+      :indicator-style="indicatorStyle"
+      :style="{ height: height }"
+      @change="handleChange">
+      <picker-view-column v-for="(column, index) in pickerColumns"
+        :key="index">
+        <view v-for="(item, i) in column || []"
+          :class="[
+            'lb-picker-column',
+            item[props.value] === selectValue[index]
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+          :key="i"
+          :style="{ height: columnHeight, 'line-height': columnHeight }">
+          <view class="lb-picker-column-label">
+            {{ item[props.label] }}
+          </view>
+        </view>
+      </picker-view-column>
+    </picker-view>
+  </view>
+</template>
+
+<script>
+import { getIndicatorHeight } from '../utils.js'
+const indicatorHeight = getIndicatorHeight()
+export default {
+  props: {
+    value: Array,
+    list: Array,
+    props: Object,
+    level: Number,
+    visible: Boolean,
+    height: String
+  },
+  data () {
+    return {
+      pickerValue: [],
+      pickerColumns: [],
+      selectValue: [],
+      selectItem: [],
+      columnHeight: indicatorHeight + 'px',
+      indicatorStyle: `height: ${indicatorHeight}px`
+    }
+  },
+  created () {
+    this.init('init')
+  },
+  methods: {
+    init (changeType) {
+      this.setPickerItems(this.list)
+      this.$emit('change', {
+        value: this.selectValue,
+        item: this.selectItem,
+        index: this.pickerValue,
+        change: changeType
+      })
+    },
+    handleChange (item) {
+      const pickerValue = item.detail.value
+      const columnIndex = pickerValue.findIndex(
+        (item, i) => item !== this.pickerValue[i]
+      )
+      const valueIndex = pickerValue[columnIndex]
+      this.setPickerChange(pickerValue, valueIndex, columnIndex)
+    },
+    setPickerChange (pickerValue, valueIndex, columnIndex) {
+      for (let i = 0; i < this.level; i++) {
+        if (i > columnIndex) {
+          pickerValue[i] = 0
+          const column =
+            this.pickerColumns[i - 1][valueIndex] ||
+            this.pickerColumns[i - 1][0]
+          this.$set(this.pickerColumns, i, column[this.props.children] || [])
+          valueIndex = 0
+        }
+        this.pickerValue = pickerValue
+        this.selectItem[i] = this.pickerColumns[i][pickerValue[i]]
+        if (this.selectItem[i]) {
+          this.selectValue[i] = this.selectItem[i][this.props.value]
+        } else {
+          const spliceNum = this.level - i
+          this.pickerValue.splice(i, spliceNum)
+          this.selectValue.splice(i, spliceNum)
+          this.selectItem.splice(i, spliceNum)
+          this.pickerColumns.splice(i, spliceNum)
+          break
+        }
+      }
+      this.$emit('change', {
+        value: this.selectValue,
+        item: this.selectItem,
+        index: this.pickerValue,
+        change: 'scroll'
+      })
+    },
+    setPickerItems (list = [], index = 0) {
+      if (!list.length) return
+      const defaultValue = this.value || []
+      if (index < this.level) {
+        const value = defaultValue[index] || ''
+        let i = list.findIndex(item => item[this.props.value] === value)
+        i = i > -1 ? i : 0
+        this.$set(this.pickerValue, index, i)
+        this.$set(this.pickerColumns, index, list)
+        if (list[i]) {
+          this.$set(this.selectValue, index, list[i][this.props.value])
+          this.$set(this.selectItem, index, list[i])
+          this.setPickerItems(list[i][this.props.children] || [], index + 1)
+        }
+      }
+    }
+  },
+  watch: {
+    value (newVal) {
+      this.init('value')
+    },
+    list () {
+      this.init('list')
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../style/picker-item.scss";
+</style>

+ 99 - 0
components/picker/pickers/selector-picker.vue

@@ -0,0 +1,99 @@
+<template>
+  <view class="selector-picker picker-item"
+    :style="{ height: height }">
+    <picker-view :value="pickerValue"
+      :indicator-style="indicatorStyle"
+      :style="{ height: height }"
+      @change="handleChange">
+      <picker-view-column>
+        <view v-for="(item, i) in list"
+          :class="[
+            'lb-picker-column',
+            item[props.value] || item === selectValue
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+          :key="i"
+          :style="{ height: columnHeight, lineHeight: columnHeight }">
+          <view class="lb-picker-column-label">
+            {{ item[props.label] || item }}
+          </view>
+        </view>
+      </picker-view-column>
+    </picker-view>
+  </view>
+</template>
+
+<script>
+import { getIndicatorHeight, isObject } from '../utils.js'
+const indicatorHeight = getIndicatorHeight()
+export default {
+  props: {
+    value: [String, Number],
+    list: Array,
+    props: Object,
+    visible: Boolean,
+    height: String
+  },
+  data () {
+    return {
+      pickerValue: [],
+      selectValue: '',
+      columnHeight: indicatorHeight + 'px',
+      indicatorStyle: `height: ${indicatorHeight}px`
+    }
+  },
+  created () {
+    this.init('init')
+  },
+  methods: {
+    init (changeType) {
+      if (this.list && this.list.length) {
+       let index = this.list.findIndex(item => {
+         return isObject(item)
+           ? item[this.props.value] === this.value
+           : item === this.value
+       })
+        index = index > -1 ? index : 0
+        const listItem = this.list[index]
+        this.pickerValue = [index]
+        this.selectValue = isObject(listItem)
+          ? listItem[this.props.value]
+          : listItem
+        this.$emit('change', {
+          value: this.selectValue,
+          item: listItem,
+          index: index,
+          change: changeType
+        })
+      }
+    },
+    handleChange (item) {
+      const index = item.detail.value[0] || 0
+      const listItem = this.list[index]
+      this.selectValue = isObject(listItem)
+        ? listItem[this.props.value]
+        : listItem
+      this.pickerValue = item.detail.value
+      this.$emit('change', {
+        value: this.selectValue,
+        item: listItem,
+        index: index,
+        change: 'scroll'
+      })
+    }
+  },
+  watch: {
+    list () {
+      this.init('list')
+    },
+    value (newVal) {
+      this.init('value')
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../style/picker-item.scss";
+</style>

+ 120 - 0
components/picker/pickers/unlinked-selector-picker.vue

@@ -0,0 +1,120 @@
+<template>
+  <view class="selector-picker picker-item"
+    :style="{ height: height }">
+    <picker-view :value="pickerValue"
+      :indicator-style="indicatorStyle"
+      :style="{ height: height }"
+      @change="handleChange">
+      <picker-view-column v-for="(column, index) in pickerColumns"
+        :key="index">
+        <view v-for="(item, i) in column"
+          :class="[
+            'lb-picker-column',
+            item[props.value] || item === selectValue[index]
+              ? 'lb-picker-column-active'
+              : ''
+          ]"
+          :key="i"
+          :style="{ height: columnHeight, 'line-height': columnHeight }">
+          <view class="lb-picker-column-label">
+            {{ item[props.label] || item }}
+          </view>
+        </view>
+      </picker-view-column>
+    </picker-view>
+  </view>
+</template>
+
+<script>
+import { getIndicatorHeight, isObject } from '../utils.js'
+const indicatorHeight = getIndicatorHeight()
+export default {
+  props: {
+    value: Array,
+    list: Array,
+    props: Object,
+    visible: Boolean,
+    height: String,
+    indicatorHeight: Number
+  },
+  data () {
+    return {
+      pickerValue: [],
+      pickerColumns: [],
+      selectValue: [],
+      selectItem: [],
+      columnHeight: indicatorHeight + 'px',
+      indicatorStyle: `height: ${indicatorHeight}px`
+    }
+  },
+  created () {
+    this.init('init')
+  },
+  methods: {
+    init (changeType) {
+      if (this.list && this.list.length) {
+        this.pickerColumns = this.list
+        this.setPickerValue()
+        this.$emit('change', {
+          value: this.selectValue,
+          item: this.selectItem,
+          index: this.pickerValue,
+          change: changeType
+        })
+      }
+    },
+    setPickerValue (value) {
+      this.list.forEach((item, i) => {
+        let index = item.findIndex(item => {
+          return isObject(item)
+            ? item[this.props.value] === this.value[i]
+            : item === this.value[i]
+        })
+        index = index > -1 ? index : 0
+        const columnItem = this.list[i][index]
+        const valueItem = isObject(columnItem)
+          ? columnItem[this.props.value]
+          : columnItem
+        this.$set(this.pickerValue, i, index)
+        this.$set(this.selectValue, i, valueItem)
+        this.$set(this.selectItem, i, columnItem)
+      })
+    },
+
+    handleChange (item) {
+      const pickerValue = item.detail.value
+      const columnIndex = pickerValue.findIndex(
+        (item, i) => item !== this.pickerValue[i]
+      )
+      if (columnIndex > -1) {
+        const valueIndex = pickerValue[columnIndex]
+        const columnItem = this.list[columnIndex][valueIndex]
+        const valueItem = isObject(columnItem)
+          ? columnItem[this.props.value]
+          : columnItem
+        this.pickerValue = pickerValue
+        this.$set(this.selectValue, columnIndex, valueItem)
+        this.$set(this.selectItem, columnIndex, columnItem)
+        this.$emit('change', {
+          value: this.selectValue,
+          item: this.selectItem,
+          index: this.pickerValue,
+          change: 'scroll'
+        })
+      }
+    }
+  },
+  watch: {
+    list () {
+      this.init('list')
+    },
+    value (newVal) {
+      this.init('value')
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "../style/picker-item.scss";
+</style>

+ 27 - 0
components/picker/style/picker-item.scss

@@ -0,0 +1,27 @@
+.picker-item {
+	picker-view-column {
+		transition: all 0.3s;
+	}
+
+	.lb-picker-column-flex0 {
+		flex: 0;
+	}
+
+	.lb-picker-column-flex1 {
+		flex: 1;
+	}
+
+	.lb-picker-column {
+		padding: 0;
+		font-size: 36rpx;
+		text-align: center;
+		box-sizing: border-box;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		overflow: hidden;
+
+		.lb-picker-column-label {
+			transition: all 0.3s;
+		}
+	}
+}

File diff suppressed because it is too large
+ 92 - 0
components/picker/style/picker.scss


+ 7 - 0
components/picker/utils.js

@@ -0,0 +1,7 @@
+export function isObject (val) {
+  return Object.prototype.toString.call(val) === '[object Object]'
+}
+
+export function getIndicatorHeight () {
+  return Math.round(uni.getSystemInfoSync().screenWidth / (750 / 100))
+}

+ 196 - 0
components/share.vue

@@ -0,0 +1,196 @@
+<template>
+	<view v-if="show" class="mask" @click="toggleMask" @touchmove.stop.prevent="stopPrevent" :style="{ backgroundColor: backgroundColor }">
+		<view
+			class="mask-content"
+			@click.stop.prevent="stopPrevent"
+			:style="[
+				{
+					height: config.height,
+					transform: transform
+				}
+			]"
+		>
+			<scroll-view class="view-content" scroll-y>
+				<view class="share-header">分享到</view>
+				<view class="share-list">
+					<view v-for="(item, index) in shareList" :key="index" class="share-item" @click="shareToFriend(item.text)">
+						<image class="itemImage" :src="item.icon" mode=""></image>
+						<text class="itemText">{{ item.text }}</text>
+					</view>
+				</view>
+			</scroll-view>
+			<view class="bottomButtom b-t" @click="toggleMask">取消</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			transform: 'translateY(50vh)',
+			timer: 0,
+			backgroundColor: 'rgba(0,0,0,0)',
+			show: false,
+			config: {}
+		};
+	},
+	props: {
+		contentHeight: {
+			type: Number,
+			default: 0
+		},
+		//是否是tabbar页面
+		hasTabbar: {
+			type: Boolean,
+			default: false
+		},
+		shareList: {
+			type: Array,
+			default: function() {
+				return [];
+			}
+		}
+	},
+	created() {
+		const height = uni.upx2px(this.contentHeight) + 'px';
+		this.config = {
+			height: height,
+			transform: `translateY(${height})`,
+			backgroundColor: 'rgba(0,0,0,.4)'
+		};
+		this.transform = this.config.transform;
+	},
+	methods: {
+		toggleMask() {
+			//防止高频点击
+			if (this.timer == 1) {
+				return;
+			}
+			this.timer = 1;
+			setTimeout(() => {
+				this.timer = 0;
+			}, 500);
+
+			if (this.show) {
+				this.transform = this.config.transform;
+				this.backgroundColor = 'rgba(0,0,0,0)';
+				setTimeout(() => {
+					this.show = false;
+					this.hasTabbar && uni.showTabBar();
+				}, 200);
+				return;
+			}
+
+			this.show = true;
+			//等待mask重绘完成执行
+			if (this.hasTabbar) {
+				uni.hideTabBar({
+					success: () => {
+						setTimeout(() => {
+							this.backgroundColor = this.config.backgroundColor;
+							this.transform = 'translateY(0px)';
+						}, 10);
+					}
+				});
+			} else {
+				setTimeout(() => {
+					this.backgroundColor = this.config.backgroundColor;
+					this.transform = 'translateY(0px)';
+				}, 10);
+			}
+		},
+		//防止冒泡和滚动穿透
+		stopPrevent() {},
+		//分享操作
+		shareToFriend(type) {
+			this.$api.msg(`分享给${type}`);
+			this.toggleMask();
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.mask {
+	position: fixed;
+	left: 0;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	display: flex;
+	justify-content: center;
+	align-items: flex-end;
+	z-index: 998;
+	transition: 0.3s;
+	.bottomButtom {
+		position: absolute;
+		left: 0;
+		bottom: 0;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		width: 100%;
+		height: 90rpx;
+		background: #fff;
+		z-index: 9;
+		font-size: $font-base + 2rpx;
+		color: $font-color-dark;
+	}
+}
+.mask-content {
+	width: 100%;
+	height: 580rpx;
+	transition: 0.3s;
+	background: #fff;
+	&.has-bottom {
+		padding-bottom: 90rpx;
+	}
+	.view-content {
+		height: 100%;
+	}
+}
+.share-header {
+	height: 110rpx;
+	font-size: $font-base + 2rpx;
+	color: font-color-dark;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	padding-top: 10rpx;
+	&:before,
+	&:after {
+		content: '';
+		width: 240rpx;
+		heighg: 0;
+		border-top: 1px solid $border-color-base;
+		transform: scaleY(0.5);
+		margin-right: 30rpx;
+	}
+	&:after {
+		margin-left: 30rpx;
+		margin-right: 0;
+	}
+}
+.share-list {
+	display: flex;
+	flex-wrap: wrap;
+}
+.share-item {
+	min-width: 33.33%;
+	display: flex;
+	flex-direction: column;
+	justify-content: center;
+	align-items: center;
+	height: 180rpx;
+	.itemImage {
+		width: 80rpx;
+		height: 80rpx;
+		margin-bottom: 16rpx;
+	}
+	.itemText {
+		font-size: $font-base;
+		color: $font-color-base;
+	}
+}
+</style>

+ 206 - 0
components/ss-calendar/ss-calendar.vue

@@ -0,0 +1,206 @@
+<template>
+	<view class="calendar__wrap">
+		<view class="header">
+			<view class="current-date">{{ currentDate }}</view>
+		</view>
+		<view class="body">
+			<view class="weeks">
+				<view class="week__item" v-for="week in weeks" :key="week">{{ week }}</view>
+			</view>
+			<view class="day__list">
+				<view class="day__item" v-for="(item, index) in dateData" :key="index">
+					<view class="checked-box" :class="[checksClass]" v-if="item === 'checked'">
+						<text class="checked iconfont iconfavor" v-if="!checksIcon"></text>
+						<image v-else :src="checksIcon" mode="aspectFit"></image>
+						<view class="check_text" v-if="checkTextShow">{{ index }}</view>
+					</view>
+					<text class="current-box" :class="[item === day ? (actionClass ? actionClass : 'current') : '']" v-else>{{ item }}</text>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		//选中的日期数据
+		checks: {
+			type: Array,
+			default() {
+				// 例子[1,2,3,4],表示本月1,2,3,4号4天被选中
+				return [];
+			}
+		},
+		// 选中物品的样式类
+		checksClass: {
+			type: String,
+			default: ''
+		},
+		// 选中时图标
+		checksIcon: {
+			type: String
+		},
+		// 选中时是否显示文字
+		checkTextShow: {
+			type: Boolean, 
+			default: false
+		},
+		// 表示当前日期的样式
+		actionClass: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		const { year, month, day } = this.getDate();
+		const dateData = this.getDateData(year, month);
+		return {
+			year,
+			month,
+			day,
+			dateData,
+			weeks: ['日', '一', '二', '三', '四', '五', '六']
+		};
+	},
+	computed: {
+		// 获取当前日期
+		currentDate() {
+			return `${this.year}-${this.format(this.month)}`;
+		}
+	},
+	watch: {
+		checks(val) {
+			const { year, month } = this.getDate();
+			const dateData = this.getDateData(year, month);
+			this.dateData = dateData;
+		}
+	},
+	methods: {
+		getDate(current) {
+			const date = current ? new Date(current) : new Date();
+			const year = date.getFullYear();
+			const month = date.getMonth() + 1;
+			const day = date.getDate();
+			return {
+				year,
+				month,
+				day
+			};
+		},
+		getDateData(year, month) {
+			const date = new Date('${year}/${month}/1');
+			const firstDayWeek = date.getDay();
+			const data = [...this.getEmptys(firstDayWeek), ...this.getDays(firstDayWeek)];
+			return data;
+		},
+		getEmptys(count) {
+			let arr = [];
+			if (count) {
+				for (let i = 0; i < count; i++) {
+					arr.push('');
+				}
+			}
+			return arr;
+		},
+		getLastDay() {
+			let { year, month } = this.getDate();
+			month += 1;
+			if (month > 11) {
+				year += 1;
+				month = 1;
+			}
+			let firstDayTimeStamp = new Date(`${year}/${month}/1`).getTime();
+			let oneDayTimeStamp = 24 * 60 * 60 * 1000;
+			let lastDay = new Date(firstDayTimeStamp - oneDayTimeStamp).getDate();
+			return lastDay;
+		},
+		getDays() {
+			const lastDay = this.getLastDay();
+			const days = [];
+			for (let i = 1; i <= lastDay; i++) {
+				days.push(this.checks.includes(i) ? 'checked' : i);
+			}
+			return days;
+		},
+		format(num) {
+			return num < 10 ? `0${num}` : num;
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.calendar__wrap {
+	background-color: #fff;
+	color: $uni-text-color;
+	.header {
+		padding: 0 24rpx;
+		.current-date {
+			text-align: center;
+			font-size: $font-lg + 2rpx;
+			// border-bottom: 2rpx solid #eee;
+			padding: 32rpx 0;
+		}
+	}
+	.body {
+		.weeks {
+			display: flex;
+			font-size: $font-lg;
+			padding: 10rpx 0;
+			background-color: #f4f7ff;
+			.week__item {
+				flex: 1;
+				text-align: center;
+			}
+		}
+		.day__list {
+			display: flex;
+			flex-wrap: wrap;
+			.day__item {
+				display: flex;
+				justify-content: center;
+				width: 14.285%;
+				text-align: center;
+				padding: 30rpx 0;
+				font-size: 34rpx;
+				color: $font-color-light;
+				.checked-box,
+				.current-box {
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					border-radius: 100%;
+					box-sizing: border-box;
+					position: relative;
+				}
+				image,
+				.checked-box,
+				.current-box,
+				.check_text {
+					width: 56rpx;
+					height: 56rpx;
+					line-height: 56rpx;
+				}
+				image,
+				.check_text {
+					position: absolute;
+					top: 0;
+					left: 0;
+				}
+				.checked {
+					font-size: 40rpx;
+					background-color: #3f9dff;
+					color: #fff;
+				}
+				.current {
+					padding: 12rpx;
+					background-color: $base-color;
+					color: #fff;
+					font-size: 28rpx;
+				}
+			}
+		}
+	}
+}
+</style>

+ 1201 - 0
components/tki-qrcode/qrcode.js

@@ -0,0 +1,1201 @@
+let QRCode = {};
+(function () {
+    /**
+     * 获取单个字符的utf8编码
+     * unicode BMP平面约65535个字符
+     * @param {num} code
+     * return {array}
+     */
+    function unicodeFormat8(code) {
+        // 1 byte
+        var c0, c1, c2;
+        if (code < 128) {
+            return [code];
+            // 2 bytes
+        } else if (code < 2048) {
+            c0 = 192 + (code >> 6);
+            c1 = 128 + (code & 63);
+            return [c0, c1];
+            // 3 bytes
+        } else {
+            c0 = 224 + (code >> 12);
+            c1 = 128 + (code >> 6 & 63);
+            c2 = 128 + (code & 63);
+            return [c0, c1, c2];
+        }
+    }
+    /**
+     * 获取字符串的utf8编码字节串
+     * @param {string} string
+     * @return {array}
+     */
+    function getUTF8Bytes(string) {
+        var utf8codes = [];
+        for (var i = 0; i < string.length; i++) {
+            var code = string.charCodeAt(i);
+            var utf8 = unicodeFormat8(code);
+            for (var j = 0; j < utf8.length; j++) {
+                utf8codes.push(utf8[j]);
+            }
+        }
+        return utf8codes;
+    }
+    /**
+     * 二维码算法实现
+     * @param {string} data              要编码的信息字符串
+     * @param {num} errorCorrectLevel 纠错等级
+     */
+    function QRCodeAlg(data, errorCorrectLevel) {
+        this.typeNumber = -1; //版本
+        this.errorCorrectLevel = errorCorrectLevel;
+        this.modules = null; //二维矩阵,存放最终结果
+        this.moduleCount = 0; //矩阵大小
+        this.dataCache = null; //数据缓存
+        this.rsBlocks = null; //版本数据信息
+        this.totalDataCount = -1; //可使用的数据量
+        this.data = data;
+        this.utf8bytes = getUTF8Bytes(data);
+        this.make();
+    }
+    QRCodeAlg.prototype = {
+        constructor: QRCodeAlg,
+        /**
+         * 获取二维码矩阵大小
+         * @return {num} 矩阵大小
+         */
+        getModuleCount: function () {
+            return this.moduleCount;
+        },
+        /**
+         * 编码
+         */
+        make: function () {
+            this.getRightType();
+            this.dataCache = this.createData();
+            this.createQrcode();
+        },
+        /**
+         * 设置二位矩阵功能图形
+         * @param  {bool} test 表示是否在寻找最好掩膜阶段
+         * @param  {num} maskPattern 掩膜的版本
+         */
+        makeImpl: function (maskPattern) {
+            this.moduleCount = this.typeNumber * 4 + 17;
+            this.modules = new Array(this.moduleCount);
+            for (var row = 0; row < this.moduleCount; row++) {
+                this.modules[row] = new Array(this.moduleCount);
+            }
+            this.setupPositionProbePattern(0, 0);
+            this.setupPositionProbePattern(this.moduleCount - 7, 0);
+            this.setupPositionProbePattern(0, this.moduleCount - 7);
+            this.setupPositionAdjustPattern();
+            this.setupTimingPattern();
+            this.setupTypeInfo(true, maskPattern);
+            if (this.typeNumber >= 7) {
+                this.setupTypeNumber(true);
+            }
+            this.mapData(this.dataCache, maskPattern);
+        },
+        /**
+         * 设置二维码的位置探测图形
+         * @param  {num} row 探测图形的中心横坐标
+         * @param  {num} col 探测图形的中心纵坐标
+         */
+        setupPositionProbePattern: function (row, col) {
+            for (var r = -1; r <= 7; r++) {
+                if (row + r <= -1 || this.moduleCount <= row + r) continue;
+                for (var c = -1; c <= 7; c++) {
+                    if (col + c <= -1 || this.moduleCount <= col + c) continue;
+                    if ((0 <= r && r <= 6 && (c == 0 || c == 6)) || (0 <= c && c <= 6 && (r == 0 || r == 6)) || (2 <= r && r <= 4 && 2 <= c && c <= 4)) {
+                        this.modules[row + r][col + c] = true;
+                    } else {
+                        this.modules[row + r][col + c] = false;
+                    }
+                }
+            }
+        },
+        /**
+         * 创建二维码
+         * @return {[type]} [description]
+         */
+        createQrcode: function () {
+            var minLostPoint = 0;
+            var pattern = 0;
+            var bestModules = null;
+            for (var i = 0; i < 8; i++) {
+                this.makeImpl(i);
+                var lostPoint = QRUtil.getLostPoint(this);
+                if (i == 0 || minLostPoint > lostPoint) {
+                    minLostPoint = lostPoint;
+                    pattern = i;
+                    bestModules = this.modules;
+                }
+            }
+            this.modules = bestModules;
+            this.setupTypeInfo(false, pattern);
+            if (this.typeNumber >= 7) {
+                this.setupTypeNumber(false);
+            }
+        },
+        /**
+         * 设置定位图形
+         * @return {[type]} [description]
+         */
+        setupTimingPattern: function () {
+            for (var r = 8; r < this.moduleCount - 8; r++) {
+                if (this.modules[r][6] != null) {
+                    continue;
+                }
+                this.modules[r][6] = (r % 2 == 0);
+                if (this.modules[6][r] != null) {
+                    continue;
+                }
+                this.modules[6][r] = (r % 2 == 0);
+            }
+        },
+        /**
+         * 设置矫正图形
+         * @return {[type]} [description]
+         */
+        setupPositionAdjustPattern: function () {
+            var pos = QRUtil.getPatternPosition(this.typeNumber);
+            for (var i = 0; i < pos.length; i++) {
+                for (var j = 0; j < pos.length; j++) {
+                    var row = pos[i];
+                    var col = pos[j];
+                    if (this.modules[row][col] != null) {
+                        continue;
+                    }
+                    for (var r = -2; r <= 2; r++) {
+                        for (var c = -2; c <= 2; c++) {
+                            if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {
+                                this.modules[row + r][col + c] = true;
+                            } else {
+                                this.modules[row + r][col + c] = false;
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        /**
+         * 设置版本信息(7以上版本才有)
+         * @param  {bool} test 是否处于判断最佳掩膜阶段
+         * @return {[type]}      [description]
+         */
+        setupTypeNumber: function (test) {
+            var bits = QRUtil.getBCHTypeNumber(this.typeNumber);
+            for (var i = 0; i < 18; i++) {
+                var mod = (!test && ((bits >> i) & 1) == 1);
+                this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;
+                this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
+            }
+        },
+        /**
+         * 设置格式信息(纠错等级和掩膜版本)
+         * @param  {bool} test
+         * @param  {num} maskPattern 掩膜版本
+         * @return {}
+         */
+        setupTypeInfo: function (test, maskPattern) {
+            var data = (QRErrorCorrectLevel[this.errorCorrectLevel] << 3) | maskPattern;
+            var bits = QRUtil.getBCHTypeInfo(data);
+            // vertical
+            for (var i = 0; i < 15; i++) {
+                var mod = (!test && ((bits >> i) & 1) == 1);
+                if (i < 6) {
+                    this.modules[i][8] = mod;
+                } else if (i < 8) {
+                    this.modules[i + 1][8] = mod;
+                } else {
+                    this.modules[this.moduleCount - 15 + i][8] = mod;
+                }
+                // horizontal
+                var mod = (!test && ((bits >> i) & 1) == 1);
+                if (i < 8) {
+                    this.modules[8][this.moduleCount - i - 1] = mod;
+                } else if (i < 9) {
+                    this.modules[8][15 - i - 1 + 1] = mod;
+                } else {
+                    this.modules[8][15 - i - 1] = mod;
+                }
+            }
+            // fixed module
+            this.modules[this.moduleCount - 8][8] = (!test);
+        },
+        /**
+         * 数据编码
+         * @return {[type]} [description]
+         */
+        createData: function () {
+            var buffer = new QRBitBuffer();
+            var lengthBits = this.typeNumber > 9 ? 16 : 8;
+            buffer.put(4, 4); //添加模式
+            buffer.put(this.utf8bytes.length, lengthBits);
+            for (var i = 0, l = this.utf8bytes.length; i < l; i++) {
+                buffer.put(this.utf8bytes[i], 8);
+            }
+            if (buffer.length + 4 <= this.totalDataCount * 8) {
+                buffer.put(0, 4);
+            }
+            // padding
+            while (buffer.length % 8 != 0) {
+                buffer.putBit(false);
+            }
+            // padding
+            while (true) {
+                if (buffer.length >= this.totalDataCount * 8) {
+                    break;
+                }
+                buffer.put(QRCodeAlg.PAD0, 8);
+                if (buffer.length >= this.totalDataCount * 8) {
+                    break;
+                }
+                buffer.put(QRCodeAlg.PAD1, 8);
+            }
+            return this.createBytes(buffer);
+        },
+        /**
+         * 纠错码编码
+         * @param  {buffer} buffer 数据编码
+         * @return {[type]}
+         */
+        createBytes: function (buffer) {
+            var offset = 0;
+            var maxDcCount = 0;
+            var maxEcCount = 0;
+            var length = this.rsBlock.length / 3;
+            var rsBlocks = new Array();
+            for (var i = 0; i < length; i++) {
+                var count = this.rsBlock[i * 3 + 0];
+                var totalCount = this.rsBlock[i * 3 + 1];
+                var dataCount = this.rsBlock[i * 3 + 2];
+                for (var j = 0; j < count; j++) {
+                    rsBlocks.push([dataCount, totalCount]);
+                }
+            }
+            var dcdata = new Array(rsBlocks.length);
+            var ecdata = new Array(rsBlocks.length);
+            for (var r = 0; r < rsBlocks.length; r++) {
+                var dcCount = rsBlocks[r][0];
+                var ecCount = rsBlocks[r][1] - dcCount;
+                maxDcCount = Math.max(maxDcCount, dcCount);
+                maxEcCount = Math.max(maxEcCount, ecCount);
+                dcdata[r] = new Array(dcCount);
+                for (var i = 0; i < dcdata[r].length; i++) {
+                    dcdata[r][i] = 0xff & buffer.buffer[i + offset];
+                }
+                offset += dcCount;
+                var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
+                var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);
+                var modPoly = rawPoly.mod(rsPoly);
+                ecdata[r] = new Array(rsPoly.getLength() - 1);
+                for (var i = 0; i < ecdata[r].length; i++) {
+                    var modIndex = i + modPoly.getLength() - ecdata[r].length;
+                    ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0;
+                }
+            }
+            var data = new Array(this.totalDataCount);
+            var index = 0;
+            for (var i = 0; i < maxDcCount; i++) {
+                for (var r = 0; r < rsBlocks.length; r++) {
+                    if (i < dcdata[r].length) {
+                        data[index++] = dcdata[r][i];
+                    }
+                }
+            }
+            for (var i = 0; i < maxEcCount; i++) {
+                for (var r = 0; r < rsBlocks.length; r++) {
+                    if (i < ecdata[r].length) {
+                        data[index++] = ecdata[r][i];
+                    }
+                }
+            }
+            return data;
+
+        },
+        /**
+         * 布置模块,构建最终信息
+         * @param  {} data
+         * @param  {} maskPattern
+         * @return {}
+         */
+        mapData: function (data, maskPattern) {
+            var inc = -1;
+            var row = this.moduleCount - 1;
+            var bitIndex = 7;
+            var byteIndex = 0;
+            for (var col = this.moduleCount - 1; col > 0; col -= 2) {
+                if (col == 6) col--;
+                while (true) {
+                    for (var c = 0; c < 2; c++) {
+                        if (this.modules[row][col - c] == null) {
+                            var dark = false;
+                            if (byteIndex < data.length) {
+                                dark = (((data[byteIndex] >>> bitIndex) & 1) == 1);
+                            }
+                            var mask = QRUtil.getMask(maskPattern, row, col - c);
+                            if (mask) {
+                                dark = !dark;
+                            }
+                            this.modules[row][col - c] = dark;
+                            bitIndex--;
+                            if (bitIndex == -1) {
+                                byteIndex++;
+                                bitIndex = 7;
+                            }
+                        }
+                    }
+                    row += inc;
+                    if (row < 0 || this.moduleCount <= row) {
+                        row -= inc;
+                        inc = -inc;
+                        break;
+                    }
+                }
+            }
+        }
+    };
+    /**
+     * 填充字段
+     */
+    QRCodeAlg.PAD0 = 0xEC;
+    QRCodeAlg.PAD1 = 0x11;
+    //---------------------------------------------------------------------
+    // 纠错等级对应的编码
+    //---------------------------------------------------------------------
+    var QRErrorCorrectLevel = [1, 0, 3, 2];
+    //---------------------------------------------------------------------
+    // 掩膜版本
+    //---------------------------------------------------------------------
+    var QRMaskPattern = {
+        PATTERN000: 0,
+        PATTERN001: 1,
+        PATTERN010: 2,
+        PATTERN011: 3,
+        PATTERN100: 4,
+        PATTERN101: 5,
+        PATTERN110: 6,
+        PATTERN111: 7
+    };
+    //---------------------------------------------------------------------
+    // 工具类
+    //---------------------------------------------------------------------
+    var QRUtil = {
+        /*
+        每个版本矫正图形的位置
+         */
+        PATTERN_POSITION_TABLE: [
+            [],
+            [6, 18],
+            [6, 22],
+            [6, 26],
+            [6, 30],
+            [6, 34],
+            [6, 22, 38],
+            [6, 24, 42],
+            [6, 26, 46],
+            [6, 28, 50],
+            [6, 30, 54],
+            [6, 32, 58],
+            [6, 34, 62],
+            [6, 26, 46, 66],
+            [6, 26, 48, 70],
+            [6, 26, 50, 74],
+            [6, 30, 54, 78],
+            [6, 30, 56, 82],
+            [6, 30, 58, 86],
+            [6, 34, 62, 90],
+            [6, 28, 50, 72, 94],
+            [6, 26, 50, 74, 98],
+            [6, 30, 54, 78, 102],
+            [6, 28, 54, 80, 106],
+            [6, 32, 58, 84, 110],
+            [6, 30, 58, 86, 114],
+            [6, 34, 62, 90, 118],
+            [6, 26, 50, 74, 98, 122],
+            [6, 30, 54, 78, 102, 126],
+            [6, 26, 52, 78, 104, 130],
+            [6, 30, 56, 82, 108, 134],
+            [6, 34, 60, 86, 112, 138],
+            [6, 30, 58, 86, 114, 142],
+            [6, 34, 62, 90, 118, 146],
+            [6, 30, 54, 78, 102, 126, 150],
+            [6, 24, 50, 76, 102, 128, 154],
+            [6, 28, 54, 80, 106, 132, 158],
+            [6, 32, 58, 84, 110, 136, 162],
+            [6, 26, 54, 82, 110, 138, 166],
+            [6, 30, 58, 86, 114, 142, 170]
+        ],
+        G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),
+        G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),
+        G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1),
+        /*
+        BCH编码格式信息
+         */
+        getBCHTypeInfo: function (data) {
+            var d = data << 10;
+            while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
+                d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15)));
+            }
+            return ((data << 10) | d) ^ QRUtil.G15_MASK;
+        },
+        /*
+        BCH编码版本信息
+         */
+        getBCHTypeNumber: function (data) {
+            var d = data << 12;
+            while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
+                d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18)));
+            }
+            return (data << 12) | d;
+        },
+        /*
+        获取BCH位信息
+         */
+        getBCHDigit: function (data) {
+            var digit = 0;
+            while (data != 0) {
+                digit++;
+                data >>>= 1;
+            }
+            return digit;
+        },
+        /*
+        获取版本对应的矫正图形位置
+         */
+        getPatternPosition: function (typeNumber) {
+            return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
+        },
+        /*
+        掩膜算法
+         */
+        getMask: function (maskPattern, i, j) {
+            switch (maskPattern) {
+                case QRMaskPattern.PATTERN000:
+                    return (i + j) % 2 == 0;
+                case QRMaskPattern.PATTERN001:
+                    return i % 2 == 0;
+                case QRMaskPattern.PATTERN010:
+                    return j % 3 == 0;
+                case QRMaskPattern.PATTERN011:
+                    return (i + j) % 3 == 0;
+                case QRMaskPattern.PATTERN100:
+                    return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
+                case QRMaskPattern.PATTERN101:
+                    return (i * j) % 2 + (i * j) % 3 == 0;
+                case QRMaskPattern.PATTERN110:
+                    return ((i * j) % 2 + (i * j) % 3) % 2 == 0;
+                case QRMaskPattern.PATTERN111:
+                    return ((i * j) % 3 + (i + j) % 2) % 2 == 0;
+                default:
+                    throw new Error("bad maskPattern:" + maskPattern);
+            }
+        },
+        /*
+        获取RS的纠错多项式
+         */
+        getErrorCorrectPolynomial: function (errorCorrectLength) {
+            var a = new QRPolynomial([1], 0);
+            for (var i = 0; i < errorCorrectLength; i++) {
+                a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));
+            }
+            return a;
+        },
+        /*
+        获取评价
+         */
+        getLostPoint: function (qrCode) {
+            var moduleCount = qrCode.getModuleCount(),
+                lostPoint = 0,
+                darkCount = 0;
+            for (var row = 0; row < moduleCount; row++) {
+                var sameCount = 0;
+                var head = qrCode.modules[row][0];
+                for (var col = 0; col < moduleCount; col++) {
+                    var current = qrCode.modules[row][col];
+                    //level 3 评价
+                    if (col < moduleCount - 6) {
+                        if (current && !qrCode.modules[row][col + 1] && qrCode.modules[row][col + 2] && qrCode.modules[row][col + 3] && qrCode.modules[row][col + 4] && !qrCode.modules[row][col + 5] && qrCode.modules[row][col + 6]) {
+                            if (col < moduleCount - 10) {
+                                if (qrCode.modules[row][col + 7] && qrCode.modules[row][col + 8] && qrCode.modules[row][col + 9] && qrCode.modules[row][col + 10]) {
+                                    lostPoint += 40;
+                                }
+                            } else if (col > 3) {
+                                if (qrCode.modules[row][col - 1] && qrCode.modules[row][col - 2] && qrCode.modules[row][col - 3] && qrCode.modules[row][col - 4]) {
+                                    lostPoint += 40;
+                                }
+                            }
+                        }
+                    }
+                    //level 2 评价
+                    if ((row < moduleCount - 1) && (col < moduleCount - 1)) {
+                        var count = 0;
+                        if (current) count++;
+                        if (qrCode.modules[row + 1][col]) count++;
+                        if (qrCode.modules[row][col + 1]) count++;
+                        if (qrCode.modules[row + 1][col + 1]) count++;
+                        if (count == 0 || count == 4) {
+                            lostPoint += 3;
+                        }
+                    }
+                    //level 1 评价
+                    if (head ^ current) {
+                        sameCount++;
+                    } else {
+                        head = current;
+                        if (sameCount >= 5) {
+                            lostPoint += (3 + sameCount - 5);
+                        }
+                        sameCount = 1;
+                    }
+                    //level 4 评价
+                    if (current) {
+                        darkCount++;
+                    }
+                }
+            }
+            for (var col = 0; col < moduleCount; col++) {
+                var sameCount = 0;
+                var head = qrCode.modules[0][col];
+                for (var row = 0; row < moduleCount; row++) {
+                    var current = qrCode.modules[row][col];
+                    //level 3 评价
+                    if (row < moduleCount - 6) {
+                        if (current && !qrCode.modules[row + 1][col] && qrCode.modules[row + 2][col] && qrCode.modules[row + 3][col] && qrCode.modules[row + 4][col] && !qrCode.modules[row + 5][col] && qrCode.modules[row + 6][col]) {
+                            if (row < moduleCount - 10) {
+                                if (qrCode.modules[row + 7][col] && qrCode.modules[row + 8][col] && qrCode.modules[row + 9][col] && qrCode.modules[row + 10][col]) {
+                                    lostPoint += 40;
+                                }
+                            } else if (row > 3) {
+                                if (qrCode.modules[row - 1][col] && qrCode.modules[row - 2][col] && qrCode.modules[row - 3][col] && qrCode.modules[row - 4][col]) {
+                                    lostPoint += 40;
+                                }
+                            }
+                        }
+                    }
+                    //level 1 评价
+                    if (head ^ current) {
+                        sameCount++;
+                    } else {
+                        head = current;
+                        if (sameCount >= 5) {
+                            lostPoint += (3 + sameCount - 5);
+                        }
+                        sameCount = 1;
+                    }
+                }
+            }
+            // LEVEL4
+            var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
+            lostPoint += ratio * 10;
+            return lostPoint;
+        }
+
+    };
+    //---------------------------------------------------------------------
+    // QRMath使用的数学工具
+    //---------------------------------------------------------------------
+    var QRMath = {
+        /*
+        将n转化为a^m
+         */
+        glog: function (n) {
+            if (n < 1) {
+                throw new Error("glog(" + n + ")");
+            }
+            return QRMath.LOG_TABLE[n];
+        },
+        /*
+        将a^m转化为n
+         */
+        gexp: function (n) {
+            while (n < 0) {
+                n += 255;
+            }
+            while (n >= 256) {
+                n -= 255;
+            }
+            return QRMath.EXP_TABLE[n];
+        },
+        EXP_TABLE: new Array(256),
+        LOG_TABLE: new Array(256)
+
+    };
+    for (var i = 0; i < 8; i++) {
+        QRMath.EXP_TABLE[i] = 1 << i;
+    }
+    for (var i = 8; i < 256; i++) {
+        QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8];
+    }
+    for (var i = 0; i < 255; i++) {
+        QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
+    }
+    //---------------------------------------------------------------------
+    // QRPolynomial 多项式
+    //---------------------------------------------------------------------
+    /**
+     * 多项式类
+     * @param {Array} num   系数
+     * @param {num} shift a^shift
+     */
+    function QRPolynomial(num, shift) {
+        if (num.length == undefined) {
+            throw new Error(num.length + "/" + shift);
+        }
+        var offset = 0;
+        while (offset < num.length && num[offset] == 0) {
+            offset++;
+        }
+        this.num = new Array(num.length - offset + shift);
+        for (var i = 0; i < num.length - offset; i++) {
+            this.num[i] = num[i + offset];
+        }
+    }
+    QRPolynomial.prototype = {
+        get: function (index) {
+            return this.num[index];
+        },
+        getLength: function () {
+            return this.num.length;
+        },
+        /**
+         * 多项式乘法
+         * @param  {QRPolynomial} e 被乘多项式
+         * @return {[type]}   [description]
+         */
+        multiply: function (e) {
+            var num = new Array(this.getLength() + e.getLength() - 1);
+            for (var i = 0; i < this.getLength(); i++) {
+                for (var j = 0; j < e.getLength(); j++) {
+                    num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)));
+                }
+            }
+            return new QRPolynomial(num, 0);
+        },
+        /**
+         * 多项式模运算
+         * @param  {QRPolynomial} e 模多项式
+         * @return {}
+         */
+        mod: function (e) {
+            var tl = this.getLength(),
+                el = e.getLength();
+            if (tl - el < 0) {
+                return this;
+            }
+            var num = new Array(tl);
+            for (var i = 0; i < tl; i++) {
+                num[i] = this.get(i);
+            }
+            while (num.length >= el) {
+                var ratio = QRMath.glog(num[0]) - QRMath.glog(e.get(0));
+
+                for (var i = 0; i < e.getLength(); i++) {
+                    num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);
+                }
+                while (num[0] == 0) {
+                    num.shift();
+                }
+            }
+            return new QRPolynomial(num, 0);
+        }
+    };
+
+    //---------------------------------------------------------------------
+    // RS_BLOCK_TABLE
+    //---------------------------------------------------------------------
+    /*
+    二维码各个版本信息[块数, 每块中的数据块数, 每块中的信息块数]
+     */
+    var RS_BLOCK_TABLE = [
+        // L
+        // M
+        // Q
+        // H
+        // 1
+        [1, 26, 19],
+        [1, 26, 16],
+        [1, 26, 13],
+        [1, 26, 9],
+
+        // 2
+        [1, 44, 34],
+        [1, 44, 28],
+        [1, 44, 22],
+        [1, 44, 16],
+
+        // 3
+        [1, 70, 55],
+        [1, 70, 44],
+        [2, 35, 17],
+        [2, 35, 13],
+
+        // 4
+        [1, 100, 80],
+        [2, 50, 32],
+        [2, 50, 24],
+        [4, 25, 9],
+
+        // 5
+        [1, 134, 108],
+        [2, 67, 43],
+        [2, 33, 15, 2, 34, 16],
+        [2, 33, 11, 2, 34, 12],
+
+        // 6
+        [2, 86, 68],
+        [4, 43, 27],
+        [4, 43, 19],
+        [4, 43, 15],
+
+        // 7
+        [2, 98, 78],
+        [4, 49, 31],
+        [2, 32, 14, 4, 33, 15],
+        [4, 39, 13, 1, 40, 14],
+
+        // 8
+        [2, 121, 97],
+        [2, 60, 38, 2, 61, 39],
+        [4, 40, 18, 2, 41, 19],
+        [4, 40, 14, 2, 41, 15],
+
+        // 9
+        [2, 146, 116],
+        [3, 58, 36, 2, 59, 37],
+        [4, 36, 16, 4, 37, 17],
+        [4, 36, 12, 4, 37, 13],
+
+        // 10
+        [2, 86, 68, 2, 87, 69],
+        [4, 69, 43, 1, 70, 44],
+        [6, 43, 19, 2, 44, 20],
+        [6, 43, 15, 2, 44, 16],
+
+        // 11
+        [4, 101, 81],
+        [1, 80, 50, 4, 81, 51],
+        [4, 50, 22, 4, 51, 23],
+        [3, 36, 12, 8, 37, 13],
+
+        // 12
+        [2, 116, 92, 2, 117, 93],
+        [6, 58, 36, 2, 59, 37],
+        [4, 46, 20, 6, 47, 21],
+        [7, 42, 14, 4, 43, 15],
+
+        // 13
+        [4, 133, 107],
+        [8, 59, 37, 1, 60, 38],
+        [8, 44, 20, 4, 45, 21],
+        [12, 33, 11, 4, 34, 12],
+
+        // 14
+        [3, 145, 115, 1, 146, 116],
+        [4, 64, 40, 5, 65, 41],
+        [11, 36, 16, 5, 37, 17],
+        [11, 36, 12, 5, 37, 13],
+
+        // 15
+        [5, 109, 87, 1, 110, 88],
+        [5, 65, 41, 5, 66, 42],
+        [5, 54, 24, 7, 55, 25],
+        [11, 36, 12],
+
+        // 16
+        [5, 122, 98, 1, 123, 99],
+        [7, 73, 45, 3, 74, 46],
+        [15, 43, 19, 2, 44, 20],
+        [3, 45, 15, 13, 46, 16],
+
+        // 17
+        [1, 135, 107, 5, 136, 108],
+        [10, 74, 46, 1, 75, 47],
+        [1, 50, 22, 15, 51, 23],
+        [2, 42, 14, 17, 43, 15],
+
+        // 18
+        [5, 150, 120, 1, 151, 121],
+        [9, 69, 43, 4, 70, 44],
+        [17, 50, 22, 1, 51, 23],
+        [2, 42, 14, 19, 43, 15],
+
+        // 19
+        [3, 141, 113, 4, 142, 114],
+        [3, 70, 44, 11, 71, 45],
+        [17, 47, 21, 4, 48, 22],
+        [9, 39, 13, 16, 40, 14],
+
+        // 20
+        [3, 135, 107, 5, 136, 108],
+        [3, 67, 41, 13, 68, 42],
+        [15, 54, 24, 5, 55, 25],
+        [15, 43, 15, 10, 44, 16],
+
+        // 21
+        [4, 144, 116, 4, 145, 117],
+        [17, 68, 42],
+        [17, 50, 22, 6, 51, 23],
+        [19, 46, 16, 6, 47, 17],
+
+        // 22
+        [2, 139, 111, 7, 140, 112],
+        [17, 74, 46],
+        [7, 54, 24, 16, 55, 25],
+        [34, 37, 13],
+
+        // 23
+        [4, 151, 121, 5, 152, 122],
+        [4, 75, 47, 14, 76, 48],
+        [11, 54, 24, 14, 55, 25],
+        [16, 45, 15, 14, 46, 16],
+
+        // 24
+        [6, 147, 117, 4, 148, 118],
+        [6, 73, 45, 14, 74, 46],
+        [11, 54, 24, 16, 55, 25],
+        [30, 46, 16, 2, 47, 17],
+
+        // 25
+        [8, 132, 106, 4, 133, 107],
+        [8, 75, 47, 13, 76, 48],
+        [7, 54, 24, 22, 55, 25],
+        [22, 45, 15, 13, 46, 16],
+
+        // 26
+        [10, 142, 114, 2, 143, 115],
+        [19, 74, 46, 4, 75, 47],
+        [28, 50, 22, 6, 51, 23],
+        [33, 46, 16, 4, 47, 17],
+
+        // 27
+        [8, 152, 122, 4, 153, 123],
+        [22, 73, 45, 3, 74, 46],
+        [8, 53, 23, 26, 54, 24],
+        [12, 45, 15, 28, 46, 16],
+
+        // 28
+        [3, 147, 117, 10, 148, 118],
+        [3, 73, 45, 23, 74, 46],
+        [4, 54, 24, 31, 55, 25],
+        [11, 45, 15, 31, 46, 16],
+
+        // 29
+        [7, 146, 116, 7, 147, 117],
+        [21, 73, 45, 7, 74, 46],
+        [1, 53, 23, 37, 54, 24],
+        [19, 45, 15, 26, 46, 16],
+
+        // 30
+        [5, 145, 115, 10, 146, 116],
+        [19, 75, 47, 10, 76, 48],
+        [15, 54, 24, 25, 55, 25],
+        [23, 45, 15, 25, 46, 16],
+
+        // 31
+        [13, 145, 115, 3, 146, 116],
+        [2, 74, 46, 29, 75, 47],
+        [42, 54, 24, 1, 55, 25],
+        [23, 45, 15, 28, 46, 16],
+
+        // 32
+        [17, 145, 115],
+        [10, 74, 46, 23, 75, 47],
+        [10, 54, 24, 35, 55, 25],
+        [19, 45, 15, 35, 46, 16],
+
+        // 33
+        [17, 145, 115, 1, 146, 116],
+        [14, 74, 46, 21, 75, 47],
+        [29, 54, 24, 19, 55, 25],
+        [11, 45, 15, 46, 46, 16],
+
+        // 34
+        [13, 145, 115, 6, 146, 116],
+        [14, 74, 46, 23, 75, 47],
+        [44, 54, 24, 7, 55, 25],
+        [59, 46, 16, 1, 47, 17],
+
+        // 35
+        [12, 151, 121, 7, 152, 122],
+        [12, 75, 47, 26, 76, 48],
+        [39, 54, 24, 14, 55, 25],
+        [22, 45, 15, 41, 46, 16],
+
+        // 36
+        [6, 151, 121, 14, 152, 122],
+        [6, 75, 47, 34, 76, 48],
+        [46, 54, 24, 10, 55, 25],
+        [2, 45, 15, 64, 46, 16],
+
+        // 37
+        [17, 152, 122, 4, 153, 123],
+        [29, 74, 46, 14, 75, 47],
+        [49, 54, 24, 10, 55, 25],
+        [24, 45, 15, 46, 46, 16],
+
+        // 38
+        [4, 152, 122, 18, 153, 123],
+        [13, 74, 46, 32, 75, 47],
+        [48, 54, 24, 14, 55, 25],
+        [42, 45, 15, 32, 46, 16],
+
+        // 39
+        [20, 147, 117, 4, 148, 118],
+        [40, 75, 47, 7, 76, 48],
+        [43, 54, 24, 22, 55, 25],
+        [10, 45, 15, 67, 46, 16],
+
+        // 40
+        [19, 148, 118, 6, 149, 119],
+        [18, 75, 47, 31, 76, 48],
+        [34, 54, 24, 34, 55, 25],
+        [20, 45, 15, 61, 46, 16]
+    ];
+
+    /**
+     * 根据数据获取对应版本
+     * @return {[type]} [description]
+     */
+    QRCodeAlg.prototype.getRightType = function () {
+        for (var typeNumber = 1; typeNumber < 41; typeNumber++) {
+            var rsBlock = RS_BLOCK_TABLE[(typeNumber - 1) * 4 + this.errorCorrectLevel];
+            if (rsBlock == undefined) {
+                throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + this.errorCorrectLevel);
+            }
+            var length = rsBlock.length / 3;
+            var totalDataCount = 0;
+            for (var i = 0; i < length; i++) {
+                var count = rsBlock[i * 3 + 0];
+                var dataCount = rsBlock[i * 3 + 2];
+                totalDataCount += dataCount * count;
+            }
+            var lengthBytes = typeNumber > 9 ? 2 : 1;
+            if (this.utf8bytes.length + lengthBytes < totalDataCount || typeNumber == 40) {
+                this.typeNumber = typeNumber;
+                this.rsBlock = rsBlock;
+                this.totalDataCount = totalDataCount;
+                break;
+            }
+        }
+    };
+
+    //---------------------------------------------------------------------
+    // QRBitBuffer
+    //---------------------------------------------------------------------
+    function QRBitBuffer() {
+        this.buffer = new Array();
+        this.length = 0;
+    }
+    QRBitBuffer.prototype = {
+        get: function (index) {
+            var bufIndex = Math.floor(index / 8);
+            return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1);
+        },
+        put: function (num, length) {
+            for (var i = 0; i < length; i++) {
+                this.putBit(((num >>> (length - i - 1)) & 1));
+            }
+        },
+        putBit: function (bit) {
+            var bufIndex = Math.floor(this.length / 8);
+            if (this.buffer.length <= bufIndex) {
+                this.buffer.push(0);
+            }
+            if (bit) {
+                this.buffer[bufIndex] |= (0x80 >>> (this.length % 8));
+            }
+            this.length++;
+        }
+    };
+
+
+
+    // xzedit
+    let qrcodeAlgObjCache = [];
+    /**
+     * 二维码构造函数,主要用于绘制
+     * @param  {参数列表} opt 传递参数
+     * @return {}
+     */
+    QRCode = function (opt) {
+        //设置默认参数
+        this.options = {
+            text: '',
+            size: 256,
+            correctLevel: 3,
+            background: '#ffffff',
+            foreground: '#000000',
+            pdground: '#000000',
+            image: '',
+            imageSize: 30,
+            canvasId: opt.canvasId,
+            context: opt.context,
+            usingComponents: opt.usingComponents,
+            showLoading: opt.showLoading,
+            loadingText: opt.loadingText,
+        };
+        if (typeof opt === 'string') { // 只编码ASCII字符串
+            opt = {
+                text: opt
+            };
+        }
+        if (opt) {
+            for (var i in opt) {
+                this.options[i] = opt[i];
+            }
+        }
+        //使用QRCodeAlg创建二维码结构
+        var qrCodeAlg = null;
+        for (var i = 0, l = qrcodeAlgObjCache.length; i < l; i++) {
+            if (qrcodeAlgObjCache[i].text == this.options.text && qrcodeAlgObjCache[i].text.correctLevel == this.options.correctLevel) {
+                qrCodeAlg = qrcodeAlgObjCache[i].obj;
+                break;
+            }
+        }
+        if (i == l) {
+            qrCodeAlg = new QRCodeAlg(this.options.text, this.options.correctLevel);
+            qrcodeAlgObjCache.push({
+                text: this.options.text,
+                correctLevel: this.options.correctLevel,
+                obj: qrCodeAlg
+            });
+        }
+        /**
+         * 计算矩阵点的前景色
+         * @param {Obj} config
+         * @param {Number} config.row 点x坐标
+         * @param {Number} config.col 点y坐标
+         * @param {Number} config.count 矩阵大小
+         * @param {Number} config.options 组件的options
+         * @return {String}
+         */
+        let getForeGround = function (config) {
+            var options = config.options;
+            if (options.pdground && (
+                (config.row > 1 && config.row < 5 && config.col > 1 && config.col < 5) ||
+                (config.row > (config.count - 6) && config.row < (config.count - 2) && config.col > 1 && config.col < 5) ||
+                (config.row > 1 && config.row < 5 && config.col > (config.count - 6) && config.col < (config.count - 2))
+            )) {
+                return options.pdground;
+            }
+            return options.foreground;
+        }
+        // 创建canvas
+        let createCanvas = function (options) {
+            if (options.showLoading) {
+                uni.showLoading({
+                    title: options.loadingText,
+                    mask: true
+                });
+            }
+            var ctx = uni.createCanvasContext(options.canvasId, options.context);
+            var count = qrCodeAlg.getModuleCount();
+            var ratioSize = options.size;
+            var ratioImgSize = options.imageSize;
+            //计算每个点的长宽
+            var tileW = (ratioSize / count).toPrecision(4);
+            var tileH = (ratioSize / count).toPrecision(4);
+            //绘制
+            for (var row = 0; row < count; row++) {
+                for (var col = 0; col < count; col++) {
+                    var w = (Math.ceil((col + 1) * tileW) - Math.floor(col * tileW));
+                    var h = (Math.ceil((row + 1) * tileW) - Math.floor(row * tileW));
+                    var foreground = getForeGround({
+                        row: row,
+                        col: col,
+                        count: count,
+                        options: options
+                    });
+                    ctx.setFillStyle(qrCodeAlg.modules[row][col] ? foreground : options.background);
+                    ctx.fillRect(Math.round(col * tileW), Math.round(row * tileH), w, h);
+                }
+            }
+            if (options.image) {
+                var x = Number(((ratioSize - ratioImgSize) / 2).toFixed(2));
+                var y = Number(((ratioSize - ratioImgSize) / 2).toFixed(2));
+                drawRoundedRect(ctx, x, y, ratioImgSize, ratioImgSize, 2, 6, true, true)
+                ctx.drawImage(options.image, x, y, ratioImgSize, ratioImgSize);
+                // 画圆角矩形
+                function drawRoundedRect(ctxi, x, y, width, height, r, lineWidth, fill, stroke) {
+                    ctxi.setLineWidth(lineWidth);
+                    ctxi.setFillStyle(options.background);
+                    ctxi.setStrokeStyle(options.background);
+                    ctxi.beginPath(); // draw top and top right corner 
+                    ctxi.moveTo(x + r, y);
+                    ctxi.arcTo(x + width, y, x + width, y + r, r); // draw right side and bottom right corner 
+                    ctxi.arcTo(x + width, y + height, x + width - r, y + height, r); // draw bottom and bottom left corner 
+                    ctxi.arcTo(x, y + height, x, y + height - r, r); // draw left and top left corner 
+                    ctxi.arcTo(x, y, x + r, y, r);
+                    ctxi.closePath();
+                    if (fill) {
+                        ctxi.fill();
+                    }
+                    if (stroke) {
+                        ctxi.stroke();
+                    }
+                }
+            }
+            setTimeout(() => {
+                ctx.draw(true, () => {
+                    // 保存到临时区域
+                    setTimeout(() => {
+                        uni.canvasToTempFilePath({
+                            width: options.width,
+                            height: options.height,
+                            destWidth: options.width,
+                            destHeight: options.height,
+                            canvasId: options.canvasId,
+                            quality: Number(1),
+                            success: function (res) {
+                                if (options.cbResult) {
+                                    options.cbResult(res.tempFilePath)
+                                }
+                            },
+                            fail: function (res) {
+                                if (options.cbResult) {
+                                    options.cbResult(res)
+                                }
+                            },
+                            complete: function () {
+                                if (options.showLoading){
+                                    uni.hideLoading();
+                                }
+                            },
+                        }, options.context);
+                    }, options.text.length + 100);
+                });
+            }, options.usingComponents ? 0 : 150);
+        }
+        createCanvas(this.options);
+        // 空判定
+        let empty = function (v) {
+            let tp = typeof v,
+                rt = false;
+            if (tp == "number" && String(v) == "") {
+                rt = true
+            } else if (tp == "undefined") {
+                rt = true
+            } else if (tp == "object") {
+                if (JSON.stringify(v) == "{}" || JSON.stringify(v) == "[]" || v == null) rt = true
+            } else if (tp == "string") {
+                if (v == "" || v == "undefined" || v == "null" || v == "{}" || v == "[]") rt = true
+            } else if (tp == "function") {
+                rt = false
+            }
+            return rt
+        }
+    };
+    QRCode.prototype.clear = function (fn) {
+        var ctx = uni.createCanvasContext(this.options.canvasId, this.options.context)
+        ctx.clearRect(0, 0, this.options.size, this.options.size)
+        ctx.draw(false, () => {
+            if (fn) {
+                fn()
+            }
+        })
+    };
+})()
+
+export default QRCode

+ 212 - 0
components/tki-qrcode/tki-qrcode.vue

@@ -0,0 +1,212 @@
+<template xlang="wxml" minapp="mpvue">
+	<view class="tki-qrcode">
+		<!-- #ifndef MP-ALIPAY -->
+		<canvas class="tki-qrcode-canvas" :canvas-id="cid" :style="{width:cpSize+'px',height:cpSize+'px'}" />
+		<!-- #endif -->
+		<!-- #ifdef MP-ALIPAY -->
+		<canvas :id="cid" :width="cpSize" :height="cpSize" class="tki-qrcode-canvas" />
+		<!-- #endif -->
+		<image v-show="show" :src="result" :style="{width:cpSize+'px',height:cpSize+'px'}" />
+	</view>
+</template>
+
+<script>
+import QRCode from "./qrcode.js"
+let qrcode
+export default {
+	name: "tki-qrcode",
+	props: {
+		cid: {
+			type: String,
+			default: 'tki-qrcode-canvas'
+		},
+		size: {
+			type: Number,
+			default: 200
+		},
+		unit: {
+			type: String,
+			default: 'upx'
+		},
+		show: {
+			type: Boolean,
+			default: true
+		},
+		val: {
+			type: String,
+			default: ''
+		},
+		background: {
+			type: String,
+			default: '#ffffff'
+		},
+		foreground: {
+			type: String,
+			default: '#000000'
+		},
+		pdground: {
+			type: String,
+			default: '#000000'
+		},
+		icon: {
+			type: String,
+			default: ''
+		},
+		iconSize: {
+			type: Number,
+			default: 40
+		},
+		lv: {
+			type: Number,
+			default: 3
+		},
+		onval: {
+			type: Boolean,
+			default: false
+		},
+		loadMake: {
+			type: Boolean,
+			default: false
+		},
+		usingComponents: {
+			type: Boolean,
+			default: true
+		},
+		showLoading: {
+			type: Boolean,
+			default: true
+		},
+		loadingText: {
+			type: String,
+			default: '二维码生成中'
+		},
+	},
+	data() {
+		return {
+			result: '',
+		}
+	},
+	methods: {
+		_makeCode() {
+			let that = this
+			if (!this._empty(this.val)) {
+				qrcode = new QRCode({
+					context: that, // 上下文环境
+					canvasId:that.cid, // canvas-id
+					usingComponents: that.usingComponents, // 是否是自定义组件
+					showLoading: that.showLoading, // 是否显示loading
+					loadingText: that.loadingText, // loading文字
+					text: that.val, // 生成内容
+					size: that.cpSize, // 二维码大小
+					background: that.background, // 背景色
+					foreground: that.foreground, // 前景色
+					pdground: that.pdground, // 定位角点颜色
+					correctLevel: that.lv, // 容错级别
+					image: that.icon, // 二维码图标
+					imageSize: that.iconSize,// 二维码图标大小
+					cbResult: function (res) { // 生成二维码的回调
+						that._result(res)
+					},
+				});
+			} else {
+				uni.showToast({
+					title: '二维码内容不能为空',
+					icon: 'none',
+					duration: 2000,
+					icon:'none'
+				});
+			}
+		},
+		_clearCode() {
+			this._result('')
+			qrcode.clear()
+		},
+		_saveCode() {
+			let that = this;
+			if (this.result != "") {
+				uni.saveImageToPhotosAlbum({
+					filePath: that.result,
+					success: function () {
+						uni.showToast({
+							title: '二维码保存成功',
+							icon: 'success',
+							duration: 2000,
+							icon:'none'
+						});
+					}
+				});
+			}
+		},
+		_result(res) {
+			this.result = res;
+			this.$emit('result', res)
+		},
+		_empty(v) {
+			let tp = typeof v,
+				rt = false;
+			if (tp == "number" && String(v) == "") {
+				rt = true
+			} else if (tp == "undefined") {
+				rt = true
+			} else if (tp == "object") {
+				if (JSON.stringify(v) == "{}" || JSON.stringify(v) == "[]" || v == null) rt = true
+			} else if (tp == "string") {
+				if (v == "" || v == "undefined" || v == "null" || v == "{}" || v == "[]") rt = true
+			} else if (tp == "function") {
+				rt = false
+			}
+			return rt
+		}
+	},
+	watch: {
+		size: function (n, o) {
+			if (n != o && !this._empty(n)) {
+				this.cSize = n
+				if (!this._empty(this.val)) {
+					setTimeout(() => {
+						this._makeCode()
+					}, 100);
+				}
+			}
+		},
+		val: function (n, o) {
+			if (this.onval) {
+				if (n != o && !this._empty(n)) {
+					setTimeout(() => {
+						this._makeCode()
+					}, 0);
+				}
+			}
+		}
+	},
+	computed: {
+		cpSize() {
+			if(this.unit == "upx"){
+				return uni.upx2px(this.size)
+			}else{
+				return this.size
+			}
+		}
+	},
+	mounted: function () {
+		if (this.loadMake) {
+			if (!this._empty(this.val)) {
+				setTimeout(() => {
+					this._makeCode()
+				}, 0);
+			}
+		}
+	},
+}
+</script>
+<style>
+.tki-qrcode {
+  position: relative;
+}
+.tki-qrcode-canvas {
+  position: fixed;
+  top: -99999upx;
+  left: -99999upx;
+  z-index: -99999;
+}
+</style>

+ 122 - 0
components/uni-badge/uni-badge.vue

@@ -0,0 +1,122 @@
+<template>
+	<text v-if="text" :class="inverted ? 'uni-badge--' + type + ' uni-badge--' + size + ' uni-badge--' + type + '-inverted' : 'uni-badge--' + type + ' uni-badge--' + size"
+	 class="uni-badge" :style="width" @click="onClick()">{{ text }}</text>
+</template>
+
+<script>
+	export default {
+		name: 'UniBadge',
+		props: {
+			type: {
+				type: String,
+				default: 'default'
+			},
+			inverted: {
+				type: Boolean,
+				default: false
+			},
+			text: {
+				type: [String,Number],
+				default: ''
+			},
+			size: {
+				// small.normal
+				type: String,
+				default: 'normal'
+			}
+		},
+		data() {
+			return {
+				width: `display: inline-block;width: ${String(this.text).length * 15 + 25}rpx`
+			};
+		},
+		methods: {
+			onClick() {
+				this.$emit('click');
+			}
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	$bage-size: 12px;
+	$bage-small: scale(0.8);
+	$bage-height: 40rpx;
+
+	.uni-badge {
+		/* #ifndef APP-PLUS */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		height: $bage-height;
+		line-height: $bage-height;
+		color: $uni-text-color;
+		border-radius: 100px;
+		background-color: $uni-bg-color-hover;
+		background-color: transparent;
+		text-align: center;
+		font-family: 'Helvetica Neue', Helvetica, sans-serif;
+		font-size: $bage-size;
+		padding: 0;
+	}
+
+	.uni-badge--inverted {
+		padding: 0 5px 0 0;
+		color: $uni-bg-color-hover;
+	}
+
+	.uni-badge--default {
+		color: $uni-text-color;
+		background-color: $uni-bg-color-hover;
+	}
+
+	.uni-badge--default-inverted {
+		color: $uni-text-color-grey;
+		background-color: transparent;
+	}
+
+	.uni-badge--primary {
+		color: $uni-text-color-inverse;
+		background-color: $uni-color-primary;
+	}
+
+	.uni-badge--primary-inverted {
+		color: $uni-color-primary;
+		background-color: transparent;
+	}
+
+	.uni-badge--success {
+		color: $uni-text-color-inverse;
+		background-color: $uni-color-success;
+	}
+
+	.uni-badge--success-inverted {
+		color: $uni-color-success;
+		background-color: transparent;
+	}
+
+	.uni-badge--warning {
+		color: $uni-text-color-inverse;
+		background-color: $uni-color-warning;
+	}
+
+	.uni-badge--warning-inverted {
+		color: $uni-color-warning;
+		background-color: transparent;
+	}
+
+	.uni-badge--error {
+		color: $uni-text-color-inverse;
+		background-color: $uni-color-error;
+	}
+
+	.uni-badge--error-inverted {
+		color: $uni-color-error;
+		background-color: transparent;
+	}
+
+	.uni-badge--small {
+		transform: $bage-small;
+		transform-origin: center center;
+	}
+</style>

+ 178 - 0
components/uni-countdown/uni-countdown.vue

@@ -0,0 +1,178 @@
+<template>
+	<view class="uni-countdown">
+		<text v-if="showDay" :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ d }}</text>
+		<text v-if="showDay" :style="{ color: splitorColor }" class="uni-countdown__splitor">天</text>
+		<text :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ h }}</text>
+		<text :style="{ color: splitorColor }" class="uni-countdown__splitor">{{ showColon ? ':' : '时' }}</text>
+		<text :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ i }}</text>
+		<text :style="{ color: splitorColor }" class="uni-countdown__splitor">{{ showColon ? ':' : '分' }}</text>
+		<text :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ s }}</text>
+		<text v-if="!showColon" :style="{ color: splitorColor }" class="uni-countdown__splitor">秒</text>
+	</view>
+</template>
+<script>
+	export default {
+		name: 'UniCountdown',
+		props: {
+			showDay: {
+				type: Boolean,
+				default: true
+			},
+			showColon: {
+				type: Boolean,
+				default: true
+			},
+			backgroundColor: {
+				type: String,
+				default: '#FFFFFF'
+			},
+			borderColor: {
+				type: String,
+				default: '#000000'
+			},
+			color: {
+				type: String,
+				default: '#000000'
+			},
+			splitorColor: {
+				type: String,
+				default: '#000000'
+			},
+			day:0,
+			hour:0,
+			minute:0,
+			second:0
+		},
+		data() {
+			return {
+				timer: null,
+				syncFlag: false,
+				d: '00',
+				h: '00',
+				i: '00',
+				s: '00',
+				leftTime: 0,
+				seconds: 0
+			}
+		},
+		watch: {
+			day(val) {
+				this.changeFlag()
+			},
+			hour(val) {
+				this.changeFlag()
+			},
+			minute(val) {
+				this.changeFlag()
+			},
+			second(val) {
+				this.changeFlag()
+			}
+		},
+		created: function(e) {
+			this.startData();
+		},
+		beforeDestroy() {
+			clearInterval(this.timer)
+		},
+		methods: {
+			toSeconds(day, hours, minutes, seconds) {
+				return day * 60 * 60 * 24 + hours * 60 * 60 + minutes * 60 + seconds
+			},
+			timeUp() {
+				clearInterval(this.timer)
+				this.$emit('timeup')
+			},
+			countDown() {
+				let seconds = this.seconds
+				let [day, hour, minute, second] = [0, 0, 0, 0]
+				if (seconds > 0) {
+					day = Math.floor(seconds / (60 * 60 * 24))
+					hour = Math.floor(seconds / (60 * 60)) - (day * 24)
+					minute = Math.floor(seconds / 60) - (day * 24 * 60) - (hour * 60)
+					second = Math.floor(seconds) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60)
+				} else {
+					this.timeUp()
+				}
+				if (day < 10) {
+					day = '0' + day
+				}
+				if (hour < 10) {
+					hour = '0' + hour
+				}
+				if (minute < 10) {
+					minute = '0' + minute
+				}
+				if (second < 10) {
+					second = '0' + second
+				}
+				this.d = day
+				this.h = hour
+				this.i = minute
+				this.s = second
+			},
+			startData() {
+				this.seconds = this.toSeconds(this.day, this.hour, this.minute, this.second)
+				if (this.seconds <= 0) {
+					return
+				}
+				this.countDown()
+				this.timer = setInterval(() => {
+					this.seconds--
+					if (this.seconds < 0) {
+						this.timeUp()
+						return
+					}
+					this.countDown()
+				}, 1000)
+			},
+			changeFlag() {
+				if (!this.syncFlag) {
+					this.seconds = this.toSeconds(this.day, this.hour, this.minute, this.second)
+					this.startData();
+					this.syncFlag = true;
+				}
+			}
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	@import '~@/uni.scss';
+	$countdown-height: 40rpx;
+	$countdown-width: 40rpx;
+
+	.uni-countdown {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		justify-content: flex-start;
+		position: relative;
+		top: 5rpx;
+		left: 15rpx;
+	}
+
+	.uni-countdown__splitor {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		justify-content: center;
+		line-height: $countdown-height;
+		padding: 5rpx;
+		font-size: $uni-font-size-sm;
+	}
+
+	.uni-countdown__number {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		justify-content: center;
+		align-items: center;
+		width: $countdown-width;
+		height: $countdown-height;
+		line-height: $countdown-height;
+		// margin: 5rpx;
+		text-align: center;
+		font-size: $uni-font-size-sm;
+	}
+</style>

+ 96 - 0
components/uni-icons/icons.js

@@ -0,0 +1,96 @@
+export default {
+	'contact': '\ue100',
+	'person': '\ue101',
+	'personadd': '\ue102',
+	'contact-filled': '\ue130',
+	'person-filled': '\ue131',
+	'personadd-filled': '\ue132',
+	'phone': '\ue200',
+	'email': '\ue201',
+	'chatbubble': '\ue202',
+	'chatboxes': '\ue203',
+	'phone-filled': '\ue230',
+	'email-filled': '\ue231',
+	'chatbubble-filled': '\ue232',
+	'chatboxes-filled': '\ue233',
+	'weibo': '\ue260',
+	'weixin': '\ue261',
+	'pengyouquan': '\ue262',
+	'chat': '\ue263',
+	'qq': '\ue264',
+	'videocam': '\ue300',
+	'camera': '\ue301',
+	'mic': '\ue302',
+	'location': '\ue303',
+	'mic-filled': '\ue332',
+	'speech': '\ue332',
+	'location-filled': '\ue333',
+	'micoff': '\ue360',
+	'image': '\ue363',
+	'map': '\ue364',
+	'compose': '\ue400',
+	'trash': '\ue401',
+	'upload': '\ue402',
+	'download': '\ue403',
+	'close': '\ue404',
+	'redo': '\ue405',
+	'undo': '\ue406',
+	'refresh': '\ue407',
+	'star': '\ue408',
+	'plus': '\ue409',
+	'minus': '\ue410',
+	'circle': '\ue411',
+	'checkbox': '\ue411',
+	'close-filled': '\ue434',
+	'clear': '\ue434',
+	'refresh-filled': '\ue437',
+	'star-filled': '\ue438',
+	'plus-filled': '\ue439',
+	'minus-filled': '\ue440',
+	'circle-filled': '\ue441',
+	'checkbox-filled': '\ue442',
+	'closeempty': '\ue460',
+	'refreshempty': '\ue461',
+	'reload': '\ue462',
+	'starhalf': '\ue463',
+	'spinner': '\ue464',
+	'spinner-cycle': '\ue465',
+	'search': '\ue466',
+	'plusempty': '\ue468',
+	'forward': '\ue470',
+	'back': '\ue471',
+	'left-nav': '\ue471',
+	'checkmarkempty': '\ue472',
+	'home': '\ue500',
+	'navigate': '\ue501',
+	'gear': '\ue502',
+	'paperplane': '\ue503',
+	'info': '\ue504',
+	'help': '\ue505',
+	'locked': '\ue506',
+	'more': '\ue507',
+	'flag': '\ue508',
+	'home-filled': '\ue530',
+	'gear-filled': '\ue532',
+	'info-filled': '\ue534',
+	'help-filled': '\ue535',
+	'more-filled': '\ue537',
+	'settings': '\ue560',
+	'list': '\ue562',
+	'bars': '\ue563',
+	'loop': '\ue565',
+	'paperclip': '\ue567',
+	'eye': '\ue568',
+	'arrowup': '\ue580',
+	'arrowdown': '\ue581',
+	'arrowleft': '\ue582',
+	'arrowright': '\ue583',
+	'arrowthinup': '\ue584',
+	'arrowthindown': '\ue585',
+	'arrowthinleft': '\ue586',
+	'arrowthinright': '\ue587',
+	'pulldown': '\ue588',
+	'closefill': '\ue589',
+	'sound': '\ue590',
+	'scan': '\ue612'
+}

File diff suppressed because it is too large
+ 10 - 0
components/uni-icons/uni-icons.vue


+ 230 - 0
components/uni-list-item/uni-list-item.vue

@@ -0,0 +1,230 @@
+<template>
+	<!-- #ifdef APP-NVUE -->
+	<cell>
+	<!-- #endif -->
+	<view :class="disabled ? 'uni-list-item--disabled' : ''" :hover-class="disabled || showSwitch ? '' : 'uni-list-item--hover'"
+	 class="uni-list-item" @click="onClick">
+		<view class="uni-list-item__container" :class="{'uni-list-item--first':isFirstChild}">
+			<view v-if="thumb" class="uni-list-item__icon">
+				<image :src="thumb" mode="aspectFit" class="uni-list-item__icon-img" />
+			</view>
+			<view v-else-if="showExtraIcon" class="uni-list-item__icon">
+				<uni-icons :color="extraIcon.color" :size="extraIcon.size" :type="extraIcon.type" class="uni-icon-wrapper" />
+			</view>
+			<view class="uni-list-item__content">
+				<slot></slot>
+				<text class="uni-list-item__content-title">{{ title }}</text>
+				<text v-if="note" class="uni-list-item__content-note">{{ note }}</text>
+			</view>
+			<view class="uni-list-item__slot">
+				<slot name="right" ></slot>
+			</view>
+			<view v-if="showBadge || showArrow || showSwitch" class="uni-list-item__extra">
+				<uni-badge v-if="showBadge" :type="badgeType" :text="badgeText" />
+				<switch class="itemSwitch" v-if="showSwitch" :color="switchColor" :disabled="disabled" :checked="switchChecked" @change="onSwitchChange" />
+				<uni-icons v-if="showArrow" :size="20" class="uni-icon-wrapper" color="#bbb" type="arrowright" />
+			</view>
+		</view>
+	</view>
+	<!-- #ifdef APP-NVUE -->
+	</cell>
+	<!-- #endif -->
+</template>
+
+<script>
+	import uniIcons from '../uni-icons/uni-icons.vue'
+	import uniBadge from '../uni-badge/uni-badge.vue'
+	export default {
+		name: 'UniListItem',
+		components: {
+			uniIcons,
+			uniBadge
+		},
+		props: {
+			title: {
+				type: String,
+				default: ''
+			}, // 列表标题
+			note: {
+				type: String,
+				default: ''
+			}, // 列表描述
+			disabled: {
+				// 是否禁用
+				type: [Boolean, String],
+				default: false
+			},
+			showArrow: {
+				// 是否显示箭头
+				type: [Boolean, String],
+				default: true
+			},
+			showBadge: {
+				// 是否显示数字角标
+				type: [Boolean, String],
+				default: false
+			},
+			showSwitch: {
+				// 是否显示Switch
+				type: [Boolean, String],
+				default: false
+			},
+			switchChecked: {
+				// Switch是否被选中
+				type: [Boolean, String],
+				default: false
+			},
+			switchColor:{
+				type:String,
+				default:''
+			},
+			badgeText: {
+				// badge内容
+				type: String,
+				default: ''
+			},
+			badgeType: {
+				// badge类型
+				type: String,
+				default: 'success'
+			},
+			thumb: {
+				// 缩略图
+				type: String,
+				default: ''
+			},
+			showExtraIcon: {
+				// 是否显示扩展图标
+				type: [Boolean, String],
+				default: false
+			},
+			extraIcon: {
+				type: Object,
+				default () {
+					return {
+						type: 'contact',
+						color: '#000000',
+						size: 20
+					}
+				}
+			}
+		},
+		inject: ['list'],
+		data() {
+			return {
+				isFirstChild: false
+			}
+		},
+		mounted() {
+			if (!this.list.firstChildAppend) {
+				this.list.firstChildAppend = true
+				this.isFirstChild = true
+			}
+		},
+		methods: {
+			onClick() {
+				this.$emit('click')
+			},
+			onSwitchChange(e) {
+				this.$emit('switchChange', e.detail)
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import '~@/uni.scss';
+
+	$list-item-pd: $uni-spacing-col-lg $uni-spacing-row-lg;
+
+	.uni-list-item {
+		font-size: $uni-font-size-lg;
+		position: relative;
+		flex-direction: column;
+		justify-content: space-between;
+		padding-left: $uni-spacing-row-lg;
+	}
+
+	.uni-list-item--disabled {
+		opacity: 0.3;
+	}
+
+	.uni-list-item--hover {
+		background-color: $uni-bg-color-hover;
+	}
+
+	.uni-list-item__container {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		padding: $list-item-pd;
+		padding-left: 0;
+		flex: 1;
+		position: relative;
+		justify-content: space-between;
+		align-items: center;
+		border-top-color: $uni-border-color;
+		border-top-style: solid;
+		border-top-width: 1px;
+	}
+
+	.uni-list-item--first {
+		border-top-width: 0px;
+	}
+
+	.uni-list-item__content {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex: 1;
+		overflow: hidden;
+		flex-direction: column;
+		color: #3b4144;
+
+	}
+
+	.uni-list-item__content-title {
+		font-size: $uni-font-size-base;
+		color: #3b4144;
+		overflow: hidden;
+	}
+
+	.uni-list-item__content-note {
+		margin-top: 6rpx;
+		color: $uni-text-color-grey;
+		font-size: $uni-font-size-sm;
+		overflow: hidden;
+	}
+
+	.uni-list-item__extra {
+		// width: 25%;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		justify-content: flex-end;
+		align-items: center;
+	}
+
+	.uni-list-item__icon {
+		margin-right: 18rpx;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+		display: flex;
+	}
+
+	.uni-list-item__icon-img {
+		height: $uni-img-size-base;
+		width: $uni-img-size-base;
+	}
+	// 修改switch默认大小
+	.itemSwitch{
+		transform: translateX(16rpx) scale(.84);
+	}
+	.uni-list-item__slot{
+		color: #909399;
+		font-size: 28rpx;
+	}
+</style>

+ 68 - 0
components/uni-list/uni-list.vue

@@ -0,0 +1,68 @@
+<template>
+	<!-- #ifndef APP-NVUE -->
+	<view class="uni-list">
+		<slot />
+	</view>
+	<!-- #endif -->
+	<!-- #ifdef APP-NVUE -->
+	<list class="uni-list" :enableBackToTop="enableBackToTop" loadmoreoffset="15" :scroll-y="scrollY" @loadmore="loadMore">
+		<slot />
+	</list>
+	<!-- #endif -->
+</template>
+
+<script>
+	export default {
+		name: 'UniList',
+		'mp-weixin': {
+			options: {
+				multipleSlots: false
+			}
+		},
+		props: {
+			enableBackToTop: {
+				type: [Boolean, String],
+				default: false
+			},
+			scrollY: {
+				type: [Boolean, String],
+				default: false
+			}
+		},
+		provide() {
+			return {
+				list: this
+			}
+		},
+		created() {
+			this.firstChildAppend = false
+		},
+		methods: {
+			loadMore(e) {
+				this.$emit("scrolltolower");
+			}
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	.uni-list {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		background-color: $uni-bg-color;
+		position: relative;
+		flex-direction: column;
+		// border-bottom-color: $uni-border-color;
+		// border-bottom-style: solid;
+		// border-bottom-width: 1px;
+	}
+	/* #ifndef APP-NVUE */
+	.uni-list:before {
+		height: 0;
+	}
+	.uni-list:after {
+		height: 0;
+	}
+	/* #endif */
+
+</style>

+ 65 - 0
components/uni-list/uni-refresh.vue

@@ -0,0 +1,65 @@
+<template>
+    <!-- #ifdef APP-NVUE -->
+    <refresh :display="display" @refresh="onrefresh" @pullingdown="onpullingdown">
+        <slot />
+    </refresh>
+    <!-- #endif -->
+    <!-- #ifndef APP-NVUE -->
+    <view ref="uni-refresh" class="uni-refresh" v-show="isShow">
+        <slot />
+    </view>
+    <!-- #endif -->
+</template>
+
+<script>
+    export default {
+        name: 'UniRefresh',
+        props: {
+            display: {
+                type: [String],
+                default: "hide"
+            }
+        },
+        data() {
+            return {
+                pulling: false
+            }
+        },
+        computed: {
+            isShow() {
+                if (this.display === "show" || this.pulling === true) {
+                    return true;
+                }
+                return false;
+            }
+        },
+        created() {},
+        methods: {
+            onchange(value) {
+                this.pulling = value;
+            },
+            onrefresh(e) {
+                this.$emit("refresh", e);
+            },
+            onpullingdown(e) {
+                // #ifdef APP-NVUE
+                this.$emit("pullingdown", e);
+                // #endif
+                // #ifndef APP-NVUE
+                var detail = {
+                    viewHeight: 90,
+                    pullingDistance: e.height
+                }
+                this.$emit("pullingdown", detail);
+                // #endif
+            }
+        }
+    }
+</script>
+
+<style>
+    .uni-refresh {
+        height: 0;
+        overflow: hidden;
+    }
+</style>

+ 87 - 0
components/uni-list/uni-refresh.wxs

@@ -0,0 +1,87 @@
+var pullDown = {
+    threshold: 95,
+    maxHeight: 200,
+    callRefresh: 'onrefresh',
+    callPullingDown: 'onpullingdown',
+    refreshSelector: '.uni-refresh'
+};
+
+function ready(newValue, oldValue, ownerInstance, instance) {
+    var state = instance.getState()
+    state.canPullDown = newValue;
+    console.log(newValue);
+}
+
+function touchStart(e, instance) {
+    var state = instance.getState();
+    state.refreshInstance = instance.selectComponent(pullDown.refreshSelector);
+    state.canPullDown = (state.refreshInstance != null && state.refreshInstance != undefined);
+    if (!state.canPullDown) {
+        return
+    }
+
+    console.log("touchStart");
+
+    state.height = 0;
+    state.touchStartY = e.touches[0].pageY || e.changedTouches[0].pageY;
+    state.refreshInstance.setStyle({
+        'height': 0
+    });
+    state.refreshInstance.callMethod("onchange", true);
+}
+
+function touchMove(e, ownerInstance) {
+    var instance = e.instance;
+    var state = instance.getState();
+    if (!state.canPullDown) {
+        return
+    }
+
+    var oldHeight = state.height;
+    var endY = e.touches[0].pageY || e.changedTouches[0].pageY;
+    var height = endY - state.touchStartY;
+    if (height > pullDown.maxHeight) {
+        return;
+    }
+
+    var refreshInstance = state.refreshInstance;
+    refreshInstance.setStyle({
+        'height': height + 'px'
+    });
+
+    height = height < pullDown.maxHeight ? height : pullDown.maxHeight;
+    state.height = height;
+    refreshInstance.callMethod(pullDown.callPullingDown, {
+        height: height
+    });
+}
+
+function touchEnd(e, ownerInstance) {
+    var state = e.instance.getState();
+    if (!state.canPullDown) {
+        return
+    }
+
+    state.refreshInstance.callMethod("onchange", false);
+
+    var refreshInstance = state.refreshInstance;
+    if (state.height > pullDown.threshold) {
+        refreshInstance.callMethod(pullDown.callRefresh);
+        return;
+    }
+
+    refreshInstance.setStyle({
+        'height': 0
+    });
+}
+
+function propObserver(newValue, oldValue, instance) {
+    pullDown = newValue;
+}
+
+module.exports = {
+    touchmove: touchMove,
+    touchstart: touchStart,
+    touchend: touchEnd,
+    propObserver: propObserver
+}

+ 194 - 0
components/uni-load-more/uni-load-more.vue

@@ -0,0 +1,194 @@
+<template>
+	<view class="uni-load-more">
+		<view class="uni-load-more__img" v-show="status === 'loading' && showIcon">
+			<view class="load1 load">
+				<view class="item" :style="{background:color}"></view>
+				<view class="item" :style="{background:color}"></view>
+				<view class="item" :style="{background:color}"></view>
+				<view class="item" :style="{background:color}"></view>
+			</view>
+			<view class="load2 load">
+				<view class="item" :style="{background:color}"></view>
+				<view class="item"  :style="{background:color}"></view>
+				<view class="item" :style="{background:color}"></view>
+				<view class="item" :style="{background:color}"></view>
+			</view>
+			<view class="load3 load">
+				<view class="item" :style="{background:color}"></view>
+				<view class="item" :style="{background:color}"></view>
+				<view class="item" :style="{background:color}"></view>
+				<view class="item" :style="{background:color}"></view>
+			</view>
+		</view>
+		<text class="uni-load-more__text" :style="{color:color}">{{status === 'more' ? contentText.contentdown : (status === 'loading' ? contentText.contentrefresh : contentText.contentnomore)}}</text>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "uni-load-more",
+		props: {
+			status: {
+				//上拉的状态:more-loading前;loading-loading中;noMore-没有更多了
+				type: String,
+				default: 'more'
+			},
+			showIcon: {
+				type: Boolean,
+				default: true
+			},
+			color: {
+				type: String,
+				default: "#777777"
+			},
+			contentText: {
+				type: Object,
+				default () {
+					return {
+						contentdown: "上拉显示更多",
+						contentrefresh: "正在加载...",
+						contentnomore: "没有更多数据了"
+					};
+				}
+			}
+		},
+		data() {
+			return {}
+		}
+	}
+</script>
+
+<style>
+	@charset "UTF-8";
+
+	.uni-load-more {
+		display: flex;
+		flex-direction: row;
+		height: 80upx;
+		align-items: center;
+		justify-content: center
+	}
+
+	.uni-load-more__text {
+		font-size: 28upx;
+		color: #999
+	}
+
+	.uni-load-more__img {
+		height: 24px;
+		width: 24px;
+		margin-right: 10px
+	}
+
+	.uni-load-more__img>.load {
+		position: absolute
+	}
+
+	.uni-load-more__img>.load .item {
+		width: 6px;
+		height: 2px;
+		border-top-left-radius: 1px;
+		border-bottom-left-radius: 1px;
+		background: #999;
+		position: absolute;
+		opacity: .2;
+		transform-origin: 50%;
+		animation: load 1.56s ease infinite
+	}
+
+	.uni-load-more__img>.load .item:nth-child(1) {
+		transform: rotate(90deg);
+		top: 2px;
+		left: 9px
+	}
+
+	.uni-load-more__img>.load .item:nth-child(2) {
+		transform: rotate(180deg);
+		top: 11px;
+		right: 0
+	}
+
+	.uni-load-more__img>.load .item:nth-child(3) {
+		transform: rotate(270deg);
+		bottom: 2px;
+		left: 9px
+	}
+
+	.uni-load-more__img>.load .item:nth-child(4) {
+		top: 11px;
+		left: 0
+	}
+
+	.load1,
+	.load2,
+	.load3 {
+		height: 24px;
+		width: 24px
+	}
+
+	.load2 {
+		transform: rotate(30deg)
+	}
+
+	.load3 {
+		transform: rotate(60deg)
+	}
+
+	.load1 .item:nth-child(1) {
+		animation-delay: 0s
+	}
+
+	.load2 .item:nth-child(1) {
+		animation-delay: .13s
+	}
+
+	.load3 .item:nth-child(1) {
+		animation-delay: .26s
+	}
+
+	.load1 .item:nth-child(2) {
+		animation-delay: .39s
+	}
+
+	.load2 .item:nth-child(2) {
+		animation-delay: .52s
+	}
+
+	.load3 .item:nth-child(2) {
+		animation-delay: .65s
+	}
+
+	.load1 .item:nth-child(3) {
+		animation-delay: .78s
+	}
+
+	.load2 .item:nth-child(3) {
+		animation-delay: .91s
+	}
+
+	.load3 .item:nth-child(3) {
+		animation-delay: 1.04s
+	}
+
+	.load1 .item:nth-child(4) {
+		animation-delay: 1.17s
+	}
+
+	.load2 .item:nth-child(4) {
+		animation-delay: 1.3s
+	}
+
+	.load3 .item:nth-child(4) {
+		animation-delay: 1.43s
+	}
+
+	@-webkit-keyframes load {
+		0% {
+			opacity: 1
+		}
+
+		100% {
+			opacity: .2
+		}
+	}
+</style>

+ 397 - 0
components/uni-notice-bar/uni-notice-bar.vue

@@ -0,0 +1,397 @@
+<template>
+	<view v-if="show" class="uni-noticebar" style="{ background: linear-gradient(left, rgba(249,230,191,1), rgba(252,187,140,1)); }" @click="onClick">
+		<!-- #ifdef MP-ALIPAY -->
+		<view v-if="showClose === true || showClose === 'true'" class="uni-noticebar-close" @click="close">
+			<uni-icons type="closefill" :color="color" size="12" />
+		</view>
+		<view v-if="showIcon === true || showIcon === 'true'" class="uni-noticebar-icon">
+			<uni-icons type="sound" :color="color" size="14" />
+		</view>
+		<!-- #endif -->
+		<!-- #ifndef MP-ALIPAY -->
+		<uni-icons v-if="showClose === true || showClose === 'true'" class="uni-noticebar-close" type="closefill" :color="color"
+		 size="12" @click="close" />
+		<uni-icons v-if="showIcon === true || showIcon === 'true'" class="uni-noticebar-icon" type="sound" :color="color"
+		 size="14" />
+		<!-- #endif -->
+		<view ref="textBox" class="uni-noticebar__content-wrapper" :class="{'uni-noticebar__content-wrapper--scrollable':scrollable, 'uni-noticebar__content-wrapper--single':!scrollable && (single || moreText)}">
+			<view :id="elIdBox" class="uni-noticebar__content" :class="{'uni-noticebar__content--scrollable':scrollable, 'uni-noticebar__content--single':!scrollable && (single || moreText)}">
+				<text :id="elId" ref="animationEle" class="uni-noticebar__content-text" :class="{'uni-noticebar__content-text--scrollable':scrollable,'uni-noticebar__content-text--single':!scrollable && (single || moreText)}"
+				 :style="{color:color, width:wrapWidth+'px', 'animationDuration': animationDuration, '-webkit-animationDuration': animationDuration ,animationPlayState: webviewHide?'paused':animationPlayState,'-webkit-animationPlayState':webviewHide?'paused':animationPlayState, animationDelay: animationDelay, '-webkit-animationDelay':animationDelay}">{{text}}</text>
+			</view>
+		</view>
+		<view v-if="showGetMore === true || showGetMore === 'true'" class="uni-noticebar__more" @click="clickMore">
+			<text v-if="moreText" :style="{ color: moreColor }" class="uni-noticebar__more-text">{{ moreText }}</text>
+			<uni-icons type="arrowright" :color="moreColor" size="14" />
+		</view>
+	</view>
+</template>
+
+<script>
+	import uniIcons from '../uni-icons/uni-icons.vue'
+	// #ifdef APP-NVUE
+	const dom = weex.requireModule('dom');
+	const animation = weex.requireModule('animation');
+	// #endif
+
+	/**
+	 * NoticeBar 自定义导航栏
+	 * @description 通告栏组件
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=30
+	 * @property {Number} speed 文字滚动的速度,默认100px/秒
+	 * @property {String} text 显示文字
+	 * @property {String} backgroundColor 背景颜色
+	 * @property {String} color 文字颜色
+	 * @property {String} moreColor 查看更多文字的颜色
+	 * @property {String} moreText 设置“查看更多”的文本
+	 * @property {Boolean} single = [true|false] 是否单行
+	 * @property {Boolean} scrollable = [true|false] 是否滚动,为true时,NoticeBar为单行
+	 * @property {Boolean} showIcon = [true|false] 是否显示左侧喇叭图标
+	 * @property {Boolean} showClose = [true|false] 是否显示左侧关闭按钮
+	 * @property {Boolean} showGetMore = [true|false] 是否显示右侧查看更多图标,为true时,NoticeBar为单行
+	 * @event {Function} click 点击 NoticeBar 触发事件
+	 * @event {Function} close 关闭 NoticeBar 触发事件
+	 * @event {Function} getmore 点击”查看更多“时触发事件
+	 */
+
+	export default {
+		name: 'UniNoticeBar',
+		components: {
+			uniIcons
+		},
+		props: {
+			text: {
+				type: String,
+				default: ''
+			},
+			moreText: {
+				type: String,
+				default: ''
+			},
+			backgroundColor: {
+				type: String,
+				default: '#fffbe8'
+			},
+			speed: {
+				// 默认1s滚动100px
+				type: Number,
+				default: 100
+			},
+			color: {
+				type: String,
+				default: '#de8c17'
+			},
+			moreColor: {
+				type: String,
+				default: '#999999'
+			},
+			single: {
+				// 是否单行
+				type: [Boolean, String],
+				default: false
+			},
+			scrollable: {
+				// 是否滚动,添加后控制单行效果取消
+				type: [Boolean, String],
+				default: false
+			},
+			showIcon: {
+				// 是否显示左侧icon
+				type: [Boolean, String],
+				default: false
+			},
+			showGetMore: {
+				// 是否显示右侧查看更多
+				type: [Boolean, String],
+				default: false
+			},
+			showClose: {
+				// 是否显示左侧关闭按钮
+				type: [Boolean, String],
+				default: false
+			}
+		},
+		data() {
+			const elId = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`
+			const elIdBox = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`
+			return {
+				textWidth: 0,
+				boxWidth: 0,
+				wrapWidth: '',
+				webviewHide: false,
+				// #ifdef APP-NVUE
+				stopAnimation: false,
+				// #endif
+				elId: elId,
+				elIdBox: elIdBox,
+				show: true,
+				animationDuration: 'none',
+				animationPlayState: 'paused',
+				animationDelay: '0s'
+			}
+		},
+		mounted() {
+			// #ifdef APP-PLUS
+			var pages = getCurrentPages();
+			var page = pages[pages.length - 1];
+			var currentWebview = page.$getAppWebview();
+			currentWebview.addEventListener('hide',()=>{
+				this.webviewHide = true
+			})
+			currentWebview.addEventListener('show',()=>{
+				this.webviewHide = false
+			})
+			// #endif
+			this.$nextTick(() => {
+				this.initSize()
+			})
+		},
+		// #ifdef APP-NVUE
+		beforeDestroy() {
+			this.stopAnimation = true
+		},
+		// #endif
+		methods: {
+			initSize() {
+				if (this.scrollable) {
+					// #ifndef APP-NVUE
+					let query = [],
+						boxWidth = 0,
+						textWidth = 0;
+					let textQuery = new Promise((resolve, reject) => {
+						uni.createSelectorQuery()
+							// #ifndef MP-ALIPAY
+							.in(this)
+							// #endif
+							.select(`#${this.elId}`)
+							.boundingClientRect()
+							.exec(ret => {
+								this.textWidth = ret[0].width
+								resolve()
+							})
+					})
+					let boxQuery = new Promise((resolve, reject) => {
+						uni.createSelectorQuery()
+							// #ifndef MP-ALIPAY
+							.in(this)
+							// #endif
+							.select(`#${this.elIdBox}`)
+							.boundingClientRect()
+							.exec(ret => {
+								this.boxWidth = ret[0].width
+								resolve()
+							})
+					})
+					query.push(textQuery)
+					query.push(boxQuery)
+					Promise.all(query).then(() => {
+						this.animationDuration = `${this.textWidth / this.speed}s`
+						this.animationDelay = `-${this.boxWidth / this.speed}s`
+						setTimeout(() => {
+							this.animationPlayState = 'running'
+						}, 1000)
+					})
+					// #endif
+					// #ifdef APP-NVUE
+					dom.getComponentRect(this.$refs['animationEle'], (res) => {
+						let winWidth = uni.getSystemInfoSync().windowWidth
+						this.textWidth = res.size.width
+						animation.transition(this.$refs['animationEle'], {
+							styles: {
+								transform: `translateX(-${winWidth}px)`
+							},
+							duration: 0,
+							timingFunction: 'linear',
+							delay: 0
+						}, () => {
+							if (!this.stopAnimation) {
+								animation.transition(this.$refs['animationEle'], {
+									styles: {
+										transform: `translateX(-${this.textWidth}px)`
+									},
+									timingFunction: 'linear',
+									duration: (this.textWidth - winWidth) / this.speed * 1000,
+									delay: 1000
+								}, () => {
+									if (!this.stopAnimation) {
+										this.loopAnimation()
+									}
+								});
+							}
+						});
+					})
+					// #endif
+				}
+				// #ifdef APP-NVUE
+				if (!this.scrollable && (this.single || this.moreText)) {
+					dom.getComponentRect(this.$refs['textBox'], (res) => {
+						this.wrapWidth = res.size.width
+					})
+				}
+				// #endif
+			},
+			loopAnimation() {
+				// #ifdef APP-NVUE
+				animation.transition(this.$refs['animationEle'], {
+					styles: {
+						transform: `translateX(0px)`
+					},
+					duration: 0
+				}, () => {
+					if (!this.stopAnimation) {
+						animation.transition(this.$refs['animationEle'], {
+							styles: {
+								transform: `translateX(-${this.textWidth}px)`
+							},
+							duration: this.textWidth / this.speed * 1000,
+							timingFunction: 'linear',
+							delay: 0
+						}, () => {
+							if (!this.stopAnimation) {
+								this.loopAnimation()
+							}
+						});
+					}
+				});
+				// #endif
+			},
+			clickMore() {
+				this.$emit('getmore')
+			},
+			close() {
+				this.show = false;
+				this.$emit('close')
+			},
+			onClick() {
+				this.$emit('click')
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import '@/uni.scss';
+
+	.uni-noticebar {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		width: 100%;
+		box-sizing: border-box;
+		/* #endif */
+		flex-direction: row;
+		align-items: center;
+		padding: 2px 12px;
+		padding-bottom: 25rpx !important;
+		
+	}
+
+	.uni-noticebar-close {
+		margin-right: 5px;
+	}
+
+	.uni-noticebar-icon {
+		margin-right: 5px;
+	}
+
+	.uni-noticebar__content-wrapper {
+		flex: 1;
+		flex-direction: column;
+		overflow: hidden;
+	}
+
+	.uni-noticebar__content-wrapper--single {
+		/* #ifndef APP-NVUE */
+		line-height: 18px;
+		/* #endif */
+	}
+
+	.uni-noticebar__content-wrapper--single,
+	.uni-noticebar__content-wrapper--scrollable {
+		flex-direction: row;
+	}
+
+	/* #ifndef APP-NVUE */
+	.uni-noticebar__content-wrapper--scrollable {
+		position: relative;
+		height: 18px;
+	}
+	/* #endif */
+
+	.uni-noticebar__content--scrollable {
+		/* #ifdef APP-NVUE */
+		flex: 0;
+		/* #endif */
+		/* #ifndef APP-NVUE */
+		flex: 1;
+		display: block;
+		overflow: hidden;
+		/* #endif */
+	}
+
+	.uni-noticebar__content--single {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		flex: none;
+		width: 100%;
+		justify-content: center;
+		/* #endif */
+	}
+
+	.uni-noticebar__content-text {
+		font-size: 12px;
+		line-height: 18px;
+		/* #ifndef APP-NVUE */
+		word-break: break-all;
+		/* #endif */
+	}
+
+	.uni-noticebar__content-text--single {
+		/* #ifdef APP-NVUE */
+		lines: 1;
+		/* #endif */
+		/* #ifndef APP-NVUE */
+		display: block;
+		width: 100%;
+		white-space: nowrap;
+		/* #endif */
+		overflow: hidden;
+		text-overflow: ellipsis;
+	}
+
+	.uni-noticebar__content-text--scrollable {
+		/* #ifdef APP-NVUE */
+		lines: 1;
+		padding-left: 750rpx;
+		/* #endif */
+		/* #ifndef APP-NVUE */
+		position: absolute;
+		display: block;
+		height: 18px;
+		line-height: 18px;
+		white-space: nowrap;
+		padding-left: 100%;
+		animation: notice 10s 0s linear infinite both;
+		animation-play-state: paused;
+		/* #endif */
+	}
+
+	.uni-noticebar__more {
+		/* #ifndef APP-NVUE */
+		display: inline-flex;
+		/* #endif */
+		flex-direction: row;
+		flex-wrap: nowrap;
+		align-items: center;
+		padding-left: 5px;
+	}
+
+	.uni-noticebar__more-text {
+		font-size: 14px;
+	}
+
+	@keyframes notice {
+		100% {
+			transform: translate3d(-100%, 0, 0);
+		}
+	}
+</style>

+ 198 - 0
components/uni-number-box.vue

@@ -0,0 +1,198 @@
+<template>
+	<view class="uni-numbox">
+		<view class="uni-numbox-minus" 
+			@click="_calcValue('subtract')"
+		>
+			<text class="iconfont iconmove" :class="minDisabled?'uni-numbox-disabled': ''" ></text>
+		</view>
+		<input 
+			class="uni-numbox-value" 
+			type="number"  
+			:disabled="disabled"
+			:value="inputValue" 
+			@blur="_onBlur"
+		>
+		<view 
+			class="uni-numbox-plus" 
+			@click="_calcValue('add')"
+		>
+			<text class="iconfont iconadd" :class="maxDisabled?'uni-numbox-disabled': ''" ></text>
+		</view>
+	</view>
+</template>
+<script>
+	export default {
+		name: 'uni-number-box',
+		props: {
+			isMax: {
+				type: Boolean,
+				default: false
+			},
+			isMin: {
+				type: Boolean,
+				default: false
+			},
+			index: {
+				type: Number,
+				default: 0
+			},
+			value: {
+				type: Number,
+				default: 0
+			},
+			min: {
+				type: Number,
+				default: -Infinity
+			},
+			max: {
+				type: Number,
+				default: Infinity
+			},
+			step: {
+				type: Number,
+				default: 1
+			},
+			disabled: {
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+				inputValue: this.value,
+				minDisabled: false,
+				maxDisabled: false
+			}
+		},
+		created(){
+			this.maxDisabled = this.isMax;
+			this.minDisabled = this.isMin;
+		},
+		computed: {
+
+		},
+		watch: {
+			inputValue(number) {
+				const data = {
+					number: number,
+					index: this.index
+				}
+				this.$emit('eventChange', data);
+			}
+		},
+		methods: {
+			_calcValue(type) {
+				const scale = this._getDecimalScale();
+				let value = this.inputValue * scale;
+				let newValue = 0;
+				let step = this.step * scale;
+				
+				if(type === 'subtract'){
+					newValue = value - step;
+					if (newValue <= this.min){
+						this.minDisabled = true;
+					}
+					if(newValue < this.min){
+						newValue = this.min
+					}
+					if(newValue < this.max && this.maxDisabled === true){
+						this.maxDisabled = false;
+					}
+				}else if(type === 'add'){
+					newValue = value + step;
+					if (newValue >= this.max){
+						this.maxDisabled = true;
+					}
+					if(newValue > this.max){
+						newValue = this.max
+					}
+					if(newValue > this.min && this.minDisabled === true){
+						this.minDisabled = false;
+					}
+				}
+				if(newValue === value){
+					return;
+				}
+				this.inputValue = newValue / scale;
+			},
+			_getDecimalScale() {
+				let scale = 1;
+				// 浮点型
+				if (~~this.step !== this.step) {
+					scale = Math.pow(10, (this.step + '').split('.')[1].length);
+				}
+				return scale;
+			},
+			_onBlur(event) {
+				let value = event.detail.value;
+				if (!value) {
+					this.inputValue = 0;
+					return
+				}
+				value = +value;
+				if (value > this.max) {
+					value = this.max;
+				} else if (value < this.min) {
+					value = this.min
+				}
+
+				this.inputValue = value
+			}
+		}
+	}
+</script>
+<style>
+	.uni-numbox {
+		/* position:absolute; */
+		/* left: 30rpx; */
+		/* bottom: 0; */
+		display: flex;
+		justify-content: flex-start;
+		align-items: center;
+		width:230rpx;
+		height: 60rpx;
+		background:#f5f5f5;
+	}
+
+	.uni-numbox-minus,
+	.uni-numbox-plus {
+		margin: 0;
+		background-color: #f5f5f5;
+		width: 70rpx;
+		height: 100%;
+		line-height: 60rpx;
+		text-align: center;
+		position: relative;
+	}
+	.uni-numbox-minus .yticon,
+	.uni-numbox-plus .yticon{
+		font-size: 30rpx;
+		color: #555;
+	}
+
+	.uni-numbox-minus {
+		border-right: none;
+		border-top-left-radius: 6rpx;
+		border-bottom-left-radius: 6rpx;
+	}
+
+	.uni-numbox-plus {
+		border-left: none;
+		border-top-right-radius: 6rpx;
+		border-bottom-right-radius: 6rpx;
+	}
+
+	.uni-numbox-value {
+		position: relative;
+		background-color: #FFFFFF;
+		width: 90rpx;
+		height: 55rpx;
+		text-align: center;
+		padding: 0;
+		font-size: 30rpx;
+	}
+
+	.uni-numbox-disabled.iconfont {
+		color: #d6d6d6;
+	}
+</style>

+ 263 - 0
components/uni-popup/uni-popup.vue

@@ -0,0 +1,263 @@
+<template>
+	<view v-if="showPopup" class="uni-popup" @touchmove.stop.prevent="clear">
+		<uni-transition :mode-class="['fade']" :styles="maskClass" :duration="duration" :show="showTrans" @click="onTap" />
+		<uni-transition :mode-class="ani" :styles="transClass" :duration="duration" :show="showTrans" @click="onTap">
+			<view class="uni-popup__wrapper-box" @click.stop="clear">
+				<slot />
+			</view>
+		</uni-transition>
+	</view>
+</template>
+
+<script>
+	import uniTransition from '../uni-transition/uni-transition.vue'
+
+	/**
+	 * PopUp 弹出层
+	 * @description 弹出层组件,为了解决遮罩弹层的问题
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=329
+	 * @property {String} type = [top|center|bottom] 弹出方式
+	 * 	@value top 顶部弹出
+	 * 	@value center 中间弹出
+	 * 	@value bottom 底部弹出
+	 * @property {Boolean} animation = [ture|false] 是否开启动画
+	 * @property {Boolean} maskClick = [ture|false] 蒙版点击是否关闭弹窗
+	 * @event {Function} change 打开关闭弹窗触发,e={show: false}
+	 */
+
+	export default {
+		name: 'UniPopup',
+		components: {
+			uniTransition
+		},
+		props: {
+			// 开启动画
+			animation: {
+				type: Boolean,
+				default: true
+			},
+			// 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
+			type: {
+				type: String,
+				default: 'center'
+			},
+			// maskClick
+			maskClick: {
+				type: Boolean,
+				default: true
+			}
+		},
+		data() {
+			return {
+				duration: 300,
+				ani: [],
+				showPopup: false,
+				showTrans: false,
+				maskClass: {
+					'position': 'fixed',
+					'bottom': 0,
+					'top': 0,
+					'left': 0,
+					'right': 0,
+					'backgroundColor': 'rgba(0, 0, 0, 0.4)'
+				},
+				transClass: {
+					'position': 'fixed',
+					'left': 0,
+					'right': 0,
+				}
+			}
+		},
+		watch: {
+			type: {
+				handler: function(newVal) {
+					switch (this.type) {
+						case 'top':
+							this.ani = ['slide-top']
+							this.transClass = {
+								'position': 'fixed',
+								'left': 0,
+								'right': 0,
+							}
+							break
+						case 'bottom':
+							this.ani = ['slide-bottom']
+							this.transClass = {
+								'position': 'fixed',
+								'left': 0,
+								'right': 0,
+								'bottom': 0
+							}
+							break
+						case 'center':
+							this.ani = ['zoom-out', 'fade']
+							this.transClass = {
+								'position': 'fixed',
+								/* #ifndef APP-NVUE */
+								'display': 'flex',
+								'flexDirection': 'column',
+								/* #endif */
+								'bottom': 0,
+								'left': 0,
+								'right': 0,
+								'top': 0,
+								'justifyContent': 'center',
+								'alignItems': 'center'
+							}
+
+							break
+					}
+				},
+				immediate: true
+			}
+		},
+		created() {
+			if (this.animation) {
+				this.duration = 300
+			} else {
+				this.duration = 0
+			}
+		},
+		methods: {
+			clear(e) {
+				// TODO nvue 取消冒泡
+				e.stopPropagation()
+			},
+			open() {
+				this.showPopup = true
+				this.$nextTick(() => {
+					clearTimeout(this.timer)
+					this.timer = setTimeout(() => {
+						this.showTrans = true
+					}, 50);
+				})
+				this.$emit('change', {
+					show: true
+				})
+			},
+			close(type) {
+				this.showTrans = false
+				this.$nextTick(() => {
+					clearTimeout(this.timer)
+					this.timer = setTimeout(() => {
+						this.$emit('change', {
+							show: false
+						})
+						this.showPopup = false
+					}, 300)
+				})
+			},
+			onTap() {
+				if (!this.maskClick) return
+				this.close()
+			}
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	.uni-popup {
+		position: fixed;
+		/* #ifdef H5 */
+		top: var(--window-top);
+		/* #endif */
+		/* #ifndef H5 */
+		top: 0;
+		/* #endif */
+		bottom: 0;
+		left: 0;
+		right: 0;
+		/* #ifndef APP-NVUE */
+		z-index: 99;
+		/* #endif */
+	}
+
+	.uni-popup__mask {
+		position: absolute;
+		top: 0;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		background-color: $uni-bg-color-mask;
+		opacity: 0;
+	}
+
+	.mask-ani {
+		transition-property: opacity;
+		transition-duration: 0.2s;
+	}
+
+	.uni-top-mask {
+		opacity: 1;
+	}
+
+	.uni-bottom-mask {
+		opacity: 1;
+	}
+
+	.uni-center-mask {
+		opacity: 1;
+	}
+
+	.uni-popup__wrapper {
+		/* #ifndef APP-NVUE */
+		display: block;
+		/* #endif */
+		position: absolute;
+	}
+
+	.top {
+		top: 0;
+		left: 0;
+		right: 0;
+		transform: translateY(-500px);
+	}
+
+	.bottom {
+		bottom: 0;
+		left: 0;
+		right: 0;
+		transform: translateY(500px);
+	}
+
+	.center {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		flex-direction: column;
+		/* #endif */
+		bottom: 0;
+		left: 0;
+		right: 0;
+		top: 0;
+		justify-content: center;
+		align-items: center;
+		transform: scale(1.2);
+		opacity: 0;
+	}
+
+	.uni-popup__wrapper-box {
+		/* #ifndef APP-NVUE */
+		display: block;
+		/* #endif */
+		position: relative;
+	}
+
+	.content-ani {
+		// transition: transform 0.3s;
+		transition-property: transform, opacity;
+		transition-duration: 0.2s;
+	}
+
+
+	.uni-top-content {
+		transform: translateY(0);
+	}
+
+	.uni-bottom-content {
+		transform: translateY(0);
+	}
+
+	.uni-center-content {
+		transform: scale(1);
+		opacity: 1;
+	}
+</style>

+ 141 - 0
components/uni-rate/uni-rate.vue

@@ -0,0 +1,141 @@
+<template>
+	<view class="uni-rate">
+		<view :key="index" :style="{ marginLeft: margin + 'px' }" @click="_onClick(index)" class="uni-rate__icon" v-for="(star, index) in stars">
+			<uni-icons :color="color" :size="size" :type="isFill ? 'star-filled' : 'star'" />
+			<!-- #ifdef APP-NVUE -->
+			<view :style="{ width: star.activeWitch.replace('%','')*size/100+'px'}" class="uni-rate__icon-on">
+				<uni-icons style="text-align: left;" :color="activeColor" :size="size" type="star-filled" />
+			</view>
+			<!-- #endif -->
+			<!-- #ifndef APP-NVUE -->
+			<view :style="{ width: star.activeWitch,top:-size/2+'px' }" class="uni-rate__icon-on">
+				<uni-icons :color="activeColor" :size="size" type="star-filled" />
+			</view>
+			<!-- #endif -->
+		</view>
+	</view>
+</template>
+
+<script>
+	import uniIcons from "../uni-icons/uni-icons.vue";
+	export default {
+		name: "UniRate",
+		components: {
+			uniIcons
+		},
+		props: {
+			isFill: {
+				// 星星的类型,是否镂空
+				type: [Boolean, String],
+				default: true
+			},
+			color: {
+				// 星星的颜色
+				type: String,
+				default: "#ececec"
+			},
+			activeColor: {
+				// 星星选中状态颜色
+				type: String,
+				default: "#ffca3e"
+			},
+			size: {
+				// 星星的大小
+				type: [Number, String],
+				default: 24
+			},
+			value: {
+				// 当前评分
+				type: [Number, String],
+				default: 0
+			},
+			max: {
+				// 最大评分
+				type: [Number, String],
+				default: 5
+			},
+			margin: {
+				// 星星的间距
+				type: [Number, String],
+				default: 0
+			},
+			disabled: {
+				// 是否可点击
+				type: [Boolean, String],
+				default: false
+			}
+		},
+		data() {
+			return {
+				valueSync: ""
+			};
+		},
+		computed: {
+			stars() {
+				const value = this.valueSync ? this.valueSync : 0;
+				const starList = [];
+				const floorValue = Math.floor(value);
+				const ceilValue = Math.ceil(value);
+				// console.log("ceilValue: " + ceilValue);
+				// console.log("floorValue: " + floorValue);
+				for (let i = 0; i < this.max; i++) {
+					if (floorValue > i) {
+						starList.push({
+							activeWitch: "100%"
+						});
+					} else if (ceilValue - 1 === i) {
+						starList.push({
+							activeWitch: (value - floorValue) * 100 + "%"
+						});
+					} else {
+						starList.push({
+							activeWitch: "0"
+						});
+					}
+				}
+				console.log("starList[4]: " + starList[4].activeWitch);
+				return starList;
+			}
+		},
+		created() {
+			this.valueSync = Number(this.value);
+		},
+		methods: {
+			_onClick(index) {
+				if (this.disabled) {
+					return;
+				}
+				this.valueSync = index + 1;
+				this.$emit("change", {
+					value: this.valueSync
+				});
+			}
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	.uni-rate {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		line-height: 0;
+		font-size: 0;
+		flex-direction: row;
+	}
+
+	.uni-rate__icon {
+		position: relative;
+		line-height: 0;
+		font-size: 0;
+	}
+
+	.uni-rate__icon-on {
+		overflow: hidden;
+		position: absolute;
+		top: 0;
+		left: 0;
+		line-height: 1;
+		text-align: left;
+	}
+</style>

+ 279 - 0
components/uni-transition/uni-transition.vue

@@ -0,0 +1,279 @@
+<template>
+	<view v-if="isShow" ref="ani" class="uni-transition" :class="[ani.in]" :style="'transform:' +transform+';'+stylesObject"
+	 @click="change">
+		 <slot></slot>
+	</view>
+</template>
+
+<script>
+	// #ifdef APP-NVUE
+	const animation = uni.requireNativePlugin('animation');
+	// #endif
+	/**
+	 * Transition 过渡动画
+	 * @description 简单过渡动画组件
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=985
+	 * @property {Boolean} show = [false|true] 控制组件显示或隐藏
+     * @property {Array} modeClass = [fade|slide-top|slide-right|slide-bottom|slide-left|zoom-in|zoom-out] 过渡动画类型
+     *  @value fade 渐隐渐出过渡
+     *  @value slide-top 由上至下过渡
+     *  @value slide-right 由右至左过渡
+     *  @value slide-bottom 由下至上过渡
+     *  @value slide-left 由左至右过渡
+     *  @value zoom-in 由小到大过渡
+     *  @value zoom-out 由大到小过渡
+	 * @property {Number} duration 过渡动画持续时间
+	 * @property {Object} styles 组件样式,同 css 样式,注意带’-‘连接符的属性需要使用小驼峰写法如:`backgroundColor:red`
+	 */
+	export default {
+		name: 'uniTransition',
+		props: {
+			show: {
+				type: Boolean,
+				default: false
+			},
+			modeClass: {
+				type: Array,
+				default () {
+					return []
+				}
+			},
+			duration: {
+				type: Number,
+				default: 300
+			},
+			styles: {
+				type: Object,
+				default () {
+					return {}
+				}
+			}
+		},
+		data() {
+			return {
+				isShow: false,
+				transform: '',
+				ani: { in: '',
+					active: ''
+				}
+			};
+		},
+		watch: {
+			show: {
+				handler(newVal) {
+					if (newVal) {
+						this.open()
+					} else {
+						this.close()
+					}
+				},
+				immediate: true
+			}
+		},
+		computed: {
+			stylesObject() {
+				let styles = {
+					...this.styles,
+					'transition-duration': this.duration / 1000 + 's'
+				}
+				let transfrom = ''
+				for (let i in styles) {
+					let line = this.toLine(i)
+					transfrom += line + ':' + styles[i] + ';'
+				}
+				return transfrom
+			}
+		},
+		created() {
+			// this.timer = null
+			// this.nextTick = (time = 50) => new Promise(resolve => {
+			// 	clearTimeout(this.timer)
+			// 	this.timer = setTimeout(resolve, time)
+			// 	return this.timer
+			// });
+		},
+		methods: {
+			change() {
+				this.$emit('click', {
+					detail: this.isShow
+				})
+			},
+			open() {
+				clearTimeout(this.timer)
+				this.isShow = true
+				this.transform = ''
+				this.ani.in = ''
+				for (let i in this.getTranfrom(false)) {
+					if (i === 'opacity') {
+						this.ani.in = 'fade-in'
+					} else {
+						this.transform += `${this.getTranfrom(false)[i]} `
+					}
+				}
+				this.$nextTick(() => {
+					setTimeout(() => {
+						this._animation(true)
+					}, 50)
+				})
+
+			},
+			close(type) {
+				clearTimeout(this.timer)
+				this._animation(false)
+			},
+			_animation(type) {
+				let styles = this.getTranfrom(type)
+				// #ifdef APP-NVUE
+				if(!this.$refs['ani']) return
+				animation.transition(this.$refs['ani'].ref, {
+					styles,
+					duration: this.duration, //ms
+					timingFunction: 'ease',
+					needLayout: false,
+					delay: 0 //ms
+				}, () => {
+					if (!type) {
+						this.isShow = false
+					}
+					this.$emit('change', {
+						detail: this.isShow
+					})
+				})
+				// #endif
+				// #ifndef APP-NVUE
+				this.transform = ''
+				for (let i in styles) {
+					if (i === 'opacity') {
+						this.ani.in = `fade-${type?'out':'in'}`
+					} else {
+						this.transform += `${styles[i]} `
+					}
+				}
+				this.timer = setTimeout(() => {
+					if (!type) {
+						this.isShow = false
+					}
+					this.$emit('change', {
+						detail: this.isShow
+					})
+
+				}, this.duration)
+				// #endif
+
+			},
+			getTranfrom(type) {
+				let styles = {
+					transform: ''
+				}
+				this.modeClass.forEach((mode) => {
+					switch (mode) {
+						case 'fade':
+							styles.opacity = type ? 1 : 0
+							break;
+						case 'slide-top':
+							styles.transform += `translateY(${type?'0':'-100%'}) `
+							break;
+						case 'slide-right':
+							styles.transform += `translateX(${type?'0':'100%'}) `
+							break;
+						case 'slide-bottom':
+							styles.transform += `translateY(${type?'0':'100%'}) `
+							break;
+						case 'slide-left':
+							styles.transform += `translateX(${type?'0':'-100%'}) `
+							break;
+						case 'zoom-in':
+							styles.transform += `scale(${type?1:0.8}) `
+							break;
+						case 'zoom-out':
+							styles.transform += `scale(${type?1:1.2}) `
+							break;
+					}
+				})
+				return styles
+			},
+			_modeClassArr(type) {
+				let mode = this.modeClass
+				if (typeof(mode) !== "string") {
+					let modestr = ''
+					mode.forEach((item) => {
+						modestr += (item + '-' + type + ',')
+					})
+					return modestr.substr(0, modestr.length - 1)
+				} else {
+					return mode + '-' + type
+				}
+			},
+			// getEl(el) {
+			// 	console.log(el || el.ref || null);
+			// 	return el || el.ref || null
+			// },
+			toLine(name) {
+				return name.replace(/([A-Z])/g, "-$1").toLowerCase();
+			}
+		}
+	}
+</script>
+
+<style>
+	.uni-transition {
+		transition-timing-function: ease;
+		transition-duration: 0.3s;
+		transition-property: transform, opacity;
+	}
+
+	.fade-in {
+		opacity: 0;
+	}
+
+	.fade-active {
+		opacity: 1;
+	}
+
+	.slide-top-in {
+		/* transition-property: transform, opacity; */
+		transform: translateY(-100%);
+	}
+
+	.slide-top-active {
+		transform: translateY(0);
+		/* opacity: 1; */
+	}
+
+	.slide-right-in {
+		transform: translateX(100%);
+	}
+
+	.slide-right-active {
+		transform: translateX(0);
+	}
+
+	.slide-bottom-in {
+		transform: translateY(100%);
+	}
+
+	.slide-bottom-active {
+		transform: translateY(0);
+	}
+
+	.slide-left-in {
+		transform: translateX(-100%);
+	}
+
+	.slide-left-active {
+		transform: translateX(0);
+		opacity: 1;
+	}
+
+	.zoom-in-in {
+		transform: scale(0.8);
+	}
+
+	.zoom-out-active {
+		transform: scale(1);
+	}
+
+	.zoom-out-in {
+		transform: scale(1.2);
+	}
+</style>

+ 226 - 0
components/upload-images.vue

@@ -0,0 +1,226 @@
+<template>
+	<view class="upload-content">
+		<block v-for="(item, index) in imageList" :key="index">
+			<view class="upload-item">
+				<image class="upload-img" :src="item.filePath" mode="aspectFill" @click="previewImage(index)"></image>
+				<image class="upload-del-btn" 
+					@click="delImage(index)" 
+					src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjNBODgzQjUwNDM5MTFFOUJDMjlGN0UwRTJGMjVCNjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjNBODgzQjYwNDM5MTFFOUJDMjlGN0UwRTJGMjVCNjQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGM0E4ODNCMzA0MzkxMUU5QkMyOUY3RTBFMkYyNUI2NCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGM0E4ODNCNDA0MzkxMUU5QkMyOUY3RTBFMkYyNUI2NCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuYQTIAAAAHNSURBVHjazJgxasMwFIbjnsD4BDmCLxDQDZrNQ5bcILlBvXvpDRLIWmiHFkyH2t0LyVbwEkPpbE/eYlUCGYQax096UuIffkIgij7ryU/vyZuYy2e+Z56K70R8lsJcOfPn5AriMCvmZ2YKdMW8EQ/hRA9iEorwXlpZtObMRySQ6kysvrFWloHUEIcmUBuHUDLccmxQskErt7wyVLdy00tQ4Q2g5De2V9kNwWjffiNDA33f/42i6E13Qj5uNptlwJD+SyODuaqqqi/KVBTFOxSKA7VtW/NxSZI8AcbE2nuraZpvKgSBk6G4drsdBOwogz1CwAghH/JEl+BUKJ1VltPHHjoIAoeE4l53YFqb+RKcBSgqyqXhtxEKZwkKB3YOThYCqjPuCDoHZwGK3mGLtdPp5LmqTI1Dqe4p26EkNqA4iE6eg2z+iQ0okyQMATvYgLIIt9Y6knTyFBIudHqIq3BpmkL60VJ9O0sXZY8MBwSLtdNGEAQ/i8XiVXcz83EcEPDbuq/fzMdYWt+6GTmMsX2rh9q3TtsxNrzXhKt1rwg6rR1Dhdjqo7QMlWOvoWTF4imxQMRF7eaL8L5ohmwrLgDB8pCQc8DlcG7y538CDABJNGPqfaJgfgAAAABJRU5ErkJggg==" 
+					mode="scaleToFill">
+				</image>
+				<view class="upload-progress" v-if="item.progress < 100">{{item.progress}}%</view>
+			</view>
+		</block>
+		<view class="upload-add-btn" v-if="rduLength > 0" @click="chooseImage"></view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			imageList: []
+		};
+	},
+	props: {
+		url: {
+			type: String,
+			value: '' //上传接口地址
+		},
+		count: {
+			type: Number,
+			value: 4 //单次可选择的图片数量
+		},
+		length: {
+			type: Number,
+			value: 50 //可上传总数量
+		}
+	},
+	computed: {
+		rduLength(){
+			return this.length - this.imageList.length;
+		}
+	},
+	methods: {
+		//选择图片
+		chooseImage: function(){
+			uni.chooseImage({
+				count: this.rduLength < this.count ? this.rduLength : this.count, //最多可以选择的图片张数,默认9
+				sizeType: ['original', 'compressed'], //original 原图,compressed 压缩图,默认二者都有
+				sourceType: ['album'], //album 从相册选图,camera 使用相机,默认二者都有
+				success: (res)=> {
+					const images = res.tempFilePaths;
+					this.uploadFiles(images);
+				}
+			});
+		},
+		//上传图片
+		async uploadFiles(images){
+			this.imageList.push({
+				filePath: images[0],
+				progress: 0
+			});
+			uni.showLoading({
+				title: '请稍后..',
+				mask: true,
+			})
+			try{
+				const uploadUrl = await this.uploadImage(images[0]);
+			}catch(err){
+				console.log(err);
+				return;
+			}
+			
+			if(uploadUrl !== false){
+				images.splice(0, 1);
+				this.imageList[this.imageList.length - 1].src = uploadUrl;
+
+				//判断是否需要继续上传
+				if(images.length > 0 && this.rduLength > 0){
+					this.uploadFiles(images);
+				}else{
+					uni.hideLoading();
+				}
+			}else{
+				//上传失败处理
+				this.imageList.pop();
+				uni.hideLoading();
+				uni.showToast({
+					title: '上传中出现问题,已终止上传',
+					icon: 'none',
+					mask: true,
+					duration: 2000
+				});
+			}
+		},
+		uploadImage: function(file){
+			return new Promise((resolve, reject)=> {
+				//发送给后端的附加参数
+				const formData = {
+					thumb_mode: 1,  
+				};
+				this.uploadTask = uni.uploadFile({
+					url: this.url, 
+					filePath: file,
+					name: 'file',
+					formData: formData,
+					success(uploadFileResult){
+						const uploadFileRes = JSON.parse(uploadFileResult.data) || {};
+						if(uploadFileRes.status === 1 && uploadFileRes.data){
+							resolve(uploadFileRes.data);
+						}else{
+							reject('接口返回错误');
+						}
+					}, 
+					fail(){
+						reject('网络链接错误');
+					}
+				});
+				//上传进度
+				this.uploadTask.onProgressUpdate((progressRes)=> {
+					this.imageList[this.imageList.length - 1].progress = progressRes.progress;
+				});
+			});
+		},
+		//删除图片
+		delImage: function(index){
+			uni.showModal({
+				content: '确定要放弃这张图片么?',
+				success: (confirmRes)=> {
+					if (confirmRes.confirm) {
+						this.imageList.splice(index, 1);
+					} 
+				}
+			});
+		},
+		//预览图片
+		previewImage: function(index){
+			const urls = [];
+			this.imageList.forEach((item)=> {
+				urls.push(item.filePath);
+			})
+			uni.previewImage({
+				current: urls[index],
+				urls: urls,
+				indicator: "number"
+			})
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+	.upload-content{
+		padding:24upx 0 0 28upx;
+		background-color: #fff;
+		overflow:hidden;
+	}
+	.upload-item{
+		position: relative;
+		float:left;
+		width:150upx;
+		height:150upx;
+		margin-right:30upx;
+		margin-bottom:30upx;
+		&:nth-child(4n){
+			margin-right:0;
+		}
+		.upload-img{
+			width:100%;
+			height:100%;
+			border-radius:8upx;
+		}
+		.upload-del-btn{
+			position: absolute;
+			right:-16upx;
+			top:-14upx;
+			width:36upx;
+			height:36upx;
+			border: 4upx solid #fff;
+			border-radius: 100px;
+		}
+		.upload-progress{
+			position: absolute;
+			left:0;
+			top:0;
+			display:flex;
+			align-items:center;
+			justify-content: center;
+			width:100%;
+			height:100%;
+			background-color: rgba(0,0,0,.4);
+			color:#fff;
+			font-size:24upx;
+			border-radius:8upx;
+		}
+	}
+	.upload-add-btn {
+		position: relative;
+		float:left;
+		width: 150upx;
+		height: 150upx;
+		z-index: 99;
+		border-radius:8upx;
+		background:#f9f9f9;
+		&:before,
+		&:after {
+			content: " ";
+			position: absolute;
+			top: 50%;
+			left: 50%;
+			-webkit-transform: translate(-50%, -50%);
+			transform: translate(-50%, -50%);
+			width: 4upx;
+			height: 60upx;
+			background-color: #d6d6d6;
+		}
+		&:after {
+			width: 60upx;
+			height: 4upx;
+		}
+		&:active {
+			background-color: #f7f7f7;
+		}
+	}
+
+</style>

+ 11282 - 0
components/w-picker/areadata/areadata.js

@@ -0,0 +1,11282 @@
+const cityData = [{
+	value: '110000',
+	label: '北京市',
+	children: [{
+		value: "110100",
+		label: "北京市",
+		children: [{
+			value: "110101",
+			label: "东城区"
+		}, {
+			value: "110102",
+			label: "西城区"
+		},{
+			value: "110105",
+			label: "朝阳区"
+		}, {
+			value: "110106",
+			label: "丰台区"
+		}, {
+			value: "110107",
+			label: "石景山区"
+		}, {
+			value: "110108",
+			label: "海淀区"
+		}, {
+			value: "110109",
+			label: "门头沟区"
+		}, {
+			value: "110111",
+			label: "房山区"
+		}, {
+			value: "110112",
+			label: "通州区"
+		}, {
+			value: "110113",
+			label: "顺义区"
+		}, {
+			value: "110114",
+			label: "昌平区"
+		}, {
+			value: "110115",
+			label: "大兴区"
+		}, {
+			value: "110116",
+			label: "怀柔区"
+		}, {
+			value: "110117",
+			label: "平谷区"
+		}, {
+			value: "110118",
+			label: "密云区"
+		}, {
+			value: "110119",
+			label: "延庆区"
+		}]
+	}]
+}, {
+	value: '120000',
+	label: '天津市',
+	children: [{
+		value: "120100",
+		label: "天津市",
+		children: [{
+			value: "120101",
+			label: "和平区"
+		}, {
+			value: "120102",
+			label: "河东区"
+		}, {
+			value: "120103",
+			label: "河西区"
+		}, {
+			value: "120104",
+			label: "南开区"
+		}, {
+			value: "120105",
+			label: "河北区"
+		}, {
+			value: "120106",
+			label: "红桥区"
+		}, {
+			value: "120110",
+			label: "东丽区"
+		}, {
+			value: "120111",
+			label: "西青区"
+		}, {
+			value: "120112",
+			label: "津南区"
+		}, {
+			value: "120113",
+			label: "北辰区"
+		}, {
+			value: "120114",
+			label: "武清区"
+		}, {
+			value: "120115",
+			label: "宝坻区"
+		}, {
+			value: "120116",
+			label: "滨海新区"
+		}, {
+			value: "120117",
+			label: "宁河区"
+		}, {
+			value: "120118",
+			label: "静海区"
+		}, {
+			value: "120119",
+			label: "蓟州区"
+		}]
+	}]
+}, {
+	value: '130000',
+	label: '河北省',
+	children: [{
+		value: "130100",
+		label: "石家庄市",
+		children: [{
+			value: "130102",
+			label: "长安区"
+		},{
+			value: "130104",
+			label: "桥西区"
+		}, {
+			value: "130105",
+			label: "新华区"
+		}, {
+			value: "130107",
+			label: "井陉矿区"
+		}, {
+			value: "130108",
+			label: "裕华区"
+		},{
+            value: "130109",
+            label: "藁城区"
+        },{
+            value: "130110",
+            label: "鹿泉区"
+        },{
+            value: "130111",
+            label: "栾城区"
+        }, {
+			value: "130121",
+			label: "井陉县"
+		}, {
+			value: "130123",
+			label: "正定县"
+		},{
+			value: "130125",
+			label: "行唐县"
+		}, {
+			value: "130126",
+			label: "灵寿县"
+		}, {
+			value: "130127",
+			label: "高邑县"
+		}, {
+			value: "130128",
+			label: "深泽县"
+		}, {
+			value: "130129",
+			label: "赞皇县"
+		}, {
+			value: "130130",
+			label: "无极县"
+		}, {
+			value: "130131",
+			label: "平山县"
+		}, {
+			value: "130132",
+			label: "元氏县"
+		}, {
+			value: "130133",
+			label: "赵县"
+		}, {
+			value: "130181",
+			label: "辛集市"
+		}, {
+			value: "130183",
+			label: "晋州市"
+		}, {
+			value: "130184",
+			label: "新乐市"
+		}, {
+            value: "130172",
+            label: "石家庄循环化工园区"
+        }, {
+            value: "130171",
+            label: "石家庄高新技术产业开发区"
+        }]
+	}, {
+		value: "130200",
+		label: "唐山市",
+		children: [{
+			value: "130202",
+			label: "路南区"
+		}, {
+			value: "130203",
+			label: "路北区"
+		}, {
+			value: "130204",
+			label: "古冶区"
+		}, {
+			value: "130205",
+			label: "开平区"
+		}, {
+			value: "130207",
+			label: "丰南区"
+		}, {
+			value: "130208",
+			label: "丰润区"
+		},  {
+            value: "130209",
+            label: "曹妃甸区"
+        }, {
+			value: "130223",
+			label: "滦县"
+		}, {
+			value: "130224",
+			label: "滦南县"
+		}, {
+			value: "130225",
+			label: "乐亭县"
+		}, {
+			value: "130227",
+			label: "迁西县"
+		}, {
+			value: "130229",
+			label: "玉田县"
+		}, {
+			value: "130281",
+			label: "遵化市"
+		}, {
+			value: "130283",
+			label: "迁安市"
+		}, {
+			value: "130271",
+			label: "唐山市芦台经济技术开发区"
+		}, {
+            value: "130272",
+            label: "唐山市汉沽管理区"
+        }, {
+            value: "130273",
+            label: "唐山高新技术产业开发区"
+        }, {
+            value: "130274",
+            label: "河北唐山海港经济开发区"
+        }]
+	}, {
+		value: "130300",
+		label: "秦皇岛市",
+		children: [{
+			value: "130302",
+			label: "海港区"
+		}, {
+			value: "130303",
+			label: "山海关区"
+		}, {
+			value: "130304",
+			label: "北戴河区"
+		}, {
+			value: "130321",
+			label: "青龙满族自治县"
+		}, {
+			value: "130322",
+			label: "昌黎县"
+		}, {
+			value: "130306",
+			label: "抚宁区"
+		}, {
+			value: "130324",
+			label: "卢龙县"
+		}, {
+			value: "130371",
+			label: "秦皇岛市经济技术开发区"
+		}, {
+			value: "130372",
+			label: "北戴河新区"
+		}]
+	}, {
+		value: "130400",
+		label: "邯郸市",
+		children: [{
+			value: "130402",
+			label: "邯山区"
+		}, {
+			value: "130403",
+			label: "丛台区"
+		}, {
+			value: "130404",
+			label: "复兴区"
+		}, {
+			value: "130406",
+			label: "峰峰矿区"
+		}, {
+			value: "130421",
+			label: "邯郸县"
+		}, {
+			value: "130423",
+			label: "临漳县"
+		}, {
+			value: "130424",
+			label: "成安县"
+		}, {
+			value: "130425",
+			label: "大名县"
+		}, {
+			value: "130426",
+			label: "涉县"
+		}, {
+			value: "130427",
+			label: "磁县"
+		}, {
+			value: "130407",
+			label: "肥乡区"
+		}, {
+			value: "130408",
+			label: "永年区"
+		}, {
+			value: "130430",
+			label: "邱县"
+		}, {
+			value: "130431",
+			label: "鸡泽县"
+		}, {
+			value: "130432",
+			label: "广平县"
+		}, {
+			value: "130433",
+			label: "馆陶县"
+		}, {
+			value: "130434",
+			label: "魏县"
+		}, {
+			value: "130435",
+			label: "曲周县"
+		}, {
+			value: "130481",
+			label: "武安市"
+		}, {
+			value: "130471",
+			label: "邯郸经济技术开发区"
+		}, {
+            value: "130473",
+            label: "邯郸冀南新区"
+        }]
+	}, {
+		value: "130500",
+		label: "邢台市",
+		children: [{
+			value: "130502",
+			label: "桥东区"
+		}, {
+			value: "130503",
+			label: "桥西区"
+		}, {
+			value: "130521",
+			label: "邢台县"
+		}, {
+			value: "130522",
+			label: "临城县"
+		}, {
+			value: "130523",
+			label: "内丘县"
+		}, {
+			value: "130524",
+			label: "柏乡县"
+		}, {
+			value: "130525",
+			label: "隆尧县"
+		}, {
+			value: "130526",
+			label: "任县"
+		}, {
+			value: "130527",
+			label: "南和县"
+		}, {
+			value: "130528",
+			label: "宁晋县"
+		}, {
+			value: "130529",
+			label: "巨鹿县"
+		}, {
+			value: "130530",
+			label: "新河县"
+		}, {
+			value: "130531",
+			label: "广宗县"
+		}, {
+			value: "130532",
+			label: "平乡县"
+		}, {
+			value: "130533",
+			label: "威县"
+		}, {
+			value: "130534",
+			label: "清河县"
+		}, {
+			value: "130535",
+			label: "临西县"
+		}, {
+			value: "130581",
+			label: "南宫市"
+		}, {
+			value: "130582",
+			label: "沙河市"
+		}, {
+			value: "130571",
+			label: "河北邢台经济开发区"
+		}]
+	}, {
+		value: "130600",
+		label: "保定市",
+		children: [{
+			value: "130602",
+			label: "竞秀区"
+		}, {
+			value: "130606",
+			label: "莲池区"
+		}, {
+			value: "130607",
+			label: "满城区"
+		}, {
+			value: "130608",
+			label: "清苑区"
+		}, {
+			value: "130623",
+			label: "涞水县"
+		}, {
+			value: "130624",
+			label: "阜平县"
+		}, {
+			value: "130609",
+			label: "徐水区"
+		}, {
+			value: "130626",
+			label: "定兴县"
+		}, {
+			value: "130627",
+			label: "唐县"
+		}, {
+			value: "130628",
+			label: "高阳县"
+		}, {
+			value: "130629",
+			label: "容城县"
+		}, {
+			value: "130630",
+			label: "涞源县"
+		}, {
+			value: "130631",
+			label: "望都县"
+		}, {
+			value: "130632",
+			label: "安新县"
+		}, {
+			value: "130633",
+			label: "易县"
+		}, {
+			value: "130634",
+			label: "曲阳县"
+		}, {
+			value: "130635",
+			label: "蠡县"
+		}, {
+			value: "130636",
+			label: "顺平县"
+		}, {
+			value: "130637",
+			label: "博野县"
+		}, {
+			value: "130638",
+			label: "雄县"
+		}, {
+			value: "130681",
+			label: "涿州市"
+		}, {
+			value: "130682",
+			label: "定州市"
+		}, {
+			value: "130683",
+			label: "安国市"
+		}, {
+			value: "130684",
+			label: "高碑店市"
+		}, {
+			value: "130671",
+			label: "保定高新技术产业开发区"
+		}, {
+            value: "130672",
+            label: "保定白沟新城"
+        }]
+	}, {
+		value: "130700",
+		label: "张家口市",
+		children: [{
+			value: "130702",
+			label: "桥东区"
+		}, {
+			value: "130703",
+			label: "桥西区"
+		}, {
+			value: "130705",
+			label: "宣化区"
+		}, {
+			value: "130706",
+			label: "下花园区"
+		}, {
+            value: "130708",
+            label: "万全区"
+        }, {
+            value: "130709",
+            label: "崇礼区"
+        }, {
+			value: "130722",
+			label: "张北县"
+		}, {
+			value: "130723",
+			label: "康保县"
+		}, {
+			value: "130724",
+			label: "沽源县"
+		}, {
+			value: "130725",
+			label: "尚义县"
+		}, {
+			value: "130726",
+			label: "蔚县"
+		}, {
+			value: "130727",
+			label: "阳原县"
+		}, {
+			value: "130728",
+			label: "怀安县"
+		}, {
+			value: "130730",
+			label: "怀来县"
+		}, {
+			value: "130731",
+			label: "涿鹿县"
+		}, {
+			value: "130732",
+			label: "赤城县"
+		}, {
+			value: "130733",
+			label: "崇礼县"
+		}, {
+			value: "130771",
+			label: "张家口市高新技术产业开发区"
+		}, {
+            value: "130772",
+            label: "张家口市察北管理区"
+        }, {
+            value: "130773",
+            label: "张家口市塞北管理区"
+        }]
+	}, {
+		value: "130800",
+		label: "承德市",
+		children: [{
+			value: "130802",
+			label: "双桥区"
+		}, {
+			value: "130803",
+			label: "双滦区"
+		}, {
+			value: "130804",
+			label: "鹰手营子矿区"
+		}, {
+			value: "130821",
+			label: "承德县"
+		}, {
+			value: "130822",
+			label: "兴隆县"
+		}, {
+			value: "130881",
+			label: "平泉市"
+		}, {
+			value: "130824",
+			label: "滦平县"
+		}, {
+			value: "130825",
+			label: "隆化县"
+		}, {
+			value: "130826",
+			label: "丰宁满族自治县"
+		}, {
+			value: "130827",
+			label: "宽城满族自治县"
+		}, {
+			value: "130828",
+			label: "围场满族蒙古族自治县"
+		}, {
+			value: "130871",
+			label: "承德高新技术产业开发区"
+		}]
+	}, {
+		value: "130900",
+		label: "沧州市",
+		children: [{
+			value: "130902",
+			label: "新华区"
+		}, {
+			value: "130903",
+			label: "运河区"
+		}, {
+			value: "130921",
+			label: "沧县"
+		}, {
+			value: "130922",
+			label: "青县"
+		}, {
+			value: "130923",
+			label: "东光县"
+		}, {
+			value: "130924",
+			label: "海兴县"
+		}, {
+			value: "130925",
+			label: "盐山县"
+		}, {
+			value: "130926",
+			label: "肃宁县"
+		}, {
+			value: "130927",
+			label: "南皮县"
+		}, {
+			value: "130928",
+			label: "吴桥县"
+		}, {
+			value: "130929",
+			label: "献县"
+		}, {
+			value: "130930",
+			label: "孟村回族自治县"
+		}, {
+			value: "130981",
+			label: "泊头市"
+		}, {
+			value: "130982",
+			label: "任丘市"
+		}, {
+			value: "130983",
+			label: "黄骅市"
+		}, {
+			value: "130984",
+			label: "河间市"
+		}, {
+			value: "130971",
+			label: "河北沧州经济开发区"
+		}, {
+            value: "130972",
+            label: "沧州高新技术产业开发区"
+        }, {
+            value: "130973",
+            label: "沧州渤海新区"
+        }]
+	}, {
+		value: "131000",
+		label: "廊坊市",
+		children: [{
+			value: "131002",
+			label: "安次区"
+		}, {
+			value: "131003",
+			label: "广阳区"
+		}, {
+			value: "131022",
+			label: "固安县"
+		}, {
+			value: "131023",
+			label: "永清县"
+		}, {
+			value: "131024",
+			label: "香河县"
+		}, {
+			value: "131025",
+			label: "大城县"
+		}, {
+			value: "131026",
+			label: "文安县"
+		}, {
+			value: "131028",
+			label: "大厂回族自治县"
+		}, {
+			value: "131071",
+			label: "廊坊经济技术开发区"
+		}, {
+			value: "131081",
+			label: "霸州市"
+		}, {
+			value: "131082",
+			label: "三河市"
+		}]
+	}, {
+		value: "131100",
+		label: "衡水市",
+		children: [{
+			value: "131102",
+			label: "桃城区"
+		}, {
+			value: "131121",
+			label: "枣强县"
+		}, {
+			value: "131122",
+			label: "武邑县"
+		}, {
+			value: "131123",
+			label: "武强县"
+		}, {
+			value: "131124",
+			label: "饶阳县"
+		}, {
+			value: "131125",
+			label: "安平县"
+		}, {
+			value: "131126",
+			label: "故城县"
+		}, {
+			value: "131127",
+			label: "景县"
+		}, {
+			value: "131128",
+			label: "阜城县"
+		}, {
+			value: "131103",
+			label: "冀州区"
+		}, {
+			value: "131182",
+			label: "深州市"
+		}, {
+			value: "131172",
+			label: "衡水滨湖新区"
+		}, {
+            value: "131171",
+            label: "河北衡水经济开发区"
+        }]
+	}]
+}, {
+	value: '140000',
+	label: '山西省',
+	children: [{
+		value: "140100",
+		label: "太原市",
+		children: [{
+			value: "140105",
+			label: "小店区"
+		}, {
+			value: "140106",
+			label: "迎泽区"
+		}, {
+			value: "140107",
+			label: "杏花岭区"
+		}, {
+			value: "140108",
+			label: "尖草坪区"
+		}, {
+			value: "140109",
+			label: "万柏林区"
+		}, {
+			value: "140110",
+			label: "晋源区"
+		}, {
+			value: "140121",
+			label: "清徐县"
+		}, {
+			value: "140122",
+			label: "阳曲县"
+		}, {
+			value: "140123",
+			label: "娄烦县"
+		}, {
+			value: "140181",
+			label: "古交市"
+		}, {
+			value: "140171",
+			label: "山西转型综合改革示范区"
+		}]
+	}, {
+		value: "140200",
+		label: "大同市",
+		children: [{
+			value: "140202",
+			label: "城区"
+		}, {
+			value: "140203",
+			label: "矿区"
+		}, {
+			value: "140211",
+			label: "南郊区"
+		}, {
+			value: "140212",
+			label: "新荣区"
+		}, {
+			value: "140221",
+			label: "阳高县"
+		}, {
+			value: "140222",
+			label: "天镇县"
+		}, {
+			value: "140223",
+			label: "广灵县"
+		}, {
+			value: "140224",
+			label: "灵丘县"
+		}, {
+			value: "140225",
+			label: "浑源县"
+		}, {
+			value: "140226",
+			label: "左云县"
+		}, {
+			value: "140227",
+			label: "大同县"
+		}, {
+			value: "140271",
+			label: "山西大同经济开发区"
+		}]
+	}, {
+		value: "140300",
+		label: "阳泉市",
+		children: [{
+			value: "140302",
+			label: "城区"
+		}, {
+			value: "140303",
+			label: "矿区"
+		}, {
+			value: "140311",
+			label: "郊区"
+		}, {
+			value: "140321",
+			label: "平定县"
+		}, {
+			value: "140322",
+			label: "盂县"
+		}, {
+			value: "140371",
+			label: "山西阳泉经济开发区"
+		}]
+	}, {
+		value: "140400",
+		label: "长治市",
+		children: [{
+			value: "140421",
+			label: "长治县"
+		}, {
+			value: "140423",
+			label: "襄垣县"
+		}, {
+			value: "140424",
+			label: "屯留县"
+		}, {
+			value: "140425",
+			label: "平顺县"
+		}, {
+			value: "140426",
+			label: "黎城县"
+		}, {
+			value: "140427",
+			label: "壶关县"
+		}, {
+			value: "140428",
+			label: "长子县"
+		}, {
+			value: "140429",
+			label: "武乡县"
+		}, {
+			value: "140430",
+			label: "沁县"
+		}, {
+			value: "140431",
+			label: "沁源县"
+		}, {
+			value: "140481",
+			label: "潞城市"
+		}, {
+			value: "140402",
+			label: "城区"
+		}, {
+			value: "140411",
+			label: "郊区"
+		}, {
+			value: "140471",
+			label: "山西长治高新技术产业园区"
+		}]
+	}, {
+		value: "140500",
+		label: "晋城市",
+		children: [{
+			value: "140502",
+			label: "城区"
+		}, {
+			value: "140521",
+			label: "沁水县"
+		}, {
+			value: "140522",
+			label: "阳城县"
+		}, {
+			value: "140524",
+			label: "陵川县"
+		}, {
+			value: "140525",
+			label: "泽州县"
+		}, {
+			value: "140581",
+			label: "高平市"
+		}]
+	}, {
+		value: "140600",
+		label: "朔州市",
+		children: [{
+			value: "140602",
+			label: "朔城区"
+		}, {
+			value: "140603",
+			label: "平鲁区"
+		}, {
+			value: "140621",
+			label: "山阴县"
+		}, {
+			value: "140622",
+			label: "应县"
+		}, {
+			value: "140623",
+			label: "右玉县"
+		}, {
+			value: "140624",
+			label: "怀仁县"
+		}, {
+			value: "140671",
+			label: "山西朔州经济开发区"
+		}]
+	}, {
+		value: "140700",
+		label: "晋中市",
+		children: [{
+			value: "140702",
+			label: "榆次区"
+		}, {
+			value: "140721",
+			label: "榆社县"
+		}, {
+			value: "140722",
+			label: "左权县"
+		}, {
+			value: "140723",
+			label: "和顺县"
+		}, {
+			value: "140724",
+			label: "昔阳县"
+		}, {
+			value: "140725",
+			label: "寿阳县"
+		}, {
+			value: "140726",
+			label: "太谷县"
+		}, {
+			value: "140727",
+			label: "祁县"
+		}, {
+			value: "140728",
+			label: "平遥县"
+		}, {
+			value: "140729",
+			label: "灵石县"
+		}, {
+			value: "140781",
+			label: "介休市"
+		}]
+	}, {
+		value: "140800",
+		label: "运城市",
+		children: [{
+			value: "140802",
+			label: "盐湖区"
+		}, {
+			value: "140821",
+			label: "临猗县"
+		}, {
+			value: "140822",
+			label: "万荣县"
+		}, {
+			value: "140823",
+			label: "闻喜县"
+		}, {
+			value: "140824",
+			label: "稷山县"
+		}, {
+			value: "140825",
+			label: "新绛县"
+		}, {
+			value: "140826",
+			label: "绛县"
+		}, {
+			value: "140827",
+			label: "垣曲县"
+		}, {
+			value: "140828",
+			label: "夏县"
+		}, {
+			value: "140829",
+			label: "平陆县"
+		}, {
+			value: "140830",
+			label: "芮城县"
+		}, {
+			value: "140881",
+			label: "永济市"
+		}, {
+			value: "140882",
+			label: "河津市"
+		}]
+	}, {
+		value: "140900",
+		label: "忻州市",
+		children: [{
+			value: "140902",
+			label: "忻府区"
+		}, {
+			value: "140921",
+			label: "定襄县"
+		}, {
+			value: "140922",
+			label: "五台县"
+		}, {
+			value: "140923",
+			label: "代县"
+		}, {
+			value: "140924",
+			label: "繁峙县"
+		}, {
+			value: "140925",
+			label: "宁武县"
+		}, {
+			value: "140926",
+			label: "静乐县"
+		}, {
+			value: "140927",
+			label: "神池县"
+		}, {
+			value: "140928",
+			label: "五寨县"
+		}, {
+			value: "140929",
+			label: "岢岚县"
+		}, {
+			value: "140930",
+			label: "河曲县"
+		}, {
+			value: "140931",
+			label: "保德县"
+		}, {
+			value: "140932",
+			label: "偏关县"
+		}, {
+			value: "140981",
+			label: "原平市"
+		}, {
+			value: "140971",
+			label: "五台山风景名胜区"
+		}]
+	}, {
+		value: "141000",
+		label: "临汾市",
+		children: [{
+			value: "141002",
+			label: "尧都区"
+		}, {
+			value: "141021",
+			label: "曲沃县"
+		}, {
+			value: "141022",
+			label: "翼城县"
+		}, {
+			value: "141023",
+			label: "襄汾县"
+		}, {
+			value: "141024",
+			label: "洪洞县"
+		}, {
+			value: "141025",
+			label: "古县"
+		}, {
+			value: "141026",
+			label: "安泽县"
+		}, {
+			value: "141027",
+			label: "浮山县"
+		}, {
+			value: "141028",
+			label: "吉县"
+		}, {
+			value: "141029",
+			label: "乡宁县"
+		}, {
+			value: "141030",
+			label: "大宁县"
+		}, {
+			value: "141031",
+			label: "隰县"
+		}, {
+			value: "141032",
+			label: "永和县"
+		}, {
+			value: "141033",
+			label: "蒲县"
+		}, {
+			value: "141034",
+			label: "汾西县"
+		}, {
+			value: "141081",
+			label: "侯马市"
+		}, {
+			value: "141082",
+			label: "霍州市"
+		}]
+	}, {
+		value: "141100",
+		label: "吕梁市",
+		children: [{
+			value: "141102",
+			label: "离石区"
+		}, {
+			value: "141121",
+			label: "文水县"
+		}, {
+			value: "141122",
+			label: "交城县"
+		}, {
+			value: "141123",
+			label: "兴县"
+		}, {
+			value: "141124",
+			label: "临县"
+		}, {
+			value: "141125",
+			label: "柳林县"
+		}, {
+			value: "141126",
+			label: "石楼县"
+		}, {
+			value: "141127",
+			label: "岚县"
+		}, {
+			value: "141128",
+			label: "方山县"
+		}, {
+			value: "141129",
+			label: "中阳县"
+		}, {
+			value: "141130",
+			label: "交口县"
+		}, {
+			value: "141181",
+			label: "孝义市"
+		}, {
+			value: "141182",
+			label: "汾阳市"
+		}]
+	}]
+}, {
+	value: '150000',
+	label: '内蒙古',
+	children: [{
+		value: "150100",
+		label: "呼和浩特市",
+		children: [{
+			value: "150102",
+			label: "新城区"
+		}, {
+			value: "150103",
+			label: "回民区"
+		}, {
+			value: "150104",
+			label: "玉泉区"
+		}, {
+			value: "150105",
+			label: "赛罕区"
+		}, {
+			value: "150121",
+			label: "土默特左旗"
+		}, {
+			value: "150122",
+			label: "托克托县"
+		}, {
+			value: "150123",
+			label: "和林格尔县"
+		}, {
+			value: "150124",
+			label: "清水河县"
+		}, {
+			value: "150125",
+			label: "武川县"
+		}, {
+			value: "150171",
+			label: "呼和浩特金海工业园区"
+		}, {
+            value: "150172",
+            label: "呼和浩特经济技术开发区"
+        }]
+	}, {
+		value: "150200",
+		label: "包头市",
+		children: [{
+			value: "150202",
+			label: "东河区"
+		}, {
+			value: "150203",
+			label: "昆都仑区"
+		}, {
+			value: "150204",
+			label: "青山区"
+		}, {
+			value: "150205",
+			label: "石拐区"
+		}, {
+			value: "150206",
+			label: "白云矿区"
+		}, {
+			value: "150207",
+			label: "九原区"
+		}, {
+			value: "150221",
+			label: "土默特右旗"
+		}, {
+			value: "150222",
+			label: "固阳县"
+		}, {
+			value: "150223",
+			label: "达尔罕茂明安联合旗"
+		}, {
+			value: "150271",
+			label: "包头稀土高新技术产业开发区"
+		}]
+	}, {
+		value: "150300",
+		label: "乌海市",
+		children: [{
+			value: "150302",
+			label: "海勃湾区"
+		}, {
+			value: "150303",
+			label: "海南区"
+		}, {
+			value: "150304",
+			label: "乌达区"
+		}]
+	}, {
+		value: "150400",
+		label: "赤峰市",
+		children: [{
+			value: "150402",
+			label: "红山区"
+		}, {
+			value: "150403",
+			label: "元宝山区"
+		}, {
+			value: "150404",
+			label: "松山区"
+		}, {
+			value: "150421",
+			label: "阿鲁科尔沁旗"
+		}, {
+			value: "150422",
+			label: "巴林左旗"
+		}, {
+			value: "150423",
+			label: "巴林右旗"
+		}, {
+			value: "150424",
+			label: "林西县"
+		}, {
+			value: "150425",
+			label: "克什克腾旗"
+		}, {
+			value: "150426",
+			label: "翁牛特旗"
+		}, {
+			value: "150428",
+			label: "喀喇沁旗"
+		}, {
+			value: "150429",
+			label: "宁城县"
+		}, {
+			value: "150430",
+			label: "敖汉旗"
+		}]
+	}, {
+		value: "150500",
+		label: "通辽市",
+		children: [{
+			value: "150502",
+			label: "科尔沁区"
+		}, {
+			value: "150521",
+			label: "科尔沁左翼中旗"
+		}, {
+			value: "150522",
+			label: "科尔沁左翼后旗"
+		}, {
+			value: "150523",
+			label: "开鲁县"
+		}, {
+			value: "150524",
+			label: "库伦旗"
+		}, {
+			value: "150525",
+			label: "奈曼旗"
+		}, {
+			value: "150526",
+			label: "扎鲁特旗"
+		}, {
+			value: "150581",
+			label: "霍林郭勒市"
+		}, {
+			value: "150571",
+			label: "通辽经济技术开发区"
+		}]
+	}, {
+		value: "150600",
+		label: "鄂尔多斯市",
+		children: [{
+			value: "150602",
+			label: "东胜区"
+		}, {
+			value: "150621",
+			label: "达拉特旗"
+		}, {
+			value: "150622",
+			label: "准格尔旗"
+		}, {
+			value: "150623",
+			label: "鄂托克前旗"
+		}, {
+			value: "150624",
+			label: "鄂托克旗"
+		}, {
+			value: "150625",
+			label: "杭锦旗"
+		}, {
+			value: "150626",
+			label: "乌审旗"
+		}, {
+			value: "150627",
+			label: "伊金霍洛旗"
+		}, {
+			value: "150603",
+			label: "康巴什区"
+		}]
+	}, {
+		value: "150700",
+		label: "呼伦贝尔市",
+		children: [{
+			value: "150702",
+			label: "海拉尔区"
+		}, {
+			value: "150721",
+			label: "阿荣旗"
+		}, {
+			value: "150722",
+			label: "莫力达瓦达斡尔族自治旗"
+		}, {
+			value: "150723",
+			label: "鄂伦春自治旗"
+		}, {
+			value: "150724",
+			label: "鄂温克族自治旗"
+		}, {
+			value: "150725",
+			label: "陈巴尔虎旗"
+		}, {
+			value: "150726",
+			label: "新巴尔虎左旗"
+		}, {
+			value: "150727",
+			label: "新巴尔虎右旗"
+		}, {
+			value: "150781",
+			label: "满洲里市"
+		}, {
+			value: "150782",
+			label: "牙克石市"
+		}, {
+			value: "150783",
+			label: "扎兰屯市"
+		}, {
+			value: "150784",
+			label: "额尔古纳市"
+		}, {
+			value: "150785",
+			label: "根河市"
+		}, {
+			value: "150703",
+			label: "扎赉诺尔区"
+		}]
+	}, {
+		value: "150800",
+		label: "巴彦淖尔市",
+		children: [{
+			value: "150802",
+			label: "临河区"
+		}, {
+			value: "150821",
+			label: "五原县"
+		}, {
+			value: "150822",
+			label: "磴口县"
+		}, {
+			value: "150823",
+			label: "乌拉特前旗"
+		}, {
+			value: "150824",
+			label: "乌拉特中旗"
+		}, {
+			value: "150825",
+			label: "乌拉特后旗"
+		}, {
+			value: "150826",
+			label: "杭锦后旗"
+		}]
+	}, {
+		value: "150900",
+		label: "乌兰察布市",
+		children: [{
+			value: "150902",
+			label: "集宁区"
+		}, {
+			value: "150921",
+			label: "卓资县"
+		}, {
+			value: "150922",
+			label: "化德县"
+		}, {
+			value: "150923",
+			label: "商都县"
+		}, {
+			value: "150924",
+			label: "兴和县"
+		}, {
+			value: "150925",
+			label: "凉城县"
+		}, {
+			value: "150926",
+			label: "察哈尔右翼前旗"
+		}, {
+			value: "150927",
+			label: "察哈尔右翼中旗"
+		}, {
+			value: "150928",
+			label: "察哈尔右翼后旗"
+		}, {
+			value: "150929",
+			label: "四子王旗"
+		}, {
+			value: "150981",
+			label: "丰镇市"
+		}]
+	}, {
+		value: "152200",
+		label: "兴安盟",
+		children: [{
+			value: "152201",
+			label: "乌兰浩特市"
+		}, {
+			value: "152202",
+			label: "阿尔山市"
+		}, {
+			value: "152221",
+			label: "科尔沁右翼前旗"
+		}, {
+			value: "152222",
+			label: "科尔沁右翼中旗"
+		}, {
+			value: "152223",
+			label: "扎赉特旗"
+		}, {
+			value: "152224",
+			label: "突泉县"
+		}]
+	}, {
+		value: "152500",
+		label: "锡林郭勒盟",
+		children: [{
+			value: "152501",
+			label: "二连浩特市"
+		}, {
+			value: "152502",
+			label: "锡林浩特市"
+		}, {
+			value: "152522",
+			label: "阿巴嘎旗"
+		}, {
+			value: "152523",
+			label: "苏尼特左旗"
+		}, {
+			value: "152524",
+			label: "苏尼特右旗"
+		}, {
+			value: "152525",
+			label: "东乌珠穆沁旗"
+		}, {
+			value: "152526",
+			label: "西乌珠穆沁旗"
+		}, {
+			value: "152527",
+			label: "太仆寺旗"
+		}, {
+			value: "152528",
+			label: "镶黄旗"
+		}, {
+			value: "152529",
+			label: "正镶白旗"
+		}, {
+			value: "152530",
+			label: "正蓝旗"
+		}, {
+			value: "152531",
+			label: "多伦县"
+		}, {
+			value: "152571",
+			label: "乌拉盖管委会"
+		}]
+	}, {
+		value: "152900",
+		label: "阿拉善盟",
+		children: [{
+			value: "152921",
+			label: "阿拉善左旗"
+		}, {
+			value: "152922",
+			label: "阿拉善右旗"
+		}, {
+			value: "152923",
+			label: "额济纳旗"
+		}, {
+			value: "152971",
+			label: "内蒙古阿拉善经济开发区"
+		}]
+	}]
+}, {
+	value: '210000',
+	label: '辽宁省',
+	children: [{
+		value: "210100",
+		label: "沈阳市",
+		children: [{
+			value: "210102",
+			label: "和平区"
+		}, {
+			value: "210103",
+			label: "沈河区"
+		}, {
+			value: "210104",
+			label: "大东区"
+		}, {
+			value: "210105",
+			label: "皇姑区"
+		}, {
+			value: "210106",
+			label: "铁西区"
+		}, {
+			value: "210111",
+			label: "苏家屯区"
+		}, {
+			value: "210112",
+			label: "东陵区"
+		}, {
+			value: "210113",
+			label: "新城子区"
+		}, {
+			value: "210114",
+			label: "于洪区"
+		}, {
+			value: "210115",
+			label: "辽中区"
+		}, {
+			value: "210123",
+			label: "康平县"
+		}, {
+			value: "210124",
+			label: "法库县"
+		}, {
+			value: "210181",
+			label: "新民市"
+		}, {
+			value: "210112",
+			label: "浑南区"
+		}, {
+			value: "210113",
+			label: "沈北新区"
+		}]
+	}, {
+		value: "210200",
+		label: "大连市",
+		children: [{
+			value: "210202",
+			label: "中山区"
+		}, {
+			value: "210203",
+			label: "西岗区"
+		}, {
+			value: "210204",
+			label: "沙河口区"
+		}, {
+			value: "210211",
+			label: "甘井子区"
+		}, {
+			value: "210212",
+			label: "旅顺口区"
+		}, {
+			value: "210213",
+			label: "金州区"
+		}, {
+			value: "210224",
+			label: "长海县"
+		}, {
+			value: "210251",
+			label: "开发区"
+		}, {
+			value: "210281",
+			label: "瓦房店市"
+		}, {
+			value: "210214",
+			label: "普兰店区"
+		}, {
+			value: "210283",
+			label: "庄河市"
+		}]
+	}, {
+		value: "210300",
+		label: "鞍山市",
+		children: [{
+			value: "210302",
+			label: "铁东区"
+		}, {
+			value: "210303",
+			label: "铁西区"
+		}, {
+			value: "210304",
+			label: "立山区"
+		}, {
+			value: "210311",
+			label: "千山区"
+		}, {
+			value: "210321",
+			label: "台安县"
+		}, {
+			value: "210323",
+			label: "岫岩满族自治县"
+		}, {
+			value: "210381",
+			label: "海城市"
+		}]
+	}, {
+		value: "210400",
+		label: "抚顺市",
+		children: [{
+			value: "210402",
+			label: "新抚区"
+		}, {
+			value: "210403",
+			label: "东洲区"
+		}, {
+			value: "210404",
+			label: "望花区"
+		}, {
+			value: "210411",
+			label: "顺城区"
+		}, {
+			value: "210421",
+			label: "抚顺县"
+		}, {
+			value: "210422",
+			label: "新宾满族自治县"
+		}, {
+			value: "210423",
+			label: "清原满族自治县"
+		}]
+	}, {
+		value: "210500",
+		label: "本溪市",
+		children: [{
+			value: "210502",
+			label: "平山区"
+		}, {
+			value: "210503",
+			label: "溪湖区"
+		}, {
+			value: "210504",
+			label: "明山区"
+		}, {
+			value: "210505",
+			label: "南芬区"
+		}, {
+			value: "210521",
+			label: "本溪满族自治县"
+		}, {
+			value: "210522",
+			label: "桓仁满族自治县"
+		}]
+	}, {
+		value: "210600",
+		label: "丹东市",
+		children: [{
+			value: "210602",
+			label: "元宝区"
+		}, {
+			value: "210603",
+			label: "振兴区"
+		}, {
+			value: "210604",
+			label: "振安区"
+		}, {
+			value: "210624",
+			label: "宽甸满族自治县"
+		}, {
+			value: "210681",
+			label: "东港市"
+		}, {
+			value: "210682",
+			label: "凤城市"
+		}]
+	}, {
+		value: "210700",
+		label: "锦州市",
+		children: [{
+			value: "210702",
+			label: "古塔区"
+		}, {
+			value: "210703",
+			label: "凌河区"
+		}, {
+			value: "210711",
+			label: "太和区"
+		}, {
+			value: "210726",
+			label: "黑山县"
+		}, {
+			value: "210727",
+			label: "义县"
+		}, {
+			value: "210781",
+			label: "凌海市"
+		}, {
+			value: "210782",
+			label: "北镇市"
+		}]
+	}, {
+		value: "210800",
+		label: "营口市",
+		children: [{
+			value: "210802",
+			label: "站前区"
+		}, {
+			value: "210803",
+			label: "西市区"
+		}, {
+			value: "210804",
+			label: "鲅鱼圈区"
+		}, {
+			value: "210811",
+			label: "老边区"
+		}, {
+			value: "210881",
+			label: "盖州市"
+		}, {
+			value: "210882",
+			label: "大石桥市"
+		}]
+	}, {
+		value: "210900",
+		label: "阜新市",
+		children: [{
+			value: "210902",
+			label: "海州区"
+		}, {
+			value: "210903",
+			label: "新邱区"
+		}, {
+			value: "210904",
+			label: "太平区"
+		}, {
+			value: "210905",
+			label: "清河门区"
+		}, {
+			value: "210911",
+			label: "细河区"
+		}, {
+			value: "210921",
+			label: "阜新蒙古族自治县"
+		}, {
+			value: "210922",
+			label: "彰武县"
+		}]
+	}, {
+		value: "211000",
+		label: "辽阳市",
+		children: [{
+			value: "211002",
+			label: "白塔区"
+		}, {
+			value: "211003",
+			label: "文圣区"
+		}, {
+			value: "211004",
+			label: "宏伟区"
+		}, {
+			value: "211005",
+			label: "弓长岭区"
+		}, {
+			value: "211011",
+			label: "太子河区"
+		}, {
+			value: "211021",
+			label: "辽阳县"
+		}, {
+			value: "211081",
+			label: "灯塔市"
+		}]
+	}, {
+		value: "211100",
+		label: "盘锦市",
+		children: [{
+			value: "211102",
+			label: "双台子区"
+		}, {
+			value: "211103",
+			label: "兴隆台区"
+		}, {
+			value: "211121",
+			label: "大洼县"
+		}, {
+			value: "211122",
+			label: "盘山县"
+		}]
+	}, {
+		value: "211200",
+		label: "铁岭市",
+		children: [{
+			value: "211202",
+			label: "银州区"
+		}, {
+			value: "211204",
+			label: "清河区"
+		}, {
+			value: "211221",
+			label: "铁岭县"
+		}, {
+			value: "211223",
+			label: "西丰县"
+		}, {
+			value: "211224",
+			label: "昌图县"
+		}, {
+			value: "211281",
+			label: "调兵山市"
+		}, {
+			value: "211282",
+			label: "开原市"
+		}]
+	}, {
+		value: "211300",
+		label: "朝阳市",
+		children: [{
+			value: "211302",
+			label: "双塔区"
+		}, {
+			value: "211303",
+			label: "龙城区"
+		}, {
+			value: "211321",
+			label: "朝阳县"
+		}, {
+			value: "211322",
+			label: "建平县"
+		}, {
+			value: "211324",
+			label: "喀喇沁左翼蒙古族自治县"
+		}, {
+			value: "211381",
+			label: "北票市"
+		}, {
+			value: "211382",
+			label: "凌源市"
+		}]
+	}, {
+		value: "211400",
+		label: "葫芦岛市",
+		children: [{
+			value: "211402",
+			label: "连山区"
+		}, {
+			value: "211403",
+			label: "龙港区"
+		}, {
+			value: "211404",
+			label: "南票区"
+		}, {
+			value: "211421",
+			label: "绥中县"
+		}, {
+			value: "211422",
+			label: "建昌县"
+		}, {
+			value: "211481",
+			label: "兴城市"
+		}]
+	}]
+}, {
+	value: '220000',
+	label: '吉林省',
+	children: [{
+		value: "220100",
+		label: "长春市",
+		children: [{
+			value: "220102",
+			label: "南关区"
+		}, {
+			value: "220103",
+			label: "宽城区"
+		}, {
+			value: "220104",
+			label: "朝阳区"
+		}, {
+			value: "220105",
+			label: "二道区"
+		}, {
+			value: "220106",
+			label: "绿园区"
+		}, {
+			value: "220112",
+			label: "双阳区"
+		}, {
+			value: "220122",
+			label: "农安县"
+		}, {
+			value: "220181",
+			label: "九台市"
+		}, {
+			value: "220182",
+			label: "榆树市"
+		}, {
+			value: "220183",
+			label: "德惠市"
+		}, {
+			value: "220171",
+			label: "长春经济技术开发区"
+		}, {
+			value: "220172",
+			label: "长春净月高新技术产业开发区"
+		}, {
+			value: "220173",
+			label: "长春高新技术产业开发区"
+		}, {
+			value: "220174",
+			label: "长春汽车经济技术开发区"
+		}]
+	}, {
+		value: "220200",
+		label: "吉林市",
+		children: [{
+			value: "220202",
+			label: "昌邑区"
+		}, {
+			value: "220203",
+			label: "龙潭区"
+		}, {
+			value: "220204",
+			label: "船营区"
+		}, {
+			value: "220211",
+			label: "丰满区"
+		}, {
+			value: "220221",
+			label: "永吉县"
+		}, {
+			value: "220281",
+			label: "蛟河市"
+		}, {
+			value: "220282",
+			label: "桦甸市"
+		}, {
+			value: "220283",
+			label: "舒兰市"
+		}, {
+			value: "220284",
+			label: "磐石市"
+		}, {
+			value: "220271",
+			label: "吉林经济开发区"
+		}, {
+            value: "220272",
+            label: "吉林高新技术产业开发区"
+        }, {
+            value: "220273",
+            label: "吉林中国新加坡食品区"
+        }]
+	}, {
+		value: "220300",
+		label: "四平市",
+		children: [{
+			value: "220302",
+			label: "铁西区"
+		}, {
+			value: "220303",
+			label: "铁东区"
+		}, {
+			value: "220322",
+			label: "梨树县"
+		}, {
+			value: "220323",
+			label: "伊通满族自治县"
+		}, {
+			value: "220381",
+			label: "公主岭市"
+		}, {
+			value: "220382",
+			label: "双辽市"
+		}]
+	}, {
+		value: "220400",
+		label: "辽源市",
+		children: [{
+			value: "220402",
+			label: "龙山区"
+		}, {
+			value: "220403",
+			label: "西安区"
+		}, {
+			value: "220421",
+			label: "东丰县"
+		}, {
+			value: "220422",
+			label: "东辽县"
+		}]
+	}, {
+		value: "220500",
+		label: "通化市",
+		children: [{
+			value: "220502",
+			label: "东昌区"
+		}, {
+			value: "220503",
+			label: "二道江区"
+		}, {
+			value: "220521",
+			label: "通化县"
+		}, {
+			value: "220523",
+			label: "辉南县"
+		}, {
+			value: "220524",
+			label: "柳河县"
+		}, {
+			value: "220581",
+			label: "梅河口市"
+		}, {
+			value: "220582",
+			label: "集安市"
+		}]
+	}, {
+		value: "220600",
+		label: "白山市",
+		children: [{
+			value: "220602",
+			label: "八道江区"
+		}, {
+			value: "220621",
+			label: "抚松县"
+		}, {
+			value: "220622",
+			label: "靖宇县"
+		}, {
+			value: "220623",
+			label: "长白朝鲜族自治县"
+		}, {
+			value: "220605",
+			label: "江源区"
+		}, {
+			value: "220681",
+			label: "临江市"
+		}, {
+			value: "220602",
+			label: "浑江区"
+		}]
+	}, {
+		value: "220700",
+		label: "松原市",
+		children: [{
+			value: "220702",
+			label: "宁江区"
+		}, {
+			value: "220721",
+			label: "前郭尔罗斯蒙古族自治县"
+		}, {
+			value: "220722",
+			label: "长岭县"
+		}, {
+			value: "220723",
+			label: "乾安县"
+		}, {
+			value: "220781",
+			label: "扶余市"
+		}, {
+			value: "220771",
+			label: "吉林松原经济开发区"
+		}]
+	}, {
+		value: "220800",
+		label: "白城市",
+		children: [{
+			value: "220802",
+			label: "洮北区"
+		}, {
+			value: "220821",
+			label: "镇赉县"
+		}, {
+			value: "220822",
+			label: "通榆县"
+		}, {
+			value: "220881",
+			label: "洮南市"
+		}, {
+			value: "220882",
+			label: "大安市"
+		}, {
+			value: "220871",
+			label: "吉林白城经济开发区"
+		}]
+	}, {
+		value: "222400",
+		label: "延边朝鲜族自治州",
+		children: [{
+			value: "222401",
+			label: "延吉市"
+		}, {
+			value: "222402",
+			label: "图们市"
+		}, {
+			value: "222403",
+			label: "敦化市"
+		}, {
+			value: "222404",
+			label: "珲春市"
+		}, {
+			value: "222405",
+			label: "龙井市"
+		}, {
+			value: "222406",
+			label: "和龙市"
+		}, {
+			value: "222424",
+			label: "汪清县"
+		}, {
+			value: "222426",
+			label: "安图县"
+		}]
+	}]
+}, {
+	value: '230000',
+	label: '黑龙江省',
+	children: [{
+		value: "230100",
+		label: "哈尔滨市",
+		children: [{
+			value: "230102",
+			label: "道里区"
+		}, {
+			value: "230103",
+			label: "南岗区"
+		}, {
+			value: "230104",
+			label: "道外区"
+		}, {
+			value: "230110",
+			label: "香坊区"
+		}, {
+			value: "230107",
+			label: "动力区"
+		}, {
+			value: "230108",
+			label: "平房区"
+		}, {
+			value: "230109",
+			label: "松北区"
+		}, {
+			value: "230111",
+			label: "呼兰区"
+		}, {
+			value: "230123",
+			label: "依兰县"
+		}, {
+			value: "230124",
+			label: "方正县"
+		}, {
+			value: "230125",
+			label: "宾县"
+		}, {
+			value: "230126",
+			label: "巴彦县"
+		}, {
+			value: "230127",
+			label: "木兰县"
+		}, {
+			value: "230128",
+			label: "通河县"
+		}, {
+			value: "230129",
+			label: "延寿县"
+		}, {
+			value: "230112",
+			label: "阿城区"
+		}, {
+			value: "230113",
+			label: "双城区"
+		}, {
+			value: "230183",
+			label: "尚志市"
+		}, {
+			value: "230184",
+			label: "五常市"
+		}]
+	}, {
+		value: "230200",
+		label: "齐齐哈尔市",
+		children: [{
+			value: "230202",
+			label: "龙沙区"
+		}, {
+			value: "230203",
+			label: "建华区"
+		}, {
+			value: "230204",
+			label: "铁锋区"
+		}, {
+			value: "230205",
+			label: "昂昂溪区"
+		}, {
+			value: "230206",
+			label: "富拉尔基区"
+		}, {
+			value: "230207",
+			label: "碾子山区"
+		}, {
+			value: "230208",
+			label: "梅里斯达斡尔族区"
+		}, {
+			value: "230221",
+			label: "龙江县"
+		}, {
+			value: "230223",
+			label: "依安县"
+		}, {
+			value: "230224",
+			label: "泰来县"
+		}, {
+			value: "230225",
+			label: "甘南县"
+		}, {
+			value: "230227",
+			label: "富裕县"
+		}, {
+			value: "230229",
+			label: "克山县"
+		}, {
+			value: "230230",
+			label: "克东县"
+		}, {
+			value: "230231",
+			label: "拜泉县"
+		}, {
+			value: "230281",
+			label: "讷河市"
+		}]
+	}, {
+		value: "230300",
+		label: "鸡西市",
+		children: [{
+			value: "230302",
+			label: "鸡冠区"
+		}, {
+			value: "230303",
+			label: "恒山区"
+		}, {
+			value: "230304",
+			label: "滴道区"
+		}, {
+			value: "230305",
+			label: "梨树区"
+		}, {
+			value: "230306",
+			label: "城子河区"
+		}, {
+			value: "230307",
+			label: "麻山区"
+		}, {
+			value: "230321",
+			label: "鸡东县"
+		}, {
+			value: "230381",
+			label: "虎林市"
+		}, {
+			value: "230382",
+			label: "密山市"
+		}]
+	}, {
+		value: "230400",
+		label: "鹤岗市",
+		children: [{
+			value: "230402",
+			label: "向阳区"
+		}, {
+			value: "230403",
+			label: "工农区"
+		}, {
+			value: "230404",
+			label: "南山区"
+		}, {
+			value: "230405",
+			label: "兴安区"
+		}, {
+			value: "230406",
+			label: "东山区"
+		}, {
+			value: "230407",
+			label: "兴山区"
+		}, {
+			value: "230421",
+			label: "萝北县"
+		}, {
+			value: "230422",
+			label: "绥滨县"
+		}]
+	}, {
+		value: "230500",
+		label: "双鸭山市",
+		children: [{
+			value: "230502",
+			label: "尖山区"
+		}, {
+			value: "230503",
+			label: "岭东区"
+		}, {
+			value: "230505",
+			label: "四方台区"
+		}, {
+			value: "230506",
+			label: "宝山区"
+		}, {
+			value: "230521",
+			label: "集贤县"
+		}, {
+			value: "230522",
+			label: "友谊县"
+		}, {
+			value: "230523",
+			label: "宝清县"
+		}, {
+			value: "230524",
+			label: "饶河县"
+		}]
+	}, {
+		value: "230600",
+		label: "大庆市",
+		children: [{
+			value: "230602",
+			label: "萨尔图区"
+		}, {
+			value: "230603",
+			label: "龙凤区"
+		}, {
+			value: "230604",
+			label: "让胡路区"
+		}, {
+			value: "230605",
+			label: "红岗区"
+		}, {
+			value: "230606",
+			label: "大同区"
+		}, {
+			value: "230621",
+			label: "肇州县"
+		}, {
+			value: "230622",
+			label: "肇源县"
+		}, {
+			value: "230623",
+			label: "林甸县"
+		}, {
+			value: "230624",
+			label: "杜尔伯特蒙古族自治县"
+		}, {
+			value: "230671",
+			label: "大庆高新技术产业开发区"
+		}]
+	}, {
+		value: "230700",
+		label: "伊春市",
+		children: [{
+			value: "230702",
+			label: "伊春区"
+		}, {
+			value: "230703",
+			label: "南岔区"
+		}, {
+			value: "230704",
+			label: "友好区"
+		}, {
+			value: "230705",
+			label: "西林区"
+		}, {
+			value: "230706",
+			label: "翠峦区"
+		}, {
+			value: "230707",
+			label: "新青区"
+		}, {
+			value: "230708",
+			label: "美溪区"
+		}, {
+			value: "230709",
+			label: "金山屯区"
+		}, {
+			value: "230710",
+			label: "五营区"
+		}, {
+			value: "230711",
+			label: "乌马河区"
+		}, {
+			value: "230712",
+			label: "汤旺河区"
+		}, {
+			value: "230713",
+			label: "带岭区"
+		}, {
+			value: "230714",
+			label: "乌伊岭区"
+		}, {
+			value: "230715",
+			label: "红星区"
+		}, {
+			value: "230716",
+			label: "上甘岭区"
+		}, {
+			value: "230722",
+			label: "嘉荫县"
+		}, {
+			value: "230781",
+			label: "铁力市"
+		}]
+	}, {
+		value: "230800",
+		label: "佳木斯市",
+		children: [ {
+			value: "230803",
+			label: "向阳区"
+		}, {
+			value: "230804",
+			label: "前进区"
+		}, {
+			value: "230805",
+			label: "东风区"
+		}, {
+			value: "230811",
+			label: "郊区"
+		}, {
+			value: "230822",
+			label: "桦南县"
+		}, {
+			value: "230826",
+			label: "桦川县"
+		}, {
+			value: "230828",
+			label: "汤原县"
+		}, {
+			value: "230833",
+			label: "抚远市"
+		}, {
+			value: "230881",
+			label: "同江市"
+		}, {
+			value: "230882",
+			label: "富锦市"
+		}]
+	}, {
+		value: "230900",
+		label: "七台河市",
+		children: [{
+			value: "230902",
+			label: "新兴区"
+		}, {
+			value: "230903",
+			label: "桃山区"
+		}, {
+			value: "230904",
+			label: "茄子河区"
+		}, {
+			value: "230921",
+			label: "勃利县"
+		}]
+	}, {
+		value: "231000",
+		label: "牡丹江市",
+		children: [{
+			value: "231002",
+			label: "东安区"
+		}, {
+			value: "231003",
+			label: "阳明区"
+		}, {
+			value: "231004",
+			label: "爱民区"
+		}, {
+			value: "231005",
+			label: "西安区"
+		}, {
+			value: "231086",
+			label: "东宁市"
+		}, {
+			value: "231025",
+			label: "林口县"
+		}, {
+			value: "231081",
+			label: "绥芬河市"
+		}, {
+			value: "231083",
+			label: "海林市"
+		}, {
+			value: "231084",
+			label: "宁安市"
+		}, {
+			value: "231085",
+			label: "穆棱市"
+		}, {
+			value: "231071",
+			label: "牡丹江经济技术开发区"
+		}]
+	}, {
+		value: "231100",
+		label: "黑河市",
+		children: [{
+			value: "231102",
+			label: "爱辉区"
+		}, {
+			value: "231121",
+			label: "嫩江县"
+		}, {
+			value: "231123",
+			label: "逊克县"
+		}, {
+			value: "231124",
+			label: "孙吴县"
+		}, {
+			value: "231181",
+			label: "北安市"
+		}, {
+			value: "231182",
+			label: "五大连池市"
+		}]
+	}, {
+		value: "231200",
+		label: "绥化市",
+		children: [{
+			value: "231202",
+			label: "北林区"
+		}, {
+			value: "231221",
+			label: "望奎县"
+		}, {
+			value: "231222",
+			label: "兰西县"
+		}, {
+			value: "231223",
+			label: "青冈县"
+		}, {
+			value: "231224",
+			label: "庆安县"
+		}, {
+			value: "231225",
+			label: "明水县"
+		}, {
+			value: "231226",
+			label: "绥棱县"
+		}, {
+			value: "231281",
+			label: "安达市"
+		}, {
+			value: "231282",
+			label: "肇东市"
+		}, {
+			value: "231283",
+			label: "海伦市"
+		}]
+	}, {
+		value: "232700",
+		label: "大兴安岭地区",
+		children: [{
+			value: "232721",
+			label: "呼玛县"
+		}, {
+			value: "232722",
+			label: "塔河县"
+		}, {
+			value: "232723",
+			label: "漠河县"
+		}, {
+			value: "232701",
+			label: "加格达奇区"
+		}, {
+			value: "232704",
+			label: "呼中区"
+		}, {
+            value: "232703",
+            label: "新林区"
+        }]
+	}]
+}, {
+	value: '310000',
+	label: '上海市',
+	children: [{
+		value: '310100',
+		label: '上海市',
+		children: [{
+			value: "310101",
+			label: "黄浦区"
+		}, {
+			value: "310104",
+			label: "徐汇区"
+		}, {
+			value: "310105",
+			label: "长宁区"
+		}, {
+			value: "310106",
+			label: "静安区"
+		}, {
+			value: "310107",
+			label: "普陀区"
+		}, {
+			value: "310109",
+			label: "虹口区"
+		}, {
+			value: "310110",
+			label: "杨浦区"
+		}, {
+			value: "310112",
+			label: "闵行区"
+		}, {
+			value: "310113",
+			label: "宝山区"
+		}, {
+			value: "310114",
+			label: "嘉定区"
+		}, {
+			value: "310115",
+			label: "浦东新区"
+		}, {
+			value: "310116",
+			label: "金山区"
+		}, {
+			value: "310117",
+			label: "松江区"
+		}, {
+			value: "310118",
+			label: "青浦区"
+		}, {
+			value: "310120",
+			label: "奉贤区"
+		}, {
+			value: "310151",
+			label: "崇明区"
+		}]
+	}]
+}, {
+	value: '320000',
+	label: '江苏省',
+	children: [{
+		value: "320100",
+		label: "南京市",
+		children: [{
+			value: "320102",
+			label: "玄武区"
+		}, {
+			value: "320104",
+			label: "秦淮区"
+		}, {
+			value: "320105",
+			label: "建邺区"
+		}, {
+			value: "320106",
+			label: "鼓楼区"
+		}, {
+			value: "320111",
+			label: "浦口区"
+		}, {
+			value: "320113",
+			label: "栖霞区"
+		}, {
+			value: "320114",
+			label: "雨花台区"
+		}, {
+			value: "320115",
+			label: "江宁区"
+		}, {
+			value: "320116",
+			label: "六合区"
+		}, {
+			value: "320117",
+			label: "溧水区"
+		}, {
+			value: "320118",
+			label: "高淳区"
+		}]
+	}, {
+		value: "320200",
+		label: "无锡市",
+		children: [ {
+			value: "320205",
+			label: "锡山区"
+		}, {
+			value: "320206",
+			label: "惠山区"
+		}, {
+			value: "320211",
+			label: "滨湖区"
+		}, {
+			value: "320281",
+			label: "江阴市"
+		}, {
+			value: "320282",
+			label: "宜兴市"
+		}, {
+			value: "320213",
+			label: "梁溪区"
+		}, {
+			value: "320214",
+			label: "新吴区"
+		}]
+	}, {
+		value: "320300",
+		label: "徐州市",
+		children: [{
+			value: "320302",
+			label: "鼓楼区"
+		}, {
+			value: "320303",
+			label: "云龙区"
+		}, {
+			value: "320305",
+			label: "贾汪区"
+		}, {
+			value: "320311",
+			label: "泉山区"
+		}, {
+			value: "320321",
+			label: "丰县"
+		}, {
+			value: "320322",
+			label: "沛县"
+		}, {
+			value: "320324",
+			label: "睢宁县"
+		}, {
+			value: "320381",
+			label: "新沂市"
+		}, {
+			value: "320382",
+			label: "邳州市"
+		}, {
+			value: "320371",
+			label: "徐州经济技术开发区"
+		}]
+	}, {
+		value: "320400",
+		label: "常州市",
+		children: [{
+			value: "320402",
+			label: "天宁区"
+		}, {
+			value: "320404",
+			label: "钟楼区"
+		}, {
+			value: "320411",
+			label: "新北区"
+		}, {
+			value: "320412",
+			label: "武进区"
+		}, {
+			value: "320481",
+			label: "溧阳市"
+		}, {
+			value: "320413",
+			label: "金坛区"
+		}]
+	}, {
+		value: "320500",
+		label: "苏州市",
+		children: [  {
+			value: "320505",
+			label: "虎丘区"
+		}, {
+			value: "320506",
+			label: "吴中区"
+		}, {
+			value: "320507",
+			label: "相城区"
+		}, {
+			value: "320581",
+			label: "常熟市"
+		}, {
+			value: "320582",
+			label: "张家港市"
+		}, {
+			value: "320583",
+			label: "昆山市"
+		}, {
+			value: "320509",
+			label: "吴江区"
+		}, {
+			value: "320585",
+			label: "太仓市"
+		}, {
+			value: "320508",
+			label: "姑苏区"
+		}, {
+			value: "320571",
+			label: "苏州工业园区"
+		}]
+	}, {
+		value: "320600",
+		label: "南通市",
+		children: [{
+			value: "320602",
+			label: "崇川区"
+		}, {
+			value: "320611",
+			label: "港闸区"
+		}, {
+			value: "320612",
+			label: "通州区"
+		}, {
+			value: "320621",
+			label: "海安县"
+		}, {
+			value: "320623",
+			label: "如东县"
+		}, {
+			value: "320681",
+			label: "启东市"
+		}, {
+			value: "320682",
+			label: "如皋市"
+		}, {
+			value: "320684",
+			label: "海门市"
+		}, {
+			value: "320671",
+			label: "南通经济技术开发区"
+		}]
+	}, {
+		value: "320700",
+		label: "连云港市",
+		children: [{
+			value: "320703",
+			label: "连云区"
+		}, {
+			value: "320706",
+			label: "海州区"
+		}, {
+			value: "320707",
+			label: "赣榆区"
+		}, {
+			value: "320722",
+			label: "东海县"
+		}, {
+			value: "320723",
+			label: "灌云县"
+		}, {
+			value: "320724",
+			label: "灌南县"
+		}, {
+			value: "320771",
+			label: "连云港经济技术开发区"
+		}, {
+            value: "320772",
+            label: "连云港高新技术产业开发区"
+        }]
+	}, {
+		value: "320800",
+		label: "淮安市",
+		children: [ {
+			value: "320804",
+			label: "淮阴区"
+		}, {
+			value: "320812",
+			label: "清江浦区"
+		}, {
+			value: "320826",
+			label: "涟水县"
+		}, {
+			value: "320813",
+			label: "洪泽区"
+		}, {
+			value: "320830",
+			label: "盱眙县"
+		}, {
+			value: "320831",
+			label: "金湖县"
+		}, {
+			value: "320803",
+			label: "淮安区"
+		}, {
+            value: "320871",
+            label: "淮安经济技术开发区"
+        }]
+	}, {
+		value: "320900",
+		label: "盐城市",
+		children: [{
+			value: "320902",
+			label: "亭湖区"
+		}, {
+			value: "320903",
+			label: "盐都区"
+		}, {
+			value: "320921",
+			label: "响水县"
+		}, {
+			value: "320922",
+			label: "滨海县"
+		},{
+            value: "320904",
+            label: "大丰区"
+        }, {
+			value: "320923",
+			label: "阜宁县"
+		}, {
+			value: "320924",
+			label: "射阳县"
+		}, {
+			value: "320925",
+			label: "建湖县"
+		}, {
+			value: "320981",
+			label: "东台市"
+		}, {
+			value: "320971",
+			label: "盐城经济技术开发区"
+		}]
+	}, {
+		value: "321000",
+		label: "扬州市",
+		children: [{
+			value: "321002",
+			label: "广陵区"
+		}, {
+			value: "321003",
+			label: "邗江区"
+		}, {
+			value: "321011",
+			label: "维扬区"
+		}, {
+			value: "321023",
+			label: "宝应县"
+		}, {
+			value: "321081",
+			label: "仪征市"
+		}, {
+			value: "321084",
+			label: "高邮市"
+		}, {
+			value: "321012",
+			label: "江都区"
+		}, {
+			value: "321071",
+			label: "扬州经济技术开发区"
+		}]
+	}, {
+		value: "321100",
+		label: "镇江市",
+		children: [{
+			value: "321102",
+			label: "京口区"
+		}, {
+			value: "321111",
+			label: "润州区"
+		}, {
+			value: "321112",
+			label: "丹徒区"
+		}, {
+			value: "321181",
+			label: "丹阳市"
+		}, {
+			value: "321182",
+			label: "扬中市"
+		}, {
+			value: "321183",
+			label: "句容市"
+		}, {
+			value: "321171",
+			label: "镇江新区"
+		}]
+	}, {
+		value: "321200",
+		label: "泰州市",
+		children: [{
+			value: "321202",
+			label: "海陵区"
+		}, {
+			value: "321203",
+			label: "高港区"
+		}, {
+			value: "321281",
+			label: "兴化市"
+		}, {
+			value: "321282",
+			label: "靖江市"
+		}, {
+			value: "321283",
+			label: "泰兴市"
+		}, {
+			value: "321204",
+			label: "姜堰区"
+		}, {
+			value: "321271",
+			label: "泰州医药高新技术产业开发区"
+		}]
+	}, {
+		value: "321300",
+		label: "宿迁市",
+		children: [{
+			value: "321302",
+			label: "宿城区"
+		}, {
+			value: "321311",
+			label: "宿豫区"
+		}, {
+			value: "321322",
+			label: "沭阳县"
+		}, {
+			value: "321323",
+			label: "泗阳县"
+		}, {
+			value: "321324",
+			label: "泗洪县"
+		}]
+	}]
+}, {
+	value: '330000',
+	label: '浙江省',
+	children: [{
+		value: "330100",
+		label: "杭州市",
+		children: [{
+			value: "330102",
+			label: "上城区"
+		}, {
+			value: "330103",
+			label: "下城区"
+		}, {
+			value: "330104",
+			label: "江干区"
+		}, {
+			value: "330105",
+			label: "拱墅区"
+		}, {
+			value: "330106",
+			label: "西湖区"
+		}, {
+			value: "330108",
+			label: "滨江区"
+		}, {
+			value: "330109",
+			label: "萧山区"
+		}, {
+			value: "330110",
+			label: "余杭区"
+		}, {
+			value: "330122",
+			label: "桐庐县"
+		}, {
+			value: "330127",
+			label: "淳安县"
+		}, {
+			value: "330182",
+			label: "建德市"
+		}, {
+			value: "330111",
+			label: "富阳区"
+		}, {
+			value: "330112",
+			label: "临安区"
+		}, {
+			value: "330186",
+			label: "其它区"
+		}]
+	}, {
+		value: "330200",
+		label: "宁波市",
+		children: [{
+			value: "330203",
+			label: "海曙区"
+		}, {
+			value: "330205",
+			label: "江北区"
+		}, {
+			value: "330206",
+			label: "北仑区"
+		}, {
+			value: "330211",
+			label: "镇海区"
+		}, {
+			value: "330212",
+			label: "鄞州区"
+		}, {
+			value: "330225",
+			label: "象山县"
+		}, {
+			value: "330226",
+			label: "宁海县"
+		}, {
+			value: "330281",
+			label: "余姚市"
+		}, {
+			value: "330282",
+			label: "慈溪市"
+		}, {
+			value: "330213",
+			label: "奉化区"
+		}]
+	}, {
+		value: "330300",
+		label: "温州市",
+		children: [{
+			value: "330302",
+			label: "鹿城区"
+		}, {
+			value: "330303",
+			label: "龙湾区"
+		}, {
+			value: "330304",
+			label: "瓯海区"
+		}, {
+			value: "330305",
+			label: "洞头区"
+		}, {
+			value: "330324",
+			label: "永嘉县"
+		}, {
+			value: "330326",
+			label: "平阳县"
+		}, {
+			value: "330327",
+			label: "苍南县"
+		}, {
+			value: "330328",
+			label: "文成县"
+		}, {
+			value: "330329",
+			label: "泰顺县"
+		}, {
+			value: "330381",
+			label: "瑞安市"
+		}, {
+			value: "330382",
+			label: "乐清市"
+		}, {
+			value: "330371",
+			label: "温州经济技术开发区"
+		}]
+	}, {
+		value: "330400",
+		label: "嘉兴市",
+		children: [{
+			value: "330402",
+			label: "南湖区"
+		}, {
+			value: "330411",
+			label: "秀洲区"
+		}, {
+			value: "330421",
+			label: "嘉善县"
+		}, {
+			value: "330424",
+			label: "海盐县"
+		}, {
+			value: "330481",
+			label: "海宁市"
+		}, {
+			value: "330482",
+			label: "平湖市"
+		}, {
+			value: "330483",
+			label: "桐乡市"
+		}]
+	}, {
+		value: "330500",
+		label: "湖州市",
+		children: [{
+			value: "330502",
+			label: "吴兴区"
+		}, {
+			value: "330503",
+			label: "南浔区"
+		}, {
+			value: "330521",
+			label: "德清县"
+		}, {
+			value: "330522",
+			label: "长兴县"
+		}, {
+			value: "330523",
+			label: "安吉县"
+		}]
+	}, {
+		value: "330600",
+		label: "绍兴市",
+		children: [{
+			value: "330602",
+			label: "越城区"
+		}, {
+			value: "330621",
+			label: "柯桥区"
+		}, {
+			value: "330681",
+			label: "诸暨市"
+		}, {
+			value: "330604",
+			label: "上虞区"
+		}, {
+			value: "330683",
+			label: "嵊州市"
+		}, {
+			value: "330624",
+			label: "新昌县"
+		}]
+	}, {
+		value: "330700",
+		label: "金华市",
+		children: [{
+			value: "330702",
+			label: "婺城区"
+		}, {
+			value: "330703",
+			label: "金东区"
+		}, {
+			value: "330723",
+			label: "武义县"
+		}, {
+			value: "330726",
+			label: "浦江县"
+		}, {
+			value: "330727",
+			label: "磐安县"
+		}, {
+			value: "330781",
+			label: "兰溪市"
+		}, {
+			value: "330782",
+			label: "义乌市"
+		}, {
+			value: "330783",
+			label: "东阳市"
+		}, {
+			value: "330784",
+			label: "永康市"
+		}]
+	}, {
+		value: "330800",
+		label: "衢州市",
+		children: [{
+			value: "330802",
+			label: "柯城区"
+		}, {
+			value: "330803",
+			label: "衢江区"
+		}, {
+			value: "330822",
+			label: "常山县"
+		}, {
+			value: "330824",
+			label: "开化县"
+		}, {
+			value: "330825",
+			label: "龙游县"
+		}, {
+			value: "330881",
+			label: "江山市"
+		}]
+	}, {
+		value: "330900",
+		label: "舟山市",
+		children: [{
+			value: "330902",
+			label: "定海区"
+		}, {
+			value: "330903",
+			label: "普陀区"
+		}, {
+			value: "330921",
+			label: "岱山县"
+		}, {
+			value: "330922",
+			label: "嵊泗县"
+		}]
+	}, {
+		value: "331000",
+		label: "台州市",
+		children: [{
+			value: "331002",
+			label: "椒江区"
+		}, {
+			value: "331003",
+			label: "黄岩区"
+		}, {
+			value: "331004",
+			label: "路桥区"
+		}, {
+			value: "331083",
+			label: "玉环市"
+		}, {
+			value: "331022",
+			label: "三门县"
+		}, {
+			value: "331023",
+			label: "天台县"
+		}, {
+			value: "331024",
+			label: "仙居县"
+		}, {
+			value: "331081",
+			label: "温岭市"
+		}, {
+			value: "331082",
+			label: "临海市"
+		}]
+	}, {
+		value: "331100",
+		label: "丽水市",
+		children: [{
+			value: "331102",
+			label: "莲都区"
+		}, {
+			value: "331121",
+			label: "青田县"
+		}, {
+			value: "331122",
+			label: "缙云县"
+		}, {
+			value: "331123",
+			label: "遂昌县"
+		}, {
+			value: "331124",
+			label: "松阳县"
+		}, {
+			value: "331125",
+			label: "云和县"
+		}, {
+			value: "331126",
+			label: "庆元县"
+		}, {
+			value: "331127",
+			label: "景宁畲族自治县"
+		}, {
+			value: "331181",
+			label: "龙泉市"
+		}]
+	}]
+}, {
+	value: '340000',
+	label: '安徽省',
+	children: [{
+		value: "340100",
+		label: "合肥市",
+		children: [{
+			value: "340111",
+			label: "包河区"
+		}, {
+			value: "340104",
+			label: "蜀山区"
+		}, {
+			value: "340103",
+			label: "庐阳区"
+		}, {
+			value: "340102",
+			label: "瑶海区"
+		}, {
+            value: "340171",
+            label: "合肥高新技术产业开发区"
+        }, {
+            value: "340172",
+            label: "合肥经济技术开发区"
+        }, {
+            value: "340173",
+            label: "合肥新站高新技术产业开发区"
+        }, {
+            value: "340121",
+            label: "长丰县"
+        }, {
+            value: "340122",
+            label: "肥东县"
+        }, {
+            value: "340123",
+            label: "肥西县"
+        }, {
+            value: "340124",
+            label: "庐江县"
+        }, {
+            value: "340181",
+            label: "巢湖市"
+        }]
+	}, {
+		value: "340200",
+		label: "芜湖市",
+		children: [{
+			value: "340202",
+			label: "镜湖区"
+		}, {
+			value: "340203",
+			label: "弋江区"
+		}, {
+			value: "340207",
+			label: "鸠江区"
+		}, {
+			value: "340208",
+			label: "三山区"
+		}, {
+			value: "340221",
+			label: "芜湖县"
+		}, {
+			value: "340222",
+			label: "繁昌县"
+		}, {
+			value: "340223",
+			label: "南陵县"
+		},{
+			value: "340225",
+			label: "无为县"
+		},{
+            value: "340272",
+            label: "安徽芜湖长江大桥经济开发区"
+        },{
+            value: "340271",
+            label: "芜湖经济技术开发区"
+        }]
+	}, {
+		value: "340300",
+		label: "蚌埠市",
+		children: [{
+			value: "340302",
+			label: "龙子湖区"
+		}, {
+			value: "340303",
+			label: "蚌山区"
+		}, {
+			value: "340304",
+			label: "禹会区"
+		}, {
+			value: "340311",
+			label: "淮上区"
+		}, {
+			value: "340321",
+			label: "怀远县"
+		}, {
+			value: "340322",
+			label: "五河县"
+		}, {
+			value: "340323",
+			label: "固镇县"
+		}, {
+			value: "340371",
+			label: "蚌埠市高新技术开发区"
+		}, {
+            value: "340372	",
+            label: "蚌埠市经济开发区"
+        }]
+	}, {
+		value: "340400",
+		label: "淮南市",
+		children: [{
+			value: "340402",
+			label: "大通区"
+		}, {
+			value: "340403",
+			label: "田家庵区"
+		}, {
+			value: "340404",
+			label: "谢家集区"
+		}, {
+			value: "340405",
+			label: "八公山区"
+		}, {
+			value: "340406",
+			label: "潘集区"
+		}, {
+			value: "340421",
+			label: "凤台县"
+		}, {
+            value: "340422",
+            label: "寿县"
+        }]
+	}, {
+		value: "340500",
+		label: "马鞍山市",
+		children: [ {
+			value: "340503",
+			label: "花山区"
+		}, {
+			value: "340504",
+			label: "雨山区"
+		}, {
+			value: "340521",
+			label: "当涂县"
+		}, {
+			value: "340506",
+			label: "博望区"
+		}, {
+			value: "340522",
+			label: "含山县"
+		}, {
+			value: "340523",
+			label: "和县"
+		}]
+	}, {
+		value: "340600",
+		label: "淮北市",
+		children: [{
+			value: "340602",
+			label: "杜集区"
+		}, {
+			value: "340603",
+			label: "相山区"
+		}, {
+			value: "340604",
+			label: "烈山区"
+		}, {
+			value: "340621",
+			label: "濉溪县"
+		}]
+	}, {
+		value: "340700",
+		label: "铜陵市",
+		children: [{
+			value: "340705",
+			label: "铜官区"
+		}, {
+			value: "340706",
+			label: "义安区"
+		}, {
+			value: "340711",
+			label: "郊区"
+		}, {
+			value: "340722",
+			label: "枞阳县"
+		}]
+	}, {
+		value: "340800",
+		label: "安庆市",
+		children: [{
+			value: "340802",
+			label: "迎江区"
+		}, {
+			value: "340803",
+			label: "大观区"
+		}, {
+			value: "340811",
+			label: "宜秀区"
+		}, {
+			value: "340822",
+			label: "怀宁县"
+		}, {
+			value: "340824",
+			label: "潜山县"
+		}, {
+			value: "340825",
+			label: "太湖县"
+		}, {
+			value: "340826",
+			label: "宿松县"
+		}, {
+			value: "340827",
+			label: "望江县"
+		}, {
+			value: "340828",
+			label: "岳西县"
+		}, {
+			value: "340881",
+			label: "桐城市"
+		}, {
+			value: "340871",
+			label: "安徽安庆经济开发区"
+		}]
+	}, {
+		value: "341000",
+		label: "黄山市",
+		children: [{
+			value: "341002",
+			label: "屯溪区"
+		}, {
+			value: "341003",
+			label: "黄山区"
+		}, {
+			value: "341004",
+			label: "徽州区"
+		}, {
+			value: "341021",
+			label: "歙县"
+		}, {
+			value: "341022",
+			label: "休宁县"
+		}, {
+			value: "341023",
+			label: "黟县"
+		}, {
+			value: "341024",
+			label: "祁门县"
+		}]
+	}, {
+		value: "341100",
+		label: "滁州市",
+		children: [{
+			value: "341102",
+			label: "琅琊区"
+		}, {
+			value: "341103",
+			label: "南谯区"
+		}, {
+			value: "341122",
+			label: "来安县"
+		}, {
+			value: "341124",
+			label: "全椒县"
+		}, {
+			value: "341125",
+			label: "定远县"
+		}, {
+			value: "341126",
+			label: "凤阳县"
+		}, {
+			value: "341181",
+			label: "天长市"
+		}, {
+			value: "341182",
+			label: "明光市"
+		}, {
+			value: "341171",
+			label: "苏滁现代产业园"
+		}, {
+            value: "341172",
+            label: "滁州经济技术开发区"
+        }]
+	}, {
+		value: "341200",
+		label: "阜阳市",
+		children: [{
+			value: "341202",
+			label: "颍州区"
+		}, {
+			value: "341203",
+			label: "颍东区"
+		}, {
+			value: "341204",
+			label: "颍泉区"
+		}, {
+			value: "341221",
+			label: "临泉县"
+		}, {
+			value: "341222",
+			label: "太和县"
+		}, {
+			value: "341225",
+			label: "阜南县"
+		}, {
+			value: "341226",
+			label: "颍上县"
+		}, {
+			value: "341282",
+			label: "界首市"
+		}, {
+			value: "341272",
+			label: "阜阳经济技术开发区"
+		}, {
+            value: "341271",
+            label: "阜阳合肥现代产业园区"
+        }]
+	}, {
+		value: "341300",
+		label: "宿州市",
+		children: [{
+			value: "341302",
+			label: "埇桥区"
+		}, {
+			value: "341321",
+			label: "砀山县"
+		}, {
+			value: "341322",
+			label: "萧县"
+		}, {
+			value: "341323",
+			label: "灵璧县"
+		}, {
+			value: "341324",
+			label: "泗县"
+		}, {
+			value: "341371",
+			label: "宿州马鞍山现代产业园区"
+		}, {
+            value: "341372",
+            label: "宿州经济技术开发区"
+        }]
+	}, {
+		value: "341500",
+		label: "六安市",
+		children: [{
+			value: "341502",
+			label: "金安区"
+		}, {
+			value: "341503",
+			label: "裕安区"
+		}, {
+			value: "341504",
+			label: "叶集区"
+		}, {
+			value: "341522",
+			label: "霍邱县"
+		}, {
+			value: "341523",
+			label: "舒城县"
+		}, {
+			value: "341524",
+			label: "金寨县"
+		}, {
+			value: "341525",
+			label: "霍山县"
+		}]
+	}, {
+		value: "341600",
+		label: "亳州市",
+		children: [{
+			value: "341602",
+			label: "谯城区"
+		}, {
+			value: "341621",
+			label: "涡阳县"
+		}, {
+			value: "341622",
+			label: "蒙城县"
+		}, {
+			value: "341623",
+			label: "利辛县"
+		}]
+	}, {
+		value: "341700",
+		label: "池州市",
+		children: [{
+			value: "341702",
+			label: "贵池区"
+		}, {
+			value: "341721",
+			label: "东至县"
+		}, {
+			value: "341722",
+			label: "石台县"
+		}, {
+			value: "341723",
+			label: "青阳县"
+		}]
+	}, {
+		value: "341800",
+		label: "宣城市",
+		children: [{
+			value: "341802",
+			label: "宣州区"
+		}, {
+			value: "341821",
+			label: "郎溪县"
+		}, {
+			value: "341822",
+			label: "广德县"
+		}, {
+			value: "341823",
+			label: "泾县"
+		}, {
+			value: "341824",
+			label: "绩溪县"
+		}, {
+			value: "341825",
+			label: "旌德县"
+		}, {
+			value: "341881",
+			label: "宁国市"
+		}, {
+			value: "341871",
+			label: "宣城市经济开发区"
+		}]
+	}]
+}, {
+	value: '350000',
+	label: '福建省',
+	children: [{
+		value: "350100",
+		label: "福州市",
+		children: [{
+			value: "350102",
+			label: "鼓楼区"
+		}, {
+			value: "350103",
+			label: "台江区"
+		}, {
+			value: "350104",
+			label: "仓山区"
+		}, {
+			value: "350105",
+			label: "马尾区"
+		}, {
+			value: "350111",
+			label: "晋安区"
+		}, {
+			value: "350121",
+			label: "闽侯县"
+		}, {
+			value: "350122",
+			label: "连江县"
+		}, {
+			value: "350123",
+			label: "罗源县"
+		}, {
+			value: "350124",
+			label: "闽清县"
+		}, {
+			value: "350125",
+			label: "永泰县"
+		}, {
+			value: "350128",
+			label: "平潭县"
+		}, {
+			value: "350181",
+			label: "福清市"
+		}, {
+			value: "350182",
+			label: "长乐市"
+		}]
+	}, {
+		value: "350200",
+		label: "厦门市",
+		children: [{
+			value: "350203",
+			label: "思明区"
+		}, {
+			value: "350205",
+			label: "海沧区"
+		}, {
+			value: "350206",
+			label: "湖里区"
+		}, {
+			value: "350211",
+			label: "集美区"
+		}, {
+			value: "350212",
+			label: "同安区"
+		}, {
+			value: "350213",
+			label: "翔安区"
+		}]
+	}, {
+		value: "350300",
+		label: "莆田市",
+		children: [{
+			value: "350302",
+			label: "城厢区"
+		}, {
+			value: "350303",
+			label: "涵江区"
+		}, {
+			value: "350304",
+			label: "荔城区"
+		}, {
+			value: "350305",
+			label: "秀屿区"
+		}, {
+			value: "350322",
+			label: "仙游县"
+		}]
+	}, {
+		value: "350400",
+		label: "三明市",
+		children: [{
+			value: "350402",
+			label: "梅列区"
+		}, {
+			value: "350403",
+			label: "三元区"
+		}, {
+			value: "350421",
+			label: "明溪县"
+		}, {
+			value: "350423",
+			label: "清流县"
+		}, {
+			value: "350424",
+			label: "宁化县"
+		}, {
+			value: "350425",
+			label: "大田县"
+		}, {
+			value: "350426",
+			label: "尤溪县"
+		}, {
+			value: "350427",
+			label: "沙县"
+		}, {
+			value: "350428",
+			label: "将乐县"
+		}, {
+			value: "350429",
+			label: "泰宁县"
+		}, {
+			value: "350430",
+			label: "建宁县"
+		}, {
+			value: "350481",
+			label: "永安市"
+		}]
+	}, {
+		value: "350500",
+		label: "泉州市",
+		children: [{
+			value: "350502",
+			label: "鲤城区"
+		}, {
+			value: "350503",
+			label: "丰泽区"
+		}, {
+			value: "350504",
+			label: "洛江区"
+		}, {
+			value: "350505",
+			label: "泉港区"
+		}, {
+			value: "350521",
+			label: "惠安县"
+		}, {
+			value: "350524",
+			label: "安溪县"
+		}, {
+			value: "350525",
+			label: "永春县"
+		}, {
+			value: "350526",
+			label: "德化县"
+		}, {
+			value: "350527",
+			label: "金门县"
+		}, {
+			value: "350581",
+			label: "石狮市"
+		}, {
+			value: "350582",
+			label: "晋江市"
+		}, {
+			value: "350583",
+			label: "南安市"
+		}]
+	}, {
+		value: "350600",
+		label: "漳州市",
+		children: [{
+			value: "350602",
+			label: "芗城区"
+		}, {
+			value: "350603",
+			label: "龙文区"
+		}, {
+			value: "350622",
+			label: "云霄县"
+		}, {
+			value: "350623",
+			label: "漳浦县"
+		}, {
+			value: "350624",
+			label: "诏安县"
+		}, {
+			value: "350625",
+			label: "长泰县"
+		}, {
+			value: "350626",
+			label: "东山县"
+		}, {
+			value: "350627",
+			label: "南靖县"
+		}, {
+			value: "350628",
+			label: "平和县"
+		}, {
+			value: "350629",
+			label: "华安县"
+		}, {
+			value: "350681",
+			label: "龙海市"
+		}]
+	}, {
+		value: "350700",
+		label: "南平市",
+		children: [{
+			value: "350702",
+			label: "延平区"
+		}, {
+			value: "350721",
+			label: "顺昌县"
+		}, {
+			value: "350722",
+			label: "浦城县"
+		}, {
+			value: "350723",
+			label: "光泽县"
+		}, {
+			value: "350724",
+			label: "松溪县"
+		}, {
+			value: "350725",
+			label: "政和县"
+		}, {
+			value: "350781",
+			label: "邵武市"
+		}, {
+			value: "350782",
+			label: "武夷山市"
+		}, {
+			value: "350783",
+			label: "建瓯市"
+		}, {
+			value: "350703",
+			label: "建阳区"
+		}]
+	}, {
+		value: "350800",
+		label: "龙岩市",
+		children: [{
+			value: "350802",
+			label: "新罗区"
+		}, {
+			value: "350821",
+			label: "长汀县"
+		}, {
+			value: "350803",
+			label: "永定区"
+		}, {
+			value: "350823",
+			label: "上杭县"
+		}, {
+			value: "350824",
+			label: "武平县"
+		}, {
+			value: "350825",
+			label: "连城县"
+		}, {
+			value: "350881",
+			label: "漳平市"
+		}]
+	}, {
+		value: "350900",
+		label: "宁德市",
+		children: [{
+			value: "350902",
+			label: "蕉城区"
+		}, {
+			value: "350921",
+			label: "霞浦县"
+		}, {
+			value: "350922",
+			label: "古田县"
+		}, {
+			value: "350923",
+			label: "屏南县"
+		}, {
+			value: "350924",
+			label: "寿宁县"
+		}, {
+			value: "350925",
+			label: "周宁县"
+		}, {
+			value: "350926",
+			label: "柘荣县"
+		}, {
+			value: "350981",
+			label: "福安市"
+		}, {
+			value: "350982",
+			label: "福鼎市"
+		}]
+	}]
+}, {
+	value: '360000',
+	label: '江西省',
+	children: [{
+		value: "360100",
+		label: "南昌市",
+		children: [{
+			value: "360102",
+			label: "东湖区"
+		}, {
+			value: "360103",
+			label: "西湖区"
+		}, {
+			value: "360104",
+			label: "青云谱区"
+		}, {
+			value: "360105",
+			label: "湾里区"
+		}, {
+			value: "360111",
+			label: "青山湖区"
+		}, {
+			value: "360121",
+			label: "南昌县"
+		}, {
+			value: "360112",
+			label: "新建区"
+		}, {
+			value: "360123",
+			label: "安义县"
+		}, {
+			value: "360124",
+			label: "进贤县"
+		}]
+	}, {
+		value: "360200",
+		label: "景德镇市",
+		children: [{
+			value: "360202",
+			label: "昌江区"
+		}, {
+			value: "360203",
+			label: "珠山区"
+		}, {
+			value: "360222",
+			label: "浮梁县"
+		}, {
+			value: "360281",
+			label: "乐平市"
+		}]
+	}, {
+		value: "360300",
+		label: "萍乡市",
+		children: [{
+			value: "360302",
+			label: "安源区"
+		}, {
+			value: "360313",
+			label: "湘东区"
+		}, {
+			value: "360321",
+			label: "莲花县"
+		}, {
+			value: "360322",
+			label: "上栗县"
+		}, {
+			value: "360323",
+			label: "芦溪县"
+		}]
+	}, {
+		value: "360400",
+		label: "九江市",
+		children: [{
+			value: "360402",
+			label: "濂溪区"
+		}, {
+			value: "360403",
+			label: "浔阳区"
+		}, {
+			value: "360404",
+			label: "柴桑区"
+		}, {
+			value: "360423",
+			label: "武宁县"
+		}, {
+			value: "360424",
+			label: "修水县"
+		}, {
+			value: "360425",
+			label: "永修县"
+		}, {
+			value: "360426",
+			label: "德安县"
+		}, {
+			value: "360428",
+			label: "都昌县"
+		}, {
+			value: "360429",
+			label: "湖口县"
+		}, {
+			value: "360430",
+			label: "彭泽县"
+		}, {
+			value: "360481",
+			label: "瑞昌市"
+		}, {
+			value: "360482",
+			label: "共青城市"
+		}, {
+            value: "360483",
+            label: "庐山市"
+        }]
+	}, {
+		value: "360500",
+		label: "新余市",
+		children: [{
+			value: "360502",
+			label: "渝水区"
+		}, {
+			value: "360521",
+			label: "分宜县"
+		}]
+	}, {
+		value: "360600",
+		label: "鹰潭市",
+		children: [{
+			value: "360602",
+			label: "月湖区"
+		}, {
+			value: "360622",
+			label: "余江县"
+		}, {
+			value: "360681",
+			label: "贵溪市"
+		}]
+	}, {
+		value: "360700",
+		label: "赣州市",
+		children: [{
+			value: "360702",
+			label: "章贡区"
+		}, {
+			value: "360704",
+			label: "赣县区"
+		}, {
+			value: "360722",
+			label: "信丰县"
+		}, {
+			value: "360723",
+			label: "大余县"
+		}, {
+			value: "360724",
+			label: "上犹县"
+		}, {
+			value: "360725",
+			label: "崇义县"
+		}, {
+			value: "360726",
+			label: "安远县"
+		}, {
+			value: "360727",
+			label: "龙南县"
+		}, {
+			value: "360728",
+			label: "定南县"
+		}, {
+			value: "360729",
+			label: "全南县"
+		}, {
+			value: "360730",
+			label: "宁都县"
+		}, {
+			value: "360731",
+			label: "于都县"
+		}, {
+			value: "360732",
+			label: "兴国县"
+		}, {
+			value: "360733",
+			label: "会昌县"
+		}, {
+			value: "360734",
+			label: "寻乌县"
+		}, {
+			value: "360735",
+			label: "石城县"
+		}, {
+			value: "360781",
+			label: "瑞金市"
+		}, {
+			value: "360703",
+			label: "南康区"
+		}]
+	}, {
+		value: "360800",
+		label: "吉安市",
+		children: [{
+			value: "360802",
+			label: "吉州区"
+		}, {
+			value: "360803",
+			label: "青原区"
+		}, {
+			value: "360821",
+			label: "吉安县"
+		}, {
+			value: "360822",
+			label: "吉水县"
+		}, {
+			value: "360823",
+			label: "峡江县"
+		}, {
+			value: "360824",
+			label: "新干县"
+		}, {
+			value: "360825",
+			label: "永丰县"
+		}, {
+			value: "360826",
+			label: "泰和县"
+		}, {
+			value: "360827",
+			label: "遂川县"
+		}, {
+			value: "360828",
+			label: "万安县"
+		}, {
+			value: "360829",
+			label: "安福县"
+		}, {
+			value: "360830",
+			label: "永新县"
+		}, {
+			value: "360881",
+			label: "井冈山市"
+		}]
+	}, {
+		value: "360900",
+		label: "宜春市",
+		children: [{
+			value: "360902",
+			label: "袁州区"
+		}, {
+			value: "360921",
+			label: "奉新县"
+		}, {
+			value: "360922",
+			label: "万载县"
+		}, {
+			value: "360923",
+			label: "上高县"
+		}, {
+			value: "360924",
+			label: "宜丰县"
+		}, {
+			value: "360925",
+			label: "靖安县"
+		}, {
+			value: "360926",
+			label: "铜鼓县"
+		}, {
+			value: "360981",
+			label: "丰城市"
+		}, {
+			value: "360982",
+			label: "樟树市"
+		}, {
+			value: "360983",
+			label: "高安市"
+		}]
+	}, {
+		value: "361000",
+		label: "抚州市",
+		children: [{
+			value: "361002",
+			label: "临川区"
+		}, {
+			value: "361021",
+			label: "南城县"
+		}, {
+			value: "361022",
+			label: "黎川县"
+		}, {
+			value: "361023",
+			label: "南丰县"
+		}, {
+			value: "361024",
+			label: "崇仁县"
+		}, {
+			value: "361025",
+			label: "乐安县"
+		}, {
+			value: "361026",
+			label: "宜黄县"
+		}, {
+			value: "361027",
+			label: "金溪县"
+		}, {
+			value: "361028",
+			label: "资溪县"
+		}, {
+			value: "361003",
+			label: "东乡区"
+		}, {
+			value: "361030",
+			label: "广昌县"
+		}]
+	}, {
+		value: "361100",
+		label: "上饶市",
+		children: [{
+			value: "361102",
+			label: "信州区"
+		}, {
+			value: "361121",
+			label: "上饶县"
+		}, {
+			value: "361103",
+			label: "广丰区"
+		}, {
+			value: "361123",
+			label: "玉山县"
+		}, {
+			value: "361124",
+			label: "铅山县"
+		}, {
+			value: "361125",
+			label: "横峰县"
+		}, {
+			value: "361126",
+			label: "弋阳县"
+		}, {
+			value: "361127",
+			label: "余干县"
+		}, {
+			value: "361128",
+			label: "鄱阳县"
+		}, {
+			value: "361129",
+			label: "万年县"
+		}, {
+			value: "361130",
+			label: "婺源县"
+		}, {
+			value: "361181",
+			label: "德兴市"
+		}]
+	}]
+}, {
+	value: '370000',
+	label: '山东省',
+	children: [{
+		value: "370100",
+		label: "济南市",
+		children: [{
+			value: "370102",
+			label: "历下区"
+		}, {
+			value: "370103",
+			label: "市中区"
+		}, {
+			value: "370104",
+			label: "槐荫区"
+		}, {
+			value: "370105",
+			label: "天桥区"
+		}, {
+			value: "370112",
+			label: "历城区"
+		}, {
+			value: "370113",
+			label: "长清区"
+		}, {
+			value: "370124",
+			label: "平阴县"
+		}, {
+			value: "370125",
+			label: "济阳县"
+		}, {
+			value: "370126",
+			label: "商河县"
+		}, {
+			value: "370114",
+			label: "章丘区"
+		}, {
+			value: "370171",
+			label: "济南高新技术产业开发区"
+		}]
+	}, {
+		value: "370200",
+		label: "青岛市",
+		children: [{
+			value: "370202",
+			label: "市南区"
+		}, {
+			value: "370203",
+			label: "市北区"
+		}, {
+			value: "370211",
+			label: "黄岛区"
+		}, {
+			value: "370212",
+			label: "崂山区"
+		}, {
+			value: "370213",
+			label: "李沧区"
+		}, {
+			value: "370214",
+			label: "城阳区"
+		}, {
+			value: "370281",
+			label: "胶州市"
+		}, {
+			value: "370215",
+			label: "即墨区"
+		}, {
+			value: "370283",
+			label: "平度市"
+		}, {
+			value: "370285",
+			label: "莱西市"
+		}, {
+			value: "370271",
+			label: "青岛高新技术产业开发区"
+		}]
+	}, {
+		value: "370300",
+		label: "淄博市",
+		children: [{
+			value: "370302",
+			label: "淄川区"
+		}, {
+			value: "370303",
+			label: "张店区"
+		}, {
+			value: "370304",
+			label: "博山区"
+		}, {
+			value: "370305",
+			label: "临淄区"
+		}, {
+			value: "370306",
+			label: "周村区"
+		}, {
+			value: "370321",
+			label: "桓台县"
+		}, {
+			value: "370322",
+			label: "高青县"
+		}, {
+			value: "370323",
+			label: "沂源县"
+		}]
+	}, {
+		value: "370400",
+		label: "枣庄市",
+		children: [{
+			value: "370402",
+			label: "市中区"
+		}, {
+			value: "370403",
+			label: "薛城区"
+		}, {
+			value: "370404",
+			label: "峄城区"
+		}, {
+			value: "370405",
+			label: "台儿庄区"
+		}, {
+			value: "370406",
+			label: "山亭区"
+		}, {
+			value: "370481",
+			label: "滕州市"
+		}]
+	}, {
+		value: "370500",
+		label: "东营市",
+		children: [{
+			value: "370502",
+			label: "东营区"
+		}, {
+			value: "370503",
+			label: "河口区"
+		}, {
+			value: "370521",
+			label: "垦利县"
+		}, {
+			value: "370522",
+			label: "利津县"
+		}, {
+			value: "370523",
+			label: "广饶县"
+		}, {
+			value: "370589",
+			label: "西城区"
+		}, {
+			value: "370571",
+			label: "东营经济技术开发区"
+		}, {
+			value: "370572",
+			label: "东营港经济开发区"
+		}]
+	}, {
+		value: "370600",
+		label: "烟台市",
+		children: [{
+			value: "370602",
+			label: "芝罘区"
+		}, {
+			value: "370611",
+			label: "福山区"
+		}, {
+			value: "370612",
+			label: "牟平区"
+		}, {
+			value: "370613",
+			label: "莱山区"
+		}, {
+			value: "370634",
+			label: "长岛县"
+		}, {
+			value: "370681",
+			label: "龙口市"
+		}, {
+			value: "370682",
+			label: "莱阳市"
+		}, {
+			value: "370683",
+			label: "莱州市"
+		}, {
+			value: "370684",
+			label: "蓬莱市"
+		}, {
+			value: "370685",
+			label: "招远市"
+		}, {
+			value: "370686",
+			label: "栖霞市"
+		}, {
+			value: "370687",
+			label: "海阳市"
+		}, {
+			value: "370671",
+			label: "烟台高新技术产业开发区"
+		}, {
+            value: "370672",
+            label: "烟台经济技术开发区"
+        }]
+	}, {
+		value: "370700",
+		label: "潍坊市",
+		children: [{
+			value: "370702",
+			label: "潍城区"
+		}, {
+			value: "370703",
+			label: "寒亭区"
+		}, {
+			value: "370704",
+			label: "坊子区"
+		}, {
+			value: "370705",
+			label: "奎文区"
+		}, {
+			value: "370724",
+			label: "临朐县"
+		}, {
+			value: "370725",
+			label: "昌乐县"
+		}, {
+			value: "370772",
+			label: "潍坊滨海经济技术开发区"
+		}, {
+			value: "370781",
+			label: "青州市"
+		}, {
+			value: "370782",
+			label: "诸城市"
+		}, {
+			value: "370783",
+			label: "寿光市"
+		}, {
+			value: "370784",
+			label: "安丘市"
+		}, {
+			value: "370785",
+			label: "高密市"
+		}, {
+			value: "370786",
+			label: "昌邑市"
+		}]
+	}, {
+		value: "370800",
+		label: "济宁市",
+		children: [ {
+			value: "370811",
+			label: "任城区"
+		}, {
+			value: "370826",
+			label: "微山县"
+		}, {
+			value: "370827",
+			label: "鱼台县"
+		}, {
+			value: "370828",
+			label: "金乡县"
+		}, {
+			value: "370829",
+			label: "嘉祥县"
+		}, {
+			value: "370830",
+			label: "汶上县"
+		}, {
+			value: "370831",
+			label: "泗水县"
+		}, {
+			value: "370832",
+			label: "梁山县"
+		}, {
+			value: "370881",
+			label: "曲阜市"
+		}, {
+			value: "370812",
+			label: "兖州区"
+		}, {
+			value: "370883",
+			label: "邹城市"
+		}, {
+			value: "370871",
+			label: "济宁高新技术产业开发区"
+		}]
+	}, {
+		value: "370900",
+		label: "泰安市",
+		children: [{
+			value: "370902",
+			label: "泰山区"
+		}, {
+			value: "370903",
+			label: "岱岳区"
+		}, {
+			value: "370921",
+			label: "宁阳县"
+		}, {
+			value: "370923",
+			label: "东平县"
+		}, {
+			value: "370982",
+			label: "新泰市"
+		}, {
+			value: "370983",
+			label: "肥城市"
+		}]
+	}, {
+		value: "371000",
+		label: "威海市",
+		children: [{
+			value: "371002",
+			label: "环翠区"
+		}, {
+			value: "371003",
+			label: "文登区"
+		}, {
+			value: "371082",
+			label: "荣成市"
+		}, {
+			value: "371083",
+			label: "乳山市"
+		}, {
+			value: "371071",
+			label: "威海火炬高技术产业开发区"
+		}, {
+            value: "371072",
+            label: "威海经济技术开发区"
+        }, {
+            value: "371073",
+            label: "威海临港经济技术开发区"
+        }]
+	}, {
+		value: "371100",
+		label: "日照市",
+		children: [{
+			value: "371102",
+			label: "东港区"
+		}, {
+			value: "371103",
+			label: "岚山区"
+		}, {
+			value: "371121",
+			label: "五莲县"
+		}, {
+			value: "371122",
+			label: "莒县"
+		}, {
+			value: "371171",
+			label: "日照经济技术开发区"
+		}, {
+            value: "371172",
+            label: "日照国际海洋城"
+        }]
+	}, {
+		value: "371200",
+		label: "莱芜市",
+		children: [{
+			value: "371202",
+			label: "莱城区"
+		}, {
+			value: "371203",
+			label: "钢城区"
+		}]
+	}, {
+		value: "371300",
+		label: "临沂市",
+		children: [{
+			value: "371302",
+			label: "兰山区"
+		}, {
+			value: "371311",
+			label: "罗庄区"
+		}, {
+			value: "371312",
+			label: "河东区"
+		}, {
+			value: "371321",
+			label: "沂南县"
+		}, {
+			value: "371322",
+			label: "郯城县"
+		}, {
+			value: "371323",
+			label: "沂水县"
+		}, {
+			value: "371324",
+			label: "兰陵县"
+		}, {
+			value: "371325",
+			label: "费县"
+		}, {
+			value: "371326",
+			label: "平邑县"
+		}, {
+			value: "371327",
+			label: "莒南县"
+		}, {
+			value: "371328",
+			label: "蒙阴县"
+		}, {
+			value: "371329",
+			label: "临沭县"
+		}, {
+			value: "371371",
+			label: "临沂高新技术产业开发区"
+		}, {
+            value: "371373",
+            label: "临沂临港经济开发区"
+        }, {
+            value: "371372",
+            label: "临沂经济技术开发区"
+        }]
+	}, {
+		value: "371400",
+		label: "德州市",
+		children: [{
+			value: "371402",
+			label: "德城区"
+		}, {
+			value: "371403",
+			label: "陵城区"
+		}, {
+			value: "371422",
+			label: "宁津县"
+		}, {
+			value: "371423",
+			label: "庆云县"
+		}, {
+			value: "371424",
+			label: "临邑县"
+		}, {
+			value: "371425",
+			label: "齐河县"
+		}, {
+			value: "371426",
+			label: "平原县"
+		}, {
+			value: "371427",
+			label: "夏津县"
+		}, {
+			value: "371428",
+			label: "武城县"
+		}, {
+			value: "371481",
+			label: "乐陵市"
+		}, {
+			value: "371482",
+			label: "禹城市"
+		}, {
+			value: "371471",
+			label: "德州经济技术开发区"
+		}, {
+            value: "371472",
+            label: "德州运河经济开发区"
+        }]
+	}, {
+		value: "371500",
+		label: "聊城市",
+		children: [{
+			value: "371502",
+			label: "东昌府区"
+		}, {
+			value: "371521",
+			label: "阳谷县"
+		}, {
+			value: "371522",
+			label: "莘县"
+		}, {
+			value: "371523",
+			label: "茌平县"
+		}, {
+			value: "371524",
+			label: "东阿县"
+		}, {
+			value: "371525",
+			label: "冠县"
+		}, {
+			value: "371526",
+			label: "高唐县"
+		}, {
+			value: "371581",
+			label: "临清市"
+		}]
+	}, {
+		value: "371600",
+		label: "滨州市",
+		children: [{
+			value: "371602",
+			label: "滨城区"
+		}, {
+			value: "371621",
+			label: "惠民县"
+		}, {
+			value: "371622",
+			label: "阳信县"
+		}, {
+			value: "371623",
+			label: "无棣县"
+		}, {
+			value: "371603",
+			label: "沾化区"
+		}, {
+			value: "371625",
+			label: "博兴县"
+		}, {
+			value: "371626",
+			label: "邹平县"
+		}]
+	}, {
+		value: "371700",
+		label: "菏泽市",
+		children: [{
+			value: "371702",
+			label: "牡丹区"
+		}, {
+			value: "371721",
+			label: "曹县"
+		}, {
+			value: "371722",
+			label: "单县"
+		}, {
+			value: "371723",
+			label: "成武县"
+		}, {
+			value: "371724",
+			label: "巨野县"
+		}, {
+			value: "371725",
+			label: "郓城县"
+		}, {
+			value: "371726",
+			label: "鄄城县"
+		}, {
+			value: "371727",
+			label: "定陶区"
+		}, {
+			value: "371728",
+			label: "东明县"
+		}, {
+			value: "371771",
+			label: "菏泽经济技术开发区"
+		}, {
+            value: "371772",
+            label: "菏泽高新技术开发区"
+        }]
+	}]
+}, {
+	value: '410000',
+	label: '河南省',
+	children: [{
+		value: "410100",
+		label: "郑州市",
+		children: [{
+			value: "410102",
+			label: "中原区"
+		}, {
+			value: "410103",
+			label: "二七区"
+		}, {
+			value: "410104",
+			label: "管城回族区"
+		}, {
+			value: "410105",
+			label: "金水区"
+		}, {
+			value: "410106",
+			label: "上街区"
+		}, {
+			value: "410108",
+			label: "惠济区"
+		}, {
+			value: "410122",
+			label: "中牟县"
+		}, {
+			value: "410181",
+			label: "巩义市"
+		}, {
+			value: "410182",
+			label: "荥阳市"
+		}, {
+			value: "410183",
+			label: "新密市"
+		}, {
+			value: "410184",
+			label: "新郑市"
+		}, {
+			value: "410185",
+			label: "登封市"
+		}, {
+			value: "410171",
+			label: "郑州经济技术开发区"
+		}, {
+			value: "410172",
+			label: "郑州高新技术产业开发区"
+		}, {
+			value: "410173",
+			label: "郑州航空港经济综合实验区"
+		}]
+	}, {
+		value: "410200",
+		label: "开封市",
+		children: [{
+			value: "410202",
+			label: "龙亭区"
+		}, {
+			value: "410203",
+			label: "顺河回族区"
+		}, {
+			value: "410204",
+			label: "鼓楼区"
+		}, {
+			value: "410205",
+			label: "禹王台区"
+		}, {
+			value: "410211",
+			label: "金明区"
+		}, {
+			value: "410221",
+			label: "杞县"
+		}, {
+			value: "410222",
+			label: "通许县"
+		}, {
+			value: "410223",
+			label: "尉氏县"
+		}, {
+			value: "410225",
+			label: "兰考县"
+		}, {
+			value: "410212",
+			label: "祥符区"
+		}]
+	}, {
+		value: "410300",
+		label: "洛阳市",
+		children: [{
+			value: "410302",
+			label: "老城区"
+		}, {
+			value: "410303",
+			label: "西工区"
+		}, {
+			value: "410304",
+			label: "廛河回族区"
+		}, {
+			value: "410305",
+			label: "涧西区"
+		}, {
+			value: "410306",
+			label: "吉利区"
+		}, {
+			value: "410307",
+			label: "洛龙区"
+		}, {
+			value: "410322",
+			label: "孟津县"
+		}, {
+			value: "410323",
+			label: "新安县"
+		}, {
+			value: "410324",
+			label: "栾川县"
+		}, {
+			value: "410325",
+			label: "嵩县"
+		}, {
+			value: "410326",
+			label: "汝阳县"
+		}, {
+			value: "410327",
+			label: "宜阳县"
+		}, {
+			value: "410328",
+			label: "洛宁县"
+		}, {
+			value: "410329",
+			label: "伊川县"
+		}, {
+			value: "410381",
+			label: "偃师市"
+		}, {
+			value: "410371",
+			label: "洛阳高新技术产业开发区"
+		}, {
+			value: "471005",
+			label: "其它区"
+		}]
+	}, {
+		value: "410400",
+		label: "平顶山市",
+		children: [{
+			value: "410402",
+			label: "新华区"
+		}, {
+			value: "410403",
+			label: "卫东区"
+		}, {
+			value: "410404",
+			label: "石龙区"
+		}, {
+			value: "410411",
+			label: "湛河区"
+		}, {
+			value: "410421",
+			label: "宝丰县"
+		}, {
+			value: "410422",
+			label: "叶县"
+		}, {
+			value: "410423",
+			label: "鲁山县"
+		}, {
+			value: "410425",
+			label: "郏县"
+		}, {
+			value: "410481",
+			label: "舞钢市"
+		}, {
+			value: "410482",
+			label: "汝州市"
+		}, {
+			value: "410471",
+			label: "平顶山高新技术产业开发区"
+		}, {
+            value: "410472",
+            label: "平顶山市新城区"
+        }]
+	}, {
+		value: "410500",
+		label: "安阳市",
+		children: [{
+			value: "410502",
+			label: "文峰区"
+		}, {
+			value: "410503",
+			label: "北关区"
+		}, {
+			value: "410505",
+			label: "殷都区"
+		}, {
+			value: "410506",
+			label: "龙安区"
+		}, {
+			value: "410522",
+			label: "安阳县"
+		}, {
+			value: "410523",
+			label: "汤阴县"
+		}, {
+			value: "410526",
+			label: "滑县"
+		}, {
+			value: "410527",
+			label: "内黄县"
+		}, {
+			value: "410581",
+			label: "林州市"
+		}, {
+			value: "410571",
+			label: "安阳高新技术产业开发区"
+		}]
+	}, {
+		value: "410600",
+		label: "鹤壁市",
+		children: [{
+			value: "410602",
+			label: "鹤山区"
+		}, {
+			value: "410603",
+			label: "山城区"
+		}, {
+			value: "410611",
+			label: "淇滨区"
+		}, {
+			value: "410621",
+			label: "浚县"
+		}, {
+			value: "410622",
+			label: "淇县"
+		}, {
+			value: "410671",
+			label: "鹤壁经济技术开发区"
+		}]
+	}, {
+		value: "410700",
+		label: "新乡市",
+		children: [{
+			value: "410702",
+			label: "红旗区"
+		}, {
+			value: "410703",
+			label: "卫滨区"
+		}, {
+			value: "410704",
+			label: "凤泉区"
+		}, {
+			value: "410711",
+			label: "牧野区"
+		}, {
+			value: "410721",
+			label: "新乡县"
+		}, {
+			value: "410724",
+			label: "获嘉县"
+		}, {
+			value: "410725",
+			label: "原阳县"
+		}, {
+			value: "410726",
+			label: "延津县"
+		}, {
+			value: "410727",
+			label: "封丘县"
+		}, {
+			value: "410728",
+			label: "长垣县"
+		}, {
+			value: "410781",
+			label: "卫辉市"
+		}, {
+			value: "410782",
+			label: "辉县市"
+		}, {
+			value: "410771",
+			label: "新乡高新技术产业开发区"
+		}, {
+            value: "410773",
+            label: "新乡市平原城乡一体化示范区"
+        }, {
+            value: "410772",
+            label: "新乡经济技术开发区"
+        }]
+	}, {
+		value: "410800",
+		label: "焦作市",
+		children: [{
+			value: "410802",
+			label: "解放区"
+		}, {
+			value: "410803",
+			label: "中站区"
+		}, {
+			value: "410804",
+			label: "马村区"
+		}, {
+			value: "410811",
+			label: "山阳区"
+		}, {
+			value: "410821",
+			label: "修武县"
+		}, {
+			value: "410822",
+			label: "博爱县"
+		}, {
+			value: "410823",
+			label: "武陟县"
+		}, {
+			value: "410825",
+			label: "温县"
+		}, {
+			value: "410882",
+			label: "沁阳市"
+		}, {
+			value: "410883",
+			label: "孟州市"
+		}, {
+			value: "410871",
+			label: "焦作城乡一体化示范区"
+		}]
+	}, {
+		value: "410900",
+		label: "濮阳市",
+		children: [{
+			value: "410902",
+			label: "华龙区"
+		}, {
+			value: "410922",
+			label: "清丰县"
+		}, {
+			value: "410923",
+			label: "南乐县"
+		}, {
+			value: "410926",
+			label: "范县"
+		}, {
+			value: "410927",
+			label: "台前县"
+		}, {
+			value: "410928",
+			label: "濮阳县"
+		}, {
+			value: "410971",
+			label: "河南濮阳工业园区"
+		}, {
+            value: "410972",
+            label: "濮阳经济技术开发区"
+        }]
+	}, {
+		value: "411000",
+		label: "许昌市",
+		children: [{
+			value: "411002",
+			label: "魏都区"
+		}, {
+			value: "411003",
+			label: "建安区"
+		}, {
+			value: "411024",
+			label: "鄢陵县"
+		}, {
+			value: "411025",
+			label: "襄城县"
+		}, {
+			value: "411081",
+			label: "禹州市"
+		}, {
+			value: "411082",
+			label: "长葛市"
+		}, {
+			value: "411071",
+			label: "许昌经济技术开发区"
+		}]
+	}, {
+		value: "411100",
+		label: "漯河市",
+		children: [{
+			value: "411102",
+			label: "源汇区"
+		}, {
+			value: "411103",
+			label: "郾城区"
+		}, {
+			value: "411104",
+			label: "召陵区"
+		}, {
+			value: "411121",
+			label: "舞阳县"
+		}, {
+			value: "411122",
+			label: "临颍县"
+		}, {
+			value: "411171",
+			label: "漯河经济技术开发区"
+		}]
+	}, {
+		value: "411200",
+		label: "三门峡市",
+		children: [{
+			value: "411202",
+			label: "湖滨区"
+		}, {
+			value: "411221",
+			label: "渑池县"
+		}, {
+			value: "411222",
+			label: "陕县"
+		}, {
+			value: "411224",
+			label: "卢氏县"
+		}, {
+			value: "411281",
+			label: "义马市"
+		}, {
+			value: "411282",
+			label: "灵宝市"
+		}, {
+			value: "411203",
+			label: "陕州区"
+		}, {
+            value: "411271",
+            label: "河南三门峡经济开发区"
+        }]
+	}, {
+		value: "411300",
+		label: "南阳市",
+		children: [{
+			value: "411302",
+			label: "宛城区"
+		}, {
+			value: "411303",
+			label: "卧龙区"
+		}, {
+			value: "411321",
+			label: "南召县"
+		}, {
+			value: "411322",
+			label: "方城县"
+		}, {
+			value: "411323",
+			label: "西峡县"
+		}, {
+			value: "411324",
+			label: "镇平县"
+		}, {
+			value: "411325",
+			label: "内乡县"
+		}, {
+			value: "411326",
+			label: "淅川县"
+		}, {
+			value: "411327",
+			label: "社旗县"
+		}, {
+			value: "411328",
+			label: "唐河县"
+		}, {
+			value: "411329",
+			label: "新野县"
+		}, {
+			value: "411330",
+			label: "桐柏县"
+		}, {
+			value: "411381",
+			label: "邓州市"
+		}, {
+			value: "411371",
+			label: "南阳高新技术产业开发区"
+		}, {
+            value: "411372",
+            label: "南阳市城乡一体化示范区"
+        }]
+	}, {
+		value: "411400",
+		label: "商丘市",
+		children: [{
+			value: "411402",
+			label: "梁园区"
+		}, {
+			value: "411403",
+			label: "睢阳区"
+		}, {
+			value: "411421",
+			label: "民权县"
+		}, {
+			value: "411422",
+			label: "睢县"
+		}, {
+			value: "411423",
+			label: "宁陵县"
+		}, {
+			value: "411424",
+			label: "柘城县"
+		}, {
+			value: "411425",
+			label: "虞城县"
+		}, {
+			value: "411426",
+			label: "夏邑县"
+		}, {
+			value: "411481",
+			label: "永城市"
+		}, {
+			value: "411471",
+			label: "豫东综合物流产业聚集区"
+		}, {
+            value: "411472",
+            label: "河南商丘经济开发"
+        }]
+	}, {
+		value: "411500",
+		label: "信阳市",
+		children: [{
+			value: "411502",
+			label: "浉河区"
+		}, {
+			value: "411503",
+			label: "平桥区"
+		}, {
+			value: "411521",
+			label: "罗山县"
+		}, {
+			value: "411522",
+			label: "光山县"
+		}, {
+			value: "411523",
+			label: "新县"
+		}, {
+			value: "411524",
+			label: "商城县"
+		}, {
+			value: "411525",
+			label: "固始县"
+		}, {
+			value: "411526",
+			label: "潢川县"
+		}, {
+			value: "411527",
+			label: "淮滨县"
+		}, {
+			value: "411528",
+			label: "息县"
+		}, {
+			value: "411571",
+			label: "信阳高新技术产业开发区"
+		}]
+	}, {
+		value: "411600",
+		label: "周口市",
+		children: [{
+			value: "411602",
+			label: "川汇区"
+		}, {
+			value: "411621",
+			label: "扶沟县"
+		}, {
+			value: "411622",
+			label: "西华县"
+		}, {
+			value: "411623",
+			label: "商水县"
+		}, {
+			value: "411624",
+			label: "沈丘县"
+		}, {
+			value: "411625",
+			label: "郸城县"
+		}, {
+			value: "411626",
+			label: "淮阳县"
+		}, {
+			value: "411627",
+			label: "太康县"
+		}, {
+			value: "411628",
+			label: "鹿邑县"
+		}, {
+			value: "411681",
+			label: "项城市"
+		}, {
+			value: "411671",
+			label: "河南周口经济开发区"
+		}]
+	},{
+		value: "411700",
+		label: "驻马店市",
+		children: [{
+			value: "411702",
+			label: "驿城区"
+		}, {
+			value: "411721",
+			label: "西平县"
+		}, {
+			value: "411722",
+			label: "上蔡县"
+		}, {
+			value: "411723",
+			label: "平舆县"
+		}, {
+			value: "411724",
+			label: "正阳县"
+		}, {
+			value: "411725",
+			label: "确山县"
+		}, {
+			value: "411726",
+			label: "泌阳县"
+		}, {
+			value: "411727",
+			label: "汝南县"
+		}, {
+			value: "411628",
+			label: "遂平县"
+		}, {
+            value: "411729",
+            label: "新蔡县"
+        }, {
+            value: "411771",
+            label: "河南驻马店经济开发区"
+        }]
+	}]
+}, {
+	value: '420000',
+	label: '湖北省',
+	children: [{
+		value: "420100",
+		label: "武汉市",
+		children: [{
+			value: "420101",
+			label: "市辖区"
+		}, {
+			value: "420102",
+			label: "江岸区"
+		}, {
+			value: "420103",
+			label: "江汉区"
+		}, {
+			value: "420104",
+			label: "硚口区"
+		}, {
+			value: "420105",
+			label: "汉阳区"
+		}, {
+			value: "420106",
+			label: "武昌区"
+		}, {
+			value: "420107",
+			label: "青山区"
+		}, {
+			value: "420111",
+			label: "洪山区"
+		}, {
+			value: "420112",
+			label: "东西湖区"
+		}, {
+			value: "420113",
+			label: "汉南区"
+		}, {
+			value: "420114",
+			label: "蔡甸区"
+		}, {
+			value: "420115",
+			label: "江夏区"
+		}, {
+			value: "420116",
+			label: "黄陂区"
+		}, {
+			value: "420117",
+			label: "新洲区"
+		}]
+	}, {
+		value: "420200",
+		label: "黄石市",
+		children: [{
+			value: "420201",
+			label: "市辖区"
+		}, {
+			value: "420202",
+			label: "黄石港区"
+		}, {
+			value: "420203",
+			label: "西塞山区"
+		}, {
+			value: "420204",
+			label: "下陆区"
+		}, {
+			value: "420205",
+			label: "铁山区"
+		}, {
+			value: "420222",
+			label: "阳新县"
+		}, {
+			value: "420281",
+			label: "大冶市"
+		}]
+	}, {
+		value: "420300",
+		label: "十堰市",
+		children: [{
+			value: "420301",
+			label: "市辖区"
+		}, {
+			value: "420302",
+			label: "茅箭区"
+		}, {
+			value: "420303",
+			label: "张湾区"
+		}, {
+			value: "420304",
+			label: "郧阳区"
+		}, {
+			value: "420322",
+			label: "郧西县"
+		}, {
+			value: "420323",
+			label: "竹山县"
+		}, {
+			value: "420324",
+			label: "竹溪县"
+		}, {
+			value: "420325",
+			label: "房县"
+		}, {
+			value: "420381",
+			label: "丹江口市"
+		}]
+	}, {
+		value: "420500",
+		label: "宜昌市",
+		children: [{
+			value: "420501",
+			label: "市辖区"
+		}, {
+			value: "420502",
+			label: "西陵区"
+		}, {
+			value: "420503",
+			label: "伍家岗区"
+		}, {
+			value: "420504",
+			label: "点军区"
+		}, {
+			value: "420505",
+			label: "猇亭区"
+		}, {
+			value: "420506",
+			label: "夷陵区"
+		}, {
+			value: "420525",
+			label: "远安县"
+		}, {
+			value: "420526",
+			label: "兴山县"
+		}, {
+			value: "420527",
+			label: "秭归县"
+		}, {
+			value: "420528",
+			label: "长阳土家族自治县"
+		}, {
+			value: "420529",
+			label: "五峰土家族自治县"
+		}, {
+			value: "420581",
+			label: "宜都市"
+		}, {
+			value: "420582",
+			label: "当阳市"
+		}, {
+			value: "420583",
+			label: "枝江市"
+		}]
+	}, {
+		value: "420600",
+		label: "襄阳市",
+		children: [{
+			value: "420601",
+			label: "市辖区"
+		}, {
+			value: "420602",
+			label: "襄城区"
+		}, {
+			value: "420606",
+			label: "樊城区"
+		}, {
+			value: "420607",
+			label: "襄州区"
+		}, {
+			value: "420624",
+			label: "南漳县"
+		}, {
+			value: "420625",
+			label: "谷城县"
+		}, {
+			value: "420626",
+			label: "保康县"
+		}, {
+			value: "420682",
+			label: "老河口市"
+		}, {
+			value: "420683",
+			label: "枣阳市"
+		}, {
+			value: "420684",
+			label: "宜城市"
+		}]
+	}, {
+		value: "420700",
+		label: "鄂州市",
+		children: [{
+			value: "420701",
+			label: "市辖区"
+		}, {
+			value: "420702",
+			label: "梁子湖区"
+		}, {
+			value: "420703",
+			label: "华容区"
+		}, {
+			value: "420704",
+			label: "鄂城区"
+		}]
+	}, {
+		value: "420800",
+		label: "荆门市",
+		children: [{
+			value: "420801",
+			label: "市辖区"
+		}, {
+			value: "420802",
+			label: "东宝区"
+		}, {
+			value: "420804",
+			label: "掇刀区"
+		}, {
+			value: "420821",
+			label: "京山县"
+		}, {
+			value: "420822",
+			label: "沙洋县"
+		}, {
+			value: "420881",
+			label: "钟祥市"
+		}]
+	}, {
+		value: "420900",
+		label: "孝感市",
+		children: [{
+			value: "420901",
+			label: "市辖区"
+		}, {
+			value: "420902",
+			label: "孝南区"
+		}, {
+			value: "420921",
+			label: "孝昌县"
+		}, {
+			value: "420922",
+			label: "大悟县"
+		}, {
+			value: "420923",
+			label: "云梦县"
+		}, {
+			value: "420981",
+			label: "应城市"
+		}, {
+			value: "420982",
+			label: "安陆市"
+		}, {
+			value: "420984",
+			label: "汉川市"
+		}]
+	}, {
+		value: "421000",
+		label: "荆州市",
+		children: [{
+			value: "421001",
+			label: "市辖区"
+		}, {
+			value: "421002",
+			label: "沙市区"
+		}, {
+			value: "421003",
+			label: "荆州区"
+		}, {
+			value: "421022",
+			label: "公安县"
+		}, {
+			value: "421023",
+			label: "监利县"
+		}, {
+			value: "421024",
+			label: "江陵县"
+		}, {
+			value: "421071",
+			label: "荆州经济技术开发区"
+		}, {
+			value: "421081",
+			label: "石首市"
+		}, {
+			value: "421083",
+			label: "洪湖市"
+		}, {
+			value: "421087",
+			label: "松滋市"
+		}]
+	}, {
+		value: "421100",
+		label: "黄冈市",
+		children: [{
+			value: "421101",
+			label: "市辖区"
+		}, {
+			value: "421102",
+			label: "黄州区"
+		}, {
+			value: "421121",
+			label: "团风县"
+		}, {
+			value: "421122",
+			label: "红安县"
+		}, {
+			value: "421123",
+			label: "罗田县"
+		}, {
+			value: "421124",
+			label: "英山县"
+		}, {
+			value: "421125",
+			label: "浠水县"
+		}, {
+			value: "421126",
+			label: "蕲春县"
+		}, {
+			value: "421127",
+			label: "黄梅县"
+		}, {
+			value: "421171",
+			label: "龙感湖管理区"
+		}, {
+			value: "421181",
+			label: "麻城市"
+		}, {
+			value: "421182",
+			label: "武穴市"
+		}]
+	}, {
+		value: "421200",
+		label: "咸宁市",
+		children: [{
+			value: "421201",
+			label: "市辖区"
+		}, {
+			value: "421202",
+			label: "咸安区"
+		}, {
+			value: "421221",
+			label: "嘉鱼县"
+		}, {
+			value: "421222",
+			label: "通城县"
+		}, {
+			value: "421223",
+			label: "崇阳县"
+		}, {
+			value: "421224",
+			label: "通山县"
+		}, {
+			value: "421281",
+			label: "赤壁市"
+		}]
+	}, {
+		value: "421300",
+		label: "随州市",
+		children: [{
+			value: "421301",
+			label: "市辖区"
+		}, {
+			value: "421303",
+			label: "曾都区"
+		}, {
+			value: "421321",
+			label: "随县"
+		}, {
+			value: "421381",
+			label: "广水市"
+		}]
+	}, {
+		value: "422800",
+		label: "恩施土家族苗族自治州",
+		children: [{
+			value: "422801",
+			label: "恩施市"
+		}, {
+			value: "422802",
+			label: "利川市"
+		}, {
+			value: "422822",
+			label: "建始县"
+		}, {
+			value: "422823",
+			label: "巴东县"
+		}, {
+			value: "422825",
+			label: "宣恩县"
+		}, {
+			value: "422826",
+			label: "咸丰县"
+		}, {
+			value: "422827",
+			label: "来凤县"
+		}, {
+			value: "422828",
+			label: "鹤峰县"
+		}]
+	}, {
+		value: "429000",
+		label: "省直辖县级行政区划",
+		children: [{
+			value: "429004",
+			label: "仙桃市"
+		}, {
+			value: "429005",
+			label: "潜江市"
+		}, {
+			value: "429006",
+			label: "天门市"
+		}, {
+			value: "429021",
+			label: "神农架林区"
+		}]
+	}]
+}, {
+	value: '430000',
+	label: '湖南省',
+	children: [{
+		value: "430100",
+		label: "长沙市",
+		children: [{
+			value: "430101",
+			label: "市辖区"
+		}, {
+			value: "430102",
+			label: "芙蓉区"
+		}, {
+			value: "430103",
+			label: "天心区"
+		}, {
+			value: "430104",
+			label: "岳麓区"
+		}, {
+			value: "430105",
+			label: "开福区"
+		}, {
+			value: "430111",
+			label: "雨花区"
+		}, {
+			value: "430112",
+			label: "望城区"
+		}, {
+			value: "430121",
+			label: "长沙县"
+		}, {
+			value: "430181",
+			label: "浏阳市"
+		}, {
+			value: "430182",
+			label: "宁乡市"
+		}]
+	}, {
+		value: "430200",
+		label: "株洲市",
+		children: [{
+			value: "430201",
+			label: "市辖区"
+		}, {
+			value: "430202",
+			label: "荷塘区"
+		}, {
+			value: "430203",
+			label: "芦淞区"
+		}, {
+			value: "430204",
+			label: "石峰区"
+		}, {
+			value: "430211",
+			label: "天元区"
+		}, {
+			value: "430221",
+			label: "株洲县"
+		}, {
+			value: "430223",
+			label: "攸县"
+		}, {
+			value: "430224",
+			label: "茶陵县"
+		}, {
+			value: "430225",
+			label: "炎陵县"
+		}, {
+			value: "430271",
+			label: "云龙示范区"
+		}, {
+			value: "430281",
+			label: "醴陵市"
+		}]
+	}, {
+		value: "430300",
+		label: "湘潭市",
+		children: [{
+			value: "430301",
+			label: "市辖区"
+		}, {
+			value: "430302",
+			label: "雨湖区"
+		}, {
+			value: "430304",
+			label: "岳塘区"
+		}, {
+			value: "430321",
+			label: "湘潭县"
+		}, {
+			value: "430371",
+			label: "湖南湘潭高新技术产业园区"
+		}, {
+			value: "430372",
+			label: "湘潭昭山示范区"
+		}, {
+			value: "430373",
+			label: "湘潭九华示范区"
+		}, {
+			value: "430381",
+			label: "湘乡市"
+		}, {
+			value: "430382",
+			label: "韶山市"
+		}]
+	}, {
+		value: "430400",
+		label: "衡阳市",
+		children: [{
+			value: "430401",
+			label: "市辖区"
+		}, {
+			value: "430405",
+			label: "珠晖区"
+		}, {
+			value: "430406",
+			label: "雁峰区"
+		}, {
+			value: "430407",
+			label: "石鼓区"
+		}, {
+			value: "430408",
+			label: "蒸湘区"
+		}, {
+			value: "430412",
+			label: "南岳区"
+		}, {
+			value: "430421",
+			label: "衡阳县"
+		}, {
+			value: "430422",
+			label: "衡南县"
+		}, {
+			value: "430423",
+			label: "衡山县"
+		}, {
+			value: "430424",
+			label: "衡东县"
+		}, {
+			value: "430426",
+			label: "祁东县"
+		}, {
+			value: "430471",
+			label: "衡阳综合保税区"
+		}, {
+			value: "430472",
+			label: "湖南衡阳高新技术产业园区"
+		}, {
+			value: "430473",
+			label: "湖南衡阳松木经济开发区"
+		}, {
+			value: "430481",
+			label: "耒阳市"
+		}, {
+			value: "430482",
+			label: "常宁市"
+		}]
+	}, {
+		value: "430500",
+		label: "邵阳市",
+		children: [{
+			value: "430501",
+			label: "市辖区"
+		}, {
+			value: "430502",
+			label: "双清区"
+		}, {
+			value: "430503",
+			label: "大祥区"
+		}, {
+			value: "430511",
+			label: "北塔区"
+		}, {
+			value: "430521",
+			label: "邵东县"
+		}, {
+			value: "430522",
+			label: "新邵县"
+		}, {
+			value: "430523",
+			label: "邵阳县"
+		}, {
+			value: "430524",
+			label: "隆回县"
+		}, {
+			value: "430525",
+			label: "洞口县"
+		}, {
+			value: "430527",
+			label: "绥宁县"
+		}, {
+			value: "430528",
+			label: "新宁县"
+		}, {
+			value: "430529",
+			label: "城步苗族自治县"
+		}, {
+			value: "430581",
+			label: "武冈市"
+		}]
+	}, {
+		value: "430600",
+		label: "岳阳市",
+		children: [{
+			value: "430601",
+			label: "市辖区"
+		}, {
+			value: "430602",
+			label: "岳阳楼区"
+		}, {
+			value: "430603",
+			label: "云溪区"
+		}, {
+			value: "430611",
+			label: "君山区"
+		}, {
+			value: "430621",
+			label: "岳阳县"
+		}, {
+			value: "430623",
+			label: "华容县"
+		}, {
+			value: "430624",
+			label: "湘阴县"
+		}, {
+			value: "430626",
+			label: "平江县"
+		}, {
+			value: "430671",
+			label: "岳阳市屈原管理区"
+		}, {
+			value: "430681",
+			label: "汨罗市"
+		}, {
+			value: "430682",
+			label: "临湘市"
+		}]
+	}, {
+		value: "430700",
+		label: "常德市",
+		children: [{
+			value: "430701",
+			label: "市辖区"
+		}, {
+			value: "430702",
+			label: "武陵区"
+		}, {
+			value: "430703",
+			label: "鼎城区"
+		}, {
+			value: "430721",
+			label: "安乡县"
+		}, {
+			value: "430722",
+			label: "汉寿县"
+		}, {
+			value: "430723",
+			label: "澧县"
+		}, {
+			value: "430724",
+			label: "临澧县"
+		}, {
+			value: "430725",
+			label: "桃源县"
+		}, {
+			value: "430726",
+			label: "石门县"
+		}, {
+			value: "430771",
+			label: "常德市西洞庭管理区"
+		}, {
+			value: "430781",
+			label: "津市市"
+		}]
+	}, {
+		value: "430800",
+		label: "张家界市",
+		children: [{
+			value: "430801",
+			label: "市辖区"
+		}, {
+			value: "430802",
+			label: "永定区"
+		}, {
+			value: "430811",
+			label: "武陵源区"
+		}, {
+			value: "430821",
+			label: "慈利县"
+		}, {
+			value: "430822",
+			label: "桑植县"
+		}]
+	}, {
+		value: "430900",
+		label: "益阳市",
+		children: [{
+			value: "430901",
+			label: "市辖区"
+		}, {
+			value: "430902",
+			label: "资阳区"
+		}, {
+			value: "430903",
+			label: "赫山区"
+		}, {
+			value: "430921",
+			label: "南县"
+		}, {
+			value: "430922",
+			label: "桃江县"
+		}, {
+			value: "430923",
+			label: "安化县"
+		}, {
+			value: "430971",
+			label: "益阳市大通湖管理区"
+		}, {
+			value: "430972",
+			label: "湖南益阳高新技术产业园区"
+		}, {
+			value: "430981",
+			label: "沅江市"
+		}]
+	}, {
+		value: "431000",
+		label: "郴州市",
+		children: [{
+			value: "431001",
+			label: "市辖区"
+		}, {
+			value: "431002",
+			label: "北湖区"
+		}, {
+			value: "431003",
+			label: "苏仙区"
+		}, {
+			value: "431021",
+			label: "桂阳县"
+		}, {
+			value: "431022",
+			label: "宜章县"
+		}, {
+			value: "431023",
+			label: "永兴县"
+		}, {
+			value: "431024",
+			label: "嘉禾县"
+		}, {
+			value: "431025",
+			label: "临武县"
+		}, {
+			value: "431026",
+			label: "汝城县"
+		}, {
+			value: "431027",
+			label: "桂东县"
+		}, {
+			value: "431028",
+			label: "安仁县"
+		}, {
+			value: "431081",
+			label: "资兴市"
+		}]
+	}, {
+		value: "431100",
+		label: "永州市",
+		children: [{
+			value: "431101",
+			label: "市辖区"
+		}, {
+			value: "431102",
+			label: "零陵区"
+		}, {
+			value: "431103",
+			label: "冷水滩区"
+		}, {
+			value: "431121",
+			label: "祁阳县"
+		}, {
+			value: "431122",
+			label: "东安县"
+		}, {
+			value: "431123",
+			label: "双牌县"
+		}, {
+			value: "431124",
+			label: "道县"
+		}, {
+			value: "431125",
+			label: "江永县"
+		}, {
+			value: "431126",
+			label: "宁远县"
+		}, {
+			value: "431127",
+			label: "蓝山县"
+		}, {
+			value: "431128",
+			label: "新田县"
+		}, {
+			value: "431129",
+			label: "江华瑶族自治县"
+		}, {
+			value: "431171",
+			label: "永州经济技术开发区"
+		}, {
+			value: "431172",
+			label: "永州市金洞管理区"
+		}, {
+			value: "431173",
+			label: "永州市回龙圩管理区"
+		}]
+	}, {
+		value: "431200",
+		label: "怀化市",
+		children: [{
+			value: "431201",
+			label: "市辖区"
+		}, {
+			value: "431202",
+			label: "鹤城区"
+		}, {
+			value: "431221",
+			label: "中方县"
+		}, {
+			value: "431222",
+			label: "沅陵县"
+		}, {
+			value: "431223",
+			label: "辰溪县"
+		}, {
+			value: "431224",
+			label: "溆浦县"
+		}, {
+			value: "431225",
+			label: "会同县"
+		}, {
+			value: "431226",
+			label: "麻阳苗族自治县"
+		}, {
+			value: "431227",
+			label: "新晃侗族自治县"
+		}, {
+			value: "431228",
+			label: "芷江侗族自治县"
+		}, {
+			value: "431229",
+			label: "靖州苗族侗族自治县"
+		}, {
+			value: "431230",
+			label: "通道侗族自治县"
+		}, {
+			value: "431271",
+			label: "怀化市洪江管理区"
+		}, {
+			value: "431281",
+			label: "洪江市"
+		}]
+	}, {
+		value: "431300",
+		label: "娄底市",
+		children: [{
+			value: "431301",
+			label: "市辖区"
+		}, {
+			value: "431302",
+			label: "娄星区"
+		}, {
+			value: "431321",
+			label: "双峰县"
+		}, {
+			value: "431322",
+			label: "新化县"
+		}, {
+			value: "431381",
+			label: "冷水江市"
+		}, {
+			value: "431382",
+			label: "涟源市"
+		}]
+	}, {
+		value: "433100",
+		label: "湘西土家族苗族自治州",
+		children: [{
+			value: "433101",
+			label: "吉首市"
+		}, {
+			value: "433122",
+			label: "泸溪县"
+		}, {
+			value: "433123",
+			label: "凤凰县"
+		}, {
+			value: "433124",
+			label: "花垣县"
+		}, {
+			value: "433125",
+			label: "保靖县"
+		}, {
+			value: "433126",
+			label: "古丈县"
+		}, {
+			value: "433127",
+			label: "永顺县"
+		}, {
+			value: "433130",
+			label: "龙山县"
+		}, {
+			value: "433172",
+			label: "湖南吉首经济开发区"
+		}, {
+			value: "433173",
+			label: "湖南永顺经济开发区"
+		}]
+	}]
+	}, {
+	value: '440000',
+	label: '广东省',
+	children: [{
+		value: "440100",
+		label: "广州市",
+		children: [{
+			value: "440101",
+			label: "市辖区"
+		}, {
+			value: "440103",
+			label: "荔湾区"
+		}, {
+			value: "440104",
+			label: "越秀区"
+		}, {
+			value: "440105",
+			label: "海珠区"
+		}, {
+			value: "440106",
+			label: "天河区"
+		}, {
+			value: "440111",
+			label: "白云区"
+		}, {
+			value: "440112",
+			label: "黄埔区"
+		}, {
+			value: "440113",
+			label: "番禺区"
+		}, {
+			value: "440114",
+			label: "花都区"
+		}, {
+			value: "440115",
+			label: "南沙区"
+		}, {
+			value: "440117",
+			label: "从化区"
+		}, {
+			value: "440118",
+			label: "增城区"
+		}]
+	}, {
+		value: "440200",
+		label: "韶关市",
+		children: [{
+			value: "440201",
+			label: "市辖区"
+		}, {
+			value: "440203",
+			label: "武江区"
+		}, {
+			value: "440204",
+			label: "浈江区"
+		}, {
+			value: "440205",
+			label: "曲江区"
+		}, {
+			value: "440222",
+			label: "始兴县"
+		}, {
+			value: "440224",
+			label: "仁化县"
+		}, {
+			value: "440229",
+			label: "翁源县"
+		}, {
+			value: "440232",
+			label: "乳源瑶族自治县"
+		}, {
+			value: "440233",
+			label: "新丰县"
+		}, {
+			value: "440281",
+			label: "乐昌市"
+		}, {
+			value: "440282",
+			label: "南雄市"
+		}]
+	}, {
+		value: "440300",
+		label: "深圳市",
+		children: [{
+			value: "440301",
+			label: "市辖区"
+		}, {
+			value: "440303",
+			label: "罗湖区"
+		}, {
+			value: "440304",
+			label: "福田区"
+		}, {
+			value: "440305",
+			label: "南山区"
+		}, {
+			value: "440306",
+			label: "宝安区"
+		}, {
+			value: "440307",
+			label: "龙岗区"
+		}, {
+			value: "440308",
+			label: "盐田区"
+		}, {
+			value: "440309",
+			label: "龙华区"
+		}, {
+			value: "440310",
+			label: "坪山区"
+		}]
+	}, {
+		value: "440400",
+		label: "珠海市",
+		children: [{
+			value: "440401",
+			label: "市辖区"
+		}, {
+			value: "440402",
+			label: "香洲区"
+		}, {
+			value: "440403",
+			label: "斗门区"
+		}, {
+			value: "440404",
+			label: "金湾区"
+		}]
+	}, {
+		value: "440500",
+		label: "汕头市",
+		children: [{
+			value: "440501",
+			label: "市辖区"
+		}, {
+			value: "440507",
+			label: "龙湖区"
+		}, {
+			value: "440511",
+			label: "金平区"
+		}, {
+			value: "440512",
+			label: "濠江区"
+		}, {
+			value: "440513",
+			label: "潮阳区"
+		}, {
+			value: "440514",
+			label: "潮南区"
+		}, {
+			value: "440515",
+			label: "澄海区"
+		}, {
+			value: "440523",
+			label: "南澳县"
+		}]
+	}, {
+		value: "440600",
+		label: "佛山市",
+		children: [{
+			value: "440601",
+			label: "市辖区"
+		}, {
+			value: "440604",
+			label: "禅城区"
+		}, {
+			value: "440605",
+			label: "南海区"
+		}, {
+			value: "440606",
+			label: "顺德区"
+		}, {
+			value: "440607",
+			label: "三水区"
+		}, {
+			value: "440608",
+			label: "高明区"
+		}]
+	}, {
+		value: "440700",
+		label: "江门市",
+		children: [{
+			value: "440701",
+			label: "市辖区"
+		}, {
+			value: "440703",
+			label: "蓬江区"
+		}, {
+			value: "440704",
+			label: "江海区"
+		}, {
+			value: "440705",
+			label: "新会区"
+		}, {
+			value: "440781",
+			label: "台山市"
+		}, {
+			value: "440783",
+			label: "开平市"
+		}, {
+			value: "440784",
+			label: "鹤山市"
+		}, {
+			value: "440785",
+			label: "恩平市"
+		}]
+	}, {
+		value: "440800",
+		label: "湛江市",
+		children: [{
+			value: "440801",
+			label: "市辖区"
+		}, {
+			value: "440802",
+			label: "赤坎区"
+		}, {
+			value: "440803",
+			label: "霞山区"
+		}, {
+			value: "440804",
+			label: "坡头区"
+		}, {
+			value: "440811",
+			label: "麻章区"
+		}, {
+			value: "440823",
+			label: "遂溪县"
+		}, {
+			value: "440825",
+			label: "徐闻县"
+		}, {
+			value: "440881",
+			label: "廉江市"
+		}, {
+			value: "440882",
+			label: "雷州市"
+		}, {
+			value: "440883",
+			label: "吴川市"
+		}]
+	}, {
+		value: "440900",
+		label: "茂名市",
+		children: [{
+			value: "440901",
+			label: "市辖区"
+		}, {
+			value: "440902",
+			label: "茂南区"
+		}, {
+			value: "440904",
+			label: "电白区"
+		}, {
+			value: "440981",
+			label: "高州市"
+		}, {
+			value: "440982",
+			label: "化州市"
+		}, {
+			value: "440983",
+			label: "信宜市"
+		}]
+	}, {
+		value: "441200",
+		label: "肇庆市",
+		children: [{
+			value: "441201",
+			label: "市辖区"
+		}, {
+			value: "441202",
+			label: "端州区"
+		}, {
+			value: "441203",
+			label: "鼎湖区"
+		}, {
+			value: "441204",
+			label: "高要区"
+		}, {
+			value: "441223",
+			label: "广宁县"
+		}, {
+			value: "441224",
+			label: "怀集县"
+		}, {
+			value: "441225",
+			label: "封开县"
+		}, {
+			value: "441226",
+			label: "德庆县"
+		}, {
+			value: "441284",
+			label: "四会市"
+		}]
+	}, {
+		value: "441300",
+		label: "惠州市",
+		children: [{
+			value: "441301",
+			label: "市辖区"
+		}, {
+			value: "441302",
+			label: "惠城区"
+		}, {
+			value: "441303",
+			label: "惠阳区"
+		}, {
+			value: "441322",
+			label: "博罗县"
+		}, {
+			value: "441323",
+			label: "惠东县"
+		}, {
+			value: "441324",
+			label: "龙门县"
+		}]
+	}, {
+		value: "441400",
+		label: "梅州市",
+		children: [{
+			value: "441401",
+			label: "市辖区"
+		}, {
+			value: "441402",
+			label: "梅江区"
+		}, {
+			value: "441403",
+			label: "梅县区"
+		}, {
+			value: "441422",
+			label: "大埔县"
+		}, {
+			value: "441423",
+			label: "丰顺县"
+		}, {
+			value: "441424",
+			label: "五华县"
+		}, {
+			value: "441426",
+			label: "平远县"
+		}, {
+			value: "441427",
+			label: "蕉岭县"
+		}, {
+			value: "441481",
+			label: "兴宁市"
+		}]
+	}, {
+		value: "441500",
+		label: "汕尾市",
+		children: [{
+			value: "441501",
+			label: "市辖区"
+		}, {
+			value: "441502",
+			label: "城区"
+		}, {
+			value: "441521",
+			label: "海丰县"
+		}, {
+			value: "441523",
+			label: "陆河县"
+		}, {
+			value: "441581",
+			label: "陆丰市"
+		}]
+	}, {
+		value: "441600",
+		label: "河源市",
+		children: [{
+			value: "441601",
+			label: "市辖区"
+		}, {
+			value: "441602",
+			label: "源城区"
+		}, {
+			value: "441621",
+			label: "紫金县"
+		}, {
+			value: "441622",
+			label: "龙川县"
+		}, {
+			value: "441623",
+			label: "连平县"
+		}, {
+			value: "441624",
+			label: "和平县"
+		}, {
+			value: "441625",
+			label: "东源县"
+		}]
+	}, {
+		value: "441700",
+		label: "阳江市",
+		children: [{
+			value: "441701",
+			label: "市辖区"
+		}, {
+			value: "441702",
+			label: "江城区"
+		}, {
+			value: "441704",
+			label: "阳东区"
+		}, {
+			value: "441721",
+			label: "阳西县"
+		}, {
+			value: "441781",
+			label: "阳春市"
+		}]
+	}, {
+		value: "441800",
+		label: "清远市",
+		children: [{
+			value: "441801",
+			label: "市辖区"
+		}, {
+			value: "441802",
+			label: "清城区"
+		}, {
+			value: "441803",
+			label: "清新区"
+		}, {
+			value: "441821",
+			label: "佛冈县"
+		}, {
+			value: "441823",
+			label: "阳山县"
+		}, {
+			value: "441825",
+			label: "连山壮族瑶族自治县"
+		}, {
+			value: "441826",
+			label: "连南瑶族自治县"
+		}, {
+			value: "441881",
+			label: "英德市"
+		}, {
+			value: "441882",
+			label: "连州市"
+		}]
+	}, {
+		value: "441900",
+		label: "东莞市"
+	}, {
+		value: "442000",
+		label: "中山市"
+	}, {
+		value: "445100",
+		label: "潮州市",
+		children: [{
+			value: "445101",
+			label: "市辖区"
+		}, {
+			value: "445102",
+			label: "湘桥区"
+		}, {
+			value: "445103",
+			label: "潮安区"
+		}, {
+			value: "445122",
+			label: "饶平县"
+		}]
+	}, {
+		value: "445200",
+		label: "揭阳市",
+		children: [{
+			value: "445201",
+			label: "市辖区"
+		}, {
+			value: "445202",
+			label: "榕城区"
+		}, {
+			value: "445203",
+			label: "揭东区"
+		}, {
+			value: "445222",
+			label: "揭西县"
+		}, {
+			value: "445224",
+			label: "惠来县"
+		}, {
+			value: "445281",
+			label: "普宁市"
+		}]
+	}, {
+		value: "445300",
+		label: "云浮市",
+		children: [{
+			value: "445301",
+			label: "市辖区"
+		}, {
+			value: "445302",
+			label: "云城区"
+		}, {
+			value: "445303",
+			label: "云安区"
+		}, {
+			value: "445321",
+			label: "新兴县"
+		}, {
+			value: "445322",
+			label: "郁南县"
+		}, {
+			value: "445381",
+			label: "罗定市"
+		}]
+	}]
+}, {
+	value: '450000',
+	label: '广西壮族',
+	children: [{
+		value: "450100",
+		label: "南宁市",
+		children: [{
+			value: "450101",
+			label: "市辖区"
+		}, {
+			value: "450102",
+			label: "兴宁区"
+		}, {
+			value: "450103",
+			label: "青秀区"
+		}, {
+			value: "450105",
+			label: "江南区"
+		}, {
+			value: "450107",
+			label: "西乡塘区"
+		}, {
+			value: "450108",
+			label: "良庆区"
+		}, {
+			value: "450109",
+			label: "邕宁区"
+		}, {
+			value: "450110",
+			label: "武鸣区"
+		}, {
+			value: "450123",
+			label: "隆安县"
+		}, {
+			value: "450124",
+			label: "马山县"
+		}, {
+			value: "450125",
+			label: "上林县"
+		}, {
+			value: "450126",
+			label: "宾阳县"
+		}, {
+			value: "450127",
+			label: "横县"
+		}]
+	}, {
+		value: "450200",
+		label: "柳州市",
+		children: [{
+			value: "450201",
+			label: "市辖区"
+		}, {
+			value: "450202",
+			label: "城中区"
+		}, {
+			value: "450203",
+			label: "鱼峰区"
+		}, {
+			value: "450204",
+			label: "柳南区"
+		}, {
+			value: "450205",
+			label: "柳北区"
+		}, {
+			value: "450206",
+			label: "柳江区"
+		}, {
+			value: "450222",
+			label: "柳城县"
+		}, {
+			value: "450223",
+			label: "鹿寨县"
+		}, {
+			value: "450224",
+			label: "融安县"
+		}, {
+			value: "450225",
+			label: "融水苗族自治县"
+		}, {
+			value: "450226",
+			label: "三江侗族自治县"
+		}]
+	}, {
+		value: "450300",
+		label: "桂林市",
+		children: [{
+			value: "450301",
+			label: "市辖区"
+		}, {
+			value: "450302",
+			label: "秀峰区"
+		}, {
+			value: "450303",
+			label: "叠彩区"
+		}, {
+			value: "450304",
+			label: "象山区"
+		}, {
+			value: "450305",
+			label: "七星区"
+		}, {
+			value: "450311",
+			label: "雁山区"
+		}, {
+			value: "450312",
+			label: "临桂区"
+		}, {
+			value: "450321",
+			label: "阳朔县"
+		}, {
+			value: "450323",
+			label: "灵川县"
+		}, {
+			value: "450324",
+			label: "全州县"
+		}, {
+			value: "450325",
+			label: "兴安县"
+		}, {
+			value: "450326",
+			label: "永福县"
+		}, {
+			value: "450327",
+			label: "灌阳县"
+		}, {
+			value: "450328",
+			label: "龙胜各族自治县"
+		}, {
+			value: "450329",
+			label: "资源县"
+		}, {
+			value: "450330",
+			label: "平乐县"
+		}, {
+			value: "450331",
+			label: "荔浦县"
+		}, {
+			value: "450332",
+			label: "恭城瑶族自治县"
+		}]
+	}, {
+		value: "450400",
+		label: "梧州市",
+		children: [{
+			value: "450401",
+			label: "市辖区"
+		}, {
+			value: "450403",
+			label: "万秀区"
+		}, {
+			value: "450405",
+			label: "长洲区"
+		}, {
+			value: "450406",
+			label: "龙圩区"
+		}, {
+			value: "450421",
+			label: "苍梧县"
+		}, {
+			value: "450422",
+			label: "藤县"
+		}, {
+			value: "450423",
+			label: "蒙山县"
+		}, {
+			value: "450481",
+			label: "岑溪市"
+		}]
+	}, {
+		value: "450500",
+		label: "北海市",
+		children: [{
+			value: "450501",
+			label: "市辖区"
+		}, {
+			value: "450502",
+			label: "海城区"
+		}, {
+			value: "450503",
+			label: "银海区"
+		}, {
+			value: "450512",
+			label: "铁山港区"
+		}, {
+			value: "450521",
+			label: "合浦县"
+		}]
+	}, {
+		value: "450600",
+		label: "防城港市",
+		children: [{
+			value: "450601",
+			label: "市辖区"
+		}, {
+			value: "450602",
+			label: "港口区"
+		}, {
+			value: "450603",
+			label: "防城区"
+		}, {
+			value: "450621",
+			label: "上思县"
+		}, {
+			value: "450681",
+			label: "东兴市"
+		}]
+	}, {
+		value: "450700",
+		label: "钦州市",
+		children: [{
+			value: "450701",
+			label: "市辖区"
+		}, {
+			value: "450702",
+			label: "钦南区"
+		}, {
+			value: "450703",
+			label: "钦北区"
+		}, {
+			value: "450721",
+			label: "灵山县"
+		}, {
+			value: "450722",
+			label: "浦北县"
+		}]
+	}, {
+		value: "450800",
+		label: "贵港市",
+		children: [{
+			value: "450801",
+			label: "市辖区"
+		}, {
+			value: "450802",
+			label: "港北区"
+		}, {
+			value: "450803",
+			label: "港南区"
+		}, {
+			value: "450804",
+			label: "覃塘区"
+		}, {
+			value: "450821",
+			label: "平南县"
+		}, {
+			value: "450881",
+			label: "桂平市"
+		}]
+	}, {
+		value: "450900",
+		label: "玉林市",
+		children: [{
+			value: "450901",
+			label: "市辖区"
+		}, {
+			value: "450902",
+			label: "玉州区"
+		}, {
+			value: "450903",
+			label: "福绵区"
+		}, {
+			value: "450921",
+			label: "容县"
+		}, {
+			value: "450922",
+			label: "陆川县"
+		}, {
+			value: "450923",
+			label: "博白县"
+		}, {
+			value: "450924",
+			label: "兴业县"
+		}, {
+			value: "450981",
+			label: "北流市"
+		}]
+	}, {
+		value: "451000",
+		label: "百色市",
+		children: [{
+			value: "451001",
+			label: "市辖区"
+		}, {
+			value: "451002",
+			label: "右江区"
+		}, {
+			value: "451021",
+			label: "田阳县"
+		}, {
+			value: "451022",
+			label: "田东县"
+		}, {
+			value: "451023",
+			label: "平果县"
+		}, {
+			value: "451024",
+			label: "德保县"
+		}, {
+			value: "451026",
+			label: "那坡县"
+		}, {
+			value: "451027",
+			label: "凌云县"
+		}, {
+			value: "451028",
+			label: "乐业县"
+		}, {
+			value: "451029",
+			label: "田林县"
+		}, {
+			value: "451030",
+			label: "西林县"
+		}, {
+			value: "451031",
+			label: "隆林各族自治县"
+		}, {
+			value: "451081",
+			label: "靖西市"
+		}]
+	}, {
+		value: "451100",
+		label: "贺州市",
+		children: [{
+			value: "451101",
+			label: "市辖区"
+		}, {
+			value: "451102",
+			label: "八步区"
+		}, {
+			value: "451103",
+			label: "平桂区"
+		}, {
+			value: "451121",
+			label: "昭平县"
+		}, {
+			value: "451122",
+			label: "钟山县"
+		}, {
+			value: "451123",
+			label: "富川瑶族自治县"
+		}]
+	}, {
+		value: "451200",
+		label: "河池市",
+		children: [{
+			value: "451201",
+			label: "市辖区"
+		}, {
+			value: "451202",
+			label: "金城江区"
+		}, {
+			value: "451203",
+			label: "宜州区"
+		}, {
+			value: "451221",
+			label: "南丹县"
+		}, {
+			value: "451222",
+			label: "天峨县"
+		}, {
+			value: "451223",
+			label: "凤山县"
+		}, {
+			value: "451224",
+			label: "东兰县"
+		}, {
+			value: "451225",
+			label: "罗城仫佬族自治县"
+		}, {
+			value: "451226",
+			label: "环江毛南族自治县"
+		}, {
+			value: "451227",
+			label: "巴马瑶族自治县"
+		}, {
+			value: "451228",
+			label: "都安瑶族自治县"
+		}, {
+			value: "451229",
+			label: "大化瑶族自治县"
+		}]
+	}, {
+		value: "451300",
+		label: "来宾市",
+		children: [{
+			value: "451301",
+			label: "市辖区"
+		}, {
+			value: "451302",
+			label: "兴宾区"
+		}, {
+			value: "451321",
+			label: "忻城县"
+		}, {
+			value: "451322",
+			label: "象州县"
+		}, {
+			value: "451323",
+			label: "武宣县"
+		}, {
+			value: "451324",
+			label: "金秀瑶族自治县"
+		}, {
+			value: "451381",
+			label: "合山市"
+		}]
+	}, {
+		value: "451400",
+		label: "崇左市",
+		children: [{
+			value: "451401",
+			label: "市辖区"
+		}, {
+			value: "451402",
+			label: "江州区"
+		}, {
+			value: "451421",
+			label: "扶绥县"
+		}, {
+			value: "451422",
+			label: "宁明县"
+		}, {
+			value: "451423",
+			label: "龙州县"
+		}, {
+			value: "451424",
+			label: "大新县"
+		}, {
+			value: "451425",
+			label: "天等县"
+		}, {
+			value: "451481",
+			label: "凭祥市"
+		}]
+	}]
+}, {
+	value: '460000',
+	label: '海南省',
+	children: [{
+		value: "460100",
+		label: "海口市",
+		children: [{
+			value: "460101",
+			label: "市辖区"
+		}, {
+			value: "460105",
+			label: "秀英区"
+		}, {
+			value: "460106",
+			label: "龙华区"
+		}, {
+			value: "460107",
+			label: "琼山区"
+		}, {
+			value: "460108",
+			label: "美兰区"
+		}]
+	}, {
+		value: "460200",
+		label: "三亚市",
+		children: [{
+			value: "460201",
+			label: "市辖区"
+		}, {
+			value: "460202",
+			label: "海棠区"
+		}, {
+			value: "460203",
+			label: "吉阳区"
+		}, {
+			value: "460204",
+			label: "天涯区"
+		}, {
+			value: "460205",
+			label: "崖州区"
+		}]
+	}, {
+		value: "460300",
+		label: "三沙市",
+		children: [{
+			value: "460321",
+			label: "西沙群岛"
+		}, {
+			value: "460322",
+			label: "南沙群岛"
+		}, {
+			value: "460323",
+			label: "中沙群岛的岛礁及其海域"
+		}]
+	}, {
+		value: "460400",
+		label: "儋州市"
+	}, {
+		value: "469000",
+		label: "省直辖县级行政区划",
+		children: [{
+			value: "469001",
+			label: "五指山市"
+		}, {
+			value: "469002",
+			label: "琼海市"
+		}, {
+			value: "469005",
+			label: "文昌市"
+		}, {
+			value: "469006",
+			label: "万宁市"
+		}, {
+			value: "469007",
+			label: "东方市"
+		}, {
+			value: "469021",
+			label: "定安县"
+		}, {
+			value: "469022",
+			label: "屯昌县"
+		}, {
+			value: "469023",
+			label: "澄迈县"
+		}, {
+			value: "469024",
+			label: "临高县"
+		}, {
+			value: "469025",
+			label: "白沙黎族自治县"
+		}, {
+			value: "469026",
+			label: "昌江黎族自治县"
+		}, {
+			value: "469027",
+			label: "乐东黎族自治县"
+		}, {
+			value: "469028",
+			label: "陵水黎族自治县"
+		}, {
+			value: "469029",
+			label: "保亭黎族苗族自治县"
+		}, {
+			value: "469030",
+			label: "琼中黎族苗族自治县"
+		}]
+	}]
+}, {
+	value: '500000',
+	label: '重庆',
+	children: [{
+		value: "500100",
+		label: "市辖区",
+		children: [{
+			value: "500101",
+			label: "万州区"
+		}, {
+			value: "500102",
+			label: "涪陵区"
+		}, {
+			value: "500103",
+			label: "渝中区"
+		}, {
+			value: "500104",
+			label: "大渡口区"
+		}, {
+			value: "500105",
+			label: "江北区"
+		}, {
+			value: "500106",
+			label: "沙坪坝区"
+		}, {
+			value: "500107",
+			label: "九龙坡区"
+		}, {
+			value: "500108",
+			label: "南岸区"
+		}, {
+			value: "500109",
+			label: "北碚区"
+		}, {
+			value: "500110",
+			label: "綦江区"
+		}, {
+			value: "500111",
+			label: "大足区"
+		}, {
+			value: "500112",
+			label: "渝北区"
+		}, {
+			value: "500113",
+			label: "巴南区"
+		}, {
+			value: "500114",
+			label: "黔江区"
+		}, {
+			value: "500115",
+			label: "长寿区"
+		}, {
+			value: "500116",
+			label: "江津区"
+		}, {
+			value: "500117",
+			label: "合川区"
+		}, {
+			value: "500118",
+			label: "永川区"
+		}, {
+			value: "500119",
+			label: "南川区"
+		}, {
+			value: "500120",
+			label: "璧山区"
+		}, {
+			value: "500151",
+			label: "铜梁区"
+		}, {
+			value: "500152",
+			label: "潼南区"
+		}, {
+			value: "500153",
+			label: "荣昌区"
+		}, {
+			value: "500154",
+			label: "开州区"
+		}, {
+			value: "500155",
+			label: "梁平区"
+		}, {
+			value: "500156",
+			label: "武隆区"
+		}]
+	}, {
+		value: "500200",
+		label: "县",
+		children: [{
+			value: "500229",
+			label: "城口县"
+		}, {
+			value: "500230",
+			label: "丰都县"
+		}, {
+			value: "500231",
+			label: "垫江县"
+		}, {
+			value: "500233",
+			label: "忠县"
+		}, {
+			value: "500235",
+			label: "云阳县"
+		}, {
+			value: "500236",
+			label: "奉节县"
+		}, {
+			value: "500237",
+			label: "巫山县"
+		}, {
+			value: "500238",
+			label: "巫溪县"
+		}, {
+			value: "500240",
+			label: "石柱土家族自治县"
+		}, {
+			value: "500241",
+			label: "秀山土家族苗族自治县"
+		}, {
+			value: "500242",
+			label: "酉阳土家族苗族自治县"
+		}, {
+			value: "500243",
+			label: "彭水苗族土家族自治县"
+		}]
+	}]
+}, {
+	value: '510000',
+	label: '四川省',
+	children: [{
+		value: "510100",
+		label: "成都市",
+		children: [{
+			value: "510101",
+			label: "市辖区"
+		}, {
+			value: "510104",
+			label: "锦江区"
+		}, {
+			value: "510105",
+			label: "青羊区"
+		}, {
+			value: "510106",
+			label: "金牛区"
+		}, {
+			value: "510107",
+			label: "武侯区"
+		}, {
+			value: "510108",
+			label: "成华区"
+		}, {
+			value: "510112",
+			label: "龙泉驿区"
+		}, {
+			value: "510113",
+			label: "青白江区"
+		}, {
+			value: "510114",
+			label: "新都区"
+		}, {
+			value: "510115",
+			label: "温江区"
+		}, {
+			value: "510116",
+			label: "双流区"
+		}, {
+			value: "510117",
+			label: "郫都区"
+		}, {
+			value: "510121",
+			label: "金堂县"
+		}, {
+			value: "510129",
+			label: "大邑县"
+		}, {
+			value: "510131",
+			label: "蒲江县"
+		}, {
+			value: "510132",
+			label: "新津县"
+		}, {
+			value: "510181",
+			label: "都江堰市"
+		}, {
+			value: "510182",
+			label: "彭州市"
+		}, {
+			value: "510183",
+			label: "邛崃市"
+		}, {
+			value: "510184",
+			label: "崇州市"
+		}, {
+			value: "510185",
+			label: "简阳市"
+		}]
+	}, {
+		value: "510300",
+		label: "自贡市",
+		children: [{
+			value: "510301",
+			label: "市辖区"
+		}, {
+			value: "510302",
+			label: "自流井区"
+		}, {
+			value: "510303",
+			label: "贡井区"
+		}, {
+			value: "510304",
+			label: "大安区"
+		}, {
+			value: "510311",
+			label: "沿滩区"
+		}, {
+			value: "510321",
+			label: "荣县"
+		}, {
+			value: "510322",
+			label: "富顺县"
+		}]
+	}, {
+		value: "510400",
+		label: "攀枝花市",
+		children: [{
+			value: "510401",
+			label: "市辖区"
+		}, {
+			value: "510402",
+			label: "东区"
+		}, {
+			value: "510403",
+			label: "西区"
+		}, {
+			value: "510411",
+			label: "仁和区"
+		}, {
+			value: "510421",
+			label: "米易县"
+		}, {
+			value: "510422",
+			label: "盐边县"
+		}]
+	}, {
+		value: "510500",
+		label: "泸州市",
+		children: [{
+			value: "510501",
+			label: "市辖区"
+		}, {
+			value: "510502",
+			label: "江阳区"
+		}, {
+			value: "510503",
+			label: "纳溪区"
+		}, {
+			value: "510504",
+			label: "龙马潭区"
+		}, {
+			value: "510521",
+			label: "泸县"
+		}, {
+			value: "510522",
+			label: "合江县"
+		}, {
+			value: "510524",
+			label: "叙永县"
+		}, {
+			value: "510525",
+			label: "古蔺县"
+		}]
+	}, {
+		value: "510600",
+		label: "德阳市",
+		children: [{
+			value: "510601",
+			label: "市辖区"
+		}, {
+			value: "510603",
+			label: "旌阳区"
+		}, {
+			value: "510604",
+			label: "罗江区"
+		}, {
+			value: "510623",
+			label: "中江县"
+		}, {
+			value: "510681",
+			label: "广汉市"
+		}, {
+			value: "510682",
+			label: "什邡市"
+		}, {
+			value: "510683",
+			label: "绵竹市"
+		}]
+	}, {
+		value: "510700",
+		label: "绵阳市",
+		children: [{
+			value: "510701",
+			label: "市辖区"
+		}, {
+			value: "510703",
+			label: "涪城区"
+		}, {
+			value: "510704",
+			label: "游仙区"
+		}, {
+			value: "510705",
+			label: "安州区"
+		}, {
+			value: "510722",
+			label: "三台县"
+		}, {
+			value: "510723",
+			label: "盐亭县"
+		}, {
+			value: "510725",
+			label: "梓潼县"
+		}, {
+			value: "510726",
+			label: "北川羌族自治县"
+		}, {
+			value: "510727",
+			label: "平武县"
+		}, {
+			value: "510781",
+			label: "江油市"
+		}]
+	}, {
+		value: "510800",
+		label: "广元市",
+		children: [{
+			value: "510801",
+			label: "市辖区"
+		}, {
+			value: "510802",
+			label: "利州区"
+		}, {
+			value: "510811",
+			label: "昭化区"
+		}, {
+			value: "510812",
+			label: "朝天区"
+		}, {
+			value: "510821",
+			label: "旺苍县"
+		}, {
+			value: "510822",
+			label: "青川县"
+		}, {
+			value: "510823",
+			label: "剑阁县"
+		}, {
+			value: "510824",
+			label: "苍溪县"
+		}]
+	}, {
+		value: "510900",
+		label: "遂宁市",
+		children: [{
+			value: "510901",
+			label: "市辖区"
+		}, {
+			value: "510903",
+			label: "船山区"
+		}, {
+			value: "510904",
+			label: "安居区"
+		}, {
+			value: "510921",
+			label: "蓬溪县"
+		}, {
+			value: "510922",
+			label: "射洪县"
+		}, {
+			value: "510923",
+			label: "大英县"
+		}]
+	}, {
+		value: "511000",
+		label: "内江市",
+		children: [{
+			value: "511001",
+			label: "市辖区"
+		}, {
+			value: "511002",
+			label: "市中区"
+		}, {
+			value: "511011",
+			label: "东兴区"
+		}, {
+			value: "511024",
+			label: "威远县"
+		}, {
+			value: "511025",
+			label: "资中县"
+		}, {
+			value: "511071",
+			label: "内江经济开发区"
+		}, {
+			value: "511083",
+			label: "隆昌市"
+		}]
+	}, {
+		value: "511100",
+		label: "乐山市",
+		children: [{
+			value: "511101",
+			label: "市辖区"
+		}, {
+			value: "511102",
+			label: "市中区"
+		}, {
+			value: "511111",
+			label: "沙湾区"
+		}, {
+			value: "511112",
+			label: "五通桥区"
+		}, {
+			value: "511113",
+			label: "金口河区"
+		}, {
+			value: "511123",
+			label: "犍为县"
+		}, {
+			value: "511124",
+			label: "井研县"
+		}, {
+			value: "511126",
+			label: "夹江县"
+		}, {
+			value: "511129",
+			label: "沐川县"
+		}, {
+			value: "511132",
+			label: "峨边彝族自治县"
+		}, {
+			value: "511133",
+			label: "马边彝族自治县"
+		}, {
+			value: "511181",
+			label: "峨眉山市"
+		}]
+	}, {
+		value: "511300",
+		label: "南充市",
+		children: [{
+			value: "511301",
+			label: "市辖区"
+		}, {
+			value: "511302",
+			label: "顺庆区"
+		}, {
+			value: "511303",
+			label: "高坪区"
+		}, {
+			value: "511304",
+			label: "嘉陵区"
+		}, {
+			value: "511321",
+			label: "南部县"
+		}, {
+			value: "511322",
+			label: "营山县"
+		}, {
+			value: "511323",
+			label: "蓬安县"
+		}, {
+			value: "511324",
+			label: "仪陇县"
+		}, {
+			value: "511325",
+			label: "西充县"
+		}, {
+			value: "511381",
+			label: "阆中市"
+		}]
+	}, {
+		value: "511400",
+		label: "眉山市",
+		children: [{
+			value: "511401",
+			label: "市辖区"
+		}, {
+			value: "511402",
+			label: "东坡区"
+		}, {
+			value: "511403",
+			label: "彭山区"
+		}, {
+			value: "511421",
+			label: "仁寿县"
+		}, {
+			value: "511423",
+			label: "洪雅县"
+		}, {
+			value: "511424",
+			label: "丹棱县"
+		}, {
+			value: "511425",
+			label: "青神县"
+		}]
+	}, {
+		value: "511500",
+		label: "宜宾市",
+		children: [{
+			value: "511501",
+			label: "市辖区"
+		}, {
+			value: "511502",
+			label: "翠屏区"
+		}, {
+			value: "511503",
+			label: "南溪区"
+		}, {
+			value: "511521",
+			label: "宜宾县"
+		}, {
+			value: "511523",
+			label: "江安县"
+		}, {
+			value: "511524",
+			label: "长宁县"
+		}, {
+			value: "511525",
+			label: "高县"
+		}, {
+			value: "511526",
+			label: "珙县"
+		}, {
+			value: "511527",
+			label: "筠连县"
+		}, {
+			value: "511528",
+			label: "兴文县"
+		}, {
+			value: "511529",
+			label: "屏山县"
+		}]
+	}, {
+		value: "511600",
+		label: "广安市",
+		children: [{
+			value: "511601",
+			label: "市辖区"
+		}, {
+			value: "511602",
+			label: "广安区"
+		}, {
+			value: "511603",
+			label: "前锋区"
+		}, {
+			value: "511621",
+			label: "岳池县"
+		}, {
+			value: "511622",
+			label: "武胜县"
+		}, {
+			value: "511623",
+			label: "邻水县"
+		}, {
+			value: "511681",
+			label: "华蓥市"
+		}]
+	}, {
+		value: "511700",
+		label: "达州市",
+		children: [{
+			value: "511701",
+			label: "市辖区"
+		}, {
+			value: "511702",
+			label: "通川区"
+		}, {
+			value: "511703",
+			label: "达川区"
+		}, {
+			value: "511722",
+			label: "宣汉县"
+		}, {
+			value: "511723",
+			label: "开江县"
+		}, {
+			value: "511724",
+			label: "大竹县"
+		}, {
+			value: "511725",
+			label: "渠县"
+		}, {
+			value: "511771",
+			label: "达州经济开发区"
+		}, {
+			value: "511781",
+			label: "万源市"
+		}]
+	}, {
+		value: "511800",
+		label: "雅安市",
+		children: [{
+			value: "511801",
+			label: "市辖区"
+		}, {
+			value: "511802",
+			label: "雨城区"
+		}, {
+			value: "511803",
+			label: "名山区"
+		}, {
+			value: "511822",
+			label: "荥经县"
+		}, {
+			value: "511823",
+			label: "汉源县"
+		}, {
+			value: "511824",
+			label: "石棉县"
+		}, {
+			value: "511825",
+			label: "天全县"
+		}, {
+			value: "511826",
+			label: "芦山县"
+		}, {
+			value: "511827",
+			label: "宝兴县"
+		}]
+	}, {
+		value: "511900",
+		label: "巴中市",
+		children: [{
+			value: "511901",
+			label: "市辖区"
+		}, {
+			value: "511902",
+			label: "巴州区"
+		}, {
+			value: "511903",
+			label: "恩阳区"
+		}, {
+			value: "511921",
+			label: "通江县"
+		}, {
+			value: "511922",
+			label: "南江县"
+		}, {
+			value: "511923",
+			label: "平昌县"
+		}, {
+			value: "511971",
+			label: "巴中经济开发区"
+		}]
+	}, {
+		value: "512000",
+		label: "资阳市",
+		children: [{
+			value: "512001",
+			label: "市辖区"
+		}, {
+			value: "512002",
+			label: "雁江区"
+		}, {
+			value: "512021",
+			label: "安岳县"
+		}, {
+			value: "512022",
+			label: "乐至县"
+		}]
+	}, {
+		value: "513200",
+		label: "阿坝藏族羌族自治州",
+		children: [{
+			value: "513201",
+			label: "马尔康市"
+		}, {
+			value: "513221",
+			label: "汶川县"
+		}, {
+			value: "513222",
+			label: "理县"
+		}, {
+			value: "513223",
+			label: "茂县"
+		}, {
+			value: "513224",
+			label: "松潘县"
+		}, {
+			value: "513225",
+			label: "九寨沟县"
+		}, {
+			value: "513226",
+			label: "金川县"
+		}, {
+			value: "513227",
+			label: "小金县"
+		}, {
+			value: "513228",
+			label: "黑水县"
+		}, {
+			value: "513230",
+			label: "壤塘县"
+		}, {
+			value: "513231",
+			label: "阿坝县"
+		}, {
+			value: "513232",
+			label: "若尔盖县"
+		}, {
+			value: "513233",
+			label: "红原县"
+		}]
+	}, {
+		value: "513300",
+		label: "甘孜藏族自治州",
+		children: [{
+			value: "513301",
+			label: "康定市"
+		}, {
+			value: "513322",
+			label: "泸定县"
+		}, {
+			value: "513323",
+			label: "丹巴县"
+		}, {
+			value: "513324",
+			label: "九龙县"
+		}, {
+			value: "513325",
+			label: "雅江县"
+		}, {
+			value: "513326",
+			label: "道孚县"
+		}, {
+			value: "513327",
+			label: "炉霍县"
+		}, {
+			value: "513328",
+			label: "甘孜县"
+		}, {
+			value: "513329",
+			label: "新龙县"
+		}, {
+			value: "513330",
+			label: "德格县"
+		}, {
+			value: "513331",
+			label: "白玉县"
+		}, {
+			value: "513332",
+			label: "石渠县"
+		}, {
+			value: "513333",
+			label: "色达县"
+		}, {
+			value: "513334",
+			label: "理塘县"
+		}, {
+			value: "513335",
+			label: "巴塘县"
+		}, {
+			value: "513336",
+			label: "乡城县"
+		}, {
+			value: "513337",
+			label: "稻城县"
+		}, {
+			value: "513338",
+			label: "得荣县"
+		}]
+	}, {
+		value: "513400",
+		label: "凉山彝族自治州",
+		children: [{
+			value: "513401",
+			label: "西昌市"
+		}, {
+			value: "513422",
+			label: "木里藏族自治县"
+		}, {
+			value: "513423",
+			label: "盐源县"
+		}, {
+			value: "513424",
+			label: "德昌县"
+		}, {
+			value: "513425",
+			label: "会理县"
+		}, {
+			value: "513426",
+			label: "会东县"
+		}, {
+			value: "513427",
+			label: "宁南县"
+		}, {
+			value: "513428",
+			label: "普格县"
+		}, {
+			value: "513429",
+			label: "布拖县"
+		}, {
+			value: "513430",
+			label: "金阳县"
+		}, {
+			value: "513431",
+			label: "昭觉县"
+		}, {
+			value: "513432",
+			label: "喜德县"
+		}, {
+			value: "513433",
+			label: "冕宁县"
+		}, {
+			value: "513434",
+			label: "越西县"
+		}, {
+			value: "513435",
+			label: "甘洛县"
+		}, {
+			value: "513436",
+			label: "美姑县"
+		}, {
+			value: "513437",
+			label: "雷波县"
+		}]
+	}]
+}, {
+	value: '520000',
+	label: '贵州省',
+	children: [{
+		value: "520100",
+		label: "贵阳市",
+		children: [{
+			value: "520101",
+			label: "市辖区"
+		}, {
+			value: "520102",
+			label: "南明区"
+		}, {
+			value: "520103",
+			label: "云岩区"
+		}, {
+			value: "520111",
+			label: "花溪区"
+		}, {
+			value: "520112",
+			label: "乌当区"
+		}, {
+			value: "520113",
+			label: "白云区"
+		}, {
+			value: "520115",
+			label: "观山湖区"
+		}, {
+			value: "520121",
+			label: "开阳县"
+		}, {
+			value: "520122",
+			label: "息烽县"
+		}, {
+			value: "520123",
+			label: "修文县"
+		}, {
+			value: "520181",
+			label: "清镇市"
+		}]
+	}, {
+		value: "520200",
+		label: "六盘水市",
+		children: [{
+			value: "520201",
+			label: "钟山区"
+		}, {
+			value: "520203",
+			label: "六枝特区"
+		}, {
+			value: "520221",
+			label: "水城县"
+		}, {
+			value: "520281",
+			label: "盘州市"
+		}]
+	}, {
+		value: "520300",
+		label: "遵义市",
+		children: [{
+			value: "520301",
+			label: "市辖区"
+		}, {
+			value: "520302",
+			label: "红花岗区"
+		}, {
+			value: "520303",
+			label: "汇川区"
+		}, {
+			value: "520304",
+			label: "播州区"
+		}, {
+			value: "520322",
+			label: "桐梓县"
+		}, {
+			value: "520323",
+			label: "绥阳县"
+		}, {
+			value: "520324",
+			label: "正安县"
+		}, {
+			value: "520325",
+			label: "道真仡佬族苗族自治县"
+		}, {
+			value: "520326",
+			label: "务川仡佬族苗族自治县"
+		}, {
+			value: "520327",
+			label: "凤冈县"
+		}, {
+			value: "520328",
+			label: "湄潭县"
+		}, {
+			value: "520329",
+			label: "余庆县"
+		}, {
+			value: "520330",
+			label: "习水县"
+		}, {
+			value: "520381",
+			label: "赤水市"
+		}, {
+			value: "520382",
+			label: "仁怀市"
+		}]
+	}, {
+		value: "520400",
+		label: "安顺市",
+		children: [{
+			value: "520401",
+			label: "市辖区"
+		}, {
+			value: "520402",
+			label: "西秀区"
+		}, {
+			value: "520403",
+			label: "平坝区"
+		}, {
+			value: "520422",
+			label: "普定县"
+		}, {
+			value: "520423",
+			label: "镇宁布依族苗族自治县"
+		}, {
+			value: "520424",
+			label: "关岭布依族苗族自治县"
+		}, {
+			value: "520425",
+			label: "紫云苗族布依族自治县"
+		}]
+	}, {
+		value: "520500",
+		label: "毕节市",
+		children: [{
+			value: "520501",
+			label: "市辖区"
+		}, {
+			value: "520502",
+			label: "七星关区"
+		}, {
+			value: "520521",
+			label: "大方县"
+		}, {
+			value: "520522",
+			label: "黔西县"
+		}, {
+			value: "520523",
+			label: "金沙县"
+		}, {
+			value: "520524",
+			label: "织金县"
+		}, {
+			value: "520525",
+			label: "纳雍县"
+		}, {
+			value: "520526",
+			label: "威宁彝族回族苗族自治县"
+		}, {
+			value: "520527",
+			label: "赫章县"
+		}]
+	}, {
+		value: "520600",
+		label: "铜仁市",
+		children: [{
+			value: "520601",
+			label: "市辖区"
+		}, {
+			value: "520602",
+			label: "碧江区"
+		}, {
+			value: "520603",
+			label: "万山区"
+		}, {
+			value: "520621",
+			label: "江口县"
+		}, {
+			value: "520622",
+			label: "玉屏侗族自治县"
+		}, {
+			value: "520623",
+			label: "石阡县"
+		}, {
+			value: "520624",
+			label: "思南县"
+		}, {
+			value: "520625",
+			label: "印江土家族苗族自治县"
+		}, {
+			value: "520626",
+			label: "德江县"
+		}, {
+			value: "520627",
+			label: "沿河土家族自治县"
+		}, {
+			value: "520628",
+			label: "松桃苗族自治县"
+		}]
+	}, {
+		value: "522300",
+		label: "黔西南布依族苗族自治州",
+		children: [{
+			value: "522301",
+			label: "兴义市"
+		}, {
+			value: "522322",
+			label: "兴仁县"
+		}, {
+			value: "522323",
+			label: "普安县"
+		}, {
+			value: "522324",
+			label: "晴隆县"
+		}, {
+			value: "522325",
+			label: "贞丰县"
+		}, {
+			value: "522326",
+			label: "望谟县"
+		}, {
+			value: "522327",
+			label: "册亨县"
+		}, {
+			value: "522328",
+			label: "安龙县"
+		}]
+	}, {
+		value: "522600",
+		label: "黔东南苗族侗族自治州",
+		children: [{
+			value: "522601",
+			label: "凯里市"
+		}, {
+			value: "522622",
+			label: "黄平县"
+		}, {
+			value: "522623",
+			label: "施秉县"
+		}, {
+			value: "522624",
+			label: "三穗县"
+		}, {
+			value: "522625",
+			label: "镇远县"
+		}, {
+			value: "522626",
+			label: "岑巩县"
+		}, {
+			value: "522627",
+			label: "天柱县"
+		}, {
+			value: "522628",
+			label: "锦屏县"
+		}, {
+			value: "522629",
+			label: "剑河县"
+		}, {
+			value: "522630",
+			label: "台江县"
+		}, {
+			value: "522631",
+			label: "黎平县"
+		}, {
+			value: "522632",
+			label: "榕江县"
+		}, {
+			value: "522633",
+			label: "从江县"
+		}, {
+			value: "522634",
+			label: "雷山县"
+		}, {
+			value: "522635",
+			label: "麻江县"
+		}, {
+			value: "522636",
+			label: "丹寨县"
+		}]
+	}, {
+		value: "522700",
+		label: "黔南布依族苗族自治州",
+		children: [{
+			value: "522701",
+			label: "都匀市"
+		}, {
+			value: "522702",
+			label: "福泉市"
+		}, {
+			value: "522722",
+			label: "荔波县"
+		}, {
+			value: "522723",
+			label: "贵定县"
+		}, {
+			value: "522725",
+			label: "瓮安县"
+		}, {
+			value: "522726",
+			label: "独山县"
+		}, {
+			value: "522727",
+			label: "平塘县"
+		}, {
+			value: "522728",
+			label: "罗甸县"
+		}, {
+			value: "522729",
+			label: "长顺县"
+		}, {
+			value: "522730",
+			label: "龙里县"
+		}, {
+			value: "522731",
+			label: "惠水县"
+		}, {
+			value: "522732",
+			label: "三都水族自治县"
+		}]
+	}]
+}, {
+	value: '530000',
+	label: '云南省',
+	children: [{
+		value: "530100",
+		label: "昆明市",
+		children: [{
+			value: "530101",
+			label: "市辖区"
+		}, {
+			value: "530102",
+			label: "五华区"
+		}, {
+			value: "530103",
+			label: "盘龙区"
+		}, {
+			value: "530111",
+			label: "官渡区"
+		}, {
+			value: "530112",
+			label: "西山区"
+		}, {
+			value: "530113",
+			label: "东川区"
+		}, {
+			value: "530114",
+			label: "呈贡区"
+		}, {
+			value: "530115",
+			label: "晋宁区"
+		}, {
+			value: "530124",
+			label: "富民县"
+		}, {
+			value: "530125",
+			label: "宜良县"
+		}, {
+			value: "530126",
+			label: "石林彝族自治县"
+		}, {
+			value: "530127",
+			label: "嵩明县"
+		}, {
+			value: "530128",
+			label: "禄劝彝族苗族自治县"
+		}, {
+			value: "530129",
+			label: "寻甸回族彝族自治县"
+		}, {
+			value: "530181",
+			label: "安宁市"
+		}]
+	}, {
+		value: "530300",
+		label: "曲靖市",
+		children: [{
+			value: "530301",
+			label: "市辖区"
+		}, {
+			value: "530302",
+			label: "麒麟区"
+		}, {
+			value: "530303",
+			label: "沾益区"
+		}, {
+			value: "530321",
+			label: "马龙县"
+		}, {
+			value: "530322",
+			label: "陆良县"
+		}, {
+			value: "530323",
+			label: "师宗县"
+		}, {
+			value: "530324",
+			label: "罗平县"
+		}, {
+			value: "530325",
+			label: "富源县"
+		}, {
+			value: "530326",
+			label: "会泽县"
+		}, {
+			value: "530381",
+			label: "宣威市"
+		}]
+	}, {
+		value: "530400",
+		label: "玉溪市",
+		children: [{
+			value: "530401",
+			label: "市辖区"
+		}, {
+			value: "530402",
+			label: "红塔区"
+		}, {
+			value: "530403",
+			label: "江川区"
+		}, {
+			value: "530422",
+			label: "澄江县"
+		}, {
+			value: "530423",
+			label: "通海县"
+		}, {
+			value: "530424",
+			label: "华宁县"
+		}, {
+			value: "530425",
+			label: "易门县"
+		}, {
+			value: "530426",
+			label: "峨山彝族自治县"
+		}, {
+			value: "530427",
+			label: "新平彝族傣族自治县"
+		}, {
+			value: "530428",
+			label: "元江哈尼族彝族傣族自治县"
+		}]
+	}, {
+		value: "530500",
+		label: "保山市",
+		children: [{
+			value: "530501",
+			label: "市辖区"
+		}, {
+			value: "530502",
+			label: "隆阳区"
+		}, {
+			value: "530521",
+			label: "施甸县"
+		}, {
+			value: "530523",
+			label: "龙陵县"
+		}, {
+			value: "530524",
+			label: "昌宁县"
+		}, {
+			value: "530581",
+			label: "腾冲市"
+		}]
+	}, {
+		value: "530600",
+		label: "昭通市",
+		children: [{
+			value: "530601",
+			label: "市辖区"
+		}, {
+			value: "530602",
+			label: "昭阳区"
+		}, {
+			value: "530621",
+			label: "鲁甸县"
+		}, {
+			value: "530622",
+			label: "巧家县"
+		}, {
+			value: "530623",
+			label: "盐津县"
+		}, {
+			value: "530624",
+			label: "大关县"
+		}, {
+			value: "530625",
+			label: "永善县"
+		}, {
+			value: "530626",
+			label: "绥江县"
+		}, {
+			value: "530627",
+			label: "镇雄县"
+		}, {
+			value: "530628",
+			label: "彝良县"
+		}, {
+			value: "530629",
+			label: "威信县"
+		}, {
+			value: "530630",
+			label: "水富县"
+		}]
+	}, {
+		value: "530700",
+		label: "丽江市",
+		children: [{
+			value: "530701",
+			label: "市辖区"
+		}, {
+			value: "530702",
+			label: "古城区"
+		}, {
+			value: "530721",
+			label: "玉龙纳西族自治县"
+		}, {
+			value: "530722",
+			label: "永胜县"
+		}, {
+			value: "530723",
+			label: "华坪县"
+		}, {
+			value: "530724",
+			label: "宁蒗彝族自治县"
+		}]
+	}, {
+		value: "530800",
+		label: "普洱市",
+		children: [{
+			value: "530801",
+			label: "市辖区"
+		}, {
+			value: "530802",
+			label: "思茅区"
+		}, {
+			value: "530821",
+			label: "宁洱哈尼族彝族自治县"
+		}, {
+			value: "530822",
+			label: "墨江哈尼族自治县"
+		}, {
+			value: "530823",
+			label: "景东彝族自治县"
+		}, {
+			value: "530824",
+			label: "景谷傣族彝族自治县"
+		}, {
+			value: "530825",
+			label: "镇沅彝族哈尼族拉祜族自治县"
+		}, {
+			value: "530826",
+			label: "江城哈尼族彝族自治县"
+		}, {
+			value: "530827",
+			label: "孟连傣族拉祜族佤族自治县"
+		}, {
+			value: "530828",
+			label: "澜沧拉祜族自治县"
+		}, {
+			value: "530829",
+			label: "西盟佤族自治县"
+		}]
+	}, {
+		value: "530900",
+		label: "临沧市",
+		children: [{
+			value: "530901",
+			label: "市辖区"
+		}, {
+			value: "530902",
+			label: "临翔区"
+		}, {
+			value: "530921",
+			label: "凤庆县"
+		}, {
+			value: "530922",
+			label: "云县"
+		}, {
+			value: "530923",
+			label: "永德县"
+		}, {
+			value: "530924",
+			label: "镇康县"
+		}, {
+			value: "530925",
+			label: "双江拉祜族佤族布朗族傣族自治县"
+		}, {
+			value: "530926",
+			label: "耿马傣族佤族自治县"
+		}, {
+			value: "530927",
+			label: "沧源佤族自治县"
+		}]
+	}, {
+		value: "532300",
+		label: "楚雄彝族自治州",
+		children: [{
+			value: "532301",
+			label: "楚雄市"
+		}, {
+			value: "532322",
+			label: "双柏县"
+		}, {
+			value: "532323",
+			label: "牟定县"
+		}, {
+			value: "532324",
+			label: "南华县"
+		}, {
+			value: "532325",
+			label: "姚安县"
+		}, {
+			value: "532326",
+			label: "大姚县"
+		}, {
+			value: "532327",
+			label: "永仁县"
+		}, {
+			value: "532328",
+			label: "元谋县"
+		}, {
+			value: "532329",
+			label: "武定县"
+		}, {
+			value: "532331",
+			label: "禄丰县"
+		}]
+	}, {
+		value: "532500",
+		label: "红河哈尼族彝族自治州",
+		children: [{
+			value: "532501",
+			label: "个旧市"
+		}, {
+			value: "532502",
+			label: "开远市"
+		}, {
+			value: "532503",
+			label: "蒙自市"
+		}, {
+			value: "532504",
+			label: "弥勒市"
+		}, {
+			value: "532523",
+			label: "屏边苗族自治县"
+		}, {
+			value: "532524",
+			label: "建水县"
+		}, {
+			value: "532525",
+			label: "石屏县"
+		}, {
+			value: "532527",
+			label: "泸西县"
+		}, {
+			value: "532528",
+			label: "元阳县"
+		}, {
+			value: "532529",
+			label: "红河县"
+		}, {
+			value: "532530",
+			label: "金平苗族瑶族傣族自治县"
+		}, {
+			value: "532531",
+			label: "绿春县"
+		}, {
+			value: "532532",
+			label: "河口瑶族自治县"
+		}]
+	}, {
+		value: "532600",
+		label: "文山壮族苗族自治州",
+		children: [{
+			value: "532601",
+			label: "文山市"
+		}, {
+			value: "532622",
+			label: "砚山县"
+		}, {
+			value: "532623",
+			label: "西畴县"
+		}, {
+			value: "532624",
+			label: "麻栗坡县"
+		}, {
+			value: "532625",
+			label: "马关县"
+		}, {
+			value: "532626",
+			label: "丘北县"
+		}, {
+			value: "532627",
+			label: "广南县"
+		}, {
+			value: "532628",
+			label: "富宁县"
+		}]
+	}, {
+		value: "532800",
+		label: "西双版纳傣族自治州",
+		children: [{
+			value: "532801",
+			label: "景洪市"
+		}, {
+			value: "532822",
+			label: "勐海县"
+		}, {
+			value: "532823",
+			label: "勐腊县"
+		}]
+	}, {
+		value: "532900",
+		label: "大理白族自治州",
+		children: [{
+			value: "532901",
+			label: "大理市"
+		}, {
+			value: "532922",
+			label: "漾濞彝族自治县"
+		}, {
+			value: "532923",
+			label: "祥云县"
+		}, {
+			value: "532924",
+			label: "宾川县"
+		}, {
+			value: "532925",
+			label: "弥渡县"
+		}, {
+			value: "532926",
+			label: "南涧彝族自治县"
+		}, {
+			value: "532927",
+			label: "巍山彝族回族自治县"
+		}, {
+			value: "532928",
+			label: "永平县"
+		}, {
+			value: "532929",
+			label: "云龙县"
+		}, {
+			value: "532930",
+			label: "洱源县"
+		}, {
+			value: "532931",
+			label: "剑川县"
+		}, {
+			value: "532932",
+			label: "鹤庆县"
+		}]
+	}, {
+		value: "533100",
+		label: "德宏傣族景颇族自治州",
+		children: [{
+			value: "533102",
+			label: "瑞丽市"
+		}, {
+			value: "533103",
+			label: "芒市"
+		}, {
+			value: "533122",
+			label: "梁河县"
+		}, {
+			value: "533123",
+			label: "盈江县"
+		}, {
+			value: "533124",
+			label: "陇川县"
+		}]
+	}, {
+		value: "533300",
+		label: "怒江傈僳族自治州",
+		children: [{
+			value: "533301",
+			label: "泸水市"
+		}, {
+			value: "533323",
+			label: "福贡县"
+		}, {
+			value: "533324",
+			label: "贡山独龙族怒族自治县"
+		}, {
+			value: "533325",
+			label: "兰坪白族普米族自治县"
+		}]
+	}, {
+		value: "533400",
+		label: "迪庆藏族自治州",
+		children: [{
+			value: "533401",
+			label: "香格里拉市"
+		}, {
+			value: "533422",
+			label: "德钦县"
+		}, {
+			value: "533423",
+			label: "维西傈僳族自治县"
+		}]
+	}]
+}, {
+	value: '540000',
+	label: '西藏',
+	children: [{
+		value: "540100",
+		label: "拉萨市",
+		children: [{
+			value: "540101",
+			label: "市辖区"
+		}, {
+			value: "540102",
+			label: "城关区"
+		}, {
+			value: "540103",
+			label: "堆龙德庆区"
+		}, {
+			value: "540121",
+			label: "林周县"
+		}, {
+			value: "540122",
+			label: "当雄县"
+		}, {
+			value: "540123",
+			label: "尼木县"
+		}, {
+			value: "540124",
+			label: "曲水县"
+		}, {
+			value: "540126",
+			label: "达孜县"
+		}, {
+			value: "540127",
+			label: "墨竹工卡县"
+		}, {
+			value: "540171",
+			label: "格尔木藏青工业园区"
+		}, {
+			value: "540172",
+			label: "拉萨经济技术开发区"
+		}, {
+			value: "540173",
+			label: "西藏文化旅游创意园区"
+		}, {
+			value: "540174",
+			label: "达孜工业园区"
+		}]
+	}, {
+		value: "540200",
+		label: "日喀则市",
+		children: [{
+			value: "540202",
+			label: "桑珠孜区"
+		}, {
+			value: "540221",
+			label: "南木林县"
+		}, {
+			value: "540222",
+			label: "江孜县"
+		}, {
+			value: "540223",
+			label: "定日县"
+		}, {
+			value: "540224",
+			label: "萨迦县"
+		}, {
+			value: "540225",
+			label: "拉孜县"
+		}, {
+			value: "540226",
+			label: "昂仁县"
+		}, {
+			value: "540227",
+			label: "谢通门县"
+		}, {
+			value: "540228",
+			label: "白朗县"
+		}, {
+			value: "540229",
+			label: "仁布县"
+		}, {
+			value: "540230",
+			label: "康马县"
+		}, {
+			value: "540231",
+			label: "定结县"
+		}, {
+			value: "540232",
+			label: "仲巴县"
+		}, {
+			value: "540233",
+			label: "亚东县"
+		}, {
+			value: "540234",
+			label: "吉隆县"
+		}, {
+			value: "540235",
+			label: "聂拉木县"
+		}, {
+			value: "540236",
+			label: "萨嘎县"
+		}, {
+			value: "540237",
+			label: "岗巴县"
+		}]
+	}, {
+		value: "540300",
+		label: "昌都市",
+		children: [{
+			value: "540302",
+			label: "卡若区"
+		}, {
+			value: "540321",
+			label: "江达县"
+		}, {
+			value: "540322",
+			label: "贡觉县"
+		}, {
+			value: "540323",
+			label: "类乌齐县"
+		}, {
+			value: "540324",
+			label: "丁青县"
+		}, {
+			value: "540325",
+			label: "察雅县"
+		}, {
+			value: "540326",
+			label: "八宿县"
+		}, {
+			value: "540327",
+			label: "左贡县"
+		}, {
+			value: "540328",
+			label: "芒康县"
+		}, {
+			value: "540329",
+			label: "洛隆县"
+		}, {
+			value: "540330",
+			label: "边坝县"
+		}]
+	}, {
+		value: "540400",
+		label: "林芝市",
+		children: [{
+			value: "540402",
+			label: "巴宜区"
+		}, {
+			value: "540421",
+			label: "工布江达县"
+		}, {
+			value: "540422",
+			label: "米林县"
+		}, {
+			value: "540423",
+			label: "墨脱县"
+		}, {
+			value: "540424",
+			label: "波密县"
+		}, {
+			value: "540425",
+			label: "察隅县"
+		}, {
+			value: "540426",
+			label: "朗县"
+		}]
+	}, {
+		value: "540500",
+		label: "山南市",
+		children: [{
+			value: "540501",
+			label: "市辖区"
+		}, {
+			value: "540502",
+			label: "乃东区"
+		}, {
+			value: "540521",
+			label: "扎囊县"
+		}, {
+			value: "540522",
+			label: "贡嘎县"
+		}, {
+			value: "540523",
+			label: "桑日县"
+		}, {
+			value: "540524",
+			label: "琼结县"
+		}, {
+			value: "540525",
+			label: "曲松县"
+		}, {
+			value: "540526",
+			label: "措美县"
+		}, {
+			value: "540527",
+			label: "洛扎县"
+		}, {
+			value: "540528",
+			label: "加查县"
+		}, {
+			value: "540529",
+			label: "隆子县"
+		}, {
+			value: "540530",
+			label: "错那县"
+		}, {
+			value: "540531",
+			label: "浪卡子县"
+		}]
+	}, {
+		value: "542400",
+		label: "那曲地区",
+		children: [{
+			value: "542421",
+			label: "那曲县"
+		}, {
+			value: "542422",
+			label: "嘉黎县"
+		}, {
+			value: "542423",
+			label: "比如县"
+		}, {
+			value: "542424",
+			label: "聂荣县"
+		}, {
+			value: "542425",
+			label: "安多县"
+		}, {
+			value: "542426",
+			label: "申扎县"
+		}, {
+			value: "542427",
+			label: "索县"
+		}, {
+			value: "542428",
+			label: "班戈县"
+		}, {
+			value: "542429",
+			label: "巴青县"
+		}, {
+			value: "542430",
+			label: "尼玛县"
+		}, {
+			value: "542431",
+			label: "双湖县"
+		}]
+	}, {
+		value: "542500",
+		label: "阿里地区",
+		children: [{
+			value: "542521",
+			label: "普兰县"
+		}, {
+			value: "542522",
+			label: "札达县"
+		}, {
+			value: "542523",
+			label: "噶尔县"
+		}, {
+			value: "542524",
+			label: "日土县"
+		}, {
+			value: "542525",
+			label: "革吉县"
+		}, {
+			value: "542526",
+			label: "改则县"
+		}, {
+			value: "542527",
+			label: "措勤县"
+		}]
+	}]
+}, {
+	value: '610000',
+	label: '陕西省',
+	children: [{
+		value: "610100",
+		label: "西安市",
+		children: [{
+			value: "610101",
+			label: "市辖区"
+		}, {
+			value: "610102",
+			label: "新城区"
+		}, {
+			value: "610103",
+			label: "碑林区"
+		}, {
+			value: "610104",
+			label: "莲湖区"
+		}, {
+			value: "610111",
+			label: "灞桥区"
+		}, {
+			value: "610112",
+			label: "未央区"
+		}, {
+			value: "610113",
+			label: "雁塔区"
+		}, {
+			value: "610114",
+			label: "阎良区"
+		}, {
+			value: "610115",
+			label: "临潼区"
+		}, {
+			value: "610116",
+			label: "长安区"
+		}, {
+			value: "610117",
+			label: "高陵区"
+		}, {
+			value: "610118",
+			label: "鄠邑区"
+		}, {
+			value: "610122",
+			label: "蓝田县"
+		}, {
+			value: "610124",
+			label: "周至县"
+		}]
+	}, {
+		value: "610200",
+		label: "铜川市",
+		children: [{
+			value: "610201",
+			label: "市辖区"
+		}, {
+			value: "610202",
+			label: "王益区"
+		}, {
+			value: "610203",
+			label: "印台区"
+		}, {
+			value: "610204",
+			label: "耀州区"
+		}, {
+			value: "610222",
+			label: "宜君县"
+		}]
+	}, {
+		value: "610300",
+		label: "宝鸡市",
+		children: [{
+			value: "610301",
+			label: "市辖区"
+		}, {
+			value: "610302",
+			label: "渭滨区"
+		}, {
+			value: "610303",
+			label: "金台区"
+		}, {
+			value: "610304",
+			label: "陈仓区"
+		}, {
+			value: "610322",
+			label: "凤翔县"
+		}, {
+			value: "610323",
+			label: "岐山县"
+		}, {
+			value: "610324",
+			label: "扶风县"
+		}, {
+			value: "610326",
+			label: "眉县"
+		}, {
+			value: "610327",
+			label: "陇县"
+		}, {
+			value: "610328",
+			label: "千阳县"
+		}, {
+			value: "610329",
+			label: "麟游县"
+		}, {
+			value: "610330",
+			label: "凤县"
+		}, {
+			value: "610331",
+			label: "太白县"
+		}]
+	}, {
+		value: "610400",
+		label: "咸阳市",
+		children: [{
+			value: "610401",
+			label: "市辖区"
+		}, {
+			value: "610402",
+			label: "秦都区"
+		}, {
+			value: "610403",
+			label: "杨陵区"
+		}, {
+			value: "610404",
+			label: "渭城区"
+		}, {
+			value: "610422",
+			label: "三原县"
+		}, {
+			value: "610423",
+			label: "泾阳县"
+		}, {
+			value: "610424",
+			label: "乾县"
+		}, {
+			value: "610425",
+			label: "礼泉县"
+		}, {
+			value: "610426",
+			label: "永寿县"
+		}, {
+			value: "610427",
+			label: "彬县"
+		}, {
+			value: "610428",
+			label: "长武县"
+		}, {
+			value: "610429",
+			label: "旬邑县"
+		}, {
+			value: "610430",
+			label: "淳化县"
+		}, {
+			value: "610431",
+			label: "武功县"
+		}, {
+			value: "610481",
+			label: "兴平市"
+		}]
+	}, {
+		value: "610500",
+		label: "渭南市",
+		children: [{
+			value: "610501",
+			label: "市辖区"
+		}, {
+			value: "610502",
+			label: "临渭区"
+		}, {
+			value: "610503",
+			label: "华州区"
+		}, {
+			value: "610522",
+			label: "潼关县"
+		}, {
+			value: "610523",
+			label: "大荔县"
+		}, {
+			value: "610524",
+			label: "合阳县"
+		}, {
+			value: "610525",
+			label: "澄城县"
+		}, {
+			value: "610526",
+			label: "蒲城县"
+		}, {
+			value: "610527",
+			label: "白水县"
+		}, {
+			value: "610528",
+			label: "富平县"
+		}, {
+			value: "610581",
+			label: "韩城市"
+		}, {
+			value: "610582",
+			label: "华阴市"
+		}]
+	}, {
+		value: "610600",
+		label: "延安市",
+		children: [{
+			value: "610601",
+			label: "市辖区"
+		}, {
+			value: "610602",
+			label: "宝塔区"
+		}, {
+			value: "610603",
+			label: "安塞区"
+		}, {
+			value: "610621",
+			label: "延长县"
+		}, {
+			value: "610622",
+			label: "延川县"
+		}, {
+			value: "610623",
+			label: "子长县"
+		}, {
+			value: "610625",
+			label: "志丹县"
+		}, {
+			value: "610626",
+			label: "吴起县"
+		}, {
+			value: "610627",
+			label: "甘泉县"
+		}, {
+			value: "610628",
+			label: "富县"
+		}, {
+			value: "610629",
+			label: "洛川县"
+		}, {
+			value: "610630",
+			label: "宜川县"
+		}, {
+			value: "610631",
+			label: "黄龙县"
+		}, {
+			value: "610632",
+			label: "黄陵县"
+		}]
+	}, {
+		value: "610700",
+		label: "汉中市",
+		children: [{
+			value: "610701",
+			label: "市辖区"
+		}, {
+			value: "610702",
+			label: "汉台区"
+		}, {
+			value: "610703",
+			label: "南郑区"
+		}, {
+			value: "610722",
+			label: "城固县"
+		}, {
+			value: "610723",
+			label: "洋县"
+		}, {
+			value: "610724",
+			label: "西乡县"
+		}, {
+			value: "610725",
+			label: "勉县"
+		}, {
+			value: "610726",
+			label: "宁强县"
+		}, {
+			value: "610727",
+			label: "略阳县"
+		}, {
+			value: "610728",
+			label: "镇巴县"
+		}, {
+			value: "610729",
+			label: "留坝县"
+		}, {
+			value: "610730",
+			label: "佛坪县"
+		}]
+	}, {
+		value: "610800",
+		label: "榆林市",
+		children: [{
+			value: "610801",
+			label: "市辖区"
+		}, {
+			value: "610802",
+			label: "榆阳区"
+		}, {
+			value: "610803",
+			label: "横山区"
+		}, {
+			value: "610822",
+			label: "府谷县"
+		}, {
+			value: "610824",
+			label: "靖边县"
+		}, {
+			value: "610825",
+			label: "定边县"
+		}, {
+			value: "610826",
+			label: "绥德县"
+		}, {
+			value: "610827",
+			label: "米脂县"
+		}, {
+			value: "610828",
+			label: "佳县"
+		}, {
+			value: "610829",
+			label: "吴堡县"
+		}, {
+			value: "610830",
+			label: "清涧县"
+		}, {
+			value: "610831",
+			label: "子洲县"
+		}, {
+			value: "610881",
+			label: "神木市"
+		}]
+	}, {
+		value: "610900",
+		label: "安康市",
+		children: [{
+			value: "610901",
+			label: "市辖区"
+		}, {
+			value: "610902",
+			label: "汉滨区"
+		}, {
+			value: "610921",
+			label: "汉阴县"
+		}, {
+			value: "610922",
+			label: "石泉县"
+		}, {
+			value: "610923",
+			label: "宁陕县"
+		}, {
+			value: "610924",
+			label: "紫阳县"
+		}, {
+			value: "610925",
+			label: "岚皋县"
+		}, {
+			value: "610926",
+			label: "平利县"
+		}, {
+			value: "610927",
+			label: "镇坪县"
+		}, {
+			value: "610928",
+			label: "旬阳县"
+		}, {
+			value: "610929",
+			label: "白河县"
+		}]
+	}, {
+		value: "611000",
+		label: "商洛市",
+		children: [{
+			value: "611001",
+			label: "市辖区"
+		}, {
+			value: "611002",
+			label: "商州区"
+		}, {
+			value: "611021",
+			label: "洛南县"
+		}, {
+			value: "611022",
+			label: "丹凤县"
+		}, {
+			value: "611023",
+			label: "商南县"
+		}, {
+			value: "611024",
+			label: "山阳县"
+		}, {
+			value: "611025",
+			label: "镇安县"
+		}, {
+			value: "611026",
+			label: "柞水县"
+		}]
+	}]
+}, {
+	value: '620000',
+	label: '甘肃省',
+	children: [{
+		value: "620100",
+		label: "兰州市",
+		children: [{
+			value: "620101",
+			label: "市辖区"
+		}, {
+			value: "620102",
+			label: "城关区"
+		}, {
+			value: "620103",
+			label: "七里河区"
+		}, {
+			value: "620104",
+			label: "西固区"
+		}, {
+			value: "620105",
+			label: "安宁区"
+		}, {
+			value: "620111",
+			label: "红古区"
+		}, {
+			value: "620121",
+			label: "永登县"
+		}, {
+			value: "620122",
+			label: "皋兰县"
+		}, {
+			value: "620123",
+			label: "榆中县"
+		}, {
+			value: "620171",
+			label: "兰州新区"
+		}]
+	}, {
+		value: "620200",
+		label: "嘉峪关市",
+		children: [{
+			value: "620201",
+			label: "市辖区"
+		}]
+	}, {
+		value: "620300",
+		label: "金昌市",
+		children: [{
+			value: "620301",
+			label: "市辖区"
+		}, {
+			value: "620302",
+			label: "金川区"
+		}, {
+			value: "620321",
+			label: "永昌县"
+		}]
+	}, {
+		value: "620400",
+		label: "白银市",
+		children: [{
+			value: "620401",
+			label: "市辖区"
+		}, {
+			value: "620402",
+			label: "白银区"
+		}, {
+			value: "620403",
+			label: "平川区"
+		}, {
+			value: "620421",
+			label: "靖远县"
+		}, {
+			value: "620422",
+			label: "会宁县"
+		}, {
+			value: "620423",
+			label: "景泰县"
+		}]
+	}, {
+		value: "620500",
+		label: "天水市",
+		children: [{
+			value: "620501",
+			label: "市辖区"
+		}, {
+			value: "620502",
+			label: "秦州区"
+		}, {
+			value: "620503",
+			label: "麦积区"
+		}, {
+			value: "620521",
+			label: "清水县"
+		}, {
+			value: "620522",
+			label: "秦安县"
+		}, {
+			value: "620523",
+			label: "甘谷县"
+		}, {
+			value: "620524",
+			label: "武山县"
+		}, {
+			value: "620525",
+			label: "张家川回族自治县"
+		}]
+	}, {
+		value: "620600",
+		label: "武威市",
+		children: [{
+			value: "620601",
+			label: "市辖区"
+		}, {
+			value: "620602",
+			label: "凉州区"
+		}, {
+			value: "620621",
+			label: "民勤县"
+		}, {
+			value: "620622",
+			label: "古浪县"
+		}, {
+			value: "620623",
+			label: "天祝藏族自治县"
+		}]
+	}, {
+		value: "620700",
+		label: "张掖市",
+		children: [{
+			value: "620701",
+			label: "市辖区"
+		}, {
+			value: "620702",
+			label: "甘州区"
+		}, {
+			value: "620721",
+			label: "肃南裕固族自治县"
+		}, {
+			value: "620722",
+			label: "民乐县"
+		}, {
+			value: "620723",
+			label: "临泽县"
+		}, {
+			value: "620724",
+			label: "高台县"
+		}, {
+			value: "620725",
+			label: "山丹县"
+		}]
+	}, {
+		value: "620800",
+		label: "平凉市",
+		children: [{
+			value: "620801",
+			label: "市辖区"
+		}, {
+			value: "620802",
+			label: "崆峒区"
+		}, {
+			value: "620821",
+			label: "泾川县"
+		}, {
+			value: "620822",
+			label: "灵台县"
+		}, {
+			value: "620823",
+			label: "崇信县"
+		}, {
+			value: "620824",
+			label: "华亭县"
+		}, {
+			value: "620825",
+			label: "庄浪县"
+		}, {
+			value: "620826",
+			label: "静宁县"
+		}, {
+			value: "620871",
+			label: "平凉工业园区"
+		}]
+	}, {
+		value: "620900",
+		label: "酒泉市",
+		children: [{
+			value: "620901",
+			label: "市辖区"
+		}, {
+			value: "620902",
+			label: "肃州区"
+		}, {
+			value: "620921",
+			label: "金塔县"
+		}, {
+			value: "620922",
+			label: "瓜州县"
+		}, {
+			value: "620923",
+			label: "肃北蒙古族自治县"
+		}, {
+			value: "620924",
+			label: "阿克塞哈萨克族自治县"
+		}, {
+			value: "620981",
+			label: "玉门市"
+		}, {
+			value: "620982",
+			label: "敦煌市"
+		}]
+	}, {
+		value: "621000",
+		label: "庆阳市",
+		children: [{
+			value: "621001",
+			label: "市辖区"
+		}, {
+			value: "621002",
+			label: "西峰区"
+		}, {
+			value: "621021",
+			label: "庆城县"
+		}, {
+			value: "621022",
+			label: "环县"
+		}, {
+			value: "621023",
+			label: "华池县"
+		}, {
+			value: "621024",
+			label: "合水县"
+		}, {
+			value: "621025",
+			label: "正宁县"
+		}, {
+			value: "621026",
+			label: "宁县"
+		}, {
+			value: "621027",
+			label: "镇原县"
+		}]
+	}, {
+		value: "621100",
+		label: "定西市",
+		children: [{
+			value: "621101",
+			label: "市辖区"
+		}, {
+			value: "621102",
+			label: "安定区"
+		}, {
+			value: "621121",
+			label: "通渭县"
+		}, {
+			value: "621122",
+			label: "陇西县"
+		}, {
+			value: "621123",
+			label: "渭源县"
+		}, {
+			value: "621124",
+			label: "临洮县"
+		}, {
+			value: "621125",
+			label: "漳县"
+		}, {
+			value: "621126",
+			label: "岷县"
+		}]
+	}, {
+		value: "621200",
+		label: "陇南市",
+		children: [{
+			value: "621201",
+			label: "市辖区"
+		}, {
+			value: "621202",
+			label: "武都区"
+		}, {
+			value: "621221",
+			label: "成县"
+		}, {
+			value: "621222",
+			label: "文县"
+		}, {
+			value: "621223",
+			label: "宕昌县"
+		}, {
+			value: "621224",
+			label: "康县"
+		}, {
+			value: "621225",
+			label: "西和县"
+		}, {
+			value: "621226",
+			label: "礼县"
+		}, {
+			value: "621227",
+			label: "徽县"
+		}, {
+			value: "621228",
+			label: "两当县"
+		}]
+	}, {
+		value: "622900",
+		label: "临夏回族自治州",
+		children: [{
+			value: "622901",
+			label: "临夏市"
+		}, {
+			value: "622921",
+			label: "临夏县"
+		}, {
+			value: "622922",
+			label: "康乐县"
+		}, {
+			value: "622923",
+			label: "永靖县"
+		}, {
+			value: "622924",
+			label: "广河县"
+		}, {
+			value: "622925",
+			label: "和政县"
+		}, {
+			value: "622926",
+			label: "东乡族自治县"
+		}, {
+			value: "622927",
+			label: "积石山保安族东乡族撒拉族自治县"
+		}]
+	}, {
+		value: "623000",
+		label: "甘南藏族自治州",
+		children: [{
+			value: "623001",
+			label: "合作市"
+		}, {
+			value: "623021",
+			label: "临潭县"
+		}, {
+			value: "623022",
+			label: "卓尼县"
+		}, {
+			value: "623023",
+			label: "舟曲县"
+		}, {
+			value: "623024",
+			label: "迭部县"
+		}, {
+			value: "623025",
+			label: "玛曲县"
+		}, {
+			value: "623026",
+			label: "碌曲县"
+		}, {
+			value: "623027",
+			label: "夏河县"
+		}]
+	}]
+}, {
+	value: '630000',
+	label: '青海省',
+	children: [{
+		value: "630100",
+		label: "西宁市",
+		children: [{
+			value: "630101",
+			label: "市辖区"
+		}, {
+			value: "630102",
+			label: "城东区"
+		}, {
+			value: "630103",
+			label: "城中区"
+		}, {
+			value: "630104",
+			label: "城西区"
+		}, {
+			value: "630105",
+			label: "城北区"
+		}, {
+			value: "630121",
+			label: "大通回族土族自治县"
+		}, {
+			value: "630122",
+			label: "湟中县"
+		}, {
+			value: "630123",
+			label: "湟源县"
+		}]
+	}, {
+		value: "630200",
+		label: "海东市",
+		children: [{
+			value: "630202",
+			label: "乐都区"
+		}, {
+			value: "630203",
+			label: "平安区"
+		}, {
+			value: "630222",
+			label: "民和回族土族自治县"
+		}, {
+			value: "630223",
+			label: "互助土族自治县"
+		}, {
+			value: "630224",
+			label: "化隆回族自治县"
+		}, {
+			value: "630225",
+			label: "循化撒拉族自治县"
+		}]
+	}, {
+		value: "632200",
+		label: "海北藏族自治州",
+		children: [{
+			value: "632221",
+			label: "门源回族自治县"
+		}, {
+			value: "632222",
+			label: "祁连县"
+		}, {
+			value: "632223",
+			label: "海晏县"
+		}, {
+			value: "632224",
+			label: "刚察县"
+		}]
+	}, {
+		value: "632300",
+		label: "黄南藏族自治州",
+		children: [{
+			value: "632321",
+			label: "同仁县"
+		}, {
+			value: "632322",
+			label: "尖扎县"
+		}, {
+			value: "632323",
+			label: "泽库县"
+		}, {
+			value: "632324",
+			label: "河南蒙古族自治县"
+		}]
+	}, {
+		value: "632500",
+		label: "海南藏族自治州",
+		children: [{
+			value: "632521",
+			label: "共和县"
+		}, {
+			value: "632522",
+			label: "同德县"
+		}, {
+			value: "632523",
+			label: "贵德县"
+		}, {
+			value: "632524",
+			label: "兴海县"
+		}, {
+			value: "632525",
+			label: "贵南县"
+		}]
+	}, {
+		value: "632600",
+		label: "果洛藏族自治州",
+		children: [{
+			value: "632621",
+			label: "玛沁县"
+		}, {
+			value: "632622",
+			label: "班玛县"
+		}, {
+			value: "632623",
+			label: "甘德县"
+		}, {
+			value: "632624",
+			label: "达日县"
+		}, {
+			value: "632625",
+			label: "久治县"
+		}, {
+			value: "632626",
+			label: "玛多县"
+		}]
+	}, {
+		value: "632700",
+		label: "玉树藏族自治州",
+		children: [{
+			value: "632701",
+			label: "玉树市"
+		}, {
+			value: "632722",
+			label: "杂多县"
+		}, {
+			value: "632723",
+			label: "称多县"
+		}, {
+			value: "632724",
+			label: "治多县"
+		}, {
+			value: "632725",
+			label: "囊谦县"
+		}, {
+			value: "632726",
+			label: "曲麻莱县"
+		}]
+	}, {
+		value: "632800",
+		label: "海西蒙古族藏族自治州",
+		children: [{
+			value: "632801",
+			label: "格尔木市"
+		}, {
+			value: "632802",
+			label: "德令哈市"
+		}, {
+			value: "632821",
+			label: "乌兰县"
+		}, {
+			value: "632822",
+			label: "都兰县"
+		}, {
+			value: "632823",
+			label: "天峻县"
+		}, {
+			value: "632857",
+			label: "大柴旦行政委员会"
+		}, {
+			value: "632858",
+			label: "冷湖行政委员会"
+		}, {
+			value: "632859",
+			label: "茫崖行政委员会"
+		}]
+	}]
+}, {
+	value: '640000',
+	label: '宁夏',
+	children: [{
+		value: "640100",
+		label: "银川市",
+		children: [{
+			value: "640101",
+			label: "市辖区"
+		}, {
+			value: "640104",
+			label: "兴庆区"
+		}, {
+			value: "640105",
+			label: "西夏区"
+		}, {
+			value: "640106",
+			label: "金凤区"
+		}, {
+			value: "640121",
+			label: "永宁县"
+		}, {
+			value: "640122",
+			label: "贺兰县"
+		}, {
+			value: "640181",
+			label: "灵武市"
+		}]
+	}, {
+		value: "640200",
+		label: "石嘴山市",
+		children: [{
+			value: "640201",
+			label: "市辖区"
+		}, {
+			value: "640202",
+			label: "大武口区"
+		}, {
+			value: "640205",
+			label: "惠农区"
+		}, {
+			value: "640221",
+			label: "平罗县"
+		}]
+	}, {
+		value: "640300",
+		label: "吴忠市",
+		children: [{
+			value: "640301",
+			label: "市辖区"
+		}, {
+			value: "640302",
+			label: "利通区"
+		}, {
+			value: "640303",
+			label: "红寺堡区"
+		}, {
+			value: "640323",
+			label: "盐池县"
+		}, {
+			value: "640324",
+			label: "同心县"
+		}, {
+			value: "640381",
+			label: "青铜峡市"
+		}]
+	}, {
+		value: "640400",
+		label: "固原市",
+		children: [{
+			value: "640401",
+			label: "市辖区"
+		}, {
+			value: "640402",
+			label: "原州区"
+		}, {
+			value: "640422",
+			label: "西吉县"
+		}, {
+			value: "640423",
+			label: "隆德县"
+		}, {
+			value: "640424",
+			label: "泾源县"
+		}, {
+			value: "640425",
+			label: "彭阳县"
+		}]
+	}, {
+		value: "640500",
+		label: "中卫市",
+		children: [{
+			value: "640501",
+			label: "市辖区"
+		}, {
+			value: "640502",
+			label: "沙坡头区"
+		}, {
+			value: "640521",
+			label: "中宁县"
+		}, {
+			value: "640522",
+			label: "海原县"
+		}]
+	}]
+}, {
+	value: '650000',
+	label: '新疆',
+	children: [{
+		value: "650100",
+		label: "乌鲁木齐市",
+		children: [{
+			value: "650101",
+			label: "市辖区"
+		}, {
+			value: "650102",
+			label: "天山区"
+		}, {
+			value: "650103",
+			label: "沙依巴克区"
+		}, {
+			value: "650104",
+			label: "新市区"
+		}, {
+			value: "650105",
+			label: "水磨沟区"
+		}, {
+			value: "650106",
+			label: "头屯河区"
+		}, {
+			value: "650107",
+			label: "达坂城区"
+		}, {
+			value: "650109",
+			label: "米东区"
+		}, {
+			value: "650121",
+			label: "乌鲁木齐县"
+		}, {
+			value: "650171",
+			label: "乌鲁木齐经济技术开发区"
+		}, {
+			value: "650172",
+			label: "乌鲁木齐高新技术产业开发区"
+		}]
+	}, {
+		value: "650200",
+		label: "克拉玛依市",
+		children: [{
+			value: "650201",
+			label: "市辖区"
+		}, {
+			value: "650202",
+			label: "独山子区"
+		}, {
+			value: "650203",
+			label: "克拉玛依区"
+		}, {
+			value: "650204",
+			label: "白碱滩区"
+		}, {
+			value: "650205",
+			label: "乌尔禾区"
+		}]
+	}, {
+		value: "650400",
+		label: "吐鲁番市",
+		children: [{
+			value: "650402",
+			label: "高昌区"
+		}, {
+			value: "650421",
+			label: "鄯善县"
+		}, {
+			value: "650422",
+			label: "托克逊县"
+		}]
+	}, {
+		value: "650500",
+		label: "哈密市",
+		children: [{
+			value: "650502",
+			label: "伊州区"
+		}, {
+			value: "650521",
+			label: "巴里坤哈萨克自治县"
+		}, {
+			value: "650522",
+			label: "伊吾县"
+		}]
+	}, {
+		value: "652300",
+		label: "昌吉回族自治州",
+		children: [{
+			value: "652301",
+			label: "昌吉市"
+		}, {
+			value: "652302",
+			label: "阜康市"
+		}, {
+			value: "652323",
+			label: "呼图壁县"
+		}, {
+			value: "652324",
+			label: "玛纳斯县"
+		}, {
+			value: "652325",
+			label: "奇台县"
+		}, {
+			value: "652327",
+			label: "吉木萨尔县"
+		}, {
+			value: "652328",
+			label: "木垒哈萨克自治县"
+		}]
+	}, {
+		value: "652700",
+		label: "博尔塔拉蒙古自治州",
+		children: [{
+			value: "652701",
+			label: "博乐市"
+		}, {
+			value: "652702",
+			label: "阿拉山口市"
+		}, {
+			value: "652722",
+			label: "精河县"
+		}, {
+			value: "652723",
+			label: "温泉县"
+		}]
+	}, {
+		value: "652800",
+		label: "巴音郭楞蒙古自治州",
+		children: [{
+			value: "652801",
+			label: "库尔勒市"
+		}, {
+			value: "652822",
+			label: "轮台县"
+		}, {
+			value: "652823",
+			label: "尉犁县"
+		}, {
+			value: "652824",
+			label: "若羌县"
+		}, {
+			value: "652825",
+			label: "且末县"
+		}, {
+			value: "652826",
+			label: "焉耆回族自治县"
+		}, {
+			value: "652827",
+			label: "和静县"
+		}, {
+			value: "652828",
+			label: "和硕县"
+		}, {
+			value: "652829",
+			label: "博湖县"
+		}, {
+			value: "652871",
+			label: "库尔勒经济技术开发区"
+		}]
+	}, {
+		value: "652900",
+		label: "阿克苏地区",
+		children: [{
+			value: "652901",
+			label: "阿克苏市"
+		}, {
+			value: "652922",
+			label: "温宿县"
+		}, {
+			value: "652923",
+			label: "库车县"
+		}, {
+			value: "652924",
+			label: "沙雅县"
+		}, {
+			value: "652925",
+			label: "新和县"
+		}, {
+			value: "652926",
+			label: "拜城县"
+		}, {
+			value: "652927",
+			label: "乌什县"
+		}, {
+			value: "652928",
+			label: "阿瓦提县"
+		}, {
+			value: "652929",
+			label: "柯坪县"
+		}]
+	}, {
+		value: "653000",
+		label: "克孜勒苏柯尔克孜自治州",
+		children: [{
+			value: "653001",
+			label: "阿图什市"
+		}, {
+			value: "653022",
+			label: "阿克陶县"
+		}, {
+			value: "653023",
+			label: "阿合奇县"
+		}, {
+			value: "653024",
+			label: "乌恰县"
+		}]
+	}, {
+		value: "653100",
+		label: "喀什地区",
+		children: [{
+			value: "653101",
+			label: "喀什市"
+		}, {
+			value: "653121",
+			label: "疏附县"
+		}, {
+			value: "653122",
+			label: "疏勒县"
+		}, {
+			value: "653123",
+			label: "英吉沙县"
+		}, {
+			value: "653124",
+			label: "泽普县"
+		}, {
+			value: "653125",
+			label: "莎车县"
+		}, {
+			value: "653126",
+			label: "叶城县"
+		}, {
+			value: "653127",
+			label: "麦盖提县"
+		}, {
+			value: "653128",
+			label: "岳普湖县"
+		}, {
+			value: "653129",
+			label: "伽师县"
+		}, {
+			value: "653130",
+			label: "巴楚县"
+		}, {
+			value: "653131",
+			label: "塔什库尔干塔吉克自治县"
+		}]
+	}, {
+		value: "653200",
+		label: "和田地区",
+		children: [{
+			value: "653201",
+			label: "和田市"
+		}, {
+			value: "653221",
+			label: "和田县"
+		}, {
+			value: "653222",
+			label: "墨玉县"
+		}, {
+			value: "653223",
+			label: "皮山县"
+		}, {
+			value: "653224",
+			label: "洛浦县"
+		}, {
+			value: "653225",
+			label: "策勒县"
+		}, {
+			value: "653226",
+			label: "于田县"
+		}, {
+			value: "653227",
+			label: "民丰县"
+		}]
+	}, {
+		value: "654000",
+		label: "伊犁哈萨克自治州",
+		children: [{
+			value: "654002",
+			label: "伊宁市"
+		}, {
+			value: "654003",
+			label: "奎屯市"
+		}, {
+			value: "654004",
+			label: "霍尔果斯市"
+		}, {
+			value: "654021",
+			label: "伊宁县"
+		}, {
+			value: "654022",
+			label: "察布查尔锡伯自治县"
+		}, {
+			value: "654023",
+			label: "霍城县"
+		}, {
+			value: "654024",
+			label: "巩留县"
+		}, {
+			value: "654025",
+			label: "新源县"
+		}, {
+			value: "654026",
+			label: "昭苏县"
+		}, {
+			value: "654027",
+			label: "特克斯县"
+		}, {
+			value: "654028",
+			label: "尼勒克县"
+		}]
+	}, {
+		value: "654200",
+		label: "塔城地区",
+		children: [{
+			value: "654201",
+			label: "塔城市"
+		}, {
+			value: "654202",
+			label: "乌苏市"
+		}, {
+			value: "654221",
+			label: "额敏县"
+		}, {
+			value: "654223",
+			label: "沙湾县"
+		}, {
+			value: "654224",
+			label: "托里县"
+		}, {
+			value: "654225",
+			label: "裕民县"
+		}, {
+			value: "654226",
+			label: "和布克赛尔蒙古自治县"
+		}]
+	}, {
+		value: "654300",
+		label: "阿勒泰地区",
+		children: [{
+			value: "654301",
+			label: "阿勒泰市"
+		}, {
+			value: "654321",
+			label: "布尔津县"
+		}, {
+			value: "654322",
+			label: "富蕴县"
+		}, {
+			value: "654323",
+			label: "福海县"
+		}, {
+			value: "654324",
+			label: "哈巴河县"
+		}, {
+			value: "654325",
+			label: "青河县"
+		}, {
+			value: "654326",
+			label: "吉木乃县"
+		}]
+	}, {
+		value: "659000",
+		label: "自治区直辖县级行政区划",
+		children: [{
+			value: "659001",
+			label: "石河子市"
+		}, {
+			value: "659002",
+			label: "阿拉尔市"
+		}, {
+			value: "659003",
+			label: "图木舒克市"
+		}, {
+			value: "659004",
+			label: "五家渠市"
+		}, {
+			value: "659006",
+			label: "铁门关市"
+		}]
+	}]
+}, {
+	value: '660000',
+	label: '台湾省',
+	children: [{
+		value: "660100",
+		label: "台北市",
+		children: [{
+			value: "660101",
+			label: "中正区"
+		}, {
+			value: "660102",
+			label: "大同区"
+		}, {
+			value: "660103",
+			label: "中山区"
+		}, {
+			value: "660104",
+			label: "松山区"
+		}, {
+			value: "660105",
+			label: "大安区"
+		}, {
+			value: "660106",
+			label: "万华区"
+		}, {
+			value: "660107",
+			label: "信义区"
+		}, {
+			value: "660108",
+			label: "士林区"
+		}, {
+			value: "660109",
+			label: "北投区"
+		}, {
+			value: "660110",
+			label: "内湖区"
+		}, {
+			value: "660111",
+			label: "南港区"
+		}, {
+			value: "660112",
+			label: "文山区"
+		}]
+	}, {
+		value: "660200",
+		label: "高雄市",
+		children: [{
+			value: "660201",
+			label: "新兴区"
+		}, {
+			value: "660202",
+			label: "前金区"
+		}, {
+			value: "660203",
+			label: "芩雅区"
+		}, {
+			value: "660204",
+			label: "盐埕区"
+		}, {
+			value: "660205",
+			label: "鼓山区"
+		}, {
+			value: "660206",
+			label: "旗津区"
+		}, {
+			value: "660207",
+			label: "前镇区"
+		}, {
+			value: "660208",
+			label: "三民区"
+		}, {
+			value: "660209",
+			label: "左营区"
+		}, {
+			value: "660210",
+			label: "楠梓区"
+		}, {
+			value: "660211",
+			label: "小港区"
+		}]
+	}, {
+		value: "660300",
+		label: "台南市",
+		children: [{
+			value: "660301",
+			label: "中西区"
+		}, {
+			value: "660302",
+			label: "东区"
+		}, {
+			value: "660303",
+			label: "南区"
+		}, {
+			value: "660304",
+			label: "北区"
+		}, {
+			value: "660305",
+			label: "安平区"
+		}, {
+			value: "660306",
+			label: "安南区"
+		}]
+	}, {
+		value: "660400",
+		label: "台中市",
+		children: [{
+			value: "660401",
+			label: "中区"
+		}, {
+			value: "660402",
+			label: "东区"
+		}, {
+			value: "660403",
+			label: "南区"
+		}, {
+			value: "660404",
+			label: "西区"
+		}, {
+			value: "660405",
+			label: "北区"
+		}, {
+			value: "660406",
+			label: "北屯区"
+		}, {
+			value: "660407",
+			label: "西屯区"
+		}, {
+			value: "660408",
+			label: "南屯区"
+		}]
+	}, {
+		value: "660500",
+		label: "金门县",
+		children:[{
+				value: "660501",
+				label: "金门县"
+		}]
+	}, {
+		value: "660600",
+		label: "南投县",
+		children:[{
+			value: "660601",
+			label: "南投县",
+		}]
+	}, {
+		value: "660700",
+		label: "基隆市",
+		children: [{
+			value: "仁爱区",
+			label: "仁爱区"
+		}, {
+			value: "信义区",
+			label: "信义区"
+		}, {
+			value: "中正区",
+			label: "中正区"
+		}, {
+			value: "中山区",
+			label: "中山区"
+		}, {
+			value: "安乐区",
+			label: "安乐区"
+		}, {
+			value: "暖暖区",
+			label: "暖暖区"
+		}, {
+			value: "七堵区",
+			label: "七堵区"
+		}]
+	}, {
+		value: "660800",
+		label: "新竹市",
+		children: [{
+			value: "东区",
+			label: "东区"
+		}, {
+			value: "北区",
+			label: "北区"
+		}, {
+			value: "香山区",
+			label: "香山区"
+		}]
+	}, {
+		value: "660900",
+		label: "嘉义市",
+		children: [{
+			value: "东区",
+			label: "东区"
+		}, {
+			value: "西区",
+			label: "西区"
+		}]
+	}, {
+		value: "661000",
+		label: "新北市",
+		children:[{
+			value: "661001",
+			label: "新北市"
+		}]		
+	}, {
+		value: "661100",
+		label: "宜兰县",
+		children:[{
+			value: "661100",
+			label: "宜兰县"
+		}]		
+	}, {
+		value: "661200",
+		label: "新竹县",
+		children:[{
+			value: "661201",
+			label: "新竹县"
+		}]			
+	}, {
+		value: "661300",
+		label: "桃园县",
+		children:[{
+			value: "661301",
+			label: "桃园县"
+		}]		
+	}, {
+		value: "661400",
+		label: "苗栗县",
+		children:[{
+			value: "661401",
+			label: "苗栗县"
+		}]			
+	}, {
+		value: "661500",
+		label: "彰化县",
+		children:[{
+			value: "661501",
+			label: "彰化县"
+		}]			
+	}, {
+		value: "661600",
+		label: "嘉义县",
+		children:[{
+			value: "661601",
+			label: "嘉义县"
+		}]
+	}, {
+		value: "661700",
+		label: "云林县",
+		children:[{
+			value: "661701",
+			label: "云林县"
+		}]		
+	}, {
+		value: "661800",
+		label: "屏东县",
+		children:[{
+			value: "661801",
+			label: "屏东县"
+		}]			
+	}, {
+		value: "661900",
+		label: "台东县",
+		children:[{
+			value: "661901",
+			label: "台东县"
+		}]		
+	}, {
+		value: "662000",
+		label: "花莲县",
+		children:[{
+			value: "662001",
+			label: "花莲县"
+		}]			
+	}, {
+		value: "662100",
+		label: "澎湖县",
+		children:[{
+			value: "662101",
+			label: "澎湖县"
+		}]		
+	}]
+}, {
+	value: '670000',
+	label: '香港',
+	children: [{
+		value: "670100",
+		label: "香港岛",
+		children: [{
+			value: "670101",
+			label: "中西区"
+		}, {
+			value: "670102",
+			label: "湾仔区"
+		}, {
+			value: "670103",
+			label: "东区"
+		}, {
+			value: "670104",
+			label: "南区"
+		}]
+	}, {
+		value: "670200",
+		label: "九龙半岛",
+		children: [{
+			value: "670201",
+			label: "九龙城区"
+		}, {
+			value: "670202",
+			label: "油尖旺区"
+		}, {
+			value: "670203",
+			label: "深水埗区"
+		}, {
+			value: "670204",
+			label: "黄大仙区"
+		}, {
+			value: "670205",
+			label: "观塘区"
+		}]
+	}, {
+		value: "670300",
+		label: "新界",
+		children: [{
+			value: "670301",
+			label: "北区"
+		}, {
+			value: "670302",
+			label: "大埔区"
+		}, {
+			value: "670303",
+			label: "沙田区"
+		}, {
+			value: "670304",
+			label: "西贡区"
+		}, {
+			value: "670305",
+			label: "元朗区"
+		}, {
+			value: "670306",
+			label: "屯门区"
+		}, {
+			value: "670307",
+			label: "荃湾区"
+		}, {
+			value: "670308",
+			label: "葵青区"
+		}, {
+			value: "670309",
+			label: "离岛区"
+		}]
+	}]
+}, {
+	value: '680000',
+	label: '澳门',
+	children: [{
+		value: "680100",
+		label: "澳门半岛",
+        children: [{
+            value: "680101",
+            label: "花地玛堂区"
+        }, {
+            value: "680102",
+            label: "圣安多尼堂区"
+        }, {
+            value: "680103",
+            label: "大堂区"
+        }, {
+            value: "680104",
+            label: "望德堂区"
+        }, {
+            value: "680105",
+            label: "风顺堂区"
+        }]
+	}, {
+		value: "680200",
+		label: "离岛",
+        children: [{
+            value: "680201",
+            label: "嘉模堂区"
+        }, {
+            value: "680202",
+            label: "圣方济各堂区"
+        }]
+	}]
+}]
+export default cityData

+ 754 - 0
components/w-picker/date-picker.vue

@@ -0,0 +1,754 @@
+<template>
+	<view class="w-picker-view">
+		<picker-view v-if="fields=='year'" class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.years" :key="index">{{item}}年</view>
+			</picker-view-column>
+		</picker-view>
+		<picker-view v-if="fields=='month'" class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.years" :key="index">{{item}}年</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.months" :key="index">{{item}}月</view>
+			</picker-view-column>
+		</picker-view>
+		<picker-view v-if="fields=='day'" class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.years" :key="index">{{item}}年</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.months" :key="index">{{item}}月</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.days" :key="index">{{item}}日</view>
+			</picker-view-column>
+		</picker-view>
+		<picker-view v-if="fields=='hour'" class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.years" :key="index">{{item}}年</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.months" :key="index">{{item}}月</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.days" :key="index">{{item}}日</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.hours" :key="index">{{item}}时</view>
+			</picker-view-column>
+		</picker-view>
+		<picker-view v-if="fields=='minute'" class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.years" :key="index">{{item}}年</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.months" :key="index">{{item}}月</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.days" :key="index">{{item}}日</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.hours" :key="index">{{item}}时</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.minutes" :key="index">{{item}}分</view>
+			</picker-view-column>
+		</picker-view>
+		<picker-view v-if="fields=='second'" class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.years" :key="index">{{item}}年</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.months" :key="index">{{item}}月</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.days" :key="index">{{item}}日</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.hours" :key="index">{{item}}时</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.minutes" :key="index">{{item}}分</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.seconds" :key="index">{{item}}秒</view>
+			</picker-view-column>
+		</picker-view>
+		<!-- <picker-view class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.years" :key="index">{{item}}年</view>
+			</picker-view-column>
+			<picker-view-column v-if="fields=='month'||fields=='day'||fields=='hour'||fields=='minute'||fields=='second'">
+				<view class="w-picker-item" v-for="(item,index) in range.months" :key="index">{{item}}月</view>
+			</picker-view-column>
+			<picker-view-column v-if="fields=='day'||fields=='hour'||fields=='minute'||fields=='second'">
+				<view class="w-picker-item" v-for="(item,index) in range.days" :key="index">{{item}}日</view>
+			</picker-view-column>
+			<picker-view-column v-if="fields=='hour'||fields=='minute'||fields=='second'">
+				<view class="w-picker-item" v-for="(item,index) in range.hours" :key="index">{{item}}时</view>
+			</picker-view-column>
+			<picker-view-column v-if="fields=='minute'||fields=='second'">
+				<view class="w-picker-item" v-for="(item,index) in range.minutes" :key="index">{{item}}分</view>
+			</picker-view-column>
+			<picker-view-column v-if="fields=='second'">
+				<view class="w-picker-item" v-for="(item,index) in range.seconds" :key="index">{{item}}秒</view>
+			</picker-view-column>
+		</picker-view> -->
+	</view>
+</template>
+
+<script>
+	let _this=null;
+	export default {
+		data() {
+			return {
+				pickVal:[],
+				range:{
+					years:[],
+					months:[],
+					days:[],
+					hours:[],
+					minutes:[],
+					seconds:[]
+				},
+				checkObj:{}
+			};
+		},
+		props:{
+			itemHeight:{
+				type:String,
+				default:"44px"
+			},
+			startYear:{
+				type:[String,Number],
+				default:""
+			},
+			endYear:{
+				type:[String,Number],
+				default:""
+			},
+			value:{
+				type:[String,Array,Number],
+				default:""
+			},
+			current:{//是否默认选中当前日期
+				type:Boolean,
+				default:false
+			},
+			disabledAfter:{//是否禁用当前之后的日期
+				type:Boolean,
+				default:false
+			},
+			fields:{
+				type:String,
+				default:"day"
+			}
+		},
+		watch:{
+			fields(val){
+				this.initData();
+			},
+			value(val){
+				this.initData();
+			}
+		},
+		created() {
+			_this=this;
+			_this.initData();
+		},
+		methods:{
+			formatNum(n){
+				return (Number(n)<10?'0'+Number(n):Number(n)+'');
+			},
+			checkValue(value){
+				let strReg,example
+				switch(this.fields){
+					case "year":
+						strReg=/^\d{4}$/;
+						example="2019";
+						break;
+					case "month":
+						strReg=/^\d{4}-\d{2}$/;
+						example="2019-02";
+						break;
+					case "day":
+						strReg=/^\d{4}-\d{2}-\d{2}$/;
+						example="2019-02-01";
+						break;
+					case "hour":
+						strReg=/^\d{4}-\d{2}-\d{2} \d{2}(:\d{2}){1,2}?$/;
+						example="2019-02-01 18:00:00或2019-02-01 18";
+						break;
+					case "minute":
+						strReg=/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}(:\d{2}){0,1}?$/;
+						example="2019-02-01 18:06:00或2019-02-01 18:06";
+						break;
+					case "second":
+						strReg=/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/;
+						example="2019-02-01 18:06:01";
+						break;
+				}
+				if(!strReg.test(value)){
+					console.log(new Error("请传入与mode、fields匹配的value值,例value="+example+""))
+				}
+				return strReg.test(value);
+			},
+			resetData(year,month,day,hour,minute){
+				let curDate=_this.getCurrenDate();
+				let curFlag=_this.current;
+				let curYear=curDate.curYear;
+				let curMonth=curDate.curMonth;
+				let curDay=curDate.curDay;
+				let curHour=curDate.curHour;
+				let curMinute=curDate.curMinute;
+				let curSecond=curDate.curSecond;
+				let months=[],days=[],hours=[],minutes=[],seconds=[];
+				let disabledAfter=_this.disabledAfter;
+				let monthsLen=disabledAfter?(year*1<curYear?12:curMonth):12;
+				let totalDays=new Date(year,month,0).getDate();//计算当月有几天;
+				let daysLen=disabledAfter?((year*1<curYear||month*1<curMonth)?totalDays:curDay):totalDays;
+				let hoursLen=disabledAfter?((year*1<curYear||month*1<curMonth||day*1<curDay)?24:curHour+1):24;
+				let minutesLen=disabledAfter?((year*1<curYear||month*1<curMonth||day*1<curDay||hour*1<curHour)?60:curMinute+1):60;
+				let secondsLen=disabledAfter?((year*1<curYear||month*1<curMonth||day*1<curDay||hour*1<curHour||minute*1<curMinute)?60:curSecond+1):60;
+				for(let month=1;month<=monthsLen;month++){
+					months.push(_this.formatNum(month));
+				};
+				for(let day=1;day<=daysLen;day++){
+					days.push(_this.formatNum(day));
+				}
+				for(let hour=0;hour<hoursLen;hour++){
+					hours.push(_this.formatNum(hour));
+				}
+				for(let minute=0;minute<minutesLen;minute++){
+					minutes.push(_this.formatNum(minute));
+				}
+				for(let second=0;second<secondsLen;second++){
+					seconds.push(_this.formatNum(second));
+				}
+				return{
+					months,
+					days,
+					hours,
+					minutes,
+					seconds
+				}
+			},
+			getData(dVal){
+				//用来处理初始化数据
+				let curFlag=_this.current;
+				let disabledAfter=_this.disabledAfter;
+				let fields=_this.fields;
+				let curDate=_this.getCurrenDate();
+				let curYear=curDate.curYear;
+				let curMonthdays=curDate.curMonthdays;
+				let curMonth=curDate.curMonth;
+				let curDay=curDate.curDay;
+				let curHour=curDate.curHour;
+				let curMinute=curDate.curMinute;
+				let curSecond=curDate.curSecond;
+				let defaultDate=_this.getDefaultDate();
+				let startYear=_this.getStartDate().getFullYear();
+				let endYear=_this.getEndDate().getFullYear();
+				//颗粒度,禁用当前之后日期仅对year,month,day,hour生效;分钟秒禁用没有意义,
+				let years=[],months=[],days=[],hours=[],minutes=[],seconds=[];
+				let year=dVal[0]*1;
+				let month=dVal[1]*1;
+				let day=dVal[2]*1;
+				let hour=dVal[3]*1;
+				let minute=dVal[4]*1;
+				let monthsLen=disabledAfter?(year<curYear?12:curDate.curMonth):12;
+				let daysLen=disabledAfter?((year<curYear||month<curMonth)?defaultDate.defaultDays:curDay):(curFlag?curMonthdays:defaultDate.defaultDays);
+				let hoursLen=disabledAfter?((year<curYear||month<curMonth||day<curDay)?24:curHour+1):24;
+				let minutesLen=disabledAfter?((year<curYear||month<curMonth||day<curDay||hour<curHour)?60:curMinute+1):60;
+				let secondsLen=disabledAfter?((year<curYear||month<curMonth||day<curDay||hour<curHour||minute<curMinute)?60:curSecond+1):60;
+				for(let year=startYear;year<=(disabledAfter?curYear:endYear);year++){
+					years.push(year.toString())
+				}
+				for(let month=1;month<=monthsLen;month++){
+					months.push(_this.formatNum(month));
+				}
+				for(let day=1;day<=daysLen;day++){
+					days.push(_this.formatNum(day));
+				}
+				for(let hour=0;hour<hoursLen;hour++){
+					hours.push(_this.formatNum(hour));
+				}
+				for(let minute=0;minute<minutesLen;minute++){
+					minutes.push(_this.formatNum(minute));
+				}
+				// for(let second=0;second<(disabledAfter?curDate.curSecond+1:60);second++){
+				// 	seconds.push(_this.formatNum(second));
+				// }
+				for(let second=0;second<60;second++){
+					seconds.push(_this.formatNum(second));
+				}
+				return {
+					years,
+					months,
+					days,
+					hours,
+					minutes,
+					seconds
+				}
+			},
+			getCurrenDate(){
+				let curDate=new Date();
+				let curYear=curDate.getFullYear();
+				let curMonth=curDate.getMonth()+1;
+				let curMonthdays=new Date(curYear,curMonth,0).getDate();
+				let curDay=curDate.getDate();
+				let curHour=curDate.getHours();
+				let curMinute=curDate.getMinutes();
+				let curSecond=curDate.getSeconds();
+				return{
+					curDate,
+					curYear,
+					curMonth,
+					curMonthdays,
+					curDay,
+					curHour,
+					curMinute,
+					curSecond
+				}
+			},
+			getDefaultDate(){
+				let value=_this.value;
+				let reg=/-/g;
+				let defaultDate=value?new Date(value.replace(reg,"/")):new Date();
+				let defaultYear=defaultDate.getFullYear();
+				let defaultMonth=defaultDate.getMonth()+1;
+				let defaultDay=defaultDate.getDate();
+				let defaultDays=new Date(defaultYear,defaultMonth,0).getDate()*1;
+				return{
+					defaultDate,
+					defaultYear,
+					defaultMonth,
+					defaultDay,
+					defaultDays
+				}
+			},
+			getStartDate(){
+				let start=_this.startYear;
+				let startDate="";
+				let reg=/-/g;
+				if(start){
+					startDate=new Date(start+"/01/01");
+				}else{
+					startDate=new Date("1970/01/01");
+				}
+				return startDate;
+			},
+			getEndDate(){
+				let end=_this.endYear;
+				let reg=/-/g;
+				let endDate="";
+				if(end){
+					endDate=new Date(end+"/12/01");
+				}else{
+					endDate=new Date();
+				}
+				return endDate;
+			},
+			getDval(){
+				let value=_this.value;
+				let fields=_this.fields;
+				let dVal=null;
+				let aDate=new Date();
+				let year=_this.formatNum(aDate.getFullYear());
+				let month=_this.formatNum(aDate.getMonth()+1);
+				let day=_this.formatNum(aDate.getDate());
+				let hour=_this.formatNum(aDate.getHours());
+				let minute=_this.formatNum(aDate.getMinutes());
+				let second=_this.formatNum(aDate.getSeconds());
+				if(value){
+					let flag=_this.checkValue(value);
+					if(!flag){
+						dVal=[year,month,day,hour,minute,second]
+					}else{
+						switch(_this.fields){
+							case "year":
+								dVal=value?[value]:[];	
+								break;
+							case "month":
+								dVal=value?value.split("-"):[];
+								break;
+							case "day":
+								dVal=value?value.split("-"):[];
+								break;
+							case "hour":
+								dVal=[...value.split(" ")[0].split("-"),...value.split(" ")[1].split(":")];
+								break;
+							case "minute":
+								dVal=value?[...value.split(" ")[0].split("-"),...value.split(" ")[1].split(":")]:[];
+								break;
+							case "second":
+								dVal=[...value.split(" ")[0].split("-"),...value.split(" ")[1].split(":")];
+								break;
+						}
+					}
+				}else{
+					dVal=[year,month,day,hour,minute,second]
+				}
+				return dVal;
+			},
+			initData(){
+				let startDate,endDate,startYear,endYear,startMonth,endMonth,startDay,endDay;
+				let years=[],months=[],days=[],hours=[],minutes=[],seconds=[];
+				let dVal=[],pickVal=[];
+				let value=_this.value;
+				let reg=/-/g;
+				let range={};
+				let result="",full="",year,month,day,hour,minute,second,obj={};
+				let defaultDate=_this.getDefaultDate();
+				let defaultYear=defaultDate.defaultYear;
+				let defaultMonth=defaultDate.defaultMonth;
+				let defaultDay=defaultDate.defaultDay;
+				let defaultDays=defaultDate.defaultDays;
+				let curFlag=this.current;
+				let disabledAfter=this.disabledAfter;
+				let curDate=_this.getCurrenDate();
+				let curYear=curDate.curYear;
+				let curMonth=curDate.curMonth;
+				let curMonthdays=curDate.curMonthdays;
+				let curDay=curDate.curDay;
+				let curHour=curDate.curHour;
+				let curMinute=curDate.curMinute;
+				let curSecond=curDate.curSecond;
+				let dateData=[];
+				dVal=_this.getDval();
+				startDate=this.getStartDate();
+				endDate=this.getEndDate();
+				startYear=startDate.getFullYear();
+				startMonth=startDate.getMonth();
+				startDay=startDate.getDate();
+				endYear=endDate.getFullYear();
+				endMonth=endDate.getMonth();
+				endDay=endDate.getDate();
+				dateData=_this.getData(dVal);
+				years=dateData.years;
+				months=dateData.months;
+				days=dateData.days;
+				hours=dateData.hours;
+				minutes=dateData.minutes;
+				seconds=dateData.seconds;
+				switch(_this.fields){
+					case "year":
+						pickVal=disabledAfter?[
+							dVal[0]&&years.indexOf(dVal[0])!=-1?years.indexOf(dVal[0]):0
+						]:(curFlag?[
+							years.indexOf(curYear+'')
+						]:[
+							dVal[0]&&years.indexOf(dVal[0])!=-1?years.indexOf(dVal[0]):0
+						]);
+						range={years};
+						year=dVal[0]?dVal[0]:years[0];
+						result=full=`${year}`;
+						obj={
+							year
+						}
+						break;
+					case "month":
+						pickVal=disabledAfter?[
+							dVal[0]&&years.indexOf(dVal[0])!=-1?years.indexOf(dVal[0]):0,
+							dVal[1]&&months.indexOf(dVal[1])!=-1?months.indexOf(dVal[1]):0
+						]:(curFlag?[
+							years.indexOf(curYear+''),
+							months.indexOf(_this.formatNum(curMonth))
+						]:[
+							dVal[0]&&years.indexOf(dVal[0])!=-1?years.indexOf(dVal[0]):0,
+							dVal[1]&&months.indexOf(dVal[1])!=-1?months.indexOf(dVal[1]):0
+						]);
+						range={years,months};
+						year=dVal[0]?dVal[0]:years[0];
+						month=dVal[1]?dVal[1]:months[0];
+						result=full=`${year+'-'+month}`;
+						obj={
+							year,
+							month
+						}
+						break;
+					case "day":
+						pickVal=disabledAfter?[
+							dVal[0]&&years.indexOf(dVal[0])!=-1?years.indexOf(dVal[0]):0,
+							dVal[1]&&months.indexOf(dVal[1])!=-1?months.indexOf(dVal[1]):0,
+							dVal[2]&&days.indexOf(dVal[2])!=-1?days.indexOf(dVal[2]):0
+						]:(curFlag?[
+							years.indexOf(curYear+''),
+							months.indexOf(_this.formatNum(curMonth)),
+							days.indexOf(_this.formatNum(curDay)),
+						]:[
+							dVal[0]&&years.indexOf(dVal[0])!=-1?years.indexOf(dVal[0]):0,
+							dVal[1]&&months.indexOf(dVal[1])!=-1?months.indexOf(dVal[1]):0,
+							dVal[2]&&days.indexOf(dVal[2])!=-1?days.indexOf(dVal[2]):0
+						]);
+						range={years,months,days};
+						year=dVal[0]?dVal[0]:years[0];
+						month=dVal[1]?dVal[1]:months[0];
+						day=dVal[2]?dVal[2]:days[0];
+						result=full=`${year+'-'+month+'-'+day}`;
+						obj={
+							year,
+							month,
+							day
+						}
+						break;
+					case "hour":
+						pickVal=disabledAfter?[
+							dVal[0]&&years.indexOf(dVal[0])!=-1?years.indexOf(dVal[0]):0,
+							dVal[1]&&months.indexOf(dVal[1])!=-1?months.indexOf(dVal[1]):0,
+							dVal[2]&&days.indexOf(dVal[2])!=-1?days.indexOf(dVal[2]):0,
+							dVal[3]&&hours.indexOf(dVal[3])!=-1?hours.indexOf(dVal[3]):0
+						]:(curFlag?[
+							years.indexOf(curYear+''),
+							months.indexOf(_this.formatNum(curMonth)),
+							days.indexOf(_this.formatNum(curDay)),
+							hours.indexOf(_this.formatNum(curHour)),
+						]:[
+							dVal[0]&&years.indexOf(dVal[0])!=-1?years.indexOf(dVal[0]):0,
+							dVal[1]&&months.indexOf(dVal[1])!=-1?months.indexOf(dVal[1]):0,
+							dVal[2]&&days.indexOf(dVal[2])!=-1?days.indexOf(dVal[2]):0,
+							dVal[3]&&hours.indexOf(dVal[3])!=-1?hours.indexOf(dVal[3]):0
+						]);
+						range={years,months,days,hours};
+						year=dVal[0]?dVal[0]:years[0];
+						month=dVal[1]?dVal[1]:months[0];
+						day=dVal[2]?dVal[2]:days[0];
+						hour=dVal[3]?dVal[3]:hours[0];
+						result=`${year+'-'+month+'-'+day+' '+hour}`;
+						full=`${year+'-'+month+'-'+day+' '+hour+':00:00'}`;
+						obj={
+							year,
+							month,
+							day,
+							hour
+						}
+						break;
+					case "minute":
+						pickVal=disabledAfter?[
+							dVal[0]&&years.indexOf(dVal[0])!=-1?years.indexOf(dVal[0]):0,
+							dVal[1]&&months.indexOf(dVal[1])!=-1?months.indexOf(dVal[1]):0,
+							dVal[2]&&days.indexOf(dVal[2])!=-1?days.indexOf(dVal[2]):0,
+							dVal[3]&&hours.indexOf(dVal[3])!=-1?hours.indexOf(dVal[3]):0,
+							dVal[4]&&minutes.indexOf(dVal[4])!=-1?minutes.indexOf(dVal[4]):0
+						]:(curFlag?[
+							years.indexOf(curYear+''),
+							months.indexOf(_this.formatNum(curMonth)),
+							days.indexOf(_this.formatNum(curDay)),
+							hours.indexOf(_this.formatNum(curHour)),
+							minutes.indexOf(_this.formatNum(curMinute)),
+						]:[
+							dVal[0]&&years.indexOf(dVal[0])!=-1?years.indexOf(dVal[0]):0,
+							dVal[1]&&months.indexOf(dVal[1])!=-1?months.indexOf(dVal[1]):0,
+							dVal[2]&&days.indexOf(dVal[2])!=-1?days.indexOf(dVal[2]):0,
+							dVal[3]&&hours.indexOf(dVal[3])!=-1?hours.indexOf(dVal[3]):0,
+							dVal[4]&&minutes.indexOf(dVal[4])!=-1?minutes.indexOf(dVal[4]):0
+						]);
+						range={years,months,days,hours,minutes};
+						year=dVal[0]?dVal[0]:years[0];
+						month=dVal[1]?dVal[1]:months[0];
+						day=dVal[2]?dVal[2]:days[0];
+						hour=dVal[3]?dVal[3]:hours[0];
+						minute=dVal[4]?dVal[4]:minutes[0];
+						full=`${year+'-'+month+'-'+day+' '+hour+':'+minute+':00'}`;
+						result=`${year+'-'+month+'-'+day+' '+hour+':'+minute}`;
+						obj={
+							year,
+							month,
+							day,
+							hour,
+							minute
+						}
+						break;
+					case "second":
+						pickVal=disabledAfter?[
+							dVal[0]&&years.indexOf(dVal[0])!=-1?years.indexOf(dVal[0]):0,
+							dVal[1]&&months.indexOf(dVal[1])!=-1?months.indexOf(dVal[1]):0,
+							dVal[2]&&days.indexOf(dVal[2])!=-1?days.indexOf(dVal[2]):0,
+							dVal[3]&&hours.indexOf(dVal[3])!=-1?hours.indexOf(dVal[3]):0,
+							dVal[4]&&minutes.indexOf(dVal[4])!=-1?minutes.indexOf(dVal[4]):0,
+							dVal[5]&&seconds.indexOf(dVal[5])!=-1?seconds.indexOf(dVal[5]):0
+						]:(curFlag?[
+							years.indexOf(curYear+''),
+							months.indexOf(_this.formatNum(curMonth)),
+							days.indexOf(_this.formatNum(curDay)),
+							hours.indexOf(_this.formatNum(curHour)),
+							minutes.indexOf(_this.formatNum(curMinute)),
+							seconds.indexOf(_this.formatNum(curSecond)),
+						]:[
+							dVal[0]&&years.indexOf(dVal[0])!=-1?years.indexOf(dVal[0]):0,
+							dVal[1]&&months.indexOf(dVal[1])!=-1?months.indexOf(dVal[1]):0,
+							dVal[2]&&days.indexOf(dVal[2])!=-1?days.indexOf(dVal[2]):0,
+							dVal[3]&&hours.indexOf(dVal[3])!=-1?hours.indexOf(dVal[3]):0,
+							dVal[4]&&minutes.indexOf(dVal[4])!=-1?minutes.indexOf(dVal[4]):0,
+							dVal[5]&&seconds.indexOf(dVal[5])!=-1?seconds.indexOf(dVal[5]):0
+						]);
+						range={years,months,days,hours,minutes,seconds};
+						year=dVal[0]?dVal[0]:years[0];
+						month=dVal[1]?dVal[1]:months[0];
+						day=dVal[2]?dVal[2]:days[0];
+						hour=dVal[3]?dVal[3]:hours[0];
+						minute=dVal[4]?dVal[4]:minutes[0];
+						second=dVal[5]?dVal[5]:seconds[0];
+						result=full=`${year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second}`;
+						obj={
+							year,
+							month,
+							day,
+							hour,
+							minute,
+							second
+						}
+						break;
+					default:
+						range={years,months,days};
+						break;
+				}
+				_this.range=range;
+				_this.checkObj=obj;
+				_this.$nextTick(()=>{
+					_this.pickVal=pickVal;
+				});
+				_this.$emit("change",{
+					result:result,
+					value:full,
+					obj:obj
+				})
+			},
+			handlerChange(e){
+				let arr=[...e.detail.value];
+				let data=_this.range;
+				let year="",month="",day="",hour="",minute="",second="";
+				let result="",full="",obj={};
+				let months=null,days=null,hours=null,minutes=null,seconds=null;
+				let disabledAfter=_this.disabledAfter;
+				year=(arr[0]||arr[0]==0)?data.years[arr[0]]||data.years[data.years.length-1]:"";
+				month=(arr[1]||arr[1]==0)?data.months[arr[1]]||data.months[data.months.length-1]:"";
+				day=(arr[2]||arr[2]==0)?data.days[arr[2]]||data.days[data.days.length-1]:"";
+				hour=(arr[3]||arr[3]==0)?data.hours[arr[3]]||data.hours[data.hours.length-1]:"";
+				minute=(arr[4]||arr[4]==0)?data.minutes[arr[4]]||data.minutes[data.minutes.length-1]:"";
+				second=(arr[5]||arr[5]==0)?data.seconds[arr[5]]||data.seconds[data.seconds.length-1]:"";
+				switch(_this.fields){
+					case "year":
+						result=full=`${year}`;
+						obj={
+							year
+						};
+						break;
+					case "month":
+						result=full=`${year+'-'+month}`;
+						if(this.disabledAfter)months=this.resetData(year,month,day,hour,minute).months;
+						if(months)_this.range.months=months;
+						obj={
+							year,
+							month
+						}
+						break;
+					case "day":
+						result=full=`${year+'-'+month+'-'+day}`;
+						if(this.disabledAfter){
+							months=this.resetData(year,month,day,hour,minute).months;
+							days=this.resetData(year,month,day,hour,minute).days;
+						}else{
+							if(year%4==0||(month!=this.checkObj.month)){
+								days=this.resetData(year,month,day,hour,minute).days;
+							}
+						}
+						if(months)_this.range.months=months;
+						if(days)_this.range.days=days;
+						obj={
+							year,
+							month,
+							day
+						}
+						break;
+					case "hour":
+						result=`${year+'-'+month+'-'+day+' '+hour}`;
+						full=`${year+'-'+month+'-'+day+' '+hour+':00:00'}`;
+						if(this.disabledAfter){
+							months=this.resetData(year,month,day,hour,minute).months;
+							days=this.resetData(year,month,day,hour,minute).days;
+							hours=this.resetData(year,month,day,hour,minute).hours;
+						}else{
+							if(year%4==0||(month!=this.checkObj.month)){
+								days=this.resetData(year,month,day,hour,minute).days;
+							}
+						}
+						if(months)_this.range.months=months;
+						if(days)_this.range.days=days;
+						if(hours)_this.range.hours=hours;
+						obj={
+							year,
+							month,
+							day,
+							hour
+						}
+						break;
+					case "minute":
+						full=`${year+'-'+month+'-'+day+' '+hour+':'+minute+':00'}`;
+						result=`${year+'-'+month+'-'+day+' '+hour+':'+minute}`;
+						if(this.disabledAfter){
+							months=this.resetData(year,month,day,hour,minute).months;
+							days=this.resetData(year,month,day,hour,minute).days;
+							hours=this.resetData(year,month,day,hour,minute).hours;
+							minutes=this.resetData(year,month,day,hour,minute).minutes;
+						}else{
+							if(year%4==0||(month!=this.checkObj.month)){
+								days=this.resetData(year,month,day,hour,minute).days;
+							}
+						}
+						if(months)_this.range.months=months;
+						if(days)_this.range.days=days;
+						if(hours)_this.range.hours=hours;
+						if(minutes)_this.range.minutes=minutes;
+						obj={
+							year,
+							month,
+							day,
+							hour,
+							minute
+						};
+						break;
+					case "second":
+						result=full=`${year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second}`;
+						this.resetData(year,month,day,hour,minute)
+						if(this.disabledAfter){
+							months=this.resetData(year,month,day,hour,minute).months;
+							days=this.resetData(year,month,day,hour,minute).days;
+							hours=this.resetData(year,month,day,hour,minute).hours;
+							minutes=this.resetData(year,month,day,hour,minute).minutes;
+							//seconds=this.resetData(year,month,day,hour,minute).seconds;
+						}else{
+							if(year%4==0||(month!=this.checkObj.month)){
+								days=this.resetData(year,month,day,hour,minute).days;
+							}
+						}
+						if(months)_this.range.months=months;
+						if(days)_this.range.days=days;
+						if(hours)_this.range.hours=hours;
+						if(minutes)_this.range.minutes=minutes;
+						//if(seconds)_this.range.seconds=seconds;
+						obj={
+							year,
+							month,
+							day,
+							hour,
+							minute,
+							second
+						}
+						break;
+				}
+				this.checkObj=obj;
+				_this.$emit("change",{
+					result:result,
+					value:full,
+					obj:obj
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import "./w-picker.css";
+</style>

+ 341 - 0
components/w-picker/half-picker.vue

@@ -0,0 +1,341 @@
+<template>
+	<view class="w-picker-view">
+		<picker-view class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.years" :key="index">{{item}}年</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.months" :key="index">{{item}}月</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.days" :key="index">{{item}}日</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.sections" :key="index">{{item}}</view>
+			</picker-view-column>
+		</picker-view>
+	</view>
+</template>
+<script>
+	let _this=null;
+	export default {
+		data() {
+			return {
+				pickVal:[],
+				range:{},
+				checkObj:{}
+			};
+		},
+		props:{
+			itemHeight:{
+				type:String,
+				default:"44px"
+			},
+			startYear:{
+				type:String,
+				default:""
+			},
+			endYear:{
+				type:String,
+				default:""
+			},
+			value:{
+				type:[String,Array,Number],
+				default:""
+			},
+			current:{//是否默认选中当前日期
+				type:Boolean,
+				default:false
+			},
+			disabledAfter:{//是否禁用当前之后的日期
+				type:Boolean,
+				default:false
+			}
+		},
+		watch:{
+			value(val){
+				this.initData();
+			}
+		},
+		created() {
+			_this=this;
+			_this.initData();
+		},
+		methods:{
+			formatNum(n){
+				return (Number(n)<10?'0'+Number(n):Number(n)+'');
+			},
+			checkValue(value){
+				let strReg=/^\d{4}-\d{2}-\d{2} [\u4e00-\u9fa5]{2}$/,example;
+				if(!strReg.test(value)){
+					console.log(new Error("请传入与mode、fields匹配的value值,例value="+example+""))
+				}
+				return strReg.test(value);
+			},
+			resetData(year,month,day){
+				let curDate=_this.getCurrenDate();
+				let curFlag=_this.current;
+				let curYear=curDate.curYear;
+				let curMonth=curDate.curMonth;
+				let curDay=curDate.curDay;
+				let curHour=curDate.curHour;
+				let months=[],days=[],sections=[];
+				let disabledAfter=_this.disabledAfter;
+				let monthsLen=disabledAfter?(year*1<curYear?12:curMonth):12;
+				let totalDays=new Date(year,month,0).getDate();//计算当月有几天;
+				let daysLen=disabledAfter?((year*1<curYear||month*1<curMonth)?totalDays:curDay):totalDays;
+				let sectionFlag=disabledAfter?((year*1<curYear||month*1<curMonth||day*1<curDay)==true?false:true):(curHour>12==true?true:false);
+				sections=["上午","下午"];
+				for(let month=1;month<=monthsLen;month++){
+					months.push(_this.formatNum(month));
+				};
+				for(let day=1;day<=daysLen;day++){
+					days.push(_this.formatNum(day));
+				}
+				if(sectionFlag){
+					sections=["上午"];
+				}
+				return{
+					months,
+					days,
+					sections
+				}
+			},
+			getData(dVal){
+				//用来处理初始化数据
+				let curFlag=_this.current;
+				let disabledAfter=_this.disabledAfter;
+				let curDate=_this.getCurrenDate();
+				let curYear=curDate.curYear;
+				let curMonthdays=curDate.curMonthdays;
+				let curMonth=curDate.curMonth;
+				let curDay=curDate.curDay;
+				let defaultDate=_this.getDefaultDate();
+				let startYear=_this.getStartDate().getFullYear();
+				let endYear=_this.getEndDate().getFullYear();
+				let years=[],months=[],days=[],sections=[];
+				let year=dVal[0]*1;
+				let month=dVal[1]*1;
+				let day=dVal[2]*1;
+				let monthsLen=disabledAfter?(year<curYear?12:curDate.curMonth):12;
+				let daysLen=disabledAfter?((year<curYear||month<curMonth)?defaultDate.defaultDays:curDay):(curFlag?curMonthdays:defaultDate.defaultDays);
+
+				for(let year=startYear;year<=(disabledAfter?curYear:endYear);year++){
+					years.push(year.toString())
+				}
+				for(let month=1;month<=monthsLen;month++){
+					months.push(_this.formatNum(month));
+				}
+				for(let day=1;day<=daysLen;day++){
+					days.push(_this.formatNum(day));
+				}
+				sections=["上午","下午"];
+				return {
+					years,
+					months,
+					days,
+					sections
+				}
+			},
+			getCurrenDate(){
+				let curDate=new Date();
+				let curYear=curDate.getFullYear();
+				let curMonth=curDate.getMonth()+1;
+				let curMonthdays=new Date(curYear,curMonth,0).getDate();
+				let curDay=curDate.getDate();
+				let curHour=curDate.getHours();
+				let curSection="上午";
+				if(curHour>12){
+					curSection="下午";
+				}
+				return{
+					curDate,
+					curYear,
+					curMonth,
+					curMonthdays,
+					curDay,
+					curHour,
+					curSection
+				}
+			},
+			getDefaultDate(){
+				let value=_this.value;
+				let reg=/-/g;
+				let defaultDate=value?new Date(value.split(" ")[0].replace(reg,"/")):new Date();
+				let defaultYear=defaultDate.getFullYear();
+				let defaultMonth=defaultDate.getMonth()+1;
+				let defaultDay=defaultDate.getDate();
+				let defaultDays=new Date(defaultYear,defaultMonth,0).getDate()*1;
+				return{
+					defaultDate,
+					defaultYear,
+					defaultMonth,
+					defaultDay,
+					defaultDays
+				}
+			},
+			getStartDate(){
+				let start=_this.startYear;
+				let startDate="";
+				let reg=/-/g;
+				if(start){
+					startDate=new Date(start+"/01/01");
+				}else{
+					startDate=new Date("1970/01/01");
+				}
+				return startDate;
+			},
+			getEndDate(){
+				let end=_this.endYear;
+				let reg=/-/g;
+				let endDate="";
+				if(end){
+					endDate=new Date(end+"/12/31");
+				}else{
+					endDate=new Date();
+				}
+				return endDate;
+			},
+			getDval(){
+				let value=_this.value;
+				let dVal=null;
+				let aDate=new Date();
+				let year=_this.formatNum(aDate.getFullYear());
+				let month=_this.formatNum(aDate.getMonth()+1);
+				let day=_this.formatNum(aDate.getDate());
+				let hour=aDate.getHours();
+				let section="上午";
+				if(hour)section="下午";
+				if(value){
+					let flag=_this.checkValue(value);
+					if(!flag){
+						dVal=[year,month,day,section]
+					}else{
+						let v=value.split(" ");
+						dVal=[...v[0].split("-"),v[1]];
+					}
+				}else{
+					dVal=[year,month,day,section]
+				}
+				return dVal;
+			},
+			initData(){
+				let startDate,endDate,startYear,endYear,startMonth,endMonth,startDay,endDay;
+				let years=[],months=[],days=[],sections=[];
+				let dVal=[],pickVal=[];
+				let value=_this.value;
+				let reg=/-/g;
+				let range={};
+				let result="",full="",year,month,day,section,obj={};
+				let defaultDate=_this.getDefaultDate();
+				let defaultYear=defaultDate.defaultYear;
+				let defaultMonth=defaultDate.defaultMonth;
+				let defaultDay=defaultDate.defaultDay;
+				let defaultDays=defaultDate.defaultDays;
+				let curFlag=this.current;
+				let disabledAfter=this.disabledAfter;
+				let curDate=_this.getCurrenDate();
+				let curYear=curDate.curYear;
+				let curMonth=curDate.curMonth;
+				let curMonthdays=curDate.curMonthdays;
+				let curDay=curDate.curDay;
+				let curSection=curDate.curSection;
+				let dateData=[];
+				dVal=_this.getDval();
+				startDate=this.getStartDate();
+				endDate=this.getEndDate();
+				startYear=startDate.getFullYear();
+				startMonth=startDate.getMonth();
+				startDay=startDate.getDate();
+				endYear=endDate.getFullYear();
+				endMonth=endDate.getMonth();
+				endDay=endDate.getDate();
+				dateData=_this.getData(dVal);
+				years=dateData.years;
+				months=dateData.months;
+				days=dateData.days;
+				sections=dateData.sections;
+				pickVal=disabledAfter?[
+					dVal[0]&&years.indexOf(dVal[0])!=-1?years.indexOf(dVal[0]):0,
+					dVal[1]&&months.indexOf(dVal[1])!=-1?months.indexOf(dVal[1]):0,
+					dVal[2]&&days.indexOf(dVal[2])!=-1?days.indexOf(dVal[2]):0,
+					dVal[3]&&sections.indexOf(dVal[3])!=-1?sections.indexOf(dVal[3]):0
+				]:(curFlag?[
+					years.indexOf(curYear+''),
+					months.indexOf(_this.formatNum(curMonth)),
+					days.indexOf(_this.formatNum(curDay)),
+					sections.indexOf(_this.formatNum(curSection)),
+				]:[
+					dVal[0]&&years.indexOf(dVal[0])!=-1?years.indexOf(dVal[0]):0,
+					dVal[1]&&months.indexOf(dVal[1])!=-1?months.indexOf(dVal[1]):0,
+					dVal[2]&&days.indexOf(dVal[2])!=-1?days.indexOf(dVal[2]):0,
+					dVal[3]&&sections.indexOf(dVal[3])!=-1?sections.indexOf(dVal[3]):0
+				]);
+				range={years,months,days,sections};
+				year=dVal[0]?dVal[0]:years[0];
+				month=dVal[1]?dVal[1]:months[0];
+				day=dVal[2]?dVal[2]:days[0];
+				section=dVal[3]?dVal[3]:sections[0];
+				result=full=`${year+'-'+month+'-'+day+' '+section}`;
+				obj={
+					year,
+					month,
+					day,
+					section
+				}
+				_this.range=range;
+				_this.checkObj=obj;
+				_this.$nextTick(()=>{
+					_this.pickVal=pickVal;
+				});
+				_this.$emit("change",{
+					result:result,
+					value:full,
+					obj:obj
+				})
+			},
+			handlerChange(e){
+				let arr=[...e.detail.value];
+				let data=_this.range;
+				let year="",month="",day="",section="";
+				let result="",full="",obj={};
+				let months=null,days=null,sections=null;
+				let disabledAfter=_this.disabledAfter;
+				year=(arr[0]||arr[0]==0)?data.years[arr[0]]||data.years[data.years.length-1]:"";
+				month=(arr[1]||arr[1]==0)?data.months[arr[1]]||data.months[data.months.length-1]:"";
+				day=(arr[2]||arr[2]==0)?data.days[arr[2]]||data.days[data.days.length-1]:"";
+				section=(arr[3]||arr[3]==0)?data.sections[arr[3]]||data.sections[data.sections.length-1]:"";
+				result=full=`${year+'-'+month+'-'+day+' '+section}`;
+				let resetData=_this.resetData(year,month,day);
+				if(this.disabledAfter){
+					months=resetData.months;
+					days=resetData.days;
+					sections=resetData.sections;
+				}else{
+					if(year%4==0||(month!=this.checkObj.month)){
+						days=resetData.days;
+					}
+				}
+				if(months)_this.range.months=months;
+				if(days)_this.range.days=days;
+				if(sections)_this.range.sections=sections;
+				obj={
+					year,
+					month,
+					day,
+					section
+				}
+				this.checkObj=obj;
+				_this.$emit("change",{
+					result:result,
+					value:full,
+					obj:obj
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import "./w-picker.css";
+</style>

+ 264 - 0
components/w-picker/linkage-picker.vue

@@ -0,0 +1,264 @@
+<template>
+	<view class="w-picker-view">
+		<picker-view class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
+			<picker-view-column v-for="(group,gIndex) in range" :key="gIndex">
+				<view class="w-picker-item" v-for="(item,index) in group" :key="index">{{item[nodeKey]}}</view>
+			</picker-view-column>
+		</picker-view>
+	</view>
+</template>
+
+<script>
+	let _this=null;
+	export default {
+		data() {
+			return {
+				pickVal:[],
+				range:[],
+				checkObj:{}
+			};
+		},
+		props:{
+			itemHeight:{
+				type:String,
+				default:"44px"
+			},
+			value:{
+				type:[Array,String],
+				default:""
+			},
+			defaultType:{
+				type:String,
+				default:"label"
+			},
+			options:{
+				type:Array,
+				default(){
+					return []
+				}
+			},
+			defaultProps:{
+				type:Object,
+				default(){
+					return{
+						lable:"label",
+						value:"value",
+						children:"children"
+					}
+				}
+			},
+			level:{
+				//多级联动层级,表示几级联动
+				type:[Number,String],
+				default:2
+			}
+		},
+		computed:{
+			nodeKey(){
+				return _this.defaultProps.label;
+			},
+			nodeVal(){
+				return _this.defaultProps.value;
+			},
+			nodeChild(){
+				return _this.defaultProps.children;
+			}
+		},
+		watch:{
+			value(val){
+				if(_this.options.length!=0){
+					this.initData();
+				}
+			},
+			options(val){
+				this.initData();
+			}
+		},
+		created() {
+			_this=this;
+			if(_this.options.length!=0){
+				_this.initData();
+			}
+		},
+		methods:{
+			getData(){
+				//用来处理初始化数据
+				let options=_this.options;
+				let col1={},col2={},col3={},col4={};
+				let arr1=options,arr2=[],arr3=[],arr4=[];
+				let col1Index=0,col2Index=0,col3Index=0,col4Index=0;
+				let a1="",a2="",a3="",a4="";
+				let dVal=[],obj={};
+				let value=this.value;
+				let data=[];
+				a1=value[0];
+				a2=value[1];
+				if(_this.level>2){
+					a3=value[2];
+				}
+				if(_this.level>3){
+					a4=value[3];
+				};
+				/*第1列*/
+				col1Index=arr1.findIndex((v)=>{
+					return v[_this.defaultType]==a1
+				});
+				col1Index=value?(col1Index!=-1?col1Index:0):0;
+				col1=arr1[col1Index];
+				
+				/*第2列*/
+				arr2=arr1[col1Index][_this.nodeChild];
+				col2Index=arr2.findIndex((v)=>{
+					return v[_this.defaultType]==a2
+				});
+				col2Index=value?(col2Index!=-1?col2Index:0):0;
+				col2=arr2[col2Index];
+				
+				// /*第3列*/
+				// if(_this.level>2){
+				// 	arr3=arr2[col2Index][_this.nodeChild];
+				// 	col3Index=arr3.findIndex((v)=>{
+				// 		return v[_this.defaultType]==a3;
+				// 	});
+				// 	col3Index=value?(col3Index!=-1?col3Index:0):0;
+				// 	col3=arr3[col3Index];
+				// };
+				
+				
+				
+				switch(_this.level*1){
+					case 2:
+						dVal=[col1Index,col2Index];
+						obj={
+							col1,
+							col2
+						}
+						data=[arr1,arr2];
+						break;
+					case 3:
+						dVal=[col1Index,col2Index,col3Index];
+						obj={
+							col1,
+							col2,
+							col3
+						}
+						data=[arr1,arr2,arr3];
+						break;
+					case 4:
+						dVal=[col1Index,col2Index,col3Index,col4Index];
+						obj={
+							col1,
+							col2,
+							col3,
+							col4
+						}
+						data=[arr1,arr2,arr3,arr4];
+						break
+				}
+				return {
+					data,
+					dVal,
+					obj
+				}
+			},
+			initData(){
+				let dataData=_this.getData();
+				let data=dataData.data;
+				let arr1=data[0];
+				let arr2=data[1];
+				let arr3=data[2]||[];
+				let arr4=data[3]||[];
+				let obj=dataData.obj;
+				let col1=obj.col1,col2=obj.col2,col3=obj.col3||{},col4=obj.col4||{};
+				let result="",value=[];
+				let range=[];
+				switch(_this.level){
+					case 2:
+						value=[col1[_this.nodeVal],col2[_this.nodeVal]];
+						result=`${col1[_this.nodeKey]+col2[_this.nodeKey]}`;
+						range=[arr1,arr2];
+						break;
+					case 3:
+						value=[col1[_this.nodeVal],col2[_this.nodeVal],col3[_this.nodeVal]];
+						result=`${col1[_this.nodeKey]+col2[_this.nodeKey]+col3[_this.nodeKey]}`;
+						range=[arr1,arr2,arr3];
+						break;
+					case 4:
+						value=[col1[_this.nodeVal],col2[_this.nodeVal],col3[_this.nodeVal],col4[_this.nodeVal]];
+						result=`${col1[_this.nodeKey]+col2[_this.nodeKey]+col3[_this.nodeKey]+col4[_this.nodeKey]}`;
+						range=[arr1,arr2,arr3,arr4];
+						break;
+				}
+				_this.range=range;
+				_this.checkObj=obj;
+				_this.$nextTick(()=>{
+					_this.pickVal=dataData.dVal;
+				});
+				_this.$emit("change",{
+					result:result,
+					value:value,
+					obj:obj
+				})
+			},
+			handlerChange(e){
+				let arr=[...e.detail.value];
+				let col1Index=arr[0],col2Index=arr[1],col3Index=arr[2]||0,col4Index=arr[3]||0;
+				let arr1=[],arr2=[],arr3=[],arr4=[];
+				let col1,col2,col3,col4,obj={};
+				let result="",value=[];
+				arr1=_this.options;
+				arr2=(arr1[col1Index]&&arr1[col1Index][_this.nodeChild])||arr1[arr1.length-1][_this.nodeChild]||[];
+				col1=arr1[col1Index]||arr1[arr1.length-1]||{};
+				col2=arr2[col2Index]||arr2[arr2.length-1]||{};
+				if(_this.level>2){
+					arr3=(arr2[col2Index]&&arr2[col2Index][_this.nodeChild])||arr2[arr2.length-1][_this.nodeChild];
+					col3=arr3[col3Index]||arr3[arr3.length-1]||{};
+				}
+				switch(_this.level){
+					case 2:
+						obj={
+							col1,
+							col2
+						}
+						_this.range=[arr1,arr2];
+						result=`${(col1[_this.nodeKey]||'')+(col2[_this.nodeKey]||'')}`;
+						value=[col1[_this.nodeVal]||'',col2[_this.nodeVal]||''];
+						break;
+					case 3:
+						obj={
+							col1,
+							col2,
+							col3
+						}
+						_this.range=[arr1,arr2,arr3];
+						result=`${(col1[_this.nodeKey]||'')+(col2[_this.nodeKey]||'')+(col3[_this.nodeKey]||'')}`;
+						value=[col1[_this.nodeVal]||'',col2[_this.nodeVal]||'',col3[_this.nodeVal]||''];
+						break;
+					case 4:
+						obj={
+							col1,
+							col2,
+							col3,
+							col4
+						}
+						_this.range=[arr1,arr2,arr3,arr4];
+						result=`${(col1[_this.nodeKey]||'')+(col2[_this.nodeKey]||'')+(col3[_this.nodeKey]||'')}`;
+						value=[col1[_this.nodeVal]||'',col2[_this.nodeVal]||'',col3[_this.nodeVal]||''];
+						break;
+				}
+				_this.checkObj=obj;
+				_this.pickVal=arr;
+				_this.$emit("change",{
+					result:result,
+					value:value,
+					obj:obj
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import "./w-picker.css";	
+</style>
+

+ 345 - 0
components/w-picker/range-picker.vue

@@ -0,0 +1,345 @@
+<template>
+	<view class="w-picker-view">
+		<picker-view  class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
+			<picker-view-column class="w-picker-flex2">
+				<view class="w-picker-item" v-for="(item,index) in range.fyears" :key="index">{{item}}年</view>
+			</picker-view-column>
+			<picker-view-column class="w-picker-flex2">
+				<view class="w-picker-item" v-for="(item,index) in range.fmonths" :key="index">{{item}}月</view>
+			</picker-view-column>
+			<picker-view-column class="w-picker-flex2">
+				<view class="w-picker-item" v-for="(item,index) in range.fdays" :key="index">{{item}}日</view>
+			</picker-view-column>
+			<picker-view-column class="w-picker-flex1">
+				<view class="w-picker-item">-</view>
+			</picker-view-column>
+			<picker-view-column class="w-picker-flex2">
+				<view class="w-picker-item" v-for="(item,index) in range.tyears" :key="index">{{item}}年</view>
+			</picker-view-column>
+			<picker-view-column class="w-picker-flex2">
+				<view class="w-picker-item" v-for="(item,index) in range.tmonths" :key="index">{{item}}月</view>
+			</picker-view-column>
+			<picker-view-column class="w-picker-flex2">
+				<view class="w-picker-item" v-for="(item,index) in range.tdays" :key="index">{{item}}日</view>
+			</picker-view-column>
+		</picker-view>
+	</view>
+</template>
+
+<script>
+	let _this=null;
+	export default {
+		data() {
+			return {
+				pickVal:[],
+				range:{},
+				checkObj:{}
+			};
+		},
+		props:{
+			itemHeight:{
+				type:String,
+				default:"44px"
+			},
+			value:{
+				type:Array,
+				default(){
+					return []
+				}
+			},
+			current:{//是否默认选中当前日期
+				type:Boolean,
+				default:false
+			},
+			startYear:{
+				type:[String,Number],
+				default:1970
+			},
+			endYear:{
+				type:[String,Number],
+				default:new Date().getFullYear()
+			}
+		},
+		watch:{
+			value(val){
+				this.initData();
+			}
+		},
+		created() {
+			_this=this;
+			_this.initData();
+		},
+		methods:{
+			formatNum(n){
+				return (Number(n)<10?'0'+Number(n):Number(n)+'');
+			},
+			checkValue(value){
+				let strReg=/^\d{4}-\d{2}-\d{2}$/,example="2020-04-03";
+				if(!strReg.test(value[0])||!strReg.test(value[1])){
+					console.log(new Error("请传入与mode匹配的value值,例["+example+","+example+"]"))
+				}
+				return strReg.test(value[0])&&strReg.test(value[1]);
+			},
+			resetToData(fmonth,fday,tyear,tmonth){
+				let range=_this.range;
+				let tmonths=[],tdays=[];
+				let yearFlag=tyear!=range.tyears[0];
+				let monthFlag=tyear!=range.tyears[0]||tmonth!=range.tmonths[0];
+				let ttotal=new Date(tyear,tmonth,0).getDate();
+				for(let i=yearFlag?1:fmonth*1;i<=12;i++){
+					tmonths.push(_this.formatNum(i))
+				}
+				for(let i=monthFlag?1:fday*1;i<=ttotal;i++){
+					tdays.push(_this.formatNum(i))
+				}
+				return{
+					tmonths,
+					tdays
+				}
+			},
+			resetData(fyear,fmonth,fday,tyear,tmonth){
+				let fyears=[],fmonths=[],fdays=[],tyears=[],tmonths=[],tdays=[];
+				let startYear=_this.startYear;
+				let endYear=_this.endYear;
+				let ftotal=new Date(fyear,fmonth,0).getDate();
+				let ttotal=new Date(tyear,tmonth,0).getDate();
+				for(let i=startYear*1;i<=endYear;i++){
+					fyears.push(_this.formatNum(i))
+				}
+				for(let i=1;i<=12;i++){
+					fmonths.push(_this.formatNum(i))
+				}
+				for(let i=1;i<=ftotal;i++){
+					fdays.push(_this.formatNum(i))
+				}
+				for(let i=fyear*1;i<=endYear;i++){
+					tyears.push(_this.formatNum(i))
+				}
+				for(let i=fmonth*1;i<=12;i++){
+					tmonths.push(_this.formatNum(i))
+				}
+				for(let i=fday*1;i<=ttotal;i++){
+					tdays.push(_this.formatNum(i))
+				}
+				return {
+					fyears,
+					fmonths,
+					fdays,
+					tyears,
+					tmonths,
+					tdays
+				}
+			},
+			getData(dVal){
+				let start=_this.startYear*1;
+				let end=_this.endYear*1;
+				let value=dVal;
+				let flag=_this.current;
+				let aToday=new Date();
+				let tYear,tMonth,tDay,tHours,tMinutes,tSeconds,pickVal=[];
+				let initstartDate=new Date(start.toString());
+				let endDate=new Date(end.toString());
+				if(start>end){
+					initstartDate=new Date(end.toString());
+					endDate=new Date(start.toString());
+				};
+				let startYear=initstartDate.getFullYear();
+				let startMonth=initstartDate.getMonth()+1;
+				let endYear=endDate.getFullYear();
+				let fyears=[],fmonths=[],fdays=[],tyears=[],tmonths=[],tdays=[],returnArr=[],startDVal=[],endDVal=[];
+				let curMonth=flag?value[1]*1:(startDVal[1]*1+1);
+				let curMonth1=flag?value[5][1]*1:(value[5]*1+1);
+				let totalDays=new Date(value[0],value[1],0).getDate();
+				let totalDays1=new Date(value[4],value[5],0).getDate();
+				for(let s=startYear;s<=endYear;s++){
+					fyears.push(_this.formatNum(s));
+				};
+				for(let m=1;m<=12;m++){
+					fmonths.push(_this.formatNum(m));
+				};
+				for(let d=1;d<=totalDays;d++){
+					fdays.push(_this.formatNum(d));
+				};
+				for(let s=value[0]*1;s<=endYear;s++){
+					tyears.push(_this.formatNum(s));
+				};
+				if(value[4]>value[0]){
+					for(let m=1;m<=12;m++){
+						tmonths.push(_this.formatNum(m));
+					};
+					for(let d=1;d<=totalDays1;d++){
+						tdays.push(_this.formatNum(d));
+					};
+				}else{
+					for(let m=endDVal[1]*1;m<=12;m++){
+						tmonths.push(_this.formatNum(m));
+					};
+					for(let d=endDVal[2]*1;d<=totalDays1;d++){
+						tdays.push(_this.formatNum(d));
+					};
+				};
+				
+				pickVal=[
+					fyears.indexOf(value[0])==-1?0:fyears.indexOf(value[0]),
+					fmonths.indexOf(value[1])==-1?0:fmonths.indexOf(value[1]),
+					fdays.indexOf(value[2])==-1?0:fdays.indexOf(value[2]),
+					0,
+					tyears.indexOf(value[4])==-1?0:tyears.indexOf(value[4]),
+					tmonths.indexOf(value[5])==-1?0:tmonths.indexOf(value[5]),
+					tdays.indexOf(value[6])==-1?0:tdays.indexOf(value[6])
+				];
+				return {
+					fyears,
+					fmonths,
+					fdays,
+					tyears,
+					tmonths,
+					tdays,
+					pickVal
+				}
+			},
+			getDval(){
+				let value=_this.value;
+				let fields=_this.fields;
+				let dVal=null;
+				let aDate=new Date();
+				let fyear=_this.formatNum(aDate.getFullYear());
+				let fmonth=_this.formatNum(aDate.getMonth()+1);
+				let fday=_this.formatNum(aDate.getDate());
+				let tyear=_this.formatNum(aDate.getFullYear());
+				let tmonth=_this.formatNum(aDate.getMonth()+1);
+				let tday=_this.formatNum(aDate.getDate());
+				if(value.length>0){
+					let flag=_this.checkValue(value);
+					if(!flag){
+						dVal=[fyear,fmonth,fday,"-",tyear,tmonth,tday]
+					}else{
+						dVal=[...value[0].split("-"),"-",...value[1].split("-")];
+					}
+				}else{
+					dVal=[fyear,fmonth,fday,"-",tyear,tmonth,tday]
+				}
+				return dVal;
+			},
+			initData(){
+				let range=[],pickVal=[];
+				let result="",full="",obj={};
+				let dVal=_this.getDval();
+				let dateData=_this.getData(dVal);
+				let fyears=[],fmonths=[],fdays=[],tyears=[],tmonths=[],tdays=[];
+				let fyear,fmonth,fday,tyear,tmonth,tday;
+				pickVal=dateData.pickVal;
+				fyears=dateData.fyears;
+				fmonths=dateData.fmonths;
+				fdays=dateData.fdays;
+				tyears=dateData.tyears;
+				tmonths=dateData.tmonths;
+				tdays=dateData.tdays;
+				range={
+					fyears,
+					fmonths,
+					fdays,
+					tyears,
+					tmonths,
+					tdays,
+				}
+				fyear=range.fyears[pickVal[0]];
+				fmonth=range.fmonths[pickVal[1]];
+				fday=range.fdays[pickVal[2]];
+				tyear=range.tyears[pickVal[4]];
+				tmonth=range.tmonths[pickVal[5]];
+				tday=range.tdays[pickVal[6]];
+				obj={
+					fyear,
+					fmonth,
+					fday,
+					tyear,
+					tmonth,
+					tday
+				}
+				result=full=`${fyear+'-'+fmonth+'-'+fday+'至'+tyear+'-'+tmonth+'-'+tday}`;
+				_this.range=range;
+				_this.checkObj=obj;
+				_this.$nextTick(()=>{
+					_this.pickVal=pickVal;
+				});
+				_this.$emit("change",{
+					result:result,
+					value:full,
+					obj:obj
+				})
+			},
+			handlerChange(e){
+				let arr=[...e.detail.value];
+				let result="",full="",obj={};
+				let year="",month="",day="",hour="",minute="",second="",note=[],province,city,area;
+				let checkObj=_this.checkObj;
+				let days=[],months=[],endYears=[],endMonths=[],endDays=[],startDays=[];
+				let mode=_this.mode;
+				let col1,col2,col3,d,a,h,m;
+				let xDate=new Date().getTime();
+				let range=_this.range;
+				let fyear=range.fyears[arr[0]]||range.fyears[range.fyears.length-1];
+				let fmonth=range.fmonths[arr[1]]||range.fmonths[range.fmonths.length-1];
+				let fday=range.fdays[arr[2]]||range.fdays[range.fdays.length-1];
+				let tyear=range.tyears[arr[4]]||range.tyears[range.tyears.length-1];
+				let tmonth=range.tmonths[arr[5]]||range.tmonths[range.tmonths.length-1];
+				let tday=range.tdays[arr[6]]||range.tdays[range.tdays.length-1];
+				let resetData=_this.resetData(fyear,fmonth,fday,tyear,tmonth);
+				if(fyear!=checkObj.fyear||fmonth!=checkObj.fmonth||fday!=checkObj.fday){
+					arr[4]=0;
+					arr[5]=0;
+					arr[6]=0;
+					range.tyears=resetData.tyears;
+					range.tmonths=resetData.tmonths;
+					range.tdays=resetData.tdays;
+					tyear=range.tyears[0];
+					checkObj.tyears=range.tyears[0];
+					tmonth=range.tmonths[0];
+					checkObj.tmonths=range.tmonths[0];
+					tday=range.tdays[0];
+					checkObj.tdays=range.tdays[0];
+				}
+				if(fyear!=checkObj.fyear||fmonth!=checkObj.fmonth){
+					range.fdays=resetData.fdays;
+				};
+				if(tyear!=checkObj.tyear){
+					arr[5]=0;
+					arr[6]=0;
+					let toData=_this.resetToData(fmonth,fday,tyear,tmonth);
+					range.tmonths=toData.tmonths;
+					range.tdays=toData.tdays;
+					tmonth=range.tmonths[0];
+					checkObj.tmonths=range.tmonths[0];
+					tday=range.tdays[0];
+					checkObj.tdays=range.tdays[0];
+				};
+				if(tmonth!=checkObj.tmonth){
+					arr[6]=0;
+					let toData=_this.resetToData(fmonth,fday,tyear,tmonth);
+					range.tdays=toData.tdays;
+					tday=range.tdays[0];
+					checkObj.tdays=range.tdays[0];
+				};
+				result=full=`${fyear+'-'+fmonth+'-'+fday+'至'+tyear+'-'+tmonth+'-'+tday}`;
+				obj={
+					fyear,fmonth,fday,tyear,tmonth,tday
+				}
+				this.checkObj=obj;
+				_this.$nextTick(()=>{
+					_this.pickVal=arr;
+				})
+				_this.$emit("change",{
+					result:result,
+					value:full,
+					obj:obj
+				})
+				
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import "./w-picker.css";
+</style>

+ 185 - 0
components/w-picker/region-picker.vue

@@ -0,0 +1,185 @@
+<template>
+	<view class="w-picker-view">
+		<picker-view class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.provinces" :key="index">{{item.label}}</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.citys" :key="index">{{item.label}}</view>
+			</picker-view-column>
+			<picker-view-column v-if="!hideArea">
+				<view class="w-picker-item" v-for="(item,index) in range.areas" :key="index">{{item.label}}</view>
+			</picker-view-column>
+		</picker-view>
+	</view>
+</template>
+
+<script>
+	import areaData from "./areadata/areadata.js"
+	let _this=null;
+	export default {
+		data() {
+			return {
+				pickVal:[],
+				range:{
+					provinces:[],
+					citys:[],
+					areas:[]
+				},
+				checkObj:{}
+			};
+		},
+		props:{
+			itemHeight:{
+				type:String,
+				default:"44px"
+			},
+			value:{
+				type:[Array,String],
+				default:""
+			},
+			defaultType:{
+				type:String,
+				default:"label"
+			},
+			hideArea:{
+				type:Boolean,
+				default:false
+			}
+		},
+		watch:{
+			value(val){
+				this.initData();
+			}
+		},
+		created() {
+			_this=this;
+			_this.initData();
+		},
+		methods:{
+			getData(){
+				//用来处理初始化数据
+				let provinces=areaData;
+				let dVal=[];
+				let value=this.value;
+				let a1=value[0];//默认值省
+				let a2=value[1];//默认值市
+				let a3=value[2];//默认值区、县
+				let province,city,area;
+				let provinceIndex=provinces.findIndex((v)=>{
+					return v[_this.defaultType]==a1
+				});
+				provinceIndex=value?(provinceIndex!=-1?provinceIndex:0):0;
+				let citys=provinces[provinceIndex].children;
+				let cityIndex=citys.findIndex((v)=>{
+					return v[_this.defaultType]==a2
+				});
+				cityIndex=value?(cityIndex!=-1?cityIndex:0):0;
+				let areas=citys[cityIndex].children;
+				let areaIndex=areas.findIndex((v)=>{
+					return v[_this.defaultType]==a3;
+				});
+				areaIndex=value?(areaIndex!=-1?areaIndex:0):0;
+				dVal=_this.hideArea?[provinceIndex,cityIndex]:[provinceIndex,cityIndex,areaIndex];
+				province=provinces[provinceIndex];
+				city=citys[cityIndex];
+				area=areas[areaIndex];
+				let obj=_this.hideArea?{
+					province,
+					city
+				}:{
+					province,
+					city,
+					area
+				}
+				return _this.hideArea?{
+					provinces,
+					citys,
+					dVal,
+					obj
+				}:{
+					provinces,
+					citys,
+					areas,
+					dVal,
+					obj
+				}
+			},
+			initData(){
+				let dataData=_this.getData();
+				let provinces=dataData.provinces;
+				let citys=dataData.citys;
+				let areas=_this.hideArea?[]:dataData.areas;
+				let obj=dataData.obj;
+				let province=obj.province,city=obj.city,area=_this.hideArea?{}:obj.area;
+				let value=_this.hideArea?[province.value,city.value]:[province.value,city.value,area.value];
+				let result=_this.hideArea?`${province.label+city.label}`:`${province.label+city.label+area.label}`;
+				_this.range=_this.hideArea?{
+					provinces,
+					citys,
+				}:{
+					provinces,
+					citys,
+					areas
+				};
+				_this.checkObj=obj;
+				_this.$nextTick(()=>{
+					_this.pickVal=dataData.dVal;
+				});
+				_this.$emit("change",{
+					result:result,
+					value:value,
+					obj:obj
+				})
+			},
+			handlerChange(e){
+				let arr=[...e.detail.value];
+				let provinceIndex=arr[0],cityIndex=arr[1],areaIndex=_this.hideArea?0:arr[2];
+				let provinces=areaData;
+				let citys=(provinces[provinceIndex]&&provinces[provinceIndex].children)||provinces[provinces.length-1].children||[];
+				let areas=_this.hideArea?[]:((citys[cityIndex]&&citys[cityIndex].children)||citys[citys.length-1].children||[]);
+				let province=provinces[provinceIndex]||provinces[provinces.length-1],
+				city=citys[cityIndex]||[citys.length-1],
+				area=_this.hideArea?{}:(areas[areaIndex]||[areas.length-1]);
+				let obj=_this.hideArea?{
+					province,
+					city
+				}:{
+					province,
+					city,
+					area
+				}
+				if(_this.checkObj.province.label!=province.label){
+					//当省更新的时候需要刷新市、区县的数据;
+					_this.range.citys=citys;
+					if(!_this.hideArea){
+						_this.range.areas=areas;
+					}
+					
+				}
+				if(_this.checkObj.city.label!=city.label){
+					//当市更新的时候需要刷新区县的数据;
+					if(!_this.hideArea){
+						_this.range.areas=areas;
+					}
+				}
+				_this.checkObj=obj;
+				_this.$nextTick(()=>{
+					_this.pickVal=arr;
+				})
+				let result=_this.hideArea?`${province.label+city.label}`:`${province.label+city.label+area.label}`;
+				let value=_this.hideArea?[province.value,city.value]:[province.value,city.value,area.value];
+				_this.$emit("change",{
+					result:result,
+					value:value,
+					obj:obj
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import "./w-picker.css";	
+</style>
+

+ 129 - 0
components/w-picker/selector-picker.vue

@@ -0,0 +1,129 @@
+<template>
+	<view class="w-picker-view">
+		<picker-view class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range" :key="index">{{item[nodeKey]}}</view>
+			</picker-view-column>
+		</picker-view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props:{
+			itemHeight:{
+				type:String,
+				default:"44px"
+			},
+			options:{
+				type:[Array,Object],
+				default(){
+					return []
+				}
+			},
+			value:{
+				type:String,
+				default:""
+			},
+			defaultType:{
+				type:String,
+				default:"label"
+			},
+			defaultProps:{
+				type:Object,
+				default(){
+					return{
+						lable:"label",
+						value:"value"
+					}
+				}
+			}
+		},
+		data() {
+			return {
+				pickVal:[]
+			};
+		},
+		computed:{
+			nodeKey(){
+				return this.defaultProps.label;
+			},
+			nodeValue(){
+				return this.defaultProps.value;
+			},
+			range(){
+				return this.options
+			}
+		},
+		watch:{
+			value(val){
+				if(this.options.length!=0){
+					this.initData();
+				}
+			},
+			options(val){
+				this.initData();
+			}
+		},
+		created() {
+			if(this.options.length!=0){
+				this.initData();
+			}
+		},
+		methods:{
+			initData(){
+				let dVal=this.value||"";
+				let data=this.range;
+				let pickVal=[0];
+				let cur=null;
+				let label="";
+				let value,idx;
+				if(this.defaultType==this.nodeValue){
+					value=data.find((v)=>v[this.nodeValue]==dVal);
+					idx=data.findIndex((v)=>v[this.nodeValue]==dVal);
+				}else{
+					value=data.find((v)=>v[this.nodeKey]==dVal);
+					idx=data.findIndex((v)=>v[this.nodeKey]==dVal);
+				}
+				pickVal=[idx!=-1?idx:0];
+				this.$nextTick(()=>{
+					this.pickVal=pickVal;
+				});
+				if(this.defaultType==this.nodeValue){
+					this.$emit("change",{
+						result:value?value[this.nodeKey]:data[0][this.nodeKey],
+						value:dVal||data[0][this.nodeKey],
+						obj:value?value:data[0]
+					})
+				}else{
+					this.$emit("change",{
+						result:dVal||data[0][this.nodeKey],
+						value:value?value[this.nodeValue]:data[0][this.nodeValue],
+						obj:value?value:data[0]
+					})
+				}
+				
+			},
+			handlerChange(e){
+				let arr=[...e.detail.value];
+				let pickVal=[arr[0]||0];
+				let data=this.range;
+				let cur=data[arr[0]];
+				let label="";
+				let value="";
+				this.$nextTick(()=>{
+					this.pickVal=pickVal;
+				});
+				this.$emit("change",{
+					result:cur[this.nodeKey],
+					value:cur[this.nodeValue],
+					obj:cur
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import "./w-picker.css";
+</style>

+ 252 - 0
components/w-picker/shortterm-picker.vue

@@ -0,0 +1,252 @@
+<template>
+	<view class="w-picker-view">
+		<picker-view class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.dates" :key="index">{{item.label}}</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.hours" :key="index">{{item.label}}时</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.minutes" :key="index">{{item.label}}分</view>
+			</picker-view-column>
+		</picker-view>
+	</view>
+</template>
+
+<script>
+	let _this=null;
+	export default {
+		data() {
+			return {
+				pickVal:[],
+				range:{},
+				checkObj:{}
+			};
+		},
+		props:{
+			itemHeight:{
+				type:String,
+				default:"44px"
+			},
+			value:{
+				type:[String,Array,Number],
+				default:""
+			},
+			current:{//是否默认选中当前日期
+				type:Boolean,
+				default:false
+			},
+			expand:{
+				type:[Number,String],
+				default:30
+			}
+		},
+		watch:{
+			value(val){
+				this.initData();
+			}
+		},
+		created() {
+			_this=this;
+			_this.initData();
+		},
+		methods:{
+			formatNum(n){
+				return (Number(n)<10?'0'+Number(n):Number(n)+'');
+			},
+			checkValue(value){
+				let strReg=/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}(:\d{2})?$/,example="2019-12-12 18:05:00或者2019-12-12 18:05";
+				if(!strReg.test(value)){
+					console.log(new Error("请传入与mode、fields匹配的value值,例value="+example+""))
+				}
+				return strReg.test(value);
+			},
+			resetData(year,month,day){
+				let curDate=_this.getCurrenDate();
+				let curFlag=_this.current;
+				let curYear=curDate.curYear;
+				let curMonth=curDate.curMonth;
+				let curDay=curDate.curDay;
+				let curHour=curDate.curHour;
+				let months=[],days=[],sections=[];
+				let disabledAfter=_this.disabledAfter;
+				let monthsLen=disabledAfter?(year*1<curYear?12:curMonth):12;
+				let totalDays=new Date(year,month,0).getDate();//计算当月有几天;
+				for(let month=1;month<=monthsLen;month++){
+					months.push(_this.formatNum(month));
+				};
+				for(let day=1;day<=daysLen;day++){
+					days.push(_this.formatNum(day));
+				}
+				return{
+					months,
+					days,
+					sections
+				}
+			},
+			getData(dVal){
+				//用来处理初始化数据
+				let curFlag=_this.current;
+				let disabledAfter=_this.disabledAfter;
+				let dates=[],hours=[],minutes=[];
+				let curDate=new Date();
+				let curYear=curDate.getFullYear();
+				let curMonth=curDate.getMonth();
+				let curDay=curDate.getDate();
+				let aDate=new Date(curYear,curMonth,curDay);
+				for(let i=0;i<this.expand*1;i++){
+					aDate=new Date(curYear,curMonth,curDay+i);
+					let year=aDate.getFullYear();
+					let month=aDate.getMonth()+1;
+					let day=aDate.getDate();
+					let label=year+"-"+_this.formatNum(month)+"-"+_this.formatNum(day);
+					switch(i){
+						case 0:
+							label="今天";
+							break;
+						case 1:
+							label="明天";
+							break;
+						case 2:
+							label="后天";
+							break
+					}
+					dates.push({
+						label:label,
+						value:year+"-"+_this.formatNum(month)+"-"+_this.formatNum(day)
+					})
+				};
+				for(let i=0;i<24;i++){
+					hours.push({
+						label:_this.formatNum(i),
+						value:_this.formatNum(i)
+					})
+				}
+				for(let i=0;i<60;i++){
+					minutes.push({
+						label:_this.formatNum(i),
+						value:_this.formatNum(i)
+					})
+				}
+				return {
+					dates,
+					hours,
+					minutes
+				}
+			},
+			getDefaultDate(){
+				let value=_this.value;
+				let reg=/-/g;
+				let defaultDate=value?new Date(value.replace(reg,"/")):new Date();
+				let defaultYear=defaultDate.getFullYear();
+				let defaultMonth=defaultDate.getMonth()+1;
+				let defaultDay=defaultDate.getDate();
+				let defaultDays=new Date(defaultYear,defaultMonth,0).getDate()*1;
+				return{
+					defaultDate,
+					defaultYear,
+					defaultMonth,
+					defaultDay,
+					defaultDays
+				}
+			},
+			getDval(){
+				let value=_this.value;
+				let dVal=null;
+				let aDate=new Date();
+				let year=_this.formatNum(aDate.getFullYear());
+				let month=_this.formatNum(aDate.getMonth()+1);
+				let day=_this.formatNum(aDate.getDate());
+				let date=_this.formatNum(year)+"-"+_this.formatNum(month)+"-"+_this.formatNum(day);
+				let hour=aDate.getHours();
+				let minute=aDate.getMinutes();
+				if(value){
+					let flag=_this.checkValue(value);
+					if(!flag){
+						dVal=[date,hour,minute]
+					}else{
+						let v=value.split(" ");
+						dVal=[v[0],...v[1].split(":")];
+					}
+				}else{
+					dVal=[date,hour,minute]
+				}
+				return dVal;
+			},
+			initData(){
+				let startDate,endDate,startYear,endYear,startMonth,endMonth,startDay,endDay;
+				let dates=[],hours=[],minutes=[];
+				let dVal=[],pickVal=[];
+				let value=_this.value;
+				let reg=/-/g;
+				let range={};
+				let result="",full="",date,hour,minute,obj={};
+				let defaultDate=_this.getDefaultDate();
+				let defaultYear=defaultDate.defaultYear;
+				let defaultMonth=defaultDate.defaultMonth;
+				let defaultDay=defaultDate.defaultDay;
+				let defaultDays=defaultDate.defaultDays;
+				let curFlag=this.current;
+				let disabledAfter=this.disabledAfter;
+				let dateData=[];
+				dVal=_this.getDval();
+				dateData=_this.getData(dVal);
+				dates=dateData.dates;
+				hours=dateData.hours;
+				minutes=dateData.minutes;
+				pickVal=[
+					dates.findIndex(n => n.value == dVal[0])!=-1?dates.findIndex(n => n.value == dVal[0]):0,
+					hours.findIndex(n => n.value == dVal[1])!=-1?hours.findIndex(n => n.value == dVal[1]):0,
+					minutes.findIndex(n => n.value == dVal[2])!=-1?minutes.findIndex(n => n.value == dVal[2]):0,
+				];
+				range={dates,hours,minutes};
+				date=dVal[0]?dVal[0]:dates[0].label;
+				hour=dVal[1]?dVal[1]:hours[0].label;
+				minute=dVal[2]?dVal[2]:minutes[0].label;
+				result=full=`${date+' '+hour+':'+minute}`;
+				obj={
+					date,
+					hour,
+					minute
+				}
+				_this.range=range;
+				_this.checkObj=obj;
+				_this.$nextTick(()=>{
+					_this.pickVal=pickVal;
+				});
+				_this.$emit("change",{
+					result:result,
+					value:full,
+					obj:obj
+				})
+			},
+			handlerChange(e){
+				let arr=[...e.detail.value];
+				let data=_this.range;
+				let date="",hour="",minute="";
+				let result="",full="",obj={};
+				let disabledAfter=_this.disabledAfter;
+				date=(arr[0]||arr[0]==0)?data.dates[arr[0]]||data.dates[data.dates.length-1]:"";
+				hour=(arr[1]||arr[1]==0)?data.hours[arr[1]]||data.hours[data.hours.length-1]:"";
+				minute=(arr[2]||arr[2]==0)?data.minutes[arr[2]]||data.minutes[data.minutes.length-1]:"";
+				result=full=`${date.label+' '+hour.label+':'+minute.label+':00'}`;
+				obj={
+					date,
+					hour,
+					minute
+				}
+				this.checkObj=obj;
+				_this.$emit("change",{
+					result:result,
+					value:full,
+					obj:obj
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import "./w-picker.css";
+</style>

+ 220 - 0
components/w-picker/time-picker.vue

@@ -0,0 +1,220 @@
+<template>
+	<view class="w-picker-view">
+		<picker-view class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.hours" :key="index">{{item}}时</view>
+			</picker-view-column>
+			<picker-view-column>
+				<view class="w-picker-item" v-for="(item,index) in range.minutes" :key="index">{{item}}分</view>
+			</picker-view-column>
+			<picker-view-column v-if="second">
+				<view class="w-picker-item" v-for="(item,index) in range.seconds" :key="index">{{item}}秒</view>
+			</picker-view-column>
+		</picker-view>
+	</view>
+</template>
+
+<script>
+	let _this=null;
+	export default {
+		data() {
+			return {
+				pickVal:[],
+				range:{},
+				checkObj:{}
+			};
+		},
+		props:{
+			itemHeight:{
+				type:String,
+				default:"44px"
+			},
+			value:{
+				type:[String,Array,Number],
+				default:""
+			},
+			current:{//是否默认选中当前日期
+				type:Boolean,
+				default:false
+			},
+			second:{
+				type:Boolean,
+				default:true
+			}
+		},
+		watch:{
+			value(val){
+				this.initData();
+			}
+		},
+		created() {
+			_this=this;
+			_this.initData();
+		},
+		methods:{
+			formatNum(n){
+				return (Number(n)<10?'0'+Number(n):Number(n)+'');
+			},
+			checkValue(value){
+				let strReg=/^\d{2}:\d{2}:\d{2}$/,example="18:00:05";
+				if(!strReg.test(value)){
+					console.log(new Error("请传入与mode、fields匹配的value值,例value="+example+""))
+				}
+				return strReg.test(value);
+			},
+			resetData(year,month,day,hour,minute){
+				let curDate=_this.getCurrenDate();
+				let curFlag=_this.current;
+				let curHour=curDate.curHour;
+				let curMinute=curDate.curMinute;
+				let curSecond=curDate.curSecond;
+				for(let hour=0;hour<24;hour++){
+					hours.push(_this.formatNum(hour));
+				}
+				for(let minute=0;minute<60;minute++){
+					minutes.push(_this.formatNum(minute));
+				}
+				for(let second=0;second<60;second++){
+					seconds.push(_this.formatNum(second));
+				}
+				return{
+					hours,
+					minutes,
+					seconds
+				}
+			},
+			getData(curDate){
+				//用来处理初始化数据
+				let hours=[],minutes=[],seconds=[];
+				let curFlag=_this.current;
+				let disabledAfter=_this.disabledAfter;
+				let fields=_this.fields;
+				let curHour=curDate.curHour;
+				let curMinute=curDate.curMinute;
+				let curSecond=curDate.curSecond;
+				for(let hour=0;hour<24;hour++){
+					hours.push(_this.formatNum(hour));
+				}
+				for(let minute=0;minute<60;minute++){
+					minutes.push(_this.formatNum(minute));
+				}
+				for(let second=0;second<60;second++){
+					seconds.push(_this.formatNum(second));
+				}
+				return _this.second?{
+					hours,
+					minutes,
+					seconds
+				}:{
+					hours,
+					minutes
+				}
+			},
+			getCurrenDate(){
+				let curDate=new Date();
+				let curHour=curDate.getHours();
+				let curMinute=curDate.getMinutes();
+				let curSecond=curDate.getSeconds();
+				return _this.second?{
+					curHour,
+					curMinute,
+					curSecond
+				}:{
+					curHour,
+					curMinute,
+				}
+			},
+			getDval(){
+				let value=_this.value;
+				let fields=_this.fields;
+				let dVal=null;
+				let aDate=new Date();
+				let hour=_this.formatNum(aDate.getHours());
+				let minute=_this.formatNum(aDate.getMinutes());
+				let second=_this.formatNum(aDate.getSeconds());
+				if(value){
+					let flag=_this.checkValue(value);
+					if(!flag){
+						dVal=[hour,minute,second]
+					}else{
+						dVal=value?value.split(":"):[];
+					}
+				}else{
+					dVal=_this.second?[hour,minute,second]:[hour,minute]
+				}
+				return dVal;
+			},
+			initData(){
+				let curDate=_this.getCurrenDate();
+				let dateData=this.getData(curDate);
+				let pickVal=[],obj={},full="",result="",hour="",minute="",second="";
+				let dVal=_this.getDval();
+				let curFlag=_this.current;
+				let disabledAfter=_this.disabledAfter;
+				let hours=dateData.hours;
+				let minutes=dateData.minutes;
+				let seconds=dateData.seconds;
+				let defaultArr=_this.second?[
+					dVal[0]&&hours.indexOf(dVal[0])!=-1?hours.indexOf(dVal[0]):0,
+					dVal[1]&&minutes.indexOf(dVal[1])!=-1?minutes.indexOf(dVal[1]):0,
+					dVal[2]&&seconds.indexOf(dVal[2])!=-1?seconds.indexOf(dVal[2]):0
+				]:[
+					dVal[0]&&hours.indexOf(dVal[0])!=-1?hours.indexOf(dVal[0]):0,
+					dVal[1]&&minutes.indexOf(dVal[1])!=-1?minutes.indexOf(dVal[1]):0
+				];
+				pickVal=disabledAfter?defaultArr:(curFlag?(_this.second?[
+					hours.indexOf(_this.formatNum(curDate.curHour)),
+					minutes.indexOf(_this.formatNum(curDate.curMinute)),
+					seconds.indexOf(_this.formatNum(curDate.curSecond)),
+				]:[
+					hours.indexOf(_this.formatNum(curDate.curHour)),
+					minutes.indexOf(_this.formatNum(curDate.curMinute))
+				]):defaultArr);
+				_this.range=dateData;
+				_this.checkObj=obj;
+				hour=dVal[0]?dVal[0]:hours[0];
+				minute=dVal[1]?dVal[1]:minutes[0];
+				second=dVal[2]?dVal[0]:seconds[0];
+				result=_this.second?`${hour+':'+minute+':'+second}`:`${hour+':'+minute}`;
+				full=_this.second?`${hour+':'+minute+':'+second}`:`${hour+':'+minute+':00'}`;
+				_this.$nextTick(()=>{
+					_this.pickVal=pickVal;
+				});
+				_this.$emit("change",{
+					result:result,
+					value:full,
+					obj:obj
+				})
+			},
+			handlerChange(e){
+				let arr=[...e.detail.value];
+				let data=_this.range;
+				let hour="",minute="",second="",result="",full="",obj={};
+				hour=(arr[0]||arr[0]==0)?data.hours[arr[0]]||data.hours[data.hours.length-1]:"";
+				minute=(arr[1]||arr[1]==0)?data.minutes[arr[1]]||data.minutes[data.minutes.length-1]:"";
+				second=(arr[2]||arr[2]==0)?data.seconds[arr[2]]||data.seconds[data.seconds.length-1]:"";
+				obj=_this.second?{
+					hour,
+					minute,
+					second
+				}:{
+					hour,
+					minute
+				};
+				this.checkObj=obj;
+				result=_this.second?`${hour+':'+minute+':'+second}`:`${hour+':'+minute}`;
+				full=_this.second?`${hour+':'+minute+':'+second}`:`${hour+':'+minute+':00'}`;
+				_this.$emit("change",{
+					result:result,
+					value:full,
+					obj:obj
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	@import "./w-picker.css";	
+</style>
+

+ 26 - 0
components/w-picker/w-picker.css

@@ -0,0 +1,26 @@
+.w-picker-flex2{
+	flex:2;
+}
+.w-picker-flex1{
+	flex:1;
+}
+.w-picker-view {
+	width: 100%;
+	height: 476upx;
+	overflow: hidden;
+	background-color: rgba(255, 255, 255, 1);
+	z-index: 666;
+}
+.d-picker-view{
+	height: 100%;
+}
+
+.w-picker-item {
+  text-align: center;
+  width: 100%;
+  height: 88upx;
+  line-height: 88upx;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  font-size: 30upx;
+}

+ 346 - 0
components/w-picker/w-picker.vue

@@ -0,0 +1,346 @@
+<template>
+	<view class="w-picker">
+		<view class="mask" :class="{'visible':visible}" @tap="onCancel" @touchmove.stop.prevent catchtouchmove="true"></view>
+		<view class="w-picker-cnt" :class="{'visible':visible}">
+			<view class="w-picker-header"  @touchmove.stop.prevent catchtouchmove="true">
+				<text  @tap="onCancel">取消</text>
+				<slot></slot>
+				<text class="queidng" :style="{'color':themeColor}" @tap="pickerConfirm">确定</text>
+			</view>
+			<date-picker
+				v-if="mode=='date'" 
+				class="w-picker-wrapper"
+				:startYear="startYear"
+				:endYear="endYear"
+				:value="value"
+				:fields="fields"
+				:item-height="itemHeight"
+				:current="current"
+				:disabled-after="disabledAfter"
+				@change="handlerChange"
+				@touchstart="touchStart" 
+				@touchend="touchEnd">
+			</date-picker>
+			
+			<range-picker
+				v-if="mode=='range'" 
+				class="w-picker-wrapper"
+				:startYear="startYear"
+				:endYear="endYear"
+				:value="value"
+				:item-height="itemHeight"
+				:current="current"
+				@change="handlerChange"
+				@touchstart="touchStart" 
+				@touchend="touchEnd">
+			</range-picker>
+			
+			<half-picker
+				v-if="mode=='half'" 
+				class="w-picker-wrapper"
+				:startYear="startYear"
+				:endYear="endYear"
+				:value="value"
+				:item-height="itemHeight"
+				:current="current"
+				:disabled-after="disabledAfter"
+				@change="handlerChange"
+				@touchstart="touchStart" 
+				@touchend="touchEnd">
+			</half-picker>
+			
+			<shortterm-picker
+				v-if="mode=='shortTerm'" 
+				class="w-picker-wrapper"
+				:startYear="startYear"
+				:endYear="endYear"
+				:value="value"
+				:item-height="itemHeight"
+				:current="current"
+				expand="60"
+				:disabled-after="disabledAfter"
+				@change="handlerChange"
+				@touchstart="touchStart" 
+				@touchend="touchEnd">
+			</shortterm-picker>
+			
+			<time-picker
+				v-if="mode=='time'"
+				class="w-picker-wrapper"
+				:value="value"
+				:item-height="itemHeight"
+				:current="current"
+				:disabled-after="disabledAfter"
+				:second="second"
+				@change="handlerChange"
+				@touchstart="touchStart" 
+				@touchend="touchEnd">
+			</time-picker>
+			
+			<selector-picker
+				v-if="mode=='selector'"
+				class="w-picker-wrapper"
+				:value="value"
+				:item-height="itemHeight"
+				:options="options"
+				:default-type="defaultType"
+				:default-props="defaultProps"
+				@change="handlerChange"
+				@touchstart="touchStart" 
+				@touchend="touchEnd">
+			</selector-picker>
+			
+			<region-picker
+				v-if="mode=='region'"
+				class="w-picker-wrapper"
+				:value="value"
+				:hide-area="hideArea"
+				:default-type="defaultType"
+				:item-height="itemHeight"
+				@change="handlerChange"
+				@touchstart="touchStart" 
+				@touchend="touchEnd">
+			</region-picker>
+			<linkage-picker
+				v-if="mode=='linkage'"
+				class="w-picker-wrapper"
+				:value="value"
+				:options="options"
+				:level="level"
+				:default-type="defaultType"
+				:default-props="defaultProps"
+				:item-height="itemHeight"
+				@change="handlerChange"
+				@touchstart="touchStart" 
+				@touchend="touchEnd">
+			</linkage-picker>
+		</view>
+	</view>
+</template>
+
+<script>
+	import datePicker from "./date-picker.vue"
+	import rangePicker from "./range-picker.vue"
+	import halfPicker from "./half-picker.vue"
+	import shorttermPicker from "./shortterm-picker.vue"
+	import timePicker from "./time-picker.vue"
+	import selectorPicker from "./selector-picker.vue"
+	import regionPicker from "./region-picker.vue"
+	import linkagePicker from "./linkage-picker.vue"
+	export default {
+		components:{
+			datePicker,
+			rangePicker,
+			halfPicker,
+			timePicker,
+			selectorPicker,
+			shorttermPicker,
+			regionPicker,
+			linkagePicker
+		},
+		props:{
+			mode:{
+				type:String,
+				default:"date"
+			},
+			value:{//默认值
+				type:[String,Array,Number],
+				default:""
+			},
+			current:{//是否默认显示当前时间,如果是,传的默认值将失效
+				type:Boolean,
+				default:false
+			},
+			themeColor:{//确认按钮主题颜色
+				type:String,
+				default:"#f5a200"
+			},
+			fields:{//日期颗粒度:year、month、day、hour、minute、second
+				type:String,
+				default:"date"
+			},
+			disabledAfter:{//是否禁用当前之后的日期
+				type:Boolean,
+				default:false
+			},
+			second:{//time-picker是否显示秒
+				type:Boolean,
+				default:true
+			},
+			options:{//selector,region数据源
+				type:[Array,Object],
+				default(){
+					return []
+				}
+			},
+			defaultProps:{//selector,linkagle字段转换配置
+				type:Object,
+				default(){
+					return{
+						lable:"label",
+						value:"value",
+						children:"children"
+					}
+				}
+			},
+			defaultType:{
+				type:String,
+				default:"label"
+			},
+			hideArea:{//mode=region时,是否隐藏区县列
+				type:Boolean,
+				default:false
+			},
+			level:{
+				//多级联动层级,表示几级联动,区间2-4;
+				type:[Number,String],
+				default:2
+			},
+			timeout:{//是否开启点击延迟,当快速滚动 还没有滚动完毕点击关闭时得到的值是不准确的
+				type:Boolean,
+				default:false
+			},
+			expand:{//mode=shortterm 默认往后拓展天数
+				type:[Number,String],
+				default:30
+			},
+			startYear:{
+				type:[String,Number],
+				default:1970
+			},
+			endYear:{
+				type:[String,Number],
+				default:new Date().getFullYear()
+			}
+		},
+		data() {
+			return {
+				itemHeight:`height: ${uni.upx2px(88)}px;`,
+				visible:false,
+				result:{},
+				confirmFlag:true
+			};
+		},
+		methods:{
+			touchStart(){
+				if(this.timeout){
+					this.confirmFlag=false;
+				}
+			},
+			touchEnd(){
+				if(this.timeout){
+					setTimeout(()=>{
+						this.confirmFlag=true;
+					},500)
+				}
+			},
+			handlerChange(res){
+				this.result=res;
+				this.$emit("confirm",this.result);
+			},
+			show(){
+				this.visible=true;
+			},
+			hide(){
+				this.visible=false;
+			},
+			onCancel(res){
+				this.visible=false;
+				this.$emit("cancel");
+			},
+			pickerConfirm(){
+				// if(!this.confirmFlag){
+				// 	return;
+				// }
+				// this.$emit("confirm",this.result);
+				this.visible=false;
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.w-picker-item {
+	  text-align: center;
+	  width: 100%;
+	  height: 88upx;
+	  line-height: 88upx;
+	  text-overflow: ellipsis;
+	  white-space: nowrap;
+	  font-size: 30upx;
+	}
+	.queidng{
+		width: 250px;
+		height: 80rpx;
+		line-height: 80rpx;
+		text-align: right;
+	}
+	.w-picker{
+		position: relative;
+		z-index: 888;
+		.mask {
+		  position: fixed;
+		  z-index: 1000;
+		  top: 0;
+		  right: 0;
+		  left: 0;
+		  bottom: 0;
+		  background: rgba(0, 0, 0, 0.6);
+		  visibility: hidden;
+		  opacity: 0;
+		  transition: all 0.3s ease;
+		}
+		.mask.visible{
+			visibility: visible;
+			opacity: 1;
+		}
+		.w-picker-cnt {
+		  position: fixed;
+		  bottom: 38px;
+		  left: 0;
+		  width: 100%;
+		  transition: all 0.3s ease;
+		  transform: translateY(100%);
+		  z-index: 9999;
+		  background-color: #fff;
+		}
+		.w-picker-cnt.visible {
+		  transform: translateY(0);
+		}
+		.w-picker-header{
+		  display: flex;
+		  align-items: center;
+		  padding: 0 30upx;
+		  height: 88upx;
+		  background-color: #fff;
+		  position: relative;
+		  text-align: center;
+		  font-size: 32upx;
+		  justify-content: space-between;
+		  border-bottom: solid 1px #eee;
+		  .w-picker-btn{
+		  	font-size: 30upx;
+		  }
+		}
+		
+		.w-picker-hd:after {
+		  content: ' ';
+		  position: absolute;
+		  left: 0;
+		  bottom: 0;
+		  right: 0;
+		  height: 1px;
+		  border-bottom: 1px solid #e5e5e5;
+		  color: #e5e5e5;
+		  transform-origin: 0 100%;
+		  transform: scaleY(0.5);
+		}
+		.w-picker-wrapper {
+		  width: 100%;
+		  height: 476upx;
+		  overflow: hidden;
+		  background-color: rgba(255, 255, 255, 1);
+		  z-index: 666;
+		}
+	}
+</style>

+ 5462 - 0
components/wangding-pickerAddress/city-picker.data.js

@@ -0,0 +1,5462 @@
+export default {
+	86: {
+		'A-G': [{
+				code: '340000',
+				address: '安徽省'
+			},
+			{
+				code: '110000',
+				address: '北京'
+			},
+			{
+				code: '500000',
+				address: '重庆'
+			},
+			{
+				code: '350000',
+				address: '福建省'
+			},
+			{
+				code: '620000',
+				address: '甘肃省'
+			},
+			{
+				code: '440000',
+				address: '广东省'
+			},
+			{
+				code: '450000',
+				address: '广西壮族自治区'
+			},
+			{
+				code: '520000',
+				address: '贵州省'
+			}
+		],
+		'H-K': [{
+				code: '460000',
+				address: '海南省'
+			},
+			{
+				code: '130000',
+				address: '河北省'
+			},
+			{
+				code: '230000',
+				address: '黑龙江省'
+			},
+			{
+				code: '410000',
+				address: '河南省'
+			},
+			{
+				code: '420000',
+				address: '湖北省'
+			},
+			{
+				code: '430000',
+				address: '湖南省'
+			},
+			{
+				code: '320000',
+				address: '江苏省'
+			},
+			{
+				code: '360000',
+				address: '江西省'
+			},
+			{
+				code: '220000',
+				address: '吉林省'
+			}
+		],
+		'L-S': [{
+				code: '210000',
+				address: '辽宁省'
+			},
+			{
+				code: '150000',
+				address: '内蒙古自治区'
+			},
+			{
+				code: '640000',
+				address: '宁夏回族自治区'
+			},
+			{
+				code: '630000',
+				address: '青海省'
+			},
+			{
+				code: '370000',
+				address: '山东省'
+			},
+			{
+				code: '310000',
+				address: '上海'
+			},
+			{
+				code: '140000',
+				address: '山西省'
+			},
+			{
+				code: '610000',
+				address: '陕西省'
+			},
+			{
+				code: '510000',
+				address: '四川省'
+			}
+		],
+		'T-Z': [{
+				code: '120000',
+				address: '天津'
+			},
+			{
+				code: '650000',
+				address: '新疆维吾尔自治区'
+			},
+			{
+				code: '540000',
+				address: '西藏自治区'
+			},
+			{
+				code: '530000',
+				address: '云南省'
+			},
+			{
+				code: '330000',
+				address: '浙江省'
+			}
+		]
+	},
+
+	"110000": {
+		"110100": "北京市"
+	},
+	"110100": {
+		"110101": "东城区",
+		"110102": "西城区",
+		"110103": "崇文区",
+		"110104": "宣武区",
+		"110105": "朝阳区",
+		"110106": "丰台区",
+		"110107": "石景山区",
+		"110108": "海淀区",
+		"110109": "门头沟区",
+		"110111": "房山区",
+		"110112": "通州区",
+		"110113": "顺义区",
+		"110114": "昌平区",
+		"110115": "大兴区",
+		"110116": "怀柔区",
+		"110117": "平谷区",
+		"110228": "密云区",
+		"110229": "延庆区",
+		"110230": "其它区"
+	},
+	"120000": {
+		"120100": "天津市"
+	},
+	"120100": {
+		"120101": "和平区",
+		"120102": "河东区",
+		"120103": "河西区",
+		"120104": "南开区",
+		"120105": "河北区",
+		"120106": "红桥区",
+		"120107": "塘沽区",
+		"120108": "汉沽区",
+		"120109": "大港区",
+		"120110": "东丽区",
+		"120111": "西青区",
+		"120112": "津南区",
+		"120113": "北辰区",
+		"120114": "武清区",
+		"120115": "宝坻区",
+		"120116": "滨海新区",
+		"120221": "宁河区",
+		"120223": "静海区",
+		"120225": "蓟州区",
+		"120226": "其它区"
+	},
+	"130000": {
+		"130100": "石家庄市",
+		"130200": "唐山市",
+		"130300": "秦皇岛市",
+		"130400": "邯郸市",
+		"130500": "邢台市",
+		"130600": "保定市",
+		"130700": "张家口市",
+		"130800": "承德市",
+		"130900": "沧州市",
+		"131000": "廊坊市",
+		"131100": "衡水市"
+	},
+	"130100": {
+		"130102": "长安区",
+		"130103": "桥东区",
+		"130104": "桥西区",
+		"130105": "新华区",
+		"130107": "井陉矿区",
+		"130108": "裕华区",
+		"130121": "井陉县",
+		"130123": "正定县",
+		"130124": "栾城区",
+		"130125": "行唐县",
+		"130126": "灵寿县",
+		"130127": "高邑县",
+		"130128": "深泽县",
+		"130129": "赞皇县",
+		"130130": "无极县",
+		"130131": "平山县",
+		"130132": "元氏县",
+		"130133": "赵县",
+		"130181": "辛集市",
+		"130182": "藁城区",
+		"130183": "晋州市",
+		"130184": "新乐市",
+		"130185": "鹿泉区",
+		"130186": "其它区"
+	},
+	"130200": {
+		"130202": "路南区",
+		"130203": "路北区",
+		"130204": "古冶区",
+		"130205": "开平区",
+		"130207": "丰南区",
+		"130208": "丰润区",
+		"130223": "滦县",
+		"130224": "滦南县",
+		"130225": "乐亭县",
+		"130227": "迁西县",
+		"130229": "玉田县",
+		"130230": "曹妃甸区",
+		"130281": "遵化市",
+		"130283": "迁安市",
+		"130284": "其它区"
+	},
+	"130300": {
+		"130302": "海港区",
+		"130303": "山海关区",
+		"130304": "北戴河区",
+		"130321": "青龙满族自治县",
+		"130322": "昌黎县",
+		"130323": "抚宁区",
+		"130324": "卢龙县",
+		"130398": "其它区",
+		"130399": "经济技术开发区"
+	},
+	"130400": {
+		"130402": "邯山区",
+		"130403": "丛台区",
+		"130404": "复兴区",
+		"130406": "峰峰矿区",
+		"130421": "邯郸县",
+		"130423": "临漳县",
+		"130424": "成安县",
+		"130425": "大名县",
+		"130426": "涉县",
+		"130427": "磁县",
+		"130428": "肥乡区",
+		"130429": "永年区",
+		"130430": "邱县",
+		"130431": "鸡泽县",
+		"130432": "广平县",
+		"130433": "馆陶县",
+		"130434": "魏县",
+		"130435": "曲周县",
+		"130481": "武安市",
+		"130482": "其它区"
+	},
+	"130500": {
+		"130502": "桥东区",
+		"130503": "桥西区",
+		"130521": "邢台县",
+		"130522": "临城县",
+		"130523": "内丘县",
+		"130524": "柏乡县",
+		"130525": "隆尧县",
+		"130526": "任县",
+		"130527": "南和县",
+		"130528": "宁晋县",
+		"130529": "巨鹿县",
+		"130530": "新河县",
+		"130531": "广宗县",
+		"130532": "平乡县",
+		"130533": "威县",
+		"130534": "清河县",
+		"130535": "临西县",
+		"130581": "南宫市",
+		"130582": "沙河市",
+		"130583": "其它区"
+	},
+	"130600": {
+		"130602": "竞秀区",
+		"130603": "莲池区",
+		"130604": "南市区",
+		"130621": "满城区",
+		"130622": "清苑区",
+		"130623": "涞水县",
+		"130624": "阜平县",
+		"130625": "徐水区",
+		"130626": "定兴县",
+		"130627": "唐县",
+		"130628": "高阳县",
+		"130629": "容城县",
+		"130630": "涞源县",
+		"130631": "望都县",
+		"130632": "安新县",
+		"130633": "易县",
+		"130634": "曲阳县",
+		"130635": "蠡县",
+		"130636": "顺平县",
+		"130637": "博野县",
+		"130638": "雄县",
+		"130681": "涿州市",
+		"130682": "定州市",
+		"130683": "安国市",
+		"130684": "高碑店市",
+		"130698": "高开区",
+		"130699": "其它区"
+	},
+	"130700": {
+		"130702": "桥东区",
+		"130703": "桥西区",
+		"130705": "宣化区",
+		"130706": "下花园区",
+		"130721": "宣化县",
+		"130722": "张北县",
+		"130723": "康保县",
+		"130724": "沽源县",
+		"130725": "尚义县",
+		"130726": "蔚县",
+		"130727": "阳原县",
+		"130728": "怀安县",
+		"130729": "万全区",
+		"130730": "怀来县",
+		"130731": "涿鹿县",
+		"130732": "赤城县",
+		"130733": "崇礼区",
+		"130734": "其它区"
+	},
+	"130800": {
+		"130802": "双桥区",
+		"130803": "双滦区",
+		"130804": "鹰手营子矿区",
+		"130821": "承德县",
+		"130822": "兴隆县",
+		"130823": "平泉县",
+		"130824": "滦平县",
+		"130825": "隆化县",
+		"130826": "丰宁满族自治县",
+		"130827": "宽城满族自治县",
+		"130828": "围场满族蒙古族自治县",
+		"130829": "其它区"
+	},
+	"130900": {
+		"130902": "新华区",
+		"130903": "运河区",
+		"130921": "沧县",
+		"130922": "青县",
+		"130923": "东光县",
+		"130924": "海兴县",
+		"130925": "盐山县",
+		"130926": "肃宁县",
+		"130927": "南皮县",
+		"130928": "吴桥县",
+		"130929": "献县",
+		"130930": "孟村回族自治县",
+		"130981": "泊头市",
+		"130982": "任丘市",
+		"130983": "黄骅市",
+		"130984": "河间市",
+		"130985": "其它区"
+	},
+	"131000": {
+		"131002": "安次区",
+		"131003": "广阳区",
+		"131022": "固安县",
+		"131023": "永清县",
+		"131024": "香河县",
+		"131025": "大城县",
+		"131026": "文安县",
+		"131028": "大厂回族自治县",
+		"131051": "开发区",
+		"131052": "燕郊经济技术开发区",
+		"131081": "霸州市",
+		"131082": "三河市",
+		"131083": "其它区"
+	},
+	"131100": {
+		"131102": "桃城区",
+		"131121": "枣强县",
+		"131122": "武邑县",
+		"131123": "武强县",
+		"131124": "饶阳县",
+		"131125": "安平县",
+		"131126": "故城县",
+		"131127": "景县",
+		"131128": "阜城县",
+		"131181": "冀州区",
+		"131182": "深州市",
+		"131183": "其它区"
+	},
+	"140000": {
+		"140100": "太原市",
+		"140200": "大同市",
+		"140300": "阳泉市",
+		"140400": "长治市",
+		"140500": "晋城市",
+		"140600": "朔州市",
+		"140700": "晋中市",
+		"140800": "运城市",
+		"140900": "忻州市",
+		"141000": "临汾市",
+		"141100": "吕梁市"
+	},
+	"140100": {
+		"140105": "小店区",
+		"140106": "迎泽区",
+		"140107": "杏花岭区",
+		"140108": "尖草坪区",
+		"140109": "万柏林区",
+		"140110": "晋源区",
+		"140121": "清徐县",
+		"140122": "阳曲县",
+		"140123": "娄烦县",
+		"140181": "古交市",
+		"140182": "其它区"
+	},
+	"140200": {
+		"140202": "城区",
+		"140203": "矿区",
+		"140211": "南郊区",
+		"140212": "新荣区",
+		"140221": "阳高县",
+		"140222": "天镇县",
+		"140223": "广灵县",
+		"140224": "灵丘县",
+		"140225": "浑源县",
+		"140226": "左云县",
+		"140227": "大同县",
+		"140228": "其它区"
+	},
+	"140300": {
+		"140302": "城区",
+		"140303": "矿区",
+		"140311": "郊区",
+		"140321": "平定县",
+		"140322": "盂县",
+		"140323": "其它区"
+	},
+	"140400": {
+		"140421": "长治县",
+		"140423": "襄垣县",
+		"140424": "屯留县",
+		"140425": "平顺县",
+		"140426": "黎城县",
+		"140427": "壶关县",
+		"140428": "长子县",
+		"140429": "武乡县",
+		"140430": "沁县",
+		"140431": "沁源县",
+		"140481": "潞城市",
+		"140482": "城区",
+		"140483": "郊区",
+		"140484": "高新区",
+		"140485": "其它区"
+	},
+	"140500": {
+		"140502": "城区",
+		"140521": "沁水县",
+		"140522": "阳城县",
+		"140524": "陵川县",
+		"140525": "泽州县",
+		"140581": "高平市",
+		"140582": "其它区"
+	},
+	"140600": {
+		"140602": "朔城区",
+		"140603": "平鲁区",
+		"140621": "山阴县",
+		"140622": "应县",
+		"140623": "右玉县",
+		"140624": "怀仁县",
+		"140625": "其它区"
+	},
+	"140700": {
+		"140702": "榆次区",
+		"140721": "榆社县",
+		"140722": "左权县",
+		"140723": "和顺县",
+		"140724": "昔阳县",
+		"140725": "寿阳县",
+		"140726": "太谷县",
+		"140727": "祁县",
+		"140728": "平遥县",
+		"140729": "灵石县",
+		"140781": "介休市",
+		"140782": "其它区"
+	},
+	"140800": {
+		"140802": "盐湖区",
+		"140821": "临猗县",
+		"140822": "万荣县",
+		"140823": "闻喜县",
+		"140824": "稷山县",
+		"140825": "新绛县",
+		"140826": "绛县",
+		"140827": "垣曲县",
+		"140828": "夏县",
+		"140829": "平陆县",
+		"140830": "芮城县",
+		"140881": "永济市",
+		"140882": "河津市",
+		"140883": "其它区"
+	},
+	"140900": {
+		"140902": "忻府区",
+		"140921": "定襄县",
+		"140922": "五台县",
+		"140923": "代县",
+		"140924": "繁峙县",
+		"140925": "宁武县",
+		"140926": "静乐县",
+		"140927": "神池县",
+		"140928": "五寨县",
+		"140929": "岢岚县",
+		"140930": "河曲县",
+		"140931": "保德县",
+		"140932": "偏关县",
+		"140981": "原平市",
+		"140982": "其它区"
+	},
+	"141000": {
+		"141002": "尧都区",
+		"141021": "曲沃县",
+		"141022": "翼城县",
+		"141023": "襄汾县",
+		"141024": "洪洞县",
+		"141025": "古县",
+		"141026": "安泽县",
+		"141027": "浮山县",
+		"141028": "吉县",
+		"141029": "乡宁县",
+		"141030": "大宁县",
+		"141031": "隰县",
+		"141032": "永和县",
+		"141033": "蒲县",
+		"141034": "汾西县",
+		"141081": "侯马市",
+		"141082": "霍州市",
+		"141083": "其它区"
+	},
+	"141100": {
+		"141102": "离石区",
+		"141121": "文水县",
+		"141122": "交城县",
+		"141123": "兴县",
+		"141124": "临县",
+		"141125": "柳林县",
+		"141126": "石楼县",
+		"141127": "岚县",
+		"141128": "方山县",
+		"141129": "中阳县",
+		"141130": "交口县",
+		"141181": "孝义市",
+		"141182": "汾阳市",
+		"141183": "其它区"
+	},
+	"150000": {
+		"150100": "呼和浩特市",
+		"150200": "包头市",
+		"150300": "乌海市",
+		"150400": "赤峰市",
+		"150500": "通辽市",
+		"150600": "鄂尔多斯市",
+		"150700": "呼伦贝尔市",
+		"150800": "巴彦淖尔市",
+		"150900": "乌兰察布市",
+		"152200": "兴安盟",
+		"152500": "锡林郭勒盟",
+		"152900": "阿拉善盟"
+	},
+	"150100": {
+		"150102": "新城区",
+		"150103": "回民区",
+		"150104": "玉泉区",
+		"150105": "赛罕区",
+		"150121": "土默特左旗",
+		"150122": "托克托县",
+		"150123": "和林格尔县",
+		"150124": "清水河县",
+		"150125": "武川县",
+		"150126": "其它区"
+	},
+	"150200": {
+		"150202": "东河区",
+		"150203": "昆都仑区",
+		"150204": "青山区",
+		"150205": "石拐区",
+		"150206": "白云鄂博矿区",
+		"150207": "九原区",
+		"150221": "土默特右旗",
+		"150222": "固阳县",
+		"150223": "达尔罕茂明安联合旗",
+		"150224": "其它区"
+	},
+	"150300": {
+		"150302": "海勃湾区",
+		"150303": "海南区",
+		"150304": "乌达区",
+		"150305": "其它区"
+	},
+	"150400": {
+		"150402": "红山区",
+		"150403": "元宝山区",
+		"150404": "松山区",
+		"150421": "阿鲁科尔沁旗",
+		"150422": "巴林左旗",
+		"150423": "巴林右旗",
+		"150424": "林西县",
+		"150425": "克什克腾旗",
+		"150426": "翁牛特旗",
+		"150428": "喀喇沁旗",
+		"150429": "宁城县",
+		"150430": "敖汉旗",
+		"150431": "其它区"
+	},
+	"150500": {
+		"150502": "科尔沁区",
+		"150521": "科尔沁左翼中旗",
+		"150522": "科尔沁左翼后旗",
+		"150523": "开鲁县",
+		"150524": "库伦旗",
+		"150525": "奈曼旗",
+		"150526": "扎鲁特旗",
+		"150581": "霍林郭勒市",
+		"150582": "其它区"
+	},
+	"150600": {
+		"150602": "东胜区",
+		"150603": "康巴什区",
+		"150621": "达拉特旗",
+		"150622": "准格尔旗",
+		"150623": "鄂托克前旗",
+		"150624": "鄂托克旗",
+		"150625": "杭锦旗",
+		"150626": "乌审旗",
+		"150627": "伊金霍洛旗",
+		"150628": "其它区"
+	},
+	"150700": {
+		"150702": "海拉尔区",
+		"150703": "扎赉诺尔区",
+		"150721": "阿荣旗",
+		"150722": "莫力达瓦达斡尔族自治旗",
+		"150723": "鄂伦春自治旗",
+		"150724": "鄂温克族自治旗",
+		"150725": "陈巴尔虎旗",
+		"150726": "新巴尔虎左旗",
+		"150727": "新巴尔虎右旗",
+		"150781": "满洲里市",
+		"150782": "牙克石市",
+		"150783": "扎兰屯市",
+		"150784": "额尔古纳市",
+		"150785": "根河市",
+		"150786": "其它区"
+	},
+	"150800": {
+		"150802": "临河区",
+		"150821": "五原县",
+		"150822": "磴口县",
+		"150823": "乌拉特前旗",
+		"150824": "乌拉特中旗",
+		"150825": "乌拉特后旗",
+		"150826": "杭锦后旗",
+		"150827": "其它区"
+	},
+	"150900": {
+		"150902": "集宁区",
+		"150921": "卓资县",
+		"150922": "化德县",
+		"150923": "商都县",
+		"150924": "兴和县",
+		"150925": "凉城县",
+		"150926": "察哈尔右翼前旗",
+		"150927": "察哈尔右翼中旗",
+		"150928": "察哈尔右翼后旗",
+		"150929": "四子王旗",
+		"150981": "丰镇市",
+		"150982": "其它区"
+	},
+	"152200": {
+		"152201": "乌兰浩特市",
+		"152202": "阿尔山市",
+		"152221": "科尔沁右翼前旗",
+		"152222": "科尔沁右翼中旗",
+		"152223": "扎赉特旗",
+		"152224": "突泉县",
+		"152225": "其它区"
+	},
+	"152500": {
+		"152501": "二连浩特市",
+		"152502": "锡林浩特市",
+		"152522": "阿巴嘎旗",
+		"152523": "苏尼特左旗",
+		"152524": "苏尼特右旗",
+		"152525": "东乌珠穆沁旗",
+		"152526": "西乌珠穆沁旗",
+		"152527": "太仆寺旗",
+		"152528": "镶黄旗",
+		"152529": "正镶白旗",
+		"152530": "正蓝旗",
+		"152531": "多伦县",
+		"152532": "其它区"
+	},
+	"152900": {
+		"152921": "阿拉善左旗",
+		"152922": "阿拉善右旗",
+		"152923": "额济纳旗",
+		"152924": "其它区"
+	},
+	"210000": {
+		"210100": "沈阳市",
+		"210200": "大连市",
+		"210300": "鞍山市",
+		"210400": "抚顺市",
+		"210500": "本溪市",
+		"210600": "丹东市",
+		"210700": "锦州市",
+		"210800": "营口市",
+		"210900": "阜新市",
+		"211000": "辽阳市",
+		"211100": "盘锦市",
+		"211200": "铁岭市",
+		"211300": "朝阳市",
+		"211400": "葫芦岛市"
+	},
+	"210100": {
+		"210102": "和平区",
+		"210103": "沈河区",
+		"210104": "大东区",
+		"210105": "皇姑区",
+		"210106": "铁西区",
+		"210111": "苏家屯区",
+		"210112": "浑南区",
+		"210113": "新城子区",
+		"210114": "于洪区",
+		"210122": "辽中区",
+		"210123": "康平县",
+		"210124": "法库县",
+		"210181": "新民市",
+		"210182": "浑南新区",
+		"210183": "张士开发区",
+		"210184": "沈北新区",
+		"210185": "其它区"
+	},
+	"210200": {
+		"210202": "中山区",
+		"210203": "西岗区",
+		"210204": "沙河口区",
+		"210211": "甘井子区",
+		"210212": "旅顺口区",
+		"210213": "金州区",
+		"210224": "长海县",
+		"210251": "开发区",
+		"210281": "瓦房店市",
+		"210282": "普兰店区",
+		"210283": "庄河市",
+		"210297": "岭前区",
+		"210298": "其它区"
+	},
+	"210300": {
+		"210302": "铁东区",
+		"210303": "铁西区",
+		"210304": "立山区",
+		"210311": "千山区",
+		"210321": "台安县",
+		"210323": "岫岩满族自治县",
+		"210351": "高新区",
+		"210381": "海城市",
+		"210382": "其它区"
+	},
+	"210400": {
+		"210402": "新抚区",
+		"210403": "东洲区",
+		"210404": "望花区",
+		"210411": "顺城区",
+		"210421": "抚顺县",
+		"210422": "新宾满族自治县",
+		"210423": "清原满族自治县",
+		"210424": "其它区"
+	},
+	"210500": {
+		"210502": "平山区",
+		"210503": "溪湖区",
+		"210504": "明山区",
+		"210505": "南芬区",
+		"210521": "本溪满族自治县",
+		"210522": "桓仁满族自治县",
+		"210523": "其它区"
+	},
+	"210600": {
+		"210602": "元宝区",
+		"210603": "振兴区",
+		"210604": "振安区",
+		"210624": "宽甸满族自治县",
+		"210681": "东港市",
+		"210682": "凤城市",
+		"210683": "其它区"
+	},
+	"210700": {
+		"210702": "古塔区",
+		"210703": "凌河区",
+		"210711": "太和区",
+		"210726": "黑山县",
+		"210727": "义县",
+		"210781": "凌海市",
+		"210782": "北镇市",
+		"210783": "其它区"
+	},
+	"210800": {
+		"210802": "站前区",
+		"210803": "西市区",
+		"210804": "鲅鱼圈区",
+		"210811": "老边区",
+		"210881": "盖州市",
+		"210882": "大石桥市",
+		"210883": "其它区"
+	},
+	"210900": {
+		"210902": "海州区",
+		"210903": "新邱区",
+		"210904": "太平区",
+		"210905": "清河门区",
+		"210911": "细河区",
+		"210921": "阜新蒙古族自治县",
+		"210922": "彰武县",
+		"210923": "其它区"
+	},
+	"211000": {
+		"211002": "白塔区",
+		"211003": "文圣区",
+		"211004": "宏伟区",
+		"211005": "弓长岭区",
+		"211011": "太子河区",
+		"211021": "辽阳县",
+		"211081": "灯塔市",
+		"211082": "其它区"
+	},
+	"211100": {
+		"211102": "双台子区",
+		"211103": "兴隆台区",
+		"211121": "大洼区",
+		"211122": "盘山县",
+		"211123": "其它区"
+	},
+	"211200": {
+		"211202": "银州区",
+		"211204": "清河区",
+		"211221": "铁岭县",
+		"211223": "西丰县",
+		"211224": "昌图县",
+		"211281": "调兵山市",
+		"211282": "开原市",
+		"211283": "其它区"
+	},
+	"211300": {
+		"211302": "双塔区",
+		"211303": "龙城区",
+		"211321": "朝阳县",
+		"211322": "建平县",
+		"211324": "喀喇沁左翼蒙古族自治县",
+		"211381": "北票市",
+		"211382": "凌源市",
+		"211383": "其它区"
+	},
+	"211400": {
+		"211402": "连山区",
+		"211403": "龙港区",
+		"211404": "南票区",
+		"211421": "绥中县",
+		"211422": "建昌县",
+		"211481": "兴城市",
+		"211482": "其它区"
+	},
+	"220000": {
+		"220100": "长春市",
+		"220200": "吉林市",
+		"220300": "四平市",
+		"220400": "辽源市",
+		"220500": "通化市",
+		"220600": "白山市",
+		"220700": "松原市",
+		"220800": "白城市",
+		"222400": "延边朝鲜族自治州"
+	},
+	"220100": {
+		"220102": "南关区",
+		"220103": "宽城区",
+		"220104": "朝阳区",
+		"220105": "二道区",
+		"220106": "绿园区",
+		"220112": "双阳区",
+		"220122": "农安县",
+		"220181": "九台区",
+		"220182": "榆树市",
+		"220183": "德惠市",
+		"220184": "高新技术产业开发区",
+		"220185": "汽车产业开发区",
+		"220186": "经济技术开发区",
+		"220187": "净月旅游开发区",
+		"220188": "其它区"
+	},
+	"220200": {
+		"220202": "昌邑区",
+		"220203": "龙潭区",
+		"220204": "船营区",
+		"220211": "丰满区",
+		"220221": "永吉县",
+		"220281": "蛟河市",
+		"220282": "桦甸市",
+		"220283": "舒兰市",
+		"220284": "磐石市",
+		"220285": "其它区"
+	},
+	"220300": {
+		"220302": "铁西区",
+		"220303": "铁东区",
+		"220322": "梨树县",
+		"220323": "伊通满族自治县",
+		"220381": "公主岭市",
+		"220382": "双辽市",
+		"220383": "其它区"
+	},
+	"220400": {
+		"220402": "龙山区",
+		"220403": "西安区",
+		"220421": "东丰县",
+		"220422": "东辽县",
+		"220423": "其它区"
+	},
+	"220500": {
+		"220502": "东昌区",
+		"220503": "二道江区",
+		"220521": "通化县",
+		"220523": "辉南县",
+		"220524": "柳河县",
+		"220581": "梅河口市",
+		"220582": "集安市",
+		"220583": "其它区"
+	},
+	"220600": {
+		"220602": "浑江区",
+		"220621": "抚松县",
+		"220622": "靖宇县",
+		"220623": "长白朝鲜族自治县",
+		"220625": "江源区",
+		"220681": "临江市",
+		"220682": "其它区"
+	},
+	"220700": {
+		"220702": "宁江区",
+		"220721": "前郭尔罗斯蒙古族自治县",
+		"220722": "长岭县",
+		"220723": "乾安县",
+		"220724": "扶余市",
+		"220725": "其它区"
+	},
+	"220800": {
+		"220802": "洮北区",
+		"220821": "镇赉县",
+		"220822": "通榆县",
+		"220881": "洮南市",
+		"220882": "大安市",
+		"220883": "其它区"
+	},
+	"222400": {
+		"222401": "延吉市",
+		"222402": "图们市",
+		"222403": "敦化市",
+		"222404": "珲春市",
+		"222405": "龙井市",
+		"222406": "和龙市",
+		"222424": "汪清县",
+		"222426": "安图县",
+		"222427": "其它区"
+	},
+	"230000": {
+		"230100": "哈尔滨市",
+		"230200": "齐齐哈尔市",
+		"230300": "鸡西市",
+		"230400": "鹤岗市",
+		"230500": "双鸭山市",
+		"230600": "大庆市",
+		"230700": "伊春市",
+		"230800": "佳木斯市",
+		"230900": "七台河市",
+		"231000": "牡丹江市",
+		"231100": "黑河市",
+		"231200": "绥化市",
+		"232700": "大兴安岭地区"
+	},
+	"230100": {
+		"230102": "道里区",
+		"230103": "南岗区",
+		"230104": "道外区",
+		"230106": "香坊区",
+		"230107": "动力区",
+		"230108": "平房区",
+		"230109": "松北区",
+		"230111": "呼兰区",
+		"230123": "依兰县",
+		"230124": "方正县",
+		"230125": "宾县",
+		"230126": "巴彦县",
+		"230127": "木兰县",
+		"230128": "通河县",
+		"230129": "延寿县",
+		"230181": "阿城区",
+		"230182": "双城区",
+		"230183": "尚志市",
+		"230184": "五常市",
+		"230185": "阿城市",
+		"230186": "其它区"
+	},
+	"230200": {
+		"230202": "龙沙区",
+		"230203": "建华区",
+		"230204": "铁锋区",
+		"230205": "昂昂溪区",
+		"230206": "富拉尔基区",
+		"230207": "碾子山区",
+		"230208": "梅里斯达斡尔族区",
+		"230221": "龙江县",
+		"230223": "依安县",
+		"230224": "泰来县",
+		"230225": "甘南县",
+		"230227": "富裕县",
+		"230229": "克山县",
+		"230230": "克东县",
+		"230231": "拜泉县",
+		"230281": "讷河市",
+		"230282": "其它区"
+	},
+	"230300": {
+		"230302": "鸡冠区",
+		"230303": "恒山区",
+		"230304": "滴道区",
+		"230305": "梨树区",
+		"230306": "城子河区",
+		"230307": "麻山区",
+		"230321": "鸡东县",
+		"230381": "虎林市",
+		"230382": "密山市",
+		"230383": "其它区"
+	},
+	"230400": {
+		"230402": "向阳区",
+		"230403": "工农区",
+		"230404": "南山区",
+		"230405": "兴安区",
+		"230406": "东山区",
+		"230407": "兴山区",
+		"230421": "萝北县",
+		"230422": "绥滨县",
+		"230423": "其它区"
+	},
+	"230500": {
+		"230502": "尖山区",
+		"230503": "岭东区",
+		"230505": "四方台区",
+		"230506": "宝山区",
+		"230521": "集贤县",
+		"230522": "友谊县",
+		"230523": "宝清县",
+		"230524": "饶河县",
+		"230525": "其它区"
+	},
+	"230600": {
+		"230602": "萨尔图区",
+		"230603": "龙凤区",
+		"230604": "让胡路区",
+		"230605": "红岗区",
+		"230606": "大同区",
+		"230621": "肇州县",
+		"230622": "肇源县",
+		"230623": "林甸县",
+		"230624": "杜尔伯特蒙古族自治县",
+		"230625": "其它区"
+	},
+	"230700": {
+		"230702": "伊春区",
+		"230703": "南岔区",
+		"230704": "友好区",
+		"230705": "西林区",
+		"230706": "翠峦区",
+		"230707": "新青区",
+		"230708": "美溪区",
+		"230709": "金山屯区",
+		"230710": "五营区",
+		"230711": "乌马河区",
+		"230712": "汤旺河区",
+		"230713": "带岭区",
+		"230714": "乌伊岭区",
+		"230715": "红星区",
+		"230716": "上甘岭区",
+		"230722": "嘉荫县",
+		"230781": "铁力市",
+		"230782": "其它区"
+	},
+	"230800": {
+		"230802": "永红区",
+		"230803": "向阳区",
+		"230804": "前进区",
+		"230805": "东风区",
+		"230811": "郊区",
+		"230822": "桦南县",
+		"230826": "桦川县",
+		"230828": "汤原县",
+		"230833": "抚远市",
+		"230881": "同江市",
+		"230882": "富锦市",
+		"230883": "其它区"
+	},
+	"230900": {
+		"230902": "新兴区",
+		"230903": "桃山区",
+		"230904": "茄子河区",
+		"230921": "勃利县",
+		"230922": "其它区"
+	},
+	"231000": {
+		"231002": "东安区",
+		"231003": "阳明区",
+		"231004": "爱民区",
+		"231005": "西安区",
+		"231024": "东宁市",
+		"231025": "林口县",
+		"231081": "绥芬河市",
+		"231083": "海林市",
+		"231084": "宁安市",
+		"231085": "穆棱市",
+		"231086": "其它区"
+	},
+	"231100": {
+		"231102": "爱辉区",
+		"231121": "嫩江县",
+		"231123": "逊克县",
+		"231124": "孙吴县",
+		"231181": "北安市",
+		"231182": "五大连池市",
+		"231183": "其它区"
+	},
+	"231200": {
+		"231202": "北林区",
+		"231221": "望奎县",
+		"231222": "兰西县",
+		"231223": "青冈县",
+		"231224": "庆安县",
+		"231225": "明水县",
+		"231226": "绥棱县",
+		"231281": "安达市",
+		"231282": "肇东市",
+		"231283": "海伦市",
+		"231284": "其它区"
+	},
+	"232700": {
+		"232702": "松岭区",
+		"232703": "新林区",
+		"232704": "呼中区",
+		"232721": "呼玛县",
+		"232722": "塔河县",
+		"232723": "漠河县",
+		"232724": "加格达奇区",
+		"232725": "其它区"
+	},
+	"310000": {
+		"310100": "上海市"
+	},
+	"310100": {
+		"310101": "黄浦区",
+		"310103": "卢湾区",
+		"310104": "徐汇区",
+		"310105": "长宁区",
+		"310106": "静安区",
+		"310107": "普陀区",
+		"310108": "闸北区",
+		"310109": "虹口区",
+		"310110": "杨浦区",
+		"310112": "闵行区",
+		"310113": "宝山区",
+		"310114": "嘉定区",
+		"310115": "浦东新区",
+		"310116": "金山区",
+		"310117": "松江区",
+		"310118": "青浦区",
+		"310119": "南汇区",
+		"310120": "奉贤区",
+		"310152": "川沙区",
+		"310230": "崇明区",
+		"310231": "其它区"
+	},
+	"320000": {
+		"320100": "南京市",
+		"320200": "无锡市",
+		"320300": "徐州市",
+		"320400": "常州市",
+		"320500": "苏州市",
+		"320600": "南通市",
+		"320700": "连云港市",
+		"320800": "淮安市",
+		"320900": "盐城市",
+		"321000": "扬州市",
+		"321100": "镇江市",
+		"321200": "泰州市",
+		"321300": "宿迁市"
+	},
+	"320100": {
+		"320102": "玄武区",
+		"320103": "白下区",
+		"320104": "秦淮区",
+		"320105": "建邺区",
+		"320106": "鼓楼区",
+		"320107": "下关区",
+		"320111": "浦口区",
+		"320113": "栖霞区",
+		"320114": "雨花台区",
+		"320115": "江宁区",
+		"320116": "六合区",
+		"320124": "溧水区",
+		"320125": "高淳区",
+		"320126": "其它区"
+	},
+	"320200": {
+		"320202": "崇安区",
+		"320203": "南长区",
+		"320204": "北塘区",
+		"320205": "锡山区",
+		"320206": "惠山区",
+		"320211": "滨湖区",
+		"320213": "梁溪区",
+		"320214": "新吴区",
+		"320281": "江阴市",
+		"320282": "宜兴市",
+		"320296": "新区",
+		"320297": "其它区"
+	},
+	"320300": {
+		"320302": "鼓楼区",
+		"320303": "云龙区",
+		"320304": "九里区",
+		"320305": "贾汪区",
+		"320311": "泉山区",
+		"320321": "丰县",
+		"320322": "沛县",
+		"320323": "铜山区",
+		"320324": "睢宁县",
+		"320381": "新沂市",
+		"320382": "邳州市",
+		"320383": "其它区"
+	},
+	"320400": {
+		"320402": "天宁区",
+		"320404": "钟楼区",
+		"320405": "戚墅堰区",
+		"320411": "新北区",
+		"320412": "武进区",
+		"320481": "溧阳市",
+		"320482": "金坛区",
+		"320483": "其它区"
+	},
+	"320500": {
+		"320502": "沧浪区",
+		"320503": "平江区",
+		"320504": "金阊区",
+		"320505": "虎丘区",
+		"320506": "吴中区",
+		"320507": "相城区",
+		"320508": "姑苏区",
+		"320581": "常熟市",
+		"320582": "张家港市",
+		"320583": "昆山市",
+		"320584": "吴江区",
+		"320585": "太仓市",
+		"320594": "新区",
+		"320595": "园区",
+		"320596": "其它区"
+	},
+	"320600": {
+		"320602": "崇川区",
+		"320611": "港闸区",
+		"320612": "通州区",
+		"320621": "海安县",
+		"320623": "如东县",
+		"320681": "启东市",
+		"320682": "如皋市",
+		"320683": "通州市",
+		"320684": "海门市",
+		"320693": "开发区",
+		"320694": "其它区"
+	},
+	"320700": {
+		"320703": "连云区",
+		"320705": "新浦区",
+		"320706": "海州区",
+		"320721": "赣榆区",
+		"320722": "东海县",
+		"320723": "灌云县",
+		"320724": "灌南县",
+		"320725": "其它区"
+	},
+	"320800": {
+		"320802": "清江浦区",
+		"320803": "淮安区",
+		"320804": "淮阴区",
+		"320811": "清浦区",
+		"320826": "涟水县",
+		"320829": "洪泽区",
+		"320830": "盱眙县",
+		"320831": "金湖县",
+		"320832": "其它区"
+	},
+	"320900": {
+		"320902": "亭湖区",
+		"320903": "盐都区",
+		"320921": "响水县",
+		"320922": "滨海县",
+		"320923": "阜宁县",
+		"320924": "射阳县",
+		"320925": "建湖县",
+		"320981": "东台市",
+		"320982": "大丰区",
+		"320983": "其它区"
+	},
+	"321000": {
+		"321002": "广陵区",
+		"321003": "邗江区",
+		"321011": "维扬区",
+		"321023": "宝应县",
+		"321081": "仪征市",
+		"321084": "高邮市",
+		"321088": "江都区",
+		"321092": "经济开发区",
+		"321093": "其它区"
+	},
+	"321100": {
+		"321102": "京口区",
+		"321111": "润州区",
+		"321112": "丹徒区",
+		"321181": "丹阳市",
+		"321182": "扬中市",
+		"321183": "句容市",
+		"321184": "其它区"
+	},
+	"321200": {
+		"321202": "海陵区",
+		"321203": "高港区",
+		"321281": "兴化市",
+		"321282": "靖江市",
+		"321283": "泰兴市",
+		"321284": "姜堰区",
+		"321285": "其它区"
+	},
+	"321300": {
+		"321302": "宿城区",
+		"321311": "宿豫区",
+		"321322": "沭阳县",
+		"321323": "泗阳县",
+		"321324": "泗洪县",
+		"321325": "其它区"
+	},
+	"330000": {
+		"330100": "杭州市",
+		"330200": "宁波市",
+		"330300": "温州市",
+		"330400": "嘉兴市",
+		"330500": "湖州市",
+		"330600": "绍兴市",
+		"330700": "金华市",
+		"330800": "衢州市",
+		"330900": "舟山市",
+		"331000": "台州市",
+		"331100": "丽水市"
+	},
+	"330100": {
+		"330102": "上城区",
+		"330103": "下城区",
+		"330104": "江干区",
+		"330105": "拱墅区",
+		"330106": "西湖区",
+		"330108": "滨江区",
+		"330109": "萧山区",
+		"330110": "余杭区",
+		"330122": "桐庐县",
+		"330127": "淳安县",
+		"330182": "建德市",
+		"330183": "富阳区",
+		"330185": "临安市",
+		"330186": "其它区"
+	},
+	"330200": {
+		"330203": "海曙区",
+		"330204": "江东区",
+		"330205": "江北区",
+		"330206": "北仑区",
+		"330211": "镇海区",
+		"330212": "鄞州区",
+		"330225": "象山县",
+		"330226": "宁海县",
+		"330281": "余姚市",
+		"330282": "慈溪市",
+		"330283": "奉化区",
+		"330284": "其它区"
+	},
+	"330300": {
+		"330302": "鹿城区",
+		"330303": "龙湾区",
+		"330304": "瓯海区",
+		"330322": "洞头区",
+		"330324": "永嘉县",
+		"330326": "平阳县",
+		"330327": "苍南县",
+		"330328": "文成县",
+		"330329": "泰顺县",
+		"330381": "瑞安市",
+		"330382": "乐清市",
+		"330383": "其它区"
+	},
+	"330400": {
+		"330402": "南湖区",
+		"330411": "秀洲区",
+		"330421": "嘉善县",
+		"330424": "海盐县",
+		"330481": "海宁市",
+		"330482": "平湖市",
+		"330483": "桐乡市",
+		"330484": "其它区"
+	},
+	"330500": {
+		"330502": "吴兴区",
+		"330503": "南浔区",
+		"330521": "德清县",
+		"330522": "长兴县",
+		"330523": "安吉县",
+		"330524": "其它区"
+	},
+	"330600": {
+		"330602": "越城区",
+		"330621": "柯桥区",
+		"330624": "新昌县",
+		"330681": "诸暨市",
+		"330682": "上虞区",
+		"330683": "嵊州市",
+		"330684": "其它区"
+	},
+	"330700": {
+		"330702": "婺城区",
+		"330703": "金东区",
+		"330723": "武义县",
+		"330726": "浦江县",
+		"330727": "磐安县",
+		"330781": "兰溪市",
+		"330782": "义乌市",
+		"330783": "东阳市",
+		"330784": "永康市",
+		"330785": "其它区"
+	},
+	"330800": {
+		"330802": "柯城区",
+		"330803": "衢江区",
+		"330822": "常山县",
+		"330824": "开化县",
+		"330825": "龙游县",
+		"330881": "江山市",
+		"330882": "其它区"
+	},
+	"330900": {
+		"330902": "定海区",
+		"330903": "普陀区",
+		"330921": "岱山县",
+		"330922": "嵊泗县",
+		"330923": "其它区"
+	},
+	"331000": {
+		"331002": "椒江区",
+		"331003": "黄岩区",
+		"331004": "路桥区",
+		"331021": "玉环县",
+		"331022": "三门县",
+		"331023": "天台县",
+		"331024": "仙居县",
+		"331081": "温岭市",
+		"331082": "临海市",
+		"331083": "其它区"
+	},
+	"331100": {
+		"331102": "莲都区",
+		"331121": "青田县",
+		"331122": "缙云县",
+		"331123": "遂昌县",
+		"331124": "松阳县",
+		"331125": "云和县",
+		"331126": "庆元县",
+		"331127": "景宁畲族自治县",
+		"331181": "龙泉市",
+		"331182": "其它区"
+	},
+	"340000": {
+		"340100": "合肥市",
+		"340200": "芜湖市",
+		"340300": "蚌埠市",
+		"340400": "淮南市",
+		"340500": "马鞍山市",
+		"340600": "淮北市",
+		"340700": "铜陵市",
+		"340800": "安庆市",
+		"341000": "黄山市",
+		"341100": "滁州市",
+		"341200": "阜阳市",
+		"341300": "宿州市",
+		"341500": "六安市",
+		"341600": "亳州市",
+		"341700": "池州市",
+		"341800": "宣城市"
+	},
+	"340100": {
+		"340102": "瑶海区",
+		"340103": "庐阳区",
+		"340104": "蜀山区",
+		"340111": "包河区",
+		"340121": "长丰县",
+		"340122": "肥东县",
+		"340123": "肥西县",
+		"340151": "高新区",
+		"340191": "中区",
+		"340192": "其它区",
+		"341400": "巢湖市",
+		"341402": "居巢区",
+		"341421": "庐江县"
+	},
+	"340200": {
+		"340202": "镜湖区",
+		"340203": "弋江区",
+		"340207": "鸠江区",
+		"340208": "三山区",
+		"340221": "芜湖县",
+		"340222": "繁昌县",
+		"340223": "南陵县",
+		"340224": "其它区",
+		"341422": "无为县"
+	},
+	"340300": {
+		"340302": "龙子湖区",
+		"340303": "蚌山区",
+		"340304": "禹会区",
+		"340311": "淮上区",
+		"340321": "怀远县",
+		"340322": "五河县",
+		"340323": "固镇县",
+		"340324": "其它区"
+	},
+	"340400": {
+		"340402": "大通区",
+		"340403": "田家庵区",
+		"340404": "谢家集区",
+		"340405": "八公山区",
+		"340406": "潘集区",
+		"340421": "凤台县",
+		"340422": "其它区",
+		"340499": "寿县"
+	},
+	"340500": {
+		"340502": "金家庄区",
+		"340503": "花山区",
+		"340504": "雨山区",
+		"340506": "博望区",
+		"340521": "当涂县",
+		"340522": "其它区",
+		"341423": "含山县",
+		"341424": "和县"
+	},
+	"340600": {
+		"340602": "杜集区",
+		"340603": "相山区",
+		"340604": "烈山区",
+		"340621": "濉溪县",
+		"340622": "其它区"
+	},
+	"340700": {
+		"340702": "铜官山区",
+		"340703": "狮子山区",
+		"340705": "铜官区",
+		"340711": "郊区",
+		"340721": "义安区",
+		"340722": "其它区",
+		"340799": "枞阳县"
+	},
+	"340800": {
+		"340802": "迎江区",
+		"340803": "大观区",
+		"340811": "宜秀区",
+		"340822": "怀宁县",
+		"340823": "枞阳县",
+		"340824": "潜山县",
+		"340825": "太湖县",
+		"340826": "宿松县",
+		"340827": "望江县",
+		"340828": "岳西县",
+		"340881": "桐城市",
+		"340882": "其它区"
+	},
+	"341000": {
+		"341002": "屯溪区",
+		"341003": "黄山区",
+		"341004": "徽州区",
+		"341021": "歙县",
+		"341022": "休宁县",
+		"341023": "黟县",
+		"341024": "祁门县",
+		"341025": "其它区"
+	},
+	"341100": {
+		"341102": "琅琊区",
+		"341103": "南谯区",
+		"341122": "来安县",
+		"341124": "全椒县",
+		"341125": "定远县",
+		"341126": "凤阳县",
+		"341181": "天长市",
+		"341182": "明光市",
+		"341183": "其它区"
+	},
+	"341200": {
+		"341202": "颍州区",
+		"341203": "颍东区",
+		"341204": "颍泉区",
+		"341221": "临泉县",
+		"341222": "太和县",
+		"341225": "阜南县",
+		"341226": "颍上县",
+		"341282": "界首市",
+		"341283": "其它区"
+	},
+	"341300": {
+		"341302": "埇桥区",
+		"341321": "砀山县",
+		"341322": "萧县",
+		"341323": "灵璧县",
+		"341324": "泗县",
+		"341325": "其它区"
+	},
+	"341500": {
+		"341502": "金安区",
+		"341503": "裕安区",
+		"341504": "叶集区",
+		"341521": "寿县",
+		"341522": "霍邱县",
+		"341523": "舒城县",
+		"341524": "金寨县",
+		"341525": "霍山县",
+		"341526": "其它区"
+	},
+	"341600": {
+		"341602": "谯城区",
+		"341621": "涡阳县",
+		"341622": "蒙城县",
+		"341623": "利辛县",
+		"341624": "其它区"
+	},
+	"341700": {
+		"341702": "贵池区",
+		"341721": "东至县",
+		"341722": "石台县",
+		"341723": "青阳县",
+		"341724": "其它区"
+	},
+	"341800": {
+		"341802": "宣州区",
+		"341821": "郎溪县",
+		"341822": "广德县",
+		"341823": "泾县",
+		"341824": "绩溪县",
+		"341825": "旌德县",
+		"341881": "宁国市",
+		"341882": "其它区"
+	},
+	"350000": {
+		"350100": "福州市",
+		"350200": "厦门市",
+		"350300": "莆田市",
+		"350400": "三明市",
+		"350500": "泉州市",
+		"350600": "漳州市",
+		"350700": "南平市",
+		"350800": "龙岩市",
+		"350900": "宁德市"
+	},
+	"350100": {
+		"350102": "鼓楼区",
+		"350103": "台江区",
+		"350104": "仓山区",
+		"350105": "马尾区",
+		"350111": "晋安区",
+		"350121": "闽侯县",
+		"350122": "连江县",
+		"350123": "罗源县",
+		"350124": "闽清县",
+		"350125": "永泰县",
+		"350128": "平潭县",
+		"350181": "福清市",
+		"350182": "长乐市",
+		"350183": "其它区"
+	},
+	"350200": {
+		"350203": "思明区",
+		"350205": "海沧区",
+		"350206": "湖里区",
+		"350211": "集美区",
+		"350212": "同安区",
+		"350213": "翔安区",
+		"350214": "其它区"
+	},
+	"350300": {
+		"350302": "城厢区",
+		"350303": "涵江区",
+		"350304": "荔城区",
+		"350305": "秀屿区",
+		"350322": "仙游县",
+		"350323": "其它区"
+	},
+	"350400": {
+		"350402": "梅列区",
+		"350403": "三元区",
+		"350421": "明溪县",
+		"350423": "清流县",
+		"350424": "宁化县",
+		"350425": "大田县",
+		"350426": "尤溪县",
+		"350427": "沙县",
+		"350428": "将乐县",
+		"350429": "泰宁县",
+		"350430": "建宁县",
+		"350481": "永安市",
+		"350482": "其它区"
+	},
+	"350500": {
+		"350502": "鲤城区",
+		"350503": "丰泽区",
+		"350504": "洛江区",
+		"350505": "泉港区",
+		"350521": "惠安县",
+		"350524": "安溪县",
+		"350525": "永春县",
+		"350526": "德化县",
+		"350527": "金门县",
+		"350581": "石狮市",
+		"350582": "晋江市",
+		"350583": "南安市",
+		"350584": "其它区"
+	},
+	"350600": {
+		"350602": "芗城区",
+		"350603": "龙文区",
+		"350622": "云霄县",
+		"350623": "漳浦县",
+		"350624": "诏安县",
+		"350625": "长泰县",
+		"350626": "东山县",
+		"350627": "南靖县",
+		"350628": "平和县",
+		"350629": "华安县",
+		"350681": "龙海市",
+		"350682": "其它区"
+	},
+	"350700": {
+		"350702": "延平区",
+		"350721": "顺昌县",
+		"350722": "浦城县",
+		"350723": "光泽县",
+		"350724": "松溪县",
+		"350725": "政和县",
+		"350781": "邵武市",
+		"350782": "武夷山市",
+		"350783": "建瓯市",
+		"350784": "建阳区",
+		"350785": "其它区"
+	},
+	"350800": {
+		"350802": "新罗区",
+		"350821": "长汀县",
+		"350822": "永定区",
+		"350823": "上杭县",
+		"350824": "武平县",
+		"350825": "连城县",
+		"350881": "漳平市",
+		"350882": "其它区"
+	},
+	"350900": {
+		"350902": "蕉城区",
+		"350921": "霞浦县",
+		"350922": "古田县",
+		"350923": "屏南县",
+		"350924": "寿宁县",
+		"350925": "周宁县",
+		"350926": "柘荣县",
+		"350981": "福安市",
+		"350982": "福鼎市",
+		"350983": "其它区"
+	},
+	"360000": {
+		"360100": "南昌市",
+		"360200": "景德镇市",
+		"360300": "萍乡市",
+		"360400": "九江市",
+		"360500": "新余市",
+		"360600": "鹰潭市",
+		"360700": "赣州市",
+		"360800": "吉安市",
+		"360900": "宜春市",
+		"361000": "抚州市",
+		"361100": "上饶市"
+	},
+	"360100": {
+		"360102": "东湖区",
+		"360103": "西湖区",
+		"360104": "青云谱区",
+		"360105": "湾里区",
+		"360111": "青山湖区",
+		"360121": "南昌县",
+		"360122": "新建区",
+		"360123": "安义县",
+		"360124": "进贤县",
+		"360125": "红谷滩新区",
+		"360126": "经济技术开发区",
+		"360127": "昌北区",
+		"360128": "其它区"
+	},
+	"360200": {
+		"360202": "昌江区",
+		"360203": "珠山区",
+		"360222": "浮梁县",
+		"360281": "乐平市",
+		"360282": "其它区"
+	},
+	"360300": {
+		"360302": "安源区",
+		"360313": "湘东区",
+		"360321": "莲花县",
+		"360322": "上栗县",
+		"360323": "芦溪县",
+		"360324": "其它区"
+	},
+	"360400": {
+		"360402": "濂溪区",
+		"360403": "浔阳区",
+		"360421": "九江县",
+		"360423": "武宁县",
+		"360424": "修水县",
+		"360425": "永修县",
+		"360426": "德安县",
+		"360427": "庐山市",
+		"360428": "都昌县",
+		"360429": "湖口县",
+		"360430": "彭泽县",
+		"360481": "瑞昌市",
+		"360482": "其它区",
+		"360483": "共青城市"
+	},
+	"360500": {
+		"360502": "渝水区",
+		"360521": "分宜县",
+		"360522": "其它区"
+	},
+	"360600": {
+		"360602": "月湖区",
+		"360622": "余江县",
+		"360681": "贵溪市",
+		"360682": "其它区"
+	},
+	"360700": {
+		"360702": "章贡区",
+		"360721": "赣县",
+		"360722": "信丰县",
+		"360723": "大余县",
+		"360724": "上犹县",
+		"360725": "崇义县",
+		"360726": "安远县",
+		"360727": "龙南县",
+		"360728": "定南县",
+		"360729": "全南县",
+		"360730": "宁都县",
+		"360731": "于都县",
+		"360732": "兴国县",
+		"360733": "会昌县",
+		"360734": "寻乌县",
+		"360735": "石城县",
+		"360751": "黄金区",
+		"360781": "瑞金市",
+		"360782": "南康区",
+		"360783": "其它区"
+	},
+	"360800": {
+		"360802": "吉州区",
+		"360803": "青原区",
+		"360821": "吉安县",
+		"360822": "吉水县",
+		"360823": "峡江县",
+		"360824": "新干县",
+		"360825": "永丰县",
+		"360826": "泰和县",
+		"360827": "遂川县",
+		"360828": "万安县",
+		"360829": "安福县",
+		"360830": "永新县",
+		"360881": "井冈山市",
+		"360882": "其它区"
+	},
+	"360900": {
+		"360902": "袁州区",
+		"360921": "奉新县",
+		"360922": "万载县",
+		"360923": "上高县",
+		"360924": "宜丰县",
+		"360925": "靖安县",
+		"360926": "铜鼓县",
+		"360981": "丰城市",
+		"360982": "樟树市",
+		"360983": "高安市",
+		"360984": "其它区"
+	},
+	"361000": {
+		"361002": "临川区",
+		"361021": "南城县",
+		"361022": "黎川县",
+		"361023": "南丰县",
+		"361024": "崇仁县",
+		"361025": "乐安县",
+		"361026": "宜黄县",
+		"361027": "金溪县",
+		"361028": "资溪县",
+		"361029": "东乡县",
+		"361030": "广昌县",
+		"361031": "其它区"
+	},
+	"361100": {
+		"361102": "信州区",
+		"361121": "上饶县",
+		"361122": "广丰区",
+		"361123": "玉山县",
+		"361124": "铅山县",
+		"361125": "横峰县",
+		"361126": "弋阳县",
+		"361127": "余干县",
+		"361128": "鄱阳县",
+		"361129": "万年县",
+		"361130": "婺源县",
+		"361181": "德兴市",
+		"361182": "其它区"
+	},
+	"370000": {
+		"370100": "济南市",
+		"370200": "青岛市",
+		"370300": "淄博市",
+		"370400": "枣庄市",
+		"370500": "东营市",
+		"370600": "烟台市",
+		"370700": "潍坊市",
+		"370800": "济宁市",
+		"370900": "泰安市",
+		"371000": "威海市",
+		"371100": "日照市",
+		"371200": "莱芜市",
+		"371300": "临沂市",
+		"371400": "德州市",
+		"371500": "聊城市",
+		"371600": "滨州市",
+		"371700": "菏泽市"
+	},
+	"370100": {
+		"370102": "历下区",
+		"370103": "市中区",
+		"370104": "槐荫区",
+		"370105": "天桥区",
+		"370112": "历城区",
+		"370113": "长清区",
+		"370124": "平阴县",
+		"370125": "济阳县",
+		"370126": "商河县",
+		"370181": "章丘区",
+		"370182": "其它区"
+	},
+	"370200": {
+		"370202": "市南区",
+		"370203": "市北区",
+		"370205": "四方区",
+		"370211": "黄岛区",
+		"370212": "崂山区",
+		"370213": "李沧区",
+		"370214": "城阳区",
+		"370251": "开发区",
+		"370281": "胶州市",
+		"370282": "即墨市",
+		"370283": "平度市",
+		"370284": "胶南市",
+		"370285": "莱西市",
+		"370286": "其它区"
+	},
+	"370300": {
+		"370302": "淄川区",
+		"370303": "张店区",
+		"370304": "博山区",
+		"370305": "临淄区",
+		"370306": "周村区",
+		"370321": "桓台县",
+		"370322": "高青县",
+		"370323": "沂源县",
+		"370324": "其它区"
+	},
+	"370400": {
+		"370402": "市中区",
+		"370403": "薛城区",
+		"370404": "峄城区",
+		"370405": "台儿庄区",
+		"370406": "山亭区",
+		"370481": "滕州市",
+		"370482": "其它区"
+	},
+	"370500": {
+		"370502": "东营区",
+		"370503": "河口区",
+		"370521": "垦利区",
+		"370522": "利津县",
+		"370523": "广饶县",
+		"370589": "西城区",
+		"370590": "东城区",
+		"370591": "其它区"
+	},
+	"370600": {
+		"370602": "芝罘区",
+		"370611": "福山区",
+		"370612": "牟平区",
+		"370613": "莱山区",
+		"370634": "长岛县",
+		"370681": "龙口市",
+		"370682": "莱阳市",
+		"370683": "莱州市",
+		"370684": "蓬莱市",
+		"370685": "招远市",
+		"370686": "栖霞市",
+		"370687": "海阳市",
+		"370688": "其它区"
+	},
+	"370700": {
+		"370702": "潍城区",
+		"370703": "寒亭区",
+		"370704": "坊子区",
+		"370705": "奎文区",
+		"370724": "临朐县",
+		"370725": "昌乐县",
+		"370751": "开发区",
+		"370781": "青州市",
+		"370782": "诸城市",
+		"370783": "寿光市",
+		"370784": "安丘市",
+		"370785": "高密市",
+		"370786": "昌邑市",
+		"370787": "其它区"
+	},
+	"370800": {
+		"370802": "市中区",
+		"370811": "任城区",
+		"370826": "微山县",
+		"370827": "鱼台县",
+		"370828": "金乡县",
+		"370829": "嘉祥县",
+		"370830": "汶上县",
+		"370831": "泗水县",
+		"370832": "梁山县",
+		"370881": "曲阜市",
+		"370882": "兖州区",
+		"370883": "邹城市",
+		"370884": "其它区"
+	},
+	"370900": {
+		"370902": "泰山区",
+		"370903": "岱岳区",
+		"370921": "宁阳县",
+		"370923": "东平县",
+		"370982": "新泰市",
+		"370983": "肥城市",
+		"370984": "其它区"
+	},
+	"371000": {
+		"371002": "环翠区",
+		"371081": "文登区",
+		"371082": "荣成市",
+		"371083": "乳山市",
+		"371084": "其它区"
+	},
+	"371100": {
+		"371102": "东港区",
+		"371103": "岚山区",
+		"371121": "五莲县",
+		"371122": "莒县",
+		"371123": "其它区"
+	},
+	"371200": {
+		"371202": "莱城区",
+		"371203": "钢城区",
+		"371204": "其它区"
+	},
+	"371300": {
+		"371302": "兰山区",
+		"371311": "罗庄区",
+		"371312": "河东区",
+		"371321": "沂南县",
+		"371322": "郯城县",
+		"371323": "沂水县",
+		"371324": "兰陵县",
+		"371325": "费县",
+		"371326": "平邑县",
+		"371327": "莒南县",
+		"371328": "蒙阴县",
+		"371329": "临沭县",
+		"371330": "其它区"
+	},
+	"371400": {
+		"371402": "德城区",
+		"371421": "陵城区",
+		"371422": "宁津县",
+		"371423": "庆云县",
+		"371424": "临邑县",
+		"371425": "齐河县",
+		"371426": "平原县",
+		"371427": "夏津县",
+		"371428": "武城县",
+		"371451": "开发区",
+		"371481": "乐陵市",
+		"371482": "禹城市",
+		"371483": "其它区"
+	},
+	"371500": {
+		"371502": "东昌府区",
+		"371521": "阳谷县",
+		"371522": "莘县",
+		"371523": "茌平县",
+		"371524": "东阿县",
+		"371525": "冠县",
+		"371526": "高唐县",
+		"371581": "临清市",
+		"371582": "其它区"
+	},
+	"371600": {
+		"371602": "滨城区",
+		"371621": "惠民县",
+		"371622": "阳信县",
+		"371623": "无棣县",
+		"371624": "沾化区",
+		"371625": "博兴县",
+		"371626": "邹平县",
+		"371627": "其它区"
+	},
+	"371700": {
+		"371702": "牡丹区",
+		"371721": "曹县",
+		"371722": "单县",
+		"371723": "成武县",
+		"371724": "巨野县",
+		"371725": "郓城县",
+		"371726": "鄄城县",
+		"371727": "定陶区",
+		"371728": "东明县",
+		"371729": "其它区"
+	},
+	"410000": {
+		"410100": "郑州市",
+		"410200": "开封市",
+		"410300": "洛阳市",
+		"410400": "平顶山市",
+		"410500": "安阳市",
+		"410600": "鹤壁市",
+		"410700": "新乡市",
+		"410800": "焦作市",
+		"410881": "济源市",
+		"410900": "濮阳市",
+		"411000": "许昌市",
+		"411100": "漯河市",
+		"411200": "三门峡市",
+		"411300": "南阳市",
+		"411400": "商丘市",
+		"411500": "信阳市",
+		"411600": "周口市",
+		"411700": "驻马店市"
+	},
+	"410100": {
+		"410102": "中原区",
+		"410103": "二七区",
+		"410104": "管城回族区",
+		"410105": "金水区",
+		"410106": "上街区",
+		"410108": "惠济区",
+		"410122": "中牟县",
+		"410181": "巩义市",
+		"410182": "荥阳市",
+		"410183": "新密市",
+		"410184": "新郑市",
+		"410185": "登封市",
+		"410186": "郑东新区",
+		"410187": "高新区",
+		"410188": "其它区"
+	},
+	"410200": {
+		"410202": "龙亭区",
+		"410203": "顺河回族区",
+		"410204": "鼓楼区",
+		"410205": "禹王台区",
+		"410211": "金明区",
+		"410221": "杞县",
+		"410222": "通许县",
+		"410223": "尉氏县",
+		"410224": "祥符区",
+		"410225": "兰考县",
+		"410226": "其它区"
+	},
+	"410300": {
+		"410302": "老城区",
+		"410303": "西工区",
+		"410304": "瀍河回族区",
+		"410305": "涧西区",
+		"410306": "吉利区",
+		"410307": "洛龙区",
+		"410322": "孟津县",
+		"410323": "新安县",
+		"410324": "栾川县",
+		"410325": "嵩县",
+		"410326": "汝阳县",
+		"410327": "宜阳县",
+		"410328": "洛宁县",
+		"410329": "伊川县",
+		"410381": "偃师市",
+		"471004": "高新区",
+		"471005": "其它区"
+	},
+	"410400": {
+		"410402": "新华区",
+		"410403": "卫东区",
+		"410404": "石龙区",
+		"410411": "湛河区",
+		"410421": "宝丰县",
+		"410422": "叶县",
+		"410423": "鲁山县",
+		"410425": "郏县",
+		"410481": "舞钢市",
+		"410482": "汝州市",
+		"410483": "其它区"
+	},
+	"410500": {
+		"410502": "文峰区",
+		"410503": "北关区",
+		"410505": "殷都区",
+		"410506": "龙安区",
+		"410522": "安阳县",
+		"410523": "汤阴县",
+		"410526": "滑县",
+		"410527": "内黄县",
+		"410581": "林州市",
+		"410582": "其它区"
+	},
+	"410600": {
+		"410602": "鹤山区",
+		"410603": "山城区",
+		"410611": "淇滨区",
+		"410621": "浚县",
+		"410622": "淇县",
+		"410623": "其它区"
+	},
+	"410700": {
+		"410702": "红旗区",
+		"410703": "卫滨区",
+		"410704": "凤泉区",
+		"410711": "牧野区",
+		"410721": "新乡县",
+		"410724": "获嘉县",
+		"410725": "原阳县",
+		"410726": "延津县",
+		"410727": "封丘县",
+		"410728": "长垣县",
+		"410781": "卫辉市",
+		"410782": "辉县市",
+		"410783": "其它区"
+	},
+	"410800": {
+		"410802": "解放区",
+		"410803": "中站区",
+		"410804": "马村区",
+		"410811": "山阳区",
+		"410821": "修武县",
+		"410822": "博爱县",
+		"410823": "武陟县",
+		"410825": "温县",
+		"410882": "沁阳市",
+		"410883": "孟州市",
+		"410884": "其它区"
+	},
+	"410881": {
+		"419001001": "济源市沁园街道",
+		"419001002": "济源市济水街道",
+		"419001003": "济源市北海街道",
+		"419001004": "济源市天坛街道",
+		"419001005": "济源市玉泉街道",
+		"419001100": "济源市克井镇",
+		"419001101": "济源市五龙口镇",
+		"419001102": "济源市轵城镇",
+		"419001103": "济源市承留镇",
+		"419001104": "济源市邵原镇",
+		"419001105": "济源市坡头镇",
+		"419001106": "济源市梨林镇",
+		"419001107": "济源市大峪镇",
+		"419001108": "济源市思礼镇",
+		"419001109": "济源市王屋镇",
+		"419001110": "济源市下冶镇"
+	},
+	"410900": {
+		"410902": "华龙区",
+		"410922": "清丰县",
+		"410923": "南乐县",
+		"410926": "范县",
+		"410927": "台前县",
+		"410928": "濮阳县",
+		"410929": "其它区"
+	},
+	"411000": {
+		"411002": "魏都区",
+		"411023": "许昌县",
+		"411024": "鄢陵县",
+		"411025": "襄城县",
+		"411081": "禹州市",
+		"411082": "长葛市",
+		"411083": "其它区"
+	},
+	"411100": {
+		"411102": "源汇区",
+		"411103": "郾城区",
+		"411104": "召陵区",
+		"411121": "舞阳县",
+		"411122": "临颍县",
+		"411123": "其它区"
+	},
+	"411200": {
+		"411202": "湖滨区",
+		"411221": "渑池县",
+		"411222": "陕州区",
+		"411224": "卢氏县",
+		"411281": "义马市",
+		"411282": "灵宝市",
+		"411283": "其它区"
+	},
+	"411300": {
+		"411302": "宛城区",
+		"411303": "卧龙区",
+		"411321": "南召县",
+		"411322": "方城县",
+		"411323": "西峡县",
+		"411324": "镇平县",
+		"411325": "内乡县",
+		"411326": "淅川县",
+		"411327": "社旗县",
+		"411328": "唐河县",
+		"411329": "新野县",
+		"411330": "桐柏县",
+		"411381": "邓州市",
+		"411382": "其它区"
+	},
+	"411400": {
+		"411402": "梁园区",
+		"411403": "睢阳区",
+		"411421": "民权县",
+		"411422": "睢县",
+		"411423": "宁陵县",
+		"411424": "柘城县",
+		"411425": "虞城县",
+		"411426": "夏邑县",
+		"411481": "永城市",
+		"411482": "其它区"
+	},
+	"411500": {
+		"411502": "浉河区",
+		"411503": "平桥区",
+		"411521": "罗山县",
+		"411522": "光山县",
+		"411523": "新县",
+		"411524": "商城县",
+		"411525": "固始县",
+		"411526": "潢川县",
+		"411527": "淮滨县",
+		"411528": "息县",
+		"411529": "其它区"
+	},
+	"411600": {
+		"411602": "川汇区",
+		"411621": "扶沟县",
+		"411622": "西华县",
+		"411623": "商水县",
+		"411624": "沈丘县",
+		"411625": "郸城县",
+		"411626": "淮阳县",
+		"411627": "太康县",
+		"411628": "鹿邑县",
+		"411681": "项城市",
+		"411682": "其它区"
+	},
+	"411700": {
+		"411702": "驿城区",
+		"411721": "西平县",
+		"411722": "上蔡县",
+		"411723": "平舆县",
+		"411724": "正阳县",
+		"411725": "确山县",
+		"411726": "泌阳县",
+		"411727": "汝南县",
+		"411728": "遂平县",
+		"411730": "其它区"
+	},
+	"420000": {
+		"420100": "武汉市",
+		"420200": "黄石市",
+		"420500": "宜昌市",
+		"420600": "襄阳市",
+		"420700": "鄂州市",
+		"420800": "荆门市",
+		"420900": "孝感市",
+		"421000": "荆州市",
+		"422800": "恩施土家族苗族自治州",
+		"429004": "仙桃市",
+		"429005": "潜江市",
+		"429006": "天门市",
+		"429021": "神农架林区"
+	},
+	"420100": {
+		"420102": "江岸区",
+		"420103": "江汉区",
+		"420104": "硚口区",
+		"420112": "东西湖区",
+		"420113": "汉南区",
+		"420114": "蔡甸区",
+		"420115": "江夏区",
+		"420116": "黄陂区",
+		"420117": "新洲区",
+		"420118": "其它区"
+	},
+	"420200": {
+		"420202": "黄石港区",
+		"420203": "西塞山区",
+		"420204": "下陆区",
+		"420205": "铁山区",
+		"420222": "阳新县",
+		"420281": "大冶市",
+		"420282": "其它区"
+	},
+	"420300": {
+		"420302": "茅箭区",
+		"420303": "张湾区",
+		"420321": "郧阳区",
+		"420322": "郧西县",
+		"420323": "竹山县",
+		"420324": "竹溪县",
+		"420325": "房县",
+		"420381": "丹江口市",
+		"420382": "城区",
+		"420383": "其它区"
+	},
+	"420500": {
+		"420502": "西陵区",
+		"420503": "伍家岗区",
+		"420504": "点军区",
+		"420505": "猇亭区",
+		"420506": "夷陵区",
+		"420525": "远安县",
+		"420526": "兴山县",
+		"420527": "秭归县",
+		"420528": "长阳土家族自治县",
+		"420529": "五峰土家族自治县",
+		"420551": "葛洲坝区",
+		"420552": "开发区",
+		"420581": "宜都市",
+		"420582": "当阳市",
+		"420583": "枝江市",
+		"420584": "其它区"
+	},
+	"420600": {
+		"420602": "襄城区",
+		"420606": "樊城区",
+		"420607": "襄州区",
+		"420624": "南漳县",
+		"420625": "谷城县",
+		"420626": "保康县",
+		"420682": "老河口市",
+		"420683": "枣阳市",
+		"420684": "宜城市",
+		"420685": "其它区"
+	},
+	"420700": {
+		"420702": "梁子湖区",
+		"420703": "华容区",
+		"420704": "鄂城区",
+		"420705": "其它区"
+	},
+	"420800": {
+		"420802": "东宝区",
+		"420804": "掇刀区",
+		"420821": "京山县",
+		"420822": "沙洋县",
+		"420881": "钟祥市",
+		"420882": "其它区"
+	},
+	"420900": {
+		"420902": "孝南区",
+		"420921": "孝昌县",
+		"420922": "大悟县",
+		"420923": "云梦县",
+		"420981": "应城市",
+		"420982": "安陆市",
+		"420984": "汉川市",
+		"420985": "其它区"
+	},
+	"421000": {
+		"421002": "沙市区",
+		"421003": "荆州区",
+		"421022": "公安县",
+		"421023": "监利县",
+		"421024": "江陵县",
+		"421081": "石首市",
+		"421083": "洪湖市",
+		"421087": "松滋市",
+		"421088": "其它区"
+	},
+	"421100": {
+		"421102": "黄州区",
+		"421121": "团风县",
+		"421122": "红安县",
+		"421123": "罗田县",
+		"421124": "英山县",
+		"421125": "浠水县",
+		"421126": "蕲春县",
+		"421127": "黄梅县",
+		"421181": "麻城市",
+		"421182": "武穴市",
+		"421183": "其它区"
+	},
+	"421200": {
+		"421202": "咸安区",
+		"421221": "嘉鱼县",
+		"421222": "通城县",
+		"421223": "崇阳县",
+		"421224": "通山县",
+		"421281": "赤壁市",
+		"421282": "温泉城区",
+		"421283": "其它区"
+	},
+	"421300": {
+		"421302": "曾都区",
+		"421321": "随县",
+		"421381": "广水市",
+		"421382": "其它区"
+	},
+	"422800": {
+		"422801": "恩施市",
+		"422802": "利川市",
+		"422822": "建始县",
+		"422823": "巴东县",
+		"422825": "宣恩县",
+		"422826": "咸丰县",
+		"422827": "来凤县",
+		"422828": "鹤峰县",
+		"422829": "其它区"
+	},
+	"429004": {
+		"429004001": "沙嘴街道",
+		"429004002": "干河街道",
+		"429004003": "龙华山街道",
+		"429004100": "郑场镇",
+		"429004101": "毛嘴镇",
+		"429004102": "豆河镇",
+		"429004103": "三伏潭镇",
+		"429004104": "胡场镇",
+		"429004105": "长倘口镇",
+		"429004106": "西流河镇",
+		"429004107": "沙湖镇",
+		"429004108": "杨林尾镇",
+		"429004109": "彭场镇",
+		"429004110": "张沟镇",
+		"429004111": "郭河镇",
+		"429004112": "沔城回族镇",
+		"429004113": "通海口镇",
+		"429004114": "陈场镇",
+		"429004400": "工业园区",
+		"429004401": "九合垸原种场",
+		"429004402": "沙湖原种场",
+		"429004404": "五湖渔场",
+		"429004405": "赵西垸林场",
+		"429004407": "畜禽良种场",
+		"429004408": "排湖风景区",
+		"429004900": "市辖区"
+	},
+	"429005": {
+		"429005001": "园林街道",
+		"429005002": "杨市街道",
+		"429005003": "周矶街道",
+		"429005004": "广华街道",
+		"429005005": "泰丰街道",
+		"429005006": "高场街道",
+		"429005100": "竹根滩镇",
+		"429005101": "渔洋镇",
+		"429005102": "王场镇",
+		"429005103": "高石碑镇",
+		"429005104": "熊口镇",
+		"429005105": "老新镇",
+		"429005106": "浩口镇",
+		"429005107": "积玉口镇",
+		"429005108": "张金镇",
+		"429005109": "龙湾镇",
+		"429005400": "江汉石油管理局",
+		"429005401": "潜江经济开发区",
+		"429005450": "周矶管理区",
+		"429005451": "后湖管理区",
+		"429005452": "熊口管理区",
+		"429005453": "总口管理区",
+		"429005454": "白鹭湖管理区",
+		"429005455": "运粮湖管理区",
+		"429005457": "浩口原种场"
+	},
+	"429006": {
+		"429006001": "竟陵街道",
+		"429006002": "侨乡街道开发区",
+		"429006003": "杨林街道",
+		"429006100": "多宝镇",
+		"429006101": "拖市镇",
+		"429006102": "张港镇",
+		"429006103": "蒋场镇",
+		"429006104": "汪场镇",
+		"429006105": "渔薪镇",
+		"429006106": "黄潭镇",
+		"429006107": "岳口镇",
+		"429006108": "横林镇",
+		"429006109": "彭市镇",
+		"429006110": "麻洋镇",
+		"429006111": "多祥镇",
+		"429006112": "干驿镇",
+		"429006113": "马湾镇",
+		"429006114": "卢市镇",
+		"429006115": "小板镇",
+		"429006116": "九真镇",
+		"429006118": "皂市镇",
+		"429006119": "胡市镇",
+		"429006120": "石河镇",
+		"429006121": "佛子山镇",
+		"429006201": "净潭乡",
+		"429006450": "蒋湖农场",
+		"429006451": "白茅湖农场",
+		"429006452": "沉湖管委会"
+	},
+	"429021": {
+		"429021100": "松柏镇",
+		"429021101": "阳日镇",
+		"429021102": "木鱼镇",
+		"429021103": "红坪镇",
+		"429021104": "新华镇",
+		"429021105": "九湖镇",
+		"429021200": "宋洛乡",
+		"429021202": "下谷坪土家族乡"
+	},
+	"430000": {
+		"430100": "长沙市",
+		"430200": "株洲市",
+		"430300": "湘潭市",
+		"430400": "衡阳市",
+		"430500": "邵阳市",
+		"430600": "岳阳市",
+		"430700": "常德市",
+		"430800": "张家界市",
+		"430900": "益阳市",
+		"431000": "郴州市",
+		"431100": "永州市",
+		"431200": "怀化市",
+		"431300": "娄底市",
+		"433100": "湘西土家族苗族自治州"
+	},
+	"430100": {
+		"430102": "芙蓉区",
+		"430103": "天心区",
+		"430104": "岳麓区",
+		"430105": "开福区",
+		"430111": "雨花区",
+		"430121": "长沙县",
+		"430122": "望城区",
+		"430124": "宁乡县",
+		"430181": "浏阳市",
+		"430182": "其它区"
+	},
+	"430200": {
+		"430202": "荷塘区",
+		"430203": "芦淞区",
+		"430204": "石峰区",
+		"430211": "天元区",
+		"430221": "株洲县",
+		"430223": "攸县",
+		"430224": "茶陵县",
+		"430225": "炎陵县",
+		"430281": "醴陵市",
+		"430282": "其它区"
+	},
+	"430300": {
+		"430302": "雨湖区",
+		"430304": "岳塘区",
+		"430321": "湘潭县",
+		"430381": "湘乡市",
+		"430382": "韶山市",
+		"430383": "其它区"
+	},
+	"430400": {
+		"430405": "珠晖区",
+		"430406": "雁峰区",
+		"430407": "石鼓区",
+		"430408": "蒸湘区",
+		"430412": "南岳区",
+		"430421": "衡阳县",
+		"430422": "衡南县",
+		"430423": "衡山县",
+		"430424": "衡东县",
+		"430426": "祁东县",
+		"430481": "耒阳市",
+		"430482": "常宁市",
+		"430483": "其它区"
+	},
+	"430500": {
+		"430502": "双清区",
+		"430503": "大祥区",
+		"430511": "北塔区",
+		"430521": "邵东县",
+		"430522": "新邵县",
+		"430523": "邵阳县",
+		"430524": "隆回县",
+		"430525": "洞口县",
+		"430527": "绥宁县",
+		"430528": "新宁县",
+		"430529": "城步苗族自治县",
+		"430581": "武冈市",
+		"430582": "其它区"
+	},
+	"430600": {
+		"430602": "岳阳楼区",
+		"430603": "云溪区",
+		"430611": "君山区",
+		"430621": "岳阳县",
+		"430623": "华容县",
+		"430624": "湘阴县",
+		"430626": "平江县",
+		"430681": "汨罗市",
+		"430682": "临湘市",
+		"430683": "其它区"
+	},
+	"430700": {
+		"430702": "武陵区",
+		"430703": "鼎城区",
+		"430721": "安乡县",
+		"430722": "汉寿县",
+		"430723": "澧县",
+		"430724": "临澧县",
+		"430725": "桃源县",
+		"430726": "石门县",
+		"430781": "津市市",
+		"430782": "其它区"
+	},
+	"430800": {
+		"430802": "永定区",
+		"430811": "武陵源区",
+		"430821": "慈利县",
+		"430822": "桑植县",
+		"430823": "其它区"
+	},
+	"430900": {
+		"430902": "资阳区",
+		"430903": "赫山区",
+		"430921": "南县",
+		"430922": "桃江县",
+		"430923": "安化县",
+		"430981": "沅江市",
+		"430982": "其它区"
+	},
+	"431000": {
+		"431002": "北湖区",
+		"431003": "苏仙区",
+		"431021": "桂阳县",
+		"431022": "宜章县",
+		"431023": "永兴县",
+		"431024": "嘉禾县",
+		"431025": "临武县",
+		"431026": "汝城县",
+		"431027": "桂东县",
+		"431028": "安仁县",
+		"431081": "资兴市",
+		"431082": "其它区"
+	},
+	"431100": {
+		"431102": "零陵区",
+		"431103": "冷水滩区",
+		"431121": "祁阳县",
+		"431122": "东安县",
+		"431123": "双牌县",
+		"431124": "道县",
+		"431125": "江永县",
+		"431126": "宁远县",
+		"431127": "蓝山县",
+		"431128": "新田县",
+		"431129": "江华瑶族自治县",
+		"431130": "其它区"
+	},
+	"431200": {
+		"431202": "鹤城区",
+		"431221": "中方县",
+		"431222": "沅陵县",
+		"431223": "辰溪县",
+		"431224": "溆浦县",
+		"431225": "会同县",
+		"431226": "麻阳苗族自治县",
+		"431227": "新晃侗族自治县",
+		"431228": "芷江侗族自治县",
+		"431229": "靖州苗族侗族自治县",
+		"431230": "通道侗族自治县",
+		"431281": "洪江市",
+		"431282": "其它区"
+	},
+	"431300": {
+		"431302": "娄星区",
+		"431321": "双峰县",
+		"431322": "新化县",
+		"431381": "冷水江市",
+		"431382": "涟源市",
+		"431383": "其它区"
+	},
+	"433100": {
+		"433101": "吉首市",
+		"433122": "泸溪县",
+		"433123": "凤凰县",
+		"433124": "花垣县",
+		"433125": "保靖县",
+		"433126": "古丈县",
+		"433127": "永顺县",
+		"433130": "龙山县",
+		"433131": "其它区"
+	},
+	"440000": {
+		"440100": "广州市",
+		"440200": "韶关市",
+		"440300": "深圳市",
+		"440400": "珠海市",
+		"440500": "汕头市",
+		"440600": "佛山市",
+		"440700": "江门市",
+		"440800": "湛江市",
+		"440900": "茂名市",
+		"441200": "肇庆市",
+		"441300": "惠州市",
+		"441400": "梅州市",
+		"441500": "汕尾市",
+		"441600": "河源市",
+		"441700": "阳江市",
+		"441800": "清远市",
+		"441900": "东莞市",
+		"442000": "中山市",
+		"442101": "东沙群岛",
+		"445100": "潮州市",
+		"445200": "揭阳市",
+		"445300": "云浮市"
+	},
+	"440100": {
+		"440103": "荔湾区",
+		"440104": "越秀区",
+		"440105": "海珠区",
+		"440106": "天河区",
+		"440111": "白云区",
+		"440112": "黄埔区",
+		"440113": "番禺区",
+		"440114": "花都区",
+		"440115": "南沙区",
+		"440116": "萝岗区",
+		"440183": "增城区",
+		"440184": "从化区",
+		"440188": "东山区",
+		"440189": "其它区"
+	},
+	"440200": {
+		"440203": "武江区",
+		"440204": "浈江区",
+		"440205": "曲江区",
+		"440222": "始兴县",
+		"440224": "仁化县",
+		"440229": "翁源县",
+		"440232": "乳源瑶族自治县",
+		"440233": "新丰县",
+		"440281": "乐昌市",
+		"440282": "南雄市",
+		"440283": "其它区"
+	},
+	"440300": {
+		"440303": "罗湖区",
+		"440304": "福田区",
+		"440305": "南山区",
+		"440306": "宝安区",
+		"440307": "龙岗区",
+		"440308": "盐田区",
+		"440309": "其它区",
+		"440320": "光明新区",
+		"440321": "坪山新区",
+		"4403211": "坪山区",
+		"440322": "大鹏新区",
+		"440323": "龙华新区",
+		"4403231": "龙华区",
+	},
+	"440400": {
+		"440402": "香洲区",
+		"440403": "斗门区",
+		"440404": "金湾区",
+		"440486": "金唐区",
+		"440487": "南湾区",
+		"440488": "其它区"
+	},
+	"440500": {
+		"440507": "龙湖区",
+		"440511": "金平区",
+		"440512": "濠江区",
+		"440513": "潮阳区",
+		"440514": "潮南区",
+		"440515": "澄海区",
+		"440523": "南澳县",
+		"440524": "其它区"
+	},
+	"440600": {
+		"440604": "禅城区",
+		"440605": "南海区",
+		"440606": "顺德区",
+		"440607": "三水区",
+		"440608": "高明区",
+		"440609": "其它区"
+	},
+	"440700": {
+		"440703": "蓬江区",
+		"440704": "江海区",
+		"440705": "新会区",
+		"440781": "台山市",
+		"440783": "开平市",
+		"440784": "鹤山市",
+		"440785": "恩平市",
+		"440786": "其它区"
+	},
+	"440800": {
+		"440802": "赤坎区",
+		"440803": "霞山区",
+		"440804": "坡头区",
+		"440811": "麻章区",
+		"440823": "遂溪县",
+		"440825": "徐闻县",
+		"440881": "廉江市",
+		"440882": "雷州市",
+		"440883": "吴川市",
+		"440884": "其它区"
+	},
+	"440900": {
+		"440902": "茂南区",
+		"440903": "电白区",
+		"440923": "电白县",
+		"440981": "高州市",
+		"440982": "化州市",
+		"440983": "信宜市",
+		"440984": "其它区"
+	},
+	"441200": {
+		"441202": "端州区",
+		"441203": "鼎湖区",
+		"441223": "广宁县",
+		"441224": "怀集县",
+		"441225": "封开县",
+		"441226": "德庆县",
+		"441283": "高要区",
+		"441284": "四会市",
+		"441285": "其它区"
+	},
+	"441300": {
+		"441302": "惠城区",
+		"441303": "惠阳区",
+		"441322": "博罗县",
+		"441323": "惠东县",
+		"441324": "龙门县",
+		"441325": "其它区"
+	},
+	"441400": {
+		"441402": "梅江区",
+		"441421": "梅县区",
+		"441422": "大埔县",
+		"441423": "丰顺县",
+		"441424": "五华县",
+		"441426": "平远县",
+		"441427": "蕉岭县",
+		"441481": "兴宁市",
+		"441482": "其它区"
+	},
+	"441500": {
+		"441502": "城区",
+		"441521": "海丰县",
+		"441523": "陆河县",
+		"441581": "陆丰市",
+		"441582": "其它区"
+	},
+	"441600": {
+		"441602": "源城区",
+		"441621": "紫金县",
+		"441622": "龙川县",
+		"441623": "连平县",
+		"441624": "和平县",
+		"441625": "东源县",
+		"441626": "其它区"
+	},
+	"441700": {
+		"441702": "江城区",
+		"441721": "阳西县",
+		"441723": "阳东区",
+		"441781": "阳春市",
+		"441782": "其它区"
+	},
+	"441800": {
+		"441802": "清城区",
+		"441821": "佛冈县",
+		"441823": "阳山县",
+		"441825": "连山壮族瑶族自治县",
+		"441826": "连南瑶族自治县",
+		"441827": "清新区",
+		"441881": "英德市",
+		"441882": "连州市",
+		"441883": "其它区"
+	},
+	"441900": {
+		"441901003": "东城街道",
+		"441901004": "南城街道",
+		"441901005": "万江街道",
+		"441901006": "莞城街道",
+		"441901101": "石碣镇",
+		"441901102": "石龙镇",
+		"441901103": "茶山镇",
+		"441901104": "石排镇",
+		"441901105": "企石镇",
+		"441901106": "横沥镇",
+		"441901107": "桥头镇",
+		"441901108": "谢岗镇",
+		"441901109": "东坑镇",
+		"441901110": "常平镇",
+		"441901111": "寮步镇",
+		"441901112": "樟木头镇",
+		"441901113": "大朗镇",
+		"441901114": "黄江镇",
+		"441901115": "清溪镇",
+		"441901116": "塘厦镇",
+		"441901117": "凤岗镇",
+		"441901118": "大岭山镇",
+		"441901119": "长安镇",
+		"441901121": "虎门镇",
+		"441901122": "厚街镇",
+		"441901123": "沙田镇",
+		"441901124": "道滘镇",
+		"441901125": "洪梅镇",
+		"441901126": "麻涌镇",
+		"441901127": "望牛墩镇",
+		"441901128": "中堂镇",
+		"441901129": "高埗镇",
+		"441901401": "松山湖管委会",
+		"441901402": "虎门港管委会",
+		"441901403": "东莞生态园"
+	},
+	"442000": {
+		"442001001": "石岐区街道",
+		"442001002": "东区街道",
+		"442001003": "火炬开发区街道",
+		"442001004": "西区街道",
+		"442001005": "南区街道",
+		"442001006": "五桂山街道",
+		"442001100": "小榄镇",
+		"442001101": "黄圃镇",
+		"442001102": "民众镇",
+		"442001103": "东凤镇",
+		"442001104": "东升镇",
+		"442001105": "古镇镇",
+		"442001106": "沙溪镇",
+		"442001107": "坦洲镇",
+		"442001108": "港口镇",
+		"442001109": "三角镇",
+		"442001110": "横栏镇",
+		"442001111": "南头镇",
+		"442001112": "阜沙镇",
+		"442001113": "南朗镇",
+		"442001114": "三乡镇",
+		"442001115": "板芙镇",
+		"442001116": "大涌镇",
+		"442001117": "神湾镇"
+	},
+	"445100": {
+		"445102": "湘桥区",
+		"445121": "潮安区",
+		"445122": "饶平县",
+		"445185": "枫溪区",
+		"445186": "其它区"
+	},
+	"445200": {
+		"445202": "榕城区",
+		"445221": "揭东区",
+		"445222": "揭西县",
+		"445224": "惠来县",
+		"445281": "普宁市",
+		"445284": "东山区",
+		"445285": "其它区"
+	},
+	"445300": {
+		"445302": "云城区",
+		"445321": "新兴县",
+		"445322": "郁南县",
+		"445323": "云安区",
+		"445381": "罗定市",
+		"445382": "其它区"
+	},
+	"450000": {
+		"450100": "南宁市",
+		"450200": "柳州市",
+		"450300": "桂林市",
+		"450400": "梧州市",
+		"450500": "北海市",
+		"450600": "防城港市",
+		"450700": "钦州市",
+		"450800": "贵港市",
+		"450900": "玉林市",
+		"451000": "百色市",
+		"451100": "贺州市",
+		"451200": "河池市",
+		"451300": "来宾市",
+		"451400": "崇左市"
+	},
+	"450100": {
+		"450102": "兴宁区",
+		"450103": "青秀区",
+		"450105": "江南区",
+		"450107": "西乡塘区",
+		"450108": "良庆区",
+		"450109": "邕宁区",
+		"450122": "武鸣区",
+		"450123": "隆安县",
+		"450124": "马山县",
+		"450125": "上林县",
+		"450126": "宾阳县",
+		"450127": "横县",
+		"450128": "其它区"
+	},
+	"450200": {
+		"450202": "城中区",
+		"450203": "鱼峰区",
+		"450204": "柳南区",
+		"450205": "柳北区",
+		"450221": "柳江区",
+		"450222": "柳城县",
+		"450223": "鹿寨县",
+		"450224": "融安县",
+		"450225": "融水苗族自治县",
+		"450226": "三江侗族自治县",
+		"450227": "其它区"
+	},
+	"450300": {
+		"450302": "秀峰区",
+		"450303": "叠彩区",
+		"450304": "象山区",
+		"450305": "七星区",
+		"450311": "雁山区",
+		"450321": "阳朔县",
+		"450322": "临桂区",
+		"450323": "灵川县",
+		"450324": "全州县",
+		"450325": "兴安县",
+		"450326": "永福县",
+		"450327": "灌阳县",
+		"450328": "龙胜各族自治县",
+		"450329": "资源县",
+		"450330": "平乐县",
+		"450331": "荔浦县",
+		"450332": "恭城瑶族自治县",
+		"450333": "其它区"
+	},
+	"450400": {
+		"450403": "万秀区",
+		"450404": "蝶山区",
+		"450405": "长洲区",
+		"450406": "龙圩区",
+		"450421": "苍梧县",
+		"450422": "藤县",
+		"450423": "蒙山县",
+		"450481": "岑溪市",
+		"450482": "其它区"
+	},
+	"450500": {
+		"450502": "海城区",
+		"450503": "银海区",
+		"450512": "铁山港区",
+		"450521": "合浦县",
+		"450522": "其它区"
+	},
+	"450600": {
+		"450602": "港口区",
+		"450603": "防城区",
+		"450621": "上思县",
+		"450681": "东兴市",
+		"450682": "其它区"
+	},
+	"450700": {
+		"450702": "钦南区",
+		"450703": "钦北区",
+		"450721": "灵山县",
+		"450722": "浦北县",
+		"450723": "其它区"
+	},
+	"450800": {
+		"450802": "港北区",
+		"450803": "港南区",
+		"450804": "覃塘区",
+		"450821": "平南县",
+		"450881": "桂平市",
+		"450882": "其它区"
+	},
+	"450900": {
+		"450902": "玉州区",
+		"450903": "福绵区",
+		"450921": "容县",
+		"450922": "陆川县",
+		"450923": "博白县",
+		"450924": "兴业县",
+		"450981": "北流市",
+		"450982": "其它区"
+	},
+	"451000": {
+		"451002": "右江区",
+		"451021": "田阳县",
+		"451022": "田东县",
+		"451023": "平果县",
+		"451024": "德保县",
+		"451025": "靖西市",
+		"451026": "那坡县",
+		"451027": "凌云县",
+		"451028": "乐业县",
+		"451029": "田林县",
+		"451030": "西林县",
+		"451031": "隆林各族自治县",
+		"451032": "其它区"
+	},
+	"451100": {
+		"451102": "八步区",
+		"451103": "平桂区",
+		"451119": "平桂管理区",
+		"451121": "昭平县",
+		"451122": "钟山县",
+		"451123": "富川瑶族自治县",
+		"451124": "其它区"
+	},
+	"451200": {
+		"451202": "金城江区",
+		"451221": "南丹县",
+		"451222": "天峨县",
+		"451223": "凤山县",
+		"451224": "东兰县",
+		"451225": "罗城仫佬族自治县",
+		"451226": "环江毛南族自治县",
+		"451227": "巴马瑶族自治县",
+		"451228": "都安瑶族自治县",
+		"451229": "大化瑶族自治县",
+		"451281": "宜州市",
+		"451282": "其它区"
+	},
+	"451300": {
+		"451302": "兴宾区",
+		"451321": "忻城县",
+		"451322": "象州县",
+		"451323": "武宣县",
+		"451324": "金秀瑶族自治县",
+		"451381": "合山市",
+		"451382": "其它区"
+	},
+	"451400": {
+		"451402": "江州区",
+		"451421": "扶绥县",
+		"451422": "宁明县",
+		"451423": "龙州县",
+		"451424": "大新县",
+		"451425": "天等县",
+		"451481": "凭祥市",
+		"451482": "其它区"
+	},
+	"460000": {
+		"460100": "海口市",
+		"460200": "三亚市",
+		"460300": "三沙市",
+		"469001": "五指山市",
+		"469002": "琼海市",
+		"469003": "儋州市",
+		"469005": "文昌市",
+		"469006": "万宁市",
+		"469007": "东方市",
+		"469025": "定安县",
+		"469026": "屯昌县",
+		"469027": "澄迈县",
+		"469028": "临高县",
+		"469030": "白沙黎族自治县",
+		"469031": "昌江黎族自治县",
+		"469033": "乐东黎族自治县",
+		"469034": "陵水黎族自治县",
+		"469035": "保亭黎族苗族自治县",
+		"469036": "琼中黎族苗族自治县",
+		"469037": "西沙群岛",
+		"469038": "南沙群岛",
+		"469039": "中沙群岛的岛礁及其海域"
+	},
+	"460100": {
+		"460105": "秀英区",
+		"460106": "龙华区",
+		"460107": "琼山区",
+		"460108": "美兰区",
+		"460109": "其它区"
+	},
+	"460200": {
+		"460202": "海棠区",
+		"460203": "吉阳区",
+		"460204": "天涯区",
+		"460205": "崖州区"
+	},
+	"460300": {
+		"460321": "西沙群岛",
+		"460322": "南沙群岛",
+		"460323": "中沙群岛的岛礁及其海域"
+	},
+	"469001": {
+		"469001100": "通什镇",
+		"469001101": "南圣镇",
+		"469001102": "毛阳镇",
+		"469001103": "番阳镇",
+		"469001200": "畅好乡",
+		"469001201": "毛道乡",
+		"469001202": "水满乡",
+		"469001400": "国营畅好农场"
+	},
+	"469002": {
+		"469002100": "嘉积镇",
+		"469002101": "万泉镇",
+		"469002102": "石壁镇",
+		"469002103": "中原镇",
+		"469002104": "博鳌镇",
+		"469002105": "阳江镇",
+		"469002106": "龙江镇",
+		"469002107": "潭门镇",
+		"469002108": "塔洋镇",
+		"469002109": "长坡镇",
+		"469002110": "大路镇",
+		"469002111": "会山镇",
+		"469002400": "国营东太农场",
+		"469002402": "国营东红农场",
+		"469002403": "国营东升农场",
+		"469002500": "彬村山华侨农场"
+	},
+	"469003": {
+		"469003100": "那大镇",
+		"469003101": "和庆镇",
+		"469003102": "南丰镇",
+		"469003103": "大成镇",
+		"469003104": "雅星镇",
+		"469003105": "兰洋镇",
+		"469003106": "光村镇",
+		"469003107": "木棠镇",
+		"469003108": "海头镇",
+		"469003109": "峨蔓镇",
+		"469003110": "三都镇",
+		"469003111": "王五镇",
+		"469003112": "白马井镇",
+		"469003113": "中和镇",
+		"469003114": "排浦镇",
+		"469003115": "东成镇",
+		"469003116": "新州镇",
+		"469003400": "国营西培农场",
+		"469003404": "国营西联农场",
+		"469003405": "国营蓝洋农场",
+		"469003407": "国营八一农场",
+		"469003499": "洋浦经济开发区",
+		"469003500": "华南热作学院"
+	},
+	"469005": {
+		"469005100": "文城镇",
+		"469005101": "重兴镇",
+		"469005102": "蓬莱镇",
+		"469005103": "会文镇",
+		"469005104": "东路镇",
+		"469005105": "潭牛镇",
+		"469005106": "东阁镇",
+		"469005107": "文教镇",
+		"469005108": "东郊镇",
+		"469005109": "龙楼镇",
+		"469005110": "昌洒镇",
+		"469005111": "翁田镇",
+		"469005112": "抱罗镇",
+		"469005113": "冯坡镇",
+		"469005114": "锦山镇",
+		"469005115": "铺前镇",
+		"469005116": "公坡镇",
+		"469005400": "国营东路农场",
+		"469005401": "国营南阳农场",
+		"469005402": "国营罗豆农场"
+	},
+	"469006": {
+		"469006100": "万城镇",
+		"469006101": "龙滚镇",
+		"469006102": "和乐镇",
+		"469006103": "后安镇",
+		"469006104": "大茂镇",
+		"469006105": "东澳镇",
+		"469006106": "礼纪镇",
+		"469006107": "长丰镇",
+		"469006108": "山根镇",
+		"469006109": "北大镇",
+		"469006110": "南桥镇",
+		"469006111": "三更罗镇",
+		"469006400": "国营东兴农场",
+		"469006401": "国营东和农场",
+		"469006404": "国营新中农场",
+		"469006500": "兴隆华侨农场",
+		"469006501": "地方国营六连林场"
+	},
+	"469007": {
+		"469007100": "八所镇",
+		"469007101": "东河镇",
+		"469007102": "大田镇",
+		"469007103": "感城镇",
+		"469007104": "板桥镇",
+		"469007105": "三家镇",
+		"469007106": "四更镇",
+		"469007107": "新龙镇",
+		"469007200": "天安乡",
+		"469007201": "江边乡",
+		"469007400": "国营广坝农场",
+		"469007500": "东方华侨农场"
+	},
+	"469025": {
+		"469021100": "定城镇",
+		"469021101": "新竹镇",
+		"469021102": "龙湖镇",
+		"469021103": "黄竹镇",
+		"469021104": "雷鸣镇",
+		"469021105": "龙门镇",
+		"469021106": "龙河镇",
+		"469021107": "岭口镇",
+		"469021108": "翰林镇",
+		"469021109": "富文镇",
+		"469021400": "国营中瑞农场",
+		"469021401": "国营南海农场",
+		"469021402": "国营金鸡岭农场"
+	},
+	"469026": {
+		"469022100": "屯城镇",
+		"469022101": "新兴镇",
+		"469022102": "枫木镇",
+		"469022103": "乌坡镇",
+		"469022104": "南吕镇",
+		"469022105": "南坤镇",
+		"469022106": "坡心镇",
+		"469022107": "西昌镇",
+		"469022400": "国营中建农场",
+		"469022401": "国营中坤农场"
+	},
+	"469027": {
+		"469023100": "金江镇",
+		"469023101": "老城镇",
+		"469023102": "瑞溪镇",
+		"469023103": "永发镇",
+		"469023104": "加乐镇",
+		"469023105": "文儒镇",
+		"469023106": "中兴镇",
+		"469023107": "仁兴镇",
+		"469023108": "福山镇",
+		"469023109": "桥头镇",
+		"469023110": "大丰镇",
+		"469023400": "国营红光农场",
+		"469023401": "国营红岗农场",
+		"469023402": "国营西达农场",
+		"469023403": "国营昆仑农场",
+		"469023404": "国营和岭农场",
+		"469023405": "国营金安农场"
+	},
+	"469028": {
+		"469024100": "临城镇",
+		"469024101": "波莲镇",
+		"469024102": "东英镇",
+		"469024103": "博厚镇",
+		"469024104": "皇桐镇",
+		"469024105": "多文镇",
+		"469024106": "和舍镇",
+		"469024107": "南宝镇",
+		"469024108": "新盈镇",
+		"469024109": "调楼镇",
+		"469024400": "国营红华农场",
+		"469024401": "国营加来农场"
+	},
+	"469030": {
+		"469025100": "牙叉镇",
+		"469025101": "七坊镇",
+		"469025102": "邦溪镇",
+		"469025103": "打安镇",
+		"469025200": "细水乡",
+		"469025201": "元门乡",
+		"469025202": "南开乡",
+		"469025203": "阜龙乡",
+		"469025204": "青松乡",
+		"469025205": "金波乡",
+		"469025206": "荣邦乡",
+		"469025401": "国营白沙农场",
+		"469025404": "国营龙江农场",
+		"469025408": "国营邦溪农场"
+	},
+	"469031": {
+		"469026100": "石碌镇",
+		"469026101": "叉河镇",
+		"469026102": "十月田镇",
+		"469026103": "乌烈镇",
+		"469026104": "昌化镇",
+		"469026105": "海尾镇",
+		"469026106": "七叉镇",
+		"469026200": "王下乡",
+		"469026401": "国营红林农场",
+		"469026500": "国营霸王岭林场",
+		"469026501": "海南矿业联合有限公司"
+	},
+	"469033": {
+		"469027100": "抱由镇",
+		"469027101": "万冲镇",
+		"469027102": "大安镇",
+		"469027103": "志仲镇",
+		"469027104": "千家镇",
+		"469027105": "九所镇",
+		"469027106": "利国镇",
+		"469027107": "黄流镇",
+		"469027108": "佛罗镇",
+		"469027109": "尖峰镇",
+		"469027110": "莺歌海镇",
+		"469027401": "国营山荣农场",
+		"469027402": "国营乐光农场",
+		"469027405": "国营保国农场",
+		"469027500": "国营尖峰岭林业公司",
+		"469027501": "国营莺歌海盐场"
+	},
+	"469034": {
+		"469028100": "椰林镇",
+		"469028101": "光坡镇",
+		"469028102": "三才镇",
+		"469028103": "英州镇",
+		"469028104": "隆广镇",
+		"469028105": "文罗镇",
+		"469028106": "本号镇",
+		"469028107": "新村镇",
+		"469028108": "黎安镇",
+		"469028200": "提蒙乡",
+		"469028201": "群英乡",
+		"469028400": "国营岭门农场",
+		"469028401": "国营南平农场",
+		"469028500": "国营吊罗山林业公司"
+	},
+	"469035": {
+		"469029100": "保城镇",
+		"469029101": "什玲镇",
+		"469029102": "加茂镇",
+		"469029103": "响水镇",
+		"469029104": "新政镇",
+		"469029105": "三道镇",
+		"469029200": "六弓乡",
+		"469029201": "南林乡",
+		"469029202": "毛感乡",
+		"469029401": "国营新星农场",
+		"469029402": "海南保亭热带作物研究所",
+		"469029403": "国营金江农场",
+		"469029405": "国营三道农场"
+	},
+	"469036": {
+		"469030100": "营根镇",
+		"469030101": "湾岭镇",
+		"469030102": "黎母山镇",
+		"469030103": "和平镇",
+		"469030104": "长征镇",
+		"469030105": "红毛镇",
+		"469030106": "中平镇",
+		"469030200": "吊罗山乡",
+		"469030201": "上安乡",
+		"469030202": "什运乡",
+		"469030402": "国营阳江农场",
+		"469030403": "国营乌石农场",
+		"469030406": "国营加钗农场",
+		"469030407": "国营长征农场",
+		"469030500": "国营黎母山林业公司"
+	},
+	"500000": {
+		"500100": "重庆市"
+	},
+	"500100": {
+		"500101": "万州区",
+		"500102": "涪陵区",
+		"500103": "渝中区",
+		"500104": "大渡口区",
+		"500105": "江北区",
+		"500106": "沙坪坝区",
+		"500107": "九龙坡区",
+		"500108": "南岸区",
+		"500109": "北碚区",
+		"500110": "万盛区",
+		"500111": "双桥区",
+		"500112": "渝北区",
+		"500113": "巴南区",
+		"500114": "黔江区",
+		"500115": "长寿区",
+		"500222": "綦江区",
+		"500223": "潼南区",
+		"500224": "铜梁区",
+		"500225": "大足区",
+		"500226": "荣昌区",
+		"500227": "璧山区",
+		"500228": "梁平县",
+		"500229": "城口县",
+		"500230": "丰都县",
+		"500231": "垫江县",
+		"500232": "武隆县",
+		"500233": "忠县",
+		"500234": "开州区",
+		"500235": "云阳县",
+		"500236": "奉节县",
+		"500237": "巫山县",
+		"500238": "巫溪县",
+		"500240": "石柱土家族自治县",
+		"500241": "秀山土家族苗族自治县",
+		"500242": "酉阳土家族苗族自治县",
+		"500243": "彭水苗族土家族自治县",
+		"500381": "江津区",
+		"500382": "合川区",
+		"500383": "永川区",
+		"500384": "南川区",
+		"500385": "其它区"
+	},
+	"510000": {
+		"510100": "成都市",
+		"510300": "自贡市",
+		"510400": "攀枝花市",
+		"510500": "泸州市",
+		"510600": "德阳市",
+		"510700": "绵阳市",
+		"510800": "广元市",
+		"510900": "遂宁市",
+		"511000": "内江市",
+		"511100": "乐山市",
+		"511300": "南充市",
+		"511400": "眉山市",
+		"511500": "宜宾市",
+		"511600": "广安市",
+		"511700": "达州市",
+		"511800": "雅安市",
+		"511900": "巴中市",
+		"512000": "资阳市",
+		"513200": "阿坝藏族羌族自治州",
+		"513300": "甘孜藏族自治州",
+		"513400": "凉山彝族自治州"
+	},
+	"510100": {
+		"510104": "锦江区",
+		"510105": "青羊区",
+		"510106": "金牛区",
+		"510107": "武侯区",
+		"510108": "成华区",
+		"510112": "龙泉驿区",
+		"510113": "青白江区",
+		"510114": "新都区",
+		"510115": "温江区",
+		"510121": "金堂县",
+		"510122": "双流区",
+		"510124": "郫县",
+		"510129": "大邑县",
+		"510131": "蒲江县",
+		"510132": "新津县",
+		"510181": "都江堰市",
+		"510182": "彭州市",
+		"510183": "邛崃市",
+		"510184": "崇州市",
+		"510185": "其它区",
+		"510190": "高新区",
+		"512081": "简阳市"
+	},
+	"510300": {
+		"510302": "自流井区",
+		"510303": "贡井区",
+		"510304": "大安区",
+		"510311": "沿滩区",
+		"510321": "荣县",
+		"510322": "富顺县",
+		"510323": "其它区"
+	},
+	"510400": {
+		"510402": "东区",
+		"510403": "西区",
+		"510411": "仁和区",
+		"510421": "米易县",
+		"510422": "盐边县",
+		"510423": "其它区"
+	},
+	"510500": {
+		"510502": "江阳区",
+		"510503": "纳溪区",
+		"510504": "龙马潭区",
+		"510521": "泸县",
+		"510522": "合江县",
+		"510524": "叙永县",
+		"510525": "古蔺县",
+		"510526": "其它区"
+	},
+	"510600": {
+		"510603": "旌阳区",
+		"510623": "中江县",
+		"510626": "罗江县",
+		"510681": "广汉市",
+		"510682": "什邡市",
+		"510683": "绵竹市",
+		"510684": "其它区"
+	},
+	"510700": {
+		"510703": "涪城区",
+		"510704": "游仙区",
+		"510722": "三台县",
+		"510723": "盐亭县",
+		"510724": "安州区",
+		"510725": "梓潼县",
+		"510726": "北川羌族自治县",
+		"510727": "平武县",
+		"510751": "高新区",
+		"510781": "江油市",
+		"510782": "其它区"
+	},
+	"510800": {
+		"510802": "利州区",
+		"510811": "昭化区",
+		"510812": "朝天区",
+		"510821": "旺苍县",
+		"510822": "青川县",
+		"510823": "剑阁县",
+		"510824": "苍溪县",
+		"510825": "其它区"
+	},
+	"510900": {
+		"510903": "船山区",
+		"510904": "安居区",
+		"510921": "蓬溪县",
+		"510922": "射洪县",
+		"510923": "大英县",
+		"510924": "其它区"
+	},
+	"511000": {
+		"511002": "市中区",
+		"511011": "东兴区",
+		"511024": "威远县",
+		"511025": "资中县",
+		"511028": "隆昌县",
+		"511029": "其它区"
+	},
+	"511100": {
+		"511102": "市中区",
+		"511111": "沙湾区",
+		"511112": "五通桥区",
+		"511113": "金口河区",
+		"511123": "犍为县",
+		"511124": "井研县",
+		"511126": "夹江县",
+		"511129": "沐川县",
+		"511132": "峨边彝族自治县",
+		"511133": "马边彝族自治县",
+		"511181": "峨眉山市",
+		"511182": "其它区"
+	},
+	"511300": {
+		"511302": "顺庆区",
+		"511303": "高坪区",
+		"511304": "嘉陵区",
+		"511321": "南部县",
+		"511322": "营山县",
+		"511323": "蓬安县",
+		"511324": "仪陇县",
+		"511325": "西充县",
+		"511381": "阆中市",
+		"511382": "其它区"
+	},
+	"511400": {
+		"511402": "东坡区",
+		"511421": "仁寿县",
+		"511422": "彭山区",
+		"511423": "洪雅县",
+		"511424": "丹棱县",
+		"511425": "青神县",
+		"511426": "其它区"
+	},
+	"511500": {
+		"511502": "翠屏区",
+		"511521": "宜宾县",
+		"511522": "南溪区",
+		"511523": "江安县",
+		"511524": "长宁县",
+		"511525": "高县",
+		"511526": "珙县",
+		"511527": "筠连县",
+		"511528": "兴文县",
+		"511529": "屏山县",
+		"511530": "其它区"
+	},
+	"511600": {
+		"511602": "广安区",
+		"511603": "前锋区",
+		"511621": "岳池县",
+		"511622": "武胜县",
+		"511623": "邻水县",
+		"511681": "华蓥市",
+		"511682": "市辖区",
+		"511683": "其它区"
+	},
+	"511700": {
+		"511702": "通川区",
+		"511721": "达川区",
+		"511722": "宣汉县",
+		"511723": "开江县",
+		"511724": "大竹县",
+		"511725": "渠县",
+		"511781": "万源市",
+		"511782": "其它区"
+	},
+	"511800": {
+		"511802": "雨城区",
+		"511821": "名山区",
+		"511822": "荥经县",
+		"511823": "汉源县",
+		"511824": "石棉县",
+		"511825": "天全县",
+		"511826": "芦山县",
+		"511827": "宝兴县",
+		"511828": "其它区"
+	},
+	"511900": {
+		"511902": "巴州区",
+		"511903": "恩阳区",
+		"511921": "通江县",
+		"511922": "南江县",
+		"511923": "平昌县",
+		"511924": "其它区"
+	},
+	"512000": {
+		"512002": "雁江区",
+		"512021": "安岳县",
+		"512022": "乐至县",
+		"512082": "其它区"
+	},
+	"513200": {
+		"513221": "汶川县",
+		"513222": "理县",
+		"513223": "茂县",
+		"513224": "松潘县",
+		"513225": "九寨沟县",
+		"513226": "金川县",
+		"513227": "小金县",
+		"513228": "黑水县",
+		"513229": "马尔康市",
+		"513230": "壤塘县",
+		"513231": "阿坝县",
+		"513232": "若尔盖县",
+		"513233": "红原县",
+		"513234": "其它区"
+	},
+	"513300": {
+		"513321": "康定市",
+		"513322": "泸定县",
+		"513323": "丹巴县",
+		"513324": "九龙县",
+		"513325": "雅江县",
+		"513326": "道孚县",
+		"513327": "炉霍县",
+		"513328": "甘孜县",
+		"513329": "新龙县",
+		"513330": "德格县",
+		"513331": "白玉县",
+		"513332": "石渠县",
+		"513333": "色达县",
+		"513334": "理塘县",
+		"513335": "巴塘县",
+		"513336": "乡城县",
+		"513337": "稻城县",
+		"513338": "得荣县",
+		"513339": "其它区"
+	},
+	"513400": {
+		"513401": "西昌市",
+		"513422": "木里藏族自治县",
+		"513423": "盐源县",
+		"513424": "德昌县",
+		"513425": "会理县",
+		"513426": "会东县",
+		"513427": "宁南县",
+		"513428": "普格县",
+		"513429": "布拖县",
+		"513430": "金阳县",
+		"513431": "昭觉县",
+		"513432": "喜德县",
+		"513433": "冕宁县",
+		"513434": "越西县",
+		"513435": "甘洛县",
+		"513436": "美姑县",
+		"513437": "雷波县",
+		"513438": "其它区"
+	},
+	"520000": {
+		"520100": "贵阳市",
+		"520200": "六盘水市",
+		"520300": "遵义市",
+		"520400": "安顺市",
+		"522200": "铜仁市",
+		"522300": "黔西南布依族苗族自治州",
+		"522400": "毕节市",
+		"522600": "黔东南苗族侗族自治州",
+		"522700": "黔南布依族苗族自治州"
+	},
+	"520100": {
+		"520102": "南明区",
+		"520103": "云岩区",
+		"520111": "花溪区",
+		"520112": "乌当区",
+		"520113": "白云区",
+		"520114": "小河区",
+		"520121": "开阳县",
+		"520122": "息烽县",
+		"520123": "修文县",
+		"520151": "观山湖区",
+		"520181": "清镇市",
+		"520182": "其它区"
+	},
+	"520200": {
+		"520201": "钟山区",
+		"520203": "六枝特区",
+		"520221": "水城县",
+		"520222": "盘县",
+		"520223": "其它区"
+	},
+	"520300": {
+		"520302": "红花岗区",
+		"520303": "汇川区",
+		"520321": "播州区",
+		"520322": "桐梓县",
+		"520323": "绥阳县",
+		"520324": "正安县",
+		"520325": "道真仡佬族苗族自治县",
+		"520326": "务川仡佬族苗族自治县",
+		"520327": "凤冈县",
+		"520328": "湄潭县",
+		"520329": "余庆县",
+		"520330": "习水县",
+		"520381": "赤水市",
+		"520382": "仁怀市",
+		"520383": "其它区"
+	},
+	"520400": {
+		"520402": "西秀区",
+		"520421": "平坝区",
+		"520422": "普定县",
+		"520423": "镇宁布依族苗族自治县",
+		"520424": "关岭布依族苗族自治县",
+		"520425": "紫云苗族布依族自治县",
+		"520426": "其它区"
+	},
+	"522200": {
+		"522201": "碧江区",
+		"522222": "江口县",
+		"522223": "玉屏侗族自治县",
+		"522224": "石阡县",
+		"522225": "思南县",
+		"522226": "印江土家族苗族自治县",
+		"522227": "德江县",
+		"522228": "沿河土家族自治县",
+		"522229": "松桃苗族自治县",
+		"522230": "万山区",
+		"522231": "其它区"
+	},
+	"522300": {
+		"522301": "兴义市",
+		"522322": "兴仁县",
+		"522323": "普安县",
+		"522324": "晴隆县",
+		"522325": "贞丰县",
+		"522326": "望谟县",
+		"522327": "册亨县",
+		"522328": "安龙县",
+		"522329": "其它区"
+	},
+	"522400": {
+		"522401": "七星关区",
+		"522422": "大方县",
+		"522423": "黔西县",
+		"522424": "金沙县",
+		"522425": "织金县",
+		"522426": "纳雍县",
+		"522427": "威宁彝族回族苗族自治县",
+		"522428": "赫章县",
+		"522429": "其它区"
+	},
+	"522600": {
+		"522601": "凯里市",
+		"522622": "黄平县",
+		"522623": "施秉县",
+		"522624": "三穗县",
+		"522625": "镇远县",
+		"522626": "岑巩县",
+		"522627": "天柱县",
+		"522628": "锦屏县",
+		"522629": "剑河县",
+		"522630": "台江县",
+		"522631": "黎平县",
+		"522632": "榕江县",
+		"522633": "从江县",
+		"522634": "雷山县",
+		"522635": "麻江县",
+		"522636": "丹寨县",
+		"522637": "其它区"
+	},
+	"522700": {
+		"522701": "都匀市",
+		"522702": "福泉市",
+		"522722": "荔波县",
+		"522723": "贵定县",
+		"522725": "瓮安县",
+		"522726": "独山县",
+		"522727": "平塘县",
+		"522728": "罗甸县",
+		"522729": "长顺县",
+		"522730": "龙里县",
+		"522731": "惠水县",
+		"522732": "三都水族自治县",
+		"522733": "其它区"
+	},
+	"530000": {
+		"530100": "昆明市",
+		"530300": "曲靖市",
+		"530400": "玉溪市",
+		"530500": "保山市",
+		"530600": "昭通市",
+		"530700": "丽江市",
+		"530800": "普洱市",
+		"530900": "临沧市",
+		"532300": "楚雄彝族自治州",
+		"532500": "红河哈尼族彝族自治州",
+		"532600": "文山壮族苗族自治州",
+		"532800": "西双版纳傣族自治州",
+		"532900": "大理白族自治州",
+		"533100": "德宏傣族景颇族自治州",
+		"533300": "怒江傈僳族自治州",
+		"533400": "迪庆藏族自治州"
+	},
+	"530100": {
+		"530102": "五华区",
+		"530103": "盘龙区",
+		"530111": "官渡区",
+		"530112": "西山区",
+		"530113": "东川区",
+		"530121": "呈贡区",
+		"530122": "晋宁县",
+		"530124": "富民县",
+		"530125": "宜良县",
+		"530126": "石林彝族自治县",
+		"530127": "嵩明县",
+		"530128": "禄劝彝族苗族自治县",
+		"530129": "寻甸回族彝族自治县",
+		"530181": "安宁市",
+		"530182": "其它区"
+	},
+	"530300": {
+		"530302": "麒麟区",
+		"530321": "马龙县",
+		"530322": "陆良县",
+		"530323": "师宗县",
+		"530324": "罗平县",
+		"530325": "富源县",
+		"530326": "会泽县",
+		"530328": "沾益区",
+		"530381": "宣威市",
+		"530382": "其它区"
+	},
+	"530400": {
+		"530402": "红塔区",
+		"530421": "江川区",
+		"530422": "澄江县",
+		"530423": "通海县",
+		"530424": "华宁县",
+		"530425": "易门县",
+		"530426": "峨山彝族自治县",
+		"530427": "新平彝族傣族自治县",
+		"530428": "元江哈尼族彝族傣族自治县",
+		"530429": "其它区"
+	},
+	"530500": {
+		"530502": "隆阳区",
+		"530521": "施甸县",
+		"530522": "腾冲市",
+		"530523": "龙陵县",
+		"530524": "昌宁县",
+		"530525": "其它区"
+	},
+	"530600": {
+		"530602": "昭阳区",
+		"530621": "鲁甸县",
+		"530622": "巧家县",
+		"530623": "盐津县",
+		"530624": "大关县",
+		"530625": "永善县",
+		"530626": "绥江县",
+		"530627": "镇雄县",
+		"530628": "彝良县",
+		"530629": "威信县",
+		"530630": "水富县",
+		"530631": "其它区"
+	},
+	"530700": {
+		"530702": "古城区",
+		"530721": "玉龙纳西族自治县",
+		"530722": "永胜县",
+		"530723": "华坪县",
+		"530724": "宁蒗彝族自治县",
+		"530725": "其它区"
+	},
+	"530800": {
+		"530802": "思茅区",
+		"530821": "宁洱哈尼族彝族自治县",
+		"530822": "墨江哈尼族自治县",
+		"530823": "景东彝族自治县",
+		"530824": "景谷傣族彝族自治县",
+		"530825": "镇沅彝族哈尼族拉祜族自治县",
+		"530826": "江城哈尼族彝族自治县",
+		"530827": "孟连傣族拉祜族佤族自治县",
+		"530828": "澜沧拉祜族自治县",
+		"530829": "西盟佤族自治县",
+		"530830": "其它区"
+	},
+	"530900": {
+		"530902": "临翔区",
+		"530921": "凤庆县",
+		"530922": "云县",
+		"530923": "永德县",
+		"530924": "镇康县",
+		"530925": "双江拉祜族佤族布朗族傣族自治县",
+		"530926": "耿马傣族佤族自治县",
+		"530927": "沧源佤族自治县",
+		"530928": "其它区"
+	},
+	"532300": {
+		"532301": "楚雄市",
+		"532322": "双柏县",
+		"532323": "牟定县",
+		"532324": "南华县",
+		"532325": "姚安县",
+		"532326": "大姚县",
+		"532327": "永仁县",
+		"532328": "元谋县",
+		"532329": "武定县",
+		"532331": "禄丰县",
+		"532332": "其它区"
+	},
+	"532500": {
+		"532501": "个旧市",
+		"532502": "开远市",
+		"532522": "蒙自市",
+		"532523": "屏边苗族自治县",
+		"532524": "建水县",
+		"532525": "石屏县",
+		"532526": "弥勒市",
+		"532527": "泸西县",
+		"532528": "元阳县",
+		"532529": "红河县",
+		"532530": "金平苗族瑶族傣族自治县",
+		"532531": "绿春县",
+		"532532": "河口瑶族自治县",
+		"532533": "其它区"
+	},
+	"532600": {
+		"532621": "文山市",
+		"532622": "砚山县",
+		"532623": "西畴县",
+		"532624": "麻栗坡县",
+		"532625": "马关县",
+		"532626": "丘北县",
+		"532627": "广南县",
+		"532628": "富宁县",
+		"532629": "其它区"
+	},
+	"532800": {
+		"532801": "景洪市",
+		"532822": "勐海县",
+		"532823": "勐腊县",
+		"532824": "其它区"
+	},
+	"532900": {
+		"532901": "大理市",
+		"532922": "漾濞彝族自治县",
+		"532923": "祥云县",
+		"532924": "宾川县",
+		"532925": "弥渡县",
+		"532926": "南涧彝族自治县",
+		"532927": "巍山彝族回族自治县",
+		"532928": "永平县",
+		"532929": "云龙县",
+		"532930": "洱源县",
+		"532931": "剑川县",
+		"532932": "鹤庆县",
+		"532933": "其它区"
+	},
+	"533100": {
+		"533102": "瑞丽市",
+		"533103": "芒市",
+		"533122": "梁河县",
+		"533123": "盈江县",
+		"533124": "陇川县",
+		"533125": "其它区"
+	},
+	"533300": {
+		"533321": "泸水市",
+		"533323": "福贡县",
+		"533324": "贡山独龙族怒族自治县",
+		"533325": "兰坪白族普米族自治县",
+		"533326": "其它区"
+	},
+	"533400": {
+		"533421": "香格里拉市",
+		"533422": "德钦县",
+		"533423": "维西傈僳族自治县",
+		"533424": "其它区"
+	},
+	"540000": {
+		"540100": "拉萨市",
+		"542100": "昌都市",
+		"542200": "山南市",
+		"542300": "日喀则市",
+		"542400": "那曲地区",
+		"542500": "阿里地区",
+		"542600": "林芝市"
+	},
+	"540100": {
+		"540102": "城关区",
+		"540121": "林周县",
+		"540122": "当雄县",
+		"540123": "尼木县",
+		"540124": "曲水县",
+		"540125": "堆龙德庆区",
+		"540126": "达孜县",
+		"540127": "墨竹工卡县",
+		"540128": "其它区"
+	},
+	"542100": {
+		"542121": "卡若区",
+		"542122": "江达县",
+		"542123": "贡觉县",
+		"542124": "类乌齐县",
+		"542125": "丁青县",
+		"542126": "察雅县",
+		"542127": "八宿县",
+		"542128": "左贡县",
+		"542129": "芒康县",
+		"542132": "洛隆县",
+		"542133": "边坝县",
+		"542134": "其它区"
+	},
+	"542200": {
+		"542221": "乃东区",
+		"542222": "扎囊县",
+		"542223": "贡嘎县",
+		"542224": "桑日县",
+		"542225": "琼结县",
+		"542226": "曲松县",
+		"542227": "措美县",
+		"542228": "洛扎县",
+		"542229": "加查县",
+		"542231": "隆子县",
+		"542232": "错那县",
+		"542233": "浪卡子县",
+		"542234": "其它区"
+	},
+	"542300": {
+		"542301": "桑珠孜区",
+		"542322": "南木林县",
+		"542323": "江孜县",
+		"542324": "定日县",
+		"542325": "萨迦县",
+		"542326": "拉孜县",
+		"542327": "昂仁县",
+		"542328": "谢通门县",
+		"542329": "白朗县",
+		"542330": "仁布县",
+		"542331": "康马县",
+		"542332": "定结县",
+		"542333": "仲巴县",
+		"542334": "亚东县",
+		"542335": "吉隆县",
+		"542336": "聂拉木县",
+		"542337": "萨嘎县",
+		"542338": "岗巴县",
+		"542339": "其它区"
+	},
+	"542400": {
+		"542421": "那曲县",
+		"542422": "嘉黎县",
+		"542423": "比如县",
+		"542424": "聂荣县",
+		"542425": "安多县",
+		"542426": "申扎县",
+		"542427": "索县",
+		"542428": "班戈县",
+		"542429": "巴青县",
+		"542430": "尼玛县",
+		"542431": "其它区",
+		"542432": "双湖县"
+	},
+	"542500": {
+		"542521": "普兰县",
+		"542522": "札达县",
+		"542523": "噶尔县",
+		"542524": "日土县",
+		"542525": "革吉县",
+		"542526": "改则县",
+		"542527": "措勤县",
+		"542528": "其它区"
+	},
+	"542600": {
+		"542621": "巴宜区",
+		"542622": "工布江达县",
+		"542623": "米林县",
+		"542624": "墨脱县",
+		"542625": "波密县",
+		"542626": "察隅县",
+		"542627": "朗县",
+		"542628": "其它区"
+	},
+	"610000": {
+		"610100": "西安市",
+		"610200": "铜川市",
+		"610300": "宝鸡市",
+		"610400": "咸阳市",
+		"610500": "渭南市",
+		"610600": "延安市",
+		"610700": "汉中市",
+		"610800": "榆林市",
+		"610900": "安康市",
+		"611000": "商洛市"
+	},
+	"610100": {
+		"610102": "新城区",
+		"610103": "碑林区",
+		"610104": "莲湖区",
+		"610111": "灞桥区",
+		"610112": "未央区",
+		"610113": "雁塔区",
+		"610114": "阎良区",
+		"610115": "临潼区",
+		"610116": "长安区",
+		"610122": "蓝田县",
+		"610124": "周至县",
+		"610125": "户县",
+		"610126": "高陵区",
+		"610127": "其它区"
+	},
+	"610200": {
+		"610202": "王益区",
+		"610203": "印台区",
+		"610204": "耀州区",
+		"610222": "宜君县",
+		"610223": "其它区"
+	},
+	"610300": {
+		"610302": "渭滨区",
+		"610303": "金台区",
+		"610304": "陈仓区",
+		"610322": "凤翔县",
+		"610323": "岐山县",
+		"610324": "扶风县",
+		"610326": "眉县",
+		"610327": "陇县",
+		"610328": "千阳县",
+		"610329": "麟游县",
+		"610330": "凤县",
+		"610331": "太白县",
+		"610332": "其它区"
+	},
+	"610400": {
+		"610402": "秦都区",
+		"610403": "杨陵区",
+		"610404": "渭城区",
+		"610422": "三原县",
+		"610423": "泾阳县",
+		"610424": "乾县",
+		"610425": "礼泉县",
+		"610426": "永寿县",
+		"610427": "彬县",
+		"610428": "长武县",
+		"610429": "旬邑县",
+		"610430": "淳化县",
+		"610431": "武功县",
+		"610481": "兴平市",
+		"610482": "其它区"
+	},
+	"610500": {
+		"610502": "临渭区",
+		"610521": "华州区",
+		"610522": "潼关县",
+		"610523": "大荔县",
+		"610524": "合阳县",
+		"610525": "澄城县",
+		"610526": "蒲城县",
+		"610527": "白水县",
+		"610528": "富平县",
+		"610581": "韩城市",
+		"610582": "华阴市",
+		"610583": "其它区"
+	},
+	"610600": {
+		"610602": "宝塔区",
+		"610621": "延长县",
+		"610622": "延川县",
+		"610623": "子长县",
+		"610624": "安塞区",
+		"610625": "志丹县",
+		"610626": "吴起县",
+		"610627": "甘泉县",
+		"610628": "富县",
+		"610629": "洛川县",
+		"610630": "宜川县",
+		"610631": "黄龙县",
+		"610632": "黄陵县",
+		"610633": "其它区"
+	},
+	"610700": {
+		"610702": "汉台区",
+		"610721": "南郑县",
+		"610722": "城固县",
+		"610723": "洋县",
+		"610724": "西乡县",
+		"610725": "勉县",
+		"610726": "宁强县",
+		"610727": "略阳县",
+		"610728": "镇巴县",
+		"610729": "留坝县",
+		"610730": "佛坪县",
+		"610731": "其它区"
+	},
+	"610800": {
+		"610802": "榆阳区",
+		"610821": "神木县",
+		"610822": "府谷县",
+		"610823": "横山区",
+		"610824": "靖边县",
+		"610825": "定边县",
+		"610826": "绥德县",
+		"610827": "米脂县",
+		"610828": "佳县",
+		"610829": "吴堡县",
+		"610830": "清涧县",
+		"610831": "子洲县",
+		"610832": "其它区"
+	},
+	"610900": {
+		"610902": "汉滨区",
+		"610921": "汉阴县",
+		"610922": "石泉县",
+		"610923": "宁陕县",
+		"610924": "紫阳县",
+		"610925": "岚皋县",
+		"610926": "平利县",
+		"610927": "镇坪县",
+		"610928": "旬阳县",
+		"610929": "白河县",
+		"610930": "其它区"
+	},
+	"611000": {
+		"611002": "商州区",
+		"611021": "洛南县",
+		"611022": "丹凤县",
+		"611023": "商南县",
+		"611024": "山阳县",
+		"611025": "镇安县",
+		"611026": "柞水县",
+		"611027": "其它区"
+	},
+	"620000": {
+		"620100": "兰州市",
+		"620200": "嘉峪关市",
+		"620300": "金昌市",
+		"620400": "白银市",
+		"620500": "天水市",
+		"620600": "武威市",
+		"620700": "张掖市",
+		"620800": "平凉市",
+		"620900": "酒泉市",
+		"621000": "庆阳市",
+		"621100": "定西市",
+		"621200": "陇南市",
+		"622900": "临夏回族自治州",
+		"623000": "甘南藏族自治州"
+	},
+	"620100": {
+		"620102": "城关区",
+		"620103": "七里河区",
+		"620104": "西固区",
+		"620105": "安宁区",
+		"620111": "红古区",
+		"620121": "永登县",
+		"620122": "皋兰县",
+		"620123": "榆中县",
+		"620124": "其它区"
+	},
+	"620200": {
+		"620201100": "新城镇",
+		"620201101": "峪泉镇",
+		"620201102": "文殊镇",
+		"620201401": "雄关区",
+		"620201402": "镜铁区",
+		"620201403": "长城区"
+	},
+	"620300": {
+		"620302": "金川区",
+		"620321": "永昌县",
+		"620322": "其它区"
+	},
+	"620400": {
+		"620402": "白银区",
+		"620403": "平川区",
+		"620421": "靖远县",
+		"620422": "会宁县",
+		"620423": "景泰县",
+		"620424": "其它区"
+	},
+	"620500": {
+		"620502": "秦州区",
+		"620503": "麦积区",
+		"620521": "清水县",
+		"620522": "秦安县",
+		"620523": "甘谷县",
+		"620524": "武山县",
+		"620525": "张家川回族自治县",
+		"620526": "其它区"
+	},
+	"620600": {
+		"620602": "凉州区",
+		"620621": "民勤县",
+		"620622": "古浪县",
+		"620623": "天祝藏族自治县",
+		"620624": "其它区"
+	},
+	"620700": {
+		"620702": "甘州区",
+		"620721": "肃南裕固族自治县",
+		"620722": "民乐县",
+		"620723": "临泽县",
+		"620724": "高台县",
+		"620725": "山丹县",
+		"620726": "其它区"
+	},
+	"620800": {
+		"620802": "崆峒区",
+		"620821": "泾川县",
+		"620822": "灵台县",
+		"620823": "崇信县",
+		"620824": "华亭县",
+		"620825": "庄浪县",
+		"620826": "静宁县",
+		"620827": "其它区"
+	},
+	"620900": {
+		"620902": "肃州区",
+		"620921": "金塔县",
+		"620922": "瓜州县",
+		"620923": "肃北蒙古族自治县",
+		"620924": "阿克塞哈萨克族自治县",
+		"620981": "玉门市",
+		"620982": "敦煌市",
+		"620983": "其它区"
+	},
+	"621000": {
+		"621002": "西峰区",
+		"621021": "庆城县",
+		"621022": "环县",
+		"621023": "华池县",
+		"621024": "合水县",
+		"621025": "正宁县",
+		"621026": "宁县",
+		"621027": "镇原县",
+		"621028": "其它区"
+	},
+	"621100": {
+		"621102": "安定区",
+		"621121": "通渭县",
+		"621122": "陇西县",
+		"621123": "渭源县",
+		"621124": "临洮县",
+		"621125": "漳县",
+		"621126": "岷县",
+		"621127": "其它区"
+	},
+	"621200": {
+		"621202": "武都区",
+		"621221": "成县",
+		"621222": "文县",
+		"621223": "宕昌县",
+		"621224": "康县",
+		"621225": "西和县",
+		"621226": "礼县",
+		"621227": "徽县",
+		"621228": "两当县",
+		"621229": "其它区"
+	},
+	"622900": {
+		"622901": "临夏市",
+		"622921": "临夏县",
+		"622922": "康乐县",
+		"622923": "永靖县",
+		"622924": "广河县",
+		"622925": "和政县",
+		"622926": "东乡族自治县",
+		"622927": "积石山保安族东乡族撒拉族自治县",
+		"622928": "其它区"
+	},
+	"623000": {
+		"623001": "合作市",
+		"623021": "临潭县",
+		"623022": "卓尼县",
+		"623023": "舟曲县",
+		"623024": "迭部县",
+		"623025": "玛曲县",
+		"623026": "碌曲县",
+		"623027": "夏河县",
+		"623028": "其它区"
+	},
+	"630000": {
+		"630100": "西宁市",
+		"632100": "海东市",
+		"632200": "海北藏族自治州",
+		"632300": "黄南藏族自治州",
+		"632500": "海南藏族自治州",
+		"632600": "果洛藏族自治州",
+		"632700": "玉树藏族自治州",
+		"632800": "海西蒙古族藏族自治州"
+	},
+	"630100": {
+		"630102": "城东区",
+		"630103": "城中区",
+		"630104": "城西区",
+		"630105": "城北区",
+		"630121": "大通回族土族自治县",
+		"630122": "湟中县",
+		"630123": "湟源县",
+		"630124": "其它区"
+	},
+	"632100": {
+		"632121": "平安区",
+		"632122": "民和回族土族自治县",
+		"632123": "乐都区",
+		"632126": "互助土族自治县",
+		"632127": "化隆回族自治县",
+		"632128": "循化撒拉族自治县",
+		"632129": "其它区"
+	},
+	"632200": {
+		"632221": "门源回族自治县",
+		"632222": "祁连县",
+		"632223": "海晏县",
+		"632224": "刚察县",
+		"632225": "其它区"
+	},
+	"632300": {
+		"632321": "同仁县",
+		"632322": "尖扎县",
+		"632323": "泽库县",
+		"632324": "河南蒙古族自治县",
+		"632325": "其它区"
+	},
+	"632500": {
+		"632521": "共和县",
+		"632522": "同德县",
+		"632523": "贵德县",
+		"632524": "兴海县",
+		"632525": "贵南县",
+		"632526": "其它区"
+	},
+	"632600": {
+		"632621": "玛沁县",
+		"632622": "班玛县",
+		"632623": "甘德县",
+		"632624": "达日县",
+		"632625": "久治县",
+		"632626": "玛多县",
+		"632627": "其它区"
+	},
+	"632700": {
+		"632721": "玉树市",
+		"632722": "杂多县",
+		"632723": "称多县",
+		"632724": "治多县",
+		"632725": "囊谦县",
+		"632726": "曲麻莱县",
+		"632727": "其它区"
+	},
+	"632800": {
+		"632801": "格尔木市",
+		"632802": "德令哈市",
+		"632821": "乌兰县",
+		"632822": "都兰县",
+		"632823": "天峻县",
+		"632824": "其它区",
+		"632825": "海西蒙古族藏族自治州直辖"
+	},
+	"640000": {
+		"640100": "银川市",
+		"640200": "石嘴山市",
+		"640300": "吴忠市",
+		"640400": "固原市",
+		"640500": "中卫市"
+	},
+	"640100": {
+		"640104": "兴庆区",
+		"640105": "西夏区",
+		"640106": "金凤区",
+		"640121": "永宁县",
+		"640122": "贺兰县",
+		"640181": "灵武市",
+		"640182": "其它区"
+	},
+	"640200": {
+		"640202": "大武口区",
+		"640205": "惠农区",
+		"640221": "平罗县",
+		"640222": "其它区"
+	},
+	"640300": {
+		"640302": "利通区",
+		"640303": "红寺堡区",
+		"640323": "盐池县",
+		"640324": "同心县",
+		"640381": "青铜峡市",
+		"640382": "其它区"
+	},
+	"640400": {
+		"640402": "原州区",
+		"640422": "西吉县",
+		"640423": "隆德县",
+		"640424": "泾源县",
+		"640425": "彭阳县",
+		"640426": "其它区"
+	},
+	"640500": {
+		"640502": "沙坡头区",
+		"640521": "中宁县",
+		"640522": "海原县",
+		"640523": "其它区"
+	},
+	"650000": {
+		"650100": "乌鲁木齐市",
+		"650200": "克拉玛依市",
+		"652100": "吐鲁番市",
+		"652200": "哈密市",
+		"652300": "昌吉回族自治州",
+		"652700": "博尔塔拉蒙古自治州",
+		"652800": "巴音郭楞蒙古自治州",
+		"652900": "阿克苏地区",
+		"653000": "克孜勒苏柯尔克孜自治州",
+		"653100": "喀什地区",
+		"653200": "和田地区",
+		"654000": "伊犁哈萨克自治州",
+		"654200": "塔城地区",
+		"654300": "阿勒泰地区",
+		"659000": "可克达拉市",
+		"659001": "石河子市",
+		"659002": "阿拉尔市",
+		"659003": "图木舒克市",
+		"659004": "五家渠市",
+		"659005": "北屯市",
+		"659006": "铁门关市",
+		"659009": "昆玉市"
+	},
+	"650100": {
+		"650102": "天山区",
+		"650103": "沙依巴克区",
+		"650104": "新市区",
+		"650105": "水磨沟区",
+		"650106": "头屯河区",
+		"650107": "达坂城区",
+		"650108": "东山区",
+		"650109": "米东区",
+		"650121": "乌鲁木齐县",
+		"650122": "其它区"
+	},
+	"650200": {
+		"650202": "独山子区",
+		"650203": "克拉玛依区",
+		"650204": "白碱滩区",
+		"650205": "乌尔禾区",
+		"650206": "其它区"
+	},
+	"652100": {
+		"652101": "高昌区",
+		"652122": "鄯善县",
+		"652123": "托克逊县",
+		"652124": "其它区"
+	},
+	"652200": {
+		"652201": "伊州区",
+		"652222": "巴里坤哈萨克自治县",
+		"652223": "伊吾县",
+		"652224": "其它区"
+	},
+	"652300": {
+		"652301": "昌吉市",
+		"652302": "阜康市",
+		"652303": "米泉市",
+		"652323": "呼图壁县",
+		"652324": "玛纳斯县",
+		"652325": "奇台县",
+		"652327": "吉木萨尔县",
+		"652328": "木垒哈萨克自治县",
+		"652329": "其它区"
+	},
+	"652700": {
+		"652701": "博乐市",
+		"652702": "阿拉山口市",
+		"652722": "精河县",
+		"652723": "温泉县",
+		"652724": "其它区"
+	},
+	"652800": {
+		"652801": "库尔勒市",
+		"652822": "轮台县",
+		"652823": "尉犁县",
+		"652824": "若羌县",
+		"652825": "且末县",
+		"652826": "焉耆回族自治县",
+		"652827": "和静县",
+		"652828": "和硕县",
+		"652829": "博湖县",
+		"652830": "其它区"
+	},
+	"652900": {
+		"652901": "阿克苏市",
+		"652922": "温宿县",
+		"652923": "库车县",
+		"652924": "沙雅县",
+		"652925": "新和县",
+		"652926": "拜城县",
+		"652927": "乌什县",
+		"652928": "阿瓦提县",
+		"652929": "柯坪县",
+		"652930": "其它区"
+	},
+	"653000": {
+		"653001": "阿图什市",
+		"653022": "阿克陶县",
+		"653023": "阿合奇县",
+		"653024": "乌恰县",
+		"653025": "其它区"
+	},
+	"653100": {
+		"653101": "喀什市",
+		"653121": "疏附县",
+		"653122": "疏勒县",
+		"653123": "英吉沙县",
+		"653124": "泽普县",
+		"653125": "莎车县",
+		"653126": "叶城县",
+		"653127": "麦盖提县",
+		"653128": "岳普湖县",
+		"653129": "伽师县",
+		"653130": "巴楚县",
+		"653131": "塔什库尔干塔吉克自治县",
+		"653132": "其它区"
+	},
+	"653200": {
+		"653201": "和田市",
+		"653221": "和田县",
+		"653222": "墨玉县",
+		"653223": "皮山县",
+		"653224": "洛浦县",
+		"653225": "策勒县",
+		"653226": "于田县",
+		"653227": "民丰县",
+		"653228": "其它区"
+	},
+	"654000": {
+		"654002": "伊宁市",
+		"654003": "奎屯市",
+		"654004": "霍尔果斯市",
+		"654021": "伊宁县",
+		"654022": "察布查尔锡伯自治县",
+		"654023": "霍城县",
+		"654024": "巩留县",
+		"654025": "新源县",
+		"654026": "昭苏县",
+		"654027": "特克斯县",
+		"654028": "尼勒克县",
+		"654029": "其它区"
+	},
+	"654200": {
+		"654201": "塔城市",
+		"654202": "乌苏市",
+		"654221": "额敏县",
+		"654223": "沙湾县",
+		"654224": "托里县",
+		"654225": "裕民县",
+		"654226": "和布克赛尔蒙古自治县",
+		"654227": "其它区"
+	},
+	"654300": {
+		"654301": "阿勒泰市",
+		"654321": "布尔津县",
+		"654322": "富蕴县",
+		"654323": "福海县",
+		"654324": "哈巴河县",
+		"654325": "青河县",
+		"654326": "吉木乃县",
+		"654327": "其它区"
+	},
+	"659000": {
+		"659007": "双河市",
+		"659008": "可克达拉市"
+	},
+	"659001": {
+		"659001001": "新城街道",
+		"659001002": "向阳街道",
+		"659001003": "红山街道",
+		"659001004": "老街街道",
+		"659001005": "东城街道",
+		"659001100": "北泉镇",
+		"659001200": "石河子乡",
+		"659001500": "兵团一五二团"
+	},
+	"659002": {
+		"659002001": "金银川路街道",
+		"659002002": "幸福路街道",
+		"659002003": "青松路街道",
+		"659002004": "南口街道",
+		"659002200": "托喀依乡",
+		"659002402": "工业园区",
+		"659002500": "兵团七团",
+		"659002501": "兵团八团",
+		"659002503": "兵团十团",
+		"659002504": "兵团十一团",
+		"659002505": "兵团十二团",
+		"659002506": "兵团十三团",
+		"659002507": "兵团十四团",
+		"659002509": "兵团十六团",
+		"659002511": "兵团第一师水利水电工程处",
+		"659002512": "兵团第一师塔里木灌区水利管理处",
+		"659002513": "阿拉尔农场",
+		"659002514": "兵团第一师幸福农场",
+		"659002515": "中心监狱"
+	},
+	"659003": {
+		"659003001": "齐干却勒街道",
+		"659003002": "前海街道",
+		"659003003": "永安坝街道",
+		"659003504": "兵团四十四团",
+		"659003509": "兵团四十九团",
+		"659003510": "兵团五十团",
+		"659003511": "兵团五十一团",
+		"659003513": "兵团五十三团",
+		"659003514": "兵团图木舒克市喀拉拜勒镇",
+		"659003515": "兵团图木舒克市永安坝"
+	},
+	"659004": {
+		"659004001": "军垦路街道",
+		"659004002": "青湖路街道",
+		"659004003": "人民路街道",
+		"659004500": "兵团一零一团",
+		"659004501": "兵团一零二团",
+		"659004502": "兵团一零三团"
+	},
+	"659005": {
+		"654301100": "北屯镇",
+		"654323501": "兵团一八三团",
+		"654323502": "兵团一八七团",
+		"659005501": "兵团一八八团"
+	},
+	"659006": {
+		"652801502": "农二师三十团",
+		"659006501": "兵团二十九团"
+	},
+	"659009": {
+		"653222501": "兵团二二四团",
+		"653223500": "兵团皮山农场",
+		"659009100": "喀拉喀什镇",
+		"659009200": "乌尔其乡",
+		"659009201": "普恰克其乡",
+		"659009202": "阔依其乡",
+		"659009203": "乌鲁克萨依乡",
+		"659009204": "奴尔乡",
+		"659009205": "博斯坦乡",
+		"659009502": "兵团四十七团",
+		"659009503": "兵团一牧场"
+	},
+
+	"710000": {
+		"710100": "台北",
+		"710200": "新北",
+		"710300": "台中",
+		"710400": "台南",
+		"710500": "高雄",
+		"710600": "基隆",
+		"710900": "桃园",
+		"711000": "新竹",
+		"711100": "苗栗",
+		"711200": "彰化",
+		"711300": "南投",
+		"711400": "云林",
+		"711500": "嘉义",
+		"711600": "屏东",
+		"711700": "宜兰",
+		"711800": "花莲",
+		"711900": "台东",
+		"712000": "澎湖"
+	},
+	"810000": {
+		"810100": "香港",
+		"810200": "九龙",
+		"810300": "新界"
+	},
+	"820000": {
+		"820100": "花地玛堂",
+		"820200": "圣安多尼堂",
+		"820300": "大堂",
+		"820400": "望德堂",
+		"820500": "风顺堂",
+		"820600": "嘉模堂",
+		"820700": "圣方济各堂",
+		"820800": "路氹城",
+		"820900": "澳门新城"
+	},
+
+	"710100": {
+		"7101030": "大同",
+		"7101121": "文山",
+		"7101092": "北投",
+		"7101043": "中山",
+		"7101064": "大安",
+		"7101085": "士林",
+		"7101026": "中正",
+		"7101057": "松山",
+		"7101018": "信义",
+		"7101109": "内湖",
+		"71011110": "南港",
+		"71010711": "万华"
+	},
+	"710200": {
+		"7102250": "五股",
+		"7102141": "土城",
+		"7102202": "三重",
+		"7102113": "新店",
+		"7102294": "三芝",
+		"7102135": "乌来",
+		"7102026": "万里",
+		"7102107": "双溪",
+		"7102268": "八里",
+		"7102099": "贡寮",
+		"71021710": "三峡",
+		"71022411": "芦洲",
+		"71021212": "坪林",
+		"71020813": "平溪",
+		"71022314": "林口",
+		"71020115": "板桥",
+		"71020616": "石碇",
+		"71022717": "淡水",
+		"71021818": "树林",
+		"71020319": "金山",
+		"71020420": "汐止",
+		"71020521": "深坑",
+		"71022122": "新庄",
+		"71021923": "莺歌",
+		"71021524": "永和",
+		"71022825": "石门",
+		"71021626": "中和",
+		"71022227": "泰山",
+		"71020728": "瑞芳"
+	},
+	"710300": {
+		"7103130": "乌日",
+		"7103141": "后里",
+		"7103122": "雾峰",
+		"7103283": "外埔",
+		"7103194": "东势",
+		"7103265": "清水",
+		"7103296": "大安",
+		"7103107": "太平",
+		"7103018": "西屯",
+		"7103049": "东区",
+		"71032210": "大肚",
+		"71032011": "新社",
+		"71030812": "北屯",
+		"71032713": "大甲",
+		"71030214": "丰原",
+		"71031715": "神冈",
+		"71032516": "梧栖",
+		"71030617": "西区",
+		"71031818": "石冈",
+		"71032319": "沙鹿",
+		"71030920": "南屯",
+		"71032421": "龙井",
+		"71030722": "北区",
+		"71032123": "和平",
+		"71030324": "中区",
+		"71031625": "大雅",
+		"71031526": "潭子",
+		"71031127": "大里",
+		"71030528": "南区"
+	},
+	"710400": {
+		"7104060": "南区",
+		"7104351": "大内",
+		"7104132": "玉井",
+		"7104193": "官田",
+		"7104104": "归仁",
+		"7104095": "永康",
+		"7104266": "北门",
+		"7104167": "仁德",
+		"7104148": "楠西",
+		"7104129": "左区",
+		"71042810": "白河",
+		"71042711": "后壁",
+		"71043012": "六甲",
+		"71042313": "七股",
+		"71043114": "下营",
+		"71040815": "安南",
+		"71040316": "新营",
+		"71041817": "龙崎",
+		"71042418": "将军",
+		"71043719": "新区",
+		"71040520": "东区",
+		"71041721": "关庙",
+		"71042522": "学甲",
+		"71042023": "麻豆",
+		"71043224": "柳营",
+		"71042125": "佳里",
+		"71043626": "山上",
+		"71040727": "北区",
+		"71043828": "安定",
+		"71042229": "西港",
+		"71043330": "盐水",
+		"71041531": "南化",
+		"71043432": "善化",
+		"71040433": "中西",
+		"71040234": "安平",
+		"71042935": "东山",
+		"71041136": "新化"
+	},
+	"710500": {
+		"7105340": "杉林",
+		"7105111": "旗津",
+		"7105332": "甲仙",
+		"7105323": "六龟",
+		"7105014": "苓雅",
+		"7105275": "永安",
+		"7105156": "大树",
+		"7105057": "左营",
+		"7105388": "那玛夏",
+		"7105109": "前区",
+		"71053710": "桃源",
+		"71052911": "梓官",
+		"71050912": "前金",
+		"71052613": "茄萣",
+		"71051414": "大寮",
+		"71051815": "鸟松",
+		"71053016": "旗山",
+		"71050317": "盐埕",
+		"71050218": "凤山",
+		"71051319": "林园",
+		"71051920": "冈山",
+		"71050721": "三民",
+		"71052522": "湖内",
+		"71052423": "路竹",
+		"71050624": "楠梓",
+		"71051725": "仁武",
+		"71053626": "茂林",
+		"71050427": "鼓山",
+		"71052028": "桥头",
+		"71053529": "内门",
+		"71052330": "阿莲",
+		"71051631": "大社",
+		"71052232": "田寮",
+		"71052833": "弥陀",
+		"71052134": "燕巢",
+		"71051235": "小港",
+		"71053136": "美浓",
+		"71050837": "新兴"
+	},
+	"710600": {
+		"7106040": "中山",
+		"7106071": "七堵",
+		"7106022": "仁爱",
+		"7106063": "暖暖",
+		"7106034": "信义",
+		"7106055": "安乐",
+		"7106016": "中正"
+	},
+	"710900": {
+		"7109130": "复兴",
+		"7109041": "八德",
+		"7109092": "龟山",
+		"7109123": "新屋",
+		"7109064": "大溪",
+		"7109115": "观音",
+		"7109106": "大园",
+		"7109037": "平镇",
+		"7109088": "龙潭",
+		"7109029": "中坜",
+		"71090710": "芦竹",
+		"71090511": "杨梅",
+		"71090112": "桃园"
+	},
+	"711000": {
+		"7110050": "新丰",
+		"7110041": "关西",
+		"7110072": "宝山",
+		"7110133": "湖口",
+		"7110094": "横山",
+		"7110085": "五峰",
+		"7110126": "芎林",
+		"7110117": "尖石",
+		"7110108": "北埔",
+		"7110029": "竹东",
+		"71100310": "新埔",
+		"71100111": "竹北",
+		"71100612": "峨眉"
+	},
+	"711100": {
+		"7111140": "南庄",
+		"7111131": "三湾",
+		"7111152": "大湖",
+		"7111043": "西湖",
+		"7111114": "后龙",
+		"7111185": "泰安",
+		"7111126": "造桥",
+		"7111087": "三义",
+		"7111078": "铜锣",
+		"7111169": "卓兰",
+		"71110910": "竹南",
+		"71111011": "头份",
+		"71110612": "公馆",
+		"71110313": "苑里",
+		"71110514": "头屋",
+		"71110215": "通霄",
+		"71110116": "苗栗",
+		"71111717": "狮潭"
+	},
+	"711200": {
+		"7112190": "大城",
+		"7112221": "社头",
+		"7112212": "竹塘",
+		"7112043": "鹿港",
+		"7112244": "田尾",
+		"7112095": "花坛",
+		"7112236": "二水",
+		"7112177": "埔心",
+		"7112128": "永靖",
+		"7112159": "福兴",
+		"71122610": "溪州",
+		"71120511": "溪湖",
+		"71122512": "埤头",
+		"71121313": "伸港",
+		"71122014": "芳苑",
+		"71120315": "和美",
+		"71121816": "埔盐",
+		"71121117": "大村",
+		"71121018": "芬园",
+		"71120619": "二林",
+		"71121420": "线西",
+		"71120721": "田中",
+		"71120822": "北斗",
+		"71120223": "员林",
+		"71121624": "秀水",
+		"71120125": "彰化"
+	},
+	"711300": {
+		"7113120": "竹山",
+		"7113091": "水里鄉",
+		"7113042": "中寮",
+		"7113053": "埔里",
+		"7113084": "仁爱",
+		"7113135": "鹿谷",
+		"7113036": "名间",
+		"7113027": "草屯",
+		"7113118": "信义",
+		"7113109": "集集",
+		"71130610": "国姓",
+		"71130111": "南投",
+		"71130712": "鱼池"
+	},
+	"711400": {
+		"7114120": "仑背",
+		"7114101": "褒忠",
+		"7114042": "古坑",
+		"7114023": "林内",
+		"7114074": "虎尾",
+		"7114155": "东势",
+		"7114176": "元长",
+		"7114187": "四湖",
+		"7114208": "水林",
+		"7114169": "北港",
+		"71141410": "台西",
+		"71140811": "西螺",
+		"71141112": "二仑",
+		"71140613": "莿桐",
+		"71140114": "斗六",
+		"71141315": "麦寮",
+		"71140316": "斗南",
+		"71140517": "大埤",
+		"71141918": "口湖",
+		"71140919": "土库"
+	},
+	"711500": {
+		"7115170": "大埔",
+		"7115101": "义竹",
+		"7115042": "大林",
+		"7115163": "番路",
+		"7115184": "阿里山",
+		"7115145": "竹崎",
+		"7115116": "鹿草",
+		"7115127": "水上",
+		"7115058": "民雄",
+		"7115079": "新港",
+		"71150210": "朴子",
+		"71150811": "六脚",
+		"71150112": "太保",
+		"71151513": "梅山",
+		"71151314": "中埔",
+		"71150315": "布袋",
+		"71150916": "东石",
+		"71150617": "溪口"
+	},
+	"711600": {
+		"7116010": "屏东",
+		"7116201": "枋山",
+		"7116322": "满州",
+		"7116053": "九如",
+		"7116234": "东港",
+		"7116155": "内埔",
+		"7116266": "林边",
+		"7116227": "狮子",
+		"7116068": "里港",
+		"7116049": "麟洛",
+		"71160910": "雾台",
+		"71160311": "长治",
+		"71160812": "高树",
+		"71162713": "南州",
+		"71161914": "枋寮",
+		"71163115": "车城",
+		"71161116": "潮州",
+		"71160717": "盐埔",
+		"71161818": "来义",
+		"71162119": "春日",
+		"71162820": "佳冬",
+		"71161621": "新埤",
+		"71161722": "玛家",
+		"71162923": "琉球",
+		"71162424": "新园",
+		"71161025": "三地门",
+		"71161326": "竹田",
+		"71161427": "泰武",
+		"71163028": "恒春",
+		"71161229": "万峦",
+		"71162530": "崁顶",
+		"71163331": "牡丹",
+		"71160232": "万丹"
+	},
+	"711700": {
+		"7117020": "头城",
+		"7117091": "冬山",
+		"7117122": "南澳",
+		"7117063": "罗东",
+		"7117044": "壮围",
+		"7117055": "员山",
+		"7117106": "大同",
+		"7117117": "苏澳",
+		"7117088": "三星",
+		"7117079": "五结",
+		"71170110": "宜兰",
+		"71170311": "礁溪"
+	},
+	"711800": {
+		"7118030": "吉安",
+		"7118011": "花莲",
+		"7118122": "富里",
+		"7118113": "玉里",
+		"7118084": "丰滨",
+		"7118075": "光复",
+		"7118136": "卓溪",
+		"7118027": "新城",
+		"7118108": "万荣",
+		"7118059": "秀林",
+		"71180410": "寿丰",
+		"71180911": "瑞穗",
+		"71180612": "凤林"
+	},
+	"711900": {
+		"7119020": "成功",
+		"7119081": "鹿野",
+		"7119142": "金峰",
+		"7119113": "绿岛",
+		"7119014": "台东",
+		"7119065": "海端",
+		"7119046": "长滨",
+		"7119097": "延平",
+		"7119128": "兰屿",
+		"7119139": "太麻里",
+		"71190510": "东河",
+		"71190711": "池上",
+		"71190312": "关山",
+		"71191513": "大武",
+		"71191014": "卑南",
+		"71191615": "达仁"
+	},
+	"712000": {
+		"7120020": "湖西",
+		"7120041": "西屿",
+		"7120012": "马公",
+		"7120033": "白沙",
+		"7120064": "七美",
+		"7120055": "望安"
+	},
+	"810100": {
+		"8101010": "中西区",
+		"8101041": "湾仔",
+		"8101032": "南区",
+		"8101023": "东区"
+	},
+	"810200": {
+		"8102040": "黄大仙",
+		"8102021": "深水埗",
+		"8102052": "观塘",
+		"8102013": "九龙城",
+		"8102034": "油尖旺"
+	},
+	"810300": {
+		"8103070": "荃湾",
+		"8103031": "沙田",
+		"8103092": "元朗",
+		"8103023": "西贡",
+		"8103084": "屯门",
+		"8103045": "大埔",
+		"8103056": "离岛",
+		"8103067": "葵青",
+		"8103018": "北区"
+	}
+};

+ 151 - 0
components/wangding-pickerAddress/data.js

@@ -0,0 +1,151 @@
+export default [
+	{
+		"name": "浙江省",
+		"city": [{
+				"name": "杭州市",
+				"area": [
+					"拱墅区",
+					"西湖区",
+					"上城区",
+					"下城区",
+					"江干区",
+					"滨江区",
+					"余杭区",
+					"萧山区",
+					"建德市",
+					"富阳市",
+					"临安市",
+					"桐庐县",
+					"淳安县"
+				]
+			},
+			{
+				"name": "宁波市",
+				"area": [
+					"海曙区",
+					"江东区",
+					"江北区",
+					"镇海区",
+					"北仑区",
+					"鄞州区",
+					"余姚市",
+					"慈溪市",
+					"奉化市",
+					"宁海县",
+					"象山县"
+				]
+			},
+			{
+				"name": "温州市",
+				"area": [
+					"鹿城区",
+					"龙湾区",
+					"瓯海区",
+					"瑞安市",
+					"乐清市",
+					"永嘉县",
+					"洞头县",
+					"平阳县",
+					"苍南县",
+					"文成县",
+					"泰顺县"
+				]
+			},
+			{
+				"name": "嘉兴市",
+				"area": [
+					"秀城区",
+					"秀洲区",
+					"海宁市",
+					"平湖市",
+					"桐乡市",
+					"嘉善县",
+					"海盐县"
+				]
+			},
+			{
+				"name": "湖州市",
+				"area": [
+					"吴兴区",
+					"南浔区",
+					"长兴县",
+					"德清县",
+					"安吉县"
+				]
+			},
+			{
+				"name": "绍兴市",
+				"area": [
+					"越城区",
+					"诸暨市",
+					"上虞市",
+					"嵊州市",
+					"绍兴县",
+					"新昌县"
+				]
+			},
+			{
+				"name": "金华市",
+				"area": [
+					"婺城区",
+					"金东区",
+					"兰溪市",
+					"义乌市",
+					"东阳市",
+					"永康市",
+					"武义县",
+					"浦江县",
+					"磐安县"
+				]
+			},
+			{
+				"name": "衢州市",
+				"area": [
+					"柯城区",
+					"衢江区",
+					"江山市",
+					"龙游县",
+					"常山县",
+					"开化县"
+				]
+			},
+			{
+				"name": "舟山市",
+				"area": [
+					"定海区",
+					"普陀区",
+					"岱山县",
+					"嵊泗县"
+				]
+			},
+			{
+				"name": "台州市",
+				"area": [
+					"椒江区",
+					"黄岩区",
+					"路桥区",
+					"临海市",
+					"温岭市",
+					"玉环县",
+					"天台县",
+					"仙居县",
+					"三门县"
+				]
+			},
+			{
+				"name": "丽水市",
+				"area": [
+					"莲都区",
+					"龙泉市",
+					"缙云县",
+					"青田县",
+					"云和县",
+					"遂昌县",
+					"松阳县",
+					"庆元县",
+					"景宁畲族自治县"
+				]
+			}
+		]
+	}
+]

+ 155 - 0
components/wangding-pickerAddress/wangding-pickerAddress.vue

@@ -0,0 +1,155 @@
+<template>
+	<picker @change="bindPickerChange" @columnchange="columnchange" :range="array" range-key="name" :value="value" mode="multiSelector"><slot></slot></picker>
+</template>
+
+<script>
+import AllAddress from './city-picker.data.js';
+let selectVal = [
+	{
+		name: '安徽省',
+		code: '340000'
+	},
+	{
+		name: '合肥市',
+		code: '340100'
+	},
+	{
+		name: '瑶海区',
+		code: '340102'
+	}
+];
+export default {
+	data() {
+		return {
+			value: [0, 0, 0],
+			code:['340000','340100','340102'],
+			array: [],
+			index: 0
+		};
+	},
+	created() {
+		this.initSelect();
+	},
+	methods: {
+		// 初始化地址选项
+		initSelect() {
+			this.updateSourceDate() // 更新源数据
+				.updateAddressDate() // 更新结果数据
+				.$forceUpdate(); // 触发双向绑定
+		},
+		// 地址控件改变控件
+		columnchange(d) {
+			this.updateSelectIndex(d.detail.column, d.detail.value)// 更新选择索引
+			.updateAddressDate(d.detail.column) // 更新结果数据
+			.updateSourceDate() // 更新源数据
+			.$forceUpdate(); // 触发双向绑定
+		},
+
+		/**
+		 * 更新源数据
+		 * */
+		updateSourceDate() {
+			let obj = this;
+			obj.array = [[], [], []];
+			for (let i in AllAddress[86]) {
+				// 循环对象中的数组数据
+				AllAddress[86][i].forEach(e => {
+					obj.array[0].push({
+						name: e.address,
+						code: e.code
+					});
+				});
+			}
+			for (let i in AllAddress[selectVal[0].code]) {
+				// 循环对象中的数组数据
+				obj.array[1].push({
+					name: AllAddress[selectVal[0].code][i],
+					code: i
+				});
+			}
+			for (let i in AllAddress[selectVal[1].code]) {
+				// 循环对象中的数组数据
+				obj.array[2].push({
+					name: AllAddress[selectVal[1].code][i],
+					code: i
+				});
+			}
+			return obj;
+		},
+
+		/**
+		 * 更新索引
+		 * */
+		updateSelectIndex(column, value) {
+			let arr = JSON.parse(JSON.stringify(this.value));
+			arr[column] = value;
+			if (column === 0) {
+				arr[1] = 0;
+				arr[2] = 0;
+			}
+			if (column === 1) {
+				arr[2] = 0;
+			}
+			this.value = arr;
+			return this;
+		},
+
+		/**
+		 * 更新结果数据
+		 * */
+		updateAddressDate(column) {
+			// 保存一级对象数据
+			selectVal[0] = this.array[0][this.value[0]];
+			if (column === 0) {
+				// 查询二级对象数据
+				let arr1 = AllAddress[selectVal[0].code];
+				for(let i in arr1){
+					selectVal[1] = {
+							name: arr1[i],
+							code: i
+					};
+					break
+				}
+				// 查询三级对象数据
+				let arr2 = AllAddress[selectVal[1].code];
+				for(let i in arr2){
+					selectVal[2] = {
+							name: arr2[i],
+							code: i
+					};
+					break
+				}
+				
+			}
+			if (column === 1) {
+				// 保存当前选中的二级对象数据
+				selectVal[1] = this.array[1][this.value[1]]
+				console.log(selectVal[1]);
+				// 查询三级数据
+				let arr2 = AllAddress[selectVal[1].code];
+				for(let i in arr2){
+					selectVal[2] = {
+							name: arr2[i],
+							code: i
+					};
+					break
+				}
+			}
+			return this;
+		},
+
+		/**
+		 * 点击确定
+		 * */
+		bindPickerChange(e) {
+			this.$emit('change', {
+				index: this.value,
+				data: selectVal
+			});
+			return this;
+		}
+	}
+};
+</script>
+
+<style></style>

+ 44 - 0
main.js

@@ -0,0 +1,44 @@
+import Vue from 'vue'
+import store from './store'
+import App from './App'
+/**
+ *  所有测试用数据均存放于根目录json.js
+ *  
+ *  css部分使用了App.vue下的全局样式和iconfont图标,有需要图标库的可以留言。
+ *  示例使用了uni.scss下的变量, 除变量外已尽量移除特有语法,可直接替换为其他预处理器使用
+ */
+const msg = (title, duration=1500, mask=false, icon='none')=>{
+	//统一提示方便全局修改
+	if(Boolean(title) === false){
+		return;
+	}
+	uni.showToast({
+		title,
+		duration,
+		mask,
+		icon
+	});
+}
+
+const prePage = ()=>{
+	// 获取当前页面
+	let pages = getCurrentPages();
+	let prePage = pages[pages.length - 2];
+	// #ifdef H5
+	return prePage;
+	// #endif
+	return prePage.$vm;
+}
+
+
+Vue.config.productionTip = false
+Vue.prototype.$fire = new Vue();
+Vue.prototype.$store = store;
+Vue.prototype.$api = {msg, prePage};
+
+App.mpType = 'app'
+
+const app = new Vue({
+    ...App
+})
+app.$mount()

+ 118 - 0
manifest.json

@@ -0,0 +1,118 @@
+{
+    "name" : "救援者",
+    "appid" : "__UNI__DA9A845",
+    "description" : "",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    "app-plus" : {
+        /* 5+App特有相关 */
+        "usingComponents" : true,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        "modules" : {},
+        /* 模块配置 */
+        "distribute" : {
+            /* 应用发布信息 */
+            "android" : {
+                /* android打包配置 */
+                "permissions" : [
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
+                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>"
+                ]
+            },
+            "ios" : {},
+            /* ios打包配置 */
+            "sdkConfigs" : {
+                "maps" : {}
+            }
+        },
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    /* SDK配置 */
+    "quickapp" : {},
+    /* 快应用特有相关 */
+    "mp-weixin" : {
+        /* 小程序特有相关 */
+        "usingComponents" : true,
+        "appid" : "wx8f5ca89868d2faa3",
+        "setting" : {
+            "urlCheck" : true
+        },
+        "permission" : {
+            "scope.userLocation" : {
+                "desc" : "根据您的位置为您提供最近的救援者"
+            }
+        },
+        "requiredPrivateInfos" : [ "getLocation" ],
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "h5" : {
+        "title" : "救援者",
+        "domain" : "",
+        "router" : {
+            "base" : "/index/",
+            "mode" : "hash"
+        },
+        "devServer" : {
+            "port" : 8080, //端口号
+            "disableHostCheck" : true,
+            "proxy" : {
+                "/ws/" : {
+                    "target" : "http://apis.map.qq.com/ws/", //目标接口域名
+                    "changeOrigin" : true, //是否跨域
+                    "secure" : false // 设置支持https协议的代理
+                }
+            },
+            "https" : false
+        },
+        "sdkConfigs" : {
+            "maps" : {}
+        },
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "uniStatistics" : {
+        "enable" : false
+    },
+    "mp-alipay" : {
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "mp-baidu" : {
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "mp-qq" : {
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "mp-toutiao" : {
+        "uniStatistics" : {
+            "enable" : false
+        }
+    }
+}

+ 30 - 0
node_modules/jweixin-module/README.md

@@ -0,0 +1,30 @@
+# jweixin-module
+
+微信JS-SDK
+
+## 安装
+
+### NPM
+
+```shell
+npm install jweixin-module --save
+```
+
+### UMD
+
+```http
+https://unpkg.com/jweixin-module/out/index.js
+```
+
+## 使用
+
+```js
+var wx = require('jweixin-module')
+wx.ready(function(){
+    // TODO
+});
+```
+
+## 完整API
+
+>[微信JS-SDK说明文档](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115)

File diff suppressed because it is too large
+ 0 - 0
node_modules/jweixin-module/out/index.js


+ 60 - 0
node_modules/jweixin-module/package.json

@@ -0,0 +1,60 @@
+{
+  "_from": "jweixin-module",
+  "_id": "jweixin-module@1.4.1",
+  "_inBundle": false,
+  "_integrity": "sha512-2R2oa1lYhAsclfjKSf3DP4ZiP1dcrQUbM7aklbeJA+UAg/LS7MqoA6UbTy1cs4sbB34z62K4bKW0Z9iazD8ejg==",
+  "_location": "/jweixin-module",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "tag",
+    "registry": true,
+    "raw": "jweixin-module",
+    "name": "jweixin-module",
+    "escapedName": "jweixin-module",
+    "rawSpec": "",
+    "saveSpec": null,
+    "fetchSpec": "latest"
+  },
+  "_requiredBy": [
+    "#USER",
+    "/"
+  ],
+  "_resolved": "https://registry.npmjs.org/jweixin-module/-/jweixin-module-1.4.1.tgz",
+  "_shasum": "1fc8fa42622243f6c35651d272cd587debf56cd1",
+  "_spec": "jweixin-module",
+  "_where": "D:\\工作\\项目\\appBase",
+  "author": {
+    "name": "Shengqiang Guo"
+  },
+  "bugs": {
+    "url": "https://github.com/zhetengbiji/jweixin-module/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "微信JS-SDK",
+  "devDependencies": {
+    "textfile": "^1.2.0",
+    "uglify-js": "^3.4.9"
+  },
+  "homepage": "https://github.com/zhetengbiji/jweixin-module#readme",
+  "keywords": [
+    "wxjssdk",
+    "weixin",
+    "jweixin",
+    "wechat",
+    "jssdk",
+    "wx"
+  ],
+  "license": "ISC",
+  "main": "out/index.js",
+  "name": "jweixin-module",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/zhetengbiji/jweixin-module.git"
+  },
+  "scripts": {
+    "build": "node build",
+    "prepublish": "npm run build"
+  },
+  "version": "1.4.1"
+}

+ 1121 - 0
package-lock.json

@@ -0,0 +1,1121 @@
+{
+  "requires": true,
+  "lockfileVersion": 1,
+  "dependencies": {
+    "ansi-regex": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+      "dev": true
+    },
+    "ansi-styles": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+      "dev": true
+    },
+    "babel-code-frame": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.3",
+        "esutils": "^2.0.2",
+        "js-tokens": "^3.0.2"
+      }
+    },
+    "babel-core": {
+      "version": "6.26.3",
+      "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+      "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
+      "dev": true,
+      "requires": {
+        "babel-code-frame": "^6.26.0",
+        "babel-generator": "^6.26.0",
+        "babel-helpers": "^6.24.1",
+        "babel-messages": "^6.23.0",
+        "babel-register": "^6.26.0",
+        "babel-runtime": "^6.26.0",
+        "babel-template": "^6.26.0",
+        "babel-traverse": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "babylon": "^6.18.0",
+        "convert-source-map": "^1.5.1",
+        "debug": "^2.6.9",
+        "json5": "^0.5.1",
+        "lodash": "^4.17.4",
+        "minimatch": "^3.0.4",
+        "path-is-absolute": "^1.0.1",
+        "private": "^0.1.8",
+        "slash": "^1.0.0",
+        "source-map": "^0.5.7"
+      }
+    },
+    "babel-generator": {
+      "version": "6.26.1",
+      "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+      "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+      "dev": true,
+      "requires": {
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "detect-indent": "^4.0.0",
+        "jsesc": "^1.3.0",
+        "lodash": "^4.17.4",
+        "source-map": "^0.5.7",
+        "trim-right": "^1.0.1"
+      }
+    },
+    "babel-helper-builder-binary-assignment-operator-visitor": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
+      "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
+      "dev": true,
+      "requires": {
+        "babel-helper-explode-assignable-expression": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-helper-call-delegate": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+      "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+      "dev": true,
+      "requires": {
+        "babel-helper-hoist-variables": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-helper-define-map": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+      "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+      "dev": true,
+      "requires": {
+        "babel-helper-function-name": "^6.24.1",
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "lodash": "^4.17.4"
+      }
+    },
+    "babel-helper-explode-assignable-expression": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz",
+      "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-helper-function-name": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+      "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+      "dev": true,
+      "requires": {
+        "babel-helper-get-function-arity": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-helper-get-function-arity": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+      "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-helper-hoist-variables": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+      "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-helper-optimise-call-expression": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+      "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-helper-regex": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+      "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "lodash": "^4.17.4"
+      }
+    },
+    "babel-helper-remap-async-to-generator": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
+      "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
+      "dev": true,
+      "requires": {
+        "babel-helper-function-name": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-helper-replace-supers": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+      "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+      "dev": true,
+      "requires": {
+        "babel-helper-optimise-call-expression": "^6.24.1",
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-helpers": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+      "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
+      }
+    },
+    "babel-loader": {
+      "version": "7.1.5",
+      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.5.tgz",
+      "integrity": "sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw==",
+      "dev": true,
+      "requires": {
+        "find-cache-dir": "^1.0.0",
+        "loader-utils": "^1.0.2",
+        "mkdirp": "^0.5.1"
+      }
+    },
+    "babel-messages": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+      "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-check-es2015-constants": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+      "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-syntax-async-functions": {
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
+      "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=",
+      "dev": true
+    },
+    "babel-plugin-syntax-exponentiation-operator": {
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
+      "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=",
+      "dev": true
+    },
+    "babel-plugin-syntax-trailing-function-commas": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
+      "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=",
+      "dev": true
+    },
+    "babel-plugin-transform-async-to-generator": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
+      "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
+      "dev": true,
+      "requires": {
+        "babel-helper-remap-async-to-generator": "^6.24.1",
+        "babel-plugin-syntax-async-functions": "^6.8.0",
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-arrow-functions": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+      "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-block-scoped-functions": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+      "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-block-scoping": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+      "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "babel-template": "^6.26.0",
+        "babel-traverse": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "lodash": "^4.17.4"
+      }
+    },
+    "babel-plugin-transform-es2015-classes": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+      "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+      "dev": true,
+      "requires": {
+        "babel-helper-define-map": "^6.24.1",
+        "babel-helper-function-name": "^6.24.1",
+        "babel-helper-optimise-call-expression": "^6.24.1",
+        "babel-helper-replace-supers": "^6.24.1",
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-computed-properties": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+      "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-destructuring": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+      "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-duplicate-keys": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+      "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-for-of": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+      "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-function-name": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+      "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+      "dev": true,
+      "requires": {
+        "babel-helper-function-name": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-literals": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+      "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-modules-amd": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+      "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-modules-commonjs": {
+      "version": "6.26.2",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",
+      "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",
+      "dev": true,
+      "requires": {
+        "babel-plugin-transform-strict-mode": "^6.24.1",
+        "babel-runtime": "^6.26.0",
+        "babel-template": "^6.26.0",
+        "babel-types": "^6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-modules-systemjs": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+      "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+      "dev": true,
+      "requires": {
+        "babel-helper-hoist-variables": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-modules-umd": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+      "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-object-super": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+      "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+      "dev": true,
+      "requires": {
+        "babel-helper-replace-supers": "^6.24.1",
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-parameters": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+      "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+      "dev": true,
+      "requires": {
+        "babel-helper-call-delegate": "^6.24.1",
+        "babel-helper-get-function-arity": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-shorthand-properties": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+      "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-spread": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+      "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-sticky-regex": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+      "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+      "dev": true,
+      "requires": {
+        "babel-helper-regex": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-template-literals": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+      "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-typeof-symbol": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+      "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-unicode-regex": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+      "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+      "dev": true,
+      "requires": {
+        "babel-helper-regex": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "regexpu-core": "^2.0.0"
+      }
+    },
+    "babel-plugin-transform-exponentiation-operator": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
+      "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
+      "dev": true,
+      "requires": {
+        "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1",
+        "babel-plugin-syntax-exponentiation-operator": "^6.8.0",
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-regenerator": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+      "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+      "dev": true,
+      "requires": {
+        "regenerator-transform": "^0.10.0"
+      }
+    },
+    "babel-plugin-transform-strict-mode": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+      "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-preset-env": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz",
+      "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==",
+      "dev": true,
+      "requires": {
+        "babel-plugin-check-es2015-constants": "^6.22.0",
+        "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
+        "babel-plugin-transform-async-to-generator": "^6.22.0",
+        "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
+        "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
+        "babel-plugin-transform-es2015-block-scoping": "^6.23.0",
+        "babel-plugin-transform-es2015-classes": "^6.23.0",
+        "babel-plugin-transform-es2015-computed-properties": "^6.22.0",
+        "babel-plugin-transform-es2015-destructuring": "^6.23.0",
+        "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0",
+        "babel-plugin-transform-es2015-for-of": "^6.23.0",
+        "babel-plugin-transform-es2015-function-name": "^6.22.0",
+        "babel-plugin-transform-es2015-literals": "^6.22.0",
+        "babel-plugin-transform-es2015-modules-amd": "^6.22.0",
+        "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0",
+        "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0",
+        "babel-plugin-transform-es2015-modules-umd": "^6.23.0",
+        "babel-plugin-transform-es2015-object-super": "^6.22.0",
+        "babel-plugin-transform-es2015-parameters": "^6.23.0",
+        "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0",
+        "babel-plugin-transform-es2015-spread": "^6.22.0",
+        "babel-plugin-transform-es2015-sticky-regex": "^6.22.0",
+        "babel-plugin-transform-es2015-template-literals": "^6.22.0",
+        "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0",
+        "babel-plugin-transform-es2015-unicode-regex": "^6.22.0",
+        "babel-plugin-transform-exponentiation-operator": "^6.22.0",
+        "babel-plugin-transform-regenerator": "^6.22.0",
+        "browserslist": "^3.2.6",
+        "invariant": "^2.2.2",
+        "semver": "^5.3.0"
+      }
+    },
+    "babel-register": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+      "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+      "dev": true,
+      "requires": {
+        "babel-core": "^6.26.0",
+        "babel-runtime": "^6.26.0",
+        "core-js": "^2.5.0",
+        "home-or-tmp": "^2.0.0",
+        "lodash": "^4.17.4",
+        "mkdirp": "^0.5.1",
+        "source-map-support": "^0.4.15"
+      }
+    },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "dev": true,
+      "requires": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      }
+    },
+    "babel-template": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+      "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "babel-traverse": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "babylon": "^6.18.0",
+        "lodash": "^4.17.4"
+      }
+    },
+    "babel-traverse": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+      "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+      "dev": true,
+      "requires": {
+        "babel-code-frame": "^6.26.0",
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "babylon": "^6.18.0",
+        "debug": "^2.6.8",
+        "globals": "^9.18.0",
+        "invariant": "^2.2.2",
+        "lodash": "^4.17.4"
+      }
+    },
+    "babel-types": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+      "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "esutils": "^2.0.2",
+        "lodash": "^4.17.4",
+        "to-fast-properties": "^1.0.3"
+      }
+    },
+    "babylon": {
+      "version": "6.18.0",
+      "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+      "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+      "dev": true
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+      "dev": true
+    },
+    "big.js": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+      "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+      "dev": true
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "browserslist": {
+      "version": "3.2.8",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz",
+      "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==",
+      "dev": true,
+      "requires": {
+        "caniuse-lite": "^1.0.30000844",
+        "electron-to-chromium": "^1.3.47"
+      }
+    },
+    "caniuse-lite": {
+      "version": "1.0.30001055",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001055.tgz",
+      "integrity": "sha512-MbwsBmKrBSKIWldfdIagO5OJWZclpJtS4h0Jrk/4HFrXJxTdVdH23Fd+xCiHriVGvYcWyW8mR/CPsYajlH8Iuw==",
+      "dev": true
+    },
+    "chalk": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^2.2.1",
+        "escape-string-regexp": "^1.0.2",
+        "has-ansi": "^2.0.0",
+        "strip-ansi": "^3.0.0",
+        "supports-color": "^2.0.0"
+      }
+    },
+    "commondir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+      "dev": true
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+      "dev": true
+    },
+    "convert-source-map": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+      "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "~5.1.1"
+      }
+    },
+    "core-js": {
+      "version": "2.6.11",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
+      "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
+      "dev": true
+    },
+    "debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "requires": {
+        "ms": "2.0.0"
+      }
+    },
+    "detect-indent": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+      "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+      "dev": true,
+      "requires": {
+        "repeating": "^2.0.0"
+      }
+    },
+    "electron-to-chromium": {
+      "version": "1.3.432",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.432.tgz",
+      "integrity": "sha512-/GdNhXyLP5Yl2322CUX/+Xi8NhdHBqL6lD9VJVKjH6CjoPGakvwZ5CpKgj/oOlbzuWWjOvMjDw1bBuAIRCNTlw==",
+      "dev": true
+    },
+    "emojis-list": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+      "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+      "dev": true
+    },
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+      "dev": true
+    },
+    "esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+      "dev": true
+    },
+    "find-cache-dir": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+      "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+      "dev": true,
+      "requires": {
+        "commondir": "^1.0.1",
+        "make-dir": "^1.0.0",
+        "pkg-dir": "^2.0.0"
+      }
+    },
+    "find-up": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+      "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+      "dev": true,
+      "requires": {
+        "locate-path": "^2.0.0"
+      }
+    },
+    "globals": {
+      "version": "9.18.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+      "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+      "dev": true
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "home-or-tmp": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+      "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+      "dev": true,
+      "requires": {
+        "os-homedir": "^1.0.0",
+        "os-tmpdir": "^1.0.1"
+      }
+    },
+    "invariant": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+      "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+      "dev": true,
+      "requires": {
+        "loose-envify": "^1.0.0"
+      }
+    },
+    "is-finite": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+      "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
+      "dev": true
+    },
+    "js-tokens": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+      "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+      "dev": true
+    },
+    "jsesc": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+      "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+      "dev": true
+    },
+    "json5": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+      "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+      "dev": true
+    },
+    "loader-utils": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+      "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
+      "dev": true,
+      "requires": {
+        "big.js": "^5.2.2",
+        "emojis-list": "^3.0.0",
+        "json5": "^1.0.1"
+      },
+      "dependencies": {
+        "json5": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.0"
+          }
+        }
+      }
+    },
+    "locate-path": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+      "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+      "dev": true,
+      "requires": {
+        "p-locate": "^2.0.0",
+        "path-exists": "^3.0.0"
+      }
+    },
+    "lodash": {
+      "version": "4.17.15",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+      "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+      "dev": true
+    },
+    "loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+      "dev": true,
+      "requires": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      }
+    },
+    "make-dir": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+      "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+      "dev": true,
+      "requires": {
+        "pify": "^3.0.0"
+      }
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "dev": true,
+      "requires": {
+        "brace-expansion": "^1.1.7"
+      }
+    },
+    "minimist": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+      "dev": true
+    },
+    "mkdirp": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+      "dev": true,
+      "requires": {
+        "minimist": "^1.2.5"
+      }
+    },
+    "ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "dev": true
+    },
+    "os-homedir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+      "dev": true
+    },
+    "os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+      "dev": true
+    },
+    "p-limit": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+      "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+      "dev": true,
+      "requires": {
+        "p-try": "^1.0.0"
+      }
+    },
+    "p-locate": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+      "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+      "dev": true,
+      "requires": {
+        "p-limit": "^1.1.0"
+      }
+    },
+    "p-try": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+      "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+      "dev": true
+    },
+    "path-exists": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+      "dev": true
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "dev": true
+    },
+    "pify": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+      "dev": true
+    },
+    "pkg-dir": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+      "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+      "dev": true,
+      "requires": {
+        "find-up": "^2.1.0"
+      }
+    },
+    "private": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+      "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+      "dev": true
+    },
+    "regenerate": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+      "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+      "dev": true
+    },
+    "regenerator-runtime": {
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+      "dev": true
+    },
+    "regenerator-transform": {
+      "version": "0.10.1",
+      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+      "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.18.0",
+        "babel-types": "^6.19.0",
+        "private": "^0.1.6"
+      }
+    },
+    "regexpu-core": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+      "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+      "dev": true,
+      "requires": {
+        "regenerate": "^1.2.1",
+        "regjsgen": "^0.2.0",
+        "regjsparser": "^0.1.4"
+      }
+    },
+    "regjsgen": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+      "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+      "dev": true
+    },
+    "regjsparser": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+      "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+      "dev": true,
+      "requires": {
+        "jsesc": "~0.5.0"
+      },
+      "dependencies": {
+        "jsesc": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+          "dev": true
+        }
+      }
+    },
+    "repeating": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+      "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+      "dev": true,
+      "requires": {
+        "is-finite": "^1.0.0"
+      }
+    },
+    "safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true
+    },
+    "semver": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+      "dev": true
+    },
+    "slash": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+      "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+      "dev": true
+    },
+    "source-map": {
+      "version": "0.5.7",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+      "dev": true
+    },
+    "source-map-support": {
+      "version": "0.4.18",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+      "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+      "dev": true,
+      "requires": {
+        "source-map": "^0.5.6"
+      }
+    },
+    "strip-ansi": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "supports-color": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+      "dev": true
+    },
+    "to-fast-properties": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+      "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+      "dev": true
+    },
+    "trim-right": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+      "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+      "dev": true
+    }
+  }
+}

+ 224 - 0
pages.json

@@ -0,0 +1,224 @@
+{
+	"pages": [{
+			"path": "pages/index/index",
+			"style": {
+				"navigationBarTextStyle": "black",
+				"navigationBarTitleText": "救援者",
+				"enablePullDownRefresh": true,
+				"onReachBottomDistance": 50,
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/user/user",
+			"style": {
+				// #ifndef MP-WEIXIN
+				"navigationStyle": "custom",
+				// #endif
+				"navigationBarTitleText": "个人中心"
+			}
+		},
+		{
+			"path": "pages/public/wxLogin",
+			"style": {
+				"navigationBarTitleText": "微信登录",
+				"app-plus": {
+					"titleNView": {
+						"type": "none"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/public/login",
+			"style": {
+				"navigationBarTitleText": "登录",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/public/register",
+			"style": {
+				"navigationBarTitleText": "注册",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/rescuers/rescuers",
+			"style": {
+				// #ifndef MP-WEIXIN
+				"navigationStyle": "custom",
+				// #endif
+				"enablePullDownRefresh": true,
+				"navigationBarTitleText": "救援者注册"
+			}
+		},
+		{
+			"path": "pages/set/phone",
+			"style": {
+				"navigationBarTitleText": "手机号绑定"
+			}
+		},
+		{
+			"path": "pages/address/address",
+			"style": {
+				"navigationBarTitleText": "常用地址"
+			}
+		},
+		{
+			"path": "pages/rescuers/ToKey",
+			"style": {
+				// #ifdef MP-WEIXIN
+				"navigationStyle": "custom",
+				// #endif
+				"navigationBarTitleText": "选择机构"
+			}
+		},
+		{
+			"path": "pages/record/details",
+			"style": {
+				"navigationBarTitleText": "救援详情"
+			}
+		},
+		{
+			"path": "pages/user/about",
+			"style": {
+				"navigationBarTitleText": "关于我们"
+			}
+		},
+		{
+			"path": "pages/set/password",
+			"style": {
+				"navigationBarTitleText": "修改密码"
+			}
+		},
+		{
+			"path": "pages/public/forget",
+			"style": {
+				"navigationBarTitleText": "忘记密码",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/record/help",
+			"style": {
+				"navigationBarTitleText": "求救记录",
+				"enablePullDownRefresh": true
+			}
+		},
+		{
+			"path": "pages/record/rescue",
+			"style": {
+				"navigationBarTitleText": "救援记录",
+				"enablePullDownRefresh": true
+			}
+		},
+		{
+			"path": "pages/public/agreement",
+			"style": {
+				"navigationBarTitleText": "服务协议"
+			}
+		},
+		{
+			"path": "pages/public/privacy",
+			"style": {
+				"navigationBarTitleText": "隐私协议"
+			}
+		},
+		{
+			"path": "pages/set/set",
+			"style": {
+				"navigationBarTitleText": "设置"
+			}
+		},
+
+		{
+			"path": "pages/userinfo/userinfo",
+			"style": {
+				"navigationBarTitleText": "修改资料"
+			}
+		},
+		{
+			"path": "pages/redirect/redirect",
+			"style": {
+				"navigationBarTitleText": "微信登录跳转页面",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		}
+	],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "uni-app",
+		"navigationBarBackgroundColor": "#FFFFFF",
+		"backgroundColor": "#f8f8f8"
+	},
+	"tabBar": {
+		"color": "#C0C4CC",
+		"selectedColor": "#FF4F4F",
+		"iconWidth": "18px",
+		"borderStyle": "black",
+		"backgroundColor": "#ffffff",
+		"list": [{
+				"pagePath": "pages/index/index",
+				"iconPath": "static/tabBar/tab-home.png",
+				"selectedIconPath": "static/tabBar/tab-home-current.png",
+				"text": "SOS"
+			},
+			// {
+			// 	"pagePath": "pages/rescuers/rescuers",
+			// 	"iconPath": "static/tabBar/tab-cate.png",
+			// 	"selectedIconPath": "static/tabBar/tab-cate-current.png",
+			// 	"text": "救援注册"
+			// },
+			{
+				"pagePath": "pages/record/rescue",
+				"iconPath": "static/tabBar/tab-rescuers.png",
+				"selectedIconPath": "static/tabBar/tab-rescuers-current.png",
+				"text": "救援记录"
+			},
+			{
+				"pagePath": "pages/user/user",
+				"iconPath": "static/tabBar/tab-my.png",
+				"selectedIconPath": "static/tabBar/tab-my-current.png",
+				"text": "我的"
+			}
+		]
+	},
+	"subPackages": [{
+		"root": "pagesA",
+		"pages": [{
+			"path": "record/call",
+			"style": {
+				"app-plus": {
+					"navigationBarTitleText": "求救记录",
+					"titleNView": false
+				},
+				"usingComponents": {
+					"trtc-room": "/wxcomponents/trtc-room/trtc-room"
+				}
+			}
+		}]
+	}],
+	"preloadRule": {
+		"pages/record/rescue": {
+			"network": "all",
+			"packages": ["pagesA"]
+		}
+	}
+}

+ 153 - 0
pages/address/address.vue

@@ -0,0 +1,153 @@
+<template>
+	<view class="container">
+		<view class="row b-b" @click="getLocation">
+			<text class="tit">常用地址</text>
+			<view class="tit witch">{{ address || '请选择常用地址' }}</view>
+		</view>
+	</view>
+</template>
+<script>
+// #ifdef MP
+import { openMap } from '@/utils/rocessor.js';
+// #endif
+import { getUserInfo } from '@/api/login.js';
+import { changePoint } from '@/api/record.js';
+export default {
+	data() {
+		return {
+			address: '', //常用地址
+			commonly_lat: '',
+			commonly_lng: ''
+		};
+	},
+	onLoad() {
+		this.userinfo();
+	},
+	methods: {
+		// 获取当前位置
+		getLocation() {
+			let obj = this;
+			// #ifdef MP
+			openMap()
+				.then(() => {
+					uni.getLocation({
+						type: 'gcj02',
+						success(e) {
+							uni.chooseLocation({
+								latitude: e.latitude,
+								longitude: e.longitude,
+								success(e) {
+									obj.commonly_lat = e.latitude;
+									obj.commonly_lng = e.longitude;
+									obj.address = e.address;
+									obj.EditAddress();
+								}
+							});
+						}
+					});
+				})
+				.catch(e => {
+					uni.showModal({
+						title: '提示',
+						content: '您未授权无法调用地图定位功能!',
+						showCancel: false
+					});
+				});
+			// #endif
+		},
+		//修改地址
+		EditAddress() {
+			let obj = this;
+			changePoint({
+				commonly_lat: obj.commonly_lat,
+				commonly_lng: obj.commonly_lng,
+				commonly_address:obj.address
+			})
+				.then((data ) => {
+					console.log(data)
+					obj.$api.msg('修改成功');
+				})
+				.catch(err => {
+					obj.$api.msg(err.msg);
+				});
+		},
+		userinfo() {
+			let obj = this;
+			getUserInfo({})
+				.then(({ data }) => {
+					obj.address = data.helper_info.commonly_address;
+				})
+				.catch(err => {});
+		},
+		confirm(e) {
+			this.loding = true;
+			bangding({
+				phone: this.account,
+				captcha: this.captcha
+			})
+				.then(({ data }) => {})
+				.catch(err => {});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: $page-color-base;
+}
+.container {
+	padding-top: 30rpx;
+}
+.witch {
+	width: 75% !important;
+}
+.row {
+	display: flex;
+	align-items: center;
+	position: relative;
+	padding: 0 30rpx;
+	height: 110rpx;
+	background: #fff;
+	.tit {
+		flex-shrink: 0;
+		width: 180rpx;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.input {
+		flex: 1;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.iconlocation {
+		font-size: 36rpx;
+		color: $font-color-light;
+	}
+}
+.add-btn {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 690rpx;
+	height: 80rpx;
+	margin: 60rpx auto;
+	font-size: $font-lg;
+	color: #fff;
+	background-color: $base-color;
+	border-radius: 10rpx;
+	// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
+}
+
+.bg-gray {
+	background-color: $color-gray;
+}
+.code {
+	color: #5dbc7c;
+	font-size: 23rpx;
+	border-left: 1px solid #eeeeee;
+	width: 150rpx;
+	flex-shrink: 0;
+	text-align: center;
+}
+</style>

+ 500 - 0
pages/index/index.vue

@@ -0,0 +1,500 @@
+<template>
+	<view class="content">
+		<view id="container">
+			<map class="map-box" id="map" show-location :markers="marker" :scale='scale' :latitude="latitude" :longitude="longitude"
+			 ref="map">
+			</map>
+			<image class="icon" @click="moveToLocation" src="/static/img/img015.png"></image>
+		</view>
+		<view class="swiper-box">
+			<scroll-view class="cate-list" scroll-y @scrolltolower="loadData">
+				<view class="nodata" v-if="list.length == 0">
+					<image src="/static/img/img011.png"></image>
+					<view class="text">很抱歉,附近没有救护人员!</view>
+				</view>
+				<view v-if="list.length > 0">
+					<view v-for="(item, index) in list" :key="index" class="content-box flex">
+						<view class="list flex_item">
+							<view class="tip"></view>
+							<view class="portrait">
+								<image :src="item.avatar"></image>
+							</view>
+							<view class="info">
+								<view class="name flex_item">
+									<view class="info-name clamp">救援者{{ item.id }}</view>
+								</view>
+								<view class="address flex_item">
+									<view class="juli">{{ item.distance }}m</view>
+									<image src="../../static/img/img009.png"></image>
+								</view>
+							</view>
+							<view class="btn submit" v-if="item.helped == 0" @click="Sos(item)">
+								<image src="/static/img/img008.png"></image>
+							</view>
+							<view v-if="item.helped == 1" class="sos-type">已呼叫</view>
+						</view>
+					</view>
+					<uni-load-more :status="loadingType"></uni-load-more>
+				</view>
+			</scroll-view>
+		</view>
+		<!-- <view class="Mask" v-show="MaskShow">
+			<view class="Mask-box">
+				<view class="title">求救信息</view>
+				<textarea auto-height class="text" v-model="help_info" placeholder="请输入求救信息" />
+				<textarea class="text"auto-height  v-model="address" placeholder="请输入您的具体地址" />
+				<view class="sos" @click="help">发送求救</view>
+			</view>
+			<view class="iconimage" @click="showCancel"><image src="../../static/img/delete.png"></image></view>
+		</view> -->
+	</view>
+</template>
+<script>
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+	import {
+		saveUrl,
+		interceptor
+	} from '@/utils/loginUtils.js';
+	import empty from '@/components/empty';
+	import {
+		getAroundHelper,
+		sendSos,
+		newSos
+	} from '@/api/record.js';
+	import {
+		openMap
+	} from '@/utils/rocessor.js';
+	import {
+		getUserInfo
+	} from '@/api/login.js';
+	export default {
+		data() {
+			return {
+				userInfo: '', //用户信息
+				latitude: "",
+				address: '', //请选择您的具体地址
+				longitude: '',
+				MaskShow: false,
+				help_info: "", //求救信息
+				scale: '16', //地图缩放程度
+				marker: [],
+				list: [],
+				limit: 100, //每次加载数据条数
+				page: 1, //当前页数
+				loadingType: 'more', //加载更多状态
+				loading: 0, //判断是否为点击搜索按钮跳转加载
+				newSosList: '', //最新救援记录
+			};
+		},
+		onLoad() {},
+		computed: {
+			...mapState(['hasLogin'])
+		},
+		onShow() {
+			if (this.hasLogin == false) {
+				// 保存地址
+				saveUrl();
+				// 登录拦截
+				// interceptor();
+			} else {
+				this.getAddressLocation();
+			}
+			this.loadBaseData()
+			this.getAddressLocation();
+			this.loadData();
+			this.newSos();
+		},
+		//下拉刷新
+		// onPullDownRefresh() {
+		// 	this.page = 1
+		// 	this.loadData('refresh');
+		// },
+		methods: {
+			...mapMutations(['setUserInfo', 'logout']),
+			// 加载初始数据
+			loadBaseData() {
+				let obj = this;
+				getUserInfo({}).then(({
+					data
+				}) => {
+					obj.setUserInfo(data.user);
+				}).catch((e) => {
+					this.logout()
+					console.log(e)
+				});
+
+			},
+			//关闭弹窗
+			showCancel() {
+				this.MaskShow = false;
+			},
+			moveToLocation() {
+				this.map = uni.createMapContext('map', this)
+				this.map.moveToLocation({
+					longitude: this.longitude,
+					latitude: this.latitude,
+					success: function() {
+						console.log("成功将地图中心移到定位点")
+					}
+				})
+			},
+			loadData(type) {
+				//这里是将订单挂载到tab列表下
+				let obj = this;
+				if (type != 'refresh') {
+					console.log(obj.loadingType, '456')
+					//没有更多数据直接跳出方法
+					if (obj.loadingType === 'nomore') {
+						return;
+					} else {
+						// 设置当前为数据载入中
+						obj.loadingType = 'loading';
+					}
+				} else {
+					//当重新加载数据时更新状态为可继续添加数据
+					obj.loadingType = 'more';
+				}
+				getAroundHelper({
+						page: obj.page,
+						limit: obj.limit
+					})
+					.then(({
+						data
+					}) => {
+						if (type === 'refresh') {
+							obj.list = [];
+						}
+						let arr = data.map(e => {
+							e.distance = e.distance.toFixed(2);
+							return e;
+						});
+						obj.marker = data;
+						let key = 'latitude';
+						let ind = 'longitude';
+						obj.marker.forEach((value, index) => {
+							value['iconPath'] = '/static/img/img014.png';
+							value['width'] = '35';
+							value['height'] = '35';
+							value[key] = value['lat'];
+							value[ind] = value['lng'];
+						});
+						obj.list = obj.list.concat(arr);
+						//判断是否还有下一页,有是more  没有是nomore
+						if (obj.limit == obj.list.length) {
+							obj.page++;
+							obj.loadingType = 'more';
+						} else {
+							obj.loadingType = 'nomore';
+						}
+						// 判断是否为刷新数据
+						if (type === 'refresh') {
+							console.log('refresh')
+							// 判断是否为点击搜索按钮跳转加载
+							if (obj.loading == 1) {
+								uni.hideLoading();
+							} else {
+								uni.stopPullDownRefresh();
+							}
+						}
+					})
+					.catch(e => {
+						obj.loadingType = 'nomore';
+						// obj.$api.msg(e.message);
+						uni.hideLoading();
+					});
+			},
+			newSos() {
+				let obj = this;
+				newSos({}).then((data) => {
+					obj.newSosList = data.data;
+					if (obj.newSosList == null) {
+						console.log("暂无救援记录")
+					} else {
+						uni.showModal({
+							title: '提示',
+							content: '您有一条救援信息,点击查看',
+							success: function(res) {
+								if (res.confirm) {
+									uni.switchTab({
+										url: '/pages/record/rescue'
+									})
+								} else if (res.cancel) {
+									console.log('用户点击取消');
+								}
+							}
+						});
+					}
+				}).catch((e) => {
+					console.log(e.message)
+				});
+			},
+			//发送求救信号
+			Sos(item) {
+				let obj = this;
+				sendSos({
+					id: item.id,
+				}).then((data) => {
+					obj.$api.msg(data.msg);
+					obj.page = 1
+					obj.loadData('refresh');
+				}).catch((e) => {
+					obj.$api.msg(e.message);
+					obj.page = 1
+					obj.loadData('refresh');
+				});
+			},
+			// 获取地址
+			getAddressLocation() {
+				let obj = this;
+				uni.getLocation({
+					type: 'gcj02',
+					success(e) {
+						obj.latitude = e.latitude;
+						obj.longitude = e.longitude;
+						uni.setStorageSync('Lat', e.latitude);
+						uni.setStorageSync('Lng', e.longitude);
+						obj.loadData('refresh');
+					},
+					fail(e) {
+						obj.getLocation();
+					}
+				});
+
+			},
+			// 获取当前位置
+			getLocation() {
+				let obj = this;
+				openMap().then(() => {
+						obj.getAddressLocation();
+					})
+					.catch(e => {
+						console.log('到这里')
+						obj.latitude = Math.abs(28.372975)
+						obj.longitude = Math.abs(121.385322)
+						// obj.latitude = e.latitude;
+						// obj.longitude = e.longitude;
+						uni.setStorageSync('Lat', 28.372975);
+						uni.setStorageSync('Lng', 121.385322);
+						obj.loadData('refresh');
+						// uni.showModal({
+						// 	title: '提示',
+						// 	content: '您未授权无法调用地图定位功能!',
+						// 	showCancel: false,
+						// 	success() {
+						// 		obj.getLocation()
+						// 	}
+						// });
+						
+					});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		background: #ffffff;
+		height: 100%;
+	}
+
+	.Mask {
+		position: fixed;
+		top: 0;
+		width: 100%;
+		height: 100%;
+		background-color: rgba(51, 51, 51, 0.7);
+
+		.Mask-box {
+			text-align: center;
+			margin: auto;
+			margin-top: 200rpx;
+			padding: 50rpx 50rpx;
+			width: 80%;
+			height: auto;
+			left: 10%;
+			background-color: #ffffff;
+			border-radius: 15rpx;
+			z-index: 999;
+
+			.title {
+				font-size: 35rpx;
+				font-weight: 700;
+			}
+
+			.text {
+				min-height: 120rpx;
+				font-size: 30rpx;
+				color: #848484;
+				padding-top: 50rpx;
+				border: 2rpx solid #F3F3F3;
+				text-align: left !important;
+				padding: 25rpx 25rpx;
+				border-radius: 10rpx;
+				margin: 50rpx 0rpx;
+				width: 100%;
+			}
+
+			.sos {
+				background: linear-gradient(90deg, rgba(255, 102, 102, 1), rgba(255, 79, 79, 1));
+				width: 65%;
+				margin: 0rpx auto;
+				font-size: 30rpx;
+				padding: 25rpx 25rpx;
+				color: #ffffff;
+				border-radius: 50rpx;
+				border: none;
+			}
+		}
+
+		.iconimage {
+			text-align: center;
+			margin-top: 60rpx;
+
+			image {
+				width: 80rpx;
+				height: 80rpx;
+			}
+		}
+	}
+
+	.content {
+		height: 100%;
+	}
+
+	.icon {
+		position: fixed;
+		top: 390rpx;
+		right: 35rpx;
+		width: 100rpx;
+		height: 100rpx;
+	}
+
+	.map-box {
+		width: 100%;
+		height: 700rpx;
+	}
+
+	.nodata {
+		width: 430rpx;
+		margin: 0rpx auto;
+		padding-top: 80rpx;
+
+		image {
+			width: 430rpx;
+			height: 337rpx;
+		}
+
+		.text {
+			text-align: center;
+			color: #999999;
+			font-size: 26rpx;
+		}
+	}
+
+	.swiper-box {
+		position: fixed;
+		bottom: 0rpx;
+		height: 50%;
+		width: 100%;
+		background-color: #ffffff;
+		border-top-left-radius: 25rpx;
+		border-top-right-radius: 25rpx;
+		box-shadow: 0px -11px 42px 4px rgba(83, 87, 120, 0.2);
+
+		.cate-list {
+			height: 100%;
+		}
+	}
+
+	.content-box {
+		padding: 0rpx 30rpx;
+		font-size: 24rpx;
+		color: #666666;
+		width: 100%;
+
+		.list {
+			padding: 25rpx 0rpx;
+			margin-top: 25rpx;
+			border-bottom: 2rpx solid #e7e8ea;
+			width: 100%;
+			position: relative;
+
+			.tip {
+				background-color: #ff4f4f;
+				border-radius: 100rpx;
+				width: 10rpx;
+				height: 35rpx;
+				position: absolute;
+				top: 0;
+			}
+
+			.portrait {
+				margin-left: 20rpx;
+				width: 117rpx;
+				height: 117rpx;
+
+				image {
+					width: 100%;
+					height: 100%;
+					border-radius: 15rpx;
+				}
+			}
+
+			.sos-type {
+				color: #FF4F4F;
+				font-weight: bold;
+				font-size: 28rpx;
+			}
+
+			.info {
+				margin-left: 20rpx;
+				width: 60%;
+
+				.name {
+					color: #333333;
+					font-weight: bold;
+					font-size: 32rpx;
+
+					.info-name {
+						margin-right: 35rpx;
+						width: 90%;
+					}
+				}
+
+				.address {
+					margin-top: 15rpx;
+
+					.juli {
+						font-weight: normal;
+						font-size: 28rpx;
+					}
+
+					image {
+						margin-left: 15rpx;
+						width: 25rpx;
+						height: 30rpx;
+					}
+				}
+
+				.adr {
+					color: #333333;
+					margin-top: 15rpx;
+				}
+			}
+
+			.btn {
+				width: 130rpx;
+				height: 130rpx;
+
+				image {
+					width: 127rpx;
+					height: 135rpx;
+				}
+			}
+		}
+	}
+</style>

+ 602 - 0
pages/public/agreement.vue

@@ -0,0 +1,602 @@
+<template>
+	<view class="container">
+		<view class="title-name">美天选菜服务协议</view>
+		<view class="title right">更新日期: 2020年01月17日</view>
+		<view class="indent">
+			欢迎您使用“美天选菜"小程序,在您使用“美天选菜"小程序前,您须仔细阅读、理解《美天选菜服务协议》(以下简称"本协议")内容。一经您选择接受该协议或使用“美天选菜 "小程序,即视为您已经阅读、理解协议内容,并同意与台州亿维缘贸易有限公司(以下简称"亿维缘") 就您使用亿维缘向您提供的“美天选菜”小程序服务缔结合约。您在使用美天选菜过程中,应严格遵守本协议相应约定。如您没有阅读、理解并接受本协议所有条款,请您不要继续使用美天选菜提供的服务,您使用"美天选菜"小程序提供的服务,即视为您已阅读、理解并同意本协议的约束。</br>
+			
+		如果您未满18周岁,请在法定监护人的陪同下阅读本协议。
+		</view>
+		<view class="title name">一、协议的订立</view>
+		<view class="title">
+			1.1本协议,指本协议正文、美天选菜买菜的平台规则、其修订版本等所列明的所有规则性文件、通知或其他公示内容。上述内容一 经正式发布, 即为本协议不可分割的组成部分。如您不接受本协议的全部或部分条款,请您不要使用、登录“美天选菜",并立即予以注销或卸载。
+		</view>
+		<view class="title">
+			 1.2本协议各条的标题仅为方便阅读而设,不影响本协议的含义或解释。
+		</view>
+		<view class="title name">二、协议的生效与变更</view>
+		<view class="title">
+			 2.1美天选菜有权在必要时修改本协议条款并及时更新公示,经修订的协议将根据法律法规的规定提前在"美天选菜"小程序及相关渠道中予以公示,公示期满后自动生效。您可以在“美天选菜"小程序中随时查阅最新版本的协议条款。
+		</view>
+		<view class="title">
+			2.2本协议条款变更且生效后,如果您继续使用美天选菜提供的服务,即视为您已接受并愿意遵守修改后的协议。如果您不接受修改后的协议,应停止使用并卸载"美天选菜"小程序。
+		</view>
+		<view class="title name">三、定义和解释</view>
+		<view class="title">
+			 3.1美天选菜:指由亿维缘提供技术支持和服务,并负责运营的生活服务类手机微信小程序。随着美天选菜服务范围或服务项目的变更,美天选菜可能在平台规则或公告中对美天选菜的相关调整予以声明。
+		</view>
+		<view class="title">
+			  3.2平台规则:指在美天选菜上已经发布或将来可能发布的各种规范性文件,包括但不限于细则、规范、政策、通知、公告等规范性文件,所有规范性文件为协议不可分割的一部分,与协议正文具有同等法律效力。
+		</view>
+		<view class="title">
+			 3.3平台服务:指亿维缘依托美天选菜小程序向用户提供的网络空间、技术支持、相关的软件服务、系统维护,以及同意向用户提供的各项附属功能、增值服务等,具体服务内容及功能以“美天选菜"小程序显示功能为准。
+		</view>
+		<view class="title">
+			 3.4用户:指使用“美天选菜"小程序的自然人、法人或其他组织,本协议中又称“您"。用户首次注册成功即为新用户。
+		</view>
+		<view class="title">
+			 3.5商品:系指美天选菜通过软件或其他渠道,为用户提供的可供选购的商品(含服务)。
+		</view>
+		<view class="title">
+			  3.6账号:指用户所拥有的经亿维缘认可,可以登录“美天选菜"小程序的一一个合法获得并持有的服务账号。该账号形式可能是在美天选菜注册所获得的账号、手机号、电子邮箱等亿维缘支持的账号形式。该账户是您在使用美天选菜服务时的重要身份标识,您应当妥善保管。
+		</view>
+		<view class="title">
+			   3.7互联网支付服务:指具有互联网支付合法资质的第三方支付机构为用户完成交易、转移资金提供的支付服务,详情见该第三方支付机构通过用户与其所签订的约定其所提供支付服务的协议、公司网站、电子邮件或其他形式所公布的相关规则及说明。
+		</view>
+		<view class="title">
+			3.8关联公司:本协议所称一方的“关联公司”是指由一方直接控制或间接控制;或直接或间接控制一方;或与一方共同控制同一家公司或能对其施加重大影响;或与一方受同一家公司直接或间接控制的公司。包括但不限于一方的母公司、子公司;与-方受同一母公司控制的子公司; 一方的合营企业、联营企业等。“控制”是指直接或间接地拥有影响所提及公司管理的能力,无论是通过所有权、有投票权的股份、合同或其他被人民法院认定的方式。
+		</view>
+		<view class="title name">四、帐户注册和注销</view>
+		<view class="title">4.1账户注册</view>
+		<view class="title soujin">
+			4.1.1用户使用“美天选菜"小程序应具备完全民事行为能力,若用户不具备前述资格,用户的监护人应承担一切后果,且亿维缘有权注销或永久冻结该用户账号,“				美天选菜”有权就由此造成任何损失主张赔偿。
+		</view>
+		<view class="title soujin">
+			4.1.2用户使用“美天选菜”小程序,必须拥有经亿维缘认可的、可登录“美天选菜"小程序的、一个合法获得并持有的服务账号;用户对前述账号的申请、使用等行为应符合本协议及注册该账号时与相应的第三方账号服务提供者所签订的注册协议、服务协议以及其他有关规则。用户应自行确保上述账号及其密码的安全,并对利用上述账号及其密码所进行的一切行为负完全责任。
+		</view>
+		<view class="title soujin">
+		4.1.3用户标识或账户中设置和使用的昵称、头像等不得违反国家法律法规、公序良俗,否则壹佰米可注销您的账号。
+		</view>
+		<view class="title soujin">
+		 4.1.4原则.上您只能注册一个账号,严禁同- -用户注册多个账号,若有违反,“美天选菜”有权取消交易并停止向该用户提供服务,用户因此获取的利益须退还。虽有多个注册账号但经平台判断,存在相同注册电话号码、收货电话号码、支付账号、应用设备、2人次以上收货地址等情况的,将视为同一用户,平台将不会发放相关优惠福利等,如已发放,平台有权做无效处理。
+		</view>
+		<view class="title">4.2账户注销</view>
+		<view class="title soujin">
+		 4.2.1您可自行按照页面操作提示注销自有账户,提交账户注销申请前,请务必确认该账户无未完结订单及未消费资产等权益,否则,亿维缘将视为您对该权益做出放弃处分,账户内未消费余额、卡券等将做清零处理。
+		</view>
+		<view class="title soujin">
+		4.2.2账户注销后,亿维缘将删除您的个人信息或对其进行匿名化处理。
+		</view>
+		<view class="title soujin">
+		 4.2.3若您注销账户后使用相同手机号码再次注册,系统将不再判定您为新用户,故将无法享受相应新用户权益。
+		</view>
+		<view class="title">  4.3您理解并同意,若您的行为违反有关法律、本协议相关规定或滥用用户权利的,您的用户资格和账号可能被注销、暂时冻结或永久冻结;使亿维缘遭受任何损失、受到任何第三方的索赔、或任何行政管理部门的处罚的,用户应对亿维缘提供补偿,包括合理的维权费用。</view>
+		<view class="title">4.4您理解并同意,您下载美天选菜小程序不视为美天选菜.必须按照您的要求出售商品,诗词啊有权按照商品库存状况及本协议约定等因素评估是否接受您的购买要约。</view>
+		<view class="title">
+			 4.5您理解并同意,诗词啊有权基于运营情况设定或调整软件界面、功能等,如您在使用过程中需要操作指引,可通过客服服务获取帮助。
+		</view>
+		<view class="title">
+		 4.6您理解并同意,美天选菜有权基于您已有的消费评价、投诉等实际行为判断您是否不认可本协议约定内容、平台公示规则等展现的美天选菜的服务内容和方式,如确认属实,美天选菜有权选择提示您或终止对您提供服务。
+		</view>
+		<view class="title name">五、用户信息收集、使用和保护</view>
+		<view class="title">
+		  5.1用户在使用“美天选菜"小程序时需要根据要求披露- -些信息,包括但不限于您选择接受服务的社区地址、联系电话、收货地址等,及根据第三方支付机构的要求为享受互联网支付服务而需要提供的- -些必要信息,这些信息包括但不限于:真实姓名或名称、联系地址、邮箱和联系电话等。您应保证这些信息在提供时是真实、准确、有效且完整的,且应及时根据实际情况或者美天选菜的要求更新这些信息。由于信息披露不完整、不真实.或者信息更新不及时导致您在享受平台服务时受到限制或损失的,应由您独立承担责任。除了必要信息外,您也有权自行决定披露一些其他信息。
+		</view>
+		<view class="title">
+		 5.2您授权“美天选菜"小程序收集您的用户信息,这些信息可能包括注册信息或企业主体资质信息、产品信息和交易信息以及您的地理位置等,“美天选菜"小虎层序对用户信息的收集将遵循相关法律的规定。您同时授权“美天选菜”小程序和亿维缘全国通用(在法律许可范围内)的、免费的许可使用权利(并有权对该权利再授权), 使“美天选菜”小程序和亿维缘有权(全部或部分地)使用、复制、修订、改写、发布、翻译、发布、执行和展示您所公示于美天选菜的各类信息(不包括您的个人身份信息)或制作其派生作品,和/或以现在已知或日后开发的任何形式、媒体或技术,将上述您所公示的各类信息纳入其他作品内。
+		</view>
+		<view class="title">
+		5.3亿维缘将采取适当措施,根据相关法律的要求,对用户信息提供充分的信息安全保障。用户应妥善保管、使用其用户信息,包括账号号码及其验证码、与交易有关的支付账号及密码、联系方式、地址等信息,因上述信息泄露而导致您的任何损失,包括使用美天选菜的任何第三方应用软件造成信息泄露而导致您的任何损失,由您独立承担责任。如您泄露上述任何信息,您还应及时将泄露的情况以有效方式立即通知美天选菜,以便美天选菜在合理时间内采取措施防止损失继续扩大,但美天选菜对采取措施前已经产生的后果不承担任何责任。
+		</view>
+		<view class="title">
+		 5.4亿维缘不对外公开或向任何第三方提供您的个人信息,但存在下列情形之一的除外:
+		</view>
+		<view class="title soujin">
+		5.4.1公开或提供相关信息之前获得您许可的;
+		</view>
+		<view class="title soujin">
+		5.4.2根据法律或政策的规定而公开或提供的;
+		</view>
+		<view class="title soujin">
+		  5.4.3只有公开或提供您的个人信息,才能提供您所需的商品的;
+		</view>
+		<view class="title soujin">
+		  5.4.4只有公开或提供您的个人信息,才能提供您需要的美天选菜服务的;
+		</view>
+		<view class="title soujin">
+		  5.4.5根据国家权力机关要求公开或提供的;
+		</view>
+		<view class="title soujin">
+		  5. 4.6根据本协议其他条款约定而公开或提供的。
+		</view>
+		<view class="title">
+		  5.5为了向您提供更优质的美天选菜服务,提升购物体验,您同意美天选菜可将您的个人信息提供给美天选菜的关联公司。
+		</view>
+		<view class="title">
+		  5.6您理解并认同,在平台方发生并购等情况时,平台方可能会向第三方出售或转让美天选菜买菜。在该等交易中,作为美天选菜不可分割的一部分,您的用户信息也可能将被转让给该第三方,以使该第三方可以继续为您提供服务。
+		</view>
+		<view class="title">
+		 5.7关于美天选菜收集、使用、共享您个人信息的详细情况,您可以查看《美天选菜买菜隐私权政策》。
+		</view>
+		<view class="title name">六、商品订单</view>
+		<view class="title">
+		6.1在您下订单时,请您仔细确认所购商品的名称、价格、数量、规格、重量、联系地址、电话、收货人等信息。收货人与用户本人不一致的,收货人的行为和意思表示视为用户的行为和意思表示,用户应对收货人的行为及意思表示的法律后果承担连带责任。
+		</view>
+		<view class="title">
+		 6.2除法律另有强制性规定外,双方约定如下:本站上展示的商品和价格等信息仅仅是要约邀请,您下单时须选择或填写您希望购买的商品数量、价款及支付方式、收货人、联系方式、收货地址(合同履行地点)、合同履行方式等内容;系统生成的订单信息是计算机信息系统根据您填写的内容自动生成的数据,仅是您向销售方发出的合同要约;只有在您完成支付后双方建立合同关系;您可以随时登录您在“美天选菜"小程序注册的账号,查询您的订单信息。
+		</view>
+		<view class="title">
+		  6.3由于市场变化及各种以合理商业努力难以控制的因素的影响,美天选菜无法保证您提交的订单信息中希望购买的商品都会有货;如您拟购买的商品,全部发生缺货,我们有权取消您的订单,但我们会及时通知您。
+		</view>
+		<view class="title">
+		  6.4蔬菜、瓜果、蛋禽肉类、粮油、豆类制品等散装商品,因商品特征以及现有科技水平限制,无法与您实际下单重量达成完全一致,会存在微小误差,因此,以"美天选菜"实际向您配送的您所下单商品的实际重量为准,与您结算。即,如您实际收到的下单商品重量超过您下单时选择的重量的,则亿维缘按照您下单时选择的重量与您结算;如您实际收到的下单商品重量少于您下单时选择的重量的,则亿维缘将按照您实际收到的下单商品的重量与您结算,亿维缘将差价退还到您的付款账户中,但退款的具体到账时间,以第三方支付平台(微信支付、支付宝、银行等)退款流程规定为准。
+		</view>
+		<view class="title name">七、商品配送</view>
+		<view class="title">
+		 7.1“美天选菜”可能为向您提供的送货服务收取一定的服务费用,具体金额以您下单时系统显示的费用为准,您知悉并授权美天选菜向卖家取货并将商品送到您所指定的收货地址。
+		</view>
+		<view class="title">
+		   7.2所有在本平台上列出的送货时间为参考时间,参考时间的计算是根据库存状况、正常的处理过程和送货时间、送货地点的基础.上估计得出的,具体送达时间以实际为准。
+		</view>
+		<view class="title">
+		 7.3您理解并同意,美天选菜对部分散装商品,如蔬菜、水果等包装仅能采用简易包装配送,商品相关信息您可参照下单时的页面商品介绍。
+		</view>
+		<view class="title">
+		 7.4因如下情况造成配送延迟、无法配送或丢失等,“美天选菜"不承担责任:
+		</view>
+		<view class="title soujin">
+		  7.4.1用户提供的信息错误、地址不详细等原因导致的;
+		</view>
+		<view class="title soujin">
+		7.4.2商品送达后无人签收,导致无法配送或延迟配送的;
+		</view>
+		<view class="title soujin">
+		   7.4.3用户拒收的;
+		</view>
+		<view class="title soujin">
+		   7.4.4根据用户指示,商品放置于其他代收地点或室外地点的;
+		</view>
+		<view class="title soujin">
+		   7 4.5不可抗力因素导致的,例如:自然灾害、交通戒严、交通管制、罢工等。
+		</view>
+		<view class="title name"> 八、商品退换与赔偿</view>
+		<view class="title">
+		 8.1非生鲜类商品退换货原则:自订单完成之日起7日内,如符合以下条件,我们将提供退换货服务:
+		</view>
+		<view class="title soujin">
+		     8.1.1商品无损坏、无缺少,不影响二次销售;
+		</view>
+		<view class="title soujin">
+		    8.1.2若您购买的商品有赠品,办理退换货时,须同时将赠品全部退回。
+		</view>
+		<view class="title">
+		  8.2生鲜、乳品类商品退换货规则</br>
+		</view>
+		<view class="title soujin">
+		   生鲜产品(包括但不限于蔬菜水果、鲜蛋肉禽、水产海鲜、乳制品等鲜活易腐产品)因时效性较强,请在送达时及时验货,若发现质量及相关问题,应于收到商品24小时内提出退换货申请,我们会及时为您处理。
+		</view>
+		<view class="title">
+		8.3 退换货注意事项
+		</view>
+		<view class="title soujin">
+		    8.3.1 小程序申请退换货时,需要您根据商品的实际情况填写正确的描述信息、上传图片 并保留商品及小票,如有必要,我们将取回商品
+		</view>
+		<view class="title soujin">
+		    8.3.2如商品赠品未退回,则商品无法全额退款。
+		</view>
+		<view class="title soujin">
+		    8.3.3如您在支付商品价款时使用优惠券冲抵现金的,退款金额= (1-优惠 券金额/优惠券涉及的商品购买金额) *退款金额,此部分退款金额不做现金返还。
+		</view>
+		<view class="title">
+		8.4退换货例外情形:属于以下情形之一的,非质量问题不支持无理由申请退换货:
+		</view>
+		<view class="title soujin">
+		     8.4.1参加限时抢购、特价促销、预售的商品;
+		</view>
+		<view class="title soujin">
+		     8.4.2任何因用户保管储藏导致出现质量问题的商品;
+		</view>
+		<view class="title soujin">
+		  8.4.3因实物与网站图片存在色差的;
+		</view>
+		<view class="title soujin">
+		  8.4.4已宰杀的鱼类及其他水产产品;
+		</view>
+		<view class="title soujin">
+		   8.4.5用户选择削皮或其他简单加工措施的水果、蔬菜; 
+		</view>
+		<view class="title soujin">
+		  8.4.6用户仅主张口感存在差异的商品;
+		</view>
+		<view class="title soujin">
+		8.4.7用户已使用或损坏等影响二次销售的商品。.
+		</view>
+		<view class="title name"> 九、积分及优惠券</view>
+		<view class="title">
+		 9.1积分获取
+		</view>
+		<view class="title soujin">
+		  9.1.1购物回馈、延迟送达补偿等,具体以美天选菜相关页面公布的规则为准。
+		</view>
+		<view class="title">
+		9.2积分消费
+		</view>
+		<view class="title soujin">
+		 	在满足要求的情况下,用户可以使用积分抵扣订单金额,具体以美天选菜相关页面公布的规则为准。
+		</view>
+		<view class="title">
+		9.3积分清除
+		</view>
+		<view class="title soujin">
+		 9.3.1积分仅在有效期内可以使用,具体以美天选菜相关页面公布的规则为准。
+		</view>
+		<view class="title soujin">
+		  9.3.2美天选菜依法或依据本协议约定及相关页面公布的规则之规定终止对您提供服务,账户内积分将作清除;
+		</view>
+		<view class="title soujin">
+		9.3.3同一-用户存在多个账户恶意获取优惠的,美天选菜将清除拟注销账户内积分。
+		</view>
+		<view class="title">
+		9.4优惠券获取方式
+		</view>
+		<view class="title soujin">
+		  9.4.1美天选菜基于活动的免费推送;
+		</view>
+		<view class="title soujin">
+		  9.4.2美天选菜在投诉处理中基于双方协商所做补偿;
+		</view>
+		<view class="title soujin">
+		 9.4.3您的消费或其他行为符合某一优惠券获取条件。优惠券不可兑换现金、不产生孳息。
+		</view>
+		<view class="title">
+		 9.5优惠券使用您可在账户中随时查看优惠券的数量及消费情况、优惠券的使用规则及有效期。
+		</view>
+		<view class="title">
+		9.6优惠券清除
+		</view>
+		<view class="title soujin">
+		9.6.1美天选菜依法或依据本协议规定终止对您提供服务,账户内优惠券将作清除;
+		</view>
+		<view class="title soujin">
+		 9.6.2同一用户存在多个账户恶意获取优惠的,美天选菜将清除拟注销账户内优惠券。
+		</view>
+		<view class="title name">十、用户行为规范</view>
+		<view class="title">
+		10.1遵守法律法规、社会公德及本协议
+		</view>
+		<view class="title soujin">
+		 您在使用“美天选菜”服务中的所有行为应遵守国家法律、法规、规章、规范性文件等规定(如卖家从海外进口商品的,其还应遵守国家海关、检验检疫、外汇管理等进出口相关法律规定)及本协议的规定和要求,不违背社会公德,不损害国家或者任何第三人的任何合法权益。否则,产生的一切法律后果均由您独立承担,并应确保美天选菜免于承担任何责任。
+		</view>
+		<view class="title">
+		10.2您应避免因使用美天选菜服务而使美天选菜卷入政治和公共事件,否则美天选菜有权暂停或终止对您的服务。
+		</view>
+		<view class="title">
+		10.3遵守规则及相应流程要求
+		</view>
+		<view class="title soujin">
+		 您使用“美天选菜"小程序的所有行为应遵守美天选菜买菜所实时公布的平台规则;如您需要开通、申请或使用"美天选菜”小程序所公示提供的不同服务或为取得该种服务的相应资格(具体以公示的规则为准), 您应依据"美天选菜"小程序所公示的相应具体规则及流程要求完成相应资格的认证与申请,提供开通相应服务所必须的相应资料和信息并保证该等信息的真实和准确;您应与壹佰米签订协议(如需要),并严格履行该等协议;您使用该等服务的具体内容以相应协议约定及平台规则规定为准。
+		</view>
+		<view class="title">
+		10.4您在使用“美天选菜"小程序的所有行为应遵守诚信原则,不得实施以下任一行为:
+		</view>
+		<view class="title soujin">
+		10.4.2通过发送病毒、木马等行为攻击其他用户的账号或机器;
+		</view>
+		<view class="title soujin">
+		 10.4.1发送钓鱼链接给其他用户;
+		</view>
+		<view class="title soujin">
+		  10.4.3冒充"美天选菜买菜”工作人员欺骗其他用户;
+		</view>
+		<view class="title soujin">
+		 10.4.4累计两次以上购买商品下单后无正当理由拒不收货、恶意捉弄工作人员,例如多次调整送达时间、送达地点等;
+		</view>
+		<view class="title soujin">
+		 10.4. 5违反银行卡管理规则实施套现;
+		</view>
+		<view class="title soujin">
+		10.4.6通过留言、评价等手段发送违规或垃圾信息或有诋毁"美天选菜”之行为;
+		</view>
+		<view class="title soujin">
+		 10.4.7谋取、协助谋取不正当利益;
+		</view>
+		<view class="title soujin">
+		10.4.8恶意刷券行为;
+		</view>
+		<view class="title soujin">
+		 10.4.9平台规则规定的其他不当行为;
+		</view>
+		<view class="title soujin">
+		 10.4.10其他有损平台正常运行或有损壹佰米权益的行为。
+		</view>
+		<view class="title">
+		 10.5禁止不当评价
+		</view>
+		<view class="title soujin">
+		 您不得以虚构或歪曲事实的方式不当评价其他用户,不得以不正当手段,包括虚假交易、互换好评等手段提高或降低自身或其他用户信用度。
+		</view>
+		<view class="title soujin">
+		您不得发布国家法律法规、本协议及其平台规则所禁止发布的商品信息,也不得发布任何涉嫌侵犯他人知识产权等合法权益的商品信息。
+		</view>
+		<view class="title">
+		 10.7您不得以任何方式危害“美天选菜”的正常交易,包括不得实施如下任一行为:
+		</view>
+		<view class="title soujin">
+		 10.7.1 以任何机器人软件、蜘蛛软件、爬虫软件、刷屏软件等非亿维缘认可的方式访问或登录"美天选菜"小程序;
+		</view>
+		<view class="title soujin">
+		10.7.2通过任何方式对“美天选菜小程序造成或可能造成不合理或不合比例的重大负荷;
+		</view>
+		<view class="title soujin">
+		 10.7.3通过任何方式干扰或试图干扰“美天选菜"小程序的正常运行。
+		</view>
+		<view class="title">
+		 10.7您不得以任何方式危害“美天选菜”的正常交易,包括不得实施如下任一行为:
+		</view>
+		<view class="title">
+		  10.8同意接收广告、营销信息
+		</view>
+		<view class="title soujin">
+		 您同意接收来自美天选菜的信息,包括但不限于营销活动信息、商品交易信息、促销信息等。为使您及时了解丰富的商品信息,提升服务体验,美天选菜或其合作的第三方可以在法律法规允许的范围内,通过短信、电话、邮件等各种方式向您提供前述信息。
+		</view>
+		<view class="title soujin">
+		10.9.1您应自行承担因交易产生的相关费用,并依法纳税。您应自行配备上网的所需设备,包括个人手机、调制解调器或其他必备上网装置,并自行负担个人上网所支付的与此服务有关的电话费用、网络费用。
+		</view>
+		<view class="title soujin">
+		10.9.2美天选菜的服务大部分是免费提供的,但可能会有部分服务是以收费方式提供的,如您使用收费服务,请遵守美天选菜服务相关的规则。美天选菜可能根据实际需要对收费服务的收费标准、方式进行修改,美天选菜也可能会对部分免费服务开始收费。前述修改或开始收费前,美天选菜将在相应服务页面进行通知或公告。如果您不同意上述修改或收费内容,则应立即停止使用该服务。
+		</view>
+		<view class="title">
+		10.10享受美天选菜服务
+		</view>
+		<view class="title soujin">
+		  您享受美天选菜服务时,应遵守法律法规及本协议约定,该服务内容可能包括在美天选菜上发布、浏览、查询商品信息,进行商品交易,发表评价等,具体以“美天选菜”提供的为准。
+		</view>
+		<view class="title">
+		10.11您有责任自行备份存储在使用美天选菜服务中产生的数据和信息。
+		</view>
+		<view class="title name">十一、美天选菜的权利和义务</view>
+		<view class="title">
+		 11.1美天选菜有义务在现有技术水平条件下,努力使整个美天选菜正常运行,尽力避免美天选菜服务中断或将中断时间限制在最短时间内,以保证用户正常使用服务。
+		</view>
+		<view class="title">
+		11.2用户已充分知悉和理解,因网上交易平台的特殊性,美天选菜没有义务对所有用户使用美天选菜服务的过程及行为进行事前及实时审查。但用户发生以下情形之一的,美天选菜可以普通、非专业人员的知识水平标准或根据自己掌握的信息进行独立判断,美天选菜有权采取包括但不限于限制用户登录、要求用户提供有关资料、发出警告通知、删除相关信息、中止或终止向用户提供美天选菜买菜服务、以网络公告等形式公布用户违法违约行为或依据平台规则对于违约用户进行的其他违规处理:
+		</view>
+		<view class="title soujin">
+		 11.2.1 用户违反国家法律、法规、规章及规范性文件的;
+		</view>
+		<view class="title soujin">
+		  11.2.2用户违反本协议或任何平台规则的;
+		</view>
+		<view class="title soujin">
+		11.2.3用户侵犯第三方合法权益的;
+		</view>
+		<view class="title soujin">
+		11.2. 4恶意获取用户福利的。
+		</view>
+		<view class="title">
+		 11.3用户不得发布下列任何信息,否则,美天选菜可在不通知用户的情况下对其采取删除、屏蔽、断开链接或依据平台规则对于违约用户进行其他的违规处理:
+		</view>
+		<view class="title soujin">
+		11.3.1恶意欺诈信息;
+		</view>
+		<view class="title soujin">
+		 11.3.2与商品交易无关的信息;
+		</view>
+		<view class="title soujin">
+		11.3.3不以商品交易为目的的信息;
+		</view>
+		<view class="title soujin">
+		11.3.4存在恶意评价信息;
+		</view>
+		<view class="title soujin">
+		11.3.5试图或已经扰乱正常交易秩序的信息;
+		</view>
+		<view class="title soujin">
+		11.3.6违反国家法律、危害国家安全统一、社会稳定、公序良俗,侮辱、诽谤、淫秽、暴力的,以及任何违反国家法律法规的信息;
+		</view>
+		<view class="title soujin">
+		11.3.7侵害他人知识产权、商业秘密等合法权益的信息;
+		</view>
+		<view class="title">
+		 11.3.8虚构事实、误导、欺骗他人的信息;
+		</view>
+		<view class="title">
+		 11.3.9发布、传送、传播广告信息及垃圾信息。
+		</view>
+		<view class="title">
+		  11.4用户知悉并同意,当国家行政、司法机关主动依职权或者根据他人的投诉调查用户在美天选菜买菜上的相关行为时,美天选菜有权予以配合,并将所掌握的信息提供给上述国家机关。
+		</view>
+		<view class="title">
+		 11.5用户知悉并同意,用户不得利用美天选菜服务实施侵犯他人知识产权及其他合法权益的行为,如美天选菜接到第三方投诉称用户侵权的,为防止侵权行为的继续扩大和及时解决纠纷,美天选菜除依本协议规定采取措施外,美天选菜还可以将用户的相关信息提供给投诉人。
+		</view>
+		<view class="title">
+		11.6对违反法律法规或本协议条款及其他严重影响平台运营效率和秩序的行为,美天选菜有权随时终止对该用户提供服务,同时美天选菜有权对新账户注册申请进行评估,如确认为同一用户的,有权对该账户注册申请不予通过。
+		</view>
+		<view class="title name">十二、特别授权</view>
+		<view class="title">
+		   12.1您完全理解并不可撤销地授权美天选菜或美天选菜授权的第三方(如有),根据本协议及平台规则的规定,处理您在美天选菜上发生的所有交易及交易纠纷。您同意美天选菜或美天选菜菜授权的第三方(如有)对您在美天选菜上的行为的判断和相应处理决定对您具有约束力。
+		</view>
+		<view class="title">
+		   12.2美天选菜有权以任何方式通知第三方支付机构及美天选菜的任何关联公司,针对您违反本协议或平台规则的行为,对您的权益采取限制措施或给予相应违规处理,包括但不限于通知第三方支付机构将您支付账号中的款项支付给美天选菜指定的用户或第三方,要求第三方支付机构和美天选菜的关联公司中止、终止对您提供服务,并对您提供美天选菜服务的目的而收集、使用、存储您的用户信息。
+		</view>
+		<view class="title name">十三、责任限制</view>
+		<view class="title">
+		13.1您理解并同意,美天选菜会在现有技术水平和条件下尽最大努力向您提供服务,确保服务的连贯性和安全性;但美天选菜不能随时预见和防范法律、技术以及其他风险,包括但不限于不可抗力,大规模的病毒、木马和黑客攻击,系统不稳定,第三方服务瑕疵,政府管制等原因可能导致的服务中断、数据丢失以及其他的损失和风险。
+		</view>
+		<view class="title">
+		  13.2您同意,对美天选菜上出现的网络链接信息,您应审慎判断其真实性和可靠性,除法律明确规定外,您应对依该链接信息进行的交易负责。
+		</view>
+		<view class="title">
+		 13.3用户理解并同意,在使用美天选菜服务的过程中,可能会遇到不可抗力等风险因素使美天选菜买菜服务发生中断。不可抗力是指不能预见、不能克服并不能避免且对一方或双方造成重大影响的客观事件,包括但不限于自.然灾害如洪水、地震、瘟疫流行和风暴等以及社会事件如战争、动乱、政府行为等。出现上述情况时,美天选菜将努力在第一时间与相关单位配合,及时进行修复,但是由此给用户造成的损失,美天选菜将在法律允许的范围内免责。
+		</view>
+		<view class="title">
+		 13.4在法律允许的范围内,美天选菜对以下情形之一导致的服务中断或受阻不承担责任:
+		</view>
+		<view class="title soujin">
+		   13.4.1受到计算机病毒、木马或其他恶意程序、黑客攻击的破坏;
+		</view>
+		<view class="title soujin">
+		  13.4.2用户或美天选菜的软件、系统、硬件和通信线路出现故障;
+		</view>
+		<view class="title soujin">
+		 13.4.3用户操作不当;
+		</view>
+		<view class="title soujin">
+		13.4.4用户通过非美天选菜授权的方式使用服务;
+		</view>
+		<view class="title soujin">
+		 13.4.5其他美天选菜无法控制或合理预见的情形。
+		</view>
+		<view class="title">
+		 13.5美天选菜依据本协议约定获得处理违法违规内容的权利,该权利不构成美天选菜的义务或承诺,美天选菜不能保证及时发现违法行为或进行相应处理。
+		</view>
+		<view class="title">
+		  13.6您理解并同意,美天选菜将为您提供最快捷的商品配送服务,但鉴于天气、交通等非主观因素影响可能导致配送服务迟延,美天选菜将视情况为您提供一定补偿,补偿形式为积分补偿,补偿标准为超过用户选择的产品配送截止时间十分钟以上(含10分钟) 的,美天选菜将为您提供300积分的补偿,补偿积分将于产品送达后3个工作日内到账。截至2018年2月10日, 尚未升级至美天选菜8.10版本的用户,产品超出配送截止时间十分钟以上(含10分钟) 送达的,美天选菜将为您提供价值3元的买菜优惠券补偿,优惠券将于产品送达后3个工作日内到账。
+		</view>
+		<view class="title soujin">
+		  美天选菜保留修改补偿形式、额度及补偿使用方式的权利。.上述补偿任何情况下不视为美天选菜所负有的法律义务。
+		</view>
+		<view class="title name">十四、服务中止和终止</view>
+		<view class="title">
+		   14.1本协议在下述情形下终止:
+		</view>
+		<view class="title soujin">
+		 14.1.1协议方签署新协议代替本协议的;
+		</view>
+		<view class="title soujin">
+		  14.1.2通知终止:除本协议另有约定外,缔约协议方中任一-方 提前通知对方终止本协议。
+		</view>
+		<view class="title">
+		  14.2如发生下列任何一-种情形,美天选菜有权不经通知而中断、中止或终止向用户提供的服务,且不向该用户承担任何责任:
+		</view>
+		<view class="title soujin">
+		  14.2.1用户未按本协议提供真实信息;
+		</view>
+		<view class="title soujin">
+		   14.2.2用户违反相关法律法规或本协议的规定;
+		</view>
+		<view class="title soujin">
+		 14.2.3按照法律规定或主管部门的要求;
+		</view>
+		<view class="title soujin">
+		    14.2. 4用户侵犯其他第三方合法权益的;
+		</view>
+		<view class="title soujin">
+		   14.2.5用户对美天选菜工作人员有人身攻击、侮辱行为的;
+		</view>
+		<view class="title">
+		 14.2.6出于安全的原因或其他必要的情形。
+		</view>
+		<view class="title">
+		   14.3您同意,即便在本协议终止及您的服务被终止后,美天选菜仍有权:
+		</view>
+		<view class="title soujin">
+		  14.3.1在法律规定的范围内,继续保存并使用您的用户信息;
+		</view>
+		<view class="title soujin">
+		   14.3.2继续向您主张您在使用美天选菜买菜服务期间因违反法律法规、本协议及平台规则而应承担的责任。
+		</view>
+		<view class="title name">十五、本服务软件形式</view>
+		<view class="title">
+		 15.1美天选菜可能为不同的终端设备开发不同的软件版本,您应当根据实际需要选择下载合适的版本进行安装。
+		</view>
+		<view class="title">
+		  15.2如果您从未经合法授权的第三方获取本软件或与本软件名称相同的安装程序,美天选菜将无法保证该软件能否正常使用,并对因此给您造成的任何损失不予负责。
+		</view>
+		<view class="title">
+		 15.3为了增进用户体验、完善服务内容,美天选菜将不时提供软件更新服务(该更新可能会采取软件替换、修改、功能强化、版本升级等形式)。为了改善用户体验,保证服务的安全性和功能的一致性,美天选菜有权对软件进行更新或者对软件的部分功能效果进行改变或限制。
+		</view>
+		<view class="title">
+		 15.4软件新版本发布后,旧版软件可能无法使用。美天选菜不保证旧版软件继续可用及相应的客户服务,请您随时核对并下载最新版本。
+		</view>
+		<view class="title">
+		   15.5除非法律允许或美天选菜书面许可,您不得从事下列行为:
+		</view>
+		<view class="title soujin">
+		   15.5.1删除软件及其副本.上关于著作权的信息;
+		</view>
+		<view class="title soujin">
+		   15.5.2对软件进行反向工程、反向汇编、反向编译或者以其他方式尝试发现软件的源代码;
+		</view>
+		<view class="title soujin">
+		  15.5.3对美天选菜或其关联公司拥有知识产权的内容进行使用、出租、出借、复制、修改、链接、转载、汇编、发表、出版、建立镜像站点等;
+		</view>
+		<view class="title soujin">
+		  15.5.4对软件或者软件运行过程中释放到任何终端内存中的数据、软件运行过程中客户端与服务器端的交互数据、软件运行过程中客户端与服务器端的交互数据,以及软件运行所必须的系统数据,进行复制、修改、增加、删除、挂件运行或创作任何非衍生作品,形式包括但不限于使用插件、外挂或非经合法授权的第三方工具/服务接入软件和相关系统。
+		</view>
+		<view class="title soujin">
+		15.5.5修改或伪造软件返行中的指令、数据,増加、刪減、变动软件的功能或送行效果,或者将用于上述用途的软件、方法进行运营或向公众侍播,无企上述行カ是是否为商业目的;
+		</view>
+		<view class="title soujin">
+		 15.5.6通过非美天选菜开发、授叔的第三方软件、插件、外挂、系统,使用美天选菜服务,或制作、友布、侍播非美天选菜开发、授枚的第三方软件、插件、外挂、系统;
+		</view>
+		<view class="title soujin">
+		  15.5.7其他美天选菜明示授权的行为。
+		</view>
+		<view class="title name">十六、知识产权</view>
+		<view class="title">
+		  16.1美天选菜在提供美天选菜服务中提供的信息内容,包括但不限于网页、文字、图片、音频、视频、图表等的知识产权均归美天选菜所有,用户在使用美天选菜服务中所产生的内容的知识产权归用户或相关权利人所有。
+		</view>
+		<view class="title">
+		   16.2除另有特别声明外,美天选菜提供美天选菜服务时所依托软件的著作权、专利权及其他知识产权均归美天选菜关联公司所有。
+		</view>
+		<view class="title red">
+		   16.3美天选菜在提供美天选菜服务中所使用的“美天选菜买菜"、“美天选菜代买菜"、“美天选菜买菜代买菜”等商业标识,其著作权或商标权归美天选菜买菜公司所有。
+		</view>
+		<view class="title">
+		    16.4如您通过美天选菜推出的客户端软件使用美天选菜服务,美天选菜给予您一项个人的、不可转让、非独占及非排他性的许可,您只能为正当使用美天选菜服务之目的使用该权利,不得将其用作任何目的,也不得随意复制、修改、编译或以任何其他方式处置这些权利。
+		</view>
+		<view class="title name">十七、隐私政策</view>
+		<view class="title soujin">
+		    保护用户个人信息及隐私是美天选菜的一项基本原则。美天选菜严格保护您的个人信息安全。美天选菜使用各种制度、安全技术和程序等措施来保护您的个人信息不被未经授权的访问、使用或泄漏。除本协议有特殊约定,关于用户隐私保护政策详见《美天选菜隐私权政策》。
+		</view>
+		<view class="title name">十八、管辖与法律适用</view>
+		<view class="title">
+      18.1本协议的成立、生效、履行、解释及纠纷解决,适用中华人民共和国大陆地区法律(不包括冲突法)。
+		</view>
+		<view class="title">
+		18.2若您和美天选菜之间因本协议发生任何纠纷或争议,首先应友好协商解决;协商不成的,您和美天选菜均同意将纠纷或争议提交至本协议签订地( ?????)有管辖权的人民法院管辖。
+		</view>
+		<view class="title">
+		18.3本协议条款无论因何种原因部分无效,其余条款仍有效,对各方具有约束力。
+		</view>
+	</view>
+</template>
+
+<script></script>
+
+<style>
+page,
+.container {
+	width: 95%;
+	height: 100%;
+	background: #ffffff;
+	font-size: 26rpx;
+	margin: 25rpx auto;
+}
+.indent {
+	text-indent: 30px;
+}
+.title {
+	margin: 25rpx 0rpx;
+}
+.title-name{
+	text-align: center;
+	font-size: 45rpx;
+	font-weight: bold;
+	padding-bottom: 25rpx;
+}
+.right{
+	text-align: right;
+}
+.name {
+	font-size: 28rpx;
+	font-weight: bold;
+}
+.soujin{
+	padding-left: 35rpx;
+}
+.red{
+	color: #FF1A27 !important;
+}
+</style>

+ 200 - 0
pages/public/forget.vue

@@ -0,0 +1,200 @@
+<template>
+	<view class="container">
+		<view class="container_text">
+			<image class="banner-img" src="/static/img/img001.png" mode="scaleToFill"></image>
+		</view>
+		<view class="loginTitle"><text>手机号登录</text></view>
+		<view class="login_text">
+			<view class="login_input flex">
+				<view class="login_img"><image src="/static/icon/img03.png"></image></view>
+				<view class="login_name"><input class="uni-input" v-model="phone" focus placeholder="请输入手机号" /></view>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img"><image src="/static/icon/img06.png"></image></view>
+				<view class="login_name flex">
+					<input class="uni-input width" v-model="code" focus placeholder="请输入验证码" />
+					<view class="code" @click="verification">{{ countDown == 0 ? '验证码' : countDown }}</view>
+				</view>
+			</view>
+			<view>
+				<button type="green" @click="register" class="uni-button uni-button-green">登录</button>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+import { mapMutations } from 'vuex';
+import { verify, loginMobile, getUserInfo } from '@/api/login.js';
+export default {
+	data() {
+		return {
+			phone: '', //用户
+			code: '', //验证码
+			time: '', //保存倒计时对象
+			countDown: 0 //倒计时
+		};
+	},
+	onLoad() {},
+	watch: {
+		// 监听倒计时
+		countDown(i) {
+			if (i == 0) {
+				clearInterval(this.time);
+			}
+		}
+	},
+	methods: {
+		...mapMutations('user', ['setUserInfo', 'login']),
+		// 手机登录
+		register() {
+			let obj = this;
+			if (obj.phone == '') {
+				obj.$api.msg('请输入电话号码');
+				return;
+			}
+			if (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(this.phone)) {
+				obj.$api.msg('请输入正确的手机号');
+				return;
+			}
+			if (obj.code == '') {
+				obj.$api.msg('请输入验证码');
+				return;
+			}
+
+			loginMobile({
+				phone: obj.phone, //账号
+				captcha: obj.code
+			}).then(function(e) {
+				uni.setStorageSync('token', e.data.token);
+				getUserInfo({}).then(e => {
+					obj.login();
+					// 保存返回用户数据
+					obj.setUserInfo(e.data);
+					//成功跳转首页
+					uni.switchTab({
+						url: '/pages/index/index'
+					});
+				});
+			}).catch((e) => {
+				console.log(e);
+			});
+		},
+		//发送验证码
+		verification() {
+			let obj = this;
+			if (this.phone == '') {
+				this.$api.msg('请输入电话号码');
+				return;
+			}
+			if (this.phone.length < 11) {
+				this.$api.msg('请输入正确的手机号');
+				return;
+			}
+			// 判断是否在倒计时
+			if (obj.countDown > 0) {
+				return false;
+			} else {
+				obj.countDown = 60;
+				obj.time = setInterval(() => {
+					obj.countDown--;
+				}, 1000);
+				//调用验证码接口
+				verify({
+					phone: obj.phone,
+					type: 'login'
+				})
+					.then(({ data }) => {})
+					.catch(err => {
+						console.log(err);
+					});
+			}
+		},
+		login() {
+			//返回登录
+			uni.navigateTo({
+				url: '/pages/public/login'
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	height: 100%;
+}
+.container {
+	width: 100%;
+	height: 100%;
+	background-size: 100%;
+}
+.container_text {
+	width: 100%;
+	height: 500rpx;
+	top: 0rpx;
+	.banner-img {
+		width: 100%;
+		height: 100%;
+	}
+}
+.login_text {
+	margin: auto 30rpx;
+	position: relative;
+	padding: 100rpx 102rpx;
+	background-color: #ffffff;
+	margin-top: -180rpx;
+	border-radius: 20rpx;
+	.login_input {
+		border-bottom: 1px solid #f0f0f0;
+		margin-bottom: 65rpx;
+		.login_img image {
+			height: 35rpx;
+			width: 29rpx;
+			margin-right: 20rpx;
+		}
+		.uni-input {
+			text-align: left;
+			width: 470rpx;
+			font-size: 28rpx !important;
+		}
+		.login_name {
+			color: #333333;
+			.width {
+				width: 325rpx !important;
+			}
+			.code {
+				color: #5dbc7c;
+				font-size: 23rpx;
+				border-left: 1px solid #eeeeee;
+				width: 150rpx;
+				flex-shrink: 0;
+				text-align: center;
+			}
+		}
+	}
+	.uni-button-green {
+		color: #ffffff;
+		background-color: #5dbc7c;
+		margin: 40rpx 10rpx;
+		border-radius: 50rpx;
+	}
+	.uni-button {
+		height: 85rpx;
+		line-height: 85rpx;
+	}
+}
+.loginTitle {
+	position: absolute;
+	top: 250rpx;
+	width: 100%;
+	text-align: center;
+	color: white;
+	font-size: 40rpx;
+}
+
+uni-button {
+	height: 80rpx !important;
+	line-height: 80rpx !important;
+}
+
+</style>

+ 202 - 0
pages/public/login.vue

@@ -0,0 +1,202 @@
+<template>
+	<view class="container">
+		<view class="container_text">
+			<image class="banner-img" src="/static/img/img001.png" mode="scaleToFill"></image>
+		</view>
+		<view class="loginTitle"><text>登录</text></view>
+		<view class="login_text">
+			<view class="login_input flex">
+				<view class="login_img"><image src="/static/icon/img03.png"></image></view>
+				<view class="login_name"><input class="uni-input" v-model="username" focus placeholder="请输入手机号" /></view>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img"><image src="/static/icon/img04.png"></image></view>
+				<view class="login_name"><input class="uni-input" type="password" v-model="passward" focus placeholder="请输入密码" /></view>
+			</view>
+			<view><button type="green" class="uni-button uni-button-green" @click="toLogin">登录</button></view>
+			<view><button type="green" class="uni-button uni-button-green uni-button-green-plain" plain="true" hover-class="none" @click="register">注册</button></view>
+			<navigator url="./forget"><view class="forget">忘记密码</view></navigator>
+			<!-- <view class="flex other">
+				<view class="fenge"></view>
+				<view class="qita">其他方式登录</view>
+				<view class="fenge"></view>
+			</view>
+			<view class="weixin" @click="wecahtLogin"><image src="/static/img/img05.png"></image></view> -->
+			<!-- <view class="weixin_text">微信登录</view> -->
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapMutations } from 'vuex';
+import { login } from '@/api/login.js';
+export default {
+	data() {
+		return {
+			username: '',
+			passward: '',
+			// #ifdef APP-PLUS
+			// 保存当前是否为微信浏览器
+			weixinB:false,
+			// #endif
+		};
+	},
+	onLoad() {
+		console.log(this.$store.state.hasLogin)
+		this.weixinB=uni.getStorageSync('weichatBrowser')
+	},
+	methods: {
+		...mapMutations(['setUserInfo','login']),
+		//登录
+		async toLogin() {
+			let obj = this;
+			obj.logining = true;
+			if (obj.username == '') {
+				obj.$api.msg('请输入手机号');
+				return;
+			}
+			if (obj.passward == '') {
+				obj.$api.msg('请输入密码');
+				return;
+			}
+			login({
+				account:obj.username,
+				password:obj.passward
+			})
+				.then(function(e) {
+					obj.login();
+					obj.$store.state.hasLogin = true;
+					uni.setStorageSync('token',e.data.userinfo.token);
+					obj.setUserInfo(e.data.userinfo);
+					//调用注册接口,成功跳转首页
+					uni.switchTab({
+						url: '/pages/index/index'
+					});
+				})
+				.catch(function(e) {
+					console.log(e);
+				});
+		},
+		//跳转注册页
+		register() {
+			uni.navigateTo({
+				url: `/pages/public/register`
+			});
+		},
+		//跳转忘记密码
+		forget() {
+			uni.navigateTo({
+				url: `/pages/public/forget`
+			});
+		},
+		// 后退
+		navBack() {
+			uni.navigateBack();
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	height: 100%;
+}
+.container {
+	width: 100%;
+	height: 100%;
+	background-size: 100%;
+}
+.container_text {
+	width: 100%;
+	height: 500rpx;
+	top: 0rpx;
+	.banner-img {
+		width: 100%;
+		height: 100%;
+	}
+}
+.login_text {
+	margin: auto 30rpx;
+	position: relative;
+	padding: 100rpx 102rpx;
+	background-color: #ffffff;
+	margin-top: -180rpx;
+	border-radius: 20rpx;
+	.login_input {
+		border-bottom: 1px solid #f0f0f0;
+		margin-bottom: 65rpx;
+		.login_img image {
+			height: 35rpx;
+			width: 29rpx;
+			margin-right: 20rpx;
+		}
+		.uni-input {
+			text-align: left;
+			width: 470rpx;
+			font-size: 28rpx !important;
+		}
+		.login_name {
+			color: #333333;
+		}
+	}
+
+	.other {
+		margin-top: 60rpx;
+		.fenge {
+			width: 30%;
+			height: 2rpx;
+			background-color: #eeeeee;
+		}
+		.qita {
+			font-size: 28rpx;
+			color: #999999;
+		}
+	}
+	.weixin {
+		width: 75rpx;
+		height: 75rpx;
+		margin: 25rpx auto;
+	}
+	.weixin image {
+		width: 100%;
+		height: 100%;
+	}
+	.weixin_text {
+		text-align: center;
+		font-size: 28rpx;
+		color: #999999;
+	}
+	.forget {
+		font-size: 28rpx;
+		width: 100%;
+		text-align: right;
+		color: #999999;
+	}
+
+	.uni-button-green {
+		color: #ffffff;
+		background-color: #5dbc7c;
+		margin: 40rpx 10rpx;
+		border-radius: 50rpx;
+	}
+	.uni-button-green-plain {
+		border: 1px solid #5dbc7c;
+		margin: 40rpx 10rpx;
+		border-radius: 50rpx;
+		color: #5dbc7c;
+		background-color: #ffffff;
+	}
+	.uni-button {
+		height: 85rpx;
+		line-height: 85rpx;
+	}
+}
+.loginTitle {
+	position: absolute;
+	top: 250rpx;
+	width: 100%;
+	text-align: center;
+	color: white;
+	font-size: 40rpx;
+}
+</style>

+ 140 - 0
pages/public/privacy.vue

@@ -0,0 +1,140 @@
+<template>
+	<view class="container">
+		<view class="title-name">《急救平台》关于隐私协议说明</view>
+		<view class="title">●急救平台法律声明及隐私政策</view>
+		<view class="title name">法律声明</view>
+		<view class="title">访问、浏览或使用急救平台平台(包括“急救平台”信息服务平台)</view>
+		<view class="title name">一般原则</view>
+		<view class="title">
+			以下规则适用于所有急救平台用户或浏览者,急救平台可能随时修改这些条款。您应经常访问本页面以了解当前的条款,因为这些条款与您密切相关。这些条款的某些条文也可能被急救平台平台中某些页面上或某些具体服务明确指定的法律通告或条款所取代,您应该了解这些内容,一旦接受本条款,即意味着您已经同时详细阅读并接受了这些被引用或取代的条款。
+		</view>
+		<view class="title name">权利说明</view>
+		<view class="title">
+			或以超级链路连接或传送、存储于信息检索系统或者其他任何商业目的的使用,但对于非商业目的的、个人使用的下载或打印(未作修改,且须保留该内容中的版权说明或其他所有权的说明)除外。
+		</view>
+		<view class="title ">
+			是台州道可特林网络科技有限公司及其关联公司在出行服务及其它相关领域内注册和未注册的有关商标,受法律保护,但注明属于其他方拥有的商标、标志、商号除外。该等软件中所载的任何内容,未经台州道可特林网络科技有限公司书面许可,任何人不得以任何方式使用急救平台名称及相关商标、标识。
+		</view>
+		<view class="title name">用户信息</view>
+		<view class="title">
+			为急救平台提供相应服务之必须,您以自愿填写的方式提供注册所需的姓名、性别、电话以及其他类似的个人信息,则表示您已经了解并接受您个人信息的用途,同意急救平台为实现该特定目的使用您的个人信息。除此个人信息之外,其他任何您发送或提供给急救平台的材料、信息或文本
+		</view>
+		<view class="title name">责任限制声明</view>
+		<view class="title">
+			不论在何种情况下,急救平台对由于信息网络设备维护、信息网络连接故障、智能终端、通讯或其他系统的故障、电力故障、罢工、劳动争议、暴乱、起义、骚乱、火灾、洪水、风暴、爆炸、战争、政府行为、司法行政机关的命令、其他不可抗力或第三方的不作为而造成的不能服务或延迟服务不承担责任。
+		</view>
+		<view class="title">
+			无论在任何情况下(包括但不限于疏忽原因),由于使用急救平台上的信息或由急救平台平台链接的信息,或其他与急救平台平台链接的网站信息,对您或他人所造成任何的损失或损害(包括直接、间接、特别或后果性的损失或损害,例如收入或利润之损失,智能终端系统之损坏或数据丢失等后果),均由使用者自行承担责任(包括但不限于疏忽责任)。
+		</view>
+		<view class="title">
+			急救平台所载的信息,包括但不限于文本、图片、数据、观点、网页或链接,虽然力图准确和详尽,但急救平台并不就其所包含的信息和内容的准确、完整、充分和可靠性做任何承诺。急救平台表明不对这些信息和内容的错误或遗漏承担责任,也不对这些信息和内容作出任何明示或默示的、包栝但不限于没有侵犯犯第三方权利、质量和没有智能终端病毒的保证。
+		</view>
+		<view class="title">
+			对于急救平台积分商城平台上所提及或展示的非急救产品或服务,急救平台仅提供基本信息。急救平台不是相关产品的生产者或经销者,亦不是服务的提供方。急救平台不就积分商城上提供的产品或服务做出任何声明或保证,所有展示的产品和服务应受其本公司或服务提供方所做质量承诺和条款的约束。
+		</view>
+		<view class="title name">第三方链接</view>
+
+		<view class="title">
+			急救平台可能保留有第三方网站或网址的链接,访问这些链接将由用户自己作出决定,急救平台并不就这些链接上所提供的任何信息、数据、观点、图片、陈述或建议的准确性、完整性、充分性和可靠性提供承诺或保证。急救平台没有审查过任何第三方网站,对这些网站及其内容不进行控制,也不负任何责任。如果您决定访问任何与本站链接的第三方网站,其可能带来的结果和风险全部由您自己承担。
+		</view>
+		<view class="title name">适用法律和管辖权</view>
+		<view class="title">
+			通过访问急救平台平台或使用急救平台提供的服务,即表示您同意该访问或服务受中华人民共和国法律的约束,且您同意受中华人民共和国法院的管辖。访问或接受服务过程中发生的争议应当协商解决,协商不成的,各方一致同意至台州道可特林网络科技有限公司住所所在地有管辖权的法院诉讼解决。
+		</view>
+		<view class="title name">隐私政策</view>
+		<view class="title">
+			收集、使用、共享和保护您的个人信息。在您使用急救平台的产品及服务前,请您仔细阅读并全面了解本政策。如果您是未成年人,您的监护人需要仔细阅读本政策并同意您依照本政策使用我们的产品及服务。对于本政策中与您的权益存在重大关系的条款,我们已将字体加粗以提示您注意。
+		</view>
+		<view class="title">当您浏览、访问急救平台平台及/或使用急救平台的任一产品或服务时,即表示您已经同意我们按照本政策来收集、使用、共享和保护您的个人信息。</view>
+		<view class="title">
+			我们收集、使用、共享和保护您的个人信息,是在遵守国家法律法规规定的前提下,出于向您提供急救平台的产品及服务并不断提升产品及服务质量的目的,包括但不限于支持我们开展急救平台产品及服务相关的市场活动、完善现有产品及服务功能、开发新产品或新服务。
+		</view>
+		<view class="title name">信息的收集范围</view>
+		<view class="title">您授权我们收集您的以下个人信息:</view>
+		<view class="title">身份识别信息,包括但不限于您的姓名、身份证明、联系地址、电话号码、生物特征信息;</view>
+		<view class="title">对于救护人员类用户,除身份识别信息以外,我们还会收集您的公司、车辆、行驶证、驾驶证以及监督卡信息;</view>
+		<view class="title">您所处的地理位置及目的地信息;</view>
+		<view class="title">平台操作信息,包括但不限于您的IP地址、设备型号、设备标识符、操作系统版本信息;</view>
+		<view class="title">行程信息,包括但不限于您的出发地、到达地、路线、途经地点及里程数信息;</view>
+		<view class="title">支付信息,包括但不限于您的支付时间、支付金额、支付工具、银行账户及支付账户信息;</view>
+		<view class="title">个人信用信息,包括但不限于关于您的任何信用状况、信用分、信用报告信息;</view>
+		<view class="title">
+			其他根据我们具体产品及服务的需要而收集的您的个人信息,包括但不限于您对我们及我们的产品或服务的意见、建议、您曾经使用或经常使用的移动应用软件以及使用场景和使用习惯等信息。
+		</view>
+		<view class="title name">信息的收集方法</view>
+		<view class="title">您授权我们通过以下方法收集您的个人信息:</view>
+		<view class="title">我们将收集和储存在您浏览、访问急救平台平台及/或使用急救平台的产品或服务时主动向我们提供的信息;</view>
+		<view class="title">我们将收集和储存我们在向您提供急救平台的产品或服务的过程中记录的与您有关的信息;</view>
+		<view class="title">我们将收集和储存您通过我们的客服人员及/或其他渠道主动提交或反馈的信息;</view>
+		<view class="title">我们将向关联公司、商业合作伙伴及第三方独立资料来源,收集和储存其合法获得的与您有关的信息;</view>
+		<view class="title">我们将向依法设立的征信机构査询您的相关信用信息,包括但不限于任何信用分、信用报告等。</view>
+		<view class="title name">信息的用途</view>
+		<view class="title">您授权我们出于以下用途使用您的个人信息:</view>
+		<view class="title">向您提供急救平台的产品及服务,并进行急救平台相关网站及APP的管理和优化;</view>
+		<view class="title">提升和改善急救平台现有产品及服务的功能和质量,包括但不限于产品及服务内容的个性化定制及更新;</view>
+		<view class="title">开展急救平台产品及服务相关的市场活动,向您推送最新的市场活动信息及优惠方案;</view>
+		<view class="title">设计、开发、推广全新的产品及服务;</view>
+		<view class="title">提高急救平台产品及服务安全性,包括但不限于身份验证、客户服务、安全防范、诈骗监测、存档和备份;</view>
+		<view class="title">协助行政机关、司法机构等有权机关开展调査,并遵守适用法律法规及其他向有权机关承诺之义务;</view>
+		<view class="title">在收集信息之时所通知您的用途以及与上述任何用途有关的其他用途;</view>
+		<view class="title">
+			此外,我们可能向您发送与上述用途有关的信息和通知,包括但不限于为保证服务完成所必须的验证码、使用产品或服务时所必要的推送通知、当前用车费用优惠及减免信息、关于急救平台产品或服务的新闻以及市场活动及优惠促销信息。
+		</view>
+		<view class="title name">信息的共享</view>
+		<view class="title">我们对您的个人信息承担保密义务,但您授权我们在下列情况下将您的信息与第三方共享:</view>
+		<view class="title">为了提升我们的产品及服务质量或向您提供全新的产品及服务,我们会在关联公司内部共享您的相关信息,也可能将我们收集的信息提供给第三方用于分析和统计;</view>
+		<view class="title">为了维护您的合法权益,在协助处理与您有关的交易纠纷或争议时,我们会向您的交易相对方或存在利害关系的第三方提供解决交易纠纷或争议所必需的信息;</view>
+		<view class="title">根据法律法规的规定及商业惯例,我们需要接受第三方的审计或尽职调査时,可能向其提供您的相关信息;</view>
+		<view class="title">根据法律法规的规定或行政机关、司法机构等有权机关要求,我们会向其提供您的相关信息;</view>
+		<view class="title">其他经您同意或授权可以向第三方提供您的个人信息的情况。</view>
+		<view class="title name">信息的安全及保护措施</view>
+		<view class="title">
+			我们及我们的关联公司将采用严格的安全制度以及行业通行的安全技术和程序来确保您的个人信息不被丢失、泄露、毀损或滥用。我们的员工及服务外包人员将受到保密协议的约束,同时还将受到数据信息的权限控制和操作监控。
+		</view>
+		<view class="title">请您注意,任何安全系统都存在可能的及未知的风险。</view>
+		<view class="title">
+			您的交易相对方、您访问的第三方网站经营者、您使用的第三方服务提供者和通过我们获取您的个人信息的第三方可能有自己的隐私权保护政策以及获取您个人信息的方法和措施,这些第三方的隐私权保护政策、获取个人信息的方法和措施将不会受到我们的控制。虽然我们将与可能接触到您的个人信息的我们的合作方及供应商等第三方签署保密协议并尽合理的努力督促其履行保密义务,但我们无法保证第三方一定会按照我们的要求采取保密措施,我们亦不对第三方的行为及后果承担任何责任。
+		</view>
+		<view class="title">
+			作为用户,您可根据您的意愿决定是否使用急救平台平台的服务,是否主动提供个人信息。同时,您可以查看您提供给我们的个人信息及行程信息。如果您希望删除或更正您的个人信息,请联系我们的客服人员。
+		</view>
+		<view class="title">如果我们监测到您将急救平台的产品及服务以及相关信息用于欺诈或非法目的,我们将会采取相应措施,包括但不限于中止或终止向您提供任何产品或服务。</view>
+	</view>
+</template>
+
+<script></script>
+
+<style>
+	page{
+		background: #ffffff;
+	}
+.container {
+	width: 95%;
+	height: 100%;
+	background: #ffffff;
+	font-size: 26rpx;
+	margin: 25rpx 25rpx;
+}
+.indent {
+	text-indent: 30px;
+}
+.title {
+	margin: 25rpx 0rpx;
+}
+.title-name {
+	text-align: center;
+	font-size: 45rpx;
+	font-weight: bold;
+	padding-bottom: 25rpx;
+}
+.right {
+	text-align: right;
+}
+.name {
+	font-size: 28rpx;
+	font-weight: bold;
+}
+.red {
+	color: #ff1a27 !important;
+}
+</style>

+ 288 - 0
pages/public/register.vue

@@ -0,0 +1,288 @@
+<template>
+	<view class="container">
+		<view class="container_text">
+			<image class="banner-img" src="/static/img/img001.png" mode="scaleToFill"></image>
+		</view>
+		<view class="loginTitle"><text>注册</text></view>
+		<view class="login_text">
+			<view class="login_input flex">
+				<view class="login_img"><image src="/static/icon/img03.png"></image></view>
+				<view class="login_name"><input class="uni-input" v-model="phone" focus placeholder="请输入手机号" /></view>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img"><image src="/static/icon/img03.png"></image></view>
+				<view class="login_name"><input class="uni-input" v-model="username" focus placeholder="请输入用户名" /></view>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img"><image src="/static/icon/img04.png"></image></view>
+				<view class="login_name"><input class="uni-input" type="password" v-model="password" focus placeholder="请输入密码" /></view>
+			</view>
+			<view class="login_input flex">
+				<view class="login_img"><image src="/static/icon/img04.png"></image></view>
+				<view class="login_name"><input class="uni-input" type="password" v-model="repassword" focus placeholder="请重复输入密码" /></view>
+			</view>
+			<view class="login_input flex" style="display: none;">
+				<view class="login_img"><image src="/static/icon/img07.png"></image></view>
+				<view class="login_name"><input class="uni-input" type="text" v-model="invitation" focus placeholder="请输入邀请码" /></view>
+			</view>
+			<!-- <view class="login_input flex">
+				<view class="login_img"><image src="/static/icon/img06.png"></image></view>
+				<view class="login_name flex">
+					<input class="uni-input width" v-model="code" focus placeholder="请输入验证码" />
+					<view class="code" @click="verification">{{ countDown == 0 ? '验证码' : countDown }}</view>
+				</view>
+			</view> -->
+			<view><button type="green" @click="register" class="uni-button uni-button-green">注册账号</button></view>
+			<view><button class="uni-button uni-button-green uni-button-green-plain" type="green" plain="true" hover-class="none" @click="login">返回登录</button></view>
+		</view>
+	</view>
+</template>
+<script>
+import { register, verify } from '@/api/login.js';
+export default {
+	data() {
+		return {
+			username:'',
+			phone: '', //用户
+			password: '', //密码
+			repassword: '',
+			invitation: '', //邀请码
+			code: '', //验证码
+			time: '', //保存倒计时对象
+			countDown: 0 ,//倒计时
+		};
+	},
+	onLoad() {
+		// 获取扫码邀请人id
+		this.invitation = uni.getStorageSync('spread')||'';
+	},
+	watch: {
+		// 监听倒计时
+		countDown(i) {
+			if (i == 0) {
+				clearInterval(this.time);
+			}
+		}
+	},
+	methods: {
+		// 注册
+		register() {
+			let obj = this;
+			if (obj.phone == '') {
+				obj.$api.msg('请输入电话号码');
+				return;
+			}
+			if (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(this.phone)) {
+				obj.$api.msg('请输入正确的手机号');
+				return;
+			}
+			if (obj.username == '') {
+				obj.$api.msg('请输入用户名');
+				return;
+			}
+			if (obj.password == '') {
+				obj.$api.msg('请输入密码');
+				return;
+			}
+			if (obj.repassword == '') {
+				obj.$api.msg('请再次输入密码');
+				return;
+			}
+			if (obj.repassword != obj.password) {
+				obj.$api.msg('两次密码不正确');
+				return;
+			}
+			// if (obj.code == '') {
+			// 	obj.$api.msg('请输入验证码');
+			// 	return;
+			// }
+			register({
+				username:obj.username,
+				mobile: obj.phone, //账号
+				// code: obj.code, //验证码
+				password: obj.password ,//密码
+				// confirm_password: obj.repassword ,//密码
+			}).then(function(e) {
+				uni.showToast({
+					title:'注册成功',
+					duration:2000,
+					position:'top',
+					icon:'none'
+				});
+				setTimeout(function () {
+					uni.navigateTo({
+						url: '/pages/public/login'
+					});
+				},1000)
+				
+			});
+			//调用注册接口,成功跳转登录页
+		},
+		//发送验证码
+		verification() {
+			let obj = this;
+			if (this.phone == '') {
+				this.$api.msg('请输入电话号码');
+				return;
+			}
+			if (this.phone.length < 11) {
+				this.$api.msg('请输入正确的手机号');
+				return;
+			}
+			// 判断是否在倒计时
+			if (obj.countDown > 0) {
+				return false;
+			} else {
+				obj.countDown = 60;
+				obj.time = setInterval(() => {
+					obj.countDown--;
+				}, 1000);
+				//调用验证码接口
+				verify({
+					phone: obj.phone,
+					type: 'register'
+				})
+					.then(({ data }) => {})
+					.catch(err => {
+						console.log(err);
+					});
+			}
+		},
+		login() {
+			//返回登录
+			uni.navigateTo({
+				url: '/pages/public/login'
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	height: 100%;
+	background: #FFFFFF;
+	.container {
+		width: 100%;
+		height: 100%;
+	}
+}
+.container_text {
+	width: 100%;
+	height: 500rpx;
+	top: 0rpx;
+	.banner-img {
+		width: 100%;
+		height: 100%;
+	}
+}
+.login_text {
+	margin: auto 30rpx;
+	position: relative;
+	padding: 100rpx 102rpx;
+	background-color: #ffffff;
+	margin-top: -180rpx;
+	border-radius: 20rpx;
+	.login_input {
+		border-bottom: 1px solid #f0f0f0;
+		margin-bottom: 65rpx;
+		.login_img image {
+			height: 35rpx;
+			width: 29rpx;
+			margin-right: 20rpx;
+		}
+		.uni-input {
+			text-align: left;
+			width: 470rpx;
+			font-size: 28rpx !important;
+		}
+		.login_name {
+			color: #333333;
+		}
+	}
+
+	.other {
+		margin-top: 60rpx;
+		.fenge {
+			width: 30%;
+			height: 2rpx;
+			background-color: #eeeeee;
+		}
+		.qita {
+			font-size: 28rpx;
+			color: #999999;
+		}
+	}
+	.weixin {
+		width: 75rpx;
+		height: 75rpx;
+		margin: 25rpx auto;
+	}
+	.weixin image {
+		width: 100%;
+		height: 100%;
+	}
+	.weixin_text {
+		text-align: center;
+		font-size: 28rpx;
+		color: #999999;
+	}
+	.forget {
+		font-size: 28rpx;
+		width: 100%;
+		text-align: right;
+		color: #999999;
+	}
+
+	.uni-button-green {
+		color: #ffffff;
+		background-color: #5dbc7c;
+		margin: 40rpx 10rpx;
+		border-radius: 50rpx;
+	}
+	.uni-button-green-plain {
+		border: 1px solid #5dbc7c;
+		margin: 40rpx 10rpx;
+		border-radius: 50rpx;
+		color: #5dbc7c;
+		background-color: #ffffff;
+	}
+	.uni-button {
+		height: 85rpx;
+		line-height: 85rpx;
+	}
+}
+.loginTitle {
+	position: absolute;
+	top: 250rpx;
+	width: 100%;
+	text-align: center;
+	color: white;
+	font-size: 40rpx;
+}
+
+.forget {
+	width: 100rpx;
+	font-size: 24rpx;
+	color: #ffffff;
+	margin: 0px auto;
+	border-bottom: 1px solid #ffffff;
+}
+.width {
+	width: 325rpx !important;
+}
+.code {
+	color: #5dbc7c;
+	font-size: 23rpx;
+	border-left: 1px solid #eeeeee;
+	width: 150rpx;
+	flex-shrink: 0;
+	text-align: center;
+}
+uni-button {
+	height: 80rpx !important;
+	line-height: 80rpx !important;
+}
+
+</style>
+

+ 290 - 0
pages/public/wxLogin.vue

@@ -0,0 +1,290 @@
+<template>
+	<view class="content">
+		<view class="back-img"><image src="https://sos.liuniu946.com/static/img/img002.png" model="scoll-img"></image></view>
+		<!-- <view class="name">美天选菜</view>
+	   <view class="tip">台州买菜用美天</view> -->
+		<button class="weixin" open-type="getUserInfo" @getuserinfo="userInfoData">微信用户一键登录</button>
+		<!-- <view class="login" @click="Tologin">手机号码登录</view> -->
+		<view class="info" @click="checkboxChange">
+			<radio style="transform:scale(0.7)" color="#ff5252" :checked="istype" />
+			我已阅读并同意
+			<view class="text">
+				<!-- <view class="text" @click="agreement">用户协议,</view> -->
+				<view class="text" @click.stop="privacy">隐私协议</view>
+			</view>
+		</view>
+		<view class="Mask" v-show="MaskShow">
+			<view class="Mask-box">
+				<view class="title">申请获取您的手机号</view>
+				<view class="text">为了方便更好的服务,需要您的手机授权</view>
+				<button class="weixin" open-type="getPhoneNumber" @getphonenumber="PhoneNumber">获取手机号授权</button>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+import { mapMutations, mapState } from 'vuex';
+// #ifdef MP-WEIXIN
+import { loginWinxinMp } from '@/utils/wxMinProgram';
+import { wechatMpAuth } from '@/api/wx';
+// #endif
+// #ifdef H5
+import { loginWinxin } from '@/utils/wxAuthorized';
+// #endif
+import { getUserInfo, bangding } from '@/api/login.js';
+export default {
+	data() {
+		return {
+			userInfo: {}, //授权用户信息
+			code: '', //授权code
+			selected: false,
+			disabled: false,
+			MaskShow: false,
+			cache_key: '',
+			iv: '',
+			encryptedData: '',
+			istype:false
+		};
+	},
+	onShow(option) {
+		this.loadData();
+	},
+	methods: {
+		...mapMutations(['login', 'setUserInfo']),
+		checkboxChange() {
+			this.istype = !this.istype;
+			console.log(this.istype);
+		},
+		// 获取微信登录信息
+		loadData() {
+			console.log(1)
+			// #ifdef H5
+			console.log(2)
+			loginWinxin();
+			// #endif
+			// #ifdef MP-WEIXIN
+			console.log(3)
+			let obj = this;
+			wx.login({
+				success(e) {
+					obj.code = e.code;
+				},
+				fill: function(e) {
+					console.log(e);
+				}
+			});
+			// #endif
+		},
+		// 用户确认授权
+		userInfoData(e) {
+			if (!this.istype) {
+				this.$api.msg('请查看并同意隐私政策');
+				return;
+			}
+			let user = e.detail;
+			user.code = this.code;
+			this.loadMp(user);
+			this.disabled = true;
+		},
+		// #ifdef MP-WEIXIN
+		// 登录
+		loadMp(option) {
+			let obj = this;
+			// 获取登录授权页数据
+			wechatMpAuth({
+				code: option.code,
+				iv: option.iv,
+				encryptedData: option.encryptedData
+			}).then(({ data }) => {
+				obj.wchatAuth(data);
+			});
+		},
+		// #endif
+		wchatAuth(data) {
+			let obj = this;
+			// 保存token
+			uni.setStorageSync('token', data.userinfo.token);
+			obj.cache_key = data.cache_key;
+			obj.login();
+			// 获取用户基础信息
+			obj.setUserInfo(data.userinfo);
+			if (data.userinfo.mobile == null || data.userinfo.mobile == '') {
+				obj.MaskShow = true;
+			} else {
+				obj.ToIndex();
+			}
+		},
+		PhoneNumber(e) {
+			let obj = this;
+			obj.MaskShow = false;
+			(obj.iv = e.detail.iv), (obj.encryptedData = e.detail.encryptedData);
+			bangding({
+				flag: 1,
+				cache_key: obj.cache_key,
+				code: obj.code,
+				iv: obj.iv,
+				encryptedData: obj.encryptedData
+			})
+				.then(function(e) {
+					obj.$api.msg(e.msg);
+					// 获取用户基础信息
+					obj.GetUser();
+					obj.$api.msg(e.msg);
+					obj.$nextTick(function() {
+						obj.ToIndex();
+					});
+				})
+				.catch(e => {
+					console.log(e.message);
+				});
+		},
+		GetUser() {
+			// 获取用户基础信息
+			getUserInfo({})
+				.then(({ data }) => {
+					this.setUserInfo(data);
+					console.log(uni.getStorageSync('userInfo'), 'userInfo');
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		ToIndex() {
+			uni.switchTab({
+				url: '/pages/index/index'
+			})
+			let obj = this;
+			let ur = uni.getStorageSync('present') || '/pages/index/index';
+			// 用于处理缓存bug
+			if (ur == 'pages/index/index') {
+				ur = '/pages/index/index';
+			}
+			uni.switchTab({
+				url: ur,
+				fail(e) {
+					uni.navigateTo({
+						url: ur,
+						fail(e) {
+							uni.navigateTo({
+								url: '/pages/index/index'
+							});
+						}
+					});
+				}
+			
+			});
+		},
+		//手机号登录
+		Tologin() {
+			uni.navigateTo({
+				url: '/pages/public/login'
+			});
+		},
+		// 菜佬用户协议
+		agreement() {
+			uni.navigateTo({
+				url: '/pages/public/agreement'
+			});
+		},
+		//隐私协议
+		privacy() {
+			uni.navigateTo({
+				url: '/pages/public/privacy'
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #ffffff;
+	height: 100%;
+	.content {
+		height: 100%;
+		text-align: center;
+		.Mask {
+			position: fixed;
+			top: 0;
+			width: 100%;
+			height: 100%;
+			background-color: rgba(51, 51, 51, 0.7);
+			.Mask-box {
+				margin: auto;
+				margin-top: 320rpx;
+				padding: 50rpx 50rpx;
+				width: 80%;
+				height: 450rpx;
+				top: 500rpx;
+				left: 10%;
+				background-color: #ffffff;
+				border-radius: 15rpx;
+				.title {
+					font-size: 35rpx;
+					font-weight: 700;
+				}
+				.text {
+					font-size: 30rpx;
+					color: #848484;
+					padding-top: 50rpx;
+				}
+			}
+		}
+	}
+}
+.back-img {
+	width: 100%;
+	padding-top: 150rpx;
+	image {
+		width: 521rpx;
+		height: 537rpx;
+	}
+}
+.back-name {
+	margin: 0rpx auto;
+	margin-top: 50rpx;
+	width: 239rpx;
+	height: 98rpx;
+	image {
+		width: 100%;
+		height: 100%;
+	}
+}
+.name {
+	color: #48ac34;
+	font-size: 55rpx;
+	font-weight: bold;
+	letter-spacing: 15rpx;
+	margin-top: 35rpx;
+}
+.tip {
+	color: #48ac34;
+	font-weight: bold;
+	font-size: 28rpx;
+	letter-spacing: 30rpx;
+}
+.weixin {
+	background: linear-gradient(90deg, rgba(255, 102, 102, 1), rgba(255, 79, 79, 1));
+	width: 65%;
+	margin: 100rpx auto;
+	color: #ffffff;
+	border-radius: 50rpx;
+	border: none;
+}
+.login {
+	font-size: 26rpx;
+	font-weight: 500;
+	text-decoration: underline;
+}
+.info {
+	// position: fixed;
+	// bottom: 60rpx;
+	margin: 0rpx auto;
+	width: 100%;
+	font-size: 26rpx;
+	.text {
+		color: #ff6666;
+		display: inline-block;
+	}
+}
+</style>

+ 195 - 0
pages/record/details.vue

@@ -0,0 +1,195 @@
+<template>
+	<view class="container">
+		<view class="content-box"><!-- @click="openAddress(item)" -->
+			<view class="item">
+				<view class="info flex_item">
+					<view>头像:</view>
+					<image :src="caller_info.avatar"></image>
+				</view>
+				<view class="info" v-if="list.status == 0 || list.status == 2">救援者姓名:救援者{{list.caller_info.helper}}</view>
+				<view class="info" v-if="list.status == 1 || list.status == 3">救援者姓名:{{list.caller_info.nickname}}</view>
+				<view class="info" v-if="list.status == 1 || list.status == 3">手机号:{{caller_info.mobile}}</view>
+				<!-- <view class="info">求救信息:{{list.help_info}}</view> -->
+				<view class="info">创建时间:{{list.createtime}}</view>
+				<view class="info">状态:{{list.status_text}}</view>
+			</view>
+			<view class="box-btn flex" v-if="list.status == 0">
+				<view class="accept" @click.stop="access(list)">接受</view>
+				<view class="refuse" @click.stop="refuse(list)">拒绝</view>
+			</view>
+			<view class="box-btn flex" v-if="list.status == 1">
+				<view class="accept" @click="success()">完成救援</view>
+				<view class="refuse blue" @click="openAddress()">前往导航</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { sosInfo,accessSos,refuseSos,successSos } from '@/api/record.js';
+	import { getTime } from '@/utils/rocessor.js';
+	export default {
+		data() {
+			return {
+				list:'',
+				id:'',
+				caller_info:''
+			};
+		},
+		onLoad(option) {
+			this.id = option.id;
+		},
+		onShow() {
+			this.loadData();
+		},
+		//下拉刷新
+		onPullDownRefresh() {
+			this.loadData();
+		},
+		methods: {
+			loadData(){
+				let obj = this;
+				sosInfo({
+					id:obj.id,
+				}).then(({ data }) => {
+						obj.list = data;
+						obj.caller_info = data.caller_info;
+						console.log(obj.caller_info)
+						obj.list.createtime = getTime(data.createtime)
+					})
+					.catch(e => {
+						console.log(e);
+					});
+			},
+			openAddress(){
+				let obj = this;
+				uni.openLocation({
+					latitude:+obj.list.lat,
+					longitude:+obj.list.lng,
+					success(e){
+						console.log(e)
+					},
+					fail(e) {
+						console.log(e);
+					}
+				})
+			},
+			//救援完成
+			success(){
+				let obj = this;
+				successSos({
+					id: obj.id
+					}).then(( data ) => {
+						console.log(data)
+						obj.$api.msg(data.msg);
+						obj.loadData();
+					}).catch((e) => {
+						obj.$api.msg(e.message);
+						console.log(e)
+				});
+			},
+			//同意救援
+			access(){
+				let obj = this;
+				uni.showModal({
+				    title: '提示',
+				    content: '您确定要接受求救吗',
+				    success: function (res) {
+				        if (res.confirm) {
+							accessSos({
+								id: obj.id
+							}).then((data) => {
+								obj.$api.msg(data.msg);
+								obj.loadData();
+							}).catch((e) => {
+								obj.$api.msg(e.message);
+									console.log(e)
+								});
+				        } else if (res.cancel) {
+				            console.log('用户点击取消');
+				        }
+				    }
+				});
+			},
+			//拒绝救援
+			refuse(){
+				let obj = this;
+				uni.showModal({
+				    title: '提示',
+				    content: '您确定要拒绝求救吗?',
+				    success: function (res) {
+				        if (res.confirm) {
+							refuseSos({
+								id:  obj.id
+							}).then((data) => {
+								obj.loadData();
+							}).catch((e) => {
+									obj.$api.msg(e.message);
+								});
+				        } else if (res.cancel) {
+				            console.log('用户点击取消');
+				        }
+				    }
+				});
+			},
+		}
+	};
+</script>
+
+<style lang="scss">
+	page {
+		background: #ffffff;
+		height: 100%;
+		.container{
+			width: 100%;
+			height: 100%;
+			padding-top: 25rpx;
+		}
+	}
+	.content-box {
+		width: 100%;
+		padding: 47rpx 30rpx;
+		font-size: 28rpx;
+		color: #666666;
+	}
+	.item{
+		margin-bottom: 100rpx;
+	}
+	.info {
+		font-size: 28rpx;
+		color: #333333;
+		font-weight: 500;
+		padding: 28rpx 0rpx;
+		border-bottom: 2rpx solid #F0F0F0;
+		image{
+			width: 100rpx;
+			height: 100rpx;
+			border-radius: 100%;
+		}
+	}
+	.status {
+		font-size: 28rpx;
+		font-weight: bold;
+		color: rgba(255, 79, 79, 1);
+	}
+	.box-btn{
+		width: 80%;
+		margin: 0rpx auto;
+		.accept{
+			background: #FF4F4F;
+			border-radius: 50rpx;
+			color: #FFFFFF;
+			padding: 20rpx 70rpx;
+			}
+		.refuse{
+			text-align: center;
+			background: #F3F3F3;
+			border-radius: 50rpx;
+			padding: 20rpx 70rpx;
+		}
+		.blue{
+			background: #6786FB;
+			color: #FFFFFF;
+		}
+	}
+</style>

+ 236 - 0
pages/record/help.vue

@@ -0,0 +1,236 @@
+<template>
+	<view class="container">
+		<view class="swiper-box">
+			<scroll-view class="cate-list">
+				<view class="nodata" v-if="list.length == 0"><image src="/static/img/img011.png"></image></view>
+				<view v-for="(item, index) in list" class="content-box">
+					<view class="flex">
+						<view class="item">
+							<view class="name" v-if="item.status == 0 || item.status == 2">救援者姓名:救援者{{ item.helper }}</view>
+							<view class="name" v-if="item.status == 1 || item.status == 3">救援者姓名:{{ item.helper_nickname }}</view>
+							<view class="phone" v-if="item.status == 1 || item.status == 3">手机号:{{ item.helper_mobile }}</view>
+							<view class="time">救援时间:{{ item.createtime }}</view>
+						</view>
+						<view class="call-btn" v-if="item.status == 1" @click.stop="Tocall(item)"><image src="/static/img/img016.png"></image></view>
+					</view>
+					<view class="tpl">{{ item.status_text }}</view>
+				</view>
+				<uni-load-more :status="loadingType"></uni-load-more>
+			</scroll-view>
+		</view>
+	</view>
+</template>
+<script>
+import { mapState, mapMutations } from 'vuex';
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+import { mySosList, accessSos, refuseSos } from '@/api/record.js';
+import { getTime } from '@/utils/rocessor.js';
+export default {
+	components: {
+		uniLoadMore,
+		empty
+	},
+	data() {
+		return {
+			userInfo: '', //用户信息
+			list: [],
+			list1: [],
+			limit: 100, //每次加载数据条数
+			page: 1, //当前页数
+			loadingType: 'more', //加载更多状态
+			loading: 0
+		};
+	},
+	onLoad() {},
+	onShow() {
+		this.loadData('refresh');
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		this.page = 1;
+		this.loadData('refresh');
+	},
+	methods: {
+		async loadData(type) {
+			//这里是将订单挂载到tab列表下
+			let obj = this;
+			if (type != 'refresh') {
+				//没有更多数据直接跳出方法
+				if (obj.loadingType === 'nomore') {
+					return;
+				} else {
+					// 设置当前为数据载入中
+					obj.loadingType = 'loading';
+				}
+			} else {
+				//当重新加载数据时更新状态为可继续添加数据
+				obj.loadingType = 'more';
+			}
+			mySosList({
+				status: -1,
+				page: obj.page,
+				limit: obj.limit
+			})
+				.then(({ data }) => {
+					if (type === 'refresh') {
+						obj.list1 = [];
+					}
+					let arr = data.map(e => {
+						e.createtime = getTime(e.createtime);
+						return e;
+					});
+					obj.list = obj.list.concat(arr);
+					//判断是否还有下一页,有是more  没有是nomore
+					if (obj.limit == obj.list.length) {
+						obj.page++;
+						obj.loadingType = 'more';
+					} else {
+						obj.loadingType = 'nomore';
+					}
+					// 判断是否为刷新数据
+					if (type == 'refresh') {
+						// 判断是否为点击搜索按钮跳转加载
+						if (obj.loading == 1) {
+							uni.hideLoading();
+						} else {
+							uni.stopPullDownRefresh();
+						}
+					}
+				})
+				.catch(e => {
+					obj.loadingType = 'nomore';
+					uni.hideLoading();
+				});
+		},
+		//拨打电话
+		Tocall(item) {
+			uni.makePhoneCall({
+				phoneNumber: item.helper_mobile
+			});
+		},
+		navTo(url) {
+			uni.navigateTo({
+				url
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #f8f6f6;
+	height: 100%;
+	.container {
+		width: 100%;
+		height: 100%;
+		.swiper-box {
+			height: 90%;
+			padding-top: 25rpx;
+		}
+	}
+}
+.nodata {
+	width: 430rpx;
+	margin: 0rpx auto;
+	padding-top: 80rpx;
+	image {
+		width: 430rpx;
+		height: 337rpx;
+	}
+	.text {
+		text-align: center;
+		color: #999999;
+		font-size: 26rpx;
+	}
+}
+.swiper-box {
+	height: calc(100% - 40px);
+}
+.list-scroll-content {
+	height: 100%;
+}
+.navbar {
+	overflow: hidden;
+	white-space: nowrap;
+	background: #fff;
+	padding: 0rpx 25rpx;
+	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
+	.nav-item {
+		text-align: center;
+		display: inline-block;
+		height: 100%;
+		font-size: 28rpx;
+		color: $font-color-dark;
+		position: relative;
+		width: 25%;
+		padding: 25rpx 0rpx;
+		&.current {
+			color: #ff6666;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 35px;
+				height: 0;
+				border-bottom: 2px solid #ff6666;
+			}
+		}
+	}
+}
+.call-btn {
+	image {
+		width: 100rpx;
+		height: 100rpx;
+	}
+}
+.content-box {
+	width: 90%;
+	margin: 0rpx auto;
+	background-color: #ffffff;
+	border-radius: 15rpx;
+	padding: 47rpx 30rpx;
+	font-size: 24rpx;
+	line-height: 60rpx;
+	color: #666666;
+	margin-bottom: 25rpx;
+}
+.item {
+	.name {
+		font-size: 28rpx;
+		color: #333333;
+		font-weight: 500;
+	}
+}
+.call-btn {
+	image {
+		width: 100rpx;
+		height: 100rpx;
+	}
+}
+.box-btn {
+	width: 80%;
+	margin: 0rpx auto;
+	margin-top: 30rpx;
+	text-align: center;
+	.accept {
+		background: #ff4f4f;
+		color: #ffffff;
+		padding: 0rpx 30rpx;
+		width: 35%;
+	}
+	.refuse {
+		background: #f3f3f3;
+		width: 35%;
+		padding: 0rpx 30rpx;
+	}
+}
+.tpl {
+	font-size: 28rpx;
+	font-weight: bold;
+	color: rgba(255, 79, 79, 1);
+}
+</style>

+ 526 - 0
pages/record/rescue.vue

@@ -0,0 +1,526 @@
+<template>
+	<view class="container-box">
+		<view class="navbar">
+			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
+		</view>
+		<view class="container" v-if="tabCurrentIndex == 0">
+			<view class="swiper-box">
+				<scroll-view scroll-y class="cate-list" @scrolltolower="RescueData">
+					<view class="nodata" v-if="RescueList.length == 0">
+						<image src="/static/img/img011.png"></image>
+						<!-- <view class="text">暂时没有数据哦!</view> -->
+					</view>
+					<view @click="navTo('/pages/record/details?id=' + item.id)" v-for="(item, index) in RescueList" class="content-box">
+						<view class="flex">
+							<view class="item">
+								<view class="name" v-if="item.status == 0 || item.status == 2">求救者姓名:求救者{{ item.caller_id }}</view>
+								<view class="name" v-if="item.status == 1 || item.status == 3">求救者姓名:{{ item.caller_nickname }}</view>
+								<view class="phone" v-if="item.status == 1 || item.status == 3">手机号:{{ item.caller_mobile }}</view>
+								<!-- <view class="addr">救援地址:{{item.address}}</view> -->
+								<view class="time">求救时间:{{ item.createtime }}</view>
+							</view>
+							<view class="item-addr" v-if="item.status == 1">点击进入导航</view>
+						</view>
+						<view class="box-btn flex" v-if="item.status == 0">
+							<view class="accept" @click.stop="access(item)">接受</view>
+							<view class="refuse" @click.stop="refuse(item)">拒绝</view>
+						</view>
+						<view class="tpl" v-if="item.status != 0">{{ item.status_text }}</view>
+						<view class="call-btn flex" v-if="item.status == 1">
+							<view class="payPhone flex" @click.stop="Tocall(item)">
+								<image src="/static/img/phone1.png" mode="widthFix"></image>
+								<text>拨打电话</text>
+							</view>
+							<view class="payVideo flex" @click.stop="TocallVideo(item)" >
+								<image src="/static/img/video1.png" mode="widthFix"></image>
+								<text>视频通话</text>
+							</view>
+						</view>
+					</view>
+					<uni-load-more :status="loadingType"></uni-load-more>
+				</scroll-view>
+			</view>
+		</view>
+		<view class="container" v-if="tabCurrentIndex == 1">
+			<view class="swiper-box">
+				<scroll-view class="cate-list" scroll-y @scrolltolower="HpleData">
+					<view class="nodata" v-if="HpleList.length == 0"><image src="/static/img/img011.png"></image></view>
+					<view v-for="(item, index) in HpleList" class="content-box">
+						<view class="item">
+							<view class="name" v-if="item.status == 0 || item.status == 2">救援者姓名:救援者{{ item.helper }}</view>
+							<view class="name" v-if="item.status == 1 || item.status == 3">救援者姓名:{{ item.helper_nickname }}</view>
+							<view class="phone" v-if="item.status == 1 || item.status == 3">手机号:{{ item.helper_mobile }}</view>
+							<view class="time">救援时间:{{ item.createtime }}</view>
+						</view>
+						<view class="tpl">{{ item.status_text }}</view>
+						<view class="call-btn flex" v-if="item.status == 1">
+							<view class="payPhone flex" @click.stop="Tocall1(item)">
+								<image src="/static/img/phone1.png" mode="widthFix"></image>
+								<text>拨打电话</text>
+							</view>
+							<view class="payVideo flex" @click.stop="TocallVideo(item)" >
+								<image src="/static/img/video1.png" mode="widthFix"></image>
+								<text>视频通话</text>
+							</view>
+						</view>
+					</view>
+					<uni-load-more :status="loadingType1"></uni-load-more>
+				</scroll-view>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+import { mapState, mapMutations } from 'vuex';
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+import { toMySosList, accessSos, refuseSos, mySosList } from '@/api/record.js';
+import { getTime } from '@/utils/rocessor.js';
+import { getUserInfo } from '@/api/login.js';
+// 引入实时通信
+export default {
+	components: {
+		uniLoadMore,
+		empty
+	},
+	computed: {
+		...mapState(['userInfo'])
+	},
+	data() {
+		return {
+			tabCurrentIndex: 0,
+			navList: [
+				{
+					id: 1,
+					text: '救援记录'
+				},
+				{
+					id: 2,
+					text: '求救记录'
+				}
+			],
+			HpleList: [],
+			RescueList: [],
+			limit: 4, //每次加载数据条数
+			page: 1, //当前页数
+			page1: 1,
+			loadingType: 'more', //加载更多状态
+			loadingType1: 'more', //加载更多状态
+			loading: 0
+		};
+	},
+	onLoad() {
+		this.loadBaseData()
+	},
+	onShow() {
+		this.page = 1;
+		this.loadingType = 'more';
+		this.RescueList = [];
+		this.RescueData();
+	},
+	//下拉刷新
+	// onPullDownRefresh() {
+	// 	this.page1 = 1;
+	// 	this.page = 1;
+	// 	this.RescueData('refresh');
+	// 	this.HpleData('refresh');
+	// },
+	methods: {
+		...mapMutations(['setUserInfo','logout']),
+		// 加载初始数据
+		loadBaseData() {
+			let obj = this;
+			getUserInfo({}).then(({ data }) => {
+				obj.setUserInfo(data.user);
+			}).catch((e) => {
+				obj.logout()
+			});
+		},
+		//我的救援列表
+		async RescueData(source) {
+			let obj = this;
+			if (source != 'refresh') {
+				//没有更多数据直接跳出方法
+				if (obj.loadingType === 'nomore') {
+					return;
+				} else {
+					// 设置当前为数据载入中
+					obj.loadingType = 'loading';
+				}
+			} else {
+				//当重新加载数据时更新状态为可继续添加数据
+				obj.loadingType = 'more';
+			}
+			toMySosList({
+				status: -1,
+				page: obj.page,
+				limit: obj.limit
+			})
+				.then(({ data }) => {
+					if (source === 'refresh') {
+						obj.RescueList = [];
+					}
+					let arr = data.map(e => {
+						e.createtime = getTime(e.createtime);
+						return e;
+					});
+					obj.RescueList = obj.RescueList.concat(arr);
+					//判断是否还有下一页,有是more  没有是nomore
+					if (obj.limit == arr.length) {
+						obj.page++;
+						obj.loadingType = 'more';
+					} else {
+						obj.loadingType = 'nomore';
+					}
+					// 判断是否为刷新数据
+					if (source == 'refresh') {
+						// 判断是否为点击搜索按钮跳转加载
+						if (obj.loading == 1) {
+							uni.hideLoading();
+						} else {
+							uni.stopPullDownRefresh();
+						}
+					}
+					console.log(obj.loadingType, 'zuihou');
+				})
+				.catch(e => {
+					obj.loadingType = 'nomore';
+					uni.stopPullDownRefresh();
+					uni.hideLoading();
+				});
+		},
+		//我的求救列表
+		async HpleData(source) {
+			//这里是将订单挂载到tab列表下
+			let obj = this;
+			if (source != 'refresh') {
+				//没有更多数据直接跳出方法
+				if (obj.loadingType1 === 'nomore') {
+					return;
+				} else {
+					// 设置当前为数据载入中
+					obj.loadingType1 = 'loading';
+				}
+			} else {
+				//当重新加载数据时更新状态为可继续添加数据
+				obj.loadingType1 = 'more';
+			}
+			mySosList({
+				status: -1,
+				page: obj.page1,
+				limit: obj.limit
+			})
+				.then(({ data }) => {
+					if (source === 'refresh') {
+						obj.HpleList = [];
+					}
+					let arr = data.map(e => {
+						e.createtime = getTime(e.createtime);
+						return e;
+					});
+					obj.HpleList = obj.HpleList.concat(arr);
+					//判断是否还有下一页,有是more  没有是nomore
+					if (obj.limit == arr.length) {
+						obj.page1++;
+						obj.loadingType1 = 'more';
+					} else {
+						obj.loadingType1 = 'nomore';
+					}
+					// 判断是否为刷新数据
+					if (source == 'refresh') {
+						// 判断是否为点击搜索按钮跳转加载
+						if (obj.loading == 1) {
+							uni.hideLoading();
+						} else {
+							uni.stopPullDownRefresh();
+						}
+					}
+				})
+				.catch(e => {
+					obj.loadingType1 = 'nomore';
+					uni.stopPullDownRefresh();
+					uni.hideLoading();
+				});
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+			if (this.tabCurrentIndex == 0) {
+				this.page = 1;
+				this.loadingType = 'more';
+				this.RescueData('refresh');
+			}
+			if (this.tabCurrentIndex == 1) {
+				this.page1 = 1;
+				this.loadingType1 = 'more';
+				this.HpleData('refresh');
+			}
+		},
+		//swiper 切换
+		// changeTab(e) {
+		// 	this.tabCurrentIndex = e.target.current;
+		// 	this.loadData('tabChange');
+		// },
+		//拨打电话
+		Tocall(item) {
+			uni.makePhoneCall({
+				phoneNumber: item.caller_mobile
+			});
+		},
+		Tocall1(item) {
+			uni.makePhoneCall({
+				phoneNumber: item.helper_mobile
+			});
+		},
+		//拨打电话
+		TocallVideo(item) {
+			let obj = this;
+			console.log( obj.userInfo);
+			uni.navigateTo({
+				url: '/pagesA/record/call?userId=' + obj.userInfo.id + '&roomId=' + item.id
+			});
+		},
+      
+		access(item) {
+			let obj = this;
+			uni.showModal({
+				title: '提示',
+				content: '您确定要接受求救吗',
+				success: function(res) {
+					if (res.confirm) {
+						accessSos({
+							id: item.id
+						})
+							.then(data => {
+								obj.$api.msg(data.msg);
+								obj.page = 1;
+								obj.RescueData('refresh');
+								obj.HpleData('refresh');
+							})
+							.catch(e => {
+								obj.$api.msg(e.message);
+								obj.page = 1;
+								obj.RescueData('refresh');
+								obj.HpleData('refresh');
+							});
+					} else if (res.cancel) {
+						console.log('用户点击取消');
+					}
+				}
+			});
+		},
+		refuse(item) {
+			let obj = this;
+			uni.showModal({
+				title: '提示',
+				content: '您确定要拒绝求救吗?',
+				success: function(res) {
+					if (res.confirm) {
+						refuseSos({
+							id: item.id
+						})
+							.then(data => {
+								console.log(data.msg, 77);
+								obj.$api.msg(data.msg);
+								obj.page = 1;
+								obj.RescueData('refresh');
+								obj.HpleData('refresh');
+							})
+							.catch(e => {
+								obj.$api.msg(e.message);
+								obj.page = 1;
+								obj.RescueData('refresh');
+								obj.HpleData('refresh');
+							});
+					} else if (res.cancel) {
+						console.log('用户点击取消');
+					}
+				}
+			});
+		},
+		navTo(url) {
+			uni.navigateTo({
+				url
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #f8f6f6;
+	height: 100%;
+	.container {
+		width: 100%;
+		height: 100%;
+		.swiper-box {
+			height: 85vh;
+			padding-top: 25rpx;
+			.cate-list {
+				height: 100%;
+			}
+		}
+	}
+}
+.navbar {
+	display: flex;
+	height: 40px;
+	background: #fff;
+	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
+	position: relative;
+	z-index: 10;
+	.nav-item {
+		flex: 1;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 100%;
+		font-size: 15px;
+		color: $font-color-dark;
+		position: relative;
+		&.current {
+			color: $font-color;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 44px;
+				height: 0;
+				border-bottom: 2px solid #bc253a;
+			}
+		}
+	}
+}
+.nodata {
+	width: 430rpx;
+	margin: 0rpx auto;
+	padding-top: 80rpx;
+	image {
+		width: 430rpx;
+		height: 337rpx;
+	}
+	.text {
+		text-align: center;
+		color: #999999;
+		font-size: 26rpx;
+	}
+}
+.swiper-box {
+	height: calc(100% - 40px);
+}
+.list-scroll-content {
+	height: 100%;
+}
+.navbar {
+	overflow: hidden;
+	white-space: nowrap;
+	background: #fff;
+	padding: 0rpx 25rpx;
+	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
+	.nav-item {
+		text-align: center;
+		display: inline-block;
+		height: 100%;
+		font-size: 28rpx;
+		color: $font-color-dark;
+		position: relative;
+		width: 25%;
+		padding: 25rpx 0rpx;
+		&.current {
+			color: #ff6666;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 35px;
+				height: 0;
+				border-bottom: 2px solid #ff6666;
+			}
+		}
+	}
+}
+
+.content-box {
+	width: 90%;
+	margin: 0rpx auto;
+	background-color: #ffffff;
+	border-radius: 15rpx;
+	padding: 47rpx 30rpx;
+	font-size: 24rpx;
+	line-height: 60rpx;
+	color: #666666;
+	margin-bottom: 25rpx;
+}
+.item {
+	.name {
+		font-size: 28rpx;
+		color: #333333;
+		font-weight: 500;
+	}
+}
+.item-addr{
+		background-color: #8DD64C;
+		border-radius: 50rpx;
+		padding: 8rpx 25rpx;
+		color: #FFFFFF;
+	}
+.call-btn {
+	padding-top: 25rpx;
+	font-size: 30rpx !important;
+	color: #FFFFFF;
+	.payPhone {
+		background-color: #FF5050;
+		border-radius: 50rpx;
+		padding: 8rpx 25rpx;
+		border: 1px solid #ff4f4f;
+		border-radius: 99rpx;
+		}
+	.payPhone {
+		border-right: 1px solid #ff4f4f;
+		padding: 0rpx 30rpx;
+		align-self: stretch ;
+		image {
+			width: 60rpx;
+			height: 60rpx;
+			margin-right: 15rpx;
+		}
+	}
+	.payVideo {
+		background-color: #3686FD;
+		border-radius: 50rpx;
+		padding: 8rpx 25rpx;
+		image {
+			width: 60rpx;
+			height: 48rpx;
+			margin-right: 15rpx;
+		}
+	}
+	}
+.box-btn {
+	width: 80%;
+	margin: 0rpx auto;
+	margin-top: 30rpx;
+	text-align: center;
+	.accept {
+		background: #ff4f4f;
+		color: #ffffff;
+		padding: 0rpx 30rpx;
+		width: 35%;
+	}
+	.refuse {
+		background: #f3f3f3;
+		width: 35%;
+		padding: 0rpx 30rpx;
+	}
+}
+.tpl {
+	font-size: 28rpx;
+	font-weight: bold;
+	color: rgba(255, 79, 79, 1);
+}
+</style>

+ 125 - 0
pages/redirect/redirect.vue

@@ -0,0 +1,125 @@
+<template>
+	<view>
+	</view>
+</template>
+<script>
+import { getUserInfo } from '@/api/login.js';
+import { mapMutations,mapState } from 'vuex';
+// #ifdef H5
+import { wechatAuth } from '@/api/wx';
+// #endif
+// #ifdef MP-WEIXIN
+import { wechatMpAuth } from '@/api/wx';
+// #endif
+export default {
+	computed: {
+		...mapState(['urlFile'])
+	},
+	onLoad(option) {
+		let obj = this;
+		// 判断是否需要保存定向地址
+		// #ifdef H5
+		this.loadH5()
+		// #endif
+		// #ifdef MP-WEIXIN
+		this.loadMp(option)
+		// #endif
+	},
+	methods: {
+		...mapMutations('user',['login', 'setUserInfo']),
+		// #ifdef H5
+		loadH5() {
+			let obj = this;
+			let url = window.location.href;
+			let code = url.match(/code=([0-9]|[a-z]|[A-Z])*/g)[0].replace('code=', '');
+			let spread = uni.getStorageSync('spread')||'';
+			wechatAuth({
+				code: code,
+				spread:spread,
+			}).then(({ data }) => {
+				obj.wchatAuth(data.userinfo);
+			}).catch((e) => {
+				uni.showModal({
+					title: '错误',
+					content: JSON.stringify(e),
+					showCancel: false,
+				});
+			});;
+		},
+		// #endif
+		// #ifdef MP-WEIXIN
+		loadMp(option) {
+			let obj = this;
+			// 获取登录授权页数据
+			let user = obj.$api.prePage().userInfo;
+			// #ifndef MP
+			// 获取推广人id
+			let spread_spid = uni.getStorageSync('spread') || '';
+			// #endif
+			// #ifdef MP
+			// 小程序推广人
+			let spread_code = uni.getStorageSync('spread_code') || '';
+			// #endif
+			wechatMpAuth({
+				code: option.code,
+				iv: user.target.iv,
+				encryptedData: user.target.encryptedData,
+				// #ifndef MP
+				spread_spid: spread_spid,
+				// #endif
+				// #ifdef MP
+				spread_code:spread_code
+				// #endif
+			}).then(({ data }) => {
+				obj.wchatAuth(data);
+				// 设置成功后修改当前页面
+				history.replaceState({ name: '我的' }, '我的', obj.urlFile+'/#/pages/user/user');
+			}).catch((e) => {
+				uni.showModal({
+					title: '错误',
+					content: JSON.stringify(e),
+					showCancel: false,
+				});
+			});
+		},
+		// #endif
+		wchatAuth(data) {
+			console.log(data)
+			let obj = this;
+			// 保存token
+			uni.setStorageSync('token', data.token);
+			// 获取用户基础信息
+			getUserInfo({}).then(e => {
+				obj.login();
+				// 保存返回用户数据
+				obj.setUserInfo(e.data.user);
+				let ur = uni.getStorageSync('present')|| '/pages/user/user';
+				// 用于处理缓存bug
+				if (ur=='pages/product/product') {
+					ur = '/pages/user/user'
+				}
+				uni.switchTab({
+					url: ur,
+					fail(e) {
+						uni.navigateTo({
+							url: ur,
+							fail(e) {
+								uni.navigateTo({
+									url: '/pages/user/user',
+								});
+							}
+						});
+					}
+				});
+			}).catch((e) => {
+				uni.showModal({
+					title: '错误',
+					content: JSON.stringify(e),
+					showCancel: false,
+				});
+			});;
+		}
+	}
+};
+</script>
+<style></style>

+ 124 - 0
pages/rescuers/ToKey.vue

@@ -0,0 +1,124 @@
+<template>
+	<view class="container">
+		<view class="input-box">
+			<input placeholder="默认关键字" @input='onchance' v-model="mechanism" placeholder-style="color:#c0c0c0;" />
+		</view>
+		<mepicker ref="picker"
+		  mode="selector"
+		  :list="meList"
+		  @change="handleChange"
+		  @confirm="handleConfirm"
+		  @cancel="handleCancel">
+		</mepicker>
+	</view>
+</template>
+<script>
+	import mepicker from '@/components/picker/index.vue'
+	import { hospitalList } from '@/api/record.js';
+	export default {
+		components: {
+			mepicker
+		},
+		data() {
+			return {
+				mechanism:'',//机构
+				hospital_id:"",//机构id
+				meList: [],//机构列表
+			};
+		},
+		onLoad(option) {
+			if(option.mechanism == '' || option.mechanism == undefined){
+				this.mechanism = '';
+			}else{
+				this.mechanism = option.mechanism;
+			}
+		},
+		watch:{
+			// meList(newValue, oldValue) {
+			// 	if(newValue != oldValue){
+			// 		this.mechanism = ''
+			// 	}
+			// },
+		},
+		methods:{
+			//当键盘输入时,触发input事件
+			onchance(e){
+				this.keyword = e.detail.value;
+				this.ListDate();
+				this.handleTap('picker');
+			},
+			//显示弹窗
+			handleTap(name) {
+				this.$refs[name].show();
+			},
+			//加载机构列表
+			ListDate(){
+				let obj = this;
+				hospitalList({
+					keyword:obj.mechanism
+				}).then(e => {
+					obj.meList = e.data
+				}).catch((e) => {
+					console.log(e)
+				});
+			},
+			handleChange (item) {
+			},
+			handleCancel (item) {
+				
+			},
+			handleConfirm (item) {
+				let obj = this;
+				if(item != null){
+					obj.mechanism = item.item.name;
+					obj.hospital_id = item.item.id;
+					uni.navigateTo({
+						url:'/pages/rescuers/rescuers?hospital_id='+item.item.id+'&mechanism='+item.item.name
+					})
+					// uni.showT
+				}else{
+					obj.mechanism = '';
+					obj.keyword = '';
+				}
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+	}
+	.container{
+		background-color: #FFFFFF;
+		height: 100%;
+		padding-top: 180rpx;
+	}
+	//搜索框
+	.input-box {
+		width: 92%;
+		margin: 0rpx auto;
+		height: 70rpx;
+		background-color: #f5f5f5;
+		border-radius: 50rpx;
+		position: relative;
+		display: flex;
+		align-items: center;
+		.icon {
+			display: flex;
+			align-items: center;
+			position: absolute;
+			top: 0;
+			right: 0;
+			width: 60rpx;
+			height: 80rpx;
+			font-size: 34rpx;
+			color: #c0c0c0;
+		}
+		input {
+			padding-left: 28rpx;
+			height: 28rpx;
+			font-size: 28rpx;
+		}
+	}
+</style>

+ 519 - 0
pages/rescuers/rescuers.vue

@@ -0,0 +1,519 @@
+<template>
+	<view class="container">
+		<image src="https://sos.liuniu946.com/static/img/img010.png"></image>
+		<view class="label-item">
+			<view class="content-box">
+				<view class="tip"><image src="/static/img/img012.png"></image></view>
+				<view class="number">参与人数{{total}}人</view>
+				<view class="list flex_item">
+					<view class="list-item" v-if="list.length > 0"  v-for="ls in list">
+						<view class="portrait"><image :src="ls.avatar"></image></view>
+						<view class="name clamp">{{ls.helper_name}}</view>
+					</view>
+					<view class="noDate" v-if="list.length == 0">暂无数据</view>
+				</view>
+			</view>
+			<view class="content-box" v-if="userInfo.helper == 0">
+				<view class="tip"><image src="/static/img/img012.png"></image></view>
+				<view class="number">报名参与</view>
+				<view class="list">
+					<view class="list-input flex_item">
+						<view class="lable">姓名:</view>
+						<view><input class="input-box" type="text" v-model="name" placeholder="请输入您的姓名" /></view>
+					</view>
+					<view class="list-input flex_item">
+						<view class="lable">手机:</view>
+						<view><input class="input-box" type="number" v-model="phone" placeholder="请填写您的联系方式" /></view>
+					</view>
+					<view class="list-input flex_item" @click="getLocation">
+						<view class="lable">地址:</view>
+						<view class="address">{{addressDate}}</view>
+					</view>
+					<view class="list-input flex_item" @click="ToKey">
+						<view class="lable">机构:</view>
+						<view class="flex seach-box">
+							<input class="input-box" type="text" v-model="mechanism" placeholder='请输入机构关键字'/>
+						</view>
+					</view>
+					<view class="list-input">
+						<view class="lable">证件:</view>
+						<view class="icon">
+							<image class="image" v-show="img1" :src="image" @click="scImg"></image>
+							<image class="image1" v-show="img2" :src="image2" @click="scImg" mode="widthFix"></image>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="btn" v-if="userInfo.helper == 0"><view class="submit" @click="BeHelper">马上报名</view></view>
+			<view class="text-box" v-if="userInfo.helper == 1">您已经是一名救援者了!</view>
+		</view>
+	</view>
+</template>
+<script>
+	import { mapState,mapMutations } from 'vuex';
+	import { upload,toBeHelper,hospitalList,getAllHelper } from '@/api/record.js';
+	import  pickerAddress from '@/components/wangding-pickerAddress/wangding-pickerAddress.vue';
+	import LbPicker from '@/components/lb-picker/index.vue'
+	// #ifdef MP
+	import { openMap } from '@/utils/rocessor.js';
+	// #endif
+	import { getUserInfo } from '@/api/login.js';
+	export default {
+		components: {
+			pickerAddress,
+			LbPicker
+		},
+		data() {
+			return {
+				userInfo:'',
+				addressDate:'请选择定位地址',//选择定位地址
+				total:'',
+				img1:true,//图片1显示
+				img2:false,//图片2显示
+				list:'',//报名列表
+				name:'',//姓名
+				phone:'',//联系方式
+				// addr:'',//省市区
+				keyword:'',//机构关键字
+				mechanism:'',//机构
+				hospital_id:"",//机构id
+				image:'/static/img/img013.png',//资格证
+				image2:'',
+				region:'',
+				meList: [],//机构列表
+				commonly_lat:'',//经度
+				commonly_lng:'',//维度
+			
+			};
+		},
+		onLoad(option) {
+			if(option.mechanism == '' || option.mechanism == undefined){
+				this.mechanism = '';
+			}else{
+				this.mechanism = option.mechanism;
+			}
+			if(option.hospital_id == '' || option.hospital_id == undefined){
+				this.hospital_id = '';
+			}else{
+				this.hospital_id = option.hospital_id;
+				console.log(this.hospital_id)
+			}
+		},
+		onShow() {
+			this.GetUser();
+			this.loadData();
+			// addressDate:'请选择定位地址',//选择定位地址
+			// name:'',//姓名
+			// phone:'',//联系方式
+			// image2:'',
+			// commonly_lat:'',//经度
+			// commonly_lng:'',//维度
+			if(uni.getStorageSync('name')){
+				this.name = uni.getStorageSync('name')
+			}
+			if(uni.getStorageSync('addressDate')){
+				this.addressDate = uni.getStorageSync('addressDate')
+			}
+			if(uni.getStorageSync('phone')){
+				this.phone = uni.getStorageSync('phone')
+			}
+			if(uni.getStorageSync('image2')){
+				this.img1 = false;
+				this.img2 = true;
+				this.image2 = uni.getStorageSync('image2')
+
+			}
+			if(uni.getStorageSync('commonly_lat')){
+				this.commonly_lat = uni.getStorageSync('commonly_lat')
+			}
+			if(uni.getStorageSync('commonly_lng')){
+				this.commonly_lng = uni.getStorageSync('commonly_lng')
+			}
+		},
+		//下拉刷新
+		onPullDownRefresh() {
+			this.loadData();
+			this.GetUser();
+		},
+		watch:{
+			meList(newValue, oldValue) {
+				if(newValue != oldValue){
+					this.mechanism = ''
+				}
+			},
+			name(newValue, oldValue){
+				if(newValue != oldValue){
+					uni.setStorageSync('name', this.name);
+				}
+			},
+			phone(newValue, oldValue){
+				if(newValue != oldValue){
+					uni.setStorageSync('phone', this.phone);
+					console.log(uni.getStorageSync('phone'))
+				}
+			},
+			addressDate(newValue, oldValue){
+				if(newValue != oldValue){
+					uni.setStorageSync('addressDate', this.addressDate);
+					console.log(uni.getStorageSync('addressDate'))
+				}
+			},
+			commonly_lat(newValue, oldValue){
+				if(newValue != oldValue){
+					uni.setStorageSync('commonly_lat', this.commonly_lat);
+					console.log(uni.getStorageSync('commonly_lat'))
+				}
+			},
+			commonly_lng(newValue, oldValue){
+				if(newValue != oldValue){
+					uni.setStorageSync('commonly_lng', this.commonly_lng);
+					console.log(uni.getStorageSync('commonly_lng'))
+				}
+			},
+			image2(newValue, oldValue){
+				if(newValue != oldValue){
+					uni.setStorageSync('image2', this.image2);
+					console.log(uni.getStorageSync('image2'))
+					
+				}
+			},
+		},
+		methods: {
+			...mapMutations(['setUserInfo']),
+			GetUser(){
+				let obj = this;
+				getUserInfo({}).then(({ data }) => {
+					obj.userInfo = data.user;
+					console.log(obj.userInfo)
+					obj.setUserInfo(obj.userInfo);
+				}).catch((e) => {0
+					console.log(e)
+				});
+			},
+			ToKey(){
+				let obj = this;
+				uni.navigateTo({
+					url:'/pages/rescuers/ToKey?mechanism='+this.mechanism
+				})
+			},
+			// 请求载入数据
+			loadData(){
+				let obj = this;
+				getAllHelper({}).then(({ data }) => {
+					obj.total = data.total;
+					obj.list = data.list
+					uni.stopPullDownRefresh();
+					// console.log(this.list)
+				})
+			},
+			// 获取当前位置
+			getLocation() {
+				const obj = this;
+				// #ifdef MP
+				openMap().then(() => {
+					uni.getLocation({
+						type: 'gcj02',
+						success(e) {
+							uni.chooseLocation({
+								latitude: e.latitude,
+								longitude: e.longitude,
+								success(e) {
+									console.log(e)
+									obj.commonly_lat = e.latitude;
+									obj.commonly_lng = e.longitude;
+									obj.addressDate = e.address;
+								}
+							});
+						}
+					});
+				}).catch((e) => {
+					uni.showModal({
+						title: '提示',
+						content: '您未授权无法调用地图定位功能!',
+						showCancel: false,
+					});
+				})
+				// #endif
+			},
+			//当键盘输入时,触发input事件
+			onchance(e){
+				this.keyword = e.detail.value;
+				this.ListDate();
+				this.handleTap('picker1');
+			},
+			//显示弹窗
+			handleTap(name) {
+				this.$refs[name].show();
+			},
+			//加载机构列表
+			ListDate(){
+				let obj = this;
+				hospitalList({
+					keyword:obj.keyword
+				}).then(e => {
+					obj.meList = e.data
+				}).catch((e) => {
+					console.log(e)
+				});
+			},
+			handleChange (item) {
+			},
+			handleCancel (item) {
+				
+			},
+			handleConfirm (item) {
+				let obj = this;
+				if(item != null){
+					obj.keyword = item.item.name;
+					obj.mechanism = item.item.name;
+					obj.hospital_id = item.item.id;
+				}else{
+					obj.mechanism = '';
+					obj.keyword = '';
+				}
+			},
+			// // 选中城市切换
+			// onCityClick({data}) {
+			// 	this.region = data;
+			// 	this.addr = this.region.map(item=>item.name).join('/');
+			// 	this.code = this.region.map(item=>item.code).join('/');
+			// 	this.ListDate();
+			// },
+			scImg() {
+				let obj = this;
+				upload({
+					file: ''
+				}).then(e => {
+					obj.img1 = false;
+					obj.img2 = true;
+					obj.image2 = 'https://sos.liuniu946.com/'+e[0].url;
+				}).catch((e) => {
+					uni.showModal({
+						title:'错误',
+						content:e.message,
+					})
+				});
+			},
+			BeHelper(){
+				let obj = this;
+				if(!obj.name){
+					obj.$api.msg('请填写姓名');
+					return;
+				}
+				if(!obj.phone){
+					obj.$api.msg('请填写联系方式');
+					return;
+				}
+				if(obj.addressDate == '请选择地址'){
+					obj.$api.msg('请选择地址');
+					return;
+				}
+				console.log(obj.hospital_id)
+				if(!obj.hospital_id){
+					obj.$api.msg('请选择机构');
+					return;
+				}
+				if(!obj.image2){
+					obj.$api.msg('请上传资格证');
+					return;
+				}
+				toBeHelper({
+					// reason:'我自愿成为一名光荣的救援者!',
+					// area_id:obj.code,
+					name: obj.name,
+					mobile:obj.phone,
+					commonly_lat:obj.commonly_lat,
+					commonly_lng:obj.commonly_lng,
+					// area:obj.addr,//省市区
+					commonly_address:obj.addressDate,				
+					hospital_id:obj.hospital_id,//机构
+					credentials:obj.image2//资格证书
+				}).then(e => {
+					uni.showToast({
+						title: e.msg,
+						type: 'top',
+						duration: 3000,
+						icon: 'none'
+					})
+					setTimeout(function() {
+						uni.switchTab({
+							url: '/pages/user/user'
+						})
+					}, 3000);
+				}).catch((e) => {
+					uni.showToast({
+						title: e.message,
+						type: 'top',
+						duration: 3000,
+						icon: 'none'
+					})
+					setTimeout(function() {
+						uni.switchTab({
+							url: '/pages/user/user'
+						})
+					}, 3000);
+					console.log(e)
+				});
+			},
+		}
+	};
+</script>
+
+<style lang="scss">
+page{
+	width: 100%;
+	background-color: #ffabab;
+	height: 100%;
+	.container{
+		width: 100%;
+		background-color: #ffabab;
+		image{
+			width: 100%;
+			height: 927rpx;
+		}
+		.label-item{
+			margin-top: -220rpx;
+			margin-bottom: 80rpx;
+			height: 100%;
+		}
+	}
+}
+.btn{
+	width: 90%;
+	margin: 25rpx auto;
+	padding: 50rpx 0rpx;
+}
+.text-box{
+	text-align: center;
+	color: #FFFFFF;
+	padding-top: 50rpx;
+	padding-bottom: 100rpx;
+}
+.submit{
+	border-radius: 50rpx;
+	background:linear-gradient(0deg,rgba(231,57,50,1) 0%,rgba(254,78,78,1) 100%);
+	text-align: center;
+	padding: 30rpx 0rpx;
+	color: #FFFFFF;
+}
+.content-box{
+	position: relative;
+	margin-bottom: 25rpx;
+	.tip{
+		width: 100%;
+		height: 66rpx;
+		text-align: center;
+		z-index: 999;
+		position: relative;
+		top: 35rpx;
+		image{
+			width: 433rpx;
+			height: 100%;
+			z-index: 999;
+		}
+	}
+	.number{
+		position: absolute;
+		color: #FFFFFF;
+		top: 15rpx;
+		text-align: center;
+		width: 100%;
+		z-index: 9999;
+		padding-top: 25rpx;
+	}
+	.list{
+		padding: 50rpx 40rpx;
+		padding-right: 0rpx !important;
+		padding-top: 80rpx;
+		width: 92%;
+		margin: 0rpx auto;
+		min-height: 200rpx;
+		background-color: #FFFFFF;
+		border-radius: 25rpx;
+		display: flex;
+		flex-wrap: wrap;
+		.noDate{
+			width: 100%;
+			text-align: center;
+			font-size: 24rpx;
+		}
+		.list-item{
+			width: 110rpx;
+			text-align: center;
+			color: #000000;
+			font-size: 18rpx;
+			margin-right: 20rpx;
+			margin-top: 25rpx;
+			.portrait{
+				width: 110rpx;
+				height: 110rpx;
+				border-radius: 100%;
+				image{
+					width: 100%;
+					height: 100%;
+					border-radius: 100%;
+				}
+			}
+			.name{
+				margin-top: 10rpx;
+				width: 110rpx;
+				font-size: 17rpx;
+			}
+		}
+	}
+	
+}
+.seach-box{
+	width: 82%;
+}
+.seach{
+	width: 50rpx;
+	height: 50rpx;
+	.seach-icon{
+		width: 50rpx;
+		height: 50rpx;
+	}
+}
+.address{
+	font-size: 24rpx !important;
+	color: #FF9797 !important;
+	width: 80%;
+}
+.list-input{
+	border: 2rpx solid #E73932;
+	border-radius: 50rpx;
+	padding: 25rpx 40rpx;
+	margin-bottom: 35rpx;
+	width: 92%;
+	.lable{
+		color: #E73932;
+		font-size: 31rpx;
+	}
+	.input{
+		color: #FF9797 !important;
+		font-size: 24rpx !important;
+	}
+	.icon{
+		margin: 25rpx auto;
+		min-height: 140rpx;
+		text-align: center;
+		.image{
+			width: 114rpx;
+			height: 114rpx;
+		}
+		.image1{
+			min-width: 114rpx;
+			min-height: 114rpx;
+		}
+	}
+}
+ .input-placeholder{
+		color: #FF9797 !important;
+		font-size: 28rpx;
+	}
+	.input-box{
+		color: #FF9797 !important;
+		font-size: 28rpx !important;
+		width: 85%;
+	}
+</style>

+ 149 - 0
pages/set/password.vue

@@ -0,0 +1,149 @@
+<template>
+	<view class="container">
+		<view class="row b-b">
+			<text class="tit">手机号</text>
+			<input class="input" v-model="account" type="text" placeholder="请填写手机号" placeholder-class="placeholder" />
+		</view>
+		<view class="row b-b">
+			<text class="tit">验证码</text>
+			<input class="input" v-model="captcha" type="text" placeholder="请填写验证码" placeholder-class="placeholder" />
+			<view class="code" @click="verification">{{ countDown == 0 ? '验证码' : countDown }}</view>
+		</view>
+		<view class="row b-b">
+			<text class="tit">新密码</text>
+			<input class="input" v-model="password" type="password" placeholder="请填写新密码" placeholder-class="placeholder" />
+		</view>
+		<button class="add-btn" :class="{'bg-gray':loding}" @click="loding?'':confirm()">提交</button>
+	</view>
+</template>
+
+<script>
+import { verify } from '@/api/login.js';
+import { registerReset } from '@/api/set.js';
+export default {
+	data() {
+		return {
+			time: '', //保存倒计时对象
+			countDown: 0, //倒计时
+			account: '', //手机号
+			captcha: '', //验证码
+			password: '' ,//新密码
+			loding:false,//是否载入中
+		};
+	},
+	watch: {
+		// 监听倒计时
+		countDown(i) {
+			if (i == 0) {
+				clearInterval(this.time);
+			}
+		}
+	},
+	methods: {
+		//发送验证码
+		verification() {
+			let obj = this;
+			if (this.account == '') {
+				this.$api.msg('请输入电话号码');
+				return;
+			}
+			if (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(this.account)) {
+				this.$api.msg('请输入正确的手机号');
+				return;
+			}
+			// 判断是否在倒计时
+			if (obj.countDown > 0) {
+				return false;
+			} else {
+				obj.countDown = 60;
+				obj.time = setInterval(() => {
+					obj.countDown--;
+				}, 1000);
+				//调用验证码接口
+				verify({
+					phone: obj.account,
+					type: ''
+				})
+					.then(({ data }) => {})
+					.catch(err => {
+						console.log(err);
+					});
+			}
+		},
+		confirm(e) {
+			this.loding = true;
+			registerReset({
+				account: this.account,
+				captcha: this.captcha,
+				password: this.password,
+			})
+				.then(({ data }) => {
+					this.loding = false;
+					this.$api.msg('修改成功');
+				})
+				.catch(err => {
+					this.loding = true;
+					console.log(err);
+				});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: $page-color-base;
+}
+.container {
+	padding-top: 30rpx;
+}
+.row {
+	display: flex;
+	align-items: center;
+	position: relative;
+	padding: 0 30rpx;
+	height: 110rpx;
+	background: #fff;
+
+	.tit {
+		flex-shrink: 0;
+		width: 120rpx;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.input {
+		flex: 1;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.iconlocation {
+		font-size: 36rpx;
+		color: $font-color-light;
+	}
+}
+.add-btn {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 690rpx;
+	height: 80rpx;
+	margin: 60rpx auto;
+	font-size: $font-lg;
+	color: #fff;
+	background-color: $base-color;
+	border-radius: 10rpx;
+	// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
+}
+
+.bg-gray{
+	background-color: $color-gray;
+}
+.code {
+	color: #5dbc7c;
+	font-size: 23rpx;
+	border-left: 1px solid #eeeeee;
+	width: 150rpx;
+	flex-shrink: 0;
+	text-align: center;
+}
+</style>

+ 171 - 0
pages/set/phone.vue

@@ -0,0 +1,171 @@
+<template>
+	<view class="container">
+		<view class="row b-b">
+			<text class="tit">手机号</text>
+			<input class="input" v-model="account" type="text" placeholder="请填写手机号" placeholder-class="placeholder" />
+		</view>
+		<view v-show="show">
+			<view class="row b-b">
+				<text class="tit">验证码</text>
+				<input class="input" v-model="captcha" type="text" placeholder="请填写验证码" placeholder-class="placeholder" />
+				<view class="code" @click="verification">{{ countDown == 0 ? '验证码' : countDown }}</view>
+			</view>
+			<button class="add-btn" :class="{'bg-gray':loding}" @click="loding?'':confirm()">提交</button>
+		</view>
+	</view>
+</template>
+
+<script>
+import { verify,getUserInfo } from '@/api/login.js';
+import { mapState,mapMutations  } from 'vuex';
+import { registerReset } from '@/api/set.js';
+import { bangding } from '@/api/login.js';
+export default {
+	data() {
+		return {
+			time: '', //保存倒计时对象
+			countDown: 0, //倒计时
+			account: '', //手机号
+			captcha: '', //验证码
+			password: '' ,//新密码
+			loding:false,//是否载入中
+			show:true
+		};
+	},
+	watch: {
+		// 监听倒计时
+		countDown(i) {
+			if (i == 0) {
+				clearInterval(this.time);
+			}
+		}
+	},
+	computed: {
+		...mapState(['userInfo'])
+	},
+	onLoad() {
+		if(this.userInfo.phone == null){
+			this.account = '';
+		}else{
+			this.account = this.userInfo.phone;
+			this.show = false;
+		}
+	},
+	methods: {
+		...mapMutations(['setUserInfo']),
+		//发送验证码
+		verification() {
+			let obj = this;
+			if (obj.account == '') {
+				obj.$api.msg('请输入电话号码');
+				return;
+			}
+			// 判断是否在倒计时
+			if (obj.countDown > 0) {
+				return false;
+			} else {
+				obj.countDown = 60;
+				obj.time = setInterval(() => {
+					obj.countDown--;
+				}, 1000);
+				//调用验证码接口
+				verify({
+					phone: obj.account,
+					type: 'BDING_CODE'
+				})
+					.then(({ data }) => {
+						 obj.GetuserInfo();
+					})
+					.catch(err => {
+						console.log(err);
+					});
+			}
+		},
+		GetuserInfo(){
+			// 获取用户基础信息
+			getUserInfo({})
+				.then(({ data }) => {
+					this.setUserInfo(data);
+			})
+		},
+		confirm(e) {
+			this.loding = true;
+			bangding({
+				phone: this.account,
+				captcha: this.captcha
+			})
+				.then(({ data }) => {
+					this.loding = false;
+					this.$api.msg('绑定成功!');
+					setTimeout(function() {
+						uni.switchTab({
+							url: '/pages/user/user'
+						})
+					}, 1000);
+				})
+				.catch(err => {
+					this.loding = false;
+					console.log(err);
+				});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: $page-color-base;
+}
+.container {
+	padding-top: 30rpx;
+}
+.row {
+	display: flex;
+	align-items: center;
+	position: relative;
+	padding: 0 30rpx;
+	height: 110rpx;
+	background: #fff;
+
+	.tit {
+		flex-shrink: 0;
+		width: 120rpx;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.input {
+		flex: 1;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.iconlocation {
+		font-size: 36rpx;
+		color: $font-color-light;
+	}
+}
+.add-btn {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 690rpx;
+	height: 80rpx;
+	margin: 60rpx auto;
+	font-size: $font-lg;
+	color: #fff;
+	background-color: $base-color;
+	border-radius: 10rpx;
+	// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
+}
+
+.bg-gray{
+	background-color: $color-gray;
+}
+.code {
+	color: #5dbc7c;
+	font-size: 23rpx;
+	border-left: 1px solid #eeeeee;
+	width: 150rpx;
+	flex-shrink: 0;
+	text-align: center;
+}
+</style>

+ 103 - 0
pages/set/set.vue

@@ -0,0 +1,103 @@
+<template>
+	<view class="container">
+		<uni-list>
+		    <uni-list-item title="个人资料" @click="navTo('/pages/userinfo/userinfo')" ></uni-list-item>
+			<uni-list-item title="修改密码" @click="navTo('/pages/set/password')" ></uni-list-item>
+		<uni-list-item title="绑定手机" @click="navTo('/pages/set/phone')" ></uni-list-item> 
+		</uni-list>
+		<!-- <uni-list class="margin-t-20">
+		    <uni-list-item title="消息推送" :switch-checked='true' :show-switch="true" :show-arrow="false" switch-color='#5dbc7c'  @switchChange='switchChange'> 
+			</uni-list-item>
+		</uni-list> -->
+		<view class="list-cell log-out-btn" @click="toLogout">
+			<text class="cell-tit">退出登录</text>
+		</view>
+	</view>
+</template>
+
+<script>
+	import uniList from "@/components/uni-list/uni-list.vue"
+	import uniListItem from "@/components/uni-list-item/uni-list-item.vue"
+	import { logout } from '@/api/set.js';
+	import {  
+	    mapMutations  
+	} from 'vuex';
+	export default {
+		components: {
+			uniList,uniListItem
+		},
+		data() {
+			return {
+				
+			};
+		},
+		methods:{
+			...mapMutations(['logout']),
+			navTo(url){
+				uni.navigateTo({
+					url:url
+				})
+			},
+			//退出登录
+			toLogout(){
+				let obj = this;
+				uni.showModal({
+				    content: '确定要退出登录么',
+				    success: (e)=>{
+				    	if(e.confirm){
+							logout({}).then((e) => {
+								uni.navigateBack();
+							}).catch((e) => {
+								console.log(e);
+							})
+				    		obj.logout();
+				    	}
+				    }
+				});
+			},
+			//switch切换触发方法
+			switchChange(e){
+				console.log(e);
+				let statusTip = e.value ? '打开': '关闭';
+				this.$api.msg(`${statusTip}消息推送`);
+			},
+
+		}
+	}
+</script>
+
+<style lang='scss'>
+	page{
+		background: $page-color-base;
+	}
+	.list-cell{
+		display:flex;
+		align-items:baseline;
+		padding: 20rpx $page-row-spacing;
+		line-height:60rpx;
+		position:relative;
+		background: #fff;
+		justify-content: center;
+		&.log-out-btn{
+			margin-top: 40rpx;
+			.cell-tit{
+				color: $uni-color-primary;
+				text-align: center;
+				margin-right: 0;
+			}
+		}
+		.cell-tit{
+			flex: 1;
+			font-size: $font-base + 2rpx;
+			color: $font-color-dark;
+			margin-right:10rpx;
+		}
+		.cell-tip{
+			font-size: $font-base;
+			color: $font-color-light;
+		}
+		switch{
+			transform: translateX(16rpx) scale(.84);
+		}
+	}
+</style>

+ 61 - 0
pages/user/about.vue

@@ -0,0 +1,61 @@
+<template>
+	<view class="container">
+		<view class="content-box">
+			<image src="https://sos.liuniu946.com/static/img/img003.png"></image>
+			<view class="text">
+				用户在紧急情况下需要医疗援助的时候,可查找并联系附近注册在平台上的医务人员和救护员,请求帮助。
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+import { mapState, mapMutations } from 'vuex';
+export default {
+	data() {
+		return {
+			userInfo:'',//用户信息
+		};
+	},
+	onLoad() {
+	},
+	onShow() {
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		let obj = this;
+		//监听下拉刷新动作的执行方法,每次手动下拉刷新都会执行一次
+		setTimeout(function() {
+			obj.loadData();
+			uni.stopPullDownRefresh(); //停止下拉刷新动画
+		}, 1000);
+	},
+	methods: {
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #ffffff;
+	height: 100%;
+	.container{
+		width: 100%;
+	}
+}
+.content-box{
+	padding: 50rpx 50rpx;
+	width: 100%;
+	height: 163rpx;
+	text-align: center;
+	image{
+		width: 163rpx;
+		height: 163rpx;
+	}
+}
+.text{
+	color: #666666;
+	font-size: 30rpx;
+	text-align: left;
+	padding-top: 35rpx;
+}
+</style>

+ 246 - 0
pages/user/user.vue

@@ -0,0 +1,246 @@
+<template>
+	<view class="container">
+		<view class="content-box"  @click="navTo('/pages/rescuers/rescuers')">
+			<view class="user-section"><image :src="userInfo.avatar || '/static/error/missing-face.png'"></image></view>
+		</view>
+		<view class="cover-container"  @click="navTo('/pages/rescuers/rescuers')">
+			<view class="nickname">{{userInfo.nickname || '未登录'}}</view>
+			<view class="login1" v-if="userInfo.helper == 1"><text>救援者{{userInfo.id}}</text></view>
+			<view class="mobile" v-if="userInfo.mobile">{{userInfo.mobile }}</view>
+			<view class="login" v-if="hasLogin == false" @click="navTo('/pages/public/wxLogin')"><text>点击登录系统</text></view>
+		</view>
+		<view class="item-box">
+			<!-- <view class="flex item-list" @click="navTo('/pages/record/help')">
+				<view class="flex_item list-icon">
+					<view class="icon"><image src="/static/img/img004.png"></image></view>
+					<view class="text">求救记录</view>
+				</view>
+				<view class="icon"><text class="iconfont iconenter"></text></view>
+			</view> -->
+			<view class="flex item-list" @click="navTo('/pages/rescuers/rescuers')">
+				<view class="flex_item list-icon">
+					<view class="icon"><image src="/static/tabBar/tab-cate-current.png"></image></view>
+					<view class="text">救援者注册</view>
+				</view>
+				<view class="icon"><text class="iconfont iconenter"></text></view>
+			</view>
+			<view class="flex item-list" @click="navTo('/pages/address/address')">
+				<view class="flex_item list-icon">
+					<view class="icon"><image src="/static/img/address.png"></image></view>
+					<view class="text">常用地址</view>
+				</view>
+				<view class="icon"><text class="iconfont iconenter"></text></view>
+			</view>
+			<view class="flex item-list" @click="navTo('/pages/user/about')">
+				<view class="flex_item list-icon">
+					<view class="icon"><image src="/static/img/img006.png"></image></view>
+					<view class="text">功能介绍</view>
+				</view>
+				<view class="icon"><text class="iconfont iconenter"></text></view>
+			</view>
+			<!-- <view v-if="hasLogin == true" class="list-cell log-out-btn" @click="toLogout">
+				<text class="cell-tit">退出登录</text>
+			</view> -->
+		</view>
+	</view>
+</template>
+<script>
+import { mapState, mapMutations } from 'vuex';
+import uniList from '@/components/uni-list/uni-list.vue';
+import uniListItem from '@/components/uni-list-item/uni-list-item.vue';
+import { getUserInfo } from '@/api/login.js';
+import { saveUrl, interceptor } from '@/utils/loginUtils.js';
+import { logout } from '@/api/set.js';
+let startY = 0,
+	moveY = 0,
+	pageAtTop = true;
+export default {
+	components: {
+		uniList,
+		uniListItem
+	},
+	data() {
+		return {
+		};
+	},
+	onShow() {
+		console.log(this.hasLogin)
+		// 判断是否已经登录
+		if (this.hasLogin) {
+			this.loadBaseData();
+		}else{
+			
+			this.logout()
+		}
+	},
+	computed: {
+		...mapState(['hasLogin','userInfo'])
+	},
+	methods: {
+		...mapMutations(['setUserInfo','logout']),
+		// 加载初始数据
+		loadBaseData() {
+			let obj = this;
+			getUserInfo({}).then(({ data }) => {
+				obj.setUserInfo(data.user);
+				console.log(data.user,'dddd')
+			}).catch((e) => {
+				obj.logout()
+			});
+		},
+		//退出登录
+		toLogout(){
+			uni.showModal({
+			    content: '确定要退出登录么',
+			    success: (e)=>{
+			    	if(e.confirm){
+						this.out();
+			    	}
+			    }
+			});
+		},
+		// 退出请求
+		out(){
+			logout({}).then((e) => {
+				this.logout()
+				this.$api.msg(e.msg);
+			}).catch((e) => {
+			})
+		},
+		/**
+		 * 统一跳转接口,拦截未登录路由
+		 * navigator标签现在默认没有转场动画,所以用view
+		 */
+		navTo(url) {
+			if (!this.hasLogin) {
+				// 保存地址
+				saveUrl();
+				// 登录拦截
+				interceptor();
+			} else {
+				uni.navigateTo({
+					url
+				});
+			}
+		}
+	}
+};
+</script>
+<style lang="scss">
+page {
+	height: 100%;
+	background-color: #FFFFFF;
+	.container {
+		height: 100%;
+	}
+}
+.content-box {
+	background-color: #FF4F4F;
+	height: 220rpx;
+	width: 100%;
+	.user-section{
+			width: 200rpx;
+			height: 200rpx;
+			margin: 0rpx auto;
+			position: relative;
+			image{
+				border: 8rpx solid #FFFFFF;
+				position: absolute;
+				transform: translate(0%, 50%);
+				width: 200rpx;
+				height: 200rpx;
+				border-radius: 100rpx;
+			}
+		}
+}
+.list-cell{
+		display:flex;
+		align-items:baseline;
+		padding: 20rpx $page-row-spacing;
+		line-height:60rpx;
+		position:relative;
+		background: #fff;
+		justify-content: center;
+		box-shadow: 5rpx 5rpx 10rpx rgba(0, 0, 0, 0.2);
+		&.log-out-btn{
+			margin-top: 100rpx;
+			.cell-tit{
+				color: $uni-color-primary;
+				text-align: center;
+				margin-right: 0;
+			}
+		}
+		.cell-tit{
+			flex: 1;
+			font-size: $font-base + 2rpx;
+			color: $font-color-dark;
+			margin-right:10rpx;
+		}
+		.cell-tip{
+			font-size: $font-base;
+			color: $font-color-light;
+		}
+		switch{
+			transform: translateX(16rpx) scale(.84);
+		}
+	}
+.cover-container{
+	width: 100%;
+	text-align: center;
+	padding-top: 120rpx;
+	.nickname{
+		font-size: 40rpx;
+		color: #323232;
+	}
+	.mobile{
+		color: #888888;
+		font-size: 30rpx;
+		padding-top: 25rpx;
+	}
+	.login{
+		text-align: center;
+		width: 100%;
+		padding-top: 25rpx;
+		text{
+			font-size: 30rpx;
+			color: #FFFFFF;
+			border-radius: 50rpx;
+			padding:10rpx 25rpx;
+			background-color: #FF4F4F;
+		}
+	}
+	.login1{
+		width: 100%;
+		text-align: center;
+		margin-top: 25rpx;
+		text{
+			color: #FF4F4F;
+			font-size: 30rpx;
+			padding: 3rpx 25rpx;
+			border-radius: 50rpx;
+			border:2rpx solid #FF4F4F;
+		}
+	}
+}
+.item-box{
+	width: 100%;
+	padding: 50rpx 55rpx;
+	.item-list{
+		width: 100%;
+		margin-top: 30rpx;
+		.list-icon{
+			image{
+				width: 45rpx;
+				height: 45rpx;
+				margin-top: 10rpx;
+				margin-right: 35rpx;
+			}
+			.text{
+				color: #323232;
+				font-size: 28rpx;
+				font-weight:bold;
+			}
+		}
+	}
+}
+</style>

+ 128 - 0
pages/userinfo/userinfo.vue

@@ -0,0 +1,128 @@
+<template>
+	<view class="content">
+		<view class="row b-b">
+			<text class="tit">昵称</text>
+			<input class="input" type="text" v-model="name" placeholder="修改昵称" placeholder-class="placeholder" />
+		</view>
+		<view class="row b-b">
+			<text class="tit">生日</text>
+			<picker mode="date" @change="bindDateChange">
+				<input class="input" type="text" v-model="date" placeholder="请选择日期" placeholder-class="placeholder" />
+			</picker>
+		</view>
+		<view class="row b-b">
+			<text class="tit">手机</text>
+			<input class="input" type="text" v-model="phone" placeholder="请填写手机号" placeholder-class="placeholder" />
+		</view>
+		<button class="add-btn" @click="confirm">提交</button>
+	</view>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+import { userEdit } from '@/api/set.js';
+export default {
+	data() {
+		 const currentDate = this.getDate({
+			format: true
+		})
+		return {
+			name: '',
+			phone: '',
+		    date: currentDate,
+		};
+	},
+	computed: {
+		...mapState(['userInfo']),
+	},
+	onShow() {
+		this.name = this.userInfo.nickname + '';
+		this.phone = this.userInfo.phone||'';
+	},
+	methods: {
+		bindDateChange: function(e) {
+			this.date = e.target.value
+		},
+		getDate(type) {
+			const date = new Date();
+			let year = date.getFullYear();
+			let month = date.getMonth() + 1;
+			let day = date.getDate();
+
+			if (type === 'start') {
+				year = year - 60;
+			} else if (type === 'end') {
+				year = year + 2;
+			}
+			month = month > 9 ? month : '0' + month;;
+			day = day > 9 ? day : '0' + day;
+			return `${year}-${month}-${day}`;
+		},
+		// 数据处理结果
+		onConfirm(val) {
+			this.resultInfo = { ...val };
+			this.birthday = this.resultInfo.result;
+		},
+		confirm() {
+			userEdit({ nickname: this.name, avatar: this.userInfo.avatar, birthday: this.date, phone: this.phone })
+				.then(e => {
+					this.$api.msg('修改成功');
+					setTimeout(() => {
+						uni.switchTab({
+							url: '/pages/user/user'
+						});
+					}, 1000);
+					console.log(e);
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		}
+	}
+}		
+</script>
+<style lang="scss">
+page {
+	background: $page-color-base;
+	padding-top: 16upx;
+}
+.uni-picker{
+	
+}
+.row {
+	display: flex;
+	align-items: center;
+	position: relative;
+	padding: 0 30upx;
+	height: 110upx;
+	background: #fff;
+
+	.tit {
+		flex-shrink: 0;
+		width: 120upx;
+		font-size: 30upx;
+		color: $font-color-dark;
+	}
+	.input {
+		flex: 1;
+		font-size: 30upx;
+		color: $font-color-dark;
+	}
+	.iconlocation {
+		font-size: 36upx;
+		color: $font-color-light;
+	}
+}
+.add-btn {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 690upx;
+	height: 80upx;
+	margin: 60upx auto;
+	font-size: $font-lg;
+	color: #fff;
+	background-color: $base-color;
+	border-radius: 10upx;
+}
+</style>

+ 142 - 0
pagesA/record/call.vue

@@ -0,0 +1,142 @@
+<template>
+	<view id="pageBox"><trtc-room id="trtcroom" :config="trtcConfig"></trtc-room></view>
+</template>
+
+<script>
+import { getSig } from '@/api/record.js';
+export default {
+	data() {
+		return {
+			trtcConfig: {
+				debugMode: false,//开启调试
+				sdkAppID: '1400396944', // 开通实时音视频服务创建应用后分配的 SDKAppID
+				userID: '', // 用户 ID,可以由您的帐号系统指定
+				userSig: '', // 身份签名,相当于登录密码的作用
+				template: '1v1',//
+				enableCamera: true,//是否开启摄像头。设置为 true 时,调用 enterRoom 后,会自动发布视频
+				enableMic: true,//是否开启麦克风。设置为 true 时,调用 enterRoom 后,会自动发布音频
+				enableAns: true,//是否开启音频噪声抑制,该特性会自动检测背景噪音并进行过滤,但也会误伤周围的音乐,只有会议、教学等场景才适合开启。
+				enableAgc: true,//是否开启音频自动增益,该特性可以补偿部分手机麦克风音量太小的问题,但也会放大噪音,建议配合 ANS 同时开启。
+				enableAutoFocus: true//是否开启摄像头自动对焦,如果关闭则需要用户手动点击摄像头中的预览画面进行对焦。
+			},
+			roomId: '',
+			template: '1v1',
+			timestamp: [] //当前正在房间的用户
+		};
+	},
+	onLoad(option) {
+		let obj = this;
+		obj.trtcConfig.userID = option.userId;
+		obj.callGetRoom().then(e => {
+			obj.trtcConfig.userSig = e;
+			console.log('开始调用初始化');
+			obj.info();
+		});
+
+		obj.roomId = option.roomId;
+	},
+	methods: {
+		// 获取房间号id
+		callGetRoom() {
+			let obj = this;
+			return new Promise(function(resolve, reject) {
+				getSig({})
+					.then(e => {
+						resolve(e.data.UserSig);
+					})
+					.catch(e => {
+						reject(e);
+					});
+			});
+		},
+		info() {
+			let obj = this;
+			// index.js
+			let trtcRoomContext = this.selectComponent('#trtcroom');
+			let EVENT = trtcRoomContext.EVENT;
+			trtcRoomContext.setData(
+				{
+					trtcConfig: obj.trtcConfig
+				},
+				e => {
+					if (trtcRoomContext) {
+						trtcRoomContext.on(EVENT.LOCAL_JOIN, event => {
+							console.log('进入房间成功');
+							// 进房成功后发布本地音频流和视频流
+							trtcRoomContext.publishLocalVideo().then(() => {
+								console.log('发布成功1');
+								// 发布成功
+							});
+							trtcRoomContext.publishLocalAudio().then(() => {
+								console.log('发布成功2');
+								// 发布成功
+							});
+						});
+						// 监听远端用户的视频流的变更事件
+						trtcRoomContext.on(EVENT.REMOTE_VIDEO_ADD, event => {
+							console.log('视频流变动');
+							// 订阅(即播放)远端用户的视频流
+							let userID = event.data.userID;
+							let streamType = event.data.streamType; // 'main' or 'aux'
+							trtcRoomContext.subscribeRemoteVideo({ userID: userID, streamType: streamType });
+						});
+
+						// 监听远端用户的音频流的变更事件
+						trtcRoomContext.on(EVENT.REMOTE_AUDIO_ADD, event => {
+							console.log('音频变动’');
+							// 订阅(即播放)远端用户的音频流
+							let userID = event.data.userID;
+							trtcRoomContext.subscribeRemoteAudio({ userID: userID });
+						});
+						// 远端用户进房
+						trtcRoomContext.on(EVENT.REMOTE_USER_JOIN, event => {
+							console.log('* room REMOTE_USER_JOIN', event, trtcRoomContext.getRemoteUserList());
+							this.timestamp.push(new Date());
+							// 1v1视频通话时限制人数为两人的简易逻辑,建议通过后端实现房间人数管理
+						});
+						// 远端用户退出
+						trtcRoomContext.on(EVENT.REMOTE_USER_LEAVE, event => {
+							console.log('* room REMOTE_USER_LEAVE', event, trtcRoomContext.getRemoteUserList());
+							if (this.template === '1v1') {
+								this.timestamp = [];
+							}
+							if (this.template === '1v1' && this.remoteUser === event.data.userID) {
+								this.remoteUser = null;
+							}
+						});
+						// 远端用户推送视频
+						trtcRoomContext.on(EVENT.REMOTE_VIDEO_ADD, event => {
+							// 订阅视频
+							const userList = trtcRoomContext.getRemoteUserList();
+							const data = event.data;
+							// 1v1 只订阅第一个远端流
+							this.remoteUser = data.userID;
+							trtcRoomContext.subscribeRemoteVideo({
+								userID: data.userID,
+								streamType: data.streamType
+							});
+						});
+						// 本地推送错误
+						trtcRoomContext.on(EVENT.ERROR, event => {
+							console.log('* room ERROR', event);
+						});
+						// 进入房间
+						trtcRoomContext.enterRoom({ roomID: obj.roomId }).catch(res => {
+							console.error('room joinRoom 进房失败:', res);
+						});
+					}
+				}
+			);
+		}
+	}
+};
+</script>
+
+<style>
+#trtcroom,
+page,
+#pageBox {
+	height: 100%;
+	width: 100%;
+}
+</style>

+ 442 - 0
static/css/cmy.css

@@ -0,0 +1,442 @@
+/*初始化类*/
+@font-face {
+	font-family: 'iconfont';
+	/* project id 1482221 */
+	src: url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.eot');
+	src: url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.eot?#iefix') format('embedded-opentype'),
+		url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.woff2') format('woff2'),
+		url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.woff') format('woff'),
+		url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.ttf') format('truetype'),
+		url('https://at.alicdn.com/t/font_1482221_x9emymthrxs.svg#iconfont') format('svg');
+}
+
+.iconfont {
+	font-family: "iconfont" !important;
+	font-size: 34rpx;
+	font-style: normal;
+	-webkit-font-smoothing: antialiased;
+	-webkit-text-stroke-width: 0rpx;
+	-moz-osx-font-smoothing: grayscale;
+}
+
+.iconedit:before {
+	content: "\e649";
+}
+
+.iconfavorfill:before {
+	content: "\e64b";
+}
+
+.iconfavor:before {
+	content: "\e64c";
+}
+
+.iconlocation:before {
+	content: "\e651";
+}
+
+.iconroundcheckfill:before {
+	content: "\e656";
+}
+
+.iconroundcheck:before {
+	content: "\e657";
+}
+
+.iconunfold:before {
+	content: "\e661";
+}
+
+.iconlikefill:before {
+	content: "\e668";
+}
+
+.iconlike:before {
+	content: "\e669";
+}
+
+.iconshop:before {
+	content: "\e676";
+}
+
+.iconcart:before {
+	content: "\e6af";
+}
+
+.icondelete:before {
+	content: "\e6b4";
+}
+
+.iconhome:before {
+	content: "\e6b8";
+}
+
+.iconcartfill:before {
+	content: "\e6b9";
+}
+
+.iconhomefill:before {
+	content: "\e6bb";
+}
+
+.iconlock:before {
+	content: "\e6c0";
+}
+
+.iconfriendadd:before {
+	content: "\e6ca";
+}
+
+.iconfold:before {
+	content: "\e6de";
+}
+
+.iconapps:before {
+	content: "\e729";
+}
+
+.iconadd:before {
+	content: "\e767";
+}
+
+.iconmove:before {
+	content: "\e768";
+}
+
+.icontriangledownfill:before {
+	content: "\e79b";
+}
+
+.icontriangleupfill:before {
+	content: "\e79c";
+}
+
+.iconshaixuan:before {
+	content: "\e74a";
+}
+
+.iconyanzhengma:before {
+	content: "\e684";
+}
+
+.iconjifen:before {
+	content: "\e60f";
+}
+
+.iconwuliuxinxi:before {
+	content: "\e62b";
+}
+
+.iconmessage:before {
+	content: "\e78a";
+}
+
+.iconsetting:before {
+	content: "\e78e";
+}
+
+.iconaddition:before {
+	content: "\e6e0";
+}
+
+.iconclose:before {
+	content: "\e6e9";
+}
+
+.iconenter:after {
+	content: "\e6f8";
+}
+
+.iconprompt:before {
+	content: "\e71b";
+}
+
+.iconreturn:before {
+	content: "\e720";
+}
+
+.iconsearch:before {
+	content: "\e741";
+}
+
+.iconpengyouquan:before {
+	content: "\e62c";
+}
+
+.iconweixin:before {
+	content: "\e60e";
+}
+
+.iconzhifubao:before {
+	content: "\e673";
+}
+
+.iconyue:before {
+	content: "\e618";
+}
+
+.iconweixin1:before {
+	content: "\e622";
+}
+
+.iconlock1:before {
+	content: "\e64d";
+}
+
+.iconuser:before {
+	content: "\e64e";
+}
+
+.iconchenggongtixianshouyi:before {
+	content: "\e64f";
+}
+
+.iconviptuiguangdingdan:before {
+	content: "\e650";
+}
+
+.icondaifukuan:before {
+	content: "\e652";
+}
+
+.icondaijiesuanshouyi:before {
+	content: "\e653";
+}
+
+.icondaidakuanshouyi:before {
+	content: "\e654";
+}
+
+.icondaifahuo:before {
+	content: "\e655";
+}
+
+.icondaishouhuoshouyi:before {
+	content: "\e658";
+}
+
+.icondaishouhuo:before {
+	content: "\e659";
+}
+
+.iconwuxiaoshouyi:before {
+	content: "\e65a";
+}
+
+.icontixianmingxi:before {
+	content: "\e65b";
+}
+
+.iconshouyi:before {
+	content: "\e65c";
+}
+
+.iconkouchutixianshouxufei:before {
+	content: "\e65d";
+}
+
+.iconyishenqingshouyi:before {
+	content: "\e65e";
+}
+
+.icontuihuanhuo:before {
+	content: "\e65f";
+}
+
+
+/*水平线*/
+.hr {
+	width: 100%;
+	position: relative;
+	border-bottom: 1px solid #dddddd;
+	/* height: 0.5rpx; */
+}
+
+/* 一行显示 */
+.clamp {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	display: block;
+}
+.ellipsis{
+	overflow:hidden; 
+	text-overflow:ellipsis;
+	display:-webkit-box; 
+	-webkit-box-orient:vertical;
+	-webkit-line-clamp:2;
+}
+.common-hover {
+	background: #f5f5f5;
+}
+
+/* 角标 */
+.corner{
+	background-color:#e51c23;
+	position: absolute;
+	right: -18rpx;
+	top: -18rpx;
+	color:#FFFFFF;
+	text-align: center;
+	border-radius: 999px;
+	font-size: 24rpx !important;
+	min-width: 35rpx;
+	min-height: 35rpx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	line-height: 1;
+}
+/*文字对齐*/
+.text-left {
+	text-align: left !important;
+}
+
+.text-center {
+	text-align: center !important;
+}
+
+.text-justify {
+	text-align: justify !important;
+}
+
+.text-right {
+	text-align: right !important;
+}
+
+.text-default {
+	color: #212121 !important;
+}
+
+.text-white {
+	color: #ffffff !important;
+}
+
+.text-primary {
+	color: #00bcd4 !important;
+}
+
+.text-success {
+	color: #009688 !important;
+}
+
+.text-info {
+	color: #03a9f4 !important;
+}
+
+.text-warning {
+	color: #ffc107 !important;
+}
+
+.text-danger {
+	color: #e51c23 !important;
+}
+
+.text-pink {
+	color: #e91e63 !important;
+}
+
+.text-purple {
+	color: #673ab7 !important;
+}
+
+.text-indigo {
+	color: #3f51b5 !important;
+}
+
+.text-gray {
+	color: #999999 !important;
+}
+
+.bg-default {
+	background-color: #f5f5f5 !important;
+}
+
+.bg-primary {
+	background-color: #00bcd4 !important;
+}
+
+.bg-success {
+	background-color: #009688 !important;
+}
+
+.bg-info {
+	background-color: #03a9f4 !important;
+}
+
+.bg-warning {
+	background-color: #f1c40f !important;
+}
+
+.bg-danger {
+	background-color: #e51c23 !important;
+}
+
+.bg-pink {
+	background-color: #e91e63 !important;
+}
+
+.bg-purple {
+	background-color: #673ab7 !important;
+}
+
+.bg-indigo {
+	background-color: #3f51b5 !important;
+}
+
+.bg-white {
+	background-color: white !important;
+}
+
+.bg-gray {
+	background-color: #e3e3e3 !important;
+}
+
+/* 边框 */
+.border-radius-15 {
+	border-radius: 15rpx;
+}
+
+.border-radius-10 {
+	border-radius: 10rpx;
+}
+
+.border-radius-all {
+	border-radius: 1000rpx;
+}
+
+/* 底部边线 */
+.borde-b {
+	border-bottom: 1px solid #dddddd;
+}
+
+/* 弹性盒子 */
+.flex {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+.flex_item {
+	display: flex;
+	align-items: center;
+	/* justify-content: space-between; */
+}
+.items-left {
+	justify-content: flex-start;
+}
+
+.items-right {
+	justify-content: flex-end;
+}
+
+.flex-shrink-false {
+	flex-shrink: 0;
+}
+
+.flex-grow-true {
+	flex-grow: 1;
+}
+
+.position-relative {
+	position: relative;
+}

二進制
static/error/missing-face.png


二進制
static/icon/img01.png


二進制
static/icon/img03.png


二進制
static/icon/img04.png


二進制
static/icon/img06.png


二進制
static/icon/img07.png


二進制
static/icon/img09.png


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