hwq 2 年 前
コミット
2150ed7a04
100 ファイル変更45024 行追加0 行削除
  1. 3 0
      .gitignore
  2. 289 0
      App.vue
  3. 26 0
      api/cart.js
  4. 46 0
      api/category.js
  5. 38 0
      api/coupon.js
  6. 77 0
      api/index.js
  7. 72 0
      api/info.js
  8. 45 0
      api/login.js
  9. 38 0
      api/money.js
  10. 164 0
      api/order.js
  11. 180 0
      api/product.js
  12. 43 0
      api/set.js
  13. 159 0
      api/user.js
  14. 147 0
      api/wallet.js
  15. 34 0
      api/wx.js
  16. 1380 0
      components/Sansnn-uQRCode/uqrcode.js
  17. 264 0
      components/bw-swiper/bw-swiper.vue
  18. 89 0
      components/common/time.js
  19. 261 0
      components/easy-upload/easy-upload.vue
  20. 40 0
      components/easy-upload/readme.md
  21. 18 0
      components/empty.vue
  22. 35 0
      components/js_sdk/xb-copy/uni-copy.js
  23. 645 0
      components/jyf-parser/jyf-parser.vue
  24. 196 0
      components/jyf-parser/libs/CssHandler.js
  25. 1072 0
      components/jyf-parser/libs/MpHtmlParser.js
  26. 162 0
      components/jyf-parser/libs/config.js
  27. 46 0
      components/jyf-parser/libs/handler.wxs
  28. 1004 0
      components/jyf-parser/libs/trees.vue
  29. 92 0
      components/navTab.vue
  30. 196 0
      components/share.vue
  31. 240 0
      components/ss-calendar/ss-calendar.vue
  32. 362 0
      components/sunui-upimg/sunui-upimg.vue
  33. 1206 0
      components/tki-qrcode/qrcode.js
  34. 214 0
      components/tki-qrcode/tki-qrcode.vue
  35. 122 0
      components/uni-badge/uni-badge.vue
  36. 193 0
      components/uni-countdown/uni-countdown.vue
  37. 192 0
      components/uni-countdown/uni-countdowns.vue
  38. 229 0
      components/uni-drawer/uni-drawer-all.vue
  39. 223 0
      components/uni-drawer/uni-drawer.vue
  40. 124 0
      components/uni-fav/uni-fav.vue
  41. 96 0
      components/uni-icons/icons.js
  42. 10 0
      components/uni-icons/uni-icons.vue
  43. 230 0
      components/uni-list-item/uni-list-item.vue
  44. 68 0
      components/uni-list/uni-list.vue
  45. 65 0
      components/uni-list/uni-refresh.vue
  46. 87 0
      components/uni-list/uni-refresh.wxs
  47. 194 0
      components/uni-load-more/uni-load-more.vue
  48. 224 0
      components/uni-nav-bar/uni-nav-bar.vue
  49. 396 0
      components/uni-notice-bar/uni-notice-bar.vue
  50. 202 0
      components/uni-number-box.vue
  51. 265 0
      components/uni-popup/uni-popup.vue
  52. 313 0
      components/uni-popup/uni-popup_moments.vue
  53. 141 0
      components/uni-rate/uni-rate.vue
  54. 25 0
      components/uni-status-bar/uni-status-bar.vue
  55. 244 0
      components/uni-steps/uni-steps.vue
  56. 262 0
      components/uni-transition/uni-transition.vue
  57. 226 0
      components/upload-images.vue
  58. 12542 0
      components/w-picker/city-data/area.js
  59. 1503 0
      components/w-picker/city-data/city.js
  60. 139 0
      components/w-picker/city-data/province.js
  61. 650 0
      components/w-picker/w-picker.js
  62. 1104 0
      components/w-picker/w-picker.vue
  63. 106 0
      components/wallet/msg/msg-list.vue
  64. 0 0
      components/wangding-pickerAddress/data.js
  65. 4719 0
      components/wangding-pickerAddress/data1.js
  66. 4914 0
      components/wangding-pickerAddress/data2.js
  67. 103 0
      components/wangding-pickerAddress/wangding-pickerAddress.vue
  68. 280 0
      components/xuan-popup/xuan-popup.vue
  69. 46 0
      main.js
  70. 108 0
      manifest.json
  71. 30 0
      node_modules/jweixin-module/README.md
  72. 0 0
      node_modules/jweixin-module/lib/index.js
  73. 54 0
      node_modules/jweixin-module/package.json
  74. 11 0
      package-lock.json
  75. 392 0
      pages.json
  76. 768 0
      pages/index/index.vue
  77. 411 0
      pages/money/pay.vue
  78. 84 0
      pages/money/paySuccess.vue
  79. 96 0
      pages/order/createOrder.vue
  80. 405 0
      pages/order/evaluate.vue
  81. 74 0
      pages/order/expressInfo.vue
  82. 783 0
      pages/order/order.vue
  83. 176 0
      pages/order/orderDetail.vue
  84. 237 0
      pages/order/orderRefund.vue
  85. 148 0
      pages/product/common/KlonContent.vue
  86. 68 0
      pages/product/common/contentText.vue
  87. 139 0
      pages/product/common/discounts.vue
  88. 115 0
      pages/product/common/estimate.vue
  89. 85 0
      pages/product/common/freshDetail.vue
  90. 155 0
      pages/product/common/groupBottom.vue
  91. 148 0
      pages/product/common/groupContent.vue
  92. 195 0
      pages/product/common/groupTime.vue
  93. 120 0
      pages/product/common/guessLike.vue
  94. 68 0
      pages/product/common/klonButtom.vue
  95. 164 0
      pages/product/common/productBottom.vue
  96. 118 0
      pages/product/common/productContent.vue
  97. 55 0
      pages/product/common/topSwiper.vue
  98. 386 0
      pages/product/groupBooking/detail.vue
  99. 236 0
      pages/product/groupBooking/index.vue
  100. 75 0
      pages/product/groupBooking/inviteImg.vue

+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
+.DS_Store
+unpackage/*
+.hbuilderx

+ 289 - 0
App.vue

@@ -0,0 +1,289 @@
+<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') || '';
+		uni.setStorageSync('mystore','');
+		if( userInfo.store_info && (userInfo.store_switch !== '0')) {
+			uni.setStorageSync('mystore',userInfo.store_info.id);
+			const value = uni.getStorageSync('mystore');
+			  //  if (value) {
+				 //   this.mystore = value
+				 //   uni.showModal({
+				 //   	title:'是否显示网店false',
+					// content:JSON.stringify(this.mystore)
+				 //   })
+			  //  }
+		} else {
+			uni.setStorageSync('mystore','');
+			const value = uni.getStorageSync('mystore');
+			console.log('====2222====',value);
+		}
+		// else{
+		// 	let store_info = true
+		// 	uni.setStorageSync('mystore',store_info);
+		// 	const value = uni.getStorageSync('mystore');
+		// 	   if (value) {
+		// 		   this.mystore = value
+		// 		   uni.showModal({
+		// 		   	title:'是否显示网店true',
+		// 			content:JSON.stringify(this.mystore)
+		// 		   })
+		// 	   }
+		// }
+		let token = uni.getStorageSync('token');
+		// uni.removeStorageSync('spread');
+		uni.removeStorageSync('store_id');
+		
+		// uni.showModal({
+		// 	title: 'cookie',
+		// 	content: getCookie('token')+'&user='+JSON.stringify(userInfo)+'&href='+window.location.href,
+		// 	showCancel: false,
+		// });
+		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.uid) {
+			// 更新登录信息
+			obj.login();
+			//更新登陆状态
+			uni.getStorage({
+				key: 'userInfo',
+				success: res => {
+					obj.setUserInfo(res.data);
+				}
+			});
+		}
+		// #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 "uview-ui/index.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 0 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>

+ 26 - 0
api/cart.js

@@ -0,0 +1,26 @@
+import request from '@/utils/request'
+
+export function getCartList(data) {
+	return request({
+		url: '/api/cart/list',
+		method: 'get',
+		data
+	});
+}
+
+// 修改购物车数量
+export function getCartNum(data) {
+	return request({
+		url: '/api/cart/num',
+		method: 'post',
+		data
+	});
+}
+//删除购物车
+export function cartDel(data) {
+	return request({
+		url: '/api/cart/del',
+		method: 'post',
+		data
+	});
+}

+ 46 - 0
api/category.js

@@ -0,0 +1,46 @@
+import request from '@/utils/request'
+
+// 获取商品分类
+export function getList(data) {
+	return request({
+		url: '/api/category',
+		method: 'get',
+		data
+	});
+}
+// 获取商品类型
+export function newgetList(data) {
+	return request({
+		url: '/api/category_layer',
+		method: 'get',
+		data
+	});
+}
+
+// 获取活动列表
+export function activityList(data) {
+	return request({
+		url: '/api/activity/list',
+		method: 'get',
+		data
+	});
+}
+
+// 获取活动产品列表
+export function proList(data) {
+	return request({
+		url: '/api/activity/pro/list',
+		method: 'get',
+		data
+	});
+}
+
+// 获取活动产品详情
+export function proDetail(data, id) {
+	return request({
+		url: '/api/activity/pro/detail/' +id,
+		method: 'get',
+		data
+	});
+}
+

+ 38 - 0
api/coupon.js

@@ -0,0 +1,38 @@
+import request from '@/utils/request'
+
+//获取优惠券列表
+export function getCouponsList(data,types) {
+	//优惠券状态 0全部 1未使用 2已使用
+	return request({
+		url: '/api/coupons/user/'+types,
+		method: 'get',
+		data
+	});
+}
+
+//领取优惠券
+export function setCoupons(data) {
+	return request({
+		url: '/api/coupon/receive',
+		method: 'post',
+		data
+	});
+}
+
+//获取可使用优惠券
+export function couponsOrder(data,price) {
+	return request({
+		url: '/api/coupons/order/'+price,
+		method: 'get',
+		data
+	});
+}
+
+//优惠券列表
+export function couponslist(data) {
+	return request({
+		url: '/api/coupons',
+		method: 'get',
+		data
+	});
+}

+ 77 - 0
api/index.js

@@ -0,0 +1,77 @@
+import request from '@/utils/request'
+
+// 获取轮播图
+export function loadIndexs(data) {
+	return request({
+		url: '/api/index',
+		method: 'get',
+		data
+	});
+}
+//获取首页产品的轮播图和产品信息
+export function productIndexs(data,type) {
+	return request({
+		url: '/api//groom/list/' + type,
+		method: 'get',
+		data
+	});
+}
+// 获取首页弹窗
+export function popimg(data) {
+	return request({
+		url: '/api/popimg',
+		method: 'get',
+		data
+	});
+}
+
+// 获取拼团列表
+export function combination(data) {
+	return request({
+		url: '/api/combination/list',
+		method: 'get',
+		data
+	});
+}
+
+export function category(data) {
+	return request({
+		url: '/api/category',
+		method: 'get',
+		data
+	});
+}
+export function query(data) {
+	return request({
+		url: '/api/pro/query_by_cate',
+		method: 'get',
+		data
+	});
+}
+
+// 拼团奖励信息
+export function comBase(data) {
+	return request({
+		url: '/api/combination/base',
+		method: 'get',
+		data
+	});
+}
+
+// 积分排行榜
+export function integralRank(data) {
+	return request({
+		url: '/api/integral_rank',
+		method: 'get',
+		data
+	});
+}
+
+// 获取中奖名单
+export function prize(data) {
+	return request({
+		url: '/api/prize',
+		method: 'get',
+		data
+	});
+}

+ 72 - 0
api/info.js

@@ -0,0 +1,72 @@
+import request from '@/utils/request'
+
+// 过万大神
+export function over10000(data) {
+	return request({
+		url: '/api/over10000',
+		method: 'get',
+		data
+	});
+}
+
+// 员工排行榜
+export function waiter_rank(data) {
+	return request({
+		url: '/api/waiter_rank',
+		method: 'get',
+		data
+	});
+}
+// 订单列表
+export function order(data) {
+	return request({
+		url: '/api/store/order',
+		method: 'get',
+		data
+	});
+}
+
+//门店列表 
+export function store_list(data) {
+	return request({
+		url: '/api/store/list',
+		method: 'get',
+		data
+	});
+}
+
+//门店详情
+export function store(data, id) {
+	return request({
+		url: '/api/store/detail/' + id,
+		method: 'get',
+		data
+	});
+}
+
+//商品排名
+export function product(data) {
+	return request({
+		url: '/api/see/product',
+		method: 'get',
+		data
+	});
+}
+
+// 推广海报二维码生成
+export function spreadBanner(data) {
+	return request({
+		url: '/api/spread/banner',
+		method: 'get',
+		data
+	});
+}
+
+// 绑定店员
+export function set_waiter(data) {
+	return request({
+		url: '/api/set_waiter',
+		method: 'post',
+		data
+	});
+}

+ 45 - 0
api/login.js

@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+
+// 登录
+export function login(data) {
+	return request({
+		url: '/api/login',
+		method: 'post',
+		data
+	});
+}  
+// 注册
+export function register(data) {
+	return request({
+		url: '/api/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/userinfo',
+		method: 'get',
+		data
+	});
+}
+//绑定手机号
+export function bangding(data) {
+	return request({
+		url: '/api/binding',
+		method: 'POST',
+		data
+	});
+}

+ 38 - 0
api/money.js

@@ -0,0 +1,38 @@
+import request from '@/utils/request'
+
+
+// 统计金额
+export function computedOrderkey(data) {
+	return request({
+		url: '/api/order/computed/'+data.orderkey,
+		method: 'post',
+		data
+	});
+}
+
+// 创建订单
+export function createOrderkey(data,key) {
+	return request({
+		url: '/api/order/create/'+key,
+		method: 'post',
+		data
+	});
+}
+// 账户余额
+export function balance(data) {
+	return request({
+		url: '/api/user/balance',
+		method: 'get',
+		data
+	});
+}
+
+// 订单支付
+export function orderPay(data) {
+	return request({
+		url: '/api/order/pay',
+		method: 'post',
+		data
+	});
+}
+

+ 164 - 0
api/order.js

@@ -0,0 +1,164 @@
+import request from '@/utils/request'
+import {
+	upFilse
+} from '@/utils/request'
+
+// 订单确认
+export function confirm(data) {
+	return request({
+		url: '/api/order/confirm',
+		method: 'post',
+		data
+	});
+}
+//获取店铺收益
+export function getEarnings(data) {
+	return request({
+		url: '/api/admin/order/list',
+		method: 'get',
+		data
+	});
+}
+//订单个数
+export function count(data) {
+	return request({
+		url: '/api/admin/order/count',
+		method: 'get',
+		data
+	})
+}
+// 试用列表
+export function recordList(data) {
+	return request({
+		url: '/api/activity/try/record/list',
+		method: 'get',
+		data
+	});
+}
+
+// 订单列表
+export function orderList(data) {
+	return request({
+		url: '/api/order/list',
+		method: 'get',
+		data
+	});
+}
+// 退款列表
+export function refundList(data) {
+	return request({
+		url: '/api/admin/order/refund',
+		method: 'post',
+		data
+	});
+}
+// 订单详细
+export function orderDetail(data, orderid) {
+	return request({
+		url: '/api/order/detail/' + orderid,
+		method: 'get',
+		data
+	});
+}
+
+// 小店订单详细
+export function orderShop(data, orderid) {
+	return request({
+		url: '/api/admin/order/detail/' + orderid,
+		method: 'get',
+		data
+	});
+}
+
+
+// 取消订单
+export function orderCancel(data) {
+	return request({
+		url: '/api/order/cancel',
+		method: 'post',
+		data
+	});
+}
+
+// 删除订单
+export function orderDel(data) {
+	return request({
+		url: '/api/combination/hide',
+		method: 'post',
+		data
+	});
+}
+// 申请退款
+export function refund(data) {
+	return request({
+		url: '/api/order/refund/verify',
+		method: 'post',
+		data
+	});
+}
+// 退款理由列表
+export function refundReason(data) {
+	return request({
+		url: '/api/order/refund/reason',
+		method: 'get',
+		data
+	});
+}
+
+// 确认收货
+export function orderTake(data) {
+	return request({
+		url: '/api/order/take',
+		method: 'post',
+		data
+	});
+}
+// 获取拼团海报
+export function getCombinationPoster(data) {
+	return request({
+		url: '/api/combination/poster',
+		method: 'post',
+		data
+	});
+}
+// 拼团列表
+export function combination(data) {
+	return request({
+		url: '/api/combination/order',
+		method: 'get',
+		data
+	});
+}
+//提交评论
+export function product(data) {
+	return request({
+		url: '/api/order/product',
+		method: 'post',
+		data
+	});
+}
+//上传图片
+export function upload(data) {
+	return upFilse({
+		url: '/api/upload/image',
+		method: 'post',
+		data
+	});
+}
+//提交评论
+export function order_comment(data) {
+	return request({
+		url: '/api/order/comment',
+		method: 'post',
+		data
+	});
+}
+
+// 快递查询
+export function express_query(data, id) {
+	return request({
+		url: '/api/order/express/' + id,
+		method: 'get',
+		data
+	});
+}

+ 180 - 0
api/product.js

@@ -0,0 +1,180 @@
+import request from '@/utils/request'
+
+// 获取商品列表
+export function getProducts(data) {
+	// 	{
+	// 参数名称	是否必须	示例	备注
+	// sid			否			二级分类编号
+	// cid			否			一级分类编号(!)
+	// keyword		否			搜索
+	// priceOrder	否			价格排序
+	// salesOrder	否			销量排序
+	// news			否			是否新品
+	// page			否			分页参数起始值
+	// limit		否			分页数步长值
+	// }
+	return request({
+		url: '/api/products',
+		method: 'get',
+		data
+	});
+}
+// 获取网店商品列表
+export function getStoreGoods(data) {
+	return request({
+		url: '/api/products',
+		method: 'get',
+		data
+	});
+}
+// 选择门店商品
+export function choseProducts(data) {
+	return request({
+		url: '/api/admin/product/chose',
+		method: 'post',
+		data
+	});
+}
+// 删除门店商品
+export function delProducts(data) {
+	return request({
+		url: '/api/admin/product/delete',
+		method: 'post',
+		data
+	});
+}
+// 获取拼团商品详情
+export function goodsDetail(data, id) {
+	return request({
+		url: '/api/combination/detail/' + id,
+		method: 'get',
+		data
+	});
+}
+// 获取普通商品详情
+export function productDetail(data, id) {
+	return request({
+		url: '/api/product/detail/' + id,
+		method: 'get',
+		data
+	});
+}
+
+// 获取秒杀商品详细
+export function seckillGoods(data, id) {
+	return request({
+		url: '/api/seckill/detail/' + id,
+		method: 'get',
+		data
+	});
+}
+
+// 获取秒杀分类
+export function getSeckillClass(data) {
+	return request({
+		url: '/api/seckill/index',
+		method: 'get',
+		data
+	});
+}
+
+// 获取秒杀列表
+export function getSeckillList(data, id) {
+	return request({
+		url: '/api/seckill/list/' + id,
+		method: 'get',
+		data
+	});
+}
+
+
+// 获取直播商品列表
+export function liveList(data) {
+	return request({
+		url: '/api/live/pro/list',
+		method: 'get',
+		data
+	});
+}
+
+// 加入购物车
+export function cartAdd(data) {
+	return request({
+		url: '/api/cart/add',
+		method: 'post',
+		data
+	});
+}
+
+// 收藏商品
+export function collectAdd(data) {
+	return request({
+		url: '/api/collect/add',
+		method: 'post',
+		data
+	});
+}
+
+// 取消收藏商品
+export function collectDel(data) {
+	return request({
+		url: '/api/collect/del',
+		method: 'post',
+		data
+	});
+}
+
+// 获取搜搜关键字
+export function searchKeyword(data) {
+	return request({
+		url: '/api/search/keyword',
+		method: 'get',
+		data
+	});
+}
+
+// 获取热门分类信息
+export function groomList(data, type) {
+	// 获取产品类型 1 精品推荐 2 热门榜单 3首发新品 4促销单品
+	return request({
+		url: '/api/groom/list/' + type,
+		method: 'get',
+		data
+	});
+}
+
+// 分享
+export function productCode(data) {
+	return request({
+		url: '/api/product/code',
+		method: 'get',
+		data
+	});
+}
+
+// 秒杀参数
+export function seckillAnan(data) {
+	return request({
+		url: '/api/pro/seckill_ananlysis',
+		method: 'get',
+		data
+	});
+}
+
+// 积分商品列表
+export function integralList(data) {
+	return request({
+		url: '/api/product/integral',
+		method: 'get',
+		data
+	});
+}
+
+// 分享海报 
+export function poster(data) {
+	return request({
+		url: '/api/product/poster',
+		method: 'post',
+		data
+	});
+}

+ 43 - 0
api/set.js

@@ -0,0 +1,43 @@
+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/logout',
+		method: 'get',
+		data
+	});
+}
+//修改密码
+export function registerReset(data) {
+	return request({
+		url: '/api/register/reset',
+		method: 'post',
+		data
+	});
+}
+//实名认证
+export function realName(data) {
+	return request({
+		url: '/api/real_name',
+		method: 'POST',
+		data
+	});
+}
+//绑定手机
+export function binding(data) {
+	return request({
+		url: '/api/binding',
+		method: 'post',
+		data
+	});
+}

+ 159 - 0
api/user.js

@@ -0,0 +1,159 @@
+import request from '@/utils/request'
+
+// 订单统计信息
+export function orderData(data) {
+	return request({
+		url: '/api/order/data',
+		method: 'get',
+		data
+	});
+}
+
+// 获取用户信息
+export function userinfo(data) {
+	return request({
+		url: '/api/userinfo',
+		method: 'get',
+		data
+	});
+}
+// getLevel 获取等级数据
+export function getLevel(data) {
+	return request({
+		url: '/api/user/level/grade',
+		method: 'get',
+		data
+	});
+}
+
+//
+export function commission(data) {
+	return request({
+		url: '/api/commission',
+		method: 'get',
+		data
+	});
+}
+// 获取用户信息
+export function getUserInfo(data) {
+	return request({
+		url: '/api/userinfo',
+		method: 'get',
+		data
+	});
+}
+
+//购买会员
+export function bvip(data) {
+	return request({
+		url: '/api/level/recharge',
+		method: 'post',
+		data
+	});
+}
+
+/**
+ * 客服列表
+ */
+export function serviceList() {
+	return request({
+		url: "/api/user/service/list",
+		method: 'get',
+	});
+}
+
+/**
+ * 客服详情
+ */
+export function getChatRecord(to_uid, data) {
+	return request({
+		url: "/api/user/service/record/" + to_uid,
+		method: 'get',
+		data
+	});
+}
+
+/**
+ * 获取产品详情
+ * @param int id
+ * 
+ */
+export function getProductDetail(id) {
+	return request({
+		url: '/product/detail/' + id,
+		method: 'get',
+		data: {}
+	});
+}
+
+// 获取会员信息
+export function levelGrade(data) {
+	return request({
+		url: '/user/level/grade',
+		method: 'get',
+		data
+	});
+}
+
+//佣金总和
+export function spreadCount(data, type) {
+	return request({
+		url: '/api/spread/count/' + type,
+		method: 'GET',
+		data
+	});
+}
+
+// 获取用户信息
+export function userinfos(data) {
+	return request({
+		url: '/api/user',
+		method: 'get',
+		data
+	});
+}
+
+// 获取佣金明细
+export function getCommissionInfo(data, type) {
+	return request({
+		url: '/api/spread/commission/' + type,
+		method: 'get',
+		data
+	});
+}
+
+//我的券码
+export function getMyYhq(data) {
+	return request({
+		url: '/api/produce',
+		method: 'get',
+		data
+	})
+}
+
+//券码详情
+export function getYhqDetail(data, id) {
+	return request({
+		url: '/api/produce/' + id,
+		method: 'get',
+		data
+	})
+}
+
+// 核销项目码
+export function check(data) {
+	return request({
+		url: '/api/produce/check',
+		method: 'post',
+		data
+	})
+}
+
+// 转赠项目码
+export function transfer(data, id) {
+	return request({
+		url: '/api/produce/trade/' + id,
+		method: 'post',
+		data
+	})
+}

+ 147 - 0
api/wallet.js

@@ -0,0 +1,147 @@
+import request from '@/utils/request'
+
+// 获取用户消费记录
+export function spreadCommission(data,state) {
+	return request({
+		url: '/api/spread/commission/'+state,
+		method: 'get',
+		data
+	});
+}
+
+// 获取账户余额
+export function userBalance(data) {
+	return request({
+		url: '/api/user/balance',
+		method: 'get',
+		data
+	});
+}
+
+// 提现
+export function extractCash(data) {
+	return request({
+		url: '/api/extract/cash',
+		method: 'post',
+		data
+	});
+}
+
+// 提现信息
+export function extractBank(data) {
+	return request({
+		url: '/api/extract/bank',
+		method: 'get',
+		data
+	});
+}
+
+// 公众号充值
+export function rechargeWechat(data) {
+	return request({
+		url: '/api/recharge/wechat',
+		method: 'post',
+		data
+	});
+}
+// 小程序充值
+export function rechargeRoutine(data) {
+	return request({
+		url: '/api/recharge/routine',
+		method: 'post',
+		data
+	});
+}
+
+// 显示充值金额		
+export function rechargeIndex(data) {
+	return request({
+		url: '/api/recharge/index',
+		method: 'get',
+		data
+	});
+}
+
+// 获取提现支付宝账号
+export function aliInfo(data) {
+	return request({
+		url: '/api/ali/info',
+		method: 'get',
+		data
+	});
+}
+//获取默认银行卡账号
+export function bankInfo(data) {
+	return request({
+		url: '/api/bank/info',
+		method: 'get',
+		data
+	});
+}
+// 保存提现支付宝账号
+export function setAliInfo(data) {
+	return request({
+		url: '/api/ali/edit',
+		method: 'post',
+		data
+	});
+}
+//保存默认银行卡账号
+export function setBankInfo(data) {
+	return request({
+		url: '/api/bank/edit',
+		method: 'post',
+		data
+	});
+}
+//积分记录
+export function integral(data) {
+	return request({
+		url: '/api/integral/list',
+		method: 'GET',
+		data
+	});
+}
+//记录
+export function spread_commission(data,type) {
+	return request({
+		url: '/api/spread/commission/'+type,
+		method: 'GET',
+		data
+	});
+}
+//佣金总和
+export function spreadCount(data) {
+	return request({
+		url: '/api/spread/count/3',
+		method: 'GET',
+		data
+	});
+}
+
+export function commission(data) {
+	return request({
+		url: '/api/commission',
+		method: 'GET',
+		data
+	});
+}
+
+//	积分列表
+export function integrallist(data) {
+	return request({
+		url: '/api/integral/list',
+		method: 'get',
+		data
+	});
+}
+
+// 提现列表
+export function extractList(data) {
+	return request({
+		url: '/api/extractList',
+		method: 'get',
+		data
+	});
+}
+

+ 34 - 0
api/wx.js

@@ -0,0 +1,34 @@
+import request from '@/utils/request'
+import store from '@/store';
+//微信配置
+export function wechatConfig(data) {
+	return request({
+		url: '/api/wechat/config',
+		method: 'get',
+		data
+	});
+}
+// 微信code地址
+export function wechatAuth(data) {
+	return request({
+		url: '/api/wechat/auth',
+		method: 'get',
+		data
+	});
+}
+//小程序code地址
+export function wechatMpAuth(data) {
+	return request({
+		url: '/api/wechat/mp_auth',
+		method: 'post',
+		data
+	});
+}
+// 微信分享信息
+export function share(data) {
+	return request({
+		url: '/api/share',
+		method: 'get',
+		data
+	});
+}

+ 1380 - 0
components/Sansnn-uQRCode/uqrcode.js

@@ -0,0 +1,1380 @@
+//---------------------------------------------------------------------
+// github https://github.com/Sansnn/uQRCode
+//---------------------------------------------------------------------
+
+let uQRCode = {};
+
+(function() {
+	//---------------------------------------------------------------------
+	// QRCode for JavaScript
+	//
+	// Copyright (c) 2009 Kazuhiko Arase
+	//
+	// URL: http://www.d-project.com/
+	//
+	// Licensed under the MIT license:
+	//   http://www.opensource.org/licenses/mit-license.php
+	//
+	// The word "QR Code" is registered trademark of 
+	// DENSO WAVE INCORPORATED
+	//   http://www.denso-wave.com/qrcode/faqpatent-e.html
+	//
+	//---------------------------------------------------------------------
+
+	//---------------------------------------------------------------------
+	// QR8bitByte
+	//---------------------------------------------------------------------
+
+	function QR8bitByte(data) {
+		this.mode = QRMode.MODE_8BIT_BYTE;
+		this.data = data;
+	}
+
+	QR8bitByte.prototype = {
+
+		getLength: function(buffer) {
+			return this.data.length;
+		},
+
+		write: function(buffer) {
+			for (var i = 0; i < this.data.length; i++) {
+				// not JIS ...
+				buffer.put(this.data.charCodeAt(i), 8);
+			}
+		}
+	};
+
+	//---------------------------------------------------------------------
+	// QRCode
+	//---------------------------------------------------------------------
+
+	function QRCode(typeNumber, errorCorrectLevel) {
+		this.typeNumber = typeNumber;
+		this.errorCorrectLevel = errorCorrectLevel;
+		this.modules = null;
+		this.moduleCount = 0;
+		this.dataCache = null;
+		this.dataList = new Array();
+	}
+
+	QRCode.prototype = {
+
+		addData: function(data) {
+			var newData = new QR8bitByte(data);
+			this.dataList.push(newData);
+			this.dataCache = null;
+		},
+
+		isDark: function(row, col) {
+			if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {
+				throw new Error(row + "," + col);
+			}
+			return this.modules[row][col];
+		},
+
+		getModuleCount: function() {
+			return this.moduleCount;
+		},
+
+		make: function() {
+			// Calculate automatically typeNumber if provided is < 1
+			if (this.typeNumber < 1) {
+				var typeNumber = 1;
+				for (typeNumber = 1; typeNumber < 40; typeNumber++) {
+					var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);
+
+					var buffer = new QRBitBuffer();
+					var totalDataCount = 0;
+					for (var i = 0; i < rsBlocks.length; i++) {
+						totalDataCount += rsBlocks[i].dataCount;
+					}
+
+					for (var i = 0; i < this.dataList.length; i++) {
+						var data = this.dataList[i];
+						buffer.put(data.mode, 4);
+						buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));
+						data.write(buffer);
+					}
+					if (buffer.getLengthInBits() <= totalDataCount * 8)
+						break;
+				}
+				this.typeNumber = typeNumber;
+			}
+			this.makeImpl(false, this.getBestMaskPattern());
+		},
+
+		makeImpl: function(test, 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);
+
+				for (var col = 0; col < this.moduleCount; col++) {
+					this.modules[row][col] = null; //(col + row) % 3;
+				}
+			}
+
+			this.setupPositionProbePattern(0, 0);
+			this.setupPositionProbePattern(this.moduleCount - 7, 0);
+			this.setupPositionProbePattern(0, this.moduleCount - 7);
+			this.setupPositionAdjustPattern();
+			this.setupTimingPattern();
+			this.setupTypeInfo(test, maskPattern);
+
+			if (this.typeNumber >= 7) {
+				this.setupTypeNumber(test);
+			}
+
+			if (this.dataCache == null) {
+				this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);
+			}
+
+			this.mapData(this.dataCache, maskPattern);
+		},
+
+		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;
+					}
+				}
+			}
+		},
+
+		getBestMaskPattern: function() {
+
+			var minLostPoint = 0;
+			var pattern = 0;
+
+			for (var i = 0; i < 8; i++) {
+
+				this.makeImpl(true, i);
+
+				var lostPoint = QRUtil.getLostPoint(this);
+
+				if (i == 0 || minLostPoint > lostPoint) {
+					minLostPoint = lostPoint;
+					pattern = i;
+				}
+			}
+
+			return pattern;
+		},
+
+		createMovieClip: function(target_mc, instance_name, depth) {
+
+			var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);
+			var cs = 1;
+
+			this.make();
+
+			for (var row = 0; row < this.modules.length; row++) {
+
+				var y = row * cs;
+
+				for (var col = 0; col < this.modules[row].length; col++) {
+
+					var x = col * cs;
+					var dark = this.modules[row][col];
+
+					if (dark) {
+						qr_mc.beginFill(0, 100);
+						qr_mc.moveTo(x, y);
+						qr_mc.lineTo(x + cs, y);
+						qr_mc.lineTo(x + cs, y + cs);
+						qr_mc.lineTo(x, y + cs);
+						qr_mc.endFill();
+					}
+				}
+			}
+
+			return qr_mc;
+		},
+
+		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);
+			}
+
+			for (var c = 8; c < this.moduleCount - 8; c++) {
+				if (this.modules[6][c] != null) {
+					continue;
+				}
+				this.modules[6][c] = (c % 2 == 0);
+			}
+		},
+
+		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;
+							}
+						}
+					}
+				}
+			}
+		},
+
+		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;
+			}
+
+			for (var i = 0; i < 18; i++) {
+				var mod = (!test && ((bits >> i) & 1) == 1);
+				this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
+			}
+		},
+
+		setupTypeInfo: function(test, maskPattern) {
+
+			var data = (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
+			for (var i = 0; i < 15; i++) {
+
+				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);
+
+		},
+
+		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;
+					}
+				}
+			}
+
+		}
+
+	};
+
+	QRCode.PAD0 = 0xEC;
+	QRCode.PAD1 = 0x11;
+
+	QRCode.createData = function(typeNumber, errorCorrectLevel, dataList) {
+
+		var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
+
+		var buffer = new QRBitBuffer();
+
+		for (var i = 0; i < dataList.length; i++) {
+			var data = dataList[i];
+			buffer.put(data.mode, 4);
+			buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));
+			data.write(buffer);
+		}
+
+		// calc num max data.
+		var totalDataCount = 0;
+		for (var i = 0; i < rsBlocks.length; i++) {
+			totalDataCount += rsBlocks[i].dataCount;
+		}
+
+		if (buffer.getLengthInBits() > totalDataCount * 8) {
+			throw new Error("code length overflow. (" +
+				buffer.getLengthInBits() +
+				">" +
+				totalDataCount * 8 +
+				")");
+		}
+
+		// end code
+		if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
+			buffer.put(0, 4);
+		}
+
+		// padding
+		while (buffer.getLengthInBits() % 8 != 0) {
+			buffer.putBit(false);
+		}
+
+		// padding
+		while (true) {
+
+			if (buffer.getLengthInBits() >= totalDataCount * 8) {
+				break;
+			}
+			buffer.put(QRCode.PAD0, 8);
+
+			if (buffer.getLengthInBits() >= totalDataCount * 8) {
+				break;
+			}
+			buffer.put(QRCode.PAD1, 8);
+		}
+
+		return QRCode.createBytes(buffer, rsBlocks);
+	}
+
+	QRCode.createBytes = function(buffer, rsBlocks) {
+
+		var offset = 0;
+
+		var maxDcCount = 0;
+		var maxEcCount = 0;
+
+		var dcdata = new Array(rsBlocks.length);
+		var ecdata = new Array(rsBlocks.length);
+
+		for (var r = 0; r < rsBlocks.length; r++) {
+
+			var dcCount = rsBlocks[r].dataCount;
+			var ecCount = rsBlocks[r].totalCount - 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 totalCodeCount = 0;
+		for (var i = 0; i < rsBlocks.length; i++) {
+			totalCodeCount += rsBlocks[i].totalCount;
+		}
+
+		var data = new Array(totalCodeCount);
+		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;
+
+	}
+
+	//---------------------------------------------------------------------
+	// QRMode
+	//---------------------------------------------------------------------
+
+	var QRMode = {
+		MODE_NUMBER: 1 << 0,
+		MODE_ALPHA_NUM: 1 << 1,
+		MODE_8BIT_BYTE: 1 << 2,
+		MODE_KANJI: 1 << 3
+	};
+
+	//---------------------------------------------------------------------
+	// QRErrorCorrectLevel
+	//---------------------------------------------------------------------
+
+	var QRErrorCorrectLevel = {
+		L: 1,
+		M: 0,
+		Q: 3,
+		H: 2
+	};
+
+	//---------------------------------------------------------------------
+	// QRMaskPattern
+	//---------------------------------------------------------------------
+
+	var QRMaskPattern = {
+		PATTERN000: 0,
+		PATTERN001: 1,
+		PATTERN010: 2,
+		PATTERN011: 3,
+		PATTERN100: 4,
+		PATTERN101: 5,
+		PATTERN110: 6,
+		PATTERN111: 7
+	};
+
+	//---------------------------------------------------------------------
+	// QRUtil
+	//---------------------------------------------------------------------
+
+	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),
+
+		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;
+		},
+
+		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;
+		},
+
+		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);
+			}
+		},
+
+		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;
+		},
+
+		getLengthInBits: function(mode, type) {
+
+			if (1 <= type && type < 10) {
+
+				// 1 - 9
+
+				switch (mode) {
+					case QRMode.MODE_NUMBER:
+						return 10;
+					case QRMode.MODE_ALPHA_NUM:
+						return 9;
+					case QRMode.MODE_8BIT_BYTE:
+						return 8;
+					case QRMode.MODE_KANJI:
+						return 8;
+					default:
+						throw new Error("mode:" + mode);
+				}
+
+			} else if (type < 27) {
+
+				// 10 - 26
+
+				switch (mode) {
+					case QRMode.MODE_NUMBER:
+						return 12;
+					case QRMode.MODE_ALPHA_NUM:
+						return 11;
+					case QRMode.MODE_8BIT_BYTE:
+						return 16;
+					case QRMode.MODE_KANJI:
+						return 10;
+					default:
+						throw new Error("mode:" + mode);
+				}
+
+			} else if (type < 41) {
+
+				// 27 - 40
+
+				switch (mode) {
+					case QRMode.MODE_NUMBER:
+						return 14;
+					case QRMode.MODE_ALPHA_NUM:
+						return 13;
+					case QRMode.MODE_8BIT_BYTE:
+						return 16;
+					case QRMode.MODE_KANJI:
+						return 12;
+					default:
+						throw new Error("mode:" + mode);
+				}
+
+			} else {
+				throw new Error("type:" + type);
+			}
+		},
+
+		getLostPoint: function(qrCode) {
+
+			var moduleCount = qrCode.getModuleCount();
+
+			var lostPoint = 0;
+
+			// LEVEL1
+
+			for (var row = 0; row < moduleCount; row++) {
+
+				for (var col = 0; col < moduleCount; col++) {
+
+					var sameCount = 0;
+					var dark = qrCode.isDark(row, col);
+
+					for (var r = -1; r <= 1; r++) {
+
+						if (row + r < 0 || moduleCount <= row + r) {
+							continue;
+						}
+
+						for (var c = -1; c <= 1; c++) {
+
+							if (col + c < 0 || moduleCount <= col + c) {
+								continue;
+							}
+
+							if (r == 0 && c == 0) {
+								continue;
+							}
+
+							if (dark == qrCode.isDark(row + r, col + c)) {
+								sameCount++;
+							}
+						}
+					}
+
+					if (sameCount > 5) {
+						lostPoint += (3 + sameCount - 5);
+					}
+				}
+			}
+
+			// LEVEL2
+
+			for (var row = 0; row < moduleCount - 1; row++) {
+				for (var col = 0; col < moduleCount - 1; col++) {
+					var count = 0;
+					if (qrCode.isDark(row, col)) count++;
+					if (qrCode.isDark(row + 1, col)) count++;
+					if (qrCode.isDark(row, col + 1)) count++;
+					if (qrCode.isDark(row + 1, col + 1)) count++;
+					if (count == 0 || count == 4) {
+						lostPoint += 3;
+					}
+				}
+			}
+
+			// LEVEL3
+
+			for (var row = 0; row < moduleCount; row++) {
+				for (var col = 0; col < moduleCount - 6; col++) {
+					if (qrCode.isDark(row, col) &&
+						!qrCode.isDark(row, col + 1) &&
+						qrCode.isDark(row, col + 2) &&
+						qrCode.isDark(row, col + 3) &&
+						qrCode.isDark(row, col + 4) &&
+						!qrCode.isDark(row, col + 5) &&
+						qrCode.isDark(row, col + 6)) {
+						lostPoint += 40;
+					}
+				}
+			}
+
+			for (var col = 0; col < moduleCount; col++) {
+				for (var row = 0; row < moduleCount - 6; row++) {
+					if (qrCode.isDark(row, col) &&
+						!qrCode.isDark(row + 1, col) &&
+						qrCode.isDark(row + 2, col) &&
+						qrCode.isDark(row + 3, col) &&
+						qrCode.isDark(row + 4, col) &&
+						!qrCode.isDark(row + 5, col) &&
+						qrCode.isDark(row + 6, col)) {
+						lostPoint += 40;
+					}
+				}
+			}
+
+			// LEVEL4
+
+			var darkCount = 0;
+
+			for (var col = 0; col < moduleCount; col++) {
+				for (var row = 0; row < moduleCount; row++) {
+					if (qrCode.isDark(row, col)) {
+						darkCount++;
+					}
+				}
+			}
+
+			var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
+			lostPoint += ratio * 10;
+
+			return lostPoint;
+		}
+
+	};
+
+
+	//---------------------------------------------------------------------
+	// QRMath
+	//---------------------------------------------------------------------
+
+	var QRMath = {
+
+		glog: function(n) {
+
+			if (n < 1) {
+				throw new Error("glog(" + n + ")");
+			}
+
+			return QRMath.LOG_TABLE[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
+	//---------------------------------------------------------------------
+
+	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;
+		},
+
+		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);
+		},
+
+		mod: function(e) {
+
+			if (this.getLength() - e.getLength() < 0) {
+				return this;
+			}
+
+			var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));
+
+			var num = new Array(this.getLength());
+
+			for (var i = 0; i < this.getLength(); i++) {
+				num[i] = this.get(i);
+			}
+
+			for (var i = 0; i < e.getLength(); i++) {
+				num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);
+			}
+
+			// recursive call
+			return new QRPolynomial(num, 0).mod(e);
+		}
+	};
+
+	//---------------------------------------------------------------------
+	// QRRSBlock
+	//---------------------------------------------------------------------
+
+	function QRRSBlock(totalCount, dataCount) {
+		this.totalCount = totalCount;
+		this.dataCount = dataCount;
+	}
+
+	QRRSBlock.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]
+	];
+
+	QRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {
+
+		var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
+
+		if (rsBlock == undefined) {
+			throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel);
+		}
+
+		var length = rsBlock.length / 3;
+
+		var list = new Array();
+
+		for (var i = 0; i < length; i++) {
+
+			var count = rsBlock[i * 3 + 0];
+			var totalCount = rsBlock[i * 3 + 1];
+			var dataCount = rsBlock[i * 3 + 2];
+
+			for (var j = 0; j < count; j++) {
+				list.push(new QRRSBlock(totalCount, dataCount));
+			}
+		}
+
+		return list;
+	}
+
+	QRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {
+
+		switch (errorCorrectLevel) {
+			case QRErrorCorrectLevel.L:
+				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
+			case QRErrorCorrectLevel.M:
+				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
+			case QRErrorCorrectLevel.Q:
+				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
+			case QRErrorCorrectLevel.H:
+				return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
+			default:
+				return undefined;
+		}
+	}
+
+	//---------------------------------------------------------------------
+	// 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) == 1;
+		},
+
+		put: function(num, length) {
+			for (var i = 0; i < length; i++) {
+				this.putBit(((num >>> (length - i - 1)) & 1) == 1);
+			}
+		},
+
+		getLengthInBits: function() {
+			return this.length;
+		},
+
+		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++;
+		}
+	};
+
+	//---------------------------------------------------------------------
+	// Support Chinese
+	//---------------------------------------------------------------------
+	function utf16To8(text) {
+		var result = '';
+		var c;
+		for (var i = 0; i < text.length; i++) {
+			c = text.charCodeAt(i);
+			if (c >= 0x0001 && c <= 0x007F) {
+				result += text.charAt(i);
+			} else if (c > 0x07FF) {
+				result += String.fromCharCode(0xE0 | c >> 12 & 0x0F);
+				result += String.fromCharCode(0x80 | c >> 6 & 0x3F);
+				result += String.fromCharCode(0x80 | c >> 0 & 0x3F);
+			} else {
+				result += String.fromCharCode(0xC0 | c >> 6 & 0x1F);
+				result += String.fromCharCode(0x80 | c >> 0 & 0x3F);
+			}
+		}
+		return result;
+	}
+
+	uQRCode = {
+		
+		defaults: {
+			size: 258,
+			margin: 0,
+			backgroundColor: '#ffffff',
+			foregroundColor: '#000000',
+			fileType: 'png', // 'jpg', 'png'
+			correctLevel: 3,
+			typeNumber: -1
+		},
+
+		make: function(options) {
+			var defaultOptions = {
+				canvasId: options.canvasId,
+				componentInstance: options.componentInstance,
+				text: options.text,
+				size: this.defaults.size,
+				margin: this.defaults.margin,
+				backgroundColor: this.defaults.backgroundColor,
+				foregroundColor: this.defaults.foregroundColor,
+				fileType: this.defaults.fileType,
+				correctLevel: this.defaults.correctLevel,
+				typeNumber: this.defaults.typeNumber
+			};
+			if (options) {
+				for (var i in options) {
+					defaultOptions[i] = options[i];
+				}
+			}
+			options = defaultOptions;
+			if (!options.canvasId) {
+				console.error('uQRCode: Please set canvasId!');
+				return;
+			}
+
+			function createCanvas() {
+				var qrcode = new QRCode(options.typeNumber, options.correctLevel);
+				qrcode.addData(utf16To8(options.text));
+				qrcode.make();
+
+				var ctx = uni.createCanvasContext(options.canvasId, options.componentInstance);
+				ctx.setFillStyle(options.backgroundColor);
+				ctx.fillRect(0, 0, options.size, options.size);
+
+				var tileW = (options.size - options.margin * 2) / qrcode.getModuleCount();
+				var tileH = tileW;
+
+				for (var row = 0; row < qrcode.getModuleCount(); row++) {
+					for (var col = 0; col < qrcode.getModuleCount(); col++) {
+						var style = qrcode.isDark(row, col) ? options.foregroundColor : options.backgroundColor;
+						ctx.setFillStyle(style);
+						var x = Math.round(col * tileW) + options.margin;
+						var y = Math.round(row * tileH) + options.margin;
+						var w = Math.ceil((col + 1) * tileW) - Math.floor(col * tileW);
+						var h = Math.ceil((row + 1) * tileW) - Math.floor(row * tileW);
+						ctx.fillRect(x, y, w, h);
+					}
+				}
+
+				setTimeout(function() {
+					ctx.draw(false, function() {
+						setTimeout(function() {
+							uni.canvasToTempFilePath({
+								canvasId: options.canvasId,
+								fileType: options.fileType,
+								width: options.size,
+								height: options.size,
+								destWidth: options.size,
+								destHeight: options.size,
+								success: function(res) {
+									options.success && options.success(res.tempFilePath);
+								},
+								fail: function(error) {
+									options.fail && options.fail(error);
+								},
+								complete: function(res) {
+									options.complete && options.complete(res);
+								}
+							}, options.componentInstance);
+						}, options.text.length + 100);
+					});
+				}, 150);
+			}
+			
+			createCanvas();
+		}
+
+	}
+
+})()
+
+export default uQRCode

+ 264 - 0
components/bw-swiper/bw-swiper.vue

@@ -0,0 +1,264 @@
+<template>
+	<view class="swiperContent">
+		<swiper
+			@change="change"
+			@animationfinish="animationfinish"
+			:current="current"
+			:interval="interval"
+			:duration="duration"
+			:circular="circular"
+			:vertical="vertical"
+			:previous-margin="previousMargin"
+			:next-margin="nextMargin"
+			:autoplay="(autoplay && flag)"
+			:style="{'height':swiperHeight+'px'}"
+			:class="(swiperType && displayMultipleItems ==1 && !vertical && !fullScreen)?'cardSwiper':'' "
+			class="screen-swiper"
+		>
+			<swiper-item class="swiper-item"  v-for="(item,index) in swiperList" :key="index" :class="(cardCur==index && displayMultipleItems ==1 && !vertical &&  !fullScreen)?'cur':''">
+				<view class="swiper-box" v-if="item[imageKey] && !item[videoKey]">
+					<image :src="item[imageKey]"></image>
+					<view class="swiperText">
+						<view class="swiperText_name">{{item.name}}</view>
+						<view>可享受商品折扣: {{item.discount}}%</view>
+						<view class="flex disdiscount_box" v-if="item.is_clear == false && item.task_list.length > 1">
+							<view class="" v-for="ls in item.task_list">
+								<view class="task_name">{{ls.number}}</view>
+								<view v-if="">{{ls.real_name}}</view>
+							</view>
+						</view>
+						<view class="disdiscount_box" v-if="item.is_clear == false && item.task_list.length == 1">
+							<view class="" v-for="ls in item.task_list">
+								<view class="task_name">{{ls.number}}</view>
+								<view v-if="">{{ls.name}}</view>
+							</view>
+						</view>
+						<view class="is_clear" v-if="item.is_clear == true">该会员等级尚未解锁</view>
+					</view>
+				</view>
+				<view v-if="item[videoKey]">
+				<video :src="item[videoKey]" @play="play" @pause="pause" :style="{'height':swiperHeight+'px'}" autoplay loop muted :autoplay="videoAutoplay" objectFit="cover"></video>
+				</view>
+			</swiper-item>
+			<swiper-item class="swiper-item"  v-if="swiperList.length==0" >
+				<text></text>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+	export default {
+		name:'bw-swiper',
+		created:function(){
+			var that = this;
+			if(this.fullScreen){
+				uni.getSystemInfo({
+					success:function(e){
+					that.swiperHeight = e.screenHeight -44
+				}})
+			}
+		},
+		mounted:function(){
+			if(!this.fullScreen){
+				const query = uni.createSelectorQuery().in(this);
+				query.select('.swiper-item').boundingClientRect(data => {
+					this.swiperHeight = data.width/this.w_h;
+				}).exec();
+			}	
+		},
+		props: {
+			fullScreen:{ // 是否全屏
+				type:Boolean,
+				default:false
+			},
+			swiperList:{ // 滑块视图容器数据
+				type:Array,
+				required: true,
+				default:function(){
+					  return []
+				}
+			},
+			swiperType:{  // false => 全屏限高轮播图 true => 卡塔式轮播图
+				type:Boolean,
+				default:true
+			},
+			videoAutoplay:{ // true =>自动播放
+				type:Boolean,
+				default:false
+			},
+			videoKey:{  // 视频映射的键
+				type:String,
+				default:'src'
+			},
+			imageKey:{ //  图片映射的键
+				type:String,
+				default:'image'
+			},
+			textKey:{ //   文字说明映射的键
+				type:String,
+				default:'name'
+			},
+			displayMultipleItems:{ //同时显示的滑块数量
+				type:Number,
+				default:1
+			},
+			textTip:{ // 图片文字说明 false => 隐藏
+				type:Boolean,
+				default:true
+			},
+			textStyleSize:{ // 图片文字大小
+				type:Number,
+				default:45
+			},
+			textStyleTop:{ // 图片文字位置
+				type:Number,
+				default:2
+			},
+			textStyleLeft:{ // 图片文字位置
+				type:Number,
+				default:5
+			},
+			textStyleColor:{ // 图片文字颜色
+				type:String,
+				default:'#ffffff'
+			},
+			textStyleBgcolor:{ // 图片文字背景色
+				type:String,
+				default:'transparent'
+			},
+			w_h:{  //宽高比 推荐 w/h => 2
+				type:Number,
+				default:2
+			},
+			nextMargin:{ // 后边距,可用于露出后一项的一小部分,接受 px 和 rpx 值 头条小程序不支持
+				type:String,
+				default:'0px'
+			},
+			previousMargin:{//前边距,可用于露出前一项的一小部分,接受 px 和 rpx 值头条小程序不支持
+				type:String,
+				default:'0px'
+			},
+			vertical:{ //滑动方向是否为纵向 卡牌  不支持纵向以及同时显示的2块以上滑块数量
+				type:Boolean,
+				default:false
+			},
+			circular:{ // 是否采用衔接滑动
+				type:Boolean,
+				default:true
+			},
+			duration:{ // 滑动动画时长
+				type:Number,
+				default:400
+			},
+			interval:{ // 自动切换时间间隔
+				type:Number,
+				default:2500
+			},
+			current:{ // 当前所在滑块的 index
+				type:Number,
+				default:0
+			},
+			autoplay:{ // 是否自动切换
+				type:Boolean,
+				default:false
+			},
+			indicatorDots: { // 是否显示面板指示点
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+				flag:true,
+				cardCur:0,
+				swiperHeight:300
+			}
+		},
+		computed:{
+			
+		},
+		methods: {
+			play:function(){
+				this.flag = false
+			},
+			pause:function(){
+				this.flag = true
+			},
+			// clickItem:function(index){
+			// 	console.log(index,"66")
+			// 	if(this.swiperList.length>0){
+			// 		this.$emit('clickItem',this.swiperList[index])
+			// 		console.log(this.swiperList[index],55)
+			// 	}
+			// },
+			change:function(e){
+				this.$emit('change',e.detail.current)
+				// console.log(e.detail.current,55)
+			},
+			animationfinish:function(e){
+				this.cardCur = e.detail.current;
+				this.$emit('animationfinish',e)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+.swiperContent{
+		background-color: #232323;
+}
+.cardSwiper .swiper-item{
+	.swiper-box{
+		display: block;
+		transform: scale(0.93,0.8);
+		opacity: 0.7;
+		transition: all 0.1s ease-in 0s;
+		overflow: hidden;
+		box-sizing: border-box;
+		height:100%;
+		position: relative;
+		width:86%!important;
+		overflow: initial;
+		padding: 25rpx 0rpx;
+		margin-left: 8%;
+		transform:  initial;
+		opacity: 1;
+		transition: all 0.1s ease-in 0s;
+		image{
+			width: 100%;
+			height: 100%;
+			border-radius: 10upx;
+		}
+	}
+}
+.swiperText{
+	width: 100%;
+	height: 100%;
+	position: absolute;
+	color:#ffffff;
+	z-index:2;
+	padding: 45rpx 25rpx;
+	top:0;
+	color: rgb(255, 255, 255);
+	font-size: 28rpx;
+	.swiperText_name{
+		font-size: 45rpx;
+		font-weight: bold;
+		padding-bottom: 10rpx;
+		}
+		.disdiscount_box{
+			padding: 45rpx 45rpx;
+			text-align: center;
+		}
+}
+.task_name{
+	font-size: 45rpx;
+}
+.is_clear{
+	padding-top: 65rpx;
+}
+.swiperContent{
+	width:100%;
+}
+</style>

+ 89 - 0
components/common/time.js

@@ -0,0 +1,89 @@
+export default{
+	// 计算当前日期星座
+	getHoroscope(date) {
+	  let c = ['摩羯','水瓶','双鱼','白羊','金牛','双子','巨蟹','狮子','处女','天秤','天蝎','射手','摩羯']
+	  date=new Date(date);
+	  let month = date.getMonth() + 1;
+	  let day = date.getDate();
+	  let startMonth = month - (day - 14 < '865778999988'.charAt(month));
+	  return c[startMonth]+'座';
+	},
+	// 计算指定时间与当前的时间差
+	sumAge(data){
+		let dateBegin = new Date(data.replace(/-/g, "/"));
+		let dateEnd = new Date();//获取当前时间
+		let dateDiff = dateEnd.getTime() - dateBegin.getTime();//时间差的毫秒数
+		let dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//计算出相差天数
+		let leave1=dateDiff%(24*3600*1000)    //计算天数后剩余的毫秒数
+		let hours=Math.floor(leave1/(3600*1000))//计算出小时数
+		//计算相差分钟数
+		let leave2=leave1%(3600*1000)    //计算小时数后剩余的毫秒数
+		let minutes=Math.floor(leave2/(60*1000))//计算相差分钟数
+		//计算相差秒数
+		let leave3=leave2%(60*1000)      //计算分钟数后剩余的毫秒数
+		let seconds=Math.round(leave3/1000)
+		return dayDiff+"天 "+hours+"小时 ";
+	},
+	// 获取聊天时间(相差300s内的信息不会显示时间)
+	getChatTime(v1,v2){
+		v1=v1.toString().length<13 ? v1*1000 : v1;
+		v2=v2.toString().length<13 ? v2*1000 : v2;
+		if(((parseInt(v1)-parseInt(v2))/1000) > 300){
+			return this.gettime(v1);
+		}
+	},
+	// 人性化时间格式
+	gettime(shorttime){
+		shorttime=shorttime.toString().length<13 ? shorttime*1000 : shorttime;
+		let now = (new Date()).getTime();
+		let cha = (now-parseInt(shorttime))/1000;
+		
+		if (cha < 43200) {
+			// 当天
+			return this.dateFormat(new Date(shorttime),"{A} {t}:{ii}");
+		} else if(cha < 518400){
+			// 隔天 显示日期+时间
+			return this.dateFormat(new Date(shorttime),"{Mon}月{DD}日 {A} {t}:{ii}");
+		} else {
+			// 隔年 显示完整日期+时间
+			return this.dateFormat(new Date(shorttime),"{Y}-{MM}-{DD} {A} {t}:{ii}");
+		}
+	},
+	
+	parseNumber(num) {
+		return num < 10 ? "0" + num : num;
+	},
+	 
+	dateFormat(date, formatStr) {
+		let dateObj = {},
+			rStr = /\{([^}]+)\}/,
+			mons = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];
+		 
+		dateObj["Y"] = date.getFullYear();
+		dateObj["M"] = date.getMonth() + 1;
+		dateObj["MM"] = this.parseNumber(dateObj["M"]);
+		dateObj["Mon"] = mons[dateObj['M'] - 1];
+		dateObj["D"] = date.getDate();
+		dateObj["DD"] = this.parseNumber(dateObj["D"]);
+		dateObj["h"] = date.getHours();
+		dateObj["hh"] = this.parseNumber(dateObj["h"]);
+		dateObj["t"] = dateObj["h"] > 12 ? dateObj["h"] - 12 : dateObj["h"];
+		dateObj["tt"] = this.parseNumber(dateObj["t"]);
+		dateObj["A"] = dateObj["h"] > 12 ? '下午' : '上午';
+		dateObj["i"] = date.getMinutes();
+		dateObj["ii"] = this.parseNumber(dateObj["i"]);
+		dateObj["s"] = date.getSeconds();
+		dateObj["ss"] = this.parseNumber(dateObj["s"]);
+	 
+		while(rStr.test(formatStr)) {
+			formatStr = formatStr.replace(rStr, dateObj[RegExp.$1]);
+		}
+		return formatStr;
+	},
+	// 获取年龄
+	getAgeByBirthday(data){
+		let birthday=new Date(data.replace(/-/g, "\/")); 
+		let d=new Date(); 
+		return d.getFullYear()-birthday.getFullYear()-((d.getMonth()<birthday.getMonth()|| d.getMonth()==birthday.getMonth() && d.getDate()<birthday.getDate())?1:0);
+	}
+}

+ 261 - 0
components/easy-upload/easy-upload.vue

@@ -0,0 +1,261 @@
+<template>
+	<view>
+		<view class="upload">
+			<block v-for="(upload,index) in uploads" :key="index">
+				<view class="uplode-file">
+					<image v-if="types == 'image'" class="uploade-img" :src="upload" :data-src="upload" @tap="previewImage"></image>
+					<image v-if="types == 'image'" class="clear-one-icon" :src="clearIcon" @tap="delImage(index)"></image>
+					<video v-if="types == 'video'" class="uploade-img" :src="upload" controls>
+						<cover-image v-if="types == 'video'" class="clear-one-icon" :src="clearIcon" @tap="delImage(index)"></cover-image>
+					</video>
+				</view>
+			</block>
+			<view class="uploader-input-box" v-if="uploads.length < uploadCount">
+				<view class="uploader-input" @tap="chooseUploads"></view>
+			</view>
+		</view>	
+		<button type="primary" v-if="types == 'image'" @tap="upload">上传</button>
+	</view>
+</template>
+
+<script>
+	export default{
+		props: {
+			types: {
+				type: String,
+				default: 'image'
+			},
+			dataList: {
+				type: Array,
+				default: function() {
+					return []
+				}
+			},
+			clearIcon: {
+				type: String,
+				default: 'http://img1.imgtn.bdimg.com/it/u=451604666,2295832001&fm=26&gp=0.jpg'
+			},
+			uploadUrl: {
+				type: String,
+				default: ''
+			},
+			deleteUrl: {
+				type: String,
+				default: ''
+			},
+			uploadCount: {
+				type: Number,
+				default: 1
+			},
+			//上传图片大小 默认3M
+			upload_max: {
+				type: Number,
+				default: 3
+			}
+		},
+		data(){
+			return {
+				//上传的图片地址
+				uploadImages: [],
+				//展示的图片地址
+				uploads: [],
+				// 超出限制数组
+				exceeded_list: [],
+			}
+		},
+		watch:{
+			dataList() {
+				this.uploads = this.dataList
+			}
+		},
+		methods:{
+			previewImage (e) {
+				var current = e.target.dataset.src
+				uni.previewImage({
+					current: current,
+					urls: this.dataList
+				})
+			},
+			chooseUploads(){
+				switch (this.types){
+					case 'image': 
+						uni.chooseImage({
+							count: this.uploadCount - this.uploads.length, //默认9
+							sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+							sourceType: ['album', 'camera'], //从相册选择
+							success: (res) => {
+								for(let i = 0; i< res.tempFiles.length; i++){
+									if(Math.ceil(res.tempFiles[i].size / 1024) < this.upload_max * 1024){
+										this.uploads.push(res.tempFiles[i].path)
+										this.uploadImages.push(res.tempFiles[i].path)
+									}else {
+										this.exceeded_list.push(i === 0 ? 1 : i + 1);
+										uni.showModal({
+											title: '提示',
+											content: `第${[...new Set(this.exceeded_list)].join(',')}张图片超出限制${this.upload_max}MB,已过滤`
+										});
+									}
+								}
+							},
+							fail: (err) => {
+								uni.showModal({
+									content: JSON.stringify(err)
+								});
+							}
+						});
+					break;
+					case 'video' :
+						uni.chooseVideo({
+							sourceType: ['camera', 'album'],
+							success: (res) => {
+								if(Math.ceil(res.size / 1024) < this.upload_max * 1024){
+									this.uploads.push(res.tempFilePath)
+									uni.uploadFile({
+										url: this.uploadUrl, //仅为示例,非真实的接口地址
+										filePath: res.tempFilePath,
+										name: 'file',
+										//请求参数
+										formData: {
+											'user': 'test'
+										},
+										success: (uploadFileRes) => {
+											this.$emit('successVideo',uploadFileRes)
+										}
+									});
+								}else {
+									uni.showModal({
+										title: '提示',
+										content: `第${[...new Set(this.exceeded_list)].join(',')}张视频超出限制${this.upload_max}MB,已过滤`
+									});
+								}
+							},
+							fail: (err) => {
+								uni.showModal({
+									content: JSON.stringify(err)
+								});
+							}
+						});
+					break;
+				}
+			},
+			delImage(index){
+				if(this.uploads[index].substring(0,4) !== 'http'){
+					this.uploads.splice(index,1)
+					return;
+				};
+				if(!this.deleteUrl) {
+					uni.showModal({
+						content: '请填写删除接口'
+					});
+					return;
+				};
+				uni.request({
+					url: this.deleteUrl,
+					method: 'DELETE',
+					data: {
+						image: this.dataList[index]
+					},
+					success: res => {
+						this.uploads.splice(index,1)
+					},
+				});
+			},
+			upload(){
+				debugger
+				if(!this.uploadUrl) {
+					uni.showModal({
+						content: '请填写上传接口'
+					});
+					return;
+				};
+				for (let i of this.uploadImages) {
+					uni.uploadFile({
+						url: this.uploadUrl, //仅为示例,非真实的接口地址
+						filePath: i,
+						name: 'file',
+						//请求参数
+						formData: {
+							'user': 'test'
+						},
+						success: (uploadFileRes) => {
+							this.$emit('successImage',uploadFileRes)
+						}
+					});
+				}
+			}
+		}
+	}
+</script>
+
+<style scoped>
+	.upload {
+		display: flex;
+		flex-direction: row;
+		flex-wrap: wrap;
+	}
+	.uplode-file {
+		margin: 10upx;
+		width: 210upx;
+		height: 210upx;
+		position: relative;
+	}
+	.uploade-img {
+		display: block;
+		width: 210upx;
+		height: 210upx;
+	}
+	.clear-one{
+		position: absolute;
+		top: -10rpx;
+		right: 0;
+	}
+	.clear-one-icon{
+		position: absolute;
+		width: 20px;
+		height: 20px;
+		top: 0;
+		right: 0;
+		z-index: 9;
+	}
+	.uploader-input-box {
+		position: relative;
+		margin:10upx;
+		width: 208upx;
+		height: 208upx;
+		border: 2upx solid #D9D9D9;
+	}
+	.uploader-input-box:before,
+	.uploader-input-box:after {
+		content: " ";
+		position: absolute;
+		top: 50%;
+		left: 50%;
+		-webkit-transform: translate(-50%, -50%);
+		transform: translate(-50%, -50%);
+		background-color: #D9D9D9;
+	}
+	.uploader-input-box:before {
+		width: 4upx;
+		height: 79upx;
+	}
+	.uploader-input-box:after {
+		width: 79upx;
+		height: 4upx;
+	}
+	.uploader-input-box:active {
+		border-color: #999999;
+	}
+	.uploader-input-box:active:before,
+	.uploader-input-box:active:after {
+		background-color: #999999;
+	}
+	.uploader-input {
+		position: absolute;
+		z-index: 1;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		opacity: 0;
+	}
+</style>

+ 40 - 0
components/easy-upload/readme.md

@@ -0,0 +1,40 @@
+### easy-upload 组件
+
+使用方法
+```js
+	<easy-upload
+	:dataList="imageList" uploadUrl="http://localhost:3000/upload" :types="category"
+	deleteUrl='http://localhost:3000/upload' :uploadCount="6"
+	@successImage="successImage" @successVideo="successvideo"
+	></easy-upload>
+	
+	//先引入组件
+    import easyUpload from '@/components/easy-upload/easy-upload.vue'
+    //注册组件
+    components:{
+        easyUpload
+    }
+	
+	//使用 easycom 可以直接使用
+
+```
+
+|  参数   | 类型  | 是否必填 | 参数描述
+|  ----  | ----  | ---- | ----
+| types  | String | 否 | 上传类型 image/video
+| dataList  | Array | 否 | 图片/视频数据展示
+| clearIcon  | String | 否 | 删除图标(可以换成自己本地图片)
+| uploadUrl  | String | 否 | 上传的接口
+| deleteUrl  | String | 否 | 删除的接口
+| uploadCount  | Number | 否 | 上传图片最大个数(默认为一张)
+| upload_max  | Number | 否 | 上传大小(默认为3M)
+| upload_max  | Number | 否 | 上传大小(默认为3M)
+| upload_max  | Number | 否 | 上传大小(默认为3M)
+
+|  事件  | 是否必填 | 参数描述
+|  ---- | ---- | ----
+| successImage  | 否 | 上传图片成功事件
+| successVideo  |  否 | 上传视频成功回调
+
+示例项目中有服务端代码 (node.js)
+

ファイルの差分が大きいため隠しています
+ 18 - 0
components/empty.vue


+ 35 - 0
components/js_sdk/xb-copy/uni-copy.js

@@ -0,0 +1,35 @@
+
+export default function uniCopy(content) {
+	/**
+	 * 小程序端 和 app端的复制逻辑
+	 */
+	//#ifndef H5
+	uni.setClipboardData({
+		data: content,
+		success: function() {
+			console.log('success');
+			return true
+		}
+	});
+	//#endif
+	
+	/**
+	 * H5端的复制逻辑
+	 */
+	// #ifdef H5
+	if (!document.queryCommandSupported('copy')) { //为了兼容有些浏览器 queryCommandSupported 的判断
+		// 不支持
+		return false
+	}
+	let textarea = document.createElement("textarea")
+	textarea.value = content
+	textarea.readOnly = "readOnly"
+	document.body.appendChild(textarea)
+	textarea.select() // 选择对象
+	textarea.setSelectionRange(0, content.length) //核心
+	let result = document.execCommand("copy") // 执行浏览器复制命令
+	textarea.remove()
+	return result
+	// #endif
+
+}

+ 645 - 0
components/jyf-parser/jyf-parser.vue

@@ -0,0 +1,645 @@
+<template>
+	<view>
+		<slot v-if="!nodes.length" />
+		<!--#ifdef APP-PLUS-NVUE-->
+		<web-view id="_top" ref="web" :style="'margin-top:-2px;height:' + height + 'px'" @onPostMessage="_message" />
+		<!--#endif-->
+		<!--#ifndef APP-PLUS-NVUE-->
+		<view id="_top" :style="showAm + (selectable ? ';user-select:text;-webkit-user-select:text' : '')">
+			<!--#ifdef H5 || MP-360-->
+			<div :id="'rtf' + uid"></div>
+			<!--#endif-->
+			<!--#ifndef H5 || MP-360-->
+			<trees :nodes="nodes" :lazyLoad="lazyLoad" :loading="loadingImg" />
+			<!--#endif-->
+		</view>
+		<!--#endif-->
+	</view>
+</template>
+
+<script>
+// #ifndef H5 || APP-PLUS-NVUE || MP-360
+import trees from './libs/trees';
+var cache = {},
+	// #ifdef MP-WEIXIN || MP-TOUTIAO
+	fs = uni.getFileSystemManager ? uni.getFileSystemManager() : null,
+	// #endif
+	Parser = require('./libs/MpHtmlParser.js');
+var dom;
+// 计算 cache 的 key
+function hash(str) {
+	for (var i = str.length, val = 5381; i--; ) val += (val << 5) + str.charCodeAt(i);
+	return val;
+}
+// #endif
+// #ifdef H5 || APP-PLUS-NVUE || MP-360
+var windowWidth = uni.getSystemInfoSync().windowWidth,
+	cfg = require('./libs/config.js');
+// #endif
+// #ifdef APP-PLUS-NVUE
+var weexDom = weex.requireModule('dom');
+// #endif
+/**
+ * Parser 富文本组件
+ * @tutorial https://github.com/jin-yufeng/Parser
+ * @property {String} html 富文本数据
+ * @property {Boolean} autopause 是否在播放一个视频时自动暂停其他视频
+ * @property {Boolean} autoscroll 是否自动给所有表格添加一个滚动层
+ * @property {Boolean} autosetTitle 是否自动将 title 标签中的内容设置到页面标题
+ * @property {Number} compress 压缩等级
+ * @property {String} domain 图片、视频等链接的主域名
+ * @property {Boolean} lazyLoad 是否开启图片懒加载
+ * @property {String} loadingImg 图片加载完成前的占位图
+ * @property {Boolean} selectable 是否开启长按复制
+ * @property {Object} tagStyle 标签的默认样式
+ * @property {Boolean} showWithAnimation 是否使用渐显动画
+ * @property {Boolean} useAnchor 是否使用锚点
+ * @property {Boolean} useCache 是否缓存解析结果
+ * @event {Function} parse 解析完成事件
+ * @event {Function} load dom 加载完成事件
+ * @event {Function} ready 所有图片加载完毕事件
+ * @event {Function} error 错误事件
+ * @event {Function} imgtap 图片点击事件
+ * @event {Function} linkpress 链接点击事件
+ * @author JinYufeng
+ * @version 20200728
+ * @listens MIT
+ */
+export default {
+	name: 'parser',
+	data() {
+		return {
+			// #ifdef H5 || MP-360
+			uid: this._uid,
+			// #endif
+			// #ifdef APP-PLUS-NVUE
+			height: 1,
+			// #endif
+			// #ifndef APP-PLUS-NVUE
+			showAm: '',
+			// #endif
+			nodes: []
+		};
+	},
+	// #ifndef H5 || APP-PLUS-NVUE || MP-360
+	components: {
+		trees
+	},
+	// #endif
+	props: {
+		html: String,
+		autopause: {
+			type: Boolean,
+			default: true
+		},
+		autoscroll: Boolean,
+		autosetTitle: {
+			type: Boolean,
+			default: true
+		},
+		// #ifndef H5 || APP-PLUS-NVUE || MP-360
+		compress: Number,
+		loadingImg: String,
+		useCache: Boolean,
+		// #endif
+		domain: String,
+		lazyLoad: Boolean,
+		selectable: Boolean,
+		tagStyle: Object,
+		showWithAnimation: Boolean,
+		useAnchor: Boolean
+	},
+	watch: {
+		html(html) {
+			this.setContent(html);
+		}
+	},
+	created() {
+		// 图片数组
+		this.imgList = [];
+		this.imgList.each = function(f) {
+			for (var i = 0, len = this.length; i < len; i++) this.setItem(i, f(this[i], i, this));
+		};
+		this.imgList.setItem = function(i, src) {
+			if (i == void 0 || !src) return;
+			// #ifndef MP-ALIPAY || APP-PLUS
+			// 去重
+			if (src.indexOf('http') == 0 && this.includes(src)) {
+				var newSrc = src.split('://')[0];
+				for (var j = newSrc.length, c; (c = src[j]); j++) {
+					if (c == '/' && src[j - 1] != '/' && src[j + 1] != '/') break;
+					newSrc += Math.random() > 0.5 ? c.toUpperCase() : c;
+				}
+				newSrc += src.substr(j);
+				return (this[i] = newSrc);
+			}
+			// #endif
+			this[i] = src;
+			// 暂存 data src
+			if (src.includes('data:image')) {
+				var filePath,
+					info = src.match(/data:image\/(\S+?);(\S+?),(.+)/);
+				if (!info) return;
+				// #ifdef MP-WEIXIN || MP-TOUTIAO
+				filePath = `${wx.env.USER_DATA_PATH}/${Date.now()}.${info[1]}`;
+				fs &&
+					fs.writeFile({
+						filePath,
+						data: info[3],
+						encoding: info[2],
+						success: () => (this[i] = filePath)
+					});
+				// #endif
+				// #ifdef APP-PLUS
+				filePath = `_doc/parser_tmp/${Date.now()}.${info[1]}`;
+				var bitmap = new plus.nativeObj.Bitmap();
+				bitmap.loadBase64Data(src, () => {
+					bitmap.save(filePath, {}, () => {
+						bitmap.clear();
+						this[i] = filePath;
+					});
+				});
+				// #endif
+			}
+		};
+	},
+	mounted() {
+		// #ifdef H5 || MP-360
+		this.document = document.getElementById('rtf' + this._uid);
+		// #endif
+		// #ifndef H5 || APP-PLUS-NVUE || MP-360
+		if (dom) this.document = new dom(this);
+		// #endif
+		// #ifdef APP-PLUS-NVUE
+		this.document = this.$refs.web;
+		setTimeout(() => {
+			// #endif
+			if (this.html) this.setContent(this.html);
+			// #ifdef APP-PLUS-NVUE
+		}, 30);
+		// #endif
+	},
+	beforeDestroy() {
+		// #ifdef H5 || MP-360
+		if (this._observer) this._observer.disconnect();
+		// #endif
+		this.imgList.each(src => {
+			// #ifdef APP-PLUS
+			if (src && src.includes('_doc')) {
+				plus.io.resolveLocalFileSystemURL(src, entry => {
+					entry.remove();
+				});
+			}
+			// #endif
+			// #ifdef MP-WEIXIN || MP-TOUTIAO
+			if (src && src.includes(uni.env.USER_DATA_PATH))
+				fs &&
+					fs.unlink({
+						filePath: src
+					});
+			// #endif
+		});
+		clearInterval(this._timer);
+	},
+	methods: {
+		// 设置富文本内容
+		setContent(html, append) {
+			// #ifdef APP-PLUS-NVUE
+			if (!html) return (this.height = 1);
+			if (append)
+				this.$refs.web.evalJs("var b=document.createElement('div');b.innerHTML='" + html.replace(/'/g, "\\'") + "';document.getElementById('parser').appendChild(b)");
+			else {
+				html =
+					'<meta charset="utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"><style>html,body{width:100%;height:100%;overflow:hidden}body{margin:0}</style><base href="' +
+					this.domain +
+					'"><div id="parser"' +
+					(this.selectable ? '>' : ' style="user-select:none">') +
+					this._handleHtml(html).replace(/\n/g, '\\n') +
+					'</div><script>"use strict";function e(e){if(window.__dcloud_weex_postMessage||window.__dcloud_weex_){var t={data:[e]};window.__dcloud_weex_postMessage?window.__dcloud_weex_postMessage(t):window.__dcloud_weex_.postMessage(JSON.stringify(t))}}document.body.onclick=function(){e({action:"click"})},' +
+					(this.showWithAnimation ? 'document.body.style.animation="_show .5s",' : '') +
+					'setTimeout(function(){e({action:"load",text:document.body.innerText,height:document.getElementById("parser").scrollHeight})},50);\x3c/script>';
+				this.$refs.web.evalJs("document.write('" + html.replace(/'/g, "\\'") + "');document.close()");
+			}
+			this.$refs.web.evalJs(
+				'var t=document.getElementsByTagName("title");t.length&&e({action:"getTitle",title:t[0].innerText});for(var o,n=document.getElementsByTagName("style"),r=1;o=n[r++];)o.innerHTML=o.innerHTML.replace(/body/g,"#parser");for(var a,c=document.getElementsByTagName("img"),s=[],i=0==c.length,d=0,l=0,g=0;a=c[l];l++)parseInt(a.style.width||a.getAttribute("width"))>' +
+					windowWidth +
+					'&&(a.style.height="auto"),a.onload=function(){++d==c.length&&(i=!0)},a.onerror=function(){++d==c.length&&(i=!0),' +
+					(cfg.errorImg ? 'this.src="' + cfg.errorImg + '",' : '') +
+					'e({action:"error",source:"img",target:this})},a.hasAttribute("ignore")||"A"==a.parentElement.nodeName||(a.i=g++,s.push(a.src),a.onclick=function(){e({action:"preview",img:{i:this.i,src:this.src}})});e({action:"getImgList",imgList:s});for(var u,m=document.getElementsByTagName("a"),f=0;u=m[f];f++)u.onclick=function(){var t,o=this.getAttribute("href");if("#"==o[0]){var n=document.getElementById(o.substr(1));n&&(t=n.offsetTop)}return e({action:"linkpress",href:o,offset:t}),!1};for(var h,y=document.getElementsByTagName("video"),v=0;h=y[v];v++)h.style.maxWidth="100%",h.onerror=function(){e({action:"error",source:"video",target:this})}' +
+					(this.autopause ? ',h.onplay=function(){for(var e,t=0;e=y[t];t++)e!=this&&e.pause()}' : '') +
+					';for(var _,p=document.getElementsByTagName("audio"),w=0;_=p[w];w++)_.onerror=function(){e({action:"error",source:"audio",target:this})};' +
+					(this.autoscroll
+						? 'for(var T,E=document.getElementsByTagName("table"),B=0;T=E[B];B++){var N=document.createElement("div");N.style.overflow="scroll",T.parentNode.replaceChild(N,T),N.appendChild(T)}'
+						: '') +
+					'var x=document.getElementById("parser");clearInterval(window.timer),window.timer=setInterval(function(){i&&clearInterval(window.timer),e({action:"ready",ready:i,height:x.scrollHeight})},350)'
+			);
+			this.nodes = [1];
+			// #endif
+			// #ifdef H5 || MP-360
+			if (!html) {
+				if (this.rtf && !append) this.rtf.parentNode.removeChild(this.rtf);
+				return;
+			}
+			var div = document.createElement('div');
+			if (!append) {
+				if (this.rtf) this.rtf.parentNode.removeChild(this.rtf);
+				this.rtf = div;
+			} else {
+				if (!this.rtf) this.rtf = div;
+				else this.rtf.appendChild(div);
+			}
+			div.innerHTML = this._handleHtml(html, append);
+			for (var styles = this.rtf.getElementsByTagName('style'), i = 0, style; (style = styles[i++]); ) {
+				style.innerHTML = style.innerHTML.replace(/body/g, '#rtf' + this._uid);
+				style.setAttribute('scoped', 'true');
+			}
+			// 懒加载
+			if (!this._observer && this.lazyLoad && IntersectionObserver) {
+				this._observer = new IntersectionObserver(
+					changes => {
+						for (let item, i = 0; (item = changes[i++]); ) {
+							if (item.isIntersecting) {
+								item.target.src = item.target.getAttribute('data-src');
+								item.target.removeAttribute('data-src');
+								this._observer.unobserve(item.target);
+							}
+						}
+					},
+					{
+						rootMargin: '500px 0px 500px 0px'
+					}
+				);
+			}
+			var _ts = this;
+			// 获取标题
+			var title = this.rtf.getElementsByTagName('title');
+			if (title.length && this.autosetTitle)
+				uni.setNavigationBarTitle({
+					title: title[0].innerText
+				});
+			// 图片处理
+			this.imgList.length = 0;
+			var imgs = this.rtf.getElementsByTagName('img');
+			for (let i = 0, j = 0, img; (img = imgs[i]); i++) {
+				if (parseInt(img.style.width || img.getAttribute('width')) > windowWidth) img.style.height = 'auto';
+				var src = img.getAttribute('src');
+				if (this.domain && src) {
+					if (src[0] == '/') {
+						if (src[1] == '/') img.src = (this.domain.includes('://') ? this.domain.split('://')[0] : '') + ':' + src;
+						else img.src = this.domain + src;
+					} else if (!src.includes('://')) img.src = this.domain + '/' + src;
+				}
+				if (!img.hasAttribute('ignore') && img.parentElement.nodeName != 'A') {
+					img.i = j++;
+					_ts.imgList.push(img.src || img.getAttribute('data-src'));
+					img.onclick = function() {
+						var preview = true;
+						this.ignore = () => (preview = false);
+						_ts.$emit('imgtap', this);
+						if (preview) {
+							uni.previewImage({
+								current: this.i,
+								urls: _ts.imgList
+							});
+						}
+					};
+				}
+				img.onerror = function() {
+					if (cfg.errorImg) _ts.imgList[this.i] = this.src = cfg.errorImg;
+					_ts.$emit('error', {
+						source: 'img',
+						target: this
+					});
+				};
+				if (_ts.lazyLoad && this._observer && img.src && img.i != 0) {
+					img.setAttribute('data-src', img.src);
+					img.removeAttribute('src');
+					this._observer.observe(img);
+				}
+			}
+			// 链接处理
+			var links = this.rtf.getElementsByTagName('a');
+			for (var link of links) {
+				link.onclick = function() {
+					var jump = true,
+						href = this.getAttribute('href');
+					_ts.$emit('linkpress', {
+						href,
+						ignore: () => (jump = false)
+					});
+					if (jump && href) {
+						if (href[0] == '#') {
+							if (_ts.useAnchor) {
+								_ts.navigateTo({
+									id: href.substr(1)
+								});
+							}
+						} else if (href.indexOf('http') == 0 || href.indexOf('//') == 0) return true;
+						else
+							uni.navigateTo({
+								url: href
+							});
+					}
+					return false;
+				};
+			}
+			// 视频处理
+			var videos = this.rtf.getElementsByTagName('video');
+			_ts.videoContexts = videos;
+			for (let video, i = 0; (video = videos[i++]); ) {
+				video.style.maxWidth = '100%';
+				video.onerror = function() {
+					_ts.$emit('error', {
+						source: 'video',
+						target: this
+					});
+				};
+				video.onplay = function() {
+					if (_ts.autopause) for (let item, i = 0; (item = _ts.videoContexts[i++]); ) if (item != this) item.pause();
+				};
+			}
+			// 音频处理
+			var audios = this.rtf.getElementsByTagName('audio');
+			for (var audio of audios)
+				audio.onerror = function() {
+					_ts.$emit('error', {
+						source: 'audio',
+						target: this
+					});
+				};
+			// 表格处理
+			if (this.autoscroll) {
+				var tables = this.rtf.getElementsByTagName('table');
+				for (var table of tables) {
+					let div = document.createElement('div');
+					div.style.overflow = 'scroll';
+					table.parentNode.replaceChild(div, table);
+					div.appendChild(table);
+				}
+			}
+			if (!append) this.document.appendChild(this.rtf);
+			this.$nextTick(() => {
+				this.nodes = [1];
+				this.$emit('load');
+			});
+			setTimeout(() => (this.showAm = ''), 500);
+			// #endif
+			// #ifndef APP-PLUS-NVUE
+			// #ifndef H5 || MP-360
+			var nodes;
+			if (!html) return (this.nodes = []);
+			var parser = new Parser(html, this);
+			// 缓存读取
+			if (this.useCache) {
+				var hashVal = hash(html);
+				if (cache[hashVal]) nodes = cache[hashVal];
+				else {
+					nodes = parser.parse();
+					cache[hashVal] = nodes;
+				}
+			} else nodes = parser.parse();
+			this.$emit('parse', nodes);
+			if (append) this.nodes = this.nodes.concat(nodes);
+			else this.nodes = nodes;
+			if (nodes.length && nodes.title && this.autosetTitle)
+				uni.setNavigationBarTitle({
+					title: nodes.title
+				});
+			if (this.imgList) this.imgList.length = 0;
+			this.videoContexts = [];
+			this.$nextTick(() => {
+				(function f(cs) {
+					for (var i = cs.length; i--; ) {
+						if (cs[i].top) {
+							cs[i].controls = [];
+							cs[i].init();
+							f(cs[i].$children);
+						}
+					}
+				})(this.$children);
+				this.$emit('load');
+			});
+			// #endif
+			var height;
+			clearInterval(this._timer);
+			this._timer = setInterval(() => {
+				// #ifdef H5 || MP-360
+				this.rect = this.rtf.getBoundingClientRect();
+				// #endif
+				// #ifndef H5 || MP-360
+				uni.createSelectorQuery()
+					.in(this)
+					.select('#_top')
+					.boundingClientRect()
+					.exec(res => {
+						if (!res) return;
+						this.rect = res[0];
+						// #endif
+						if (this.rect.height == height) {
+							this.$emit('ready', this.rect);
+							clearInterval(this._timer);
+						}
+						height = this.rect.height;
+						// #ifndef H5 || MP-360
+					});
+				// #endif
+			}, 350);
+			if (this.showWithAnimation && !append) this.showAm = 'animation:_show .5s';
+			// #endif
+		},
+		// 获取文本内容
+		getText(ns = this.nodes) {
+			var txt = '';
+			// #ifdef APP-PLUS-NVUE
+			txt = this._text;
+			// #endif
+			// #ifdef H5 || MP-360
+			txt = this.rtf.innerText;
+			// #endif
+			// #ifndef H5 || APP-PLUS-NVUE || MP-360
+			for (var i = 0, n; (n = ns[i++]); ) {
+				if (n.type == 'text')
+					txt += n.text
+						.replace(/&nbsp;/g, '\u00A0')
+						.replace(/&lt;/g, '<')
+						.replace(/&gt;/g, '>')
+						.replace(/&amp;/g, '&');
+				else if (n.type == 'br') txt += '\n';
+				else {
+					// 块级标签前后加换行
+					var block = n.name == 'p' || n.name == 'div' || n.name == 'tr' || n.name == 'li' || (n.name[0] == 'h' && n.name[1] > '0' && n.name[1] < '7');
+					if (block && txt && txt[txt.length - 1] != '\n') txt += '\n';
+					if (n.children) txt += this.getText(n.children);
+					if (block && txt[txt.length - 1] != '\n') txt += '\n';
+					else if (n.name == 'td' || n.name == 'th') txt += '\t';
+				}
+			}
+			// #endif
+			return txt;
+		},
+		// 锚点跳转
+		in(obj) {
+			if (obj.page && obj.selector && obj.scrollTop) this._in = obj;
+		},
+		navigateTo(obj) {
+			if (!this.useAnchor) return obj.fail && obj.fail('Anchor is disabled');
+			// #ifdef APP-PLUS-NVUE
+			if (!obj.id) weexDom.scrollToElement(this.$refs.web);
+			else
+				this.$refs.web.evalJs(
+					'var pos=document.getElementById("' + obj.id + '");if(pos)post({action:"linkpress",href:"#",offset:pos.offsetTop+' + (obj.offset || 0) + '})'
+				);
+			obj.success && obj.success();
+			// #endif
+			// #ifndef APP-PLUS-NVUE
+			var d = ' ';
+			// #ifdef MP-WEIXIN || MP-QQ || MP-TOUTIAO
+			d = '>>>';
+			// #endif
+			var selector = uni
+				.createSelectorQuery()
+				.in(this._in ? this._in.page : this)
+				.select((this._in ? this._in.selector : '#_top') + (obj.id ? `${d}#${obj.id},${this._in ? this._in.selector : '#_top'}${d}.${obj.id}` : ''))
+				.boundingClientRect();
+			if (this._in)
+				selector
+					.select(this._in.selector)
+					.scrollOffset()
+					.select(this._in.selector)
+					.boundingClientRect();
+			else selector.selectViewport().scrollOffset();
+			selector.exec(res => {
+				if (!res[0]) return obj.fail && obj.fail('Label not found');
+				var scrollTop = res[1].scrollTop + res[0].top - (res[2] ? res[2].top : 0) + (obj.offset || 0);
+				if (this._in) this._in.page[this._in.scrollTop] = scrollTop;
+				else
+					uni.pageScrollTo({
+						scrollTop,
+						duration: 300
+					});
+				obj.success && obj.success();
+			});
+			// #endif
+		},
+		// 获取视频对象
+		getVideoContext(id) {
+			// #ifndef APP-PLUS-NVUE
+			if (!id) return this.videoContexts;
+			else for (var i = this.videoContexts.length; i--; ) if (this.videoContexts[i].id == id) return this.videoContexts[i];
+			// #endif
+		},
+		// #ifdef H5 || APP-PLUS-NVUE || MP-360
+		_handleHtml(html, append) {
+			if (!append) {
+				// 处理 tag-style 和 userAgentStyles
+				var style = '<style>@keyframes _show{0%{opacity:0}100%{opacity:1}}img{max-width:100%}';
+				for (var item in cfg.userAgentStyles) style += `${item}{${cfg.userAgentStyles[item]}}`;
+				for (item in this.tagStyle) style += `${item}{${this.tagStyle[item]}}`;
+				style += '</style>';
+				html = style + html;
+			}
+			// 处理 rpx
+			if (html.includes('rpx')) html = html.replace(/[0-9.]+\s*rpx/g, $ => (parseFloat($) * windowWidth) / 750 + 'px');
+			return html;
+		},
+		// #endif
+		// #ifdef APP-PLUS-NVUE
+		_message(e) {
+			// 接收 web-view 消息
+			var d = e.detail.data[0];
+			switch (d.action) {
+				case 'load':
+					this.$emit('load');
+					this.height = d.height;
+					this._text = d.text;
+					break;
+				case 'getTitle':
+					if (this.autosetTitle)
+						uni.setNavigationBarTitle({
+							title: d.title
+						});
+					break;
+				case 'getImgList':
+					this.imgList.length = 0;
+					for (var i = d.imgList.length; i--; ) this.imgList.setItem(i, d.imgList[i]);
+					break;
+				case 'preview':
+					var preview = true;
+					d.img.ignore = () => (preview = false);
+					this.$emit('imgtap', d.img);
+					if (preview)
+						uni.previewImage({
+							current: d.img.i,
+							urls: this.imgList
+						});
+					break;
+				case 'linkpress':
+					var jump = true,
+						href = d.href;
+					this.$emit('linkpress', {
+						href,
+						ignore: () => (jump = false)
+					});
+					if (jump && href) {
+						if (href[0] == '#') {
+							if (this.useAnchor)
+								weexDom.scrollToElement(this.$refs.web, {
+									offset: d.offset
+								});
+						} else if (href.includes('://')) plus.runtime.openWeb(href);
+						else
+							uni.navigateTo({
+								url: href
+							});
+					}
+					break;
+				case 'error':
+					if (d.source == 'img' && cfg.errorImg) this.imgList.setItem(d.target.i, cfg.errorImg);
+					this.$emit('error', {
+						source: d.source,
+						target: d.target
+					});
+					break;
+				case 'ready':
+					this.height = d.height;
+					if (d.ready)
+						uni.createSelectorQuery()
+							.in(this)
+							.select('#_top')
+							.boundingClientRect()
+							.exec(res => {
+								this.rect = res[0];
+								this.$emit('ready', res[0]);
+							});
+					break;
+				case 'click':
+					this.$emit('click');
+					this.$emit('tap');
+			}
+		}
+		// #endif
+	}
+};
+</script>
+
+<style>
+	@keyframes _show {
+		0% {
+			opacity: 0;
+		}
+
+		100% {
+			opacity: 1;
+		}
+	}
+
+	/* #ifdef MP-WEIXIN */
+	:host {
+		display: block;
+		overflow: scroll;
+		-webkit-overflow-scrolling: touch;
+	}
+
+	/* #endif */
+=======
+</style>

+ 196 - 0
components/jyf-parser/libs/CssHandler.js

@@ -0,0 +1,196 @@
+<<<<<<< HEAD
+const cfg = require('./config.js'),
+	isLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
+
+function CssHandler(tagStyle) {
+	var styles = Object.assign(Object.create(null), cfg.userAgentStyles);
+	for (var item in tagStyle)
+		styles[item] = (styles[item] ? styles[item] + ';' : '') + tagStyle[item];
+	this.styles = styles;
+}
+CssHandler.prototype.getStyle = function(data) {
+	this.styles = new parser(data, this.styles).parse();
+}
+CssHandler.prototype.match = function(name, attrs) {
+	var tmp, matched = (tmp = this.styles[name]) ? tmp + ';' : '';
+	if (attrs.class) {
+		var items = attrs.class.split(' ');
+		for (var i = 0, item; item = items[i]; i++)
+			if (tmp = this.styles['.' + item])
+				matched += tmp + ';';
+	}
+	if (tmp = this.styles['#' + attrs.id])
+		matched += tmp + ';';
+	return matched;
+}
+module.exports = CssHandler;
+
+function parser(data, init) {
+	this.data = data;
+	this.floor = 0;
+	this.i = 0;
+	this.list = [];
+	this.res = init;
+	this.state = this.Space;
+}
+parser.prototype.parse = function() {
+	for (var c; c = this.data[this.i]; this.i++)
+		this.state(c);
+	return this.res;
+}
+parser.prototype.section = function() {
+	return this.data.substring(this.start, this.i);
+}
+// 状态机
+parser.prototype.Space = function(c) {
+	if (c == '.' || c == '#' || isLetter(c)) {
+		this.start = this.i;
+		this.state = this.Name;
+	} else if (c == '/' && this.data[this.i + 1] == '*')
+		this.Comment();
+	else if (!cfg.blankChar[c] && c != ';')
+		this.state = this.Ignore;
+}
+parser.prototype.Comment = function() {
+	this.i = this.data.indexOf('*/', this.i) + 1;
+	if (!this.i) this.i = this.data.length;
+	this.state = this.Space;
+}
+parser.prototype.Ignore = function(c) {
+	if (c == '{') this.floor++;
+	else if (c == '}' && !--this.floor) this.state = this.Space;
+}
+parser.prototype.Name = function(c) {
+	if (cfg.blankChar[c]) {
+		this.list.push(this.section());
+		this.state = this.NameSpace;
+	} else if (c == '{') {
+		this.list.push(this.section());
+		this.Content();
+	} else if (c == ',') {
+		this.list.push(this.section());
+		this.Comma();
+	} else if (!isLetter(c) && (c < '0' || c > '9') && c != '-' && c != '_')
+		this.state = this.Ignore;
+}
+parser.prototype.NameSpace = function(c) {
+	if (c == '{') this.Content();
+	else if (c == ',') this.Comma();
+	else if (!cfg.blankChar[c]) this.state = this.Ignore;
+}
+parser.prototype.Comma = function() {
+	while (cfg.blankChar[this.data[++this.i]]);
+	if (this.data[this.i] == '{') this.Content();
+	else {
+		this.start = this.i--;
+		this.state = this.Name;
+	}
+}
+parser.prototype.Content = function() {
+	this.start = ++this.i;
+	if ((this.i = this.data.indexOf('}', this.i)) == -1) this.i = this.data.length;
+	var content = this.section();
+	for (var i = 0, item; item = this.list[i++];)
+		if (this.res[item]) this.res[item] += ';' + content;
+		else this.res[item] = content;
+	this.list = [];
+	this.state = this.Space;
+=======
+const cfg = require('./config.js'),
+	isLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
+
+function CssHandler(tagStyle) {
+	var styles = Object.assign(Object.create(null), cfg.userAgentStyles);
+	for (var item in tagStyle)
+		styles[item] = (styles[item] ? styles[item] + ';' : '') + tagStyle[item];
+	this.styles = styles;
+}
+CssHandler.prototype.getStyle = function(data) {
+	this.styles = new parser(data, this.styles).parse();
+}
+CssHandler.prototype.match = function(name, attrs) {
+	var tmp, matched = (tmp = this.styles[name]) ? tmp + ';' : '';
+	if (attrs.class) {
+		var items = attrs.class.split(' ');
+		for (var i = 0, item; item = items[i]; i++)
+			if (tmp = this.styles['.' + item])
+				matched += tmp + ';';
+	}
+	if (tmp = this.styles['#' + attrs.id])
+		matched += tmp + ';';
+	return matched;
+}
+module.exports = CssHandler;
+
+function parser(data, init) {
+	this.data = data;
+	this.floor = 0;
+	this.i = 0;
+	this.list = [];
+	this.res = init;
+	this.state = this.Space;
+}
+parser.prototype.parse = function() {
+	for (var c; c = this.data[this.i]; this.i++)
+		this.state(c);
+	return this.res;
+}
+parser.prototype.section = function() {
+	return this.data.substring(this.start, this.i);
+}
+// 状态机
+parser.prototype.Space = function(c) {
+	if (c == '.' || c == '#' || isLetter(c)) {
+		this.start = this.i;
+		this.state = this.Name;
+	} else if (c == '/' && this.data[this.i + 1] == '*')
+		this.Comment();
+	else if (!cfg.blankChar[c] && c != ';')
+		this.state = this.Ignore;
+}
+parser.prototype.Comment = function() {
+	this.i = this.data.indexOf('*/', this.i) + 1;
+	if (!this.i) this.i = this.data.length;
+	this.state = this.Space;
+}
+parser.prototype.Ignore = function(c) {
+	if (c == '{') this.floor++;
+	else if (c == '}' && !--this.floor) this.state = this.Space;
+}
+parser.prototype.Name = function(c) {
+	if (cfg.blankChar[c]) {
+		this.list.push(this.section());
+		this.state = this.NameSpace;
+	} else if (c == '{') {
+		this.list.push(this.section());
+		this.Content();
+	} else if (c == ',') {
+		this.list.push(this.section());
+		this.Comma();
+	} else if (!isLetter(c) && (c < '0' || c > '9') && c != '-' && c != '_')
+		this.state = this.Ignore;
+}
+parser.prototype.NameSpace = function(c) {
+	if (c == '{') this.Content();
+	else if (c == ',') this.Comma();
+	else if (!cfg.blankChar[c]) this.state = this.Ignore;
+}
+parser.prototype.Comma = function() {
+	while (cfg.blankChar[this.data[++this.i]]);
+	if (this.data[this.i] == '{') this.Content();
+	else {
+		this.start = this.i--;
+		this.state = this.Name;
+	}
+}
+parser.prototype.Content = function() {
+	this.start = ++this.i;
+	if ((this.i = this.data.indexOf('}', this.i)) == -1) this.i = this.data.length;
+	var content = this.section();
+	for (var i = 0, item; item = this.list[i++];)
+		if (this.res[item]) this.res[item] += ';' + content;
+		else this.res[item] = content;
+	this.list = [];
+	this.state = this.Space;
+>>>>>>> 5b465a14bac2c1448cc18a0b08b88844fc895cd5
+}

+ 1072 - 0
components/jyf-parser/libs/MpHtmlParser.js

@@ -0,0 +1,1072 @@
+<<<<<<< HEAD
+/**
+ * html 解析器
+ * @tutorial https://github.com/jin-yufeng/Parser
+ * @version 20200728
+ * @author JinYufeng
+ * @listens MIT
+ */
+const cfg = require('./config.js'),
+	blankChar = cfg.blankChar,
+	CssHandler = require('./CssHandler.js'),
+	windowWidth = uni.getSystemInfoSync().windowWidth;
+var emoji;
+
+function MpHtmlParser(data, options = {}) {
+	this.attrs = {};
+	this.CssHandler = new CssHandler(options.tagStyle, windowWidth);
+	this.data = data;
+	this.domain = options.domain;
+	this.DOM = [];
+	this.i = this.start = this.audioNum = this.imgNum = this.videoNum = 0;
+	options.prot = (this.domain || '').includes('://') ? this.domain.split('://')[0] : 'http';
+	this.options = options;
+	this.state = this.Text;
+	this.STACK = [];
+	// 工具函数
+	this.bubble = () => {
+		for (var i = this.STACK.length, item; item = this.STACK[--i];) {
+			if (cfg.richOnlyTags[item.name]) {
+				if (item.name == 'table' && !Object.hasOwnProperty.call(item, 'c')) item.c = 1;
+				return false;
+			}
+			item.c = 1;
+		}
+		return true;
+	}
+	this.decode = (val, amp) => {
+		var i = -1,
+			j, en;
+		while (1) {
+			if ((i = val.indexOf('&', i + 1)) == -1) break;
+			if ((j = val.indexOf(';', i + 2)) == -1) break;
+			if (val[i + 1] == '#') {
+				en = parseInt((val[i + 2] == 'x' ? '0' : '') + val.substring(i + 2, j));
+				if (!isNaN(en)) val = val.substr(0, i) + String.fromCharCode(en) + val.substr(j + 1);
+			} else {
+				en = val.substring(i + 1, j);
+				if (cfg.entities[en] || en == amp)
+					val = val.substr(0, i) + (cfg.entities[en] || '&') + val.substr(j + 1);
+			}
+		}
+		return val;
+	}
+	this.getUrl = url => {
+		if (url[0] == '/') {
+			if (url[1] == '/') url = this.options.prot + ':' + url;
+			else if (this.domain) url = this.domain + url;
+		} else if (this.domain && url.indexOf('data:') != 0 && !url.includes('://'))
+			url = this.domain + '/' + url;
+		return url;
+	}
+	this.isClose = () => this.data[this.i] == '>' || (this.data[this.i] == '/' && this.data[this.i + 1] == '>');
+	this.section = () => this.data.substring(this.start, this.i);
+	this.parent = () => this.STACK[this.STACK.length - 1];
+	this.siblings = () => this.STACK.length ? this.parent().children : this.DOM;
+}
+MpHtmlParser.prototype.parse = function() {
+	if (emoji) this.data = emoji.parseEmoji(this.data);
+	for (var c; c = this.data[this.i]; this.i++)
+		this.state(c);
+	if (this.state == this.Text) this.setText();
+	while (this.STACK.length) this.popNode(this.STACK.pop());
+	return this.DOM;
+}
+// 设置属性
+MpHtmlParser.prototype.setAttr = function() {
+	var name = this.attrName.toLowerCase(),
+		val = this.attrVal;
+	if (cfg.boolAttrs[name]) this.attrs[name] = 'T';
+	else if (val) {
+		if (name == 'src' || (name == 'data-src' && !this.attrs.src)) this.attrs.src = this.getUrl(this.decode(val, 'amp'));
+		else if (name == 'href' || name == 'style') this.attrs[name] = this.decode(val, 'amp');
+		else if (name.substr(0, 5) != 'data-') this.attrs[name] = val;
+	}
+	this.attrVal = '';
+	while (blankChar[this.data[this.i]]) this.i++;
+	if (this.isClose()) this.setNode();
+	else {
+		this.start = this.i;
+		this.state = this.AttrName;
+	}
+}
+// 设置文本节点
+MpHtmlParser.prototype.setText = function() {
+	var back, text = this.section();
+	if (!text) return;
+	text = (cfg.onText && cfg.onText(text, () => back = true)) || text;
+	if (back) {
+		this.data = this.data.substr(0, this.start) + text + this.data.substr(this.i);
+		let j = this.start + text.length;
+		for (this.i = this.start; this.i < j; this.i++) this.state(this.data[this.i]);
+		return;
+	}
+	if (!this.pre) {
+		// 合并空白符
+		var flag, tmp = [];
+		for (let i = text.length, c; c = text[--i];)
+			if (!blankChar[c]) {
+				tmp.unshift(c);
+				if (!flag) flag = 1;
+			} else {
+				if (tmp[0] != ' ') tmp.unshift(' ');
+				if (c == '\n' && flag == void 0) flag = 0;
+			}
+		if (flag == 0) return;
+		text = tmp.join('');
+	}
+	this.siblings().push({
+		type: 'text',
+		text: this.decode(text)
+	});
+}
+// 设置元素节点
+MpHtmlParser.prototype.setNode = function() {
+	var node = {
+			name: this.tagName.toLowerCase(),
+			attrs: this.attrs
+		},
+		close = cfg.selfClosingTags[node.name];
+	if (this.options.nodes.length) node.type = 'node';
+	this.attrs = {};
+	if (!cfg.ignoreTags[node.name]) {
+		// 处理属性
+		var attrs = node.attrs,
+			style = this.CssHandler.match(node.name, attrs, node) + (attrs.style || ''),
+			styleObj = {};
+		if (attrs.id) {
+			if (this.options.compress & 1) attrs.id = void 0;
+			else if (this.options.useAnchor) this.bubble();
+		}
+		if ((this.options.compress & 2) && attrs.class) attrs.class = void 0;
+		switch (node.name) {
+			case 'a':
+			case 'ad': // #ifdef APP-PLUS
+			case 'iframe':
+				// #endif
+				this.bubble();
+				break;
+			case 'font':
+				if (attrs.color) {
+					styleObj['color'] = attrs.color;
+					attrs.color = void 0;
+				}
+				if (attrs.face) {
+					styleObj['font-family'] = attrs.face;
+					attrs.face = void 0;
+				}
+				if (attrs.size) {
+					var size = parseInt(attrs.size);
+					if (size < 1) size = 1;
+					else if (size > 7) size = 7;
+					var map = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'];
+					styleObj['font-size'] = map[size - 1];
+					attrs.size = void 0;
+				}
+				break;
+			case 'embed':
+				// #ifndef APP-PLUS
+				var src = node.attrs.src || '',
+					type = node.attrs.type || '';
+				if (type.includes('video') || src.includes('.mp4') || src.includes('.3gp') || src.includes('.m3u8'))
+					node.name = 'video';
+				else if (type.includes('audio') || src.includes('.m4a') || src.includes('.wav') || src.includes('.mp3') || src.includes(
+						'.aac'))
+					node.name = 'audio';
+				else break;
+				if (node.attrs.autostart)
+					node.attrs.autoplay = 'T';
+				node.attrs.controls = 'T';
+				// #endif
+				// #ifdef APP-PLUS
+				this.bubble();
+				break;
+				// #endif
+			case 'video':
+			case 'audio':
+				if (!attrs.id) attrs.id = node.name + (++this[`${node.name}Num`]);
+				else this[`${node.name}Num`]++;
+				if (node.name == 'video') {
+					if (this.videoNum > 3)
+						node.lazyLoad = 1;
+					if (attrs.width) {
+						styleObj.width = parseFloat(attrs.width) + (attrs.width.includes('%') ? '%' : 'px');
+						attrs.width = void 0;
+					}
+					if (attrs.height) {
+						styleObj.height = parseFloat(attrs.height) + (attrs.height.includes('%') ? '%' : 'px');
+						attrs.height = void 0;
+					}
+				}
+				if (!attrs.controls && !attrs.autoplay) attrs.controls = 'T';
+				attrs.source = [];
+				if (attrs.src) {
+					attrs.source.push(attrs.src);
+					attrs.src = void 0;
+				}
+				this.bubble();
+				break;
+			case 'td':
+			case 'th':
+				if (attrs.colspan || attrs.rowspan)
+					for (var k = this.STACK.length, item; item = this.STACK[--k];)
+						if (item.name == 'table') {
+							item.c = void 0;
+							break;
+						}
+		}
+		if (attrs.align) {
+			styleObj['text-align'] = attrs.align;
+			attrs.align = void 0;
+		}
+		// 压缩 style
+		var styles = style.split(';');
+		style = '';
+		for (var i = 0, len = styles.length; i < len; i++) {
+			var info = styles[i].split(':');
+			if (info.length < 2) continue;
+			let key = info[0].trim().toLowerCase(),
+				value = info.slice(1).join(':').trim();
+			if (value[0] == '-' || value.includes('safe'))
+				style += `;${key}:${value}`;
+			else if (!styleObj[key] || value.includes('import') || !styleObj[key].includes('import'))
+				styleObj[key] = value;
+		}
+		if (node.name == 'img') {
+			if (attrs.src && !attrs.ignore) {
+				if (this.bubble())
+					attrs.i = (this.imgNum++).toString();
+				else attrs.ignore = 'T';
+			}
+			if (attrs.ignore) {
+				style += ';-webkit-touch-callout:none';
+				styleObj['max-width'] = '100%';
+			}
+			var width;
+			if (styleObj.width) width = styleObj.width;
+			else if (attrs.width) width = attrs.width.includes('%') ? attrs.width : attrs.width + 'px';
+			if (width) {
+				styleObj.width = width;
+				attrs.width = '100%';
+				if (parseInt(width) > windowWidth) {
+					styleObj.height = '';
+					if (attrs.height) attrs.height = void 0;
+				}
+			}
+			if (styleObj.height) {
+				attrs.height = styleObj.height;
+				styleObj.height = '';
+			} else if (attrs.height && !attrs.height.includes('%'))
+				attrs.height += 'px';
+		}
+		for (var key in styleObj) {
+			var value = styleObj[key];
+			if (!value) continue;
+			if (key.includes('flex') || key == 'order' || key == 'self-align') node.c = 1;
+			// 填充链接
+			if (value.includes('url')) {
+				var j = value.indexOf('(');
+				if (j++ != -1) {
+					while (value[j] == '"' || value[j] == "'" || blankChar[value[j]]) j++;
+					value = value.substr(0, j) + this.getUrl(value.substr(j));
+				}
+			}
+			// 转换 rpx
+			else if (value.includes('rpx'))
+				value = value.replace(/[0-9.]+\s*rpx/g, $ => parseFloat($) * windowWidth / 750 + 'px');
+			else if (key == 'white-space' && value.includes('pre') && !close)
+				this.pre = node.pre = true;
+			style += `;${key}:${value}`;
+		}
+		style = style.substr(1);
+		if (style) attrs.style = style;
+		if (!close) {
+			node.children = [];
+			if (node.name == 'pre' && cfg.highlight) {
+				this.remove(node);
+				this.pre = node.pre = true;
+			}
+			this.siblings().push(node);
+			this.STACK.push(node);
+		} else if (!cfg.filter || cfg.filter(node, this) != false)
+			this.siblings().push(node);
+	} else {
+		if (!close) this.remove(node);
+		else if (node.name == 'source') {
+			var parent = this.parent();
+			if (parent && (parent.name == 'video' || parent.name == 'audio') && node.attrs.src)
+				parent.attrs.source.push(node.attrs.src);
+		} else if (node.name == 'base' && !this.domain) this.domain = node.attrs.href;
+	}
+	if (this.data[this.i] == '/') this.i++;
+	this.start = this.i + 1;
+	this.state = this.Text;
+}
+// 移除标签
+MpHtmlParser.prototype.remove = function(node) {
+	var name = node.name,
+		j = this.i;
+	// 处理 svg
+	var handleSvg = () => {
+		var src = this.data.substring(j, this.i + 1);
+		if (!node.attrs.xmlns) src = ' xmlns="http://www.w3.org/2000/svg"' + src;
+		var i = j;
+		while (this.data[j] != '<') j--;
+		src = this.data.substring(j, i).replace("viewbox", "viewBox") + src;
+		var parent = this.parent();
+		if (node.attrs.width == '100%' && parent && (parent.attrs.style || '').includes('inline'))
+			parent.attrs.style = 'width:300px;max-width:100%;' + parent.attrs.style;
+		this.siblings().push({
+			name: 'img',
+			attrs: {
+				src: 'data:image/svg+xml;utf8,' + src.replace(/#/g, '%23'),
+				style: (/vertical[^;]+/.exec(node.attrs.style) || []).shift(),
+				ignore: 'T'
+			}
+		})
+	}
+	if (node.name == 'svg' && this.data[j] == '/') return handleSvg(this.i++);
+	while (1) {
+		if ((this.i = this.data.indexOf('</', this.i + 1)) == -1) {
+			if (name == 'pre' || name == 'svg') this.i = j;
+			else this.i = this.data.length;
+			return;
+		}
+		this.start = (this.i += 2);
+		while (!blankChar[this.data[this.i]] && !this.isClose()) this.i++;
+		if (this.section().toLowerCase() == name) {
+			// 代码块高亮
+			if (name == 'pre') {
+				this.data = this.data.substr(0, j + 1) + cfg.highlight(this.data.substring(j + 1, this.i - 5), node.attrs) + this.data
+					.substr(this.i - 5);
+				return this.i = j;
+			} else if (name == 'style')
+				this.CssHandler.getStyle(this.data.substring(j + 1, this.i - 7));
+			else if (name == 'title')
+				this.DOM.title = this.data.substring(j + 1, this.i - 7);
+			if ((this.i = this.data.indexOf('>', this.i)) == -1) this.i = this.data.length;
+			if (name == 'svg') handleSvg();
+			return;
+		}
+	}
+}
+// 节点出栈处理
+MpHtmlParser.prototype.popNode = function(node) {
+	// 空白符处理
+	if (node.pre) {
+		node.pre = this.pre = void 0;
+		for (let i = this.STACK.length; i--;)
+			if (this.STACK[i].pre)
+				this.pre = true;
+	}
+	var siblings = this.siblings(),
+		len = siblings.length,
+		childs = node.children;
+	if (node.name == 'head' || (cfg.filter && cfg.filter(node, this) == false))
+		return siblings.pop();
+	var attrs = node.attrs;
+	// 替换一些标签名
+	if (cfg.blockTags[node.name]) node.name = 'div';
+	else if (!cfg.trustTags[node.name]) node.name = 'span';
+	// 处理列表
+	if (node.c && (node.name == 'ul' || node.name == 'ol')) {
+		if ((node.attrs.style || '').includes('list-style:none')) {
+			for (let i = 0, child; child = childs[i++];)
+				if (child.name == 'li')
+					child.name = 'div';
+		} else if (node.name == 'ul') {
+			var floor = 1;
+			for (let i = this.STACK.length; i--;)
+				if (this.STACK[i].name == 'ul') floor++;
+			if (floor != 1)
+				for (let i = childs.length; i--;)
+					childs[i].floor = floor;
+		} else {
+			for (let i = 0, num = 1, child; child = childs[i++];)
+				if (child.name == 'li') {
+					child.type = 'ol';
+					child.num = ((num, type) => {
+						if (type == 'a') return String.fromCharCode(97 + (num - 1) % 26);
+						if (type == 'A') return String.fromCharCode(65 + (num - 1) % 26);
+						if (type == 'i' || type == 'I') {
+							num = (num - 1) % 99 + 1;
+							var one = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'],
+								ten = ['X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'],
+								res = (ten[Math.floor(num / 10) - 1] || '') + (one[num % 10 - 1] || '');
+							if (type == 'i') return res.toLowerCase();
+							return res;
+						}
+						return num;
+					})(num++, attrs.type) + '.';
+				}
+		}
+	}
+	// 处理表格的边框
+	if (node.name == 'table') {
+		var padding = attrs.cellpadding,
+			spacing = attrs.cellspacing,
+			border = attrs.border;
+		if (node.c) {
+			this.bubble();
+			attrs.style = (attrs.style || '') + ';display:table';
+			if (!padding) padding = 2;
+			if (!spacing) spacing = 2;
+		}
+		if (border) attrs.style = `border:${border}px solid gray;${attrs.style || ''}`;
+		if (spacing) attrs.style = `border-spacing:${spacing}px;${attrs.style || ''}`;
+		if (border || padding || node.c)
+			(function f(ns) {
+				for (var i = 0, n; n = ns[i]; i++) {
+					if (n.type == 'text') continue;
+					var style = n.attrs.style || '';
+					if (node.c && n.name[0] == 't') {
+						n.c = 1;
+						style += ';display:table-' + (n.name == 'th' || n.name == 'td' ? 'cell' : (n.name == 'tr' ? 'row' : 'row-group'));
+					}
+					if (n.name == 'th' || n.name == 'td') {
+						if (border) style = `border:${border}px solid gray;${style}`;
+						if (padding) style = `padding:${padding}px;${style}`;
+					} else f(n.children || []);
+					if (style) n.attrs.style = style;
+				}
+			})(childs)
+		if (this.options.autoscroll) {
+			var table = Object.assign({}, node);
+			node.name = 'div';
+			node.attrs = {
+				style: 'overflow:scroll'
+			}
+			node.children = [table];
+		}
+	}
+	this.CssHandler.pop && this.CssHandler.pop(node);
+	// 自动压缩
+	if (node.name == 'div' && !Object.keys(attrs).length && childs.length == 1 && childs[0].name == 'div')
+		siblings[len - 1] = childs[0];
+}
+// 状态机
+MpHtmlParser.prototype.Text = function(c) {
+	if (c == '<') {
+		var next = this.data[this.i + 1],
+			isLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
+		if (isLetter(next)) {
+			this.setText();
+			this.start = this.i + 1;
+			this.state = this.TagName;
+		} else if (next == '/') {
+			this.setText();
+			if (isLetter(this.data[++this.i + 1])) {
+				this.start = this.i + 1;
+				this.state = this.EndTag;
+			} else this.Comment();
+		} else if (next == '!' || next == '?') {
+			this.setText();
+			this.Comment();
+		}
+	}
+}
+MpHtmlParser.prototype.Comment = function() {
+	var key;
+	if (this.data.substring(this.i + 2, this.i + 4) == '--') key = '-->';
+	else if (this.data.substring(this.i + 2, this.i + 9) == '[CDATA[') key = ']]>';
+	else key = '>';
+	if ((this.i = this.data.indexOf(key, this.i + 2)) == -1) this.i = this.data.length;
+	else this.i += key.length - 1;
+	this.start = this.i + 1;
+	this.state = this.Text;
+}
+MpHtmlParser.prototype.TagName = function(c) {
+	if (blankChar[c]) {
+		this.tagName = this.section();
+		while (blankChar[this.data[this.i]]) this.i++;
+		if (this.isClose()) this.setNode();
+		else {
+			this.start = this.i;
+			this.state = this.AttrName;
+		}
+	} else if (this.isClose()) {
+		this.tagName = this.section();
+		this.setNode();
+	}
+}
+MpHtmlParser.prototype.AttrName = function(c) {
+	if (c == '=' || blankChar[c] || this.isClose()) {
+		this.attrName = this.section();
+		if (blankChar[c])
+			while (blankChar[this.data[++this.i]]);
+		if (this.data[this.i] == '=') {
+			while (blankChar[this.data[++this.i]]);
+			this.start = this.i--;
+			this.state = this.AttrValue;
+		} else this.setAttr();
+	}
+}
+MpHtmlParser.prototype.AttrValue = function(c) {
+	if (c == '"' || c == "'") {
+		this.start++;
+		if ((this.i = this.data.indexOf(c, this.i + 1)) == -1) return this.i = this.data.length;
+		this.attrVal = this.section();
+		this.i++;
+	} else {
+		for (; !blankChar[this.data[this.i]] && !this.isClose(); this.i++);
+		this.attrVal = this.section();
+	}
+	this.setAttr();
+}
+MpHtmlParser.prototype.EndTag = function(c) {
+	if (blankChar[c] || c == '>' || c == '/') {
+		var name = this.section().toLowerCase();
+		for (var i = this.STACK.length; i--;)
+			if (this.STACK[i].name == name) break;
+		if (i != -1) {
+			var node;
+			while ((node = this.STACK.pop()).name != name) this.popNode(node);
+			this.popNode(node);
+		} else if (name == 'p' || name == 'br')
+			this.siblings().push({
+				name,
+				attrs: {}
+			});
+		this.i = this.data.indexOf('>', this.i);
+		this.start = this.i + 1;
+		if (this.i == -1) this.i = this.data.length;
+		else this.state = this.Text;
+	}
+}
+=======
+/**
+ * html 解析器
+ * @tutorial https://github.com/jin-yufeng/Parser
+ * @version 20200728
+ * @author JinYufeng
+ * @listens MIT
+ */
+const cfg = require('./config.js'),
+	blankChar = cfg.blankChar,
+	CssHandler = require('./CssHandler.js'),
+	windowWidth = uni.getSystemInfoSync().windowWidth;
+var emoji;
+
+function MpHtmlParser(data, options = {}) {
+	this.attrs = {};
+	this.CssHandler = new CssHandler(options.tagStyle, windowWidth);
+	this.data = data;
+	this.domain = options.domain;
+	this.DOM = [];
+	this.i = this.start = this.audioNum = this.imgNum = this.videoNum = 0;
+	options.prot = (this.domain || '').includes('://') ? this.domain.split('://')[0] : 'http';
+	this.options = options;
+	this.state = this.Text;
+	this.STACK = [];
+	// 工具函数
+	this.bubble = () => {
+		for (var i = this.STACK.length, item; item = this.STACK[--i];) {
+			if (cfg.richOnlyTags[item.name]) {
+				if (item.name == 'table' && !Object.hasOwnProperty.call(item, 'c')) item.c = 1;
+				return false;
+			}
+			item.c = 1;
+		}
+		return true;
+	}
+	this.decode = (val, amp) => {
+		var i = -1,
+			j, en;
+		while (1) {
+			if ((i = val.indexOf('&', i + 1)) == -1) break;
+			if ((j = val.indexOf(';', i + 2)) == -1) break;
+			if (val[i + 1] == '#') {
+				en = parseInt((val[i + 2] == 'x' ? '0' : '') + val.substring(i + 2, j));
+				if (!isNaN(en)) val = val.substr(0, i) + String.fromCharCode(en) + val.substr(j + 1);
+			} else {
+				en = val.substring(i + 1, j);
+				if (cfg.entities[en] || en == amp)
+					val = val.substr(0, i) + (cfg.entities[en] || '&') + val.substr(j + 1);
+			}
+		}
+		return val;
+	}
+	this.getUrl = url => {
+		if (url[0] == '/') {
+			if (url[1] == '/') url = this.options.prot + ':' + url;
+			else if (this.domain) url = this.domain + url;
+		} else if (this.domain && url.indexOf('data:') != 0 && !url.includes('://'))
+			url = this.domain + '/' + url;
+		return url;
+	}
+	this.isClose = () => this.data[this.i] == '>' || (this.data[this.i] == '/' && this.data[this.i + 1] == '>');
+	this.section = () => this.data.substring(this.start, this.i);
+	this.parent = () => this.STACK[this.STACK.length - 1];
+	this.siblings = () => this.STACK.length ? this.parent().children : this.DOM;
+}
+MpHtmlParser.prototype.parse = function() {
+	if (emoji) this.data = emoji.parseEmoji(this.data);
+	for (var c; c = this.data[this.i]; this.i++)
+		this.state(c);
+	if (this.state == this.Text) this.setText();
+	while (this.STACK.length) this.popNode(this.STACK.pop());
+	return this.DOM;
+}
+// 设置属性
+MpHtmlParser.prototype.setAttr = function() {
+	var name = this.attrName.toLowerCase(),
+		val = this.attrVal;
+	if (cfg.boolAttrs[name]) this.attrs[name] = 'T';
+	else if (val) {
+		if (name == 'src' || (name == 'data-src' && !this.attrs.src)) this.attrs.src = this.getUrl(this.decode(val, 'amp'));
+		else if (name == 'href' || name == 'style') this.attrs[name] = this.decode(val, 'amp');
+		else if (name.substr(0, 5) != 'data-') this.attrs[name] = val;
+	}
+	this.attrVal = '';
+	while (blankChar[this.data[this.i]]) this.i++;
+	if (this.isClose()) this.setNode();
+	else {
+		this.start = this.i;
+		this.state = this.AttrName;
+	}
+}
+// 设置文本节点
+MpHtmlParser.prototype.setText = function() {
+	var back, text = this.section();
+	if (!text) return;
+	text = (cfg.onText && cfg.onText(text, () => back = true)) || text;
+	if (back) {
+		this.data = this.data.substr(0, this.start) + text + this.data.substr(this.i);
+		let j = this.start + text.length;
+		for (this.i = this.start; this.i < j; this.i++) this.state(this.data[this.i]);
+		return;
+	}
+	if (!this.pre) {
+		// 合并空白符
+		var flag, tmp = [];
+		for (let i = text.length, c; c = text[--i];)
+			if (!blankChar[c]) {
+				tmp.unshift(c);
+				if (!flag) flag = 1;
+			} else {
+				if (tmp[0] != ' ') tmp.unshift(' ');
+				if (c == '\n' && flag == void 0) flag = 0;
+			}
+		if (flag == 0) return;
+		text = tmp.join('');
+	}
+	this.siblings().push({
+		type: 'text',
+		text: this.decode(text)
+	});
+}
+// 设置元素节点
+MpHtmlParser.prototype.setNode = function() {
+	var node = {
+			name: this.tagName.toLowerCase(),
+			attrs: this.attrs
+		},
+		close = cfg.selfClosingTags[node.name];
+	if (this.options.nodes.length) node.type = 'node';
+	this.attrs = {};
+	if (!cfg.ignoreTags[node.name]) {
+		// 处理属性
+		var attrs = node.attrs,
+			style = this.CssHandler.match(node.name, attrs, node) + (attrs.style || ''),
+			styleObj = {};
+		if (attrs.id) {
+			if (this.options.compress & 1) attrs.id = void 0;
+			else if (this.options.useAnchor) this.bubble();
+		}
+		if ((this.options.compress & 2) && attrs.class) attrs.class = void 0;
+		switch (node.name) {
+			case 'a':
+			case 'ad': // #ifdef APP-PLUS
+			case 'iframe':
+				// #endif
+				this.bubble();
+				break;
+			case 'font':
+				if (attrs.color) {
+					styleObj['color'] = attrs.color;
+					attrs.color = void 0;
+				}
+				if (attrs.face) {
+					styleObj['font-family'] = attrs.face;
+					attrs.face = void 0;
+				}
+				if (attrs.size) {
+					var size = parseInt(attrs.size);
+					if (size < 1) size = 1;
+					else if (size > 7) size = 7;
+					var map = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'];
+					styleObj['font-size'] = map[size - 1];
+					attrs.size = void 0;
+				}
+				break;
+			case 'embed':
+				// #ifndef APP-PLUS
+				var src = node.attrs.src || '',
+					type = node.attrs.type || '';
+				if (type.includes('video') || src.includes('.mp4') || src.includes('.3gp') || src.includes('.m3u8'))
+					node.name = 'video';
+				else if (type.includes('audio') || src.includes('.m4a') || src.includes('.wav') || src.includes('.mp3') || src.includes(
+						'.aac'))
+					node.name = 'audio';
+				else break;
+				if (node.attrs.autostart)
+					node.attrs.autoplay = 'T';
+				node.attrs.controls = 'T';
+				// #endif
+				// #ifdef APP-PLUS
+				this.bubble();
+				break;
+				// #endif
+			case 'video':
+			case 'audio':
+				if (!attrs.id) attrs.id = node.name + (++this[`${node.name}Num`]);
+				else this[`${node.name}Num`]++;
+				if (node.name == 'video') {
+					if (this.videoNum > 3)
+						node.lazyLoad = 1;
+					if (attrs.width) {
+						styleObj.width = parseFloat(attrs.width) + (attrs.width.includes('%') ? '%' : 'px');
+						attrs.width = void 0;
+					}
+					if (attrs.height) {
+						styleObj.height = parseFloat(attrs.height) + (attrs.height.includes('%') ? '%' : 'px');
+						attrs.height = void 0;
+					}
+				}
+				if (!attrs.controls && !attrs.autoplay) attrs.controls = 'T';
+				attrs.source = [];
+				if (attrs.src) {
+					attrs.source.push(attrs.src);
+					attrs.src = void 0;
+				}
+				this.bubble();
+				break;
+			case 'td':
+			case 'th':
+				if (attrs.colspan || attrs.rowspan)
+					for (var k = this.STACK.length, item; item = this.STACK[--k];)
+						if (item.name == 'table') {
+							item.c = void 0;
+							break;
+						}
+		}
+		if (attrs.align) {
+			styleObj['text-align'] = attrs.align;
+			attrs.align = void 0;
+		}
+		// 压缩 style
+		var styles = style.split(';');
+		style = '';
+		for (var i = 0, len = styles.length; i < len; i++) {
+			var info = styles[i].split(':');
+			if (info.length < 2) continue;
+			let key = info[0].trim().toLowerCase(),
+				value = info.slice(1).join(':').trim();
+			if (value[0] == '-' || value.includes('safe'))
+				style += `;${key}:${value}`;
+			else if (!styleObj[key] || value.includes('import') || !styleObj[key].includes('import'))
+				styleObj[key] = value;
+		}
+		if (node.name == 'img') {
+			if (attrs.src && !attrs.ignore) {
+				if (this.bubble())
+					attrs.i = (this.imgNum++).toString();
+				else attrs.ignore = 'T';
+			}
+			if (attrs.ignore) {
+				style += ';-webkit-touch-callout:none';
+				styleObj['max-width'] = '100%';
+			}
+			var width;
+			if (styleObj.width) width = styleObj.width;
+			else if (attrs.width) width = attrs.width.includes('%') ? attrs.width : attrs.width + 'px';
+			if (width) {
+				styleObj.width = width;
+				attrs.width = '100%';
+				if (parseInt(width) > windowWidth) {
+					styleObj.height = '';
+					if (attrs.height) attrs.height = void 0;
+				}
+			}
+			if (styleObj.height) {
+				attrs.height = styleObj.height;
+				styleObj.height = '';
+			} else if (attrs.height && !attrs.height.includes('%'))
+				attrs.height += 'px';
+		}
+		for (var key in styleObj) {
+			var value = styleObj[key];
+			if (!value) continue;
+			if (key.includes('flex') || key == 'order' || key == 'self-align') node.c = 1;
+			// 填充链接
+			if (value.includes('url')) {
+				var j = value.indexOf('(');
+				if (j++ != -1) {
+					while (value[j] == '"' || value[j] == "'" || blankChar[value[j]]) j++;
+					value = value.substr(0, j) + this.getUrl(value.substr(j));
+				}
+			}
+			// 转换 rpx
+			else if (value.includes('rpx'))
+				value = value.replace(/[0-9.]+\s*rpx/g, $ => parseFloat($) * windowWidth / 750 + 'px');
+			else if (key == 'white-space' && value.includes('pre') && !close)
+				this.pre = node.pre = true;
+			style += `;${key}:${value}`;
+		}
+		style = style.substr(1);
+		if (style) attrs.style = style;
+		if (!close) {
+			node.children = [];
+			if (node.name == 'pre' && cfg.highlight) {
+				this.remove(node);
+				this.pre = node.pre = true;
+			}
+			this.siblings().push(node);
+			this.STACK.push(node);
+		} else if (!cfg.filter || cfg.filter(node, this) != false)
+			this.siblings().push(node);
+	} else {
+		if (!close) this.remove(node);
+		else if (node.name == 'source') {
+			var parent = this.parent();
+			if (parent && (parent.name == 'video' || parent.name == 'audio') && node.attrs.src)
+				parent.attrs.source.push(node.attrs.src);
+		} else if (node.name == 'base' && !this.domain) this.domain = node.attrs.href;
+	}
+	if (this.data[this.i] == '/') this.i++;
+	this.start = this.i + 1;
+	this.state = this.Text;
+}
+// 移除标签
+MpHtmlParser.prototype.remove = function(node) {
+	var name = node.name,
+		j = this.i;
+	// 处理 svg
+	var handleSvg = () => {
+		var src = this.data.substring(j, this.i + 1);
+		if (!node.attrs.xmlns) src = ' xmlns="http://www.w3.org/2000/svg"' + src;
+		var i = j;
+		while (this.data[j] != '<') j--;
+		src = this.data.substring(j, i).replace("viewbox", "viewBox") + src;
+		var parent = this.parent();
+		if (node.attrs.width == '100%' && parent && (parent.attrs.style || '').includes('inline'))
+			parent.attrs.style = 'width:300px;max-width:100%;' + parent.attrs.style;
+		this.siblings().push({
+			name: 'img',
+			attrs: {
+				src: 'data:image/svg+xml;utf8,' + src.replace(/#/g, '%23'),
+				style: (/vertical[^;]+/.exec(node.attrs.style) || []).shift(),
+				ignore: 'T'
+			}
+		})
+	}
+	if (node.name == 'svg' && this.data[j] == '/') return handleSvg(this.i++);
+	while (1) {
+		if ((this.i = this.data.indexOf('</', this.i + 1)) == -1) {
+			if (name == 'pre' || name == 'svg') this.i = j;
+			else this.i = this.data.length;
+			return;
+		}
+		this.start = (this.i += 2);
+		while (!blankChar[this.data[this.i]] && !this.isClose()) this.i++;
+		if (this.section().toLowerCase() == name) {
+			// 代码块高亮
+			if (name == 'pre') {
+				this.data = this.data.substr(0, j + 1) + cfg.highlight(this.data.substring(j + 1, this.i - 5), node.attrs) + this.data
+					.substr(this.i - 5);
+				return this.i = j;
+			} else if (name == 'style')
+				this.CssHandler.getStyle(this.data.substring(j + 1, this.i - 7));
+			else if (name == 'title')
+				this.DOM.title = this.data.substring(j + 1, this.i - 7);
+			if ((this.i = this.data.indexOf('>', this.i)) == -1) this.i = this.data.length;
+			if (name == 'svg') handleSvg();
+			return;
+		}
+	}
+}
+// 节点出栈处理
+MpHtmlParser.prototype.popNode = function(node) {
+	// 空白符处理
+	if (node.pre) {
+		node.pre = this.pre = void 0;
+		for (let i = this.STACK.length; i--;)
+			if (this.STACK[i].pre)
+				this.pre = true;
+	}
+	var siblings = this.siblings(),
+		len = siblings.length,
+		childs = node.children;
+	if (node.name == 'head' || (cfg.filter && cfg.filter(node, this) == false))
+		return siblings.pop();
+	var attrs = node.attrs;
+	// 替换一些标签名
+	if (cfg.blockTags[node.name]) node.name = 'div';
+	else if (!cfg.trustTags[node.name]) node.name = 'span';
+	// 处理列表
+	if (node.c && (node.name == 'ul' || node.name == 'ol')) {
+		if ((node.attrs.style || '').includes('list-style:none')) {
+			for (let i = 0, child; child = childs[i++];)
+				if (child.name == 'li')
+					child.name = 'div';
+		} else if (node.name == 'ul') {
+			var floor = 1;
+			for (let i = this.STACK.length; i--;)
+				if (this.STACK[i].name == 'ul') floor++;
+			if (floor != 1)
+				for (let i = childs.length; i--;)
+					childs[i].floor = floor;
+		} else {
+			for (let i = 0, num = 1, child; child = childs[i++];)
+				if (child.name == 'li') {
+					child.type = 'ol';
+					child.num = ((num, type) => {
+						if (type == 'a') return String.fromCharCode(97 + (num - 1) % 26);
+						if (type == 'A') return String.fromCharCode(65 + (num - 1) % 26);
+						if (type == 'i' || type == 'I') {
+							num = (num - 1) % 99 + 1;
+							var one = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'],
+								ten = ['X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'],
+								res = (ten[Math.floor(num / 10) - 1] || '') + (one[num % 10 - 1] || '');
+							if (type == 'i') return res.toLowerCase();
+							return res;
+						}
+						return num;
+					})(num++, attrs.type) + '.';
+				}
+		}
+	}
+	// 处理表格的边框
+	if (node.name == 'table') {
+		var padding = attrs.cellpadding,
+			spacing = attrs.cellspacing,
+			border = attrs.border;
+		if (node.c) {
+			this.bubble();
+			attrs.style = (attrs.style || '') + ';display:table';
+			if (!padding) padding = 2;
+			if (!spacing) spacing = 2;
+		}
+		if (border) attrs.style = `border:${border}px solid gray;${attrs.style || ''}`;
+		if (spacing) attrs.style = `border-spacing:${spacing}px;${attrs.style || ''}`;
+		if (border || padding || node.c)
+			(function f(ns) {
+				for (var i = 0, n; n = ns[i]; i++) {
+					if (n.type == 'text') continue;
+					var style = n.attrs.style || '';
+					if (node.c && n.name[0] == 't') {
+						n.c = 1;
+						style += ';display:table-' + (n.name == 'th' || n.name == 'td' ? 'cell' : (n.name == 'tr' ? 'row' : 'row-group'));
+					}
+					if (n.name == 'th' || n.name == 'td') {
+						if (border) style = `border:${border}px solid gray;${style}`;
+						if (padding) style = `padding:${padding}px;${style}`;
+					} else f(n.children || []);
+					if (style) n.attrs.style = style;
+				}
+			})(childs)
+		if (this.options.autoscroll) {
+			var table = Object.assign({}, node);
+			node.name = 'div';
+			node.attrs = {
+				style: 'overflow:scroll'
+			}
+			node.children = [table];
+		}
+	}
+	this.CssHandler.pop && this.CssHandler.pop(node);
+	// 自动压缩
+	if (node.name == 'div' && !Object.keys(attrs).length && childs.length == 1 && childs[0].name == 'div')
+		siblings[len - 1] = childs[0];
+}
+// 状态机
+MpHtmlParser.prototype.Text = function(c) {
+	if (c == '<') {
+		var next = this.data[this.i + 1],
+			isLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
+		if (isLetter(next)) {
+			this.setText();
+			this.start = this.i + 1;
+			this.state = this.TagName;
+		} else if (next == '/') {
+			this.setText();
+			if (isLetter(this.data[++this.i + 1])) {
+				this.start = this.i + 1;
+				this.state = this.EndTag;
+			} else this.Comment();
+		} else if (next == '!' || next == '?') {
+			this.setText();
+			this.Comment();
+		}
+	}
+}
+MpHtmlParser.prototype.Comment = function() {
+	var key;
+	if (this.data.substring(this.i + 2, this.i + 4) == '--') key = '-->';
+	else if (this.data.substring(this.i + 2, this.i + 9) == '[CDATA[') key = ']]>';
+	else key = '>';
+	if ((this.i = this.data.indexOf(key, this.i + 2)) == -1) this.i = this.data.length;
+	else this.i += key.length - 1;
+	this.start = this.i + 1;
+	this.state = this.Text;
+}
+MpHtmlParser.prototype.TagName = function(c) {
+	if (blankChar[c]) {
+		this.tagName = this.section();
+		while (blankChar[this.data[this.i]]) this.i++;
+		if (this.isClose()) this.setNode();
+		else {
+			this.start = this.i;
+			this.state = this.AttrName;
+		}
+	} else if (this.isClose()) {
+		this.tagName = this.section();
+		this.setNode();
+	}
+}
+MpHtmlParser.prototype.AttrName = function(c) {
+	if (c == '=' || blankChar[c] || this.isClose()) {
+		this.attrName = this.section();
+		if (blankChar[c])
+			while (blankChar[this.data[++this.i]]);
+		if (this.data[this.i] == '=') {
+			while (blankChar[this.data[++this.i]]);
+			this.start = this.i--;
+			this.state = this.AttrValue;
+		} else this.setAttr();
+	}
+}
+MpHtmlParser.prototype.AttrValue = function(c) {
+	if (c == '"' || c == "'") {
+		this.start++;
+		if ((this.i = this.data.indexOf(c, this.i + 1)) == -1) return this.i = this.data.length;
+		this.attrVal = this.section();
+		this.i++;
+	} else {
+		for (; !blankChar[this.data[this.i]] && !this.isClose(); this.i++);
+		this.attrVal = this.section();
+	}
+	this.setAttr();
+}
+MpHtmlParser.prototype.EndTag = function(c) {
+	if (blankChar[c] || c == '>' || c == '/') {
+		var name = this.section().toLowerCase();
+		for (var i = this.STACK.length; i--;)
+			if (this.STACK[i].name == name) break;
+		if (i != -1) {
+			var node;
+			while ((node = this.STACK.pop()).name != name) this.popNode(node);
+			this.popNode(node);
+		} else if (name == 'p' || name == 'br')
+			this.siblings().push({
+				name,
+				attrs: {}
+			});
+		this.i = this.data.indexOf('>', this.i);
+		this.start = this.i + 1;
+		if (this.i == -1) this.i = this.data.length;
+		else this.state = this.Text;
+	}
+}
+>>>>>>> 5b465a14bac2c1448cc18a0b08b88844fc895cd5
+module.exports = MpHtmlParser;

+ 162 - 0
components/jyf-parser/libs/config.js

@@ -0,0 +1,162 @@
+<<<<<<< HEAD
+/* 配置文件 */
+var cfg = {
+	// 出错占位图
+	errorImg: null,
+	// 过滤器函数
+	filter: null,
+	// 代码高亮函数
+	highlight: null,
+	// 文本处理函数
+	onText: null,
+	// 实体编码列表
+	entities: {
+		quot: '"',
+		apos: "'",
+		semi: ';',
+		nbsp: '\xA0',
+		ensp: '\u2002',
+		emsp: '\u2003',
+		ndash: '–',
+		mdash: '—',
+		middot: '·',
+		lsquo: '‘',
+		rsquo: '’',
+		ldquo: '“',
+		rdquo: '”',
+		bull: '•',
+		hellip: '…'
+	},
+	blankChar: makeMap(' ,\xA0,\t,\r,\n,\f'),
+	boolAttrs: makeMap('allowfullscreen,autoplay,autostart,controls,ignore,loop,muted'),
+	// 块级标签,将被转为 div
+	blockTags: makeMap('address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section'),
+	// 将被移除的标签
+	ignoreTags: makeMap('area,base,canvas,frame,iframe,input,link,map,meta,param,script,source,style,svg,textarea,title,track,wbr'),
+	// 只能被 rich-text 显示的标签
+	richOnlyTags: makeMap('a,colgroup,fieldset,legend,table'),
+	// 自闭合的标签
+	selfClosingTags: makeMap('area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr'),
+	// 信任的标签
+	trustTags: makeMap('a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video'),
+	// 默认的标签样式
+	userAgentStyles: {
+		address: 'font-style:italic',
+		big: 'display:inline;font-size:1.2em',
+		blockquote: 'background-color:#f6f6f6;border-left:3px solid #dbdbdb;color:#6c6c6c;padding:5px 0 5px 10px',
+		caption: 'display:table-caption;text-align:center',
+		center: 'text-align:center',
+		cite: 'font-style:italic',
+		dd: 'margin-left:40px',
+		mark: 'background-color:yellow',
+		pre: 'font-family:monospace;white-space:pre;overflow:scroll',
+		s: 'text-decoration:line-through',
+		small: 'display:inline;font-size:0.8em',
+		u: 'text-decoration:underline'
+	}
+}
+
+function makeMap(str) {
+	var map = Object.create(null),
+		list = str.split(',');
+	for (var i = list.length; i--;)
+		map[list[i]] = true;
+	return map;
+}
+
+// #ifdef MP-WEIXIN
+if (wx.canIUse('editor')) {
+	cfg.blockTags.pre = void 0;
+	cfg.ignoreTags.rp = true;
+	Object.assign(cfg.richOnlyTags, makeMap('bdi,bdo,caption,rt,ruby'));
+	Object.assign(cfg.trustTags, makeMap('bdi,bdo,caption,pre,rt,ruby'));
+}
+// #endif
+
+// #ifdef APP-PLUS
+cfg.ignoreTags.iframe = void 0;
+Object.assign(cfg.trustTags, makeMap('embed,iframe'));
+// #endif
+
+=======
+/* 配置文件 */
+var cfg = {
+	// 出错占位图
+	errorImg: null,
+	// 过滤器函数
+	filter: null,
+	// 代码高亮函数
+	highlight: null,
+	// 文本处理函数
+	onText: null,
+	// 实体编码列表
+	entities: {
+		quot: '"',
+		apos: "'",
+		semi: ';',
+		nbsp: '\xA0',
+		ensp: '\u2002',
+		emsp: '\u2003',
+		ndash: '–',
+		mdash: '—',
+		middot: '·',
+		lsquo: '‘',
+		rsquo: '’',
+		ldquo: '“',
+		rdquo: '”',
+		bull: '•',
+		hellip: '…'
+	},
+	blankChar: makeMap(' ,\xA0,\t,\r,\n,\f'),
+	boolAttrs: makeMap('allowfullscreen,autoplay,autostart,controls,ignore,loop,muted'),
+	// 块级标签,将被转为 div
+	blockTags: makeMap('address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section'),
+	// 将被移除的标签
+	ignoreTags: makeMap('area,base,canvas,frame,iframe,input,link,map,meta,param,script,source,style,svg,textarea,title,track,wbr'),
+	// 只能被 rich-text 显示的标签
+	richOnlyTags: makeMap('a,colgroup,fieldset,legend,table'),
+	// 自闭合的标签
+	selfClosingTags: makeMap('area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr'),
+	// 信任的标签
+	trustTags: makeMap('a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video'),
+	// 默认的标签样式
+	userAgentStyles: {
+		address: 'font-style:italic',
+		big: 'display:inline;font-size:1.2em',
+		blockquote: 'background-color:#f6f6f6;border-left:3px solid #dbdbdb;color:#6c6c6c;padding:5px 0 5px 10px',
+		caption: 'display:table-caption;text-align:center',
+		center: 'text-align:center',
+		cite: 'font-style:italic',
+		dd: 'margin-left:40px',
+		mark: 'background-color:yellow',
+		pre: 'font-family:monospace;white-space:pre;overflow:scroll',
+		s: 'text-decoration:line-through',
+		small: 'display:inline;font-size:0.8em',
+		u: 'text-decoration:underline'
+	}
+}
+
+function makeMap(str) {
+	var map = Object.create(null),
+		list = str.split(',');
+	for (var i = list.length; i--;)
+		map[list[i]] = true;
+	return map;
+}
+
+// #ifdef MP-WEIXIN
+if (wx.canIUse('editor')) {
+	cfg.blockTags.pre = void 0;
+	cfg.ignoreTags.rp = true;
+	Object.assign(cfg.richOnlyTags, makeMap('bdi,bdo,caption,rt,ruby'));
+	Object.assign(cfg.trustTags, makeMap('bdi,bdo,caption,pre,rt,ruby'));
+}
+// #endif
+
+// #ifdef APP-PLUS
+cfg.ignoreTags.iframe = void 0;
+Object.assign(cfg.trustTags, makeMap('embed,iframe'));
+// #endif
+
+>>>>>>> 5b465a14bac2c1448cc18a0b08b88844fc895cd5
+module.exports = cfg;

+ 46 - 0
components/jyf-parser/libs/handler.wxs

@@ -0,0 +1,46 @@
+<<<<<<< HEAD
+var inline = {
+	abbr: 1,
+	b: 1,
+	big: 1,
+	code: 1,
+	del: 1,
+	em: 1,
+	i: 1,
+	ins: 1,
+	label: 1,
+	q: 1,
+	small: 1,
+	span: 1,
+	strong: 1,
+	sub: 1,
+	sup: 1
+}
+module.exports = {
+	use: function(item) {
+		return !item.c && !inline[item.name] && (item.attrs.style || '').indexOf('display:inline') == -1
+	}
+=======
+var inline = {
+	abbr: 1,
+	b: 1,
+	big: 1,
+	code: 1,
+	del: 1,
+	em: 1,
+	i: 1,
+	ins: 1,
+	label: 1,
+	q: 1,
+	small: 1,
+	span: 1,
+	strong: 1,
+	sub: 1,
+	sup: 1
+}
+module.exports = {
+	use: function(item) {
+		return !item.c && !inline[item.name] && (item.attrs.style || '').indexOf('display:inline') == -1
+	}
+>>>>>>> 5b465a14bac2c1448cc18a0b08b88844fc895cd5
+}

+ 1004 - 0
components/jyf-parser/libs/trees.vue

@@ -0,0 +1,1004 @@
+<<<<<<< HEAD
+<template>
+	<view :class="'interlayer '+(c||'')" :style="s">
+		<block v-for="(n, i) in nodes" v-bind:key="i">
+			<!--图片-->
+			<view v-if="n.name=='img'" :class="'_img '+n.attrs.class" :style="n.attrs.style" :data-attrs="n.attrs" @tap="imgtap">
+				<rich-text v-if="ctrl[i]!=0" :nodes="[{attrs:{src:loading&&(ctrl[i]||0)<2?loading:(lazyLoad&&!ctrl[i]?placeholder:(ctrl[i]==3?errorImg:n.attrs.src||'')),alt:n.attrs.alt||'',width:n.attrs.width||'',style:'-webkit-touch-callout:none;max-width:100%;display:block'+(n.attrs.height?';height:'+n.attrs.height:'')},name:'img'}]" />
+				<image class="_image" :src="lazyLoad&&!ctrl[i]?placeholder:n.attrs.src" :lazy-load="lazyLoad"
+				 :show-menu-by-longpress="!n.attrs.ignore" :data-i="i" :data-index="n.attrs.i" data-source="img" @load="loadImg"
+				 @error="error" />
+			</view>
+			<!--文本-->
+			<text v-else-if="n.type=='text'" decode>{{n.text}}</text>
+			<!--#ifndef MP-BAIDU-->
+			<text v-else-if="n.name=='br'">\n</text>
+			<!--#endif-->
+			<!--视频-->
+			<view v-else-if="((n.lazyLoad&&!n.attrs.autoplay)||(n.name=='video'&&!loadVideo))&&ctrl[i]==undefined" :id="n.attrs.id" :class="'_video '+(n.attrs.class||'')"
+			 :style="n.attrs.style" :data-i="i" @tap="_loadVideo" />
+			<video v-else-if="n.name=='video'" :id="n.attrs.id" :class="n.attrs.class" :style="n.attrs.style" :autoplay="n.attrs.autoplay||ctrl[i]==0"
+			 :controls="n.attrs.controls" :loop="n.attrs.loop" :muted="n.attrs.muted" :poster="n.attrs.poster" :src="n.attrs.source[ctrl[i]||0]"
+			 :unit-id="n.attrs['unit-id']" :data-id="n.attrs.id" :data-i="i" data-source="video" @error="error" @play="play" />
+			<!--音频-->
+			<audio v-else-if="n.name=='audio'" :ref="n.attrs.id" :class="n.attrs.class" :style="n.attrs.style" :author="n.attrs.author"
+			 :autoplay="n.attrs.autoplay" :controls="n.attrs.controls" :loop="n.attrs.loop" :name="n.attrs.name" :poster="n.attrs.poster"
+			 :src="n.attrs.source[ctrl[i]||0]" :data-i="i" :data-id="n.attrs.id" data-source="audio"
+			 @error.native="error" @play.native="play" />
+			<!--链接-->
+			<view v-else-if="n.name=='a'" :id="n.attrs.id" :class="'_a '+(n.attrs.class||'')" hover-class="_hover" :style="n.attrs.style"
+			 :data-attrs="n.attrs" @tap="linkpress">
+				<trees class="_span" c="_span" :nodes="n.children" />
+			</view>
+			<!--广告-->
+			<!--<ad v-else-if="n.name=='ad'" :class="n.attrs.class" :style="n.attrs.style" :unit-id="n.attrs['unit-id']" :appid="n.attrs.appid" :apid="n.attrs.apid" :type="n.attrs.type" :adpid="n.attrs.adpid" data-source="ad" @error="error" />-->
+			<!--列表-->
+			<view v-else-if="n.name=='li'" :id="n.attrs.id" :class="n.attrs.class" :style="(n.attrs.style||'')+';display:flex;flex-direction:row'">
+				<view v-if="n.type=='ol'" class="_ol-bef">{{n.num}}</view>
+				<view v-else class="_ul-bef">
+					<view v-if="n.floor%3==0" class="_ul-p1">█</view>
+					<view v-else-if="n.floor%3==2" class="_ul-p2" />
+					<view v-else class="_ul-p1" style="border-radius:50%">█</view>
+				</view>
+				<trees class="_li" c="_li" :nodes="n.children" :lazyLoad="lazyLoad" :loading="loading" />
+			</view>
+			<!--表格-->
+			<view v-else-if="n.name=='table'&&n.c" :id="n.attrs.id" :class="n.attrs.class" :style="(n.attrs.style||'')+';display:table'">
+				<view v-for="(tbody, o) in n.children" v-bind:key="o" :class="tbody.attrs.class" :style="(tbody.attrs.style||'')+(tbody.name[0]=='t'?';display:table-'+(tbody.name=='tr'?'row':'row-group'):'')">
+					<view v-for="(tr, p) in tbody.children" v-bind:key="p" :class="tr.attrs.class" :style="(tr.attrs.style||'')+(tr.name[0]=='t'?';display:table-'+(tr.name=='tr'?'row':'cell'):'')">
+						<trees v-if="tr.name=='td'" :nodes="tr.children" />
+						<trees v-else v-for="(td, q) in tr.children" v-bind:key="q" :class="td.attrs.class" :c="td.attrs.class" :style="(td.attrs.style||'')+(td.name[0]=='t'?';display:table-'+(td.name=='tr'?'row':'cell'):'')"
+						 :s="(td.attrs.style||'')+(td.name[0]=='t'?';display:table-'+(td.name=='tr'?'row':'cell'):'')" :nodes="td.children" />
+					</view>
+				</view>
+			</view>
+			<!--#ifdef APP-PLUS-->
+			<iframe v-else-if="n.name=='iframe'" :style="n.attrs.style" :allowfullscreen="n.attrs.allowfullscreen" :frameborder="n.attrs.frameborder"
+			 :width="n.attrs.width" :height="n.attrs.height" :src="n.attrs.src" />
+			<embed v-else-if="n.name=='embed'" :style="n.attrs.style" :width="n.attrs.width" :height="n.attrs.height" :src="n.attrs.src" />
+			<!--#endif-->
+			<!--富文本-->
+			<!--#ifdef MP-WEIXIN || MP-QQ || APP-PLUS-->
+			<rich-text v-else-if="handler.use(n)" :id="n.attrs.id" :class="'_p __'+n.name" :nodes="[n]" />
+			<!--#endif-->
+			<!--#ifndef MP-WEIXIN || MP-QQ || APP-PLUS-->
+			<rich-text v-else-if="!n.c" :id="n.attrs.id" :nodes="[n]" style="display:inline" />
+			<!--#endif-->
+			<trees v-else :class="(n.attrs.id||'')+' _'+n.name+' '+(n.attrs.class||'')" :c="(n.attrs.id||'')+' _'+n.name+' '+(n.attrs.class||'')"
+			 :style="n.attrs.style" :s="n.attrs.style" :nodes="n.children" :lazyLoad="lazyLoad" :loading="loading" />
+		</block>
+	</view>
+</template>
+<script module="handler" lang="wxs" src="./handler.wxs"></script>
+<script>
+	global.Parser = {};
+	import trees from './trees'
+	const errorImg = require('../libs/config.js').errorImg;
+	export default {
+		components: {
+			trees
+		},
+		name: 'trees',
+		data() {
+			return {
+				ctrl: [],
+				placeholder: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="300" height="225"/>',
+				errorImg,
+				loadVideo: typeof plus == 'undefined',
+				// #ifndef MP-ALIPAY
+				c: '',
+				s: ''
+				// #endif
+			}
+		},
+		props: {
+			nodes: Array,
+			lazyLoad: Boolean,
+			loading: String,
+			// #ifdef MP-ALIPAY
+			c: String,
+			s: String
+			// #endif
+		},
+		mounted() {
+			for (this.top = this.$parent; this.top.$options.name != 'parser'; this.top = this.top.$parent);
+			this.init();
+		},
+		// #ifdef APP-PLUS
+		beforeDestroy() {
+			this.observer && this.observer.disconnect();
+		},
+		// #endif
+		methods: {
+			init() {
+				for (var i = this.nodes.length, n; n = this.nodes[--i];) {
+					if (n.name == 'img') {
+						this.top.imgList.setItem(n.attrs.i, n.attrs.src);
+						// #ifdef APP-PLUS
+						if (this.lazyLoad && !this.observer) {
+							this.observer = uni.createIntersectionObserver(this).relativeToViewport({
+								top: 500,
+								bottom: 500
+							});
+							setTimeout(() => {
+								this.observer.observe('._img', res => {
+									if (res.intersectionRatio) {
+										for (var j = this.nodes.length; j--;)
+											if (this.nodes[j].name == 'img')
+												this.$set(this.ctrl, j, 1);
+										this.observer.disconnect();
+									}
+								})
+							}, 0)
+						}
+						// #endif
+					} else if (n.name == 'video' || n.name == 'audio') {
+						var ctx;
+						if (n.name == 'video') {
+							ctx = uni.createVideoContext(n.attrs.id
+								// #ifndef MP-BAIDU
+								, this
+								// #endif
+							);
+						} else if (this.$refs[n.attrs.id])
+							ctx = this.$refs[n.attrs.id][0];
+						if (ctx) {
+							ctx.id = n.attrs.id;
+							this.top.videoContexts.push(ctx);
+						}
+					}
+				}
+				// #ifdef APP-PLUS
+				// APP 上避免 video 错位需要延时渲染
+				setTimeout(() => {
+					this.loadVideo = true;
+				}, 1000)
+				// #endif
+			},
+			play(e) {
+				var contexts = this.top.videoContexts;
+				if (contexts.length > 1 && this.top.autopause)
+					for (var i = contexts.length; i--;)
+						if (contexts[i].id != e.currentTarget.dataset.id)
+							contexts[i].pause();
+			},
+			imgtap(e) {
+				var attrs = e.currentTarget.dataset.attrs;
+				if (!attrs.ignore) {
+					var preview = true,
+						data = {
+							id: e.target.id,
+							src: attrs.src,
+							ignore: () => preview = false
+						};
+					global.Parser.onImgtap && global.Parser.onImgtap(data);
+					this.top.$emit('imgtap', data);
+					if (preview) {
+						var urls = this.top.imgList,
+							current = urls[attrs.i] ? parseInt(attrs.i) : (urls = [attrs.src], 0);
+						uni.previewImage({
+							current,
+							urls
+						})
+					}
+				}
+			},
+			loadImg(e) {
+				var i = e.currentTarget.dataset.i;
+				if (this.lazyLoad && !this.ctrl[i]) {
+					// #ifdef QUICKAPP-WEBVIEW
+					this.$set(this.ctrl, i, 0);
+					this.$nextTick(function() {
+						// #endif
+						// #ifndef APP-PLUS
+						this.$set(this.ctrl, i, 1);
+						// #endif
+						// #ifdef QUICKAPP-WEBVIEW
+					})
+					// #endif
+				} else if (this.loading && this.ctrl[i] != 2) {
+					// #ifdef QUICKAPP-WEBVIEW
+					this.$set(this.ctrl, i, 0);
+					this.$nextTick(function() {
+						// #endif
+						this.$set(this.ctrl, i, 2);
+						// #ifdef QUICKAPP-WEBVIEW
+					})
+					// #endif
+				}
+			},
+			linkpress(e) {
+				var jump = true,
+					attrs = e.currentTarget.dataset.attrs;
+				attrs.ignore = () => jump = false;
+				global.Parser.onLinkpress && global.Parser.onLinkpress(attrs);
+				this.top.$emit('linkpress', attrs);
+				if (jump) {
+					// #ifdef MP
+					if (attrs['app-id']) {
+						return uni.navigateToMiniProgram({
+							appId: attrs['app-id'],
+							path: attrs.path
+						})
+					}
+					// #endif
+					if (attrs.href) {
+						if (attrs.href[0] == '#') {
+							if (this.top.useAnchor)
+								this.top.navigateTo({
+									id: attrs.href.substring(1)
+								})
+						} else if (attrs.href.indexOf('http') == 0 || attrs.href.indexOf('//') == 0) {
+							// #ifdef APP-PLUS
+							plus.runtime.openWeb(attrs.href);
+							// #endif
+							// #ifndef APP-PLUS
+							uni.setClipboardData({
+								data: attrs.href,
+								success: () =>
+									uni.showToast({
+										title: '链接已复制'
+									})
+							})
+							// #endif
+						} else
+							uni.navigateTo({
+								url: attrs.href,
+								fail() {
+									uni.switchTab({
+										url: attrs.href,
+									})
+								}
+							})
+					}
+				}
+			},
+			error(e) {
+				var target = e.currentTarget,
+					source = target.dataset.source,
+					i = target.dataset.i;
+				if (source == 'video' || source == 'audio') {
+					// 加载其他 source
+					var index = this.ctrl[i] ? this.ctrl[i].i + 1 : 1;
+					if (index < this.nodes[i].attrs.source.length)
+						this.$set(this.ctrl, i, index);
+					if (e.detail.__args__)
+						e.detail = e.detail.__args__[0];
+				} else if (errorImg && source == 'img') {
+					this.top.imgList.setItem(target.dataset.index, errorImg);
+					this.$set(this.ctrl, i, 3);
+				}
+				this.top && this.top.$emit('error', {
+					source,
+					target,
+					errMsg: e.detail.errMsg
+				});
+			},
+			_loadVideo(e) {
+				this.$set(this.ctrl, e.target.dataset.i, 0);
+			}
+		}
+	}
+</script>
+
+<style>
+	/* 在这里引入自定义样式 */
+
+	/* 链接和图片效果 */
+	._a {
+		display: inline;
+		padding: 1.5px 0 1.5px 0;
+		color: #366092;
+		word-break: break-all;
+	}
+
+	._hover {
+		text-decoration: underline;
+		opacity: 0.7;
+	}
+
+	._img {
+		display: inline-block;
+		max-width: 100%;
+		overflow: hidden;
+	}
+
+	/* #ifdef MP-WEIXIN */
+	:host {
+		display: inline;
+	}
+
+	/* #endif */
+
+	/* #ifndef MP-ALIPAY || APP-PLUS */
+	.interlayer {
+		display: inherit;
+		flex-direction: inherit;
+		flex-wrap: inherit;
+		align-content: inherit;
+		align-items: inherit;
+		justify-content: inherit;
+		width: 100%;
+		white-space: inherit;
+	}
+
+	/* #endif */
+
+	._b,
+	._strong {
+		font-weight: bold;
+	}
+
+	/* #ifndef MP-ALIPAY */
+	._blockquote,
+	._div,
+	._p,
+	._ol,
+	._ul,
+	._li {
+		display: block;
+	}
+	
+	/* #endif */
+
+	._code {
+		font-family: monospace;
+	}
+
+	._del {
+		text-decoration: line-through;
+	}
+
+	._em,
+	._i {
+		font-style: italic;
+	}
+
+	._h1 {
+		font-size: 2em;
+	}
+
+	._h2 {
+		font-size: 1.5em;
+	}
+
+	._h3 {
+		font-size: 1.17em;
+	}
+
+	._h5 {
+		font-size: 0.83em;
+	}
+
+	._h6 {
+		font-size: 0.67em;
+	}
+
+	._h1,
+	._h2,
+	._h3,
+	._h4,
+	._h5,
+	._h6 {
+		display: block;
+		font-weight: bold;
+	}
+
+	._image {
+		display: block;
+		width: 100%;
+		height: 360px;
+		margin-top: -360px;
+		opacity: 0;
+	}
+
+	._ins {
+		text-decoration: underline;
+	}
+
+	._li {
+		flex: 1;
+		width: 0;
+	}
+
+	._ol-bef {
+		width: 36px;
+		margin-right: 5px;
+		text-align: right;
+	}
+
+	._ul-bef {
+		display: block;
+		margin: 0 12px 0 23px;
+		line-height: normal;
+	}
+
+	._ol-bef,
+	._ul-bef {
+		flex: none;
+		user-select: none;
+	}
+
+	._ul-p1 {
+		display: inline-block;
+		width: 0.3em;
+		height: 0.3em;
+		overflow: hidden;
+		line-height: 0.3em;
+	}
+
+	._ul-p2 {
+		display: inline-block;
+		width: 0.23em;
+		height: 0.23em;
+		border: 0.05em solid black;
+		border-radius: 50%;
+	}
+
+	._q::before {
+		content: '"';
+	}
+
+	._q::after {
+		content: '"';
+	}
+
+	._sub {
+		font-size: smaller;
+		vertical-align: sub;
+	}
+
+	._sup {
+		font-size: smaller;
+		vertical-align: super;
+	}
+
+	/* #ifdef MP-ALIPAY || APP-PLUS || QUICKAPP-WEBVIEW */
+	._abbr,
+	._b,
+	._code,
+	._del,
+	._em,
+	._i,
+	._ins,
+	._label,
+	._q,
+	._span,
+	._strong,
+	._sub,
+	._sup {
+		display: inline;
+	}
+
+	/* #endif */
+
+	/* #ifdef MP-WEIXIN || MP-QQ */
+	.__bdo,
+	.__bdi,
+	.__ruby,
+	.__rt {
+		display: inline-block;
+	}
+
+	/* #endif */
+	._video {
+		position: relative;
+		display: inline-block;
+		width: 300px;
+		height: 225px;
+		background-color: black;
+	}
+
+	._video::after {
+		position: absolute;
+		top: 50%;
+		left: 50%;
+		margin: -15px 0 0 -15px;
+		content: '';
+		border-color: transparent transparent transparent white;
+		border-style: solid;
+		border-width: 15px 0 15px 30px;
+	}
+=======
+<template>
+	<view :class="'interlayer '+(c||'')" :style="s">
+		<block v-for="(n, i) in nodes" v-bind:key="i">
+			<!--图片-->
+			<view v-if="n.name=='img'" :class="'_img '+n.attrs.class" :style="n.attrs.style" :data-attrs="n.attrs" @tap="imgtap">
+				<rich-text v-if="ctrl[i]!=0" :nodes="[{attrs:{src:loading&&(ctrl[i]||0)<2?loading:(lazyLoad&&!ctrl[i]?placeholder:(ctrl[i]==3?errorImg:n.attrs.src||'')),alt:n.attrs.alt||'',width:n.attrs.width||'',style:'-webkit-touch-callout:none;max-width:100%;display:block'+(n.attrs.height?';height:'+n.attrs.height:'')},name:'img'}]" />
+				<image class="_image" :src="lazyLoad&&!ctrl[i]?placeholder:n.attrs.src" :lazy-load="lazyLoad"
+				 :show-menu-by-longpress="!n.attrs.ignore" :data-i="i" :data-index="n.attrs.i" data-source="img" @load="loadImg"
+				 @error="error" />
+			</view>
+			<!--文本-->
+			<text v-else-if="n.type=='text'" decode>{{n.text}}</text>
+			<!--#ifndef MP-BAIDU-->
+			<text v-else-if="n.name=='br'">\n</text>
+			<!--#endif-->
+			<!--视频-->
+			<view v-else-if="((n.lazyLoad&&!n.attrs.autoplay)||(n.name=='video'&&!loadVideo))&&ctrl[i]==undefined" :id="n.attrs.id" :class="'_video '+(n.attrs.class||'')"
+			 :style="n.attrs.style" :data-i="i" @tap="_loadVideo" />
+			<video v-else-if="n.name=='video'" :id="n.attrs.id" :class="n.attrs.class" :style="n.attrs.style" :autoplay="n.attrs.autoplay||ctrl[i]==0"
+			 :controls="n.attrs.controls" :loop="n.attrs.loop" :muted="n.attrs.muted" :poster="n.attrs.poster" :src="n.attrs.source[ctrl[i]||0]"
+			 :unit-id="n.attrs['unit-id']" :data-id="n.attrs.id" :data-i="i" data-source="video" @error="error" @play="play" />
+			<!--音频-->
+			<audio v-else-if="n.name=='audio'" :ref="n.attrs.id" :class="n.attrs.class" :style="n.attrs.style" :author="n.attrs.author"
+			 :autoplay="n.attrs.autoplay" :controls="n.attrs.controls" :loop="n.attrs.loop" :name="n.attrs.name" :poster="n.attrs.poster"
+			 :src="n.attrs.source[ctrl[i]||0]" :data-i="i" :data-id="n.attrs.id" data-source="audio"
+			 @error.native="error" @play.native="play" />
+			<!--链接-->
+			<view v-else-if="n.name=='a'" :id="n.attrs.id" :class="'_a '+(n.attrs.class||'')" hover-class="_hover" :style="n.attrs.style"
+			 :data-attrs="n.attrs" @tap="linkpress">
+				<trees class="_span" c="_span" :nodes="n.children" />
+			</view>
+			<!--广告-->
+			<!--<ad v-else-if="n.name=='ad'" :class="n.attrs.class" :style="n.attrs.style" :unit-id="n.attrs['unit-id']" :appid="n.attrs.appid" :apid="n.attrs.apid" :type="n.attrs.type" :adpid="n.attrs.adpid" data-source="ad" @error="error" />-->
+			<!--列表-->
+			<view v-else-if="n.name=='li'" :id="n.attrs.id" :class="n.attrs.class" :style="(n.attrs.style||'')+';display:flex;flex-direction:row'">
+				<view v-if="n.type=='ol'" class="_ol-bef">{{n.num}}</view>
+				<view v-else class="_ul-bef">
+					<view v-if="n.floor%3==0" class="_ul-p1">█</view>
+					<view v-else-if="n.floor%3==2" class="_ul-p2" />
+					<view v-else class="_ul-p1" style="border-radius:50%">█</view>
+				</view>
+				<trees class="_li" c="_li" :nodes="n.children" :lazyLoad="lazyLoad" :loading="loading" />
+			</view>
+			<!--表格-->
+			<view v-else-if="n.name=='table'&&n.c" :id="n.attrs.id" :class="n.attrs.class" :style="(n.attrs.style||'')+';display:table'">
+				<view v-for="(tbody, o) in n.children" v-bind:key="o" :class="tbody.attrs.class" :style="(tbody.attrs.style||'')+(tbody.name[0]=='t'?';display:table-'+(tbody.name=='tr'?'row':'row-group'):'')">
+					<view v-for="(tr, p) in tbody.children" v-bind:key="p" :class="tr.attrs.class" :style="(tr.attrs.style||'')+(tr.name[0]=='t'?';display:table-'+(tr.name=='tr'?'row':'cell'):'')">
+						<trees v-if="tr.name=='td'" :nodes="tr.children" />
+						<trees v-else v-for="(td, q) in tr.children" v-bind:key="q" :class="td.attrs.class" :c="td.attrs.class" :style="(td.attrs.style||'')+(td.name[0]=='t'?';display:table-'+(td.name=='tr'?'row':'cell'):'')"
+						 :s="(td.attrs.style||'')+(td.name[0]=='t'?';display:table-'+(td.name=='tr'?'row':'cell'):'')" :nodes="td.children" />
+					</view>
+				</view>
+			</view>
+			<!--#ifdef APP-PLUS-->
+			<iframe v-else-if="n.name=='iframe'" :style="n.attrs.style" :allowfullscreen="n.attrs.allowfullscreen" :frameborder="n.attrs.frameborder"
+			 :width="n.attrs.width" :height="n.attrs.height" :src="n.attrs.src" />
+			<embed v-else-if="n.name=='embed'" :style="n.attrs.style" :width="n.attrs.width" :height="n.attrs.height" :src="n.attrs.src" />
+			<!--#endif-->
+			<!--富文本-->
+			<!--#ifdef MP-WEIXIN || MP-QQ || APP-PLUS-->
+			<rich-text v-else-if="handler.use(n)" :id="n.attrs.id" :class="'_p __'+n.name" :nodes="[n]" />
+			<!--#endif-->
+			<!--#ifndef MP-WEIXIN || MP-QQ || APP-PLUS-->
+			<rich-text v-else-if="!n.c" :id="n.attrs.id" :nodes="[n]" style="display:inline" />
+			<!--#endif-->
+			<trees v-else :class="(n.attrs.id||'')+' _'+n.name+' '+(n.attrs.class||'')" :c="(n.attrs.id||'')+' _'+n.name+' '+(n.attrs.class||'')"
+			 :style="n.attrs.style" :s="n.attrs.style" :nodes="n.children" :lazyLoad="lazyLoad" :loading="loading" />
+		</block>
+	</view>
+</template>
+<script module="handler" lang="wxs" src="./handler.wxs"></script>
+<script>
+	global.Parser = {};
+	import trees from './trees'
+	const errorImg = require('../libs/config.js').errorImg;
+	export default {
+		components: {
+			trees
+		},
+		name: 'trees',
+		data() {
+			return {
+				ctrl: [],
+				placeholder: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="300" height="225"/>',
+				errorImg,
+				loadVideo: typeof plus == 'undefined',
+				// #ifndef MP-ALIPAY
+				c: '',
+				s: ''
+				// #endif
+			}
+		},
+		props: {
+			nodes: Array,
+			lazyLoad: Boolean,
+			loading: String,
+			// #ifdef MP-ALIPAY
+			c: String,
+			s: String
+			// #endif
+		},
+		mounted() {
+			for (this.top = this.$parent; this.top.$options.name != 'parser'; this.top = this.top.$parent);
+			this.init();
+		},
+		// #ifdef APP-PLUS
+		beforeDestroy() {
+			this.observer && this.observer.disconnect();
+		},
+		// #endif
+		methods: {
+			init() {
+				for (var i = this.nodes.length, n; n = this.nodes[--i];) {
+					if (n.name == 'img') {
+						this.top.imgList.setItem(n.attrs.i, n.attrs.src);
+						// #ifdef APP-PLUS
+						if (this.lazyLoad && !this.observer) {
+							this.observer = uni.createIntersectionObserver(this).relativeToViewport({
+								top: 500,
+								bottom: 500
+							});
+							setTimeout(() => {
+								this.observer.observe('._img', res => {
+									if (res.intersectionRatio) {
+										for (var j = this.nodes.length; j--;)
+											if (this.nodes[j].name == 'img')
+												this.$set(this.ctrl, j, 1);
+										this.observer.disconnect();
+									}
+								})
+							}, 0)
+						}
+						// #endif
+					} else if (n.name == 'video' || n.name == 'audio') {
+						var ctx;
+						if (n.name == 'video') {
+							ctx = uni.createVideoContext(n.attrs.id
+								// #ifndef MP-BAIDU
+								, this
+								// #endif
+							);
+						} else if (this.$refs[n.attrs.id])
+							ctx = this.$refs[n.attrs.id][0];
+						if (ctx) {
+							ctx.id = n.attrs.id;
+							this.top.videoContexts.push(ctx);
+						}
+					}
+				}
+				// #ifdef APP-PLUS
+				// APP 上避免 video 错位需要延时渲染
+				setTimeout(() => {
+					this.loadVideo = true;
+				}, 1000)
+				// #endif
+			},
+			play(e) {
+				var contexts = this.top.videoContexts;
+				if (contexts.length > 1 && this.top.autopause)
+					for (var i = contexts.length; i--;)
+						if (contexts[i].id != e.currentTarget.dataset.id)
+							contexts[i].pause();
+			},
+			imgtap(e) {
+				var attrs = e.currentTarget.dataset.attrs;
+				if (!attrs.ignore) {
+					var preview = true,
+						data = {
+							id: e.target.id,
+							src: attrs.src,
+							ignore: () => preview = false
+						};
+					global.Parser.onImgtap && global.Parser.onImgtap(data);
+					this.top.$emit('imgtap', data);
+					if (preview) {
+						var urls = this.top.imgList,
+							current = urls[attrs.i] ? parseInt(attrs.i) : (urls = [attrs.src], 0);
+						uni.previewImage({
+							current,
+							urls
+						})
+					}
+				}
+			},
+			loadImg(e) {
+				var i = e.currentTarget.dataset.i;
+				if (this.lazyLoad && !this.ctrl[i]) {
+					// #ifdef QUICKAPP-WEBVIEW
+					this.$set(this.ctrl, i, 0);
+					this.$nextTick(function() {
+						// #endif
+						// #ifndef APP-PLUS
+						this.$set(this.ctrl, i, 1);
+						// #endif
+						// #ifdef QUICKAPP-WEBVIEW
+					})
+					// #endif
+				} else if (this.loading && this.ctrl[i] != 2) {
+					// #ifdef QUICKAPP-WEBVIEW
+					this.$set(this.ctrl, i, 0);
+					this.$nextTick(function() {
+						// #endif
+						this.$set(this.ctrl, i, 2);
+						// #ifdef QUICKAPP-WEBVIEW
+					})
+					// #endif
+				}
+			},
+			linkpress(e) {
+				var jump = true,
+					attrs = e.currentTarget.dataset.attrs;
+				attrs.ignore = () => jump = false;
+				global.Parser.onLinkpress && global.Parser.onLinkpress(attrs);
+				this.top.$emit('linkpress', attrs);
+				if (jump) {
+					// #ifdef MP
+					if (attrs['app-id']) {
+						return uni.navigateToMiniProgram({
+							appId: attrs['app-id'],
+							path: attrs.path
+						})
+					}
+					// #endif
+					if (attrs.href) {
+						if (attrs.href[0] == '#') {
+							if (this.top.useAnchor)
+								this.top.navigateTo({
+									id: attrs.href.substring(1)
+								})
+						} else if (attrs.href.indexOf('http') == 0 || attrs.href.indexOf('//') == 0) {
+							// #ifdef APP-PLUS
+							plus.runtime.openWeb(attrs.href);
+							// #endif
+							// #ifndef APP-PLUS
+							uni.setClipboardData({
+								data: attrs.href,
+								success: () =>
+									uni.showToast({
+										title: '链接已复制'
+									})
+							})
+							// #endif
+						} else
+							uni.navigateTo({
+								url: attrs.href,
+								fail() {
+									uni.switchTab({
+										url: attrs.href,
+									})
+								}
+							})
+					}
+				}
+			},
+			error(e) {
+				var target = e.currentTarget,
+					source = target.dataset.source,
+					i = target.dataset.i;
+				if (source == 'video' || source == 'audio') {
+					// 加载其他 source
+					var index = this.ctrl[i] ? this.ctrl[i].i + 1 : 1;
+					if (index < this.nodes[i].attrs.source.length)
+						this.$set(this.ctrl, i, index);
+					if (e.detail.__args__)
+						e.detail = e.detail.__args__[0];
+				} else if (errorImg && source == 'img') {
+					this.top.imgList.setItem(target.dataset.index, errorImg);
+					this.$set(this.ctrl, i, 3);
+				}
+				this.top && this.top.$emit('error', {
+					source,
+					target,
+					errMsg: e.detail.errMsg
+				});
+			},
+			_loadVideo(e) {
+				this.$set(this.ctrl, e.target.dataset.i, 0);
+			}
+		}
+	}
+</script>
+
+<style>
+	/* 在这里引入自定义样式 */
+
+	/* 链接和图片效果 */
+	._a {
+		display: inline;
+		padding: 1.5px 0 1.5px 0;
+		color: #366092;
+		word-break: break-all;
+	}
+
+	._hover {
+		text-decoration: underline;
+		opacity: 0.7;
+	}
+
+	._img {
+		display: inline-block;
+		max-width: 100%;
+		overflow: hidden;
+	}
+
+	/* #ifdef MP-WEIXIN */
+	:host {
+		display: inline;
+	}
+
+	/* #endif */
+
+	/* #ifndef MP-ALIPAY || APP-PLUS */
+	.interlayer {
+		display: inherit;
+		flex-direction: inherit;
+		flex-wrap: inherit;
+		align-content: inherit;
+		align-items: inherit;
+		justify-content: inherit;
+		width: 100%;
+		white-space: inherit;
+	}
+
+	/* #endif */
+
+	._b,
+	._strong {
+		font-weight: bold;
+	}
+
+	/* #ifndef MP-ALIPAY */
+	._blockquote,
+	._div,
+	._p,
+	._ol,
+	._ul,
+	._li {
+		display: block;
+	}
+	
+	/* #endif */
+
+	._code {
+		font-family: monospace;
+	}
+
+	._del {
+		text-decoration: line-through;
+	}
+
+	._em,
+	._i {
+		font-style: italic;
+	}
+
+	._h1 {
+		font-size: 2em;
+	}
+
+	._h2 {
+		font-size: 1.5em;
+	}
+
+	._h3 {
+		font-size: 1.17em;
+	}
+
+	._h5 {
+		font-size: 0.83em;
+	}
+
+	._h6 {
+		font-size: 0.67em;
+	}
+
+	._h1,
+	._h2,
+	._h3,
+	._h4,
+	._h5,
+	._h6 {
+		display: block;
+		font-weight: bold;
+	}
+
+	._image {
+		display: block;
+		width: 100%;
+		height: 360px;
+		margin-top: -360px;
+		opacity: 0;
+	}
+
+	._ins {
+		text-decoration: underline;
+	}
+
+	._li {
+		flex: 1;
+		width: 0;
+	}
+
+	._ol-bef {
+		width: 36px;
+		margin-right: 5px;
+		text-align: right;
+	}
+
+	._ul-bef {
+		display: block;
+		margin: 0 12px 0 23px;
+		line-height: normal;
+	}
+
+	._ol-bef,
+	._ul-bef {
+		flex: none;
+		user-select: none;
+	}
+
+	._ul-p1 {
+		display: inline-block;
+		width: 0.3em;
+		height: 0.3em;
+		overflow: hidden;
+		line-height: 0.3em;
+	}
+
+	._ul-p2 {
+		display: inline-block;
+		width: 0.23em;
+		height: 0.23em;
+		border: 0.05em solid black;
+		border-radius: 50%;
+	}
+
+	._q::before {
+		content: '"';
+	}
+
+	._q::after {
+		content: '"';
+	}
+
+	._sub {
+		font-size: smaller;
+		vertical-align: sub;
+	}
+
+	._sup {
+		font-size: smaller;
+		vertical-align: super;
+	}
+
+	/* #ifdef MP-ALIPAY || APP-PLUS || QUICKAPP-WEBVIEW */
+	._abbr,
+	._b,
+	._code,
+	._del,
+	._em,
+	._i,
+	._ins,
+	._label,
+	._q,
+	._span,
+	._strong,
+	._sub,
+	._sup {
+		display: inline;
+	}
+
+	/* #endif */
+
+	/* #ifdef MP-WEIXIN || MP-QQ */
+	.__bdo,
+	.__bdi,
+	.__ruby,
+	.__rt {
+		display: inline-block;
+	}
+
+	/* #endif */
+	._video {
+		position: relative;
+		display: inline-block;
+		width: 300px;
+		height: 225px;
+		background-color: black;
+	}
+
+	._video::after {
+		position: absolute;
+		top: 50%;
+		left: 50%;
+		margin: -15px 0 0 -15px;
+		content: '';
+		border-color: transparent transparent transparent white;
+		border-style: solid;
+		border-width: 15px 0 15px 30px;
+	}
+>>>>>>> 5b465a14bac2c1448cc18a0b08b88844fc895cd5
+</style>

+ 92 - 0
components/navTab.vue

@@ -0,0 +1,92 @@
+<template>
+	<view class="navTabBox">
+		<view class="longTab">
+			<scroll-view scroll-x="true" style="white-space: nowrap; display: flex" scroll-with-animation :scroll-left="tabLeft">
+				<view class="longItem" :style='"width:"+isWidth+"px"' :data-index="index" :class="index===tabClick?'click':''" v-for="(item,index) in tabTitle" :key="index" :id="'id'+index" @click="longClick(index)">{{item}}</view>
+				<view class="underlineBox" :style='"transform:translateX("+isLeft+"px);width:"+isWidth+"px"'>
+					<view class="underline"></view>
+				</view>
+			</scroll-view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'navTab',
+		props: {
+			tabTitle: {
+				type: Array,
+				default: []
+			}
+
+		},
+		data() {
+			return {
+				tabClick: 0, //导航栏被点击
+				isLeft: 0, //导航栏下划线位置
+				isWidth: 0, //每个导航栏占位
+				tabLeft:0
+			};
+		},
+		created() {
+			var that = this
+			// 获取设备宽度
+			uni.getSystemInfo({
+				success(e) {
+					if(that.tabTitle.length<= 5 ){
+						that.isWidth = e.windowWidth / that.tabTitle.length //宽度除以导航标题个数=一个导航所占宽度	
+					} else {
+						that.isWidth = e.windowWidth / 5 
+					}
+				}
+			})
+		},
+		methods: {
+			// 导航栏点击
+			longClick(index){
+				if(this.tabTitle.length>5){
+					var tempIndex = index - 2;
+					tempIndex = tempIndex<=0 ? 0 : tempIndex;
+					this.tabLeft = (index-2) * this.isWidth //设置下划线位置
+				}
+				this.tabClick = index //设置导航点击了哪一个
+				this.isLeft = index * this.isWidth //设置下划线位置
+				this.$emit('changeTab', index);//设置swiper的第几页
+				// this.$parent.currentTab = index //设置swiper的第几页
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.navTabBox {
+		width: 100vw;
+		color: rgba(255, 255, 255, 0.50);
+		.click {
+			color: white;
+		}
+		.longTab {
+			width: 100%;
+			.longItem{ 
+				height: 90upx; 
+				display: inline-block;
+				line-height: 90upx;
+				text-align: center;
+			}
+			.underlineBox {
+				height: 3px;
+				width: 20%;
+				display: flex;
+				align-content: center;
+				justify-content: center;
+				transition: .5s;
+				.underline {
+					width: 84upx;
+					height: 4px;
+					background-color: white;
+				}
+			}
+		}
+	}
+</style>

+ 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>

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

@@ -0,0 +1,240 @@
+<template>
+	<view class="calendar__wrap">
+		<view class="header">
+			<view class="leiji-data">您已累计签到<text class="lj-date-num">{{ allSign }}</text>天</view>
+			<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">{{ dayLoad(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 [];
+			}
+		},
+		allSign: {
+			type: Number,
+			default: '0'
+		},
+		// 选中物品的样式类
+		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);
+		const noDay = ( new Date(year,month-1,1)).getDay();
+		return {
+			year,
+			month,
+			day,
+			dateData,
+			noDay,//本月1号是星期几
+			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: {
+		// 重新计算时间
+		dayLoad: function(value) {
+			return value + 1 - this.noDay;
+		},
+		// 获取当前日期
+		getDate(current) {
+			const date = current ? new Date(current) : new Date();
+			const year = date.getFullYear();
+			// 月份值默认从0开始
+			const month = date.getMonth() + 1;
+			const day = date.getDate();
+			return {
+				year,
+				month,
+				day
+			};
+		},
+		// 日期处理
+		getDateData(year, month) {
+			// 新增月份时需要减少1个月
+			const date = new Date(year,month-1,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 {
+	border-radius: 20rpx;
+	background-color: #fff;
+	color: $uni-text-color;
+	.header {
+		padding: 24rpx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		.leiji-data {
+			font-size: 22rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #999999;
+			.lj-date-num {
+				color: #F85007;
+			}
+		}
+		.current-date {
+			// text-align: center;
+			// font-size: $font-lg + 2rpx;
+			// border-bottom: 2rpx solid #eee;
+			// padding: 32rpx 0;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #333333;
+		}
+	}
+	.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: 20rpx 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: $background-color;
+					color: #fff;
+					font-size: 28rpx;
+				}
+			}
+		}
+	}
+}
+</style>

+ 362 - 0
components/sunui-upimg/sunui-upimg.vue

@@ -0,0 +1,362 @@
+<template>
+	<view class="sunui-uploader-bd">
+		<view class="sunui-uploader-files">
+			<block v-for="(item, index) in upload_before_list" :key="index">
+				<view class="sunui-uploader-file" :class="[item.upload_percent < 100 ? 'sunui-uploader-file-status' : '']" @click="previewImage(index)">
+					<!-- step1.这里修改服务器返回字段 !!! -->
+					<image class="sunui-uploader-img" :style="upload_img_wh" :src="item.path" mode="aspectFill" />
+					<view class="sunui-img-removeicon right" @click.stop="removeImage(index)" v-show="upimg_move">×</view>
+					<view class="sunui-loader-filecontent" v-if="item.upload_percent < 100">{{ item.upload_percent }}%</view>
+				</view>
+			</block>
+			<view v-show="upload_len < upload_count" hover-class="sunui-uploader-hover" class="sunui-uploader-inputbox" @click="chooseImage" :style="upload_img_wh">
+				<view><text class="iconfont icon-mn_shangchuantupian" style="color: #666;"></text></view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			upload_len: 0,
+			upload_cache: [],
+			upload_cache_list: [],
+			upload_before_list: []
+		};
+	},
+	name: 'sunui-upimg',
+	props: {
+		// 服务器url
+		url: {
+			type: String,
+			default: 'https://pt.xsp.cn/api/upload/image'
+		},
+		// 上传样式宽高
+		upload_img_wh: {
+			type: String,
+			default: 'width:162rpx;height:162rpx;'
+		},
+		// 上传数量
+		upload_count: {
+			type: [Number, String],
+			default: 9
+		},
+		// 是否自动上传? 可以先用变量为false然后再改为true即为手动上传
+		upload_auto: {
+			type: Boolean,
+			default: true
+		},
+		// 是否显示删除
+		upimg_move: {
+			type: Boolean,
+			default: true
+		},
+		// 服务器预览图片
+		upimg_preview: {
+			type: Array,
+			default: () => {
+				return [];
+			}
+		},
+		// 服务器返回预览(看服务器卡顿情况设定)
+		upimg_delaytime: {
+			type: [Number, String],
+			default: 300
+		},
+		// 请求头信息
+		header: {
+			type: Object,
+			default: () => {
+				return {
+					"Authori-zation": 'Bearer ' + uni.getStorageSync('token')
+					};
+			}
+		}
+	},
+	async created() {
+		let _self = this;
+		setTimeout(() => {
+			this.upload_before_list = this.upload_before_list.concat(this.upimg_preview);
+			this.upload_len = this.upload_before_list.length;
+			this.upimg_preview.map(item => {
+				// step2.这里修改服务器返回字段 !!!
+				this.upload_cache_list.push(item.path);
+			});
+			this.emit();
+		}, this.upimg_delaytime);
+	},
+	methods: {
+		upImage(paths,header) {
+			let _self = this;
+			console.log(header,5)
+			const promises = paths.map(function(path) {
+				return promisify(upload)({
+					url: _self.url,
+					path: path,
+					name: 'file',
+					extra: header,
+					_self: _self
+				});
+			});
+			uni.showLoading({
+				title: `正在上传...`
+			});
+
+			Promise.all(promises)
+				.then(function(data) {
+					uni.hideLoading();
+					_self.upload_cache_list.push(...data);
+					_self.emit();
+				})
+				.catch(function(res) {
+					uni.hideLoading();
+				});
+		},
+		chooseImage() {
+			let _self = this;
+			uni.chooseImage({
+				count: _self.upload_count - _self.upload_before_list.length,
+				sizeType: ['compressed', 'original'],
+				sourceType: ['album', 'camera'],
+				success: function(res) {
+					for (let i = 0, len = res.tempFiles.length; i < len; i++) {
+						res.tempFiles[i]['upload_percent'] = 0;
+						_self.upload_before_list.push(res.tempFiles[i]);
+					}
+					_self.upload_cache = res.tempFilePaths;
+					_self.upload(_self.upload_auto);
+				},
+				fail: function(err) {
+					console.log(err);
+				}
+			});
+		},
+		async upload(upload_auto) {
+			let _self = this;
+			upload_auto ? await _self.upImage(_self.upload_cache,_self.header) : console.warn(`传输参数:this.$refs.xx.upload(true)才可上传,默认false`);
+		},
+		previewImage(idx) {
+			let _self = this;
+			let preview = [];
+			for (let i = 0, len = _self.upload_before_list.length; i < len; i++) {
+				// step3.这里修改服务器返回字段 !!!
+				preview.push(_self.upload_before_list[i].path);
+			}
+			uni.previewImage({
+				current: idx,
+				urls: preview
+			});
+		},
+		removeImage(idx) {
+			let _self = this;
+			_self.upload_before_list.splice(idx, 1);
+			_self.upload_cache_list.splice(idx, 1);
+			_self.upload_len = _self.upload_before_list.length;
+			_self.emit();
+		},
+		emit() {
+			let _self = this;
+			_self.$emit('change', _self.upload_cache_list);
+		}
+	}
+};
+
+const promisify = api => {
+	return function(options, ...params) {
+		return new Promise(function(resolve, reject) {
+			api(
+				Object.assign({}, options, {
+					success: resolve,
+					fail: reject
+				}),
+				...params
+			);
+		});
+	};
+};
+
+const upload = function(options) {
+	let url = options.url,
+		_self = options._self,
+		path = options.path,
+		name = options.name,
+		// data = options.data,
+		extra = options.extra,
+		success = options.success,
+		progress = options.progress,
+		fail = options.fail;
+
+	const uploadTask = uni.uploadFile({
+		url: url,
+		filePath: path,
+		name: name,
+		formData: extra,
+		success: function(res) {
+			var data = res.data;
+			console.warn('sunui-upimg - 如发现没有获取到返回值请到源码191行修改后端返回图片路径以便正常使用插件', JSON.parse(data));
+			try {
+				//Tip : 切记->主要修改这里图片的返回值为真实返回路径!!! 详情见示例
+				data = JSON.parse(res.data).info;
+			} catch (e) {
+				throw (e, data);
+			}
+			// 根据自己的返回数据做相应判断,服务器返回200即代表成功请求
+			if (res.statusCode == 200) {
+				if (success) {
+					success(data);
+				}
+			} else {
+				if (fail) {
+					fail(data);
+				}
+			}
+		},
+		fail: function(res) {
+			console.log(res);
+			if (fail) {
+				fail(res);
+			}
+		}
+	});
+	uploadTask.onProgressUpdate(async function(res) {
+		for (let i = 0, len = _self.upload_before_list.length; i < len; i++) {
+			_self.upload_before_list[i]['upload_percent'] = await res.progress;
+		}
+		_self.upload_before_list = _self.upload_before_list;
+		_self.upload_len = _self.upload_before_list.length;
+	});
+};
+</script>
+
+<style lang="scss">
+@font-face {
+	font-family: 'iconfont';
+	src: url('//at.alicdn.com/iconfont.eot?t=1574391686418');
+	/* IE9 */
+	src: url('//at.alicdn.com/iconfont.eot?t=1574391686418#iefix') format('embedded-opentype'),
+		/* IE6-IE8 */
+			url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAMkAAsAAAAAB2QAAALYAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCCcAqCYIJEATYCJAMICwYABCAFhG0HPRt3BhEVlCNkH4dxmzUXNsJHc1SNfR9KTkCtiXv/l+QDBQSFRBJdKoEsg60HUgCsOpWVnWxNx3BvVITqkj3fepbtzM/OfDo4D86iFEIiJAeX02+Bh/O84TLmsrEnYBxQoHtgm6xACoxTkN0zFsgEdQynCShpq7cwbsK0eTKROSkgbNu8cbUspRFrkoNMkC9ZGYWjcrJkX/IIR/zPhz/6hIxELmWmzdowfp1RvxdbYWm1VrUMCO54JvDrSNEbkTCv1DJDGvp6S5VUX9SRdSUHfi+u1cBZ7R+PQMgzEyugNcU5J67DO9VfJiCigD042iuNQqXSunGRfvrWV6/mvX49/+3bhW/eLHr4puOFtxMfvO5w9tX8yv7rIbf3Rrl84Mbe66XSzWet46nn/etMuALua5LqNZUqpKdfDKjsv2qef+yambJsTWM2zDtKIQ0pS7msvSTUpn1tNyts2xZmWUyw3LI4bPisSZNyOUc2y4/scfZs3QZ1UcgqUWtkVednsvnVs7NOHzmqglXIBnqU7+/M9Hp3y3L2RLWYA9uhlat61/LGGwVqt9Nvafv/8R2fmg/pu7LesH9ZOYL3/6e3P6Z2O0rbIztra+Dtc1u2RY1vapOocEtDiT0Kd1VUUkIN42joS19Fk1s1BVmKy0OioA2kMp1REdcbcsr6QV5mJJT0MnF9mbQRchZiET29CAT1fSBR1y1I1fdFRdwPcpr6Q179cIaSBaHRjmVdgxFjCSvGFuonmGYcpK1nESRfUC1dRUm+T3ggeeOEOIiywRwHpDHm+FUlzBIkjT1k5DzsuhEmGi02HGjmKQ1DWfaioBn7gzAWQRWGWqD2BIzGaCDRm4nc+y+QsuhUqKaqyviAiGcGB7FA1AKVS4ZWVddyibdSEoxJQCKjHsjIMNTpjMBUPsxCDRbQPTyTVGh1k20lwfyy/un2QYmpTII1I9Vo+1B4XQ2q0QvwvExGfTgA')
+			format('woff2'),
+		url('//at.alicdn.com/iconfont.woff?t=1574391686418') format('woff'), url('//at.alicdn.com/iconfont.ttf?t=1574391686418') format('truetype'),
+		/* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ url('//at.alicdn.com/iconfont.svg?t=1574391686418#iconfont') format('svg');
+	/* iOS 4.1- */
+}
+
+@charset "UTF-8";
+
+.iconfont {
+	font-family: 'iconfont' !important;
+	font-size: 16px;
+	font-style: normal;
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale;
+}
+
+.icon-mn_shangchuantupian {
+	&:before {
+		content: '\e559';
+	}
+	font-size: 3em;
+}
+
+.sunui-uploader-img {
+	display: block;
+}
+
+.sunui-uploader-input {
+	position: absolute;
+	z-index: 1;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	opacity: 0;
+}
+
+.sunui-uploader-inputbox {
+	position: relative;
+	margin-bottom: 16rpx;
+	box-sizing: border-box;
+	background-color: #ededed;
+	display: flex;
+	flex-wrap: wrap;
+	align-items: center;
+	justify-content: center;
+}
+
+.sunui-img-removeicon {
+	position: absolute;
+	color: #fff;
+	width: 40upx;
+	height: 40upx;
+	line-height: 40upx;
+	z-index: 2;
+	text-align: center;
+	background-color: #e54d42;
+
+	&.right {
+		top: 0;
+		right: 0;
+	}
+}
+
+.sunui-uploader-file {
+	position: relative;
+	margin-right: 16rpx;
+	margin-bottom: 16rpx;
+}
+
+.sunui-uploader-file-status:before {
+	content: ' ';
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	background-color: rgba(0, 0, 0, 0.5);
+}
+
+.sunui-loader-filecontent {
+	position: absolute;
+	top: 50%;
+	left: 50%;
+	transform: translate(-50%, -50%);
+	color: #fff;
+	z-index: 9;
+}
+
+.sunui-uploader-bd {
+	padding: 26rpx;
+	margin: 0;
+}
+
+.sunui-uploader-files {
+	display: flex;
+	flex-wrap: wrap;
+}
+
+.sunui-uploader-file:nth-child(4n + 0) {
+	margin-right: 0;
+}
+
+.sunui-uploader-inputbox > view {
+	text-align: center;
+}
+
+.sunui-uploader-file-status:after {
+	content: ' ';
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	background-color: rgba(0, 0, 0, 0.5);
+}
+
+.sunui-uploader-hover {
+	box-shadow: 0 0 0 #e5e5e5;
+	background: #e5e5e5;
+}
+</style>

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

@@ -0,0 +1,1206 @@
+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) {
+                                    // 由于官方还没有统一此接口的输出字段,所以先判定下  支付宝为 res.apFilePath
+                                    if (!empty(res.tempFilePath)) {
+                                        options.cbResult(res.tempFilePath)
+                                    } else if (!empty(res.apFilePath)) {
+                                        options.cbResult(res.apFilePath)
+                                    } else {
+                                        options.cbResult(res.tempFilePath)
+                                    }
+                                }
+                            },
+                            fail: function (res) {
+                                if (options.cbResult) {
+                                    options.cbResult(res)
+                                }
+                            },
+                            complete: function () {
+                                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

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

@@ -0,0 +1,214 @@
+<template xlang="wxml" minapp="mpvue">
+	<view class="tki-qrcode">
+		<canvas class="tki-qrcode-canvas" :canvas-id="cid" :style="{ width: cpSize + 'px', height: cpSize + 'px' }" />
+		<image class="img" 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: 'rpx'
+		},
+		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() {
+			// console.log(this.val,55)
+			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
+				});
+			}
+		},
+		_clearCode() {
+			this._result('');
+			qrcode.clear();
+		},
+		_saveCode() {
+			let that = this;
+			if (this.result != '') {
+				uni.saveImageToPhotosAlbum({
+					filePath: that.result,
+					success: function() {
+						uni.showToast({
+							title: '二维码保存成功',
+							icon: 'none',
+							duration: 2000
+						});
+					}
+				});
+			}
+		},
+		_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) {
+			// console.log(11)
+			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 {
+	height: 100%;
+}
+.tki-qrcode-canvas {
+	position: relative;
+	top: 0rpx;
+	left: -99999rpx;
+	/* z-index: -99999; */
+}
+/* canvas{
+	display: none;
+	} */
+.img {
+	margin-top: -440rpx !important;
+	height: 100%;
+}
+</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>

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

@@ -0,0 +1,193 @@
+<template>
+	<view class="uni-countdown">
+		<text v-if="showDay" :style="{ borderColor: borderColor, width: width, 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, width: width, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ h }}</text>
+		<text :style="{ color: splitorColor }" class="uni-countdown__splitor">{{ showColon ? ':' : '时' }}</text>
+		<text :style="{ borderColor: borderColor, width: width, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ i }}</text>
+		<text :style="{ color: splitorColor }" class="uni-countdown__splitor">{{ showColon ? ':' : '分' }}</text>
+		<text :style="{ borderColor: borderColor, width: width, 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'
+			},
+			width: {
+				type: String,
+				default: '52rpx'
+			},
+			color: {
+				type: String,
+				default: '#000000'
+			},
+			splitorColor: {
+				type: String,
+				default: '#000000'
+			},
+			day: {
+				type: Number,
+				default: 0
+			},
+			hour: {
+				type: Number,
+				default: 0
+			},
+			minute: {
+				type: Number,
+				default: 0
+			},
+			second: {
+				type: Number,
+				default: 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 || 0 ) * 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: 48rpx;
+	$countdown-width: 52rpx;
+
+	.uni-countdown {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		justify-content: flex-start;
+		padding: 2rpx 0;
+	}
+
+	.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;
+		border-radius: 10rpx;
+	}
+</style>

+ 192 - 0
components/uni-countdown/uni-countdowns.vue

@@ -0,0 +1,192 @@
+<template>
+	<view class="uni-countdown">
+		<text v-if="showDay" :style="{ borderColor: borderColor, width: width, 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, width: width, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ h }}</text>
+		<text :style="{ color: splitorColor }" class="uni-countdown__splitor">{{ showColon ? ':' : '时' }}</text>
+		<text :style="{ borderColor: borderColor, width: width, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ i }}</text>
+		<text :style="{ color: splitorColor }" class="uni-countdown__splitor">{{ showColon ? ':' : '分' }}</text>
+		<text :style="{ borderColor: borderColor, width: width, 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: 'UniCountdowns',
+		props: {
+			showDay: {
+				type: Boolean,
+				default: true
+			},
+			showColon: {
+				type: Boolean,
+				default: true
+			},
+			backgroundColor: {
+				type: String,
+				default: '#FFFFFF'
+			},
+			borderColor: {
+				type: String,
+				default: '#000000'
+			},
+			width: {
+				type: String,
+				default: '52rpx'
+			},
+			color: {
+				type: String,
+				default: '#000000'
+			},
+			splitorColor: {
+				type: String,
+				default: '#000000'
+			},
+			day: {
+				type: Number,
+				default: 0
+			},
+			hour: {
+				type: Number,
+				default: 0
+			},
+			minute: {
+				type: Number,
+				default: 0
+			},
+			second: {
+				type: Number,
+				default: 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 || 0 ) * 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: 48rpx;
+	$countdown-width: 52rpx;
+
+	.uni-countdown {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		justify-content: flex-start;
+		padding: 2rpx 0;
+	}
+
+	.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>

+ 229 - 0
components/uni-drawer/uni-drawer-all.vue

@@ -0,0 +1,229 @@
+<template>
+	<view v-if="visibleSync" :class="{ 'uni-drawer--visible': showDrawer }" class="uni-drawer">
+		<view class="uni-drawer__mask" :class="{ 'uni-drawer__mask--visible': showDrawer && mask }" @tap="close" />
+		<view class="uni-drawer__content" :class="{ 'uni-drawer--right': rightMode, 'uni-drawer--left': !rightMode, 'uni-drawer__content--visible': showDrawer }">
+			<view class="content">
+				<view class="item" v-for="ls in relist">
+					<view class="content_box" :class="{ active: ls.id == checkid }"  @click="change(ls)">{{ls.name}}</view>
+					<view v-if="ls.id == checkid" class="content_img"><image src="/static/xpy/023.png"></image></view>
+					<view v-else></view>
+				</view>
+			</view>
+			<view class="submit" @click="submit()">确定</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'UniDrawer',
+	props: {
+		/**
+		 * 显示状态
+		 */
+		visible: {
+			type: Boolean,
+			default: false
+		},
+		/**
+		 * 显示模式(左、右),只在初始化生效
+		 */
+		mode: {
+			type: String,
+			default: 'right'
+		},
+		/**
+		 * 蒙层显示状态
+		 */
+		mask: {
+			type: Boolean,
+			default: true
+		}
+		
+	},
+	data() {
+		return {
+			visibleSync: false,
+			showDrawer: false,
+			rightMode: false,
+			watchTimer: null,
+			show:false,
+			checkid:1,
+			value:'',
+			relist:[
+				{
+					id:1,
+					name:'产品成本收益'
+				},{
+					id:2,
+					name:'产品利润收益'
+				},{
+					id:3,
+					name:'推荐加盟商'
+				},{
+					id:4,
+					name:'总部发放'
+				},{
+					id:5,
+					name:'退款'
+				},{
+					id:'',
+					name:'全部'
+				}]
+		};
+	},
+	watch: {
+		visible(val) {
+			if (val) {
+				this.open();
+			} else {
+				this.close();
+			}
+		}
+	},
+	created() {
+		this.visibleSync = this.visible;
+		setTimeout(() => {
+			this.showDrawer = this.visible;
+		}, 100);
+		this.rightMode = this.mode === 'right';
+	},
+	methods: {
+		change(ls){
+		  this.checkid = ls.id;
+		  this.value  = ls.name;
+		  console.log(this.checkid,this.value,77)
+		},
+		submit(){
+			this.close();
+			// console.log(this.value,this.checkid,66)
+			 this.$emit('getMessage', this.value,this.checkid)
+		},
+		close() {
+			this._change('showDrawer', 'visibleSync', false);
+		},
+		open() {
+			this._change('visibleSync', 'showDrawer', true);
+		},
+		_change(param1, param2, status) {
+			this[param1] = status;
+			if (this.watchTimer) {
+				clearTimeout(this.watchTimer);
+			}
+			this.watchTimer = setTimeout(
+				() => {
+					this[param2] = status;
+					this.$emit(status ? 'open' : 'close');
+				},
+				status ? 50 : 300
+			);
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+// 抽屉宽度
+$drawer-width: 220px;
+.uni-drawer {
+	/* #ifndef APP-NVUE */
+	display: block;
+	/* #endif */
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	overflow: hidden;
+	z-index: 999;
+}
+
+.uni-drawer__content {
+	/* #ifndef APP-NVUE */
+	display: block;
+	/* #endif */
+	position: absolute;
+	top: 0;
+	width: $drawer-width;
+	bottom: 0;
+	background-color: $uni-bg-color;
+	transition: transform 0.3s ease;
+	padding: 100rpx 0rpx;
+}
+.content {
+	font-size: 30rpx;
+	color: #333333;
+}
+.item{
+	display: inline-block;
+}
+.content_box{
+	border: 2rpx solid #CCCCCC;
+	padding: 15rpx 0rpx;
+	margin-bottom: 30rpx;
+	width: 190rpx;
+	border-radius: 10rpx;
+	display: inline-block;
+	margin-right: 10rpx;
+	margin-left: 15rpx;
+}
+.content_img{
+	position: absolute;
+	margin-top: -65rpx;
+	margin-left: 155rpx;
+}
+.content_img image{
+	width: 50rpx;
+	height: 35rpx;
+}
+.submit{
+	font-size: 30rpx;
+	color: #FFFFFF;
+	background:linear-gradient(90deg,rgba(253,59,51,1) 0%,rgba(254,75,52,1) 100%);
+	box-shadow:0px 0px 10px 1px rgba(235,37,27,0.3);
+	border-radius:10px;
+	width: 83%;
+	margin: 50rpx auto;
+	padding: 20rpx 0rpx;
+}
+.uni-drawer--left {
+	left: 0;
+	transform: translateX(-$drawer-width);
+}
+
+.uni-drawer--right {
+	right: 0;
+	transform: translateX($drawer-width);
+}
+
+.uni-drawer__content--visible {
+	transform: translateX(0px);
+}
+
+.uni-drawer__mask {
+	/* #ifndef APP-NVUE */
+	display: block;
+	/* #endif */
+	opacity: 0;
+	position: absolute;
+	top: 0;
+	left: 0;
+	bottom: 0;
+	right: 0;
+	background-color: $uni-bg-color-mask;
+	transition: opacity 0.3s;
+}
+
+.uni-drawer__mask--visible {
+	/* #ifndef APP-NVUE */
+	display: block;
+	/* #endif */
+	opacity: 1;
+}
+.active{
+	background-color: #FDF2F0;
+	color:#FC2A3F ;
+	border: 2rpx solid #FC2A3F;
+}
+</style>

+ 223 - 0
components/uni-drawer/uni-drawer.vue

@@ -0,0 +1,223 @@
+<template>
+	<view v-if="visibleSync" :class="{ 'uni-drawer--visible': showDrawer }" class="uni-drawer">
+		<view class="uni-drawer__mask" :class="{ 'uni-drawer__mask--visible': showDrawer && mask }" @tap="close" />
+		<view class="uni-drawer__content" :class="{ 'uni-drawer--right': rightMode, 'uni-drawer--left': !rightMode, 'uni-drawer__content--visible': showDrawer }">
+			<view class="content">
+				<view class="item" v-for="ls in relist">
+					<view class="content_box" :class="{ active: ls.id == checkid }"  @click="change(ls)">{{ls.name}}</view>
+					<view v-if="ls.id == checkid" class="content_img"><image src="/static/xpy/023.png"></image></view>
+					<view v-else></view>
+				</view>
+			</view>
+			<view class="submit" @click="submit()">确定</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'UniDrawer',
+	props: {
+		/**
+		 * 显示状态
+		 */
+		visible: {
+			type: Boolean,
+			default: false
+		},
+		/**
+		 * 显示模式(左、右),只在初始化生效
+		 */
+		mode: {
+			type: String,
+			default: 'right'
+		},
+		/**
+		 * 蒙层显示状态
+		 */
+		mask: {
+			type: Boolean,
+			default: true
+		}
+		
+	},
+	data() {
+		return {
+			visibleSync: false,
+			showDrawer: false,
+			rightMode: false,
+			watchTimer: null,
+			show:false,
+			checkid:1,
+			value:'',
+			relist:[
+				{
+					id:1,
+					name:'产品成本'
+				},{
+					id:2,
+					name:'其他 '
+				},{
+					id:3,
+					name:'返款	'
+				},{
+					id:'',
+					name:'全部	'
+				}]
+		};
+	},
+	watch: {
+		visible(val) {
+			if (val) {
+				this.open();
+			} else {
+				this.close();
+			}
+		}
+	},
+	created() {
+		this.visibleSync = this.visible;
+		setTimeout(() => {
+			this.showDrawer = this.visible;
+		}, 100);
+		this.rightMode = this.mode === 'right';
+	},
+	methods: {
+		change(ls){
+		  this.checkid = ls.id;
+		  this.value  = ls.name;
+		  console.log(this.checkid,this.value,77)
+		},
+		submit(){
+			this.close();
+			// console.log(this.value,this.checkid,66)
+			 this.$emit('getMessage', this.value,this.checkid)
+		},
+		close() {
+			this._change('showDrawer', 'visibleSync', false);
+		},
+		open() {
+			this._change('visibleSync', 'showDrawer', true);
+		},
+		_change(param1, param2, status) {
+			this[param1] = status;
+			if (this.watchTimer) {
+				clearTimeout(this.watchTimer);
+			}
+			this.watchTimer = setTimeout(
+				() => {
+					this[param2] = status;
+					this.$emit(status ? 'open' : 'close');
+				},
+				status ? 50 : 300
+			);
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+// 抽屉宽度
+$drawer-width: 220px;
+.uni-drawer {
+	/* #ifndef APP-NVUE */
+	display: block;
+	/* #endif */
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	overflow: hidden;
+	z-index: 999;
+}
+
+.uni-drawer__content {
+	/* #ifndef APP-NVUE */
+	display: block;
+	/* #endif */
+	position: absolute;
+	top: 0;
+	width: $drawer-width;
+	bottom: 0;
+	background-color: $uni-bg-color;
+	transition: transform 0.3s ease;
+	padding: 100rpx 0rpx;
+}
+.content {
+	font-size: 30rpx;
+	color: #333333;
+}
+.item{
+	display: inline-block;
+}
+.content_box{
+	border: 2rpx solid #CCCCCC;
+	padding: 15rpx 0rpx;
+	margin-bottom: 30rpx;
+	width: 190rpx;
+	border-radius: 10rpx;
+	display: inline-block;
+	margin-right: 10rpx;
+	margin-left: 15rpx;
+}
+.content_img{
+	position: absolute;
+	margin-top: -65rpx;
+	margin-left: 155rpx;
+}
+.content_img image{
+	width: 50rpx;
+	height: 35rpx;
+}
+.submit{
+	font-size: 30rpx;
+	color: #FFFFFF;
+	background:linear-gradient(90deg,rgba(253,59,51,1) 0%,rgba(254,75,52,1) 100%);
+	box-shadow:0px 0px 10px 1px rgba(235,37,27,0.3);
+	border-radius:10px;
+	width: 83%;
+	margin: 50rpx auto;
+	padding: 20rpx 0rpx;
+}
+.uni-drawer--left {
+	left: 0;
+	transform: translateX(-$drawer-width);
+}
+
+.uni-drawer--right {
+	right: 0;
+	transform: translateX($drawer-width);
+}
+
+.uni-drawer__content--visible {
+	transform: translateX(0px);
+}
+
+.uni-drawer__mask {
+	/* #ifndef APP-NVUE */
+	display: block;
+	/* #endif */
+	opacity: 0;
+	position: absolute;
+	top: 0;
+	left: 0;
+	bottom: 0;
+	right: 0;
+	background-color: $uni-bg-color-mask;
+	transition: opacity 0.3s;
+}
+
+.uni-drawer__mask--visible {
+	/* #ifndef APP-NVUE */
+	display: block;
+	/* #endif */
+	opacity: 1;
+}
+.active{
+	background-color: #FDF2F0;
+	color:#FC2A3F ;
+	border: 2rpx solid #FC2A3F;
+}
+</style>

+ 124 - 0
components/uni-fav/uni-fav.vue

@@ -0,0 +1,124 @@
+<template>
+	<view :class="[circle === true || circle === 'true' ? 'uni-fav--circle' : '']" :style="[{ backgroundColor: checked ? bgColorChecked : bgColor }]"
+	 @click="onClick" class="uni-fav">
+		<!-- #ifdef MP-ALIPAY -->
+		<view class="uni-fav-star" v-if="!checked && (star === true || star === 'true')">
+			<uni-icons :color="fgColor" :style="{color: checked ? fgColorChecked : fgColor}" size="14" type="star-filled" />
+		</view>
+		<!-- #endif -->
+		<!-- #ifndef MP-ALIPAY -->
+		<uni-icons :color="fgColor" :style="{color: checked ? fgColorChecked : fgColor}" class="uni-fav-star" size="14" type="star-filled"
+		 v-if="!checked && (star === true || star === 'true')" />
+		<!-- #endif -->
+		<text :style="{color: checked ? fgColorChecked : fgColor}" class="uni-fav-text">{{ checked ? contentText.contentFav : contentText.contentDefault }}</text>
+	</view>
+</template>
+
+<script>
+	import uniIcons from "../uni-icons/uni-icons.vue";
+	export default {
+		name: "UniFav",
+		components: {
+			uniIcons
+		},
+		props: {
+			star: {
+				type: [Boolean, String],
+				default: true
+			},
+			bgColor: {
+				type: String,
+				default: "#eeeeee"
+			},
+			fgColor: {
+				type: String,
+				default: "#666666"
+			},
+			bgColorChecked: {
+				type: String,
+				default: "#007aff"
+			},
+			fgColorChecked: {
+				type: String,
+				default: "#FFFFFF"
+			},
+			circle: {
+				type: [Boolean, String],
+				default: false
+			},
+			checked: {
+				type: Boolean,
+				default: false
+			},
+			contentText: {
+				type: Object,
+				default () {
+					return {
+						contentDefault: "收藏",
+						contentFav: "已收藏"
+					};
+				}
+			}
+		},
+		watch: {
+			checked() {
+				if (uni.report) {
+					if (this.checked) {
+						uni.report("收藏", "收藏");
+					} else {
+						uni.report("取消收藏", "取消收藏");
+					}
+				}
+			}
+		},
+		methods: {
+			onClick() {
+				this.$emit("click");
+			}
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	$fav-height: 25px;
+
+	.uni-fav {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		align-items: center;
+		justify-content: center;
+		width: 60px;
+		height: $fav-height;
+		line-height: $fav-height;
+		text-align: center;
+		border-radius: 3px;
+	}
+
+	.uni-fav--circle {
+		border-radius: 30px;
+	}
+
+	.uni-fav-star {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		height: $fav-height;
+		line-height: 24px;
+		margin-right: 3px;
+		align-items: center;
+		justify-content: center;
+	}
+
+	.uni-fav-text {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		height: $fav-height;
+		line-height: $fav-height;
+		align-items: center;
+		justify-content: center;
+		font-size: $uni-font-size-base;
+	}
+</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'
+}

ファイルの差分が大きいため隠しています
+ 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 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默认大小
+	switch{
+		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">
+				<view :style="{background:color}"></view>
+				<view :style="{background:color}"></view>
+				<view :style="{background:color}"></view>
+				<view :style="{background:color}"></view>
+			</view>
+			<view class="load2">
+				<view :style="{background:color}"></view>
+				<view :style="{background:color}"></view>
+				<view :style="{background:color}"></view>
+				<view :style="{background:color}"></view>
+			</view>
+			<view class="load3">
+				<view :style="{background:color}"></view>
+				<view :style="{background:color}"></view>
+				<view :style="{background:color}"></view>
+				<view :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>view {
+		position: absolute
+	}
+
+	.uni-load-more__img>view view {
+		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>view view:nth-child(1) {
+		transform: rotate(90deg);
+		top: 2px;
+		left: 9px
+	}
+
+	.uni-load-more__img>view view:nth-child(2) {
+		transform: rotate(180deg);
+		top: 11px;
+		right: 0
+	}
+
+	.uni-load-more__img>view view:nth-child(3) {
+		transform: rotate(270deg);
+		bottom: 2px;
+		left: 9px
+	}
+
+	.uni-load-more__img>view view:nth-child(4) {
+		top: 11px;
+		left: 0
+	}
+
+	.load1,
+	.load2,
+	.load3 {
+		height: 24px;
+		width: 24px
+	}
+
+	.load2 {
+		transform: rotate(30deg)
+	}
+
+	.load3 {
+		transform: rotate(60deg)
+	}
+
+	.load1 view:nth-child(1) {
+		animation-delay: 0s
+	}
+
+	.load2 view:nth-child(1) {
+		animation-delay: .13s
+	}
+
+	.load3 view:nth-child(1) {
+		animation-delay: .26s
+	}
+
+	.load1 view:nth-child(2) {
+		animation-delay: .39s
+	}
+
+	.load2 view:nth-child(2) {
+		animation-delay: .52s
+	}
+
+	.load3 view:nth-child(2) {
+		animation-delay: .65s
+	}
+
+	.load1 view:nth-child(3) {
+		animation-delay: .78s
+	}
+
+	.load2 view:nth-child(3) {
+		animation-delay: .91s
+	}
+
+	.load3 view:nth-child(3) {
+		animation-delay: 1.04s
+	}
+
+	.load1 view:nth-child(4) {
+		animation-delay: 1.17s
+	}
+
+	.load2 view:nth-child(4) {
+		animation-delay: 1.3s
+	}
+
+	.load3 view:nth-child(4) {
+		animation-delay: 1.43s
+	}
+
+	@-webkit-keyframes load {
+		0% {
+			opacity: 1
+		}
+
+		100% {
+			opacity: .2
+		}
+	}
+</style>

+ 224 - 0
components/uni-nav-bar/uni-nav-bar.vue

@@ -0,0 +1,224 @@
+<template>
+	<view class="uni-navbar">
+		<view :class="{ 'uni-navbar--fixed': fixed, 'uni-navbar--shadow': shadow, 'uni-navbar--border': border }" :style="{ 'background-color': backgroundColor }"
+		 class="uni-navbar__content">
+			<uni-status-bar v-if="statusBar" />
+			<view :style="{ color: color,backgroundColor: backgroundColor }" class="uni-navbar__header uni-navbar__content_view">
+				<view @tap="onClickLeft" class="uni-navbar__header-btns uni-navbar__header-btns-left uni-navbar__content_view">
+					<view class="uni-navbar__content_view" v-if="leftIcon.length">
+						<uni-icons :color="color" :type="leftIcon" size="24" />
+					</view>
+					<view :class="{ 'uni-navbar-btn-icon-left': !leftIcon.length }" class="uni-navbar-btn-text uni-navbar__content_view"
+					 v-if="leftText.length">
+						<text :style="{ color: color, fontSize: '14px' }">{{ leftText }}</text>
+					</view>
+					<slot name="left" />
+				</view>
+				<view class="uni-navbar__header-container uni-navbar__content_view">
+					<view class="uni-navbar__header-container-inner uni-navbar__content_view" v-if="title.length">
+						<text class="uni-nav-bar-text" :style="{color: color }">{{ title }}</text>
+					</view>
+					<!-- 标题插槽 -->
+					<slot />
+				</view>
+				<view :class="title.length ? 'uni-navbar__header-btns-right' : ''" @tap="onClickRight" class="uni-navbar__header-btns uni-navbar__content_view">
+					<view class="uni-navbar__content_view" v-if="rightIcon.length">
+						<uni-icons :color="color" :type="rightIcon" size="24" />
+					</view>
+					<!-- 优先显示图标 -->
+					<view class="uni-navbar-btn-text uni-navbar__content_view" v-if="rightText.length && !rightIcon.length">
+						<text class="uni-nav-bar-right-text">{{ rightText }}</text>
+					</view>
+					<slot name="right" />
+				</view>
+			</view>
+		</view>
+		<view class="uni-navbar__placeholder" v-if="fixed">
+			<uni-status-bar v-if="statusBar" />
+			<view class="uni-navbar__placeholder-view" />
+		</view>
+	</view>
+</template>
+
+<script>
+	import uniStatusBar from "../uni-status-bar/uni-status-bar.vue";
+	import uniIcons from "../uni-icons/uni-icons.vue";
+
+	export default {
+		name: "UniNavBar",
+		components: {
+			uniStatusBar,
+			uniIcons
+		},
+		props: {
+			title: {
+				type: String,
+				default: ""
+			},
+			leftText: {
+				type: String,
+				default: ""
+			},
+			rightText: {
+				type: String,
+				default: ""
+			},
+			leftIcon: {
+				type: String,
+				default: ""
+			},
+			rightIcon: {
+				type: String,
+				default: ""
+			},
+			fixed: {
+				type: [Boolean, String],
+				default: false
+			},
+			color: {
+				type: String,
+				default: "#000000"
+			},
+			backgroundColor: {
+				type: String,
+				default: "#FFFFFF"
+			},
+			statusBar: {
+				type: [Boolean, String],
+				default: false
+			},
+			shadow: {
+				type: [String, Boolean],
+				default: false
+			},
+			border: {
+				type: [String, Boolean],
+				default: true
+			}
+		},
+        mounted() {
+          if(uni.report && this.title !== '') {
+              uni.report('title', this.title)
+          }
+        },
+		methods: {
+			onClickLeft() {
+				this.$emit("clickLeft");
+			},
+			onClickRight() {
+				this.$emit("clickRight");
+			}
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	$nav-height: 44px;
+	.uni-nav-bar-text {
+		/* #ifdef APP-PLUS */
+		font-size: 34rpx;
+		/* #endif */
+		/* #ifndef APP-PLUS */
+		font-size: $uni-font-size-lg;
+		/* #endif */
+	}
+	.uni-nav-bar-right-text {
+		font-size: $uni-font-size-base;
+	}
+
+	.uni-navbar {
+		width: 750rpx;
+	}
+
+	.uni-navbar__content {
+		position: relative;
+		width: 750rpx;
+		background-color: $uni-bg-color;
+		overflow: hidden;
+	}
+
+	.uni-navbar__content_view {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		align-items: center;
+		flex-direction: row;
+		// background-color: #FFFFFF;
+	}
+
+	.uni-navbar__header {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		width: 750rpx;
+		height: $nav-height;
+		line-height: $nav-height;
+		font-size: 16px;
+		// background-color: #ffffff;
+	}
+
+	.uni-navbar__header-btns {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-wrap: nowrap;
+		width: 120rpx;
+		padding: 0 6px;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.uni-navbar__header-btns-left {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		width: 150rpx;
+		justify-content: flex-start;
+	}
+
+	.uni-navbar__header-btns-right {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		width: 150rpx;
+		padding-right: 30rpx;
+		justify-content: flex-end;
+	}
+
+	.uni-navbar__header-container {
+		flex: 1;
+	}
+
+	.uni-navbar__header-container-inner {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex: 1;
+		align-items: center;
+		justify-content: center;
+		font-size: $uni-font-size-base;
+	}
+
+
+	.uni-navbar__placeholder-view {
+		height: $nav-height;
+	}
+
+	.uni-navbar--fixed {
+		position: fixed;
+		z-index: 998;
+	}
+
+	.uni-navbar--shadow {
+		/* #ifndef APP-NVUE */
+		box-shadow: 0 1px 6px #ccc;
+		/* #endif */
+	}
+
+	.uni-navbar--border {
+		border-bottom-width: 1rpx;
+		border-bottom-style: solid;
+		border-bottom-color: $uni-border-color;
+	}
+</style>

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

@@ -0,0 +1,396 @@
+<template>
+	<view v-if="show" class="uni-noticebar" :style="{ backgroundColor: backgroundColor }" @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: 6px 12px;
+		margin-bottom: 10px;
+	}
+
+	.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: 14px;
+		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>

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

@@ -0,0 +1,202 @@
+<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: 70rpx;
+		background:#FFFFFF;
+		border:1px solid #cfcfcf;
+		border-radius:4px;
+	}
+
+	.uni-numbox-minus,
+	.uni-numbox-plus {
+		margin: 0;
+		background-color: #F6F6F6;
+		width: 70rpx;
+		height: 100%;
+		line-height: 70rpx;
+		text-align: center;
+		position: relative;
+		display: flex;
+		align-items:center;
+		justify-content: center;
+	}
+	.uni-numbox-minus .yticon,
+	.uni-numbox-plus .yticon{
+		font-size: 36rpx;
+		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;
+		text-align: center;
+		padding: 0;
+		font-size: 18rpx;
+	}
+
+	.uni-numbox-disabled.iconfont {
+		color: #d6d6d6;
+	}
+</style>

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

@@ -0,0 +1,265 @@
+<template>
+	<view v-if="showPopup" class="uni-popup" @touchmove.stop.prevent="clear" @click="onTap">
+		<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() {
+				let obj = this;
+				obj.showPopup = true
+				obj.$nextTick(() => {
+					clearTimeout(obj.timer)
+					obj.timer = setTimeout(() => {
+						obj.showTrans = true
+					}, 50);
+				})
+				obj.$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 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: rgba(0, 0, 0, 0.4);
+		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>

+ 313 - 0
components/uni-popup/uni-popup_moments.vue

@@ -0,0 +1,313 @@
+<template>
+	<view v-if="showPopup" class="uni-popup" @touchmove.stop.prevent="clear">
+		<uni-transition :mode-class="['fade']" :styles="maskClass" :show="showTrans" @click="onTap" />
+		<uni-transition :mode-class="ani" :styles="transClass" :show="showTrans" @click="onTap">
+			<view class="uni-popup__wrapper-box" @click.stop="clear">
+				<view class="uni-popup_mask">
+					<view class="popup_text" @click="onTap">
+					    <image src="https://37shop.liuniu946.com/front/img/img31.jpg"></image>
+						<view class="text">{{illustrate}}</view>
+					</view>
+				</view>
+			</view>
+		</uni-transition>
+	</view>
+</template>
+<script>
+	import uniTransition from '../uni-transition/uni-transition.vue'
+	export default {
+		name: 'Popup',
+		components: {
+			uniTransition
+		},
+		props: {
+			// 开启动画
+			animation: {
+				type: Boolean,
+				default: true
+			},
+			// 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
+			type: {
+				type: String,
+				default: 'center'
+			},
+			// maskClick
+			maskClick: {
+				type: Boolean,
+				default: true
+			},
+		},
+		data() {
+			return {
+				ani: [],
+				showPopup: false,
+				illustrate:'',
+				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() {},
+		methods: {
+			
+			clear(e) {
+				// TODO nvue 取消冒泡
+				// console.log("取消冒泡")
+				e.stopPropagation()
+			},
+			open(item) {
+				console.log(item,55)
+				this.illustrate = item;
+				this.showPopup = true
+				this.$nextTick(() => {
+					setTimeout(() => {
+						this.showTrans = true
+					}, 50);
+				})
+				this.$emit('change', {
+					show: true
+				})
+			},
+			close(type) {
+				// console.log("取消冒泡111")
+				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;
+	}
+	.uni-popup_mask{
+		padding: 55rpx 35rpx;
+		// background: #FFFFFF;
+		width: 100%;
+		// border-radius: 15rpx;
+		.popup_list{
+			font-size: 45rpx;
+			text-align: center;
+			color: #2D2D2D;
+			padding-bottom: 55rpx;
+			// font-weight: 800;
+		}
+		.popup_text{
+			font-size: 45rpx !important;
+			color: #FFFFFF;
+			background: #FFFFFF;
+			padding-bottom: 25rpx;
+			text-align: left;
+			border-radius: 15rpx;
+			width: 600rpx;
+			.text{
+				padding: 0rpx 45rpx;
+				font-size: 28rpx;
+				overflow: auto;
+				color: #333;
+				margin-top: .58rem;
+				line-height: 1.5;
+				height: 500rpx;
+				
+			}
+			image{
+				width: 100%;
+				height: 300rpx;
+				border-radius: 15rpx;
+			}
+			.popup_image{
+				width: 40rpx;
+				height: 40rpx;
+				margin-right: 25rpx;
+				image{
+					width: 100%;
+					height: 100%;
+				}
+			}
+		}
+		.popup_button{
+			margin-top: 35rpx;
+			.button_action{
+				color: #BC253A;
+				border: 2rpx solid #BC253A;
+				width: 250rpx;
+				text-align: center;
+				margin-right: 25rpx;
+				padding: 15rpx 0rpx;
+				border-radius: 15rpx;
+			}
+			.submit{
+				background: #BC253A !important;
+				color: #FFFFFF !important;
+			}
+		}
+	}
+</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>

+ 25 - 0
components/uni-status-bar/uni-status-bar.vue

@@ -0,0 +1,25 @@
+<template>
+	<view :style="{ height: statusBarHeight }" class="uni-status-bar">
+		<slot />
+	</view>
+</template>
+
+<script>
+	var statusBarHeight = uni.getSystemInfoSync().statusBarHeight + 'px'
+	export default {
+		name: 'UniStatusBar',
+		data() {
+			return {
+				statusBarHeight: statusBarHeight
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.uni-status-bar {
+		width: 750rpx;
+		height: 20px;
+		// height: var(--status-bar-height);
+	}
+</style>

+ 244 - 0
components/uni-steps/uni-steps.vue

@@ -0,0 +1,244 @@
+<template>
+	<view class="uni-steps">
+		<view :class="[direction==='column'?'uni-steps__column':'uni-steps__row']">
+			<view :class="[direction==='column'?'uni-steps__column-text-container':'uni-steps__row-text-container']">
+				<view v-for="(item,index) in options" :key="index" :class="[direction==='column'?'uni-steps__column-text':'uni-steps__row-text']">
+					<text :style="{color:index<=active?activeColor:deactiveColor}" :class="[direction==='column'?'uni-steps__column-title':'uni-steps__row-title']">{{item.status}}</text>
+					<text :style="{color:index<=active?activeColor:deactiveColor}" :class="[direction==='column'?'uni-steps__column-desc':'uni-steps__row-desc']">{{item.context}}</text>
+					<text :style="{color:index<=active?activeColor:deactiveColor}" :class="[direction==='column'?'uni-steps__column-desc':'uni-steps__row-desc']">{{item.time}}</text>
+				</view>
+			</view>
+			<view :class="[direction==='column'?'uni-steps__column-container':'uni-steps__row-container']">
+				<view :class="[direction==='column'?'uni-steps__column-line-item':'uni-steps__row-line-item']" v-for="(item,index) in options"
+				 :key="index">
+					<view :class="[direction==='column'?'uni-steps__column-line':'uni-steps__row-line',direction==='column'?'uni-steps__column-line--before':'uni-steps__row-line--before']"
+					 :style="{backgroundColor:index<=active&&index!==0?activeColor:index===0?'transparent':deactiveColor}"></view>
+					<view :class="[direction==='column'?'uni-steps__column-check':'uni-steps__row-check']" v-if="index === active">
+						<uni-icons :color="activeColor" type="checkbox-filled" size="14"></uni-icons>
+					</view>
+					<view :class="[direction==='column'?'uni-steps__column-circle':'uni-steps__row-circle']" v-else :style="{backgroundColor:index<active?activeColor:deactiveColor}"></view>
+					<view :class="[direction==='column'?'uni-steps__column-line':'uni-steps__row-line',direction==='column'?'uni-steps__column-line--after':'uni-steps__row-line--after']"
+					 :style="{backgroundColor:index<active&&index!==options.length-1?activeColor:index===options.length-1?'transparent':deactiveColor}"></view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import uniIcons from '../uni-icons/uni-icons.vue'
+	export default {
+		name: 'UniSteps',
+		components: {
+			uniIcons
+		},
+		props: {
+			direction: {
+				// 排列方向 row column
+				type: String,
+				default: 'row'
+			},
+			activeColor: {
+				// 激活状态颜色
+				type: String,
+				default: '#1aad19'
+			},
+			deactiveColor: {
+				// 未激活状态颜色
+				type: String,
+				default: '#999999'
+			},
+			active: {
+				// 当前步骤
+				type: Number,
+				default: 0
+			},
+			options: {
+				type: Array,
+				default () {
+					return []
+				}
+			} // 数据
+		},
+		data() {
+			return {}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.uni-steps {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		width: 100%;
+		/* #endif */
+		/* #ifdef APP-NVUE */
+		flex: 1;
+		/* #endif */
+		flex-direction: column;
+	}
+
+	.uni-steps__row {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: column;
+	}
+
+	.uni-steps__column {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row-reverse;
+	}
+
+	.uni-steps__row-text-container {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+	}
+
+	.uni-steps__column-text-container {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: column;
+		flex: 1;
+	}
+
+	.uni-steps__row-text {
+		/* #ifndef APP-NVUE */
+		display: inline-flex;
+		/* #endif */
+		flex: 1;
+		flex-direction: column;
+	}
+
+	.uni-steps__column-text {
+		padding: 6px 0px;
+		border-bottom-style: solid;
+		border-bottom-width: 1px;
+		border-bottom-color: $uni-border-color;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: column;
+	}
+
+	.uni-steps__row-title {
+		font-size: $uni-font-size-base;
+		line-height: 16px;
+		text-align: center;
+	}
+
+	.uni-steps__column-title {
+		font-size: $uni-font-size-base;
+		text-align: left;
+		line-height: 18px;
+	}
+
+	.uni-steps__row-desc {
+		font-size: 12px;
+		line-height: 14px;
+		text-align: center;
+	}
+
+	.uni-steps__column-desc {
+		font-size: $uni-font-size-sm;
+		text-align: left;
+		line-height: 18px;
+	}
+
+	.uni-steps__row-container {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+	}
+
+	.uni-steps__column-container {
+		/* #ifndef APP-NVUE */
+		display: inline-flex;
+		/* #endif */
+		width: 30px;
+		flex-direction: column;
+	}
+
+	.uni-steps__row-line-item {
+		/* #ifndef APP-NVUE */
+		display: inline-flex;
+		/* #endif */
+		flex-direction: row;
+		flex: 1;
+		height: 14px;
+		line-height: 14px;
+		align-items: center;
+		justify-content: center;
+	}
+
+	.uni-steps__column-line-item {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: column;
+		flex: 1;
+		align-items: center;
+		justify-content: center;
+	}
+
+	.uni-steps__row-line {
+		flex: 1;
+		height: 1px;
+		background-color: $uni-text-color-grey;
+	}
+
+	.uni-steps__column-line {
+		width: 1px;
+		background-color: $uni-text-color-grey;
+	}
+
+	.uni-steps__row-line--after {
+		transform: translateX(1px);
+	}
+
+	.uni-steps__column-line--after {
+		flex: 1;
+		transform: translate(0px, 1px);
+	}
+
+	.uni-steps__row-line--before {
+		transform: translateX(-1px);
+	}
+
+	.uni-steps__column-line--before {
+		height: 6px;
+		transform: translate(0px, -1px);
+	}
+
+	.uni-steps__row-circle {
+		width: 5px;
+		height: 5px;
+		border-radius: 100px;
+		background-color: $uni-text-color-grey;
+		margin: 0px 3px;
+	}
+
+	.uni-steps__column-circle {
+		width: 5px;
+		height: 5px;
+		border-radius: 100px;
+		background-color: $uni-text-color-grey;
+		margin: 4px 0px 5px 0px;
+	}
+
+	.uni-steps__row-check {
+		margin: 0px 6px;
+	}
+
+	.uni-steps__column-check {
+		height: 14px;
+		line-height: 14px;
+		margin: 2px 0px;
+	}
+</style>

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

@@ -0,0 +1,262 @@
+<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
+	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() {
+				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) {
+				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]} `
+					}
+				}
+				clearTimeout(this.timer)
+				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>

+ 12542 - 0
components/w-picker/city-data/area.js

@@ -0,0 +1,12542 @@
+/* eslint-disable */
+var areaData = [
+  [
+    [{
+        "label": "东城区",
+        "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": "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": "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": "130171"
+      },
+      {
+        "label": "石家庄循环化工园区",
+        "value": "130172"
+      },
+      {
+        "label": "辛集市",
+        "value": "130181"
+      },
+      {
+        "label": "晋州市",
+        "value": "130183"
+      },
+      {
+        "label": "新乐市",
+        "value": "130184"
+      }
+    ],
+    [{
+        "label": "路南区",
+        "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": "130271"
+      },
+      {
+        "label": "唐山市汉沽管理区",
+        "value": "130272"
+      },
+      {
+        "label": "唐山高新技术产业开发区",
+        "value": "130273"
+      },
+      {
+        "label": "河北唐山海港经济开发区",
+        "value": "130274"
+      },
+      {
+        "label": "遵化市",
+        "value": "130281"
+      },
+      {
+        "label": "迁安市",
+        "value": "130283"
+      }
+    ],
+    [{
+        "label": "海港区",
+        "value": "130302"
+      },
+      {
+        "label": "山海关区",
+        "value": "130303"
+      },
+      {
+        "label": "北戴河区",
+        "value": "130304"
+      },
+      {
+        "label": "抚宁区",
+        "value": "130306"
+      },
+      {
+        "label": "青龙满族自治县",
+        "value": "130321"
+      },
+      {
+        "label": "昌黎县",
+        "value": "130322"
+      },
+      {
+        "label": "卢龙县",
+        "value": "130324"
+      },
+      {
+        "label": "秦皇岛市经济技术开发区",
+        "value": "130371"
+      },
+      {
+        "label": "北戴河新区",
+        "value": "130372"
+      }
+    ],
+    [{
+        "label": "邯山区",
+        "value": "130402"
+      },
+      {
+        "label": "丛台区",
+        "value": "130403"
+      },
+      {
+        "label": "复兴区",
+        "value": "130404"
+      },
+      {
+        "label": "峰峰矿区",
+        "value": "130406"
+      },
+      {
+        "label": "肥乡区",
+        "value": "130407"
+      },
+      {
+        "label": "永年区",
+        "value": "130408"
+      },
+      {
+        "label": "临漳县",
+        "value": "130423"
+      },
+      {
+        "label": "成安县",
+        "value": "130424"
+      },
+      {
+        "label": "大名县",
+        "value": "130425"
+      },
+      {
+        "label": "涉县",
+        "value": "130426"
+      },
+      {
+        "label": "磁县",
+        "value": "130427"
+      },
+      {
+        "label": "邱县",
+        "value": "130430"
+      },
+      {
+        "label": "鸡泽县",
+        "value": "130431"
+      },
+      {
+        "label": "广平县",
+        "value": "130432"
+      },
+      {
+        "label": "馆陶县",
+        "value": "130433"
+      },
+      {
+        "label": "魏县",
+        "value": "130434"
+      },
+      {
+        "label": "曲周县",
+        "value": "130435"
+      },
+      {
+        "label": "邯郸经济技术开发区",
+        "value": "130471"
+      },
+      {
+        "label": "邯郸冀南新区",
+        "value": "130473"
+      },
+      {
+        "label": "武安市",
+        "value": "130481"
+      }
+    ],
+    [{
+        "label": "桥东区",
+        "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": "130571"
+      },
+      {
+        "label": "南宫市",
+        "value": "130581"
+      },
+      {
+        "label": "沙河市",
+        "value": "130582"
+      }
+    ],
+    [{
+        "label": "竞秀区",
+        "value": "130602"
+      },
+      {
+        "label": "莲池区",
+        "value": "130606"
+      },
+      {
+        "label": "满城区",
+        "value": "130607"
+      },
+      {
+        "label": "清苑区",
+        "value": "130608"
+      },
+      {
+        "label": "徐水区",
+        "value": "130609"
+      },
+      {
+        "label": "涞水县",
+        "value": "130623"
+      },
+      {
+        "label": "阜平县",
+        "value": "130624"
+      },
+      {
+        "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": "130671"
+      },
+      {
+        "label": "保定白沟新城",
+        "value": "130672"
+      },
+      {
+        "label": "涿州市",
+        "value": "130681"
+      },
+      {
+        "label": "定州市",
+        "value": "130682"
+      },
+      {
+        "label": "安国市",
+        "value": "130683"
+      },
+      {
+        "label": "高碑店市",
+        "value": "130684"
+      }
+    ],
+    [{
+        "label": "桥东区",
+        "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": "130771"
+      },
+      {
+        "label": "张家口市察北管理区",
+        "value": "130772"
+      },
+      {
+        "label": "张家口市塞北管理区",
+        "value": "130773"
+      }
+    ],
+    [{
+        "label": "双桥区",
+        "value": "130802"
+      },
+      {
+        "label": "双滦区",
+        "value": "130803"
+      },
+      {
+        "label": "鹰手营子矿区",
+        "value": "130804"
+      },
+      {
+        "label": "承德县",
+        "value": "130821"
+      },
+      {
+        "label": "兴隆县",
+        "value": "130822"
+      },
+      {
+        "label": "滦平县",
+        "value": "130824"
+      },
+      {
+        "label": "隆化县",
+        "value": "130825"
+      },
+      {
+        "label": "丰宁满族自治县",
+        "value": "130826"
+      },
+      {
+        "label": "宽城满族自治县",
+        "value": "130827"
+      },
+      {
+        "label": "围场满族蒙古族自治县",
+        "value": "130828"
+      },
+      {
+        "label": "承德高新技术产业开发区",
+        "value": "130871"
+      },
+      {
+        "label": "平泉市",
+        "value": "130881"
+      }
+    ],
+    [{
+        "label": "新华区",
+        "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": "130971"
+      },
+      {
+        "label": "沧州高新技术产业开发区",
+        "value": "130972"
+      },
+      {
+        "label": "沧州渤海新区",
+        "value": "130973"
+      },
+      {
+        "label": "泊头市",
+        "value": "130981"
+      },
+      {
+        "label": "任丘市",
+        "value": "130982"
+      },
+      {
+        "label": "黄骅市",
+        "value": "130983"
+      },
+      {
+        "label": "河间市",
+        "value": "130984"
+      }
+    ],
+    [{
+        "label": "安次区",
+        "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": "131102"
+      },
+      {
+        "label": "冀州区",
+        "value": "131103"
+      },
+      {
+        "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": "131171"
+      },
+      {
+        "label": "衡水滨湖新区",
+        "value": "131172"
+      },
+      {
+        "label": "深州市",
+        "value": "131182"
+      }
+    ]
+  ],
+  [
+    [{
+        "label": "小店区",
+        "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": "140171"
+      },
+      {
+        "label": "古交市",
+        "value": "140181"
+      }
+    ],
+    [{
+        "label": "城区",
+        "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": "140302"
+      },
+      {
+        "label": "矿区",
+        "value": "140303"
+      },
+      {
+        "label": "郊区",
+        "value": "140311"
+      },
+      {
+        "label": "平定县",
+        "value": "140321"
+      },
+      {
+        "label": "盂县",
+        "value": "140322"
+      },
+      {
+        "label": "山西阳泉经济开发区",
+        "value": "140371"
+      }
+    ],
+    [{
+        "label": "城区",
+        "value": "140402"
+      },
+      {
+        "label": "郊区",
+        "value": "140411"
+      },
+      {
+        "label": "长治县",
+        "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": "140471"
+      },
+      {
+        "label": "潞城市",
+        "value": "140481"
+      }
+    ],
+    [{
+        "label": "城区",
+        "value": "140502"
+      },
+      {
+        "label": "沁水县",
+        "value": "140521"
+      },
+      {
+        "label": "阳城县",
+        "value": "140522"
+      },
+      {
+        "label": "陵川县",
+        "value": "140524"
+      },
+      {
+        "label": "泽州县",
+        "value": "140525"
+      },
+      {
+        "label": "高平市",
+        "value": "140581"
+      }
+    ],
+    [{
+        "label": "朔城区",
+        "value": "140602"
+      },
+      {
+        "label": "平鲁区",
+        "value": "140603"
+      },
+      {
+        "label": "山阴县",
+        "value": "140621"
+      },
+      {
+        "label": "应县",
+        "value": "140622"
+      },
+      {
+        "label": "右玉县",
+        "value": "140623"
+      },
+      {
+        "label": "怀仁县",
+        "value": "140624"
+      },
+      {
+        "label": "山西朔州经济开发区",
+        "value": "140671"
+      }
+    ],
+    [{
+        "label": "榆次区",
+        "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": "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": "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": "140971"
+      },
+      {
+        "label": "原平市",
+        "value": "140981"
+      }
+    ],
+    [{
+        "label": "尧都区",
+        "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": "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": "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": "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": "150302"
+      },
+      {
+        "label": "海南区",
+        "value": "150303"
+      },
+      {
+        "label": "乌达区",
+        "value": "150304"
+      }
+    ],
+    [{
+        "label": "红山区",
+        "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": "150502"
+      },
+      {
+        "label": "科尔沁左翼中旗",
+        "value": "150521"
+      },
+      {
+        "label": "科尔沁左翼后旗",
+        "value": "150522"
+      },
+      {
+        "label": "开鲁县",
+        "value": "150523"
+      },
+      {
+        "label": "库伦旗",
+        "value": "150524"
+      },
+      {
+        "label": "奈曼旗",
+        "value": "150525"
+      },
+      {
+        "label": "扎鲁特旗",
+        "value": "150526"
+      },
+      {
+        "label": "通辽经济技术开发区",
+        "value": "150571"
+      },
+      {
+        "label": "霍林郭勒市",
+        "value": "150581"
+      }
+    ],
+    [{
+        "label": "东胜区",
+        "value": "150602"
+      },
+      {
+        "label": "康巴什区",
+        "value": "150603"
+      },
+      {
+        "label": "达拉特旗",
+        "value": "150621"
+      },
+      {
+        "label": "准格尔旗",
+        "value": "150622"
+      },
+      {
+        "label": "鄂托克前旗",
+        "value": "150623"
+      },
+      {
+        "label": "鄂托克旗",
+        "value": "150624"
+      },
+      {
+        "label": "杭锦旗",
+        "value": "150625"
+      },
+      {
+        "label": "乌审旗",
+        "value": "150626"
+      },
+      {
+        "label": "伊金霍洛旗",
+        "value": "150627"
+      }
+    ],
+    [{
+        "label": "海拉尔区",
+        "value": "150702"
+      },
+      {
+        "label": "扎赉诺尔区",
+        "value": "150703"
+      },
+      {
+        "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": "150802"
+      },
+      {
+        "label": "五原县",
+        "value": "150821"
+      },
+      {
+        "label": "磴口县",
+        "value": "150822"
+      },
+      {
+        "label": "乌拉特前旗",
+        "value": "150823"
+      },
+      {
+        "label": "乌拉特中旗",
+        "value": "150824"
+      },
+      {
+        "label": "乌拉特后旗",
+        "value": "150825"
+      },
+      {
+        "label": "杭锦后旗",
+        "value": "150826"
+      }
+    ],
+    [{
+        "label": "集宁区",
+        "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": "152201"
+      },
+      {
+        "label": "阿尔山市",
+        "value": "152202"
+      },
+      {
+        "label": "科尔沁右翼前旗",
+        "value": "152221"
+      },
+      {
+        "label": "科尔沁右翼中旗",
+        "value": "152222"
+      },
+      {
+        "label": "扎赉特旗",
+        "value": "152223"
+      },
+      {
+        "label": "突泉县",
+        "value": "152224"
+      }
+    ],
+    [{
+        "label": "二连浩特市",
+        "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": "152921"
+      },
+      {
+        "label": "阿拉善右旗",
+        "value": "152922"
+      },
+      {
+        "label": "额济纳旗",
+        "value": "152923"
+      },
+      {
+        "label": "内蒙古阿拉善经济开发区",
+        "value": "152971"
+      }
+    ]
+  ],
+  [
+    [{
+        "label": "和平区",
+        "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": "210202"
+      },
+      {
+        "label": "西岗区",
+        "value": "210203"
+      },
+      {
+        "label": "沙河口区",
+        "value": "210204"
+      },
+      {
+        "label": "甘井子区",
+        "value": "210211"
+      },
+      {
+        "label": "旅顺口区",
+        "value": "210212"
+      },
+      {
+        "label": "金州区",
+        "value": "210213"
+      },
+      {
+        "label": "普兰店区",
+        "value": "210214"
+      },
+      {
+        "label": "长海县",
+        "value": "210224"
+      },
+      {
+        "label": "瓦房店市",
+        "value": "210281"
+      },
+      {
+        "label": "庄河市",
+        "value": "210283"
+      }
+    ],
+    [{
+        "label": "铁东区",
+        "value": "210302"
+      },
+      {
+        "label": "铁西区",
+        "value": "210303"
+      },
+      {
+        "label": "立山区",
+        "value": "210304"
+      },
+      {
+        "label": "千山区",
+        "value": "210311"
+      },
+      {
+        "label": "台安县",
+        "value": "210321"
+      },
+      {
+        "label": "岫岩满族自治县",
+        "value": "210323"
+      },
+      {
+        "label": "海城市",
+        "value": "210381"
+      }
+    ],
+    [{
+        "label": "新抚区",
+        "value": "210402"
+      },
+      {
+        "label": "东洲区",
+        "value": "210403"
+      },
+      {
+        "label": "望花区",
+        "value": "210404"
+      },
+      {
+        "label": "顺城区",
+        "value": "210411"
+      },
+      {
+        "label": "抚顺县",
+        "value": "210421"
+      },
+      {
+        "label": "新宾满族自治县",
+        "value": "210422"
+      },
+      {
+        "label": "清原满族自治县",
+        "value": "210423"
+      }
+    ],
+    [{
+        "label": "平山区",
+        "value": "210502"
+      },
+      {
+        "label": "溪湖区",
+        "value": "210503"
+      },
+      {
+        "label": "明山区",
+        "value": "210504"
+      },
+      {
+        "label": "南芬区",
+        "value": "210505"
+      },
+      {
+        "label": "本溪满族自治县",
+        "value": "210521"
+      },
+      {
+        "label": "桓仁满族自治县",
+        "value": "210522"
+      }
+    ],
+    [{
+        "label": "元宝区",
+        "value": "210602"
+      },
+      {
+        "label": "振兴区",
+        "value": "210603"
+      },
+      {
+        "label": "振安区",
+        "value": "210604"
+      },
+      {
+        "label": "宽甸满族自治县",
+        "value": "210624"
+      },
+      {
+        "label": "东港市",
+        "value": "210681"
+      },
+      {
+        "label": "凤城市",
+        "value": "210682"
+      }
+    ],
+    [{
+        "label": "古塔区",
+        "value": "210702"
+      },
+      {
+        "label": "凌河区",
+        "value": "210703"
+      },
+      {
+        "label": "太和区",
+        "value": "210711"
+      },
+      {
+        "label": "黑山县",
+        "value": "210726"
+      },
+      {
+        "label": "义县",
+        "value": "210727"
+      },
+      {
+        "label": "凌海市",
+        "value": "210781"
+      },
+      {
+        "label": "北镇市",
+        "value": "210782"
+      }
+    ],
+    [{
+        "label": "站前区",
+        "value": "210802"
+      },
+      {
+        "label": "西市区",
+        "value": "210803"
+      },
+      {
+        "label": "鲅鱼圈区",
+        "value": "210804"
+      },
+      {
+        "label": "老边区",
+        "value": "210811"
+      },
+      {
+        "label": "盖州市",
+        "value": "210881"
+      },
+      {
+        "label": "大石桥市",
+        "value": "210882"
+      }
+    ],
+    [{
+        "label": "海州区",
+        "value": "210902"
+      },
+      {
+        "label": "新邱区",
+        "value": "210903"
+      },
+      {
+        "label": "太平区",
+        "value": "210904"
+      },
+      {
+        "label": "清河门区",
+        "value": "210905"
+      },
+      {
+        "label": "细河区",
+        "value": "210911"
+      },
+      {
+        "label": "阜新蒙古族自治县",
+        "value": "210921"
+      },
+      {
+        "label": "彰武县",
+        "value": "210922"
+      }
+    ],
+    [{
+        "label": "白塔区",
+        "value": "211002"
+      },
+      {
+        "label": "文圣区",
+        "value": "211003"
+      },
+      {
+        "label": "宏伟区",
+        "value": "211004"
+      },
+      {
+        "label": "弓长岭区",
+        "value": "211005"
+      },
+      {
+        "label": "太子河区",
+        "value": "211011"
+      },
+      {
+        "label": "辽阳县",
+        "value": "211021"
+      },
+      {
+        "label": "灯塔市",
+        "value": "211081"
+      }
+    ],
+    [{
+        "label": "双台子区",
+        "value": "211102"
+      },
+      {
+        "label": "兴隆台区",
+        "value": "211103"
+      },
+      {
+        "label": "大洼区",
+        "value": "211104"
+      },
+      {
+        "label": "盘山县",
+        "value": "211122"
+      }
+    ],
+    [{
+        "label": "银州区",
+        "value": "211202"
+      },
+      {
+        "label": "清河区",
+        "value": "211204"
+      },
+      {
+        "label": "铁岭县",
+        "value": "211221"
+      },
+      {
+        "label": "西丰县",
+        "value": "211223"
+      },
+      {
+        "label": "昌图县",
+        "value": "211224"
+      },
+      {
+        "label": "调兵山市",
+        "value": "211281"
+      },
+      {
+        "label": "开原市",
+        "value": "211282"
+      }
+    ],
+    [{
+        "label": "双塔区",
+        "value": "211302"
+      },
+      {
+        "label": "龙城区",
+        "value": "211303"
+      },
+      {
+        "label": "朝阳县",
+        "value": "211321"
+      },
+      {
+        "label": "建平县",
+        "value": "211322"
+      },
+      {
+        "label": "喀喇沁左翼蒙古族自治县",
+        "value": "211324"
+      },
+      {
+        "label": "北票市",
+        "value": "211381"
+      },
+      {
+        "label": "凌源市",
+        "value": "211382"
+      }
+    ],
+    [{
+        "label": "连山区",
+        "value": "211402"
+      },
+      {
+        "label": "龙港区",
+        "value": "211403"
+      },
+      {
+        "label": "南票区",
+        "value": "211404"
+      },
+      {
+        "label": "绥中县",
+        "value": "211421"
+      },
+      {
+        "label": "建昌县",
+        "value": "211422"
+      },
+      {
+        "label": "兴城市",
+        "value": "211481"
+      }
+    ]
+  ],
+  [
+    [{
+        "label": "南关区",
+        "value": "220102"
+      },
+      {
+        "label": "宽城区",
+        "value": "220103"
+      },
+      {
+        "label": "朝阳区",
+        "value": "220104"
+      },
+      {
+        "label": "二道区",
+        "value": "220105"
+      },
+      {
+        "label": "绿园区",
+        "value": "220106"
+      },
+      {
+        "label": "双阳区",
+        "value": "220112"
+      },
+      {
+        "label": "九台区",
+        "value": "220113"
+      },
+      {
+        "label": "农安县",
+        "value": "220122"
+      },
+      {
+        "label": "长春经济技术开发区",
+        "value": "220171"
+      },
+      {
+        "label": "长春净月高新技术产业开发区",
+        "value": "220172"
+      },
+      {
+        "label": "长春高新技术产业开发区",
+        "value": "220173"
+      },
+      {
+        "label": "长春汽车经济技术开发区",
+        "value": "220174"
+      },
+      {
+        "label": "榆树市",
+        "value": "220182"
+      },
+      {
+        "label": "德惠市",
+        "value": "220183"
+      }
+    ],
+    [{
+        "label": "昌邑区",
+        "value": "220202"
+      },
+      {
+        "label": "龙潭区",
+        "value": "220203"
+      },
+      {
+        "label": "船营区",
+        "value": "220204"
+      },
+      {
+        "label": "丰满区",
+        "value": "220211"
+      },
+      {
+        "label": "永吉县",
+        "value": "220221"
+      },
+      {
+        "label": "吉林经济开发区",
+        "value": "220271"
+      },
+      {
+        "label": "吉林高新技术产业开发区",
+        "value": "220272"
+      },
+      {
+        "label": "吉林中国新加坡食品区",
+        "value": "220273"
+      },
+      {
+        "label": "蛟河市",
+        "value": "220281"
+      },
+      {
+        "label": "桦甸市",
+        "value": "220282"
+      },
+      {
+        "label": "舒兰市",
+        "value": "220283"
+      },
+      {
+        "label": "磐石市",
+        "value": "220284"
+      }
+    ],
+    [{
+        "label": "铁西区",
+        "value": "220302"
+      },
+      {
+        "label": "铁东区",
+        "value": "220303"
+      },
+      {
+        "label": "梨树县",
+        "value": "220322"
+      },
+      {
+        "label": "伊通满族自治县",
+        "value": "220323"
+      },
+      {
+        "label": "公主岭市",
+        "value": "220381"
+      },
+      {
+        "label": "双辽市",
+        "value": "220382"
+      }
+    ],
+    [{
+        "label": "龙山区",
+        "value": "220402"
+      },
+      {
+        "label": "西安区",
+        "value": "220403"
+      },
+      {
+        "label": "东丰县",
+        "value": "220421"
+      },
+      {
+        "label": "东辽县",
+        "value": "220422"
+      }
+    ],
+    [{
+        "label": "东昌区",
+        "value": "220502"
+      },
+      {
+        "label": "二道江区",
+        "value": "220503"
+      },
+      {
+        "label": "通化县",
+        "value": "220521"
+      },
+      {
+        "label": "辉南县",
+        "value": "220523"
+      },
+      {
+        "label": "柳河县",
+        "value": "220524"
+      },
+      {
+        "label": "梅河口市",
+        "value": "220581"
+      },
+      {
+        "label": "集安市",
+        "value": "220582"
+      }
+    ],
+    [{
+        "label": "浑江区",
+        "value": "220602"
+      },
+      {
+        "label": "江源区",
+        "value": "220605"
+      },
+      {
+        "label": "抚松县",
+        "value": "220621"
+      },
+      {
+        "label": "靖宇县",
+        "value": "220622"
+      },
+      {
+        "label": "长白朝鲜族自治县",
+        "value": "220623"
+      },
+      {
+        "label": "临江市",
+        "value": "220681"
+      }
+    ],
+    [{
+        "label": "宁江区",
+        "value": "220702"
+      },
+      {
+        "label": "前郭尔罗斯蒙古族自治县",
+        "value": "220721"
+      },
+      {
+        "label": "长岭县",
+        "value": "220722"
+      },
+      {
+        "label": "乾安县",
+        "value": "220723"
+      },
+      {
+        "label": "吉林松原经济开发区",
+        "value": "220771"
+      },
+      {
+        "label": "扶余市",
+        "value": "220781"
+      }
+    ],
+    [{
+        "label": "洮北区",
+        "value": "220802"
+      },
+      {
+        "label": "镇赉县",
+        "value": "220821"
+      },
+      {
+        "label": "通榆县",
+        "value": "220822"
+      },
+      {
+        "label": "吉林白城经济开发区",
+        "value": "220871"
+      },
+      {
+        "label": "洮南市",
+        "value": "220881"
+      },
+      {
+        "label": "大安市",
+        "value": "220882"
+      }
+    ],
+    [{
+        "label": "延吉市",
+        "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": "230102"
+      },
+      {
+        "label": "南岗区",
+        "value": "230103"
+      },
+      {
+        "label": "道外区",
+        "value": "230104"
+      },
+      {
+        "label": "平房区",
+        "value": "230108"
+      },
+      {
+        "label": "松北区",
+        "value": "230109"
+      },
+      {
+        "label": "香坊区",
+        "value": "230110"
+      },
+      {
+        "label": "呼兰区",
+        "value": "230111"
+      },
+      {
+        "label": "阿城区",
+        "value": "230112"
+      },
+      {
+        "label": "双城区",
+        "value": "230113"
+      },
+      {
+        "label": "依兰县",
+        "value": "230123"
+      },
+      {
+        "label": "方正县",
+        "value": "230124"
+      },
+      {
+        "label": "宾县",
+        "value": "230125"
+      },
+      {
+        "label": "巴彦县",
+        "value": "230126"
+      },
+      {
+        "label": "木兰县",
+        "value": "230127"
+      },
+      {
+        "label": "通河县",
+        "value": "230128"
+      },
+      {
+        "label": "延寿县",
+        "value": "230129"
+      },
+      {
+        "label": "尚志市",
+        "value": "230183"
+      },
+      {
+        "label": "五常市",
+        "value": "230184"
+      }
+    ],
+    [{
+        "label": "龙沙区",
+        "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": "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": "230402"
+      },
+      {
+        "label": "工农区",
+        "value": "230403"
+      },
+      {
+        "label": "南山区",
+        "value": "230404"
+      },
+      {
+        "label": "兴安区",
+        "value": "230405"
+      },
+      {
+        "label": "东山区",
+        "value": "230406"
+      },
+      {
+        "label": "兴山区",
+        "value": "230407"
+      },
+      {
+        "label": "萝北县",
+        "value": "230421"
+      },
+      {
+        "label": "绥滨县",
+        "value": "230422"
+      }
+    ],
+    [{
+        "label": "尖山区",
+        "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": "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": "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": "230803"
+      },
+      {
+        "label": "前进区",
+        "value": "230804"
+      },
+      {
+        "label": "东风区",
+        "value": "230805"
+      },
+      {
+        "label": "郊区",
+        "value": "230811"
+      },
+      {
+        "label": "桦南县",
+        "value": "230822"
+      },
+      {
+        "label": "桦川县",
+        "value": "230826"
+      },
+      {
+        "label": "汤原县",
+        "value": "230828"
+      },
+      {
+        "label": "同江市",
+        "value": "230881"
+      },
+      {
+        "label": "富锦市",
+        "value": "230882"
+      },
+      {
+        "label": "抚远市",
+        "value": "230883"
+      }
+    ],
+    [{
+        "label": "新兴区",
+        "value": "230902"
+      },
+      {
+        "label": "桃山区",
+        "value": "230903"
+      },
+      {
+        "label": "茄子河区",
+        "value": "230904"
+      },
+      {
+        "label": "勃利县",
+        "value": "230921"
+      }
+    ],
+    [{
+        "label": "东安区",
+        "value": "231002"
+      },
+      {
+        "label": "阳明区",
+        "value": "231003"
+      },
+      {
+        "label": "爱民区",
+        "value": "231004"
+      },
+      {
+        "label": "西安区",
+        "value": "231005"
+      },
+      {
+        "label": "林口县",
+        "value": "231025"
+      },
+      {
+        "label": "牡丹江经济技术开发区",
+        "value": "231071"
+      },
+      {
+        "label": "绥芬河市",
+        "value": "231081"
+      },
+      {
+        "label": "海林市",
+        "value": "231083"
+      },
+      {
+        "label": "宁安市",
+        "value": "231084"
+      },
+      {
+        "label": "穆棱市",
+        "value": "231085"
+      },
+      {
+        "label": "东宁市",
+        "value": "231086"
+      }
+    ],
+    [{
+        "label": "爱辉区",
+        "value": "231102"
+      },
+      {
+        "label": "嫩江县",
+        "value": "231121"
+      },
+      {
+        "label": "逊克县",
+        "value": "231123"
+      },
+      {
+        "label": "孙吴县",
+        "value": "231124"
+      },
+      {
+        "label": "北安市",
+        "value": "231181"
+      },
+      {
+        "label": "五大连池市",
+        "value": "231182"
+      }
+    ],
+    [{
+        "label": "北林区",
+        "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": "232701"
+      },
+      {
+        "label": "松岭区",
+        "value": "232702"
+      },
+      {
+        "label": "新林区",
+        "value": "232703"
+      },
+      {
+        "label": "呼中区",
+        "value": "232704"
+      },
+      {
+        "label": "呼玛县",
+        "value": "232721"
+      },
+      {
+        "label": "塔河县",
+        "value": "232722"
+      },
+      {
+        "label": "漠河县",
+        "value": "232723"
+      }
+    ]
+  ],
+  [
+    [{
+        "label": "黄浦区",
+        "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": "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": "320205"
+      },
+      {
+        "label": "惠山区",
+        "value": "320206"
+      },
+      {
+        "label": "滨湖区",
+        "value": "320211"
+      },
+      {
+        "label": "梁溪区",
+        "value": "320213"
+      },
+      {
+        "label": "新吴区",
+        "value": "320214"
+      },
+      {
+        "label": "江阴市",
+        "value": "320281"
+      },
+      {
+        "label": "宜兴市",
+        "value": "320282"
+      }
+    ],
+    [{
+        "label": "鼓楼区",
+        "value": "320302"
+      },
+      {
+        "label": "云龙区",
+        "value": "320303"
+      },
+      {
+        "label": "贾汪区",
+        "value": "320305"
+      },
+      {
+        "label": "泉山区",
+        "value": "320311"
+      },
+      {
+        "label": "铜山区",
+        "value": "320312"
+      },
+      {
+        "label": "丰县",
+        "value": "320321"
+      },
+      {
+        "label": "沛县",
+        "value": "320322"
+      },
+      {
+        "label": "睢宁县",
+        "value": "320324"
+      },
+      {
+        "label": "徐州经济技术开发区",
+        "value": "320371"
+      },
+      {
+        "label": "新沂市",
+        "value": "320381"
+      },
+      {
+        "label": "邳州市",
+        "value": "320382"
+      }
+    ],
+    [{
+        "label": "天宁区",
+        "value": "320402"
+      },
+      {
+        "label": "钟楼区",
+        "value": "320404"
+      },
+      {
+        "label": "新北区",
+        "value": "320411"
+      },
+      {
+        "label": "武进区",
+        "value": "320412"
+      },
+      {
+        "label": "金坛区",
+        "value": "320413"
+      },
+      {
+        "label": "溧阳市",
+        "value": "320481"
+      }
+    ],
+    [{
+        "label": "虎丘区",
+        "value": "320505"
+      },
+      {
+        "label": "吴中区",
+        "value": "320506"
+      },
+      {
+        "label": "相城区",
+        "value": "320507"
+      },
+      {
+        "label": "姑苏区",
+        "value": "320508"
+      },
+      {
+        "label": "吴江区",
+        "value": "320509"
+      },
+      {
+        "label": "苏州工业园区",
+        "value": "320571"
+      },
+      {
+        "label": "常熟市",
+        "value": "320581"
+      },
+      {
+        "label": "张家港市",
+        "value": "320582"
+      },
+      {
+        "label": "昆山市",
+        "value": "320583"
+      },
+      {
+        "label": "太仓市",
+        "value": "320585"
+      }
+    ],
+    [{
+        "label": "崇川区",
+        "value": "320602"
+      },
+      {
+        "label": "港闸区",
+        "value": "320611"
+      },
+      {
+        "label": "通州区",
+        "value": "320612"
+      },
+      {
+        "label": "海安县",
+        "value": "320621"
+      },
+      {
+        "label": "如东县",
+        "value": "320623"
+      },
+      {
+        "label": "南通经济技术开发区",
+        "value": "320671"
+      },
+      {
+        "label": "启东市",
+        "value": "320681"
+      },
+      {
+        "label": "如皋市",
+        "value": "320682"
+      },
+      {
+        "label": "海门市",
+        "value": "320684"
+      }
+    ],
+    [{
+        "label": "连云区",
+        "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": "320803"
+      },
+      {
+        "label": "淮阴区",
+        "value": "320804"
+      },
+      {
+        "label": "清江浦区",
+        "value": "320812"
+      },
+      {
+        "label": "洪泽区",
+        "value": "320813"
+      },
+      {
+        "label": "涟水县",
+        "value": "320826"
+      },
+      {
+        "label": "盱眙县",
+        "value": "320830"
+      },
+      {
+        "label": "金湖县",
+        "value": "320831"
+      },
+      {
+        "label": "淮安经济技术开发区",
+        "value": "320871"
+      }
+    ],
+    [{
+        "label": "亭湖区",
+        "value": "320902"
+      },
+      {
+        "label": "盐都区",
+        "value": "320903"
+      },
+      {
+        "label": "大丰区",
+        "value": "320904"
+      },
+      {
+        "label": "响水县",
+        "value": "320921"
+      },
+      {
+        "label": "滨海县",
+        "value": "320922"
+      },
+      {
+        "label": "阜宁县",
+        "value": "320923"
+      },
+      {
+        "label": "射阳县",
+        "value": "320924"
+      },
+      {
+        "label": "建湖县",
+        "value": "320925"
+      },
+      {
+        "label": "盐城经济技术开发区",
+        "value": "320971"
+      },
+      {
+        "label": "东台市",
+        "value": "320981"
+      }
+    ],
+    [{
+        "label": "广陵区",
+        "value": "321002"
+      },
+      {
+        "label": "邗江区",
+        "value": "321003"
+      },
+      {
+        "label": "江都区",
+        "value": "321012"
+      },
+      {
+        "label": "宝应县",
+        "value": "321023"
+      },
+      {
+        "label": "扬州经济技术开发区",
+        "value": "321071"
+      },
+      {
+        "label": "仪征市",
+        "value": "321081"
+      },
+      {
+        "label": "高邮市",
+        "value": "321084"
+      }
+    ],
+    [{
+        "label": "京口区",
+        "value": "321102"
+      },
+      {
+        "label": "润州区",
+        "value": "321111"
+      },
+      {
+        "label": "丹徒区",
+        "value": "321112"
+      },
+      {
+        "label": "镇江新区",
+        "value": "321171"
+      },
+      {
+        "label": "丹阳市",
+        "value": "321181"
+      },
+      {
+        "label": "扬中市",
+        "value": "321182"
+      },
+      {
+        "label": "句容市",
+        "value": "321183"
+      }
+    ],
+    [{
+        "label": "海陵区",
+        "value": "321202"
+      },
+      {
+        "label": "高港区",
+        "value": "321203"
+      },
+      {
+        "label": "姜堰区",
+        "value": "321204"
+      },
+      {
+        "label": "泰州医药高新技术产业开发区",
+        "value": "321271"
+      },
+      {
+        "label": "兴化市",
+        "value": "321281"
+      },
+      {
+        "label": "靖江市",
+        "value": "321282"
+      },
+      {
+        "label": "泰兴市",
+        "value": "321283"
+      }
+    ],
+    [{
+        "label": "宿城区",
+        "value": "321302"
+      },
+      {
+        "label": "宿豫区",
+        "value": "321311"
+      },
+      {
+        "label": "沭阳县",
+        "value": "321322"
+      },
+      {
+        "label": "泗阳县",
+        "value": "321323"
+      },
+      {
+        "label": "泗洪县",
+        "value": "321324"
+      },
+      {
+        "label": "宿迁经济技术开发区",
+        "value": "321371"
+      }
+    ]
+  ],
+  [
+    [{
+        "label": "上城区",
+        "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": "330111"
+      },
+      {
+        "label": "临安区",
+        "value": "330112"
+      },
+      {
+        "label": "桐庐县",
+        "value": "330122"
+      },
+      {
+        "label": "淳安县",
+        "value": "330127"
+      },
+      {
+        "label": "建德市",
+        "value": "330182"
+      }
+    ],
+    [{
+        "label": "海曙区",
+        "value": "330203"
+      },
+      {
+        "label": "江北区",
+        "value": "330205"
+      },
+      {
+        "label": "北仑区",
+        "value": "330206"
+      },
+      {
+        "label": "镇海区",
+        "value": "330211"
+      },
+      {
+        "label": "鄞州区",
+        "value": "330212"
+      },
+      {
+        "label": "奉化区",
+        "value": "330213"
+      },
+      {
+        "label": "象山县",
+        "value": "330225"
+      },
+      {
+        "label": "宁海县",
+        "value": "330226"
+      },
+      {
+        "label": "余姚市",
+        "value": "330281"
+      },
+      {
+        "label": "慈溪市",
+        "value": "330282"
+      }
+    ],
+    [{
+        "label": "鹿城区",
+        "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": "330371"
+      },
+      {
+        "label": "瑞安市",
+        "value": "330381"
+      },
+      {
+        "label": "乐清市",
+        "value": "330382"
+      }
+    ],
+    [{
+        "label": "南湖区",
+        "value": "330402"
+      },
+      {
+        "label": "秀洲区",
+        "value": "330411"
+      },
+      {
+        "label": "嘉善县",
+        "value": "330421"
+      },
+      {
+        "label": "海盐县",
+        "value": "330424"
+      },
+      {
+        "label": "海宁市",
+        "value": "330481"
+      },
+      {
+        "label": "平湖市",
+        "value": "330482"
+      },
+      {
+        "label": "桐乡市",
+        "value": "330483"
+      }
+    ],
+    [{
+        "label": "吴兴区",
+        "value": "330502"
+      },
+      {
+        "label": "南浔区",
+        "value": "330503"
+      },
+      {
+        "label": "德清县",
+        "value": "330521"
+      },
+      {
+        "label": "长兴县",
+        "value": "330522"
+      },
+      {
+        "label": "安吉县",
+        "value": "330523"
+      }
+    ],
+    [{
+        "label": "越城区",
+        "value": "330602"
+      },
+      {
+        "label": "柯桥区",
+        "value": "330603"
+      },
+      {
+        "label": "上虞区",
+        "value": "330604"
+      },
+      {
+        "label": "新昌县",
+        "value": "330624"
+      },
+      {
+        "label": "诸暨市",
+        "value": "330681"
+      },
+      {
+        "label": "嵊州市",
+        "value": "330683"
+      }
+    ],
+    [{
+        "label": "婺城区",
+        "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": "330802"
+      },
+      {
+        "label": "衢江区",
+        "value": "330803"
+      },
+      {
+        "label": "常山县",
+        "value": "330822"
+      },
+      {
+        "label": "开化县",
+        "value": "330824"
+      },
+      {
+        "label": "龙游县",
+        "value": "330825"
+      },
+      {
+        "label": "江山市",
+        "value": "330881"
+      }
+    ],
+    [{
+        "label": "定海区",
+        "value": "330902"
+      },
+      {
+        "label": "普陀区",
+        "value": "330903"
+      },
+      {
+        "label": "岱山县",
+        "value": "330921"
+      },
+      {
+        "label": "嵊泗县",
+        "value": "330922"
+      }
+    ],
+    [{
+        "label": "椒江区",
+        "value": "331002"
+      },
+      {
+        "label": "黄岩区",
+        "value": "331003"
+      },
+      {
+        "label": "路桥区",
+        "value": "331004"
+      },
+      {
+        "label": "三门县",
+        "value": "331022"
+      },
+      {
+        "label": "天台县",
+        "value": "331023"
+      },
+      {
+        "label": "仙居县",
+        "value": "331024"
+      },
+      {
+        "label": "温岭市",
+        "value": "331081"
+      },
+      {
+        "label": "临海市",
+        "value": "331082"
+      },
+      {
+        "label": "玉环市",
+        "value": "331083"
+      }
+    ],
+    [{
+        "label": "莲都区",
+        "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": "340102"
+      },
+      {
+        "label": "庐阳区",
+        "value": "340103"
+      },
+      {
+        "label": "蜀山区",
+        "value": "340104"
+      },
+      {
+        "label": "包河区",
+        "value": "340111"
+      },
+      {
+        "label": "长丰县",
+        "value": "340121"
+      },
+      {
+        "label": "肥东县",
+        "value": "340122"
+      },
+      {
+        "label": "肥西县",
+        "value": "340123"
+      },
+      {
+        "label": "庐江县",
+        "value": "340124"
+      },
+      {
+        "label": "合肥高新技术产业开发区",
+        "value": "340171"
+      },
+      {
+        "label": "合肥经济技术开发区",
+        "value": "340172"
+      },
+      {
+        "label": "合肥新站高新技术产业开发区",
+        "value": "340173"
+      },
+      {
+        "label": "巢湖市",
+        "value": "340181"
+      }
+    ],
+    [{
+        "label": "镜湖区",
+        "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": "340271"
+      },
+      {
+        "label": "安徽芜湖长江大桥经济开发区",
+        "value": "340272"
+      }
+    ],
+    [{
+        "label": "龙子湖区",
+        "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": "340402"
+      },
+      {
+        "label": "田家庵区",
+        "value": "340403"
+      },
+      {
+        "label": "谢家集区",
+        "value": "340404"
+      },
+      {
+        "label": "八公山区",
+        "value": "340405"
+      },
+      {
+        "label": "潘集区",
+        "value": "340406"
+      },
+      {
+        "label": "凤台县",
+        "value": "340421"
+      },
+      {
+        "label": "寿县",
+        "value": "340422"
+      }
+    ],
+    [{
+        "label": "花山区",
+        "value": "340503"
+      },
+      {
+        "label": "雨山区",
+        "value": "340504"
+      },
+      {
+        "label": "博望区",
+        "value": "340506"
+      },
+      {
+        "label": "当涂县",
+        "value": "340521"
+      },
+      {
+        "label": "含山县",
+        "value": "340522"
+      },
+      {
+        "label": "和县",
+        "value": "340523"
+      }
+    ],
+    [{
+        "label": "杜集区",
+        "value": "340602"
+      },
+      {
+        "label": "相山区",
+        "value": "340603"
+      },
+      {
+        "label": "烈山区",
+        "value": "340604"
+      },
+      {
+        "label": "濉溪县",
+        "value": "340621"
+      }
+    ],
+    [{
+        "label": "铜官区",
+        "value": "340705"
+      },
+      {
+        "label": "义安区",
+        "value": "340706"
+      },
+      {
+        "label": "郊区",
+        "value": "340711"
+      },
+      {
+        "label": "枞阳县",
+        "value": "340722"
+      }
+    ],
+    [{
+        "label": "迎江区",
+        "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": "340871"
+      },
+      {
+        "label": "桐城市",
+        "value": "340881"
+      }
+    ],
+    [{
+        "label": "屯溪区",
+        "value": "341002"
+      },
+      {
+        "label": "黄山区",
+        "value": "341003"
+      },
+      {
+        "label": "徽州区",
+        "value": "341004"
+      },
+      {
+        "label": "歙县",
+        "value": "341021"
+      },
+      {
+        "label": "休宁县",
+        "value": "341022"
+      },
+      {
+        "label": "黟县",
+        "value": "341023"
+      },
+      {
+        "label": "祁门县",
+        "value": "341024"
+      }
+    ],
+    [{
+        "label": "琅琊区",
+        "value": "341102"
+      },
+      {
+        "label": "南谯区",
+        "value": "341103"
+      },
+      {
+        "label": "来安县",
+        "value": "341122"
+      },
+      {
+        "label": "全椒县",
+        "value": "341124"
+      },
+      {
+        "label": "定远县",
+        "value": "341125"
+      },
+      {
+        "label": "凤阳县",
+        "value": "341126"
+      },
+      {
+        "label": "苏滁现代产业园",
+        "value": "341171"
+      },
+      {
+        "label": "滁州经济技术开发区",
+        "value": "341172"
+      },
+      {
+        "label": "天长市",
+        "value": "341181"
+      },
+      {
+        "label": "明光市",
+        "value": "341182"
+      }
+    ],
+    [{
+        "label": "颍州区",
+        "value": "341202"
+      },
+      {
+        "label": "颍东区",
+        "value": "341203"
+      },
+      {
+        "label": "颍泉区",
+        "value": "341204"
+      },
+      {
+        "label": "临泉县",
+        "value": "341221"
+      },
+      {
+        "label": "太和县",
+        "value": "341222"
+      },
+      {
+        "label": "阜南县",
+        "value": "341225"
+      },
+      {
+        "label": "颍上县",
+        "value": "341226"
+      },
+      {
+        "label": "阜阳合肥现代产业园区",
+        "value": "341271"
+      },
+      {
+        "label": "阜阳经济技术开发区",
+        "value": "341272"
+      },
+      {
+        "label": "界首市",
+        "value": "341282"
+      }
+    ],
+    [{
+        "label": "埇桥区",
+        "value": "341302"
+      },
+      {
+        "label": "砀山县",
+        "value": "341321"
+      },
+      {
+        "label": "萧县",
+        "value": "341322"
+      },
+      {
+        "label": "灵璧县",
+        "value": "341323"
+      },
+      {
+        "label": "泗县",
+        "value": "341324"
+      },
+      {
+        "label": "宿州马鞍山现代产业园区",
+        "value": "341371"
+      },
+      {
+        "label": "宿州经济技术开发区",
+        "value": "341372"
+      }
+    ],
+    [{
+        "label": "金安区",
+        "value": "341502"
+      },
+      {
+        "label": "裕安区",
+        "value": "341503"
+      },
+      {
+        "label": "叶集区",
+        "value": "341504"
+      },
+      {
+        "label": "霍邱县",
+        "value": "341522"
+      },
+      {
+        "label": "舒城县",
+        "value": "341523"
+      },
+      {
+        "label": "金寨县",
+        "value": "341524"
+      },
+      {
+        "label": "霍山县",
+        "value": "341525"
+      }
+    ],
+    [{
+        "label": "谯城区",
+        "value": "341602"
+      },
+      {
+        "label": "涡阳县",
+        "value": "341621"
+      },
+      {
+        "label": "蒙城县",
+        "value": "341622"
+      },
+      {
+        "label": "利辛县",
+        "value": "341623"
+      }
+    ],
+    [{
+        "label": "贵池区",
+        "value": "341702"
+      },
+      {
+        "label": "东至县",
+        "value": "341721"
+      },
+      {
+        "label": "石台县",
+        "value": "341722"
+      },
+      {
+        "label": "青阳县",
+        "value": "341723"
+      }
+    ],
+    [{
+        "label": "宣州区",
+        "value": "341802"
+      },
+      {
+        "label": "郎溪县",
+        "value": "341821"
+      },
+      {
+        "label": "广德县",
+        "value": "341822"
+      },
+      {
+        "label": "泾县",
+        "value": "341823"
+      },
+      {
+        "label": "绩溪县",
+        "value": "341824"
+      },
+      {
+        "label": "旌德县",
+        "value": "341825"
+      },
+      {
+        "label": "宣城市经济开发区",
+        "value": "341871"
+      },
+      {
+        "label": "宁国市",
+        "value": "341881"
+      }
+    ]
+  ],
+  [
+    [{
+        "label": "鼓楼区",
+        "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": "350203"
+      },
+      {
+        "label": "海沧区",
+        "value": "350205"
+      },
+      {
+        "label": "湖里区",
+        "value": "350206"
+      },
+      {
+        "label": "集美区",
+        "value": "350211"
+      },
+      {
+        "label": "同安区",
+        "value": "350212"
+      },
+      {
+        "label": "翔安区",
+        "value": "350213"
+      }
+    ],
+    [{
+        "label": "城厢区",
+        "value": "350302"
+      },
+      {
+        "label": "涵江区",
+        "value": "350303"
+      },
+      {
+        "label": "荔城区",
+        "value": "350304"
+      },
+      {
+        "label": "秀屿区",
+        "value": "350305"
+      },
+      {
+        "label": "仙游县",
+        "value": "350322"
+      }
+    ],
+    [{
+        "label": "梅列区",
+        "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": "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": "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": "350702"
+      },
+      {
+        "label": "建阳区",
+        "value": "350703"
+      },
+      {
+        "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": "350802"
+      },
+      {
+        "label": "永定区",
+        "value": "350803"
+      },
+      {
+        "label": "长汀县",
+        "value": "350821"
+      },
+      {
+        "label": "上杭县",
+        "value": "350823"
+      },
+      {
+        "label": "武平县",
+        "value": "350824"
+      },
+      {
+        "label": "连城县",
+        "value": "350825"
+      },
+      {
+        "label": "漳平市",
+        "value": "350881"
+      }
+    ],
+    [{
+        "label": "蕉城区",
+        "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": "360102"
+      },
+      {
+        "label": "西湖区",
+        "value": "360103"
+      },
+      {
+        "label": "青云谱区",
+        "value": "360104"
+      },
+      {
+        "label": "湾里区",
+        "value": "360105"
+      },
+      {
+        "label": "青山湖区",
+        "value": "360111"
+      },
+      {
+        "label": "新建区",
+        "value": "360112"
+      },
+      {
+        "label": "南昌县",
+        "value": "360121"
+      },
+      {
+        "label": "安义县",
+        "value": "360123"
+      },
+      {
+        "label": "进贤县",
+        "value": "360124"
+      }
+    ],
+    [{
+        "label": "昌江区",
+        "value": "360202"
+      },
+      {
+        "label": "珠山区",
+        "value": "360203"
+      },
+      {
+        "label": "浮梁县",
+        "value": "360222"
+      },
+      {
+        "label": "乐平市",
+        "value": "360281"
+      }
+    ],
+    [{
+        "label": "安源区",
+        "value": "360302"
+      },
+      {
+        "label": "湘东区",
+        "value": "360313"
+      },
+      {
+        "label": "莲花县",
+        "value": "360321"
+      },
+      {
+        "label": "上栗县",
+        "value": "360322"
+      },
+      {
+        "label": "芦溪县",
+        "value": "360323"
+      }
+    ],
+    [{
+        "label": "濂溪区",
+        "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": "360502"
+      },
+      {
+        "label": "分宜县",
+        "value": "360521"
+      }
+    ],
+    [{
+        "label": "月湖区",
+        "value": "360602"
+      },
+      {
+        "label": "余江县",
+        "value": "360622"
+      },
+      {
+        "label": "贵溪市",
+        "value": "360681"
+      }
+    ],
+    [{
+        "label": "章贡区",
+        "value": "360702"
+      },
+      {
+        "label": "南康区",
+        "value": "360703"
+      },
+      {
+        "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": "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": "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": "361002"
+      },
+      {
+        "label": "东乡区",
+        "value": "361003"
+      },
+      {
+        "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": "361030"
+      }
+    ],
+    [{
+        "label": "信州区",
+        "value": "361102"
+      },
+      {
+        "label": "广丰区",
+        "value": "361103"
+      },
+      {
+        "label": "上饶县",
+        "value": "361121"
+      },
+      {
+        "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": "370102"
+      },
+      {
+        "label": "市中区",
+        "value": "370103"
+      },
+      {
+        "label": "槐荫区",
+        "value": "370104"
+      },
+      {
+        "label": "天桥区",
+        "value": "370105"
+      },
+      {
+        "label": "历城区",
+        "value": "370112"
+      },
+      {
+        "label": "长清区",
+        "value": "370113"
+      },
+      {
+        "label": "章丘区",
+        "value": "370114"
+      },
+      {
+        "label": "平阴县",
+        "value": "370124"
+      },
+      {
+        "label": "济阳县",
+        "value": "370125"
+      },
+      {
+        "label": "商河县",
+        "value": "370126"
+      },
+      {
+        "label": "济南高新技术产业开发区",
+        "value": "370171"
+      }
+    ],
+    [{
+        "label": "市南区",
+        "value": "370202"
+      },
+      {
+        "label": "市北区",
+        "value": "370203"
+      },
+      {
+        "label": "黄岛区",
+        "value": "370211"
+      },
+      {
+        "label": "崂山区",
+        "value": "370212"
+      },
+      {
+        "label": "李沧区",
+        "value": "370213"
+      },
+      {
+        "label": "城阳区",
+        "value": "370214"
+      },
+      {
+        "label": "即墨区",
+        "value": "370215"
+      },
+      {
+        "label": "青岛高新技术产业开发区",
+        "value": "370271"
+      },
+      {
+        "label": "胶州市",
+        "value": "370281"
+      },
+      {
+        "label": "平度市",
+        "value": "370283"
+      },
+      {
+        "label": "莱西市",
+        "value": "370285"
+      }
+    ],
+    [{
+        "label": "淄川区",
+        "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": "370402"
+      },
+      {
+        "label": "薛城区",
+        "value": "370403"
+      },
+      {
+        "label": "峄城区",
+        "value": "370404"
+      },
+      {
+        "label": "台儿庄区",
+        "value": "370405"
+      },
+      {
+        "label": "山亭区",
+        "value": "370406"
+      },
+      {
+        "label": "滕州市",
+        "value": "370481"
+      }
+    ],
+    [{
+        "label": "东营区",
+        "value": "370502"
+      },
+      {
+        "label": "河口区",
+        "value": "370503"
+      },
+      {
+        "label": "垦利区",
+        "value": "370505"
+      },
+      {
+        "label": "利津县",
+        "value": "370522"
+      },
+      {
+        "label": "广饶县",
+        "value": "370523"
+      },
+      {
+        "label": "东营经济技术开发区",
+        "value": "370571"
+      },
+      {
+        "label": "东营港经济开发区",
+        "value": "370572"
+      }
+    ],
+    [{
+        "label": "芝罘区",
+        "value": "370602"
+      },
+      {
+        "label": "福山区",
+        "value": "370611"
+      },
+      {
+        "label": "牟平区",
+        "value": "370612"
+      },
+      {
+        "label": "莱山区",
+        "value": "370613"
+      },
+      {
+        "label": "长岛县",
+        "value": "370634"
+      },
+      {
+        "label": "烟台高新技术产业开发区",
+        "value": "370671"
+      },
+      {
+        "label": "烟台经济技术开发区",
+        "value": "370672"
+      },
+      {
+        "label": "龙口市",
+        "value": "370681"
+      },
+      {
+        "label": "莱阳市",
+        "value": "370682"
+      },
+      {
+        "label": "莱州市",
+        "value": "370683"
+      },
+      {
+        "label": "蓬莱市",
+        "value": "370684"
+      },
+      {
+        "label": "招远市",
+        "value": "370685"
+      },
+      {
+        "label": "栖霞市",
+        "value": "370686"
+      },
+      {
+        "label": "海阳市",
+        "value": "370687"
+      }
+    ],
+    [{
+        "label": "潍城区",
+        "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": "370811"
+      },
+      {
+        "label": "兖州区",
+        "value": "370812"
+      },
+      {
+        "label": "微山县",
+        "value": "370826"
+      },
+      {
+        "label": "鱼台县",
+        "value": "370827"
+      },
+      {
+        "label": "金乡县",
+        "value": "370828"
+      },
+      {
+        "label": "嘉祥县",
+        "value": "370829"
+      },
+      {
+        "label": "汶上县",
+        "value": "370830"
+      },
+      {
+        "label": "泗水县",
+        "value": "370831"
+      },
+      {
+        "label": "梁山县",
+        "value": "370832"
+      },
+      {
+        "label": "济宁高新技术产业开发区",
+        "value": "370871"
+      },
+      {
+        "label": "曲阜市",
+        "value": "370881"
+      },
+      {
+        "label": "邹城市",
+        "value": "370883"
+      }
+    ],
+    [{
+        "label": "泰山区",
+        "value": "370902"
+      },
+      {
+        "label": "岱岳区",
+        "value": "370911"
+      },
+      {
+        "label": "宁阳县",
+        "value": "370921"
+      },
+      {
+        "label": "东平县",
+        "value": "370923"
+      },
+      {
+        "label": "新泰市",
+        "value": "370982"
+      },
+      {
+        "label": "肥城市",
+        "value": "370983"
+      }
+    ],
+    [{
+        "label": "环翠区",
+        "value": "371002"
+      },
+      {
+        "label": "文登区",
+        "value": "371003"
+      },
+      {
+        "label": "威海火炬高技术产业开发区",
+        "value": "371071"
+      },
+      {
+        "label": "威海经济技术开发区",
+        "value": "371072"
+      },
+      {
+        "label": "威海临港经济技术开发区",
+        "value": "371073"
+      },
+      {
+        "label": "荣成市",
+        "value": "371082"
+      },
+      {
+        "label": "乳山市",
+        "value": "371083"
+      }
+    ],
+    [{
+        "label": "东港区",
+        "value": "371102"
+      },
+      {
+        "label": "岚山区",
+        "value": "371103"
+      },
+      {
+        "label": "五莲县",
+        "value": "371121"
+      },
+      {
+        "label": "莒县",
+        "value": "371122"
+      },
+      {
+        "label": "日照经济技术开发区",
+        "value": "371171"
+      },
+      {
+        "label": "日照国际海洋城",
+        "value": "371172"
+      }
+    ],
+    [{
+        "label": "莱城区",
+        "value": "371202"
+      },
+      {
+        "label": "钢城区",
+        "value": "371203"
+      }
+    ],
+    [{
+        "label": "兰山区",
+        "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": "371372"
+      },
+      {
+        "label": "临沂临港经济开发区",
+        "value": "371373"
+      }
+    ],
+    [{
+        "label": "德城区",
+        "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": "371471"
+      },
+      {
+        "label": "德州运河经济开发区",
+        "value": "371472"
+      },
+      {
+        "label": "乐陵市",
+        "value": "371481"
+      },
+      {
+        "label": "禹城市",
+        "value": "371482"
+      }
+    ],
+    [{
+        "label": "东昌府区",
+        "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": "371602"
+      },
+      {
+        "label": "沾化区",
+        "value": "371603"
+      },
+      {
+        "label": "惠民县",
+        "value": "371621"
+      },
+      {
+        "label": "阳信县",
+        "value": "371622"
+      },
+      {
+        "label": "无棣县",
+        "value": "371623"
+      },
+      {
+        "label": "博兴县",
+        "value": "371625"
+      },
+      {
+        "label": "邹平县",
+        "value": "371626"
+      }
+    ],
+    [{
+        "label": "牡丹区",
+        "value": "371702"
+      },
+      {
+        "label": "定陶区",
+        "value": "371703"
+      },
+      {
+        "label": "曹县",
+        "value": "371721"
+      },
+      {
+        "label": "单县",
+        "value": "371722"
+      },
+      {
+        "label": "成武县",
+        "value": "371723"
+      },
+      {
+        "label": "巨野县",
+        "value": "371724"
+      },
+      {
+        "label": "郓城县",
+        "value": "371725"
+      },
+      {
+        "label": "鄄城县",
+        "value": "371726"
+      },
+      {
+        "label": "东明县",
+        "value": "371728"
+      },
+      {
+        "label": "菏泽经济技术开发区",
+        "value": "371771"
+      },
+      {
+        "label": "菏泽高新技术开发区",
+        "value": "371772"
+      }
+    ]
+  ],
+  [
+    [{
+        "label": "中原区",
+        "value": "410102"
+      },
+      {
+        "label": "二七区",
+        "value": "410103"
+      },
+      {
+        "label": "管城回族区",
+        "value": "410104"
+      },
+      {
+        "label": "金水区",
+        "value": "410105"
+      },
+      {
+        "label": "上街区",
+        "value": "410106"
+      },
+      {
+        "label": "惠济区",
+        "value": "410108"
+      },
+      {
+        "label": "中牟县",
+        "value": "410122"
+      },
+      {
+        "label": "郑州经济技术开发区",
+        "value": "410171"
+      },
+      {
+        "label": "郑州高新技术产业开发区",
+        "value": "410172"
+      },
+      {
+        "label": "郑州航空港经济综合实验区",
+        "value": "410173"
+      },
+      {
+        "label": "巩义市",
+        "value": "410181"
+      },
+      {
+        "label": "荥阳市",
+        "value": "410182"
+      },
+      {
+        "label": "新密市",
+        "value": "410183"
+      },
+      {
+        "label": "新郑市",
+        "value": "410184"
+      },
+      {
+        "label": "登封市",
+        "value": "410185"
+      }
+    ],
+    [{
+        "label": "龙亭区",
+        "value": "410202"
+      },
+      {
+        "label": "顺河回族区",
+        "value": "410203"
+      },
+      {
+        "label": "鼓楼区",
+        "value": "410204"
+      },
+      {
+        "label": "禹王台区",
+        "value": "410205"
+      },
+      {
+        "label": "祥符区",
+        "value": "410212"
+      },
+      {
+        "label": "杞县",
+        "value": "410221"
+      },
+      {
+        "label": "通许县",
+        "value": "410222"
+      },
+      {
+        "label": "尉氏县",
+        "value": "410223"
+      },
+      {
+        "label": "兰考县",
+        "value": "410225"
+      }
+    ],
+    [{
+        "label": "老城区",
+        "value": "410302"
+      },
+      {
+        "label": "西工区",
+        "value": "410303"
+      },
+      {
+        "label": "瀍河回族区",
+        "value": "410304"
+      },
+      {
+        "label": "涧西区",
+        "value": "410305"
+      },
+      {
+        "label": "吉利区",
+        "value": "410306"
+      },
+      {
+        "label": "洛龙区",
+        "value": "410311"
+      },
+      {
+        "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": "410371"
+      },
+      {
+        "label": "偃师市",
+        "value": "410381"
+      }
+    ],
+    [{
+        "label": "新华区",
+        "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": "410471"
+      },
+      {
+        "label": "平顶山市新城区",
+        "value": "410472"
+      },
+      {
+        "label": "舞钢市",
+        "value": "410481"
+      },
+      {
+        "label": "汝州市",
+        "value": "410482"
+      }
+    ],
+    [{
+        "label": "文峰区",
+        "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": "410571"
+      },
+      {
+        "label": "林州市",
+        "value": "410581"
+      }
+    ],
+    [{
+        "label": "鹤山区",
+        "value": "410602"
+      },
+      {
+        "label": "山城区",
+        "value": "410603"
+      },
+      {
+        "label": "淇滨区",
+        "value": "410611"
+      },
+      {
+        "label": "浚县",
+        "value": "410621"
+      },
+      {
+        "label": "淇县",
+        "value": "410622"
+      },
+      {
+        "label": "鹤壁经济技术开发区",
+        "value": "410671"
+      }
+    ],
+    [{
+        "label": "红旗区",
+        "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": "410771"
+      },
+      {
+        "label": "新乡经济技术开发区",
+        "value": "410772"
+      },
+      {
+        "label": "新乡市平原城乡一体化示范区",
+        "value": "410773"
+      },
+      {
+        "label": "卫辉市",
+        "value": "410781"
+      },
+      {
+        "label": "辉县市",
+        "value": "410782"
+      }
+    ],
+    [{
+        "label": "解放区",
+        "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": "410871"
+      },
+      {
+        "label": "沁阳市",
+        "value": "410882"
+      },
+      {
+        "label": "孟州市",
+        "value": "410883"
+      }
+    ],
+    [{
+        "label": "华龙区",
+        "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": "411002"
+      },
+      {
+        "label": "建安区",
+        "value": "411003"
+      },
+      {
+        "label": "鄢陵县",
+        "value": "411024"
+      },
+      {
+        "label": "襄城县",
+        "value": "411025"
+      },
+      {
+        "label": "许昌经济技术开发区",
+        "value": "411071"
+      },
+      {
+        "label": "禹州市",
+        "value": "411081"
+      },
+      {
+        "label": "长葛市",
+        "value": "411082"
+      }
+    ],
+    [{
+        "label": "源汇区",
+        "value": "411102"
+      },
+      {
+        "label": "郾城区",
+        "value": "411103"
+      },
+      {
+        "label": "召陵区",
+        "value": "411104"
+      },
+      {
+        "label": "舞阳县",
+        "value": "411121"
+      },
+      {
+        "label": "临颍县",
+        "value": "411122"
+      },
+      {
+        "label": "漯河经济技术开发区",
+        "value": "411171"
+      }
+    ],
+    [{
+        "label": "湖滨区",
+        "value": "411202"
+      },
+      {
+        "label": "陕州区",
+        "value": "411203"
+      },
+      {
+        "label": "渑池县",
+        "value": "411221"
+      },
+      {
+        "label": "卢氏县",
+        "value": "411224"
+      },
+      {
+        "label": "河南三门峡经济开发区",
+        "value": "411271"
+      },
+      {
+        "label": "义马市",
+        "value": "411281"
+      },
+      {
+        "label": "灵宝市",
+        "value": "411282"
+      }
+    ],
+    [{
+        "label": "宛城区",
+        "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": "411371"
+      },
+      {
+        "label": "南阳市城乡一体化示范区",
+        "value": "411372"
+      },
+      {
+        "label": "邓州市",
+        "value": "411381"
+      }
+    ],
+    [{
+        "label": "梁园区",
+        "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": "411471"
+      },
+      {
+        "label": "河南商丘经济开发区",
+        "value": "411472"
+      },
+      {
+        "label": "永城市",
+        "value": "411481"
+      }
+    ],
+    [{
+        "label": "浉河区",
+        "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": "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": "411671"
+      },
+      {
+        "label": "项城市",
+        "value": "411681"
+      }
+    ],
+    [{
+        "label": "驿城区",
+        "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": "411728"
+      },
+      {
+        "label": "新蔡县",
+        "value": "411729"
+      },
+      {
+        "label": "河南驻马店经济开发区",
+        "value": "411771"
+      }
+    ],
+    [{
+      "label": "济源市",
+      "value": "419001"
+    }]
+  ],
+  [
+    [{
+        "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": "420202"
+      },
+      {
+        "label": "西塞山区",
+        "value": "420203"
+      },
+      {
+        "label": "下陆区",
+        "value": "420204"
+      },
+      {
+        "label": "铁山区",
+        "value": "420205"
+      },
+      {
+        "label": "阳新县",
+        "value": "420222"
+      },
+      {
+        "label": "大冶市",
+        "value": "420281"
+      }
+    ],
+    [{
+        "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": "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": "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": "420702"
+      },
+      {
+        "label": "华容区",
+        "value": "420703"
+      },
+      {
+        "label": "鄂城区",
+        "value": "420704"
+      }
+    ],
+    [{
+        "label": "东宝区",
+        "value": "420802"
+      },
+      {
+        "label": "掇刀区",
+        "value": "420804"
+      },
+      {
+        "label": "京山县",
+        "value": "420821"
+      },
+      {
+        "label": "沙洋县",
+        "value": "420822"
+      },
+      {
+        "label": "钟祥市",
+        "value": "420881"
+      }
+    ],
+    [{
+        "label": "孝南区",
+        "value": "420902"
+      },
+      {
+        "label": "孝昌县",
+        "value": "420921"
+      },
+      {
+        "label": "大悟县",
+        "value": "420922"
+      },
+      {
+        "label": "云梦县",
+        "value": "420923"
+      },
+      {
+        "label": "应城市",
+        "value": "420981"
+      },
+      {
+        "label": "安陆市",
+        "value": "420982"
+      },
+      {
+        "label": "汉川市",
+        "value": "420984"
+      }
+    ],
+    [{
+        "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": "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": "421202"
+      },
+      {
+        "label": "嘉鱼县",
+        "value": "421221"
+      },
+      {
+        "label": "通城县",
+        "value": "421222"
+      },
+      {
+        "label": "崇阳县",
+        "value": "421223"
+      },
+      {
+        "label": "通山县",
+        "value": "421224"
+      },
+      {
+        "label": "赤壁市",
+        "value": "421281"
+      }
+    ],
+    [{
+        "label": "曾都区",
+        "value": "421303"
+      },
+      {
+        "label": "随县",
+        "value": "421321"
+      },
+      {
+        "label": "广水市",
+        "value": "421381"
+      }
+    ],
+    [{
+        "label": "恩施市",
+        "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": "429004"
+      },
+      {
+        "label": "潜江市",
+        "value": "429005"
+      },
+      {
+        "label": "天门市",
+        "value": "429006"
+      },
+      {
+        "label": "神农架林区",
+        "value": "429021"
+      }
+    ]
+  ],
+  [
+    [{
+        "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": "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": "430302"
+      },
+      {
+        "label": "岳塘区",
+        "value": "430304"
+      },
+      {
+        "label": "湘潭县",
+        "value": "430321"
+      },
+      {
+        "label": "湖南湘潭高新技术产业园区",
+        "value": "430371"
+      },
+      {
+        "label": "湘潭昭山示范区",
+        "value": "430372"
+      },
+      {
+        "label": "湘潭九华示范区",
+        "value": "430373"
+      },
+      {
+        "label": "湘乡市",
+        "value": "430381"
+      },
+      {
+        "label": "韶山市",
+        "value": "430382"
+      }
+    ],
+    [{
+        "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": "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": "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": "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": "430802"
+      },
+      {
+        "label": "武陵源区",
+        "value": "430811"
+      },
+      {
+        "label": "慈利县",
+        "value": "430821"
+      },
+      {
+        "label": "桑植县",
+        "value": "430822"
+      }
+    ],
+    [{
+        "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": "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": "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": "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": "431302"
+      },
+      {
+        "label": "双峰县",
+        "value": "431321"
+      },
+      {
+        "label": "新化县",
+        "value": "431322"
+      },
+      {
+        "label": "冷水江市",
+        "value": "431381"
+      },
+      {
+        "label": "涟源市",
+        "value": "431382"
+      }
+    ],
+    [{
+        "label": "吉首市",
+        "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": "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": "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": "440303"
+      },
+      {
+        "label": "福田区",
+        "value": "440304"
+      },
+      {
+        "label": "南山区",
+        "value": "440305"
+      },
+      {
+        "label": "宝安区",
+        "value": "440306"
+      },
+      {
+        "label": "龙岗区",
+        "value": "440307"
+      },
+      {
+        "label": "盐田区",
+        "value": "440308"
+      },
+      {
+        "label": "龙华区",
+        "value": "440309"
+      },
+      {
+        "label": "坪山区",
+        "value": "440310"
+      }
+    ],
+    [{
+        "label": "香洲区",
+        "value": "440402"
+      },
+      {
+        "label": "斗门区",
+        "value": "440403"
+      },
+      {
+        "label": "金湾区",
+        "value": "440404"
+      }
+    ],
+    [{
+        "label": "龙湖区",
+        "value": "440507"
+      },
+      {
+        "label": "金平区",
+        "value": "440511"
+      },
+      {
+        "label": "濠江区",
+        "value": "440512"
+      },
+      {
+        "label": "潮阳区",
+        "value": "440513"
+      },
+      {
+        "label": "潮南区",
+        "value": "440514"
+      },
+      {
+        "label": "澄海区",
+        "value": "440515"
+      },
+      {
+        "label": "南澳县",
+        "value": "440523"
+      }
+    ],
+    [{
+        "label": "禅城区",
+        "value": "440604"
+      },
+      {
+        "label": "南海区",
+        "value": "440605"
+      },
+      {
+        "label": "顺德区",
+        "value": "440606"
+      },
+      {
+        "label": "三水区",
+        "value": "440607"
+      },
+      {
+        "label": "高明区",
+        "value": "440608"
+      }
+    ],
+    [{
+        "label": "蓬江区",
+        "value": "440703"
+      },
+      {
+        "label": "江海区",
+        "value": "440704"
+      },
+      {
+        "label": "新会区",
+        "value": "440705"
+      },
+      {
+        "label": "台山市",
+        "value": "440781"
+      },
+      {
+        "label": "开平市",
+        "value": "440783"
+      },
+      {
+        "label": "鹤山市",
+        "value": "440784"
+      },
+      {
+        "label": "恩平市",
+        "value": "440785"
+      }
+    ],
+    [{
+        "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": "440902"
+      },
+      {
+        "label": "电白区",
+        "value": "440904"
+      },
+      {
+        "label": "高州市",
+        "value": "440981"
+      },
+      {
+        "label": "化州市",
+        "value": "440982"
+      },
+      {
+        "label": "信宜市",
+        "value": "440983"
+      }
+    ],
+    [{
+        "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": "441302"
+      },
+      {
+        "label": "惠阳区",
+        "value": "441303"
+      },
+      {
+        "label": "博罗县",
+        "value": "441322"
+      },
+      {
+        "label": "惠东县",
+        "value": "441323"
+      },
+      {
+        "label": "龙门县",
+        "value": "441324"
+      }
+    ],
+    [{
+        "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": "441502"
+      },
+      {
+        "label": "海丰县",
+        "value": "441521"
+      },
+      {
+        "label": "陆河县",
+        "value": "441523"
+      },
+      {
+        "label": "陆丰市",
+        "value": "441581"
+      }
+    ],
+    [{
+        "label": "源城区",
+        "value": "441602"
+      },
+      {
+        "label": "紫金县",
+        "value": "441621"
+      },
+      {
+        "label": "龙川县",
+        "value": "441622"
+      },
+      {
+        "label": "连平县",
+        "value": "441623"
+      },
+      {
+        "label": "和平县",
+        "value": "441624"
+      },
+      {
+        "label": "东源县",
+        "value": "441625"
+      }
+    ],
+    [{
+        "label": "江城区",
+        "value": "441702"
+      },
+      {
+        "label": "阳东区",
+        "value": "441704"
+      },
+      {
+        "label": "阳西县",
+        "value": "441721"
+      },
+      {
+        "label": "阳春市",
+        "value": "441781"
+      }
+    ],
+    [{
+        "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": "445102"
+      },
+      {
+        "label": "潮安区",
+        "value": "445103"
+      },
+      {
+        "label": "饶平县",
+        "value": "445122"
+      }
+    ],
+    [{
+        "label": "榕城区",
+        "value": "445202"
+      },
+      {
+        "label": "揭东区",
+        "value": "445203"
+      },
+      {
+        "label": "揭西县",
+        "value": "445222"
+      },
+      {
+        "label": "惠来县",
+        "value": "445224"
+      },
+      {
+        "label": "普宁市",
+        "value": "445281"
+      }
+    ],
+    [{
+        "label": "云城区",
+        "value": "445302"
+      },
+      {
+        "label": "云安区",
+        "value": "445303"
+      },
+      {
+        "label": "新兴县",
+        "value": "445321"
+      },
+      {
+        "label": "郁南县",
+        "value": "445322"
+      },
+      {
+        "label": "罗定市",
+        "value": "445381"
+      }
+    ]
+  ],
+  [
+    [{
+        "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": "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": "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": "450403"
+      },
+      {
+        "label": "长洲区",
+        "value": "450405"
+      },
+      {
+        "label": "龙圩区",
+        "value": "450406"
+      },
+      {
+        "label": "苍梧县",
+        "value": "450421"
+      },
+      {
+        "label": "藤县",
+        "value": "450422"
+      },
+      {
+        "label": "蒙山县",
+        "value": "450423"
+      },
+      {
+        "label": "岑溪市",
+        "value": "450481"
+      }
+    ],
+    [{
+        "label": "海城区",
+        "value": "450502"
+      },
+      {
+        "label": "银海区",
+        "value": "450503"
+      },
+      {
+        "label": "铁山港区",
+        "value": "450512"
+      },
+      {
+        "label": "合浦县",
+        "value": "450521"
+      }
+    ],
+    [{
+        "label": "港口区",
+        "value": "450602"
+      },
+      {
+        "label": "防城区",
+        "value": "450603"
+      },
+      {
+        "label": "上思县",
+        "value": "450621"
+      },
+      {
+        "label": "东兴市",
+        "value": "450681"
+      }
+    ],
+    [{
+        "label": "钦南区",
+        "value": "450702"
+      },
+      {
+        "label": "钦北区",
+        "value": "450703"
+      },
+      {
+        "label": "灵山县",
+        "value": "450721"
+      },
+      {
+        "label": "浦北县",
+        "value": "450722"
+      }
+    ],
+    [{
+        "label": "港北区",
+        "value": "450802"
+      },
+      {
+        "label": "港南区",
+        "value": "450803"
+      },
+      {
+        "label": "覃塘区",
+        "value": "450804"
+      },
+      {
+        "label": "平南县",
+        "value": "450821"
+      },
+      {
+        "label": "桂平市",
+        "value": "450881"
+      }
+    ],
+    [{
+        "label": "玉州区",
+        "value": "450902"
+      },
+      {
+        "label": "福绵区",
+        "value": "450903"
+      },
+      {
+        "label": "容县",
+        "value": "450921"
+      },
+      {
+        "label": "陆川县",
+        "value": "450922"
+      },
+      {
+        "label": "博白县",
+        "value": "450923"
+      },
+      {
+        "label": "兴业县",
+        "value": "450924"
+      },
+      {
+        "label": "北流市",
+        "value": "450981"
+      }
+    ],
+    [{
+        "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": "451102"
+      },
+      {
+        "label": "平桂区",
+        "value": "451103"
+      },
+      {
+        "label": "昭平县",
+        "value": "451121"
+      },
+      {
+        "label": "钟山县",
+        "value": "451122"
+      },
+      {
+        "label": "富川瑶族自治县",
+        "value": "451123"
+      }
+    ],
+    [{
+        "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": "451302"
+      },
+      {
+        "label": "忻城县",
+        "value": "451321"
+      },
+      {
+        "label": "象州县",
+        "value": "451322"
+      },
+      {
+        "label": "武宣县",
+        "value": "451323"
+      },
+      {
+        "label": "金秀瑶族自治县",
+        "value": "451324"
+      },
+      {
+        "label": "合山市",
+        "value": "451381"
+      }
+    ],
+    [{
+        "label": "江州区",
+        "value": "451402"
+      },
+      {
+        "label": "扶绥县",
+        "value": "451421"
+      },
+      {
+        "label": "宁明县",
+        "value": "451422"
+      },
+      {
+        "label": "龙州县",
+        "value": "451423"
+      },
+      {
+        "label": "大新县",
+        "value": "451424"
+      },
+      {
+        "label": "天等县",
+        "value": "451425"
+      },
+      {
+        "label": "凭祥市",
+        "value": "451481"
+      }
+    ]
+  ],
+  [
+    [{
+        "label": "秀英区",
+        "value": "460105"
+      },
+      {
+        "label": "龙华区",
+        "value": "460106"
+      },
+      {
+        "label": "琼山区",
+        "value": "460107"
+      },
+      {
+        "label": "美兰区",
+        "value": "460108"
+      }
+    ],
+    [{
+        "label": "海棠区",
+        "value": "460202"
+      },
+      {
+        "label": "吉阳区",
+        "value": "460203"
+      },
+      {
+        "label": "天涯区",
+        "value": "460204"
+      },
+      {
+        "label": "崖州区",
+        "value": "460205"
+      }
+    ],
+    [{
+        "label": "西沙群岛",
+        "value": "460321"
+      },
+      {
+        "label": "南沙群岛",
+        "value": "460322"
+      },
+      {
+        "label": "中沙群岛的岛礁及其海域",
+        "value": "460323"
+      }
+    ],
+    [{
+      "label": "儋州市",
+      "value": "460400"
+    }],
+    [{
+        "label": "五指山市",
+        "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": "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": "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": "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": "510302"
+      },
+      {
+        "label": "贡井区",
+        "value": "510303"
+      },
+      {
+        "label": "大安区",
+        "value": "510304"
+      },
+      {
+        "label": "沿滩区",
+        "value": "510311"
+      },
+      {
+        "label": "荣县",
+        "value": "510321"
+      },
+      {
+        "label": "富顺县",
+        "value": "510322"
+      }
+    ],
+    [{
+        "label": "东区",
+        "value": "510402"
+      },
+      {
+        "label": "西区",
+        "value": "510403"
+      },
+      {
+        "label": "仁和区",
+        "value": "510411"
+      },
+      {
+        "label": "米易县",
+        "value": "510421"
+      },
+      {
+        "label": "盐边县",
+        "value": "510422"
+      }
+    ],
+    [{
+        "label": "江阳区",
+        "value": "510502"
+      },
+      {
+        "label": "纳溪区",
+        "value": "510503"
+      },
+      {
+        "label": "龙马潭区",
+        "value": "510504"
+      },
+      {
+        "label": "泸县",
+        "value": "510521"
+      },
+      {
+        "label": "合江县",
+        "value": "510522"
+      },
+      {
+        "label": "叙永县",
+        "value": "510524"
+      },
+      {
+        "label": "古蔺县",
+        "value": "510525"
+      }
+    ],
+    [{
+        "label": "旌阳区",
+        "value": "510603"
+      },
+      {
+        "label": "罗江区",
+        "value": "510604"
+      },
+      {
+        "label": "中江县",
+        "value": "510623"
+      },
+      {
+        "label": "广汉市",
+        "value": "510681"
+      },
+      {
+        "label": "什邡市",
+        "value": "510682"
+      },
+      {
+        "label": "绵竹市",
+        "value": "510683"
+      }
+    ],
+    [{
+        "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": "510802"
+      },
+      {
+        "label": "昭化区",
+        "value": "510811"
+      },
+      {
+        "label": "朝天区",
+        "value": "510812"
+      },
+      {
+        "label": "旺苍县",
+        "value": "510821"
+      },
+      {
+        "label": "青川县",
+        "value": "510822"
+      },
+      {
+        "label": "剑阁县",
+        "value": "510823"
+      },
+      {
+        "label": "苍溪县",
+        "value": "510824"
+      }
+    ],
+    [{
+        "label": "船山区",
+        "value": "510903"
+      },
+      {
+        "label": "安居区",
+        "value": "510904"
+      },
+      {
+        "label": "蓬溪县",
+        "value": "510921"
+      },
+      {
+        "label": "射洪县",
+        "value": "510922"
+      },
+      {
+        "label": "大英县",
+        "value": "510923"
+      }
+    ],
+    [{
+        "label": "市中区",
+        "value": "511002"
+      },
+      {
+        "label": "东兴区",
+        "value": "511011"
+      },
+      {
+        "label": "威远县",
+        "value": "511024"
+      },
+      {
+        "label": "资中县",
+        "value": "511025"
+      },
+      {
+        "label": "内江经济开发区",
+        "value": "511071"
+      },
+      {
+        "label": "隆昌市",
+        "value": "511083"
+      }
+    ],
+    [{
+        "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": "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": "511402"
+      },
+      {
+        "label": "彭山区",
+        "value": "511403"
+      },
+      {
+        "label": "仁寿县",
+        "value": "511421"
+      },
+      {
+        "label": "洪雅县",
+        "value": "511423"
+      },
+      {
+        "label": "丹棱县",
+        "value": "511424"
+      },
+      {
+        "label": "青神县",
+        "value": "511425"
+      }
+    ],
+    [{
+        "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": "511602"
+      },
+      {
+        "label": "前锋区",
+        "value": "511603"
+      },
+      {
+        "label": "岳池县",
+        "value": "511621"
+      },
+      {
+        "label": "武胜县",
+        "value": "511622"
+      },
+      {
+        "label": "邻水县",
+        "value": "511623"
+      },
+      {
+        "label": "华蓥市",
+        "value": "511681"
+      }
+    ],
+    [{
+        "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": "511802"
+      },
+      {
+        "label": "名山区",
+        "value": "511803"
+      },
+      {
+        "label": "荥经县",
+        "value": "511822"
+      },
+      {
+        "label": "汉源县",
+        "value": "511823"
+      },
+      {
+        "label": "石棉县",
+        "value": "511824"
+      },
+      {
+        "label": "天全县",
+        "value": "511825"
+      },
+      {
+        "label": "芦山县",
+        "value": "511826"
+      },
+      {
+        "label": "宝兴县",
+        "value": "511827"
+      }
+    ],
+    [{
+        "label": "巴州区",
+        "value": "511902"
+      },
+      {
+        "label": "恩阳区",
+        "value": "511903"
+      },
+      {
+        "label": "通江县",
+        "value": "511921"
+      },
+      {
+        "label": "南江县",
+        "value": "511922"
+      },
+      {
+        "label": "平昌县",
+        "value": "511923"
+      },
+      {
+        "label": "巴中经济开发区",
+        "value": "511971"
+      }
+    ],
+    [{
+        "label": "雁江区",
+        "value": "512002"
+      },
+      {
+        "label": "安岳县",
+        "value": "512021"
+      },
+      {
+        "label": "乐至县",
+        "value": "512022"
+      }
+    ],
+    [{
+        "label": "马尔康市",
+        "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": "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": "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": "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": "520201"
+      },
+      {
+        "label": "六枝特区",
+        "value": "520203"
+      },
+      {
+        "label": "水城县",
+        "value": "520221"
+      },
+      {
+        "label": "盘州市",
+        "value": "520281"
+      }
+    ],
+    [{
+        "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": "520402"
+      },
+      {
+        "label": "平坝区",
+        "value": "520403"
+      },
+      {
+        "label": "普定县",
+        "value": "520422"
+      },
+      {
+        "label": "镇宁布依族苗族自治县",
+        "value": "520423"
+      },
+      {
+        "label": "关岭布依族苗族自治县",
+        "value": "520424"
+      },
+      {
+        "label": "紫云苗族布依族自治县",
+        "value": "520425"
+      }
+    ],
+    [{
+        "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": "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": "522301"
+      },
+      {
+        "label": "兴仁县",
+        "value": "522322"
+      },
+      {
+        "label": "普安县",
+        "value": "522323"
+      },
+      {
+        "label": "晴隆县",
+        "value": "522324"
+      },
+      {
+        "label": "贞丰县",
+        "value": "522325"
+      },
+      {
+        "label": "望谟县",
+        "value": "522326"
+      },
+      {
+        "label": "册亨县",
+        "value": "522327"
+      },
+      {
+        "label": "安龙县",
+        "value": "522328"
+      }
+    ],
+    [{
+        "label": "凯里市",
+        "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": "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": "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": "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": "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": "530502"
+      },
+      {
+        "label": "施甸县",
+        "value": "530521"
+      },
+      {
+        "label": "龙陵县",
+        "value": "530523"
+      },
+      {
+        "label": "昌宁县",
+        "value": "530524"
+      },
+      {
+        "label": "腾冲市",
+        "value": "530581"
+      }
+    ],
+    [{
+        "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": "530702"
+      },
+      {
+        "label": "玉龙纳西族自治县",
+        "value": "530721"
+      },
+      {
+        "label": "永胜县",
+        "value": "530722"
+      },
+      {
+        "label": "华坪县",
+        "value": "530723"
+      },
+      {
+        "label": "宁蒗彝族自治县",
+        "value": "530724"
+      }
+    ],
+    [{
+        "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": "530902"
+      },
+      {
+        "label": "凤庆县",
+        "value": "530921"
+      },
+      {
+        "label": "云县",
+        "value": "530922"
+      },
+      {
+        "label": "永德县",
+        "value": "530923"
+      },
+      {
+        "label": "镇康县",
+        "value": "530924"
+      },
+      {
+        "label": "双江拉祜族佤族布朗族傣族自治县",
+        "value": "530925"
+      },
+      {
+        "label": "耿马傣族佤族自治县",
+        "value": "530926"
+      },
+      {
+        "label": "沧源佤族自治县",
+        "value": "530927"
+      }
+    ],
+    [{
+        "label": "楚雄市",
+        "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": "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": "532601"
+      },
+      {
+        "label": "砚山县",
+        "value": "532622"
+      },
+      {
+        "label": "西畴县",
+        "value": "532623"
+      },
+      {
+        "label": "麻栗坡县",
+        "value": "532624"
+      },
+      {
+        "label": "马关县",
+        "value": "532625"
+      },
+      {
+        "label": "丘北县",
+        "value": "532626"
+      },
+      {
+        "label": "广南县",
+        "value": "532627"
+      },
+      {
+        "label": "富宁县",
+        "value": "532628"
+      }
+    ],
+    [{
+        "label": "景洪市",
+        "value": "532801"
+      },
+      {
+        "label": "勐海县",
+        "value": "532822"
+      },
+      {
+        "label": "勐腊县",
+        "value": "532823"
+      }
+    ],
+    [{
+        "label": "大理市",
+        "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": "533102"
+      },
+      {
+        "label": "芒市",
+        "value": "533103"
+      },
+      {
+        "label": "梁河县",
+        "value": "533122"
+      },
+      {
+        "label": "盈江县",
+        "value": "533123"
+      },
+      {
+        "label": "陇川县",
+        "value": "533124"
+      }
+    ],
+    [{
+        "label": "泸水市",
+        "value": "533301"
+      },
+      {
+        "label": "福贡县",
+        "value": "533323"
+      },
+      {
+        "label": "贡山独龙族怒族自治县",
+        "value": "533324"
+      },
+      {
+        "label": "兰坪白族普米族自治县",
+        "value": "533325"
+      }
+    ],
+    [{
+        "label": "香格里拉市",
+        "value": "533401"
+      },
+      {
+        "label": "德钦县",
+        "value": "533422"
+      },
+      {
+        "label": "维西傈僳族自治县",
+        "value": "533423"
+      }
+    ]
+  ],
+  [
+    [{
+        "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": "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": "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": "540402"
+      },
+      {
+        "label": "工布江达县",
+        "value": "540421"
+      },
+      {
+        "label": "米林县",
+        "value": "540422"
+      },
+      {
+        "label": "墨脱县",
+        "value": "540423"
+      },
+      {
+        "label": "波密县",
+        "value": "540424"
+      },
+      {
+        "label": "察隅县",
+        "value": "540425"
+      },
+      {
+        "label": "朗县",
+        "value": "540426"
+      }
+    ],
+    [{
+        "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": "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": "542521"
+      },
+      {
+        "label": "札达县",
+        "value": "542522"
+      },
+      {
+        "label": "噶尔县",
+        "value": "542523"
+      },
+      {
+        "label": "日土县",
+        "value": "542524"
+      },
+      {
+        "label": "革吉县",
+        "value": "542525"
+      },
+      {
+        "label": "改则县",
+        "value": "542526"
+      },
+      {
+        "label": "措勤县",
+        "value": "542527"
+      }
+    ]
+  ],
+  [
+    [{
+        "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": "610202"
+      },
+      {
+        "label": "印台区",
+        "value": "610203"
+      },
+      {
+        "label": "耀州区",
+        "value": "610204"
+      },
+      {
+        "label": "宜君县",
+        "value": "610222"
+      }
+    ],
+    [{
+        "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": "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": "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": "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": "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": "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": "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": "611002"
+      },
+      {
+        "label": "洛南县",
+        "value": "611021"
+      },
+      {
+        "label": "丹凤县",
+        "value": "611022"
+      },
+      {
+        "label": "商南县",
+        "value": "611023"
+      },
+      {
+        "label": "山阳县",
+        "value": "611024"
+      },
+      {
+        "label": "镇安县",
+        "value": "611025"
+      },
+      {
+        "label": "柞水县",
+        "value": "611026"
+      }
+    ]
+  ],
+  [
+    [{
+        "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": "620201"
+    }],
+    [{
+        "label": "金川区",
+        "value": "620302"
+      },
+      {
+        "label": "永昌县",
+        "value": "620321"
+      }
+    ],
+    [{
+        "label": "白银区",
+        "value": "620402"
+      },
+      {
+        "label": "平川区",
+        "value": "620403"
+      },
+      {
+        "label": "靖远县",
+        "value": "620421"
+      },
+      {
+        "label": "会宁县",
+        "value": "620422"
+      },
+      {
+        "label": "景泰县",
+        "value": "620423"
+      }
+    ],
+    [{
+        "label": "秦州区",
+        "value": "620502"
+      },
+      {
+        "label": "麦积区",
+        "value": "620503"
+      },
+      {
+        "label": "清水县",
+        "value": "620521"
+      },
+      {
+        "label": "秦安县",
+        "value": "620522"
+      },
+      {
+        "label": "甘谷县",
+        "value": "620523"
+      },
+      {
+        "label": "武山县",
+        "value": "620524"
+      },
+      {
+        "label": "张家川回族自治县",
+        "value": "620525"
+      }
+    ],
+    [{
+        "label": "凉州区",
+        "value": "620602"
+      },
+      {
+        "label": "民勤县",
+        "value": "620621"
+      },
+      {
+        "label": "古浪县",
+        "value": "620622"
+      },
+      {
+        "label": "天祝藏族自治县",
+        "value": "620623"
+      }
+    ],
+    [{
+        "label": "甘州区",
+        "value": "620702"
+      },
+      {
+        "label": "肃南裕固族自治县",
+        "value": "620721"
+      },
+      {
+        "label": "民乐县",
+        "value": "620722"
+      },
+      {
+        "label": "临泽县",
+        "value": "620723"
+      },
+      {
+        "label": "高台县",
+        "value": "620724"
+      },
+      {
+        "label": "山丹县",
+        "value": "620725"
+      }
+    ],
+    [{
+        "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": "620902"
+      },
+      {
+        "label": "金塔县",
+        "value": "620921"
+      },
+      {
+        "label": "瓜州县",
+        "value": "620922"
+      },
+      {
+        "label": "肃北蒙古族自治县",
+        "value": "620923"
+      },
+      {
+        "label": "阿克塞哈萨克族自治县",
+        "value": "620924"
+      },
+      {
+        "label": "玉门市",
+        "value": "620981"
+      },
+      {
+        "label": "敦煌市",
+        "value": "620982"
+      }
+    ],
+    [{
+        "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": "621102"
+      },
+      {
+        "label": "通渭县",
+        "value": "621121"
+      },
+      {
+        "label": "陇西县",
+        "value": "621122"
+      },
+      {
+        "label": "渭源县",
+        "value": "621123"
+      },
+      {
+        "label": "临洮县",
+        "value": "621124"
+      },
+      {
+        "label": "漳县",
+        "value": "621125"
+      },
+      {
+        "label": "岷县",
+        "value": "621126"
+      }
+    ],
+    [{
+        "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": "622901"
+      },
+      {
+        "label": "临夏县",
+        "value": "622921"
+      },
+      {
+        "label": "康乐县",
+        "value": "622922"
+      },
+      {
+        "label": "永靖县",
+        "value": "622923"
+      },
+      {
+        "label": "广河县",
+        "value": "622924"
+      },
+      {
+        "label": "和政县",
+        "value": "622925"
+      },
+      {
+        "label": "东乡族自治县",
+        "value": "622926"
+      },
+      {
+        "label": "积石山保安族东乡族撒拉族自治县",
+        "value": "622927"
+      }
+    ],
+    [{
+        "label": "合作市",
+        "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": "630102"
+      },
+      {
+        "label": "城中区",
+        "value": "630103"
+      },
+      {
+        "label": "城西区",
+        "value": "630104"
+      },
+      {
+        "label": "城北区",
+        "value": "630105"
+      },
+      {
+        "label": "大通回族土族自治县",
+        "value": "630121"
+      },
+      {
+        "label": "湟中县",
+        "value": "630122"
+      },
+      {
+        "label": "湟源县",
+        "value": "630123"
+      }
+    ],
+    [{
+        "label": "乐都区",
+        "value": "630202"
+      },
+      {
+        "label": "平安区",
+        "value": "630203"
+      },
+      {
+        "label": "民和回族土族自治县",
+        "value": "630222"
+      },
+      {
+        "label": "互助土族自治县",
+        "value": "630223"
+      },
+      {
+        "label": "化隆回族自治县",
+        "value": "630224"
+      },
+      {
+        "label": "循化撒拉族自治县",
+        "value": "630225"
+      }
+    ],
+    [{
+        "label": "门源回族自治县",
+        "value": "632221"
+      },
+      {
+        "label": "祁连县",
+        "value": "632222"
+      },
+      {
+        "label": "海晏县",
+        "value": "632223"
+      },
+      {
+        "label": "刚察县",
+        "value": "632224"
+      }
+    ],
+    [{
+        "label": "同仁县",
+        "value": "632321"
+      },
+      {
+        "label": "尖扎县",
+        "value": "632322"
+      },
+      {
+        "label": "泽库县",
+        "value": "632323"
+      },
+      {
+        "label": "河南蒙古族自治县",
+        "value": "632324"
+      }
+    ],
+    [{
+        "label": "共和县",
+        "value": "632521"
+      },
+      {
+        "label": "同德县",
+        "value": "632522"
+      },
+      {
+        "label": "贵德县",
+        "value": "632523"
+      },
+      {
+        "label": "兴海县",
+        "value": "632524"
+      },
+      {
+        "label": "贵南县",
+        "value": "632525"
+      }
+    ],
+    [{
+        "label": "玛沁县",
+        "value": "632621"
+      },
+      {
+        "label": "班玛县",
+        "value": "632622"
+      },
+      {
+        "label": "甘德县",
+        "value": "632623"
+      },
+      {
+        "label": "达日县",
+        "value": "632624"
+      },
+      {
+        "label": "久治县",
+        "value": "632625"
+      },
+      {
+        "label": "玛多县",
+        "value": "632626"
+      }
+    ],
+    [{
+        "label": "玉树市",
+        "value": "632701"
+      },
+      {
+        "label": "杂多县",
+        "value": "632722"
+      },
+      {
+        "label": "称多县",
+        "value": "632723"
+      },
+      {
+        "label": "治多县",
+        "value": "632724"
+      },
+      {
+        "label": "囊谦县",
+        "value": "632725"
+      },
+      {
+        "label": "曲麻莱县",
+        "value": "632726"
+      }
+    ],
+    [{
+        "label": "格尔木市",
+        "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": "640104"
+      },
+      {
+        "label": "西夏区",
+        "value": "640105"
+      },
+      {
+        "label": "金凤区",
+        "value": "640106"
+      },
+      {
+        "label": "永宁县",
+        "value": "640121"
+      },
+      {
+        "label": "贺兰县",
+        "value": "640122"
+      },
+      {
+        "label": "灵武市",
+        "value": "640181"
+      }
+    ],
+    [{
+        "label": "大武口区",
+        "value": "640202"
+      },
+      {
+        "label": "惠农区",
+        "value": "640205"
+      },
+      {
+        "label": "平罗县",
+        "value": "640221"
+      }
+    ],
+    [{
+        "label": "利通区",
+        "value": "640302"
+      },
+      {
+        "label": "红寺堡区",
+        "value": "640303"
+      },
+      {
+        "label": "盐池县",
+        "value": "640323"
+      },
+      {
+        "label": "同心县",
+        "value": "640324"
+      },
+      {
+        "label": "青铜峡市",
+        "value": "640381"
+      }
+    ],
+    [{
+        "label": "原州区",
+        "value": "640402"
+      },
+      {
+        "label": "西吉县",
+        "value": "640422"
+      },
+      {
+        "label": "隆德县",
+        "value": "640423"
+      },
+      {
+        "label": "泾源县",
+        "value": "640424"
+      },
+      {
+        "label": "彭阳县",
+        "value": "640425"
+      }
+    ],
+    [{
+        "label": "沙坡头区",
+        "value": "640502"
+      },
+      {
+        "label": "中宁县",
+        "value": "640521"
+      },
+      {
+        "label": "海原县",
+        "value": "640522"
+      }
+    ]
+  ],
+  [
+    [{
+        "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": "650202"
+      },
+      {
+        "label": "克拉玛依区",
+        "value": "650203"
+      },
+      {
+        "label": "白碱滩区",
+        "value": "650204"
+      },
+      {
+        "label": "乌尔禾区",
+        "value": "650205"
+      }
+    ],
+    [{
+        "label": "高昌区",
+        "value": "650402"
+      },
+      {
+        "label": "鄯善县",
+        "value": "650421"
+      },
+      {
+        "label": "托克逊县",
+        "value": "650422"
+      }
+    ],
+    [{
+        "label": "伊州区",
+        "value": "650502"
+      },
+      {
+        "label": "巴里坤哈萨克自治县",
+        "value": "650521"
+      },
+      {
+        "label": "伊吾县",
+        "value": "650522"
+      }
+    ],
+    [{
+        "label": "昌吉市",
+        "value": "652301"
+      },
+      {
+        "label": "阜康市",
+        "value": "652302"
+      },
+      {
+        "label": "呼图壁县",
+        "value": "652323"
+      },
+      {
+        "label": "玛纳斯县",
+        "value": "652324"
+      },
+      {
+        "label": "奇台县",
+        "value": "652325"
+      },
+      {
+        "label": "吉木萨尔县",
+        "value": "652327"
+      },
+      {
+        "label": "木垒哈萨克自治县",
+        "value": "652328"
+      }
+    ],
+    [{
+        "label": "博乐市",
+        "value": "652701"
+      },
+      {
+        "label": "阿拉山口市",
+        "value": "652702"
+      },
+      {
+        "label": "精河县",
+        "value": "652722"
+      },
+      {
+        "label": "温泉县",
+        "value": "652723"
+      }
+    ],
+    [{
+        "label": "库尔勒市",
+        "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": "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": "653001"
+      },
+      {
+        "label": "阿克陶县",
+        "value": "653022"
+      },
+      {
+        "label": "阿合奇县",
+        "value": "653023"
+      },
+      {
+        "label": "乌恰县",
+        "value": "653024"
+      }
+    ],
+    [{
+        "label": "喀什市",
+        "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": "653201"
+      },
+      {
+        "label": "和田县",
+        "value": "653221"
+      },
+      {
+        "label": "墨玉县",
+        "value": "653222"
+      },
+      {
+        "label": "皮山县",
+        "value": "653223"
+      },
+      {
+        "label": "洛浦县",
+        "value": "653224"
+      },
+      {
+        "label": "策勒县",
+        "value": "653225"
+      },
+      {
+        "label": "于田县",
+        "value": "653226"
+      },
+      {
+        "label": "民丰县",
+        "value": "653227"
+      }
+    ],
+    [{
+        "label": "伊宁市",
+        "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": "654201"
+      },
+      {
+        "label": "乌苏市",
+        "value": "654202"
+      },
+      {
+        "label": "额敏县",
+        "value": "654221"
+      },
+      {
+        "label": "沙湾县",
+        "value": "654223"
+      },
+      {
+        "label": "托里县",
+        "value": "654224"
+      },
+      {
+        "label": "裕民县",
+        "value": "654225"
+      },
+      {
+        "label": "和布克赛尔蒙古自治县",
+        "value": "654226"
+      }
+    ],
+    [{
+        "label": "阿勒泰市",
+        "value": "654301"
+      },
+      {
+        "label": "布尔津县",
+        "value": "654321"
+      },
+      {
+        "label": "富蕴县",
+        "value": "654322"
+      },
+      {
+        "label": "福海县",
+        "value": "654323"
+      },
+      {
+        "label": "哈巴河县",
+        "value": "654324"
+      },
+      {
+        "label": "青河县",
+        "value": "654325"
+      },
+      {
+        "label": "吉木乃县",
+        "value": "654326"
+      }
+    ],
+    [{
+        "label": "石河子市",
+        "value": "659001"
+      },
+      {
+        "label": "阿拉尔市",
+        "value": "659002"
+      },
+      {
+        "label": "图木舒克市",
+        "value": "659003"
+      },
+      {
+        "label": "五家渠市",
+        "value": "659004"
+      },
+      {
+        "label": "铁门关市",
+        "value": "659006"
+      }
+    ]
+  ],
+  [
+    [{
+      "label": "台北",
+      "value": "660101"
+    }],
+    [{
+      "label": "高雄",
+      "value": "660201"
+    }],
+    [{
+      "label": "基隆",
+      "value": "660301"
+    }],
+    [{
+      "label": "台中",
+      "value": "660401"
+    }],
+    [{
+      "label": "台南",
+      "value": "660501"
+    }],
+    [{
+      "label": "新竹",
+      "value": "660601"
+    }],
+    [{
+      "label": "嘉义",
+      "value": "660701"
+    }],
+    [{
+      "label": "宜兰",
+      "value": "660801"
+    }],
+    [{
+      "label": "桃园",
+      "value": "660901"
+    }],
+    [{
+      "label": "苗栗",
+      "value": "661001"
+    }],
+    [{
+      "label": "彰化",
+      "value": "661101"
+    }],
+    [{
+      "label": "南投",
+      "value": "661201"
+    }],
+    [{
+      "label": "云林",
+      "value": "661301"
+    }],
+    [{
+      "label": "屏东",
+      "value": "661401"
+    }],
+    [{
+      "label": "台东",
+      "value": "661501"
+    }],
+    [{
+      "label": "花莲",
+      "value": "661601"
+    }],
+    [{
+      "label": "澎湖",
+      "value": "661701"
+    }]
+  ],
+  [
+    [{
+      "label": "香港岛",
+      "value": "670101"
+    }],
+    [{
+      "label": "九龙",
+      "value": "670201"
+    }],
+    [{
+      "label": "新界",
+      "value": "670301"
+    }]
+  ],
+  [
+    [{
+      "label": "澳门半岛",
+      "value": "680101"
+    }],
+    [{
+      "label": "氹仔岛",
+      "value": "680201"
+    }],
+    [{
+      "label": "路环岛",
+      "value": "680301"
+    }],
+    [{
+      "label": "路氹城",
+      "value": "680401"
+    }]
+  ]
+]
+export default areaData;

+ 1503 - 0
components/w-picker/city-data/city.js

@@ -0,0 +1,1503 @@
+/* eslint-disable */
+var cityData = [
+  [{
+    "label": "市辖区",
+    "value": "1101"
+  }],
+  [{
+    "label": "市辖区",
+    "value": "1201"
+  }],
+  [{
+      "label": "石家庄市",
+      "value": "1301"
+    },
+    {
+      "label": "唐山市",
+      "value": "1302"
+    },
+    {
+      "label": "秦皇岛市",
+      "value": "1303"
+    },
+    {
+      "label": "邯郸市",
+      "value": "1304"
+    },
+    {
+      "label": "邢台市",
+      "value": "1305"
+    },
+    {
+      "label": "保定市",
+      "value": "1306"
+    },
+    {
+      "label": "张家口市",
+      "value": "1307"
+    },
+    {
+      "label": "承德市",
+      "value": "1308"
+    },
+    {
+      "label": "沧州市",
+      "value": "1309"
+    },
+    {
+      "label": "廊坊市",
+      "value": "1310"
+    },
+    {
+      "label": "衡水市",
+      "value": "1311"
+    }
+  ],
+  [{
+      "label": "太原市",
+      "value": "1401"
+    },
+    {
+      "label": "大同市",
+      "value": "1402"
+    },
+    {
+      "label": "阳泉市",
+      "value": "1403"
+    },
+    {
+      "label": "长治市",
+      "value": "1404"
+    },
+    {
+      "label": "晋城市",
+      "value": "1405"
+    },
+    {
+      "label": "朔州市",
+      "value": "1406"
+    },
+    {
+      "label": "晋中市",
+      "value": "1407"
+    },
+    {
+      "label": "运城市",
+      "value": "1408"
+    },
+    {
+      "label": "忻州市",
+      "value": "1409"
+    },
+    {
+      "label": "临汾市",
+      "value": "1410"
+    },
+    {
+      "label": "吕梁市",
+      "value": "1411"
+    }
+  ],
+  [{
+      "label": "呼和浩特市",
+      "value": "1501"
+    },
+    {
+      "label": "包头市",
+      "value": "1502"
+    },
+    {
+      "label": "乌海市",
+      "value": "1503"
+    },
+    {
+      "label": "赤峰市",
+      "value": "1504"
+    },
+    {
+      "label": "通辽市",
+      "value": "1505"
+    },
+    {
+      "label": "鄂尔多斯市",
+      "value": "1506"
+    },
+    {
+      "label": "呼伦贝尔市",
+      "value": "1507"
+    },
+    {
+      "label": "巴彦淖尔市",
+      "value": "1508"
+    },
+    {
+      "label": "乌兰察布市",
+      "value": "1509"
+    },
+    {
+      "label": "兴安盟",
+      "value": "1522"
+    },
+    {
+      "label": "锡林郭勒盟",
+      "value": "1525"
+    },
+    {
+      "label": "阿拉善盟",
+      "value": "1529"
+    }
+  ],
+  [{
+      "label": "沈阳市",
+      "value": "2101"
+    },
+    {
+      "label": "大连市",
+      "value": "2102"
+    },
+    {
+      "label": "鞍山市",
+      "value": "2103"
+    },
+    {
+      "label": "抚顺市",
+      "value": "2104"
+    },
+    {
+      "label": "本溪市",
+      "value": "2105"
+    },
+    {
+      "label": "丹东市",
+      "value": "2106"
+    },
+    {
+      "label": "锦州市",
+      "value": "2107"
+    },
+    {
+      "label": "营口市",
+      "value": "2108"
+    },
+    {
+      "label": "阜新市",
+      "value": "2109"
+    },
+    {
+      "label": "辽阳市",
+      "value": "2110"
+    },
+    {
+      "label": "盘锦市",
+      "value": "2111"
+    },
+    {
+      "label": "铁岭市",
+      "value": "2112"
+    },
+    {
+      "label": "朝阳市",
+      "value": "2113"
+    },
+    {
+      "label": "葫芦岛市",
+      "value": "2114"
+    }
+  ],
+  [{
+      "label": "长春市",
+      "value": "2201"
+    },
+    {
+      "label": "吉林市",
+      "value": "2202"
+    },
+    {
+      "label": "四平市",
+      "value": "2203"
+    },
+    {
+      "label": "辽源市",
+      "value": "2204"
+    },
+    {
+      "label": "通化市",
+      "value": "2205"
+    },
+    {
+      "label": "白山市",
+      "value": "2206"
+    },
+    {
+      "label": "松原市",
+      "value": "2207"
+    },
+    {
+      "label": "白城市",
+      "value": "2208"
+    },
+    {
+      "label": "延边朝鲜族自治州",
+      "value": "2224"
+    }
+  ],
+  [{
+      "label": "哈尔滨市",
+      "value": "2301"
+    },
+    {
+      "label": "齐齐哈尔市",
+      "value": "2302"
+    },
+    {
+      "label": "鸡西市",
+      "value": "2303"
+    },
+    {
+      "label": "鹤岗市",
+      "value": "2304"
+    },
+    {
+      "label": "双鸭山市",
+      "value": "2305"
+    },
+    {
+      "label": "大庆市",
+      "value": "2306"
+    },
+    {
+      "label": "伊春市",
+      "value": "2307"
+    },
+    {
+      "label": "佳木斯市",
+      "value": "2308"
+    },
+    {
+      "label": "七台河市",
+      "value": "2309"
+    },
+    {
+      "label": "牡丹江市",
+      "value": "2310"
+    },
+    {
+      "label": "黑河市",
+      "value": "2311"
+    },
+    {
+      "label": "绥化市",
+      "value": "2312"
+    },
+    {
+      "label": "大兴安岭地区",
+      "value": "2327"
+    }
+  ],
+  [{
+    "label": "市辖区",
+    "value": "3101"
+  }],
+  [{
+      "label": "南京市",
+      "value": "3201"
+    },
+    {
+      "label": "无锡市",
+      "value": "3202"
+    },
+    {
+      "label": "徐州市",
+      "value": "3203"
+    },
+    {
+      "label": "常州市",
+      "value": "3204"
+    },
+    {
+      "label": "苏州市",
+      "value": "3205"
+    },
+    {
+      "label": "南通市",
+      "value": "3206"
+    },
+    {
+      "label": "连云港市",
+      "value": "3207"
+    },
+    {
+      "label": "淮安市",
+      "value": "3208"
+    },
+    {
+      "label": "盐城市",
+      "value": "3209"
+    },
+    {
+      "label": "扬州市",
+      "value": "3210"
+    },
+    {
+      "label": "镇江市",
+      "value": "3211"
+    },
+    {
+      "label": "泰州市",
+      "value": "3212"
+    },
+    {
+      "label": "宿迁市",
+      "value": "3213"
+    }
+  ],
+  [{
+      "label": "杭州市",
+      "value": "3301"
+    },
+    {
+      "label": "宁波市",
+      "value": "3302"
+    },
+    {
+      "label": "温州市",
+      "value": "3303"
+    },
+    {
+      "label": "嘉兴市",
+      "value": "3304"
+    },
+    {
+      "label": "湖州市",
+      "value": "3305"
+    },
+    {
+      "label": "绍兴市",
+      "value": "3306"
+    },
+    {
+      "label": "金华市",
+      "value": "3307"
+    },
+    {
+      "label": "衢州市",
+      "value": "3308"
+    },
+    {
+      "label": "舟山市",
+      "value": "3309"
+    },
+    {
+      "label": "台州市",
+      "value": "3310"
+    },
+    {
+      "label": "丽水市",
+      "value": "3311"
+    }
+  ],
+  [{
+      "label": "合肥市",
+      "value": "3401"
+    },
+    {
+      "label": "芜湖市",
+      "value": "3402"
+    },
+    {
+      "label": "蚌埠市",
+      "value": "3403"
+    },
+    {
+      "label": "淮南市",
+      "value": "3404"
+    },
+    {
+      "label": "马鞍山市",
+      "value": "3405"
+    },
+    {
+      "label": "淮北市",
+      "value": "3406"
+    },
+    {
+      "label": "铜陵市",
+      "value": "3407"
+    },
+    {
+      "label": "安庆市",
+      "value": "3408"
+    },
+    {
+      "label": "黄山市",
+      "value": "3410"
+    },
+    {
+      "label": "滁州市",
+      "value": "3411"
+    },
+    {
+      "label": "阜阳市",
+      "value": "3412"
+    },
+    {
+      "label": "宿州市",
+      "value": "3413"
+    },
+    {
+      "label": "六安市",
+      "value": "3415"
+    },
+    {
+      "label": "亳州市",
+      "value": "3416"
+    },
+    {
+      "label": "池州市",
+      "value": "3417"
+    },
+    {
+      "label": "宣城市",
+      "value": "3418"
+    }
+  ],
+  [{
+      "label": "福州市",
+      "value": "3501"
+    },
+    {
+      "label": "厦门市",
+      "value": "3502"
+    },
+    {
+      "label": "莆田市",
+      "value": "3503"
+    },
+    {
+      "label": "三明市",
+      "value": "3504"
+    },
+    {
+      "label": "泉州市",
+      "value": "3505"
+    },
+    {
+      "label": "漳州市",
+      "value": "3506"
+    },
+    {
+      "label": "南平市",
+      "value": "3507"
+    },
+    {
+      "label": "龙岩市",
+      "value": "3508"
+    },
+    {
+      "label": "宁德市",
+      "value": "3509"
+    }
+  ],
+  [{
+      "label": "南昌市",
+      "value": "3601"
+    },
+    {
+      "label": "景德镇市",
+      "value": "3602"
+    },
+    {
+      "label": "萍乡市",
+      "value": "3603"
+    },
+    {
+      "label": "九江市",
+      "value": "3604"
+    },
+    {
+      "label": "新余市",
+      "value": "3605"
+    },
+    {
+      "label": "鹰潭市",
+      "value": "3606"
+    },
+    {
+      "label": "赣州市",
+      "value": "3607"
+    },
+    {
+      "label": "吉安市",
+      "value": "3608"
+    },
+    {
+      "label": "宜春市",
+      "value": "3609"
+    },
+    {
+      "label": "抚州市",
+      "value": "3610"
+    },
+    {
+      "label": "上饶市",
+      "value": "3611"
+    }
+  ],
+  [{
+      "label": "济南市",
+      "value": "3701"
+    },
+    {
+      "label": "青岛市",
+      "value": "3702"
+    },
+    {
+      "label": "淄博市",
+      "value": "3703"
+    },
+    {
+      "label": "枣庄市",
+      "value": "3704"
+    },
+    {
+      "label": "东营市",
+      "value": "3705"
+    },
+    {
+      "label": "烟台市",
+      "value": "3706"
+    },
+    {
+      "label": "潍坊市",
+      "value": "3707"
+    },
+    {
+      "label": "济宁市",
+      "value": "3708"
+    },
+    {
+      "label": "泰安市",
+      "value": "3709"
+    },
+    {
+      "label": "威海市",
+      "value": "3710"
+    },
+    {
+      "label": "日照市",
+      "value": "3711"
+    },
+    {
+      "label": "莱芜市",
+      "value": "3712"
+    },
+    {
+      "label": "临沂市",
+      "value": "3713"
+    },
+    {
+      "label": "德州市",
+      "value": "3714"
+    },
+    {
+      "label": "聊城市",
+      "value": "3715"
+    },
+    {
+      "label": "滨州市",
+      "value": "3716"
+    },
+    {
+      "label": "菏泽市",
+      "value": "3717"
+    }
+  ],
+  [{
+      "label": "郑州市",
+      "value": "4101"
+    },
+    {
+      "label": "开封市",
+      "value": "4102"
+    },
+    {
+      "label": "洛阳市",
+      "value": "4103"
+    },
+    {
+      "label": "平顶山市",
+      "value": "4104"
+    },
+    {
+      "label": "安阳市",
+      "value": "4105"
+    },
+    {
+      "label": "鹤壁市",
+      "value": "4106"
+    },
+    {
+      "label": "新乡市",
+      "value": "4107"
+    },
+    {
+      "label": "焦作市",
+      "value": "4108"
+    },
+    {
+      "label": "濮阳市",
+      "value": "4109"
+    },
+    {
+      "label": "许昌市",
+      "value": "4110"
+    },
+    {
+      "label": "漯河市",
+      "value": "4111"
+    },
+    {
+      "label": "三门峡市",
+      "value": "4112"
+    },
+    {
+      "label": "南阳市",
+      "value": "4113"
+    },
+    {
+      "label": "商丘市",
+      "value": "4114"
+    },
+    {
+      "label": "信阳市",
+      "value": "4115"
+    },
+    {
+      "label": "周口市",
+      "value": "4116"
+    },
+    {
+      "label": "驻马店市",
+      "value": "4117"
+    },
+    {
+      "label": "省直辖县级行政区划",
+      "value": "4190"
+    }
+  ],
+  [{
+      "label": "武汉市",
+      "value": "4201"
+    },
+    {
+      "label": "黄石市",
+      "value": "4202"
+    },
+    {
+      "label": "十堰市",
+      "value": "4203"
+    },
+    {
+      "label": "宜昌市",
+      "value": "4205"
+    },
+    {
+      "label": "襄阳市",
+      "value": "4206"
+    },
+    {
+      "label": "鄂州市",
+      "value": "4207"
+    },
+    {
+      "label": "荆门市",
+      "value": "4208"
+    },
+    {
+      "label": "孝感市",
+      "value": "4209"
+    },
+    {
+      "label": "荆州市",
+      "value": "4210"
+    },
+    {
+      "label": "黄冈市",
+      "value": "4211"
+    },
+    {
+      "label": "咸宁市",
+      "value": "4212"
+    },
+    {
+      "label": "随州市",
+      "value": "4213"
+    },
+    {
+      "label": "恩施土家族苗族自治州",
+      "value": "4228"
+    },
+    {
+      "label": "省直辖县级行政区划",
+      "value": "4290"
+    }
+  ],
+  [{
+      "label": "长沙市",
+      "value": "4301"
+    },
+    {
+      "label": "株洲市",
+      "value": "4302"
+    },
+    {
+      "label": "湘潭市",
+      "value": "4303"
+    },
+    {
+      "label": "衡阳市",
+      "value": "4304"
+    },
+    {
+      "label": "邵阳市",
+      "value": "4305"
+    },
+    {
+      "label": "岳阳市",
+      "value": "4306"
+    },
+    {
+      "label": "常德市",
+      "value": "4307"
+    },
+    {
+      "label": "张家界市",
+      "value": "4308"
+    },
+    {
+      "label": "益阳市",
+      "value": "4309"
+    },
+    {
+      "label": "郴州市",
+      "value": "4310"
+    },
+    {
+      "label": "永州市",
+      "value": "4311"
+    },
+    {
+      "label": "怀化市",
+      "value": "4312"
+    },
+    {
+      "label": "娄底市",
+      "value": "4313"
+    },
+    {
+      "label": "湘西土家族苗族自治州",
+      "value": "4331"
+    }
+  ],
+  [{
+      "label": "广州市",
+      "value": "4401"
+    },
+    {
+      "label": "韶关市",
+      "value": "4402"
+    },
+    {
+      "label": "深圳市",
+      "value": "4403"
+    },
+    {
+      "label": "珠海市",
+      "value": "4404"
+    },
+    {
+      "label": "汕头市",
+      "value": "4405"
+    },
+    {
+      "label": "佛山市",
+      "value": "4406"
+    },
+    {
+      "label": "江门市",
+      "value": "4407"
+    },
+    {
+      "label": "湛江市",
+      "value": "4408"
+    },
+    {
+      "label": "茂名市",
+      "value": "4409"
+    },
+    {
+      "label": "肇庆市",
+      "value": "4412"
+    },
+    {
+      "label": "惠州市",
+      "value": "4413"
+    },
+    {
+      "label": "梅州市",
+      "value": "4414"
+    },
+    {
+      "label": "汕尾市",
+      "value": "4415"
+    },
+    {
+      "label": "河源市",
+      "value": "4416"
+    },
+    {
+      "label": "阳江市",
+      "value": "4417"
+    },
+    {
+      "label": "清远市",
+      "value": "4418"
+    },
+    {
+      "label": "东莞市",
+      "value": "4419"
+    },
+    {
+      "label": "中山市",
+      "value": "4420"
+    },
+    {
+      "label": "潮州市",
+      "value": "4451"
+    },
+    {
+      "label": "揭阳市",
+      "value": "4452"
+    },
+    {
+      "label": "云浮市",
+      "value": "4453"
+    }
+  ],
+  [{
+      "label": "南宁市",
+      "value": "4501"
+    },
+    {
+      "label": "柳州市",
+      "value": "4502"
+    },
+    {
+      "label": "桂林市",
+      "value": "4503"
+    },
+    {
+      "label": "梧州市",
+      "value": "4504"
+    },
+    {
+      "label": "北海市",
+      "value": "4505"
+    },
+    {
+      "label": "防城港市",
+      "value": "4506"
+    },
+    {
+      "label": "钦州市",
+      "value": "4507"
+    },
+    {
+      "label": "贵港市",
+      "value": "4508"
+    },
+    {
+      "label": "玉林市",
+      "value": "4509"
+    },
+    {
+      "label": "百色市",
+      "value": "4510"
+    },
+    {
+      "label": "贺州市",
+      "value": "4511"
+    },
+    {
+      "label": "河池市",
+      "value": "4512"
+    },
+    {
+      "label": "来宾市",
+      "value": "4513"
+    },
+    {
+      "label": "崇左市",
+      "value": "4514"
+    }
+  ],
+  [{
+      "label": "海口市",
+      "value": "4601"
+    },
+    {
+      "label": "三亚市",
+      "value": "4602"
+    },
+    {
+      "label": "三沙市",
+      "value": "4603"
+    },
+    {
+      "label": "儋州市",
+      "value": "4604"
+    },
+    {
+      "label": "省直辖县级行政区划",
+      "value": "4690"
+    }
+  ],
+  [{
+      "label": "市辖区",
+      "value": "5001"
+    },
+    {
+      "label": "县",
+      "value": "5002"
+    }
+  ],
+  [{
+      "label": "成都市",
+      "value": "5101"
+    },
+    {
+      "label": "自贡市",
+      "value": "5103"
+    },
+    {
+      "label": "攀枝花市",
+      "value": "5104"
+    },
+    {
+      "label": "泸州市",
+      "value": "5105"
+    },
+    {
+      "label": "德阳市",
+      "value": "5106"
+    },
+    {
+      "label": "绵阳市",
+      "value": "5107"
+    },
+    {
+      "label": "广元市",
+      "value": "5108"
+    },
+    {
+      "label": "遂宁市",
+      "value": "5109"
+    },
+    {
+      "label": "内江市",
+      "value": "5110"
+    },
+    {
+      "label": "乐山市",
+      "value": "5111"
+    },
+    {
+      "label": "南充市",
+      "value": "5113"
+    },
+    {
+      "label": "眉山市",
+      "value": "5114"
+    },
+    {
+      "label": "宜宾市",
+      "value": "5115"
+    },
+    {
+      "label": "广安市",
+      "value": "5116"
+    },
+    {
+      "label": "达州市",
+      "value": "5117"
+    },
+    {
+      "label": "雅安市",
+      "value": "5118"
+    },
+    {
+      "label": "巴中市",
+      "value": "5119"
+    },
+    {
+      "label": "资阳市",
+      "value": "5120"
+    },
+    {
+      "label": "阿坝藏族羌族自治州",
+      "value": "5132"
+    },
+    {
+      "label": "甘孜藏族自治州",
+      "value": "5133"
+    },
+    {
+      "label": "凉山彝族自治州",
+      "value": "5134"
+    }
+  ],
+  [{
+      "label": "贵阳市",
+      "value": "5201"
+    },
+    {
+      "label": "六盘水市",
+      "value": "5202"
+    },
+    {
+      "label": "遵义市",
+      "value": "5203"
+    },
+    {
+      "label": "安顺市",
+      "value": "5204"
+    },
+    {
+      "label": "毕节市",
+      "value": "5205"
+    },
+    {
+      "label": "铜仁市",
+      "value": "5206"
+    },
+    {
+      "label": "黔西南布依族苗族自治州",
+      "value": "5223"
+    },
+    {
+      "label": "黔东南苗族侗族自治州",
+      "value": "5226"
+    },
+    {
+      "label": "黔南布依族苗族自治州",
+      "value": "5227"
+    }
+  ],
+  [{
+      "label": "昆明市",
+      "value": "5301"
+    },
+    {
+      "label": "曲靖市",
+      "value": "5303"
+    },
+    {
+      "label": "玉溪市",
+      "value": "5304"
+    },
+    {
+      "label": "保山市",
+      "value": "5305"
+    },
+    {
+      "label": "昭通市",
+      "value": "5306"
+    },
+    {
+      "label": "丽江市",
+      "value": "5307"
+    },
+    {
+      "label": "普洱市",
+      "value": "5308"
+    },
+    {
+      "label": "临沧市",
+      "value": "5309"
+    },
+    {
+      "label": "楚雄彝族自治州",
+      "value": "5323"
+    },
+    {
+      "label": "红河哈尼族彝族自治州",
+      "value": "5325"
+    },
+    {
+      "label": "文山壮族苗族自治州",
+      "value": "5326"
+    },
+    {
+      "label": "西双版纳傣族自治州",
+      "value": "5328"
+    },
+    {
+      "label": "大理白族自治州",
+      "value": "5329"
+    },
+    {
+      "label": "德宏傣族景颇族自治州",
+      "value": "5331"
+    },
+    {
+      "label": "怒江傈僳族自治州",
+      "value": "5333"
+    },
+    {
+      "label": "迪庆藏族自治州",
+      "value": "5334"
+    }
+  ],
+  [{
+      "label": "拉萨市",
+      "value": "5401"
+    },
+    {
+      "label": "日喀则市",
+      "value": "5402"
+    },
+    {
+      "label": "昌都市",
+      "value": "5403"
+    },
+    {
+      "label": "林芝市",
+      "value": "5404"
+    },
+    {
+      "label": "山南市",
+      "value": "5405"
+    },
+    {
+      "label": "那曲地区",
+      "value": "5424"
+    },
+    {
+      "label": "阿里地区",
+      "value": "5425"
+    }
+  ],
+  [{
+      "label": "西安市",
+      "value": "6101"
+    },
+    {
+      "label": "铜川市",
+      "value": "6102"
+    },
+    {
+      "label": "宝鸡市",
+      "value": "6103"
+    },
+    {
+      "label": "咸阳市",
+      "value": "6104"
+    },
+    {
+      "label": "渭南市",
+      "value": "6105"
+    },
+    {
+      "label": "延安市",
+      "value": "6106"
+    },
+    {
+      "label": "汉中市",
+      "value": "6107"
+    },
+    {
+      "label": "榆林市",
+      "value": "6108"
+    },
+    {
+      "label": "安康市",
+      "value": "6109"
+    },
+    {
+      "label": "商洛市",
+      "value": "6110"
+    }
+  ],
+  [{
+      "label": "兰州市",
+      "value": "6201"
+    },
+    {
+      "label": "嘉峪关市",
+      "value": "6202"
+    },
+    {
+      "label": "金昌市",
+      "value": "6203"
+    },
+    {
+      "label": "白银市",
+      "value": "6204"
+    },
+    {
+      "label": "天水市",
+      "value": "6205"
+    },
+    {
+      "label": "武威市",
+      "value": "6206"
+    },
+    {
+      "label": "张掖市",
+      "value": "6207"
+    },
+    {
+      "label": "平凉市",
+      "value": "6208"
+    },
+    {
+      "label": "酒泉市",
+      "value": "6209"
+    },
+    {
+      "label": "庆阳市",
+      "value": "6210"
+    },
+    {
+      "label": "定西市",
+      "value": "6211"
+    },
+    {
+      "label": "陇南市",
+      "value": "6212"
+    },
+    {
+      "label": "临夏回族自治州",
+      "value": "6229"
+    },
+    {
+      "label": "甘南藏族自治州",
+      "value": "6230"
+    }
+  ],
+  [{
+      "label": "西宁市",
+      "value": "6301"
+    },
+    {
+      "label": "海东市",
+      "value": "6302"
+    },
+    {
+      "label": "海北藏族自治州",
+      "value": "6322"
+    },
+    {
+      "label": "黄南藏族自治州",
+      "value": "6323"
+    },
+    {
+      "label": "海南藏族自治州",
+      "value": "6325"
+    },
+    {
+      "label": "果洛藏族自治州",
+      "value": "6326"
+    },
+    {
+      "label": "玉树藏族自治州",
+      "value": "6327"
+    },
+    {
+      "label": "海西蒙古族藏族自治州",
+      "value": "6328"
+    }
+  ],
+  [{
+      "label": "银川市",
+      "value": "6401"
+    },
+    {
+      "label": "石嘴山市",
+      "value": "6402"
+    },
+    {
+      "label": "吴忠市",
+      "value": "6403"
+    },
+    {
+      "label": "固原市",
+      "value": "6404"
+    },
+    {
+      "label": "中卫市",
+      "value": "6405"
+    }
+  ],
+  [{
+      "label": "乌鲁木齐市",
+      "value": "6501"
+    },
+    {
+      "label": "克拉玛依市",
+      "value": "6502"
+    },
+    {
+      "label": "吐鲁番市",
+      "value": "6504"
+    },
+    {
+      "label": "哈密市",
+      "value": "6505"
+    },
+    {
+      "label": "昌吉回族自治州",
+      "value": "6523"
+    },
+    {
+      "label": "博尔塔拉蒙古自治州",
+      "value": "6527"
+    },
+    {
+      "label": "巴音郭楞蒙古自治州",
+      "value": "6528"
+    },
+    {
+      "label": "阿克苏地区",
+      "value": "6529"
+    },
+    {
+      "label": "克孜勒苏柯尔克孜自治州",
+      "value": "6530"
+    },
+    {
+      "label": "喀什地区",
+      "value": "6531"
+    },
+    {
+      "label": "和田地区",
+      "value": "6532"
+    },
+    {
+      "label": "伊犁哈萨克自治州",
+      "value": "6540"
+    },
+    {
+      "label": "塔城地区",
+      "value": "6542"
+    },
+    {
+      "label": "阿勒泰地区",
+      "value": "6543"
+    },
+    {
+      "label": "自治区直辖县级行政区划",
+      "value": "6590"
+    }
+  ],
+  [{
+      "label": "台北",
+      "value": "6601"
+    },
+    {
+      "label": "高雄",
+      "value": "6602"
+    },
+    {
+      "label": "基隆",
+      "value": "6603"
+    },
+    {
+      "label": "台中",
+      "value": "6604"
+    },
+    {
+      "label": "台南",
+      "value": "6605"
+    },
+    {
+      "label": "新竹",
+      "value": "6606"
+    },
+    {
+      "label": "嘉义",
+      "value": "6607"
+    },
+    {
+      "label": "宜兰",
+      "value": "6608"
+    },
+    {
+      "label": "桃园",
+      "value": "6609"
+    },
+    {
+      "label": "苗栗",
+      "value": "6610"
+    },
+    {
+      "label": "彰化",
+      "value": "6611"
+    },
+    {
+      "label": "南投",
+      "value": "6612"
+    },
+    {
+      "label": "云林",
+      "value": "6613"
+    },
+    {
+      "label": "屏东",
+      "value": "6614"
+    },
+    {
+      "label": "台东",
+      "value": "6615"
+    },
+    {
+      "label": "花莲",
+      "value": "6616"
+    },
+    {
+      "label": "澎湖",
+      "value": "6617"
+    }
+  ],
+  [{
+      "label": "香港岛",
+      "value": "6701"
+    },
+    {
+      "label": "九龙",
+      "value": "6702"
+    },
+    {
+      "label": "新界",
+      "value": "6703"
+    }
+  ],
+  [{
+      "label": "澳门半岛",
+      "value": "6801"
+    },
+    {
+      "label": "氹仔岛",
+      "value": "6802"
+    },
+    {
+      "label": "路环岛",
+      "value": "6803"
+    },
+    {
+      "label": "路氹城",
+      "value": "6804"
+    }
+  ]
+]
+export default cityData;

+ 139 - 0
components/w-picker/city-data/province.js

@@ -0,0 +1,139 @@
+/* eslint-disable */
+var provinceData = [{
+    "label": "北京市",
+    "value": "11"
+  },
+  {
+    "label": "天津市",
+    "value": "12"
+  },
+  {
+    "label": "河北省",
+    "value": "13"
+  },
+  {
+    "label": "山西省",
+    "value": "14"
+  },
+  {
+    "label": "内蒙古自治区",
+    "value": "15"
+  },
+  {
+    "label": "辽宁省",
+    "value": "21"
+  },
+  {
+    "label": "吉林省",
+    "value": "22"
+  },
+  {
+    "label": "黑龙江省",
+    "value": "23"
+  },
+  {
+    "label": "上海市",
+    "value": "31"
+  },
+  {
+    "label": "江苏省",
+    "value": "32"
+  },
+  {
+    "label": "浙江省",
+    "value": "33"
+  },
+  {
+    "label": "安徽省",
+    "value": "34"
+  },
+  {
+    "label": "福建省",
+    "value": "35"
+  },
+  {
+    "label": "江西省",
+    "value": "36"
+  },
+  {
+    "label": "山东省",
+    "value": "37"
+  },
+  {
+    "label": "河南省",
+    "value": "41"
+  },
+  {
+    "label": "湖北省",
+    "value": "42"
+  },
+  {
+    "label": "湖南省",
+    "value": "43"
+  },
+  {
+    "label": "广东省",
+    "value": "44"
+  },
+  {
+    "label": "广西壮族自治区",
+    "value": "45"
+  },
+  {
+    "label": "海南省",
+    "value": "46"
+  },
+  {
+    "label": "重庆市",
+    "value": "50"
+  },
+  {
+    "label": "四川省",
+    "value": "51"
+  },
+  {
+    "label": "贵州省",
+    "value": "52"
+  },
+  {
+    "label": "云南省",
+    "value": "53"
+  },
+  {
+    "label": "西藏自治区",
+    "value": "54"
+  },
+  {
+    "label": "陕西省",
+    "value": "61"
+  },
+  {
+    "label": "甘肃省",
+    "value": "62"
+  },
+  {
+    "label": "青海省",
+    "value": "63"
+  },
+  {
+    "label": "宁夏回族自治区",
+    "value": "64"
+  },
+  {
+    "label": "新疆维吾尔自治区",
+    "value": "65"
+  },
+  {
+    "label": "台湾",
+    "value": "66"
+  },
+  {
+    "label": "香港",
+    "value": "67"
+  },
+  {
+    "label": "澳门",
+    "value": "68"
+  }
+]
+export default provinceData;

+ 650 - 0
components/w-picker/w-picker.js

@@ -0,0 +1,650 @@
+const forMatNum=(num)=>{
+	return num<10?'0'+num:num+'';
+}
+const initPicker={
+	//日期
+	date:{
+		init(start,end,mode="date",step,value,flag,disabled){
+			let aToday=new Date();
+			let tYear,tMonth,tDay,tHours,tMinutes,tSeconds,defaultVal=[];
+			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 years=[],months=[],days=[],hours=[],minutes=[],seconds=[],areas=[],returnArr=[],dvalDate=[];
+			switch(mode){
+				case "half":
+					dvalDate=flag?[...value.split(" ")[0].split("-"),...value.split(" ")[1].split(":")]:[...value.split(" ")[0].split("-"),value.split(" ")[1]];
+					break;
+				case "date":
+				case "yearMonth":
+					dvalDate=value.split("-");
+					break;
+				case "dateTime":
+					dvalDate=[...value.split(" ")[0].split("-"),...value.split(" ")[1].split(":")];
+					break;
+				case "time":
+					dvalDate=value.split(":");
+					break;
+			}
+			let curMonth=flag?dvalDate[1]*1:(dvalDate[1]+1);
+			let dYear=aToday.getFullYear();
+			let dMonth=aToday.getMonth()+1;
+			let dDate=aToday.getDate();
+			let totalDays=new Date(startYear,curMonth,0).getDate();
+			let dvalObj={};
+			switch(mode){
+				case "half":
+				case "date":
+				case "yearMonth":
+					let curYear=dvalDate[0];
+					let curMonth=dvalDate[1];
+					if(disabled){
+						for(let s=startYear;s<=dYear;s++){
+							years.push(s+'');
+						};
+						if(curYear==dYear){
+							for(let m=1;m<=dMonth;m++){
+								months.push(forMatNum(m));
+							};
+						}else{
+							for(let m=1;m<=12;m++){
+								months.push(forMatNum(m));
+							};
+						}
+						if(curMonth==dMonth){
+							for(let d=1;d<=dDate;d++){
+								days.push(forMatNum(d));
+							}
+						}else{
+							for(let d=1;d<=totalDays;d++){
+								days.push(forMatNum(d));
+							}
+						}
+						
+					}else{
+						for(let s=startYear;s<=endYear;s++){
+							years.push(s+'');
+						};
+						for(let m=1;m<=12;m++){
+							months.push(forMatNum(m));
+						};
+						for(let d=1;d<=totalDays;d++){
+							days.push(forMatNum(d));
+						}
+					};
+					break;
+				default:
+					for(let s=startYear;s<=endYear;s++){
+						years.push(s+'');
+					};
+					for(let m=1;m<=12;m++){
+						months.push(forMatNum(m));
+					};
+					for(let d=1;d<=totalDays;d++){
+						days.push(forMatNum(d));
+					}
+					break;
+			}
+			for(let h=0;h<24;h++){
+				hours.push(forMatNum(h));
+			}
+			for(let m=0;m<60;m+=step*1){
+				minutes.push(forMatNum(m));
+			}
+			for(let s=0;s<60;s++){
+				seconds.push(forMatNum(s));
+			}
+			if(flag){
+				returnArr=[
+					years.indexOf(dvalDate[0]),
+					months.indexOf(dvalDate[1]),
+					days.indexOf(dvalDate[2]),
+					hours.indexOf(dvalDate[3]),
+					minutes.indexOf(dvalDate[4])==-1?0:minutes.indexOf(dvalDate[4]),
+					seconds.indexOf(dvalDate[5])
+				]
+			}
+			switch(mode){
+				case "date":
+					if(flag){
+						defaultVal=[returnArr[0],returnArr[1],returnArr[2]];
+						return {years,months,days,defaultVal}
+					}else{
+						defaultVal=[
+							years.indexOf(dvalDate[0])==-1?0:years.indexOf(dvalDate[0]),
+							months.indexOf(dvalDate[1])==-1?0:months.indexOf(dvalDate[1]),
+							days.indexOf(dvalDate[2])==-1?0:days.indexOf(dvalDate[2])
+						];
+						return {years,months,days,defaultVal}
+					}
+					break;
+				case "half":
+					areas=[{
+						label:"上午",
+						value:0
+					},{
+						label:"下午",
+						value:1
+					}];
+					if(flag){
+						defaultVal=[returnArr[0],returnArr[1],returnArr[2],returnArr[3]];
+						return {years,months,days,areas,defaultVal}
+					}else{
+						let idx=0;
+						areas.map((v,k)=>{
+							if(v.label==dvalDate[3]){
+								idx=v.value;
+							}
+						})
+						defaultVal=[
+							years.indexOf(dvalDate[0])==-1?0:years.indexOf(dvalDate[0]),
+							months.indexOf(dvalDate[1])==-1?0:months.indexOf(dvalDate[1]),
+							days.indexOf(dvalDate[2])==-1?0:days.indexOf(dvalDate[2]),
+							idx
+						];
+						return {years,months,days,areas,defaultVal}
+					}
+					break;	
+				case "yearMonth":
+					if(flag){
+						defaultVal=[returnArr[0],returnArr[1]];
+						return {years,months,defaultVal}
+					}else{
+						defaultVal=[
+							years.indexOf(dvalDate[0])==-1?0:years.indexOf(dvalDate[0]),
+							months.indexOf(dvalDate[1])==-1?0:months.indexOf(dvalDate[1])
+						];
+						return {years,months,defaultVal}
+					}
+					break;
+				case "dateTime":
+					if(flag){
+						defaultVal=returnArr;
+					}else{
+						defaultVal=[
+							years.indexOf(dvalDate[0])==-1?0:years.indexOf(dvalDate[0]),
+							months.indexOf(dvalDate[1])==-1?0:months.indexOf(dvalDate[1]),
+							days.indexOf(dvalDate[2])==-1?0:days.indexOf(dvalDate[2]),
+							hours.indexOf(dvalDate[3])==-1?0:hours.indexOf(dvalDate[3]),
+							minutes.indexOf(dvalDate[4])==-1?0:minutes.indexOf(dvalDate[4]),
+							seconds.indexOf(dvalDate[5])==-1?0:seconds.indexOf(dvalDate[5])
+						];
+					}
+					return {years,months,days,hours,minutes,seconds,defaultVal}
+					break;
+				case "time":
+					if(flag){
+						defaultVal=[returnArr[3],returnArr[4],returnArr[5]];
+					}else{
+						defaultVal=[
+							hours.indexOf(dvalDate[0])==-1?0:hours.indexOf(dvalDate[0]),
+							minutes.indexOf(dvalDate[1])==-1?0:minutes.indexOf(dvalDate[1]),
+							seconds.indexOf(dvalDate[2])==-1?0:seconds.indexOf(dvalDate[2])
+						];
+					}
+					return {hours,minutes,seconds,defaultVal}
+					break;			
+			}
+		},
+		initMonths:(year,disabled)=>{
+			let aDate=new Date();
+			let dYear=aDate.getFullYear();
+			let dMonth=aDate.getMonth()+1;
+			let dDate=aDate.getDate();
+			let flag=dYear==year?true:false;
+			let months=[];
+			if(disabled){
+				if(flag){
+					for(let m=1;m<=dMonth;m++){
+						months.push(forMatNum(m));
+					};	
+				}else{
+					for(let m=1;m<=12;m++){
+						months.push(forMatNum(m));
+					};	
+				}
+			}else{
+				for(let m=1;m<=12;m++){
+					months.push(forMatNum(m));
+				};
+			};
+			return months;
+		},
+		initDays:(year,month,disabled)=>{
+			let aDate=new Date();
+			let dYear=aDate.getFullYear();
+			let dMonth=aDate.getMonth()+1;
+			let dDate=aDate.getDate();
+			let flag=(dYear==year&&dMonth==month)?true:false;
+			let totalDays=new Date(year,month,0).getDate();
+			let dates=[];
+			if(flag&&disabled){
+				for(let d=1;d<=dDate;d++){
+					dates.push(forMatNum(d));
+				};			
+			}else{
+				for(let d=1;d<=totalDays;d++){
+					dates.push(forMatNum(d));
+				};
+			};
+			return dates;
+		},
+	},
+	//短期日期上下午
+	limitHour:{
+		init(dayStep=7,dVal){
+			let startDate=new Date();
+			let date=[],areas=[],hours=[];
+			let hour=new Date().getHours();
+			let weeks=["周日","周一","周二","周三","周四","周五","周六"];
+			let arrs=[];
+			let defaultVal=[];
+			let d=0,a=0,h=0;
+			for(let i=0;i<dayStep;i++){
+				let year,month,day,weekday;
+				year=startDate.getFullYear();
+				month=forMatNum(startDate.getMonth()+1);
+				day=forMatNum(startDate.getDate());
+				weekday=weeks[startDate.getDay()];
+				let label="";
+				switch(i){
+					case 0:
+						label="今天";
+						break;
+					case 1:
+						label="明天"
+						break;
+					case 2:
+						label="后天"
+						break;
+					default:
+						label=month+"月"+day+"日"+" "+weekday;
+						break;
+				}
+				date.push({
+					label:label,
+					value:year+"-"+month+"-"+day,
+					today:i==0?true:false
+				})
+				startDate.setDate(startDate.getDate()+1);
+			}
+			if(hour>12){
+				areas=[{
+					label:"下午",
+					value:1
+				}]
+			}else{
+				areas=[{
+					label:"上午",
+					value:0
+				},{
+					label:"下午",
+					value:1
+				}]
+			};
+			for(let k=hour>12?hour-12:hour;k<=12;k++){
+				hours.push({
+					label:forMatNum(k),
+					value:forMatNum(hour>12?k+12:k)
+				})
+			};
+			date.map((v,k)=>{
+				if(v.label==dVal[0]){
+					d=k
+				}
+			})
+			if(d!=0){
+				areas=this.initAreas(date[d]);
+				hours=this.initHours(date[d],areas[a]);
+			}
+			areas.map((v,k)=>{
+				if(v.label==dVal[1]){
+					a=k
+				}
+			})
+			hours.map((v,k)=>{
+				if(v.label==dVal[2]){
+					h=k
+				}
+			});
+			defaultVal=[d,a,h]
+			return {date,areas,hours,defaultVal};
+		},
+		initAreas(date){
+			let areas=[];
+			let hour=new Date().getHours();
+			if(date.today){
+				if(hour>12){
+					areas=[{
+						label:"下午",
+						value:1
+					}]
+				}else{
+					areas=[{
+						label:"上午",
+						value:0
+					},{
+						label:"下午",
+						value:1
+					}]
+				};
+			}else{
+				areas=[{
+					label:"上午",
+					value:0
+				},{
+					label:"下午",
+					value:1
+				}]
+			}
+			return areas;
+		},
+		initHours(dateCol,hourCol){
+			let hours=[];
+			let hour=new Date().getHours();
+			if(dateCol.today){
+				if(hourCol.value==1&&hour<=12){
+					for(let k=1;k<=12;k++){
+						hours.push({
+							label:forMatNum(k),
+							value:forMatNum(hourCol.value==1?k+12:k)
+						})
+					};
+				}else{
+					for(let k=hour>12?hour-12:hour;k<=12;k++){
+						hours.push({
+							label:forMatNum(k),
+							value:forMatNum(hourCol.value==1?k+12:k)
+						})
+					};
+				}
+				
+			}else{
+				for(let k=1;k<=12;k++){
+					hours.push({
+						label:forMatNum(k),
+						value:forMatNum(hourCol.value==1?k+12:k)
+					})
+				};
+			};
+			return hours
+		}
+	},
+	//短期日期时间初始化
+	limit:{
+		init(dayStep=7,startHour=8,endHour=20,minuteStep=1,afterStep=30,dVal){
+			let startDate=new Date();
+			let bsDate=new Date(new Date().getTime()+afterStep*60*1000);
+			let date=[],hours=[],minutes=[];
+			let hour=bsDate.getHours();
+			let minute=Math.floor(bsDate.getMinutes()/minuteStep)*minuteStep;
+			let weeks=["周日","周一","周二","周三","周四","周五","周六"];
+			let d=0,h=0,m=0;
+			let defaultVal=[];
+			for(let i=0;i<dayStep;i++){
+				let year,month,day,weekday;
+				year=startDate.getFullYear();
+				month=forMatNum(startDate.getMonth()+1);
+				day=forMatNum(startDate.getDate());
+				weekday=weeks[startDate.getDay()];
+				let label="";
+				switch(i){
+					case 0:
+						label="今天";
+						break;
+					case 1:
+						label="明天"
+						break;
+					case 2:
+						label="后天"
+						break;
+					default:
+						label=month+"月"+day+"日"+" "+weekday;
+						break;
+				}
+				date.push({
+					label:label,
+					value:year+"-"+month+"-"+day,
+					flag:i==0?true:false
+				})
+				startDate.setDate(startDate.getDate()+1);
+			}
+			if(hour<startHour){
+				hour=startHour;
+			};
+			if(hour>endHour){
+				hour=endHour;
+			};
+			for(let k=hour*1;k<=endHour*1;k++){
+				hours.push({
+					label:forMatNum(k),
+					value:forMatNum(k),
+					flag:k==hour?true:false
+				})
+			};
+			for(let j=minute;j<60;j+=minuteStep*1){
+				minutes.push({
+					label:forMatNum(j),
+					value:forMatNum(j)
+				});
+			}
+			date.map((v,k)=>{
+				if(v.label==dVal[0]){
+					d=k
+				}
+			})
+			if(d!=0){
+				hours=this.initHours(startHour=8,endHour=20,minuteStep=1,afterStep=30,date[d].value);
+			}
+			hours.map((v,k)=>{
+				if(v.label==dVal[1]){
+					h=k
+				}
+			})
+			minutes.map((v,k)=>{
+				if(v.label==dVal[2]){
+					m=k
+				}
+			})
+			defaultVal=[d,h,m];
+			return {date,hours,minutes,defaultVal};
+		},
+		initHours(startHour=8,endHour=20,minuteStep=1,afterStep=30,date){
+			let hours=[];
+			let arr=date.split("-");
+			let aDate=new Date();
+			let dYear=aDate.getFullYear();
+			let dMonth=aDate.getMonth()+1;
+			let dDate=aDate.getDate();
+			let bsDate=new Date(new Date().getTime()+afterStep*60*1000);
+			let hour=bsDate.getHours();
+			let flag=(dYear==arr[0]&&dMonth==arr[1]&&dDate==arr[2])?true:false;
+			if(hour>endHour){
+				hour=endHour;
+			};
+			if(flag){
+				for(let k=hour*1;k<=endHour*1;k++){
+					hours.push({
+						label:forMatNum(k),
+						value:forMatNum(k),
+						flag:k==hour?true:false
+					})
+				};			
+			}else{
+				for(let k=startHour*1;k<=endHour*1;k++){
+					hours.push({
+						label:forMatNum(k),
+						value:forMatNum(k),
+						flag:false
+					})
+				}			
+			};
+			return hours;
+		},
+		initMinutes(startHour=8,endHour=20,minuteStep=1,afterStep=30,date,hour){
+			let minutes=[];
+			let bsDate=new Date(new Date().getTime()+afterStep*60*1000);
+			let arr=date.split("-");
+			let aDate=new Date();
+			let dYear=aDate.getFullYear();
+			let dMonth=aDate.getMonth()+1;
+			let dDate=aDate.getDate();
+			let dHour=bsDate.getHours();;
+			let minute=Math.floor(bsDate.getMinutes()/minuteStep)*minuteStep;
+			let flag=(dYear==arr[0]&&dMonth==arr[1]&&dDate==arr[2])?true:false;
+			if(flag){
+				if(hour==dHour){
+					for(let j=minute;j<60;j+=minuteStep*1){
+						minutes.push({
+							label:forMatNum(j),
+							value:forMatNum(j)
+						});
+					}	
+				}else{
+					for(let j=0;j<60;j+=minuteStep*1){
+						minutes.push({
+							label:forMatNum(j),
+							value:forMatNum(j)
+						})
+					}
+				}
+						
+			}else{
+				for(let j=0;j<60;j+=minuteStep*1){
+					minutes.push({
+						label:forMatNum(j),
+						value:forMatNum(j)
+					})
+				}			
+			}
+			return minutes;
+		}
+	},
+	//选择区间初始化
+	range:{
+		init(start,end,value,flag){
+			let aToday=new Date();
+			let tYear,tMonth,tDay,tHours,tMinutes,tSeconds,defaultVal=[];
+			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=[];
+			startDVal=value[0].split("-");
+			endDVal=value[1].split("-");
+			let curMonth=flag?startDVal[1]*1:(startDVal[1]+1);
+			let totalDays=new Date(startYear,curMonth,0).getDate();
+			for(let s=startYear;s<=endYear;s++){
+				fyears.push(s+'');
+			};
+			for(let m=1;m<=12;m++){
+				fmonths.push(forMatNum(m));
+			};
+			for(let d=1;d<=totalDays;d++){
+				fdays.push(forMatNum(d));
+			};
+			for(let s=startDVal[0];s<=endYear;s++){
+				tyears.push(s+'');
+			};
+			for(let m=startDVal[1];m<=12;m++){
+				tmonths.push(forMatNum(m));
+			};
+			for(let d=startDVal[2];d<=totalDays;d++){
+				tdays.push(forMatNum(d));
+			};
+			defaultVal=[
+				fyears.indexOf(startDVal[0])==-1?0:fyears.indexOf(startDVal[0]),
+				fmonths.indexOf(startDVal[1])==-1?0:fmonths.indexOf(startDVal[1]),
+				fdays.indexOf(startDVal[2])==-1?0:fdays.indexOf(startDVal[2]),
+				0,
+				tyears.indexOf(endDVal[0])==-1?0:tyears.indexOf(endDVal[0]),
+				tmonths.indexOf(endDVal[1])==-1?0:tmonths.indexOf(endDVal[1]),
+				tdays.indexOf(endDVal[2])==-1?0:tdays.indexOf(endDVal[2])
+			];
+			return {
+				fyears,
+				fmonths,
+				fdays,
+				tyears,
+				tmonths,
+				tdays,
+				defaultVal
+			}
+		},
+		initStartDays(year,month){
+			let totalDays=new Date(year,month,0).getDate();
+			let dates=[];
+			for(let d=1;d<=totalDays;d++){
+				dates.push(forMatNum(d));
+			};
+			return dates;
+		},
+		initEndYears(curYear,startYear,endYear){
+			let years=[];
+			for(let y=curYear;y<=endYear;y++){
+				years.push(forMatNum(y));
+			};
+			return years;
+		},
+		initEndMonths(curMonth){
+			let months=[];
+			for(let m=curMonth*1;m<=12;m++){
+				months.push(forMatNum(m));
+			};
+			return months;
+		},
+		initEndDays(curYear,curMonth,curDate,tYear,tMonth){
+			let totalDays=new Date(curYear,curMonth,0).getDate();
+			let days=[];
+			for(let d=curDate*1;d<=totalDays;d++){
+				days.push(forMatNum(d));
+			};
+			return days;
+		},
+		initToMonths(curYear,curMonth,curDate,tYear){
+			let aDate=new Date(curYear,curMonth,curDate).getTime();
+			let bDate=new Date(tYear,curMonth,curDate).getTime();
+			let months=[];
+			if(bDate-aDate>0){
+				console.log(1)
+				for(let m=1;m<=12;m++){
+					months.push(forMatNum(m));
+				};
+			}else{
+				for(let m=curMonth*1;m<=12;m++){
+					months.push(forMatNum(m));
+				};
+			}
+			return months;
+		},
+		initToDays(curYear,curMonth,curDate,tYear,tMonth){
+			let aDate=new Date(curYear,curMonth,curDate).getTime();
+			let bDate=new Date(tYear,tMonth,curDate).getTime();
+			let totalDays=new Date(tYear,tMonth,0).getDate();
+			let days=[];
+			if(bDate-aDate>0){
+				for(let d=1;d<=totalDays;d++){
+					days.push(forMatNum(d));
+				};
+			}else{
+				for(let d=curDate*1;d<=totalDays;d++){
+					days.push(forMatNum(d));
+				};
+			}
+			return days;
+		}
+	}
+}
+
+export default initPicker

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

@@ -0,0 +1,1104 @@
+<template>
+	<view class="w-picker">
+		<view class="mask" :class="{'show':showPicker}" @tap="maskTap" @touchmove.stop.prevent catchtouchmove="true"></view>
+		<view class="w-picker-cnt" :class="{'show':showPicker}">
+			<view class="w-picker-hd" @touchmove.stop.prevent catchtouchmove="true">
+			  <view class="w-picker-btn" @tap="pickerCancel">取消</view>
+			  <view class="w-picker-btn" :style="{'color':themeColor}" @tap="pickerConfirm">确定</view>
+			</view>
+			<view class="w-picker-view" v-if="mode=='linkage'">
+				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange"  @touchstart="touchStart" @touchend="touchEnd">
+					<picker-view-column v-for="(col,colIndex) in data" :key="colIndex">
+						<view class="w-picker-item" v-for="(item,index) in col" :key="index">{{item.label}}</view>
+					</picker-view-column>
+				</picker-view>
+			</view>
+			<view class="w-picker-view" v-if="mode=='half'">
+				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange"  @touchstart="touchStart" @touchend="touchEnd">
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.years" :key="index">{{item}}年</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.months" :key="index">{{item}}月</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.days" :key="index">{{item}}日</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.areas" :key="index">{{item.label}}</view>
+					</picker-view-column>
+				</picker-view>
+			</view>
+			<view class="w-picker-view" v-if="mode=='date'">
+				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange" @touchstart="touchStart" @touchend="touchEnd">
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.years" :key="index">{{item}}年</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.months" :key="index">{{item}}月</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.days" :key="index">{{item}}日</view>
+					</picker-view-column>
+				</picker-view>
+			</view>
+			<view class="w-picker-view" v-if="mode=='yearMonth'">
+				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange" @touchstart="touchStart" @touchend="touchEnd">
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.years" :key="index">{{item}}年</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.months" :key="index">{{item}}月</view>
+					</picker-view-column>
+				</picker-view>
+			</view>
+			<view class="w-picker-view" v-if="mode=='dateTime'">
+				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange" @touchstart="touchStart" @touchend="touchEnd">
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.years" :key="index">{{item}}年</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.months" :key="index">{{item}}月</view>
+					</picker-view-column>
+					<picker-view-column >
+						<view class="w-picker-item" v-for="(item,index) in data.days" :key="index">{{item}}日</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.hours" :key="index">{{item}}时</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.minutes" :key="index">{{item}}分</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.seconds" :key="index">{{item}}秒</view>
+					</picker-view-column>
+				</picker-view>
+			</view>
+			<view class="w-picker-view" v-if="mode=='range'">
+				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange" @touchstart="touchStart" @touchend="touchEnd">
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.fyears" :key="index">{{item}}</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.fmonths" :key="index">{{item}}</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.fdays" :key="index">{{item}}</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item">-</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.tyears" :key="index">{{item}}</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.tmonths" :key="index">{{item}}</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.tdays" :key="index">{{item}}</view>
+					</picker-view-column>
+				</picker-view>
+			</view>
+			<view class="w-picker-view" v-if="mode=='time'">
+				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange" @touchstart="touchStart" @touchend="touchEnd">
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.hours" :key="index">{{item}}时</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.minutes" :key="index">{{item}}分</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.seconds" :key="index">{{item}}秒</view>
+					</picker-view-column>
+				</picker-view>
+			</view>
+			<view class="w-picker-view" v-if="mode=='region'">
+				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange" @touchstart="touchStart" @touchend="touchEnd">
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.provinces" :key="index">{{item.label}}</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.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 data.areas" :key="index">{{item.label}}</view>
+					</picker-view-column>
+				</picker-view>
+			</view>
+			<view class="w-picker-view" v-if="mode=='selector'">
+				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange" @touchstart="touchStart" @touchend="touchEnd">
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data" :key="index">{{item.label}}</view>
+					</picker-view-column>
+				</picker-view>
+			</view>
+			<view class="w-picker-view" v-if="mode=='limit'">
+				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange" @touchstart="touchStart" @touchend="touchEnd">
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.date" :key="index">{{item.label}}</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.hours" :key="index">{{item.label}}时</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.minutes" :key="index">{{item.label}}分</view>
+					</picker-view-column>
+				</picker-view>
+			</view>
+			<view class="w-picker-view" v-if="mode=='limitHour'">
+				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange" @touchstart="touchStart" @touchend="touchEnd">
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.date" :key="index">{{item.label}}</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.areas" :key="index">{{item.label}}</view>
+					</picker-view-column>
+					<picker-view-column>
+						<view class="w-picker-item" v-for="(item,index) in data.hours" :key="index">{{item.label}}时</view>
+					</picker-view-column>
+				</picker-view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import provinces from './city-data/province.js';
+	import citys from './city-data/city.js';
+	import areas from './city-data/area.js';
+	import initPicker from "./w-picker.js";
+	function oneOf (value, validList) {
+		for (let i = 0; i < validList.length; i++) {
+		  if (value === validList[i]) {
+			return true;
+		  }
+		}
+		throw new Error('mode无效,请选择有效的mode!');
+		return false;
+	}
+	export default {
+		data() {
+			return {
+				result:[],
+				data:{},
+				checkArr:[],
+				checkValue:[],
+				pickVal:[],
+				showPicker:false,
+				resultStr:"",
+				itemHeight:`height: ${uni.upx2px(88)}px;`,
+				confirmFlag:true
+			};
+		},
+		computed:{
+			
+		},
+		props:{
+			mode:{
+				type:String,
+				validator(mode){
+					let modeList=['half','date', 'dateTime', 'yearMonth','time','region','selector','limit','limitHour','range','linkage'];//过滤无效mode;
+					return oneOf(mode,modeList);
+				},
+				default(){
+					return "date"
+				}
+			},
+			themeColor:{
+				type:String,
+				default(){
+					return "#f5a200"
+				}
+			},
+			startYear:{
+				type:[String,Number],
+				default(){
+					return "1970"
+				}
+			},
+			endYear:{
+				type:[String,Number],
+				default(){
+					return new Date().getFullYear()+''
+				}
+			},
+			defaultVal:{
+				type:[Array,String],
+				default:""
+			},
+			areaCode:{
+				type:Array,
+				default(){
+					return null
+				}
+			},
+			hideArea:{//隐藏省市区三级联动   地区列
+				type:Boolean,
+				default:false
+			},
+			step:{
+				type:[String,Number],
+				default:1
+			},
+			current:{
+				type:Boolean,
+				default:false
+			},
+			selectList:{
+				type:Array,
+				default(){
+					return [];
+				}
+			},
+			//以下参数仅对mode==limit有效
+			dayStep:{
+				type:[String,Number],
+				default:7
+			},
+			startHour:{
+				type:[String,Number],
+				default:8
+			},
+			endHour:{
+				type:[String,Number],
+				default:20
+			},
+			minuteStep:{
+				type:[String,Number],
+				default:10
+			},
+			afterStep:{
+				type:[String,Number],
+				default:30
+			},
+			disabledAfter:{
+				type:Boolean,
+				default:false
+			},
+			linkList:{
+				type:Array,
+				default(){
+					return []
+				}
+			},
+			value:{
+				type:Array,
+				default(){
+					return null
+				}
+			},
+			level:{
+				type:[Number,String],
+				default:2
+			},
+			timeout:{
+				type:Boolean,
+				default:false
+			}
+		},
+		watch:{
+			mode(){
+				this.initData();
+			},
+			selectList(){
+				this.initData();
+			},
+			linkList(){
+				this.initData();
+			},
+			defaultVal(val){
+				this.initData();
+				console.log(val)
+			},
+			areaCode(){
+				this.initData();
+			},
+			value(){
+				this.initData();
+			}
+		},
+		methods:{
+			touchStart(){
+				if(this.timeout){
+					this.confirmFlag=false;
+				}
+			},
+			touchEnd(){
+				if(this.timeout){
+					setTimeout(()=>{
+						this.confirmFlag=true;
+					},500)
+				}
+			},
+			getLinkageVal(value,flag){
+				let dval=[];
+				let list=this.linkList;
+				let lev=this.level;
+				let arr=value;
+				let k=0;
+				let checkArr=[];
+				let checkValue=[];
+				let resultStr="";
+				let data=[];
+				switch(lev){
+					case 2:
+						dval=[0,0];
+						break;
+					case 3:
+						dval=[0,0,0];
+						break;
+				}
+				const getData=(obj,key,str)=>{
+					if(key<lev){
+						data.push(obj);
+						if(!arr){
+							let item=obj[0];
+							checkArr.push(item.label);
+							checkValue.push(item.value);
+							resultStr+=item.label;
+							if(item.children){
+								getData(item.children,key+=1);
+							}
+						}else{
+							obj.map((v,j)=>{
+								if(flag?v.value==arr[key]:v.label==arr[key]){
+									dval[key]=j;
+									checkArr.push(v.label);
+									checkValue.push(v.value);
+									resultStr+=v.label;
+									if(v.children){
+										getData(v.children,key+=1);
+									}
+								}
+							});
+						}
+						return {
+							data,
+							dval,
+							checkArr,
+							checkValue,
+							resultStr
+						};
+					}else{
+						return false;
+					}
+				};
+				return getData(list,k);
+			},
+			getRegionVal(value,useCode){
+				let province=value[0];
+				let city=value[1];
+				let a=0,b=0,c=0,dval=[];
+				let _this=this;
+				provinces.map((v,k)=>{
+					if(useCode?v.value==province:v.label==province){
+						a=k;
+					}
+				})
+				citys[a].map((v,k)=>{
+					if(useCode?v.value==city:v.label==city){
+						b=k;
+					}
+				})
+				if(!_this.hideArea){
+					let area=value[2];
+					areas[a][b].map((v,k)=>{
+						if(useCode?v.value==area:v.label==area){
+							c=k;
+						}
+					})
+					dval=[a,b,c];
+				}else{
+					dval=[a,b];
+				}
+				return dval;
+			},
+			useCurrent(){
+				let aToday=new Date();
+				let tYear=aToday.getFullYear().toString();
+				let tMonth=this.formatNum(aToday.getMonth()+1).toString();
+				let tDay=this.formatNum(aToday.getDate()).toString();
+				let tHours=this.formatNum(aToday.getHours()).toString();
+				let tMinutes=this.formatNum(aToday.getMinutes()).toString();
+				let tSeconds=this.formatNum(aToday.getSeconds()).toString();
+				if(this.current||!this.defaultVal){
+					switch(this.mode){
+						case "range":
+							return [tYear+"-"+tMonth+"-"+tDay,tYear+"-"+tMonth+"-"+tDay];
+							break;
+						case "date":
+							return tYear+"-"+tMonth+"-"+tDay;
+							break;
+						case "yearMonth":
+							return tYear+"-"+tMonth;
+							break;
+						case "time":
+							return tHours+":"+(Math.floor(tMinutes/this.step)*this.step).toString()+":"+tSeconds;
+							break;
+						default :
+							return tYear+"-"+tMonth+"-"+tDay+" "+tHours+":"+(Math.floor(tMinutes/this.step)*this.step).toString()+":"+tSeconds;
+							break;
+					}
+				}else{
+					return this.defaultVal;
+				}
+			},
+			formatNum(num){
+				return num<10?'0'+num:num+'';
+			},
+			maskTap(){
+				this.$emit("cancel",{
+					checkArr:this.checkArr,
+					defaultVal:this.pickVal
+				});
+				this.showPicker = false;
+			},
+			show(){
+				this.showPicker = true;
+			},
+			hide(){
+				this.showPicker = false;
+			},
+			pickerCancel(){
+				this.$emit("cancel",{
+					checkArr:this.checkArr,
+					defaultVal:this.pickVal
+				});
+				this.showPicker = false;
+			},
+			pickerConfirm(e){
+				if(!this.confirmFlag){
+					return;
+				}
+				switch(this.mode){
+					case "range":
+						let checkArr=this.checkArr;
+						let fDateTime=new Date(checkArr[0],checkArr[1],checkArr[2]);
+						let tDateTime=new Date(checkArr[3],checkArr[4],checkArr[5]);
+						let dVal=this.pickVal;
+						if(fDateTime>tDateTime){
+							this.checkArr=[checkArr[3],checkArr[4],checkArr[5],checkArr[0],checkArr[1],checkArr[2]];
+							this.pickVal=[dVal[4],dVal[5],dVal[6],0,dVal[0],dVal[1],dVal[2]];
+							this.$emit("confirm",{
+								checkArr:[...this.checkArr],
+								from:checkArr[3]+"-"+checkArr[4]+"-"+checkArr[5],
+								to:checkArr[0]+"-"+checkArr[1]+"-"+checkArr[2],
+								defaultVal:[...this.pickVal],
+								result:this.resultStr
+							});
+						}else{
+							this.$emit("confirm",{
+								checkArr:[...this.checkArr],
+								from:checkArr[0]+"-"+checkArr[1]+"-"+checkArr[2],
+								to:checkArr[3]+"-"+checkArr[4]+"-"+checkArr[5],
+								defaultVal:[...this.pickVal],
+								result:this.resultStr
+							});
+						}
+						break;
+					case "limit":
+						let aTime=new Date().getTime();
+						let bTime=new Date(this.resultStr.replace(/-/g,'/')).getTime();
+						if(aTime>bTime){
+							uni.showModal({
+								title:"提示",
+								content:"选择时间必须大于当前时间",
+								confirmColor:this.themeColor
+							});
+							return;
+						}
+						this.$emit("confirm",{
+							checkArr:[...this.checkArr],
+							defaultVal:[...this.pickVal],
+							result:this.resultStr
+						});
+						break;
+					case "region":
+					case "linkage":
+						this.$emit("confirm",{
+							checkArr:[...this.checkArr],
+							checkValue:[...this.checkValue],
+							defaultVal:[...this.pickVal],
+							result:this.resultStr
+						});
+						break;
+					case "selector":
+						this.$emit("confirm",{
+							checkArr:this.checkArr,
+							defaultVal:[...this.pickVal],
+							result:this.resultStr
+						});
+						break;
+					default:
+						this.$emit("confirm",{
+							checkArr:[this.checkArr],
+							defaultVal:[...this.pickVal],
+							result:this.resultStr
+						});
+						break;
+				}
+				this.showPicker = false;
+			},
+			bindChange(val){
+				let _this=this;
+				let arr=val.detail.value;
+				let year="",month="",day="",hour="",minute="",second="",note=[],province,city,area;
+				let checkArr=_this.checkArr;
+				let days=[],months=[],endYears=[],endMonths=[],endDays=[],startDays=[];
+				let mode=_this.mode;
+				let col1,col2,col3,d,a,h,m;
+				let xDate=new Date().getTime();
+				switch(mode){
+					case "limitHour":
+						col1=_this.data.date[arr[0]];
+						col2=_this.data.areas[arr[1]];
+						col3=_this.data.hours[arr[2]];
+						if(col1.value!=checkArr[0].value){
+							arr[1]=0;
+							arr[2]=0;
+							let areas=initPicker.limitHour.initAreas(col1);
+							_this.data.areas=areas;
+							let hours=initPicker.limitHour.initHours(col1,_this.data.areas[arr[1]]);
+							_this.data.hours=hours;
+						};
+						if(col2.value!=checkArr[1].value){
+							arr[2]=0;
+							let hours=initPicker.limitHour.initHours(col1,_this.data.areas[arr[1]]);
+							_this.data.hours=hours;
+						};
+						d=_this.data.date[arr[0]]||_this.data.date[_this.data.date.length-1];
+						a=_this.data.areas[arr[1]]||_this.data.areas[_this.data.areas.length-1];
+						h=_this.data.hours[arr[2]]||_this.data.hours[_this.data.hours.length-1];
+						_this.checkArr=[d,a,h];
+						_this.resultStr=`${d.value+' '+a.label+' '+h.label+"时"}`;
+						break;
+					case "limit":
+						col1=_this.data.date[arr[0]];
+						col2=_this.data.hours[arr[1]];
+						if(col1.value!=checkArr[0].value){
+							let hours=initPicker.limit.initHours(_this.startHour,_this.endHour,_this.minuteStep,_this.afterStep,col1.value);
+							let minutes=initPicker.limit.initMinutes(_this.startHour,_this.endHour,_this.minuteStep,_this.afterStep,col1.value,col2.value);
+							_this.data.hours=hours;
+							_this.data.minutes=minutes;
+						};
+						if(col2.value!=checkArr[1].value){
+							let minutes=initPicker.limit.initMinutes(_this.startHour,_this.endHour,_this.minuteStep,_this.afterStep,col1.value,col2.value);
+							_this.data.minutes=minutes;
+						};
+						d=_this.data.date[arr[0]]||_this.data.date[_this.data.date.length-1];
+						h=_this.data.hours[arr[1]]||_this.data.hours[_this.data.hours.length-1];
+						m=_this.data.minutes[arr[2]]||_this.data.minutes[_this.data.minutes.length-1];
+						_this.checkArr=[d,h,m];
+						_this.resultStr=`${d.value+' '+h.value+':'+m.value+":"+"00"}`;
+						break;
+					case "range":
+						let fyear=_this.data.fyears[arr[0]]||_this.data.fyears[_this.data.fyears.length-1];
+						let fmonth=_this.data.fmonths[arr[1]]||_this.data.fmonths[_this.data.fmonths.length-1];
+						let fday=_this.data.fdays[arr[2]]||_this.data.fdays[_this.data.fdays.length-1];
+						let tyear=_this.data.tyears[arr[4]]||_this.data.tyears[_this.data.tyears.length-1];
+						let tmonth=_this.data.tmonths[arr[5]]||_this.data.tmonths[_this.data.tmonths.length-1];
+						let tday=_this.data.tdays[arr[6]]||_this.data.tdays[_this.data.tdays.length-1];
+						if(fyear!=checkArr[0]){
+							arr[4]=0;
+							arr[5]=0;
+							arr[6]=0;
+							startDays=initPicker.range.initStartDays(fyear,fmonth);
+							endYears=initPicker.range.initEndYears(fyear,_this.startYear,_this.endYear);
+							endMonths=initPicker.range.initEndMonths(fmonth);
+							endDays=initPicker.range.initEndDays(fyear,fmonth,fday,tyear,tmonth);
+							_this.data.fdays=startDays;
+							_this.data.tyears=endYears;
+							_this.data.tmonths=endMonths;
+							_this.data.tdays=endDays;
+							tyear=_this.data.tyears[0];
+							checkArr[3]=_this.data.tyears[0];
+							tmonth=_this.data.tmonths[0];
+							checkArr[4]=_this.data.tmonths[0];
+							tday=_this.data.tdays[0];
+							checkArr[5]=_this.data.tdays[0];
+						};
+						if(fmonth!=checkArr[1]){
+							arr[4]=0;
+							arr[5]=0;
+							arr[6]=0;
+							startDays=initPicker.range.initStartDays(fyear,fmonth);
+							endYears=initPicker.range.initEndYears(fyear,_this.startYear,_this.endYear);
+							endMonths=initPicker.range.initEndMonths(fmonth);
+							endDays=initPicker.range.initEndDays(fyear,fmonth,fday,tyear,tmonth);
+							_this.data.fdays=startDays;
+							_this.data.tyears=endYears;
+							_this.data.tmonths=endMonths;
+							_this.data.tdays=endDays;
+							tyear=_this.data.tyears[0];
+							checkArr[3]=_this.data.tyears[0];
+							tmonth=_this.data.tmonths[0];
+							checkArr[4]=_this.data.tmonths[0];
+							tday=_this.data.tdays[0];
+							checkArr[5]=_this.data.tdays[0];
+						};
+						if(fday!=checkArr[2]){
+							arr[4]=0;
+							arr[5]=0;
+							arr[6]=0;
+							endYears=initPicker.range.initEndYears(fyear,_this.startYear,_this.endYear);
+							endMonths=initPicker.range.initEndMonths(fmonth);
+							endDays=initPicker.range.initEndDays(fyear,fmonth,fday,tyear,tmonth);
+							_this.data.tyears=endYears;
+							_this.data.tmonths=endMonths;
+							_this.data.tdays=endDays;
+							tyear=_this.data.tyears[0];
+							checkArr[3]=_this.data.tyears[0];
+							tmonth=_this.data.tmonths[0];
+							checkArr[4]=_this.data.tmonths[0];
+							tday=_this.data.tdays[0];
+							checkArr[5]=_this.data.tdays[0];
+						};
+						if(tyear!=checkArr[3]){
+							arr[5]=0;
+							arr[6]=0;
+							endMonths=initPicker.range.initToMonths(fyear,fmonth,fday,tyear);
+							endDays=initPicker.range.initEndDays(fyear,fmonth,fday,tyear,tmonth);
+							_this.data.tmonths=endMonths;
+							_this.data.tdays=endDays;
+							tmonth=_this.data.tmonths[0];
+							checkArr[4]=_this.data.tmonths[0];
+							tday=_this.data.tdays[0];
+							checkArr[5]=_this.data.tdays[0];
+						};
+						if(tmonth!=checkArr[4]){
+							arr[6]=0;
+							endDays=initPicker.range.initToDays(fyear,fmonth,fday,tyear,tmonth);
+							_this.data.tdays=endDays;
+							tday=_this.data.tdays[0];
+							checkArr[5]=_this.data.tdays[0];
+						};
+						_this.checkArr=[fyear,fmonth,fday,tyear,tmonth,tday];
+						_this.resultStr=`${fyear+'-'+fmonth+'-'+fday+'至'+tyear+'-'+tmonth+'-'+tday}`;
+						break;
+					case "half":
+						year=_this.data.years[arr[0]]||_this.data.years[_this.data.years.length-1];
+						month=_this.data.months[arr[1]]||_this.data.months[_this.data.months.length-1];
+						day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
+						area=_this.data.areas[arr[3]]||_this.data.areas[_this.data.areas.length-1];
+						if(year!=checkArr[0]){
+							months=initPicker.date.initMonths(year,_this.disabledAfter);
+							days=initPicker.date.initDays(year,month,_this.disabledAfter);
+							if(_this.disabledAfter){
+								arr[1]=arr[1]>(months.length-1)?months.length-1:arr[1];
+								arr[2]=arr[2]>(days.length-1)?days.length-1:arr[2];
+								month=_this.data.months[arr[1]]||_this.data.months[_this.data.months.length-1];
+								day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
+							}
+							_this.data.days=days;
+							_this.data.months=months;
+						};
+						if(month!=checkArr[1]){
+							days=initPicker.date.initDays(year,month,_this.disabledAfter);
+							arr[2]=arr[2]>(days.length-1)?days.length-1:arr[2];
+							day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
+							_this.data.days=days;
+						};
+						_this.checkArr=[year,month,day,area];
+						_this.resultStr=`${year+'-'+month+'-'+day+area.label}`;
+						break;		
+					case "date":
+						year=_this.data.years[arr[0]]||_this.data.years[_this.data.years.length-1];
+						month=_this.data.months[arr[1]]||_this.data.months[_this.data.months.length-1];
+						day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
+						if(year!=checkArr[0]){
+							months=initPicker.date.initMonths(year,_this.disabledAfter);
+							days=initPicker.date.initDays(year,month,_this.disabledAfter);
+							if(_this.disabledAfter){
+								arr[1]=arr[1]>(months.length-1)?months.length-1:arr[1];
+								arr[2]=arr[2]>(days.length-1)?days.length-1:arr[2];
+								month=_this.data.months[arr[1]]||_this.data.months[_this.data.months.length-1];
+								day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
+							}
+							_this.data.days=days;
+							_this.data.months=months;
+						};
+						if(month!=checkArr[1]){
+							days=initPicker.date.initDays(year,month,_this.disabledAfter);
+							arr[2]=arr[2]>(days.length-1)?days.length-1:arr[2];
+							day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
+							_this.data.days=days;
+						};
+						_this.checkArr=[year,month,day];
+						_this.resultStr=`${year+'-'+month+'-'+day}`;
+						break;
+					case "yearMonth":
+						year=_this.data.years[arr[0]]||_this.data.years[_this.data.years.length-1];
+						month=_this.data.months[arr[1]]||_this.data.months[_this.data.months.length-1];
+						if(year!=checkArr[0]){
+							if(_this.disabledAfter){
+								arr[1]=arr[1]>(months.length-1)?months.length-1:arr[1];
+								month=_this.data.months[arr[1]]||_this.data.months[_this.data.months.length-1];
+							}
+							months=initPicker.date.initMonths(year,_this.disabledAfter);
+							_this.data.months=months;
+						};
+						_this.checkArr=[year,month];
+						_this.resultStr=`${year+'-'+month}`;
+						break;
+					case "dateTime":
+						year=_this.data.years[arr[0]]||_this.data.years[_this.data.years.length-1];
+						month=_this.data.months[arr[1]]||_this.data.months[_this.data.months.length-1];
+						day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
+						hour=_this.data.hours[arr[3]]||_this.data.hours[_this.data.hours.length-1];
+						minute=_this.data.minutes[arr[4]]||_this.data.minutes[_this.data.minutes.length-1];
+						second=_this.data.seconds[arr[5]]||_this.data.seconds[_this.data.seconds.length-1];
+						if(year!=checkArr[0]){
+							arr[2]=0;
+							days=initPicker.date.initDays(year,month);
+							day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
+							_this.data.days=days;
+						};
+						if(month!=checkArr[1]){
+							arr[2]=0;
+							days=initPicker.date.initDays(year,month);
+							day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
+							_this.data.days=days;
+						};
+						_this.checkArr=[year,month,day,hour,minute,second];
+						_this.resultStr=`${year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second}`;
+						break;
+					case "time":
+						hour=_this.data.hours[arr[0]]||_this.data.hours[_this.data.hours.length-1];
+						minute=_this.data.minutes[arr[1]]||_this.data.minutes[_this.data.minutes.length-1];
+						second=_this.data.seconds[arr[2]]||_this.data.seconds[_this.data.seconds.length-1];
+						_this.checkArr=[hour,minute,second];
+						_this.resultStr=`${hour+':'+minute+':'+second}`;
+						break;
+					case "linkage":
+						let c1,c2,c3;
+						let list=this.linkList;
+						c1=_this.data[0][arr[0]]||_this.data[0][0];
+						c2=_this.data[1][arr[1]]||_this.data[1][0];
+						if(this.level==3){
+							c3=_this.data[2][arr[2]]||_this.data[2][0];
+							if(c1.label!=checkArr[0]){
+								arr[1] = 0;
+								arr[2] = 0;
+								_this.data[1]=list[arr[0]].children;
+								_this.data[2]=list[arr[0]].children[arr[1]].children;
+								c2=_this.data[1][arr[1]]||_this.data[1][0];
+								c3=_this.data[2][arr[2]]||_this.data[2][0];
+							};
+							if(c2.label!=checkArr[1]){
+								arr[2] = 0;
+								_this.data[2]=list[arr[0]].children[arr[1]].children;
+								c3=_this.data[2][arr[2]]||_this.data[2][0];
+							};
+							_this.checkArr=[c1.label,c2.label,c3.label];
+							_this.checkValue=[
+								_this.data[0][arr[0]]?_this.data[0][arr[0]].value:_this.data[0][0].value,
+								_this.data[1][arr[1]]?_this.data[1][arr[1]].value:_this.data[1][0].value,
+								_this.data[2][arr[2]]?_this.data[2][arr[2]].value:_this.data[2][0].value
+							];
+							_this.resultStr=c1.label+c2.label+c3.label;
+						}else{
+							if(c1.label!=checkArr[0]){
+								_this.data[1]=list[arr[0]].children;
+								arr[1] = 0;
+								c2=_this.data[1][arr[1]]||_this.data[1][0];
+							};
+							_this.checkArr=[c1.label,c2.label];
+							_this.checkValue=[
+								_this.data[0][arr[0]]?_this.data[0][arr[0]].value:_this.data[0][0].value,
+								_this.data[1][arr[1]]?_this.data[1][arr[1]].value:_this.data[1][0].value
+							];
+							_this.resultStr=c1.label+c2.label;
+						}
+						break;
+					case "region":
+						province=_this.data.provinces[arr[0]]||_this.data.provinces[0];
+						city=_this.data.citys[arr[1]]||_this.data.citys[0];
+						if(!_this.hideArea){
+							area=_this.data.areas[arr[2]]||_this.data.areas[0];
+						}
+						
+						if(province.label!=checkArr[0]){
+							_this.data.citys = citys[arr[0]]||citys[0];
+							if(!_this.hideArea){
+								_this.data.areas = areas[arr[0]][0]||areas[0][0];
+							}
+							arr[1] = 0;
+							arr[2] = 0;
+							city=_this.data.citys[arr[1]]||_this.data.citys[0];
+							if(!_this.hideArea){
+								area=_this.data.areas[arr[2]]||_this.data.areas[0];
+							}
+						};
+						if(city.label!=checkArr[1]&&!_this.hideArea){
+							_this.data.areas = areas[arr[0]][arr[1]]||areas[0][0];
+							arr[2]=0;
+							area=_this.data.areas[arr[2]]||_this.data.areas[0];
+						};
+						if(!_this.hideArea){
+							_this.checkArr=[province.label,city.label,area.label];
+							_this.checkValue=[
+								_this.data.provinces[arr[0]]?_this.data.provinces[arr[0]].value:_this.data.provinces[0].value,
+								_this.data.citys[arr[1]]?_this.data.citys[arr[1]].value:_this.data.citys[0].value,
+								_this.data.areas[arr[2]]?_this.data.areas[arr[2]].value:_this.data.areas[0].value
+							];
+							_this.resultStr=province.label+city.label+area.label;
+						}else{
+							_this.checkArr=[province.label,city.label];
+							_this.checkValue=[
+								_this.data.provinces[arr[0]]?_this.data.provinces[arr[0]].value:_this.data.provinces[0].value,
+								_this.data.citys[arr[1]]?_this.data.citys[arr[1]].value:_this.data.citys[0].value
+							];
+							_this.resultStr=province.label+city.label;
+						};
+						break;
+					case "selector":
+						_this.checkArr=_this.data[arr[0]]||_this.data[_this.data.length-1];
+						_this.resultStr=_this.data[arr[0]]?_this.data[arr[0]].label:_this.data[_this.data.length-1].label;
+						break;	
+				}
+				_this.$nextTick(()=>{
+					_this.pickVal=arr;
+				})
+			},
+			initData(){
+				let _this=this;
+				let data={};
+				let mode=_this.mode;
+				let year,month,day,hour,minute,second,province,city,area;
+				let col1,col2,col3;
+				let dVal=[];
+				switch(mode){
+					case "linkage":
+						let init;
+						if(_this.value){
+							init=_this.getLinkageVal(_this.value,true);
+						}else{
+							init=_this.getLinkageVal(_this.defaultVal);
+						}
+						dVal=init.dval;
+						data=init.data;
+						_this.checkArr=init.checkArr;
+						_this.checkValue=init.checkValue;
+						_this.resultStr=init.resultStr;
+						break;
+					case "region":
+						if(_this.areaCode){
+							dVal=_this.getRegionVal(_this.areaCode,true);
+						}else{
+							dVal=_this.getRegionVal(_this.defaultVal);
+						}
+						if(_this.hideArea){
+							data={
+								provinces:provinces,
+								citys:citys[dVal[0]]
+							};
+						}else{
+							data={
+								provinces:provinces,
+								citys:citys[dVal[0]],
+								areas:areas[dVal[0]][dVal[1]]
+							};
+						};
+						break;
+					case "selector":
+						let idx=0;
+						data=[..._this.selectList];
+						_this.selectList.map((v,k)=>{
+							if(v.label==this.defaultVal){
+								idx=k;
+							}
+						})
+						dVal=[idx];
+						break;
+					case "limit":
+						data=initPicker.limit.init(_this.dayStep,_this.startHour,_this.endHour,_this.minuteStep,_this.afterStep,this.defaultVal);
+						dVal=data.defaultVal||_this.defaultVal;
+						break;
+					case "limitHour":
+						data=initPicker.limitHour.init(_this.dayStep,this.defaultVal);
+						dVal=data.defaultVal||_this.defaultVal;
+						break;	
+					case "range":
+						data=initPicker.range.init(_this.startYear,_this.endYear,_this.useCurrent(),_this.current);
+						dVal=data.defaultVal||_this.defaultVal;
+						break;
+					default:
+						data=initPicker.date.init(_this.startYear,_this.endYear,_this.mode,_this.step,_this.useCurrent(),_this.current,_this.disabledAfter);
+						dVal=data.defaultVal||_this.defaultVal;
+						break;
+				}
+				_this.data=data;
+				switch(mode){
+					case "limitHour":
+						col1=data.date[dVal[0]]||data.date[data.date.length-1];
+						col2=data.areas[dVal[2]]||data.areas[data.areas.length-1];
+						col3=data.hours[dVal[1]]||data.hours[data.hours.length-1];
+						_this.checkArr=[col1,col2,col3];
+						_this.resultStr=`${col1.value+' '+col2.label+' '+col3.label+'时'}`;
+						break;
+					case "limit":
+						col1=data.date[dVal[0]]||data.date[data.date.length-1];
+						col2=data.hours[dVal[1]]||data.hours[data.hours.length-1];
+						col3=data.minutes[dVal[2]]||data.minutes[data.minutes.length-1];
+						_this.checkArr=[col1,col2,col3];
+						_this.resultStr=`${col1.value+' '+col2.value+':'+col3.value+":"+"00"}`;
+						break;
+					case "range":
+						let fYear=data.fyears[dVal[0]]||data.fyears[data.fyears.length-1];
+						let fmonth=data.fmonths[dVal[1]]||data.fmonths[data.fmonths.length-1];
+						let fday=data.fdays[dVal[2]]||data.fdays[data.fdays.length-1];
+						let tYear=data.tyears[dVal[4]]||data.tyears[data.tyears.length-1];
+						let tmonth=data.tmonths[dVal[5]]||data.tmonths[data.tmonths.length-1];
+						let tday=data.tdays[dVal[6]]||data.tdays[data.tdays.length-1];
+						_this.checkArr=[fYear,fmonth,fday,tYear,tmonth,tday];
+						_this.resultStr=`${fYear+'-'+fmonth+'-'+fday+'至'+tYear+'-'+tmonth+'-'+tday}`;
+						break;
+					case "half":
+						year=data.years[dVal[0]]||data.years[data.years.length-1];
+						month=data.months[dVal[1]]||data.months[data.months.length-1];
+						day=data.days[dVal[2]]||data.days[data.days.length-1];
+						area=data.areas[dVal[3]]||data.areas[data.areas.length-1];
+						_this.checkArr=[year,month,day,area];
+						_this.resultStr=`${year+'-'+month+'-'+day+' '+area.label}`;
+						break;	
+					case "date":
+						year=data.years[dVal[0]]||data.years[data.years.length-1];
+						month=data.months[dVal[1]]||data.months[data.months.length-1];
+						day=data.days[dVal[2]]||data.days[data.days.length-1];
+						_this.checkArr=[year,month,day];
+						_this.resultStr=`${year+'-'+month+'-'+day}`;
+						break;
+					case "yearMonth":
+						year=data.years[dVal[0]]||data.years[data.years.length-1];
+						month=data.months[dVal[1]]||data.months[data.months.length-1];
+						_this.checkArr=[year,month];
+						_this.resultStr=`${year+'-'+month}`;
+						break;
+					case "dateTime":
+						year=data.years[dVal[0]]||data.years[data.years.length-1];
+						month=data.months[dVal[1]]||data.months[data.months.length-1];
+						day=data.days[dVal[2]]||data.days[data.days.length-1];
+						hour=data.hours[dVal[3]]||data.hours[data.hours.length-1];
+						minute=data.minutes[dVal[4]]||data.minutes[data.minutes.length-1];
+						second=data.seconds[dVal[5]]||data.seconds[data.seconds.length-1];
+						_this.resultStr=`${year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second}`;
+						_this.checkArr=[year,month,day,hour,minute];
+						break;
+					case "time":
+						hour=data.hours[dVal[0]]||data.hours[data.hours.length-1];
+						minute=data.minutes[dVal[1]]||data.minutes[data.minutes.length-1];
+						second=data.seconds[dVal[2]]||data.seconds[data.seconds.length-1];
+						_this.checkArr=[hour,minute,second];
+						_this.resultStr=`${hour+':'+minute+':'+second}`;
+						break;
+					case "region":
+						province=data.provinces[dVal[0]];
+						city=data.citys[dVal[1]];
+						if(!_this.hideArea){
+							area=data.areas[dVal[2]];
+							_this.checkArr=[province.label,city.label,area.label];
+							_this.checkValue=[province.value,city.value,area.value];
+							_this.resultStr=province.label+city.label+area.label;
+						}else{
+							_this.checkArr=[province.label,city.label];
+							_this.checkValue=[province.value,city.value];
+							_this.resultStr=province.label+city.label;
+						}
+						break;
+					case "selector":
+						_this.checkArr=data[dVal[0]]||data[data.length-1];
+						_this.resultStr=data[dVal[0]].label||data[data.length-1].label;
+						break;
+				}
+				_this.$nextTick(()=>{
+					_this.pickVal=[...dVal];
+				})
+			}
+		},
+		mounted() {
+			this.initData();
+		}
+	}
+</script>
+
+<style lang="scss">
+	.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.show{
+			visibility: visible;
+			opacity: 1;
+		}
+		.w-picker-cnt {
+		  position: fixed;
+		  bottom: 0;
+		  left: 0;
+		  width: 100%;
+		  transition: all 0.3s ease;
+		  transform: translateY(100%);
+		  z-index: 3000;
+		}
+		.w-picker-cnt.show {
+		  transform: translateY(0);
+		}
+		.w-picker-hd {
+		  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;
+		  .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-item {
+		  text-align: center;
+		  width: 100%;
+		  height: 88upx;
+		  line-height: 88upx;
+		  text-overflow: ellipsis;
+		  white-space: nowrap;
+		  font-size: 30upx;
+		}
+		.w-picker-view {
+		  width: 100%;
+		  height: 476upx;
+		  overflow: hidden;
+		  background-color: rgba(255, 255, 255, 1);
+		  z-index: 666;
+		}
+		picker-view{
+			height: 100%;
+		}
+	}
+
+</style>

+ 106 - 0
components/wallet/msg/msg-list.vue

@@ -0,0 +1,106 @@
+<template>
+	<!-- <view class="flex align-center p-2 border-bottom border-light-secondary animated fast fadeIn" hover-class="bg-light" @click="open"> -->
+	<view class="msgLIst" hover-class="bg-light" @click="open">
+		<image :src="item.avatar" mode="" style="height: 60rpx;width: 60rpx;" class="msgImg "></image>
+		<view class="msgView">
+			<view class="betWeen">
+				<text class="font-md">
+					{{item.username}}
+				</text>
+				<text class="text-secondary font-sm">
+					{{item.updata_time | formateTime}}
+				</text>
+			</view>
+			<view class="betWeen">
+				<text class="text-secondary text-ellipsis" style="max-width: 500rpx;">
+					{{item.data}}
+				</text>
+				<uni-badge :text="item.noread" type="error "></uni-badge>
+			</view>
+		</view>
+	</view>
+
+</template>
+
+<script>
+	// 引入时间库
+	import $T from '@/components/common/time.js';
+	import uniBadge from '@/components/uni-badge/uni-badge.vue'
+	export default {
+		props: {
+			item: Object,
+			index: Number
+		},
+		components: {
+			uniBadge
+		},
+		filters: {
+			formateTime(value) {
+				return $T.gettime(value)
+			}
+		},
+		methods: {
+			open() {
+				uni.navigateTo({
+					url: '../../pages/user-chat/user-chat'
+				});
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.msgLIst {
+		display: flex;
+		align-items: center;
+		padding: 20rpx;
+		background: #FFFFFF;
+		border-bottom: 1rpx solid #dee2e6;
+		&:first-of-type {
+			margin-top: 20rpx;
+		}
+
+		.msgImg {
+			margin-right: 20rpx;
+			border-radius: 100rpx;
+
+		}
+
+		.msgView {
+			display: flex;
+			flex-direction: column;
+			flex: 1;
+		}
+	}
+
+	.betWeen {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		
+		.font-md {
+			font-size: 30rpx;
+		}
+
+		.text-secondary {
+			color: #6c757d;
+			font-size: 24rpx;
+		}
+
+		.font-sm {
+			font-size: 20rpx;
+		}
+
+		/* 文字换行溢出处理 */
+		.text-ellipsis {
+			/* #ifndef APP-PLUS-NVUE */
+			overflow: hidden;
+			text-overflow: ellipsis;
+			white-space: nowrap;
+			/* #endif */
+			/* #ifdef APP-PLUS-NVUE */
+			lines: 1;
+			/* #endif */
+		}
+	}
+</style>

ファイルの差分が大きいため隠しています
+ 0 - 0
components/wangding-pickerAddress/data.js


+ 4719 - 0
components/wangding-pickerAddress/data1.js

@@ -0,0 +1,4719 @@
+export default [
+  {
+    "name": "北京市",
+    "city": [
+      {
+        "name": "北京区",
+        "area": [
+          "东城区",
+          "西城区",
+          "崇文区",
+          "宣武区",
+          "朝阳区",
+          "丰台区",
+          "石景山区",
+          "海淀区",
+          "门头沟区",
+          "房山区",
+          "通州区",
+          "顺义区",
+          "昌平区",
+          "大兴区",
+          "平谷区",
+          "怀柔区",
+          "密云县",
+          "延庆县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "天津市",
+    "city": [
+      {
+        "name": "天津区",
+        "area": [
+          "和平区",
+          "河东区",
+          "河西区",
+          "南开区",
+          "河北区",
+          "红桥区",
+          "塘沽区",
+          "汉沽区",
+          "大港区",
+          "东丽区",
+          "西青区",
+          "津南区",
+          "北辰区",
+          "武清区",
+          "宝坻区",
+          "宁河县",
+          "静海县",
+          "蓟  县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "河北省",
+    "city": [
+      {
+        "name": "石家庄市",
+        "area": [
+          "长安区",
+          "桥东区",
+          "桥西区",
+          "新华区",
+          "郊  区",
+          "井陉矿区",
+          "井陉县",
+          "正定县",
+          "栾城县",
+          "行唐县",
+          "灵寿县",
+          "高邑县",
+          "深泽县",
+          "赞皇县",
+          "无极县",
+          "平山县",
+          "元氏县",
+          "赵  县",
+          "辛集市",
+          "藁",
+          "晋州市",
+          "新乐市",
+          "鹿泉市"
+        ]
+      },
+      {
+        "name": "唐山市",
+        "area": [
+          "路南区",
+          "路北区",
+          "古冶区",
+          "开平区",
+          "新  区",
+          "丰润县",
+          "滦  县",
+          "滦南县",
+          "乐亭县",
+          "迁西县",
+          "玉田县",
+          "唐海县",
+          "遵化市",
+          "丰南市",
+          "迁安市"
+        ]
+      },
+      {
+        "name": "秦皇岛市",
+        "area": [
+          "海港区",
+          "山海关区",
+          "北戴河区",
+          "青龙满族自治县",
+          "昌黎县",
+          "抚宁县",
+          "卢龙县"
+        ]
+      },
+      {
+        "name": "邯郸市",
+        "area": [
+          "邯山区",
+          "丛台区",
+          "复兴区",
+          "峰峰矿区",
+          "邯郸县",
+          "临漳县",
+          "成安县",
+          "大名县",
+          "涉  县",
+          "磁  县",
+          "肥乡县",
+          "永年县",
+          "邱  县",
+          "鸡泽县",
+          "广平县",
+          "馆陶县",
+          "魏  县",
+          "曲周县",
+          "武安市"
+        ]
+      },
+      {
+        "name": "邢台市",
+        "area": [
+          "桥东区",
+          "桥西区",
+          "邢台县",
+          "临城县",
+          "内丘县",
+          "柏乡县",
+          "隆尧县",
+          "任  县",
+          "南和县",
+          "宁晋县",
+          "巨鹿县",
+          "新河县",
+          "广宗县",
+          "平乡县",
+          "威  县",
+          "清河县",
+          "临西县",
+          "南宫市",
+          "沙河市"
+        ]
+      },
+      {
+        "name": "保定市",
+        "area": [
+          "新市区",
+          "北市区",
+          "南市区",
+          "满城县",
+          "清苑县",
+          "涞水县",
+          "阜平县",
+          "徐水县",
+          "定兴县",
+          "唐  县",
+          "高阳县",
+          "容城县",
+          "涞源县",
+          "望都县",
+          "安新县",
+          "易  县",
+          "曲阳县",
+          "蠡  县",
+          "顺平县",
+          "博野",
+          "雄县",
+          "涿州市",
+          "定州市",
+          "安国市",
+          "高碑店市"
+        ]
+      },
+      {
+        "name": "张家口市",
+        "area": [
+          "桥东区",
+          "桥西区",
+          "宣化区",
+          "下花园区",
+          "宣化县",
+          "张北县",
+          "康保县",
+          "沽源县",
+          "尚义县",
+          "蔚  县",
+          "阳原县",
+          "怀安县",
+          "万全县",
+          "怀来县",
+          "涿鹿县",
+          "赤城县",
+          "崇礼县"
+        ]
+      },
+      {
+        "name": "承德市",
+        "area": [
+          "双桥区",
+          "双滦区",
+          "鹰手营子矿区",
+          "承德县",
+          "兴隆县",
+          "平泉县",
+          "滦平县",
+          "隆化县",
+          "丰宁满族自治县",
+          "宽城满族自治县",
+          "围场满族蒙古族自治县"
+        ]
+      },
+      {
+        "name": "沧州市",
+        "area": [
+          "新华区",
+          "运河区",
+          "沧  县",
+          "青  县",
+          "东光县",
+          "海兴县",
+          "盐山县",
+          "肃宁县",
+          "南皮县",
+          "吴桥县",
+          "献  县",
+          "孟村回族自治县",
+          "泊头市",
+          "任丘市",
+          "黄骅市",
+          "河间市"
+        ]
+      },
+      {
+        "name": "廊坊市",
+        "area": [
+          "安次区",
+          "固安县",
+          "永清县",
+          "香河县",
+          "大城县",
+          "文安县",
+          "大厂回族自治县",
+          "霸州市",
+          "三河市"
+        ]
+      },
+      {
+        "name": "衡水市",
+        "area": [
+          "桃城区",
+          "枣强县",
+          "武邑县",
+          "武强县",
+          "饶阳县",
+          "安平县",
+          "故城县",
+          "景  县",
+          "阜城县",
+          "冀州市",
+          "深州市"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "山西省",
+    "city": [
+      {
+        "name": "太原市",
+        "area": [
+          "小店区",
+          "迎泽区",
+          "杏花岭区",
+          "尖草坪区",
+          "万柏林区",
+          "晋源区",
+          "清徐县",
+          "阳曲县",
+          "娄烦县",
+          "古交市"
+        ]
+      },
+      {
+        "name": "大同市",
+        "area": [
+          "城  区",
+          "矿  区",
+          "南郊区",
+          "新荣区",
+          "阳高县",
+          "天镇县",
+          "广灵县",
+          "灵丘县",
+          "浑源县",
+          "左云县",
+          "大同县"
+        ]
+      },
+      {
+        "name": "阳泉市",
+        "area": [
+          "城  区",
+          "矿  区",
+          "郊  区",
+          "平定县",
+          "盂  县"
+        ]
+      },
+      {
+        "name": "长治市",
+        "area": [
+          "城  区",
+          "郊  区",
+          "长治县",
+          "襄垣县",
+          "屯留县",
+          "平顺县",
+          "黎城县",
+          "壶关县",
+          "长子县",
+          "武乡县",
+          "沁  县",
+          "沁源县",
+          "潞城市"
+        ]
+      },
+      {
+        "name": "晋城市",
+        "area": [
+          "城  区",
+          "沁水县",
+          "阳城县",
+          "陵川县",
+          "泽州县",
+          "高平市"
+        ]
+      },
+      {
+        "name": "朔州市",
+        "area": [
+          "朔城区",
+          "平鲁区",
+          "山阴县",
+          "应  县",
+          "右玉县",
+          "怀仁县"
+        ]
+      },
+      {
+        "name": "忻州市",
+        "area": [
+          "忻府区",
+          "原平市",
+          "定襄县",
+          "五台县",
+          "代  县",
+          "繁峙县",
+          "宁武县",
+          "静乐县",
+          "神池县",
+          "五寨县",
+          "岢岚县",
+          "河曲县",
+          "保德县",
+          "偏关县"
+        ]
+      },
+      {
+        "name": "吕梁市",
+        "area": [
+          "离石区",
+          "孝义市",
+          "汾阳市",
+          "文水县",
+          "交城县",
+          "兴  县",
+          "临  县",
+          "柳林县",
+          "石楼县",
+          "岚  县",
+          "方山县",
+          "中阳县",
+          "交口县"
+        ]
+      },
+      {
+        "name": "晋中市",
+        "area": [
+          "榆次市",
+          "介休市",
+          "榆社县",
+          "左权县",
+          "和顺县",
+          "昔阳县",
+          "寿阳县",
+          "太谷县",
+          "祁  县",
+          "平遥县",
+          "灵石县"
+        ]
+      },
+      {
+        "name": "临汾市",
+        "area": [
+          "临汾市",
+          "侯马市",
+          "霍州市",
+          "曲沃县",
+          "翼城县",
+          "襄汾县",
+          "洪洞县",
+          "古  县",
+          "安泽县",
+          "浮山县",
+          "吉  县",
+          "乡宁县",
+          "蒲  县",
+          "大宁县",
+          "永和县",
+          "隰  县",
+          "汾西县"
+        ]
+      },
+      {
+        "name": "运城市",
+        "area": [
+          "运城市",
+          "永济市",
+          "河津市",
+          "芮城县",
+          "临猗县",
+          "万荣县",
+          "新绛县",
+          "稷山县",
+          "闻喜县",
+          "夏  县",
+          "绛  县",
+          "平陆县",
+          "垣曲县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "内蒙古自治区",
+    "city": [
+      {
+        "name": "呼和浩特市",
+        "area": [
+          "新城区",
+          "回民区",
+          "玉泉区",
+          "郊  区",
+          "土默特左旗",
+          "托克托县",
+          "和林格尔县",
+          "清水河县",
+          "武川县"
+        ]
+      },
+      {
+        "name": "包头市",
+        "area": [
+          "东河区",
+          "昆都伦区",
+          "青山区",
+          "石拐矿区",
+          "白云矿区",
+          "郊  区",
+          "土默特右旗",
+          "固阳县",
+          "达尔罕茂明安联合旗"
+        ]
+      },
+      {
+        "name": "乌海市",
+        "area": [
+          "海勃湾区",
+          "海南区",
+          "乌达区"
+        ]
+      },
+      {
+        "name": "赤峰市",
+        "area": [
+          "红山区",
+          "元宝山区",
+          "松山区",
+          "阿鲁科尔沁旗",
+          "巴林左旗",
+          "巴林右旗",
+          "林西县",
+          "克什克腾旗",
+          "翁牛特旗",
+          "喀喇沁旗",
+          "宁城县",
+          "敖汉旗"
+        ]
+      },
+      {
+        "name": "呼伦贝尔市",
+        "area": [
+          "海拉尔市",
+          "满洲里市",
+          "扎兰屯市",
+          "牙克石市",
+          "根河市",
+          "额尔古纳市",
+          "阿荣旗",
+          "莫力达瓦达斡尔族自治旗",
+          "鄂伦春自治旗",
+          "鄂温克族自治旗",
+          "新巴尔虎右旗",
+          "新巴尔虎左旗",
+          "陈巴尔虎旗"
+        ]
+      },
+      {
+        "name": "兴安盟",
+        "area": [
+          "乌兰浩特市",
+          "阿尔山市",
+          "科尔沁右翼前旗",
+          "科尔沁右翼中旗",
+          "扎赉特旗",
+          "突泉县"
+        ]
+      },
+      {
+        "name": "通辽市",
+        "area": [
+          "科尔沁区",
+          "霍林郭勒市",
+          "科尔沁左翼中旗",
+          "科尔沁左翼后旗",
+          "开鲁县",
+          "库伦旗",
+          "奈曼旗",
+          "扎鲁特旗"
+        ]
+      },
+      {
+        "name": "锡林郭勒盟",
+        "area": [
+          "二连浩特市",
+          "锡林浩特市",
+          "阿巴嘎旗",
+          "苏尼特左旗",
+          "苏尼特右旗",
+          "东乌珠穆沁旗",
+          "西乌珠穆沁旗",
+          "太仆寺旗",
+          "镶黄旗",
+          "正镶白旗",
+          "正蓝旗",
+          "多伦县"
+        ]
+      },
+      {
+        "name": "乌兰察布市",
+        "area": [
+          "集宁市",
+          "丰镇市",
+          "卓资县",
+          "化德县",
+          "商都县",
+          "兴和县",
+          "凉城县",
+          "察哈尔右翼前旗",
+          "察哈尔右翼中旗",
+          "察哈尔右翼后旗",
+          "四子王旗"
+        ]
+      },
+      {
+        "name": "鄂尔多斯市",
+        "area": [
+          "东胜市",
+          "达拉特旗",
+          "准格尔旗",
+          "鄂托克前旗",
+          "鄂托克旗",
+          "杭锦旗",
+          "乌审旗",
+          "伊金霍洛旗"
+        ]
+      },
+      {
+        "name": "巴彦淖尔市",
+        "area": [
+          "临河市",
+          "五原县",
+          "磴口县",
+          "乌拉特前旗",
+          "乌拉特中旗",
+          "乌拉特后旗",
+          "杭锦后旗"
+        ]
+      },
+      {
+        "name": "阿拉善盟",
+        "area": [
+          "阿拉善左旗",
+          "阿拉善右旗",
+          "额济纳旗"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "辽宁省",
+    "city": [
+      {
+        "name": "沈阳市",
+        "area": [
+          "沈河区",
+          "皇姑区",
+          "和平区",
+          "大东区",
+          "铁西区",
+          "苏家屯区",
+          "东陵区",
+          "于洪区",
+          "新民市",
+          "法库县",
+          "辽中县",
+          "康平县",
+          "新城子区"
+        ]
+      },
+      {
+        "name": "大连市",
+        "area": [
+          "西岗区",
+          "中山区",
+          "沙河口区",
+          "甘井子区",
+          "旅顺口区",
+          "金州区",
+          "瓦房店市",
+          "普兰店市",
+          "庄河市",
+          "长海县"
+        ]
+      },
+      {
+        "name": "鞍山市",
+        "area": [
+          "铁东区",
+          "铁西区",
+          "立山区",
+          "千山区",
+          "海城市",
+          "台安县",
+          "岫岩满族自治县"
+        ]
+      },
+      {
+        "name": "抚顺市",
+        "area": [
+          "顺城区",
+          "新抚区",
+          "东洲区",
+          "望花区",
+          "抚顺县",
+          "清原满族自治县",
+          "新宾满族自治县"
+        ]
+      },
+      {
+        "name": "本溪市",
+        "area": [
+          "平山区",
+          "明山区",
+          "溪湖区",
+          "南芬区",
+          "本溪满族自治县",
+          "桓仁满族自治县"
+        ]
+      },
+      {
+        "name": "丹东市",
+        "area": [
+          "振兴区",
+          "元宝区",
+          "振安区",
+          "东港市",
+          "凤城市",
+          "宽甸满族自治县"
+        ]
+      },
+      {
+        "name": "锦州市",
+        "area": [
+          "太和区",
+          "古塔区",
+          "凌河区",
+          "凌海市",
+          "黑山县",
+          "义县",
+          "北宁市"
+        ]
+      },
+      {
+        "name": "营口市",
+        "area": [
+          "站前区",
+          "西市区",
+          "鲅鱼圈区",
+          "老边区",
+          "大石桥市",
+          "盖州市"
+        ]
+      },
+      {
+        "name": "阜新市",
+        "area": [
+          "海州区",
+          "新邱区",
+          "太平区",
+          "清河门区",
+          "细河区",
+          "彰武县",
+          "阜新蒙古族自治县"
+        ]
+      },
+      {
+        "name": "辽阳市",
+        "area": [
+          "白塔区",
+          "文圣区",
+          "宏伟区",
+          "太子河区",
+          "弓长岭区",
+          "灯塔市",
+          "辽阳县"
+        ]
+      },
+      {
+        "name": "盘锦市",
+        "area": [
+          "双台子区",
+          "兴隆台区",
+          "盘山县",
+          "大洼县"
+        ]
+      },
+      {
+        "name": "铁岭市",
+        "area": [
+          "银州区",
+          "清河区",
+          "调兵山市",
+          "开原市",
+          "铁岭县",
+          "昌图县",
+          "西丰县"
+        ]
+      },
+      {
+        "name": "朝阳市",
+        "area": [
+          "双塔区",
+          "龙城区",
+          "凌源市",
+          "北票市",
+          "朝阳县",
+          "建平县",
+          "喀喇沁左翼蒙古族自治县"
+        ]
+      },
+      {
+        "name": "葫芦岛市",
+        "area": [
+          "龙港区",
+          "南票区",
+          "连山区",
+          "兴城市",
+          "绥中县",
+          "建昌县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "吉林省",
+    "city": [
+      {
+        "name": "长春市",
+        "area": [
+          "朝阳区",
+          "宽城区",
+          "二道区",
+          "南关区",
+          "绿园区",
+          "双阳区",
+          "九台市",
+          "榆树市",
+          "德惠市",
+          "农安县"
+        ]
+      },
+      {
+        "name": "吉林市",
+        "area": [
+          "船营区",
+          "昌邑区",
+          "龙潭区",
+          "丰满区",
+          "舒兰市",
+          "桦甸市",
+          "蛟河市",
+          "磐石市",
+          "永吉县"
+        ]
+      },
+      {
+        "name": "四平市",
+        "area": [
+          "铁西区",
+          "铁东区",
+          "公主岭市",
+          "双辽市",
+          "梨树县",
+          "伊通满族自治县"
+        ]
+      },
+      {
+        "name": "辽源市",
+        "area": [
+          "龙山区",
+          "西安区",
+          "东辽县",
+          "东丰县"
+        ]
+      },
+      {
+        "name": "通化市",
+        "area": [
+          "东昌区",
+          "二道江区",
+          "梅河口市",
+          "集安市",
+          "通化县",
+          "辉南县",
+          "柳河县"
+        ]
+      },
+      {
+        "name": "白山市",
+        "area": [
+          "八道江区",
+          "江源区",
+          "临江市",
+          "靖宇县",
+          "抚松县",
+          "长白朝鲜族自治县"
+        ]
+      },
+      {
+        "name": "松原市",
+        "area": [
+          "宁江区",
+          "乾安县",
+          "长岭县",
+          "扶余县",
+          "前郭尔罗斯蒙古族自治县"
+        ]
+      },
+      {
+        "name": "白城市",
+        "area": [
+          "洮北区",
+          "大安市",
+          "洮南市",
+          "镇赉县",
+          "通榆县"
+        ]
+      },
+      {
+        "name": "延边朝鲜族自治州",
+        "area": [
+          "延吉市",
+          "图们市",
+          "敦化市",
+          "龙井市",
+          "珲春市",
+          "和龙市",
+          "安图县",
+          "汪清县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "黑龙江省",
+    "city": [
+      {
+        "name": "哈尔滨市",
+        "area": [
+          "松北区",
+          "道里区",
+          "南岗区",
+          "平房区",
+          "香坊区",
+          "道外区",
+          "呼兰区",
+          "阿城区",
+          "双城市",
+          "尚志市",
+          "五常市",
+          "宾县",
+          "方正县",
+          "通河县",
+          "巴彦县",
+          "延寿县",
+          "木兰县",
+          "依兰县"
+        ]
+      },
+      {
+        "name": "齐齐哈尔市",
+        "area": [
+          "龙沙区",
+          "昂昂溪区",
+          "铁锋区",
+          "建华区",
+          "富拉尔基区",
+          "碾子山区",
+          "梅里斯达斡尔族区",
+          "讷河市",
+          "富裕县",
+          "拜泉县",
+          "甘南县",
+          "依安县",
+          "克山县",
+          "泰来县",
+          "克东县",
+          "龙江县"
+        ]
+      },
+      {
+        "name": "鹤岗市",
+        "area": [
+          "兴山区",
+          "工农区",
+          "南山区",
+          "兴安区",
+          "向阳区",
+          "东山区",
+          "萝北县",
+          "绥滨县"
+        ]
+      },
+      {
+        "name": "双鸭山市",
+        "area": [
+          "尖山区",
+          "岭东区",
+          "四方台区",
+          "宝山区",
+          "集贤县",
+          "宝清县",
+          "友谊县",
+          "饶河县"
+        ]
+      },
+      {
+        "name": "鸡西市",
+        "area": [
+          "鸡冠区",
+          "恒山区",
+          "城子河区",
+          "滴道区",
+          "梨树区",
+          "麻山区",
+          "密山市",
+          "虎林市",
+          "鸡东县"
+        ]
+      },
+      {
+        "name": "大庆市",
+        "area": [
+          "萨尔图区",
+          "红岗区",
+          "龙凤区",
+          "让胡路区",
+          "大同区",
+          "林甸县",
+          "肇州县",
+          "肇源县",
+          "杜尔伯特蒙古族自治县"
+        ]
+      },
+      {
+        "name": "伊春市",
+        "area": [
+          "伊春区",
+          "带岭区",
+          "南岔区",
+          "金山屯区",
+          "西林区",
+          "美溪区",
+          "乌马河区",
+          "翠峦区",
+          "友好区",
+          "上甘岭区",
+          "五营区",
+          "红星区",
+          "新青区",
+          "汤旺河区",
+          "乌伊岭区",
+          "铁力市",
+          "嘉荫县"
+        ]
+      },
+      {
+        "name": "牡丹江市",
+        "area": [
+          "爱民区",
+          "东安区",
+          "阳明区",
+          "西安区",
+          "绥芬河市",
+          "宁安市",
+          "海林市",
+          "穆棱市",
+          "林口县",
+          "东宁县"
+        ]
+      },
+      {
+        "name": "佳木斯市",
+        "area": [
+          "向阳区",
+          "前进区",
+          "东风区",
+          "郊区",
+          "同江市",
+          "富锦市",
+          "桦川县",
+          "抚远县",
+          "桦南县",
+          "汤原县"
+        ]
+      },
+      {
+        "name": "七台河市",
+        "area": [
+          "桃山区",
+          "新兴区",
+          "茄子河区",
+          "勃利县"
+        ]
+      },
+      {
+        "name": "黑河市",
+        "area": [
+          "爱辉区",
+          "北安市",
+          "五大连池市",
+          "逊克县",
+          "嫩江县",
+          "孙吴县"
+        ]
+      },
+      {
+        "name": "绥化市",
+        "area": [
+          "北林区",
+          "安达市",
+          "肇东市",
+          "海伦市",
+          "绥棱县",
+          "兰西县",
+          "明水县",
+          "青冈县",
+          "庆安县",
+          "望奎县"
+        ]
+      },
+      {
+        "name": "大兴安岭地区",
+        "area": [
+          "呼玛县",
+          "塔河县",
+          "漠河县",
+          "大兴安岭辖区"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "上海市",
+    "city": [
+      {
+        "name": "上海区",
+        "area": [
+          "黄浦区",
+          "卢湾区",
+          "徐汇区",
+          "长宁区",
+          "静安区",
+          "普陀区",
+          "闸北区",
+          "虹口区",
+          "杨浦区",
+          "宝山区",
+          "闵行区",
+          "嘉定区",
+          "松江区",
+          "金山区",
+          "青浦区",
+          "南汇区",
+          "奉贤区",
+          "浦东新区",
+          "崇明县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "江苏省",
+    "city": [
+      {
+        "name": "南京市",
+        "area": [
+          "玄武区",
+          "白下区",
+          "秦淮区",
+          "建邺区",
+          "鼓楼区",
+          "下关区",
+          "栖霞区",
+          "雨花台区",
+          "浦口区",
+          "江宁区",
+          "六合区",
+          "溧水县",
+          "高淳县"
+        ]
+      },
+      {
+        "name": "苏州市",
+        "area": [
+          "金阊区",
+          "平江区",
+          "沧浪区",
+          "虎丘区",
+          "吴中区",
+          "相城区",
+          "常熟市",
+          "张家港市",
+          "昆山市",
+          "吴江市",
+          "太仓市"
+        ]
+      },
+      {
+        "name": "无锡市",
+        "area": [
+          "崇安区",
+          "南长区",
+          "北塘区",
+          "滨湖区",
+          "锡山区",
+          "惠山区",
+          "江阴市",
+          "宜兴市"
+        ]
+      },
+      {
+        "name": "常州市",
+        "area": [
+          "钟楼区",
+          "天宁区",
+          "戚墅堰区",
+          "新北区",
+          "武进区",
+          "金坛市",
+          "溧阳市"
+        ]
+      },
+      {
+        "name": "镇江市",
+        "area": [
+          "京口区",
+          "润州区",
+          "丹徒区",
+          "丹阳市",
+          "扬中市",
+          "句容市"
+        ]
+      },
+      {
+        "name": "南通市",
+        "area": [
+          "崇川区",
+          "港闸区",
+          "通州市",
+          "如皋市",
+          "海门市",
+          "启东市",
+          "海安县",
+          "如东县"
+        ]
+      },
+      {
+        "name": "泰州市",
+        "area": [
+          "海陵区",
+          "高港区",
+          "姜堰市",
+          "泰兴市",
+          "靖江市",
+          "兴化市"
+        ]
+      },
+      {
+        "name": "扬州市",
+        "area": [
+          "广陵区",
+          "维扬区",
+          "邗江区",
+          "江都市",
+          "仪征市",
+          "高邮市",
+          "宝应县"
+        ]
+      },
+      {
+        "name": "盐城市",
+        "area": [
+          "亭湖区",
+          "盐都区",
+          "大丰市",
+          "东台市",
+          "建湖县",
+          "射阳县",
+          "阜宁县",
+          "滨海县",
+          "响水县"
+        ]
+      },
+      {
+        "name": "连云港市",
+        "area": [
+          "新浦区",
+          "海州区",
+          "连云区",
+          "东海县",
+          "灌云县",
+          "赣榆县",
+          "灌南县"
+        ]
+      },
+      {
+        "name": "徐州市",
+        "area": [
+          "云龙区",
+          "鼓楼区",
+          "九里区",
+          "泉山区",
+          "贾汪区",
+          "邳州市",
+          "新沂市",
+          "铜山县",
+          "睢宁县",
+          "沛县",
+          "丰县"
+        ]
+      },
+      {
+        "name": "淮安市",
+        "area": [
+          "清河区",
+          "清浦区",
+          "楚州区",
+          "淮阴区",
+          "涟水县",
+          "洪泽县",
+          "金湖县",
+          "盱眙县"
+        ]
+      },
+      {
+        "name": "宿迁市",
+        "area": [
+          "宿城区",
+          "宿豫区",
+          "沭阳县",
+          "泗阳县",
+          "泗洪县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "浙江省",
+    "city": [
+      {
+        "name": "杭州市",
+        "area": [
+          "拱墅区",
+          "西湖区",
+          "上城区",
+          "下城区",
+          "江干区",
+          "滨江区",
+          "余杭区",
+          "萧山区",
+          "建德市",
+          "富阳市",
+          "临安市",
+          "桐庐县",
+          "淳安县"
+        ]
+      },
+      {
+        "name": "宁波市",
+        "area": [
+          "海曙区",
+          "江东区",
+          "江北区",
+          "镇海区",
+          "北仑区",
+          "鄞州区",
+          "余姚市",
+          "慈溪市",
+          "奉化市",
+          "宁海县",
+          "象山县"
+        ]
+      },
+      {
+        "name": "温州市",
+        "area": [
+          "鹿城区",
+          "龙湾区",
+          "瓯海区",
+          "瑞安市",
+          "乐清市",
+          "永嘉县",
+          "洞头县",
+          "平阳县",
+          "苍南县",
+          "文成县",
+          "泰顺县"
+        ]
+      },
+      {
+        "name": "嘉兴市",
+        "area": [
+          "南湖区",
+          "秀洲区",
+          "海宁市",
+          "平湖市",
+          "桐乡市",
+          "嘉善县",
+          "海盐县"
+        ]
+      },
+      {
+        "name": "湖州市",
+        "area": [
+          "吴兴区",
+          "南浔区",
+          "长兴县",
+          "德清县",
+          "安吉县"
+        ]
+      },
+      {
+        "name": "绍兴市",
+        "area": [
+          "越城区",
+          "诸暨市",
+          "上虞市",
+          "嵊州市",
+          "绍兴县",
+          "新昌县"
+        ]
+      },
+      {
+        "name": "金华市",
+        "area": [
+          "婺城区",
+          "金东区",
+          "兰溪市",
+          "义乌市",
+          "东阳市",
+          "永康市",
+          "武义县",
+          "浦江县",
+          "磐安县"
+        ]
+      },
+      {
+        "name": "衢州市",
+        "area": [
+          "柯城区",
+          "衢江区",
+          "江山市",
+          "龙游县",
+          "常山县",
+          "开化县"
+        ]
+      },
+      {
+        "name": "舟山市",
+        "area": [
+          "定海区",
+          "普陀区",
+          "岱山县",
+          "嵊泗县"
+        ]
+      },
+      {
+        "name": "台州市",
+        "area": [
+          "椒江区",
+          "黄岩区",
+          "路桥区",
+          "临海市",
+          "温岭市",
+          "玉环县",
+          "天台县",
+          "仙居县",
+          "三门县"
+        ]
+      },
+      {
+        "name": "丽水市",
+        "area": [
+          "莲都区",
+          "龙泉市",
+          "缙云县",
+          "青田县",
+          "云和县",
+          "遂昌县",
+          "松阳县",
+          "庆元县",
+          "景宁畲族自治县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "安徽省",
+    "city": [
+      {
+        "name": "合肥市",
+        "area": [
+          "庐阳区",
+          "瑶海区",
+          "蜀山区",
+          "包河区",
+          "长丰县",
+          "肥东县",
+          "肥西县"
+        ]
+      },
+      {
+        "name": "芜湖市",
+        "area": [
+          "镜湖区",
+          "弋江区",
+          "鸠江区",
+          "三山区",
+          "芜湖县",
+          "南陵县",
+          "繁昌县"
+        ]
+      },
+      {
+        "name": "蚌埠市",
+        "area": [
+          "蚌山区",
+          "龙子湖区",
+          "禹会区",
+          "淮上区",
+          "怀远县",
+          "固镇县",
+          "五河县"
+        ]
+      },
+      {
+        "name": "淮南市",
+        "area": [
+          "田家庵区",
+          "大通区",
+          "谢家集区",
+          "八公山区",
+          "潘集区",
+          "凤台县"
+        ]
+      },
+      {
+        "name": "马鞍山市",
+        "area": [
+          "雨山区",
+          "花山区",
+          "金家庄区",
+          "当涂县"
+        ]
+      },
+      {
+        "name": "淮北市",
+        "area": [
+          "相山区",
+          "杜集区",
+          "烈山区",
+          "濉溪县"
+        ]
+      },
+      {
+        "name": "铜陵市",
+        "area": [
+          "铜官山区",
+          "狮子山区",
+          "郊区",
+          "铜陵县"
+        ]
+      },
+      {
+        "name": "安庆市",
+        "area": [
+          "迎江区",
+          "大观区",
+          "宜秀区",
+          "桐城市",
+          "宿松县",
+          "枞阳县",
+          "太湖县",
+          "怀宁县",
+          "岳西县",
+          "望江县",
+          "潜山县"
+        ]
+      },
+      {
+        "name": "黄山市",
+        "area": [
+          "屯溪区",
+          "黄山区",
+          "徽州区",
+          "休宁县",
+          "歙县",
+          "祁门县",
+          "黟县"
+        ]
+      },
+      {
+        "name": "滁州市",
+        "area": [
+          "琅琊区",
+          "南谯区",
+          "天长市",
+          "明光市",
+          "全椒县",
+          "来安县",
+          "定远县",
+          "凤阳县"
+        ]
+      },
+      {
+        "name": "阜阳市",
+        "area": [
+          "颍州区",
+          "颍东区",
+          "颍泉区",
+          "界首市",
+          "临泉县",
+          "颍上县",
+          "阜南县",
+          "太和县"
+        ]
+      },
+      {
+        "name": "宿州市",
+        "area": [
+          "埇桥区",
+          "萧县",
+          "泗县",
+          "砀山县",
+          "灵璧县"
+        ]
+      },
+      {
+        "name": "六安市",
+        "area": [
+          "金安区",
+          "裕安区",
+          "寿县",
+          "霍山县",
+          "霍邱县",
+          "舒城县",
+          "金寨县"
+        ]
+      },
+      {
+        "name": "亳州市",
+        "area": [
+          "谯城区",
+          "利辛县",
+          "涡阳县",
+          "蒙城县"
+        ]
+      },
+      {
+        "name": "池州市",
+        "area": [
+          "贵池区",
+          "东至县",
+          "石台县",
+          "青阳县"
+        ]
+      },
+      {
+        "name": "宣城市",
+        "area": [
+          "宣州区",
+          "宁国市",
+          "广德县",
+          "郎溪县",
+          "泾县",
+          "旌德县",
+          "绩溪县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "福建省",
+    "city": [
+      {
+        "name": "福州市",
+        "area": [
+          "鼓楼区",
+          "台江区",
+          "仓山区",
+          "马尾区",
+          "晋安区",
+          "福清市",
+          "长乐市",
+          "闽侯县",
+          "闽清县",
+          "永泰县",
+          "连江县",
+          "罗源县",
+          "平潭县"
+        ]
+      },
+      {
+        "name": "厦门市",
+        "area": [
+          "思明区",
+          "海沧区",
+          "湖里区",
+          "集美区",
+          "同安区",
+          "翔安区"
+        ]
+      },
+      {
+        "name": "莆田市",
+        "area": [
+          "城厢区",
+          "涵江区",
+          "荔城区",
+          "秀屿区",
+          "仙游县"
+        ]
+      },
+      {
+        "name": "三明市",
+        "area": [
+          "梅列区",
+          "三元区",
+          "永安市",
+          "明溪县",
+          "将乐县",
+          "大田县",
+          "宁化县",
+          "建宁县",
+          "沙县",
+          "尤溪县",
+          "清流县",
+          "泰宁县"
+        ]
+      },
+      {
+        "name": "泉州市",
+        "area": [
+          "鲤城区",
+          "丰泽区",
+          "洛江区",
+          "泉港区",
+          "石狮市",
+          "晋江市",
+          "南安市",
+          "惠安县",
+          "永春县",
+          "安溪县",
+          "德化县",
+          "金门县"
+        ]
+      },
+      {
+        "name": "漳州市",
+        "area": [
+          "芗城区",
+          "龙文区",
+          "龙海市",
+          "平和县",
+          "南靖县",
+          "诏安县",
+          "漳浦县",
+          "华安县",
+          "东山县",
+          "长泰县",
+          "云霄县"
+        ]
+      },
+      {
+        "name": "南平市",
+        "area": [
+          "延平区",
+          "建瓯市",
+          "邵武市",
+          "武夷山市",
+          "建阳市",
+          "松溪县",
+          "光泽县",
+          "顺昌县",
+          "浦城县",
+          "政和县"
+        ]
+      },
+      {
+        "name": "龙岩市",
+        "area": [
+          "新罗区",
+          "漳平市",
+          "长汀县",
+          "武平县",
+          "上杭县",
+          "永定县",
+          "连城县"
+        ]
+      },
+      {
+        "name": "宁德市",
+        "area": [
+          "蕉城区",
+          "福安市",
+          "福鼎市",
+          "寿宁县",
+          "霞浦县",
+          "柘荣县",
+          "屏南县",
+          "古田县",
+          "周宁县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "江西省",
+    "city": [
+      {
+        "name": "南昌市",
+        "area": [
+          "东湖区",
+          "西湖区",
+          "青云谱区",
+          "湾里区",
+          "青山湖区",
+          "新建县",
+          "南昌县",
+          "进贤县",
+          "安义县"
+        ]
+      },
+      {
+        "name": "景德镇市",
+        "area": [
+          "珠山区",
+          "昌江区",
+          "乐平市",
+          "浮梁县"
+        ]
+      },
+      {
+        "name": "萍乡市",
+        "area": [
+          "安源区",
+          "湘东区",
+          "莲花县",
+          "上栗县",
+          "芦溪县"
+        ]
+      },
+      {
+        "name": "九江市",
+        "area": [
+          "浔阳区",
+          "庐山区",
+          "瑞昌市",
+          "九江县",
+          "星子县",
+          "武宁县",
+          "彭泽县",
+          "永修县",
+          "修水县",
+          "湖口县",
+          "德安县",
+          "都昌县"
+        ]
+      },
+      {
+        "name": "新余市",
+        "area": [
+          "渝水区",
+          "分宜县"
+        ]
+      },
+      {
+        "name": "鹰潭市",
+        "area": [
+          "月湖区",
+          "贵溪市",
+          "余江县"
+        ]
+      },
+      {
+        "name": "赣州市",
+        "area": [
+          "章贡区",
+          "瑞金市",
+          "南康市",
+          "石城县",
+          "安远县",
+          "赣县",
+          "宁都县",
+          "寻乌县",
+          "兴国县",
+          "定南县",
+          "上犹县",
+          "于都县",
+          "龙南县",
+          "崇义县",
+          "信丰县",
+          "全南县",
+          "大余县",
+          "会昌县"
+        ]
+      },
+      {
+        "name": "吉安市",
+        "area": [
+          "吉州区",
+          "青原区",
+          "井冈山市",
+          "吉安县",
+          "永丰县",
+          "永新县",
+          "新干县",
+          "泰和县",
+          "峡江县",
+          "遂川县",
+          "安福县",
+          "吉水县",
+          "万安县"
+        ]
+      },
+      {
+        "name": "宜春市",
+        "area": [
+          "袁州区",
+          "丰城市",
+          "樟树市",
+          "高安市",
+          "铜鼓县",
+          "靖安县",
+          "宜丰县",
+          "奉新县",
+          "万载县",
+          "上高县"
+        ]
+      },
+      {
+        "name": "抚州市",
+        "area": [
+          "临川区",
+          "南丰县",
+          "乐安县",
+          "金溪县",
+          "南城县",
+          "东乡县",
+          "资溪县",
+          "宜黄县",
+          "广昌县",
+          "黎川县",
+          "崇仁县"
+        ]
+      },
+      {
+        "name": "上饶市",
+        "area": [
+          "信州区",
+          "德兴市",
+          "上饶县",
+          "广丰县",
+          "鄱阳县",
+          "婺源县",
+          "铅山县",
+          "余干县",
+          "横峰县",
+          "弋阳县",
+          "玉山县",
+          "万年县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "山东省",
+    "city": [
+      {
+        "name": "济南市",
+        "area": [
+          "市中区",
+          "历下区",
+          "天桥区",
+          "槐荫区",
+          "历城区",
+          "长清区",
+          "章丘市",
+          "平阴县",
+          "济阳县",
+          "商河县"
+        ]
+      },
+      {
+        "name": "青岛市",
+        "area": [
+          "市南区",
+          "市北区",
+          "城阳区",
+          "四方区",
+          "李沧区",
+          "黄岛区",
+          "崂山区",
+          "胶南市",
+          "胶州市",
+          "平度市",
+          "莱西市",
+          "即墨市"
+        ]
+      },
+      {
+        "name": "淄博市",
+        "area": [
+          "张店区",
+          "临淄区",
+          "淄川区",
+          "博山区",
+          "周村区",
+          "桓台县",
+          "高青县",
+          "沂源县"
+        ]
+      },
+      {
+        "name": "枣庄市",
+        "area": [
+          "市中区",
+          "山亭区",
+          "峄城区",
+          "台儿庄区",
+          "薛城区",
+          "滕州市"
+        ]
+      },
+      {
+        "name": "东营市",
+        "area": [
+          "东营区",
+          "河口区",
+          "垦利县",
+          "广饶县",
+          "利津县"
+        ]
+      },
+      {
+        "name": "烟台市",
+        "area": [
+          "芝罘区",
+          "福山区",
+          "牟平区",
+          "莱山区",
+          "龙口市",
+          "莱阳市",
+          "莱州市",
+          "招远市",
+          "蓬莱市",
+          "栖霞市",
+          "海阳市",
+          "长岛县"
+        ]
+      },
+      {
+        "name": "潍坊市",
+        "area": [
+          "潍城区",
+          "寒亭区",
+          "坊子区",
+          "奎文区",
+          "青州市",
+          "诸城市",
+          "寿光市",
+          "安丘市",
+          "高密市",
+          "昌邑市",
+          "昌乐县",
+          "临朐县"
+        ]
+      },
+      {
+        "name": "济宁市",
+        "area": [
+          "市中区",
+          "任城区",
+          "曲阜市",
+          "兖州市",
+          "邹城市",
+          "鱼台县",
+          "金乡县",
+          "嘉祥县",
+          "微山县",
+          "汶上县",
+          "泗水县",
+          "梁山县"
+        ]
+      },
+      {
+        "name": "泰安市",
+        "area": [
+          "泰山区",
+          "岱岳区",
+          "新泰市",
+          "肥城市",
+          "宁阳县",
+          "东平县"
+        ]
+      },
+      {
+        "name": "威海市",
+        "area": [
+          "环翠区",
+          "乳山市",
+          "文登市",
+          "荣成市"
+        ]
+      },
+      {
+        "name": "日照市",
+        "area": [
+          "东港区",
+          "岚山区",
+          "五莲县",
+          "莒县"
+        ]
+      },
+      {
+        "name": "莱芜市",
+        "area": [
+          "莱城区",
+          "钢城区"
+        ]
+      },
+      {
+        "name": "临沂市",
+        "area": [
+          "兰山区",
+          "罗庄区",
+          "河东区",
+          "沂南县",
+          "郯城县",
+          "沂水县",
+          "苍山县",
+          "费县",
+          "平邑县",
+          "莒南县",
+          "蒙阴县",
+          "临沭县"
+        ]
+      },
+      {
+        "name": "德州市",
+        "area": [
+          "德城区",
+          "乐陵市",
+          "禹城市",
+          "陵县",
+          "宁津县",
+          "齐河县",
+          "武城县",
+          "庆云县",
+          "平原县",
+          "夏津县",
+          "临邑县"
+        ]
+      },
+      {
+        "name": "聊城市",
+        "area": [
+          "东昌府区",
+          "临清市",
+          "高唐县",
+          "阳谷县",
+          "茌平县",
+          "莘县",
+          "东阿县",
+          "冠县"
+        ]
+      },
+      {
+        "name": "滨州市",
+        "area": [
+          "滨城区",
+          "邹平县",
+          "沾化县",
+          "惠民县",
+          "博兴县",
+          "阳信县",
+          "无棣县"
+        ]
+      },
+      {
+        "name": "菏泽市",
+        "area": [
+          "牡丹区",
+          "鄄城县",
+          "单县",
+          "郓城县",
+          "曹县",
+          "定陶县",
+          "巨野县",
+          "东明县",
+          "成武县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "河南省",
+    "city": [
+      {
+        "name": "郑州市",
+        "area": [
+          "中原区",
+          "金水区",
+          "二七区",
+          "管城回族区",
+          "上街区",
+          "惠济区",
+          "巩义市",
+          "新郑市",
+          "新密市",
+          "登封市",
+          "荥阳市",
+          "中牟县"
+        ]
+      },
+      {
+        "name": "开封市",
+        "area": [
+          "鼓楼区",
+          "龙亭区",
+          "顺河回族区",
+          "禹王台区",
+          "金明区",
+          "开封县",
+          "尉氏县",
+          "兰考县",
+          "杞县",
+          "通许县"
+        ]
+      },
+      {
+        "name": "洛阳市",
+        "area": [
+          "西工区",
+          "老城区",
+          "涧西区",
+          "瀍河回族区",
+          "洛龙区",
+          "吉利区",
+          "偃师市",
+          "孟津县",
+          "汝阳县",
+          "伊川县",
+          "洛宁县",
+          "嵩县",
+          "宜阳县",
+          "新安县",
+          "栾川县"
+        ]
+      },
+      {
+        "name": "平顶山市",
+        "area": [
+          "新华区",
+          "卫东区",
+          "湛河区",
+          "石龙区",
+          "汝州市",
+          "舞钢市",
+          "宝丰县",
+          "叶县",
+          "郏县",
+          "鲁山县"
+        ]
+      },
+      {
+        "name": "安阳市",
+        "area": [
+          "北关区",
+          "文峰区",
+          "殷都区",
+          "龙安区",
+          "林州市",
+          "安阳县",
+          "滑县",
+          "内黄县",
+          "汤阴县"
+        ]
+      },
+      {
+        "name": "鹤壁市",
+        "area": [
+          "淇滨区",
+          "山城区",
+          "鹤山区",
+          "浚县",
+          "淇县"
+        ]
+      },
+      {
+        "name": "新乡市",
+        "area": [
+          "卫滨区",
+          "红旗区",
+          "凤泉区",
+          "牧野区",
+          "卫辉市",
+          "辉县市",
+          "新乡县",
+          "获嘉县",
+          "原阳县",
+          "长垣县",
+          "封丘县",
+          "延津县"
+        ]
+      },
+      {
+        "name": "焦作市",
+        "area": [
+          "解放区",
+          "中站区",
+          "马村区",
+          "山阳区",
+          "沁阳市",
+          "孟州市",
+          "修武县",
+          "温县",
+          "武陟县",
+          "博爱县"
+        ]
+      },
+      {
+        "name": "濮阳市",
+        "area": [
+          "华龙区",
+          "濮阳县",
+          "南乐县",
+          "台前县",
+          "清丰县",
+          "范县"
+        ]
+      },
+      {
+        "name": "许昌市",
+        "area": [
+          "魏都区",
+          "禹州市",
+          "长葛市",
+          "许昌县",
+          "鄢陵县",
+          "襄城县"
+        ]
+      },
+      {
+        "name": "漯河市",
+        "area": [
+          "源汇区",
+          "郾城区",
+          "召陵区",
+          "临颍县",
+          "舞阳县"
+        ]
+      },
+      {
+        "name": "三门峡市",
+        "area": [
+          "湖滨区",
+          "义马市",
+          "灵宝市",
+          "渑池县",
+          "卢氏县",
+          "陕县"
+        ]
+      },
+      {
+        "name": "南阳市",
+        "area": [
+          "卧龙区",
+          "宛城区",
+          "邓州市",
+          "桐柏县",
+          "方城县",
+          "淅川县",
+          "镇平县",
+          "唐河县",
+          "南召县",
+          "内乡县",
+          "新野县",
+          "社旗县",
+          "西峡县"
+        ]
+      },
+      {
+        "name": "商丘市",
+        "area": [
+          "梁园区",
+          "睢阳区",
+          "永城市",
+          "宁陵县",
+          "虞城县",
+          "民权县",
+          "夏邑县",
+          "柘城县",
+          "睢县"
+        ]
+      },
+      {
+        "name": "信阳市",
+        "area": [
+          "浉河区",
+          "平桥区",
+          "潢川县",
+          "淮滨县",
+          "息县",
+          "新县",
+          "商城县",
+          "固始县",
+          "罗山县",
+          "光山县"
+        ]
+      },
+      {
+        "name": "周口市",
+        "area": [
+          "川汇区",
+          "项城市",
+          "商水县",
+          "淮阳县",
+          "太康县",
+          "鹿邑县",
+          "西华县",
+          "扶沟县",
+          "沈丘县",
+          "郸城县"
+        ]
+      },
+      {
+        "name": "驻马店市",
+        "area": [
+          "驿城区",
+          "确山县",
+          "新蔡县",
+          "上蔡县",
+          "西平县",
+          "泌阳县",
+          "平舆县",
+          "汝南县",
+          "遂平县",
+          "正阳县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "湖北省",
+    "city": [
+      {
+        "name": "武汉市",
+        "area": [
+          "江岸区",
+          "武昌区",
+          "江汉区",
+          "硚口区",
+          "汉阳区",
+          "青山区",
+          "洪山区",
+          "东西湖区",
+          "汉南区",
+          "蔡甸区",
+          "江夏区",
+          "黄陂区",
+          "新洲区"
+        ]
+      },
+      {
+        "name": "黄石市",
+        "area": [
+          "黄石港区",
+          "西塞山区",
+          "下陆区",
+          "铁山区",
+          "大冶市",
+          "阳新县"
+        ]
+      },
+      {
+        "name": "十堰市",
+        "area": [
+          "张湾区",
+          "茅箭区",
+          "丹江口市",
+          "郧县",
+          "竹山县",
+          "房县",
+          "郧西县",
+          "竹溪县"
+        ]
+      },
+      {
+        "name": "荆州市",
+        "area": [
+          "沙市区",
+          "荆州区",
+          "洪湖市",
+          "石首市",
+          "松滋市",
+          "监利县",
+          "公安县",
+          "江陵县"
+        ]
+      },
+      {
+        "name": "宜昌市",
+        "area": [
+          "西陵区",
+          "伍家岗区",
+          "点军区",
+          "猇亭区",
+          "夷陵区",
+          "宜都市",
+          "当阳市",
+          "枝江市",
+          "秭归县",
+          "远安县",
+          "兴山县",
+          "五峰土家族自治县",
+          "长阳土家族自治县"
+        ]
+      },
+      {
+        "name": "襄樊市",
+        "area": [
+          "襄城区",
+          "樊城区",
+          "襄阳区",
+          "老河口市",
+          "枣阳市",
+          "宜城市",
+          "南漳县",
+          "谷城县",
+          "保康县"
+        ]
+      },
+      {
+        "name": "鄂州市",
+        "area": [
+          "鄂城区",
+          "华容区",
+          "梁子湖区"
+        ]
+      },
+      {
+        "name": "荆门市",
+        "area": [
+          "东宝区",
+          "掇刀区",
+          "钟祥市",
+          "京山县",
+          "沙洋县"
+        ]
+      },
+      {
+        "name": "孝感市",
+        "area": [
+          "孝南区",
+          "应城市",
+          "安陆市",
+          "汉川市",
+          "云梦县",
+          "大悟县",
+          "孝昌县"
+        ]
+      },
+      {
+        "name": "黄冈市",
+        "area": [
+          "黄州区",
+          "麻城市",
+          "武穴市",
+          "红安县",
+          "罗田县",
+          "浠水县",
+          "蕲春县",
+          "黄梅县",
+          "英山县",
+          "团风县"
+        ]
+      },
+      {
+        "name": "咸宁市",
+        "area": [
+          "咸安区",
+          "赤壁市",
+          "嘉鱼县",
+          "通山县",
+          "崇阳县",
+          "通城县"
+        ]
+      },
+      {
+        "name": "随州市",
+        "area": [
+          "曾都区",
+          "广水市"
+        ]
+      },
+      {
+        "name": "恩施土家族苗族自治州",
+        "area": [
+          "恩施市",
+          "利川市",
+          "建始县",
+          "来凤县",
+          "巴东县",
+          "鹤峰县",
+          "宣恩县",
+          "咸丰县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "湖南省",
+    "city": [
+      {
+        "name": "长沙市",
+        "area": [
+          "岳麓区",
+          "芙蓉区",
+          "天心区",
+          "开福区",
+          "雨花区",
+          "浏阳市",
+          "长沙县",
+          "望城县",
+          "宁乡县"
+        ]
+      },
+      {
+        "name": "株洲市",
+        "area": [
+          "天元区",
+          "荷塘区",
+          "芦淞区",
+          "石峰区",
+          "醴陵市",
+          "株洲县",
+          "炎陵县",
+          "茶陵县",
+          "攸县"
+        ]
+      },
+      {
+        "name": "湘潭市",
+        "area": [
+          "岳塘区",
+          "雨湖区",
+          "湘乡市",
+          "韶山市",
+          "湘潭县"
+        ]
+      },
+      {
+        "name": "衡阳市",
+        "area": [
+          "雁峰区",
+          "珠晖区",
+          "石鼓区",
+          "蒸湘区",
+          "南岳区",
+          "耒阳市",
+          "常宁市",
+          "衡阳县",
+          "衡东县",
+          "衡山县",
+          "衡南县",
+          "祁东县"
+        ]
+      },
+      {
+        "name": "邵阳市",
+        "area": [
+          "双清区",
+          "大祥区",
+          "北塔区",
+          "武冈市",
+          "邵东县",
+          "洞口县",
+          "新邵县",
+          "绥宁县",
+          "新宁县",
+          "邵阳县",
+          "隆回县",
+          "城步苗族自治县"
+        ]
+      },
+      {
+        "name": "岳阳市",
+        "area": [
+          "岳阳楼区",
+          "云溪区",
+          "君山区",
+          "临湘市",
+          "汨罗市",
+          "岳阳县",
+          "湘阴县",
+          "平江县",
+          "华容县"
+        ]
+      },
+      {
+        "name": "常德市",
+        "area": [
+          "武陵区",
+          "鼎城区",
+          "津市市",
+          "澧县",
+          "临澧县",
+          "桃源县",
+          "汉寿县",
+          "安乡县",
+          "石门县"
+        ]
+      },
+      {
+        "name": "张家界市",
+        "area": [
+          "永定区",
+          "武陵源区",
+          "慈利县",
+          "桑植县"
+        ]
+      },
+      {
+        "name": "益阳市",
+        "area": [
+          "赫山区",
+          "资阳区",
+          "沅江市",
+          "桃江县",
+          "南县",
+          "安化县"
+        ]
+      },
+      {
+        "name": "郴州市",
+        "area": [
+          "北湖区",
+          "苏仙区",
+          "资兴市",
+          "宜章县",
+          "汝城县",
+          "安仁县",
+          "嘉禾县",
+          "临武县",
+          "桂东县",
+          "永兴县",
+          "桂阳县"
+        ]
+      },
+      {
+        "name": "永州市",
+        "area": [
+          "冷水滩区",
+          "零陵区",
+          "祁阳县",
+          "蓝山县",
+          "宁远县",
+          "新田县",
+          "东安县",
+          "江永县",
+          "道县",
+          "双牌县",
+          "江华瑶族自治县"
+        ]
+      },
+      {
+        "name": "怀化市",
+        "area": [
+          "鹤城区",
+          "洪江市",
+          "会同县",
+          "沅陵县",
+          "辰溪县",
+          "溆浦县",
+          "中方县",
+          "新晃侗族自治县",
+          "芷江侗族自治县",
+          "通道侗族自治县",
+          "靖州苗族侗族自治县",
+          "麻阳苗族自治县"
+        ]
+      },
+      {
+        "name": "娄底市",
+        "area": [
+          "娄星区",
+          "冷水江市",
+          "涟源市",
+          "新化县",
+          "双峰县"
+        ]
+      },
+      {
+        "name": "湘西土家族苗族自治州",
+        "area": [
+          "吉首市",
+          "古丈县",
+          "龙山县",
+          "永顺县",
+          "凤凰县",
+          "泸溪县",
+          "保靖县",
+          "花垣县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "广东省",
+    "city": [
+      {
+        "name": "广州市",
+        "area": [
+          "越秀区",
+          "荔湾区",
+          "海珠区",
+          "天河区",
+          "白云区",
+          "黄埔区",
+          "番禺区",
+          "花都区",
+          "南沙区",
+          "萝岗区",
+          "增城市",
+          "从化市"
+        ]
+      },
+      {
+        "name": "深圳市",
+        "area": [
+          "福田区",
+          "罗湖区",
+          "南山区",
+          "宝安区",
+          "龙岗区",
+          "盐田区"
+        ]
+      },
+      {
+        "name": "东莞市",
+        "area": [
+          "莞城",
+          "常平",
+          "塘厦",
+          "塘厦",
+          "塘厦"
+        ]
+      },
+      {
+        "name": "中山市",
+        "area": [
+          "中山"
+        ]
+      },
+      {
+        "name": "潮州市",
+        "area": [
+          "湘桥区",
+          "潮安县",
+          "饶平县"
+        ]
+      },
+      {
+        "name": "揭阳市",
+        "area": [
+          "榕城区",
+          "揭东县",
+          "揭西县",
+          "惠来县",
+          "普宁市"
+        ]
+      },
+      {
+        "name": "云浮市",
+        "area": [
+          "云城区",
+          "新兴县",
+          "郁南县",
+          "云安县",
+          "罗定市"
+        ]
+      },
+      {
+        "name": "珠海市",
+        "area": [
+          "香洲区",
+          "斗门区",
+          "金湾区"
+        ]
+      },
+      {
+        "name": "汕头市",
+        "area": [
+          "金平区",
+          "濠江区",
+          "龙湖区",
+          "潮阳区",
+          "潮南区",
+          "澄海区",
+          "南澳县"
+        ]
+      },
+      {
+        "name": "韶关市",
+        "area": [
+          "浈江区",
+          "武江区",
+          "曲江区",
+          "乐昌市",
+          "南雄市",
+          "始兴县",
+          "仁化县",
+          "翁源县",
+          "新丰县",
+          "乳源瑶族自治县"
+        ]
+      },
+      {
+        "name": "佛山市",
+        "area": [
+          "禅城区",
+          "南海区",
+          "顺德区",
+          "三水区",
+          "高明区"
+        ]
+      },
+      {
+        "name": "江门市",
+        "area": [
+          "蓬江区",
+          "江海区",
+          "新会区",
+          "恩平市",
+          "台山市",
+          "开平市",
+          "鹤山市"
+        ]
+      },
+      {
+        "name": "湛江市",
+        "area": [
+          "赤坎区",
+          "霞山区",
+          "坡头区",
+          "麻章区",
+          "吴川市",
+          "廉江市",
+          "雷州市",
+          "遂溪县",
+          "徐闻县"
+        ]
+      },
+      {
+        "name": "茂名市",
+        "area": [
+          "茂南区",
+          "茂港区",
+          "化州市",
+          "信宜市",
+          "高州市",
+          "电白县"
+        ]
+      },
+      {
+        "name": "肇庆市",
+        "area": [
+          "端州区",
+          "鼎湖区",
+          "高要市",
+          "四会市",
+          "广宁县",
+          "怀集县",
+          "封开县",
+          "德庆县"
+        ]
+      },
+      {
+        "name": "惠州市",
+        "area": [
+          "惠城区",
+          "惠阳区",
+          "博罗县",
+          "惠东县",
+          "龙门县"
+        ]
+      },
+      {
+        "name": "梅州市",
+        "area": [
+          "梅江区",
+          "兴宁市",
+          "梅县",
+          "大埔县",
+          "丰顺县",
+          "五华县",
+          "平远县",
+          "蕉岭县"
+        ]
+      },
+      {
+        "name": "汕尾市",
+        "area": [
+          "城区",
+          "陆丰市",
+          "海丰县",
+          "陆河县"
+        ]
+      },
+      {
+        "name": "河源市",
+        "area": [
+          "源城区",
+          "紫金县",
+          "龙川县",
+          "连平县",
+          "和平县",
+          "东源县"
+        ]
+      },
+      {
+        "name": "阳江市",
+        "area": [
+          "江城区",
+          "阳春市",
+          "阳西县",
+          "阳东县"
+        ]
+      },
+      {
+        "name": "清远市",
+        "area": [
+          "清城区",
+          "英德市",
+          "连州市",
+          "佛冈县",
+          "阳山县",
+          "清新县",
+          "连山壮族瑶族自治县",
+          "连南瑶族自治县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "广西",
+    "city": [
+      {
+        "name": "南宁市",
+        "area": [
+          "青秀区",
+          "兴宁区",
+          "西乡塘区",
+          "良庆区",
+          "江南区",
+          "邕宁区",
+          "武鸣县",
+          "隆安县",
+          "马山县",
+          "上林县",
+          "宾阳县",
+          "横县"
+        ]
+      },
+      {
+        "name": "柳州市",
+        "area": [
+          "城中区",
+          "鱼峰区",
+          "柳北区",
+          "柳南区",
+          "柳江县",
+          "柳城县",
+          "鹿寨县",
+          "融安县",
+          "融水苗族自治县",
+          "三江侗族自治县"
+        ]
+      },
+      {
+        "name": "桂林市",
+        "area": [
+          "象山区",
+          "秀峰区",
+          "叠彩区",
+          "七星区",
+          "雁山区",
+          "阳朔县",
+          "临桂县",
+          "灵川县",
+          "全州县",
+          "平乐县",
+          "兴安县",
+          "灌阳县",
+          "荔浦县",
+          "资源县",
+          "永福县",
+          "龙胜各族自治县",
+          "恭城瑶族自治县"
+        ]
+      },
+      {
+        "name": "梧州市",
+        "area": [
+          "万秀区",
+          "蝶山区",
+          "长洲区",
+          "岑溪市",
+          "苍梧县",
+          "藤县",
+          "蒙山县"
+        ]
+      },
+      {
+        "name": "北海市",
+        "area": [
+          "海城区",
+          "银海区",
+          "铁山港区",
+          "合浦县"
+        ]
+      },
+      {
+        "name": "防城港市",
+        "area": [
+          "港口区",
+          "防城区",
+          "东兴市",
+          "上思县"
+        ]
+      },
+      {
+        "name": "钦州市",
+        "area": [
+          "钦南区",
+          "钦北区",
+          "灵山县",
+          "浦北县"
+        ]
+      },
+      {
+        "name": "贵港市",
+        "area": [
+          "港北区",
+          "港南区",
+          "覃塘区",
+          "桂平市",
+          "平南县"
+        ]
+      },
+      {
+        "name": "玉林市",
+        "area": [
+          "玉州区",
+          "北流市",
+          "容县",
+          "陆川县",
+          "博白县",
+          "兴业县"
+        ]
+      },
+      {
+        "name": "百色市",
+        "area": [
+          "右江区",
+          "凌云县",
+          "平果县",
+          "西林县",
+          "乐业县",
+          "德保县",
+          "田林县",
+          "田阳县",
+          "靖西县",
+          "田东县",
+          "那坡县",
+          "隆林各族自治县"
+        ]
+      },
+      {
+        "name": "贺州市",
+        "area": [
+          "八步区",
+          "钟山县",
+          "昭平县",
+          "富川瑶族自治县"
+        ]
+      },
+      {
+        "name": "河池市",
+        "area": [
+          "金城江区",
+          "宜州市",
+          "天峨县",
+          "凤山县",
+          "南丹县",
+          "东兰县",
+          "都安瑶族自治县",
+          "罗城仫佬族自治县",
+          "巴马瑶族自治县",
+          "环江毛南族自治县",
+          "大化瑶族自治县"
+        ]
+      },
+      {
+        "name": "来宾市",
+        "area": [
+          "兴宾区",
+          "合山市",
+          "象州县",
+          "武宣县",
+          "忻城县",
+          "金秀瑶族自治县"
+        ]
+      },
+      {
+        "name": "崇左市",
+        "area": [
+          "江州区",
+          "凭祥市",
+          "宁明县",
+          "扶绥县",
+          "龙州县",
+          "大新县",
+          "天等县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "海南省",
+    "city": [
+      {
+        "name": "海口市",
+        "area": [
+          "龙华区",
+          "秀英区",
+          "琼山区",
+          "美兰区"
+        ]
+      },
+      {
+        "name": "三亚市",
+        "area": [
+          "三亚市"
+        ]
+      },
+     
+      {
+        "name": "儋州市",
+        "area": [
+          "儋州"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "重庆市",
+    "city": [
+      {
+        "name": "重庆区",
+        "area": [
+          "渝中区",
+          "大渡口区",
+          "江北区",
+          "南岸区",
+          "北碚区",
+          "渝北区",
+          "巴南区",
+          "长寿区",
+          "双桥区",
+          "沙坪坝区",
+          "万盛区",
+          "万州区",
+          "涪陵区",
+          "黔江区",
+          "永川区",
+          "合川区",
+          "江津区",
+          "九龙坡区",
+          "南川区",
+          "綦江县",
+          "潼南县",
+          "荣昌县",
+          "璧山县",
+          "大足县",
+          "铜梁县",
+          "梁平县",
+          "开县",
+          "忠县",
+          "城口县",
+          "垫江县",
+          "武隆县",
+          "丰都县",
+          "奉节县",
+          "云阳县",
+          "巫溪县",
+          "巫山县",
+          "石柱土家族自治县",
+          "秀山土家族苗族自治县",
+          "酉阳土家族苗族自治县",
+          "彭水苗族土家族自治县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "四川省",
+    "city": [
+      {
+        "name": "成都市",
+        "area": [
+          "青羊区",
+          "锦江区",
+          "金牛区",
+          "武侯区",
+          "成华区",
+          "龙泉驿区",
+          "青白江区",
+          "新都区",
+          "温江区",
+          "都江堰市",
+          "彭州市",
+          "邛崃市",
+          "崇州市",
+          "金堂县",
+          "郫县",
+          "新津县",
+          "双流县",
+          "蒲江县",
+          "大邑县"
+        ]
+      },
+      {
+        "name": "自贡市",
+        "area": [
+          "大安区",
+          "自流井区",
+          "贡井区",
+          "沿滩区",
+          "荣县",
+          "富顺县"
+        ]
+      },
+      {
+        "name": "攀枝花市",
+        "area": [
+          "仁和区",
+          "米易县",
+          "盐边县",
+          "东区",
+          "西区"
+        ]
+      },
+      {
+        "name": "泸州市",
+        "area": [
+          "江阳区",
+          "纳溪区",
+          "龙马潭区",
+          "泸县",
+          "合江县",
+          "叙永县",
+          "古蔺县"
+        ]
+      },
+      {
+        "name": "德阳市",
+        "area": [
+          "旌阳区",
+          "广汉市",
+          "什邡市",
+          "绵竹市",
+          "罗江县",
+          "中江县"
+        ]
+      },
+      {
+        "name": "绵阳市",
+        "area": [
+          "涪城区",
+          "游仙区",
+          "江油市",
+          "盐亭县",
+          "三台县",
+          "平武县",
+          "安县",
+          "梓潼县",
+          "北川羌族自治县"
+        ]
+      },
+      {
+        "name": "广元市",
+        "area": [
+          "元坝区",
+          "朝天区",
+          "青川县",
+          "旺苍县",
+          "剑阁县",
+          "苍溪县",
+          "市中区"
+        ]
+      },
+      {
+        "name": "遂宁市",
+        "area": [
+          "船山区",
+          "安居区",
+          "射洪县",
+          "蓬溪县",
+          "大英县"
+        ]
+      },
+      {
+        "name": "内江市",
+        "area": [
+          "市中区",
+          "东兴区",
+          "资中县",
+          "隆昌县",
+          "威远县"
+        ]
+      },
+      {
+        "name": "乐山市",
+        "area": [
+          "市中区",
+          "五通桥区",
+          "沙湾区",
+          "金口河区",
+          "峨眉山市",
+          "夹江县",
+          "井研县",
+          "犍为县",
+          "沐川县",
+          "马边彝族自治县",
+          "峨边彝族自治县"
+        ]
+      },
+      {
+        "name": "南充",
+        "area": [
+          "顺庆区",
+          "高坪区",
+          "嘉陵区",
+          "阆中市",
+          "营山县",
+          "蓬安县",
+          "仪陇县",
+          "南部县",
+          "西充县"
+        ]
+      },
+      {
+        "name": "眉山市",
+        "area": [
+          "东坡区",
+          "仁寿县",
+          "彭山县",
+          "洪雅县",
+          "丹棱县",
+          "青神县"
+        ]
+      },
+      {
+        "name": "宜宾市",
+        "area": [
+          "翠屏区",
+          "宜宾县",
+          "兴文县",
+          "南溪县",
+          "珙县",
+          "长宁县",
+          "高县",
+          "江安县",
+          "筠连县",
+          "屏山县"
+        ]
+      },
+      {
+        "name": "广安市",
+        "area": [
+          "广安区",
+          "华蓥市",
+          "岳池县",
+          "邻水县",
+          "武胜县"
+        ]
+      },
+      {
+        "name": "达州市",
+        "area": [
+          "通川区",
+          "万源市",
+          "达县",
+          "渠县",
+          "宣汉县",
+          "开江县",
+          "大竹县"
+        ]
+      },
+      {
+        "name": "雅安市",
+        "area": [
+          "雨城区",
+          "芦山县",
+          "石棉县",
+          "名山县",
+          "天全县",
+          "荥经县",
+          "宝兴县",
+          "汉源县"
+        ]
+      },
+      {
+        "name": "巴中市",
+        "area": [
+          "巴州区",
+          "南江县",
+          "平昌县",
+          "通江县"
+        ]
+      },
+      {
+        "name": "资阳市",
+        "area": [
+          "雁江区",
+          "简阳市",
+          "安岳县",
+          "乐至县"
+        ]
+      },
+      {
+        "name": "阿坝藏族羌族自治州",
+        "area": [
+          "马尔康县",
+          "九寨沟县",
+          "红原县",
+          "汶川县",
+          "阿坝县",
+          "理县",
+          "若尔盖县",
+          "小金县",
+          "黑水县",
+          "金川县",
+          "松潘县",
+          "壤塘县",
+          "茂县"
+        ]
+      },
+      {
+        "name": "甘孜藏族自治州",
+        "area": [
+          "康定县",
+          "丹巴县",
+          "炉霍县",
+          "九龙县",
+          "甘孜县",
+          "雅江县",
+          "新龙县",
+          "道孚县",
+          "白玉县",
+          "理塘县",
+          "德格县",
+          "乡城县",
+          "石渠县",
+          "稻城县",
+          "色达县",
+          "巴塘县",
+          "泸定县",
+          "得荣县"
+        ]
+      },
+      {
+        "name": "凉山彝族自治州",
+        "area": [
+          "西昌市",
+          "美姑县",
+          "昭觉县",
+          "金阳县",
+          "甘洛县",
+          "布拖县",
+          "雷波县",
+          "普格县",
+          "宁南县",
+          "喜德县",
+          "会东县",
+          "越西县",
+          "会理县",
+          "盐源县",
+          "德昌县",
+          "冕宁县",
+          "木里藏族自治县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "贵州省",
+    "city": [
+      {
+        "name": "贵阳市",
+        "area": [
+          "南明区",
+          "云岩区",
+          "花溪区",
+          "乌当区",
+          "白云区",
+          "小河区",
+          "清镇市",
+          "开阳县",
+          "修文县",
+          "息烽县"
+        ]
+      },
+      {
+        "name": "六盘水市",
+        "area": [
+          "钟山区",
+          "水城县",
+          "盘县",
+          "六枝特区"
+        ]
+      },
+      {
+        "name": "遵义市",
+        "area": [
+          "红花岗区",
+          "汇川区",
+          "赤水市",
+          "仁怀市",
+          "遵义县",
+          "绥阳县",
+          "桐梓县",
+          "习水县",
+          "凤冈县",
+          "正安县",
+          "余庆县",
+          "湄潭县",
+          "道真仡佬族苗族自治县",
+          "务川仡佬族苗族自治县"
+        ]
+      },
+      {
+        "name": "安顺市",
+        "area": [
+          "西秀区",
+          "普定县",
+          "平坝县",
+          "镇宁布依族苗族自治县",
+          "紫云苗族布依族自治县",
+          "关岭布依族苗族自治县"
+        ]
+      },
+      {
+        "name": "铜仁市",
+        "area": [
+          "铜仁市",
+          "德江县",
+          "江口县",
+          "思南县",
+          "石阡县",
+          "玉屏侗族自治县",
+          "松桃苗族自治县",
+          "印江土家族苗族自治县",
+          "沿河土家族自治县",
+          "万山特区"
+        ]
+      },
+      {
+        "name": "毕节市",
+        "area": [
+          "毕节市",
+          "黔西县",
+          "大方县",
+          "织金县",
+          "金沙县",
+          "赫章县",
+          "纳雍县",
+          "威宁彝族回族苗族自治县"
+        ]
+      },
+      {
+        "name": "黔西南布依族苗族自治州",
+        "area": [
+          "兴义市",
+          "望谟县",
+          "兴仁县",
+          "普安县",
+          "册亨县",
+          "晴隆县",
+          "贞丰县",
+          "安龙县"
+        ]
+      },
+      {
+        "name": "黔东南苗族侗族自治州",
+        "area": [
+          "凯里市",
+          "施秉县",
+          "从江县",
+          "锦屏县",
+          "镇远县",
+          "麻江县",
+          "台江县",
+          "天柱县",
+          "黄平县",
+          "榕江县",
+          "剑河县",
+          "三穗县",
+          "雷山县",
+          "黎平县",
+          "岑巩县",
+          "丹寨县"
+        ]
+      },
+      {
+        "name": "黔南布依族苗族自治州",
+        "area": [
+          "都匀市",
+          "福泉市",
+          "贵定县",
+          "惠水县",
+          "罗甸县",
+          "瓮安县",
+          "荔波县",
+          "龙里县",
+          "平塘县",
+          "长顺县",
+          "独山县",
+          "三都水族自治县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "云南省",
+    "city": [
+      {
+        "name": "昆明市",
+        "area": [
+          "盘龙区",
+          "五华区",
+          "官渡区",
+          "西山区",
+          "东川区",
+          "安宁市",
+          "呈贡县",
+          "晋宁县",
+          "富民县",
+          "宜良县",
+          "嵩明县",
+          "石林彝族自治县",
+          "禄劝彝族苗族自治县",
+          "寻甸回族彝族自治县"
+        ]
+      },
+      {
+        "name": "曲靖市",
+        "area": [
+          "麒麟区",
+          "宣威市",
+          "马龙县",
+          "沾益县",
+          "富源县",
+          "罗平县",
+          "师宗县",
+          "陆良县",
+          "会泽县"
+        ]
+      },
+      {
+        "name": "玉溪市",
+        "area": [
+          "红塔区",
+          "江川县",
+          "澄江县",
+          "通海县",
+          "华宁县",
+          "易门县",
+          "峨山彝族自治县",
+          "新平彝族傣族自治县",
+          "元江哈尼族彝族傣族自治县"
+        ]
+      },
+      {
+        "name": "保山市",
+        "area": [
+          "隆阳区",
+          "施甸县",
+          "腾冲县",
+          "龙陵县",
+          "昌宁县"
+        ]
+      },
+      {
+        "name": "昭通市",
+        "area": [
+          "昭阳区",
+          "鲁甸县",
+          "巧家县",
+          "盐津县",
+          "大关县",
+          "永善县",
+          "绥江县",
+          "镇雄县",
+          "彝良县",
+          "威信县",
+          "水富县"
+        ]
+      },
+      {
+        "name": "丽江市",
+        "area": [
+          "古城区",
+          "永胜县",
+          "华坪县",
+          "玉龙纳西族自治县",
+          "宁蒗彝族自治县"
+        ]
+      },
+      {
+        "name": "普洱市",
+        "area": [
+          "思茅区",
+          "普洱哈尼族彝族自治县",
+          "墨江哈尼族自治县",
+          "景东彝族自治县",
+          "景谷傣族彝族自治县",
+          "镇沅彝族哈尼族拉祜族自治县",
+          "江城哈尼族彝族自治县",
+          "孟连傣族拉祜族佤族自治县",
+          "澜沧拉祜族自治县",
+          "西盟佤族自治县"
+        ]
+      },
+      {
+        "name": "临沧市",
+        "area": [
+          "临翔区",
+          "凤庆县",
+          "云县",
+          "永德县",
+          "镇康县",
+          "双江拉祜族佤族布朗族傣族自治县",
+          "耿马傣族佤族自治县",
+          "沧源佤族自治县"
+        ]
+      },
+      {
+        "name": "德宏傣族景颇族自治州",
+        "area": [
+          "潞西市",
+          "瑞丽市",
+          "梁河县",
+          "盈江县",
+          "陇川县"
+        ]
+      },
+      {
+        "name": "怒江傈僳族自治州",
+        "area": [
+          "泸水县",
+          "福贡县",
+          "贡山独龙族怒族自治县",
+          "兰坪白族普米族自治县"
+        ]
+      },
+      {
+        "name": "迪庆藏族自治州",
+        "area": [
+          "香格里拉县",
+          "德钦县",
+          "维西傈僳族自治县"
+        ]
+      },
+      {
+        "name": "大理白族自治州",
+        "area": [
+          "大理市",
+          "祥云县",
+          "宾川县",
+          "弥渡县",
+          "永平县",
+          "云龙县",
+          "洱源县",
+          "剑川县",
+          "鹤庆县",
+          "漾濞彝族自治县",
+          "南涧彝族自治县",
+          "巍山彝族回族自治县"
+        ]
+      },
+      {
+        "name": "楚雄彝族自治州",
+        "area": [
+          "楚雄市",
+          "双柏县",
+          "牟定县",
+          "南华县",
+          "姚安县",
+          "大姚县",
+          "永仁县",
+          "元谋县",
+          "武定县",
+          "禄丰县"
+        ]
+      },
+      {
+        "name": "红河哈尼族彝族自治州",
+        "area": [
+          "蒙自县",
+          "个旧市",
+          "开远市",
+          "绿春县",
+          "建水县",
+          "石屏县",
+          "弥勒县",
+          "泸西县",
+          "元阳县",
+          "红河县",
+          "金平苗族瑶族傣族自治县",
+          "河口瑶族自治县",
+          "屏边苗族自治县"
+        ]
+      },
+      {
+        "name": "文山壮族苗族自治州",
+        "area": [
+          "文山县",
+          "砚山县",
+          "西畴县",
+          "麻栗坡县",
+          "马关县",
+          "丘北县",
+          "广南县",
+          "富宁县"
+        ]
+      },
+      {
+        "name": "西双版纳傣族自治州",
+        "area": [
+          "景洪市",
+          "勐海县",
+          "勐腊县"
+        ]
+      }
+    ]
+  },
+  // {
+  //   "name": "西藏自治区",
+  //   "city": [
+  //     {
+  //       "name": "拉萨市",
+  //       "area": [
+  //         "城关区",
+  //         "林周县",
+  //         "当雄县",
+  //         "尼木县",
+  //         "曲水县",
+  //         "堆龙德庆县",
+  //         "达孜县",
+  //         "墨竹工卡县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "那曲地区",
+  //       "area": [
+  //         "那曲县",
+  //         "嘉黎县",
+  //         "比如县",
+  //         "聂荣县",
+  //         "安多县",
+  //         "申扎县",
+  //         "索县",
+  //         "班戈县",
+  //         "巴青县",
+  //         "尼玛县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "昌都市",
+  //       "area": [
+  //         "昌都县",
+  //         "江达县",
+  //         "贡觉县",
+  //         "类乌齐县",
+  //         "丁青县",
+  //         "察雅县",
+  //         "八宿县",
+  //         "左贡县",
+  //         "芒康县",
+  //         "洛隆县",
+  //         "边坝县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "林芝市",
+  //       "area": [
+  //         "林芝县",
+  //         "工布江达县",
+  //         "米林县",
+  //         "墨脱县",
+  //         "波密县",
+  //         "察隅县",
+  //         "朗县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "山南市",
+  //       "area": [
+  //         "乃东县",
+  //         "扎囊县",
+  //         "贡嘎县",
+  //         "桑日县",
+  //         "琼结县",
+  //         "曲松县",
+  //         "措美县",
+  //         "洛扎县",
+  //         "加查县",
+  //         "隆子县",
+  //         "错那县",
+  //         "浪卡子县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "日喀则市",
+  //       "area": [
+  //         "日喀则市",
+  //         "南木林县",
+  //         "江孜县",
+  //         "定日县",
+  //         "萨迦县",
+  //         "拉孜县",
+  //         "昂仁县",
+  //         "谢通门县",
+  //         "白朗县",
+  //         "仁布县",
+  //         "康马县",
+  //         "定结县",
+  //         "仲巴县",
+  //         "亚东县",
+  //         "吉隆县",
+  //         "聂拉木县",
+  //         "萨嘎县",
+  //         "岗巴县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "阿里地区",
+  //       "area": [
+  //         "噶尔县",
+  //         "普兰县",
+  //         "札达县",
+  //         "日土县",
+  //         "革吉县",
+  //         "改则县",
+  //         "措勤县"
+  //       ]
+  //     }
+  //   ]
+  // },
+  {
+    "name": "陕西省",
+    "city": [
+      {
+        "name": "西安市",
+        "area": [
+          "莲湖区",
+          "新城区",
+          "碑林区",
+          "雁塔区",
+          "灞桥区",
+          "未央区",
+          "阎良区",
+          "临潼区",
+          "长安区",
+          "高陵县",
+          "蓝田县",
+          "户县",
+          "周至县"
+        ]
+      },
+      {
+        "name": "宝鸡市",
+        "area": [
+          "渭滨区",
+          "金台区",
+          "陈仓区",
+          "岐山县",
+          "凤翔县",
+          "陇县",
+          "太白县",
+          "麟游县",
+          "扶风县",
+          "千阳县",
+          "眉县",
+          "凤县"
+        ]
+      },
+      {
+        "name": "咸阳市",
+        "area": [
+          "秦都区",
+          "渭城区",
+          "杨陵区",
+          "兴平市",
+          "礼泉县",
+          "泾阳县",
+          "永寿县",
+          "三原县",
+          "彬县",
+          "旬邑县",
+          "长武县",
+          "乾县",
+          "武功县",
+          "淳化县"
+        ]
+      },
+      {
+        "name": "延安市",
+        "area": [
+          "宝塔区",
+          "安塞县",
+          "洛川县",
+          "子长县",
+          "黄陵县",
+          "延川县",
+          "富县",
+          "延长县",
+          "甘泉县",
+          "宜川县",
+          "志丹县",
+          "黄龙县",
+          "吴起县"
+        ]
+      },
+      {
+        "name": "汉中市",
+        "area": [
+          "汉台区",
+          "留坝县",
+          "镇巴县",
+          "城固县",
+          "南郑县",
+          "洋县",
+          "宁强县",
+          "佛坪县",
+          "勉县",
+          "西乡县",
+          "略阳县"
+        ]
+      },
+      {
+        "name": "安康市",
+        "area": [
+          "汉滨区",
+          "紫阳县",
+          "岚皋县",
+          "旬阳县",
+          "镇坪县",
+          "平利县",
+          "石泉县",
+          "宁陕县",
+          "白河县",
+          "汉阴县"
+        ]
+      },
+      {
+        "name": "商洛市",
+        "area": [
+          "商州区",
+          "镇安县",
+          "山阳县",
+          "洛南县",
+          "商南县",
+          "丹凤县",
+          "柞水县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "甘肃省",
+    "city": [
+      {
+        "name": "兰州市",
+        "area": [
+          "城关区",
+          "七里河区",
+          "西固区",
+          "安宁区",
+          "红古区",
+          "永登县",
+          "皋兰县",
+          "榆中县"
+        ]
+      },
+      {
+        "name": "嘉峪关市",
+        "area": [
+          "嘉峪关市"
+        ]
+      },
+      {
+        "name": "金昌市",
+        "area": [
+          "金川区",
+          "永昌县"
+        ]
+      },
+      {
+        "name": "白银市",
+        "area": [
+          "白银区",
+          "平川区",
+          "靖远县",
+          "会宁县",
+          "景泰县"
+        ]
+      },
+      {
+        "name": "天水市",
+        "area": [
+          "清水县",
+          "秦安县",
+          "甘谷县",
+          "武山县",
+          "张家川回族自治县",
+          "北道区",
+          "秦城区"
+        ]
+      },
+      {
+        "name": "武威市",
+        "area": [
+          "凉州区",
+          "民勤县",
+          "古浪县",
+          "天祝藏族自治县"
+        ]
+      },
+      {
+        "name": "酒泉市",
+        "area": [
+          "肃州区",
+          "玉门市",
+          "敦煌市",
+          "金塔县",
+          "肃北蒙古族自治县",
+          "阿克塞哈萨克族自治县",
+          "安西县"
+        ]
+      },
+      {
+        "name": "张掖市",
+        "area": [
+          "甘州区",
+          "民乐县",
+          "临泽县",
+          "高台县",
+          "山丹县",
+          "肃南裕固族自治县"
+        ]
+      },
+      {
+        "name": "庆阳市",
+        "area": [
+          "西峰区",
+          "庆城县",
+          "环县",
+          "华池县",
+          "合水县",
+          "正宁县",
+          "宁县",
+          "镇原县"
+        ]
+      },
+      {
+        "name": "平凉市",
+        "area": [
+          "崆峒区",
+          "泾川县",
+          "灵台县",
+          "崇信县",
+          "华亭县",
+          "庄浪县",
+          "静宁县"
+        ]
+      },
+      {
+        "name": "定西市",
+        "area": [
+          "安定区",
+          "通渭县",
+          "临洮县",
+          "漳县",
+          "岷县",
+          "渭源县",
+          "陇西县"
+        ]
+      },
+      {
+        "name": "陇南市",
+        "area": [
+          "武都区",
+          "成县",
+          "宕昌县",
+          "康县",
+          "文县",
+          "西和县",
+          "礼县",
+          "两当县",
+          "徽县"
+        ]
+      },
+      {
+        "name": "临夏回族自治州",
+        "area": [
+          "临夏市",
+          "临夏县",
+          "康乐县",
+          "永靖县",
+          "广河县",
+          "和政县",
+          "东乡族自治县",
+          "积石山保安族东乡族撒拉族自治县"
+        ]
+      },
+      {
+        "name": "甘南藏族自治州",
+        "area": [
+          "合作市",
+          "临潭县",
+          "卓尼县",
+          "舟曲县",
+          "迭部县",
+          "玛曲县",
+          "碌曲县",
+          "夏河县"
+        ]
+      }
+    ]
+  },
+  // {
+  //   "name": "青海省",
+  //   "city": [
+  //     {
+  //       "name": "西宁市",
+  //       "area": [
+  //         "城中区",
+  //         "城东区",
+  //         "城西区",
+  //         "城北区",
+  //         "湟源县",
+  //         "湟中县",
+  //         "大通回族土族自治县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "海东市",
+  //       "area": [
+  //         "平安县",
+  //         "乐都县",
+  //         "民和回族土族自治县",
+  //         "互助土族自治县",
+  //         "化隆回族自治县",
+  //         "循化撒拉族自治县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "海北藏族自治州",
+  //       "area": [
+  //         "海晏县",
+  //         "祁连县",
+  //         "刚察县",
+  //         "门源回族自治县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "海南藏族自治州",
+  //       "area": [
+  //         "共和县",
+  //         "同德县",
+  //         "贵德县",
+  //         "兴海县",
+  //         "贵南县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "黄南藏族自治州",
+  //       "area": [
+  //         "同仁县",
+  //         "尖扎县",
+  //         "泽库县",
+  //         "河南蒙古族自治县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "果洛藏族自治州",
+  //       "area": [
+  //         "玛沁县",
+  //         "班玛县",
+  //         "甘德县",
+  //         "达日县",
+  //         "久治县",
+  //         "玛多县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "玉树藏族自治州",
+  //       "area": [
+  //         "玉树县",
+  //         "杂多县",
+  //         "称多县",
+  //         "治多县",
+  //         "囊谦县",
+  //         "曲麻莱县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "海西蒙古族藏族自治州",
+  //       "area": [
+  //         "德令哈市",
+  //         "格尔木市",
+  //         "乌兰县",
+  //         "都兰县",
+  //         "天峻县"
+  //       ]
+  //     }
+  //   ]
+  // },
+  {
+    "name": "宁夏回族自治区",
+    "city": [
+      {
+        "name": "银川市",
+        "area": [
+          "兴庆区",
+          "西夏区",
+          "金凤区",
+          "灵武市",
+          "永宁县",
+          "贺兰县"
+        ]
+      },
+      {
+        "name": "石嘴山市",
+        "area": [
+          "大武口区",
+          "惠农区",
+          "平罗县"
+        ]
+      },
+      {
+        "name": "吴忠市",
+        "area": [
+          "利通区",
+          "青铜峡市",
+          "盐池县",
+          "同心县"
+        ]
+      },
+      {
+        "name": "固原市",
+        "area": [
+          "原州区",
+          "西吉县",
+          "隆德县",
+          "泾源县",
+          "彭阳县"
+        ]
+      },
+      {
+        "name": "中卫市",
+        "area": [
+          "沙坡头区",
+          "中宁县",
+          "海原县"
+        ]
+      }
+    ]
+  },
+  // {
+  //   "name": "新疆维吾尔自治区",
+  //   "city": [
+  //     {
+  //       "name": "乌鲁木齐市",
+  //       "area": [
+  //         "天山区",
+  //         "沙依巴克区",
+  //         "新市区",
+  //         "水磨沟区",
+  //         "头屯河区",
+  //         "达坂城区",
+  //         "东山区",
+  //         "乌鲁木齐县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "克拉玛依市",
+  //       "area": [
+  //         "克拉玛依区",
+  //         "独山子区",
+  //         "白碱滩区",
+  //         "乌尔禾区"
+  //       ]
+  //     },
+  //     {
+  //       "name": "吐鲁番市",
+  //       "area": [
+  //         "吐鲁番市",
+  //         "托克逊县",
+  //         "鄯善县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "哈密市",
+  //       "area": [
+  //         "哈密市",
+  //         "伊吾县",
+  //         "巴里坤哈萨克自治县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "和田地区",
+  //       "area": [
+  //         "和田市",
+  //         "和田县",
+  //         "洛浦县",
+  //         "民丰县",
+  //         "皮山县",
+  //         "策勒县",
+  //         "于田县",
+  //         "墨玉县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "阿克苏地区",
+  //       "area": [
+  //         "阿克苏市",
+  //         "温宿县",
+  //         "沙雅县",
+  //         "拜城县",
+  //         "阿瓦提县",
+  //         "库车县",
+  //         "柯坪县",
+  //         "新和县",
+  //         "乌什县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "喀什地区",
+  //       "area": [
+  //         "喀什市",
+  //         "巴楚县",
+  //         "泽普县",
+  //         "伽师县",
+  //         "叶城县",
+  //         "岳普湖县",
+  //         "疏勒县",
+  //         "麦盖提县",
+  //         "英吉沙县",
+  //         "莎车县",
+  //         "疏附县",
+  //         "塔什库尔干塔吉克自治县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "克孜勒苏柯尔克孜自治州",
+  //       "area": [
+  //         "阿图什市",
+  //         "阿合奇县",
+  //         "乌恰县",
+  //         "阿克陶县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "巴音郭楞蒙古自治州",
+  //       "area": [
+  //         "库尔勒市",
+  //         "和静县",
+  //         "尉犁县",
+  //         "和硕县",
+  //         "且末县",
+  //         "博湖县",
+  //         "轮台县",
+  //         "若羌县",
+  //         "焉耆回族自治县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "昌吉回族自治州",
+  //       "area": [
+  //         "昌吉市",
+  //         "阜康市",
+  //         "奇台县",
+  //         "玛纳斯县",
+  //         "吉木萨尔县",
+  //         "呼图壁县",
+  //         "木垒哈萨克自治县",
+  //         "米泉市"
+  //       ]
+  //     },
+  //     {
+  //       "name": "博尔塔拉蒙古自治州",
+  //       "area": [
+  //         "博乐市",
+  //         "精河县",
+  //         "温泉县"
+  //       ]
+  //     },
+  //     {
+  //       "name": "伊犁哈萨克自治州",
+  //       "area": [
+  //         "伊宁市",
+  //         "奎屯市",
+  //         "伊宁县",
+  //         "特克斯县",
+  //         "尼勒克县",
+  //         "昭苏县",
+  //         "新源县",
+  //         "霍城县",
+  //         "巩留县",
+  //         "察布查尔锡伯自治县",
+  //         "塔城地区",
+  //         "阿勒泰地区"
+  //       ]
+  //     }
+  //   ]
+  // },
+  {
+    "name": "台湾",
+    "city": [
+      {
+        "name": "台北市",
+        "area": [
+          "内湖区",
+          "南港区",
+          "中正区",
+          "万华区",
+          "大同区",
+          "中山区",
+          "松山区",
+          "大安区",
+          "信义区",
+          "文山区",
+          "士林区",
+          "北投区"
+        ]
+      },
+      {
+        "name": "新北市",
+        "area": [
+          "板桥区",
+          "汐止区",
+          "新店区"
+        ]
+      },
+      {
+        "name": "桃园市",
+        "area": [
+          "其他"
+        ]
+      },
+      {
+        "name": "台中市",
+        "area": [
+          "其他"
+        ]
+      },
+      {
+        "name": "台南市",
+        "area": [
+          "其他"
+        ]
+      },
+      {
+        "name": "高雄市",
+        "area": [
+          "其他"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "澳门特别行政区",
+    "city": [
+      {
+        "name": "澳门半岛",
+        "area": [
+          "花地玛堂区",
+          "圣安多尼堂区",
+          "大堂区",
+          "望德堂区",
+          "风顺堂区",
+          "嘉模堂区",
+          "圣方济各堂区",
+          "路凼"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "香港特别行政区",
+    "city": [
+      {
+        "name": "香港岛",
+        "area": [
+          "深水埗区",
+          "油尖旺区",
+          "九龙城区",
+          "黄大仙区",
+          "观塘区",
+          "北区",
+          "大埔区",
+          "沙田区",
+          "西贡区",
+          "元朗区",
+          "屯门区",
+          "荃湾区",
+          "葵青区",
+          "离岛区",
+          "中西区",
+          "湾仔区",
+          "东区",
+          "南区"
+        ]
+      }
+    ]
+  }
+]

+ 4914 - 0
components/wangding-pickerAddress/data2.js

@@ -0,0 +1,4914 @@
+export default [
+  {
+    "name": "北京市",
+    "city": [
+      {
+        "name": "北京市",
+        "area": [
+          "东城区",
+          "西城区",
+          "崇文区",
+          "宣武区",
+          "朝阳区",
+          "丰台区",
+          "石景山区",
+          "海淀区",
+          "门头沟区",
+          "房山区",
+          "通州区",
+          "顺义区",
+          "昌平区",
+          "大兴区",
+          "平谷区",
+          "怀柔区",
+          "密云县",
+          "延庆县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "天津市",
+    "city": [
+      {
+        "name": "天津市",
+        "area": [
+          "和平区",
+          "河东区",
+          "河西区",
+          "南开区",
+          "河北区",
+          "红桥区",
+          "塘沽区",
+          "汉沽区",
+          "大港区",
+          "东丽区",
+          "西青区",
+          "津南区",
+          "北辰区",
+          "武清区",
+          "宝坻区",
+          "宁河县",
+          "静海县",
+          "蓟  县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "河北省",
+    "city": [
+      {
+        "name": "石家庄市",
+        "area": [
+          "长安区",
+          "桥东区",
+          "桥西区",
+          "新华区",
+          "郊  区",
+          "井陉矿区",
+          "井陉县",
+          "正定县",
+          "栾城县",
+          "行唐县",
+          "灵寿县",
+          "高邑县",
+          "深泽县",
+          "赞皇县",
+          "无极县",
+          "平山县",
+          "元氏县",
+          "赵  县",
+          "辛集市",
+          "藁",
+          "晋州市",
+          "新乐市",
+          "鹿泉市"
+        ]
+      },
+      {
+        "name": "唐山市",
+        "area": [
+          "路南区",
+          "路北区",
+          "古冶区",
+          "开平区",
+          "新  区",
+          "丰润县",
+          "滦  县",
+          "滦南县",
+          "乐亭县",
+          "迁西县",
+          "玉田县",
+          "唐海县",
+          "遵化市",
+          "丰南市",
+          "迁安市"
+        ]
+      },
+      {
+        "name": "秦皇岛市",
+        "area": [
+          "海港区",
+          "山海关区",
+          "北戴河区",
+          "青龙满族自治县",
+          "昌黎县",
+          "抚宁县",
+          "卢龙县"
+        ]
+      },
+      {
+        "name": "邯郸市",
+        "area": [
+          "邯山区",
+          "丛台区",
+          "复兴区",
+          "峰峰矿区",
+          "邯郸县",
+          "临漳县",
+          "成安县",
+          "大名县",
+          "涉  县",
+          "磁  县",
+          "肥乡县",
+          "永年县",
+          "邱  县",
+          "鸡泽县",
+          "广平县",
+          "馆陶县",
+          "魏  县",
+          "曲周县",
+          "武安市"
+        ]
+      },
+      {
+        "name": "邢台市",
+        "area": [
+          "桥东区",
+          "桥西区",
+          "邢台县",
+          "临城县",
+          "内丘县",
+          "柏乡县",
+          "隆尧县",
+          "任  县",
+          "南和县",
+          "宁晋县",
+          "巨鹿县",
+          "新河县",
+          "广宗县",
+          "平乡县",
+          "威  县",
+          "清河县",
+          "临西县",
+          "南宫市",
+          "沙河市"
+        ]
+      },
+      {
+        "name": "保定市",
+        "area": [
+          "新市区",
+          "北市区",
+          "南市区",
+          "满城县",
+          "清苑县",
+          "涞水县",
+          "阜平县",
+          "徐水县",
+          "定兴县",
+          "唐  县",
+          "高阳县",
+          "容城县",
+          "涞源县",
+          "望都县",
+          "安新县",
+          "易  县",
+          "曲阳县",
+          "蠡  县",
+          "顺平县",
+          "博野",
+          "雄县",
+          "涿州市",
+          "定州市",
+          "安国市",
+          "高碑店市"
+        ]
+      },
+      {
+        "name": "张家口",
+        "area": [
+          "桥东区",
+          "桥西区",
+          "宣化区",
+          "下花园区",
+          "宣化县",
+          "张北县",
+          "康保县",
+          "沽源县",
+          "尚义县",
+          "蔚  县",
+          "阳原县",
+          "怀安县",
+          "万全县",
+          "怀来县",
+          "涿鹿县",
+          "赤城县",
+          "崇礼县"
+        ]
+      },
+      {
+        "name": "承德市",
+        "area": [
+          "双桥区",
+          "双滦区",
+          "鹰手营子矿区",
+          "承德县",
+          "兴隆县",
+          "平泉县",
+          "滦平县",
+          "隆化县",
+          "丰宁满族自治县",
+          "宽城满族自治县",
+          "围场满族蒙古族自治县"
+        ]
+      },
+      {
+        "name": "沧州市",
+        "area": [
+          "新华区",
+          "运河区",
+          "沧  县",
+          "青  县",
+          "东光县",
+          "海兴县",
+          "盐山县",
+          "肃宁县",
+          "南皮县",
+          "吴桥县",
+          "献  县",
+          "孟村回族自治县",
+          "泊头市",
+          "任丘市",
+          "黄骅市",
+          "河间市"
+        ]
+      },
+      {
+        "name": "廊坊市",
+        "area": [
+          "安次区",
+          "固安县",
+          "永清县",
+          "香河县",
+          "大城县",
+          "文安县",
+          "大厂回族自治县",
+          "霸州市",
+          "三河市"
+        ]
+      },
+      {
+        "name": "衡水市",
+        "area": [
+          "桃城区",
+          "枣强县",
+          "武邑县",
+          "武强县",
+          "饶阳县",
+          "安平县",
+          "故城县",
+          "景  县",
+          "阜城县",
+          "冀州市",
+          "深州市"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "山西省",
+    "city": [
+      {
+        "name": "太原市",
+        "area": [
+          "小店区",
+          "迎泽区",
+          "杏花岭区",
+          "尖草坪区",
+          "万柏林区",
+          "晋源区",
+          "清徐县",
+          "阳曲县",
+          "娄烦县",
+          "古交市"
+        ]
+      },
+      {
+        "name": "大同市",
+        "area": [
+          "城  区",
+          "矿  区",
+          "南郊区",
+          "新荣区",
+          "阳高县",
+          "天镇县",
+          "广灵县",
+          "灵丘县",
+          "浑源县",
+          "左云县",
+          "大同县"
+        ]
+      },
+      {
+        "name": "阳泉市",
+        "area": [
+          "城  区",
+          "矿  区",
+          "郊  区",
+          "平定县",
+          "盂  县"
+        ]
+      },
+      {
+        "name": "长治市",
+        "area": [
+          "城  区",
+          "郊  区",
+          "长治县",
+          "襄垣县",
+          "屯留县",
+          "平顺县",
+          "黎城县",
+          "壶关县",
+          "长子县",
+          "武乡县",
+          "沁  县",
+          "沁源县",
+          "潞城市"
+        ]
+      },
+      {
+        "name": "晋城市",
+        "area": [
+          "城  区",
+          "沁水县",
+          "阳城县",
+          "陵川县",
+          "泽州县",
+          "高平市"
+        ]
+      },
+      {
+        "name": "朔州市",
+        "area": [
+          "朔城区",
+          "平鲁区",
+          "山阴县",
+          "应  县",
+          "右玉县",
+          "怀仁县"
+        ]
+      },
+      {
+        "name": "忻州市",
+        "area": [
+          "忻府区",
+          "原平市",
+          "定襄县",
+          "五台县",
+          "代  县",
+          "繁峙县",
+          "宁武县",
+          "静乐县",
+          "神池县",
+          "五寨县",
+          "岢岚县",
+          "河曲县",
+          "保德县",
+          "偏关县"
+        ]
+      },
+      {
+        "name": "吕梁市",
+        "area": [
+          "离石区",
+          "孝义市",
+          "汾阳市",
+          "文水县",
+          "交城县",
+          "兴  县",
+          "临  县",
+          "柳林县",
+          "石楼县",
+          "岚  县",
+          "方山县",
+          "中阳县",
+          "交口县"
+        ]
+      },
+      {
+        "name": "晋中市",
+        "area": [
+          "榆次市",
+          "介休市",
+          "榆社县",
+          "左权县",
+          "和顺县",
+          "昔阳县",
+          "寿阳县",
+          "太谷县",
+          "祁  县",
+          "平遥县",
+          "灵石县"
+        ]
+      },
+      {
+        "name": "临汾市",
+        "area": [
+          "临汾市",
+          "侯马市",
+          "霍州市",
+          "曲沃县",
+          "翼城县",
+          "襄汾县",
+          "洪洞县",
+          "古  县",
+          "安泽县",
+          "浮山县",
+          "吉  县",
+          "乡宁县",
+          "蒲  县",
+          "大宁县",
+          "永和县",
+          "隰  县",
+          "汾西县"
+        ]
+      },
+      {
+        "name": "运城市",
+        "area": [
+          "运城市",
+          "永济市",
+          "河津市",
+          "芮城县",
+          "临猗县",
+          "万荣县",
+          "新绛县",
+          "稷山县",
+          "闻喜县",
+          "夏  县",
+          "绛  县",
+          "平陆县",
+          "垣曲县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "内蒙古",
+    "city": [
+      {
+        "name": "呼和浩特市",
+        "area": [
+          "新城区",
+          "回民区",
+          "玉泉区",
+          "郊  区",
+          "土默特左旗",
+          "托克托县",
+          "和林格尔县",
+          "清水河县",
+          "武川县"
+        ]
+      },
+      {
+        "name": "包头市",
+        "area": [
+          "东河区",
+          "昆都伦区",
+          "青山区",
+          "石拐矿区",
+          "白云矿区",
+          "郊  区",
+          "土默特右旗",
+          "固阳县",
+          "达尔罕茂明安联合旗"
+        ]
+      },
+      {
+        "name": "乌海市",
+        "area": [
+          "海勃湾区",
+          "海南区",
+          "乌达区"
+        ]
+      },
+      {
+        "name": "赤峰市",
+        "area": [
+          "红山区",
+          "元宝山区",
+          "松山区",
+          "阿鲁科尔沁旗",
+          "巴林左旗",
+          "巴林右旗",
+          "林西县",
+          "克什克腾旗",
+          "翁牛特旗",
+          "喀喇沁旗",
+          "宁城县",
+          "敖汉旗"
+        ]
+      },
+      {
+        "name": "呼伦贝尔市",
+        "area": [
+          "海拉尔市",
+          "满洲里市",
+          "扎兰屯市",
+          "牙克石市",
+          "根河市",
+          "额尔古纳市",
+          "阿荣旗",
+          "莫力达瓦达斡尔族自治旗",
+          "鄂伦春自治旗",
+          "鄂温克族自治旗",
+          "新巴尔虎右旗",
+          "新巴尔虎左旗",
+          "陈巴尔虎旗"
+        ]
+      },
+      {
+        "name": "兴安盟",
+        "area": [
+          "乌兰浩特市",
+          "阿尔山市",
+          "科尔沁右翼前旗",
+          "科尔沁右翼中旗",
+          "扎赉特旗",
+          "突泉县"
+        ]
+      },
+      {
+        "name": "通辽市",
+        "area": [
+          "科尔沁区",
+          "霍林郭勒市",
+          "科尔沁左翼中旗",
+          "科尔沁左翼后旗",
+          "开鲁县",
+          "库伦旗",
+          "奈曼旗",
+          "扎鲁特旗"
+        ]
+      },
+      {
+        "name": "锡林郭勒盟",
+        "area": [
+          "二连浩特市",
+          "锡林浩特市",
+          "阿巴嘎旗",
+          "苏尼特左旗",
+          "苏尼特右旗",
+          "东乌珠穆沁旗",
+          "西乌珠穆沁旗",
+          "太仆寺旗",
+          "镶黄旗",
+          "正镶白旗",
+          "正蓝旗",
+          "多伦县"
+        ]
+      },
+      {
+        "name": "乌兰察布盟",
+        "area": [
+          "集宁市",
+          "丰镇市",
+          "卓资县",
+          "化德县",
+          "商都县",
+          "兴和县",
+          "凉城县",
+          "察哈尔右翼前旗",
+          "察哈尔右翼中旗",
+          "察哈尔右翼后旗",
+          "四子王旗"
+        ]
+      },
+      {
+        "name": "伊克昭盟",
+        "area": [
+          "东胜市",
+          "达拉特旗",
+          "准格尔旗",
+          "鄂托克前旗",
+          "鄂托克旗",
+          "杭锦旗",
+          "乌审旗",
+          "伊金霍洛旗"
+        ]
+      },
+      {
+        "name": "巴彦淖尔盟",
+        "area": [
+          "临河市",
+          "五原县",
+          "磴口县",
+          "乌拉特前旗",
+          "乌拉特中旗",
+          "乌拉特后旗",
+          "杭锦后旗"
+        ]
+      },
+      {
+        "name": "阿拉善盟",
+        "area": [
+          "阿拉善左旗",
+          "阿拉善右旗",
+          "额济纳旗"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "辽宁省",
+    "city": [
+      {
+        "name": "沈阳市",
+        "area": [
+          "沈河区",
+          "皇姑区",
+          "和平区",
+          "大东区",
+          "铁西区",
+          "苏家屯区",
+          "东陵区",
+          "于洪区",
+          "新民市",
+          "法库县",
+          "辽中县",
+          "康平县",
+          "新城子区"
+        ]
+      },
+      {
+        "name": "大连市",
+        "area": [
+          "西岗区",
+          "中山区",
+          "沙河口区",
+          "甘井子区",
+          "旅顺口区",
+          "金州区",
+          "瓦房店市",
+          "普兰店市",
+          "庄河市",
+          "长海县"
+        ]
+      },
+      {
+        "name": "鞍山市",
+        "area": [
+          "铁东区",
+          "铁西区",
+          "立山区",
+          "千山区",
+          "海城市",
+          "台安县",
+          "岫岩满族自治县"
+        ]
+      },
+      {
+        "name": "抚顺市",
+        "area": [
+          "顺城区",
+          "新抚区",
+          "东洲区",
+          "望花区",
+          "抚顺县",
+          "清原满族自治县",
+          "新宾满族自治县"
+        ]
+      },
+      {
+        "name": "本溪市",
+        "area": [
+          "平山区",
+          "明山区",
+          "溪湖区",
+          "南芬区",
+          "本溪满族自治县",
+          "桓仁满族自治县"
+        ]
+      },
+      {
+        "name": "丹东市",
+        "area": [
+          "振兴区",
+          "元宝区",
+          "振安区",
+          "东港市",
+          "凤城市",
+          "宽甸满族自治县"
+        ]
+      },
+      {
+        "name": "锦州市",
+        "area": [
+          "太和区",
+          "古塔区",
+          "凌河区",
+          "凌海市",
+          "黑山县",
+          "义县",
+          "北宁市"
+        ]
+      },
+      {
+        "name": "营口市",
+        "area": [
+          "站前区",
+          "西市区",
+          "鲅鱼圈区",
+          "老边区",
+          "大石桥市",
+          "盖州市"
+        ]
+      },
+      {
+        "name": "阜新市",
+        "area": [
+          "海州区",
+          "新邱区",
+          "太平区",
+          "清河门区",
+          "细河区",
+          "彰武县",
+          "阜新蒙古族自治县"
+        ]
+      },
+      {
+        "name": "辽阳市",
+        "area": [
+          "白塔区",
+          "文圣区",
+          "宏伟区",
+          "太子河区",
+          "弓长岭区",
+          "灯塔市",
+          "辽阳县"
+        ]
+      },
+      {
+        "name": "盘锦",
+        "area": [
+          "双台子区",
+          "兴隆台区",
+          "盘山县",
+          "大洼县"
+        ]
+      },
+      {
+        "name": "铁岭市",
+        "area": [
+          "银州区",
+          "清河区",
+          "调兵山市",
+          "开原市",
+          "铁岭县",
+          "昌图县",
+          "西丰县"
+        ]
+      },
+      {
+        "name": "朝阳市",
+        "area": [
+          "双塔区",
+          "龙城区",
+          "凌源市",
+          "北票市",
+          "朝阳县",
+          "建平县",
+          "喀喇沁左翼蒙古族自治县"
+        ]
+      },
+      {
+        "name": "葫芦岛市",
+        "area": [
+          "龙港区",
+          "南票区",
+          "连山区",
+          "兴城市",
+          "绥中县",
+          "建昌县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "吉林省",
+    "city": [
+      {
+        "name": "长春市",
+        "area": [
+          "朝阳区",
+          "宽城区",
+          "二道区",
+          "南关区",
+          "绿园区",
+          "双阳区",
+          "九台市",
+          "榆树市",
+          "德惠市",
+          "农安县"
+        ]
+      },
+      {
+        "name": "吉林市",
+        "area": [
+          "船营区",
+          "昌邑区",
+          "龙潭区",
+          "丰满区",
+          "舒兰市",
+          "桦甸市",
+          "蛟河市",
+          "磐石市",
+          "永吉县"
+        ]
+      },
+      {
+        "name": "四平",
+        "area": [
+          "铁西区",
+          "铁东区",
+          "公主岭市",
+          "双辽市",
+          "梨树县",
+          "伊通满族自治县"
+        ]
+      },
+      {
+        "name": "辽源市",
+        "area": [
+          "龙山区",
+          "西安区",
+          "东辽县",
+          "东丰县"
+        ]
+      },
+      {
+        "name": "通化市",
+        "area": [
+          "东昌区",
+          "二道江区",
+          "梅河口市",
+          "集安市",
+          "通化县",
+          "辉南县",
+          "柳河县"
+        ]
+      },
+      {
+        "name": "白山市",
+        "area": [
+          "八道江区",
+          "江源区",
+          "临江市",
+          "靖宇县",
+          "抚松县",
+          "长白朝鲜族自治县"
+        ]
+      },
+      {
+        "name": "松原市",
+        "area": [
+          "宁江区",
+          "乾安县",
+          "长岭县",
+          "扶余县",
+          "前郭尔罗斯蒙古族自治县"
+        ]
+      },
+      {
+        "name": "白城市",
+        "area": [
+          "洮北区",
+          "大安市",
+          "洮南市",
+          "镇赉县",
+          "通榆县"
+        ]
+      },
+      {
+        "name": "延边朝鲜族自治州",
+        "area": [
+          "延吉市",
+          "图们市",
+          "敦化市",
+          "龙井市",
+          "珲春市",
+          "和龙市",
+          "安图县",
+          "汪清县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "黑龙江省",
+    "city": [
+      {
+        "name": "哈尔滨市",
+        "area": [
+          "松北区",
+          "道里区",
+          "南岗区",
+          "平房区",
+          "香坊区",
+          "道外区",
+          "呼兰区",
+          "阿城区",
+          "双城市",
+          "尚志市",
+          "五常市",
+          "宾县",
+          "方正县",
+          "通河县",
+          "巴彦县",
+          "延寿县",
+          "木兰县",
+          "依兰县"
+        ]
+      },
+      {
+        "name": "齐齐哈尔市",
+        "area": [
+          "龙沙区",
+          "昂昂溪区",
+          "铁锋区",
+          "建华区",
+          "富拉尔基区",
+          "碾子山区",
+          "梅里斯达斡尔族区",
+          "讷河市",
+          "富裕县",
+          "拜泉县",
+          "甘南县",
+          "依安县",
+          "克山县",
+          "泰来县",
+          "克东县",
+          "龙江县"
+        ]
+      },
+      {
+        "name": "鹤岗市",
+        "area": [
+          "兴山区",
+          "工农区",
+          "南山区",
+          "兴安区",
+          "向阳区",
+          "东山区",
+          "萝北县",
+          "绥滨县"
+        ]
+      },
+      {
+        "name": "双鸭山",
+        "area": [
+          "尖山区",
+          "岭东区",
+          "四方台区",
+          "宝山区",
+          "集贤县",
+          "宝清县",
+          "友谊县",
+          "饶河县"
+        ]
+      },
+      {
+        "name": "鸡西市",
+        "area": [
+          "鸡冠区",
+          "恒山区",
+          "城子河区",
+          "滴道区",
+          "梨树区",
+          "麻山区",
+          "密山市",
+          "虎林市",
+          "鸡东县"
+        ]
+      },
+      {
+        "name": "大庆市",
+        "area": [
+          "萨尔图区",
+          "红岗区",
+          "龙凤区",
+          "让胡路区",
+          "大同区",
+          "林甸县",
+          "肇州县",
+          "肇源县",
+          "杜尔伯特蒙古族自治县"
+        ]
+      },
+      {
+        "name": "伊春市",
+        "area": [
+          "伊春区",
+          "带岭区",
+          "南岔区",
+          "金山屯区",
+          "西林区",
+          "美溪区",
+          "乌马河区",
+          "翠峦区",
+          "友好区",
+          "上甘岭区",
+          "五营区",
+          "红星区",
+          "新青区",
+          "汤旺河区",
+          "乌伊岭区",
+          "铁力市",
+          "嘉荫县"
+        ]
+      },
+      {
+        "name": "牡丹江市",
+        "area": [
+          "爱民区",
+          "东安区",
+          "阳明区",
+          "西安区",
+          "绥芬河市",
+          "宁安市",
+          "海林市",
+          "穆棱市",
+          "林口县",
+          "东宁县"
+        ]
+      },
+      {
+        "name": "佳木斯市",
+        "area": [
+          "向阳区",
+          "前进区",
+          "东风区",
+          "郊区",
+          "同江市",
+          "富锦市",
+          "桦川县",
+          "抚远县",
+          "桦南县",
+          "汤原县"
+        ]
+      },
+      {
+        "name": "七台河市",
+        "area": [
+          "桃山区",
+          "新兴区",
+          "茄子河区",
+          "勃利县"
+        ]
+      },
+      {
+        "name": "黑河市",
+        "area": [
+          "爱辉区",
+          "北安市",
+          "五大连池市",
+          "逊克县",
+          "嫩江县",
+          "孙吴县"
+        ]
+      },
+      {
+        "name": "绥化市",
+        "area": [
+          "北林区",
+          "安达市",
+          "肇东市",
+          "海伦市",
+          "绥棱县",
+          "兰西县",
+          "明水县",
+          "青冈县",
+          "庆安县",
+          "望奎县"
+        ]
+      },
+      {
+        "name": "大兴安岭地区",
+        "area": [
+          "呼玛县",
+          "塔河县",
+          "漠河县",
+          "大兴安岭辖区"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "上海市",
+    "city": [
+      {
+        "name": "上海市",
+        "area": [
+          "黄浦区",
+          "卢湾区",
+          "徐汇区",
+          "长宁区",
+          "静安区",
+          "普陀区",
+          "闸北区",
+          "虹口区",
+          "杨浦区",
+          "宝山区",
+          "闵行区",
+          "嘉定区",
+          "松江区",
+          "金山区",
+          "青浦区",
+          "南汇区",
+          "奉贤区",
+          "浦东新区",
+          "崇明县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "江苏省",
+    "city": [
+      {
+        "name": "南京市",
+        "area": [
+          "玄武区",
+          "白下区",
+          "秦淮区",
+          "建邺区",
+          "鼓楼区",
+          "下关区",
+          "栖霞区",
+          "雨花台区",
+          "浦口区",
+          "江宁区",
+          "六合区",
+          "溧水县",
+          "高淳县"
+        ]
+      },
+      {
+        "name": "苏州市",
+        "area": [
+          "金阊区",
+          "平江区",
+          "沧浪区",
+          "虎丘区",
+          "吴中区",
+          "相城区",
+          "常熟市",
+          "张家港市",
+          "昆山市",
+          "吴江市",
+          "太仓市"
+        ]
+      },
+      {
+        "name": "无锡市",
+        "area": [
+          "崇安区",
+          "南长区",
+          "北塘区",
+          "滨湖区",
+          "锡山区",
+          "惠山区",
+          "江阴市",
+          "宜兴市"
+        ]
+      },
+      {
+        "name": "常州市",
+        "area": [
+          "钟楼区",
+          "天宁区",
+          "戚墅堰区",
+          "新北区",
+          "武进区",
+          "金坛市",
+          "溧阳市"
+        ]
+      },
+      {
+        "name": "镇江市",
+        "area": [
+          "京口区",
+          "润州区",
+          "丹徒区",
+          "丹阳市",
+          "扬中市",
+          "句容市"
+        ]
+      },
+      {
+        "name": "南通市",
+        "area": [
+          "崇川区",
+          "港闸区",
+          "通州市",
+          "如皋市",
+          "海门市",
+          "启东市",
+          "海安县",
+          "如东县"
+        ]
+      },
+      {
+        "name": "泰州市",
+        "area": [
+          "海陵区",
+          "高港区",
+          "姜堰市",
+          "泰兴市",
+          "靖江市",
+          "兴化市"
+        ]
+      },
+      {
+        "name": "扬州市",
+        "area": [
+          "广陵区",
+          "维扬区",
+          "邗江区",
+          "江都市",
+          "仪征市",
+          "高邮市",
+          "宝应县"
+        ]
+      },
+      {
+        "name": "盐城市",
+        "area": [
+          "亭湖区",
+          "盐都区",
+          "大丰市",
+          "东台市",
+          "建湖县",
+          "射阳县",
+          "阜宁县",
+          "滨海县",
+          "响水县"
+        ]
+      },
+      {
+        "name": "连云港市",
+        "area": [
+          "新浦区",
+          "海州区",
+          "连云区",
+          "东海县",
+          "灌云县",
+          "赣榆县",
+          "灌南县"
+        ]
+      },
+      {
+        "name": "徐州市",
+        "area": [
+          "云龙区",
+          "鼓楼区",
+          "九里区",
+          "泉山区",
+          "贾汪区",
+          "邳州市",
+          "新沂市",
+          "铜山县",
+          "睢宁县",
+          "沛县",
+          "丰县"
+        ]
+      },
+      {
+        "name": "淮安市",
+        "area": [
+          "清河区",
+          "清浦区",
+          "楚州区",
+          "淮阴区",
+          "涟水县",
+          "洪泽县",
+          "金湖县",
+          "盱眙县"
+        ]
+      },
+      {
+        "name": "宿迁市",
+        "area": [
+          "宿城区",
+          "宿豫区",
+          "沭阳县",
+          "泗阳县",
+          "泗洪县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "浙江省",
+    "city": [
+      {
+        "name": "杭州市",
+        "area": [
+          "拱墅区",
+          "西湖区",
+          "上城区",
+          "下城区",
+          "江干区",
+          "滨江区",
+          "余杭区",
+          "萧山区",
+          "建德市",
+          "富阳市",
+          "临安市",
+          "桐庐县",
+          "淳安县"
+        ]
+      },
+      {
+        "name": "宁波市",
+        "area": [
+          "海曙区",
+          "江东区",
+          "江北区",
+          "镇海区",
+          "北仑区",
+          "鄞州区",
+          "余姚市",
+          "慈溪市",
+          "奉化市",
+          "宁海县",
+          "象山县"
+        ]
+      },
+      {
+        "name": "温州市",
+        "area": [
+          "鹿城区",
+          "龙湾区",
+          "瓯海区",
+          "瑞安市",
+          "乐清市",
+          "永嘉县",
+          "洞头县",
+          "平阳县",
+          "苍南县",
+          "文成县",
+          "泰顺县"
+        ]
+      },
+      {
+        "name": "嘉兴市",
+        "area": [
+          "秀城区",
+          "秀洲区",
+          "海宁市",
+          "平湖市",
+          "桐乡市",
+          "嘉善县",
+          "海盐县"
+        ]
+      },
+      {
+        "name": "湖州市",
+        "area": [
+          "吴兴区",
+          "南浔区",
+          "长兴县",
+          "德清县",
+          "安吉县"
+        ]
+      },
+      {
+        "name": "绍兴市",
+        "area": [
+          "越城区",
+          "诸暨市",
+          "上虞市",
+          "嵊州市",
+          "绍兴县",
+          "新昌县"
+        ]
+      },
+      {
+        "name": "金华市",
+        "area": [
+          "婺城区",
+          "金东区",
+          "兰溪市",
+          "义乌市",
+          "东阳市",
+          "永康市",
+          "武义县",
+          "浦江县",
+          "磐安县"
+        ]
+      },
+      {
+        "name": "衢州市",
+        "area": [
+          "柯城区",
+          "衢江区",
+          "江山市",
+          "龙游县",
+          "常山县",
+          "开化县"
+        ]
+      },
+      {
+        "name": "舟山市",
+        "area": [
+          "定海区",
+          "普陀区",
+          "岱山县",
+          "嵊泗县"
+        ]
+      },
+      {
+        "name": "台州市",
+        "area": [
+          "椒江区",
+          "黄岩区",
+          "路桥区",
+          "临海市",
+          "温岭市",
+          "玉环县",
+          "天台县",
+          "仙居县",
+          "三门县"
+        ]
+      },
+      {
+        "name": "丽水市",
+        "area": [
+          "莲都区",
+          "龙泉市",
+          "缙云县",
+          "青田县",
+          "云和县",
+          "遂昌县",
+          "松阳县",
+          "庆元县",
+          "景宁畲族自治县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "安徽省",
+    "city": [
+      {
+        "name": "合肥市",
+        "area": [
+          "庐阳区",
+          "瑶海区",
+          "蜀山区",
+          "包河区",
+          "长丰县",
+          "肥东县",
+          "肥西县"
+        ]
+      },
+      {
+        "name": "芜湖市",
+        "area": [
+          "镜湖区",
+          "弋江区",
+          "鸠江区",
+          "三山区",
+          "芜湖县",
+          "南陵县",
+          "繁昌县"
+        ]
+      },
+      {
+        "name": "蚌埠市",
+        "area": [
+          "蚌山区",
+          "龙子湖区",
+          "禹会区",
+          "淮上区",
+          "怀远县",
+          "固镇县",
+          "五河县"
+        ]
+      },
+      {
+        "name": "淮南市",
+        "area": [
+          "田家庵区",
+          "大通区",
+          "谢家集区",
+          "八公山区",
+          "潘集区",
+          "凤台县"
+        ]
+      },
+      {
+        "name": "马鞍山市",
+        "area": [
+          "雨山区",
+          "花山区",
+          "金家庄区",
+          "当涂县"
+        ]
+      },
+      {
+        "name": "淮北市",
+        "area": [
+          "相山区",
+          "杜集区",
+          "烈山区",
+          "濉溪县"
+        ]
+      },
+      {
+        "name": "铜陵市",
+        "area": [
+          "铜官山区",
+          "狮子山区",
+          "郊区",
+          "铜陵县"
+        ]
+      },
+      {
+        "name": "安庆市",
+        "area": [
+          "迎江区",
+          "大观区",
+          "宜秀区",
+          "桐城市",
+          "宿松县",
+          "枞阳县",
+          "太湖县",
+          "怀宁县",
+          "岳西县",
+          "望江县",
+          "潜山县"
+        ]
+      },
+      {
+        "name": "黄山市",
+        "area": [
+          "屯溪区",
+          "黄山区",
+          "徽州区",
+          "休宁县",
+          "歙县",
+          "祁门县",
+          "黟县"
+        ]
+      },
+      {
+        "name": "滁州市",
+        "area": [
+          "琅琊区",
+          "南谯区",
+          "天长市",
+          "明光市",
+          "全椒县",
+          "来安县",
+          "定远县",
+          "凤阳县"
+        ]
+      },
+      {
+        "name": "阜阳市",
+        "area": [
+          "颍州区",
+          "颍东区",
+          "颍泉区",
+          "界首市",
+          "临泉县",
+          "颍上县",
+          "阜南县",
+          "太和县"
+        ]
+      },
+      {
+        "name": "宿州市",
+        "area": [
+          "埇桥区",
+          "萧县",
+          "泗县",
+          "砀山县",
+          "灵璧县"
+        ]
+      },
+      {
+        "name": "巢湖市",
+        "area": [
+          "居巢区",
+          "含山县",
+          "无为县",
+          "庐江县",
+          "和县"
+        ]
+      },
+      {
+        "name": "六安市",
+        "area": [
+          "金安区",
+          "裕安区",
+          "寿县",
+          "霍山县",
+          "霍邱县",
+          "舒城县",
+          "金寨县"
+        ]
+      },
+      {
+        "name": "亳州市",
+        "area": [
+          "谯城区",
+          "利辛县",
+          "涡阳县",
+          "蒙城县"
+        ]
+      },
+      {
+        "name": "池州市",
+        "area": [
+          "贵池区",
+          "东至县",
+          "石台县",
+          "青阳县"
+        ]
+      },
+      {
+        "name": "宣城市",
+        "area": [
+          "宣州区",
+          "宁国市",
+          "广德县",
+          "郎溪县",
+          "泾县",
+          "旌德县",
+          "绩溪县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "福建省",
+    "city": [
+      {
+        "name": "福州市",
+        "area": [
+          "鼓楼区",
+          "台江区",
+          "仓山区",
+          "马尾区",
+          "晋安区",
+          "福清市",
+          "长乐市",
+          "闽侯县",
+          "闽清县",
+          "永泰县",
+          "连江县",
+          "罗源县",
+          "平潭县"
+        ]
+      },
+      {
+        "name": "厦门市",
+        "area": [
+          "思明区",
+          "海沧区",
+          "湖里区",
+          "集美区",
+          "同安区",
+          "翔安区"
+        ]
+      },
+      {
+        "name": "莆田市",
+        "area": [
+          "城厢区",
+          "涵江区",
+          "荔城区",
+          "秀屿区",
+          "仙游县"
+        ]
+      },
+      {
+        "name": "三明市",
+        "area": [
+          "梅列区",
+          "三元区",
+          "永安市",
+          "明溪县",
+          "将乐县",
+          "大田县",
+          "宁化县",
+          "建宁县",
+          "沙县",
+          "尤溪县",
+          "清流县",
+          "泰宁县"
+        ]
+      },
+      {
+        "name": "泉州市",
+        "area": [
+          "鲤城区",
+          "丰泽区",
+          "洛江区",
+          "泉港区",
+          "石狮市",
+          "晋江市",
+          "南安市",
+          "惠安县",
+          "永春县",
+          "安溪县",
+          "德化县",
+          "金门县"
+        ]
+      },
+      {
+        "name": "漳州市",
+        "area": [
+          "芗城区",
+          "龙文区",
+          "龙海市",
+          "平和县",
+          "南靖县",
+          "诏安县",
+          "漳浦县",
+          "华安县",
+          "东山县",
+          "长泰县",
+          "云霄县"
+        ]
+      },
+      {
+        "name": "南平市",
+        "area": [
+          "延平区",
+          "建瓯市",
+          "邵武市",
+          "武夷山市",
+          "建阳市",
+          "松溪县",
+          "光泽县",
+          "顺昌县",
+          "浦城县",
+          "政和县"
+        ]
+      },
+      {
+        "name": "龙岩市",
+        "area": [
+          "新罗区",
+          "漳平市",
+          "长汀县",
+          "武平县",
+          "上杭县",
+          "永定县",
+          "连城县"
+        ]
+      },
+      {
+        "name": "宁德市",
+        "area": [
+          "蕉城区",
+          "福安市",
+          "福鼎市",
+          "寿宁县",
+          "霞浦县",
+          "柘荣县",
+          "屏南县",
+          "古田县",
+          "周宁县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "江西省",
+    "city": [
+      {
+        "name": "南昌市",
+        "area": [
+          "东湖区",
+          "西湖区",
+          "青云谱区",
+          "湾里区",
+          "青山湖区",
+          "新建县",
+          "南昌县",
+          "进贤县",
+          "安义县"
+        ]
+      },
+      {
+        "name": "景德镇市",
+        "area": [
+          "珠山区",
+          "昌江区",
+          "乐平市",
+          "浮梁县"
+        ]
+      },
+      {
+        "name": "萍乡市",
+        "area": [
+          "安源区",
+          "湘东区",
+          "莲花县",
+          "上栗县",
+          "芦溪县"
+        ]
+      },
+      {
+        "name": "九江市",
+        "area": [
+          "浔阳区",
+          "庐山区",
+          "瑞昌市",
+          "九江县",
+          "星子县",
+          "武宁县",
+          "彭泽县",
+          "永修县",
+          "修水县",
+          "湖口县",
+          "德安县",
+          "都昌县"
+        ]
+      },
+      {
+        "name": "新余市",
+        "area": [
+          "渝水区",
+          "分宜县"
+        ]
+      },
+      {
+        "name": "鹰潭市",
+        "area": [
+          "月湖区",
+          "贵溪市",
+          "余江县"
+        ]
+      },
+      {
+        "name": "赣州市",
+        "area": [
+          "章贡区",
+          "瑞金市",
+          "南康市",
+          "石城县",
+          "安远县",
+          "赣县",
+          "宁都县",
+          "寻乌县",
+          "兴国县",
+          "定南县",
+          "上犹县",
+          "于都县",
+          "龙南县",
+          "崇义县",
+          "信丰县",
+          "全南县",
+          "大余县",
+          "会昌县"
+        ]
+      },
+      {
+        "name": "吉安市",
+        "area": [
+          "吉州区",
+          "青原区",
+          "井冈山市",
+          "吉安县",
+          "永丰县",
+          "永新县",
+          "新干县",
+          "泰和县",
+          "峡江县",
+          "遂川县",
+          "安福县",
+          "吉水县",
+          "万安县"
+        ]
+      },
+      {
+        "name": "宜春市",
+        "area": [
+          "袁州区",
+          "丰城市",
+          "樟树市",
+          "高安市",
+          "铜鼓县",
+          "靖安县",
+          "宜丰县",
+          "奉新县",
+          "万载县",
+          "上高县"
+        ]
+      },
+      {
+        "name": "抚州市",
+        "area": [
+          "临川区",
+          "南丰县",
+          "乐安县",
+          "金溪县",
+          "南城县",
+          "东乡县",
+          "资溪县",
+          "宜黄县",
+          "广昌县",
+          "黎川县",
+          "崇仁县"
+        ]
+      },
+      {
+        "name": "上饶市",
+        "area": [
+          "信州区",
+          "德兴市",
+          "上饶县",
+          "广丰县",
+          "鄱阳县",
+          "婺源县",
+          "铅山县",
+          "余干县",
+          "横峰县",
+          "弋阳县",
+          "玉山县",
+          "万年县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "山东省",
+    "city": [
+      {
+        "name": "济南市",
+        "area": [
+          "市中区",
+          "历下区",
+          "天桥区",
+          "槐荫区",
+          "历城区",
+          "长清区",
+          "章丘市",
+          "平阴县",
+          "济阳县",
+          "商河县"
+        ]
+      },
+      {
+        "name": "青岛市",
+        "area": [
+          "市南区",
+          "市北区",
+          "城阳区",
+          "四方区",
+          "李沧区",
+          "黄岛区",
+          "崂山区",
+          "胶南市",
+          "胶州市",
+          "平度市",
+          "莱西市",
+          "即墨市"
+        ]
+      },
+      {
+        "name": "淄博市",
+        "area": [
+          "张店区",
+          "临淄区",
+          "淄川区",
+          "博山区",
+          "周村区",
+          "桓台县",
+          "高青县",
+          "沂源县"
+        ]
+      },
+      {
+        "name": "枣庄市",
+        "area": [
+          "市中区",
+          "山亭区",
+          "峄城区",
+          "台儿庄区",
+          "薛城区",
+          "滕州市"
+        ]
+      },
+      {
+        "name": "东营市",
+        "area": [
+          "东营区",
+          "河口区",
+          "垦利县",
+          "广饶县",
+          "利津县"
+        ]
+      },
+      {
+        "name": "烟台市",
+        "area": [
+          "芝罘区",
+          "福山区",
+          "牟平区",
+          "莱山区",
+          "龙口市",
+          "莱阳市",
+          "莱州市",
+          "招远市",
+          "蓬莱市",
+          "栖霞市",
+          "海阳市",
+          "长岛县"
+        ]
+      },
+      {
+        "name": "潍坊市",
+        "area": [
+          "潍城区",
+          "寒亭区",
+          "坊子区",
+          "奎文区",
+          "青州市",
+          "诸城市",
+          "寿光市",
+          "安丘市",
+          "高密市",
+          "昌邑市",
+          "昌乐县",
+          "临朐县"
+        ]
+      },
+      {
+        "name": "济宁市",
+        "area": [
+          "市中区",
+          "任城区",
+          "曲阜市",
+          "兖州市",
+          "邹城市",
+          "鱼台县",
+          "金乡县",
+          "嘉祥县",
+          "微山县",
+          "汶上县",
+          "泗水县",
+          "梁山县"
+        ]
+      },
+      {
+        "name": "泰安市",
+        "area": [
+          "泰山区",
+          "岱岳区",
+          "新泰市",
+          "肥城市",
+          "宁阳县",
+          "东平县"
+        ]
+      },
+      {
+        "name": "威海市",
+        "area": [
+          "环翠区",
+          "乳山市",
+          "文登市",
+          "荣成市"
+        ]
+      },
+      {
+        "name": "日照市",
+        "area": [
+          "东港区",
+          "岚山区",
+          "五莲县",
+          "莒县"
+        ]
+      },
+      {
+        "name": "莱芜市",
+        "area": [
+          "莱城区",
+          "钢城区"
+        ]
+      },
+      {
+        "name": "临沂市",
+        "area": [
+          "兰山区",
+          "罗庄区",
+          "河东区",
+          "沂南县",
+          "郯城县",
+          "沂水县",
+          "苍山县",
+          "费县",
+          "平邑县",
+          "莒南县",
+          "蒙阴县",
+          "临沭县"
+        ]
+      },
+      {
+        "name": "德州市",
+        "area": [
+          "德城区",
+          "乐陵市",
+          "禹城市",
+          "陵县",
+          "宁津县",
+          "齐河县",
+          "武城县",
+          "庆云县",
+          "平原县",
+          "夏津县",
+          "临邑县"
+        ]
+      },
+      {
+        "name": "聊城市",
+        "area": [
+          "东昌府区",
+          "临清市",
+          "高唐县",
+          "阳谷县",
+          "茌平县",
+          "莘县",
+          "东阿县",
+          "冠县"
+        ]
+      },
+      {
+        "name": "滨州市",
+        "area": [
+          "滨城区",
+          "邹平县",
+          "沾化县",
+          "惠民县",
+          "博兴县",
+          "阳信县",
+          "无棣县"
+        ]
+      },
+      {
+        "name": "菏泽市",
+        "area": [
+          "牡丹区",
+          "鄄城县",
+          "单县",
+          "郓城县",
+          "曹县",
+          "定陶县",
+          "巨野县",
+          "东明县",
+          "成武县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "河南省",
+    "city": [
+      {
+        "name": "郑州市",
+        "area": [
+          "中原区",
+          "金水区",
+          "二七区",
+          "管城回族区",
+          "上街区",
+          "惠济区",
+          "巩义市",
+          "新郑市",
+          "新密市",
+          "登封市",
+          "荥阳市",
+          "中牟县"
+        ]
+      },
+      {
+        "name": "开封市",
+        "area": [
+          "鼓楼区",
+          "龙亭区",
+          "顺河回族区",
+          "禹王台区",
+          "金明区",
+          "开封县",
+          "尉氏县",
+          "兰考县",
+          "杞县",
+          "通许县"
+        ]
+      },
+      {
+        "name": "洛阳市",
+        "area": [
+          "西工区",
+          "老城区",
+          "涧西区",
+          "瀍河回族区",
+          "洛龙区",
+          "吉利区",
+          "偃师市",
+          "孟津县",
+          "汝阳县",
+          "伊川县",
+          "洛宁县",
+          "嵩县",
+          "宜阳县",
+          "新安县",
+          "栾川县"
+        ]
+      },
+      {
+        "name": "平顶山市",
+        "area": [
+          "新华区",
+          "卫东区",
+          "湛河区",
+          "石龙区",
+          "汝州市",
+          "舞钢市",
+          "宝丰县",
+          "叶县",
+          "郏县",
+          "鲁山县"
+        ]
+      },
+      {
+        "name": "安阳市",
+        "area": [
+          "北关区",
+          "文峰区",
+          "殷都区",
+          "龙安区",
+          "林州市",
+          "安阳县",
+          "滑县",
+          "内黄县",
+          "汤阴县"
+        ]
+      },
+      {
+        "name": "鹤壁市",
+        "area": [
+          "淇滨区",
+          "山城区",
+          "鹤山区",
+          "浚县",
+          "淇县"
+        ]
+      },
+      {
+        "name": "新乡市",
+        "area": [
+          "卫滨区",
+          "红旗区",
+          "凤泉区",
+          "牧野区",
+          "卫辉市",
+          "辉县市",
+          "新乡县",
+          "获嘉县",
+          "原阳县",
+          "长垣县",
+          "封丘县",
+          "延津县"
+        ]
+      },
+      {
+        "name": "焦作市",
+        "area": [
+          "解放区",
+          "中站区",
+          "马村区",
+          "山阳区",
+          "沁阳市",
+          "孟州市",
+          "修武县",
+          "温县",
+          "武陟县",
+          "博爱县"
+        ]
+      },
+      {
+        "name": "濮阳市",
+        "area": [
+          "华龙区",
+          "濮阳县",
+          "南乐县",
+          "台前县",
+          "清丰县",
+          "范县"
+        ]
+      },
+      {
+        "name": "许昌市",
+        "area": [
+          "魏都区",
+          "禹州市",
+          "长葛市",
+          "许昌县",
+          "鄢陵县",
+          "襄城县"
+        ]
+      },
+      {
+        "name": "漯河市",
+        "area": [
+          "源汇区",
+          "郾城区",
+          "召陵区",
+          "临颍县",
+          "舞阳县"
+        ]
+      },
+      {
+        "name": "三门峡市",
+        "area": [
+          "湖滨区",
+          "义马市",
+          "灵宝市",
+          "渑池县",
+          "卢氏县",
+          "陕县"
+        ]
+      },
+      {
+        "name": "南阳市",
+        "area": [
+          "卧龙区",
+          "宛城区",
+          "邓州市",
+          "桐柏县",
+          "方城县",
+          "淅川县",
+          "镇平县",
+          "唐河县",
+          "南召县",
+          "内乡县",
+          "新野县",
+          "社旗县",
+          "西峡县"
+        ]
+      },
+      {
+        "name": "商丘市",
+        "area": [
+          "梁园区",
+          "睢阳区",
+          "永城市",
+          "宁陵县",
+          "虞城县",
+          "民权县",
+          "夏邑县",
+          "柘城县",
+          "睢县"
+        ]
+      },
+      {
+        "name": "信阳市",
+        "area": [
+          "浉河区",
+          "平桥区",
+          "潢川县",
+          "淮滨县",
+          "息县",
+          "新县",
+          "商城县",
+          "固始县",
+          "罗山县",
+          "光山县"
+        ]
+      },
+      {
+        "name": "周口市",
+        "area": [
+          "川汇区",
+          "项城市",
+          "商水县",
+          "淮阳县",
+          "太康县",
+          "鹿邑县",
+          "西华县",
+          "扶沟县",
+          "沈丘县",
+          "郸城县"
+        ]
+      },
+      {
+        "name": "驻马店市",
+        "area": [
+          "驿城区",
+          "确山县",
+          "新蔡县",
+          "上蔡县",
+          "西平县",
+          "泌阳县",
+          "平舆县",
+          "汝南县",
+          "遂平县",
+          "正阳县"
+        ]
+      },
+      {
+        "name": "焦作市",
+        "area": [
+          "济源市"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "湖北省",
+    "city": [
+      {
+        "name": "武汉市",
+        "area": [
+          "江岸区",
+          "武昌区",
+          "江汉区",
+          "硚口区",
+          "汉阳区",
+          "青山区",
+          "洪山区",
+          "东西湖区",
+          "汉南区",
+          "蔡甸区",
+          "江夏区",
+          "黄陂区",
+          "新洲区"
+        ]
+      },
+      {
+        "name": "黄石市",
+        "area": [
+          "黄石港区",
+          "西塞山区",
+          "下陆区",
+          "铁山区",
+          "大冶市",
+          "阳新县"
+        ]
+      },
+      {
+        "name": "十堰市",
+        "area": [
+          "张湾区",
+          "茅箭区",
+          "丹江口市",
+          "郧县",
+          "竹山县",
+          "房县",
+          "郧西县",
+          "竹溪县"
+        ]
+      },
+      {
+        "name": "荆州市",
+        "area": [
+          "沙市区",
+          "荆州区",
+          "洪湖市",
+          "石首市",
+          "松滋市",
+          "监利县",
+          "公安县",
+          "江陵县"
+        ]
+      },
+      {
+        "name": "宜昌市",
+        "area": [
+          "西陵区",
+          "伍家岗区",
+          "点军区",
+          "猇亭区",
+          "夷陵区",
+          "宜都市",
+          "当阳市",
+          "枝江市",
+          "秭归县",
+          "远安县",
+          "兴山县",
+          "五峰土家族自治县",
+          "长阳土家族自治县"
+        ]
+      },
+      {
+        "name": "襄樊市",
+        "area": [
+          "襄城区",
+          "樊城区",
+          "襄阳区",
+          "老河口市",
+          "枣阳市",
+          "宜城市",
+          "南漳县",
+          "谷城县",
+          "保康县"
+        ]
+      },
+      {
+        "name": "鄂州市",
+        "area": [
+          "鄂城区",
+          "华容区",
+          "梁子湖区"
+        ]
+      },
+      {
+        "name": "荆门市",
+        "area": [
+          "东宝区",
+          "掇刀区",
+          "钟祥市",
+          "京山县",
+          "沙洋县"
+        ]
+      },
+      {
+        "name": "孝感市",
+        "area": [
+          "孝南区",
+          "应城市",
+          "安陆市",
+          "汉川市",
+          "云梦县",
+          "大悟县",
+          "孝昌县"
+        ]
+      },
+      {
+        "name": "黄冈市",
+        "area": [
+          "黄州区",
+          "麻城市",
+          "武穴市",
+          "红安县",
+          "罗田县",
+          "浠水县",
+          "蕲春县",
+          "黄梅县",
+          "英山县",
+          "团风县"
+        ]
+      },
+      {
+        "name": "咸宁市",
+        "area": [
+          "咸安区",
+          "赤壁市",
+          "嘉鱼县",
+          "通山县",
+          "崇阳县",
+          "通城县"
+        ]
+      },
+      {
+        "name": "随州市",
+        "area": [
+          "曾都区",
+          "广水市"
+        ]
+      },
+      {
+        "name": "恩施土家族苗族自治州",
+        "area": [
+          "恩施市",
+          "利川市",
+          "建始县",
+          "来凤县",
+          "巴东县",
+          "鹤峰县",
+          "宣恩县",
+          "咸丰县"
+        ]
+      },
+      {
+        "name": "仙桃市",
+        "area": [
+          "仙桃"
+        ]
+      },
+      {
+        "name": "天门市",
+        "area": [
+          "天门"
+        ]
+      },
+      {
+        "name": "潜江市",
+        "area": [
+          "潜江"
+        ]
+      },
+      {
+        "name": "神农架林区",
+        "area": [
+          "神农架林区"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "湖南省",
+    "city": [
+      {
+        "name": "长沙市",
+        "area": [
+          "岳麓区",
+          "芙蓉区",
+          "天心区",
+          "开福区",
+          "雨花区",
+          "浏阳市",
+          "长沙县",
+          "望城县",
+          "宁乡县"
+        ]
+      },
+      {
+        "name": "株洲市",
+        "area": [
+          "天元区",
+          "荷塘区",
+          "芦淞区",
+          "石峰区",
+          "醴陵市",
+          "株洲县",
+          "炎陵县",
+          "茶陵县",
+          "攸县"
+        ]
+      },
+      {
+        "name": "湘潭市",
+        "area": [
+          "岳塘区",
+          "雨湖区",
+          "湘乡市",
+          "韶山市",
+          "湘潭县"
+        ]
+      },
+      {
+        "name": "衡阳市",
+        "area": [
+          "雁峰区",
+          "珠晖区",
+          "石鼓区",
+          "蒸湘区",
+          "南岳区",
+          "耒阳市",
+          "常宁市",
+          "衡阳县",
+          "衡东县",
+          "衡山县",
+          "衡南县",
+          "祁东县"
+        ]
+      },
+      {
+        "name": "邵阳市",
+        "area": [
+          "双清区",
+          "大祥区",
+          "北塔区",
+          "武冈市",
+          "邵东县",
+          "洞口县",
+          "新邵县",
+          "绥宁县",
+          "新宁县",
+          "邵阳县",
+          "隆回县",
+          "城步苗族自治县"
+        ]
+      },
+      {
+        "name": "岳阳市",
+        "area": [
+          "岳阳楼区",
+          "云溪区",
+          "君山区",
+          "临湘市",
+          "汨罗市",
+          "岳阳县",
+          "湘阴县",
+          "平江县",
+          "华容县"
+        ]
+      },
+      {
+        "name": "常德市",
+        "area": [
+          "武陵区",
+          "鼎城区",
+          "津市市",
+          "澧县",
+          "临澧县",
+          "桃源县",
+          "汉寿县",
+          "安乡县",
+          "石门县"
+        ]
+      },
+      {
+        "name": "张家界市",
+        "area": [
+          "永定区",
+          "武陵源区",
+          "慈利县",
+          "桑植县"
+        ]
+      },
+      {
+        "name": "益阳市",
+        "area": [
+          "赫山区",
+          "资阳区",
+          "沅江市",
+          "桃江县",
+          "南县",
+          "安化县"
+        ]
+      },
+      {
+        "name": "郴州市",
+        "area": [
+          "北湖区",
+          "苏仙区",
+          "资兴市",
+          "宜章县",
+          "汝城县",
+          "安仁县",
+          "嘉禾县",
+          "临武县",
+          "桂东县",
+          "永兴县",
+          "桂阳县"
+        ]
+      },
+      {
+        "name": "永州市",
+        "area": [
+          "冷水滩区",
+          "零陵区",
+          "祁阳县",
+          "蓝山县",
+          "宁远县",
+          "新田县",
+          "东安县",
+          "江永县",
+          "道县",
+          "双牌县",
+          "江华瑶族自治县"
+        ]
+      },
+      {
+        "name": "怀化市",
+        "area": [
+          "鹤城区",
+          "洪江市",
+          "会同县",
+          "沅陵县",
+          "辰溪县",
+          "溆浦县",
+          "中方县",
+          "新晃侗族自治县",
+          "芷江侗族自治县",
+          "通道侗族自治县",
+          "靖州苗族侗族自治县",
+          "麻阳苗族自治县"
+        ]
+      },
+      {
+        "name": "娄底市",
+        "area": [
+          "娄星区",
+          "冷水江市",
+          "涟源市",
+          "新化县",
+          "双峰县"
+        ]
+      },
+      {
+        "name": "湘西土家族苗族自治州",
+        "area": [
+          "吉首市",
+          "古丈县",
+          "龙山县",
+          "永顺县",
+          "凤凰县",
+          "泸溪县",
+          "保靖县",
+          "花垣县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "广东省",
+    "city": [
+      {
+        "name": "广州市",
+        "area": [
+          "越秀区",
+          "荔湾区",
+          "海珠区",
+          "天河区",
+          "白云区",
+          "黄埔区",
+          "番禺区",
+          "花都区",
+          "南沙区",
+          "萝岗区",
+          "增城市",
+          "从化市"
+        ]
+      },
+      {
+        "name": "深圳市",
+        "area": [
+          "福田区",
+          "罗湖区",
+          "南山区",
+          "宝安区",
+          "龙岗区",
+          "盐田区"
+        ]
+      },
+      {
+        "name": "东莞市",
+        "area": [
+          "莞城",
+          "常平",
+          "塘厦",
+          "塘厦",
+          "塘厦"
+        ]
+      },
+      {
+        "name": "中山市",
+        "area": [
+          "中山"
+        ]
+      },
+      {
+        "name": "潮州市",
+        "area": [
+          "湘桥区",
+          "潮安县",
+          "饶平县"
+        ]
+      },
+      {
+        "name": "揭阳市",
+        "area": [
+          "榕城区",
+          "揭东县",
+          "揭西县",
+          "惠来县",
+          "普宁市"
+        ]
+      },
+      {
+        "name": "云浮市",
+        "area": [
+          "云城区",
+          "新兴县",
+          "郁南县",
+          "云安县",
+          "罗定市"
+        ]
+      },
+      {
+        "name": "珠海市",
+        "area": [
+          "香洲区",
+          "斗门区",
+          "金湾区"
+        ]
+      },
+      {
+        "name": "汕头市",
+        "area": [
+          "金平区",
+          "濠江区",
+          "龙湖区",
+          "潮阳区",
+          "潮南区",
+          "澄海区",
+          "南澳县"
+        ]
+      },
+      {
+        "name": "韶关市",
+        "area": [
+          "浈江区",
+          "武江区",
+          "曲江区",
+          "乐昌市",
+          "南雄市",
+          "始兴县",
+          "仁化县",
+          "翁源县",
+          "新丰县",
+          "乳源瑶族自治县"
+        ]
+      },
+      {
+        "name": "佛山市",
+        "area": [
+          "禅城区",
+          "南海区",
+          "顺德区",
+          "三水区",
+          "高明区"
+        ]
+      },
+      {
+        "name": "江门市",
+        "area": [
+          "蓬江区",
+          "江海区",
+          "新会区",
+          "恩平市",
+          "台山市",
+          "开平市",
+          "鹤山市"
+        ]
+      },
+      {
+        "name": "湛江市",
+        "area": [
+          "赤坎区",
+          "霞山区",
+          "坡头区",
+          "麻章区",
+          "吴川市",
+          "廉江市",
+          "雷州市",
+          "遂溪县",
+          "徐闻县"
+        ]
+      },
+      {
+        "name": "茂名市",
+        "area": [
+          "茂南区",
+          "茂港区",
+          "化州市",
+          "信宜市",
+          "高州市",
+          "电白县"
+        ]
+      },
+      {
+        "name": "肇庆市",
+        "area": [
+          "端州区",
+          "鼎湖区",
+          "高要市",
+          "四会市",
+          "广宁县",
+          "怀集县",
+          "封开县",
+          "德庆县"
+        ]
+      },
+      {
+        "name": "惠州市",
+        "area": [
+          "惠城区",
+          "惠阳区",
+          "博罗县",
+          "惠东县",
+          "龙门县"
+        ]
+      },
+      {
+        "name": "梅州市",
+        "area": [
+          "梅江区",
+          "兴宁市",
+          "梅县",
+          "大埔县",
+          "丰顺县",
+          "五华县",
+          "平远县",
+          "蕉岭县"
+        ]
+      },
+      {
+        "name": "汕尾市",
+        "area": [
+          "城区",
+          "陆丰市",
+          "海丰县",
+          "陆河县"
+        ]
+      },
+      {
+        "name": "河源市",
+        "area": [
+          "源城区",
+          "紫金县",
+          "龙川县",
+          "连平县",
+          "和平县",
+          "东源县"
+        ]
+      },
+      {
+        "name": "阳江市",
+        "area": [
+          "江城区",
+          "阳春市",
+          "阳西县",
+          "阳东县"
+        ]
+      },
+      {
+        "name": "清远市",
+        "area": [
+          "清城区",
+          "英德市",
+          "连州市",
+          "佛冈县",
+          "阳山县",
+          "清新县",
+          "连山壮族瑶族自治县",
+          "连南瑶族自治县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "广西",
+    "city": [
+      {
+        "name": "南宁市",
+        "area": [
+          "青秀区",
+          "兴宁区",
+          "西乡塘区",
+          "良庆区",
+          "江南区",
+          "邕宁区",
+          "武鸣县",
+          "隆安县",
+          "马山县",
+          "上林县",
+          "宾阳县",
+          "横县"
+        ]
+      },
+      {
+        "name": "柳州市",
+        "area": [
+          "城中区",
+          "鱼峰区",
+          "柳北区",
+          "柳南区",
+          "柳江县",
+          "柳城县",
+          "鹿寨县",
+          "融安县",
+          "融水苗族自治县",
+          "三江侗族自治县"
+        ]
+      },
+      {
+        "name": "桂林市",
+        "area": [
+          "象山区",
+          "秀峰区",
+          "叠彩区",
+          "七星区",
+          "雁山区",
+          "阳朔县",
+          "临桂县",
+          "灵川县",
+          "全州县",
+          "平乐县",
+          "兴安县",
+          "灌阳县",
+          "荔浦县",
+          "资源县",
+          "永福县",
+          "龙胜各族自治县",
+          "恭城瑶族自治县"
+        ]
+      },
+      {
+        "name": "梧州市",
+        "area": [
+          "万秀区",
+          "蝶山区",
+          "长洲区",
+          "岑溪市",
+          "苍梧县",
+          "藤县",
+          "蒙山县"
+        ]
+      },
+      {
+        "name": "北海市",
+        "area": [
+          "海城区",
+          "银海区",
+          "铁山港区",
+          "合浦县"
+        ]
+      },
+      {
+        "name": "防城港市",
+        "area": [
+          "港口区",
+          "防城区",
+          "东兴市",
+          "上思县"
+        ]
+      },
+      {
+        "name": "钦州市",
+        "area": [
+          "钦南区",
+          "钦北区",
+          "灵山县",
+          "浦北县"
+        ]
+      },
+      {
+        "name": "贵港市",
+        "area": [
+          "港北区",
+          "港南区",
+          "覃塘区",
+          "桂平市",
+          "平南县"
+        ]
+      },
+      {
+        "name": "玉林市",
+        "area": [
+          "玉州区",
+          "北流市",
+          "容县",
+          "陆川县",
+          "博白县",
+          "兴业县"
+        ]
+      },
+      {
+        "name": "百色市",
+        "area": [
+          "右江区",
+          "凌云县",
+          "平果县",
+          "西林县",
+          "乐业县",
+          "德保县",
+          "田林县",
+          "田阳县",
+          "靖西县",
+          "田东县",
+          "那坡县",
+          "隆林各族自治县"
+        ]
+      },
+      {
+        "name": "贺州市",
+        "area": [
+          "八步区",
+          "钟山县",
+          "昭平县",
+          "富川瑶族自治县"
+        ]
+      },
+      {
+        "name": "河池市",
+        "area": [
+          "金城江区",
+          "宜州市",
+          "天峨县",
+          "凤山县",
+          "南丹县",
+          "东兰县",
+          "都安瑶族自治县",
+          "罗城仫佬族自治县",
+          "巴马瑶族自治县",
+          "环江毛南族自治县",
+          "大化瑶族自治县"
+        ]
+      },
+      {
+        "name": "来宾市",
+        "area": [
+          "兴宾区",
+          "合山市",
+          "象州县",
+          "武宣县",
+          "忻城县",
+          "金秀瑶族自治县"
+        ]
+      },
+      {
+        "name": "崇左市",
+        "area": [
+          "江州区",
+          "凭祥市",
+          "宁明县",
+          "扶绥县",
+          "龙州县",
+          "大新县",
+          "天等县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "海南省",
+    "city": [
+      {
+        "name": "海口市",
+        "area": [
+          "龙华区",
+          "秀英区",
+          "琼山区",
+          "美兰区"
+        ]
+      },
+      {
+        "name": "三亚市",
+        "area": [
+          "三亚市"
+        ]
+      },
+      {
+        "name": "五指山市",
+        "area": [
+          "五指山"
+        ]
+      },
+      {
+        "name": "琼海市",
+        "area": [
+          "琼海"
+        ]
+      },
+      {
+        "name": "儋州市",
+        "area": [
+          "儋州"
+        ]
+      },
+      {
+        "name": "文昌市",
+        "area": [
+          "文昌"
+        ]
+      },
+      {
+        "name": "万宁市",
+        "area": [
+          "万宁"
+        ]
+      },
+      {
+        "name": "东方市",
+        "area": [
+          "东方"
+        ]
+      },
+      {
+        "name": "澄迈县",
+        "area": [
+          "澄迈县"
+        ]
+      },
+      {
+        "name": "定安县",
+        "area": [
+          "定安县"
+        ]
+      },
+      {
+        "name": "屯昌县",
+        "area": [
+          "屯昌县"
+        ]
+      },
+      {
+        "name": "临高县",
+        "area": [
+          "临高县"
+        ]
+      },
+      {
+        "name": "白沙黎族自治县",
+        "area": [
+          "白沙黎族自治县"
+        ]
+      },
+      {
+        "name": "昌江黎族自治县",
+        "area": [
+          "昌江黎族自治县"
+        ]
+      },
+      {
+        "name": "乐东黎族自治县",
+        "area": [
+          "乐东黎族自治县"
+        ]
+      },
+      {
+        "name": "陵水黎族自治县",
+        "area": [
+          "陵水黎族自治县"
+        ]
+      },
+      {
+        "name": "保亭黎族苗族自治县",
+        "area": [
+          "保亭黎族苗族自治县"
+        ]
+      },
+      {
+        "name": "琼中黎族苗族自治县",
+        "area": [
+          "琼中黎族苗族自治县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "重庆市",
+    "city": [
+      {
+        "name": "重庆市",
+        "area": [
+          "渝中区",
+          "大渡口区",
+          "江北区",
+          "南岸区",
+          "北碚区",
+          "渝北区",
+          "巴南区",
+          "长寿区",
+          "双桥区",
+          "沙坪坝区",
+          "万盛区",
+          "万州区",
+          "涪陵区",
+          "黔江区",
+          "永川区",
+          "合川区",
+          "江津区",
+          "九龙坡区",
+          "南川区",
+          "綦江县",
+          "潼南县",
+          "荣昌县",
+          "璧山县",
+          "大足县",
+          "铜梁县",
+          "梁平县",
+          "开县",
+          "忠县",
+          "城口县",
+          "垫江县",
+          "武隆县",
+          "丰都县",
+          "奉节县",
+          "云阳县",
+          "巫溪县",
+          "巫山县",
+          "石柱土家族自治县",
+          "秀山土家族苗族自治县",
+          "酉阳土家族苗族自治县",
+          "彭水苗族土家族自治县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "四川省",
+    "city": [
+      {
+        "name": "成都市",
+        "area": [
+          "青羊区",
+          "锦江区",
+          "金牛区",
+          "武侯区",
+          "成华区",
+          "龙泉驿区",
+          "青白江区",
+          "新都区",
+          "温江区",
+          "都江堰市",
+          "彭州市",
+          "邛崃市",
+          "崇州市",
+          "金堂县",
+          "郫县",
+          "新津县",
+          "双流县",
+          "蒲江县",
+          "大邑县"
+        ]
+      },
+      {
+        "name": "自贡市",
+        "area": [
+          "大安区",
+          "自流井区",
+          "贡井区",
+          "沿滩区",
+          "荣县",
+          "富顺县"
+        ]
+      },
+      {
+        "name": "攀枝花市",
+        "area": [
+          "仁和区",
+          "米易县",
+          "盐边县",
+          "东区",
+          "西区"
+        ]
+      },
+      {
+        "name": "泸州市",
+        "area": [
+          "江阳区",
+          "纳溪区",
+          "龙马潭区",
+          "泸县",
+          "合江县",
+          "叙永县",
+          "古蔺县"
+        ]
+      },
+      {
+        "name": "德阳市",
+        "area": [
+          "旌阳区",
+          "广汉市",
+          "什邡市",
+          "绵竹市",
+          "罗江县",
+          "中江县"
+        ]
+      },
+      {
+        "name": "绵阳市",
+        "area": [
+          "涪城区",
+          "游仙区",
+          "江油市",
+          "盐亭县",
+          "三台县",
+          "平武县",
+          "安县",
+          "梓潼县",
+          "北川羌族自治县"
+        ]
+      },
+      {
+        "name": "广元市",
+        "area": [
+          "元坝区",
+          "朝天区",
+          "青川县",
+          "旺苍县",
+          "剑阁县",
+          "苍溪县",
+          "市中区"
+        ]
+      },
+      {
+        "name": "遂宁市",
+        "area": [
+          "船山区",
+          "安居区",
+          "射洪县",
+          "蓬溪县",
+          "大英县"
+        ]
+      },
+      {
+        "name": "内江市",
+        "area": [
+          "市中区",
+          "东兴区",
+          "资中县",
+          "隆昌县",
+          "威远县"
+        ]
+      },
+      {
+        "name": "乐山市",
+        "area": [
+          "市中区",
+          "五通桥区",
+          "沙湾区",
+          "金口河区",
+          "峨眉山市",
+          "夹江县",
+          "井研县",
+          "犍为县",
+          "沐川县",
+          "马边彝族自治县",
+          "峨边彝族自治县"
+        ]
+      },
+      {
+        "name": "南充",
+        "area": [
+          "顺庆区",
+          "高坪区",
+          "嘉陵区",
+          "阆中市",
+          "营山县",
+          "蓬安县",
+          "仪陇县",
+          "南部县",
+          "西充县"
+        ]
+      },
+      {
+        "name": "眉山市",
+        "area": [
+          "东坡区",
+          "仁寿县",
+          "彭山县",
+          "洪雅县",
+          "丹棱县",
+          "青神县"
+        ]
+      },
+      {
+        "name": "宜宾市",
+        "area": [
+          "翠屏区",
+          "宜宾县",
+          "兴文县",
+          "南溪县",
+          "珙县",
+          "长宁县",
+          "高县",
+          "江安县",
+          "筠连县",
+          "屏山县"
+        ]
+      },
+      {
+        "name": "广安市",
+        "area": [
+          "广安区",
+          "华蓥市",
+          "岳池县",
+          "邻水县",
+          "武胜县"
+        ]
+      },
+      {
+        "name": "达州市",
+        "area": [
+          "通川区",
+          "万源市",
+          "达县",
+          "渠县",
+          "宣汉县",
+          "开江县",
+          "大竹县"
+        ]
+      },
+      {
+        "name": "雅安市",
+        "area": [
+          "雨城区",
+          "芦山县",
+          "石棉县",
+          "名山县",
+          "天全县",
+          "荥经县",
+          "宝兴县",
+          "汉源县"
+        ]
+      },
+      {
+        "name": "巴中市",
+        "area": [
+          "巴州区",
+          "南江县",
+          "平昌县",
+          "通江县"
+        ]
+      },
+      {
+        "name": "资阳市",
+        "area": [
+          "雁江区",
+          "简阳市",
+          "安岳县",
+          "乐至县"
+        ]
+      },
+      {
+        "name": "阿坝藏族羌族自治州",
+        "area": [
+          "马尔康县",
+          "九寨沟县",
+          "红原县",
+          "汶川县",
+          "阿坝县",
+          "理县",
+          "若尔盖县",
+          "小金县",
+          "黑水县",
+          "金川县",
+          "松潘县",
+          "壤塘县",
+          "茂县"
+        ]
+      },
+      {
+        "name": "甘孜藏族自治州",
+        "area": [
+          "康定县",
+          "丹巴县",
+          "炉霍县",
+          "九龙县",
+          "甘孜县",
+          "雅江县",
+          "新龙县",
+          "道孚县",
+          "白玉县",
+          "理塘县",
+          "德格县",
+          "乡城县",
+          "石渠县",
+          "稻城县",
+          "色达县",
+          "巴塘县",
+          "泸定县",
+          "得荣县"
+        ]
+      },
+      {
+        "name": "凉山彝族自治州",
+        "area": [
+          "西昌市",
+          "美姑县",
+          "昭觉县",
+          "金阳县",
+          "甘洛县",
+          "布拖县",
+          "雷波县",
+          "普格县",
+          "宁南县",
+          "喜德县",
+          "会东县",
+          "越西县",
+          "会理县",
+          "盐源县",
+          "德昌县",
+          "冕宁县",
+          "木里藏族自治县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "贵州省",
+    "city": [
+      {
+        "name": "贵阳市",
+        "area": [
+          "南明区",
+          "云岩区",
+          "花溪区",
+          "乌当区",
+          "白云区",
+          "小河区",
+          "清镇市",
+          "开阳县",
+          "修文县",
+          "息烽县"
+        ]
+      },
+      {
+        "name": "六盘水市",
+        "area": [
+          "钟山区",
+          "水城县",
+          "盘县",
+          "六枝特区"
+        ]
+      },
+      {
+        "name": "遵义市",
+        "area": [
+          "红花岗区",
+          "汇川区",
+          "赤水市",
+          "仁怀市",
+          "遵义县",
+          "绥阳县",
+          "桐梓县",
+          "习水县",
+          "凤冈县",
+          "正安县",
+          "余庆县",
+          "湄潭县",
+          "道真仡佬族苗族自治县",
+          "务川仡佬族苗族自治县"
+        ]
+      },
+      {
+        "name": "安顺市",
+        "area": [
+          "西秀区",
+          "普定县",
+          "平坝县",
+          "镇宁布依族苗族自治县",
+          "紫云苗族布依族自治县",
+          "关岭布依族苗族自治县"
+        ]
+      },
+      {
+        "name": "铜仁地区",
+        "area": [
+          "铜仁市",
+          "德江县",
+          "江口县",
+          "思南县",
+          "石阡县",
+          "玉屏侗族自治县",
+          "松桃苗族自治县",
+          "印江土家族苗族自治县",
+          "沿河土家族自治县",
+          "万山特区"
+        ]
+      },
+      {
+        "name": "毕节地区",
+        "area": [
+          "毕节市",
+          "黔西县",
+          "大方县",
+          "织金县",
+          "金沙县",
+          "赫章县",
+          "纳雍县",
+          "威宁彝族回族苗族自治县"
+        ]
+      },
+      {
+        "name": "黔西南布依族苗族自治州",
+        "area": [
+          "兴义市",
+          "望谟县",
+          "兴仁县",
+          "普安县",
+          "册亨县",
+          "晴隆县",
+          "贞丰县",
+          "安龙县"
+        ]
+      },
+      {
+        "name": "黔东南苗族侗族自治州",
+        "area": [
+          "凯里市",
+          "施秉县",
+          "从江县",
+          "锦屏县",
+          "镇远县",
+          "麻江县",
+          "台江县",
+          "天柱县",
+          "黄平县",
+          "榕江县",
+          "剑河县",
+          "三穗县",
+          "雷山县",
+          "黎平县",
+          "岑巩县",
+          "丹寨县"
+        ]
+      },
+      {
+        "name": "黔南布依族苗族自治州",
+        "area": [
+          "都匀市",
+          "福泉市",
+          "贵定县",
+          "惠水县",
+          "罗甸县",
+          "瓮安县",
+          "荔波县",
+          "龙里县",
+          "平塘县",
+          "长顺县",
+          "独山县",
+          "三都水族自治县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "云南省",
+    "city": [
+      {
+        "name": "昆明市",
+        "area": [
+          "盘龙区",
+          "五华区",
+          "官渡区",
+          "西山区",
+          "东川区",
+          "安宁市",
+          "呈贡县",
+          "晋宁县",
+          "富民县",
+          "宜良县",
+          "嵩明县",
+          "石林彝族自治县",
+          "禄劝彝族苗族自治县",
+          "寻甸回族彝族自治县"
+        ]
+      },
+      {
+        "name": "曲靖市",
+        "area": [
+          "麒麟区",
+          "宣威市",
+          "马龙县",
+          "沾益县",
+          "富源县",
+          "罗平县",
+          "师宗县",
+          "陆良县",
+          "会泽县"
+        ]
+      },
+      {
+        "name": "玉溪市",
+        "area": [
+          "红塔区",
+          "江川县",
+          "澄江县",
+          "通海县",
+          "华宁县",
+          "易门县",
+          "峨山彝族自治县",
+          "新平彝族傣族自治县",
+          "元江哈尼族彝族傣族自治县"
+        ]
+      },
+      {
+        "name": "保山市",
+        "area": [
+          "隆阳区",
+          "施甸县",
+          "腾冲县",
+          "龙陵县",
+          "昌宁县"
+        ]
+      },
+      {
+        "name": "昭通市",
+        "area": [
+          "昭阳区",
+          "鲁甸县",
+          "巧家县",
+          "盐津县",
+          "大关县",
+          "永善县",
+          "绥江县",
+          "镇雄县",
+          "彝良县",
+          "威信县",
+          "水富县"
+        ]
+      },
+      {
+        "name": "丽江市",
+        "area": [
+          "古城区",
+          "永胜县",
+          "华坪县",
+          "玉龙纳西族自治县",
+          "宁蒗彝族自治县"
+        ]
+      },
+      {
+        "name": "普洱市",
+        "area": [
+          "思茅区",
+          "普洱哈尼族彝族自治县",
+          "墨江哈尼族自治县",
+          "景东彝族自治县",
+          "景谷傣族彝族自治县",
+          "镇沅彝族哈尼族拉祜族自治县",
+          "江城哈尼族彝族自治县",
+          "孟连傣族拉祜族佤族自治县",
+          "澜沧拉祜族自治县",
+          "西盟佤族自治县"
+        ]
+      },
+      {
+        "name": "临沧市",
+        "area": [
+          "临翔区",
+          "凤庆县",
+          "云县",
+          "永德县",
+          "镇康县",
+          "双江拉祜族佤族布朗族傣族自治县",
+          "耿马傣族佤族自治县",
+          "沧源佤族自治县"
+        ]
+      },
+      {
+        "name": "德宏傣族景颇族自治州",
+        "area": [
+          "潞西市",
+          "瑞丽市",
+          "梁河县",
+          "盈江县",
+          "陇川县"
+        ]
+      },
+      {
+        "name": "怒江傈僳族自治州",
+        "area": [
+          "泸水县",
+          "福贡县",
+          "贡山独龙族怒族自治县",
+          "兰坪白族普米族自治县"
+        ]
+      },
+      {
+        "name": "迪庆藏族自治州",
+        "area": [
+          "香格里拉县",
+          "德钦县",
+          "维西傈僳族自治县"
+        ]
+      },
+      {
+        "name": "大理白族自治州",
+        "area": [
+          "大理市",
+          "祥云县",
+          "宾川县",
+          "弥渡县",
+          "永平县",
+          "云龙县",
+          "洱源县",
+          "剑川县",
+          "鹤庆县",
+          "漾濞彝族自治县",
+          "南涧彝族自治县",
+          "巍山彝族回族自治县"
+        ]
+      },
+      {
+        "name": "楚雄彝族自治州",
+        "area": [
+          "楚雄市",
+          "双柏县",
+          "牟定县",
+          "南华县",
+          "姚安县",
+          "大姚县",
+          "永仁县",
+          "元谋县",
+          "武定县",
+          "禄丰县"
+        ]
+      },
+      {
+        "name": "红河哈尼族彝族自治州",
+        "area": [
+          "蒙自县",
+          "个旧市",
+          "开远市",
+          "绿春县",
+          "建水县",
+          "石屏县",
+          "弥勒县",
+          "泸西县",
+          "元阳县",
+          "红河县",
+          "金平苗族瑶族傣族自治县",
+          "河口瑶族自治县",
+          "屏边苗族自治县"
+        ]
+      },
+      {
+        "name": "文山壮族苗族自治州",
+        "area": [
+          "文山县",
+          "砚山县",
+          "西畴县",
+          "麻栗坡县",
+          "马关县",
+          "丘北县",
+          "广南县",
+          "富宁县"
+        ]
+      },
+      {
+        "name": "西双版纳傣族自治州",
+        "area": [
+          "景洪市",
+          "勐海县",
+          "勐腊县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "西藏",
+    "city": [
+      {
+        "name": "拉萨市",
+        "area": [
+          "城关区",
+          "林周县",
+          "当雄县",
+          "尼木县",
+          "曲水县",
+          "堆龙德庆县",
+          "达孜县",
+          "墨竹工卡县"
+        ]
+      },
+      {
+        "name": "那曲地区",
+        "area": [
+          "那曲县",
+          "嘉黎县",
+          "比如县",
+          "聂荣县",
+          "安多县",
+          "申扎县",
+          "索县",
+          "班戈县",
+          "巴青县",
+          "尼玛县"
+        ]
+      },
+      {
+        "name": "昌都地区",
+        "area": [
+          "昌都县",
+          "江达县",
+          "贡觉县",
+          "类乌齐县",
+          "丁青县",
+          "察雅县",
+          "八宿县",
+          "左贡县",
+          "芒康县",
+          "洛隆县",
+          "边坝县"
+        ]
+      },
+      {
+        "name": "林芝地区",
+        "area": [
+          "林芝县",
+          "工布江达县",
+          "米林县",
+          "墨脱县",
+          "波密县",
+          "察隅县",
+          "朗县"
+        ]
+      },
+      {
+        "name": "山南地区",
+        "area": [
+          "乃东县",
+          "扎囊县",
+          "贡嘎县",
+          "桑日县",
+          "琼结县",
+          "曲松县",
+          "措美县",
+          "洛扎县",
+          "加查县",
+          "隆子县",
+          "错那县",
+          "浪卡子县"
+        ]
+      },
+      {
+        "name": "日喀则地区",
+        "area": [
+          "日喀则市",
+          "南木林县",
+          "江孜县",
+          "定日县",
+          "萨迦县",
+          "拉孜县",
+          "昂仁县",
+          "谢通门县",
+          "白朗县",
+          "仁布县",
+          "康马县",
+          "定结县",
+          "仲巴县",
+          "亚东县",
+          "吉隆县",
+          "聂拉木县",
+          "萨嘎县",
+          "岗巴县"
+        ]
+      },
+      {
+        "name": "阿里地区",
+        "area": [
+          "噶尔县",
+          "普兰县",
+          "札达县",
+          "日土县",
+          "革吉县",
+          "改则县",
+          "措勤县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "陕西省",
+    "city": [
+      {
+        "name": "西安市",
+        "area": [
+          "莲湖区",
+          "新城区",
+          "碑林区",
+          "雁塔区",
+          "灞桥区",
+          "未央区",
+          "阎良区",
+          "临潼区",
+          "长安区",
+          "高陵县",
+          "蓝田县",
+          "户县",
+          "周至县"
+        ]
+      },
+      {
+        "name": "铜川市",
+        "area": [
+          "耀州区",
+          "王益区",
+          "印台区",
+          "宜君县"
+        ]
+      },
+      {
+        "name": "宝鸡市",
+        "area": [
+          "渭滨区",
+          "金台区",
+          "陈仓区",
+          "岐山县",
+          "凤翔县",
+          "陇县",
+          "太白县",
+          "麟游县",
+          "扶风县",
+          "千阳县",
+          "眉县",
+          "凤县"
+        ]
+      },
+      {
+        "name": "咸阳市",
+        "area": [
+          "秦都区",
+          "渭城区",
+          "杨陵区",
+          "兴平市",
+          "礼泉县",
+          "泾阳县",
+          "永寿县",
+          "三原县",
+          "彬县",
+          "旬邑县",
+          "长武县",
+          "乾县",
+          "武功县",
+          "淳化县"
+        ]
+      },
+      {
+        "name": "渭南市",
+        "area": [
+          "临渭区",
+          "韩城市",
+          "华阴市",
+          "蒲城县",
+          "潼关县",
+          "白水县",
+          "澄城县",
+          "华县",
+          "合阳县",
+          "富平县",
+          "大荔县"
+        ]
+      },
+      {
+        "name": "延安市",
+        "area": [
+          "宝塔区",
+          "安塞县",
+          "洛川县",
+          "子长县",
+          "黄陵县",
+          "延川县",
+          "富县",
+          "延长县",
+          "甘泉县",
+          "宜川县",
+          "志丹县",
+          "黄龙县",
+          "吴起县"
+        ]
+      },
+      {
+        "name": "汉中市",
+        "area": [
+          "汉台区",
+          "留坝县",
+          "镇巴县",
+          "城固县",
+          "南郑县",
+          "洋县",
+          "宁强县",
+          "佛坪县",
+          "勉县",
+          "西乡县",
+          "略阳县"
+        ]
+      },
+      {
+        "name": "榆林市",
+        "area": [
+          "榆阳区",
+          "清涧县",
+          "绥德县",
+          "神木县",
+          "佳县",
+          "府谷县",
+          "子洲县",
+          "靖边县",
+          "横山县",
+          "米脂县",
+          "吴堡县",
+          "定边县"
+        ]
+      },
+      {
+        "name": "安康市",
+        "area": [
+          "汉滨区",
+          "紫阳县",
+          "岚皋县",
+          "旬阳县",
+          "镇坪县",
+          "平利县",
+          "石泉县",
+          "宁陕县",
+          "白河县",
+          "汉阴县"
+        ]
+      },
+      {
+        "name": "商洛市",
+        "area": [
+          "商州区",
+          "镇安县",
+          "山阳县",
+          "洛南县",
+          "商南县",
+          "丹凤县",
+          "柞水县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "甘肃省",
+    "city": [
+      {
+        "name": "兰州市",
+        "area": [
+          "城关区",
+          "七里河区",
+          "西固区",
+          "安宁区",
+          "红古区",
+          "永登县",
+          "皋兰县",
+          "榆中县"
+        ]
+      },
+      {
+        "name": "嘉峪关市",
+        "area": [
+          "嘉峪关市"
+        ]
+      },
+      {
+        "name": "金昌市",
+        "area": [
+          "金川区",
+          "永昌县"
+        ]
+      },
+      {
+        "name": "白银市",
+        "area": [
+          "白银区",
+          "平川区",
+          "靖远县",
+          "会宁县",
+          "景泰县"
+        ]
+      },
+      {
+        "name": "天水市",
+        "area": [
+          "清水县",
+          "秦安县",
+          "甘谷县",
+          "武山县",
+          "张家川回族自治县",
+          "北道区",
+          "秦城区"
+        ]
+      },
+      {
+        "name": "武威市",
+        "area": [
+          "凉州区",
+          "民勤县",
+          "古浪县",
+          "天祝藏族自治县"
+        ]
+      },
+      {
+        "name": "酒泉市",
+        "area": [
+          "肃州区",
+          "玉门市",
+          "敦煌市",
+          "金塔县",
+          "肃北蒙古族自治县",
+          "阿克塞哈萨克族自治县",
+          "安西县"
+        ]
+      },
+      {
+        "name": "张掖市",
+        "area": [
+          "甘州区",
+          "民乐县",
+          "临泽县",
+          "高台县",
+          "山丹县",
+          "肃南裕固族自治县"
+        ]
+      },
+      {
+        "name": "庆阳市",
+        "area": [
+          "西峰区",
+          "庆城县",
+          "环县",
+          "华池县",
+          "合水县",
+          "正宁县",
+          "宁县",
+          "镇原县"
+        ]
+      },
+      {
+        "name": "平凉市",
+        "area": [
+          "崆峒区",
+          "泾川县",
+          "灵台县",
+          "崇信县",
+          "华亭县",
+          "庄浪县",
+          "静宁县"
+        ]
+      },
+      {
+        "name": "定西市",
+        "area": [
+          "安定区",
+          "通渭县",
+          "临洮县",
+          "漳县",
+          "岷县",
+          "渭源县",
+          "陇西县"
+        ]
+      },
+      {
+        "name": "陇南市",
+        "area": [
+          "武都区",
+          "成县",
+          "宕昌县",
+          "康县",
+          "文县",
+          "西和县",
+          "礼县",
+          "两当县",
+          "徽县"
+        ]
+      },
+      {
+        "name": "临夏回族自治州",
+        "area": [
+          "临夏市",
+          "临夏县",
+          "康乐县",
+          "永靖县",
+          "广河县",
+          "和政县",
+          "东乡族自治县",
+          "积石山保安族东乡族撒拉族自治县"
+        ]
+      },
+      {
+        "name": "甘南藏族自治州",
+        "area": [
+          "合作市",
+          "临潭县",
+          "卓尼县",
+          "舟曲县",
+          "迭部县",
+          "玛曲县",
+          "碌曲县",
+          "夏河县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "青海省",
+    "city": [
+      {
+        "name": "西宁市",
+        "area": [
+          "城中区",
+          "城东区",
+          "城西区",
+          "城北区",
+          "湟源县",
+          "湟中县",
+          "大通回族土族自治县"
+        ]
+      },
+      {
+        "name": "海东地区",
+        "area": [
+          "平安县",
+          "乐都县",
+          "民和回族土族自治县",
+          "互助土族自治县",
+          "化隆回族自治县",
+          "循化撒拉族自治县"
+        ]
+      },
+      {
+        "name": "海北藏族自治州",
+        "area": [
+          "海晏县",
+          "祁连县",
+          "刚察县",
+          "门源回族自治县"
+        ]
+      },
+      {
+        "name": "海南藏族自治州",
+        "area": [
+          "共和县",
+          "同德县",
+          "贵德县",
+          "兴海县",
+          "贵南县"
+        ]
+      },
+      {
+        "name": "黄南藏族自治州",
+        "area": [
+          "同仁县",
+          "尖扎县",
+          "泽库县",
+          "河南蒙古族自治县"
+        ]
+      },
+      {
+        "name": "果洛藏族自治州",
+        "area": [
+          "玛沁县",
+          "班玛县",
+          "甘德县",
+          "达日县",
+          "久治县",
+          "玛多县"
+        ]
+      },
+      {
+        "name": "玉树藏族自治州",
+        "area": [
+          "玉树县",
+          "杂多县",
+          "称多县",
+          "治多县",
+          "囊谦县",
+          "曲麻莱县"
+        ]
+      },
+      {
+        "name": "海西蒙古族藏族自治州",
+        "area": [
+          "德令哈市",
+          "格尔木市",
+          "乌兰县",
+          "都兰县",
+          "天峻县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "宁夏",
+    "city": [
+      {
+        "name": "银川市",
+        "area": [
+          "兴庆区",
+          "西夏区",
+          "金凤区",
+          "灵武市",
+          "永宁县",
+          "贺兰县"
+        ]
+      },
+      {
+        "name": "石嘴山市",
+        "area": [
+          "大武口区",
+          "惠农区",
+          "平罗县"
+        ]
+      },
+      {
+        "name": "吴忠市",
+        "area": [
+          "利通区",
+          "青铜峡市",
+          "盐池县",
+          "同心县"
+        ]
+      },
+      {
+        "name": "固原市",
+        "area": [
+          "原州区",
+          "西吉县",
+          "隆德县",
+          "泾源县",
+          "彭阳县"
+        ]
+      },
+      {
+        "name": "中卫市",
+        "area": [
+          "沙坡头区",
+          "中宁县",
+          "海原县"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "新疆",
+    "city": [
+      {
+        "name": "乌鲁木齐市",
+        "area": [
+          "天山区",
+          "沙依巴克区",
+          "新市区",
+          "水磨沟区",
+          "头屯河区",
+          "达坂城区",
+          "东山区",
+          "乌鲁木齐县"
+        ]
+      },
+      {
+        "name": "克拉玛依市",
+        "area": [
+          "克拉玛依区",
+          "独山子区",
+          "白碱滩区",
+          "乌尔禾区"
+        ]
+      },
+      {
+        "name": "吐鲁番地区",
+        "area": [
+          "吐鲁番市",
+          "托克逊县",
+          "鄯善县"
+        ]
+      },
+      {
+        "name": "哈密地区",
+        "area": [
+          "哈密市",
+          "伊吾县",
+          "巴里坤哈萨克自治县"
+        ]
+      },
+      {
+        "name": "和田地区",
+        "area": [
+          "和田市",
+          "和田县",
+          "洛浦县",
+          "民丰县",
+          "皮山县",
+          "策勒县",
+          "于田县",
+          "墨玉县"
+        ]
+      },
+      {
+        "name": "阿克苏地区",
+        "area": [
+          "阿克苏市",
+          "温宿县",
+          "沙雅县",
+          "拜城县",
+          "阿瓦提县",
+          "库车县",
+          "柯坪县",
+          "新和县",
+          "乌什县"
+        ]
+      },
+      {
+        "name": "喀什地区",
+        "area": [
+          "喀什市",
+          "巴楚县",
+          "泽普县",
+          "伽师县",
+          "叶城县",
+          "岳普湖县",
+          "疏勒县",
+          "麦盖提县",
+          "英吉沙县",
+          "莎车县",
+          "疏附县",
+          "塔什库尔干塔吉克自治县"
+        ]
+      },
+      {
+        "name": "克孜勒苏柯尔克孜自治州",
+        "area": [
+          "阿图什市",
+          "阿合奇县",
+          "乌恰县",
+          "阿克陶县"
+        ]
+      },
+      {
+        "name": "巴音郭楞蒙古自治州",
+        "area": [
+          "库尔勒市",
+          "和静县",
+          "尉犁县",
+          "和硕县",
+          "且末县",
+          "博湖县",
+          "轮台县",
+          "若羌县",
+          "焉耆回族自治县"
+        ]
+      },
+      {
+        "name": "昌吉回族自治州",
+        "area": [
+          "昌吉市",
+          "阜康市",
+          "奇台县",
+          "玛纳斯县",
+          "吉木萨尔县",
+          "呼图壁县",
+          "木垒哈萨克自治县",
+          "米泉市"
+        ]
+      },
+      {
+        "name": "博尔塔拉蒙古自治州",
+        "area": [
+          "博乐市",
+          "精河县",
+          "温泉县"
+        ]
+      },
+      {
+        "name": "石河子",
+        "area": [
+          "石河子"
+        ]
+      },
+      {
+        "name": "阿拉尔",
+        "area": [
+          "阿拉尔"
+        ]
+      },
+      {
+        "name": "图木舒克",
+        "area": [
+          "图木舒克"
+        ]
+      },
+      {
+        "name": "五家渠",
+        "area": [
+          "五家渠"
+        ]
+      },
+      {
+        "name": "伊犁哈萨克自治州",
+        "area": [
+          "伊宁市",
+          "奎屯市",
+          "伊宁县",
+          "特克斯县",
+          "尼勒克县",
+          "昭苏县",
+          "新源县",
+          "霍城县",
+          "巩留县",
+          "察布查尔锡伯自治县",
+          "塔城地区",
+          "阿勒泰地区"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "台湾省",
+    "city": [
+      {
+        "name": "台北市",
+        "area": [
+          "内湖区",
+          "南港区",
+          "中正区",
+          "万华区",
+          "大同区",
+          "中山区",
+          "松山区",
+          "大安区",
+          "信义区",
+          "文山区",
+          "士林区",
+          "北投区"
+        ]
+      },
+      {
+        "name": "新北市",
+        "area": [
+          "板桥区",
+          "汐止区",
+          "新店区"
+        ]
+      },
+      {
+        "name": "桃园市",
+        "area": [
+          "其他"
+        ]
+      },
+      {
+        "name": "台中市",
+        "area": [
+          "其他"
+        ]
+      },
+      {
+        "name": "台南市",
+        "area": [
+          "其他"
+        ]
+      },
+      {
+        "name": "高雄市",
+        "area": [
+          "其他"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "澳门",
+    "city": [
+      {
+        "name": "澳门",
+        "area": [
+          "花地玛堂区",
+          "圣安多尼堂区",
+          "大堂区",
+          "望德堂区",
+          "风顺堂区",
+          "嘉模堂区",
+          "圣方济各堂区",
+          "路凼"
+        ]
+      }
+    ]
+  },
+  {
+    "name": "香港",
+    "city": [
+      {
+        "name": "香港",
+        "area": [
+          "深水埗区",
+          "油尖旺区",
+          "九龙城区",
+          "黄大仙区",
+          "观塘区",
+          "北区",
+          "大埔区",
+          "沙田区",
+          "西贡区",
+          "元朗区",
+          "屯门区",
+          "荃湾区",
+          "葵青区",
+          "离岛区",
+          "中西区",
+          "湾仔区",
+          "东区",
+          "南区"
+        ]
+      }
+    ]
+  }
+]

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

@@ -0,0 +1,103 @@
+<template>
+	<picker @change="bindPickerChange" @columnchange="columnchange" :range="array" range-key="name" :value="value" mode="multiSelector">
+		<slot></slot>
+	</picker>
+</template>
+
+<script>
+	import AllAddress from './data.js'
+	let selectVal = ['','','']
+	
+	export default {
+		data() {
+			return{
+				value: [0,0,0],
+				array: [],
+				index: 0
+			}
+		},
+		created() {
+			this.initSelect()
+		},
+		methods:{
+			// 初始化地址选项
+			initSelect() {
+				this.updateSourceDate() // 更新源数据
+				.updateAddressDate() // 更新结果数据
+				.$forceUpdate()  // 触发双向绑定
+			},
+			// 地址控件改变控件
+			columnchange(d) {
+				this.updateSelectIndex(d.detail.column, d.detail.value) // 更新选择索引
+				.updateSourceDate() // 更新源数据
+				.updateAddressDate() // 更新结果数据
+				.$forceUpdate()  // 触发双向绑定
+			},
+			
+			/**
+			 * 更新源数据
+			 * */
+			updateSourceDate() {
+				this.array = []
+				this.array[0] = AllAddress.map(obj => {
+					return {
+						name: obj.name
+					}
+				})
+				this.array[1] = AllAddress[this.value[0]].city.map(obj => {
+					return {
+						name: obj.name
+					}
+				})
+				this.array[2] = AllAddress[this.value[0]].city[this.value[1]].area.map(obj => { 
+					return {
+						name: obj
+					}
+				})
+				return this
+			},
+			
+			/**
+			 * 更新索引
+			 * */
+			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() {
+				selectVal[0] = this.array[0][this.value[0]].name
+				selectVal[1] = this.array[1][this.value[1]].name 
+				selectVal[2] = this.array[2][this.value[2]].name 
+				return this
+			},
+			
+			/**
+			 * 点击确定
+			 * */
+			bindPickerChange(e) {
+				this.$emit('change', {
+					index: this.value,
+					data: selectVal
+				})
+				return this
+			}
+			
+		}
+	}
+</script>
+
+<style>
+</style>

+ 280 - 0
components/xuan-popup/xuan-popup.vue

@@ -0,0 +1,280 @@
+<!-- 
+ *属性 isdistance 每个弹窗之间是否有间距
+ *数组形式传值
+ *type,类型 success warn info err loading(string)
+ *content,内容(string)
+ *timeout,消失时间(Number)
+ *isClick,是否点击消失(Boolean)
+ -->
+<template>
+	<view class="popup_list">
+		<view v-for="(items,index) of popup_list" :id="items.uuid" :key="items.uuid" >
+			<view class="mpopup" :style="{ background: items.color ,top:index*distance+45+'px'}" :class="[items.animator,items.typeClass]" @click="close(items.uuid,index)">
+				<view class="pic"><image class="icon" mode="aspectFit" :src="items.icon"></image></view>
+				<text class="text" :style="{ color: items.colortext }">{{ items.content }}</text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				popup_list:[],//弹窗数组
+				distance:65//每个弹窗之间间距
+			}
+		},
+		props:{
+			//是否有间距
+			isdistance:{
+				type:Boolean,
+				default:true
+			},
+			
+		},
+		methods:{
+			init:function(list){			
+				if (list.type == 'success') {
+					list.icon = 'https://zhibo.liuniu946.com/xuan-popup/success.png';
+					list.typeClass='mpopup-success';
+					return list;
+				}
+				if (list.type == 'warn') {
+					list.icon = 'https://zhibo.liuniu946.com/xuan-popup/warn.png';
+					list.typeClass='mpopup-warn';
+					return list;
+				}
+				if (list.type == 'info') {
+					list.icon = 'https://zhibo.liuniu946.com/xuan-popup/info.png';
+					list.typeClass='mpopup-info';
+					return list;
+				}
+				if (list.type == 'err') {
+					list.icon = 'https://zhibo.liuniu946.com/xuan-popup/err.png';
+					list.typeClass='mpopup-err';
+					return list;
+				}
+				if (list.type == 'loading') {
+					list.icon = 'https://zhibo.liuniu946.com/xuan-popup/loading.png';
+					list.typeClass='mpopup-loading';
+					return list;
+				}
+			},
+			open:function(list){
+				if(!this.isdistance){this.distance=0}
+				//生成uuid
+				let uuid=this.guid();
+				list.uuid=uuid;
+				//添加动画
+				list.animator='fade_Down';
+				//判断是否可点击消失/可控制消失
+				if(typeof(list.isClick)!='boolean'){list.isClick=false;}
+				//if(typeof(list.isControl)!='boolean'){list.isControl=false;}
+				
+				//初始化
+				let new_list=this.init(list);		
+				//添加进数组
+				this.popup_list.push(new_list);
+		
+				if(!new_list.isClick){
+					this.disappear(new_list.uuid,new_list.timeout);
+				}//可点击消失
+				else{
+					this.$emit('uuidCallback',new_list.uuid);
+				}
+				// else if(new_list.isControl){
+				// 	this.$emit('Callback',new_list.uuid);
+				// }
+				
+			},
+			//自动消失
+			disappear:function(uuid,timeout){
+				//退出动画之后,短暂延迟后移除本元素
+				this.fade_out_animator(uuid,timeout).then(res=>{
+					setTimeout(()=>{
+						for(let i=0;i<this.popup_list.length;i++){
+							if(this.popup_list[i].uuid==res){
+								//移除本元素
+								this.popup_list.splice(i,1);
+								this.$forceUpdate()
+							}
+						}
+					},250)
+				});
+			},
+			fade_out_animator:function(uuid,timeout){
+				//timeout秒后退出
+				if(!timeout||typeof(timeout)!='number'){timeout=3000;}
+				return new Promise(res=>{
+					setTimeout(()=>{
+						for(let i=0;i<this.popup_list.length;i++){
+							if(this.popup_list[i].uuid==uuid){
+								//添加退出动画
+								this.popup_list[i].animator='fade_Top';
+								res(uuid);
+							}
+						}
+					},timeout)
+				})
+			},
+			//可控制关闭的弹出框
+			close:function(uuid,ind){
+				if(ind){
+					if(!this.popup_list[ind].isClick){return}
+				}
+				this.remove_element(uuid).then((res)=>{
+					setTimeout(()=>{
+						for(let i=0;i<this.popup_list.length;i++){
+							if(this.popup_list[i].uuid==res){
+								//移除本元素
+								this.popup_list.splice(i,1);
+								this.$emit('closeCallback',uuid);
+								this.$forceUpdate()
+							}
+						}
+					},250)
+				})
+			},
+			//控制移除元素
+			remove_element:function(uuid){
+				return new Promise(res=>{
+					for (var i = 0; i < this.popup_list.length; i++) {
+						if(this.popup_list[i].uuid==uuid){
+							this.popup_list[i].animator='fade_Top';
+							res(uuid)
+							break;
+						} 
+					}
+				})
+				
+			},
+			//更新
+			update:function(update_list){
+				for (var i = 0; i < this.popup_list.length; i++) {
+					if(this.popup_list[i].uuid==update_list.uuid){
+						this.popup_list[i].type=update_list.type;
+						this.init(this.popup_list[i]);
+						this.popup_list[i].content=update_list.content;
+						break;
+					} 
+				}
+			},
+			//生成uuid
+			guid:function() {
+			    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+			        var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
+			        return v.toString(16);
+			    });
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.mpopup{
+		display: flex;
+		flex-direction: row;
+		text-align: center;
+		justify-content: center;
+		align-items: center;
+		min-height: 45px;
+		width: 550rpx;
+		transition :all .5s;
+		position: fixed;
+		left: 0;
+		right: 0;
+		margin: 0 auto;
+		border-radius: 5px;	
+		z-index:998;
+		.pic{
+			display: flex;
+			text-align: center;
+			justify-content: center;
+			width: 15px;
+			height: 15px;
+			margin: auto 20px auto 0;
+			.icon{
+				width: 100%;
+				height: auto;
+			}
+		}
+		.text{
+			margin: auto 20px auto 0;
+			width: 65%;
+			font-size: 16px;
+		}
+	}
+	.mpopup-success{
+		background: #f0f9eb;
+		border: 1px solid #e1f3d8;
+		color: #67c23a;
+	}
+	.mpopup-err{
+		background: #fef0f0;
+		border: 1px solid #fde2e2;
+		color: #f56c6c;
+	}
+	.mpopup-warn{
+		background: #fdf6ec;
+		border: 1px solid #faecd8;
+		color: #e6a23c;
+	}
+	.mpopup-info{
+		background: #edf2fc;
+		border: 1px solid #ebeef5;
+		color: #909399;
+	}
+	.mpopup-loading{
+		background: #e2f5ff;
+		border: 1px solid #ceeeff;
+		color: #5cbaff;
+		image{
+			animation: rotate360 1.5s ease infinite;
+		}
+	}
+	.fade_Down{
+		animation: fadeInDown 0.6s both;
+	}
+	.fade_Top{
+		animation: fadeInTop 0.5s forwards;
+	}
+	/*从上到下*/
+	@keyframes fadeInDown
+	{
+	    from {
+	        opacity: 0;
+	        -webkit-transform: translate(0,-100px); 
+	        transform: stranslate(0,-100px); 
+	    }
+	    to {
+	        opacity:1;
+	        -webkit-transform: translate(0,10px);
+	        transform: stranslate(0,10px);
+	    }
+	}
+	/*从下到上*/
+	@keyframes fadeInTop
+	{
+	    from {
+	        opacity:1;
+	        -webkit-transform: translate(0,10px); 
+	        transform: stranslate(0,10px);
+	    }
+	    to {
+	
+			opacity: 0;
+			-webkit-transform: translate(0,-100px);
+			transform: stranslate(0,-100px);
+	    }
+	}
+	@keyframes rotate360
+	{
+		from {
+			transform: rotate(0);
+		}
+		to{
+			transform: rotate(360deg);
+		}
+	}
+</style>

+ 46 - 0
main.js

@@ -0,0 +1,46 @@
+import Vue from 'vue'
+import store from './store'
+import App from './App'
+import uView from "uview-ui";
+/**
+ *  所有测试用数据均存放于根目录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
+	});
+}
+Vue.use(uView);
+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};
+import request from "@/utils/request.js"
+Vue.prototype.request = request
+App.mpType = 'app'
+
+const app = new Vue({
+    ...App
+})
+app.$mount()

+ 108 - 0
manifest.json

@@ -0,0 +1,108 @@
+{
+    "name" : "成功闪拓",
+    "appid" : "__UNI__F0EBD91",
+    "description" : "",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    "uniStatistics" : {
+        "enable" : false //全局关闭  
+    },
+    "app-plus" : {
+        /* 5+App特有相关 */
+        "usingComponents" : true,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        "modules" : {
+            "iBeacon" : {}
+        },
+        /* 模块配置 */
+        "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.ACCESS_COARSE_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.BLUETOOTH\"/>",
+                    "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>",
+                    "<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.CHANGE_WIFI_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.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<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\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
+                    "<uses-permission android:name=\"android.permission.BLUETOOTH\"/>",
+                    "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>"
+                ]
+            },
+            "ios" : {
+                "privacyDescription" : {
+                    "NSCameraUsageDescription" : ""
+                }
+            },
+            /* ios打包配置 */
+            "sdkConfigs" : {}
+        }
+    },
+    /* SDK配置 */
+    "quickapp" : {},
+    /* 快应用特有相关 */
+    "mp-weixin" : {
+        /* 小程序特有相关 */
+        "usingComponents" : true,
+        "appid" : "wx9f5e7948de660fbd",
+        "setting" : {
+            "urlCheck" : true,
+            "minified" : true,
+            "postcss" : true,
+            "es6" : false
+        },
+        "permission" : {}
+    },
+    "h5" : {
+        "title" : "智播商城",
+        "domain" : "",
+        "router" : {
+            "base" : "/index/",
+            "mode" : "history"
+        },
+        "optimization" : {
+            "treeShaking" : {
+                "enable" : true
+            }
+        },
+        "devServer" : {
+            "proxy" : {
+                "/api" : {
+                    "target" : "https://cgst.liuniu946.com/api",
+                    // "changeOrigin": true,
+                    "pathRewrite" : {
+                        "/api" : "" // rewrite path
+                    }
+                }
+            }
+        }
+    },
+    "mp-baidu" : {
+        "appid" : ""
+    }
+}

+ 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 jweixin = require('jweixin-module')
+jweixin.ready(function(){
+    // TODO
+});
+```
+
+## 完整API
+
+>[微信JS-SDK说明文档](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115)

ファイルの差分が大きいため隠しています
+ 0 - 0
node_modules/jweixin-module/lib/index.js


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

@@ -0,0 +1,54 @@
+{
+  "_from": "jweixin-module",
+  "_id": "jweixin-module@1.6.0",
+  "_inBundle": false,
+  "_integrity": "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w==",
+  "_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.6.0.tgz",
+  "_shasum": "4a7ea614083e3c9c3f49e2fdc2bb882cfa58dfcd",
+  "_spec": "jweixin-module",
+  "_where": "/Users/wanglili/Documents/work/GitHub/kkg",
+  "author": {
+    "name": "Shengqiang Guo"
+  },
+  "bugs": {
+    "url": "https://github.com/zhetengbiji/jweixin-module/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "微信JS-SDK",
+  "devDependencies": {},
+  "homepage": "https://github.com/zhetengbiji/jweixin-module#readme",
+  "keywords": [
+    "wxjssdk",
+    "weixin",
+    "jweixin",
+    "wechat",
+    "jssdk",
+    "wx"
+  ],
+  "license": "ISC",
+  "main": "lib/index.js",
+  "name": "jweixin-module",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/zhetengbiji/jweixin-module.git"
+  },
+  "scripts": {},
+  "version": "1.6.0"
+}

+ 11 - 0
package-lock.json

@@ -0,0 +1,11 @@
+{
+  "requires": true,
+  "lockfileVersion": 1,
+  "dependencies": {
+    "jweixin-module": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/jweixin-module/-/jweixin-module-1.6.0.tgz",
+      "integrity": "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w=="
+    }
+  }
+}

+ 392 - 0
pages.json

@@ -0,0 +1,392 @@
+{
+	"easycom": {
+		"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
+	},
+	"pages": [{
+			"path": "pages/index/index",
+			"style": {
+				"navigationBarTitleText": "城功闪拓",
+				"navigationBarBackgroundColor": "#ff5454",
+				"navigationBarTextStyle": "white",
+				// #ifdef H5
+				"navigationStyle": "custom",
+				// #endif
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/user/favorites",
+			"style": {
+				"navigationBarTitleText": "收藏夹"
+			}
+		},
+		{
+			"path": "pages/user/user",
+			"style": {
+				"app-plus": {
+					"titleNView": false
+				},
+				"navigationBarTitleText": "我的",
+				"navigationBarBackgroundColor": "#ff5454",
+				"navigationBarTextStyle": "white",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/user/myyhq",
+			"style": {
+				"navigationBarTitleText": "我的券码"
+			}
+		},
+		{
+			"path": "pages/user/djqQm",
+			"style": {
+				"navigationBarTitleText": "我的券码"
+			}
+		},
+		{
+			"path": "pages/user/shareF",
+			"style": {
+				"navigationBarTitleText": "转赠好友"
+			}
+		},
+		{
+			"path": "pages/user/share",
+			"style": {
+				"navigationBarTitleText": "我的二维码"
+			}
+		},
+		{
+			"path": "pages/set/address",
+			"style": {
+				"navigationBarTitleText": "收货地址"
+			}
+		},
+		{
+			"path": "pages/set/userinfo",
+			"style": {
+				"navigationBarTitleText": "修改资料"
+			}
+		},
+		{
+			"path": "pages/set/addressManage",
+			"style": {
+				"navigationBarTitleText": ""
+			}
+		},
+		{
+			"path": "pages/order/order",
+			"style": {
+				"navigationBarTitleText": "我的订单",
+				"app-plus": {
+					"bounce": "none"
+				}
+			}
+		},
+		{
+			"path": "pages/order/expressInfo",
+			"style": {
+				"navigationBarTitleText": "快递详情"
+			}
+		},
+		{
+			"path": "pages/order/orderDetail",
+			"style": {
+				"navigationBarTitleText": "订单详情",
+				"app-plus": {
+					"bounce": "none"
+				}
+			}
+		},
+		{
+			"path": "pages/order/evaluate",
+			"style": {
+				"navigationBarTitleText": "评论"
+			}
+		},
+		{
+			"path": "pages/order/orderRefund",
+			"style": {
+				"navigationBarTitleText": "申请退款"
+			}
+		},
+		{
+			"path": "pages/order/createOrder",
+			"style": {
+				"navigationBarTitleText": "创建订单"
+			}
+		},
+		{
+			"path": "pages/product/reply",
+			"style": {
+				"navigationBarTitleText": "商品评价",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/product/product",
+			"style": {
+				"navigationBarTitleText": "详情展示",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/product/search",
+			"style": {
+				// #ifdef APP-PLUS
+				"navigationStyle": "custom",
+				// #endif
+				// #ifndef MP
+				"app-plus": {
+					"titleNView": {
+						"searchInput": {
+							"backgroundColor": "rgba(231, 231, 231,.7)",
+							"borderRadius": "16px",
+							"placeholder": "请输入关键字",
+							"disabled": false,
+							"placeholderColor": "#606266",
+							"align": "left",
+							"autoFocus": true
+						},
+						"buttons": [{
+							"text": "搜索",
+							"fontSize": "14",
+							"color": "#303133",
+							"background": "rgba(0,0,0,0)",
+							"width": "40px"
+						}]
+					}
+				},
+				// #endif
+				"navigationBarTitleText": "搜索"
+			}
+		},
+		{
+			"path": "pages/money/pay",
+			"style": {
+				"navigationBarTitleText": "支付"
+			}
+		},
+		{
+			"path": "pages/money/paySuccess",
+			"style": {
+				"navigationBarTitleText": "支付成功"
+			}
+		},
+		// #ifdef H5 || MP-WEIXIN
+		{
+			"path": "pages/redirect/redirect",
+			"style": {
+				"navigationBarTitleText": "微信登录跳转页面",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		// #endif
+		// #ifdef H5
+		{
+			"path": "pages/public/register",
+			"style": {
+				"navigationBarTitleText": "注册",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/public/login",
+			"style": {
+				"navigationBarTitleText": "登录",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/public/forget",
+			"style": {
+				"navigationBarTitleText": "忘记密码",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		// #endif
+
+		{
+			"path": "pages/public/wxLogin",
+			"style": {
+				"navigationBarTitleText": "微信登录",
+				"app-plus": {
+					"titleNView": {
+						"type": "transparent"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/shop/shop",
+			"style": {
+				"navigationBarTitleText": "商家中心",
+				"navigationBarBackgroundColor": "#ff5454",
+				"navigationBarTextStyle": "white",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/shop/subordinate",
+			"style": {
+				"navigationBarTitleText": "商家中心",
+				"navigationBarBackgroundColor": "#ff5454",
+				"navigationBarTextStyle": "white",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/shop/turnover",
+			"style": {
+				"navigationBarTitleText": "门店销售排行榜",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/shop/fission",
+			"style": {
+				"navigationBarTitleText": "待裂变总数",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/shop/fissioned",
+			"style": {
+				"navigationBarTitleText": "裂变总数",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/shop/fission-other",
+			"style": {
+				"navigationBarTitleText": "员工待裂变数量",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/shop/fissioned-other",
+			"style": {
+				"navigationBarTitleText": "员工裂变数量",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/shop/myriad",
+			"style": {
+				"navigationBarTitleText": "破万大神",
+				"navigationBarBackgroundColor": "#ffffff",
+				"navigationBarTextStyle": "black"
+			}
+		},
+		{
+			"path": "pages/shop/subbranch",
+			"style": {
+				"navigationBarTitleText": "分店列表",
+				"navigationBarBackgroundColor": "#ffffff",
+				"navigationBarTextStyle": "black"
+			}
+		},
+		{
+			"path": "pages/shop/product",
+			"style": {
+				"navigationBarTitleText": "热销项目排行",
+				"navigationBarBackgroundColor": "#ffffff",
+				"navigationBarTextStyle": "black"
+			}
+		},
+		{
+			"path": "pages/shop/employee",
+			"style": {
+				"navigationBarTitleText": "排行榜",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/shop/vipDetail",
+			"style": {
+				"navigationBarTitleText": "曝光量",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/shop/order",
+			"style": {
+				"navigationBarTitleText": "订单数据",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		}
+
+	],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "uni-app",
+		"navigationBarBackgroundColor": "#FFFFFF",
+		"backgroundColor": "#f8f8f8"
+	},
+	"tabBar": {
+		"color": "#666666",
+		"selectedColor": "#FF4C4C",
+		"borderStyle": "black",
+		"backgroundColor": "#ffffff",
+		"list": [{
+				"pagePath": "pages/index/index",
+				"iconPath": "static/tabBar/tab-home.png",
+				"selectedIconPath": "static/tabBar/tab-home-current.png",
+				"text": "商城"
+			},
+			{
+				"pagePath": "pages/shop/shop",
+				"iconPath": "static/tabBar/tab-cate.png",
+				"selectedIconPath": "static/tabBar/tab-cate-current.png",
+				"text": "商家中心"
+			},
+			{
+				"pagePath": "pages/user/user",
+				"iconPath": "static/tabBar/tab-user.png",
+				"selectedIconPath": "static/tabBar/tab-user-current.png",
+				"text": "我的"
+			}
+
+		]
+	}
+}

+ 768 - 0
pages/index/index.vue

@@ -0,0 +1,768 @@
+<template>
+	<view class="container">
+		<!-- 兼容小程序搜索 -->
+		<!-- 顶部logo and 搜索 start-->
+		<view class="top-search flex">
+			<view class="search-box flex" @click="clickSearch()">
+				<image class="search" src="../../static/icon/search-h.png" mode=""></image>
+				<view class="search-font">输入关键词搜索</view>
+			</view>
+		</view>
+		<!-- 顶部logo and 搜索 end-->
+		<!-- 轮播图 start -->
+		<swiper class="top-swiper" autoplay="true" duration="400" interval="5000" @change="swiperChange">
+			<!-- <view class="carousel-item"><image src="../../static/img/index.png" /></view> -->
+			<swiper-item v-for="(item, index) in carouselList" :key="index" class="carousel-item"><image :src="item.pic" /></swiper-item>
+		</swiper>
+		<!-- 轮播图 end -->
+		<view class="swiper-btm flex">
+			<view class="btm-item flex">
+				<image src="../../static/icon/index-gou.png" mode=""></image>
+				<view class="">自用购物返利</view>
+			</view>
+			<view class="btm-item flex">
+				<image src="../../static/icon/index-gou.png" mode=""></image>
+				<view class="">分享好友赚钱</view>
+			</view>
+			<view class="btm-item flex">
+				<image src="../../static/icon/index-gou.png" mode=""></image>
+				<view class="">超值正品优惠</view>
+			</view>
+		</view>
+		<!-- 预约 start-->
+		<view class="yuyue-wrap">
+			<view class="yuyue-top flex"><image src="../../static/img/yuyue-top.png" mode="heightFix"></image></view>
+			<view class="yuyue-item" v-for="item in list">
+				<view class="share" @click="share(item)">
+					<image class="share-img" src="../../static/img/share.png" mode=""></image>
+					<view class="share-font">分享</view>
+				</view>
+				<!-- <button class="share" open-type="share">
+					<image class="share-img" src="../../static/img/share.png" mode=""></image>
+					<view class="share-font">分享</view>
+				</button> -->
+				<view class="yuyue-item-left">
+					<view class="yuyue-item-left-bg"><image src="../../static/img/index-bg.png" mode=""></image></view>
+					<image class="yuyue-item-left-image" :src="item.image" mode=""></image>
+				</view>
+				<view class="yuyue-item-right">
+					<view class="yuyue-item-title clamp2">{{ item.store_name }}</view>
+					<view class="yuyue-item-bottom-box">
+						<view class="yuyue-item-price">¥{{ item.price }}</view>
+						<view class="yuyue-item-btn" @click="navToDetailPage(item)">立即拼团</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<uni-popup ref="popupshare" type="center">
+			<view class="share-box"><image :src="shareimg" mode="" class="box-img" @longpress="saveImg()"></image></view>
+		</uni-popup>
+		<!-- 预约 end-->
+		<u-tabbar
+			v-if="userInfo.user_rule == 'leader' || userInfo.user_rule == 'admin'"
+			v-model="current"
+			:list="tabbar"
+			active-color="#FF4C4C"
+			inactive-color="#666666"
+		></u-tabbar>
+		<u-tabbar v-else v-model="current" :list="tabbar1" active-color="#FF4C4C" inactive-color="#666666"></u-tabbar>
+	</view>
+</template>
+
+<script>
+import { loadIndexs } from '@/api/index.js';
+import { getProducts, poster } from '@/api/product.js';
+import { mapState, mapMutations } from 'vuex';
+import { saveUrl, interceptor } from '@/utils/loginUtils.js';
+import { tabbar, tabbar1 } from '@/utils/tabbar.js';
+export default {
+	// #ifdef MP
+	onShareAppMessage: function(res) {
+		console.log(res);
+		console.log('是否从按钮进入');
+		if (res.from === 'button' || res.from === 'menu') {
+			// 来自页面内分享按钮
+			let pages = getCurrentPages();
+			// 获取当前页面
+			let page = pages[pages.length - 1];
+			let path = '/' + page.route + '?';
+			// 保存传值
+			for (let i in page.options) {
+				path += i + '=' + page.options[i] + '&';
+			}
+			// 保存邀请人
+			path += 'spread=' + this.userInfo.uid;
+			let data = {
+				path: path,
+				imageUrl: 'http://zhibo.liuniu946.com/uploads/attach/2021/06/20210621/f24e2d3028d95db57944e1816ec464fc.jpg',
+				title: this.userInfo.nickname + '邀请您进入城攻闪拓项目'
+			};
+			return data;
+		} else {
+			console.log('else');
+		}
+	},
+	// #endif
+	data() {
+		return {
+			shareimg: '',
+			imging: 1, //生成海报中1没有2正在运行
+			tabbar: tabbar,
+			tabbar1: tabbar1,
+			current: 0,
+			carouselList: [],
+			list: [],
+			swiperLength: 0,
+			swiperCurrent: 0,
+			goodsObjact: {
+				percent: 1
+			} //保存商品数据
+		};
+	},
+	onShow() {
+		let pages = getCurrentPages(); //获取加载的页面
+		let currentPage = pages[pages.length - 1]; //获取当前页面的对象
+		let url = currentPage.route; //当前页面url
+		let item = currentPage.options; //如果要获取url中所带的参数可以查看options
+
+		this.url = this.$store.state.baseURL + '/index/#/' + url + '?id=' + item.id + '&spread=' + this.userInfo.uid;
+	},
+	onReady() {
+		let obj = this;
+		let query = uni.createSelectorQuery();
+		// 获取页面比例
+		query
+			.select('.container')
+			.fields(
+				{
+					size: true
+				},
+				e => {
+					// 保存比例
+					this.ratio = e.width / 750;
+				}
+			)
+			.exec();
+	},
+	onLoad(option) {
+		let res = uni.getSystemInfoSync();
+		if (option.spread) {
+			// 存储邀请人
+			this.spread = option.spread;
+			uni.setStorageSync('spread', option.spread);
+		}
+		if (option.scene) {
+			// 存储邀请人
+			this.spread = option.scene;
+			uni.setStorageSync('spread_code', option.scene);
+		}
+		this.loadData();
+	},
+
+	computed: {
+		...mapState(['userInfo', 'baseURL', 'hasLogin', 'urlFile'])
+	},
+	methods: {
+		// 获取首页数据
+		loadData() {
+			loadIndexs({}).then(({ data }) => {
+				this.carouselList = data.banner;
+			});
+			getProducts({ pages: 1, limit: 1000 }).then(({ data }) => {
+				this.list = data;
+			});
+		},
+		//轮播图跳转页面
+		nav(item) {
+			if (!this.hasLogin) {
+				uni.showModal({
+					title: '登录',
+					content: '您未登录,是否马上登陆?',
+					success: e => {
+						if (e.confirm) {
+							interceptor();
+						}
+					},
+					fail: e => {
+						console.log(e);
+					}
+				});
+				return;
+			}
+			console.log(item);
+			if (item.url != '/') {
+				console.log('11111');
+				uni.navigateTo({
+					url: '/' + item.url,
+					fail(error) {
+						console.log(error);
+					}
+				});
+			}
+		},
+		// 保存海报
+		saveImg(w) {
+			let obj = this;
+			console.log(w, obj.shareimg);
+			uni.downloadFile({
+				//下载图片
+				url: obj.shareimg,
+				success: res => {
+					console.log(res.tempFilePath);
+					uni.saveImageToPhotosAlbum({
+						//将图片保存在手机
+						filePath: res.tempFilePath, //保存的位置
+						success: res => {
+							uni.showToast({
+								title: '保存成功',
+								icon: 'none'
+							});
+						}
+					});
+				}
+			});
+		},
+		// 分享海报
+		share(item) {
+			let obj = this;
+			if (obj.imging == 2) {
+				return;
+			}
+			uni.showLoading({
+				title: '生成海报中'
+			});
+			obj.imging = 2;
+			// #ifdef H5
+			let fromname = 'wechat';
+			// #endif
+			// #ifdef MP
+			let fromname = 'routine';
+			// #endif
+			poster({
+				productId: item.id,
+				from: fromname
+			})
+				.then(({ data }) => {
+					console.log(data.url);
+					obj.shareimg = data.url;
+					obj.imging = 1;
+					uni.hideLoading();
+					this.$refs.popupshare.open();
+				})
+				.catch(err => {
+					obj.imging = 1;
+				});
+		},
+		// 点击跳转页面
+		navTo(url) {
+			if (!this.hasLogin) {
+				uni.showModal({
+					title: '登录',
+					content: '您未登录,是否马上登陆?',
+					success: e => {
+						if (e.confirm) {
+							interceptor();
+						}
+					},
+					fail: e => {
+						console.log(e);
+					}
+				});
+				return;
+			}
+			uni.navigateTo({
+				url,
+				fail(error) {
+					uni.switchTab({
+						url
+					});
+				}
+			});
+		},
+		// 监听导航栏输入框点击事件
+		onNavigationBarSearchInputClicked(e) {
+			//跳转到搜索页面
+			this.clickSearch();
+		},
+		// 點擊搜索框
+		clickSearch() {
+			uni.navigateTo({
+				url: '/pages/product/search'
+			});
+		},
+		//轮播图切换修改背景色
+		swiperChange(e) {
+			const index = e.detail.current;
+			this.swiperCurrent = index;
+			this.titleNViewBackground = this.carouselList[index].background;
+		},
+		// 跳转普通商品
+		navToDetailPage(item) {
+			uni.navigateTo({
+				url: '/pages/product/product?id=' + item.id
+			});
+		},
+		IndexShare() {
+			let obj = this;
+			let data = obj.onShareAppMessage();
+			let item = {
+				link: data.path, // 分享链接
+				imgUrl: data.imgUrl,
+				title: data.title
+			};
+			console.log('分享加', item);
+			weixindata(item);
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+/* #ifdef MP || APP-PLUS*/
+.input-box {
+	padding: 25rpx;
+	/* #ifdef APP-PLUS */
+	margin-top: var(--status-bar-height);
+	/* #endif */
+	background-color: #fe8119;
+	height: 44px;
+
+	.iconsearch {
+		font-size: 50rpx;
+	}
+
+	.input-content {
+		border-radius: 99rpx;
+		flex-grow: 1;
+		padding: 5rpx 30rpx;
+		// background-color: rgba(231, 231, 231, 0.7);
+		background: #ffffff;
+
+		.input {
+			flex-grow: 1;
+
+			input {
+				font-size: $font-base;
+			}
+		}
+	}
+
+	.input-button {
+		padding-left: 20rpx;
+		font-size: $font-base;
+		height: 100%;
+	}
+}
+
+/* #endif */
+.top-search {
+	height: 80rpx;
+	padding: 0 20rpx;
+	background-color: #fff;
+	.top-logo {
+		width: 50rpx;
+		// height: 50rpx;
+		margin-right: 10rpx;
+
+		image {
+			width: 48rpx;
+		}
+	}
+
+	.search-box {
+		justify-content: center;
+		width: 698rpx;
+		height: 60rpx;
+		background: #eeeeee;
+		// box-shadow: 0px 10rpx 20rpx 0px rgba(4, 114, 69, 0.22);
+		border-radius: 30rpx;
+
+		.search {
+			width: 34rpx;
+			height: 34rpx;
+		}
+
+		.search-font {
+			margin-left: 14rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #cbcbcb;
+		}
+	}
+}
+// 顶部轮播图
+.top-swiper {
+	width: 750rpx;
+	height: 360rpx;
+	// margin: 20rpx 0 0;
+	image {
+		width: 750rpx;
+		height: 360rpx;
+	}
+}
+.swiper-btm {
+	height: 60rpx;
+	width: 750rpx;
+	background-color: #fff;
+	margin-bottom: 20rpx;
+	font-size: 21rpx;
+	font-weight: 500;
+	color: #333333;
+	.btm-item {
+		flex-grow: 1;
+		justify-content: center;
+		image {
+			width: 25rpx;
+			height: 25rpx;
+			margin-right: 14rpx;
+		}
+	}
+}
+/* 分类 */
+.cate-section {
+	display: flex;
+	justify-content: space-around;
+	align-items: center;
+	flex-wrap: wrap;
+	padding: 30rpx 22rpx;
+	background-color: #ffffff;
+
+	.cate-item {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		font-size: $font-sm + 2rpx;
+		color: $font-color-dark;
+	}
+
+	/* 原图标颜色太深,不想改图了,所以加了透明度 */
+	image {
+		width: 88rpx;
+		height: 88rpx;
+		margin-bottom: 14rpx;
+		border-radius: 50%;
+		opacity: 0.7;
+	}
+}
+
+// 为你推荐
+.recommend-box {
+	background: linear-gradient(180deg, #ffffff, #f8f8f8);
+	width: 100%;
+	padding: 0 32rpx;
+}
+
+.f-header {
+	display: flex;
+	align-items: center;
+	height: 92rpx;
+	padding: 6rpx 30rpx 8rpx;
+	border-radius: 12rpx 12rpx 0 0;
+	color: #ffffff;
+	background: linear-gradient(180deg, #fd4646, #ff3535);
+	.tit-box {
+		@extend %font-title-box;
+		font-size: 20rpx;
+		color: #ffffff;
+		margin-left: 20rpx;
+	}
+	.iconenter {
+		font-size: $font-lg + 2rpx;
+		color: #ffffff;
+	}
+
+	.f-left-icon {
+		font-size: 34rpx;
+		border-right: 1rpx solid #ffffff;
+		padding-right: 18rpx;
+	}
+
+	.iconfont {
+		font-size: 26rpx;
+	}
+}
+
+.guess-section {
+	width: 100%;
+	display: flex;
+	flex-direction: column;
+	background-color: #ffffff;
+	border-radius: 0 0 12rpx 12rpx;
+	.guess-item {
+		display: flex;
+		width: 100%;
+		padding: 24rpx;
+		border-bottom: 1rpx solid #f0f0f0;
+		&:nth-last-child(1) {
+			border-bottom: none;
+		}
+	}
+
+	.image-wrapper {
+		width: 168rpx;
+		height: 168rpx;
+		border-radius: 3px;
+		image {
+			width: 168rpx;
+			height: 168rpx;
+			opacity: 1;
+		}
+	}
+	.info-wrapper {
+		width: 100%;
+		display: flex;
+		flex-direction: column;
+		margin-left: 20rpx;
+	}
+	.title {
+		font-size: 32rpx;
+		color: $font-color-dark;
+		word-break: break-all;
+		display: -webkit-box;
+		-webkit-line-clamp: 1;
+		-webkit-box-orient: vertical;
+		overflow: hidden;
+	}
+	.price-box {
+		margin-top: 10rpx;
+		display: flex;
+		justify-content: space-between;
+		.price-left {
+			display: flex;
+			flex-direction: column;
+			.price {
+				margin-top: 8rpx;
+				line-height: 30rpx;
+				color: #ff0000;
+				font-size: 40rpx;
+				font-weight: 700;
+				.price-tip {
+					font-size: 28rpx;
+				}
+			}
+			.ot_price {
+				margin-top: 50rpx;
+				line-height: 24rpx;
+				font-size: 28rpx;
+				margin-left: 4rpx;
+				text-decoration: line-through;
+				color: #aaaaaa;
+				.price-tip {
+					font-size: 22rpx;
+				}
+			}
+		}
+		.price-right {
+			display: flex;
+			flex-direction: column;
+			.people {
+				margin-top: 32rpx;
+				font-weight: 700;
+				color: #999999;
+				font-size: 22rpx;
+				text-align: right;
+				margin-right: 4rpx;
+			}
+			.buyNow {
+				margin-top: 68rpx;
+				background: linear-gradient(180deg, #fd4646, #ff3535);
+				border-radius: 26rpx;
+				padding: 6rpx 18rpx;
+				font-size: 26rpx;
+				font-weight: 400;
+				color: #ffffff;
+			}
+		}
+	}
+}
+// 热销产品
+.hotgoodsheader {
+	width: 100%;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	padding: 32rpx 0 24rpx;
+	image {
+		width: 374rpx;
+		height: 34rpx;
+	}
+}
+.hotgoods {
+	width: 100%;
+	display: flex;
+	flex-wrap: wrap;
+	padding: 0 32rpx 108rpx;
+
+	.hotgoods-item {
+		width: 48%;
+		background-color: #ffffff;
+		border-radius: 12rpx;
+		margin-bottom: 24rpx;
+		&:nth-child(2n + 1) {
+			margin-right: 24rpx;
+		}
+		.image-wrapper {
+			width: 100%;
+			height: 330rpx;
+			border-radius: 3px;
+			overflow: hidden;
+			image {
+				width: 100%;
+				height: 100%;
+				opacity: 1;
+				border-radius: 12rpx 12rpx 0 0;
+			}
+		}
+		.title {
+			font-size: $font-base;
+			color: $font-color-dark;
+			font-weight: bold;
+			line-height: 80rpx;
+		}
+		.hot-price {
+			display: flex;
+			justify-content: space-between;
+			padding: 0 16rpx 12rpx;
+
+			.price {
+				font-size: 40rpx;
+				color: #ff0000;
+				font-weight: 500;
+			}
+			.cart-icon {
+				image {
+					width: 44rpx;
+					height: 44rpx;
+				}
+			}
+		}
+	}
+}
+.award-box {
+	width: 100%;
+	padding: 24rpx 24rpx 0;
+	background: #ffffff;
+	image {
+		width: 100%;
+		height: 170rpx;
+	}
+}
+.yuyue-wrap {
+	background-color: #fff;
+	.yuyue-top {
+		height: 117rpx;
+		justify-content: center;
+		image {
+			display: inline-block;
+			height: 31rpx;
+			margin: auto;
+		}
+	}
+	.yuyue-item {
+		width: 710rpx;
+		background: #ffffff;
+		box-shadow: 0px 0px 20rpx 0px rgba(50, 50, 52, 0.06);
+		border-radius: 10rpx;
+		margin: 20rpx auto 0;
+		padding: 20rpx 30rpx 20rpx 14rpx;
+		position: relative;
+		display: flex;
+		justify-content: flex-start;
+		.share {
+			position: absolute;
+			top: 0;
+			right: 30rpx;
+			width: 72rpx;
+			height: 96rpx;
+			background: linear-gradient(0deg, #fc773a, #ffa934);
+			border-bottom-left-radius: 50rpx;
+			border-bottom-right-radius: 50rpx;
+			padding: 10rpx 16rpx 14rpx;
+			line-height: 1;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
+			.share-img {
+				width: 32rpx;
+				height: 32rpx;
+			}
+			.share-font {
+				margin-top: 8rpx;
+				font-size: 20rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #ffffff;
+			}
+		}
+		.yuyue-item-left {
+			position: relative;
+			.yuyue-item-left-bg {
+				position: absolute;
+				z-index: 2;
+				top: 0;
+				right: 0;
+				left: 0;
+				width: 236rpx;
+				height: 236rpx;
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+			.yuyue-item-left-image {
+				width: 236rpx;
+				height: 236rpx;
+			}
+		}
+		.yuyue-item-right {
+			margin-left: 22rpx;
+			padding: 10rpx 0;
+			display: flex;
+			flex-direction: column;
+			justify-content: space-between;
+			width: 100%;
+			.yuyue-item-title {
+				width: 320rpx;
+				font-size: 32rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
+			}
+			.yuyue-item-bottom-box {
+				display: flex;
+				justify-content: space-between;
+				.yuyue-item-price {
+					font-size: 36rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #ff4c4c;
+				}
+				.yuyue-item-btn {
+					width: 138rpx;
+					height: 52rpx;
+					background: linear-gradient(90deg, #fe6f61 0%, #ff4343 100%);
+					border-radius: 26rpx;
+					font-size: 26rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #ffffff;
+					line-height: 52rpx;
+					text-align: center;
+				}
+			}
+		}
+	}
+}
+.share-box {
+	width: 600rpx;
+	height: 1000rpx;
+	background: red;
+
+	.box-img {
+		width: 600rpx;
+		height: 1000rpx;
+	}
+}
+</style>

+ 411 - 0
pages/money/pay.vue

@@ -0,0 +1,411 @@
+<template>
+	<view class="app">
+		<view class="price-box">
+			<text>支付金额</text>
+			<text class="price">{{ money }}</text>
+		</view>
+		<view class="pay-type-list">
+			<view class="type-item b-b" @click="changePayType(1)">
+				<text class="icon iconfont iconweixin"></text>
+				<view class="con">
+					<text class="tit">微信支付</text>
+					<text>推荐使用微信支付</text>
+				</view>
+				<label class="radio"><radio value="" color="#5dbc7c" :checked="payType == 1"></radio></label>
+			</view>
+			<!-- <view class="type-item b-b" @click="changePayType(2)">
+				<text class="icon iconfont iconzhifubao"></text>
+				<view class="con"><text class="tit">支付宝支付</text></view>
+				<label class="radio"><radio value="" color="#5dbc7c" :checked="payType == 2"></radio></label>
+			</view> -->
+			<view class="type-item" @click="changePayType(3)">
+				<text class="icon iconfont iconyue"></text>
+				<view class="con">
+					<text class="tit">余额支付</text>
+					<text>可用余额 ¥{{ userInfo.now_money }}</text>
+				</view>
+				<label class="radio"><radio value="" color="#5dbc7c" :checked="payType == 3"></radio></label>
+			</view>
+		</view>
+		<text class="mix-btn" :class="{ clickbg: payLoding }" @click="!payLoding ? confirm() : ''">确认支付</text>
+	</view>
+</template>
+
+<script>
+import { balance } from '@/api/wallet.js';
+import { createOrderkey, computedOrderkey, orderPay } from '@/api/money.js';
+import { mapState } from 'vuex';
+export default {
+	data() {
+		return {
+			payType: 1, //支付类型
+			payName: 'weixin',
+			orderInfo: {},
+			money: 0.0, //订单金额
+			orderKey: '',
+			orderId: '', //保存订单id
+			payLoding: false, //判断是否支付中
+			type: '', //判断是否从订单中进入
+			// #ifdef H5
+			froms: '', //保存h5中数据来源对象
+			// #endif
+			pinkid: '' //保存拼团商品id
+		};
+	},
+	computed: {
+		...mapState(['userInfo']),
+		// #ifdef H5
+		...mapState(['weichatObj'])
+		// #endif
+	},
+	onLoad(options) {
+		console.log(this.userInfo, 'options');
+		if (options.type == 1) {
+			this.type = 1;
+			this.orderId = options.ordid;
+			this.money = options.money;
+		} else {
+			this.orderKey = options.key;
+			let prepage = this.$api.prePage();
+			computedOrderkey({
+				orderkey: this.orderKey
+				// couponId: prepage.couponChecked.id, //优惠券编号
+				// addressId: prepage.addressData.id, //地址编号
+				// useIntegral: prepage.checkedPoints ? 1 : 0
+			}).then(({ data }) => {
+				// 获取支付金额
+				this.money = data.result.pay_price;
+			});
+		}
+		// 保存pinkid
+		if (options.pinkid) {
+			this.pinkid = options.pinkid;
+		}
+	},
+	methods: {
+		//选择支付方式
+		changePayType(type) {
+			this.payType = type;
+			if (this.payType == 1) {
+				this.payName = 'weixin';
+			}
+			if (this.payType == 2) {
+				this.payName = 'ali';
+			}
+			if (this.payType == 3) {
+				this.payName = 'yue';
+			}
+		},
+		// 支付金额
+		orderMoneyPay() {
+			let obj = this;
+			orderPay({
+				uni: obj.orderId,
+				// #ifdef H5
+				from: obj.froms ? 'weixin' : 'H5', //来源
+				// #endif
+				// #ifdef MP-WEIXIN
+				from: 'routine', //来源
+				// #endif
+				// #ifdef APP-PLUS
+				from: 'app', //来源
+				// #endif
+				paytype: obj.payName //支付类型  weixin-微信 yue-余额
+			})
+				.then(e => {
+					// 判断是否为余额支付
+					if (obj.payName == 'yue' && e.data.status == 'SUCCESS') {
+						if (e.status == 200) {
+							obj.paySuccessTo();
+						} else {
+							obj.$api.msg(msg);
+						}
+					}
+					//#ifndef APP-PLUS
+					if (obj.payName == 'weixin' || obj.payName == 'routine') {
+						let da = e.data.result.jsConfig;
+						console.log(da, '支付打印');
+						let data = {
+							// #ifdef H5
+							timestamp: da.timestamp,
+							// #endif
+							// #ifdef MP
+							timeStamp: da.timestamp,
+							// #endif
+							nonceStr: da.nonceStr,
+							package: da.package,
+							signType: da.signType,
+							paySign: da.paySign,
+							success: function(res) {
+								obj.paySuccessTo();
+							},
+							fail: () => {
+								uni.navigateTo({
+									url: '/pages/order/order?state=0'
+								});
+							}
+						};
+						// #ifdef H5
+						if (obj.payName == 'weixin') {
+							obj.weichatObj.chooseWXPay(data);
+						}
+						// #endif
+						// #ifdef MP-WEIXIN
+						if (obj.payName == 'weixin') {
+							console.log(data, '传入数据');
+							console.log(wx, 'wx');
+							wx.requestPayment(data);
+						}
+						// #endif
+					}
+					// #endif
+					//#ifdef APP-PLUS
+					if (obj.payName == 'weixin' || obj.payName == 'routine') {
+						let da = e.data.result.jsConfig;
+						console.log('--da--', da);
+						let data = {
+							appid: da.appid,
+							noncestr: da.noncestr,
+							package: da.package,
+							partnerid: da.partnerid,
+							prepayid: da.prepayid,
+							timestamp: da.timestamp,
+							sign: da.sign
+						};
+						console.log('--data--', data);
+						uni.requestPayment({
+							provider: 'wxpay',
+							orderInfo: data,
+							success(res) {
+								console.log(res);
+								uni.showToast({
+									title: '支付成功',
+									duration: 2000
+								});
+								obj.paySuccessTo();
+							},
+							fail(res) {
+								console.log(res, '失败');
+							}
+						});
+					}
+					if (obj.payName == 'ali') {
+						const url = e.data.result.jsConfig;
+						console.log(url, 'url');
+						uni.requestPayment({
+							provider: 'alipay',
+							orderInfo: url,
+							success: res => {
+								console.log(res);
+								uni.showToast({
+									title: '支付成功',
+									duration: 2000
+								});
+								obj.paySuccessTo();
+							},
+							fail: e => {
+								console.log(e);
+							},
+							complete: () => {}
+						});
+						obj.payLoding = false;
+					}
+					//#endif
+					uni.hideLoading();
+					obj.payLoding = false;
+				})
+				.catch(e => {
+					// 支付完成
+					uni.hideLoading();
+					obj.payLoding = false;
+					console.log(e);
+				});
+		},
+		// 支付成功跳转
+		paySuccessTo() {
+			uni.hideLoading();
+			uni.redirectTo({
+				url: '/pages/money/paySuccess?orderid=' + this.orderId
+			});
+		},
+		//确认支付
+		confirm: async function() {
+			let obj = this;
+
+			// 判断是否余额不足
+			if (obj.payName == 'yue' && +obj.userInfo.now_money < obj.money) {
+				uni.showModal({
+					title: '提示',
+					content: '账户余额不足!',
+					showCancel: false,
+					success: res => {},
+					fail: () => {},
+					complete: () => {}
+				});
+				return;
+			}
+			uni.showLoading({
+				title: '支付中',
+				mask: true
+			});
+			// 支付中
+			obj.payLoding = true;
+			// #ifdef H5
+			// 获取当前是否为微信浏览器
+			obj.froms = uni.getStorageSync('weichatBrowser') || '';
+			// #endif
+			// 判断是否为未支付订单中跳转进入
+			if (obj.type != 1) {
+				// 初次生成订单
+				obj.firstCreateOrder();
+			} else {
+				// 已经生成订单未支付
+				obj.orderMoneyPay();
+			}
+		},
+		// 初次订单创建
+		firstCreateOrder() {
+			let obj = this;
+			// 获取下单页面数据
+			let prepage = obj.$api.prePage();
+
+			let data = {
+				payType: obj.payName, //支付类型  weixin-微信 yue-余额
+				// #ifdef H5
+				from: obj.froms ? 'weixin' : 'H5', //来源
+				// #endif
+				// #ifdef MP-WEIXIN
+				from: 'routine', //来源
+				// #endif
+				// #ifdef APP-PLUS
+				from: 'app' //来源
+				// #endif
+			};
+			// 判断是否拼团商品
+			if (obj.pinkid) {
+				data.pinkId = obj.pinkid;
+			}
+			// 生成订单
+			createOrderkey(data, obj.orderKey)
+				.then(({ data, status, msg }) => {
+					console.log(status);
+					// 判断是否支付失败
+					if (data.status == 'ORDER_EXIST') {
+						uni.showModal({
+							title: '提示',
+							content: msg,
+							showCancel: false
+						});
+						uni.hideLoading();
+						obj.payLoding = false;
+						return;
+					}
+					// 保存订单号
+					obj.orderId = data.result.orderId;
+					// 判断是否为余额支付
+					if (obj.payName == 'yue') {
+						if (status == 200) {
+							obj.paySuccessTo();
+						} else {
+							obj.$api.msg(msg);
+						}
+					} else {
+						// 立即支付
+						obj.orderMoneyPay();
+					}
+				})
+				.catch(e => {
+					uni.hideLoading();
+					obj.payLoding = false;
+					console.log(e, '123456789');
+				});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.app {
+	width: 100%;
+}
+
+.price-box {
+	background-color: #fff;
+	height: 265upx;
+	display: flex;
+	flex-direction: column;
+	justify-content: center;
+	align-items: center;
+	font-size: 28upx;
+	color: #909399;
+
+	.price {
+		font-size: 50upx;
+		color: #303133;
+		margin-top: 12upx;
+		&:before {
+			content: '¥';
+			font-size: 40upx;
+		}
+	}
+}
+
+.pay-type-list {
+	margin-top: 20upx;
+	background-color: #fff;
+	padding-left: 60upx;
+	.type-item {
+		height: 120upx;
+		padding: 20upx 0;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding-right: 60upx;
+		font-size: 30upx;
+		position: relative;
+	}
+
+	.icon {
+		width: 100upx;
+		font-size: 52upx;
+	}
+	.iconyue {
+		color: #fe8e2e;
+	}
+	.iconweixin {
+		color: #36cb59;
+	}
+	.iconzhifubao {
+		color: #01aaef;
+	}
+	.tit {
+		font-size: $font-lg;
+		color: $font-color-dark;
+		margin-bottom: 4upx;
+	}
+	.con {
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+		font-size: $font-sm;
+		color: $font-color-light;
+	}
+}
+.mix-btn {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 630upx;
+	height: 80upx;
+	margin: 80upx auto 30upx;
+	font-size: $font-lg;
+	color: #fff;
+	background-color: $base-color;
+	border-radius: 10upx;
+	/* box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4); */
+}
+
+.clickbg {
+	background-color: $color-gray !important;
+}
+</style>

+ 84 - 0
pages/money/paySuccess.vue

@@ -0,0 +1,84 @@
+<template>
+	<view class="content">
+		<image class="success-icon" src="../../static/img/paySuccess.png" mode=""></image>
+		<text class="tit">订单支付成功</text>
+		<view class="btn-group">
+			<navigator url="/pages/order/order?state=1" open-type="redirect" class="mix-btn">查看订单</navigator>
+			<navigator url="/pages/index/index" open-type="switchTab" class="mix-btn hollow">返回首页</navigator>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			type: 2 //1为兑换支付成功2为预购成功
+		};
+	},
+	onLoad(opt) {
+		// 保存订单号
+		// 	if ('type' in opt) {
+		// 		this.type = opt.type;
+		// 	}
+		// 	if (this.type == 1) {
+		// 		uni.setNavigationBarTitle({
+		// 			title: '兑换成功'
+		// 		});
+		// 	}
+		// 	if (this.type == 2) {
+		// 		uni.setNavigationBarTitle({
+		// 			title: '预约成功'
+		// 		});
+		// 	}
+	},
+	methods: {}
+};
+</script>
+
+<style lang="scss">
+.content {
+	display: flex;
+	flex-direction: column;
+	justify-content: center;
+	align-items: center;
+}
+.success-icon {
+	margin-top: 100rpx;
+	width: 302rpx;
+	height: 320rpx;
+}
+.tit {
+	margin-top: 40rpx;
+	font-size: 32rpx;
+	font-family: PingFang SC;
+	font-weight: bold;
+	color: #333333;
+}
+.btn-group {
+	padding-top: 130rpx;
+	display: flex;
+	justify-content: flex-start;
+}
+.mix-btn {
+	margin-top: 30upx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 301rpx;
+	height: 78rpx;
+	background: #ff4947;
+	border-radius: 10rpx;
+	font-size: $font-lg;
+	font-size: 30rpx;
+	font-family: PingFang SC;
+	font-weight: 500;
+	color: #ffffff;
+	&.hollow {
+		margin-left: 36rpx;
+		background: #fff;
+		color: #ff4947;
+		border: 1px solid #ff4947;
+	}
+}
+</style>

ファイルの差分が大きいため隠しています
+ 96 - 0
pages/order/createOrder.vue


+ 405 - 0
pages/order/evaluate.vue

@@ -0,0 +1,405 @@
+<template>
+	<view class="content">
+		<view class="order-item">
+			<view class="goods-box-single">
+				<image class="goods-img" :src="productInfo.image" mode="aspectFill"></image>
+				<view class="right position-relative">
+					<view class="flex">
+						<text class="title">{{ productInfo.store_name }}</text>
+						<view class="title-right">
+							<view class="price">{{ productInfo.price }}</view>
+							<view class="attr-box">x{{ list.cart_num }}</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view>
+				<view class="flex_item zhil">
+					<view>商品质量</view>
+					<view><uniRate text="1" size="20" margin="10" :value="rateValue1" @change="rateChange1"></uniRate></view>
+				</view>
+				<view class="flex_item zhil">
+					<view>服务态度</view>
+					<view><uniRate text="1" size="20" margin="10" :value="rateValue2" @change="rateChange2"></uniRate></view>
+				</view>
+				<view class="equity_box">
+					<view class="text-box uni-textarea">
+						<textarea placeholder-style="color:#999" :placeholder="placeholder" @blur="bindTextAreaBlur"></textarea>
+					</view>
+					<view class="">
+						<view class="add-img-box flex_item">
+							<view class="add-img-item" v-for="(item, index) in imgList" :key="index">
+								<image class="add-img" @click.stop="imgInfo(index)" :src="item.url" mode="aspectFill"></image>
+								<image class="add-img-del" @click.stop="delImg(index)" src="/static/img/delete.png"></image>
+							</view>
+							<view v-if="imgList.length < 9" class="add-img-item" @click.stop="scImg()">
+								<image class="add-img" src="/static/img/add.png"></image>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view @click.stop="submit" class="address-box submit-box"><text class="submit-btn">提交评论</text></view>
+	</view>
+</template>
+
+<script>
+import { product, upload, order_comment } from '@/api/order.js';
+import uniRate from '@/components/uni-rate/uni-rate.vue';
+export default {
+	components: {
+		uniRate
+	},
+	data() {
+		return {
+			list: '', //订单详情
+			productInfo: '',
+			text: '', //评论内容
+			placeholder: '商品满足你的期待么?说说你的想法,分享给想买的他们吧~',
+			imgList: [],
+			unique: '', //商品唯一标识码
+			cloudimgList: [],
+			rateValue1: '', //商品质量
+			rateValue2: '', //服务态度
+			imgCount: 6 //最多支持9张上传,可以修改
+		};
+	},
+	onLoad(option) {
+		this.unique = option.unique;
+		this.loadOrder();
+	},
+	onShow() {},
+	methods: {
+		//text
+		bindTextAreaBlur: function(e) {
+			this.text = e.detail.value;
+		},
+		//获取收入支出信息
+		async loadOrder() {
+			product({
+				unique: this.unique
+			}).then(e => {
+				this.list = e.data;
+				this.productInfo = e.data.productInfo;
+			});
+		},
+		//商品质量评分
+		rateChange1(val) {
+			this.rateValue1 = val.value;
+		},
+		//服务态度评分
+		rateChange2(val) {
+			this.rateValue2 = val.value;
+		},
+		//单张上传图片
+		scImg() {
+			let obj = this;
+			console.log(obj.imgCount, 11);
+			if (obj.imgCount == 0) {
+				uni.showToast({
+					title: '最多添加6张图片',
+					icon: 'none'
+				});
+				return;
+			}
+			upload({
+				file: ''
+			})
+				.then(e => {
+					console.log(e,'e')
+					obj.imgList = [...obj.imgList, ...e];
+					console.log(obj.imgList,'imgList')
+					obj.imgCount = 10 - obj.imgList.length;
+					console.log(obj.imgCount ,'imgCount ')
+				})
+				.catch(e => {});
+		},
+		//提交评论
+		submit(e) {
+			let obj = this;
+			if (obj.imgList.length < 1) {
+				uni.showToast({
+					title: '请添加图片',
+					icon: 'none'
+				});
+				return;
+			}
+			for (let i = 0; i < obj.imgList.length; i++) {
+				obj.cloudimgList.push(obj.imgList[i].url);
+			}
+			let arr = obj.cloudimgList.join(',');
+			order_comment({
+				pics: arr,
+				comment: obj.text,
+				product_score: obj.rateValue1,
+				service_score: obj.rateValue2,
+				unique: obj.unique,
+				
+			})
+				.then(e => {
+					uni.navigateTo({
+						url: '/pages/order/order?state=4'
+					});
+				})
+				.catch(e => {
+					uni.navigateTo({
+						url: '/pages/order/order?state=4'
+					});
+				});
+		},
+		//点击图片显示大图
+		imgInfo(i) {
+			let tempList = [];
+			console.log(111);
+			this.imgList.forEach(e => {
+				tempList.push(e.url);
+			});
+			console.log(tempList);
+			//显示图片
+			uni.previewImage({
+				current: i,
+				loop: false,
+				urls: tempList,
+				indicator: 'default'
+			});
+		},
+		//删除图片
+		delImg(i) {
+			uni.showModal({
+				content: '确定删除这张吗',
+				success: res => {
+					if (res.confirm) {
+						this.imgList.splice(i, 1);
+						this.imgCount++;
+					} else if (res.cancel) {
+					}
+				}
+			});
+		},
+		// 页面跳转
+		navto(e) {
+			uni.navigateTo({
+				url: e
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #ffffff;
+	height: 100%;
+	.content {
+		background: #ffffff;
+		height: 100%;
+	}
+}
+/* 多条商品 */
+.order-item {
+	display: flex;
+	flex-direction: column;
+	padding: 0rpx 30rpx;
+	background: #fff;
+	margin-top: 20rpx;
+	/* 单条商品 */
+	.goods-box-single {
+		display: flex;
+		padding: 20rpx 0;
+		.goods-img {
+			display: block;
+			width: 120rpx;
+			height: 120rpx;
+		}
+		.right {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			padding: 0 30rpx 0 24rpx;
+			overflow: hidden;
+			height: 100%;
+			.title {
+				align-self: flex-start;
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				height: 80rpx;
+				overflow:hidden; 
+				text-overflow:ellipsis;
+				display:-webkit-box; 
+				-webkit-box-orient:vertical;
+				-webkit-line-clamp:2; 
+			}
+			.title-right {
+				flex-shrink: 0;
+				text-align: right;
+				align-self: flex-start;
+			}
+			.attr-box {
+				font-size: $font-sm + 2rpx;
+				color: $font-color-light;
+			}
+			.price {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				&:before {
+					content: '¥';
+					font-size: $font-sm;
+					margin: 0 2rpx 0 8rpx;
+				}
+			}
+		}
+	}
+}
+.equity_box {
+	background-color: #fafafa;
+	border-radius: 10rpx;
+	padding: 25rpx 25rpx;
+	margin: 25rpx 0rpx;
+	.text-box {
+		height: 200rpx;
+		textarea {
+			font-size: 25rpx;
+			width: 100%;
+			height: 100%;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			display: -webkit-box;
+			-webkit-box-orient: vertical;
+			-webkit-line-clamp: 5;
+		}
+	}
+}
+.zhil {
+	font-size: 28rpx !important;
+	padding: 15rpx 15rpx;
+}
+.submit-box {
+	bottom: 0;
+	left: 0;
+	width: 750rpx;
+}
+.submit-btn {
+	margin-top: 10px;
+	display: inline-block;
+	width: 670rpx;
+	height: 96rpx;
+	line-height: 96rpx;
+	text-align: center;
+	background-color: #1BCC26 !important;
+	opacity: 1;
+	border-radius: 32rpx;
+	border-width: 8rpx;
+	border-color: rgba(255, 255, 255, 1);
+	box-shadow: 0rpx 8rpx 12rpx rgba(0, 0, 0, 0.16);
+	border-radius: 56rpx;
+	font-size: 39rpx;
+	font-weight: bold;
+	color: rgba(255, 255, 255, 1);
+}
+.submit-btn-txt {
+	font-size: 39rpx;
+	font-weight: bold;
+	line-height: 47rpx;
+	color: rgba(255, 255, 255, 1);
+	opacity: 1;
+}
+.map-box {
+	width: 484rpx;
+	height: 256rpx;
+	border-width: 4rpx;
+	border-color: rgba(255, 255, 255, 1);
+	box-shadow: 0rpx 0rpx 24rpx rgba(0, 0, 0, 0.16);
+	/* border-radius: 12rpx; */
+	position: relative;
+}
+.map {
+	position: absolute;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	width: 476rpx;
+	height: 250rpx;
+}
+.map-img {
+	position: absolute;
+	top: 90rpx;
+	left: 156rpx;
+	width: 230rpx;
+	height: 68rpx;
+	background-color: rgba(51, 51, 51, 0.64);
+	border-width: 1rpx;
+	border-color: rgba(0, 0, 0, 0);
+	border-radius: 34px;
+
+	font-size: 28rpx;
+	font-weight: bold;
+	line-height: 66rpx;
+	color: rgba(255, 255, 255, 1);
+	text-align: center;
+}
+.address-box {
+	padding: 15rpx 40rpx;
+	margin-bottom: 10px;
+}
+.label {
+	font-size: 36rpx;
+	font-weight: bold;
+	line-height: 50rpx;
+	color: #222222;
+}
+.label-img {
+	padding-left: 40rpx;
+}
+
+.add-img-box {
+	width: 100%;
+	flex-direction: row;
+	flex-wrap: wrap;
+	margin-top: 50rpx;
+}
+.add-img-item {
+	width: 180rpx;
+	height: 180rpx;
+	border-radius: 24rpx;
+	position: relative;
+	margin: 0rpx 20rpx;
+	margin-bottom: 25rpx;
+	.add-img {
+		width: 100%;
+		height: 100%;
+		border-radius: 24rpx;
+	}
+}
+.add-img-camera {
+	flex: 1;
+}
+.add-img-del {
+	position: absolute;
+	width: 40rpx;
+	height: 40rpx;
+	left: 155rpx;
+	bottom: 155rpx;
+	//background-color: rgba(238, 0, 0, 1);
+	border-radius: 20rpx;
+}
+.address-time {
+	width: 484rpx;
+	height: 88rpx;
+	background-color: rgba(245, 245, 245, 1);
+	opacity: 1;
+	border-radius: 24rpx;
+	text-align: center;
+
+	font-size: 35rpx;
+	font-weight: 500;
+	color: rgba(51, 51, 51, 1);
+}
+.line {
+	width: 750rpx;
+	height: 1px;
+	transform: scaleY(0.3);
+	background-color: rgba(0, 0, 0, 0.5);
+}
+</style>

+ 74 - 0
pages/order/expressInfo.vue

@@ -0,0 +1,74 @@
+<template>
+	<view class="container">
+		<view class="express-box">
+			<view class="top-text">
+				<text class="top-com">{{expressList.com}}</text>
+				<text>{{ expressList.nu }}</text>
+			</view>
+			<view class="express-body">
+				<uni-steps :options="expressList.data" active-color="#007AFF" :active="active" direction="column"></uni-steps>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { express_query } from '@/api/order.js';
+import uniSteps from '@/components/uni-steps/uni-steps.vue';
+export default {
+	components: {
+		uniSteps
+	},
+	data() {
+		return {
+			id: '',
+			expressList: [],
+			active: 0
+		}
+	},
+	onLoad(option) {
+		this.id = option.id
+	},
+	onShow() {
+		this.loadData()
+	},
+	methods: {
+		loadData() {
+			express_query({
+				id: this.id,
+			}).then(({data}) => {
+				this.expressList = data;
+				console.log(this.expressList)
+			})
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.container {
+	padding: 40rpx;
+	.express-box {
+		border-radius: $border-radius-sm;
+		.top-text {
+			width: 100%;
+			height: 60rpx;
+			background: #FFFFFF;
+			padding-left: 20rpx;
+			font-size: $font-base;
+			border-radius: $border-radius-sm;
+			display: flex;
+			align-items: center;
+			.top-com {
+				margin-right: 10rpx;
+			}
+		}
+		.express-body {
+			margin-top: 20rpx;
+			background: #FFFFFF;
+			border-radius: $border-radius-sm;
+			padding: 20rpx 10rpx 20rpx 0;
+		}
+	}
+}
+</style>

+ 783 - 0
pages/order/order.vue

@@ -0,0 +1,783 @@
+<template>
+	<view class="content">
+		<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>
+
+		<swiper :current="tabCurrentIndex" class="swiper-box" duration="300" @change="changeTab">
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+				<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+					<!-- 空白页 -->
+					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
+
+					<!-- 订单列表 -->
+					<view @click="goToOrderDetail(item)" v-for="(item, index) in navList[tabCurrentIndex].orderList" :key="index" class="order-item">
+						<view v-if="item._status._title != '未支付'">
+							<view class="i-top b-b">
+								<text class="time">订单编号:{{ item.order_id }}</text>
+								<text class="state" style="color: #999999;;">拼团成功</text>
+								<!-- <text v-if="item.status === 3" class="del-btn iconfont icondelete" @click="deleteOrder(index)"></text> -->
+							</view>
+							<view class="flex_item assemble_box">
+								<view class="goods-box">
+									<view class="goods-item"><image class="goods-img" :src="item.cartInfo[0].productInfo.image" mode=" scaleToFill"></image></view>
+								</view>
+								<view class="assemble">
+									<view class="assemble_title">{{ item.cartInfo[0].productInfo.store_name }}</view>
+									<view class="flex_item assemble_avatar clamp">
+										<template v-for="it in item.imgs">
+											<image :src="'https://cgst.liuniu946.com/image/' + it + '.jpg'" mode="" :key="it"></image>
+										</template>
+										<view style="position: relative; top: 8rpx;"><image :src="userInfo.avatar || '/static/error/missing-face.png'"></image></view>
+										<view class="slh" style="position: relative; top: 10rpx; left: 6rpx" v-if="item.pink_num > 5">...</view>
+									</view>
+									<view class="assemble_text">共4人参与了拼团,拼团人数齐了</view>
+								</view>
+							</view>
+							<view class="action-box b-t">
+								<view class="action-box-left">
+									<view class="itemText recom" :class="{ chayidian: item.is_refund == 1 }"><template></template></view>
+								</view>
+								<view class="action-btn" @click.stop="navTo(item)">查看卡券</view>
+							</view>
+						</view>
+						<view v-else>
+							<view class="i-top b-b">
+								<text class="time">{{ item._add_time }}</text>
+								<text class="state" :style="{ color: item.stateTipColor }">{{ item._status._title }}</text>
+								<text v-if="item.status === 4" class="del-btn iconfont icondelete" @click="deleteOrder(index)"></text>
+							</view>
+
+							<scroll-view v-if="item.cartInfo.length > 1" class="goods-box" scroll-x>
+								<view v-for="(goodsItem, goodsIndex) in item.cartInfo" :key="goodsIndex" class="goods-item">
+									<image class="goods-img" :src="goodsItem.productInfo.image" mode="aspectFill"></image>
+								</view>
+							</scroll-view>
+							<view class="goods-box-single" v-for="(goodsItem, goodsIndex) in item.cartInfo" :key="goodsIndex">
+								<image class="goods-img" :src="goodsItem.productInfo.image" mode="scaleToFill"></image>
+								<view class="right">
+									<view class="flex-start">
+										<text class="title clamp">{{ goodsItem.productInfo.store_name }}</text>
+										<text class="price">{{ 1 * goodsItem.productInfo.price }}</text>
+									</view>
+									<view class="row flex">
+										<text class="row_title">{{ goodsItem.productInfo.attrInfo ? goodsItem.productInfo.attrInfo.suk : '' }}</text>
+										<text class="attr-box">x {{ goodsItem.cart_num }}</text>
+									</view>
+								</view>
+							</view>
+
+							<view class="price-box">
+								共
+								<text class="num">{{ item.cartInfo.length }}</text>
+								件商品 邮费
+								<text class="price">{{ 1 * item.pay_postage }}</text>
+								实付款
+								<text class="price">{{ item.pay_price * 1 }}</text>
+							</view>
+							<view class="action-box b-t" v-if="item.status != 5">
+								<button v-if="item._status._title == '未支付'" class="action-btn" @click.stop="cancelOrder(item)">取消订单</button>
+								<button v-if="item._status._title == '未支付'" @click.stop="orderPay(item)" class="action-btn ">立即支付</button>
+							</view>
+						</view>
+					</view>
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+import { mapState } from 'vuex';
+import { saveUrl } from '@/utils/loginUtils.js';
+import { orderList, orderCancel, orderDel, orderTake, refundList } from '@/api/order.js';
+export default {
+	filters: {
+		// 过滤金额为数字
+		moneyNum: function(value) {
+			return +value;
+		}
+	},
+	components: {
+		uniLoadMore,
+		empty
+	},
+	data() {
+		return {
+			tabCurrentIndex: 0,
+			state: '',
+			showModal: false,
+			limit: 10,
+			page: 1,
+			navList: [
+				{
+					state: '',
+					text: '全部订单',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 1,
+					text: '正在拼团',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 0,
+					text: '待付款',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 3,
+					text: '已完成',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				}
+			]
+		};
+	},
+
+	onLoad(options) {
+		this.state = options.state;
+		saveUrl();
+		/**
+		 * 修复app端点击除全部订单外的按钮进入时不加载数据的问题
+		 * 替换onLoad下代码即可
+		 */
+		this.tabCurrentIndex = +options.state;
+		// #ifndef MP
+		this.loadData();
+		// #endif
+		// #ifdef MP
+		if (options.state == 0) {
+			this.loadData();
+		}
+		// #endif
+	},
+	computed: {
+		...mapState(['userInfo'])
+	},
+	methods: {
+		//取消订单
+		cancelOrder(item) {
+			uni.showModal({
+				title: '订单取消',
+				content: '是否取消订单?',
+				success: e => {
+					if (e.confirm) {
+						uni.showLoading({
+							title: '请稍后'
+						});
+						orderCancel({ id: item.order_id })
+							.then(e => {
+								uni.showToast({
+									title: '取消成功',
+									duration: 2000,
+									position: 'top'
+								});
+							})
+							.catch(e => {
+								console.log(e);
+							});
+						//取消订单后删除待付款中该项
+						let list = this.navList[this.tabCurrentIndex].orderList;
+						let index = list.findIndex(val => val.id === item.id);
+						index !== -1 && list.splice(index, 1);
+						uni.hideLoading();
+					}
+				}
+			});
+		},
+		// 跳转到查询快递页面
+		expressCheck(item) {
+			console.log(item);
+			uni.navigateTo({
+				url: '/pages/order/expressInfo?id=' + item.id
+				// url: '/pages/order/expressInfo?id=' +item.order_id
+			});
+		},
+
+		//跳转到订单详情
+		goToOrderDetail(e) {
+			uni.navigateTo({
+				url: '/pages/order/orderDetail?id=' + e.order_id
+			});
+		},
+
+		//分享
+		share(e) {
+			console.log(e);
+			uni.navigateTo({
+				url: '/pages/product/details?pink_id=' + e.pink_id
+			});
+		},
+		navTo(e) {
+			console.log(e, '123456');
+			uni.navigateTo({
+				url: '/pages/user/myyhq?order_id=' + e.id
+			});
+		},
+		// 订单支付
+		orderPay(e) {
+			if (e.combination_id > 0) {
+				uni.navigateTo({
+					url: '/pages/money/pay?type=1&ordid=' + e.order_id + '&money=' + e.pay_price + '&goodsType=2'
+				});
+			} else {
+				uni.navigateTo({
+					url: '/pages/money/pay?type=1&ordid=' + e.order_id + '&money=' + e.pay_price
+				});
+			}
+		},
+		//获取订单列表
+		loadData(source) {
+			//这里是将订单挂载到tab列表下
+			let index = this.tabCurrentIndex;
+			let navItem = this.navList[index];
+			let state = navItem.state;
+			const obj = this;
+			if (source === 'tabChange' && navItem.loaded === true) {
+				//tab切换只有第一次需要加载数据
+				return;
+			}
+			if (navItem.loadingType === 'loading') {
+				//防止重复加载
+				return;
+			}
+			if (navItem.loadingType === 'noMore') {
+				//防止重复加载
+				return;
+			}
+			// 修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+			orderList({
+				type: state,
+				page: navItem.page,
+				limit: 10
+			})
+				.then(({ data }) => {
+					let arr = data.map(e => {
+						e.imgs = this.getSJ(3);
+						// let b = this.orderStateExp(e.status);
+						// e.stateTip = b.stateTip;
+						// e.stateTipColor = b.stateTipColor;
+						return e;
+					});
+					navItem.orderList = navItem.orderList.concat(arr);
+					// console.log(navItem.orderList);
+					navItem.page++;
+					if (navItem.limit == data.length) {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'more';
+						return;
+					} else {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						console.log(navItem.state);
+						navItem.loadingType = 'noMore';
+					}
+					this.$set(navItem, 'loaded', true);
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+		//swiper 切换
+		changeTab(e) {
+			console.log(e, 'tabChange');
+			this.tabCurrentIndex = e.target.current;
+			this.loadData('tabChange');
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+			this.loadData('tabChange');
+		},
+		//获取N个随机数
+		getSJ(n) {
+			let arr = [];
+			for (let i = 0; i < n; i++) {
+				let a = Math.ceil(Math.random() * 16);
+				arr = arr.concat(a);
+			}
+			return arr;
+		},
+		//订单状态文字和颜色
+		orderStateExp(state) {
+			let stateTip = '',
+				stateTipColor = '#EF041F';
+			switch (+state) {
+				case 0:
+					stateTip = '全部';
+					break;
+				case 1:
+					stateTip = '待付款';
+					break;
+				case 2:
+					stateTip = '待发货';
+					break;
+				case 3:
+					stateTip = '待收货';
+					break;
+				case 4:
+					stateTip = '已完成';
+					stateTipColor = '#5dbc7c';
+					break;
+				case 9:
+					stateTip = '订单已关闭';
+					stateTipColor = '#909399';
+					break;
+
+				//更多自定义
+			}
+			return { stateTip, stateTipColor };
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page,
+.content {
+	background: $page-color-base;
+	height: 100%;
+}
+
+.swiper-box {
+	height: calc(100% - 40px);
+	padding: 0 20rpx;
+}
+.list-scroll-content {
+	height: 100%;
+}
+
+.navbar {
+	display: flex;
+	height: 40px;
+	padding: 0 5px;
+	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: #6e6e6e;
+		position: relative;
+		&.current {
+			font-weight: bolder;
+			color: #333333;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 44px;
+				height: 0;
+				border-bottom: 2px solid #ff0000;
+			}
+		}
+	}
+}
+
+.uni-swiper-item {
+	height: auto;
+}
+.order-item {
+	display: flex;
+	flex-direction: column;
+	padding-left: 30rpx;
+	background: #fff;
+	margin-top: 16rpx;
+	border-radius: 15rpx;
+	.i-top {
+		display: flex;
+		align-items: center;
+		height: 80rpx;
+		padding-right: 30rpx;
+		font-size: $font-base;
+		color: $font-color-dark;
+		position: relative;
+		.time {
+			flex: 1;
+		}
+		.state {
+			color: $base-color;
+		}
+		.del-btn {
+			padding: 10rpx 0 10rpx 36rpx;
+			font-size: $font-lg;
+			color: $font-color-light;
+			position: relative;
+			&:after {
+				content: '';
+				width: 0;
+				height: 30rpx;
+				border-left: 1px solid $border-color-dark;
+				position: absolute;
+				left: 20rpx;
+				top: 50%;
+				transform: translateY(-50%);
+			}
+		}
+	}
+	/* 多条商品 */
+	.goods-box {
+		height: 160rpx;
+		padding: 20rpx 0;
+		white-space: nowrap;
+		.goods-item {
+			width: 120rpx;
+			height: 120rpx;
+			display: inline-block;
+			margin-right: 24rpx;
+		}
+		.goods-img {
+			display: block;
+			width: 100%;
+			height: 100%;
+		}
+	}
+	/* 单条商品 */
+	.goods-box-single {
+		display: flex;
+		padding: 20rpx 0;
+		.goods-img {
+			display: block;
+			width: 200rpx;
+			height: 118rpx;
+		}
+		.right {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			padding: 0 30rpx 0 24rpx;
+			overflow: hidden;
+			.title {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				line-height: 1;
+			}
+			.attr-box {
+				font-size: $font-sm + 2rpx;
+				color: $font-color-light;
+				padding: 10rpx 12rpx;
+			}
+			.price {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				&:before {
+					content: '¥';
+					font-size: $font-sm;
+					margin: 0 2rpx 0 8rpx;
+				}
+			}
+		}
+	}
+	.assemble {
+		padding: 15rpx;
+		width: 80%;
+	}
+	.assemble_title {
+		font-size: $font-base + 2rpx;
+		color: $font-color-dark;
+		white-space: nowrap;
+		overflow: hidden;
+		text-overflow: ellipsis;
+	}
+	.assemble image {
+		width: 55rpx;
+		height: 55rpx;
+		margin-left: -15rpx;
+		border: 2rpx solid #ffffff;
+		border-radius: 50rpx;
+	}
+	.assemble_text {
+		font-size: 24rpx;
+		color: #999999;
+	}
+	.assemble_avatar {
+		padding-left: 15rpx;
+		padding-top: 10rpx;
+	}
+	.assemble_box {
+		width: 100%;
+		padding-right: 15rpx;
+	}
+	.price-box {
+		display: flex;
+		justify-content: flex-end;
+		align-items: baseline;
+		padding: 20rpx 30rpx;
+		font-size: $font-sm + 2rpx;
+		color: $font-color-light;
+		.num {
+			margin: 0 8rpx;
+			color: $font-color-dark;
+		}
+		.price {
+			font-size: $font-lg;
+			color: $font-color-dark;
+			&:before {
+				content: '¥';
+				font-size: $font-sm;
+				margin: 0 2rpx 0 8rpx;
+			}
+		}
+	}
+	.action-box {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		height: 100rpx;
+		position: relative;
+		padding-right: 30rpx;
+		.itemText {
+			font-size: $font-sm;
+			color: #fc4141;
+		}
+		.chayidian {
+			color: #999999 !important;
+		}
+	}
+	.action-btn {
+		width: 160rpx;
+		height: 60rpx;
+		margin: 0;
+		margin-left: 24rpx;
+		padding: 0;
+		text-align: center;
+		line-height: 60rpx;
+		font-size: $font-sm + 2rpx;
+		color: #ff5b5b;
+		background-color: #fff;
+		border: 1px solid #ff5b5b;
+		border-radius: 100px;
+		&:after {
+			border-radius: 100px;
+		}
+		&.recom {
+			color: $font-color-base;
+			background-color: #ffffff;
+
+			&:after {
+				border-color: $base-color;
+			}
+		}
+		&.evaluate {
+			color: $color-yellow;
+			&:after {
+				border-color: $color-yellow;
+			}
+		}
+	}
+}
+
+// 积分投注弹窗
+.mask {
+	z-index: 10;
+	position: fixed;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	background-color: rgba(0, 0, 0, 0.5);
+	width: 100%;
+	height: 100%;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	flex-direction: column;
+	.pop {
+		z-index: 12;
+		width: 560rpx;
+		height: 379rpx;
+		background: rgba(255, 255, 255, 1);
+		border-radius: 30px;
+		.pop-box {
+			width: 100%;
+			height: 100%;
+			display: flex;
+			flex-direction: column;
+			text-align: center;
+			align-items: center;
+			margin-top: -72rpx !important;
+			.pop-img {
+				width: 177rpx;
+				height: 186rpx;
+				margin-bottom: 34rpx;
+			}
+			.pop-title {
+				height: 34rpx;
+				font-size: 36rpx;
+				font-weight: 500;
+				color: rgba(51, 51, 51, 1);
+				margin-bottom: 32rpx;
+			}
+			.number {
+				width: 454rpx;
+				height: 78rpx;
+				background: rgba(234, 234, 234, 1);
+				background: #eaeaea;
+			}
+		}
+		//关闭按钮
+		.close-box {
+			margin-top: 130rpx;
+			text-align: center;
+			.close {
+				width: 83rpx;
+				height: 83rpx;
+			}
+		}
+	}
+}
+
+/* load-more */
+.uni-load-more {
+	display: flex;
+	flex-direction: row;
+	height: 80rpx;
+	align-items: center;
+	justify-content: center;
+}
+
+.uni-load-more__text {
+	font-size: 28rpx;
+	color: #999;
+}
+
+.uni-load-more__img {
+	height: 24px;
+	width: 24px;
+	margin-right: 10px;
+}
+
+.uni-load-more__img > view {
+	position: absolute;
+}
+
+.uni-load-more__img > view view {
+	width: 6px;
+	height: 2px;
+	border-top-left-radius: 1px;
+	border-bottom-left-radius: 1px;
+	background: #999;
+	position: absolute;
+	opacity: 0.2;
+	transform-origin: 50%;
+	animation: load 1.56s ease infinite;
+}
+
+.uni-load-more__img > view view:nth-child(1) {
+	transform: rotate(90deg);
+	top: 2px;
+	left: 9px;
+}
+
+.uni-load-more__img > view view:nth-child(2) {
+	transform: rotate(180deg);
+	top: 11px;
+	right: 0;
+}
+
+.uni-load-more__img > view view:nth-child(3) {
+	transform: rotate(270deg);
+	bottom: 2px;
+	left: 9px;
+}
+
+.uni-load-more__img > view view:nth-child(4) {
+	top: 11px;
+	left: 0;
+}
+
+.load1,
+.load2,
+.load3 {
+	height: 24px;
+	width: 24px;
+}
+
+.load2 {
+	transform: rotate(30deg);
+}
+
+.load3 {
+	transform: rotate(60deg);
+}
+
+.load1 view:nth-child(1) {
+	animation-delay: 0s;
+}
+
+.load2 view:nth-child(1) {
+	animation-delay: 0.13s;
+}
+
+.load3 view:nth-child(1) {
+	animation-delay: 0.26s;
+}
+
+.load1 view:nth-child(2) {
+	animation-delay: 0.39s;
+}
+
+.load2 view:nth-child(2) {
+	animation-delay: 0.52s;
+}
+
+.load3 view:nth-child(2) {
+	animation-delay: 0.65s;
+}
+
+.load1 view:nth-child(3) {
+	animation-delay: 0.78s;
+}
+
+.load2 view:nth-child(3) {
+	animation-delay: 0.91s;
+}
+
+.load3 view:nth-child(3) {
+	animation-delay: 1.04s;
+}
+
+.load1 view:nth-child(4) {
+	animation-delay: 1.17s;
+}
+
+.load2 view:nth-child(4) {
+	animation-delay: 1.3s;
+}
+
+.load3 view:nth-child(4) {
+	animation-delay: 1.43s;
+}
+
+@-webkit-keyframes load {
+	0% {
+		opacity: 1;
+	}
+
+	100% {
+		opacity: 0.2;
+	}
+}
+</style>

ファイルの差分が大きいため隠しています
+ 176 - 0
pages/order/orderDetail.vue


+ 237 - 0
pages/order/orderRefund.vue

@@ -0,0 +1,237 @@
+<template>
+	<view class="content">
+		<view class="order-item">
+			<scroll-view v-if="listStyle == 1" class="goods-box" scroll-x>
+				<view v-for="(goodsItem, goodsIndex) in item.cartInfo" :key="goodsIndex" class="goods-item">
+					<image class="goods-img" :src="goodsItem.productInfo.image" mode="aspectFill"></image>
+				</view>
+			</scroll-view>
+			<view v-if="listStyle == 2" class="goods-box-single" v-for="(goodsItem, goodsIndex) in item.cartInfo" :key="goodsIndex">
+				<image class="goods-img" :src="goodsItem.productInfo.image" mode="aspectFill"></image>
+				<view class="right">
+					<text class="title clamp">{{ goodsItem.productInfo.store_name }}</text>
+					<text class="attr-box">{{ goodsItem.attrInfo ? goodsItem.attrInfo.suk : '' }} x {{ goodsItem.cart_num }}</text>
+					<text class="price">{{ goodsItem.productInfo.price }}</text>
+				</view>
+			</view>
+		</view>
+		<view class="orderDetial">
+			<view class="row b-b flex">
+				<text class="tit">订单总价</text>
+				<view class="input">¥{{ item.total_price }}</view>
+			</view>
+			<view class="row b-b flex">
+				<text class="tit">邮费</text>
+				<view class="input">{{ item.pay_postage > 0 ? '¥' +item.pay_postage : '免邮费' }}</view>
+			</view>
+			<view class="row b-b flex" v-if="item.coupon_id > 0">
+				<text class="tit">优惠券</text>
+				<view class="input">-¥{{ item.coupon_price }}</view>
+			</view>
+			<view class="row b-b flex" v-if="item.use_integral > 0">
+				<text class="tit">积分抵扣</text>
+				<view class="input">-¥{{ item.use_integral }}</view>
+			</view>
+			<view class="row b-b flex">
+				<text class="tit ">实付</text>
+				<view class="input payColor">¥{{ item.pay_price }}</view>
+			</view>
+		</view>
+		<view class="row b-b">
+			<text class="tit">退款理由</text>
+			<picker mode="selector" :range="value" @change="bindChange">
+				<view class="refund" v-if="refund">{{ refund || '请选择退款理由' }}</view>
+				<view class="noRefund" v-else>请选择退款理由</view>
+			</picker>
+		</view>
+		<view class="row b-b">
+			<text class="tit">备注说明</text>
+			<input class="input" type="text" v-model="reason" placeholder="请填写备注" placeholder-class="placeholder" />
+		</view>
+		<button class="add-btn" @click="confirm">提交</button>
+	</view>
+</template>
+
+<script>
+import { refund, refundReason, orderDetail } from '@/api/order.js';
+export default {
+	data() {
+		return {
+			refund: '', //退款理由
+			reason: '', //备注
+			value: ['1', '2', '3', '4', '5', '6', '7', '8', 9, 10, 11, 12, 13],
+			orderId: '',
+			item: {},
+			listStyle: 2
+		};
+	},
+	onLoad(option) {
+		this.orderId = option.id;
+		this.refundReason();
+		this.loadOrder();
+	},
+	methods: {
+		// 切换选中事件
+		bindChange(e) {
+			this.refund = this.value[e.detail.value];
+		},
+		// 加载退款理由
+		refundReason() {
+			refundReason({}).then(e => {
+				this.value = e.data;
+			});
+		},
+		loadOrder() {
+			orderDetail({}, this.orderId).then(e => {
+				this.item = e.data;
+			});
+		},
+		//提交
+		confirm() {
+			let obj = this;
+			if (!obj.refund) {
+				uni.showModal({
+					title: '错误',
+					content: '请填写退货理由',
+					showCancel: false
+				});
+				return false;
+			}
+			refund({
+				text: obj.refund,
+				uni: obj.orderId,
+				refund_reason_wap_explain: obj.reason
+			}).then(function(e) {
+				uni.showToast({
+					title:'提交成功',
+					duration:1500
+				})
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: $page-color-base;
+	padding-top: 16rpx;
+}
+.orderDetial {
+	.row {
+		.input {
+			text-align: right;
+		}
+	}
+}
+.row {
+	display: flex;
+	align-items: center;
+	position: relative;
+	padding: 0 30rpx;
+	height: 110rpx;
+	background: #fff;
+	.refund {
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.noRefund {
+		font-size: 30rpx;
+		color: $font-color-light;
+		padding-left: 20rpx;
+	}
+	.tit {
+		flex-shrink: 0;
+		width: 120rpx;
+		font-size: 30rpx;
+		color: $font-color-dark;
+	}
+	.input {
+		flex: 1;
+		font-size: 30rpx;
+		color: $font-color-dark;
+		padding-left: 20rpx;
+		&.payColor {
+			color: $color-red;
+		}
+	}
+	.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);
+}
+
+/* 多条商品 */
+.order-item {
+	display: flex;
+	flex-direction: column;
+	padding-left: 30rpx;
+	background: #fff;
+	margin-top: 16rpx;
+	.goods-box {
+		height: 160rpx;
+		padding: 20rpx 0;
+		white-space: nowrap;
+		.goods-item {
+			width: 120rpx;
+			height: 120rpx;
+			display: inline-block;
+			margin-right: 24rpx;
+		}
+		.goods-img {
+			display: block;
+			width: 100%;
+			height: 100%;
+		}
+	}
+	/* 单条商品 */
+	.goods-box-single {
+		display: flex;
+		padding: 20rpx 0;
+		.goods-img {
+			display: block;
+			width: 120rpx;
+			height: 120rpx;
+		}
+		.right {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			padding: 0 30rpx 0 24rpx;
+			overflow: hidden;
+			.title {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				line-height: 1;
+			}
+			.attr-box {
+				font-size: $font-sm + 2rpx;
+				color: $font-color-light;
+				padding: 10rpx 12rpx;
+			}
+			.price {
+				font-size: $font-base + 2rpx;
+				color: $font-color-dark;
+				&:before {
+					content: '¥';
+					font-size: $font-sm;
+					margin: 0 2rpx 0 8rpx;
+				}
+			}
+		}
+	}
+}
+</style>

+ 148 - 0
pages/product/common/KlonContent.vue

@@ -0,0 +1,148 @@
+<template>
+	<view class="introduce-section">
+		<text class="title clamp">{{ goodsObjact.title }}</text>
+		<!-- <button open-type="share" class="shareDate">
+			<image class="share-img" src="/static/img/img57.png"></image>
+			好物推荐
+		</button> -->
+		<text class="info" v-if="goodsObjact.store_info">{{ goodsObjact.store_info }}</text>
+		<view class="progress-box">
+			<progress :percent="goodsObjact.percent | parseIntTo" activeColor="#F65527" font-size="10" show-info border-radius="5" stroke-width="9" />
+			<view class="number">剩余{{ goodsObjact.percent | parseIntTo }}%</view>
+		</view>
+		<view class="price-box">
+			<text class="price-tip">¥</text>
+			<view class="price">
+				{{ goodsObjact.price }}
+				<text class="text">/份</text>
+				<text class="m-price" v-if="goodsObjact.ot_price > goodsObjact.price">¥{{ goodsObjact.ot_price }}</text>
+			</view>
+		</view>
+		<!-- <view class="price-green">
+			¥{{ goodsObjact.ot_price }}
+			<text>市场价</text>
+		</view> -->
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		goodsObjact: {
+			type: Object,
+			default: function() {
+				return {
+					percent:1
+				};
+			}
+		}
+	},
+	filters: {
+		parseIntTo(percent) {
+			percent = +percent * 100;
+			if (percent % 1 === 0) {
+				return percent;
+			} else {
+				percent = percent.toFixed(1);
+				return percent;
+			}
+		}
+	},
+	data() {
+		return {};
+	}
+};
+</script>
+
+<style lang="scss">
+/* 标题简介 */
+.introduce-section {
+	position: relative;
+	background: #fff;
+	padding: 35rpx 0rpx;
+	padding-left: 35rpx;
+	.title {
+		font-size: 32rpx;
+		color: $font-color-dark;
+		height: 50rpx;
+		width: 70%;
+		.tip-o {
+			color: #ff3334;
+			padding-left: 15rpx;
+		}
+	}
+	.shareDate {
+		position: absolute;
+		top: 25rpx;
+		right: 25rpx;
+		font-size: 26rpx;
+		color: #3d3f46;
+		border-radius: 15rpx;
+		background-color: #ffffff;
+		height: 60rpx;
+		line-height: 60rpx;
+	}
+	.share-img {
+		width: 30rpx;
+		height: 30rpx;
+		position: relative;
+		top: 5rpx;
+		left: 0;
+		margin-right: 10rpx;
+	}
+	.info {
+		color: #999999;
+		font-size: 26rpx;
+		padding-bottom: 15rpx;
+	}
+	.progress-box {
+		width: 260rpx;
+		position: relative;
+		margin-top: 15rpx;
+		line-height: 10px;
+		.number {
+			font-size: 17rpx;
+			position: absolute;
+			z-index: 99;
+			top: 3rpx;
+			left: 15rpx;
+			color: #ffffff;
+		}
+	}
+	.price-box {
+		display: flex;
+		align-items: baseline;
+		height: 64rpx;
+		padding: 10rpx 0;
+		font-size: 26rpx;
+		color: $uni-color-primary;
+	}
+	.price {
+		font-size: $font-lg + 6rpx;
+		.text {
+			padding-left: 5rpx;
+			color: #b0b0b0;
+			font-size: 22rpx !important;
+		}
+	}
+	.price-green {
+		color: #2dbd59;
+		font-size: 28rpx !important;
+		text {
+			background: #2dbd59;
+			color: #ffffff;
+			padding: 0rpx 10rpx;
+			border-radius: 5rpx;
+			font-size: 22rpx !important;
+			margin-left: 15rpx;
+		}
+	}
+	.m-price {
+		margin: 0 12rpx;
+		color: $font-color-light;
+		text-decoration: line-through;
+		margin-left: 25rpx;
+		font-size: 24rpx;
+	}
+}
+</style>

+ 68 - 0
pages/product/common/contentText.vue

@@ -0,0 +1,68 @@
+<template>
+	<view class="detail-desc">
+		<view class="d-header"><text>图文详情</text></view>
+		<rich-text class="detail-centent" :nodes="description"></rich-text>
+		<!-- 底部高度撑开 -->
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		description: {
+			default: ''
+		},
+	},
+	data() {
+		return {
+			
+		};
+	},
+};
+</script>
+
+<style lang="scss">
+	/*  详情 */
+	.detail-desc {
+		margin-top: 14rpx;
+		background: #fff;
+		/deep/ img {
+			max-width: 100% !important;
+			display: inline !important;
+		}
+		/deep/ div {
+			max-width: 100% !important;
+		}
+		.d-header {
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			height: 80rpx;
+			font-size: $font-base + 2rpx;
+			color: $font-color-dark;
+			position: relative;
+	
+			text {
+				padding: 0 20rpx;
+				background: #fff;
+				position: relative;
+				z-index: 1;
+			}
+			&:after {
+				position: absolute;
+				left: 50%;
+				top: 50%;
+				transform: translateX(-50%);
+				width: 300rpx;
+				height: 0;
+				content: '';
+				border-bottom: 1px solid #ccc;
+			}
+		}
+	}
+	/* 商品详情中限制图片大小 */
+	/deep/ .rich-img {
+		width: 100% !important;
+		height: auto;
+	}
+</style>

+ 139 - 0
pages/product/common/discounts.vue

@@ -0,0 +1,139 @@
+<template>
+	<view class="c-list">
+		<view class="c-row b-b">
+			<text class="tit">配送</text>
+			<view class="bz-list con" v-if="!mark">立即下单 ,预计最快第二天8.30-9:30送达</view>
+			<view class="bz-list con reding" v-else>{{mark}}</view>
+		</view>
+		<view v-if="showCoupon" class="c-row b-b" @click="Getcoupon">
+			<text class="tit">优惠券</text>
+			<text class="con t-r red">领取优惠券</text>
+			<text class="iconfont iconenter"></text>
+		</view>
+		<view class="c-row b-b">
+			<text class="tit">简介</text>
+			<view class="bz-list con">
+				<text>{{ Info }}</text>
+				<!-- <text>{{ copy2 }}</text> -->
+
+			</view>
+			<view class="copy-btn" @click="copy">一键复制</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			showCoupon: {
+				type: Boolean,
+				default: false
+			},
+			mark: {
+				default: ''
+			},
+			Info: {
+				default: ''
+			},
+		},
+		data() {
+			return {
+				copy1: '食材质检 ·',
+				copy2: '无接触配送到门口'
+			};
+		},
+		methods: {
+			Getcoupon() {
+				this.$emit('clickCoupon')
+			},
+			copy() {
+				// let copyText = this.copy1 + ' ' + this.copy2;
+				console.log(this.Info)
+				uni.setClipboardData({
+					//去找上面的数据
+					data: this.Info,
+					success: function(res) {
+						uni.showToast({
+							title: '复制成功',
+						});
+					},
+					fail: function(res) {
+					}
+				});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.c-list {
+		font-size: $font-sm + 2rpx;
+		color: $font-color-base;
+		background: #fff;
+
+		.title {
+			color: #333333;
+			font-size: 32rpx;
+			font-weight: bold;
+		}
+
+		.c-row {
+			display: flex;
+			align-items: center;
+			padding: 20rpx 30rpx;
+			position: relative;
+		}
+
+		.tit {
+			width: 140rpx;
+		}
+
+		.con {
+			flex: 1;
+			color: $font-color-dark;
+
+			.selected-text {
+				margin-right: 10rpx;
+			}
+		}
+
+		.reding {
+			color: #FF0815 !important;
+		}
+
+		.bz-list {
+			height: 40rpx;
+			font-size: $font-sm + 2rpx;
+			color: $font-color-dark;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			white-space: nowrap;
+			
+			text {
+				display: inline-block;
+				margin-right: 30rpx;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				white-space: nowrap;
+				width: 100%;
+			}
+		}
+
+		.copy-btn {
+			background-color: #F3F3F2;
+			padding: 8rpx 20rpx;
+			border-radius: 10rpx;
+			color: #040406;
+		}
+
+		.red {
+			color: #fb6d24;
+		}
+	}
+
+	/* 商品详情中限制图片大小 */
+	.rich-img {
+		width: 100% !important;
+		height: auto;
+	}
+</style>

+ 115 - 0
pages/product/common/estimate.vue

@@ -0,0 +1,115 @@
+<template>
+	<view class="eva-section" @click="navTo">
+		<view class="e-header">
+			<text class="tit">评价</text>
+			<text>({{ list.replyCount }})</text>
+			<text class="tip">好评率 {{ list.replyChance }}%</text>
+			<text class="iconfont iconenter"></text>
+		</view>
+		<view class="eva-box">
+			<image class="portrait" :src="reply.avatar" mode="aspectFill"></image>
+			<view class="right">
+				<text class="name">{{ reply.nickname }}</text>
+				<text class="con">{{ reply.comment }}</text>
+				<view class="con_box">
+					<view class="con_image" v-for="item in reply.pics"><image :src="item"></image></view>
+				</view>
+				<view class="bot">
+					<text class="attr"></text>
+					<text class="stime">{{ reply.add_time }}</text>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		list: {
+			default: ''
+		},
+		reply: {
+			default: ''
+		},
+	},
+	data() {
+		return {
+		};
+	},
+	methods: {
+		navTo() {
+			this.$emit('navTo')
+		}
+	},
+};
+</script>
+
+<style lang="scss">
+/* 评价 */
+.eva-section {
+	display: flex;
+	flex-direction: column;
+	padding: 20rpx 30rpx;
+	background: #fff;
+	margin-top: 16rpx;
+	.e-header {
+		display: flex;
+		align-items: center;
+		height: 70rpx;
+		font-size: $font-sm + 2rpx;
+		color: $font-color-light;
+		.tit {
+			font-size: $font-base + 2rpx;
+			color: $font-color-dark;
+			margin-right: 4rpx;
+		}
+		.tip {
+			flex: 1;
+			text-align: right;
+		}
+		.iconenter {
+			margin-left: 10rpx;
+		}
+	}
+	.eva-box {
+		display: flex;
+		padding: 20rpx 0;
+		.portrait {
+			flex-shrink: 0;
+			width: 80rpx;
+			height: 80rpx;
+			border-radius: 100px;
+		}
+		.right {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			font-size: $font-base;
+			color: $font-color-base;
+			padding-left: 26rpx;
+			.con {
+				font-size: $font-base;
+				color: $font-color-dark;
+				padding: 20rpx 0;
+			}
+			.bot {
+				display: flex;
+				justify-content: space-between;
+				font-size: $font-sm;
+				color: $font-color-light;
+			}
+		}
+	}
+	.con_image {
+		width: 130rpx;
+		height: 130rpx;
+		display: inline-block;
+		padding: 15rpx;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+}
+</style>

+ 85 - 0
pages/product/common/freshDetail.vue

@@ -0,0 +1,85 @@
+<template>
+	<view class="c-list" v-if="goodsObjact.net_quantity||goodsObjact.storage_condition||goodsObjact.expiration_date">
+		<view class="c-row title b-b">规格</view>
+		<view class="c-row b-b" v-if="goodsObjact.net_quantity">
+			<text class="tit">净含量</text>
+			<text class="con t-r">{{ goodsObjact.net_quantity }}</text>
+		</view>
+		<view class="c-row b-b" v-if="goodsObjact.storage_condition">
+			<text class="tit">保存条件</text>
+			<text class="con t-r">{{ goodsObjact.storage_condition }}</text>
+		</view>
+		<view class="c-row b-b" v-if="goodsObjact.expiration_date">
+			<text class="tit">保质期</text>
+			<text class="con t-r">{{ goodsObjact.expiration_date }}</text>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		goodsObjact: {
+			type: Object,
+			default: function () {
+				return {
+					
+				}
+			}
+		},
+	},
+	data() {
+		return {
+			
+		};
+	},
+};
+</script>
+
+<style lang="scss">
+.c-list {
+	font-size: $font-sm + 2rpx;
+	color: $font-color-base;
+	background: #fff;
+	.title {
+		color: #333333;
+		font-size: 32rpx;
+		font-weight: bold;
+	}
+	.c-row {
+		display: flex;
+		align-items: center;
+		padding: 20rpx 30rpx;
+		position: relative;
+	}
+	.tit {
+		width: 140rpx;
+	}
+	.con {
+		flex: 1;
+		color: $font-color-dark;
+		.selected-text {
+			margin-right: 10rpx;
+		}
+	}
+	.bz-list {
+		height: 40rpx;
+		font-size: $font-sm + 2rpx;
+		color: $font-color-dark;
+		text {
+			display: inline-block;
+			margin-right: 30rpx;
+		}
+	}
+	.con-list {
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+		color: $font-color-dark;
+		line-height: 40rpx;
+	}
+	.red {
+		color: #fb6d24;
+	}
+}
+</style>

+ 155 - 0
pages/product/common/groupBottom.vue

@@ -0,0 +1,155 @@
+<template>
+	<view class="goods-pay-box ">
+		<view class="goods-pay-buttom flex" v-if="!seckillObj.stop">
+			<view class="goods-pay bg-pinks">
+			<!-- 	<view class="goods-pay-o flex">
+					<view class="title">本单发起人奖金</view>
+					<view class="money">{{peopleMoney}}元</view>
+				</view>
+				<view class="goods-pay-t">
+					本单销售额佣金
+					<text>?%</text>
+				</view> -->
+				发起拼团得奖金
+			</view>
+			<!-- 单规格 -->
+			<view class="goods-pay bg-danger" v-if="many == 1" @click="buy(1)"><view class="goods-buttom">一键开团</view></view>
+			<!-- 多规格 -->
+			<view class="goods-pay bg-danger" v-else @click="buys"><view class="goods-buttom">一键开团</view></view>
+		</view>
+		<view class="goods-pay-stop" v-else>活动已结束</view>
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		peoplePrize: {
+			default:0
+		},
+		seckillObj: {
+			type: Object,
+			default: function() {
+				return {
+					stopTime: 0, //结束时间
+					stop: false, //是否结束
+					stopTimeH: 0, //小时
+					stopTimeM: 0, //分钟
+					stopTimeS: 0 //秒钟
+				};
+			}
+		},
+		many:{
+			default:9
+		}
+	},
+	computed: {
+		peopleMoney() {
+			return +this.peoplePrize 
+		}
+	},
+	data() {
+		return {};
+	},
+	methods: {
+		buy(ls) {
+			this.$emit('buy', ls);
+		},
+		buys(){
+			this.$emit('specOPne');
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+// 底部拼团、秒杀支付按钮
+.goods-pay-box {
+	position: fixed;
+	left: 0;
+	bottom: 0;
+	z-index: 99;
+	width: 100%;
+	height: 100rpx;
+	line-height: 1;
+	color: #ffffff;
+	padding: 10rpx 30rpx;
+	text-align: center;
+	font-size: $font-lg;
+	background-color: #ffffff;
+	.goods-pay-buttom {
+		overflow: hidden;
+		border-radius: 99rpx;
+		height: 100%;
+	}
+	.bgLine {
+		background: linear-gradient(90deg, rgba(239, 78, 81, 1) 0%, rgba(244, 113, 59, 1) 100%);
+	}
+	// 拼团支付按钮
+	.goods-pay {
+		display: flex;
+		align-content: center;
+		flex-wrap: wrap;
+		justify-content: center;
+		height: 100rpx;
+		font-size: 22rpx;
+		.goods-buttom {
+			font-size: 35rpx;
+			width: 100%;
+		}
+
+		&.bg-danger {
+			// background:linear-gradient(14deg,rgba(254,107,38,1),rgba(255,50,40,1));
+			background: linear-gradient(270deg, #5dbc7c 0%, #5dbc7c 100%);
+		}
+		.goods-pay-o {
+			border: 1px solid #ddffdf;
+			.title {
+				background:linear-gradient(14deg,rgba(254,107,38,1),rgba(255,50,40,1));
+				padding: 5rpx 10rpx;
+				border-radius: 5rpx;
+				line-height: 1;
+				flex-shrink: 0;
+			}
+			.money {
+				padding: 5rpx 10rpx;
+				color: #ff0919;
+				flex-grow: 1;
+			}
+		}
+		.goods-pay-t {
+			padding: 5rpx 10rpx;
+			color: #ff0919;
+			text {
+				padding: 5rpx 10rpx;
+				color: rgba(249, 220, 221, 1);
+			}
+		}
+		.goods-pay-o,
+		.goods-pay-t {
+			width: 260rpx;
+			border-radius: 5rpx;
+			background-color: #fff5f4;
+			border: 1px solid #f9dcdd;
+		}
+	}
+	.bg-pinks {
+		// background: linear-gradient(90deg, #f9dcdd, #feeeee);
+		background: #ddffdf;
+		// color: #FD1A2B !important;
+		color: #5dbc7c;
+		font-size: 32rpx !important;
+		font-weight: bold;
+	}
+	.goods-pay-stop,
+	.goods-pay {
+		padding: 15rpx 0;
+		height: 100%;
+		width: 100%;
+	}
+	.goods-pay-stop {
+		background: $color-gray;
+		line-height: 70rpx;
+	}
+}
+</style>

+ 148 - 0
pages/product/common/groupContent.vue

@@ -0,0 +1,148 @@
+<template>
+	<view class="introduce-section">
+		<text class="title clamp">
+			{{goodsObjact.title}}
+			<!-- <text class="tip-o">截单后8小时到货</text> -->
+		</text>
+		<!-- <button open-type="share" class="shareDate flex_item">
+			<image class="share-img" src="/static/img/img085.png"></image>
+			<view class="name">分享</view>
+		</button> -->
+		<!-- <view class="progress-box">
+			<progress :percent="goodsObjact.percent | parseIntTo" activeColor="#F65527" font-size="10" show-info border-radius="5" stroke-width="9" />
+			<view class="number">剩余{{ goodsObjact.percent | parseIntTo }}%</view>
+		</view> -->
+		<view class="old_price" v-if="goodsObjact.pink_type == '达人团'">
+			¥{{ goodsObjact.product_price }}
+		</view>
+		<text class="info" v-if="goodsObjact.store_info">{{ goodsObjact.store_info }}</text>
+		<!-- <view class="price-green">
+			¥{{ goodsObjact.product_price }}
+			<text>市场价</text>
+		</view> -->
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		goodsObjact: {
+			type: Object,
+			default: function() {
+				return {
+					store_info: '',
+					ot_price: ''
+				};
+			}
+		}
+	},
+	data() {
+		return {};
+	},
+	filters: {
+		parseIntTo(percent) {
+			percent = +percent * 100;
+			if (percent % 1 === 0) {
+				return percent;
+			} else {
+				percent = percent.toFixed(1);
+				return percent;
+			}
+		}
+	},
+	methods: {
+		Getcoupon() {
+			this.$emit('click');
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+/* 标题简介 */
+.introduce-section {
+	position: relative;
+	background: #fff;
+	padding: 35rpx 0rpx;
+	padding-left: 35rpx;
+	.title {
+		font-size: 32rpx;
+		color: $font-color-dark;
+		height: 50rpx;
+		width: 70%;
+		font-weight: bold;
+		.tip-o {
+			color: #ff3334;
+			padding-left: 15rpx;
+			font-size: 25rpx;
+		}
+	}
+	.shareDate {
+		padding: 15rpx 25rpx;
+		padding-bottom: 25rpx !important;
+		position: absolute;
+		top: 25rpx;
+		right: 0rpx;
+		font-size:30rpx;
+		color: #3d3f46;
+		border-bottom-left-radius: 25rpx;
+		border-top-left-radius: 25rpx;
+		background-color: #ffffff;
+		height: 60rpx;
+		background-color:#F2FEE6;
+		border: none !important;
+	}
+	uni-button:after{
+		border: none !important;
+	}
+	.share-img {
+		width: 45rpx;
+		height: 45rpx;
+		position: relative;
+		top: 5rpx;
+		left: 0;
+		margin-right: 10rpx;
+	}
+	.name{
+		position: relative;
+		top: 5rpx;
+	}
+	.progress-box {
+		width: 260rpx;
+		position: relative;
+		margin-top: 15rpx;
+		line-height: 10px;
+		.number {
+			font-size: 17rpx;
+			position: absolute;
+			z-index: 999;
+			top: 3rpx;
+			left: 15rpx;
+			color: #ffffff;
+		}
+	}
+	.old_price {
+		margin-top: 10rpx;
+		font-size: $font-base;
+		text-decoration: line-through;
+		color: #7a7a7a;
+	}
+	.info {
+		color: #999999;
+		font-size: 26rpx;
+		padding-bottom: 15rpx;
+	}
+	.price-green {
+		color: #2dbd59;
+		font-size: 28rpx !important;
+		text {
+			background: #2dbd59;
+			color: #ffffff;
+			padding: 0rpx 10rpx;
+			border-radius: 5rpx;
+			font-size: 22rpx !important;
+			margin-left: 15rpx;
+		}
+	}
+}
+</style>

+ 195 - 0
pages/product/common/groupTime.vue

@@ -0,0 +1,195 @@
+<template>
+	<view class="introduce-section seckill-box-title">
+		<view class="title flex" style="width: 100%;">
+			<view class="title-left flex">
+				<view class="title-box flex_item">
+					<view class="title-o">
+						<view class="price-tip flex">
+							<view class="tip-info">¥</view>
+							<text class="price">{{ goodsObjact.price }}</text>
+						</view>
+					</view>
+					<view class="title-t">
+						<view class="peice-out"></view>
+						<view class="num">{{ goodsObjact.people }}人起团</view>
+					</view>
+				</view>
+				<view class="group flex">
+					<image src="/static/img/img064.png"></image>
+					<view class="text">{{goodsObjact.pink_type}}</view>
+				</view>
+			</view>
+			<view class="timeStop">
+				<view class="item">
+					<view class="timeStop-name">距离结束</view><!-- #FF3334 -->
+					<uni-countdown
+						class="timeBox"
+						color="#ffffff"
+						background-color="#5dbc7c"
+						splitor-color="#000000"
+						:show-day="false"
+						:hour="seckillObj.stopTimeH+(seckillObj.stopTimeD*24)"
+						:minute="seckillObj.stopTimeM"
+						:second="seckillObj.stopTimeS"
+					></uni-countdown>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import uniCountdown from '@/components/uni-countdown/uni-countdown.vue';
+export default {
+	components: {
+		uniCountdown
+	},
+	props: {
+		goodsObjact: {
+			type: Object,
+			default: function() {
+				return {
+					price: 0,
+					product_price: 0,
+					people: 0
+				};
+			}
+		},
+		seckillObj: {
+			type: Object,
+			default: function() {
+				return {
+					stopTime: 0, //结束时间
+					stop: false, //是否结束
+					stopTimeH: 0, //小时
+					stopTimeM: 0, //分钟
+					stopTimeS: 0, //秒钟
+					stopTimeD: 0, //秒钟
+					upTime: 0
+				};
+			}
+		}
+	},
+	data() {
+		return {};
+	}
+};
+</script>
+
+<style lang="scss">
+/* 标题简介 */
+.introduce-section {
+	position: relative;
+	background: #fff;
+	.title {
+		font-size: 32rpx;
+		color: $font-color-dark;
+		.tip-o {
+			color: #ff3334;
+			padding-left: 15rpx;
+		}
+		.title-left {
+			padding: 15rpx;
+			width: 560rpx;
+		}
+	}
+	.title-box {
+		color: #ffffff;
+		.title-o {
+			.price {
+				font-size: 65rpx !important;
+				position: relative;
+				top: 8rpx;
+			}
+		}
+		.title-t {
+			font-size: 24rpx !important;
+			position: relative;
+			bottom: 10rpx;
+			padding-left: 10rpx;
+			top: 10rpx;
+			.peice-out {
+				text-decoration: line-through;
+			}
+			.num {
+				margin-top: 10rpx;
+				background-color: #ffffff;
+				color: #ff3a56;
+				border-radius: 8rpx;
+				padding: 0 5rpx ;
+				float: left;
+			}
+		}
+	}
+	.group {
+		color: #ffffff;
+		position: relative;
+		top: 8rpx;
+		image {
+			width: 55rpx;
+			height: 45rpx;
+		}
+		.text {
+			font-size: 40rpx !important;
+			padding-left: 10rpx;
+		}
+	}
+	.timeStop {
+		// background-color: #feeeee;
+		background: #ddffdf;
+		height: 120rpx;
+		padding: 0 10rpx;
+		position: relative;
+		width: 0;
+		flex-grow: 1;
+		.timeStop-name {
+			padding-top: 15rpx;
+			text-align: center;
+			// color: #ff3334;
+			color:#5dbc7c;
+			font-size: 20rpx;
+		}
+		.timeBox {
+			// margin-left: -10rpx;
+			position: absolute;
+			top: 50rpx;
+		}
+		.item{
+			height: 120rpx;
+			width: 0;
+			min-width: 100%;
+			position: relative;
+		}
+	}
+	.share-img {
+		width: 30rpx;
+		height: 30rpx;
+		position: relative;
+		top: 5rpx;
+		left: 0;
+		margin-right: 10rpx;
+	}
+}
+.seckill-box-title {
+	// background:linear-gradient(14deg,rgba(254,107,38,1),rgba(255,50,40,1)) !important;
+	background: linear-gradient(270deg, #5dbc7c 0%, #5dbc7c 100%) !important;
+	.price,
+	.m-price {
+		color: #ffffff !important;
+	}
+	.price-tip {
+		font-size: $font-base;
+		color: #ffffff !important;
+	}
+	.tip-info{
+		position: relative;
+		top:18rpx;
+		font-size: 32rpx !important;
+		padding-right: 8rpx;
+	}
+	.price {
+		font-size: 45rpx !important;
+		font-weight: bold;
+	}
+}
+</style>

+ 120 - 0
pages/product/common/guessLike.vue

@@ -0,0 +1,120 @@
+<template>
+	<view class="guess-item">
+		<view class="guess">猜你喜欢</view>
+		<view class="guess-scroll flex_item" scroll-x>
+			<view class="scroll-list" v-for="ls in goodList" @click="navToDetailPage(ls)">
+				<view class="scoll-img"><image :src="ls.image"></image></view>
+				<view class="scoll-name ellipsis">{{ ls.store_name }}</view>
+				<view class="price-list flex">
+					<view class="tpl">
+						<view class="red-price">
+							¥
+							<text>{{ ls.price }}</text>
+						</view>
+						<view class="grey-price">¥{{ ls.ot_price }}</view>
+					</view>
+					<view class="img position-relative" @click.stop="Addcar(ls)">
+						<image src="/static/img/img13.png"></image>
+						<view class="corner" v-if="ls.cart_num > 0">
+							<text>{{ ls.cart_num }}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		goodList: {
+			type: Array,
+			default: function () {
+				return []
+			}
+		},
+	},
+	methods: {
+		// 跳转到详情页
+		navToDetailPage(ls){
+			this.$emit('clickNavTo',ls)
+		},
+		// 加入购物车
+		Addcar(ls){
+			this.$emit('Addcar',ls)
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+//猜你喜欢
+.guess-item {
+	padding: 25rpx 25rpx;
+	background: #ffffff;
+	margin-bottom: 15rpx;
+	padding-bottom: 45rpx !important;
+	.guess {
+		color: #000000;
+		font-size: 35rpx;
+		font-weight: 500;
+		padding-bottom: 25rpx;
+	}
+	.guess-scroll {
+		width: 100%;
+		font-size: 24rpx;
+		overflow: hidden;
+		overflow-x: auto;
+		justify-content: flex-start;
+		.scroll-list {
+			border: 2rpx solid #f0f0f0;
+			border-radius: 25rpx;
+			margin-right: 15rpx;
+			.scoll-img {
+				width: 227rpx;
+				border-top-right-radius: 25rpx;
+				border-top-left-radius: 25rpx;
+				height: 227rpx;
+				overflow: hidden;
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+			.scoll-name {
+				height: 80rpx;
+				width: 227rpx;
+				font-size: 22rpx;
+				padding: 15rpx 15rpx;
+			}
+			.price-list {
+				padding: 25rpx 15rpx;
+				padding-right: 25rpx;
+				.tpl {
+					.red-price {
+						color: #f31d29;
+						text {
+							font-size: 35rpx !important;
+							font-weight: bold;
+						}
+					}
+					.grey-price {
+						text-decoration: line-through;
+						color: #999999;
+						font-size: 10px !important;
+					}
+				}
+				.img {
+					width: 45rpx;
+					height: 45rpx;
+					image {
+						width: 100%;
+						height: 100%;
+					}
+				}
+			}
+		}
+	}
+}
+</style>

+ 68 - 0
pages/product/common/klonButtom.vue

@@ -0,0 +1,68 @@
+<template>
+	<view class="klon-buttom">
+		<view class="klon-frame">
+			<button type="primary" class="klon-buy" @click="buy(1)" v-if="goodsObjact.stock > 0">
+				<view class="klon-buyText">立即购买</view>
+			</button>
+			<button type="primary" class="klon-no" v-if="goodsObjact.stock < 1">
+				<view class="klon-buyText">已售罄</view>
+			</button>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		goodsObjact: {
+			type: Object,
+			default: function () {
+				return {
+					
+				}
+			}
+		},
+	},
+	data() {
+		return {
+			
+		};
+	},
+	methods: {
+		buy(data){
+			this.$emit('buy',data)
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.klon-buttom {
+	position: fixed;
+	bottom: 0rpx;
+	z-index: 95;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	width: 750rpx;
+	height: 100rpx;
+	padding: 10rpx 30rpx;
+	background-color: #ffffff;
+	.klon-frame {
+		width: 100%;
+		.klon-buy {
+			border-radius: 100rpx;
+			// background: linear-gradient(270deg, rgba(181,116,242, 1) 0%, rgba(139,86,254, 1) 100%);
+			background:linear-gradient(14deg,rgba(255,116,37,1),rgba(255,30,41,1));
+		}
+		.klon-no {
+			border-radius: 100rpx;
+			background: #999999;
+		}
+		.klon-buyText {
+			font-size: 34rpx;
+			width: 100%;
+		}
+	}
+}
+</style>

+ 164 - 0
pages/product/common/productBottom.vue

@@ -0,0 +1,164 @@
+<template>
+	<view class="page-bottom">
+		<view class="p-b-btn" :class="{ active: goodsObjact.userCollect }" @click="toFavorite(goodsObjact)">
+			<text class="iconfont " :class="{ iconlike: !goodsObjact.userCollect, iconlikefill: goodsObjact.userCollect }"></text>
+			<text>收藏</text>
+		</view>
+		<view class="action-btn-group">
+			<button type="primary" class=" action-btn no-border add-cart-btn" @click="buy(2)">加入购物车</button>
+			<button type="primary" class=" action-btn no-border buy-now-btn" @click="buy(1)">立即购买</button>
+		</view>
+	</view>
+</template>
+
+<script>
+import { collectAdd, collectDel } from '@/api/product.js';
+export default {
+	props: {
+		many: {
+			default: 9
+		},
+		goodsObjact: {
+			default: function() {
+				return {};
+			}
+		},
+		goodsid: {
+			default: ''
+		}
+	},
+	data() {
+		return {};
+	},
+	methods: {
+		buy(type) {
+			this.$emit('specOPne', type);
+		},
+		//收藏
+		toFavorite(item) {
+			let obj = this;
+			item.userCollect = !item.userCollect;
+			if (!item.userCollect) {
+				collectDel({ id: obj.goodsid, category: 'product' }).then(function(e) {
+					uni.showToast({
+						title: '成功取消收藏',
+						type: 'top',
+						duration: 1500
+					});
+				});
+			} else {
+				collectAdd({ id: obj.goodsid, category: 'product' }).then(function(e) {
+					uni.showToast({
+						title: '成功加入收藏',
+						type: 'top',
+						duration: 1500
+					});
+				});
+			}
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+/* 底部操作菜单 */
+.page-bottom {
+	position: fixed;
+	bottom: 0rpx;
+	z-index: 95;
+	display: flex;
+	justify-content: space-between;
+	padding-left: 20rpx;
+	align-items: center;
+	width: 750rpx;
+	height: 96rpx;
+	background-color: #ffffff;
+	/* box-shadow: 0 0 20rpx 0 rgba(0, 0, 0, 0.5);
+	border-radius: 16rpx; */
+	.p-b-btn {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		font-size: $font-sm;
+		color: $font-color-base;
+		width: 96rpx;
+		height: 80rpx;
+		.iconfont {
+			font-size: 40rpx;
+			line-height: 48rpx;
+			color: $font-color-light;
+		}
+		&.active,
+		&.active .iconfont {
+			color: $uni-color-primary;
+		}
+		.iconlikefill {
+			font-size: 46rpx;
+		}
+		image {
+			width: 56rpx;
+			height: 58rpx;
+		}
+	}
+	.action-btn-group {
+		display: flex;
+		height: 96rpx;
+		overflow: hidden;
+		margin-left: 20rpx;
+		position: relative;
+		&:after {
+			content: '';
+			position: absolute;
+			top: 50%;
+			right: 50%;
+			transform: translateY(-50%);
+			height: 28rpx;
+			width: 0;
+		}
+		.action-btn {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 300rpx;
+			height: 100%;
+			font-size: $font-base;
+			padding: 0;
+			border-radius: 0;
+			background: transparent;
+			&.buy-now-btn {
+				background-color: #ff4c4c;
+			}
+			&.add-cart-btn {
+				background-color: #ffb238;
+			}
+		}
+	}
+}
+.p-b-btn {
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	justify-content: center;
+	font-size: $font-sm;
+	color: $font-color-base;
+	width: 96rpx;
+	height: 80rpx;
+	.iconfont {
+		font-size: 40rpx;
+		line-height: 48rpx;
+		color: $font-color-light;
+	}
+	&.active,
+	&.active .iconfont {
+		color: $uni-color-primary;
+	}
+	.icon-fenxiang2 {
+		font-size: 42rpx;
+		transform: translateY(-2rpx);
+	}
+	.iconlikefill {
+		font-size: 46rpx;
+	}
+}
+</style>

+ 118 - 0
pages/product/common/productContent.vue

@@ -0,0 +1,118 @@
+<template>
+	<view class="introduce-section">
+		<view class="price-box">
+			<text class="price-tip">¥</text>
+			<view class="price">
+				{{ goodsObjact.price || 0 }}
+				<!-- <text v-if="goodsObjact.integral != 0">+{{ goodsObjact.integral }}积分</text> -->
+			</view>
+		</view>
+		<text class="title clamp2">{{ goodsObjact.store_name }}</text>
+		<text class="info" v-if="goodsObjact.store_info">{{ goodsObjact.store_info }}</text>
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		goodsObjact: {
+			type: Object,
+			default: function() {
+				return {
+					percent: 1
+				};
+			}
+		}
+	},
+	filters: {
+		parseIntTo(percent) {
+			percent = +percent * 100;
+			if (percent % 1 === 0) {
+				return percent;
+			} else {
+				percent = percent.toFixed(1);
+				return percent;
+			}
+		}
+	},
+	data() {
+		return {};
+	}
+};
+</script>
+
+<style lang="scss">
+/* 标题简介 */
+.introduce-section {
+	position: relative;
+	background: #fff;
+	padding: 26rpx 26rpx 30rpx 20rpx;
+	.title {
+		margin-top: 26rpx;
+		font-size: 36rpx;
+		font-family: PingFang SC;
+		font-weight: 800;
+		color: #333333;
+	}
+	.shareDate {
+		position: absolute;
+		top: 25rpx;
+		right: 25rpx;
+		font-size: 26rpx;
+		color: #3d3f46;
+		border-radius: 15rpx;
+		background-color: #ffffff;
+		height: 60rpx;
+		line-height: 60rpx;
+	}
+	.share-img {
+		width: 30rpx;
+		height: 30rpx;
+		position: relative;
+		top: 5rpx;
+		left: 0;
+		margin-right: 10rpx;
+	}
+	.info {
+		color: #999999;
+		font-size: 26rpx;
+		padding-bottom: 15rpx;
+	}
+	.progress-box {
+		width: 260rpx;
+		position: relative;
+		margin-top: 15rpx;
+		line-height: 10px;
+		.number {
+			font-size: 17rpx;
+			position: absolute;
+			z-index: 999;
+			top: 3rpx;
+			left: 15rpx;
+			color: #ffffff;
+		}
+	}
+	.price-box {
+		display: flex;
+		align-items: baseline;
+		height: 64rpx;
+		font-size: 26rpx;
+		color: #ff4c4c;
+	}
+	.price {
+		font-size: 50rpx;
+		.text {
+			padding-left: 5rpx;
+			color: #b0b0b0;
+			font-size: 32rpx !important;
+		}
+	}
+	.m-price {
+		margin: 0 12rpx;
+		color: $font-color-light;
+		text-decoration: line-through;
+		margin-left: 25rpx;
+		font-size: 24rpx;
+	}
+}
+</style>

+ 55 - 0
pages/product/common/topSwiper.vue

@@ -0,0 +1,55 @@
+<template>
+	<view class="carousel">
+		<swiper indicator-dots :circular="true" duration="400">
+			<swiper-item class="swiper-item" v-for="(item, index) in imgList" :key="index">
+				<view class="image-wrapper"><image :src="item" class="loaded" mode="scaleToFill"></image></view>
+			</swiper-item>
+		</swiper>
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		imgList: {
+			type: Array,
+			default: function () {
+				return []
+			}
+		},
+	},
+	data() {
+		return {
+			
+		};
+	},
+};
+</script>
+
+<style lang="scss">
+.carousel {
+	/* #ifdef APP-PLUS */
+	padding-top: var(--status-bar-height);
+	/* #endif */
+	height: 700rpx;
+	position: relative;
+	swiper {
+		height: 100%;
+	}
+	.image-wrapper {
+		width: 100%;
+		height: 100%;
+	}
+	.swiper-item {
+		display: flex;
+		justify-content: center;
+		align-content: center;
+		height: 700rpx;
+		overflow: hidden;
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+}
+</style>

+ 386 - 0
pages/product/groupBooking/detail.vue

@@ -0,0 +1,386 @@
+<template>
+	<view class="box">
+		<!-- 拼团 -->
+		<view class="lyy-a">
+			<view class="lyy-a-p">
+				<view class="lyy-a-f">
+					<view><image :src="goods.image" class="lyy-a-tu" /></view>
+					<view class="lyy-a-z">
+						<view class="lyy-a-word lyy-a-word2">{{ goods.title }}</view>
+						<view class="flex money-box">
+							<view class="lyy-a-f lyy-a-word margin-r-20">
+								<view class="lyy-a-word3">¥{{ goods.price }}</view>
+							</view>
+							<view class="lyy-a-tu2 lyy-a-f padding-c-20 border-radius-all">
+								<view class="lyy-a-tu3"><image src="http://lxscimg.liuniu946.com/2019-11-02_5dbd110b5928a.png" class="lyy-a-tu5"></image></view>
+								<view class="lyy-a-tu4 flex-shrink-false">{{ goods.people }}人拼</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="lyy-hx"></view>
+		<!-- 第二部分 -->
+		<view class="lyy-b padding-t-20">
+			<view class="lyy-b-p">
+				<view class="lyy-b-jz flex">
+					<view class="image1"><view class="lyy-b-word">剩余时间</view></view>
+				</view>
+				<view class="lyy-b-jz flex">
+					<uni-countdowns
+						v-if="pinkBool == 0"
+						color="#FFFFFF"
+						splitor-color="#FC5B62"
+						background-color="#FC5B62"
+						border-color="#FC5B62"
+						:show-day="false"
+						:hour="stopTime.stopTimeH"
+						:minute="stopTime.stopTimeM"
+						:second="stopTime.stopTimeS"
+					></uni-countdowns>
+				</view>
+				<view class="lyy-b-jz flex">
+					<span class="lyy-b-word2">{{ pinkT.people }}</span>
+					<span class="lyy-b-word3">人成团,还差{{ peopleNub }}人</span>
+				</view>
+				<view class="lyy-b-jz flex">
+					<view class="cmy-user-box">
+						<view class="user-list">
+							<view class="lyy-y bg-gray"><image :src="pinkT.avatar" class="user-list-img" /></view>
+							<view class="lyy-y-word clamp">{{ pinkT.nickname }}</view>
+						</view>
+						<view class="user-list" v-for="(item , i) in people" :key='i'>
+						    <view class="lyy-y bg-gray"><image :src="item.avatar" class="user-list-img" /></view>
+						    <view class="lyy-y-word clamp">{{ item.nickname }}</view>
+						</view>
+						<view class="user-list" v-for="(l, i) in peopleNub" :key="i">
+							<view class="lyy-y bg-gray"></view>
+							<view class="lyy-y-word clamp">待邀请</view>
+						</view>
+					</view>
+				</view>
+				<view class="lyy-b-jz flex">
+					<view class="lyy-b-but" v-if="status == 1 && pinkBool == 0" @click="invitation">邀请好友参团</view>
+					<view class="lyy-b-but" v-if="status == 0&&pinkBool==0" @click="goBuy">立即加入</view>
+					<!-- <view class="lyy-b-but" @click="goBuy">立即加入</view> -->
+					<view class="lyy-b-but bg-gray" v-if="pinkBool == -1">拼团失败</view>
+					<view class="lyy-b-but" v-if="pinkBool == 1">拼团成功</view>
+				</view> 
+			</view>
+		</view>
+		<view class="lyy-hx"></view>
+		<!-- 第三部分 -->
+		<view class="lyy-c">
+			<view class="lyy-c-p">
+				<view class="lyy-c-word">
+					<view>拼团规则:</view>
+					<view>1.点击商品进入商品详情,通过超值拼团进入订单支付 页,用户付款成功后,按页面提示分享给微信好友。</view>
+					<view>2.好友通过分享,加入超值拼团,完成订单支付,待达成 拼团人数后,拼团成功。</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import uniCountdowns from '@/components/uni-countdown/uni-countdowns.vue';
+import { getCombinationLisPink } from '@/api/product.js';
+import { groupGoods } from '@/api/product.js';
+import { timeComputed } from '@/utils/rocessor.js';
+import { mapState } from 'vuex';
+// 倒计时
+export default {
+	data() {
+		return {
+			gp_id: 0, //拼团商品id
+			goods: {}, //商品信息
+			pinkT: {}, //拼团团长信息
+			people: [], //拼团成员信息
+			status: 0, //判断是否为团长
+			gid: 0,
+			user_info: {}, //当前用户信息
+			// 倒计时
+			stopTime: {
+				stopTimeH: 0,
+				stopTimeM: 0,
+				stopTimeS: 0
+			},
+			pinkBool: 0, //拼团状态0为待拼团 -1为拼团失败 1为拼团成功
+			userBool: 0, //判断用户是否已经参与拼团 0未参加 1为已参加
+			spread: '', //默认没有邀请人
+			userInfo: {} ,//当前用户信息
+			peopleNub:0
+		};
+	},
+	onLoad(e) {
+		// 保存拼团订单id
+		this.gp_id = e.id;
+		// 判断是否有人邀请
+		if (e.spread) {
+			// 存储邀请人
+			this.spread = e.spread;
+			uni.setStorageSync('spread', option.spread);
+		}
+	},
+	onShow() {
+		this.getData();
+	},
+	components: {
+		uniCountdowns
+	},
+	methods: {
+		//前往参团
+		goBuy() {
+			let _self = this;
+			uni.navigateTo({
+				url: '/pages/order/createOrder?pinkId=' + this.gp_id + '&type=pink' + '&pid=' + this.goods.product_id + '&gid=' + this.goods.id + '&merid=' + this.goods.mer_id +'&unique=' + this.goods.productValue[this.goods.productAttr[0].attr_values[0]].unique + '&isP=1'
+			});
+		},
+		//邀请参团
+		invitation() {
+			let obj = this;
+			// 判断拼团是否已经结束
+			if (obj.userBool == 0) {
+				uni.showModal({
+					title: '提示',
+					content: '该拼团已经结束!',
+					showCancel: false,
+					success: res => {},
+					fail: () => {},
+					complete: () => {}
+				});
+				return;
+			}
+			uni.navigateTo({
+				url: '/pages/product/groupBooking/inviteImg?id=' + this.pinkT.id + '&spread=' + this.userInfo.uid,
+				success: res => {},
+				fail: e => {
+					console.log(e);
+				},
+				complete: () => {}
+			});
+		},
+		// #ifdef H5
+		// 加载微信html5页面分享方法
+		shareDate() {
+			let obj = this;
+			// 判断是否微信浏览器
+			let bool = uni.getStorageSync('weichatBrowser') || '';
+			if (bool) {
+				// 过滤微信强制添加的链接地址
+				url = url.replace('?from=singlemessage', '');
+				let data = {
+					link: url, // 分享链接
+					imgUrl: obj.goodsObjact.image, // 分享图标
+					desc: obj.goodsObjact.store_info,
+					title: obj.goodsObjact.store_name,
+					success: function() {}
+				};
+				obj.weichatObj.updateAppMessageShareData(data);
+				obj.weichatObj.updateTimelineShareData(data);
+			}
+		},
+		// #endif
+		// 获取拼团信息
+		getData() {
+			let obj = this;
+			// let data = {gp_id:_self.gp_id},
+			getCombinationLisPink({}, this.gp_id).then(e => {
+				let r = e.data;
+				// 保存拼团商品详细
+				obj.goods = r.store_combination;
+				// 保存团长信息
+				obj.pinkT = r.pinkT;
+				/* 计算倒计时 */
+				obj.timeComputed(obj.pinkT.stop_time * 1000);
+				// 获取拼团用户列表
+				obj.people = r.pinkAll;
+				// 获取当前是否已参与过这个拼团
+				obj.userBool = r.userBool;
+				// 判断当前用户是否为团长
+				if (r.pinkT.uid == r.userInfo.uid) {
+					// 显示邀请好用选项
+					obj.status = 1;
+				}
+				// 保存当前登录用户信息
+				obj.userInfo = r.userInfo;
+				// 获取拼团是否已经过期
+				obj.pinkBool = r.pinkBool;
+				obj.peopleNub = obj.pinkT.people - 1 - obj.people.length;
+				// #ifdef H5
+				// 加载微信分享配置
+				this.shareDate();
+				// #endif
+			});
+		},
+		// 计算倒计时时间
+		timeComputed(da) {
+			let obj = this;
+			let stopTime = timeComputed(da);
+			obj.stopTime.stopTimeH = stopTime.hours;
+			obj.stopTime.stopTimeM = stopTime.minutes;
+			obj.stopTime.stopTimeS = stopTime.seconds;
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.box {
+	/* #ifdef APP-PLUS | MP */
+	padding-top: var(--status-bar-height);
+	/* #endif */
+}
+.lyy-c {
+	width: 100%;
+	background: rgba(255, 255, 255, 1);
+	.lyy-c-word {
+		font-size: 28rpx;
+		color: rgba(102, 102, 102, 1);
+		line-height: 50rpx;
+	}
+
+	.lyy-c-p {
+		padding: 39rpx 30rpx;
+	}
+}
+
+.lyy-wrap {
+	background-color: #f4f4f4;
+}
+
+.lyy-hx {
+	height: 14rpx;
+}
+
+.image1 {
+	width: 200rpx;
+	height: 33rpx;
+	background: url('http://lxscimg.liuniu946.com/2019-11-02_5dbd0e10a2160.png') center center no-repeat;
+	background-size: 200rpx auto;
+}
+
+.lyy-b {
+	width: 100%;
+	background-color: white;
+	.lyy-b-p {
+		padding: 30rpx 45rpx;
+		.lyy-b-word2,
+		.lyy-b-word3 {
+			font-size: 28rpx;
+			font-weight: bold;
+		}
+		.lyy-b-word2 {
+			color: #fc5b62;
+		}
+		.lyy-b-word3 {
+			color: #1d2023;
+		}
+		.lyy-b-jz {
+			width: 100%;
+			justify-content: center;
+			margin-bottom: 20rpx;
+			.lyy-y {
+				width: 80rpx;
+				height: 80rpx;
+				margin: 0px 15rpx;
+				border-radius: 40rpx;
+				overflow: hidden;
+				.user-list-img {
+					width: 100%;
+					height: 100%;
+				}
+			}
+			.lyy-y-word {
+				margin-top: 10rpx;
+				font-size: 28rpx;
+				text-align: center;
+				width: 110rpx;
+			}
+			.lyy-b-but {
+				width: 550rpx;
+				height: 80rpx;
+				background: #fc5b62;
+				border-radius: 100rpx;
+				text-align: center;
+				color: white;
+				line-height: 80rpx;
+				font-size: 32rpx;
+			}
+			.cmy-user-box {
+				.user-list {
+					display: inline-block;
+					line-height: 1;
+				}
+			}
+		}
+		.lyy-b-word {
+			text-align: center;
+			font-size: 26rpx;
+			color: rgba(29, 32, 35, 1);
+		}
+	}
+}
+
+// 商品列表样式
+.lyy-a {
+	width: 100%;
+	background-color: white;
+	.lyy-a-p {
+		padding: 22rpx 30rpx;
+		.lyy-a-f {
+			display: flex;
+			align-items: center;
+			.lyy-a-f2 {
+				flex: 1;
+			}
+			.lyy-a-tu {
+				width: 122rpx;
+				height: 122rpx;
+			}
+			.lyy-a-z {
+				padding-left: 30rpx;
+				flex-grow: 1;
+				.money-box {
+					justify-content: flex-start;
+					.lyy-a-tu2 {
+						background: rgba(255, 255, 255, 1);
+						border: 1rpx solid #fc5b62;
+						.lyy-a-tu3 {
+							background-color: #fc5b62;
+							padding: 2px 4px 0px 4px;
+							text-align: center;
+							height: 26rpx;
+							.lyy-a-tu5 {
+								width: 20rpx;
+								height: 20rpx;
+								display: block;
+							}
+						}
+						.lyy-a-tu4 {
+							margin-left: 2px;
+							font-size: 10px;
+							color: #fc5b62;
+							padding: 0px 10rpx;
+							text-align: center;
+						}
+					}
+				}
+				.lyy-a-word {
+					line-height: 56rpx;
+					.lyy-a-word3 {
+						font-size: 28rpx;
+						font-weight: bold;
+						color: #fc5b62;
+					}
+				}
+				.lyy-a-word2 {
+					font-size: 30rpx;
+					color: rgba(29, 32, 35, 1);
+				}
+			}
+		}
+	}
+}
+</style>

+ 236 - 0
pages/product/groupBooking/index.vue

@@ -0,0 +1,236 @@
+<template>
+	<view class="lyy-bg4">
+		<view class="lyy-f-a">
+			<view class="lyy-f-b lyy-flex">
+				<view class="lyy-f-c item" @click="goProduct(items)" v-for="(items, ind) in goodsList" :key="ind">
+					<view class="content">
+						<view><image :src="items.image" class="lyy-f-image" /></view>
+						<view class="lyy-f-word1 lyy-f-jl ellipsis">{{ items.title }}</view>
+						<view class="lyy-flex2">
+							<view class="lyy-flex3">
+								<view class="lyy-f-word2 lyy-f-jl">¥{{ items.price * 1 }}</view>
+							</view>
+							<view class="lyy-a-tu2 lyy-flex2">
+								<view class="lyy-a-tu3"><image src="../../../static/img/img11.png" class="lyy-a-tu5" /></view>
+								<view class="lyy-a-tu4">{{ items.people }}人拼</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<uni-load-more :status="loadingType"></uni-load-more>
+	</view>
+</template>
+
+<script>
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import { getCombinationList } from '@/api/product.js';
+export default {
+	components: {
+		uniLoadMore
+	},
+	data() {
+		return {
+			goodsList: [],
+			loadingType: 'more', //加载更多状态
+			limit: 20, //每次加载数据条数
+			page: 1 //当前页数
+		};
+	},
+	onLoad(options) {
+		this.loadData();
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		this.loadData('refresh');
+	},
+	//监听页面是否滚动到底部加载更多
+	onReachBottom() {
+		this.loadData();
+	},
+	methods: {
+		//加载商品 ,带下拉刷新和上滑加载
+		async loadData(type = 'add', loading) {
+			let obj = this;
+			let data = {
+				page: obj.page,
+				limit: obj.limit
+			};
+			//没有更多直接返回
+			if (type === 'add') {
+				if (obj.loadingType === 'nomore') {
+					return;
+				}
+				obj.loadingType = 'loading';
+			} else {
+				obj.loadingType = 'more';
+			}
+
+			// 加载商品信息
+			getCombinationList(data)
+				.then(e => {
+					if (type === 'refresh') {
+						// 清空数组
+						obj.goodsList = [];
+					}
+					obj.goodsList = obj.goodsList.concat(e.data);
+					//判断是否还有下一页,有是more  没有是nomore
+					if (obj.limit == e.data.length) {
+						obj.page++;
+						obj.loadingType = 'more';
+					} else {
+						obj.loadingType = 'nomore';
+					}
+					if (type === 'refresh') {
+						if (loading == 1) {
+							uni.hideLoading();
+						} else {
+							uni.stopPullDownRefresh();
+						}
+					}
+				})
+				.catch();
+		},
+		goProduct(e) {
+			uni.navigateTo({
+				url: '/pages/product/groupBooking/productGroup?id=' + e.id
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	height: 100%;
+}
+// 拼团列表
+.lyy-f-a {
+	margin: 0px 15px;
+
+	.lyy-flex {
+		/* 内部模块1*/
+		display: flex;
+		justify-content: space-between;
+	}
+	.lyy-f-b {
+		flex-wrap: wrap;
+		.lyy-f-c {
+			flex: 0 0 50%;
+			/* width: 50%; */
+			margin: 10px 0px 0px 0px;
+		}
+
+		.item:nth-child(2n + 1) .content {
+			margin: 0px 7.5px 0px 0px;
+			border-radius: 10px;
+		}
+	}
+
+	.lyy-f-b .content {
+		background-color: white;
+		.lyy-f-image {
+			width: 100%;
+			height: 340rpx;
+			border-radius: 10rpx 10rpx 0rpx 0rpx;
+		}
+		.ellipsis {
+			width: 165px;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
+		}
+		.lyy-f-jl {
+			padding: 5px 7px;
+		}
+		.lyy-f-word1 {
+			font-size: 12px;
+			color: rgba(50, 50, 50, 1);
+			line-height: 20px;
+			width: 300rpx;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
+		}
+	}
+
+	.item:nth-child(2n) .content {
+		margin: 0px 0 0px 7.5px;
+		border-radius: 10px;
+	}
+
+	.lyy-f-word3 {
+		font-size: 12px;
+		text-decoration: line-through;
+		color: rgba(139, 139, 139, 1);
+	}
+
+	.lyy-f-word5 {
+		font-size: 20rpx;
+		color: rgba(153, 153, 153, 1);
+		margin: 20rpx 0px 0px 0px;
+	}
+
+	.lyy-f-word4 {
+		height: 26px;
+		background: #6fb22f;
+		color: white;
+		text-align: center;
+	}
+
+	.lyy-f-d {
+		height: 24rpx;
+		border: 1px solid rgba(252, 91, 98, 1);
+		border-radius: 3px;
+		font-size: 20rpx;
+		text-align: center;
+		width: 50rpx;
+		color: rgba(252, 91, 98, 1);
+		margin: 23rpx 0rpx 0rpx 0rpx;
+		line-height: 24rpx;
+	}
+
+	.lyy-flex2 {
+		display: flex;
+		padding-right: 10rpx;
+		align-items: center;
+		.lyy-flex3 {
+			flex: 1;
+			.lyy-f-word2 {
+				font-size: 14px;
+				color: rgba(241, 13, 59, 1);
+			}
+		}
+		&.lyy-a-tu2 {
+			height: 34rpx;
+			background: rgba(255, 255, 255, 1);
+			border: 1px solid #fc5b62;
+			border-radius: 2px;
+			margin: 10rpx 0rpx;
+
+			.lyy-a-tu3 {
+				height: 30rpx;
+				background-color: #fc5b62;
+				padding: 0px 6px;
+				text-align: center;
+				.lyy-a-tu5 {
+					width: 20rpx;
+					height: 20rpx;
+					margin-top: 6rpx;
+					display: block;
+				}
+			}
+
+			.lyy-a-tu4 {
+				margin-left: 4rpx;
+				font-size: 24rpx;
+				line-height: 30rpx;
+				color: #fc5b62;
+				padding: 0px 10rpx;
+				text-align: center;
+			}
+		}
+	}
+}
+</style>

+ 75 - 0
pages/product/groupBooking/inviteImg.vue

@@ -0,0 +1,75 @@
+<template>
+	<view class="box">
+		<image class="inviteImg" :src="image" ></image>
+		<view class="lyy-b-but">长按图片下载</view>
+		<!-- <view class="lyy-b-but" @click="domImg">点击下载图片</view> -->
+	</view>
+</template>
+
+<script>
+	import { getCombinationPoster } from '@/api/product.js';
+	import { mapState } from 'vuex';
+	export default {
+		data() {
+			return {
+				image:'',//海报
+				ptId:'',//拼团id
+			}
+		},
+		computed: {
+			...mapState(['baseURL','urlFile'])
+		},
+		onLoad(option) {
+			// 保存拼团id
+			this.ptId = option.id;
+			// 保存团长id
+			this.spread = option.spread;
+			// 加载分享图
+			this.getCombinationPoster();
+		},
+		methods: {
+			// 加载海报
+			getCombinationPoster() {
+				let obj = this;
+				getCombinationPoster({
+					id:obj.ptId,
+					// #ifdef H5|APP-PLUS
+					url:obj.baseURL+obj.urlFile+'/#/pages/product/groupBooking/detail?id='+obj.ptId+'&spread='+obj.spread,
+					from:'wechat',//来源wechat公众号
+					// #endif
+					// #ifdef MP
+					from:'routine',//来源routine小程序
+					url:'/pages/product/groupBooking/detail?id='+obj.ptId
+					// #endif
+				}).then((e) => {
+					obj.image = e.data.url;
+				}).catch((e) => {
+					console.log(e);
+				})
+			}
+		},
+	}
+</script>
+
+<style lang="scss">
+	page{
+		background-color: #FFFFFF;
+		height: 100%;
+	}
+	.box{
+		.inviteImg{
+			width: 750rpx;
+			height: 1200rpx;
+		}
+	}
+	.lyy-b-but {
+		height: 80rpx;
+		background: #fc5b62;
+		border-radius: 100rpx;
+		text-align: center;
+		color: white;
+		line-height: 80rpx;
+		font-size: 32rpx;
+		margin:  0 100rpx;
+	}
+</style>

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません